@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,49 @@
1
+ import type { DXFTuple } from '../../types'
2
+
3
+ import common from './common'
4
+
5
+ export const TYPE = 'TABLE'
6
+
7
+ interface TableEntity {
8
+ type: typeof TYPE
9
+
10
+ rows?: number
11
+ columns?: number
12
+ cellText?: string[]
13
+
14
+ [key: string]: unknown
15
+ }
16
+
17
+ export const process = (tuples: DXFTuple[]): TableEntity => {
18
+ return tuples.reduce(
19
+ (entity, tuple) => {
20
+ const code = tuple[0]
21
+ const value = tuple[1]
22
+
23
+ switch (code) {
24
+ case 90:
25
+ entity.rows = value as number
26
+ break
27
+ case 91:
28
+ entity.columns = value as number
29
+ break
30
+
31
+ case 1:
32
+ entity.cellText ??= []
33
+ entity.cellText.push(String(value))
34
+ break
35
+
36
+ default:
37
+ Object.assign(entity, common(code, value))
38
+ break
39
+ }
40
+
41
+ return entity
42
+ },
43
+ {
44
+ type: TYPE,
45
+ } as TableEntity,
46
+ )
47
+ }
48
+
49
+ export default { TYPE, process }
@@ -0,0 +1,75 @@
1
+ import type { DXFTuple } from '../../types'
2
+
3
+ import common from './common'
4
+
5
+ export const TYPE = 'TOLERANCE'
6
+
7
+ interface ToleranceEntity {
8
+ type: typeof TYPE
9
+
10
+ insertionPoint: { x: number; y: number; z: number }
11
+ text?: string
12
+ dimensionStyleName?: string
13
+ xAxisDirection?: { x: number; y: number; z: number }
14
+
15
+ [key: string]: unknown
16
+ }
17
+
18
+ function ensureVector3(
19
+ entity: ToleranceEntity,
20
+ key: 'insertionPoint' | 'xAxisDirection',
21
+ ): { x: number; y: number; z: number } {
22
+ entity[key] ??= { x: 0, y: 0, z: 0 }
23
+ return entity[key] as { x: number; y: number; z: number }
24
+ }
25
+
26
+ export const process = (tuples: DXFTuple[]): ToleranceEntity => {
27
+ return tuples.reduce(
28
+ (entity, tuple) => {
29
+ const code = tuple[0]
30
+ const value = tuple[1]
31
+
32
+ switch (code) {
33
+ case 3:
34
+ entity.dimensionStyleName = String(value)
35
+ break
36
+
37
+ case 10:
38
+ ensureVector3(entity, 'insertionPoint').x = value as number
39
+ break
40
+ case 20:
41
+ ensureVector3(entity, 'insertionPoint').y = value as number
42
+ break
43
+ case 30:
44
+ ensureVector3(entity, 'insertionPoint').z = value as number
45
+ break
46
+
47
+ case 1:
48
+ entity.text = String(value)
49
+ break
50
+
51
+ case 11:
52
+ ensureVector3(entity, 'xAxisDirection').x = value as number
53
+ break
54
+ case 21:
55
+ ensureVector3(entity, 'xAxisDirection').y = value as number
56
+ break
57
+ case 31:
58
+ ensureVector3(entity, 'xAxisDirection').z = value as number
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
+ insertionPoint: { x: 0, y: 0, z: 0 },
71
+ } as ToleranceEntity,
72
+ )
73
+ }
74
+
75
+ export default { TYPE, process }
@@ -0,0 +1,72 @@
1
+ import type { DXFTuple } from '../../types/dxf'
2
+
3
+ import type { Point3D } from '../../types'
4
+ import common from './common'
5
+
6
+ interface TraceEntity {
7
+ type: string
8
+ corners: Point3D[]
9
+ thickness?: number
10
+ }
11
+
12
+ export const TYPE = 'TRACE'
13
+
14
+ export const process = (tuples: DXFTuple[]): TraceEntity => {
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.corners[0].x = value as number
22
+ break
23
+ case 20:
24
+ entity.corners[0].y = value as number
25
+ break
26
+ case 30:
27
+ entity.corners[0].z = value as number
28
+ break
29
+ case 11:
30
+ entity.corners[1].x = value as number
31
+ break
32
+ case 21:
33
+ entity.corners[1].y = value as number
34
+ break
35
+ case 31:
36
+ entity.corners[1].z = value as number
37
+ break
38
+ case 12:
39
+ entity.corners[2].x = value as number
40
+ break
41
+ case 22:
42
+ entity.corners[2].y = value as number
43
+ break
44
+ case 32:
45
+ entity.corners[2].z = value as number
46
+ break
47
+ case 13:
48
+ entity.corners[3].x = value as number
49
+ break
50
+ case 23:
51
+ entity.corners[3].y = value as number
52
+ break
53
+ case 33:
54
+ entity.corners[3].z = value as number
55
+ break
56
+ case 39:
57
+ entity.thickness = value as number
58
+ break
59
+ default:
60
+ Object.assign(entity, common(type, value))
61
+ break
62
+ }
63
+ return entity
64
+ },
65
+ {
66
+ type: TYPE,
67
+ corners: [{} as Point3D, {} as Point3D, {} as Point3D, {} as Point3D],
68
+ } as TraceEntity,
69
+ )
70
+ }
71
+
72
+ export default { TYPE, process }
@@ -0,0 +1,114 @@
1
+ import type { DXFTuple, PartialPoint3D } from '../../types'
2
+
3
+ import common from './common'
4
+
5
+ export const TYPE = 'WIPEOUT'
6
+
7
+ interface WipeoutEntity {
8
+ type: typeof TYPE
9
+
10
+ insertionPoint: PartialPoint3D
11
+ uVector: PartialPoint3D
12
+ vVector: PartialPoint3D
13
+
14
+ clipBoundaryType?: 1 | 2
15
+ clipBoundaryVertices?: Array<{ x: number; y: number }>
16
+
17
+ displayProperties?: number
18
+ clippingState?: 0 | 1
19
+ classVersion?: number
20
+ imageSizePixels?: { u: number; v: number }
21
+
22
+ [key: string]: unknown
23
+ }
24
+
25
+ export const process = (tuples: DXFTuple[]): WipeoutEntity => {
26
+ let pendingBoundaryX: number | null = null
27
+
28
+ return tuples.reduce(
29
+ (entity, tuple) => {
30
+ const type = tuple[0]
31
+ const value = tuple[1]
32
+
33
+ switch (type) {
34
+ case 90:
35
+ entity.classVersion = value as number
36
+ break
37
+
38
+ case 10:
39
+ entity.insertionPoint.x = value as number
40
+ break
41
+ case 20:
42
+ entity.insertionPoint.y = value as number
43
+ break
44
+ case 30:
45
+ entity.insertionPoint.z = value as number
46
+ break
47
+
48
+ case 11:
49
+ entity.uVector.x = value as number
50
+ break
51
+ case 21:
52
+ entity.uVector.y = value as number
53
+ break
54
+ case 31:
55
+ entity.uVector.z = value as number
56
+ break
57
+
58
+ case 12:
59
+ entity.vVector.x = value as number
60
+ break
61
+ case 22:
62
+ entity.vVector.y = value as number
63
+ break
64
+ case 32:
65
+ entity.vVector.z = value as number
66
+ break
67
+
68
+ case 13:
69
+ entity.imageSizePixels ??= { u: 0, v: 0 }
70
+ entity.imageSizePixels.u = value as number
71
+ break
72
+ case 23:
73
+ entity.imageSizePixels ??= { u: 0, v: 0 }
74
+ entity.imageSizePixels.v = value as number
75
+ break
76
+
77
+ case 70:
78
+ entity.displayProperties = value as number
79
+ break
80
+ case 280:
81
+ entity.clippingState = value as 0 | 1
82
+ break
83
+
84
+ case 71:
85
+ entity.clipBoundaryType = value as 1 | 2
86
+ break
87
+
88
+ case 14:
89
+ pendingBoundaryX = value as number
90
+ break
91
+ case 24:
92
+ if (pendingBoundaryX !== null) {
93
+ entity.clipBoundaryVertices ??= []
94
+ entity.clipBoundaryVertices.push({ x: pendingBoundaryX, y: value as number })
95
+ pendingBoundaryX = null
96
+ }
97
+ break
98
+
99
+ default:
100
+ Object.assign(entity, common(type, value))
101
+ break
102
+ }
103
+ return entity
104
+ },
105
+ {
106
+ type: TYPE,
107
+ insertionPoint: {},
108
+ uVector: {},
109
+ vVector: {},
110
+ } as WipeoutEntity,
111
+ )
112
+ }
113
+
114
+ 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 = 'XLINE'
6
+
7
+ interface XLineEntity {
8
+ type: typeof TYPE
9
+ basePoint: PartialPoint3D
10
+ direction: PartialPoint3D
11
+ [key: string]: unknown
12
+ }
13
+
14
+ export const process = (tuples: DXFTuple[]): XLineEntity => {
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.basePoint.x = value as number
22
+ break
23
+ case 20:
24
+ entity.basePoint.y = value as number
25
+ break
26
+ case 30:
27
+ entity.basePoint.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
+ basePoint: {},
47
+ direction: {},
48
+ } as XLineEntity,
49
+ )
50
+ }
51
+
52
+ export default { TYPE, process }