@mlightcad/data-model 1.10.2 → 1.10.3

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.
@@ -56,6 +56,12 @@ export declare class AcDbFontNameCollector {
56
56
  private addResolvedStyleFonts;
57
57
  private static buildStyleFontMap;
58
58
  private static collectStyleEntryFontNames;
59
+ /**
60
+ * Collects primary, big, and extended fonts from every named STYLE entry.
61
+ * Ensures fonts referenced only in the style table (or in blocks not reached
62
+ * from model space) are still preloaded when opening a drawing.
63
+ */
64
+ private static collectNamedStyleTableFonts;
59
65
  private static collectShapeDefinitionFonts;
60
66
  private static extractInlineMTextFonts;
61
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AcDbFontNameCollector.d.ts","sourceRoot":"","sources":["../../src/converter/AcDbFontNameCollector.ts"],"names":[],"mappings":"AAIA,+EAA+E;AAC/E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,mCAAmC,GAAG;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,0EAA0E;AAC1E,MAAM,MAAM,4BAA4B,CAAC,OAAO,IAAI;IAClD,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,mCAAmC,GAAG,IAAI,CAAA;IAC9E,gBAAgB,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,SAAS,CAAA;CAC5D,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,+BAA+B,EAAE,CAAA;IACzC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;;GAKG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;gBAEzB,OAAO,EAAE,4BAA4B;IAMjD;;OAEG;IACH,OAAO,CAAC,OAAO,EACb,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,4BAA4B,CAAC,OAAO,CAAC,GAC7C,MAAM,EAAE;IAWX;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAWvE,OAAO,CAAC,mBAAmB;IAgC3B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IA+B7B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAahC,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAgBzC,OAAO,CAAC,MAAM,CAAC,2BAA2B;IAmB1C,OAAO,CAAC,MAAM,CAAC,uBAAuB;CAOvC"}
1
+ {"version":3,"file":"AcDbFontNameCollector.d.ts","sourceRoot":"","sources":["../../src/converter/AcDbFontNameCollector.ts"],"names":[],"mappings":"AAOA,+EAA+E;AAC/E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,mCAAmC,GAAG;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,0EAA0E;AAC1E,MAAM,MAAM,4BAA4B,CAAC,OAAO,IAAI;IAClD,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,mCAAmC,GAAG,IAAI,CAAA;IAC9E,gBAAgB,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,SAAS,CAAA;CAC5D,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,+BAA+B,EAAE,CAAA;IACzC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;;GAKG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;gBAEzB,OAAO,EAAE,4BAA4B;IAMjD;;OAEG;IACH,OAAO,CAAC,OAAO,EACb,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,4BAA4B,CAAC,OAAO,CAAC,GAC7C,MAAM,EAAE;IAgBX;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAWvE,OAAO,CAAC,mBAAmB;IAgC3B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IA+B7B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAahC,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAgBzC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,2BAA2B;IAa1C,OAAO,CAAC,MAAM,CAAC,2BAA2B;IAmB1C,OAAO,CAAC,MAAM,CAAC,uBAAuB;CAUvC"}
@@ -25,8 +25,20 @@ var __read = (this && this.__read) || function (o, n) {
25
25
  }
26
26
  return ar;
27
27
  };
28
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
29
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
30
+ if (ar || !(i in from)) {
31
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
32
+ ar[i] = from[i];
33
+ }
34
+ }
35
+ return to.concat(ar || Array.prototype.slice.call(from));
36
+ };
28
37
  import { DEFAULT_TEXT_STYLE } from '../misc/AcDbConstants';
