@mlightcad/libredwg-converter 3.1.15 → 3.1.17
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/libredwg-converter.js +98 -98
- package/dist/libredwg-converter.umd.cjs +1 -1
- package/dist/libredwg-parser-worker.js +380 -380
- package/lib/AcDbEntitiyConverter.d.ts.map +1 -1
- package/lib/AcDbEntitiyConverter.js +4 -2
- package/lib/AcDbEntitiyConverter.js.map +1 -1
- package/lib/AcDbLibreDwgConverter.d.ts.map +1 -1
- package/lib/AcDbLibreDwgConverter.js +8 -1
- package/lib/AcDbLibreDwgConverter.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AcDbFace as E, AcDbArc as M, AcGeVector3d as D, AcDbCircle as L, AcDbEllipse as C, AcDbLine as x, AcGePoint3d as I, AcDbSpline as w, AcDbPoint as v, AcDbTrace as O, AcDbPolyline as
|
|
1
|
+
import { AcDbFace as E, AcDbArc as M, AcGeVector3d as D, AcDbCircle as L, AcDbEllipse as C, AcDbLine as x, AcGePoint3d as I, AcDbSpline as w, AcDbPoint as v, AcDbTrace as O, AcDbPolyline as R, AcGePoint2d as y, AcDbPoly2dType as A, AcDb2dPolyline as k, AcDbPoly3dType as b, AcDb3dPolyline as m, AcDbHatch as V, AcGePolyline2d as N, AcGeLoop2d as F, AcGeLine2d as B, AcGeCircArc2d as j, AcGeVector2d as z, AcGeEllipseArc2d as W, AcGeSpline3d as T, AcDbTable as H, AcDbText as X, AcDbMText as G, AcDbLeader as U, AcDbAlignedDimension as Y, AcDb3PointAngularDimension as Z, AcDbOrdinateDimension as _, AcDbRadialDimension as K, AcDbDiametricDimension as q, AcDbRasterImage as J, AcDbWipeout as Q, AcDbViewport as $, AcDbRay as ee, AcDbXline as ne, AcDbBlockReference as te, AcDbDatabaseConverter as oe, createWorkerApi as se, AcDbLinetypeTableRecord as re, AcDbTextStyleTableRecord as ie, AcDbDimStyleTableRecord as ce, AcCmColor as ae, AcDbLayerTableRecord as le, AcDbViewportTableRecord as de, AcDbBlockTableRecord as pe, AcDbBatchProcessing as ue, AcDbLayout as fe, AcDbRasterImageDef as he } from "@mlightcad/data-model";
|
|
2
2
|
class P {
|
|
3
3
|
convert(e) {
|
|
4
4
|
const n = this.createEntity(e);
|
|
@@ -33,22 +33,22 @@ class P {
|
|
|
33
33
|
);
|
|
34
34
|
}
|
|
35
35
|
convertEllipse(e) {
|
|
36
|
-
const n = new D(e.majorAxisEndPoint),
|
|
36
|
+
const n = new D(e.majorAxisEndPoint), s = n.length();
|
|
37
37
|
return new C(
|
|
38
38
|
e.center,
|
|
39
39
|
e.extrusionDirection ?? D.Z_AXIS,
|
|
40
40
|
n,
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
s,
|
|
42
|
+
s * e.axisRatio,
|
|
43
43
|
e.startAngle,
|
|
44
44
|
e.endAngle
|
|
45
45
|
);
|
|
46
46
|
}
|
|
47
47
|
convertLine(e) {
|
|
48
|
-
const n = e.startPoint,
|
|
48
|
+
const n = e.startPoint, s = e.endPoint;
|
|
49
49
|
return new x(
|
|
50
50
|
new I(n.x, n.y, n.z),
|
|
51
|
-
new I(
|
|
51
|
+
new I(s.x, s.y, s.z)
|
|
52
52
|
);
|
|
53
53
|
}
|
|
54
54
|
convertSpline(e) {
|
|
@@ -85,30 +85,30 @@ class P {
|
|
|
85
85
|
), n.thickness = e.thickness, n;
|
|
86
86
|
}
|
|
87
87
|
convertLWPolyline(e) {
|
|
88
|
-
const n = new
|
|
89
|
-
return n.closed = !!(e.flag & 512), e.vertices.forEach((
|
|
88
|
+
const n = new R();
|
|
89
|
+
return n.closed = !!(e.flag & 512), e.vertices.forEach((s, t) => {
|
|
90
90
|
n.addVertexAt(
|
|
91
91
|
t,
|
|
92
|
-
new y(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
new y(s.x, s.y),
|
|
93
|
+
s.bulge,
|
|
94
|
+
s.startWidth,
|
|
95
|
+
s.endWidth
|
|
96
96
|
);
|
|
97
97
|
}), n;
|
|
98
98
|
}
|
|
99
99
|
convertPolyline2d(e) {
|
|
100
|
-
const n = !!(e.flag & 1),
|
|
101
|
-
e.vertices.map((
|
|
102
|
-
|
|
103
|
-
x:
|
|
104
|
-
y:
|
|
105
|
-
z:
|
|
106
|
-
}), t.push(
|
|
100
|
+
const n = !!(e.flag & 1), s = [], t = [];
|
|
101
|
+
e.vertices.map((r) => {
|
|
102
|
+
r.flag & 16 || (s.push({
|
|
103
|
+
x: r.x,
|
|
104
|
+
y: r.y,
|
|
105
|
+
z: r.z
|
|
106
|
+
}), t.push(r.bulge ?? 0));
|
|
107
107
|
});
|
|
108
108
|
let o = A.SimplePoly;
|
|
109
|
-
return e.flag & 2 ? o = A.FitCurvePoly : e.flag & 4 && (e.smoothType == 6 ? o = A.CubicSplinePoly : e.smoothType == 5 && (o = A.QuadSplinePoly)), new
|
|
109
|
+
return e.flag & 2 ? o = A.FitCurvePoly : e.flag & 4 && (e.smoothType == 6 ? o = A.CubicSplinePoly : e.smoothType == 5 && (o = A.QuadSplinePoly)), new k(
|
|
110
110
|
o,
|
|
111
|
-
|
|
111
|
+
s,
|
|
112
112
|
0,
|
|
113
113
|
n,
|
|
114
114
|
e.startWidth,
|
|
@@ -117,20 +117,20 @@ class P {
|
|
|
117
117
|
);
|
|
118
118
|
}
|
|
119
119
|
convertPolyline3d(e) {
|
|
120
|
-
const n = !!(e.flag & 1),
|
|
120
|
+
const n = !!(e.flag & 1), s = [];
|
|
121
121
|
e.vertices.map((o) => {
|
|
122
|
-
o.flag & 16 ||
|
|
122
|
+
o.flag & 16 || s.push({
|
|
123
123
|
x: o.x,
|
|
124
124
|
y: o.y,
|
|
125
125
|
z: o.z
|
|
126
126
|
});
|
|
127
127
|
});
|
|
128
128
|
let t = b.SimplePoly;
|
|
129
|
-
return e.flag & 4 && (e.smoothType == 6 ? t = b.CubicSplinePoly : e.smoothType == 5 && (t = b.QuadSplinePoly)), new m(t,
|
|
129
|
+
return e.flag & 4 && (e.smoothType == 6 ? t = b.CubicSplinePoly : e.smoothType == 5 && (t = b.QuadSplinePoly)), new m(t, s, n);
|
|
130
130
|
}
|
|
131
131
|
convertHatch(e) {
|
|
132
132
|
var t;
|
|
133
|
-
const n = new
|
|
133
|
+
const n = new V();
|
|
134
134
|
return (t = e.definitionLines) == null || t.forEach((o) => {
|
|
135
135
|
n.definitionLines.push({
|
|
136
136
|
angle: o.angle,
|
|
@@ -138,9 +138,9 @@ class P {
|
|
|
138
138
|
delta: o.offset,
|
|
139
139
|
dashPattern: o.numberOfDashLengths > 0 ? o.dashLengths : []
|
|
140
140
|
});
|
|
141
|
-
}), n.hatchStyle = e.hatchStyle, n.patternName = e.patternName, n.patternType = e.patternType, n.patternAngle = e.patternAngle == null ? 0 : e.patternAngle, n.patternScale = e.patternScale == null ? 0 : e.patternScale, e.boundaryPaths.forEach((o) => {
|
|
141
|
+
}), n.isSolidFill = e.solidFill == 1, n.hatchStyle = e.hatchStyle, n.patternName = e.patternName, n.patternType = e.patternType, n.patternAngle = e.patternAngle == null ? 0 : e.patternAngle, n.patternScale = e.patternScale == null ? 0 : e.patternScale, e.boundaryPaths.forEach((o) => {
|
|
142
142
|
if (o.boundaryPathTypeFlag & 2) {
|
|
143
|
-
const a = o, i = new
|
|
143
|
+
const a = o, i = new N();
|
|
144
144
|
i.closed = a.isClosed, a.vertices.forEach((l, c) => {
|
|
145
145
|
i.addVertexAt(c, {
|
|
146
146
|
x: l.x,
|
|
@@ -225,11 +225,11 @@ class P {
|
|
|
225
225
|
e.columnCount
|
|
226
226
|
);
|
|
227
227
|
return n.attachmentPoint = e.attachmentPoint, n.position.copy(e.startPoint), e.columnWidthArr.forEach(
|
|
228
|
-
(
|
|
228
|
+
(s, t) => n.setColumnWidth(t, s)
|
|
229
229
|
), e.rowHeightArr.forEach(
|
|
230
|
-
(
|
|
231
|
-
), e.cells.forEach((
|
|
232
|
-
n.setCell(t,
|
|
230
|
+
(s, t) => n.setRowHeight(t, s)
|
|
231
|
+
), e.cells.forEach((s, t) => {
|
|
232
|
+
n.setCell(t, s);
|
|
233
233
|
}), n;
|
|
234
234
|
}
|
|
235
235
|
convertText(e) {
|
|
@@ -242,56 +242,56 @@ class P {
|
|
|
242
242
|
}
|
|
243
243
|
convertLeader(e) {
|
|
244
244
|
const n = new U();
|
|
245
|
-
return e.vertices.forEach((
|
|
246
|
-
n.appendVertex(
|
|
245
|
+
return e.vertices.forEach((s) => {
|
|
246
|
+
n.appendVertex(s);
|
|
247
247
|
}), n.hasArrowHead = e.isArrowheadEnabled, n.hasHookLine = e.isHooklineExists, n.isSplined = e.isSpline, n.dimensionStyle = e.styleName, n.annoType = e.leaderCreationFlag, n;
|
|
248
248
|
}
|
|
249
249
|
convertDimension(e) {
|
|
250
250
|
if (e.subclassMarker == "AcDbAlignedDimension" || e.subclassMarker == "AcDbRotatedDimension") {
|
|
251
|
-
const n = e,
|
|
251
|
+
const n = e, s = new Y(
|
|
252
252
|
n.subDefinitionPoint1,
|
|
253
253
|
n.subDefinitionPoint2,
|
|
254
254
|
n.definitionPoint
|
|
255
255
|
);
|
|
256
|
-
return n.insertionPoint && (
|
|
256
|
+
return n.insertionPoint && (s.dimBlockPosition = {
|
|
257
257
|
x: n.insertionPoint.x,
|
|
258
258
|
y: n.insertionPoint.y,
|
|
259
259
|
z: 0
|
|
260
|
-
}),
|
|
260
|
+
}), s.rotation = n.rotationAngle, this.processDimensionCommonAttrs(e, s), s;
|
|
261
261
|
} else if (e.subclassMarker == "AcDb3PointAngularDimension") {
|
|
262
|
-
const n = e,
|
|
262
|
+
const n = e, s = new Z(
|
|
263
263
|
n.centerPoint,
|
|
264
264
|
n.subDefinitionPoint1,
|
|
265
265
|
n.subDefinitionPoint2,
|
|
266
266
|
n.definitionPoint
|
|
267
267
|
);
|
|
268
|
-
return this.processDimensionCommonAttrs(e,
|
|
268
|
+
return this.processDimensionCommonAttrs(e, s), s;
|
|
269
269
|
} else if (e.subclassMarker == "AcDbOrdinateDimension") {
|
|
270
|
-
const n = e,
|
|
270
|
+
const n = e, s = new _(
|
|
271
271
|
n.subDefinitionPoint1,
|
|
272
272
|
n.subDefinitionPoint2
|
|
273
273
|
);
|
|
274
|
-
return this.processDimensionCommonAttrs(e,
|
|
274
|
+
return this.processDimensionCommonAttrs(e, s), s;
|
|
275
275
|
} else if (e.subclassMarker == "AcDbRadialDimension") {
|
|
276
|
-
const n = e,
|
|
276
|
+
const n = e, s = new K(
|
|
277
277
|
n.definitionPoint,
|
|
278
278
|
n.centerPoint,
|
|
279
279
|
n.leaderLength
|
|
280
280
|
);
|
|
281
|
-
return this.processDimensionCommonAttrs(e,
|
|
281
|
+
return this.processDimensionCommonAttrs(e, s), s;
|
|
282
282
|
} else if (e.subclassMarker == "AcDbDiametricDimension") {
|
|
283
|
-
const n = e,
|
|
283
|
+
const n = e, s = new q(
|
|
284
284
|
n.definitionPoint,
|
|
285
285
|
n.centerPoint,
|
|
286
286
|
n.leaderLength
|
|
287
287
|
);
|
|
288
|
-
return this.processDimensionCommonAttrs(e,
|
|
288
|
+
return this.processDimensionCommonAttrs(e, s), s;
|
|
289
289
|
}
|
|
290
290
|
return null;
|
|
291
291
|
}
|
|
292
292
|
processImage(e, n) {
|
|
293
|
-
n.position.copy(e.position), n.brightness = e.brightness, n.contrast = e.contrast, n.fade = e.fade, n.imageDefId = e.imageDefHandle.toString(), n.isClipped = e.clipping > 0, n.isShownClipped = (e.flags | 4) > 0, n.isImageShown = (e.flags | 3) > 0, n.isImageTransparent = (e.flags | 8) > 0, e.clippingBoundaryPath.forEach((
|
|
294
|
-
n.clipBoundary.push(new y(
|
|
293
|
+
n.position.copy(e.position), n.brightness = e.brightness, n.contrast = e.contrast, n.fade = e.fade, n.imageDefId = e.imageDefHandle.toString(), n.isClipped = e.clipping > 0, n.isShownClipped = (e.flags | 4) > 0, n.isImageShown = (e.flags | 3) > 0, n.isImageTransparent = (e.flags | 8) > 0, e.clippingBoundaryPath.forEach((s) => {
|
|
294
|
+
n.clipBoundary.push(new y(s));
|
|
295
295
|
}), n.clipBoundaryType = e.clippingBoundaryType, n.width = Math.sqrt(
|
|
296
296
|
e.uPixel.x ** 2 + e.uPixel.y ** 2 + e.uPixel.z ** 2
|
|
297
297
|
) * e.imageSize.x, n.height = Math.sqrt(
|
|
@@ -326,7 +326,7 @@ class P {
|
|
|
326
326
|
n.dimBlockId = e.name, n.textPosition.copy(e.textPoint), n.textRotation = e.textRotation || 0, e.textLineSpacingFactor && (n.textLineSpacingFactor = e.textLineSpacingFactor), e.textLineSpacingStyle && (n.textLineSpacingStyle = e.textLineSpacingStyle), n.dimensionStyleName = e.styleName, n.dimensionText = e.text || "", n.measurement = e.measurement;
|
|
327
327
|
}
|
|
328
328
|
processCommonAttrs(e, n) {
|
|
329
|
-
n.layer = e.layer || "0", n.objectId = e.handle.toString(), n.ownerId = e.ownerBlockRecordSoftId.toString(), e.lineType != null && (n.lineType = e.lineType), e.lineweight != null && (n.lineWeight = e.lineweight), e.lineTypeScale != null && (n.linetypeScale = e.lineTypeScale), e.color != null &&
|
|
329
|
+
n.layer = e.layer || "0", n.objectId = e.handle.toString(), n.ownerId = e.ownerBlockRecordSoftId.toString(), e.lineType != null && (n.lineType = e.lineType), e.lineweight != null && (n.lineWeight = e.lineweight), e.lineTypeScale != null && (n.linetypeScale = e.lineTypeScale), e.color != null && n.color.setRGBValue(e.color), e.colorIndex != null && (n.color.colorIndex = e.colorIndex), e.colorName && (n.color.colorName = e.colorName), e.isVisible != null && (n.visibility = e.isVisible), e.transparency != null && (n.transparency = e.transparency);
|
|
330
330
|
}
|
|
331
331
|
}
|
|
332
332
|
class ge extends oe {
|
|
@@ -335,12 +335,12 @@ class ge extends oe {
|
|
|
335
335
|
}
|
|
336
336
|
async parse(e) {
|
|
337
337
|
if (this.config.useWorker && this.config.parserWorkerUrl) {
|
|
338
|
-
const n =
|
|
338
|
+
const n = se({
|
|
339
339
|
workerUrl: this.config.parserWorkerUrl,
|
|
340
340
|
// One concurrent worker needed for parser
|
|
341
341
|
maxConcurrentWorkers: 1
|
|
342
|
-
}),
|
|
343
|
-
return n.destroy(),
|
|
342
|
+
}), s = await n.execute(e);
|
|
343
|
+
return n.destroy(), s.data;
|
|
344
344
|
} else
|
|
345
345
|
throw new Error("dwg converter can run in web worker only!");
|
|
346
346
|
}
|
|
@@ -351,42 +351,42 @@ class ge extends oe {
|
|
|
351
351
|
*/
|
|
352
352
|
getFonts(e) {
|
|
353
353
|
const n = /* @__PURE__ */ new Map();
|
|
354
|
-
e.tables.BLOCK_RECORD.entries.forEach((
|
|
355
|
-
n.set(
|
|
354
|
+
e.tables.BLOCK_RECORD.entries.forEach((r) => {
|
|
355
|
+
n.set(r.name, r);
|
|
356
356
|
});
|
|
357
|
-
const
|
|
358
|
-
if (
|
|
359
|
-
const a =
|
|
360
|
-
return a >= 0 ?
|
|
357
|
+
const s = /* @__PURE__ */ new Map(), t = (r) => {
|
|
358
|
+
if (r) {
|
|
359
|
+
const a = r.lastIndexOf(".");
|
|
360
|
+
return a >= 0 ? r.substring(0, a).toLowerCase() : r.toLowerCase();
|
|
361
361
|
}
|
|
362
362
|
};
|
|
363
|
-
e.tables.STYLE.entries.forEach((
|
|
363
|
+
e.tables.STYLE.entries.forEach((r) => {
|
|
364
364
|
const a = [];
|
|
365
|
-
let i = t(
|
|
366
|
-
i && a.push(i), i = t(
|
|
365
|
+
let i = t(r.font);
|
|
366
|
+
i && a.push(i), i = t(r.bigFont), i && a.push(i), s.set(r.name, a);
|
|
367
367
|
});
|
|
368
368
|
const o = /* @__PURE__ */ new Set();
|
|
369
|
-
return this.getFontsInBlock(e.entities, n,
|
|
369
|
+
return this.getFontsInBlock(e.entities, n, s, o), Array.from(o);
|
|
370
370
|
}
|
|
371
371
|
/**
|
|
372
372
|
* Iterate entities in model space to get fonts used by text, mtext and insert entities
|
|
373
373
|
*/
|
|
374
|
-
getFontsInBlock(e, n,
|
|
374
|
+
getFontsInBlock(e, n, s, t) {
|
|
375
375
|
const o = /\\f(.*?)\|/g;
|
|
376
|
-
e.forEach((
|
|
377
|
-
if (
|
|
378
|
-
const a =
|
|
376
|
+
e.forEach((r) => {
|
|
377
|
+
if (r.type == "MTEXT") {
|
|
378
|
+
const a = r;
|
|
379
379
|
[...a.text.matchAll(o)].forEach((l) => {
|
|
380
380
|
t.add(l[1].toLowerCase());
|
|
381
381
|
});
|
|
382
|
-
const i =
|
|
382
|
+
const i = s.get(a.styleName);
|
|
383
383
|
i == null || i.forEach((l) => t.add(l));
|
|
384
|
-
} else if (
|
|
385
|
-
const a =
|
|
384
|
+
} else if (r.type == "TEXT") {
|
|
385
|
+
const a = r, i = s.get(a.styleName);
|
|
386
386
|
i == null || i.forEach((l) => t.add(l));
|
|
387
|
-
} else if (
|
|
388
|
-
const a =
|
|
389
|
-
i && this.getFontsInBlock(i.entities, n,
|
|
387
|
+
} else if (r.type == "INSERT") {
|
|
388
|
+
const a = r, i = n.get(a.name);
|
|
389
|
+
i && this.getFontsInBlock(i.entities, n, s, t);
|
|
390
390
|
}
|
|
391
391
|
});
|
|
392
392
|
}
|
|
@@ -398,8 +398,8 @@ class ge extends oe {
|
|
|
398
398
|
standardFlag: t.standardFlag,
|
|
399
399
|
totalPatternLength: t.totalPatternLength,
|
|
400
400
|
pattern: t.pattern
|
|
401
|
-
},
|
|
402
|
-
this.processCommonTableEntryAttrs(t,
|
|
401
|
+
}, r = new re(o);
|
|
402
|
+
this.processCommonTableEntryAttrs(t, r), r.name = t.name, n.tables.linetypeTable.add(r);
|
|
403
403
|
});
|
|
404
404
|
}
|
|
405
405
|
processTextStyles(e, n) {
|
|
@@ -484,15 +484,15 @@ class ge extends oe {
|
|
|
484
484
|
// TODO: Set correct value
|
|
485
485
|
dimlwd: t.DIMLWD,
|
|
486
486
|
dimlwe: t.DIMLWE
|
|
487
|
-
},
|
|
488
|
-
this.processCommonTableEntryAttrs(t,
|
|
487
|
+
}, r = new ce(o);
|
|
488
|
+
this.processCommonTableEntryAttrs(t, r), n.tables.dimStyleTable.add(r);
|
|
489
489
|
});
|
|
490
490
|
}
|
|
491
491
|
processLayers(e, n) {
|
|
492
492
|
e.tables.LAYER.entries.forEach((t) => {
|
|
493
493
|
const o = new ae();
|
|
494
494
|
o.colorIndex = t.colorIndex;
|
|
495
|
-
const
|
|
495
|
+
const r = new le({
|
|
496
496
|
name: t.name,
|
|
497
497
|
standardFlags: t.standardFlag,
|
|
498
498
|
linetype: t.lineType,
|
|
@@ -501,7 +501,7 @@ class ge extends oe {
|
|
|
501
501
|
color: o,
|
|
502
502
|
isPlottable: t.plotFlag != 0
|
|
503
503
|
});
|
|
504
|
-
this.processCommonTableEntryAttrs(t,
|
|
504
|
+
this.processCommonTableEntryAttrs(t, r), n.tables.layerTable.add(r);
|
|
505
505
|
});
|
|
506
506
|
}
|
|
507
507
|
processViewports(e, n) {
|
|
@@ -519,9 +519,9 @@ class ge extends oe {
|
|
|
519
519
|
processBlocks(e, n) {
|
|
520
520
|
}
|
|
521
521
|
async processEntitiesInBlock(e, n) {
|
|
522
|
-
const
|
|
523
|
-
for (let
|
|
524
|
-
const a = e[
|
|
522
|
+
const s = new P(), t = e.length, o = [];
|
|
523
|
+
for (let r = 0; r < t; r++) {
|
|
524
|
+
const a = e[r], i = s.convert(a);
|
|
525
525
|
i && o.push(i);
|
|
526
526
|
}
|
|
527
527
|
n.appendEntity(o);
|
|
@@ -531,20 +531,20 @@ class ge extends oe {
|
|
|
531
531
|
* as "batch processing" or "cooperative multitasking," where the time-consuming task is broken into
|
|
532
532
|
* smaller pieces and executed in small intervals to allow the UI to remain responsive.
|
|
533
533
|
*/
|
|
534
|
-
async processEntities(e, n,
|
|
535
|
-
const
|
|
534
|
+
async processEntities(e, n, s, t, o) {
|
|
535
|
+
const r = new P();
|
|
536
536
|
let a = e.entities;
|
|
537
537
|
const i = a.length, l = new ue(
|
|
538
538
|
i,
|
|
539
539
|
100 - t.value,
|
|
540
|
-
|
|
540
|
+
s
|
|
541
541
|
);
|
|
542
542
|
this.config.convertByEntityType && (a = this.groupAndFlattenByType(a));
|
|
543
543
|
const c = n.tables.blockTable.modelSpace;
|
|
544
544
|
await l.processChunk(async (u, p) => {
|
|
545
545
|
const f = [];
|
|
546
546
|
for (let d = u; d < p; d++) {
|
|
547
|
-
const h = a[d], g =
|
|
547
|
+
const h = a[d], g = r.convert(h);
|
|
548
548
|
g && f.push(g);
|
|
549
549
|
}
|
|
550
550
|
if (c.appendEntity(f), o) {
|
|
@@ -554,8 +554,8 @@ class ge extends oe {
|
|
|
554
554
|
});
|
|
555
555
|
}
|
|
556
556
|
processHeader(e, n) {
|
|
557
|
-
const
|
|
558
|
-
n.cecolor.colorIndex =
|
|
557
|
+
const s = e.header;
|
|
558
|
+
s.CECOLOR && (s.CECOLOR.index >= 0 && s.CECOLOR.index <= 256 ? n.cecolor.colorIndex = s.CECOLOR.index : n.cecolor.setRGBValue(s.CECOLOR.rgb)), n.angBase = s.ANGBASE ?? 0, n.angDir = s.ANGDIR ?? 0, n.aunits = s.AUNITS ?? 0, s.EXTMAX && (n.extmax = s.EXTMAX), s.EXTMIN && (n.extmin = s.EXTMIN), n.insunits = s.INSUNITS ?? 1, n.pdmode = s.PDMODE ?? 0, n.pdsize = s.PDSIZE ?? 0;
|
|
559
559
|
}
|
|
560
560
|
processCommonTableEntryAttrs(e, n) {
|
|
561
561
|
n.name = e.name, n.objectId = e.handle.toString(), n.ownerId = e.ownerHandle.toString();
|
|
@@ -564,25 +564,25 @@ class ge extends oe {
|
|
|
564
564
|
this.processLayouts(e, n), this.processImageDefs(e, n);
|
|
565
565
|
}
|
|
566
566
|
processLayouts(e, n) {
|
|
567
|
-
const
|
|
567
|
+
const s = n.dictionaries.layouts;
|
|
568
568
|
e.objects.LAYOUT.forEach((o) => {
|
|
569
|
-
const
|
|
570
|
-
|
|
569
|
+
const r = new fe();
|
|
570
|
+
r.layoutName = o.layoutName, r.tabOrder = o.tabOrder;
|
|
571
571
|
const a = n.tables.blockTable.newIterator();
|
|
572
|
-
|
|
572
|
+
r.objectId = o.handle.toString();
|
|
573
573
|
for (const i of a)
|
|
574
|
-
if (i.layoutId ===
|
|
575
|
-
|
|
574
|
+
if (i.layoutId === r.objectId) {
|
|
575
|
+
r.blockTableRecordId = i.objectId;
|
|
576
576
|
break;
|
|
577
577
|
}
|
|
578
|
-
|
|
578
|
+
r.blockTableRecordId || o.layoutName === "Model" && (r.blockTableRecordId = n.tables.blockTable.modelSpace.objectId), r.limits.min.copy(o.minLimit), r.limits.max.copy(o.maxLimit), r.extents.min.copy(o.minExtent), r.extents.max.copy(o.maxExtent), this.processCommonObjectAttrs(o, r), s.setAt(r.layoutName, r);
|
|
579
579
|
});
|
|
580
580
|
}
|
|
581
581
|
processImageDefs(e, n) {
|
|
582
|
-
const
|
|
582
|
+
const s = n.dictionaries.imageDefs;
|
|
583
583
|
e.objects.IMAGEDEF.forEach((o) => {
|
|
584
|
-
const
|
|
585
|
-
|
|
584
|
+
const r = new he();
|
|
585
|
+
r.sourceFileName = o.fileName, this.processCommonObjectAttrs(o, r), s.setAt(r.objectId, r);
|
|
586
586
|
});
|
|
587
587
|
}
|
|
588
588
|
processCommonObjectAttrs(e, n) {
|
|
@@ -602,10 +602,10 @@ class ge extends oe {
|
|
|
602
602
|
* @returns A new array of entities grouped by their `type` property.
|
|
603
603
|
*/
|
|
604
604
|
groupAndFlattenByType(e) {
|
|
605
|
-
const n = {},
|
|
605
|
+
const n = {}, s = [];
|
|
606
606
|
for (const t of e)
|
|
607
|
-
n[t.type] || (n[t.type] = [],
|
|
608
|
-
return
|
|
607
|
+
n[t.type] || (n[t.type] = [], s.push(t.type)), n[t.type].push(t);
|
|
608
|
+
return s.flatMap((t) => n[t]);
|
|
609
609
|
}
|
|
610
610
|
}
|
|
611
611
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(f,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("@mlightcad/data-model")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/data-model"],s):(f=typeof globalThis<"u"?globalThis:f||self,s(f["libredwg-converter"]={},f.dataModel))})(this,function(f,s){"use strict";class b{convert(e){const n=this.createEntity(e);return n&&this.processCommonAttrs(e,n),n}createEntity(e){return e.type=="3DFACE"?this.convertFace(e):e.type=="ARC"?this.convertArc(e):e.type=="CIRCLE"?this.convertCirle(e):e.type=="DIMENSION"?this.convertDimension(e):e.type=="ELLIPSE"?this.convertEllipse(e):e.type=="HATCH"?this.convertHatch(e):e.type=="IMAGE"?this.convertImage(e):e.type=="LEADER"?this.convertLeader(e):e.type=="LINE"?this.convertLine(e):e.type=="LWPOLYLINE"?this.convertLWPolyline(e):e.type=="MTEXT"?this.convertMText(e):e.type=="POINT"?this.convertPoint(e):e.type=="POLYLINE2D"?this.convertPolyline2d(e):e.type=="POLYLINE3D"?this.convertPolyline3d(e):e.type=="RAY"?this.convertRay(e):e.type=="SPLINE"?this.convertSpline(e):e.type=="ACAD_TABLE"?this.convertTable(e):e.type=="TEXT"?this.convertText(e):e.type=="SOLID"?this.convertSolid(e):e.type=="VIEWPORT"?this.convertViewport(e):e.type=="WIPEOUT"?this.convertWipeout(e):e.type=="XLINE"?this.convertXline(e):e.type=="INSERT"?this.convertBlockReference(e):null}convertFace(e){const n=new s.AcDbFace;return e.corner1&&n.setVertexAt(0,e.corner1),e.corner2&&n.setVertexAt(1,e.corner2),e.corner3&&n.setVertexAt(2,e.corner3),e.corner4&&n.setVertexAt(3,e.corner4),n.setEdgeInvisibilities(e.flag),n}convertArc(e){return new s.AcDbArc(e.center,e.radius,e.startAngle,e.endAngle,e.extrusionDirection??s.AcGeVector3d.Z_AXIS)}convertCirle(e){return new s.AcDbCircle(e.center,e.radius,e.extrusionDirection??s.AcGeVector3d.Z_AXIS)}convertEllipse(e){const n=new s.AcGeVector3d(e.majorAxisEndPoint),r=n.length();return new s.AcDbEllipse(e.center,e.extrusionDirection??s.AcGeVector3d.Z_AXIS,n,r,r*e.axisRatio,e.startAngle,e.endAngle)}convertLine(e){const n=e.startPoint,r=e.endPoint;return new s.AcDbLine(new s.AcGePoint3d(n.x,n.y,n.z),new s.AcGePoint3d(r.x,r.y,r.z))}convertSpline(e){try{if(e.numberOfControlPoints>0&&e.numberOfKnots>0)return new s.AcDbSpline(e.controlPoints,e.knots,e.weights,e.degree,!!(e.flag&1));if(e.numberOfFitPoints>0)return new s.AcDbSpline(e.fitPoints,"Uniform",e.degree,!!(e.flag&1))}catch(n){console.log(`Failed to convert spline with error: ${n}`)}return null}convertPoint(e){const n=new s.AcDbPoint;return n.position=e.position,n}convertSolid(e){const n=new s.AcDbTrace;return n.setPointAt(0,{...e.corner1,z:0}),n.setPointAt(1,{...e.corner2,z:0}),n.setPointAt(2,{...e.corner3,z:0}),n.setPointAt(3,e.corner4?{...e.corner4,z:0}:{...e.corner3,z:0}),n.thickness=e.thickness,n}convertLWPolyline(e){const n=new s.AcDbPolyline;return n.closed=!!(e.flag&512),e.vertices.forEach((r,t)=>{n.addVertexAt(t,new s.AcGePoint2d(r.x,r.y),r.bulge,r.startWidth,r.endWidth)}),n}convertPolyline2d(e){const n=!!(e.flag&1),r=[],t=[];e.vertices.map(i=>{i.flag&16||(r.push({x:i.x,y:i.y,z:i.z}),t.push(i.bulge??0))});let o=s.AcDbPoly2dType.SimplePoly;return e.flag&2?o=s.AcDbPoly2dType.FitCurvePoly:e.flag&4&&(e.smoothType==6?o=s.AcDbPoly2dType.CubicSplinePoly:e.smoothType==5&&(o=s.AcDbPoly2dType.QuadSplinePoly)),new s.AcDb2dPolyline(o,r,0,n,e.startWidth,e.endWidth,t)}convertPolyline3d(e){const n=!!(e.flag&1),r=[];e.vertices.map(o=>{o.flag&16||r.push({x:o.x,y:o.y,z:o.z})});let t=s.AcDbPoly3dType.SimplePoly;return e.flag&4&&(e.smoothType==6?t=s.AcDbPoly3dType.CubicSplinePoly:e.smoothType==5&&(t=s.AcDbPoly3dType.QuadSplinePoly)),new s.AcDb3dPolyline(t,r,n)}convertHatch(e){var t;const n=new s.AcDbHatch;return(t=e.definitionLines)==null||t.forEach(o=>{n.definitionLines.push({angle:o.angle,origin:o.base,delta:o.offset,dashPattern:o.numberOfDashLengths>0?o.dashLengths:[]})}),n.hatchStyle=e.hatchStyle,n.patternName=e.patternName,n.patternType=e.patternType,n.patternAngle=e.patternAngle==null?0:e.patternAngle,n.patternScale=e.patternScale==null?0:e.patternScale,e.boundaryPaths.forEach(o=>{if(o.boundaryPathTypeFlag&2){const a=o,c=new s.AcGePolyline2d;c.closed=a.isClosed,a.vertices.forEach((p,l)=>{c.addVertexAt(l,{x:p.x,y:p.y,bulge:p.bulge})}),n.add(c)}else{const a=o,c=new s.AcGeLoop2d;a.edges.forEach(p=>{if(p!=null){if(p.type==1){const l=p;c.add(new s.AcGeLine2d(l.start,l.end))}else if(p.type==2){const l=p;c.add(new s.AcGeCircArc2d(l.center,l.radius,l.startAngle,l.endAngle,!l.isCCW))}else if(p.type==3){const l=p;new s.AcGeVector2d().subVectors(l.end,l.center);const d=Math.sqrt(Math.pow(l.end.x,2)+Math.pow(l.end.y,2)),h=d*l.lengthOfMinorAxis;let u=l.startAngle,g=l.endAngle;const A=Math.atan2(l.end.y,l.end.x);l.isCCW||(u=Math.PI*2-u,g=Math.PI*2-g),c.add(new s.AcGeEllipseArc2d({...l.center,z:0},d,h,u,g,!l.isCCW,A))}else if(p.type==4){const l=p;if(l.numberOfControlPoints>0&&l.numberOfKnots>0){const D=l.controlPoints.map(u=>({x:u.x,y:u.y,z:0}));let d=!0;const h=l.controlPoints.map(u=>(u.weight==null&&(d=!1),u.weight||1));c.add(new s.AcGeSpline3d(D,l.knots,d?h:void 0))}else if(l.numberOfFitData>0){const D=l.fitDatum.map(d=>({x:d.x,y:d.y,z:0}));c.add(new s.AcGeSpline3d(D,"Uniform"))}}}}),n.add(c)}}),n}convertTable(e){const n=new s.AcDbTable(e.name,e.rowCount,e.columnCount);return n.attachmentPoint=e.attachmentPoint,n.position.copy(e.startPoint),e.columnWidthArr.forEach((r,t)=>n.setColumnWidth(t,r)),e.rowHeightArr.forEach((r,t)=>n.setRowHeight(t,r)),e.cells.forEach((r,t)=>{n.setCell(t,r)}),n}convertText(e){const n=new s.AcDbText;return n.textString=e.text,n.styleName=e.styleName,n.height=e.textHeight,n.position.copy(e.startPoint),n.rotation=e.rotation,n.oblique=e.obliqueAngle??0,n.thickness=e.thickness,n.horizontalMode=e.halign,n.verticalMode=e.valign,n.widthFactor=e.xScale??1,n}convertMText(e){const n=new s.AcDbMText;return n.contents=e.text,e.styleName!=null&&(n.styleName=e.styleName),n.height=e.textHeight,n.width=e.rectWidth,n.rotation=e.rotation||0,n.location=e.insertionPoint,n.attachmentPoint=e.attachmentPoint,e.direction&&(n.direction=new s.AcGeVector3d(e.direction)),n.drawingDirection=e.drawingDirection,n}convertLeader(e){const n=new s.AcDbLeader;return e.vertices.forEach(r=>{n.appendVertex(r)}),n.hasArrowHead=e.isArrowheadEnabled,n.hasHookLine=e.isHooklineExists,n.isSplined=e.isSpline,n.dimensionStyle=e.styleName,n.annoType=e.leaderCreationFlag,n}convertDimension(e){if(e.subclassMarker=="AcDbAlignedDimension"||e.subclassMarker=="AcDbRotatedDimension"){const n=e,r=new s.AcDbAlignedDimension(n.subDefinitionPoint1,n.subDefinitionPoint2,n.definitionPoint);return n.insertionPoint&&(r.dimBlockPosition={x:n.insertionPoint.x,y:n.insertionPoint.y,z:0}),r.rotation=n.rotationAngle,this.processDimensionCommonAttrs(e,r),r}else if(e.subclassMarker=="AcDb3PointAngularDimension"){const n=e,r=new s.AcDb3PointAngularDimension(n.centerPoint,n.subDefinitionPoint1,n.subDefinitionPoint2,n.definitionPoint);return this.processDimensionCommonAttrs(e,r),r}else if(e.subclassMarker=="AcDbOrdinateDimension"){const n=e,r=new s.AcDbOrdinateDimension(n.subDefinitionPoint1,n.subDefinitionPoint2);return this.processDimensionCommonAttrs(e,r),r}else if(e.subclassMarker=="AcDbRadialDimension"){const n=e,r=new s.AcDbRadialDimension(n.definitionPoint,n.centerPoint,n.leaderLength);return this.processDimensionCommonAttrs(e,r),r}else if(e.subclassMarker=="AcDbDiametricDimension"){const n=e,r=new s.AcDbDiametricDimension(n.definitionPoint,n.centerPoint,n.leaderLength);return this.processDimensionCommonAttrs(e,r),r}return null}processImage(e,n){n.position.copy(e.position),n.brightness=e.brightness,n.contrast=e.contrast,n.fade=e.fade,n.imageDefId=e.imageDefHandle.toString(),n.isClipped=e.clipping>0,n.isShownClipped=(e.flags|4)>0,n.isImageShown=(e.flags|3)>0,n.isImageTransparent=(e.flags|8)>0,e.clippingBoundaryPath.forEach(r=>{n.clipBoundary.push(new s.AcGePoint2d(r))}),n.clipBoundaryType=e.clippingBoundaryType,n.width=Math.sqrt(e.uPixel.x**2+e.uPixel.y**2+e.uPixel.z**2)*e.imageSize.x,n.height=Math.sqrt(e.vPixel.x**2+e.vPixel.y**2+e.vPixel.z**2)*e.imageSize.y,n.rotation=Math.atan2(e.uPixel.y,e.uPixel.x)}convertImage(e){const n=new s.AcDbRasterImage;return this.processImage(e,n),n}convertWipeout(e){const n=new s.AcDbWipeout;return this.processImage(e,n),n}convertViewport(e){const n=new s.AcDbViewport;return n.number=e.viewportId,n.centerPoint.copy(e.viewportCenter),n.height=e.height,n.width=e.width,n.viewCenter.copy(e.displayCenter),n.viewHeight=e.viewHeight,n}convertRay(e){const n=new s.AcDbRay;return n.basePoint.copy(e.firstPoint),n.unitDir.copy(e.unitDirection),n}convertXline(e){const n=new s.AcDbXline;return n.basePoint.copy(e.firstPoint),n.unitDir.copy(e.unitDirection),n}convertBlockReference(e){const n=new s.AcDbBlockReference(e.name);return e.insertionPoint&&n.position.copy(e.insertionPoint),n.scaleFactors.x=e.xScale,n.scaleFactors.y=e.yScale,n.scaleFactors.z=e.zScale,n.rotation=e.rotation,n.normal.copy(e.extrusionDirection),n}processDimensionCommonAttrs(e,n){n.dimBlockId=e.name,n.textPosition.copy(e.textPoint),n.textRotation=e.textRotation||0,e.textLineSpacingFactor&&(n.textLineSpacingFactor=e.textLineSpacingFactor),e.textLineSpacingStyle&&(n.textLineSpacingStyle=e.textLineSpacingStyle),n.dimensionStyleName=e.styleName,n.dimensionText=e.text||"",n.measurement=e.measurement}processCommonAttrs(e,n){n.layer=e.layer||"0",n.objectId=e.handle.toString(),n.ownerId=e.ownerBlockRecordSoftId.toString(),e.lineType!=null&&(n.lineType=e.lineType),e.lineweight!=null&&(n.lineWeight=e.lineweight),e.lineTypeScale!=null&&(n.linetypeScale=e.lineTypeScale),e.color!=null&&(n.color.color=e.color),e.colorIndex!=null&&(n.color.colorIndex=e.colorIndex),e.colorName!=null&&(n.color.colorName=e.colorName),e.isVisible!=null&&(n.visibility=e.isVisible),e.transparency!=null&&(n.transparency=e.transparency)}}class I extends s.AcDbDatabaseConverter{constructor(e={}){super(e),e.useWorker=!0,e.parserWorkerUrl||(e.parserWorkerUrl="/assets/libredwg-parser-worker.js")}async parse(e){if(this.config.useWorker&&this.config.parserWorkerUrl){const n=s.createWorkerApi({workerUrl:this.config.parserWorkerUrl,maxConcurrentWorkers:1}),r=await n.execute(e);return n.destroy(),r.data}else throw new Error("dwg converter can run in web worker only!")}getFonts(e){const n=new Map;e.tables.BLOCK_RECORD.entries.forEach(i=>{n.set(i.name,i)});const r=new Map,t=i=>{if(i){const a=i.lastIndexOf(".");return a>=0?i.substring(0,a).toLowerCase():i.toLowerCase()}};e.tables.STYLE.entries.forEach(i=>{const a=[];let c=t(i.font);c&&a.push(c),c=t(i.bigFont),c&&a.push(c),r.set(i.name,a)});const o=new Set;return this.getFontsInBlock(e.entities,n,r,o),Array.from(o)}getFontsInBlock(e,n,r,t){const o=/\\f(.*?)\|/g;e.forEach(i=>{if(i.type=="MTEXT"){const a=i;[...a.text.matchAll(o)].forEach(p=>{t.add(p[1].toLowerCase())});const c=r.get(a.styleName);c==null||c.forEach(p=>t.add(p))}else if(i.type=="TEXT"){const a=i,c=r.get(a.styleName);c==null||c.forEach(p=>t.add(p))}else if(i.type=="INSERT"){const a=i,c=n.get(a.name);c&&this.getFontsInBlock(c.entities,n,r,t)}})}processLineTypes(e,n){e.tables.LTYPE.entries.forEach(t=>{const o={name:t.name,description:t.description,standardFlag:t.standardFlag,totalPatternLength:t.totalPatternLength,pattern:t.pattern},i=new s.AcDbLinetypeTableRecord(o);this.processCommonTableEntryAttrs(t,i),i.name=t.name,n.tables.linetypeTable.add(i)})}processTextStyles(e,n){e.tables.STYLE.entries.forEach(t=>{const o=new s.AcDbTextStyleTableRecord(t);this.processCommonTableEntryAttrs(t,o),n.tables.textStyleTable.add(o)})}processDimStyles(e,n){e.tables.DIMSTYLE.entries.forEach(t=>{const o={name:t.name,ownerId:t.ownerHandle.toString(),dimpost:t.DIMPOST||"",dimapost:t.DIMAPOST||"",dimscale:t.DIMSCALE,dimasz:t.DIMASZ,dimexo:t.DIMEXO,dimdli:t.DIMDLI,dimexe:t.DIMEXE,dimrnd:t.DIMRND,dimdle:t.DIMDLE,dimtp:t.DIMTP,dimtm:t.DIMTM,dimtxt:t.DIMTXT,dimcen:t.DIMCEN,dimtsz:t.DIMTSZ,dimaltf:t.DIMALTF,dimlfac:t.DIMLFAC,dimtvp:t.DIMTVP,dimtfac:t.DIMTFAC,dimgap:t.DIMGAP,dimaltrnd:t.DIMALTRND,dimtol:t.DIMTOL==null||t.DIMTOL==0?0:1,dimlim:t.DIMLIM==null||t.DIMLIM==0?0:1,dimtih:t.DIMTIH==null||t.DIMTIH==0?0:1,dimtoh:t.DIMTOH==null||t.DIMTOH==0?0:1,dimse1:t.DIMSE1==null||t.DIMSE1==0?0:1,dimse2:t.DIMSE2==null||t.DIMSE2==0?0:1,dimtad:t.DIMTAD,dimzin:t.DIMZIN,dimazin:t.DIMAZIN,dimalt:t.DIMALT,dimaltd:t.DIMALTD,dimtofl:t.DIMTOFL,dimsah:t.DIMSAH,dimtix:t.DIMTIX,dimsoxd:t.DIMSOXD,dimclrd:t.DIMCLRD,dimclre:t.DIMCLRE,dimclrt:t.DIMCLRT,dimadec:t.DIMADEC||0,dimunit:t.DIMUNIT||2,dimdec:t.DIMDEC,dimtdec:t.DIMTDEC,dimaltu:t.DIMALTU,dimalttd:t.DIMALTTD,dimaunit:t.DIMAUNIT,dimfrac:t.DIMFRAC,dimlunit:t.DIMLUNIT,dimdsep:t.DIMDSEP,dimtmove:t.DIMTMOVE||0,dimjust:t.DIMJUST,dimsd1:t.DIMSD1,dimsd2:t.DIMSD2,dimtolj:t.DIMTOLJ,dimtzin:t.DIMTZIN,dimaltz:t.DIMALTZ,dimalttz:t.DIMALTTZ,dimfit:t.DIMFIT||0,dimupt:t.DIMUPT,dimatfit:t.DIMATFIT,dimtxsty:"Standard",dimldrblk:"",dimblk:t.DIMBLK||"",dimblk1:t.DIMBLK1||"",dimblk2:t.DIMBLK2||"",dimlwd:t.DIMLWD,dimlwe:t.DIMLWE},i=new s.AcDbDimStyleTableRecord(o);this.processCommonTableEntryAttrs(t,i),n.tables.dimStyleTable.add(i)})}processLayers(e,n){e.tables.LAYER.entries.forEach(t=>{const o=new s.AcCmColor;o.colorIndex=t.colorIndex;const i=new s.AcDbLayerTableRecord({name:t.name,standardFlags:t.standardFlag,linetype:t.lineType,lineWeight:t.lineweight,isOff:t.off,color:o,isPlottable:t.plotFlag!=0});this.processCommonTableEntryAttrs(t,i),n.tables.layerTable.add(i)})}processViewports(e,n){e.tables.VPORT.entries.forEach(t=>{const o=new s.AcDbViewportTableRecord;this.processCommonTableEntryAttrs(t,o),t.circleSides&&(o.circleSides=t.circleSides),o.standardFlag=t.standardFlag,o.center.copy(t.center),o.lowerLeftCorner.copy(t.lowerLeftCorner),o.upperRightCorner.copy(t.upperRightCorner),t.snapBasePoint&&o.snapBase.copy(t.snapBasePoint),t.snapRotationAngle&&(o.snapAngle=t.snapRotationAngle),t.snapSpacing&&o.snapIncrements.copy(t.snapSpacing),t.majorGridLines&&(o.gridMajor=t.majorGridLines),t.gridSpacing&&o.gridIncrements.copy(t.gridSpacing),t.backgroundObjectId&&(o.backgroundObjectId=t.backgroundObjectId),o.gsView.center.copy(t.center),o.gsView.viewDirectionFromTarget.copy(t.viewDirectionFromTarget),o.gsView.viewTarget.copy(t.viewTarget),t.lensLength&&(o.gsView.lensLength=t.lensLength),t.frontClippingPlane&&(o.gsView.frontClippingPlane=t.frontClippingPlane),t.backClippingPlane&&(o.gsView.backClippingPlane=t.backClippingPlane),t.viewHeight&&(o.gsView.viewHeight=t.viewHeight),t.viewTwistAngle&&(o.gsView.viewTwistAngle=t.viewTwistAngle),t.frozenLayers&&(o.gsView.frozenLayers=t.frozenLayers),t.styleSheet&&(o.gsView.styleSheet=t.styleSheet),t.renderMode&&(o.gsView.renderMode=t.renderMode),t.viewMode&&(o.gsView.viewMode=t.viewMode),t.ucsIconSetting&&(o.gsView.ucsIconSetting=t.ucsIconSetting),t.ucsOrigin&&o.gsView.ucsOrigin.copy(t.ucsOrigin),t.ucsXAxis&&o.gsView.ucsXAxis.copy(t.ucsXAxis),t.ucsYAxis&&o.gsView.ucsYAxis.copy(t.ucsYAxis),t.orthographicType&&(o.gsView.orthographicType=t.orthographicType),t.shadePlotSetting&&(o.gsView.shadePlotSetting=t.shadePlotSetting),t.shadePlotObjectId&&(o.gsView.shadePlotObjectId=t.shadePlotObjectId),t.visualStyleObjectId&&(o.gsView.visualStyleObjectId=t.visualStyleObjectId),t.isDefaultLightingOn&&(o.gsView.isDefaultLightingOn=t.isDefaultLightingOn),t.defaultLightingType&&(o.gsView.defaultLightingType=t.defaultLightingType),t.brightness&&(o.gsView.brightness=t.brightness),t.contrast&&(o.gsView.contrast=t.contrast),t.ambientColor&&(o.gsView.ambientColor=t.ambientColor),n.tables.viewportTable.add(o)})}processBlockTables(e,n){e.tables.BLOCK_RECORD.entries.forEach(t=>{let o=n.tables.blockTable.getAt(t.name);o||(o=new s.AcDbBlockTableRecord,o.objectId=t.handle.toString(),o.name=t.name,o.ownerId=t.ownerHandle.toString(),o.origin.copy(t.basePoint),o.layoutId=t.layout.toString(),n.tables.blockTable.add(o)),!o.isModelSapce&&!o.isPaperSapce&&t.entities&&t.entities.length>0&&this.processEntitiesInBlock(t.entities,o)})}processBlocks(e,n){}async processEntitiesInBlock(e,n){const r=new b,t=e.length,o=[];for(let i=0;i<t;i++){const a=e[i],c=r.convert(a);c&&o.push(c)}n.appendEntity(o)}async processEntities(e,n,r,t,o){const i=new b;let a=e.entities;const c=a.length,p=new s.AcDbBatchProcessing(c,100-t.value,r);this.config.convertByEntityType&&(a=this.groupAndFlattenByType(a));const l=n.tables.blockTable.modelSpace;await p.processChunk(async(D,d)=>{const h=[];for(let u=D;u<d;u++){const g=a[u],A=i.convert(g);A&&h.push(A)}if(l.appendEntity(h),o){let u=t.value+d/c*(100-t.value);u>100&&(u=100),await o(u,"ENTITY","IN-PROGRESS")}})}processHeader(e,n){const r=e.header;n.cecolor.colorIndex=r.CECOLOR||256,n.angBase=r.ANGBASE??0,n.angDir=r.ANGDIR??0,n.aunits=r.AUNITS??0,r.EXTMAX&&(n.extmax=r.EXTMAX),r.EXTMIN&&(n.extmin=r.EXTMIN),n.insunits=r.INSUNITS??1,n.pdmode=r.PDMODE??0,n.pdsize=r.PDSIZE??0}processCommonTableEntryAttrs(e,n){n.name=e.name,n.objectId=e.handle.toString(),n.ownerId=e.ownerHandle.toString()}processObjects(e,n){this.processLayouts(e,n),this.processImageDefs(e,n)}processLayouts(e,n){const r=n.dictionaries.layouts;e.objects.LAYOUT.forEach(o=>{const i=new s.AcDbLayout;i.layoutName=o.layoutName,i.tabOrder=o.tabOrder;const a=n.tables.blockTable.newIterator();i.objectId=o.handle.toString();for(const c of a)if(c.layoutId===i.objectId){i.blockTableRecordId=c.objectId;break}i.blockTableRecordId||o.layoutName==="Model"&&(i.blockTableRecordId=n.tables.blockTable.modelSpace.objectId),i.limits.min.copy(o.minLimit),i.limits.max.copy(o.maxLimit),i.extents.min.copy(o.minExtent),i.extents.max.copy(o.maxExtent),this.processCommonObjectAttrs(o,i),r.setAt(i.layoutName,i)})}processImageDefs(e,n){const r=n.dictionaries.imageDefs;e.objects.IMAGEDEF.forEach(o=>{const i=new s.AcDbRasterImageDef;i.sourceFileName=o.fileName,this.processCommonObjectAttrs(o,i),r.setAt(i.objectId,i)})}processCommonObjectAttrs(e,n){n.objectId=e.handle.toString(),n.ownerId=e.ownerHandle.toString()}groupAndFlattenByType(e){const n={},r=[];for(const t of e)n[t.type]||(n[t.type]=[],r.push(t.type)),n[t.type].push(t);return r.flatMap(t=>n[t])}}f.AcDbLibreDwgConverter=I,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(f,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("@mlightcad/data-model")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/data-model"],s):(f=typeof globalThis<"u"?globalThis:f||self,s(f["libredwg-converter"]={},f.dataModel))})(this,function(f,s){"use strict";class b{convert(e){const n=this.createEntity(e);return n&&this.processCommonAttrs(e,n),n}createEntity(e){return e.type=="3DFACE"?this.convertFace(e):e.type=="ARC"?this.convertArc(e):e.type=="CIRCLE"?this.convertCirle(e):e.type=="DIMENSION"?this.convertDimension(e):e.type=="ELLIPSE"?this.convertEllipse(e):e.type=="HATCH"?this.convertHatch(e):e.type=="IMAGE"?this.convertImage(e):e.type=="LEADER"?this.convertLeader(e):e.type=="LINE"?this.convertLine(e):e.type=="LWPOLYLINE"?this.convertLWPolyline(e):e.type=="MTEXT"?this.convertMText(e):e.type=="POINT"?this.convertPoint(e):e.type=="POLYLINE2D"?this.convertPolyline2d(e):e.type=="POLYLINE3D"?this.convertPolyline3d(e):e.type=="RAY"?this.convertRay(e):e.type=="SPLINE"?this.convertSpline(e):e.type=="ACAD_TABLE"?this.convertTable(e):e.type=="TEXT"?this.convertText(e):e.type=="SOLID"?this.convertSolid(e):e.type=="VIEWPORT"?this.convertViewport(e):e.type=="WIPEOUT"?this.convertWipeout(e):e.type=="XLINE"?this.convertXline(e):e.type=="INSERT"?this.convertBlockReference(e):null}convertFace(e){const n=new s.AcDbFace;return e.corner1&&n.setVertexAt(0,e.corner1),e.corner2&&n.setVertexAt(1,e.corner2),e.corner3&&n.setVertexAt(2,e.corner3),e.corner4&&n.setVertexAt(3,e.corner4),n.setEdgeInvisibilities(e.flag),n}convertArc(e){return new s.AcDbArc(e.center,e.radius,e.startAngle,e.endAngle,e.extrusionDirection??s.AcGeVector3d.Z_AXIS)}convertCirle(e){return new s.AcDbCircle(e.center,e.radius,e.extrusionDirection??s.AcGeVector3d.Z_AXIS)}convertEllipse(e){const n=new s.AcGeVector3d(e.majorAxisEndPoint),r=n.length();return new s.AcDbEllipse(e.center,e.extrusionDirection??s.AcGeVector3d.Z_AXIS,n,r,r*e.axisRatio,e.startAngle,e.endAngle)}convertLine(e){const n=e.startPoint,r=e.endPoint;return new s.AcDbLine(new s.AcGePoint3d(n.x,n.y,n.z),new s.AcGePoint3d(r.x,r.y,r.z))}convertSpline(e){try{if(e.numberOfControlPoints>0&&e.numberOfKnots>0)return new s.AcDbSpline(e.controlPoints,e.knots,e.weights,e.degree,!!(e.flag&1));if(e.numberOfFitPoints>0)return new s.AcDbSpline(e.fitPoints,"Uniform",e.degree,!!(e.flag&1))}catch(n){console.log(`Failed to convert spline with error: ${n}`)}return null}convertPoint(e){const n=new s.AcDbPoint;return n.position=e.position,n}convertSolid(e){const n=new s.AcDbTrace;return n.setPointAt(0,{...e.corner1,z:0}),n.setPointAt(1,{...e.corner2,z:0}),n.setPointAt(2,{...e.corner3,z:0}),n.setPointAt(3,e.corner4?{...e.corner4,z:0}:{...e.corner3,z:0}),n.thickness=e.thickness,n}convertLWPolyline(e){const n=new s.AcDbPolyline;return n.closed=!!(e.flag&512),e.vertices.forEach((r,t)=>{n.addVertexAt(t,new s.AcGePoint2d(r.x,r.y),r.bulge,r.startWidth,r.endWidth)}),n}convertPolyline2d(e){const n=!!(e.flag&1),r=[],t=[];e.vertices.map(i=>{i.flag&16||(r.push({x:i.x,y:i.y,z:i.z}),t.push(i.bulge??0))});let o=s.AcDbPoly2dType.SimplePoly;return e.flag&2?o=s.AcDbPoly2dType.FitCurvePoly:e.flag&4&&(e.smoothType==6?o=s.AcDbPoly2dType.CubicSplinePoly:e.smoothType==5&&(o=s.AcDbPoly2dType.QuadSplinePoly)),new s.AcDb2dPolyline(o,r,0,n,e.startWidth,e.endWidth,t)}convertPolyline3d(e){const n=!!(e.flag&1),r=[];e.vertices.map(o=>{o.flag&16||r.push({x:o.x,y:o.y,z:o.z})});let t=s.AcDbPoly3dType.SimplePoly;return e.flag&4&&(e.smoothType==6?t=s.AcDbPoly3dType.CubicSplinePoly:e.smoothType==5&&(t=s.AcDbPoly3dType.QuadSplinePoly)),new s.AcDb3dPolyline(t,r,n)}convertHatch(e){var t;const n=new s.AcDbHatch;return(t=e.definitionLines)==null||t.forEach(o=>{n.definitionLines.push({angle:o.angle,origin:o.base,delta:o.offset,dashPattern:o.numberOfDashLengths>0?o.dashLengths:[]})}),n.isSolidFill=e.solidFill==1,n.hatchStyle=e.hatchStyle,n.patternName=e.patternName,n.patternType=e.patternType,n.patternAngle=e.patternAngle==null?0:e.patternAngle,n.patternScale=e.patternScale==null?0:e.patternScale,e.boundaryPaths.forEach(o=>{if(o.boundaryPathTypeFlag&2){const a=o,c=new s.AcGePolyline2d;c.closed=a.isClosed,a.vertices.forEach((p,l)=>{c.addVertexAt(l,{x:p.x,y:p.y,bulge:p.bulge})}),n.add(c)}else{const a=o,c=new s.AcGeLoop2d;a.edges.forEach(p=>{if(p!=null){if(p.type==1){const l=p;c.add(new s.AcGeLine2d(l.start,l.end))}else if(p.type==2){const l=p;c.add(new s.AcGeCircArc2d(l.center,l.radius,l.startAngle,l.endAngle,!l.isCCW))}else if(p.type==3){const l=p;new s.AcGeVector2d().subVectors(l.end,l.center);const d=Math.sqrt(Math.pow(l.end.x,2)+Math.pow(l.end.y,2)),h=d*l.lengthOfMinorAxis;let u=l.startAngle,g=l.endAngle;const A=Math.atan2(l.end.y,l.end.x);l.isCCW||(u=Math.PI*2-u,g=Math.PI*2-g),c.add(new s.AcGeEllipseArc2d({...l.center,z:0},d,h,u,g,!l.isCCW,A))}else if(p.type==4){const l=p;if(l.numberOfControlPoints>0&&l.numberOfKnots>0){const D=l.controlPoints.map(u=>({x:u.x,y:u.y,z:0}));let d=!0;const h=l.controlPoints.map(u=>(u.weight==null&&(d=!1),u.weight||1));c.add(new s.AcGeSpline3d(D,l.knots,d?h:void 0))}else if(l.numberOfFitData>0){const D=l.fitDatum.map(d=>({x:d.x,y:d.y,z:0}));c.add(new s.AcGeSpline3d(D,"Uniform"))}}}}),n.add(c)}}),n}convertTable(e){const n=new s.AcDbTable(e.name,e.rowCount,e.columnCount);return n.attachmentPoint=e.attachmentPoint,n.position.copy(e.startPoint),e.columnWidthArr.forEach((r,t)=>n.setColumnWidth(t,r)),e.rowHeightArr.forEach((r,t)=>n.setRowHeight(t,r)),e.cells.forEach((r,t)=>{n.setCell(t,r)}),n}convertText(e){const n=new s.AcDbText;return n.textString=e.text,n.styleName=e.styleName,n.height=e.textHeight,n.position.copy(e.startPoint),n.rotation=e.rotation,n.oblique=e.obliqueAngle??0,n.thickness=e.thickness,n.horizontalMode=e.halign,n.verticalMode=e.valign,n.widthFactor=e.xScale??1,n}convertMText(e){const n=new s.AcDbMText;return n.contents=e.text,e.styleName!=null&&(n.styleName=e.styleName),n.height=e.textHeight,n.width=e.rectWidth,n.rotation=e.rotation||0,n.location=e.insertionPoint,n.attachmentPoint=e.attachmentPoint,e.direction&&(n.direction=new s.AcGeVector3d(e.direction)),n.drawingDirection=e.drawingDirection,n}convertLeader(e){const n=new s.AcDbLeader;return e.vertices.forEach(r=>{n.appendVertex(r)}),n.hasArrowHead=e.isArrowheadEnabled,n.hasHookLine=e.isHooklineExists,n.isSplined=e.isSpline,n.dimensionStyle=e.styleName,n.annoType=e.leaderCreationFlag,n}convertDimension(e){if(e.subclassMarker=="AcDbAlignedDimension"||e.subclassMarker=="AcDbRotatedDimension"){const n=e,r=new s.AcDbAlignedDimension(n.subDefinitionPoint1,n.subDefinitionPoint2,n.definitionPoint);return n.insertionPoint&&(r.dimBlockPosition={x:n.insertionPoint.x,y:n.insertionPoint.y,z:0}),r.rotation=n.rotationAngle,this.processDimensionCommonAttrs(e,r),r}else if(e.subclassMarker=="AcDb3PointAngularDimension"){const n=e,r=new s.AcDb3PointAngularDimension(n.centerPoint,n.subDefinitionPoint1,n.subDefinitionPoint2,n.definitionPoint);return this.processDimensionCommonAttrs(e,r),r}else if(e.subclassMarker=="AcDbOrdinateDimension"){const n=e,r=new s.AcDbOrdinateDimension(n.subDefinitionPoint1,n.subDefinitionPoint2);return this.processDimensionCommonAttrs(e,r),r}else if(e.subclassMarker=="AcDbRadialDimension"){const n=e,r=new s.AcDbRadialDimension(n.definitionPoint,n.centerPoint,n.leaderLength);return this.processDimensionCommonAttrs(e,r),r}else if(e.subclassMarker=="AcDbDiametricDimension"){const n=e,r=new s.AcDbDiametricDimension(n.definitionPoint,n.centerPoint,n.leaderLength);return this.processDimensionCommonAttrs(e,r),r}return null}processImage(e,n){n.position.copy(e.position),n.brightness=e.brightness,n.contrast=e.contrast,n.fade=e.fade,n.imageDefId=e.imageDefHandle.toString(),n.isClipped=e.clipping>0,n.isShownClipped=(e.flags|4)>0,n.isImageShown=(e.flags|3)>0,n.isImageTransparent=(e.flags|8)>0,e.clippingBoundaryPath.forEach(r=>{n.clipBoundary.push(new s.AcGePoint2d(r))}),n.clipBoundaryType=e.clippingBoundaryType,n.width=Math.sqrt(e.uPixel.x**2+e.uPixel.y**2+e.uPixel.z**2)*e.imageSize.x,n.height=Math.sqrt(e.vPixel.x**2+e.vPixel.y**2+e.vPixel.z**2)*e.imageSize.y,n.rotation=Math.atan2(e.uPixel.y,e.uPixel.x)}convertImage(e){const n=new s.AcDbRasterImage;return this.processImage(e,n),n}convertWipeout(e){const n=new s.AcDbWipeout;return this.processImage(e,n),n}convertViewport(e){const n=new s.AcDbViewport;return n.number=e.viewportId,n.centerPoint.copy(e.viewportCenter),n.height=e.height,n.width=e.width,n.viewCenter.copy(e.displayCenter),n.viewHeight=e.viewHeight,n}convertRay(e){const n=new s.AcDbRay;return n.basePoint.copy(e.firstPoint),n.unitDir.copy(e.unitDirection),n}convertXline(e){const n=new s.AcDbXline;return n.basePoint.copy(e.firstPoint),n.unitDir.copy(e.unitDirection),n}convertBlockReference(e){const n=new s.AcDbBlockReference(e.name);return e.insertionPoint&&n.position.copy(e.insertionPoint),n.scaleFactors.x=e.xScale,n.scaleFactors.y=e.yScale,n.scaleFactors.z=e.zScale,n.rotation=e.rotation,n.normal.copy(e.extrusionDirection),n}processDimensionCommonAttrs(e,n){n.dimBlockId=e.name,n.textPosition.copy(e.textPoint),n.textRotation=e.textRotation||0,e.textLineSpacingFactor&&(n.textLineSpacingFactor=e.textLineSpacingFactor),e.textLineSpacingStyle&&(n.textLineSpacingStyle=e.textLineSpacingStyle),n.dimensionStyleName=e.styleName,n.dimensionText=e.text||"",n.measurement=e.measurement}processCommonAttrs(e,n){n.layer=e.layer||"0",n.objectId=e.handle.toString(),n.ownerId=e.ownerBlockRecordSoftId.toString(),e.lineType!=null&&(n.lineType=e.lineType),e.lineweight!=null&&(n.lineWeight=e.lineweight),e.lineTypeScale!=null&&(n.linetypeScale=e.lineTypeScale),e.color!=null&&n.color.setRGBValue(e.color),e.colorIndex!=null&&(n.color.colorIndex=e.colorIndex),e.colorName&&(n.color.colorName=e.colorName),e.isVisible!=null&&(n.visibility=e.isVisible),e.transparency!=null&&(n.transparency=e.transparency)}}class I extends s.AcDbDatabaseConverter{constructor(e={}){super(e),e.useWorker=!0,e.parserWorkerUrl||(e.parserWorkerUrl="/assets/libredwg-parser-worker.js")}async parse(e){if(this.config.useWorker&&this.config.parserWorkerUrl){const n=s.createWorkerApi({workerUrl:this.config.parserWorkerUrl,maxConcurrentWorkers:1}),r=await n.execute(e);return n.destroy(),r.data}else throw new Error("dwg converter can run in web worker only!")}getFonts(e){const n=new Map;e.tables.BLOCK_RECORD.entries.forEach(i=>{n.set(i.name,i)});const r=new Map,t=i=>{if(i){const a=i.lastIndexOf(".");return a>=0?i.substring(0,a).toLowerCase():i.toLowerCase()}};e.tables.STYLE.entries.forEach(i=>{const a=[];let c=t(i.font);c&&a.push(c),c=t(i.bigFont),c&&a.push(c),r.set(i.name,a)});const o=new Set;return this.getFontsInBlock(e.entities,n,r,o),Array.from(o)}getFontsInBlock(e,n,r,t){const o=/\\f(.*?)\|/g;e.forEach(i=>{if(i.type=="MTEXT"){const a=i;[...a.text.matchAll(o)].forEach(p=>{t.add(p[1].toLowerCase())});const c=r.get(a.styleName);c==null||c.forEach(p=>t.add(p))}else if(i.type=="TEXT"){const a=i,c=r.get(a.styleName);c==null||c.forEach(p=>t.add(p))}else if(i.type=="INSERT"){const a=i,c=n.get(a.name);c&&this.getFontsInBlock(c.entities,n,r,t)}})}processLineTypes(e,n){e.tables.LTYPE.entries.forEach(t=>{const o={name:t.name,description:t.description,standardFlag:t.standardFlag,totalPatternLength:t.totalPatternLength,pattern:t.pattern},i=new s.AcDbLinetypeTableRecord(o);this.processCommonTableEntryAttrs(t,i),i.name=t.name,n.tables.linetypeTable.add(i)})}processTextStyles(e,n){e.tables.STYLE.entries.forEach(t=>{const o=new s.AcDbTextStyleTableRecord(t);this.processCommonTableEntryAttrs(t,o),n.tables.textStyleTable.add(o)})}processDimStyles(e,n){e.tables.DIMSTYLE.entries.forEach(t=>{const o={name:t.name,ownerId:t.ownerHandle.toString(),dimpost:t.DIMPOST||"",dimapost:t.DIMAPOST||"",dimscale:t.DIMSCALE,dimasz:t.DIMASZ,dimexo:t.DIMEXO,dimdli:t.DIMDLI,dimexe:t.DIMEXE,dimrnd:t.DIMRND,dimdle:t.DIMDLE,dimtp:t.DIMTP,dimtm:t.DIMTM,dimtxt:t.DIMTXT,dimcen:t.DIMCEN,dimtsz:t.DIMTSZ,dimaltf:t.DIMALTF,dimlfac:t.DIMLFAC,dimtvp:t.DIMTVP,dimtfac:t.DIMTFAC,dimgap:t.DIMGAP,dimaltrnd:t.DIMALTRND,dimtol:t.DIMTOL==null||t.DIMTOL==0?0:1,dimlim:t.DIMLIM==null||t.DIMLIM==0?0:1,dimtih:t.DIMTIH==null||t.DIMTIH==0?0:1,dimtoh:t.DIMTOH==null||t.DIMTOH==0?0:1,dimse1:t.DIMSE1==null||t.DIMSE1==0?0:1,dimse2:t.DIMSE2==null||t.DIMSE2==0?0:1,dimtad:t.DIMTAD,dimzin:t.DIMZIN,dimazin:t.DIMAZIN,dimalt:t.DIMALT,dimaltd:t.DIMALTD,dimtofl:t.DIMTOFL,dimsah:t.DIMSAH,dimtix:t.DIMTIX,dimsoxd:t.DIMSOXD,dimclrd:t.DIMCLRD,dimclre:t.DIMCLRE,dimclrt:t.DIMCLRT,dimadec:t.DIMADEC||0,dimunit:t.DIMUNIT||2,dimdec:t.DIMDEC,dimtdec:t.DIMTDEC,dimaltu:t.DIMALTU,dimalttd:t.DIMALTTD,dimaunit:t.DIMAUNIT,dimfrac:t.DIMFRAC,dimlunit:t.DIMLUNIT,dimdsep:t.DIMDSEP,dimtmove:t.DIMTMOVE||0,dimjust:t.DIMJUST,dimsd1:t.DIMSD1,dimsd2:t.DIMSD2,dimtolj:t.DIMTOLJ,dimtzin:t.DIMTZIN,dimaltz:t.DIMALTZ,dimalttz:t.DIMALTTZ,dimfit:t.DIMFIT||0,dimupt:t.DIMUPT,dimatfit:t.DIMATFIT,dimtxsty:"Standard",dimldrblk:"",dimblk:t.DIMBLK||"",dimblk1:t.DIMBLK1||"",dimblk2:t.DIMBLK2||"",dimlwd:t.DIMLWD,dimlwe:t.DIMLWE},i=new s.AcDbDimStyleTableRecord(o);this.processCommonTableEntryAttrs(t,i),n.tables.dimStyleTable.add(i)})}processLayers(e,n){e.tables.LAYER.entries.forEach(t=>{const o=new s.AcCmColor;o.colorIndex=t.colorIndex;const i=new s.AcDbLayerTableRecord({name:t.name,standardFlags:t.standardFlag,linetype:t.lineType,lineWeight:t.lineweight,isOff:t.off,color:o,isPlottable:t.plotFlag!=0});this.processCommonTableEntryAttrs(t,i),n.tables.layerTable.add(i)})}processViewports(e,n){e.tables.VPORT.entries.forEach(t=>{const o=new s.AcDbViewportTableRecord;this.processCommonTableEntryAttrs(t,o),t.circleSides&&(o.circleSides=t.circleSides),o.standardFlag=t.standardFlag,o.center.copy(t.center),o.lowerLeftCorner.copy(t.lowerLeftCorner),o.upperRightCorner.copy(t.upperRightCorner),t.snapBasePoint&&o.snapBase.copy(t.snapBasePoint),t.snapRotationAngle&&(o.snapAngle=t.snapRotationAngle),t.snapSpacing&&o.snapIncrements.copy(t.snapSpacing),t.majorGridLines&&(o.gridMajor=t.majorGridLines),t.gridSpacing&&o.gridIncrements.copy(t.gridSpacing),t.backgroundObjectId&&(o.backgroundObjectId=t.backgroundObjectId),o.gsView.center.copy(t.center),o.gsView.viewDirectionFromTarget.copy(t.viewDirectionFromTarget),o.gsView.viewTarget.copy(t.viewTarget),t.lensLength&&(o.gsView.lensLength=t.lensLength),t.frontClippingPlane&&(o.gsView.frontClippingPlane=t.frontClippingPlane),t.backClippingPlane&&(o.gsView.backClippingPlane=t.backClippingPlane),t.viewHeight&&(o.gsView.viewHeight=t.viewHeight),t.viewTwistAngle&&(o.gsView.viewTwistAngle=t.viewTwistAngle),t.frozenLayers&&(o.gsView.frozenLayers=t.frozenLayers),t.styleSheet&&(o.gsView.styleSheet=t.styleSheet),t.renderMode&&(o.gsView.renderMode=t.renderMode),t.viewMode&&(o.gsView.viewMode=t.viewMode),t.ucsIconSetting&&(o.gsView.ucsIconSetting=t.ucsIconSetting),t.ucsOrigin&&o.gsView.ucsOrigin.copy(t.ucsOrigin),t.ucsXAxis&&o.gsView.ucsXAxis.copy(t.ucsXAxis),t.ucsYAxis&&o.gsView.ucsYAxis.copy(t.ucsYAxis),t.orthographicType&&(o.gsView.orthographicType=t.orthographicType),t.shadePlotSetting&&(o.gsView.shadePlotSetting=t.shadePlotSetting),t.shadePlotObjectId&&(o.gsView.shadePlotObjectId=t.shadePlotObjectId),t.visualStyleObjectId&&(o.gsView.visualStyleObjectId=t.visualStyleObjectId),t.isDefaultLightingOn&&(o.gsView.isDefaultLightingOn=t.isDefaultLightingOn),t.defaultLightingType&&(o.gsView.defaultLightingType=t.defaultLightingType),t.brightness&&(o.gsView.brightness=t.brightness),t.contrast&&(o.gsView.contrast=t.contrast),t.ambientColor&&(o.gsView.ambientColor=t.ambientColor),n.tables.viewportTable.add(o)})}processBlockTables(e,n){e.tables.BLOCK_RECORD.entries.forEach(t=>{let o=n.tables.blockTable.getAt(t.name);o||(o=new s.AcDbBlockTableRecord,o.objectId=t.handle.toString(),o.name=t.name,o.ownerId=t.ownerHandle.toString(),o.origin.copy(t.basePoint),o.layoutId=t.layout.toString(),n.tables.blockTable.add(o)),!o.isModelSapce&&!o.isPaperSapce&&t.entities&&t.entities.length>0&&this.processEntitiesInBlock(t.entities,o)})}processBlocks(e,n){}async processEntitiesInBlock(e,n){const r=new b,t=e.length,o=[];for(let i=0;i<t;i++){const a=e[i],c=r.convert(a);c&&o.push(c)}n.appendEntity(o)}async processEntities(e,n,r,t,o){const i=new b;let a=e.entities;const c=a.length,p=new s.AcDbBatchProcessing(c,100-t.value,r);this.config.convertByEntityType&&(a=this.groupAndFlattenByType(a));const l=n.tables.blockTable.modelSpace;await p.processChunk(async(D,d)=>{const h=[];for(let u=D;u<d;u++){const g=a[u],A=i.convert(g);A&&h.push(A)}if(l.appendEntity(h),o){let u=t.value+d/c*(100-t.value);u>100&&(u=100),await o(u,"ENTITY","IN-PROGRESS")}})}processHeader(e,n){const r=e.header;r.CECOLOR&&(r.CECOLOR.index>=0&&r.CECOLOR.index<=256?n.cecolor.colorIndex=r.CECOLOR.index:n.cecolor.setRGBValue(r.CECOLOR.rgb)),n.angBase=r.ANGBASE??0,n.angDir=r.ANGDIR??0,n.aunits=r.AUNITS??0,r.EXTMAX&&(n.extmax=r.EXTMAX),r.EXTMIN&&(n.extmin=r.EXTMIN),n.insunits=r.INSUNITS??1,n.pdmode=r.PDMODE??0,n.pdsize=r.PDSIZE??0}processCommonTableEntryAttrs(e,n){n.name=e.name,n.objectId=e.handle.toString(),n.ownerId=e.ownerHandle.toString()}processObjects(e,n){this.processLayouts(e,n),this.processImageDefs(e,n)}processLayouts(e,n){const r=n.dictionaries.layouts;e.objects.LAYOUT.forEach(o=>{const i=new s.AcDbLayout;i.layoutName=o.layoutName,i.tabOrder=o.tabOrder;const a=n.tables.blockTable.newIterator();i.objectId=o.handle.toString();for(const c of a)if(c.layoutId===i.objectId){i.blockTableRecordId=c.objectId;break}i.blockTableRecordId||o.layoutName==="Model"&&(i.blockTableRecordId=n.tables.blockTable.modelSpace.objectId),i.limits.min.copy(o.minLimit),i.limits.max.copy(o.maxLimit),i.extents.min.copy(o.minExtent),i.extents.max.copy(o.maxExtent),this.processCommonObjectAttrs(o,i),r.setAt(i.layoutName,i)})}processImageDefs(e,n){const r=n.dictionaries.imageDefs;e.objects.IMAGEDEF.forEach(o=>{const i=new s.AcDbRasterImageDef;i.sourceFileName=o.fileName,this.processCommonObjectAttrs(o,i),r.setAt(i.objectId,i)})}processCommonObjectAttrs(e,n){n.objectId=e.handle.toString(),n.ownerId=e.ownerHandle.toString()}groupAndFlattenByType(e){const n={},r=[];for(const t of e)n[t.type]||(n[t.type]=[],r.push(t.type)),n[t.type].push(t);return r.flatMap(t=>n[t])}}f.AcDbLibreDwgConverter=I,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
|