@mlightcad/cad-simple-viewer 1.5.0 → 1.5.1

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 (159) hide show
  1. package/dist/index.js +11070 -34695
  2. package/dist/index.umd.cjs +39 -52
  3. package/dist/libredwg-parser-worker.js +3955 -7422
  4. package/dist/mtext-renderer-worker.js +978 -789
  5. package/dist/viewer-runtime.iife.js +3879 -0
  6. package/lib/app/AcApAnnotation.js +4 -4
  7. package/lib/app/AcApAnnotation.js.map +1 -1
  8. package/lib/app/AcApDocManager.d.ts +45 -1
  9. package/lib/app/AcApDocManager.d.ts.map +1 -1
  10. package/lib/app/AcApDocManager.js +127 -10
  11. package/lib/app/AcApDocManager.js.map +1 -1
  12. package/lib/command/AcApZoomCmd.js +3 -3
  13. package/lib/command/AcApZoomCmd.js.map +1 -1
  14. package/lib/command/convert/AcApExportHtmlCmd.d.ts +22 -0
  15. package/lib/command/convert/AcApExportHtmlCmd.d.ts.map +1 -0
  16. package/lib/command/convert/AcApExportHtmlCmd.js +93 -0
  17. package/lib/command/convert/AcApExportHtmlCmd.js.map +1 -0
  18. package/lib/command/convert/AcApHtmlConvertor.d.ts +61 -0
  19. package/lib/command/convert/AcApHtmlConvertor.d.ts.map +1 -0
  20. package/lib/command/convert/AcApHtmlConvertor.js +223 -0
  21. package/lib/command/convert/AcApHtmlConvertor.js.map +1 -0
  22. package/lib/command/convert/AcApHtmlSnapshotBuilder.d.ts +65 -0
  23. package/lib/command/convert/AcApHtmlSnapshotBuilder.d.ts.map +1 -0
  24. package/lib/command/convert/AcApHtmlSnapshotBuilder.js +301 -0
  25. package/lib/command/convert/AcApHtmlSnapshotBuilder.js.map +1 -0
  26. package/lib/command/convert/index.d.ts +3 -0
  27. package/lib/command/convert/index.d.ts.map +1 -1
  28. package/lib/command/convert/index.js +3 -0
  29. package/lib/command/convert/index.js.map +1 -1
  30. package/lib/command/draw/AcApArcCmd.d.ts.map +1 -1
  31. package/lib/command/draw/AcApArcCmd.js +46 -20
  32. package/lib/command/draw/AcApArcCmd.js.map +1 -1
  33. package/lib/command/draw/AcApCircleCmd.d.ts.map +1 -1
  34. package/lib/command/draw/AcApCircleCmd.js +5 -6
  35. package/lib/command/draw/AcApCircleCmd.js.map +1 -1
  36. package/lib/command/draw/AcApEllipseCmd.d.ts.map +1 -1
  37. package/lib/command/draw/AcApEllipseCmd.js +4 -6
  38. package/lib/command/draw/AcApEllipseCmd.js.map +1 -1
  39. package/lib/command/draw/AcApMLineCmd.d.ts.map +1 -1
  40. package/lib/command/draw/AcApMLineCmd.js +4 -7
  41. package/lib/command/draw/AcApMLineCmd.js.map +1 -1
  42. package/lib/command/draw/AcApMTextCmd.d.ts.map +1 -1
  43. package/lib/command/draw/AcApMTextCmd.js +3 -1
  44. package/lib/command/draw/AcApMTextCmd.js.map +1 -1
  45. package/lib/command/draw/AcApPolygonCmd.d.ts.map +1 -1
  46. package/lib/command/draw/AcApPolygonCmd.js +4 -5
  47. package/lib/command/draw/AcApPolygonCmd.js.map +1 -1
  48. package/lib/command/draw/AcApPolylineCmd.d.ts +49 -0
  49. package/lib/command/draw/AcApPolylineCmd.d.ts.map +1 -1
  50. package/lib/command/draw/AcApPolylineCmd.js +200 -18
  51. package/lib/command/draw/AcApPolylineCmd.js.map +1 -1
  52. package/lib/command/draw/AcApRayCmd.d.ts.map +1 -1
  53. package/lib/command/draw/AcApRayCmd.js +2 -3
  54. package/lib/command/draw/AcApRayCmd.js.map +1 -1
  55. package/lib/command/draw/AcApRectCmd.d.ts.map +1 -1
  56. package/lib/command/draw/AcApRectCmd.js +9 -10
  57. package/lib/command/draw/AcApRectCmd.js.map +1 -1
  58. package/lib/command/draw/AcApSplineCmd.d.ts.map +1 -1
  59. package/lib/command/draw/AcApSplineCmd.js +3 -6
  60. package/lib/command/draw/AcApSplineCmd.js.map +1 -1
  61. package/lib/command/draw/AcApXLineCmd.d.ts.map +1 -1
  62. package/lib/command/draw/AcApXLineCmd.js +2 -3
  63. package/lib/command/draw/AcApXLineCmd.js.map +1 -1
  64. package/lib/command/measure/AcApClearMeasurementsCmd.d.ts +11 -0
  65. package/lib/command/measure/AcApClearMeasurementsCmd.d.ts.map +1 -1
  66. package/lib/command/measure/AcApClearMeasurementsCmd.js +15 -4
  67. package/lib/command/measure/AcApClearMeasurementsCmd.js.map +1 -1
  68. package/lib/command/measure/AcApMeasureAngleCmd.d.ts.map +1 -1
  69. package/lib/command/measure/AcApMeasureAngleCmd.js +15 -6
  70. package/lib/command/measure/AcApMeasureAngleCmd.js.map +1 -1
  71. package/lib/command/measure/AcApMeasureArcCmd.d.ts.map +1 -1
  72. package/lib/command/measure/AcApMeasureArcCmd.js +11 -4
  73. package/lib/command/measure/AcApMeasureArcCmd.js.map +1 -1
  74. package/lib/command/measure/AcApMeasureAreaCmd.d.ts.map +1 -1
  75. package/lib/command/measure/AcApMeasureAreaCmd.js +11 -4
  76. package/lib/command/measure/AcApMeasureAreaCmd.js.map +1 -1
  77. package/lib/command/measure/AcApMeasureDistanceCmd.d.ts +3 -2
  78. package/lib/command/measure/AcApMeasureDistanceCmd.d.ts.map +1 -1
  79. package/lib/command/measure/AcApMeasureDistanceCmd.js +14 -6
  80. package/lib/command/measure/AcApMeasureDistanceCmd.js.map +1 -1
  81. package/lib/command/modify/AcApOffsetCmd.d.ts +30 -0
  82. package/lib/command/modify/AcApOffsetCmd.d.ts.map +1 -0
  83. package/lib/command/modify/AcApOffsetCmd.js +424 -0
  84. package/lib/command/modify/AcApOffsetCmd.js.map +1 -0
  85. package/lib/command/modify/AcApRotateCmd.d.ts.map +1 -1
  86. package/lib/command/modify/AcApRotateCmd.js +3 -4
  87. package/lib/command/modify/AcApRotateCmd.js.map +1 -1
  88. package/lib/command/modify/index.d.ts +1 -0
  89. package/lib/command/modify/index.d.ts.map +1 -1
  90. package/lib/command/modify/index.js +1 -0
  91. package/lib/command/modify/index.js.map +1 -1
  92. package/lib/command/review/AcApRevCircleCmd.d.ts.map +1 -1
  93. package/lib/command/review/AcApRevCircleCmd.js +4 -1
  94. package/lib/command/review/AcApRevCircleCmd.js.map +1 -1
  95. package/lib/editor/input/AcEdSelectionFilter.js +7 -6
  96. package/lib/editor/input/AcEdSelectionFilter.js.map +1 -1
  97. package/lib/editor/input/prompt/AcEdPromptDistanceOptions.d.ts.map +1 -1
  98. package/lib/editor/input/prompt/AcEdPromptDistanceOptions.js +1 -1
  99. package/lib/editor/input/prompt/AcEdPromptDistanceOptions.js.map +1 -1
  100. package/lib/editor/input/ui/AcEdFloatingInput.d.ts +9 -0
  101. package/lib/editor/input/ui/AcEdFloatingInput.d.ts.map +1 -1
  102. package/lib/editor/input/ui/AcEdFloatingInput.js +21 -3
  103. package/lib/editor/input/ui/AcEdFloatingInput.js.map +1 -1
  104. package/lib/editor/input/ui/AcEdInputManager.d.ts +25 -6
  105. package/lib/editor/input/ui/AcEdInputManager.d.ts.map +1 -1
  106. package/lib/editor/input/ui/AcEdInputManager.js +119 -39
  107. package/lib/editor/input/ui/AcEdInputManager.js.map +1 -1
  108. package/lib/editor/input/ui/AcEdMTextEditor.d.ts +67 -2
  109. package/lib/editor/input/ui/AcEdMTextEditor.d.ts.map +1 -1
  110. package/lib/editor/input/ui/AcEdMTextEditor.js +210 -19
  111. package/lib/editor/input/ui/AcEdMTextEditor.js.map +1 -1
  112. package/lib/editor/input/ui/AcEdRubberBand.d.ts.map +1 -1
  113. package/lib/editor/input/ui/AcEdRubberBand.js +16 -8
  114. package/lib/editor/input/ui/AcEdRubberBand.js.map +1 -1
  115. package/lib/i18n/en/command.d.ts +64 -10
  116. package/lib/i18n/en/command.d.ts.map +1 -1
  117. package/lib/i18n/en/command.js +67 -13
  118. package/lib/i18n/en/command.js.map +1 -1
  119. package/lib/i18n/en/jig.d.ts +8 -0
  120. package/lib/i18n/en/jig.d.ts.map +1 -1
  121. package/lib/i18n/en/jig.js +8 -0
  122. package/lib/i18n/en/jig.js.map +1 -1
  123. package/lib/i18n/zh/command.d.ts +64 -10
  124. package/lib/i18n/zh/command.d.ts.map +1 -1
  125. package/lib/i18n/zh/command.js +67 -13
  126. package/lib/i18n/zh/command.js.map +1 -1
  127. package/lib/i18n/zh/jig.d.ts +8 -0
  128. package/lib/i18n/zh/jig.d.ts.map +1 -1
  129. package/lib/i18n/zh/jig.js +8 -0
  130. package/lib/i18n/zh/jig.js.map +1 -1
  131. package/lib/index.d.ts +2 -1
  132. package/lib/index.d.ts.map +1 -1
  133. package/lib/index.js +2 -1
  134. package/lib/index.js.map +1 -1
  135. package/lib/util/AcApFontUtil.d.ts +69 -0
  136. package/lib/util/AcApFontUtil.d.ts.map +1 -0
  137. package/lib/util/AcApFontUtil.js +161 -0
  138. package/lib/util/AcApFontUtil.js.map +1 -0
  139. package/lib/util/index.d.ts +2 -0
  140. package/lib/util/index.d.ts.map +1 -1
  141. package/lib/util/index.js +2 -0
  142. package/lib/util/index.js.map +1 -1
  143. package/lib/util/yieldToMain.d.ts +5 -0
  144. package/lib/util/yieldToMain.d.ts.map +1 -0
  145. package/lib/util/yieldToMain.js +11 -0
  146. package/lib/util/yieldToMain.js.map +1 -0
  147. package/lib/view/AcTrLayoutView.d.ts +12 -0
  148. package/lib/view/AcTrLayoutView.d.ts.map +1 -1
  149. package/lib/view/AcTrLayoutView.js +18 -0
  150. package/lib/view/AcTrLayoutView.js.map +1 -1
  151. package/lib/view/AcTrScene.d.ts +38 -6
  152. package/lib/view/AcTrScene.d.ts.map +1 -1
  153. package/lib/view/AcTrScene.js +57 -30
  154. package/lib/view/AcTrScene.js.map +1 -1
  155. package/lib/view/AcTrView2d.d.ts +166 -0
  156. package/lib/view/AcTrView2d.d.ts.map +1 -1
  157. package/lib/view/AcTrView2d.js +586 -53
  158. package/lib/view/AcTrView2d.js.map +1 -1
  159. package/package.json +14 -8
