@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.
Files changed (252) hide show
  1. package/.eslintrc.json +1 -16
  2. package/.github/instructions/code-patterns.instructions.md +1 -1
  3. package/.github/instructions/exdxf.instruction.md +161 -0
  4. package/.github/instructions/tdd.instructions.md +271 -0
  5. package/.yarn/install-state.gz +0 -0
  6. package/ARCHITECTURE.md +163 -0
  7. package/CHANGELOG.md +39 -0
  8. package/CONTRIBUTING.md +16 -14
  9. package/README.md +113 -16
  10. package/{PLAN.md → ROADMAP.md} +244 -102
  11. package/dist/dxf.js +2212 -454
  12. package/docs/EZDXF_REFERENCE_SITEMAP.md +55 -0
  13. package/docs/FIXTURE_VALIDATION_EZDXF.md +62 -0
  14. package/lib/Helper.cjs +6 -2
  15. package/lib/Helper.cjs.map +3 -3
  16. package/lib/Helper.js +6 -2
  17. package/lib/Helper.js.map +2 -2
  18. package/lib/denormalise.cjs +131 -91
  19. package/lib/denormalise.cjs.map +2 -2
  20. package/lib/denormalise.js +131 -91
  21. package/lib/denormalise.js.map +2 -2
  22. package/lib/dimensionToSVG.cjs +318 -53
  23. package/lib/dimensionToSVG.cjs.map +3 -3
  24. package/lib/dimensionToSVG.js +316 -52
  25. package/lib/dimensionToSVG.js.map +2 -2
  26. package/lib/entityToPolyline.cjs +95 -0
  27. package/lib/entityToPolyline.cjs.map +3 -3
  28. package/lib/entityToPolyline.js +95 -0
  29. package/lib/entityToPolyline.js.map +2 -2
  30. package/lib/handlers/entities.cjs +111 -27
  31. package/lib/handlers/entities.cjs.map +3 -3
  32. package/lib/handlers/entities.js +111 -27
  33. package/lib/handlers/entities.js.map +3 -3
  34. package/lib/handlers/entity/dgnUnderlay.cjs +106 -0
  35. package/lib/handlers/entity/dgnUnderlay.cjs.map +7 -0
  36. package/lib/handlers/entity/dgnUnderlay.js +71 -0
  37. package/lib/handlers/entity/dgnUnderlay.js.map +7 -0
  38. package/lib/handlers/entity/dimension.cjs +24 -0
  39. package/lib/handlers/entity/dimension.cjs.map +2 -2
  40. package/lib/handlers/entity/dimension.js +24 -0
  41. package/lib/handlers/entity/dimension.js.map +2 -2
  42. package/lib/handlers/entity/dwfUnderlay.cjs +106 -0
  43. package/lib/handlers/entity/dwfUnderlay.cjs.map +7 -0
  44. package/lib/handlers/entity/dwfUnderlay.js +71 -0
  45. package/lib/handlers/entity/dwfUnderlay.js.map +7 -0
  46. package/lib/handlers/entity/image.cjs +123 -0
  47. package/lib/handlers/entity/image.cjs.map +7 -0
  48. package/lib/handlers/entity/image.js +88 -0
  49. package/lib/handlers/entity/image.js.map +7 -0
  50. package/lib/handlers/entity/leader.cjs +148 -0
  51. package/lib/handlers/entity/leader.cjs.map +7 -0
  52. package/lib/handlers/entity/leader.js +113 -0
  53. package/lib/handlers/entity/leader.js.map +7 -0
  54. package/lib/handlers/entity/mleader.cjs +69 -0
  55. package/lib/handlers/entity/mleader.cjs.map +7 -0
  56. package/lib/handlers/entity/mleader.js +34 -0
  57. package/lib/handlers/entity/mleader.js.map +7 -0
  58. package/lib/handlers/entity/mline.cjs +91 -0
  59. package/lib/handlers/entity/mline.cjs.map +7 -0
  60. package/lib/handlers/entity/mline.js +56 -0
  61. package/lib/handlers/entity/mline.js.map +7 -0
  62. package/lib/handlers/entity/oleframe.cjs +98 -0
  63. package/lib/handlers/entity/oleframe.cjs.map +7 -0
  64. package/lib/handlers/entity/oleframe.js +63 -0
  65. package/lib/handlers/entity/oleframe.js.map +7 -0
  66. package/lib/handlers/entity/pdfUnderlay.cjs +106 -0
  67. package/lib/handlers/entity/pdfUnderlay.cjs.map +7 -0
  68. package/lib/handlers/entity/pdfUnderlay.js +71 -0
  69. package/lib/handlers/entity/pdfUnderlay.js.map +7 -0
  70. package/lib/handlers/entity/ray.cjs +81 -0
  71. package/lib/handlers/entity/ray.cjs.map +7 -0
  72. package/lib/handlers/entity/ray.js +46 -0
  73. package/lib/handlers/entity/ray.js.map +7 -0
  74. package/lib/handlers/entity/region.cjs +67 -0
  75. package/lib/handlers/entity/region.cjs.map +7 -0
  76. package/lib/handlers/entity/region.js +32 -0
  77. package/lib/handlers/entity/region.js.map +7 -0
  78. package/lib/handlers/entity/shape.cjs +95 -0
  79. package/lib/handlers/entity/shape.cjs.map +7 -0
  80. package/lib/handlers/entity/shape.js +60 -0
  81. package/lib/handlers/entity/shape.js.map +7 -0
  82. package/lib/handlers/entity/table.cjs +71 -0
  83. package/lib/handlers/entity/table.cjs.map +7 -0
  84. package/lib/handlers/entity/table.js +36 -0
  85. package/lib/handlers/entity/table.js.map +7 -0
  86. package/lib/handlers/entity/tolerance.cjs +90 -0
  87. package/lib/handlers/entity/tolerance.cjs.map +7 -0
  88. package/lib/handlers/entity/tolerance.js +55 -0
  89. package/lib/handlers/entity/tolerance.js.map +7 -0
  90. package/lib/handlers/entity/trace.cjs +101 -0
  91. package/lib/handlers/entity/trace.cjs.map +7 -0
  92. package/lib/handlers/entity/trace.js +66 -0
  93. package/lib/handlers/entity/trace.js.map +7 -0
  94. package/lib/handlers/entity/wipeout.cjs +122 -0
  95. package/lib/handlers/entity/wipeout.cjs.map +7 -0
  96. package/lib/handlers/entity/wipeout.js +87 -0
  97. package/lib/handlers/entity/wipeout.js.map +7 -0
  98. package/lib/handlers/entity/xline.cjs +81 -0
  99. package/lib/handlers/entity/xline.cjs.map +7 -0
  100. package/lib/handlers/entity/xline.js +46 -0
  101. package/lib/handlers/entity/xline.js.map +7 -0
  102. package/lib/handlers/objects.cjs +299 -136
  103. package/lib/handlers/objects.cjs.map +2 -2
  104. package/lib/handlers/objects.js +299 -136
  105. package/lib/handlers/objects.js.map +2 -2
  106. package/lib/handlers/tables.cjs +96 -17
  107. package/lib/handlers/tables.cjs.map +2 -2
  108. package/lib/handlers/tables.js +96 -17
  109. package/lib/handlers/tables.js.map +2 -2
  110. package/lib/index.cjs +5 -2
  111. package/lib/index.cjs.map +3 -3
  112. package/lib/index.js +18 -16
  113. package/lib/index.js.map +3 -3
  114. package/lib/toJson.cjs +29 -0
  115. package/lib/toJson.cjs.map +7 -0
  116. package/lib/toJson.js +9 -0
  117. package/lib/toJson.js.map +7 -0
  118. package/lib/toSVG.cjs +105 -11
  119. package/lib/toSVG.cjs.map +3 -3
  120. package/lib/toSVG.js +106 -12
  121. package/lib/toSVG.js.map +2 -2
  122. package/lib/types/dimension-entity.cjs.map +1 -1
  123. package/lib/types/entity.cjs.map +1 -1
  124. package/lib/types/helper.cjs.map +1 -1
  125. package/lib/types/image-entity.cjs +17 -0
  126. package/lib/types/image-entity.cjs.map +7 -0
  127. package/lib/types/image-entity.js +1 -0
  128. package/lib/types/image-entity.js.map +7 -0
  129. package/lib/types/index.cjs +28 -0
  130. package/lib/types/index.cjs.map +2 -2
  131. package/lib/types/index.js +14 -0
  132. package/lib/types/index.js.map +2 -2
  133. package/lib/types/leader-entity.cjs +17 -0
  134. package/lib/types/leader-entity.cjs.map +7 -0
  135. package/lib/types/leader-entity.js +1 -0
  136. package/lib/types/leader-entity.js.map +7 -0
  137. package/lib/types/mleader-entity.cjs +17 -0
  138. package/lib/types/mleader-entity.cjs.map +7 -0
  139. package/lib/types/mleader-entity.js +1 -0
  140. package/lib/types/mleader-entity.js.map +7 -0
  141. package/lib/types/mline-entity.cjs +17 -0
  142. package/lib/types/mline-entity.cjs.map +7 -0
  143. package/lib/types/mline-entity.js +1 -0
  144. package/lib/types/mline-entity.js.map +7 -0
  145. package/lib/types/oleframe-entity.cjs +17 -0
  146. package/lib/types/oleframe-entity.cjs.map +7 -0
  147. package/lib/types/oleframe-entity.js +1 -0
  148. package/lib/types/oleframe-entity.js.map +7 -0
  149. package/lib/types/options.cjs.map +1 -1
  150. package/lib/types/ray-entity.cjs +17 -0
  151. package/lib/types/ray-entity.cjs.map +7 -0
  152. package/lib/types/ray-entity.js +1 -0
  153. package/lib/types/ray-entity.js.map +7 -0
  154. package/lib/types/region-entity.cjs +17 -0
  155. package/lib/types/region-entity.cjs.map +7 -0
  156. package/lib/types/region-entity.js +1 -0
  157. package/lib/types/region-entity.js.map +7 -0
  158. package/lib/types/shape-entity.cjs +17 -0
  159. package/lib/types/shape-entity.cjs.map +7 -0
  160. package/lib/types/shape-entity.js +1 -0
  161. package/lib/types/shape-entity.js.map +7 -0
  162. package/lib/types/table-entity.cjs +17 -0
  163. package/lib/types/table-entity.cjs.map +7 -0
  164. package/lib/types/table-entity.js +1 -0
  165. package/lib/types/table-entity.js.map +7 -0
  166. package/lib/types/tables.cjs.map +1 -1
  167. package/lib/types/tolerance-entity.cjs +17 -0
  168. package/lib/types/tolerance-entity.cjs.map +7 -0
  169. package/lib/types/tolerance-entity.js +1 -0
  170. package/lib/types/tolerance-entity.js.map +7 -0
  171. package/lib/types/trace-entity.cjs +17 -0
  172. package/lib/types/trace-entity.cjs.map +7 -0
  173. package/lib/types/trace-entity.js +1 -0
  174. package/lib/types/trace-entity.js.map +7 -0
  175. package/lib/types/underlay-entity.cjs +17 -0
  176. package/lib/types/underlay-entity.cjs.map +7 -0
  177. package/lib/types/underlay-entity.js +1 -0
  178. package/lib/types/underlay-entity.js.map +7 -0
  179. package/lib/types/wipeout-entity.cjs +17 -0
  180. package/lib/types/wipeout-entity.cjs.map +7 -0
  181. package/lib/types/wipeout-entity.js +1 -0
  182. package/lib/types/wipeout-entity.js.map +7 -0
  183. package/lib/types/xline-entity.cjs +17 -0
  184. package/lib/types/xline-entity.cjs.map +7 -0
  185. package/lib/types/xline-entity.js +1 -0
  186. package/lib/types/xline-entity.js.map +7 -0
  187. package/lib/util/escapeXmlText.cjs +27 -0
  188. package/lib/util/escapeXmlText.cjs.map +7 -0
  189. package/lib/util/escapeXmlText.js +7 -0
  190. package/lib/util/escapeXmlText.js.map +7 -0
  191. package/package.json +9 -18
  192. package/playwright.config.cjs +20 -0
  193. package/src/Helper.ts +8 -3
  194. package/src/denormalise.ts +182 -116
  195. package/src/dimensionToSVG.ts +466 -54
  196. package/src/entityToPolyline.ts +124 -2
  197. package/src/handlers/entities.ts +129 -34
  198. package/src/handlers/entity/dgnUnderlay.ts +94 -0
  199. package/src/handlers/entity/dimension.ts +27 -1
  200. package/src/handlers/entity/dwfUnderlay.ts +94 -0
  201. package/src/handlers/entity/image.ts +118 -0
  202. package/src/handlers/entity/leader.ts +153 -0
  203. package/src/handlers/entity/mleader.ts +46 -0
  204. package/src/handlers/entity/mline.ts +74 -0
  205. package/src/handlers/entity/oleframe.ts +62 -0
  206. package/src/handlers/entity/pdfUnderlay.ts +94 -0
  207. package/src/handlers/entity/ray.ts +52 -0
  208. package/src/handlers/entity/region.ts +42 -0
  209. package/src/handlers/entity/shape.ts +73 -0
  210. package/src/handlers/entity/table.ts +49 -0
  211. package/src/handlers/entity/tolerance.ts +75 -0
  212. package/src/handlers/entity/trace.ts +72 -0
  213. package/src/handlers/entity/wipeout.ts +114 -0
  214. package/src/handlers/entity/xline.ts +52 -0
  215. package/src/handlers/objects.ts +379 -139
  216. package/src/handlers/tables.ts +134 -21
  217. package/src/index.ts +9 -18
  218. package/src/toJson.ts +8 -0
  219. package/src/toSVG.ts +143 -10
  220. package/src/types/dimension-entity.ts +11 -0
  221. package/src/types/entity.ts +30 -0
  222. package/src/types/helper.ts +2 -1
  223. package/src/types/image-entity.ts +35 -0
  224. package/src/types/index.ts +14 -0
  225. package/src/types/leader-entity.ts +40 -0
  226. package/src/types/mleader-entity.ts +8 -0
  227. package/src/types/mline-entity.ts +12 -0
  228. package/src/types/oleframe-entity.ts +40 -0
  229. package/src/types/options.ts +48 -0
  230. package/src/types/ray-entity.ts +12 -0
  231. package/src/types/region-entity.ts +11 -0
  232. package/src/types/shape-entity.ts +19 -0
  233. package/src/types/table-entity.ts +14 -0
  234. package/src/types/tables.ts +160 -0
  235. package/src/types/tolerance-entity.ts +20 -0
  236. package/src/types/trace-entity.ts +14 -0
  237. package/src/types/underlay-entity.ts +35 -0
  238. package/src/types/wipeout-entity.ts +20 -0
  239. package/src/types/xline-entity.ts +12 -0
  240. package/src/util/escapeXmlText.ts +10 -0
  241. package/tools/browser_test_server.cjs +87 -0
  242. package/tools/ezdxf_generate_dimensions_all_types.py +246 -0
  243. package/tools/ezdxf_generate_dimensions_angular_3p.py +59 -0
  244. package/tools/ezdxf_generate_dimensions_large_scale.py +87 -0
  245. package/tools/ezdxf_regenerate_problem_fixtures.py +184 -0
  246. package/tools/ezdxf_validate_fixtures.py +165 -0
  247. package/docs/DIMENSION_SUMMARY.md +0 -248
  248. package/docs/DIMENSION_SUMMARY.pt-BR.md +0 -248
  249. package/docs/IMPLEMENTED-2D-ENTITIES.md +0 -54
  250. package/docs/IMPLEMENTED-2D-ENTITIES.pt-BR.md +0 -54
  251. package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.md +0 -241
  252. 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 }