@linkiez/dxf-renew 5.3.1 → 7.1.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/{docs/CODE_PATTERNS.md → .github/instructions/code-patterns.instructions.md} +4 -1
- package/.github/instructions/exdxf.instruction.md +161 -0
- package/.github/instructions/tdd.instructions.md +271 -0
- package/.github/workflows/release.yml +4 -5
- package/.releaserc.json +1 -1
- package/.yarn/install-state.gz +0 -0
- package/CHANGELOG.md +59 -0
- package/CONTRIBUTING.md +16 -14
- package/PLAN.md +34 -84
- package/README.md +43 -8
- package/dist/dxf.js +1388 -376
- package/docs/DIMENSION_SUMMARY.md +11 -5
- package/docs/DXF_VERSION_SUPPORT.md +45 -0
- package/docs/ENTITY_SVG_ROADMAP.md +96 -0
- package/docs/EZDXF_REFERENCE_SITEMAP.md +55 -0
- package/docs/FIXTURE_VALIDATION_EZDXF.md +62 -0
- package/docs/README.md +22 -0
- package/docs/SVG_RENDERING_INTEGRATION_TESTS.md +119 -0
- package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.md +1 -1
- package/lib/Helper.cjs +2 -2
- package/lib/Helper.cjs.map +2 -2
- package/lib/Helper.js +2 -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/handlers/entities.cjs +90 -26
- package/lib/handlers/entities.cjs.map +3 -3
- package/lib/handlers/entities.js +90 -26
- 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/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/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/objects.cjs +257 -136
- package/lib/handlers/objects.cjs.map +2 -2
- package/lib/handlers/objects.js +257 -136
- package/lib/handlers/objects.js.map +2 -2
- package/lib/toSVG.cjs +71 -8
- package/lib/toSVG.cjs.map +3 -3
- package/lib/toSVG.js +72 -9
- 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/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 +8 -0
- package/lib/types/index.cjs.map +2 -2
- package/lib/types/index.js +4 -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/options.cjs.map +1 -1
- 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/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/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 +13 -4
- package/playwright.config.cjs +20 -0
- package/src/Helper.ts +3 -3
- package/src/denormalise.ts +182 -116
- package/src/dimensionToSVG.ts +466 -54
- package/src/handlers/entities.ts +109 -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/pdfUnderlay.ts +94 -0
- package/src/handlers/entity/tolerance.ts +75 -0
- package/src/handlers/objects.ts +323 -139
- package/src/toSVG.ts +98 -7
- package/src/types/dimension-entity.ts +11 -0
- package/src/types/entity.ts +10 -0
- package/src/types/image-entity.ts +35 -0
- package/src/types/index.ts +4 -0
- package/src/types/leader-entity.ts +40 -0
- package/src/types/options.ts +41 -0
- package/src/types/tables.ts +84 -0
- package/src/types/tolerance-entity.ts +20 -0
- package/src/types/underlay-entity.ts +35 -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.pt-BR.md +0 -248
- package/docs/IMPLEMENTED-2D-ENTITIES.pt-BR.md +0 -54
- package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.pt-BR.md +0 -169
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/handlers/objects.ts"],
|
|
4
|
-
"sourcesContent": ["import type {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import type {\n DictionaryObject,\n DXFTuple,\n ImageDefObject,\n ImageDefReactorObject,\n LayoutInternal,\n ParsedObjects,\n UnderlayDefinitionObject,\n XRecordObject,\n} from '../types'\n\ntype ObjectGroup = DXFTuple[]\n\nfunction groupObjectsByZero(tuples: DXFTuple[]): ObjectGroup[] {\n const groups: ObjectGroup[] = []\n let current: ObjectGroup | undefined\n\n for (const tuple of tuples) {\n const code = tuple[0]\n if (code === 0) {\n if (current && current.length > 0) groups.push(current)\n current = [tuple]\n continue\n }\n if (!current) continue\n current.push(tuple)\n }\n\n if (current && current.length > 0) groups.push(current)\n return groups\n}\n\nconst LAYOUT_FLOAT_FIELDS: Record<number, keyof LayoutInternal> = {\n 10: 'minLimitX',\n 20: 'minLimitY',\n 11: 'maxLimitX',\n 21: 'maxLimitY',\n 12: 'x',\n 22: 'y',\n 32: 'z',\n 14: 'minX',\n 24: 'minY',\n 34: 'minZ',\n 15: 'maxX',\n 25: 'maxY',\n 35: 'maxZ',\n 146: 'elevation',\n 13: 'ucsX',\n 23: 'ucsY',\n 33: 'ucsZ',\n 16: 'ucsXaxisX',\n 26: 'ucsXaxisY',\n 36: 'ucsXaxisZ',\n 17: 'ucsYaxisX',\n 27: 'ucsYaxisY',\n 37: 'ucsYaxisZ',\n}\n\nconst LAYOUT_DIRECT_FIELDS: Record<number, keyof LayoutInternal> = {\n 1: 'name',\n 5: 'handle',\n 71: 'tabOrder',\n 330: 'tableRecord',\n 331: 'lastActiveViewport',\n 333: 'shadePlot',\n}\n\nconst LAYOUT_UCS_TYPE: Record<number, LayoutInternal['ucsType']> = {\n 0: 'NOT ORTHOGRAPHIC',\n 1: 'TOP',\n 2: 'BOTTOM',\n 3: 'FRONT',\n 4: 'BACK',\n 5: 'LEFT',\n 6: 'RIGHT',\n}\n\ntype LayoutParseState = {\n state: 'IDLE' | 'layout' | 'AcDbLayout'\n layout?: LayoutInternal\n}\n\nfunction consumeLayoutStartTuple(current: LayoutParseState, tuple: DXFTuple): LayoutParseState {\n if (tuple[1] === 'LAYOUT') return { state: 'layout', layout: {} }\n return { state: 'IDLE', layout: current.layout }\n}\n\nfunction consumeLayoutSubclassTuple(current: LayoutParseState, tuple: DXFTuple): LayoutParseState {\n if (tuple[0] === 100 && tuple[1] === 'AcDbLayout') return { state: 'AcDbLayout', layout: current.layout }\n return current\n}\n\nfunction applyLayoutFieldTuple(layout: LayoutInternal, tuple: DXFTuple): void {\n const type = tuple[0]\n const value = tuple[1]\n\n const floatKey = LAYOUT_FLOAT_FIELDS[type]\n if (floatKey) {\n ;(layout as any)[floatKey] = Number.parseFloat(String(value))\n return\n }\n\n const directKey = LAYOUT_DIRECT_FIELDS[type]\n if (directKey) {\n ;(layout as any)[directKey] = value\n return\n }\n\n if (type === 70) {\n layout.flag = value === 1 ? 'PSLTSCALE' : 'LIMCHECK'\n return\n }\n\n if (type === 76) {\n const ucsType = LAYOUT_UCS_TYPE[Number(value)]\n if (ucsType) layout.ucsType = ucsType\n }\n}\n\nfunction consumeLayoutTuple(current: LayoutParseState, tuple: DXFTuple): LayoutParseState {\n if (tuple[0] === 0) return consumeLayoutStartTuple(current, tuple)\n\n if (current.state === 'layout') return consumeLayoutSubclassTuple(current, tuple)\n\n if (current.state === 'AcDbLayout' && current.layout) applyLayoutFieldTuple(current.layout, tuple)\n return current\n}\n\nfunction parseLayoutObject(group: ObjectGroup): LayoutInternal | undefined {\n let current: LayoutParseState = { state: 'IDLE' }\n for (const tuple of group) current = consumeLayoutTuple(current, tuple)\n return current.layout\n}\n\nfunction parseDictionaryObject(group: ObjectGroup): DictionaryObject | undefined {\n if (group[0]?.[1] !== 'DICTIONARY') return undefined\n\n const dict: DictionaryObject = {\n type: 'DICTIONARY',\n entries: {},\n }\n\n let pendingKey: string | undefined\n for (const tuple of group.slice(1)) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) {\n dict.handle = value\n continue\n }\n if (type === 330) {\n dict.ownerHandle = value\n continue\n }\n if (type === 3) {\n pendingKey = String(value)\n continue\n }\n if ((type === 350 || type === 360) && pendingKey) {\n dict.entries[pendingKey] = String(value)\n pendingKey = undefined\n }\n }\n\n return dict\n}\n\nfunction parseXRecordObject(group: ObjectGroup): XRecordObject | undefined {\n if (group[0]?.[1] !== 'XRECORD') return undefined\n\n const tuples = group.slice(1)\n\n const xRecord: XRecordObject = {\n type: 'XRECORD',\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) xRecord.handle = value\n if (type === 330) xRecord.ownerHandle = value\n }\n\n return xRecord\n}\n\nfunction parseImageDefObject(group: ObjectGroup): ImageDefObject | undefined {\n if (group[0]?.[1] !== 'IMAGEDEF') return undefined\n\n const tuples = group.slice(1)\n\n const imageDef: ImageDefObject = {\n type: 'IMAGEDEF',\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) imageDef.handle = value\n if (type === 330 && imageDef.ownerHandle === undefined) imageDef.ownerHandle = value\n if (type === 1) imageDef.fileName = String(value)\n if (type === 10) imageDef.pixelSizeX = Number(value)\n if (type === 20) imageDef.pixelSizeY = Number(value)\n }\n\n return imageDef\n}\n\nfunction parseImageDefReactorObject(group: ObjectGroup): ImageDefReactorObject | undefined {\n if (group[0]?.[1] !== 'IMAGEDEF_REACTOR') return undefined\n\n const tuples = group.slice(1)\n\n const reactor: ImageDefReactorObject = {\n type: 'IMAGEDEF_REACTOR',\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) reactor.handle = value\n if (type === 330) reactor.imageHandle = value\n }\n\n return reactor\n}\n\nconst UNDERLAY_DEFINITION_OBJECT_TYPES = new Set([\n 'UNDERLAYDEFINITION',\n 'PDFDEFINITION',\n 'DWFDEFINITION',\n 'DGNDEFINITION',\n])\n\nfunction parseUnderlayDefinitionObject(group: ObjectGroup): UnderlayDefinitionObject | undefined {\n const objectType = group[0]?.[1]\n if (typeof objectType !== 'string') return undefined\n if (!UNDERLAY_DEFINITION_OBJECT_TYPES.has(objectType)) return undefined\n\n const tuples = group.slice(1)\n\n const def: UnderlayDefinitionObject = {\n type: objectType as UnderlayDefinitionObject['type'],\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) def.handle = value\n if (type === 330 && def.ownerHandle === undefined) def.ownerHandle = value\n if (type === 1) def.fileName = String(value)\n if (type === 2) def.underlayName = String(value)\n }\n\n return def\n}\n\ntype ObjectGroupHandler = (objects: ParsedObjects, group: ObjectGroup) => void\n\nconst OBJECT_GROUP_HANDLERS: Record<string, ObjectGroupHandler> = {\n LAYOUT: (objects, group) => {\n const layout = parseLayoutObject(group)\n if (layout) objects.layouts.push(layout)\n },\n DICTIONARY: (objects, group) => {\n const dict = parseDictionaryObject(group)\n const handle = dict?.handle ? String(dict.handle) : undefined\n if (dict && handle) objects.dictionaries![handle] = dict\n },\n XRECORD: (objects, group) => {\n const xRecord = parseXRecordObject(group)\n const handle = xRecord?.handle ? String(xRecord.handle) : undefined\n if (xRecord && handle) objects.xRecords![handle] = xRecord\n },\n IMAGEDEF: (objects, group) => {\n const imageDef = parseImageDefObject(group)\n const handle = imageDef?.handle ? String(imageDef.handle) : undefined\n if (imageDef && handle) objects.imageDefs![handle] = imageDef\n },\n IMAGEDEF_REACTOR: (objects, group) => {\n const reactor = parseImageDefReactorObject(group)\n const handle = reactor?.handle ? String(reactor.handle) : undefined\n if (reactor && handle) objects.imageDefReactors![handle] = reactor\n },\n UNDERLAYDEFINITION: (objects, group) => {\n const def = parseUnderlayDefinitionObject(group)\n const handle = def?.handle ? String(def.handle) : undefined\n if (def && handle) objects.underlayDefinitions![handle] = def\n },\n PDFDEFINITION: (objects, group) => {\n const def = parseUnderlayDefinitionObject(group)\n const handle = def?.handle ? String(def.handle) : undefined\n if (def && handle) objects.underlayDefinitions![handle] = def\n },\n DWFDEFINITION: (objects, group) => {\n const def = parseUnderlayDefinitionObject(group)\n const handle = def?.handle ? String(def.handle) : undefined\n if (def && handle) objects.underlayDefinitions![handle] = def\n },\n DGNDEFINITION: (objects, group) => {\n const def = parseUnderlayDefinitionObject(group)\n const handle = def?.handle ? String(def.handle) : undefined\n if (def && handle) objects.underlayDefinitions![handle] = def\n },\n}\n\nexport default function parseObjects(tuples: DXFTuple[]): ParsedObjects {\n const objects: ParsedObjects = {\n layouts: [],\n dictionaries: {},\n xRecords: {},\n imageDefs: {},\n imageDefReactors: {},\n underlayDefinitions: {},\n }\n\n const groups = groupObjectsByZero(tuples)\n for (const group of groups) {\n const objectType = group[0]?.[1]\n if (typeof objectType !== 'string') continue\n\n const handler = OBJECT_GROUP_HANDLERS[objectType]\n if (handler) handler(objects, group)\n }\n\n return objects\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/lib/handlers/objects.js
CHANGED
|
@@ -1,147 +1,268 @@
|
|
|
1
|
-
function
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
layouts: []
|
|
5
|
-
};
|
|
6
|
-
let layout;
|
|
1
|
+
function groupObjectsByZero(tuples) {
|
|
2
|
+
const groups = [];
|
|
3
|
+
let current;
|
|
7
4
|
for (const tuple of tuples) {
|
|
5
|
+
const code = tuple[0];
|
|
6
|
+
if (code === 0) {
|
|
7
|
+
if (current && current.length > 0) groups.push(current);
|
|
8
|
+
current = [tuple];
|
|
9
|
+
continue;
|
|
10
|
+
}
|
|
11
|
+
if (!current) continue;
|
|
12
|
+
current.push(tuple);
|
|
13
|
+
}
|
|
14
|
+
if (current && current.length > 0) groups.push(current);
|
|
15
|
+
return groups;
|
|
16
|
+
}
|
|
17
|
+
const LAYOUT_FLOAT_FIELDS = {
|
|
18
|
+
10: "minLimitX",
|
|
19
|
+
20: "minLimitY",
|
|
20
|
+
11: "maxLimitX",
|
|
21
|
+
21: "maxLimitY",
|
|
22
|
+
12: "x",
|
|
23
|
+
22: "y",
|
|
24
|
+
32: "z",
|
|
25
|
+
14: "minX",
|
|
26
|
+
24: "minY",
|
|
27
|
+
34: "minZ",
|
|
28
|
+
15: "maxX",
|
|
29
|
+
25: "maxY",
|
|
30
|
+
35: "maxZ",
|
|
31
|
+
146: "elevation",
|
|
32
|
+
13: "ucsX",
|
|
33
|
+
23: "ucsY",
|
|
34
|
+
33: "ucsZ",
|
|
35
|
+
16: "ucsXaxisX",
|
|
36
|
+
26: "ucsXaxisY",
|
|
37
|
+
36: "ucsXaxisZ",
|
|
38
|
+
17: "ucsYaxisX",
|
|
39
|
+
27: "ucsYaxisY",
|
|
40
|
+
37: "ucsYaxisZ"
|
|
41
|
+
};
|
|
42
|
+
const LAYOUT_DIRECT_FIELDS = {
|
|
43
|
+
1: "name",
|
|
44
|
+
5: "handle",
|
|
45
|
+
71: "tabOrder",
|
|
46
|
+
330: "tableRecord",
|
|
47
|
+
331: "lastActiveViewport",
|
|
48
|
+
333: "shadePlot"
|
|
49
|
+
};
|
|
50
|
+
const LAYOUT_UCS_TYPE = {
|
|
51
|
+
0: "NOT ORTHOGRAPHIC",
|
|
52
|
+
1: "TOP",
|
|
53
|
+
2: "BOTTOM",
|
|
54
|
+
3: "FRONT",
|
|
55
|
+
4: "BACK",
|
|
56
|
+
5: "LEFT",
|
|
57
|
+
6: "RIGHT"
|
|
58
|
+
};
|
|
59
|
+
function consumeLayoutStartTuple(current, tuple) {
|
|
60
|
+
if (tuple[1] === "LAYOUT") return { state: "layout", layout: {} };
|
|
61
|
+
return { state: "IDLE", layout: current.layout };
|
|
62
|
+
}
|
|
63
|
+
function consumeLayoutSubclassTuple(current, tuple) {
|
|
64
|
+
if (tuple[0] === 100 && tuple[1] === "AcDbLayout") return { state: "AcDbLayout", layout: current.layout };
|
|
65
|
+
return current;
|
|
66
|
+
}
|
|
67
|
+
function applyLayoutFieldTuple(layout, tuple) {
|
|
68
|
+
const type = tuple[0];
|
|
69
|
+
const value = tuple[1];
|
|
70
|
+
const floatKey = LAYOUT_FLOAT_FIELDS[type];
|
|
71
|
+
if (floatKey) {
|
|
72
|
+
;
|
|
73
|
+
layout[floatKey] = Number.parseFloat(String(value));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const directKey = LAYOUT_DIRECT_FIELDS[type];
|
|
77
|
+
if (directKey) {
|
|
78
|
+
;
|
|
79
|
+
layout[directKey] = value;
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (type === 70) {
|
|
83
|
+
layout.flag = value === 1 ? "PSLTSCALE" : "LIMCHECK";
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (type === 76) {
|
|
87
|
+
const ucsType = LAYOUT_UCS_TYPE[Number(value)];
|
|
88
|
+
if (ucsType) layout.ucsType = ucsType;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function consumeLayoutTuple(current, tuple) {
|
|
92
|
+
if (tuple[0] === 0) return consumeLayoutStartTuple(current, tuple);
|
|
93
|
+
if (current.state === "layout") return consumeLayoutSubclassTuple(current, tuple);
|
|
94
|
+
if (current.state === "AcDbLayout" && current.layout) applyLayoutFieldTuple(current.layout, tuple);
|
|
95
|
+
return current;
|
|
96
|
+
}
|
|
97
|
+
function parseLayoutObject(group) {
|
|
98
|
+
let current = { state: "IDLE" };
|
|
99
|
+
for (const tuple of group) current = consumeLayoutTuple(current, tuple);
|
|
100
|
+
return current.layout;
|
|
101
|
+
}
|
|
102
|
+
function parseDictionaryObject(group) {
|
|
103
|
+
if (group[0]?.[1] !== "DICTIONARY") return void 0;
|
|
104
|
+
const dict = {
|
|
105
|
+
type: "DICTIONARY",
|
|
106
|
+
entries: {}
|
|
107
|
+
};
|
|
108
|
+
let pendingKey;
|
|
109
|
+
for (const tuple of group.slice(1)) {
|
|
8
110
|
const type = tuple[0];
|
|
9
111
|
const value = tuple[1];
|
|
10
|
-
if (type ===
|
|
11
|
-
|
|
112
|
+
if (type === 5) {
|
|
113
|
+
dict.handle = value;
|
|
114
|
+
continue;
|
|
12
115
|
}
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
objects.layouts.push(layout);
|
|
116
|
+
if (type === 330) {
|
|
117
|
+
dict.ownerHandle = value;
|
|
118
|
+
continue;
|
|
17
119
|
}
|
|
18
|
-
if (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (value === "AcDbLayout") state = "AcDbLayout";
|
|
22
|
-
break;
|
|
23
|
-
}
|
|
120
|
+
if (type === 3) {
|
|
121
|
+
pendingKey = String(value);
|
|
122
|
+
continue;
|
|
24
123
|
}
|
|
25
|
-
if (
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
layout.name = value;
|
|
29
|
-
break;
|
|
30
|
-
case 5:
|
|
31
|
-
layout.handle = value;
|
|
32
|
-
break;
|
|
33
|
-
case 10:
|
|
34
|
-
layout.minLimitX = Number.parseFloat(String(value));
|
|
35
|
-
break;
|
|
36
|
-
case 20:
|
|
37
|
-
layout.minLimitY = Number.parseFloat(String(value));
|
|
38
|
-
break;
|
|
39
|
-
case 11:
|
|
40
|
-
layout.maxLimitX = Number.parseFloat(String(value));
|
|
41
|
-
break;
|
|
42
|
-
case 21:
|
|
43
|
-
layout.maxLimitY = Number.parseFloat(String(value));
|
|
44
|
-
break;
|
|
45
|
-
case 12:
|
|
46
|
-
layout.x = Number.parseFloat(String(value));
|
|
47
|
-
break;
|
|
48
|
-
case 22:
|
|
49
|
-
layout.y = Number.parseFloat(String(value));
|
|
50
|
-
break;
|
|
51
|
-
case 32:
|
|
52
|
-
layout.z = Number.parseFloat(String(value));
|
|
53
|
-
break;
|
|
54
|
-
case 14:
|
|
55
|
-
layout.minX = Number.parseFloat(String(value));
|
|
56
|
-
break;
|
|
57
|
-
case 24:
|
|
58
|
-
layout.minY = Number.parseFloat(String(value));
|
|
59
|
-
break;
|
|
60
|
-
case 34:
|
|
61
|
-
layout.minZ = Number.parseFloat(String(value));
|
|
62
|
-
break;
|
|
63
|
-
case 15:
|
|
64
|
-
layout.maxX = Number.parseFloat(String(value));
|
|
65
|
-
break;
|
|
66
|
-
case 25:
|
|
67
|
-
layout.maxY = Number.parseFloat(String(value));
|
|
68
|
-
break;
|
|
69
|
-
case 35:
|
|
70
|
-
layout.maxZ = Number.parseFloat(String(value));
|
|
71
|
-
break;
|
|
72
|
-
case 70:
|
|
73
|
-
layout.flag = value === 1 ? "PSLTSCALE" : "LIMCHECK";
|
|
74
|
-
break;
|
|
75
|
-
case 71:
|
|
76
|
-
layout.tabOrder = value;
|
|
77
|
-
break;
|
|
78
|
-
case 146:
|
|
79
|
-
layout.elevation = Number.parseFloat(String(value));
|
|
80
|
-
break;
|
|
81
|
-
case 13:
|
|
82
|
-
layout.ucsX = Number.parseFloat(String(value));
|
|
83
|
-
break;
|
|
84
|
-
case 23:
|
|
85
|
-
layout.ucsY = Number.parseFloat(String(value));
|
|
86
|
-
break;
|
|
87
|
-
case 33:
|
|
88
|
-
layout.ucsZ = Number.parseFloat(String(value));
|
|
89
|
-
break;
|
|
90
|
-
case 16:
|
|
91
|
-
layout.ucsXaxisX = Number.parseFloat(String(value));
|
|
92
|
-
break;
|
|
93
|
-
case 26:
|
|
94
|
-
layout.ucsXaxisY = Number.parseFloat(String(value));
|
|
95
|
-
break;
|
|
96
|
-
case 36:
|
|
97
|
-
layout.ucsXaxisZ = Number.parseFloat(String(value));
|
|
98
|
-
break;
|
|
99
|
-
case 17:
|
|
100
|
-
layout.ucsYaxisX = Number.parseFloat(String(value));
|
|
101
|
-
break;
|
|
102
|
-
case 27:
|
|
103
|
-
layout.ucsYaxisY = Number.parseFloat(String(value));
|
|
104
|
-
break;
|
|
105
|
-
case 37:
|
|
106
|
-
layout.ucsYaxisZ = Number.parseFloat(String(value));
|
|
107
|
-
break;
|
|
108
|
-
case 76:
|
|
109
|
-
switch (value) {
|
|
110
|
-
case 0:
|
|
111
|
-
layout.ucsType = "NOT ORTHOGRAPHIC";
|
|
112
|
-
break;
|
|
113
|
-
case 1:
|
|
114
|
-
layout.ucsType = "TOP";
|
|
115
|
-
break;
|
|
116
|
-
case 2:
|
|
117
|
-
layout.ucsType = "BOTTOM";
|
|
118
|
-
break;
|
|
119
|
-
case 3:
|
|
120
|
-
layout.ucsType = "FRONT";
|
|
121
|
-
break;
|
|
122
|
-
case 4:
|
|
123
|
-
layout.ucsType = "BACK";
|
|
124
|
-
break;
|
|
125
|
-
case 5:
|
|
126
|
-
layout.ucsType = "LEFT";
|
|
127
|
-
break;
|
|
128
|
-
case 6:
|
|
129
|
-
layout.ucsType = "RIGHT";
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
break;
|
|
133
|
-
case 330:
|
|
134
|
-
layout.tableRecord = value;
|
|
135
|
-
break;
|
|
136
|
-
case 331:
|
|
137
|
-
layout.lastActiveViewport = value;
|
|
138
|
-
break;
|
|
139
|
-
case 333:
|
|
140
|
-
layout.shadePlot = value;
|
|
141
|
-
break;
|
|
142
|
-
}
|
|
124
|
+
if ((type === 350 || type === 360) && pendingKey) {
|
|
125
|
+
dict.entries[pendingKey] = String(value);
|
|
126
|
+
pendingKey = void 0;
|
|
143
127
|
}
|
|
144
128
|
}
|
|
129
|
+
return dict;
|
|
130
|
+
}
|
|
131
|
+
function parseXRecordObject(group) {
|
|
132
|
+
if (group[0]?.[1] !== "XRECORD") return void 0;
|
|
133
|
+
const tuples = group.slice(1);
|
|
134
|
+
const xRecord = {
|
|
135
|
+
type: "XRECORD",
|
|
136
|
+
tuples
|
|
137
|
+
};
|
|
138
|
+
for (const tuple of tuples) {
|
|
139
|
+
const type = tuple[0];
|
|
140
|
+
const value = tuple[1];
|
|
141
|
+
if (type === 5) xRecord.handle = value;
|
|
142
|
+
if (type === 330) xRecord.ownerHandle = value;
|
|
143
|
+
}
|
|
144
|
+
return xRecord;
|
|
145
|
+
}
|
|
146
|
+
function parseImageDefObject(group) {
|
|
147
|
+
if (group[0]?.[1] !== "IMAGEDEF") return void 0;
|
|
148
|
+
const tuples = group.slice(1);
|
|
149
|
+
const imageDef = {
|
|
150
|
+
type: "IMAGEDEF",
|
|
151
|
+
tuples
|
|
152
|
+
};
|
|
153
|
+
for (const tuple of tuples) {
|
|
154
|
+
const type = tuple[0];
|
|
155
|
+
const value = tuple[1];
|
|
156
|
+
if (type === 5) imageDef.handle = value;
|
|
157
|
+
if (type === 330 && imageDef.ownerHandle === void 0) imageDef.ownerHandle = value;
|
|
158
|
+
if (type === 1) imageDef.fileName = String(value);
|
|
159
|
+
if (type === 10) imageDef.pixelSizeX = Number(value);
|
|
160
|
+
if (type === 20) imageDef.pixelSizeY = Number(value);
|
|
161
|
+
}
|
|
162
|
+
return imageDef;
|
|
163
|
+
}
|
|
164
|
+
function parseImageDefReactorObject(group) {
|
|
165
|
+
if (group[0]?.[1] !== "IMAGEDEF_REACTOR") return void 0;
|
|
166
|
+
const tuples = group.slice(1);
|
|
167
|
+
const reactor = {
|
|
168
|
+
type: "IMAGEDEF_REACTOR",
|
|
169
|
+
tuples
|
|
170
|
+
};
|
|
171
|
+
for (const tuple of tuples) {
|
|
172
|
+
const type = tuple[0];
|
|
173
|
+
const value = tuple[1];
|
|
174
|
+
if (type === 5) reactor.handle = value;
|
|
175
|
+
if (type === 330) reactor.imageHandle = value;
|
|
176
|
+
}
|
|
177
|
+
return reactor;
|
|
178
|
+
}
|
|
179
|
+
const UNDERLAY_DEFINITION_OBJECT_TYPES = /* @__PURE__ */ new Set([
|
|
180
|
+
"UNDERLAYDEFINITION",
|
|
181
|
+
"PDFDEFINITION",
|
|
182
|
+
"DWFDEFINITION",
|
|
183
|
+
"DGNDEFINITION"
|
|
184
|
+
]);
|
|
185
|
+
function parseUnderlayDefinitionObject(group) {
|
|
186
|
+
const objectType = group[0]?.[1];
|
|
187
|
+
if (typeof objectType !== "string") return void 0;
|
|
188
|
+
if (!UNDERLAY_DEFINITION_OBJECT_TYPES.has(objectType)) return void 0;
|
|
189
|
+
const tuples = group.slice(1);
|
|
190
|
+
const def = {
|
|
191
|
+
type: objectType,
|
|
192
|
+
tuples
|
|
193
|
+
};
|
|
194
|
+
for (const tuple of tuples) {
|
|
195
|
+
const type = tuple[0];
|
|
196
|
+
const value = tuple[1];
|
|
197
|
+
if (type === 5) def.handle = value;
|
|
198
|
+
if (type === 330 && def.ownerHandle === void 0) def.ownerHandle = value;
|
|
199
|
+
if (type === 1) def.fileName = String(value);
|
|
200
|
+
if (type === 2) def.underlayName = String(value);
|
|
201
|
+
}
|
|
202
|
+
return def;
|
|
203
|
+
}
|
|
204
|
+
const OBJECT_GROUP_HANDLERS = {
|
|
205
|
+
LAYOUT: (objects, group) => {
|
|
206
|
+
const layout = parseLayoutObject(group);
|
|
207
|
+
if (layout) objects.layouts.push(layout);
|
|
208
|
+
},
|
|
209
|
+
DICTIONARY: (objects, group) => {
|
|
210
|
+
const dict = parseDictionaryObject(group);
|
|
211
|
+
const handle = dict?.handle ? String(dict.handle) : void 0;
|
|
212
|
+
if (dict && handle) objects.dictionaries[handle] = dict;
|
|
213
|
+
},
|
|
214
|
+
XRECORD: (objects, group) => {
|
|
215
|
+
const xRecord = parseXRecordObject(group);
|
|
216
|
+
const handle = xRecord?.handle ? String(xRecord.handle) : void 0;
|
|
217
|
+
if (xRecord && handle) objects.xRecords[handle] = xRecord;
|
|
218
|
+
},
|
|
219
|
+
IMAGEDEF: (objects, group) => {
|
|
220
|
+
const imageDef = parseImageDefObject(group);
|
|
221
|
+
const handle = imageDef?.handle ? String(imageDef.handle) : void 0;
|
|
222
|
+
if (imageDef && handle) objects.imageDefs[handle] = imageDef;
|
|
223
|
+
},
|
|
224
|
+
IMAGEDEF_REACTOR: (objects, group) => {
|
|
225
|
+
const reactor = parseImageDefReactorObject(group);
|
|
226
|
+
const handle = reactor?.handle ? String(reactor.handle) : void 0;
|
|
227
|
+
if (reactor && handle) objects.imageDefReactors[handle] = reactor;
|
|
228
|
+
},
|
|
229
|
+
UNDERLAYDEFINITION: (objects, group) => {
|
|
230
|
+
const def = parseUnderlayDefinitionObject(group);
|
|
231
|
+
const handle = def?.handle ? String(def.handle) : void 0;
|
|
232
|
+
if (def && handle) objects.underlayDefinitions[handle] = def;
|
|
233
|
+
},
|
|
234
|
+
PDFDEFINITION: (objects, group) => {
|
|
235
|
+
const def = parseUnderlayDefinitionObject(group);
|
|
236
|
+
const handle = def?.handle ? String(def.handle) : void 0;
|
|
237
|
+
if (def && handle) objects.underlayDefinitions[handle] = def;
|
|
238
|
+
},
|
|
239
|
+
DWFDEFINITION: (objects, group) => {
|
|
240
|
+
const def = parseUnderlayDefinitionObject(group);
|
|
241
|
+
const handle = def?.handle ? String(def.handle) : void 0;
|
|
242
|
+
if (def && handle) objects.underlayDefinitions[handle] = def;
|
|
243
|
+
},
|
|
244
|
+
DGNDEFINITION: (objects, group) => {
|
|
245
|
+
const def = parseUnderlayDefinitionObject(group);
|
|
246
|
+
const handle = def?.handle ? String(def.handle) : void 0;
|
|
247
|
+
if (def && handle) objects.underlayDefinitions[handle] = def;
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
function parseObjects(tuples) {
|
|
251
|
+
const objects = {
|
|
252
|
+
layouts: [],
|
|
253
|
+
dictionaries: {},
|
|
254
|
+
xRecords: {},
|
|
255
|
+
imageDefs: {},
|
|
256
|
+
imageDefReactors: {},
|
|
257
|
+
underlayDefinitions: {}
|
|
258
|
+
};
|
|
259
|
+
const groups = groupObjectsByZero(tuples);
|
|
260
|
+
for (const group of groups) {
|
|
261
|
+
const objectType = group[0]?.[1];
|
|
262
|
+
if (typeof objectType !== "string") continue;
|
|
263
|
+
const handler = OBJECT_GROUP_HANDLERS[objectType];
|
|
264
|
+
if (handler) handler(objects, group);
|
|
265
|
+
}
|
|
145
266
|
return objects;
|
|
146
267
|
}
|
|
147
268
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/handlers/objects.ts"],
|
|
4
|
-
"sourcesContent": ["import type {
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type {\n DictionaryObject,\n DXFTuple,\n ImageDefObject,\n ImageDefReactorObject,\n LayoutInternal,\n ParsedObjects,\n UnderlayDefinitionObject,\n XRecordObject,\n} from '../types'\n\ntype ObjectGroup = DXFTuple[]\n\nfunction groupObjectsByZero(tuples: DXFTuple[]): ObjectGroup[] {\n const groups: ObjectGroup[] = []\n let current: ObjectGroup | undefined\n\n for (const tuple of tuples) {\n const code = tuple[0]\n if (code === 0) {\n if (current && current.length > 0) groups.push(current)\n current = [tuple]\n continue\n }\n if (!current) continue\n current.push(tuple)\n }\n\n if (current && current.length > 0) groups.push(current)\n return groups\n}\n\nconst LAYOUT_FLOAT_FIELDS: Record<number, keyof LayoutInternal> = {\n 10: 'minLimitX',\n 20: 'minLimitY',\n 11: 'maxLimitX',\n 21: 'maxLimitY',\n 12: 'x',\n 22: 'y',\n 32: 'z',\n 14: 'minX',\n 24: 'minY',\n 34: 'minZ',\n 15: 'maxX',\n 25: 'maxY',\n 35: 'maxZ',\n 146: 'elevation',\n 13: 'ucsX',\n 23: 'ucsY',\n 33: 'ucsZ',\n 16: 'ucsXaxisX',\n 26: 'ucsXaxisY',\n 36: 'ucsXaxisZ',\n 17: 'ucsYaxisX',\n 27: 'ucsYaxisY',\n 37: 'ucsYaxisZ',\n}\n\nconst LAYOUT_DIRECT_FIELDS: Record<number, keyof LayoutInternal> = {\n 1: 'name',\n 5: 'handle',\n 71: 'tabOrder',\n 330: 'tableRecord',\n 331: 'lastActiveViewport',\n 333: 'shadePlot',\n}\n\nconst LAYOUT_UCS_TYPE: Record<number, LayoutInternal['ucsType']> = {\n 0: 'NOT ORTHOGRAPHIC',\n 1: 'TOP',\n 2: 'BOTTOM',\n 3: 'FRONT',\n 4: 'BACK',\n 5: 'LEFT',\n 6: 'RIGHT',\n}\n\ntype LayoutParseState = {\n state: 'IDLE' | 'layout' | 'AcDbLayout'\n layout?: LayoutInternal\n}\n\nfunction consumeLayoutStartTuple(current: LayoutParseState, tuple: DXFTuple): LayoutParseState {\n if (tuple[1] === 'LAYOUT') return { state: 'layout', layout: {} }\n return { state: 'IDLE', layout: current.layout }\n}\n\nfunction consumeLayoutSubclassTuple(current: LayoutParseState, tuple: DXFTuple): LayoutParseState {\n if (tuple[0] === 100 && tuple[1] === 'AcDbLayout') return { state: 'AcDbLayout', layout: current.layout }\n return current\n}\n\nfunction applyLayoutFieldTuple(layout: LayoutInternal, tuple: DXFTuple): void {\n const type = tuple[0]\n const value = tuple[1]\n\n const floatKey = LAYOUT_FLOAT_FIELDS[type]\n if (floatKey) {\n ;(layout as any)[floatKey] = Number.parseFloat(String(value))\n return\n }\n\n const directKey = LAYOUT_DIRECT_FIELDS[type]\n if (directKey) {\n ;(layout as any)[directKey] = value\n return\n }\n\n if (type === 70) {\n layout.flag = value === 1 ? 'PSLTSCALE' : 'LIMCHECK'\n return\n }\n\n if (type === 76) {\n const ucsType = LAYOUT_UCS_TYPE[Number(value)]\n if (ucsType) layout.ucsType = ucsType\n }\n}\n\nfunction consumeLayoutTuple(current: LayoutParseState, tuple: DXFTuple): LayoutParseState {\n if (tuple[0] === 0) return consumeLayoutStartTuple(current, tuple)\n\n if (current.state === 'layout') return consumeLayoutSubclassTuple(current, tuple)\n\n if (current.state === 'AcDbLayout' && current.layout) applyLayoutFieldTuple(current.layout, tuple)\n return current\n}\n\nfunction parseLayoutObject(group: ObjectGroup): LayoutInternal | undefined {\n let current: LayoutParseState = { state: 'IDLE' }\n for (const tuple of group) current = consumeLayoutTuple(current, tuple)\n return current.layout\n}\n\nfunction parseDictionaryObject(group: ObjectGroup): DictionaryObject | undefined {\n if (group[0]?.[1] !== 'DICTIONARY') return undefined\n\n const dict: DictionaryObject = {\n type: 'DICTIONARY',\n entries: {},\n }\n\n let pendingKey: string | undefined\n for (const tuple of group.slice(1)) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) {\n dict.handle = value\n continue\n }\n if (type === 330) {\n dict.ownerHandle = value\n continue\n }\n if (type === 3) {\n pendingKey = String(value)\n continue\n }\n if ((type === 350 || type === 360) && pendingKey) {\n dict.entries[pendingKey] = String(value)\n pendingKey = undefined\n }\n }\n\n return dict\n}\n\nfunction parseXRecordObject(group: ObjectGroup): XRecordObject | undefined {\n if (group[0]?.[1] !== 'XRECORD') return undefined\n\n const tuples = group.slice(1)\n\n const xRecord: XRecordObject = {\n type: 'XRECORD',\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) xRecord.handle = value\n if (type === 330) xRecord.ownerHandle = value\n }\n\n return xRecord\n}\n\nfunction parseImageDefObject(group: ObjectGroup): ImageDefObject | undefined {\n if (group[0]?.[1] !== 'IMAGEDEF') return undefined\n\n const tuples = group.slice(1)\n\n const imageDef: ImageDefObject = {\n type: 'IMAGEDEF',\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) imageDef.handle = value\n if (type === 330 && imageDef.ownerHandle === undefined) imageDef.ownerHandle = value\n if (type === 1) imageDef.fileName = String(value)\n if (type === 10) imageDef.pixelSizeX = Number(value)\n if (type === 20) imageDef.pixelSizeY = Number(value)\n }\n\n return imageDef\n}\n\nfunction parseImageDefReactorObject(group: ObjectGroup): ImageDefReactorObject | undefined {\n if (group[0]?.[1] !== 'IMAGEDEF_REACTOR') return undefined\n\n const tuples = group.slice(1)\n\n const reactor: ImageDefReactorObject = {\n type: 'IMAGEDEF_REACTOR',\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) reactor.handle = value\n if (type === 330) reactor.imageHandle = value\n }\n\n return reactor\n}\n\nconst UNDERLAY_DEFINITION_OBJECT_TYPES = new Set([\n 'UNDERLAYDEFINITION',\n 'PDFDEFINITION',\n 'DWFDEFINITION',\n 'DGNDEFINITION',\n])\n\nfunction parseUnderlayDefinitionObject(group: ObjectGroup): UnderlayDefinitionObject | undefined {\n const objectType = group[0]?.[1]\n if (typeof objectType !== 'string') return undefined\n if (!UNDERLAY_DEFINITION_OBJECT_TYPES.has(objectType)) return undefined\n\n const tuples = group.slice(1)\n\n const def: UnderlayDefinitionObject = {\n type: objectType as UnderlayDefinitionObject['type'],\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) def.handle = value\n if (type === 330 && def.ownerHandle === undefined) def.ownerHandle = value\n if (type === 1) def.fileName = String(value)\n if (type === 2) def.underlayName = String(value)\n }\n\n return def\n}\n\ntype ObjectGroupHandler = (objects: ParsedObjects, group: ObjectGroup) => void\n\nconst OBJECT_GROUP_HANDLERS: Record<string, ObjectGroupHandler> = {\n LAYOUT: (objects, group) => {\n const layout = parseLayoutObject(group)\n if (layout) objects.layouts.push(layout)\n },\n DICTIONARY: (objects, group) => {\n const dict = parseDictionaryObject(group)\n const handle = dict?.handle ? String(dict.handle) : undefined\n if (dict && handle) objects.dictionaries![handle] = dict\n },\n XRECORD: (objects, group) => {\n const xRecord = parseXRecordObject(group)\n const handle = xRecord?.handle ? String(xRecord.handle) : undefined\n if (xRecord && handle) objects.xRecords![handle] = xRecord\n },\n IMAGEDEF: (objects, group) => {\n const imageDef = parseImageDefObject(group)\n const handle = imageDef?.handle ? String(imageDef.handle) : undefined\n if (imageDef && handle) objects.imageDefs![handle] = imageDef\n },\n IMAGEDEF_REACTOR: (objects, group) => {\n const reactor = parseImageDefReactorObject(group)\n const handle = reactor?.handle ? String(reactor.handle) : undefined\n if (reactor && handle) objects.imageDefReactors![handle] = reactor\n },\n UNDERLAYDEFINITION: (objects, group) => {\n const def = parseUnderlayDefinitionObject(group)\n const handle = def?.handle ? String(def.handle) : undefined\n if (def && handle) objects.underlayDefinitions![handle] = def\n },\n PDFDEFINITION: (objects, group) => {\n const def = parseUnderlayDefinitionObject(group)\n const handle = def?.handle ? String(def.handle) : undefined\n if (def && handle) objects.underlayDefinitions![handle] = def\n },\n DWFDEFINITION: (objects, group) => {\n const def = parseUnderlayDefinitionObject(group)\n const handle = def?.handle ? String(def.handle) : undefined\n if (def && handle) objects.underlayDefinitions![handle] = def\n },\n DGNDEFINITION: (objects, group) => {\n const def = parseUnderlayDefinitionObject(group)\n const handle = def?.handle ? String(def.handle) : undefined\n if (def && handle) objects.underlayDefinitions![handle] = def\n },\n}\n\nexport default function parseObjects(tuples: DXFTuple[]): ParsedObjects {\n const objects: ParsedObjects = {\n layouts: [],\n dictionaries: {},\n xRecords: {},\n imageDefs: {},\n imageDefReactors: {},\n underlayDefinitions: {},\n }\n\n const groups = groupObjectsByZero(tuples)\n for (const group of groups) {\n const objectType = group[0]?.[1]\n if (typeof objectType !== 'string') continue\n\n const handler = OBJECT_GROUP_HANDLERS[objectType]\n if (handler) handler(objects, group)\n }\n\n return objects\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|