@@ -0,0 +1,301 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ 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);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ 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;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ var __values = (this && this.__values) || function(o) {
38
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
39
+ if (m) return m.call(o);
40
+ if (o && typeof o.length === "number") return {
41
+ next: function () {
42
+ if (o && i >= o.length) o = void 0;
43
+ return { value: o && o[i++], done: !o };
44
+ }
45
+ };
46
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
47
+ };
48
+ var __read = (this && this.__read) || function (o, n) {
49
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
50
+ if (!m) return o;
51
+ var i = m.call(o), r, ar = [], e;
52
+ try {
53
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
54
+ }
55
+ catch (error) { e = { error: error }; }
56
+ finally {
57
+ try {
58
+ if (r && !r.done && (m = i["return"])) m.call(i);
59
+ }
60
+ finally { if (e) throw e.error; }
61
+ }
62
+ return ar;
63
+ };
64
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
65
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
66
+ if (ar || !(i in from)) {
67
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
68
+ ar[i] = from[i];
69
+ }
70
+ }
71
+ return to.concat(ar || Array.prototype.slice.call(from));
72
+ };
73
+ import { ACEX_SNAPSHOT_VERSION, buildOsnapCatalog, buildViewerMetadata, collectBatchesFromObject3D } from '@mlightcad/cad-html-exporter';
74
+ import { AcApI18n } from '../../i18n';
75
+ import { yieldToMain } from '../../util';
76
+ /**
77
+ * Serializes the live Three.js scene into a versioned {@link AcExSnapshotV1}.
78
+ *
79
+ * The snapshot contains layer visibility, per-layout line/mesh batches, and
80
+ * viewer metadata (extents, units, background). It is display-only: no DXF/DWG
81
+ * entities or edit capability are preserved.
82
+ */
83
+ var AcApHtmlSnapshotBuilder = /** @class */ (function () {
84
+ function AcApHtmlSnapshotBuilder() {
85
+ }
86
+ /**
87
+ * Builds a snapshot synchronously in one pass.
88
+ *
89
+ * Prefer {@link buildAsync} for interactive export so the UI can stay responsive.
90
+ *
91
+ * @param scene - Current renderer scene (layouts, layers, active layout).
92
+ * @param database - Open drawing database used for layout names and metadata.
93
+ * @param options - Optional title, background, and locale overrides.
94
+ * @returns A complete v1 snapshot ready for `packHtml`.
95
+ */
96
+ AcApHtmlSnapshotBuilder.prototype.build = function (scene, database, options) {
97
+ if (options === void 0) { options = {}; }
98
+ return this.buildSync(scene, database, options);
99
+ };
100
+ /**
101
+ * Builds a snapshot incrementally, yielding to the main thread between layouts.
102
+ *
103
+ * Geometry is collected per layout layer so a busy indicator can repaint
104
+ * during large drawings.
105
+ *
106
+ * @param scene - Current renderer scene (layouts, layers, active layout).
107
+ * @param database - Open drawing database used for layout names and metadata.
108
+ * @param options - Optional title, background, and locale overrides.
109
+ * @returns A complete v1 snapshot ready for `packHtml`.
110
+ */
111
+ AcApHtmlSnapshotBuilder.prototype.buildAsync = function (scene_1, database_1) {
112
+ return __awaiter(this, arguments, void 0, function (scene, database, options) {
113
+ var meta, layers, layouts, _a, _b, _c, btrId, layout, lineBatches, meshBatches, _d, _e, _f, layer, collected, e_1_1, e_2_1;
114
+ var e_2, _g, e_1, _h;
115
+ if (options === void 0) { options = {}; }
116
+ return __generator(this, function (_j) {
117
+ switch (_j.label) {
118
+ case 0: return [4 /*yield*/, yieldToMain()];
119
+ case 1:
120
+ _j.sent();
121
+ meta = buildViewerMetadata(database, {
122
+ title: options.title,
123
+ background: options.background
124
+ });
125
+ layers = [];
126
+ scene.layers.forEach(function (layer) {
127
+ var _a;
128
+ layers.push({
129
+ name: layer.name,
130
+ color: (_a = layer.color.RGB) !== null && _a !== void 0 ? _a : 0xffffff,
131
+ visible: !layer.isOff && !layer.isFrozen
132
+ });
133
+ });
134
+ layouts = [];
135
+ _j.label = 2;
136
+ case 2:
137
+ _j.trys.push([2, 15, 16, 17]);
138
+ _a = __values(scene.layouts), _b = _a.next();
139
+ _j.label = 3;
140
+ case 3:
141
+ if (!!_b.done) return [3 /*break*/, 14];
142
+ _c = __read(_b.value, 2), btrId = _c[0], layout = _c[1];
143
+ lineBatches = [];
144
+ meshBatches = [];
145
+ _j.label = 4;
146
+ case 4:
147
+ _j.trys.push([4, 9, 10, 11]);
148
+ _d = (e_1 = void 0, __values(layout.layers)), _e = _d.next();
149
+ _j.label = 5;
150
+ case 5:
151
+ if (!!_e.done) return [3 /*break*/, 8];
152
+ _f = __read(_e.value, 2), layer = _f[1];
153
+ collected = collectBatchesFromObject3D(layer.internalObject);
154
+ lineBatches.push.apply(lineBatches, __spreadArray([], __read(collected.lineBatches), false));
155
+ meshBatches.push.apply(meshBatches, __spreadArray([], __read(collected.meshBatches), false));
156
+ return [4 /*yield*/, yieldToMain()];
157
+ case 6:
158
+ _j.sent();
159
+ _j.label = 7;
160
+ case 7:
161
+ _e = _d.next();
162
+ return [3 /*break*/, 5];
163
+ case 8: return [3 /*break*/, 11];
164
+ case 9:
165
+ e_1_1 = _j.sent();
166
+ e_1 = { error: e_1_1 };
167
+ return [3 /*break*/, 11];
168
+ case 10:
169
+ try {
170
+ if (_e && !_e.done && (_h = _d.return)) _h.call(_d);
171
+ }
172
+ finally { if (e_1) throw e_1.error; }
173
+ return [7 /*endfinally*/];
174
+ case 11:
175
+ layouts.push({
176
+ btrId: btrId,
177
+ name: resolveLayoutName(database, btrId),
178
+ isModelSpace: btrId === scene.modelSpaceBtrId,
179
+ lineBatches: lineBatches,
180
+ meshBatches: meshBatches,
181
+ osnap: buildOsnapCatalog(database, btrId)
182
+ });
183
+ return [4 /*yield*/, yieldToMain()];
184
+ case 12:
185
+ _j.sent();
186
+ _j.label = 13;
187
+ case 13:
188
+ _b = _a.next();
189
+ return [3 /*break*/, 3];
190
+ case 14: return [3 /*break*/, 17];
191
+ case 15:
192
+ e_2_1 = _j.sent();
193
+ e_2 = { error: e_2_1 };
194
+ return [3 /*break*/, 17];
195
+ case 16:
196
+ try {
197
+ if (_b && !_b.done && (_g = _a.return)) _g.call(_a);
198
+ }
199
+ finally { if (e_2) throw e_2.error; }
200
+ return [7 /*endfinally*/];
201
+ case 17: return [2 /*return*/, {
202
+ version: ACEX_SNAPSHOT_VERSION,
203
+ meta: buildSnapshotMeta(meta, options),
204
+ layers: layers,
205
+ layouts: layouts,
206
+ activeLayoutBtrId: scene.activeLayoutBtrId || scene.modelSpaceBtrId
207
+ }];
208
+ }
209
+ });
210
+ });
211
+ };
212
+ /**
213
+ * Synchronous implementation shared by {@link build} and {@link buildAsync}.
214
+ *
215
+ * @param scene - Current renderer scene.
216
+ * @param database - Open drawing database.
217
+ * @param options - Snapshot overrides.
218
+ * @returns A complete v1 snapshot.
219
+ */
220
+ AcApHtmlSnapshotBuilder.prototype.buildSync = function (scene, database, options) {
221
+ var meta = buildViewerMetadata(database, {
222
+ title: options.title,
223
+ background: options.background
224
+ });
225
+ var layers = [];
226
+ scene.layers.forEach(function (layer) {
227
+ var _a;
228
+ layers.push({
229
+ name: layer.name,
230
+ color: (_a = layer.color.RGB) !== null && _a !== void 0 ? _a : 0xffffff,
231
+ visible: !layer.isOff && !layer.isFrozen
232
+ });
233
+ });
234
+ var layouts = [];
235
+ scene.layouts.forEach(function (layout, btrId) {
236
+ var _a = collectBatchesFromObject3D(layout.internalObject), lineBatches = _a.lineBatches, meshBatches = _a.meshBatches;
237
+ layouts.push({
238
+ btrId: btrId,
239
+ name: resolveLayoutName(database, btrId),
240
+ isModelSpace: btrId === scene.modelSpaceBtrId,
241
+ lineBatches: lineBatches,
242
+ meshBatches: meshBatches,
243
+ osnap: buildOsnapCatalog(database, btrId)
244
+ });
245
+ });
246
+ return {
247
+ version: ACEX_SNAPSHOT_VERSION,
248
+ meta: buildSnapshotMeta(meta, options),
249
+ layers: layers,
250
+ layouts: layouts,
251
+ activeLayoutBtrId: scene.activeLayoutBtrId || scene.modelSpaceBtrId
252
+ };
253
+ };
254
+ return AcApHtmlSnapshotBuilder;
255
+ }());
256
+ export { AcApHtmlSnapshotBuilder };
257
+ /**
258
+ * Merges database-derived viewer metadata with export-time options.
259
+ *
260
+ * @param meta - Extents, units, and background from {@link buildViewerMetadata}.
261
+ * @param options - User overrides (title is taken from `meta`; locale from options).
262
+ * @returns The `meta` block stored on {@link AcExSnapshotV1}.
263
+ */
264
+ function buildSnapshotMeta(meta, options) {
265
+ var _a;
266
+ return {
267
+ title: meta.title,
268
+ createdAt: new Date().toISOString(),
269
+ extents: meta.extents,
270
+ units: meta.units,
271
+ background: meta.background,
272
+ locale: (_a = options.locale) !== null && _a !== void 0 ? _a : AcApI18n.currentLocale
273
+ };
274
+ }
275
+ /**
276
+ * Resolves a block table record object id to its layout/block name.
277
+ *
278
+ * @param database - Drawing whose block table is searched.
279
+ * @param btrId - Object id of the layout's owning block table record.
280
+ * @returns The record name, or `btrId` if no matching block is found.
281
+ */
282
+ function resolveLayoutName(database, btrId) {
283
+ var e_3, _a;
284
+ try {
285
+ for (var _b = __values(database.tables.blockTable.newIterator()), _c = _b.next(); !_c.done; _c = _b.next()) {
286
+ var block = _c.value;
287
+ if (block.objectId === btrId) {
288
+ return block.name;
289
+ }
290
+ }
291
+ }
292
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
293
+ finally {
294
+ try {
295
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
296
+ }
297
+ finally { if (e_3) throw e_3.error; }
298
+ }
299
+ return btrId;
300
+ }
301
+ //# sourceMappingURL=AcApHtmlSnapshotBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcApHtmlSnapshotBuilder.js","sourceRoot":"","sources":["../../../src/command/convert/AcApHtmlSnapshotBuilder.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,8 @@ export * from './AcApConvertToDxfCmd';
2
2
  export * from './AcApConvertToPngCmd';
