@linkiez/dxf-renew 7.0.0 → 7.2.0
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/.eslintrc.json +1 -16
- package/.github/instructions/code-patterns.instructions.md +1 -1
- package/.github/instructions/exdxf.instruction.md +161 -0
- package/.github/instructions/tdd.instructions.md +271 -0
- package/.yarn/install-state.gz +0 -0
- package/ARCHITECTURE.md +163 -0
- package/CHANGELOG.md +39 -0
- package/CONTRIBUTING.md +16 -14
- package/README.md +113 -16
- package/{PLAN.md → ROADMAP.md} +244 -102
- package/dist/dxf.js +2212 -454
- package/docs/EZDXF_REFERENCE_SITEMAP.md +55 -0
- package/docs/FIXTURE_VALIDATION_EZDXF.md +62 -0
- package/lib/Helper.cjs +6 -2
- package/lib/Helper.cjs.map +3 -3
- package/lib/Helper.js +6 -2
- package/lib/Helper.js.map +2 -2
- package/lib/denormalise.cjs +131 -91
- package/lib/denormalise.cjs.map +2 -2
- package/lib/denormalise.js +131 -91
- package/lib/denormalise.js.map +2 -2
- package/lib/dimensionToSVG.cjs +318 -53
- package/lib/dimensionToSVG.cjs.map +3 -3
- package/lib/dimensionToSVG.js +316 -52
- package/lib/dimensionToSVG.js.map +2 -2
- package/lib/entityToPolyline.cjs +95 -0
- package/lib/entityToPolyline.cjs.map +3 -3
- package/lib/entityToPolyline.js +95 -0
- package/lib/entityToPolyline.js.map +2 -2
- package/lib/handlers/entities.cjs +111 -27
- package/lib/handlers/entities.cjs.map +3 -3
- package/lib/handlers/entities.js +111 -27
- package/lib/handlers/entities.js.map +3 -3
- package/lib/handlers/entity/dgnUnderlay.cjs +106 -0
- package/lib/handlers/entity/dgnUnderlay.cjs.map +7 -0
- package/lib/handlers/entity/dgnUnderlay.js +71 -0
- package/lib/handlers/entity/dgnUnderlay.js.map +7 -0
- package/lib/handlers/entity/dimension.cjs +24 -0
- package/lib/handlers/entity/dimension.cjs.map +2 -2
- package/lib/handlers/entity/dimension.js +24 -0
- package/lib/handlers/entity/dimension.js.map +2 -2
- package/lib/handlers/entity/dwfUnderlay.cjs +106 -0
- package/lib/handlers/entity/dwfUnderlay.cjs.map +7 -0
- package/lib/handlers/entity/dwfUnderlay.js +71 -0
- package/lib/handlers/entity/dwfUnderlay.js.map +7 -0
- package/lib/handlers/entity/image.cjs +123 -0
- package/lib/handlers/entity/image.cjs.map +7 -0
- package/lib/handlers/entity/image.js +88 -0
- package/lib/handlers/entity/image.js.map +7 -0
- package/lib/handlers/entity/leader.cjs +148 -0
- package/lib/handlers/entity/leader.cjs.map +7 -0
- package/lib/handlers/entity/leader.js +113 -0
- package/lib/handlers/entity/leader.js.map +7 -0
- package/lib/handlers/entity/mleader.cjs +69 -0
- package/lib/handlers/entity/mleader.cjs.map +7 -0
- package/lib/handlers/entity/mleader.js +34 -0
- package/lib/handlers/entity/mleader.js.map +7 -0
- package/lib/handlers/entity/mline.cjs +91 -0
- package/lib/handlers/entity/mline.cjs.map +7 -0
- package/lib/handlers/entity/mline.js +56 -0
- package/lib/handlers/entity/mline.js.map +7 -0
- package/lib/handlers/entity/oleframe.cjs +98 -0
- package/lib/handlers/entity/oleframe.cjs.map +7 -0
- package/lib/handlers/entity/oleframe.js +63 -0
- package/lib/handlers/entity/oleframe.js.map +7 -0
- package/lib/handlers/entity/pdfUnderlay.cjs +106 -0
- package/lib/handlers/entity/pdfUnderlay.cjs.map +7 -0
- package/lib/handlers/entity/pdfUnderlay.js +71 -0
- package/lib/handlers/entity/pdfUnderlay.js.map +7 -0
- package/lib/handlers/entity/ray.cjs +81 -0
- package/lib/handlers/entity/ray.cjs.map +7 -0
- package/lib/handlers/entity/ray.js +46 -0
- package/lib/handlers/entity/ray.js.map +7 -0
- package/lib/handlers/entity/region.cjs +67 -0
- package/lib/handlers/entity/region.cjs.map +7 -0
- package/lib/handlers/entity/region.js +32 -0
- package/lib/handlers/entity/region.js.map +7 -0
- package/lib/handlers/entity/shape.cjs +95 -0
- package/lib/handlers/entity/shape.cjs.map +7 -0
- package/lib/handlers/entity/shape.js +60 -0
- package/lib/handlers/entity/shape.js.map +7 -0
- package/lib/handlers/entity/table.cjs +71 -0
- package/lib/handlers/entity/table.cjs.map +7 -0
- package/lib/handlers/entity/table.js +36 -0
- package/lib/handlers/entity/table.js.map +7 -0
- package/lib/handlers/entity/tolerance.cjs +90 -0
- package/lib/handlers/entity/tolerance.cjs.map +7 -0
- package/lib/handlers/entity/tolerance.js +55 -0
- package/lib/handlers/entity/tolerance.js.map +7 -0
- package/lib/handlers/entity/trace.cjs +101 -0
- package/lib/handlers/entity/trace.cjs.map +7 -0
- package/lib/handlers/entity/trace.js +66 -0
- package/lib/handlers/entity/trace.js.map +7 -0
- package/lib/handlers/entity/wipeout.cjs +122 -0
- package/lib/handlers/entity/wipeout.cjs.map +7 -0
- package/lib/handlers/entity/wipeout.js +87 -0
- package/lib/handlers/entity/wipeout.js.map +7 -0
- package/lib/handlers/entity/xline.cjs +81 -0
- package/lib/handlers/entity/xline.cjs.map +7 -0
- package/lib/handlers/entity/xline.js +46 -0
- package/lib/handlers/entity/xline.js.map +7 -0
- package/lib/handlers/objects.cjs +299 -136
- package/lib/handlers/objects.cjs.map +2 -2
- package/lib/handlers/objects.js +299 -136
- package/lib/handlers/objects.js.map +2 -2
- package/lib/handlers/tables.cjs +96 -17
- package/lib/handlers/tables.cjs.map +2 -2
- package/lib/handlers/tables.js +96 -17
- package/lib/handlers/tables.js.map +2 -2
- package/lib/index.cjs +5 -2
- package/lib/index.cjs.map +3 -3
- package/lib/index.js +18 -16
- package/lib/index.js.map +3 -3
- package/lib/toJson.cjs +29 -0
- package/lib/toJson.cjs.map +7 -0
- package/lib/toJson.js +9 -0
- package/lib/toJson.js.map +7 -0
- package/lib/toSVG.cjs +105 -11
- package/lib/toSVG.cjs.map +3 -3
- package/lib/toSVG.js +106 -12
- package/lib/toSVG.js.map +2 -2
- package/lib/types/dimension-entity.cjs.map +1 -1
- package/lib/types/entity.cjs.map +1 -1
- package/lib/types/helper.cjs.map +1 -1
- package/lib/types/image-entity.cjs +17 -0
- package/lib/types/image-entity.cjs.map +7 -0
- package/lib/types/image-entity.js +1 -0
- package/lib/types/image-entity.js.map +7 -0
- package/lib/types/index.cjs +28 -0
- package/lib/types/index.cjs.map +2 -2
- package/lib/types/index.js +14 -0
- package/lib/types/index.js.map +2 -2
- package/lib/types/leader-entity.cjs +17 -0
- package/lib/types/leader-entity.cjs.map +7 -0
- package/lib/types/leader-entity.js +1 -0
- package/lib/types/leader-entity.js.map +7 -0
- package/lib/types/mleader-entity.cjs +17 -0
- package/lib/types/mleader-entity.cjs.map +7 -0
- package/lib/types/mleader-entity.js +1 -0
- package/lib/types/mleader-entity.js.map +7 -0
- package/lib/types/mline-entity.cjs +17 -0
- package/lib/types/mline-entity.cjs.map +7 -0
- package/lib/types/mline-entity.js +1 -0
- package/lib/types/mline-entity.js.map +7 -0
- package/lib/types/oleframe-entity.cjs +17 -0
- package/lib/types/oleframe-entity.cjs.map +7 -0
- package/lib/types/oleframe-entity.js +1 -0
- package/lib/types/oleframe-entity.js.map +7 -0
- package/lib/types/options.cjs.map +1 -1
- package/lib/types/ray-entity.cjs +17 -0
- package/lib/types/ray-entity.cjs.map +7 -0
- package/lib/types/ray-entity.js +1 -0
- package/lib/types/ray-entity.js.map +7 -0
- package/lib/types/region-entity.cjs +17 -0
- package/lib/types/region-entity.cjs.map +7 -0
- package/lib/types/region-entity.js +1 -0
- package/lib/types/region-entity.js.map +7 -0
- package/lib/types/shape-entity.cjs +17 -0
- package/lib/types/shape-entity.cjs.map +7 -0
- package/lib/types/shape-entity.js +1 -0
- package/lib/types/shape-entity.js.map +7 -0
- package/lib/types/table-entity.cjs +17 -0
- package/lib/types/table-entity.cjs.map +7 -0
- package/lib/types/table-entity.js +1 -0
- package/lib/types/table-entity.js.map +7 -0
- package/lib/types/tables.cjs.map +1 -1
- package/lib/types/tolerance-entity.cjs +17 -0
- package/lib/types/tolerance-entity.cjs.map +7 -0
- package/lib/types/tolerance-entity.js +1 -0
- package/lib/types/tolerance-entity.js.map +7 -0
- package/lib/types/trace-entity.cjs +17 -0
- package/lib/types/trace-entity.cjs.map +7 -0
- package/lib/types/trace-entity.js +1 -0
- package/lib/types/trace-entity.js.map +7 -0
- package/lib/types/underlay-entity.cjs +17 -0
- package/lib/types/underlay-entity.cjs.map +7 -0
- package/lib/types/underlay-entity.js +1 -0
- package/lib/types/underlay-entity.js.map +7 -0
- package/lib/types/wipeout-entity.cjs +17 -0
- package/lib/types/wipeout-entity.cjs.map +7 -0
- package/lib/types/wipeout-entity.js +1 -0
- package/lib/types/wipeout-entity.js.map +7 -0
- package/lib/types/xline-entity.cjs +17 -0
- package/lib/types/xline-entity.cjs.map +7 -0
- package/lib/types/xline-entity.js +1 -0
- package/lib/types/xline-entity.js.map +7 -0
- package/lib/util/escapeXmlText.cjs +27 -0
- package/lib/util/escapeXmlText.cjs.map +7 -0
- package/lib/util/escapeXmlText.js +7 -0
- package/lib/util/escapeXmlText.js.map +7 -0
- package/package.json +9 -18
- package/playwright.config.cjs +20 -0
- package/src/Helper.ts +8 -3
- package/src/denormalise.ts +182 -116
- package/src/dimensionToSVG.ts +466 -54
- package/src/entityToPolyline.ts +124 -2
- package/src/handlers/entities.ts +129 -34
- package/src/handlers/entity/dgnUnderlay.ts +94 -0
- package/src/handlers/entity/dimension.ts +27 -1
- package/src/handlers/entity/dwfUnderlay.ts +94 -0
- package/src/handlers/entity/image.ts +118 -0
- package/src/handlers/entity/leader.ts +153 -0
- package/src/handlers/entity/mleader.ts +46 -0
- package/src/handlers/entity/mline.ts +74 -0
- package/src/handlers/entity/oleframe.ts +62 -0
- package/src/handlers/entity/pdfUnderlay.ts +94 -0
- package/src/handlers/entity/ray.ts +52 -0
- package/src/handlers/entity/region.ts +42 -0
- package/src/handlers/entity/shape.ts +73 -0
- package/src/handlers/entity/table.ts +49 -0
- package/src/handlers/entity/tolerance.ts +75 -0
- package/src/handlers/entity/trace.ts +72 -0
- package/src/handlers/entity/wipeout.ts +114 -0
- package/src/handlers/entity/xline.ts +52 -0
- package/src/handlers/objects.ts +379 -139
- package/src/handlers/tables.ts +134 -21
- package/src/index.ts +9 -18
- package/src/toJson.ts +8 -0
- package/src/toSVG.ts +143 -10
- package/src/types/dimension-entity.ts +11 -0
- package/src/types/entity.ts +30 -0
- package/src/types/helper.ts +2 -1
- package/src/types/image-entity.ts +35 -0
- package/src/types/index.ts +14 -0
- package/src/types/leader-entity.ts +40 -0
- package/src/types/mleader-entity.ts +8 -0
- package/src/types/mline-entity.ts +12 -0
- package/src/types/oleframe-entity.ts +40 -0
- package/src/types/options.ts +48 -0
- package/src/types/ray-entity.ts +12 -0
- package/src/types/region-entity.ts +11 -0
- package/src/types/shape-entity.ts +19 -0
- package/src/types/table-entity.ts +14 -0
- package/src/types/tables.ts +160 -0
- package/src/types/tolerance-entity.ts +20 -0
- package/src/types/trace-entity.ts +14 -0
- package/src/types/underlay-entity.ts +35 -0
- package/src/types/wipeout-entity.ts +20 -0
- package/src/types/xline-entity.ts +12 -0
- package/src/util/escapeXmlText.ts +10 -0
- package/tools/browser_test_server.cjs +87 -0
- package/tools/ezdxf_generate_dimensions_all_types.py +246 -0
- package/tools/ezdxf_generate_dimensions_angular_3p.py +59 -0
- package/tools/ezdxf_generate_dimensions_large_scale.py +87 -0
- package/tools/ezdxf_regenerate_problem_fixtures.py +184 -0
- package/tools/ezdxf_validate_fixtures.py +165 -0
- package/docs/DIMENSION_SUMMARY.md +0 -248
- package/docs/DIMENSION_SUMMARY.pt-BR.md +0 -248
- package/docs/IMPLEMENTED-2D-ENTITIES.md +0 -54
- package/docs/IMPLEMENTED-2D-ENTITIES.pt-BR.md +0 -54
- package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.md +0 -241
- package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.pt-BR.md +0 -169
package/lib/denormalise.js
CHANGED
|
@@ -1,5 +1,132 @@
|
|
|
1
1
|
import cloneDeep from "lodash/cloneDeep";
|
|
2
2
|
import logger from "./util/logger";
|
|
3
|
+
function adjustLineForBlockBasePoint(entity, block) {
|
|
4
|
+
const line = entity;
|
|
5
|
+
line.start.x -= block.x;
|
|
6
|
+
line.start.y -= block.y;
|
|
7
|
+
line.end.x -= block.x;
|
|
8
|
+
line.end.y -= block.y;
|
|
9
|
+
}
|
|
10
|
+
function adjustPolylineForBlockBasePoint(entity, block) {
|
|
11
|
+
const poly = entity;
|
|
12
|
+
for (const v of poly.vertices) {
|
|
13
|
+
if (v.x !== void 0) v.x -= block.x;
|
|
14
|
+
if (v.y !== void 0) v.y -= block.y;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function adjustCircleForBlockBasePoint(entity, block) {
|
|
18
|
+
const circle = entity;
|
|
19
|
+
circle.x -= block.x;
|
|
20
|
+
circle.y -= block.y;
|
|
21
|
+
}
|
|
22
|
+
function adjustEllipseForBlockBasePoint(entity, block) {
|
|
23
|
+
const ellipse = entity;
|
|
24
|
+
ellipse.x -= block.x;
|
|
25
|
+
ellipse.y -= block.y;
|
|
26
|
+
}
|
|
27
|
+
function adjustArcForBlockBasePoint(entity, block) {
|
|
28
|
+
const arc = entity;
|
|
29
|
+
arc.x -= block.x;
|
|
30
|
+
arc.y -= block.y;
|
|
31
|
+
}
|
|
32
|
+
function adjustSplineForBlockBasePoint(entity, block) {
|
|
33
|
+
const spline = entity;
|
|
34
|
+
for (const cp of spline.controlPoints) {
|
|
35
|
+
cp.x -= block.x;
|
|
36
|
+
cp.y -= block.y;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function adjustTextForBlockBasePoint(entity, block) {
|
|
40
|
+
const text = entity;
|
|
41
|
+
if (text.x !== void 0) text.x -= block.x;
|
|
42
|
+
if (text.y !== void 0) text.y -= block.y;
|
|
43
|
+
if (text.x2 !== void 0) text.x2 -= block.x;
|
|
44
|
+
if (text.y2 !== void 0) text.y2 -= block.y;
|
|
45
|
+
}
|
|
46
|
+
function adjustMTextForBlockBasePoint(entity, block) {
|
|
47
|
+
const mtext = entity;
|
|
48
|
+
if (mtext.x !== void 0) mtext.x -= block.x;
|
|
49
|
+
if (mtext.y !== void 0) mtext.y -= block.y;
|
|
50
|
+
}
|
|
51
|
+
function adjustDimensionForBlockBasePoint(entity, block) {
|
|
52
|
+
const dim = entity;
|
|
53
|
+
dim.start.x -= block.x;
|
|
54
|
+
dim.start.y -= block.y;
|
|
55
|
+
dim.textMidpoint.x -= block.x;
|
|
56
|
+
dim.textMidpoint.y -= block.y;
|
|
57
|
+
dim.measureStart.x -= block.x;
|
|
58
|
+
dim.measureStart.y -= block.y;
|
|
59
|
+
dim.measureEnd.x -= block.x;
|
|
60
|
+
dim.measureEnd.y -= block.y;
|
|
61
|
+
}
|
|
62
|
+
const BLOCK_BASEPOINT_ADJUSTERS = {
|
|
63
|
+
LINE: adjustLineForBlockBasePoint,
|
|
64
|
+
LWPOLYLINE: adjustPolylineForBlockBasePoint,
|
|
65
|
+
POLYLINE: adjustPolylineForBlockBasePoint,
|
|
66
|
+
CIRCLE: adjustCircleForBlockBasePoint,
|
|
67
|
+
ELLIPSE: adjustEllipseForBlockBasePoint,
|
|
68
|
+
ARC: adjustArcForBlockBasePoint,
|
|
69
|
+
SPLINE: adjustSplineForBlockBasePoint,
|
|
70
|
+
TEXT: adjustTextForBlockBasePoint,
|
|
71
|
+
MTEXT: adjustMTextForBlockBasePoint,
|
|
72
|
+
DIMENSION: adjustDimensionForBlockBasePoint
|
|
73
|
+
};
|
|
74
|
+
function applyBlockBasePointAdjustment(entity, block) {
|
|
75
|
+
const adjust = BLOCK_BASEPOINT_ADJUSTERS[entity.type];
|
|
76
|
+
if (adjust) adjust(entity, block);
|
|
77
|
+
}
|
|
78
|
+
function computeRectangularArrayVectors(insert) {
|
|
79
|
+
const rowCount = insert.rowCount ?? 1;
|
|
80
|
+
const columnCount = insert.columnCount ?? 1;
|
|
81
|
+
const rowSpacing = insert.rowSpacing ?? 0;
|
|
82
|
+
const columnSpacing = insert.columnSpacing ?? 0;
|
|
83
|
+
const rotation = insert.rotation ?? 0;
|
|
84
|
+
if (rowCount <= 1 && columnCount <= 1) {
|
|
85
|
+
return { rowVec: { x: 0, y: 0 }, colVec: { x: 0, y: 0 } };
|
|
86
|
+
}
|
|
87
|
+
const cos = Math.cos(rotation * Math.PI / 180);
|
|
88
|
+
const sin = Math.sin(rotation * Math.PI / 180);
|
|
89
|
+
return {
|
|
90
|
+
rowVec: { x: -sin * rowSpacing, y: cos * rowSpacing },
|
|
91
|
+
colVec: { x: cos * columnSpacing, y: sin * columnSpacing }
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function expandInsert(insert, blocksByName, transforms, gatherEntities) {
|
|
95
|
+
const block = blocksByName[insert.block];
|
|
96
|
+
if (!block) {
|
|
97
|
+
logger.error("no block found for insert. block:", insert.block);
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
const rowCount = insert.rowCount ?? 1;
|
|
101
|
+
const columnCount = insert.columnCount ?? 1;
|
|
102
|
+
const { rowVec, colVec } = computeRectangularArrayVectors(insert);
|
|
103
|
+
const current = [];
|
|
104
|
+
for (let r = 0; r < rowCount; r++) {
|
|
105
|
+
for (let c = 0; c < columnCount; c++) {
|
|
106
|
+
const t = {
|
|
107
|
+
x: insert.x + rowVec.x * r + colVec.x * c,
|
|
108
|
+
y: insert.y + rowVec.y * r + colVec.y * c,
|
|
109
|
+
scaleX: insert.scaleX,
|
|
110
|
+
scaleY: insert.scaleY,
|
|
111
|
+
scaleZ: insert.scaleZ,
|
|
112
|
+
extrusionX: insert.extrusionX,
|
|
113
|
+
extrusionY: insert.extrusionY,
|
|
114
|
+
extrusionZ: insert.extrusionZ,
|
|
115
|
+
rotation: insert.rotation
|
|
116
|
+
};
|
|
117
|
+
const transforms2 = transforms.slice(0);
|
|
118
|
+
transforms2.push(t);
|
|
119
|
+
const blockEntities = block.entities.map((be) => {
|
|
120
|
+
const be2 = cloneDeep(be);
|
|
121
|
+
be2.layer = insert.layer;
|
|
122
|
+
applyBlockBasePointAdjustment(be2, block);
|
|
123
|
+
return be2;
|
|
124
|
+
});
|
|
125
|
+
current.push(...gatherEntities(blockEntities, transforms2));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return current;
|
|
129
|
+
}
|
|
3
130
|
function denormalise(parseResult) {
|
|
4
131
|
const blocksByName = parseResult.blocks.reduce(
|
|
5
132
|
(acc, b) => {
|
|
@@ -9,99 +136,12 @@ function denormalise(parseResult) {
|
|
|
9
136
|
{}
|
|
10
137
|
);
|
|
11
138
|
const gatherEntities = (entities, transforms) => {
|
|
12
|
-
|
|
139
|
+
const current = [];
|
|
13
140
|
for (const e of entities) {
|
|
14
141
|
if (e.type === "INSERT") {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
logger.error("no block found for insert. block:", insert.block);
|
|
19
|
-
continue;
|
|
20
|
-
}
|
|
21
|
-
const rowCount = insert.rowCount ?? 1;
|
|
22
|
-
const columnCount = insert.columnCount ?? 1;
|
|
23
|
-
const rowSpacing = insert.rowSpacing ?? 0;
|
|
24
|
-
const columnSpacing = insert.columnSpacing ?? 0;
|
|
25
|
-
const rotation = insert.rotation ?? 0;
|
|
26
|
-
let rowVec;
|
|
27
|
-
let colVec;
|
|
28
|
-
if (rowCount > 1 || columnCount > 1) {
|
|
29
|
-
const cos = Math.cos(rotation * Math.PI / 180);
|
|
30
|
-
const sin = Math.sin(rotation * Math.PI / 180);
|
|
31
|
-
rowVec = { x: -sin * rowSpacing, y: cos * rowSpacing };
|
|
32
|
-
colVec = { x: cos * columnSpacing, y: sin * columnSpacing };
|
|
33
|
-
} else {
|
|
34
|
-
rowVec = { x: 0, y: 0 };
|
|
35
|
-
colVec = { x: 0, y: 0 };
|
|
36
|
-
}
|
|
37
|
-
for (let r = 0; r < rowCount; r++) {
|
|
38
|
-
for (let c = 0; c < columnCount; c++) {
|
|
39
|
-
const t = {
|
|
40
|
-
x: insert.x + rowVec.x * r + colVec.x * c,
|
|
41
|
-
y: insert.y + rowVec.y * r + colVec.y * c,
|
|
42
|
-
scaleX: insert.scaleX,
|
|
43
|
-
scaleY: insert.scaleY,
|
|
44
|
-
scaleZ: insert.scaleZ,
|
|
45
|
-
extrusionX: insert.extrusionX,
|
|
46
|
-
extrusionY: insert.extrusionY,
|
|
47
|
-
extrusionZ: insert.extrusionZ,
|
|
48
|
-
rotation: insert.rotation
|
|
49
|
-
};
|
|
50
|
-
const transforms2 = transforms.slice(0);
|
|
51
|
-
transforms2.push(t);
|
|
52
|
-
const blockEntities = block.entities.map((be) => {
|
|
53
|
-
const be2 = cloneDeep(be);
|
|
54
|
-
be2.layer = insert.layer;
|
|
55
|
-
switch (be2.type) {
|
|
56
|
-
case "LINE": {
|
|
57
|
-
const line = be2;
|
|
58
|
-
line.start.x -= block.x;
|
|
59
|
-
line.start.y -= block.y;
|
|
60
|
-
line.end.x -= block.x;
|
|
61
|
-
line.end.y -= block.y;
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
case "LWPOLYLINE":
|
|
65
|
-
case "POLYLINE": {
|
|
66
|
-
const poly = be2;
|
|
67
|
-
for (const v of poly.vertices) {
|
|
68
|
-
if (v.x !== void 0) v.x -= block.x;
|
|
69
|
-
if (v.y !== void 0) v.y -= block.y;
|
|
70
|
-
}
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
case "CIRCLE": {
|
|
74
|
-
const circle = be2;
|
|
75
|
-
circle.x -= block.x;
|
|
76
|
-
circle.y -= block.y;
|
|
77
|
-
break;
|
|
78
|
-
}
|
|
79
|
-
case "ELLIPSE": {
|
|
80
|
-
const ellipse = be2;
|
|
81
|
-
ellipse.x -= block.x;
|
|
82
|
-
ellipse.y -= block.y;
|
|
83
|
-
break;
|
|
84
|
-
}
|
|
85
|
-
case "ARC": {
|
|
86
|
-
const arc = be2;
|
|
87
|
-
arc.x -= block.x;
|
|
88
|
-
arc.y -= block.y;
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
case "SPLINE": {
|
|
92
|
-
const spline = be2;
|
|
93
|
-
for (const cp of spline.controlPoints) {
|
|
94
|
-
cp.x -= block.x;
|
|
95
|
-
cp.y -= block.y;
|
|
96
|
-
}
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return be2;
|
|
101
|
-
});
|
|
102
|
-
current = current.concat(gatherEntities(blockEntities, transforms2));
|
|
103
|
-
}
|
|
104
|
-
}
|
|
142
|
+
current.push(
|
|
143
|
+
...expandInsert(e, blocksByName, transforms, gatherEntities)
|
|
144
|
+
);
|
|
105
145
|
} else {
|
|
106
146
|
const e2 = cloneDeep(e);
|
|
107
147
|
e2.transforms = transforms.slice().reverse();
|
package/lib/denormalise.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/denormalise.ts"],
|
|
4
|
-
"sourcesContent": ["import cloneDeep from 'lodash/cloneDeep'\n\nimport logger from './util/logger'\n\nimport type {\n
|
|
5
|
-
"mappings": "AAAA,OAAO,eAAe;AAEtB,OAAO,YAAY;
|
|
4
|
+
"sourcesContent": ["import cloneDeep from 'lodash/cloneDeep'\n\nimport logger from './util/logger'\n\nimport type {\n ArcEntity,\n Block,\n CircleEntity,\n DimensionEntity,\n EllipseEntity,\n Entity,\n InsertEntity,\n LineEntity,\n MTextEntity,\n ParsedDXF,\n PolylineEntity,\n SplineEntity,\n TextEntity,\n Transform,\n} from './types'\n\ntype BlockBasePointAdjuster = (entity: Entity, block: Block) => void\n\nfunction adjustLineForBlockBasePoint(entity: Entity, block: Block): void {\n const line = entity as LineEntity\n line.start.x -= block.x\n line.start.y -= block.y\n line.end.x -= block.x\n line.end.y -= block.y\n}\n\nfunction adjustPolylineForBlockBasePoint(entity: Entity, block: Block): void {\n const poly = entity as PolylineEntity\n for (const v of poly.vertices) {\n if (v.x !== undefined) v.x -= block.x\n if (v.y !== undefined) v.y -= block.y\n }\n}\n\nfunction adjustCircleForBlockBasePoint(entity: Entity, block: Block): void {\n const circle = entity as CircleEntity\n circle.x -= block.x\n circle.y -= block.y\n}\n\nfunction adjustEllipseForBlockBasePoint(entity: Entity, block: Block): void {\n const ellipse = entity as EllipseEntity\n ellipse.x -= block.x\n ellipse.y -= block.y\n}\n\nfunction adjustArcForBlockBasePoint(entity: Entity, block: Block): void {\n const arc = entity as ArcEntity\n arc.x -= block.x\n arc.y -= block.y\n}\n\nfunction adjustSplineForBlockBasePoint(entity: Entity, block: Block): void {\n const spline = entity as SplineEntity\n for (const cp of spline.controlPoints) {\n cp.x -= block.x\n cp.y -= block.y\n }\n}\n\nfunction adjustTextForBlockBasePoint(entity: Entity, block: Block): void {\n const text = entity as TextEntity\n if (text.x !== undefined) text.x -= block.x\n if (text.y !== undefined) text.y -= block.y\n if (text.x2 !== undefined) text.x2 -= block.x\n if (text.y2 !== undefined) text.y2 -= block.y\n}\n\nfunction adjustMTextForBlockBasePoint(entity: Entity, block: Block): void {\n const mtext = entity as MTextEntity\n if (mtext.x !== undefined) mtext.x -= block.x\n if (mtext.y !== undefined) mtext.y -= block.y\n}\n\nfunction adjustDimensionForBlockBasePoint(entity: Entity, block: Block): void {\n const dim = entity as DimensionEntity\n dim.start.x -= block.x\n dim.start.y -= block.y\n dim.textMidpoint.x -= block.x\n dim.textMidpoint.y -= block.y\n dim.measureStart.x -= block.x\n dim.measureStart.y -= block.y\n dim.measureEnd.x -= block.x\n dim.measureEnd.y -= block.y\n}\n\nconst BLOCK_BASEPOINT_ADJUSTERS: Record<string, BlockBasePointAdjuster> = {\n LINE: adjustLineForBlockBasePoint,\n LWPOLYLINE: adjustPolylineForBlockBasePoint,\n POLYLINE: adjustPolylineForBlockBasePoint,\n CIRCLE: adjustCircleForBlockBasePoint,\n ELLIPSE: adjustEllipseForBlockBasePoint,\n ARC: adjustArcForBlockBasePoint,\n SPLINE: adjustSplineForBlockBasePoint,\n TEXT: adjustTextForBlockBasePoint,\n MTEXT: adjustMTextForBlockBasePoint,\n DIMENSION: adjustDimensionForBlockBasePoint,\n}\n\nfunction applyBlockBasePointAdjustment(entity: Entity, block: Block): void {\n // https://github.com/bjnortier/dxf/issues/52\n // See Issue 52. If we don't modify the entity coordinates here it creates an\n // issue with the transformation matrices (which are only applied AFTER block\n // insertion modifications has been applied).\n const adjust = BLOCK_BASEPOINT_ADJUSTERS[entity.type]\n if (adjust) adjust(entity, block)\n}\n\nfunction computeRectangularArrayVectors(insert: InsertEntity): {\n rowVec: { x: number; y: number }\n colVec: { x: number; y: number }\n} {\n const rowCount = insert.rowCount ?? 1\n const columnCount = insert.columnCount ?? 1\n const rowSpacing = insert.rowSpacing ?? 0\n const columnSpacing = insert.columnSpacing ?? 0\n const rotation = insert.rotation ?? 0\n\n // It appears that the rectangular array is affected by rotation, but NOT by scale.\n if (rowCount <= 1 && columnCount <= 1) {\n return { rowVec: { x: 0, y: 0 }, colVec: { x: 0, y: 0 } }\n }\n\n const cos = Math.cos((rotation * Math.PI) / 180)\n const sin = Math.sin((rotation * Math.PI) / 180)\n return {\n rowVec: { x: -sin * rowSpacing, y: cos * rowSpacing },\n colVec: { x: cos * columnSpacing, y: sin * columnSpacing },\n }\n}\n\nfunction expandInsert(\n insert: InsertEntity,\n blocksByName: Record<string, Block>,\n transforms: Transform[],\n gatherEntities: (entities: Entity[], transforms: Transform[]) => Entity[],\n): Entity[] {\n const block = blocksByName[insert.block]\n if (!block) {\n logger.error('no block found for insert. block:', insert.block)\n return []\n }\n\n const rowCount = insert.rowCount ?? 1\n const columnCount = insert.columnCount ?? 1\n const { rowVec, colVec } = computeRectangularArrayVectors(insert)\n\n const current: Entity[] = []\n for (let r = 0; r < rowCount; r++) {\n for (let c = 0; c < columnCount; c++) {\n const t: Transform = {\n x: insert.x + rowVec.x * r + colVec.x * c,\n y: insert.y + rowVec.y * r + colVec.y * c,\n scaleX: insert.scaleX,\n scaleY: insert.scaleY,\n scaleZ: insert.scaleZ,\n extrusionX: insert.extrusionX,\n extrusionY: insert.extrusionY,\n extrusionZ: insert.extrusionZ,\n rotation: insert.rotation,\n }\n\n const transforms2 = transforms.slice(0)\n transforms2.push(t)\n\n // Use the insert layer\n const blockEntities = block.entities.map((be: Entity) => {\n const be2 = cloneDeep(be)\n be2.layer = insert.layer\n applyBlockBasePointAdjustment(be2, block)\n return be2\n })\n\n current.push(...gatherEntities(blockEntities, transforms2))\n }\n }\n\n return current\n}\n\nexport default function denormalise(parseResult: ParsedDXF): Entity[] {\n const blocksByName = parseResult.blocks.reduce(\n (acc: { [name: string]: Block }, b: Block) => {\n acc[b.name] = b\n return acc\n },\n {},\n )\n\n const gatherEntities = (\n entities: Entity[],\n transforms: Transform[],\n ): Entity[] => {\n const current: Entity[] = []\n for (const e of entities) {\n if (e.type === 'INSERT') {\n current.push(\n ...expandInsert(e as InsertEntity, blocksByName, transforms, gatherEntities),\n )\n } else {\n // Top-level entity. Clone and add the transforms\n // The transforms are reversed so they occur in\n // order of application - i.e. the transform of the\n // top-level insert is applied last\n const e2 = cloneDeep(e)\n e2.transforms = transforms.slice().reverse()\n current.push(e2)\n }\n }\n return current\n }\n\n return gatherEntities(parseResult.entities, [])\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|