@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
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type { DXFTuple, PartialPoint3D } from '../../types'
|
|
2
|
+
|
|
3
|
+
import common from './common'
|
|
4
|
+
|
|
5
|
+
export const TYPE = 'IMAGE'
|
|
6
|
+
|
|
7
|
+
interface ImageEntity {
|
|
8
|
+
type: typeof TYPE
|
|
9
|
+
|
|
10
|
+
insertionPoint: PartialPoint3D
|
|
11
|
+
uVector: PartialPoint3D
|
|
12
|
+
vVector: PartialPoint3D
|
|
13
|
+
|
|
14
|
+
pixelSizeX: number
|
|
15
|
+
pixelSizeY: number
|
|
16
|
+
|
|
17
|
+
imageDefHandle?: string
|
|
18
|
+
imageDefReactorHandle?: string
|
|
19
|
+
|
|
20
|
+
displayProperties?: number
|
|
21
|
+
clippingState?: number
|
|
22
|
+
brightness?: number
|
|
23
|
+
contrast?: number
|
|
24
|
+
fade?: number
|
|
25
|
+
classVersion?: number
|
|
26
|
+
|
|
27
|
+
[key: string]: unknown
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const process = (tuples: DXFTuple[]): ImageEntity => {
|
|
31
|
+
return tuples.reduce(
|
|
32
|
+
(entity, tuple) => {
|
|
33
|
+
const type = tuple[0]
|
|
34
|
+
const value = tuple[1]
|
|
35
|
+
|
|
36
|
+
switch (type) {
|
|
37
|
+
case 90:
|
|
38
|
+
entity.classVersion = value as number
|
|
39
|
+
break
|
|
40
|
+
|
|
41
|
+
case 10:
|
|
42
|
+
entity.insertionPoint.x = value as number
|
|
43
|
+
break
|
|
44
|
+
case 20:
|
|
45
|
+
entity.insertionPoint.y = value as number
|
|
46
|
+
break
|
|
47
|
+
case 30:
|
|
48
|
+
entity.insertionPoint.z = value as number
|
|
49
|
+
break
|
|
50
|
+
|
|
51
|
+
case 11:
|
|
52
|
+
entity.uVector.x = value as number
|
|
53
|
+
break
|
|
54
|
+
case 21:
|
|
55
|
+
entity.uVector.y = value as number
|
|
56
|
+
break
|
|
57
|
+
case 31:
|
|
58
|
+
entity.uVector.z = value as number
|
|
59
|
+
break
|
|
60
|
+
|
|
61
|
+
case 12:
|
|
62
|
+
entity.vVector.x = value as number
|
|
63
|
+
break
|
|
64
|
+
case 22:
|
|
65
|
+
entity.vVector.y = value as number
|
|
66
|
+
break
|
|
67
|
+
case 32:
|
|
68
|
+
entity.vVector.z = value as number
|
|
69
|
+
break
|
|
70
|
+
|
|
71
|
+
case 13:
|
|
72
|
+
entity.pixelSizeX = value as number
|
|
73
|
+
break
|
|
74
|
+
case 23:
|
|
75
|
+
entity.pixelSizeY = value as number
|
|
76
|
+
break
|
|
77
|
+
|
|
78
|
+
case 340:
|
|
79
|
+
entity.imageDefHandle = String(value)
|
|
80
|
+
break
|
|
81
|
+
case 360:
|
|
82
|
+
entity.imageDefReactorHandle = String(value)
|
|
83
|
+
break
|
|
84
|
+
|
|
85
|
+
case 70:
|
|
86
|
+
entity.displayProperties = value as number
|
|
87
|
+
break
|
|
88
|
+
case 280:
|
|
89
|
+
entity.clippingState = value as number
|
|
90
|
+
break
|
|
91
|
+
case 281:
|
|
92
|
+
entity.brightness = value as number
|
|
93
|
+
break
|
|
94
|
+
case 282:
|
|
95
|
+
entity.contrast = value as number
|
|
96
|
+
break
|
|
97
|
+
case 283:
|
|
98
|
+
entity.fade = value as number
|
|
99
|
+
break
|
|
100
|
+
|
|
101
|
+
default:
|
|
102
|
+
Object.assign(entity, common(type, value))
|
|
103
|
+
break
|
|
104
|
+
}
|
|
105
|
+
return entity
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
type: TYPE,
|
|
109
|
+
insertionPoint: {},
|
|
110
|
+
uVector: {},
|
|
111
|
+
vVector: {},
|
|
112
|
+
pixelSizeX: 0,
|
|
113
|
+
pixelSizeY: 0,
|
|
114
|
+
} as ImageEntity,
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export default { TYPE, process }
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import type { DXFTuple } from '../../types'
|
|
2
|
+
|
|
3
|
+
import common from './common'
|
|
4
|
+
|
|
5
|
+
export const TYPE = 'LEADER'
|
|
6
|
+
|
|
7
|
+
interface LeaderEntity {
|
|
8
|
+
type: typeof TYPE
|
|
9
|
+
vertices: Array<{ x: number; y: number; z: number }>
|
|
10
|
+
|
|
11
|
+
dimensionStyleName?: string
|
|
12
|
+
arrowheadFlag?: number
|
|
13
|
+
pathType?: number
|
|
14
|
+
creationFlag?: number
|
|
15
|
+
hooklineDirectionFlag?: number
|
|
16
|
+
hooklineFlag?: number
|
|
17
|
+
textHeight?: number
|
|
18
|
+
textWidth?: number
|
|
19
|
+
color?: number
|
|
20
|
+
annotationHandle?: string
|
|
21
|
+
|
|
22
|
+
normal?: { x: number; y: number; z: number }
|
|
23
|
+
horizontalDirection?: { x: number; y: number; z: number }
|
|
24
|
+
blockOffset?: { x: number; y: number; z: number }
|
|
25
|
+
annotationOffset?: { x: number; y: number; z: number }
|
|
26
|
+
|
|
27
|
+
[key: string]: unknown
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function ensureVector3(
|
|
31
|
+
entity: LeaderEntity,
|
|
32
|
+
key: 'normal' | 'horizontalDirection' | 'blockOffset' | 'annotationOffset',
|
|
33
|
+
): { x: number; y: number; z: number } {
|
|
34
|
+
if (!entity[key]) entity[key] = { x: 0, y: 0, z: 0 }
|
|
35
|
+
return entity[key] as { x: number; y: number; z: number }
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const process = (tuples: DXFTuple[]): LeaderEntity => {
|
|
39
|
+
return tuples.reduce(
|
|
40
|
+
(entity, tuple) => {
|
|
41
|
+
const type = tuple[0]
|
|
42
|
+
const value = tuple[1]
|
|
43
|
+
|
|
44
|
+
switch (type) {
|
|
45
|
+
case 3:
|
|
46
|
+
entity.dimensionStyleName = String(value)
|
|
47
|
+
break
|
|
48
|
+
|
|
49
|
+
case 71:
|
|
50
|
+
entity.arrowheadFlag = value as number
|
|
51
|
+
break
|
|
52
|
+
case 72:
|
|
53
|
+
entity.pathType = value as number
|
|
54
|
+
break
|
|
55
|
+
case 73:
|
|
56
|
+
entity.creationFlag = value as number
|
|
57
|
+
break
|
|
58
|
+
case 74:
|
|
59
|
+
entity.hooklineDirectionFlag = value as number
|
|
60
|
+
break
|
|
61
|
+
case 75:
|
|
62
|
+
entity.hooklineFlag = value as number
|
|
63
|
+
break
|
|
64
|
+
|
|
65
|
+
case 40:
|
|
66
|
+
entity.textHeight = value as number
|
|
67
|
+
break
|
|
68
|
+
case 41:
|
|
69
|
+
entity.textWidth = value as number
|
|
70
|
+
break
|
|
71
|
+
|
|
72
|
+
case 76:
|
|
73
|
+
// Number of vertices in leader. Keep as metadata only.
|
|
74
|
+
entity.vertexCount = value as number
|
|
75
|
+
break
|
|
76
|
+
|
|
77
|
+
case 10:
|
|
78
|
+
entity.vertices.push({ x: value as number, y: 0, z: 0 })
|
|
79
|
+
break
|
|
80
|
+
case 20: {
|
|
81
|
+
const current = entity.vertices[entity.vertices.length - 1]
|
|
82
|
+
if (current) current.y = value as number
|
|
83
|
+
break
|
|
84
|
+
}
|
|
85
|
+
case 30: {
|
|
86
|
+
const current = entity.vertices[entity.vertices.length - 1]
|
|
87
|
+
if (current) current.z = value as number
|
|
88
|
+
break
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
case 77:
|
|
92
|
+
entity.color = value as number
|
|
93
|
+
break
|
|
94
|
+
|
|
95
|
+
case 340:
|
|
96
|
+
entity.annotationHandle = String(value)
|
|
97
|
+
break
|
|
98
|
+
|
|
99
|
+
case 210:
|
|
100
|
+
ensureVector3(entity, 'normal').x = value as number
|
|
101
|
+
break
|
|
102
|
+
case 220:
|
|
103
|
+
ensureVector3(entity, 'normal').y = value as number
|
|
104
|
+
break
|
|
105
|
+
case 230:
|
|
106
|
+
ensureVector3(entity, 'normal').z = value as number
|
|
107
|
+
break
|
|
108
|
+
|
|
109
|
+
case 211:
|
|
110
|
+
ensureVector3(entity, 'horizontalDirection').x = value as number
|
|
111
|
+
break
|
|
112
|
+
case 221:
|
|
113
|
+
ensureVector3(entity, 'horizontalDirection').y = value as number
|
|
114
|
+
break
|
|
115
|
+
case 231:
|
|
116
|
+
ensureVector3(entity, 'horizontalDirection').z = value as number
|
|
117
|
+
break
|
|
118
|
+
|
|
119
|
+
case 212:
|
|
120
|
+
ensureVector3(entity, 'blockOffset').x = value as number
|
|
121
|
+
break
|
|
122
|
+
case 222:
|
|
123
|
+
ensureVector3(entity, 'blockOffset').y = value as number
|
|
124
|
+
break
|
|
125
|
+
case 232:
|
|
126
|
+
ensureVector3(entity, 'blockOffset').z = value as number
|
|
127
|
+
break
|
|
128
|
+
|
|
129
|
+
case 213:
|
|
130
|
+
ensureVector3(entity, 'annotationOffset').x = value as number
|
|
131
|
+
break
|
|
132
|
+
case 223:
|
|
133
|
+
ensureVector3(entity, 'annotationOffset').y = value as number
|
|
134
|
+
break
|
|
135
|
+
case 233:
|
|
136
|
+
ensureVector3(entity, 'annotationOffset').z = value as number
|
|
137
|
+
break
|
|
138
|
+
|
|
139
|
+
default:
|
|
140
|
+
Object.assign(entity, common(type, value))
|
|
141
|
+
break
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return entity
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: TYPE,
|
|
148
|
+
vertices: [],
|
|
149
|
+
} as LeaderEntity,
|
|
150
|
+
)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export default { TYPE, process }
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { DXFTuple } from '../../types'
|
|
2
|
+
|
|
3
|
+
import common from './common'
|
|
4
|
+
|
|
5
|
+
export const TYPE = 'MLEADER'
|
|
6
|
+
|
|
7
|
+
interface MLeaderEntity {
|
|
8
|
+
type: typeof TYPE
|
|
9
|
+
|
|
10
|
+
styleName?: string
|
|
11
|
+
text?: string
|
|
12
|
+
|
|
13
|
+
[key: string]: unknown
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const process = (tuples: DXFTuple[]): MLeaderEntity => {
|
|
17
|
+
return tuples.reduce(
|
|
18
|
+
(entity, tuple) => {
|
|
19
|
+
const code = tuple[0]
|
|
20
|
+
const value = tuple[1]
|
|
21
|
+
|
|
22
|
+
switch (code) {
|
|
23
|
+
// Style name
|
|
24
|
+
case 2:
|
|
25
|
+
entity.styleName = String(value)
|
|
26
|
+
break
|
|
27
|
+
|
|
28
|
+
// Text string (simplified). MLEADER text can also be stored in more complex structures.
|
|
29
|
+
case 1:
|
|
30
|
+
entity.text = String(value)
|
|
31
|
+
break
|
|
32
|
+
|
|
33
|
+
default:
|
|
34
|
+
Object.assign(entity, common(code, value))
|
|
35
|
+
break
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return entity
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
type: TYPE,
|
|
42
|
+
} as MLeaderEntity,
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export default { TYPE, process }
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { DXFTuple, PartialPoint3D } from '../../types'
|
|
2
|
+
|
|
3
|
+
import common from './common'
|
|
4
|
+
|
|
5
|
+
export const TYPE = 'MLINE'
|
|
6
|
+
|
|
7
|
+
interface MLineEntity {
|
|
8
|
+
type: typeof TYPE
|
|
9
|
+
|
|
10
|
+
startPoint?: PartialPoint3D
|
|
11
|
+
endPoint?: PartialPoint3D
|
|
12
|
+
|
|
13
|
+
vertexCount?: number
|
|
14
|
+
styleName?: string
|
|
15
|
+
|
|
16
|
+
[key: string]: unknown
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function ensurePoint3(entity: MLineEntity, key: 'startPoint' | 'endPoint'): PartialPoint3D {
|
|
20
|
+
entity[key] ??= {}
|
|
21
|
+
return entity[key]
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const process = (tuples: DXFTuple[]): MLineEntity => {
|
|
25
|
+
return tuples.reduce(
|
|
26
|
+
(entity, tuple) => {
|
|
27
|
+
const code = tuple[0]
|
|
28
|
+
const value = tuple[1]
|
|
29
|
+
|
|
30
|
+
switch (code) {
|
|
31
|
+
// Start point
|
|
32
|
+
case 10:
|
|
33
|
+
ensurePoint3(entity, 'startPoint').x = value as number
|
|
34
|
+
break
|
|
35
|
+
case 20:
|
|
36
|
+
ensurePoint3(entity, 'startPoint').y = value as number
|
|
37
|
+
break
|
|
38
|
+
case 30:
|
|
39
|
+
ensurePoint3(entity, 'startPoint').z = value as number
|
|
40
|
+
break
|
|
41
|
+
|
|
42
|
+
// End point
|
|
43
|
+
case 11:
|
|
44
|
+
ensurePoint3(entity, 'endPoint').x = value as number
|
|
45
|
+
break
|
|
46
|
+
case 21:
|
|
47
|
+
ensurePoint3(entity, 'endPoint').y = value as number
|
|
48
|
+
break
|
|
49
|
+
case 31:
|
|
50
|
+
ensurePoint3(entity, 'endPoint').z = value as number
|
|
51
|
+
break
|
|
52
|
+
|
|
53
|
+
case 71:
|
|
54
|
+
entity.vertexCount = value as number
|
|
55
|
+
break
|
|
56
|
+
|
|
57
|
+
case 2:
|
|
58
|
+
entity.styleName = String(value)
|
|
59
|
+
break
|
|
60
|
+
|
|
61
|
+
default:
|
|
62
|
+
Object.assign(entity, common(code, value))
|
|
63
|
+
break
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return entity
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
type: TYPE,
|
|
70
|
+
} as MLineEntity,
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export default { TYPE, process }
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { DXFTuple, OleFrameEntity } from '../../types'
|
|
2
|
+
|
|
3
|
+
import common from './common'
|
|
4
|
+
|
|
5
|
+
export const TYPE = 'OLEFRAME'
|
|
6
|
+
|
|
7
|
+
export const process = (tuples: DXFTuple[]): OleFrameEntity => {
|
|
8
|
+
return tuples.reduce(
|
|
9
|
+
(entity, tuple) => {
|
|
10
|
+
const type = tuple[0]
|
|
11
|
+
const value = tuple[1]
|
|
12
|
+
switch (type) {
|
|
13
|
+
case 70:
|
|
14
|
+
entity.version = value
|
|
15
|
+
break
|
|
16
|
+
case 3:
|
|
17
|
+
entity.name = value
|
|
18
|
+
break
|
|
19
|
+
case 10:
|
|
20
|
+
entity.upperLeftX = value
|
|
21
|
+
break
|
|
22
|
+
case 20:
|
|
23
|
+
entity.upperLeftY = value
|
|
24
|
+
break
|
|
25
|
+
case 30:
|
|
26
|
+
entity.upperLeftZ = value
|
|
27
|
+
break
|
|
28
|
+
case 11:
|
|
29
|
+
entity.lowerRightX = value
|
|
30
|
+
break
|
|
31
|
+
case 21:
|
|
32
|
+
entity.lowerRightY = value
|
|
33
|
+
break
|
|
34
|
+
case 31:
|
|
35
|
+
entity.lowerRightZ = value
|
|
36
|
+
break
|
|
37
|
+
case 71:
|
|
38
|
+
entity.objectType = value
|
|
39
|
+
break
|
|
40
|
+
case 72:
|
|
41
|
+
entity.tile = value
|
|
42
|
+
break
|
|
43
|
+
case 90:
|
|
44
|
+
entity.length = value
|
|
45
|
+
break
|
|
46
|
+
case 310:
|
|
47
|
+
entity.data += String(value)
|
|
48
|
+
break
|
|
49
|
+
default:
|
|
50
|
+
Object.assign(entity, common(type, value))
|
|
51
|
+
break
|
|
52
|
+
}
|
|
53
|
+
return entity
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
type: TYPE,
|
|
57
|
+
data: '',
|
|
58
|
+
} as OleFrameEntity,
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export default { TYPE, process }
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { DXFTuple } from '../../types'
|
|
2
|
+
|
|
3
|
+
import common from './common'
|
|
4
|
+
|
|
5
|
+
export const TYPE = 'PDFUNDERLAY'
|
|
6
|
+
|
|
7
|
+
interface UnderlayEntity {
|
|
8
|
+
type: typeof TYPE
|
|
9
|
+
|
|
10
|
+
insertionPoint: { x: number; y: number; z: number }
|
|
11
|
+
scale: { x: number; y: number; z: number }
|
|
12
|
+
normal: { x: number; y: number; z: number }
|
|
13
|
+
|
|
14
|
+
underlayDefinitionHandle?: string
|
|
15
|
+
rotation?: number
|
|
16
|
+
flags?: number
|
|
17
|
+
contrast?: number
|
|
18
|
+
fade?: number
|
|
19
|
+
|
|
20
|
+
[key: string]: unknown
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const process = (tuples: DXFTuple[]): UnderlayEntity => {
|
|
24
|
+
return tuples.reduce(
|
|
25
|
+
(entity, tuple) => {
|
|
26
|
+
const type = tuple[0]
|
|
27
|
+
const value = tuple[1]
|
|
28
|
+
|
|
29
|
+
switch (type) {
|
|
30
|
+
case 340:
|
|
31
|
+
entity.underlayDefinitionHandle = String(value)
|
|
32
|
+
break
|
|
33
|
+
|
|
34
|
+
case 10:
|
|
35
|
+
entity.insertionPoint.x = value as number
|
|
36
|
+
break
|
|
37
|
+
case 20:
|
|
38
|
+
entity.insertionPoint.y = value as number
|
|
39
|
+
break
|
|
40
|
+
case 30:
|
|
41
|
+
entity.insertionPoint.z = value as number
|
|
42
|
+
break
|
|
43
|
+
|
|
44
|
+
case 41:
|
|
45
|
+
entity.scale.x = value as number
|
|
46
|
+
break
|
|
47
|
+
case 42:
|
|
48
|
+
entity.scale.y = value as number
|
|
49
|
+
break
|
|
50
|
+
case 43:
|
|
51
|
+
entity.scale.z = value as number
|
|
52
|
+
break
|
|
53
|
+
|
|
54
|
+
case 50:
|
|
55
|
+
entity.rotation = value as number
|
|
56
|
+
break
|
|
57
|
+
|
|
58
|
+
case 210:
|
|
59
|
+
entity.normal.x = value as number
|
|
60
|
+
break
|
|
61
|
+
case 220:
|
|
62
|
+
entity.normal.y = value as number
|
|
63
|
+
break
|
|
64
|
+
case 230:
|
|
65
|
+
entity.normal.z = value as number
|
|
66
|
+
break
|
|
67
|
+
|
|
68
|
+
case 280:
|
|
69
|
+
entity.flags = value as number
|
|
70
|
+
break
|
|
71
|
+
case 281:
|
|
72
|
+
entity.contrast = value as number
|
|
73
|
+
break
|
|
74
|
+
case 282:
|
|
75
|
+
entity.fade = value as number
|
|
76
|
+
break
|
|
77
|
+
|
|
78
|
+
default:
|
|
79
|
+
Object.assign(entity, common(type, value))
|
|
80
|
+
break
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return entity
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: TYPE,
|
|
87
|
+
insertionPoint: { x: 0, y: 0, z: 0 },
|
|
88
|
+
scale: { x: 1, y: 1, z: 1 },
|
|
89
|
+
normal: { x: 0, y: 0, z: 1 },
|
|
90
|
+
} as UnderlayEntity,
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export default { TYPE, process }
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { DXFTuple, PartialPoint3D } from '../../types'
|
|
2
|
+
|
|
3
|
+
import common from './common'
|
|
4
|
+
|
|
5
|
+
export const TYPE = 'RAY'
|
|
6
|
+
|
|
7
|
+
interface RayEntity {
|
|
8
|
+
type: typeof TYPE
|
|
9
|
+
start: PartialPoint3D
|
|
10
|
+
direction: PartialPoint3D
|
|
11
|
+
[key: string]: unknown
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const process = (tuples: DXFTuple[]): RayEntity => {
|
|
15
|
+
return tuples.reduce(
|
|
16
|
+
(entity, tuple) => {
|
|
17
|
+
const type = tuple[0]
|
|
18
|
+
const value = tuple[1]
|
|
19
|
+
switch (type) {
|
|
20
|
+
case 10:
|
|
21
|
+
entity.start.x = value as number
|
|
22
|
+
break
|
|
23
|
+
case 20:
|
|
24
|
+
entity.start.y = value as number
|
|
25
|
+
break
|
|
26
|
+
case 30:
|
|
27
|
+
entity.start.z = value as number
|
|
28
|
+
break
|
|
29
|
+
case 11:
|
|
30
|
+
entity.direction.x = value as number
|
|
31
|
+
break
|
|
32
|
+
case 21:
|
|
33
|
+
entity.direction.y = value as number
|
|
34
|
+
break
|
|
35
|
+
case 31:
|
|
36
|
+
entity.direction.z = value as number
|
|
37
|
+
break
|
|
38
|
+
default:
|
|
39
|
+
Object.assign(entity, common(type, value))
|
|
40
|
+
break
|
|
41
|
+
}
|
|
42
|
+
return entity
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: TYPE,
|
|
46
|
+
start: {},
|
|
47
|
+
direction: {},
|
|
48
|
+
} as RayEntity,
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export default { TYPE, process }
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { DXFTuple } from '../../types'
|
|
2
|
+
|
|
3
|
+
import common from './common'
|
|
4
|
+
|
|
5
|
+
export const TYPE = 'REGION'
|
|
6
|
+
|
|
7
|
+
interface RegionEntity {
|
|
8
|
+
type: typeof TYPE
|
|
9
|
+
|
|
10
|
+
acisData?: string[]
|
|
11
|
+
|
|
12
|
+
[key: string]: unknown
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const process = (tuples: DXFTuple[]): RegionEntity => {
|
|
16
|
+
return tuples.reduce(
|
|
17
|
+
(entity, tuple) => {
|
|
18
|
+
const code = tuple[0]
|
|
19
|
+
const value = tuple[1]
|
|
20
|
+
|
|
21
|
+
switch (code) {
|
|
22
|
+
// ACIS data text (first line: 1, additional lines: 3)
|
|
23
|
+
case 1:
|
|
24
|
+
case 3:
|
|
25
|
+
entity.acisData ??= []
|
|
26
|
+
entity.acisData.push(String(value))
|
|
27
|
+
break
|
|
28
|
+
|
|
29
|
+
default:
|
|
30
|
+
Object.assign(entity, common(code, value))
|
|
31
|
+
break
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return entity
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
type: TYPE,
|
|
38
|
+
} as RegionEntity,
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default { TYPE, process }
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { DXFTuple, PartialPoint3D } from '../../types'
|
|
2
|
+
|
|
3
|
+
import common from './common'
|
|
4
|
+
|
|
5
|
+
export const TYPE = 'SHAPE'
|
|
6
|
+
|
|
7
|
+
interface ShapeEntity {
|
|
8
|
+
type: typeof TYPE
|
|
9
|
+
insertionPoint: PartialPoint3D
|
|
10
|
+
name?: string
|
|
11
|
+
size?: number
|
|
12
|
+
rotation?: number
|
|
13
|
+
relativeXScale?: number
|
|
14
|
+
oblique?: number
|
|
15
|
+
thickness?: number
|
|
16
|
+
extrusionX?: number
|
|
17
|
+
extrusionY?: number
|
|
18
|
+
[key: string]: unknown
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const process = (tuples: DXFTuple[]): ShapeEntity => {
|
|
22
|
+
return tuples.reduce(
|
|
23
|
+
(entity, tuple) => {
|
|
24
|
+
const type = tuple[0]
|
|
25
|
+
const value = tuple[1]
|
|
26
|
+
switch (type) {
|
|
27
|
+
case 10:
|
|
28
|
+
entity.insertionPoint.x = value as number
|
|
29
|
+
break
|
|
30
|
+
case 20:
|
|
31
|
+
entity.insertionPoint.y = value as number
|
|
32
|
+
break
|
|
33
|
+
case 30:
|
|
34
|
+
entity.insertionPoint.z = value as number
|
|
35
|
+
break
|
|
36
|
+
case 2:
|
|
37
|
+
entity.name = String(value)
|
|
38
|
+
break
|
|
39
|
+
case 39:
|
|
40
|
+
entity.thickness = value as number
|
|
41
|
+
break
|
|
42
|
+
case 40:
|
|
43
|
+
entity.size = value as number
|
|
44
|
+
break
|
|
45
|
+
case 41:
|
|
46
|
+
entity.relativeXScale = value as number
|
|
47
|
+
break
|
|
48
|
+
case 50:
|
|
49
|
+
entity.rotation = value as number
|
|
50
|
+
break
|
|
51
|
+
case 51:
|
|
52
|
+
entity.oblique = value as number
|
|
53
|
+
break
|
|
54
|
+
case 210:
|
|
55
|
+
entity.extrusionX = value as number
|
|
56
|
+
break
|
|
57
|
+
case 220:
|
|
58
|
+
entity.extrusionY = value as number
|
|
59
|
+
break
|
|
60
|
+
default:
|
|
61
|
+
Object.assign(entity, common(type, value))
|
|
62
|
+
break
|
|
63
|
+
}
|
|
64
|
+
return entity
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
type: TYPE,
|
|
68
|
+
insertionPoint: {},
|
|
69
|
+
} as ShapeEntity,
|
|
70
|
+
)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export default { TYPE, process }
|