29
- var MTEXT_INLINE_FONT_PATTERN = /\\f(.*?)\|/g;
38
+ /** `\Ffont|b0|i0;...` extended inline font override. */
39
+ var MTEXT_INLINE_FONT_PIPE_PATTERN = /\\[fF](.*?)\|/g;
40
+ /** `\Ffont;...` short inline font override (e.g. tolerance `{\Fgdt;r}`). */
41
+ var MTEXT_INLINE_FONT_SEMICOLON_PATTERN = /\\[fF]([^|;]+);/g;
30
42
  /**
31
43
  * Collects normalized font names from parsed drawing data before conversion.
32
44
  *
@@ -44,21 +56,34 @@ var AcDbFontNameCollector = /** @class */ (function () {
44
56
  * Walks entities and returns all normalized font names referenced by the drawing.
45
57
  */
46
58
  AcDbFontNameCollector.prototype.collect = function (entities, adapter) {
47
- var e_1, _a;
59
+ var e_1, _a, e_2, _b;
48
60
  var fonts = new Set();
49
61
  try {
50
- for (var _b = __values(AcDbFontNameCollector.collectShapeDefinitionFonts(this.styles)), _c = _b.next(); !_c.done; _c = _b.next()) {
51
- var fontName = _c.value;
62
+ for (var _c = __values(AcDbFontNameCollector.collectShapeDefinitionFonts(this.styles)), _d = _c.next(); !_d.done; _d = _c.next()) {
63
+ var fontName = _d.value;
52
64
  fonts.add(fontName);
53
65
  }
54
66
  }
55
67
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
56
68
  finally {
57
69
  try {
58
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
70
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
59
71
  }
60
72
  finally { if (e_1) throw e_1.error; }
61
73
  }
74
+ try {
75
+ for (var _e = __values(AcDbFontNameCollector.collectNamedStyleTableFonts(this.styles)), _f = _e.next(); !_f.done; _f = _e.next()) {
76
+ var fontName = _f.value;
77
+ fonts.add(fontName);
78
+ }
79
+ }
80
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
81
+ finally {
82
+ try {
83
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
84
+ }
85
+ finally { if (e_2) throw e_2.error; }
86
+ }
62
87
  this.collectFromEntities(entities, adapter, fonts);
63
88
  return Array.from(fonts);
64
89
  };
@@ -76,7 +101,7 @@ var AcDbFontNameCollector = /** @class */ (function () {
76
101
  return fontFileName.toLowerCase();
77
102
  };
78
103
  AcDbFontNameCollector.prototype.collectFromEntities = function (entities, adapter, fonts) {
79
- var e_2, _a, e_3, _b;
104
+ var e_3, _a, e_4, _b;
80
105
  try {
81
106
  for (var entities_1 = __values(entities), entities_1_1 = entities_1.next(); !entities_1_1.done; entities_1_1 = entities_1.next()) {
82
107
  var entity = entities_1_1.value;
@@ -86,17 +111,17 @@ var AcDbFontNameCollector = /** @class */ (function () {
86
111
  }
87
112
  if (info.formattedText) {
88
113
  try {
89
- for (var _c = (e_3 = void 0, __values(AcDbFontNameCollector.extractInlineMTextFonts(info.formattedText))), _d = _c.next(); !_d.done; _d = _c.next()) {
114
+ for (var _c = (e_4 = void 0, __values(AcDbFontNameCollector.extractInlineMTextFonts(info.formattedText))), _d = _c.next(); !_d.done; _d = _c.next()) {
90
115
  var fontName = _d.value;
91
116
  fonts.add(fontName);
92
117
  }
93
118
  }
94
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
119
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
95
120
  finally {
96
121
  try {
97
122
  if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
98
123
  }
99
- finally { if (e_3) throw e_3.error; }
124
+ finally { if (e_4) throw e_4.error; }
100
125
  }
101
126
  }
102
127
  if (info.resolveStyle) {
@@ -110,12 +135,12 @@ var AcDbFontNameCollector = /** @class */ (function () {
110
135
  }
111
136
  }
112
137
  }
113
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
138
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
114
139
  finally {
115
140
  try {
116
141
  if (entities_1_1 && !entities_1_1.done && (_a = entities_1.return)) _a.call(entities_1);
117
142
  }
118
- finally { if (e_2) throw e_2.error; }
143
+ finally { if (e_3) throw e_3.error; }
119
144
  }
120
145
  };
121
146
  /**
@@ -123,7 +148,7 @@ var AcDbFontNameCollector = /** @class */ (function () {
123
148
  * {@link AcDbTextStyleTable.resolveAt}.
124
149
  */
125
150
  AcDbFontNameCollector.prototype.resolveStyleFontNames = function (styleName) {
126
- var e_4, _a, e_5, _b;
151
+ var e_5, _a, e_6, _b;
127
152
  var candidates = [];
128
153
  var addCandidate = function (value) {
129
154
  var trimmed = value === null || value === void 0 ? void 0 : value.trim();
@@ -144,28 +169,28 @@ var AcDbFontNameCollector = /** @class */ (function () {
144
169
  }
145
170
  var normalizedCandidate = candidate.toUpperCase();
146
171
  try {
147
- for (var _c = (e_5 = void 0, __values(this.styleMap)), _d = _c.next(); !_d.done; _d = _c.next()) {
172
+ for (var _c = (e_6 = void 0, __values(this.styleMap)), _d = _c.next(); !_d.done; _d = _c.next()) {
148
173
  var _e = __read(_d.value, 2), key = _e[0], fontNames = _e[1];
149
174
  if (key.toUpperCase() === normalizedCandidate) {
150
175
  return fontNames;
151
176
  }
152
177
  }
153
178
  }
154
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
179
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
155
180
  finally {
156
181
  try {
157
182
  if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
158
183
  }
159
- finally { if (e_5) throw e_5.error; }
184
+ finally { if (e_6) throw e_6.error; }
160
185
  }
161
186
  }
162
187
  }
163
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
188
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
164
189
  finally {
165
190
  try {
166
191
  if (candidates_1_1 && !candidates_1_1.done && (_a = candidates_1.return)) _a.call(candidates_1);
167
192
  }
168
- finally { if (e_4) throw e_4.error; }
193
+ finally { if (e_5) throw e_5.error; }
169
194
  }
170
195
  return this.styleMap.values().next().value;
171
196
  };
@@ -174,7 +199,7 @@ var AcDbFontNameCollector = /** @class */ (function () {
174
199
  fontNames === null || fontNames === void 0 ? void 0 : fontNames.forEach(function (name) { return fonts.add(name); });
175
200
  };
176
201
  AcDbFontNameCollector.buildStyleFontMap = function (styles) {
177
- var e_6, _a;
202
+ var e_7, _a;
178
203
  var styleMap = new Map();
179
204
  try {
180
205
  for (var styles_1 = __values(styles), styles_1_1 = styles_1.next(); !styles_1_1.done; styles_1_1 = styles_1.next()) {
@@ -182,17 +207,17 @@ var AcDbFontNameCollector = /** @class */ (function () {
182
207
  styleMap.set(style.name, AcDbFontNameCollector.collectStyleEntryFontNames(style));
183
208
  }
184
209
  }
185
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
210
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
186
211
  finally {
187
212
  try {
188
213
  if (styles_1_1 && !styles_1_1.done && (_a = styles_1.return)) _a.call(styles_1);
189
214
  }
190
- finally { if (e_6) throw e_6.error; }
215
+ finally { if (e_7) throw e_7.error; }
191
216
  }
192
217
  return styleMap;
193
218
  };
194
219
  AcDbFontNameCollector.collectStyleEntryFontNames = function (style) {
195
- var e_7, _a;
220
+ var e_8, _a;
196
221
  var fontNames = [];
197
222
  try {
198
223
  for (var _b = __values([style.font, style.bigFont, style.extendedFont]), _c = _b.next(); !_c.done; _c = _b.next()) {
@@ -203,21 +228,47 @@ var AcDbFontNameCollector = /** @class */ (function () {
203
228
  }
204
229
  }
205
230
  }
206
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
231
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
207
232
  finally {
208
233
  try {
209
234
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
210
235
  }
211
- finally { if (e_7) throw e_7.error; }
236
+ finally { if (e_8) throw e_8.error; }
212
237
  }
213
238
  return fontNames;
214
239
  };
215
- AcDbFontNameCollector.collectShapeDefinitionFonts = function (styles) {
216
- var e_8, _a;
240
+ /**
241
+ * Collects primary, big, and extended fonts from every named STYLE entry.
242
+ * Ensures fonts referenced only in the style table (or in blocks not reached
243
+ * from model space) are still preloaded when opening a drawing.
244
+ */
245
+ AcDbFontNameCollector.collectNamedStyleTableFonts = function (styles) {
246
+ var e_9, _a;
217
247
  var fonts = [];
218
248
  try {
219
249
  for (var styles_2 = __values(styles), styles_2_1 = styles_2.next(); !styles_2_1.done; styles_2_1 = styles_2.next()) {
220
250
  var style = styles_2_1.value;
251
+ if (style.standardFlag && style.standardFlag & 1) {
252
+ continue;
253
+ }
254
+ fonts.push.apply(fonts, __spreadArray([], __read(AcDbFontNameCollector.collectStyleEntryFontNames(style)), false));
255
+ }
256
+ }
257
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
258
+ finally {
259
+ try {
260
+ if (styles_2_1 && !styles_2_1.done && (_a = styles_2.return)) _a.call(styles_2);
261
+ }
262
+ finally { if (e_9) throw e_9.error; }
263
+ }
264
+ return fonts;
265
+ };
266
+ AcDbFontNameCollector.collectShapeDefinitionFonts = function (styles) {
267
+ var e_10, _a;
268
+ var fonts = [];
269
+ try {
270
+ for (var styles_3 = __values(styles), styles_3_1 = styles_3.next(); !styles_3_1.done; styles_3_1 = styles_3.next()) {
271
+ var style = styles_3_1.value;
221
272
  if (style.standardFlag && style.standardFlag & 1) {
222
273
  var normalized = AcDbFontNameCollector.normalizeFontFileName(style.font);
223
274
  if (normalized) {
@@ -226,32 +277,45 @@ var AcDbFontNameCollector = /** @class */ (function () {
226
277
  }
227
278
  }
228
279
  }
229
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
280
+ catch (e_10_1) { e_10 = { error: e_10_1 }; }
230
281
  finally {
231
282
  try {
232
- if (styles_2_1 && !styles_2_1.done && (_a = styles_2.return)) _a.call(styles_2);
283
+ if (styles_3_1 && !styles_3_1.done && (_a = styles_3.return)) _a.call(styles_3);
233
284
  }
234
- finally { if (e_8) throw e_8.error; }
285
+ finally { if (e_10) throw e_10.error; }
235
286
  }
236
287
  return fonts;
237
288
  };
238
289
  AcDbFontNameCollector.extractInlineMTextFonts = function (text) {
239
- var e_9, _a;
240
- var fonts = [];
290
+ var e_11, _a, e_12, _b;
291
+ var fonts = new Set();
241
292
  try {
242
- for (var _b = __values(text.matchAll(MTEXT_INLINE_FONT_PATTERN)), _c = _b.next(); !_c.done; _c = _b.next()) {
243
- var match = _c.value;
244
- fonts.push(match[1].toLowerCase());
293
+ for (var _c = __values(text.matchAll(MTEXT_INLINE_FONT_PIPE_PATTERN)), _d = _c.next(); !_d.done; _d = _c.next()) {
294
+ var match = _d.value;
295
+ fonts.add(match[1].toLowerCase());
245
296
  }
246
297
  }
247
- catch (e_9_1) { e_9 = { error: e_9_1 }; }
298
+ catch (e_11_1) { e_11 = { error: e_11_1 }; }
248
299
  finally {
249
300
  try {
250
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
301
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
251
302
  }
252
- finally { if (e_9) throw e_9.error; }
303
+ finally { if (e_11) throw e_11.error; }
253
304
  }
254
- return fonts;
305
+ try {
306
+ for (var _e = __values(text.matchAll(MTEXT_INLINE_FONT_SEMICOLON_PATTERN)), _f = _e.next(); !_f.done; _f = _e.next()) {
307
+ var match = _f.value;
308
+ fonts.add(match[1].toLowerCase());
309
+ }
310
+ }
311
+ catch (e_12_1) { e_12 = { error: e_12_1 }; }
312
+ finally {
313
+ try {
314
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
315
+ }
316
+ finally { if (e_12) throw e_12.error; }
317
+ }
318
+ return Array.from(fonts);
255
319
  };
256
320
  return AcDbFontNameCollector;
257
321
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"AcDbFontNameCollector.js","sourceRoot":"","sources":["../../src/converter/AcDbFontNameCollector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AcDbFontNameCollector.js","sourceRoot":"","sources":["../../src/converter/AcDbFontNameCollector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { AcGeBox3d, AcGeMatrix3d } from '@mlightcad/geometry-engine';
2
+ import { AcGiRenderer } from '@mlightcad/graphic-interface';
3
+ import { AcDbDxfFiler } from '../base/AcDbDxfFiler';
4
+ import { AcDbEntity } from './AcDbEntity';
5
+ /**
6
+ * Represents a 3D solid (ACIS/ASM B-rep) entity, such as those created by
7
+ * AutoCAD's BOX, WEDGE, EXTRUDE, or boolean solid-modeling commands.
8
+ *
9
+ * Full B-rep tessellation (rendering the solid's actual trimmed
10
+ * NURBS/planar faces) is not yet supported — that requires implementing (or
11
+ * embedding) a real ACIS/ASM geometry kernel, which is out of scope here.
12
+ *
13
+ * Instead, this renders a wireframe bounding box derived from every vertex
14
+ * position embedded in the entity's raw ACIS SAT data, so the solid is at
15
+ * least visible at its correct location and approximate size rather than
16
+ * silently missing from the drawing. The `point` record format is stable
17
+ * across ACIS SAT versions and independent of the (much more variable)
18
+ * topology record layouts, which is why this approach works without a full
19
+ * B-rep parser. When `acisData` holds binary ASM/SAB data instead of SAT
20
+ * text (common in DWG 2013+), no points are found and this renders nothing.
21
+ */
22
+ export declare class AcDb3dSolid extends AcDbEntity {
23
+ /** The entity type name */
24
+ static typeName: string;
25
+ get dxfTypeName(): string;
26
+ /** Raw ACIS SAT text (or ASM/SAB binary payload) for this solid. */
27
+ private _acisData;
28
+ /** DXF group 70 ACIS version number, when present. */
29
+ private _version?;
30
+ /** Vertex positions extracted from `point` records in {@link _acisData}. */
31
+ private _points;
32
+ /**
33
+ * Creates a new 3D solid entity from raw ACIS data.
34
+ *
35
+ * @param acisData - Raw ACIS SAT text (group 1/3 lines) or ASM/SAB binary payload.
36
+ * @param version - DXF group 70 ACIS version number, when present.
37
+ */
38
+ constructor(acisData: string, version?: number);
39
+ /**
40
+ * Raw ACIS SAT text (or ASM/SAB binary payload) for this solid, preserved
41
+ * for future full B-rep parsing support.
42
+ */
43
+ get acisData(): string;
44
+ /** DXF group 70 ACIS version number, when present. */
45
+ get version(): number | undefined;
46
+ /**
47
+ * Whether any vertex positions could be extracted from {@link acisData}.
48
+ * False when the data is binary (ASM/SAB) rather than SAT text.
49
+ */
50
+ get hasRenderableGeometry(): boolean;
51
+ /** @inheritdoc */
52
+ get geometricExtents(): AcGeBox3d;
53
+ /**
54
+ * Transforms this solid by the specified matrix.
55
+ *
56
+ * Only the extracted point cloud (and thus the wireframe bounding box) is
57
+ * transformed; {@link acisData} itself is left untouched since it isn't
58
+ * fully parsed.
59
+ */
60
+ transformBy(matrix: AcGeMatrix3d): this;
61
+ /**
62
+ * Draws a wireframe bounding box around the solid's extracted point cloud.
63
+ *
64
+ * @param renderer - The renderer to use for drawing
65
+ * @returns The rendered wireframe entity, or `undefined` when no points
66
+ * could be extracted from {@link acisData}.
67
+ */
68
+ subWorldDraw(renderer: AcGiRenderer): import("@mlightcad/graphic-interface").AcGiEntity | undefined;
69
+ /**
70
+ * Writes DXF fields for this object.
71
+ *
72
+ * @param filer - DXF output writer.
73
+ * @returns The instance (for chaining).
74
+ */
75
+ dxfOutFields(filer: AcDbDxfFiler): this;
76
+ }
77
+ //# sourceMappingURL=AcDb3dSolid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcDb3dSolid.d.ts","sourceRoot":"","sources":["../../src/entity/AcDb3dSolid.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,YAAY,EAEb,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAmCzC;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,WAAY,SAAQ,UAAU;IACzC,2BAA2B;IAC3B,OAAgB,QAAQ,EAAE,MAAM,CAAY;IAE5C,IAAa,WAAW,WAEvB;IAED,oEAAoE;IACpE,OAAO,CAAC,SAAS,CAAQ;IACzB,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAC,CAAQ;IACzB,4EAA4E;IAC5E,OAAO,CAAC,OAAO,CAAe;IAE9B;;;;;OAKG;gBACS,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAO9C;;;OAGG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,sDAAsD;IACtD,IAAI,OAAO,IAAI,MAAM,GAAG,SAAS,CAEhC;IAED;;;OAGG;IACH,IAAI,qBAAqB,IAAI,OAAO,CAEnC;IAED,kBAAkB;IAClB,IAAI,gBAAgB,IAAI,SAAS,CAKhC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,MAAM,EAAE,YAAY;IAKhC;;;;;;OAMG;IACH,YAAY,CAAC,QAAQ,EAAE,YAAY;IAgCnC;;;;;OAKG;IACM,YAAY,CAAC,KAAK,EAAE,YAAY;CAqB1C"}
@@ -0,0 +1,232 @@
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 __values = (this && this.__values) || function(o) {
17
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
18
+ if (m) return m.call(o);
19
+ if (o && typeof o.length === "number") return {
20
+ next: function () {
21
+ if (o && i >= o.length) o = void 0;
22
+ return { value: o && o[i++], done: !o };
23
+ }
24
+ };
25
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
26
+ };
27
+ import { AcGeBox3d, AcGePoint3d } from '@mlightcad/geometry-engine';
28
+ import { AcDbEntity } from './AcDbEntity';
29
+ /**
30
+ * Matches every `point` record in an ACIS SAT text stream, e.g.
31
+ * `point $-1 10 0 -10 #`. The `point` record format (attribute pointer
32
+ * followed by x/y/z) has been stable across ACIS SAT versions, unlike the
33
+ * topology records (`face`/`loop`/`coedge`/`edge`), whose field layout and
34
+ * count vary by surface/curve type and ACIS version. Extracting every point
35
+ * this way, independent of the body's topology, is a format detail that's
36
+ * safe to rely on regardless of which faces/edges reference it.
37
+ */
38
+ var ACIS_POINT_RECORD = /\bpoint\s+\$-?\d+\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)/g;
39
+ /**
40
+ * Extracts every vertex position referenced by `point` records in an ACIS
41
+ * SAT text stream.
42
+ *
43
+ * @param acisData - Raw ACIS SAT text (the concatenated group 1/3 lines of a
44
+ * DXF `3DSOLID`/`REGION`/`BODY` entity).
45
+ * @returns Every point found, in file order. Empty when `acisData` doesn't
46
+ * contain any recognizable `point` records (e.g. binary ASM/SAB data).
47
+ */
48
+ function extractAcisPointCloud(acisData) {
49
+ var e_1, _a;
50
+ var points = [];
51
+ try {
52
+ for (var _b = __values(acisData.matchAll(ACIS_POINT_RECORD)), _c = _b.next(); !_c.done; _c = _b.next()) {
53
+ var match = _c.value;
54
+ var x = Number.parseFloat(match[1]);
55
+ var y = Number.parseFloat(match[2]);
56
+ var z = Number.parseFloat(match[3]);
57
+ if (Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(z)) {
58
+ points.push(new AcGePoint3d(x, y, z));
59
+ }
60
+ }
61
+ }
62
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
63
+ finally {
64
+ try {
65
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
66
+ }
67
+ finally { if (e_1) throw e_1.error; }
68
+ }
69
+ return points;
70
+ }
71
+ /**
72
+ * Represents a 3D solid (ACIS/ASM B-rep) entity, such as those created by
73
+ * AutoCAD's BOX, WEDGE, EXTRUDE, or boolean solid-modeling commands.
74
+ *
75
+ * Full B-rep tessellation (rendering the solid's actual trimmed
76
+ * NURBS/planar faces) is not yet supported — that requires implementing (or
77
+ * embedding) a real ACIS/ASM geometry kernel, which is out of scope here.
78
+ *
79
+ * Instead, this renders a wireframe bounding box derived from every vertex
80
+ * position embedded in the entity's raw ACIS SAT data, so the solid is at
81
+ * least visible at its correct location and approximate size rather than
82
+ * silently missing from the drawing. The `point` record format is stable
83
+ * across ACIS SAT versions and independent of the (much more variable)
84
+ * topology record layouts, which is why this approach works without a full
85
+ * B-rep parser. When `acisData` holds binary ASM/SAB data instead of SAT
86
+ * text (common in DWG 2013+), no points are found and this renders nothing.
87
+ */
88
+ var AcDb3dSolid = /** @class */ (function (_super) {
89
+ __extends(AcDb3dSolid, _super);
90
+ /**
91
+ * Creates a new 3D solid entity from raw ACIS data.
92
+ *
93
+ * @param acisData - Raw ACIS SAT text (group 1/3 lines) or ASM/SAB binary payload.
94
+ * @param version - DXF group 70 ACIS version number, when present.
95
+ */
96
+ function AcDb3dSolid(acisData, version) {
97
+ var _this = _super.call(this) || this;
98
+ _this._acisData = acisData;
99
+ _this._version = version;
100
+ _this._points = extractAcisPointCloud(acisData);
101
+ return _this;
102
+ }
103
+ Object.defineProperty(AcDb3dSolid.prototype, "dxfTypeName", {
104
+ get: function () {
105
+ return '3DSOLID';
106
+ },
107
+ enumerable: false,
108
+ configurable: true
109
+ });
110
+ Object.defineProperty(AcDb3dSolid.prototype, "acisData", {
111
+ /**
112
+ * Raw ACIS SAT text (or ASM/SAB binary payload) for this solid, preserved
113
+ * for future full B-rep parsing support.
114
+ */
115
+ get: function () {
116
+ return this._acisData;
117
+ },
118
+ enumerable: false,
119
+ configurable: true
120
+ });
121
+ Object.defineProperty(AcDb3dSolid.prototype, "version", {
122
+ /** DXF group 70 ACIS version number, when present. */
123
+ get: function () {
124
+ return this._version;
125
+ },
126
+ enumerable: false,
127
+ configurable: true
128
+ });
129
+ Object.defineProperty(AcDb3dSolid.prototype, "hasRenderableGeometry", {
130
+ /**
131
+ * Whether any vertex positions could be extracted from {@link acisData}.
132
+ * False when the data is binary (ASM/SAB) rather than SAT text.
133
+ */
134
+ get: function () {
135
+ return this._points.length > 0;
136
+ },
137
+ enumerable: false,
138
+ configurable: true
139
+ });
140
+ Object.defineProperty(AcDb3dSolid.prototype, "geometricExtents", {
141
+ /** @inheritdoc */
142
+ get: function () {
143
+ if (this._points.length === 0) {
144
+ return new AcGeBox3d(new AcGePoint3d(0, 0, 0), new AcGePoint3d(0, 0, 0));
145
+ }
146
+ return new AcGeBox3d().setFromPoints(this._points);
147
+ },
148
+ enumerable: false,
149
+ configurable: true
150
+ });
151
+ /**
152
+ * Transforms this solid by the specified matrix.
153
+ *
154
+ * Only the extracted point cloud (and thus the wireframe bounding box) is
155
+ * transformed; {@link acisData} itself is left untouched since it isn't
156
+ * fully parsed.
157
+ */
158
+ AcDb3dSolid.prototype.transformBy = function (matrix) {
159
+ this._points.forEach(function (point) { return point.applyMatrix4(matrix); });
160
+ return this;
161
+ };
162
+ /**
163
+ * Draws a wireframe bounding box around the solid's extracted point cloud.
164
+ *
165
+ * @param renderer - The renderer to use for drawing
166
+ * @returns The rendered wireframe entity, or `undefined` when no points
167
+ * could be extracted from {@link acisData}.
168
+ */
169
+ AcDb3dSolid.prototype.subWorldDraw = function (renderer) {
170
+ if (this._points.length === 0) {
171
+ return undefined;
172
+ }
173
+ var box = this.geometricExtents;
174
+ var min = box.min;
175
+ var max = box.max;
176
+ var corners = [
177
+ new AcGePoint3d(min.x, min.y, min.z),
178
+ new AcGePoint3d(max.x, min.y, min.z),
179
+ new AcGePoint3d(max.x, max.y, min.z),
180
+ new AcGePoint3d(min.x, max.y, min.z),
181
+ new AcGePoint3d(min.x, min.y, max.z),
182
+ new AcGePoint3d(max.x, min.y, max.z),
183
+ new AcGePoint3d(max.x, max.y, max.z),
184
+ new AcGePoint3d(min.x, max.y, max.z)
185
+ ];
186
+ var buffer = new Float32Array(corners.length * 3);
187
+ corners.forEach(function (corner, i) {
188
+ buffer[i * 3] = corner.x;
189
+ buffer[i * 3 + 1] = corner.y;
190
+ buffer[i * 3 + 2] = corner.z;
191
+ });
192
+ // 12 edges of a box, referencing the 8 corners above.
193
+ var indices = new Uint16Array([
194
+ 0, 1, 1, 2, 2, 3, 3, 0, // bottom face
195
+ 4, 5, 5, 6, 6, 7, 7, 4, // top face
196
+ 0, 4, 1, 5, 2, 6, 3, 7 // vertical edges
197
+ ]);
198
+ return renderer.lineSegments(buffer, 3, indices);
199
+ };
200
+ /**
201
+ * Writes DXF fields for this object.
202
+ *
203
+ * @param filer - DXF output writer.
204
+ * @returns The instance (for chaining).
205
+ */
206
+ AcDb3dSolid.prototype.dxfOutFields = function (filer) {
207
+ _super.prototype.dxfOutFields.call(this, filer);
208
+ filer.writeSubclassMarker('AcDb3dSolid');
209
+ if (this._version != null) {
210
+ filer.writeInt16(70, this._version);
211
+ }
212
+ // ACIS text is written as chunked group-3 continuation lines (max 255
213
+ // chars each per the DXF spec), terminated by a final group-1 line.
214
+ var maxChunkLength = 255;
215
+ var lines = this._acisData.split('\n');
216
+ for (var i = 0; i < lines.length; i++) {
217
+ var isLast = i === lines.length - 1;
218
+ var line = lines[i];
219
+ while (line.length > maxChunkLength) {
220
+ filer.writeString(3, line.slice(0, maxChunkLength));
221
+ line = line.slice(maxChunkLength);
222
+ }
223
+ filer.writeString(isLast ? 1 : 3, line);
224
+ }
225
+ return this;
226
+ };
227
+ /** The entity type name */
228
+ AcDb3dSolid.typeName = '3dSolid';
229
+ return AcDb3dSolid;
230
+ }(AcDbEntity));
231
+ export { AcDb3dSolid };
232
+ //# sourceMappingURL=AcDb3dSolid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcDb3dSolid.js","sourceRoot":"","sources":["../../src/entity/AcDb3dSolid.ts"],"names":[],"mappings":"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"}