@mlightcad/cad-simple-viewer 1.4.9 → 1.4.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/index.js +17930 -12377
  2. package/dist/index.umd.cjs +158 -30
  3. package/dist/libredwg-parser-worker.js +78 -31
  4. package/dist/mtext-renderer-worker.js +28725 -28097
  5. package/lib/app/AcApAnnotation.d.ts +2 -1
  6. package/lib/app/AcApAnnotation.d.ts.map +1 -1
  7. package/lib/app/AcApAnnotation.js +2 -1
  8. package/lib/app/AcApAnnotation.js.map +1 -1
  9. package/lib/app/AcApContext.d.ts.map +1 -1
  10. package/lib/app/AcApContext.js +14 -3
  11. package/lib/app/AcApContext.js.map +1 -1
  12. package/lib/app/AcApDocManager.d.ts +28 -1
  13. package/lib/app/AcApDocManager.d.ts.map +1 -1
  14. package/lib/app/AcApDocManager.js +117 -16
  15. package/lib/app/AcApDocManager.js.map +1 -1
  16. package/lib/app/AcApDocument.d.ts.map +1 -1
  17. package/lib/app/AcApDocument.js +2 -2
  18. package/lib/app/AcApDocument.js.map +1 -1
  19. package/lib/command/AcApClearMeasurementsCmd.d.ts +13 -0
  20. package/lib/command/AcApClearMeasurementsCmd.d.ts.map +1 -0
  21. package/lib/command/AcApClearMeasurementsCmd.js +86 -0
  22. package/lib/command/AcApClearMeasurementsCmd.js.map +1 -0
  23. package/lib/command/AcApLogCmd.d.ts.map +1 -1
  24. package/lib/command/AcApLogCmd.js +40 -6
  25. package/lib/command/AcApLogCmd.js.map +1 -1
  26. package/lib/command/AcApMTextCmd.d.ts +12 -0
  27. package/lib/command/AcApMTextCmd.d.ts.map +1 -0
  28. package/lib/command/AcApMTextCmd.js +120 -0
  29. package/lib/command/AcApMTextCmd.js.map +1 -0
  30. package/lib/command/AcApMeasureAngleCmd.d.ts +15 -0
  31. package/lib/command/AcApMeasureAngleCmd.d.ts.map +1 -0
  32. package/lib/command/AcApMeasureAngleCmd.js +358 -0
  33. package/lib/command/AcApMeasureAngleCmd.js.map +1 -0
  34. package/lib/command/AcApMeasureArcCmd.d.ts +25 -0
  35. package/lib/command/AcApMeasureArcCmd.d.ts.map +1 -0
  36. package/lib/command/AcApMeasureArcCmd.js +411 -0
  37. package/lib/command/AcApMeasureArcCmd.js.map +1 -0
  38. package/lib/command/AcApMeasureAreaCmd.d.ts +21 -0
  39. package/lib/command/AcApMeasureAreaCmd.d.ts.map +1 -0
  40. package/lib/command/AcApMeasureAreaCmd.js +379 -0
  41. package/lib/command/AcApMeasureAreaCmd.js.map +1 -0
  42. package/lib/command/AcApMeasureDistanceCmd.d.ts +34 -0
  43. package/lib/command/AcApMeasureDistanceCmd.d.ts.map +1 -0
  44. package/lib/command/AcApMeasureDistanceCmd.js +179 -0
  45. package/lib/command/AcApMeasureDistanceCmd.js.map +1 -0
  46. package/lib/command/AcApSwitchBgCmd.js +2 -2
  47. package/lib/command/AcApSwitchBgCmd.js.map +1 -1
  48. package/lib/command/AcApSysVarCmd.d.ts.map +1 -1
  49. package/lib/command/AcApSysVarCmd.js +16 -6
  50. package/lib/command/AcApSysVarCmd.js.map +1 -1
  51. package/lib/command/AcApZoomToBoxCmd.d.ts +1 -1
  52. package/lib/command/AcApZoomToBoxCmd.d.ts.map +1 -1
  53. package/lib/command/AcApZoomToBoxCmd.js +6 -3
  54. package/lib/command/AcApZoomToBoxCmd.js.map +1 -1
  55. package/lib/command/index.d.ts +6 -0
  56. package/lib/command/index.d.ts.map +1 -1
  57. package/lib/command/index.js +6 -0
  58. package/lib/command/index.js.map +1 -1
  59. package/lib/editor/global/AcEdConditionWaiter.d.ts +1 -1
  60. package/lib/editor/global/AcEdConditionWaiter.d.ts.map +1 -1
  61. package/lib/editor/global/AcEdConditionWaiter.js +3 -2
  62. package/lib/editor/global/AcEdConditionWaiter.js.map +1 -1
  63. package/lib/editor/input/AcEdCursorManager.js +2 -2
  64. package/lib/editor/input/AcEdCursorManager.js.map +1 -1
  65. package/lib/editor/input/AcEditor.d.ts +9 -2
  66. package/lib/editor/input/AcEditor.d.ts.map +1 -1
  67. package/lib/editor/input/AcEditor.js +13 -2
  68. package/lib/editor/input/AcEditor.js.map +1 -1
  69. package/lib/editor/input/prompt/AcEdPromptBoxOptions.d.ts +20 -0
  70. package/lib/editor/input/prompt/AcEdPromptBoxOptions.d.ts.map +1 -0
  71. package/lib/editor/input/prompt/AcEdPromptBoxOptions.js +80 -0
  72. package/lib/editor/input/prompt/AcEdPromptBoxOptions.js.map +1 -0
  73. package/lib/editor/input/prompt/index.d.ts +1 -0
  74. package/lib/editor/input/prompt/index.d.ts.map +1 -1
  75. package/lib/editor/input/prompt/index.js +1 -0
  76. package/lib/editor/input/prompt/index.js.map +1 -1
  77. package/lib/editor/input/ui/AcEdInputManager.d.ts +23 -2
  78. package/lib/editor/input/ui/AcEdInputManager.d.ts.map +1 -1
  79. package/lib/editor/input/ui/AcEdInputManager.js +114 -7
  80. package/lib/editor/input/ui/AcEdInputManager.js.map +1 -1
  81. package/lib/editor/input/ui/AcEdMTextEditor.d.ts +79 -0
  82. package/lib/editor/input/ui/AcEdMTextEditor.d.ts.map +1 -0
  83. package/lib/editor/input/ui/AcEdMTextEditor.js +157 -0
  84. package/lib/editor/input/ui/AcEdMTextEditor.js.map +1 -0
  85. package/lib/editor/input/ui/index.d.ts +2 -0
  86. package/lib/editor/input/ui/index.d.ts.map +1 -1
  87. package/lib/editor/input/ui/index.js +1 -0
  88. package/lib/editor/input/ui/index.js.map +1 -1
  89. package/lib/editor/view/AcEdBaseView.d.ts +15 -0
  90. package/lib/editor/view/AcEdBaseView.d.ts.map +1 -1
  91. package/lib/editor/view/AcEdBaseView.js +3 -1
  92. package/lib/editor/view/AcEdBaseView.js.map +1 -1
  93. package/lib/i18n/en/command.d.ts +12 -0
  94. package/lib/i18n/en/command.d.ts.map +1 -1
  95. package/lib/i18n/en/command.js +12 -0
  96. package/lib/i18n/en/command.js.map +1 -1
  97. package/lib/i18n/en/jig.d.ts +21 -0
  98. package/lib/i18n/en/jig.d.ts.map +1 -1
  99. package/lib/i18n/en/jig.js +21 -0
  100. package/lib/i18n/en/jig.js.map +1 -1
  101. package/lib/i18n/zh/command.d.ts +12 -0
  102. package/lib/i18n/zh/command.d.ts.map +1 -1
  103. package/lib/i18n/zh/command.js +12 -0
  104. package/lib/i18n/zh/command.js.map +1 -1
  105. package/lib/i18n/zh/jig.d.ts +21 -0
  106. package/lib/i18n/zh/jig.d.ts.map +1 -1
  107. package/lib/i18n/zh/jig.js +21 -0
  108. package/lib/i18n/zh/jig.js.map +1 -1
  109. package/lib/index.d.ts +2 -0
  110. package/lib/index.d.ts.map +1 -1
  111. package/lib/index.js +1 -0
  112. package/lib/index.js.map +1 -1
  113. package/lib/plugin/AcApPluginExample.d.ts.map +1 -1
  114. package/lib/plugin/AcApPluginExample.js +7 -6
  115. package/lib/plugin/AcApPluginExample.js.map +1 -1
  116. package/lib/plugin/AcApPluginManager.d.ts +4 -4
  117. package/lib/plugin/AcApPluginManager.d.ts.map +1 -1
  118. package/lib/plugin/AcApPluginManager.js +7 -6
  119. package/lib/plugin/AcApPluginManager.js.map +1 -1
  120. package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.d.ts.map +1 -1
  121. package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.js +1 -0
  122. package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.js.map +1 -1
  123. package/lib/util/AcApMeasurementUtils.d.ts +12 -0
  124. package/lib/util/AcApMeasurementUtils.d.ts.map +1 -0
  125. package/lib/util/AcApMeasurementUtils.js +36 -0
  126. package/lib/util/AcApMeasurementUtils.js.map +1 -0
  127. package/lib/util/index.d.ts +1 -0
  128. package/lib/util/index.d.ts.map +1 -1
  129. package/lib/util/index.js +1 -0
  130. package/lib/util/index.js.map +1 -1
  131. package/lib/view/AcTrLayer.d.ts +15 -0
  132. package/lib/view/AcTrLayer.d.ts.map +1 -1
  133. package/lib/view/AcTrLayer.js +13 -2
  134. package/lib/view/AcTrLayer.js.map +1 -1
  135. package/lib/view/AcTrLayout.d.ts +25 -0
  136. package/lib/view/AcTrLayout.d.ts.map +1 -1
  137. package/lib/view/AcTrLayout.js +40 -3
  138. package/lib/view/AcTrLayout.js.map +1 -1
  139. package/lib/view/AcTrLayoutView.d.ts +5 -0
  140. package/lib/view/AcTrLayoutView.d.ts.map +1 -1
  141. package/lib/view/AcTrLayoutView.js +10 -0
  142. package/lib/view/AcTrLayoutView.js.map +1 -1
  143. package/lib/view/AcTrScene.d.ts +30 -4
  144. package/lib/view/AcTrScene.d.ts.map +1 -1
  145. package/lib/view/AcTrScene.js +59 -3
  146. package/lib/view/AcTrScene.js.map +1 -1
  147. package/lib/view/AcTrView2d.d.ts +17 -4
  148. package/lib/view/AcTrView2d.d.ts.map +1 -1
  149. package/lib/view/AcTrView2d.js +64 -15
  150. package/lib/view/AcTrView2d.js.map +1 -1
  151. package/package.json +7 -6