3
3
  export * from './AcApPngConvertor';
4
4
  export * from './AcApConvertToSvgCmd';
5
+ export * from './AcApExportHtmlCmd';
6
+ export * from './AcApHtmlConvertor';
7
+ export * from './AcApHtmlSnapshotBuilder';
5
8
  export * from './AcApDxfConvertor';
6
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/command/convert/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/command/convert/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA"}
@@ -2,5 +2,8 @@ export * from './AcApConvertToDxfCmd';
2
2
  export * from './AcApConvertToPngCmd';
3
3
  export * from './AcApPngConvertor';
4
4
  export * from './AcApConvertToSvgCmd';
5
+ export * from './AcApExportHtmlCmd';
6
+ export * from './AcApHtmlConvertor';
7
+ export * from './AcApHtmlSnapshotBuilder';
5
8
  export * from './AcApDxfConvertor';
6
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/command/convert/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/command/convert/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"AcApArcCmd.d.ts","sourceRoot":"","sources":["../../../src/command/draw/AcApArcCmd.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAkB,MAAM,WAAW,CAAA;AACvD,OAAO,EAEL,WAAW,EASZ,MAAM,cAAc,CAAA;AAquBrB;;;;;;;;GAQG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC;;OAEG;;IAMH;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,WAAW;IA6BlC;;;;;;;;;;;OAWG;YACW,gBAAgB;IA+C9B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAclB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAMjB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;;;;;;;OAQG;YACW,gBAAgB;IAM9B;;;;;;;;OAQG;YACW,iBAAiB;IAW/B;;;;;;;;OAQG;YACW,cAAc;IAW5B;;;;;;;;;OASG;YACW,iBAAiB;IAS/B;;;;;;;;OAQG;YACW,sBAAsB;IAUpC;;;;;;;;OAQG;YACW,2BAA2B;IAMzC;;;;;;;;;;OAUG;YACW,uBAAuB;IA4FrC;;;;;;;;;;OAUG;YACW,uBAAuB;IA4FrC;;;;;;;;;;OAUG;YACW,oBAAoB;IA+HlC;;;;;;;;OAQG;YACW,wBAAwB;IAMtC;;;;;;;;OAQG;YACW,0BAA0B;IASxC;;;;;;;;;;OAUG;YACW,yBAAyB;IAqCvC;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAI9B;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAK/B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAM9B;;;;;;;;;;OAUG;YACW,YAAY;IA6B1B;;;;;;OAMG;YACW,mBAAmB;IAuCjC;;;;;OAKG;YACW,kBAAkB;IAsBhC;;;;;;OAMG;YACW,kBAAkB;IAiBhC;;;;;;;;;;;OAWG;YACW,qBAAqB;IA0FnC;;;;;;;;;;;OAWG;YACW,eAAe;IAyH7B;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;CAGjB"}
1
+ {"version":3,"file":"AcApArcCmd.d.ts","sourceRoot":"","sources":["../../../src/command/draw/AcApArcCmd.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAkB,MAAM,WAAW,CAAA;AACvD,OAAO,EAEL,WAAW,EASZ,MAAM,cAAc,CAAA;AAkwBrB;;;;;;;;GAQG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC;;OAEG;;IAMH;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,WAAW;IA6BlC;;;;;;;;;;;OAWG;YACW,gBAAgB;IA+C9B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAclB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAMjB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;;;;;;;OAQG;YACW,gBAAgB;IAM9B;;;;;;;;OAQG;YACW,iBAAiB;IAW/B;;;;;;;;OAQG;YACW,cAAc;IAW5B;;;;;;;;;OASG;YACW,iBAAiB;IAS/B;;;;;;;;OAQG;YACW,sBAAsB;IAUpC;;;;;;;;OAQG;YACW,2BAA2B;IAMzC;;;;;;;;;;OAUG;YACW,uBAAuB;IA4FrC;;;;;;;;;;OAUG;YACW,uBAAuB;IA4FrC;;;;;;;;;;OAUG;YACW,oBAAoB;IA+HlC;;;;;;;;OAQG;YACW,wBAAwB;IAMtC;;;;;;;;OAQG;YACW,0BAA0B;IASxC;;;;;;;;;;OAUG;YACW,yBAAyB;IAqCvC;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAI9B;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAK/B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAM9B;;;;;;;;;;OAUG;YACW,YAAY;IA6B1B;;;;;;OAMG;YACW,mBAAmB;IAuCjC;;;;;OAKG;YACW,kBAAkB;IAsBhC;;;;;;OAMG;YACW,kBAAkB;IAiBhC;;;;;;;;;;;OAWG;YACW,qBAAqB;IA6FnC;;;;;;;;;;;OAWG;YACW,eAAe;IA4H7B;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;CAGjB"}
@@ -49,12 +49,10 @@ 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 { AcDbArc, AcGePoint3d } from '@mlightcad/data-model';
52
+ import { AcDbArc, AcGePoint3d, AcGeTol, FLOAT_TOL, TAU } from '@mlightcad/data-model';
53
53
  import { AcApDocManager } from '../../app';
54
54
  import { AcEdCommand, AcEdOpenMode, AcEdPreviewJig, AcEdPromptAngleOptions, AcEdPromptDistanceOptions, AcEdPromptDoubleOptions, AcEdPromptPointOptions, AcEdPromptStatus, eventBus } from '../../editor';
55
55
  import { AcApI18n } from '../../i18n';
56
- var TAU = Math.PI * 2;
57
- var EPSILON = 1e-9;
58
56
  var POSITIVE_NORMAL = { x: 0, y: 0, z: 1 };
59
57
  var NEGATIVE_NORMAL = { x: 0, y: 0, z: -1 };
60
58
  /**
@@ -90,7 +88,7 @@ function directionAngleDeg(from, to) {
90
88
  /**
91
89
  * Computes point angle around a center under a given arc orientation.
92
90
  *
93
- * For `normalSign = -1` (clockwise), the Y component is mirrored so that
91
+ * For `normalSign = -1` (clockwise), the X component is mirrored so that
94
92
  * angle growth still follows the selected arc direction convention.
95
93
  *
96
94
  * @param center - Arc center.
@@ -99,10 +97,11 @@ function directionAngleDeg(from, to) {
99
97
  * @returns Direction-aware normalized angle in radians.
100
98
  */
101
99
  function angleByNormalSign(center, point, normalSign) {
102
- // For -Z arcs, mirror Y so the angle still increases in the arc direction.
100
+ // AcDbArc stores start/end in OCS. For a -Z extrusion, data-model chooses
101
+ // OCS X = -WCS X and OCS Y = WCS Y, so mirror X rather than Y.
103
102
  var dx = point.x - center.x;
104
103
  var dy = point.y - center.y;
105
- var raw = normalSign === 1 ? Math.atan2(dy, dx) : Math.atan2(-dy, dx);
104
+ var raw = normalSign === 1 ? Math.atan2(dy, dx) : Math.atan2(dy, -dx);
106
105
  return normalizeAngle(raw);
107
106
  }
108
107
  /**
@@ -114,6 +113,9 @@ function angleByNormalSign(center, point, normalSign) {
114
113
  function toNormal(sign) {
115
114
  return sign === 1 ? POSITIVE_NORMAL : NEGATIVE_NORMAL;
116
115
  }
116
+ function normalSignOf(entity) {
117
+ return entity.normal.z >= 0 ? 1 : -1;
118
+ }
117
119
  /**
118
120
  * Creates one `AcDbArc` entity from normalized arc definition data.
119
121
  *
@@ -166,7 +168,7 @@ function projectPointToCircle(center, radius, point) {
166
168
  var dx = point.x - center.x;
167
169
  var dy = point.y - center.y;
168
170
  var distance = Math.hypot(dx, dy);
169
- if (distance <= EPSILON)
171
+ if (AcGeTol.isNonPositive(distance))
170
172
  return undefined;
171
173
  var scale = radius / distance;
172
174
  return {
@@ -240,7 +242,7 @@ function createArcFromThreePoints(start, second, end, reverseDirection) {
240
242
  var x3 = end.x;
241
243
  var y3 = end.y;
242
244
  var d = 2 * (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2));
243
- if (Math.abs(d) <= EPSILON)
245
+ if (AcGeTol.equalToZero(d))
244
246
  return undefined;
245
247
  var ux = ((x1 * x1 + y1 * y1) * (y2 - y3) +
246
248
  (x2 * x2 + y2 * y2) * (y3 - y1) +
@@ -252,7 +254,7 @@ function createArcFromThreePoints(start, second, end, reverseDirection) {
252
254
  d;
253
255
  var center = { x: ux, y: uy, z: 0 };
254
256
  var radius = distance2d(center, start);
255
- if (!Number.isFinite(radius) || radius <= EPSILON)
257
+ if (!Number.isFinite(radius) || AcGeTol.isNonPositive(radius))
256
258
  return undefined;
257
259
  // By default, choose the arc that actually passes through the second point.
258
260
  // Ctrl toggle can reverse this selection to the complementary direction.
@@ -280,11 +282,11 @@ function createArcFromThreePoints(start, second, end, reverseDirection) {
280
282
  function createArcFromCenterStartEnd(center, start, end, normalSign) {
281
283
  var radiusFromStart = distance2d(center, start);
282
284
  var radiusFromEnd = distance2d(center, end);
283
- if (radiusFromStart <= EPSILON || radiusFromEnd <= EPSILON) {
285
+ if (AcGeTol.isNonPositive(radiusFromStart) || AcGeTol.isNonPositive(radiusFromEnd)) {
284
286
  return undefined;
285
287
  }
286
288
  // Start/end must lie on the same circle (small tolerance for picked input).
287
- var tolerance = Math.max(EPSILON, radiusFromStart * 1e-6);
289
+ var tolerance = Math.max(FLOAT_TOL, radiusFromStart * FLOAT_TOL);
288
290
  if (Math.abs(radiusFromStart - radiusFromEnd) > tolerance) {
289
291
  return undefined;
290
292
  }
@@ -310,7 +312,7 @@ function createArcFromCenterStartEnd(center, start, end, normalSign) {
310
312
  */
311
313
  function createArcFromCenterStartProjectedEnd(center, start, rawEnd, normalSign) {
312
314
  var radius = distance2d(center, start);
313
- if (radius <= EPSILON)
315
+ if (AcGeTol.isNonPositive(radius))
314
316
  return undefined;
315
317
  var end = projectPointToCircle(center, radius, rawEnd);
316
318
  if (!end)
@@ -330,7 +332,9 @@ function createArcFromCenterStartProjectedEnd(center, start, rawEnd, normalSign)
330
332
  function createArcFromCenterStartSweep(center, start, sweepRad) {
331
333
  var radius = distance2d(center, start);
332
334
  var sweep = Math.abs(sweepRad);
333
- if (radius <= EPSILON || sweep <= EPSILON || sweep >= TAU - EPSILON) {
335
+ if (AcGeTol.isNonPositive(radius) ||
336
+ AcGeTol.isNonPositive(sweep) ||
337
+ !AcGeTol.great(TAU - sweep, 0)) {
334
338
  return undefined;
335
339
  }
336
340
  var normalSign = sweepRad >= 0 ? 1 : -1;
@@ -357,7 +361,9 @@ function createArcFromCenterStartSweep(center, start, sweepRad) {
357
361
  function createArcFromCenterStartChord(center, start, chordLength) {
358
362
  var radius = distance2d(center, start);
359
363
  var chord = Math.abs(chordLength);
360
- if (radius <= EPSILON || chord <= EPSILON || chord > 2 * radius + EPSILON) {
364
+ if (AcGeTol.isNonPositive(radius) ||
365
+ AcGeTol.isNonPositive(chord) ||
366
+ AcGeTol.great(chord, 2 * radius)) {
361
367
  return undefined;
362
368
  }
363
369
  var ratio = Math.max(-1, Math.min(1, chord / (2 * radius)));
@@ -376,16 +382,18 @@ function createArcFromCenterStartChord(center, start, chordLength) {
376
382
  function createArcFromStartEndAngle(start, end, sweepRad) {
377
383
  var chord = distance2d(start, end);
378
384
  var sweep = Math.abs(sweepRad);
379
- if (chord <= EPSILON || sweep <= EPSILON || sweep >= TAU - EPSILON) {
385
+ if (AcGeTol.isNonPositive(chord) ||
386
+ AcGeTol.isNonPositive(sweep) ||
387
+ !AcGeTol.great(TAU - sweep, 0)) {
380
388
  return undefined;
381
389
  }
382
390
  // chord = 2 * r * sin(theta/2) -> r = chord / (2 * sin(theta/2))
383
391
  var sinHalf = Math.sin(sweep / 2);
384
- if (Math.abs(sinHalf) <= EPSILON)
392
+ if (AcGeTol.equalToZero(sinHalf))
385
393
  return undefined;
386
394
  var radius = chord / (2 * sinHalf);
387
395
  var offsetSquared = radius * radius - (chord * chord) / 4;
388
- if (offsetSquared < -EPSILON)
396
+ if (AcGeTol.less(offsetSquared, 0))
389
397
  return undefined;
390
398
  var offset = Math.sqrt(Math.max(0, offsetSquared));
391
399
  var midX = (start.x + end.x) / 2;
@@ -426,7 +434,7 @@ function createArcFromStartEndDirection(start, end, directionRad) {
426
434
  var nx = -ty;
427
435
  var ny = tx;
428
436
  var denominator = 2 * (dx * nx + dy * ny);
429
- if (Math.abs(denominator) <= EPSILON)
437
+ if (AcGeTol.equalToZero(denominator))
430
438
  return undefined;
431
439
  // Solve center = start + lambda * n so that |center-start| = |center-end|.
432
440
  var lambda = (dx * dx + dy * dy) / denominator;
@@ -440,7 +448,7 @@ function createArcFromStartEndDirection(start, end, directionRad) {
440
448
  var radiusVectorX = start.x - center.x;
441
449
  var radiusVectorY = start.y - center.y;
442
450
  var cross = radiusVectorX * ty - radiusVectorY * tx;
443
- if (Math.abs(cross) <= EPSILON)
451
+ if (AcGeTol.equalToZero(cross))
444
452
  return undefined;
445
453
  var normalSign = cross >= 0 ? 1 : -1;
446
454
  return createArcFromCenterStartEnd(center, start, end, normalSign);
@@ -458,7 +466,9 @@ function createArcFromStartEndDirection(start, end, directionRad) {
458
466
  function createArcFromStartEndRadius(start, end, radiusInput) {
459
467
  var radius = Math.abs(radiusInput);
460
468
  var chord = distance2d(start, end);
461
- if (radius <= EPSILON || chord <= EPSILON || chord > 2 * radius + EPSILON) {
469
+ if (AcGeTol.isNonPositive(radius) ||
470
+ AcGeTol.isNonPositive(chord) ||
471
+ AcGeTol.great(chord, 2 * radius)) {
462
472
  return undefined;
463
473
  }
464
474
  var midX = (start.x + end.x) / 2;
@@ -520,6 +530,11 @@ var AcApArcJig = /** @class */ (function (_super) {
520
530
  var definition = this._builder(point);
521
531
  if (!definition)
522
532
  return;
533
+ if (definition.normalSign !== normalSignOf(this._arc)) {
534
+ this.end();
535
+ this._arc = createArcEntity(definition);
536
+ return;
537
+ }
523
538
  applyArcDefinition(this._arc, definition);
524
539
  };
525
540
  return AcApArcJig;
@@ -567,6 +582,11 @@ var AcApArcValueJig = /** @class */ (function (_super) {
567
582
  var definition = this._builder(value);
568
583
  if (!definition)
569
584
  return;
585
+ if (definition.normalSign !== normalSignOf(this._arc)) {
586
+ this.end();
587
+ this._arc = createArcEntity(definition);
588
+ return;
589
+ }
570
590
  applyArcDefinition(this._arc, definition);
571
591
  };
572
592
  return AcApArcValueJig;
@@ -1642,6 +1662,9 @@ var AcApArcCmd = /** @class */ (function (_super) {
1642
1662
  chordPrompt = new AcEdPromptDistanceOptions(AcApI18n.t('jig.arc.chordLength'));
1643
1663
  chordPrompt.allowZero = false;
1644
1664
  chordPrompt.allowNegative = true;
1665
+ chordPrompt.useBasePoint = true;
1666
+ chordPrompt.useDashedLine = true;
1667
+ chordPrompt.basePoint = new AcGePoint3d(start);
1645
1668
  return [4 /*yield*/, AcApDocManager.instance.editor.getDistance(chordPrompt)];
1646
1669
  case 4:
1647
1670
  chordResult = _a.sent();
@@ -1757,6 +1780,9 @@ var AcApArcCmd = /** @class */ (function (_super) {
1757
1780
  radiusPrompt = new AcEdPromptDistanceOptions(AcApI18n.t('jig.arc.radius'));
1758
1781
  radiusPrompt.allowZero = false;
1759
1782
  radiusPrompt.allowNegative = true;
1783
+ radiusPrompt.useBasePoint = true;
1784
+ radiusPrompt.useDashedLine = true;
1785
+ radiusPrompt.basePoint = new AcGePoint3d(start);
1760
1786
  return [4 /*yield*/, AcApDocManager.instance.editor.getDistance(radiusPrompt)];
1761
1787
  case 7:
1762
1788
  radiusResult = _a.sent();