@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.
- package/dist/data-model.cjs +10 -8
- package/lib/converter/AcDbFontNameCollector.d.ts +6 -0
- package/lib/converter/AcDbFontNameCollector.d.ts.map +1 -1
- package/lib/converter/AcDbFontNameCollector.js +101 -37
- package/lib/converter/AcDbFontNameCollector.js.map +1 -1
- package/lib/entity/AcDb3dSolid.d.ts +77 -0
- package/lib/entity/AcDb3dSolid.d.ts.map +1 -0
- package/lib/entity/AcDb3dSolid.js +232 -0
- package/lib/entity/AcDb3dSolid.js.map +1 -0
- package/lib/entity/AcDbFcf.d.ts +144 -0
- package/lib/entity/AcDbFcf.d.ts.map +1 -0
- package/lib/entity/AcDbFcf.js +718 -0
- package/lib/entity/AcDbFcf.js.map +1 -0
- package/lib/entity/index.d.ts +2 -0
- package/lib/entity/index.d.ts.map +1 -1
- package/lib/entity/index.js +2 -0
- package/lib/entity/index.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -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":"
|
|
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
|
-
|
|
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
|
|
51
|
-
var fontName =
|
|
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 (
|
|
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
|
|
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 = (
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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
|
|
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 = (
|
|
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 (
|
|
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 (
|
|
184
|
+
finally { if (e_6) throw e_6.error; }
|
|
160
185
|
}
|
|
161
186
|
}
|
|
162
187
|
}
|
|
163
|
-
catch (
|
|
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 (
|
|
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
|
|
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 (
|
|
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 (
|
|
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
|
|
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 (
|
|
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 (
|
|
236
|
+
finally { if (e_8) throw e_8.error; }
|
|
212
237
|
}
|
|
213
238
|
return fontNames;
|
|
214
239
|
};
|
|
215
|
-
|
|
216
|
-
|
|
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 (
|
|
280
|
+
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
230
281
|
finally {
|
|
231
282
|
try {
|
|
232
|
-
if (
|
|
283
|
+
if (styles_3_1 && !styles_3_1.done && (_a = styles_3.return)) _a.call(styles_3);
|
|
233
284
|
}
|
|
234
|
-
finally { if (
|
|
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
|
|
240
|
-
var fonts =
|
|
290
|
+
var e_11, _a, e_12, _b;
|
|
291
|
+
var fonts = new Set();
|
|
241
292
|
try {
|
|
242
|
-
for (var
|
|
243
|
-
var match =
|
|
244
|
-
fonts.
|
|
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 (
|
|
298
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
248
299
|
finally {
|
|
249
300
|
try {
|
|
250
|
-
if (
|
|
301
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
251
302
|
}
|
|
252
|
-
finally { if (
|
|
303
|
+
finally { if (e_11) throw e_11.error; }
|
|
253
304
|
}
|
|
254
|
-
|
|
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":"
|
|
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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"}
|