@@ -1 +1 @@
1
- {"version":3,"file":"AcApLogCmd.d.ts","sourceRoot":"","sources":["../../src/command/AcApLogCmd.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGxC;;;GAGG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACnC,OAAO,CAAC,OAAO,EAAE,WAAW;IAMlC,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,UAAU;IAqDlB,OAAO,CAAC,oBAAoB;CAG7B"}
1
+ {"version":3,"file":"AcApLogCmd.d.ts","sourceRoot":"","sources":["../../src/command/AcApLogCmd.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGxC;;;GAGG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACnC,OAAO,CAAC,OAAO,EAAE,WAAW;IAMlC,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,UAAU;IA+FlB,OAAO,CAAC,oBAAoB;CAG7B"}
@@ -49,7 +49,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
49
49
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
50
50
  }
51
51
  };
52
- import { AcCmPerformanceCollector } from '@mlightcad/data-model';
52
+ import { AcCmPerformanceCollector, log } from '@mlightcad/data-model';
53
53
  import { AcEdCommand } from '../command';
54
54
  /**
55
55
  * This is an internal command used to log some debug information in console.
@@ -75,17 +75,19 @@ var AcApLogCmd = /** @class */ (function (_super) {
75
75
  context.view.selectionSet.ids.forEach(function (id) {
76
76
  var entity = modelSpace.getIdAt(id);
77
77
  if (entity)
78
- console.log(entity);
78
+ log.info(entity);
79
79
  });
80
80
  };
81
81
  AcApLogCmd.prototype.printStats = function (context) {
82
- var layouts = context.view.stats.layouts;
83
- console.log('Geometry information in current drawing:');
82
+ var stats = context.view.stats;
83
+ var layouts = stats.layouts;
84
+ log.info('Geometry information in current drawing:');
84
85
  var _loop_1 = function (index) {
85
86
  console.group("Layout: ".concat(index));
86
87
  var layout = layouts[index];
87
- var sizes = [0, 0, 0, 0, 0, 0];
88
- var totals = [0, 0, 0, 0, 0, 0];
88
+ var sizes = [0, 0, 0, 0, 0, 0, 0];
89
+ var totals = [0, 0, 0, 0, 0, 0, 0];
90
+ var unbatchedCountTotal = 0;
89
91
  var data = layout.layers.map(function (layer) {
90
92
  sizes[0] = layer.line.indexed.geometrySize / 1024;
91
93
  sizes[1] = layer.line.nonIndexed.geometrySize / 1024;
@@ -93,12 +95,15 @@ var AcApLogCmd = /** @class */ (function (_super) {
93
95
  sizes[3] = layer.mesh.nonIndexed.geometrySize / 1024;
94
96
  sizes[4] = layer.point.indexed.geometrySize / 1024;
95
97
  sizes[5] = layer.point.nonIndexed.geometrySize / 1024;
98
+ sizes[6] = layer.unbatched.geometrySize / 1024;
96
99
  totals[0] += sizes[0];
97
100
  totals[1] += sizes[1];
98
101
  totals[2] += sizes[2];
99
102
  totals[3] += sizes[3];
100
103
  totals[4] += sizes[4];
101
104
  totals[5] += sizes[5];
105
+ totals[6] += sizes[6];
106
+ unbatchedCountTotal += layer.unbatched.count;
102
107
  return {
103
108
  name: layer.name,
104
109
  'idx line (KB)': sizes[0].toFixed(1),
@@ -107,6 +112,12 @@ var AcApLogCmd = /** @class */ (function (_super) {
107
112
  'mesh (KB)': sizes[3].toFixed(1),
108
113
  'idx point (KB)': sizes[4].toFixed(1),
109
114
  'point (KB)': sizes[5].toFixed(1),
115
+ 'unbatched (KB)': sizes[6].toFixed(1),
116
+ 'unbatched count': layer.unbatched.count,
117
+ 'unbatched line': layer.unbatched.byType.line,
118
+ 'unbatched mesh': layer.unbatched.byType.mesh,
119
+ 'unbatched point': layer.unbatched.byType.point,
120
+ 'unbatched other': layer.unbatched.byType.other,
110
121
  'total geo (KB)': (layer.summary.totalGeometrySize / 1024).toFixed(1),
111
122
  'total mapping (KB)': (layer.summary.totalMappingSize / 1024).toFixed(1)
112
123
  };
@@ -119,10 +130,33 @@ var AcApLogCmd = /** @class */ (function (_super) {
119
130
  'mesh (KB)': totals[3].toFixed(1),
120
131
  'idx point (KB)': totals[4].toFixed(1),
121
132
  'point (KB)': totals[5].toFixed(1),
133
+ 'unbatched (KB)': totals[6].toFixed(1),
134
+ 'unbatched count': unbatchedCountTotal,
135
+ 'unbatched line': layout.summary.totalSize.unbatchedByType.line,
136
+ 'unbatched mesh': layout.summary.totalSize.unbatchedByType.mesh,
137
+ 'unbatched point': layout.summary.totalSize.unbatchedByType.point,
138
+ 'unbatched other': layout.summary.totalSize.unbatchedByType.other,
122
139
  'total geo (KB)': (layout.summary.totalSize.geometry / 1024).toFixed(1),
123
140
  'total mapping (KB)': (layout.summary.totalSize.mapping / 1024).toFixed(1)
124
141
  });
125
142
  console.table(data);
143
+ console.table([
144
+ {
145
+ layoutCount: stats.summary.layoutCount,
146
+ entityCount: stats.summary.entityCount,
147
+ 'scene line (KB)': (stats.summary.totalSize.line / 1024).toFixed(1),
148
+ 'scene mesh (KB)': (stats.summary.totalSize.mesh / 1024).toFixed(1),
149
+ 'scene point (KB)': (stats.summary.totalSize.point / 1024).toFixed(1),
150
+ 'scene unbatched (KB)': (stats.summary.totalSize.unbatched / 1024).toFixed(1),
151
+ 'scene unbatched count': stats.summary.totalSize.unbatchedCount,
152
+ 'scene unbatched line': stats.summary.totalSize.unbatchedByType.line,
153
+ 'scene unbatched mesh': stats.summary.totalSize.unbatchedByType.mesh,
154
+ 'scene unbatched point': stats.summary.totalSize.unbatchedByType.point,
155
+ 'scene unbatched other': stats.summary.totalSize.unbatchedByType.other,
156
+ 'scene total geo (KB)': (stats.summary.totalSize.geometry / 1024).toFixed(1),
157
+ 'scene total mapping (KB)': (stats.summary.totalSize.mapping / 1024).toFixed(1)
158
+ }
159
+ ]);
126
160
  console.groupEnd();
127
161
  };
128
162
  for (var index = 0; index < layouts.length; ++index) {
@@ -1 +1 @@
1
- {"version":3,"file":"AcApLogCmd.js","sourceRoot":"","sources":["../../src/command/AcApLogCmd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AcApLogCmd.js","sourceRoot":"","sources":["../../src/command/AcApLogCmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { AcApContext } from '../app';
2
+ import { AcEdCommand } from '../editor';
3
+ /**
4
+ * Command to create one mtext entity.
5
+ */
6
+ export declare class AcApMTextCmd extends AcEdCommand {
7
+ private readonly mtextEditor;
8
+ constructor();
9
+ execute(context: AcApContext): Promise<void>;
10
+ private pixelsToWorldY;
11
+ }
12
+ //# sourceMappingURL=AcApMTextCmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcApMTextCmd.d.ts","sourceRoot":"","sources":["../../src/command/AcApMTextCmd.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAkB,MAAM,QAAQ,CAAA;AACpD,OAAO,EACL,WAAW,EAIZ,MAAM,WAAW,CAAA;AAIlB;;GAEG;AACH,qBAAa,YAAa,SAAQ,WAAW;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;;IAO9C,OAAO,CAAC,OAAO,EAAE,WAAW;IA0ClC,OAAO,CAAC,cAAc;CAKvB"}
@@ -0,0 +1,120 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
23
+ });
24
+ };
25
+ var __generator = (this && this.__generator) || function (thisArg, body) {
26
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
27
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
28
+ function verb(n) { return function (v) { return step([n, v]); }; }
29
+ function step(op) {
30
+ if (f) throw new TypeError("Generator is already executing.");
31
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
32
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
33
+ if (y = 0, t) op = [op[0] & 2, t.value];
34
+ switch (op[0]) {
35
+ case 0: case 1: t = op; break;
36
+ case 4: _.label++; return { value: op[1], done: false };
37
+ case 5: _.label++; y = op[1]; op = [0]; continue;
38
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
39
+ default:
40
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
41
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
42
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
43
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
44
+ if (t[2]) _.ops.pop();
45
+ _.trys.pop(); continue;
46
+ }
47
+ op = body.call(thisArg, _);
48
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
49
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
50
+ }
51
+ };
52
+ import { AcDbMText } from '@mlightcad/data-model';
53
+ import { AcApDocManager } from '../app';
54
+ import { AcEdCommand, AcEdMTextEditor, AcEdOpenMode, AcEdPromptBoxOptions } from '../editor';
55
+ import { AcApI18n } from '../i18n';
56
+ /**
57
+ * Command to create one mtext entity.
58
+ */
59
+ var AcApMTextCmd = /** @class */ (function (_super) {
60
+ __extends(AcApMTextCmd, _super);
61
+ function AcApMTextCmd() {
62
+ var _this = _super.call(this) || this;
63
+ _this.mtextEditor = new AcEdMTextEditor();
64
+ _this.mode = AcEdOpenMode.Write;
65
+ return _this;
66
+ }
67
+ AcApMTextCmd.prototype.execute = function (context) {
68
+ return __awaiter(this, void 0, void 0, function () {
69
+ var boxPrompt, box, width, view, textHeight, location, toolbarFontFamilies, result, contents, mtext;
70
+ return __generator(this, function (_a) {
71
+ switch (_a.label) {
72
+ case 0:
73
+ boxPrompt = new AcEdPromptBoxOptions(AcApI18n.t('main.inputManager.firstCorner'), AcApI18n.t('main.inputManager.secondCorner'));
74
+ boxPrompt.useBasePoint = false;
75
+ boxPrompt.useDashedLine = false;
76
+ return [4 /*yield*/, AcApDocManager.instance.editor.getBox(boxPrompt)];
77
+ case 1:
78
+ box = _a.sent();
79
+ width = Math.max(Math.abs(box.max.x - box.min.x), 1e-4);
80
+ view = context.view;
81
+ textHeight = this.pixelsToWorldY(view, 24);
82
+ location = { x: box.min.x, y: box.max.y, z: 0 };
83
+ toolbarFontFamilies = Array.from(new Set(AcApDocManager.instance.avaiableFonts
84
+ .flatMap(function (fontInfo) { return fontInfo.name; })
85
+ .map(function (fontName) { return fontName.trim(); })
86
+ .filter(function (fontName) { return fontName.length > 0; })));
87
+ return [4 /*yield*/, this.mtextEditor.open({
88
+ view: view,
89
+ location: location,
90
+ width: width,
91
+ textHeight: textHeight,
92
+ toolbarFontFamilies: toolbarFontFamilies
93
+ })];
94
+ case 2:
95
+ result = _a.sent();
96
+ if (!result)
97
+ return [2 /*return*/];
98
+ contents = result.contents.trim();
99
+ if (!contents)
100
+ return [2 /*return*/];
101
+ mtext = new AcDbMText();
102
+ mtext.location = location;
103
+ mtext.contents = result.contents;
104
+ mtext.width = result.width;
105
+ mtext.height = result.height;
106
+ context.doc.database.tables.blockTable.modelSpace.appendEntity(mtext);
107
+ return [2 /*return*/];
108
+ }
109
+ });
110
+ });
111
+ };
112
+ AcApMTextCmd.prototype.pixelsToWorldY = function (view, pixels) {
113
+ var p0 = view.screenToWorld({ x: 0, y: 0 });
114
+ var p1 = view.screenToWorld({ x: 0, y: pixels });
115
+ return Math.max(Math.abs(p1.y - p0.y), 1e-4);
116
+ };
117
+ return AcApMTextCmd;
118
+ }(AcEdCommand));
119
+ export { AcApMTextCmd };
120
+ //# sourceMappingURL=AcApMTextCmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcApMTextCmd.js","sourceRoot":"","sources":["../../src/command/AcApMTextCmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { AcApContext } from '../app';
2
+ import { AcEdCommand } from '../editor';
3
+ /**
4
+ * Command that measures the angle between two arms sharing a common vertex.
5
+ *
6
+ * Prompts the user to pick three world points: the vertex, a point on the
7
+ * first arm, and a point on the second arm. After the second arm is confirmed,
8
+ * transient CAD lines are added for both arms and persistent DOM overlays
9
+ * (arc canvas + dots + badge) are placed via {@link AcTrHtmlTransientManager}.
10
+ */
11
+ export declare class AcApMeasureAngleCmd extends AcEdCommand {
12
+ constructor();
13
+ execute(context: AcApContext): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=AcApMeasureAngleCmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcApMeasureAngleCmd.d.ts","sourceRoot":"","sources":["../../src/command/AcApMeasureAngleCmd.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAkB,MAAM,QAAQ,CAAA;AACpD,OAAO,EAEL,WAAW,EAIZ,MAAM,WAAW,CAAA;AAyNlB;;;;;;;GAOG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;;IAM5C,OAAO,CAAC,OAAO,EAAE,WAAW;CAgInC"}
@@ -0,0 +1,358 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
23
+ });
24
+ };
25
+ var __generator = (this && this.__generator) || function (thisArg, body) {
26
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
27
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
28
+ function verb(n) { return function (v) { return step([n, v]); }; }
29
+ function step(op) {
30
+ if (f) throw new TypeError("Generator is already executing.");
31
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
32
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
33
+ if (y = 0, t) op = [op[0] & 2, t.value];
34
+ switch (op[0]) {
35
+ case 0: case 1: t = op; break;
36
+ case 4: _.label++; return { value: op[1], done: false };
37
+ case 5: _.label++; y = op[1]; op = [0]; continue;
38
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
39
+ default:
40
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
41
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
42
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
43
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
44
+ if (t[2]) _.ops.pop();
45
+ _.trys.pop(); continue;
46
+ }
47
+ op = body.call(thisArg, _);
48
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
49
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
50
+ }
51
+ };
52
+ import { AcDbLine, AcGiLineWeight } from '@mlightcad/data-model';
53
+ import { AcApDocManager } from '../app';
54
+ import { AcEdCommand, AcEdOpenMode, AcEdPreviewJig, AcEdPromptPointOptions } from '../editor';
55
+ import { AcApI18n } from '../i18n';
56
+ import { colorToCss, makeBadge, makeDot, measurementColor } from '../util';
57
+ import { registerMeasurementCleanup } from './AcApClearMeasurementsCmd';
58
+ /** Returns the angle in degrees between two arms sharing a common vertex. */
59
+ function calcAngleDeg(vertex, arm1, arm2) {
60
+ var dx1 = arm1.x - vertex.x;
61
+ var dy1 = arm1.y - vertex.y;
62
+ var dx2 = arm2.x - vertex.x;
63
+ var dy2 = arm2.y - vertex.y;
64
+ var dot = dx1 * dx2 + dy1 * dy2;
65
+ var cross = dx1 * dy2 - dy1 * dx2;
66
+ var rad = Math.atan2(Math.abs(cross), dot);
67
+ return (rad * 180) / Math.PI;
68
+ }
69
+ /** Normalises an angle into [0, 2pi). */
70
+ var normaliseAngle = function (a) {
71
+ return ((a % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);
72
+ };
73
+ /**
74
+ * Draws the first arm (vertex->arm1) as a dashed line on a canvas overlay,
75
+ * used during second arm selection so the user can see the first arm.
76
+ */
77
+ function drawArm1OnCanvas(canvas, view, vertex, arm1, color) {
78
+ var rect = view.canvas.getBoundingClientRect();
79
+ var dpr = window.devicePixelRatio || 1;
80
+ var w = Math.round(rect.width);
81
+ var h = Math.round(rect.height);
82
+ canvas.style.left = "".concat(rect.left, "px");
83
+ canvas.style.top = "".concat(rect.top, "px");
84
+ canvas.style.width = "".concat(w, "px");
85
+ canvas.style.height = "".concat(h, "px");
86
+ if (canvas.width !== w * dpr || canvas.height !== h * dpr) {
87
+ canvas.width = w * dpr;
88
+ canvas.height = h * dpr;
89
+ }
90
+ var ctx = canvas.getContext('2d');
91
+ if (!ctx)
92
+ return;
93
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
94
+ ctx.save();
95
+ ctx.scale(dpr, dpr);
96
+ var sv = view.worldToScreen(vertex);
97
+ var sa = view.worldToScreen(arm1);
98
+ ctx.beginPath();
99
+ ctx.moveTo(sv.x, sv.y);
100
+ ctx.lineTo(sa.x, sa.y);
101
+ ctx.strokeStyle = colorToCss(color);
102
+ ctx.lineWidth = 2;
103
+ ctx.setLineDash([8, 5]);
104
+ ctx.stroke();
105
+ ctx.setLineDash([]);
106
+ ctx.restore();
107
+ }
108
+ /**
109
+ * Draws an arc between two arms on a canvas overlay for the persistent
110
+ * angle visualization.
111
+ */
112
+ function drawAngleArcOnCanvas(canvas, view, vertex, arm1, arm2, color) {
113
+ var rect = view.canvas.getBoundingClientRect();
114
+ var dpr = window.devicePixelRatio || 1;
115
+ var w = Math.round(rect.width);
116
+ var h = Math.round(rect.height);
117
+ canvas.style.left = "".concat(rect.left, "px");
118
+ canvas.style.top = "".concat(rect.top, "px");
119
+ canvas.style.width = "".concat(w, "px");
120
+ canvas.style.height = "".concat(h, "px");
121
+ if (canvas.width !== w * dpr || canvas.height !== h * dpr) {
122
+ canvas.width = w * dpr;
123
+ canvas.height = h * dpr;
124
+ }
125
+ var ctx = canvas.getContext('2d');
126
+ if (!ctx)
127
+ return;
128
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
129
+ ctx.save();
130
+ ctx.scale(dpr, dpr);
131
+ var sv = view.worldToScreen(vertex);
132
+ var sa1 = view.worldToScreen(arm1);
133
+ var sa2 = view.worldToScreen(arm2);
134
+ var len1 = Math.hypot(sa1.x - sv.x, sa1.y - sv.y);
135
+ var len2 = Math.hypot(sa2.x - sv.x, sa2.y - sv.y);
136
+ var arcR = Math.max(Math.min(len1, len2) * 0.3, 15);
137
+ var startAngle = Math.atan2(sa1.y - sv.y, sa1.x - sv.x);
138
+ var endAngle = Math.atan2(sa2.y - sv.y, sa2.x - sv.x);
139
+ var antiClockwise = normaliseAngle(endAngle - startAngle) > Math.PI;
140
+ ctx.beginPath();
141
+ ctx.arc(sv.x, sv.y, arcR, startAngle, endAngle, antiClockwise);
142
+ ctx.strokeStyle = colorToCss(color);
143
+ ctx.lineWidth = 2;
144
+ ctx.stroke();
145
+ ctx.restore();
146
+ }
147
+ /**
148
+ * Simple rubber-band jig for picking arm1: draws a transient line
149
+ * from vertex to cursor.
150
+ */
151
+ var AcApMeasureArm1Jig = /** @class */ (function (_super) {
152
+ __extends(AcApMeasureArm1Jig, _super);
153
+ function AcApMeasureArm1Jig(view, vertex, color) {
154
+ var _this = _super.call(this, view) || this;
155
+ _this._line = new AcDbLine(vertex, vertex);
156
+ _this._line.color = color;
157
+ _this._line.lineWeight = AcGiLineWeight.LineWeight070;
158
+ return _this;
159
+ }
160
+ Object.defineProperty(AcApMeasureArm1Jig.prototype, "entity", {
161
+ get: function () {
162
+ return this._line;
163
+ },
164
+ enumerable: false,
165
+ configurable: true
166
+ });
167
+ AcApMeasureArm1Jig.prototype.update = function (p) {
168
+ this._line.endPoint = p;
169
+ };
170
+ return AcApMeasureArm1Jig;
171
+ }(AcEdPreviewJig));
172
+ /**
173
+ * Preview jig for picking arm2: draws a transient line from vertex to
174
+ * cursor, redraws the first arm as a dashed canvas line, and shows a live
175
+ * angle badge.
176
+ */
177
+ var AcApMeasureAngleJig = /** @class */ (function (_super) {
178
+ __extends(AcApMeasureAngleJig, _super);
179
+ function AcApMeasureAngleJig(view, vertex, arm1, canvas, color) {
180
+ var _this = _super.call(this, view) || this;
181
+ _this._vertex = vertex;
182
+ _this._arm1 = arm1;
183
+ _this._view = view;
184
+ _this._canvas = canvas;
185
+ _this._color = color;
186
+ _this._line = new AcDbLine(vertex, vertex);
187
+ _this._line.color = color;
188
+ _this._line.lineWeight = AcGiLineWeight.LineWeight070;
189
+ _this._badge = document.createElement('div');
190
+ _this._badge.style.cssText =
191
+ "position:fixed;background:rgba(255,255,255,0.95);color:".concat(colorToCss(color), ";") +
192
+ 'font-size:13px;font-family:sans-serif;font-weight:500;' +
193
+ 'padding:3px 14px;border-radius:20px;pointer-events:none;' +
194
+ 'transform:translate(-50%,-50%);white-space:nowrap;' +
195
+ 'box-shadow:0 1px 4px rgba(0,0,0,0.2);z-index:99999;display:none;';
196
+ document.body.appendChild(_this._badge);
197
+ return _this;
198
+ }
199
+ Object.defineProperty(AcApMeasureAngleJig.prototype, "entity", {
200
+ get: function () {
201
+ return this._line;
202
+ },
203
+ enumerable: false,
204
+ configurable: true
205
+ });
206
+ AcApMeasureAngleJig.prototype.update = function (p) {
207
+ this._line.endPoint = p;
208
+ // Redraw the first arm dashed line (stays in sync with pan/zoom)
209
+ drawArm1OnCanvas(this._canvas, this._view, this._vertex, this._arm1, this._color);
210
+ var deg = calcAngleDeg(this._vertex, this._arm1, p);
211
+ this._badge.textContent = "~ ".concat(deg.toFixed(2), "\u00B0");
212
+ this._badge.style.display = 'block';
213
+ var rect = this._view.canvas.getBoundingClientRect();
214
+ var sv = this._view.worldToScreen(this._vertex);
215
+ this._badge.style.left = "".concat(sv.x + rect.left, "px");
216
+ this._badge.style.top = "".concat(sv.y + rect.top - 30, "px");
217
+ };
218
+ AcApMeasureAngleJig.prototype.end = function () {
219
+ _super.prototype.end.call(this);
220
+ this._badge.remove();
221
+ };
222
+ return AcApMeasureAngleJig;
223
+ }(AcEdPreviewJig));
224
+ /**
225
+ * Command that measures the angle between two arms sharing a common vertex.
226
+ *
227
+ * Prompts the user to pick three world points: the vertex, a point on the
228
+ * first arm, and a point on the second arm. After the second arm is confirmed,
229
+ * transient CAD lines are added for both arms and persistent DOM overlays
230
+ * (arc canvas + dots + badge) are placed via {@link AcTrHtmlTransientManager}.
231
+ */
232
+ var AcApMeasureAngleCmd = /** @class */ (function (_super) {
233
+ __extends(AcApMeasureAngleCmd, _super);
234
+ function AcApMeasureAngleCmd() {
235
+ var _this = _super.call(this) || this;
236
+ _this.mode = AcEdOpenMode.Read;
237
+ return _this;
238
+ }
239
+ AcApMeasureAngleCmd.prototype.execute = function (context) {
240
+ return __awaiter(this, void 0, void 0, function () {
241
+ var editor, color, vertexPrompt, vertex, arm1Prompt, arm1, armCanvas, redrawOnViewChange, arm2Prompt, arm2, _a, degrees, line1, line2, persistCanvas, redrawPersist, htManager, id, dx1, dy1, dx2, dy2, wLen1, wLen2, u1x, u1y, u2x, u2y, bx, by, bLen, badgeOffset, badgeWorld;
242
+ return __generator(this, function (_b) {
243
+ switch (_b.label) {
244
+ case 0:
245
+ editor = AcApDocManager.instance.editor;
246
+ color = measurementColor(context.doc.database);
247
+ vertexPrompt = new AcEdPromptPointOptions(AcApI18n.t('jig.measureAngle.vertex'));
248
+ return [4 /*yield*/, editor.getPoint(vertexPrompt)
249
+ // Pick first arm endpoint (jig provides preview line from vertex)
250
+ ];
251
+ case 1:
252
+ vertex = _b.sent();
253
+ arm1Prompt = new AcEdPromptPointOptions(AcApI18n.t('jig.measureAngle.arm1'));
254
+ arm1Prompt.useBasePoint = true;
255
+ arm1Prompt.jig = new AcApMeasureArm1Jig(context.view, vertex, color);
256
+ return [4 /*yield*/, editor.getPoint(arm1Prompt)
257
+ // Construction-phase canvas for the first arm dashed line
258
+ ];
259
+ case 2:
260
+ arm1 = _b.sent();
261
+ armCanvas = document.createElement('canvas');
262
+ armCanvas.style.cssText =
263
+ 'position:fixed;pointer-events:none;z-index:99997;';
264
+ document.body.appendChild(armCanvas);
265
+ drawArm1OnCanvas(armCanvas, context.view, vertex, arm1, color);
266
+ redrawOnViewChange = function () {
267
+ return drawArm1OnCanvas(armCanvas, context.view, vertex, arm1, color);
268
+ };
269
+ context.view.events.viewChanged.addEventListener(redrawOnViewChange);
270
+ arm2Prompt = new AcEdPromptPointOptions(AcApI18n.t('jig.measureAngle.arm2'));
271
+ arm2Prompt.jig = new AcApMeasureAngleJig(context.view, vertex, arm1, armCanvas, color);
272
+ _b.label = 3;
273
+ case 3:
274
+ _b.trys.push([3, 5, , 6]);
275
+ return [4 /*yield*/, editor.getPoint(arm2Prompt)];
276
+ case 4:
277
+ arm2 = _b.sent();
278
+ return [3 /*break*/, 6];
279
+ case 5:
280
+ _a = _b.sent();
281
+ // User pressed ESC / cancelled — clean up construction-phase DOM
282
+ context.view.events.viewChanged.removeEventListener(redrawOnViewChange);
283
+ armCanvas.remove();
284
+ return [2 /*return*/];
285
+ case 6:
286
+ // Clean up construction-phase canvas
287
+ context.view.events.viewChanged.removeEventListener(redrawOnViewChange);
288
+ armCanvas.remove();
289
+ degrees = calcAngleDeg(vertex, arm1, arm2);
290
+ line1 = new AcDbLine(vertex, arm1);
291
+ line1.color = color;
292
+ line1.lineWeight = AcGiLineWeight.LineWeight070;
293
+ context.view.addTransientEntity(line1);
294
+ line2 = new AcDbLine(vertex, arm2);
295
+ line2.color = color;
296
+ line2.lineWeight = AcGiLineWeight.LineWeight070;
297
+ context.view.addTransientEntity(line2);
298
+ persistCanvas = document.createElement('canvas');
299
+ persistCanvas.style.cssText =
300
+ 'position:fixed;pointer-events:none;z-index:99997;';
301
+ document.body.appendChild(persistCanvas);
302
+ drawAngleArcOnCanvas(persistCanvas, context.view, vertex, arm1, arm2, color);
303
+ redrawPersist = function () {
304
+ return drawAngleArcOnCanvas(persistCanvas, context.view, vertex, arm1, arm2, color);
305
+ };
306
+ context.view.events.viewChanged.addEventListener(redrawPersist);
307
+ htManager = AcApDocManager.instance.curView.htmlTransientManager;
308
+ id = "angle-".concat(Date.now());
309
+ htManager.add("".concat(id, "-dotV"), makeDot(color), vertex, 'measurement');
310
+ htManager.add("".concat(id, "-dot1"), makeDot(color), arm1, 'measurement');
311
+ htManager.add("".concat(id, "-dot2"), makeDot(color), arm2, 'measurement');
312
+ dx1 = arm1.x - vertex.x;
313
+ dy1 = arm1.y - vertex.y;
314
+ dx2 = arm2.x - vertex.x;
315
+ dy2 = arm2.y - vertex.y;
316
+ wLen1 = Math.hypot(dx1, dy1);
317
+ wLen2 = Math.hypot(dx2, dy2);
318
+ u1x = wLen1 > 0 ? dx1 / wLen1 : 1;
319
+ u1y = wLen1 > 0 ? dy1 / wLen1 : 0;
320
+ u2x = wLen2 > 0 ? dx2 / wLen2 : 1;
321
+ u2y = wLen2 > 0 ? dy2 / wLen2 : 0;
322
+ bx = u1x + u2x;
323
+ by = u1y + u2y;
324
+ bLen = Math.hypot(bx, by);
325
+ if (bLen > 0) {
326
+ bx /= bLen;
327
+ by /= bLen;
328
+ }
329
+ else {
330
+ // Arms are exactly opposite — use perpendicular
331
+ bx = -u1y;
332
+ by = u1x;
333
+ }
334
+ badgeOffset = Math.max(Math.min(wLen1, wLen2) * 0.4, Math.max(wLen1, wLen2) * 0.15);
335
+ badgeWorld = {
336
+ x: vertex.x + bx * badgeOffset,
337
+ y: vertex.y + by * badgeOffset
338
+ };
339
+ htManager.add("".concat(id, "-badge"), makeBadge(color, "".concat(degrees.toFixed(2), "\u00B0")), badgeWorld, 'measurement');
340
+ registerMeasurementCleanup(function () {
341
+ context.view.removeTransientEntity(line1.objectId);
342
+ context.view.removeTransientEntity(line2.objectId);
343
+ persistCanvas.remove();
344
+ context.view.events.viewChanged.removeEventListener(redrawPersist);
345
+ htManager.remove("".concat(id, "-dotV"));
346
+ htManager.remove("".concat(id, "-dot1"));
347
+ htManager.remove("".concat(id, "-dot2"));
348
+ htManager.remove("".concat(id, "-badge"));
349
+ });
350
+ return [2 /*return*/];
351
+ }
352
+ });
353
+ });
354
+ };
355
+ return AcApMeasureAngleCmd;
356
+ }(AcEdCommand));
357
+ export { AcApMeasureAngleCmd };
358
+ //# sourceMappingURL=AcApMeasureAngleCmd.js.map