abstract-3d 0.1.2

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 (219) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +7 -0
  4. package/lib/abstract-3d.d.ts +317 -0
  5. package/lib/abstract-3d.d.ts.map +1 -0
  6. package/lib/abstract-3d.js +333 -0
  7. package/lib/abstract-3d.js.map +1 -0
  8. package/lib/index.d.ts +3 -0
  9. package/lib/index.d.ts.map +1 -0
  10. package/lib/index.js +19 -0
  11. package/lib/index.js.map +1 -0
  12. package/lib/renderers/dxf/dxf-encoding.d.ts +7 -0
  13. package/lib/renderers/dxf/dxf-encoding.d.ts.map +1 -0
  14. package/lib/renderers/dxf/dxf-encoding.js +343 -0
  15. package/lib/renderers/dxf/dxf-encoding.js.map +1 -0
  16. package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts +3 -0
  17. package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts.map +1 -0
  18. package/lib/renderers/dxf/dxf-geometries/dxf-box.js +52 -0
  19. package/lib/renderers/dxf/dxf-geometries/dxf-box.js.map +1 -0
  20. package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts +3 -0
  21. package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts.map +1 -0
  22. package/lib/renderers/dxf/dxf-geometries/dxf-cone.js +54 -0
  23. package/lib/renderers/dxf/dxf-geometries/dxf-cone.js.map +1 -0
  24. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts +3 -0
  25. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts.map +1 -0
  26. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js +62 -0
  27. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js.map +1 -0
  28. package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts +3 -0
  29. package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts.map +1 -0
  30. package/lib/renderers/dxf/dxf-geometries/dxf-plane.js +38 -0
  31. package/lib/renderers/dxf/dxf-geometries/dxf-plane.js.map +1 -0
  32. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts +3 -0
  33. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts.map +1 -0
  34. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js +61 -0
  35. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js.map +1 -0
  36. package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts +3 -0
  37. package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts.map +1 -0
  38. package/lib/renderers/dxf/dxf-geometries/dxf-shape.js +61 -0
  39. package/lib/renderers/dxf/dxf-geometries/dxf-shape.js.map +1 -0
  40. package/lib/renderers/dxf/dxf.d.ts +3 -0
  41. package/lib/renderers/dxf/dxf.d.ts.map +1 -0
  42. package/lib/renderers/dxf/dxf.js +64 -0
  43. package/lib/renderers/dxf/dxf.js.map +1 -0
  44. package/lib/renderers/dxf/index.d.ts +2 -0
  45. package/lib/renderers/dxf/index.d.ts.map +1 -0
  46. package/lib/renderers/dxf/index.js +18 -0
  47. package/lib/renderers/dxf/index.js.map +1 -0
  48. package/lib/renderers/index.d.ts +5 -0
  49. package/lib/renderers/index.d.ts.map +1 -0
  50. package/lib/renderers/index.js +21 -0
  51. package/lib/renderers/index.js.map +1 -0
  52. package/lib/renderers/react/index.d.ts +6 -0
  53. package/lib/renderers/react/index.d.ts.map +1 -0
  54. package/lib/renderers/react/index.js +21 -0
  55. package/lib/renderers/react/index.js.map +1 -0
  56. package/lib/renderers/react/react-camera.d.ts +60 -0
  57. package/lib/renderers/react/react-camera.d.ts.map +1 -0
  58. package/lib/renderers/react/react-camera.js +132 -0
  59. package/lib/renderers/react/react-camera.js.map +1 -0
  60. package/lib/renderers/react/react-dimension.d.ts +12 -0
  61. package/lib/renderers/react/react-dimension.d.ts.map +1 -0
  62. package/lib/renderers/react/react-dimension.js +39 -0
  63. package/lib/renderers/react/react-dimension.js.map +1 -0
  64. package/lib/renderers/react/react-group.d.ts +18 -0
  65. package/lib/renderers/react/react-group.d.ts.map +1 -0
  66. package/lib/renderers/react/react-group.js +62 -0
  67. package/lib/renderers/react/react-group.js.map +1 -0
  68. package/lib/renderers/react/react-hotspot.d.ts +30 -0
  69. package/lib/renderers/react/react-hotspot.d.ts.map +1 -0
  70. package/lib/renderers/react/react-hotspot.js +71 -0
  71. package/lib/renderers/react/react-hotspot.js.map +1 -0
  72. package/lib/renderers/react/react-material.d.ts +13 -0
  73. package/lib/renderers/react/react-material.d.ts.map +1 -0
  74. package/lib/renderers/react/react-material.js +85 -0
  75. package/lib/renderers/react/react-material.js.map +1 -0
  76. package/lib/renderers/react/react-mesh.d.ts +10 -0
  77. package/lib/renderers/react/react-mesh.d.ts.map +1 -0
  78. package/lib/renderers/react/react-mesh.js +238 -0
  79. package/lib/renderers/react/react-mesh.js.map +1 -0
  80. package/lib/renderers/react/react-scene.d.ts +20 -0
  81. package/lib/renderers/react/react-scene.d.ts.map +1 -0
  82. package/lib/renderers/react/react-scene.js +44 -0
  83. package/lib/renderers/react/react-scene.js.map +1 -0
  84. package/lib/renderers/react/react.d.ts +30 -0
  85. package/lib/renderers/react/react.d.ts.map +1 -0
  86. package/lib/renderers/react/react.js +48 -0
  87. package/lib/renderers/react/react.js.map +1 -0
  88. package/lib/renderers/shared.d.ts +6 -0
  89. package/lib/renderers/shared.d.ts.map +1 -0
  90. package/lib/renderers/shared.js +93 -0
  91. package/lib/renderers/shared.js.map +1 -0
  92. package/lib/renderers/stl/index.d.ts +2 -0
  93. package/lib/renderers/stl/index.d.ts.map +1 -0
  94. package/lib/renderers/stl/index.js +18 -0
  95. package/lib/renderers/stl/index.js.map +1 -0
  96. package/lib/renderers/stl/stl-encoding.d.ts +4 -0
  97. package/lib/renderers/stl/stl-encoding.d.ts.map +1 -0
  98. package/lib/renderers/stl/stl-encoding.js +26 -0
  99. package/lib/renderers/stl/stl-encoding.js.map +1 -0
  100. package/lib/renderers/stl/stl-geometries/stl-box.d.ts +3 -0
  101. package/lib/renderers/stl/stl-geometries/stl-box.d.ts.map +1 -0
  102. package/lib/renderers/stl/stl-geometries/stl-box.js +57 -0
  103. package/lib/renderers/stl/stl-geometries/stl-box.js.map +1 -0
  104. package/lib/renderers/stl/stl-geometries/stl-cone.d.ts +3 -0
  105. package/lib/renderers/stl/stl-geometries/stl-cone.d.ts.map +1 -0
  106. package/lib/renderers/stl/stl-geometries/stl-cone.js +54 -0
  107. package/lib/renderers/stl/stl-geometries/stl-cone.js.map +1 -0
  108. package/lib/renderers/stl/stl-geometries/stl-cylinder.d.ts +3 -0
  109. package/lib/renderers/stl/stl-geometries/stl-cylinder.d.ts.map +1 -0
  110. package/lib/renderers/stl/stl-geometries/stl-cylinder.js +62 -0
  111. package/lib/renderers/stl/stl-geometries/stl-cylinder.js.map +1 -0
  112. package/lib/renderers/stl/stl-geometries/stl-plane.d.ts +3 -0
  113. package/lib/renderers/stl/stl-geometries/stl-plane.d.ts.map +1 -0
  114. package/lib/renderers/stl/stl-geometries/stl-plane.js +44 -0
  115. package/lib/renderers/stl/stl-geometries/stl-plane.js.map +1 -0
  116. package/lib/renderers/stl/stl-geometries/stl-polygon.d.ts +3 -0
  117. package/lib/renderers/stl/stl-geometries/stl-polygon.d.ts.map +1 -0
  118. package/lib/renderers/stl/stl-geometries/stl-polygon.js +59 -0
  119. package/lib/renderers/stl/stl-geometries/stl-polygon.js.map +1 -0
  120. package/lib/renderers/stl/stl-geometries/stl-shape.d.ts +3 -0
  121. package/lib/renderers/stl/stl-geometries/stl-shape.d.ts.map +1 -0
  122. package/lib/renderers/stl/stl-geometries/stl-shape.js +59 -0
  123. package/lib/renderers/stl/stl-geometries/stl-shape.js.map +1 -0
  124. package/lib/renderers/stl/stl.d.ts +3 -0
  125. package/lib/renderers/stl/stl.d.ts.map +1 -0
  126. package/lib/renderers/stl/stl.js +57 -0
  127. package/lib/renderers/stl/stl.js.map +1 -0
  128. package/lib/renderers/svg/index.d.ts +3 -0
  129. package/lib/renderers/svg/index.d.ts.map +1 -0
  130. package/lib/renderers/svg/index.js +18 -0
  131. package/lib/renderers/svg/index.js.map +1 -0
  132. package/lib/renderers/svg/svg-encoding.d.ts +14 -0
  133. package/lib/renderers/svg/svg-encoding.d.ts.map +1 -0
  134. package/lib/renderers/svg/svg-encoding.js +27 -0
  135. package/lib/renderers/svg/svg-encoding.js.map +1 -0
  136. package/lib/renderers/svg/svg-geometries/shared.d.ts +12 -0
  137. package/lib/renderers/svg/svg-geometries/shared.d.ts.map +1 -0
  138. package/lib/renderers/svg/svg-geometries/shared.js +12 -0
  139. package/lib/renderers/svg/svg-geometries/shared.js.map +1 -0
  140. package/lib/renderers/svg/svg-geometries/svg-box.d.ts +4 -0
  141. package/lib/renderers/svg/svg-geometries/svg-box.d.ts.map +1 -0
  142. package/lib/renderers/svg/svg-geometries/svg-box.js +70 -0
  143. package/lib/renderers/svg/svg-geometries/svg-box.js.map +1 -0
  144. package/lib/renderers/svg/svg-geometries/svg-cone.d.ts +4 -0
  145. package/lib/renderers/svg/svg-geometries/svg-cone.d.ts.map +1 -0
  146. package/lib/renderers/svg/svg-geometries/svg-cone.js +64 -0
  147. package/lib/renderers/svg/svg-geometries/svg-cone.js.map +1 -0
  148. package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts +4 -0
  149. package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts.map +1 -0
  150. package/lib/renderers/svg/svg-geometries/svg-cylinder.js +69 -0
  151. package/lib/renderers/svg/svg-geometries/svg-cylinder.js.map +1 -0
  152. package/lib/renderers/svg/svg-geometries/svg-line.d.ts +4 -0
  153. package/lib/renderers/svg/svg-geometries/svg-line.d.ts.map +1 -0
  154. package/lib/renderers/svg/svg-geometries/svg-line.js +39 -0
  155. package/lib/renderers/svg/svg-geometries/svg-line.js.map +1 -0
  156. package/lib/renderers/svg/svg-geometries/svg-plane.d.ts +5 -0
  157. package/lib/renderers/svg/svg-geometries/svg-plane.d.ts.map +1 -0
  158. package/lib/renderers/svg/svg-geometries/svg-plane.js +57 -0
  159. package/lib/renderers/svg/svg-geometries/svg-plane.js.map +1 -0
  160. package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts +4 -0
  161. package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts.map +1 -0
  162. package/lib/renderers/svg/svg-geometries/svg-polygon.js +20 -0
  163. package/lib/renderers/svg/svg-geometries/svg-polygon.js.map +1 -0
  164. package/lib/renderers/svg/svg-geometries/svg-shape.d.ts +4 -0
  165. package/lib/renderers/svg/svg-geometries/svg-shape.d.ts.map +1 -0
  166. package/lib/renderers/svg/svg-geometries/svg-shape.js +20 -0
  167. package/lib/renderers/svg/svg-geometries/svg-shape.js.map +1 -0
  168. package/lib/renderers/svg/svg-geometries/svg-text.d.ts +4 -0
  169. package/lib/renderers/svg/svg-geometries/svg-text.d.ts.map +1 -0
  170. package/lib/renderers/svg/svg-geometries/svg-text.js +46 -0
  171. package/lib/renderers/svg/svg-geometries/svg-text.js.map +1 -0
  172. package/lib/renderers/svg/svg.d.ts +10 -0
  173. package/lib/renderers/svg/svg.d.ts.map +1 -0
  174. package/lib/renderers/svg/svg.js +98 -0
  175. package/lib/renderers/svg/svg.js.map +1 -0
  176. package/package.json +31 -0
  177. package/src/abstract-3d.ts +578 -0
  178. package/src/index.ts +2 -0
  179. package/src/renderers/dxf/dxf-encoding.ts +348 -0
  180. package/src/renderers/dxf/dxf-geometries/dxf-box.ts +27 -0
  181. package/src/renderers/dxf/dxf-geometries/dxf-cone.ts +31 -0
  182. package/src/renderers/dxf/dxf-geometries/dxf-cylinder.ts +45 -0
  183. package/src/renderers/dxf/dxf-geometries/dxf-plane.ts +16 -0
  184. package/src/renderers/dxf/dxf-geometries/dxf-polygon.ts +36 -0
  185. package/src/renderers/dxf/dxf-geometries/dxf-shape.ts +36 -0
  186. package/src/renderers/dxf/dxf.ts +38 -0
  187. package/src/renderers/dxf/index.ts +1 -0
  188. package/src/renderers/index.ts +4 -0
  189. package/src/renderers/react/index.ts +5 -0
  190. package/src/renderers/react/react-camera.tsx +208 -0
  191. package/src/renderers/react/react-dimension.tsx +76 -0
  192. package/src/renderers/react/react-group.tsx +133 -0
  193. package/src/renderers/react/react-hotspot.tsx +116 -0
  194. package/src/renderers/react/react-material.tsx +159 -0
  195. package/src/renderers/react/react-mesh.tsx +380 -0
  196. package/src/renderers/react/react-scene.tsx +137 -0
  197. package/src/renderers/react/react.tsx +118 -0
  198. package/src/renderers/shared.ts +111 -0
  199. package/src/renderers/stl/index.ts +1 -0
  200. package/src/renderers/stl/stl-encoding.ts +22 -0
  201. package/src/renderers/stl/stl-geometries/stl-box.ts +33 -0
  202. package/src/renderers/stl/stl-geometries/stl-cone.ts +37 -0
  203. package/src/renderers/stl/stl-geometries/stl-cylinder.ts +45 -0
  204. package/src/renderers/stl/stl-geometries/stl-plane.ts +16 -0
  205. package/src/renderers/stl/stl-geometries/stl-polygon.ts +35 -0
  206. package/src/renderers/stl/stl-geometries/stl-shape.ts +35 -0
  207. package/src/renderers/stl/stl.ts +33 -0
  208. package/src/renderers/svg/index.ts +2 -0
  209. package/src/renderers/svg/svg-encoding.ts +46 -0
  210. package/src/renderers/svg/svg-geometries/shared.ts +10 -0
  211. package/src/renderers/svg/svg-geometries/svg-box.ts +61 -0
  212. package/src/renderers/svg/svg-geometries/svg-cone.ts +52 -0
  213. package/src/renderers/svg/svg-geometries/svg-cylinder.ts +58 -0
  214. package/src/renderers/svg/svg-geometries/svg-line.ts +20 -0
  215. package/src/renderers/svg/svg-geometries/svg-plane.ts +44 -0
  216. package/src/renderers/svg/svg-geometries/svg-polygon.ts +25 -0
  217. package/src/renderers/svg/svg-geometries/svg-shape.ts +25 -0
  218. package/src/renderers/svg/svg-geometries/svg-text.ts +28 -0
  219. package/src/renderers/svg/svg.ts +201 -0
@@ -0,0 +1,348 @@
1
+ import { Vec3 } from "../../abstract-3d";
2
+
3
+ export const dxf3DFACE = (vec1: Vec3, vec2: Vec3, vec3: Vec3, vec4: Vec3, color: string | undefined): string =>
4
+ ` 0
5
+ 3DFACE
6
+ 8
7
+ A3D
8
+ 6
9
+ CONTINUOUS
10
+ 62
11
+ ${color ?? "1"}
12
+ 10
13
+ ${vec1.x}
14
+ 20
15
+ ${vec1.y}
16
+ 30
17
+ ${vec1.z}
18
+ 11
19
+ ${vec2.x}
20
+ 21
21
+ ${vec2.y}
22
+ 31
23
+ ${vec2.z}
24
+ 12
25
+ ${vec3.x}
26
+ 22
27
+ ${vec3.y}
28
+ 32
29
+ ${vec3.z}
30
+ 13
31
+ ${vec4.x}
32
+ 23
33
+ ${vec4.y}
34
+ 33
35
+ ${vec4.z}
36
+ `;
37
+
38
+ export const dxfPOLYLINE = (vertices: ReadonlyArray<Vec3>, color: string): string =>
39
+ ` 0
40
+ POLYLINE
41
+ 8
42
+ A3D
43
+ 62
44
+ ${color}
45
+ 66
46
+ 1${vertices.map(
47
+ (v) =>
48
+ `
49
+ 0
50
+ VERTEX
51
+ 8
52
+ A3D
53
+ 10
54
+ ${v.x}
55
+ 20
56
+ ${v.y}
57
+ 30
58
+ ${v.z}`
59
+ )}
60
+ 0
61
+ SEQEND
62
+ `;
63
+
64
+ export const dxfText = (pos: Vec3, fontSize: number, text: string, color: string): string =>
65
+ ` 0
66
+ Text
67
+ 8
68
+ A3D
69
+ 62
70
+ ${color}
71
+ 10
72
+ ${pos.x}
73
+ 20
74
+ ${pos.y}
75
+ 30
76
+ ${pos.z}
77
+ 11
78
+ ${pos.x}
79
+ 21
80
+ ${pos.y}
81
+ 31
82
+ ${pos.z}
83
+ 40
84
+ ${fontSize}
85
+ 1
86
+ ${text}
87
+ `;
88
+
89
+ export const dxfHeader = (size: Vec3, center: Vec3): string =>
90
+ ` 999
91
+ Divid A3D
92
+ 0
93
+ SECTION
94
+ 2
95
+ HEADER
96
+ 9
97
+ $ACADVER
98
+ 1
99
+ AC1006
100
+ 9
101
+ $INSBASE
102
+ 10
103
+ 0.0
104
+ 20
105
+ 0.0
106
+ 30
107
+ 0.0
108
+ 9
109
+ $EXTMIN
110
+ 10
111
+ ${0}
112
+ 20
113
+ ${0}
114
+ 30
115
+ ${0}
116
+ 9
117
+ $EXTMAX
118
+ 10
119
+ ${size.x}
120
+ 20
121
+ ${size.y}
122
+ 30
123
+ ${size.z}
124
+ 0
125
+ ENDSEC
126
+ 0
127
+ SECTION
128
+ 2
129
+ TABLES
130
+ 0
131
+ TABLE
132
+ 2
133
+ APPID
134
+ 70
135
+ 2
136
+ 0
137
+ APPID
138
+ 2
139
+ ACAD
140
+ 70
141
+ 1
142
+ 0
143
+ APPID
144
+ 2
145
+ A3D
146
+ 70
147
+ 1
148
+ 0
149
+ ENDTAB
150
+ 0
151
+ TABLE
152
+ 2
153
+ LTYPE
154
+ 70
155
+ 1
156
+ 0
157
+ LTYPE
158
+ 2
159
+ CONTINUOUS
160
+ 70
161
+ 0
162
+ 3
163
+ Solid line
164
+ 72
165
+ 65
166
+ 73
167
+ 0
168
+ 40
169
+ 0.0
170
+ 0
171
+ ENDTAB
172
+ 0
173
+ TABLE
174
+ 2
175
+ LAYER
176
+ 70
177
+ 3
178
+ 0
179
+ LAYER
180
+ 2
181
+ 0
182
+ 70
183
+ 0
184
+ 62
185
+ 7
186
+ 6
187
+ CONTINUOUS
188
+ 0
189
+ LAYER
190
+ 2
191
+ A3D
192
+ 70
193
+ 0
194
+ 62
195
+ 230
196
+ 6
197
+ CONTINUOUS
198
+ 0
199
+ LAYER
200
+ 2
201
+ A3D
202
+ 70
203
+ 0
204
+ 62
205
+ 7
206
+ 6
207
+ CONTINUOUS
208
+ 0
209
+ ENDTAB
210
+ 0
211
+ TABLE
212
+ 2
213
+ STYLE
214
+ 70
215
+ 0
216
+ 0
217
+ ENDTAB
218
+ 0
219
+ TABLE
220
+ 2
221
+ VPORT
222
+ 70
223
+ 1
224
+ 0
225
+ VPORT
226
+ 2
227
+ *ACTIVE
228
+ 70
229
+ 0
230
+ 10
231
+ 0.0
232
+ 20
233
+ 0.0
234
+ 11
235
+ 1.0
236
+ 21
237
+ 1.0
238
+ 12
239
+ ${-size.x / 2}
240
+ 22
241
+ ${0}
242
+ 13
243
+ 0.0
244
+ 23
245
+ 0.0
246
+ 14
247
+ 1.0
248
+ 24
249
+ 1.0
250
+ 15
251
+ 0.0
252
+ 25
253
+ 0.0
254
+ 16
255
+ 0
256
+ 26
257
+ 0
258
+ 36
259
+ 1
260
+ 17
261
+ ${center.x}
262
+ 27
263
+ ${center.y}
264
+ 37
265
+ 0
266
+ 40
267
+ ${size.y}
268
+ 41
269
+ ${size.x / size.y}
270
+ 42
271
+ 50.0
272
+ 43
273
+ 0.0
274
+ 44
275
+ 0.0
276
+ 50
277
+ 0.0
278
+ 51
279
+ 0.0
280
+ 71
281
+ 0
282
+ 72
283
+ 0
284
+ 73
285
+ 0
286
+ 74
287
+ 0
288
+ 75
289
+ 0
290
+ 76
291
+ 0
292
+ 77
293
+ 0
294
+ 78
295
+ 0
296
+ 0
297
+ ENDTAB
298
+ 0
299
+ ENDSEC
300
+ 0
301
+ SECTION
302
+ 2
303
+ BLOCKS
304
+ 0
305
+ BLOCK
306
+ 8
307
+ A3D
308
+ 2
309
+ A3D_Group
310
+ 70
311
+ 64
312
+ 10
313
+ 0.0
314
+ 20
315
+ 0.0
316
+ 30
317
+ 0.0
318
+ 3
319
+ A3D_Group
320
+ `;
321
+
322
+ export const dxfFooter = ` 0
323
+ ENDBLK
324
+ 0
325
+ ENDSEC
326
+ 0
327
+ SECTION
328
+ 2
329
+ ENTITIES
330
+ 0
331
+ INSERT
332
+ 8
333
+ A3D
334
+ 6
335
+ CONTINUOUS
336
+ 10
337
+ 0.0
338
+ 20
339
+ 0.0
340
+ 30
341
+ 0.0
342
+ 2
343
+ A3D_Group
344
+ 0
345
+ ENDSEC
346
+ 0
347
+ EOF
348
+ `;
@@ -0,0 +1,27 @@
1
+ import * as A3D from "../../../abstract-3d";
2
+ import { dxf3DFACE } from "../dxf-encoding";
3
+
4
+ export function dxfBox(b: A3D.Box, m: A3D.Material, parentPos: A3D.Vec3, parentRot: A3D.Vec3): string {
5
+ const pos = A3D.vec3TransRot(b.pos, parentPos, parentRot);
6
+ const rot = A3D.vec3RotCombine(parentRot, b.rot ?? A3D.vec3Zero);
7
+ const half = A3D.vec3Scale(b.size, 0.5);
8
+ const vec3tr3 = (x: number, y: number, z: number): A3D.Vec3 => A3D.vec3TransRot(A3D.vec3(x, y, z), pos, rot);
9
+
10
+ const v1 = vec3tr3(-half.x, -half.y, half.z);
11
+ const v2 = vec3tr3(half.x, -half.y, half.z);
12
+ const v3 = vec3tr3(half.x, half.y, half.z);
13
+ const v4 = vec3tr3(-half.x, half.y, half.z);
14
+ const v5 = vec3tr3(-half.x, -half.y, -half.z);
15
+ const v6 = vec3tr3(half.x, -half.y, -half.z);
16
+ const v7 = vec3tr3(half.x, half.y, -half.z);
17
+ const v8 = vec3tr3(-half.x, half.y, -half.z);
18
+
19
+ return (
20
+ dxf3DFACE(v1, v2, v3, v4, m.dxf) + // front
21
+ dxf3DFACE(v5, v6, v7, v8, m.dxf) + // Back
22
+ dxf3DFACE(v5, v1, v4, v8, m.dxf) + // Left
23
+ dxf3DFACE(v6, v2, v3, v7, m.dxf) + // Right
24
+ dxf3DFACE(v8, v7, v3, v4, m.dxf) + // Top
25
+ dxf3DFACE(v5, v6, v2, v1, m.dxf) // Bottom
26
+ );
27
+ }
@@ -0,0 +1,31 @@
1
+ import * as A3D from "../../../abstract-3d";
2
+ import { dxf3DFACE } from "../dxf-encoding";
3
+
4
+ export function dxfCone(c: A3D.Cone, m: A3D.Material, sides: number, parentPos: A3D.Vec3, parentRot: A3D.Vec3): string {
5
+ let dxfString = "";
6
+ const pos = A3D.vec3TransRot(c.pos, parentPos, parentRot);
7
+ const rot = A3D.vec3RotCombine(parentRot, c.rot ?? A3D.vec3Zero);
8
+ const vec3tr2 = (x: number, y: number, z: number): A3D.Vec3 => A3D.vec3TransRot(A3D.vec3(x, y, z), pos, rot);
9
+
10
+ const angleStep = (2 * Math.PI) / sides;
11
+ let currentAngle = 0;
12
+
13
+ const half = c.length / 2;
14
+ const botPos = vec3tr2(0, -half, 0);
15
+ const topPos = vec3tr2(0, half, 0);
16
+
17
+ const botVec3Array = Array<A3D.Vec3>();
18
+ for (let i = 0; i <= sides; i++) {
19
+ const currBot = vec3tr2(Math.sin(currentAngle) * c.radius, -half, Math.cos(currentAngle) * c.radius);
20
+ botVec3Array.push(currBot);
21
+
22
+ if (i !== 0) {
23
+ const prevBot = botVec3Array[i - 1]!;
24
+ dxfString +=
25
+ dxf3DFACE(botPos, prevBot, currBot, currBot, m.dxf) + dxf3DFACE(currBot, prevBot, topPos, topPos, m.dxf);
26
+ }
27
+ currentAngle += angleStep;
28
+ }
29
+
30
+ return dxfString;
31
+ }
@@ -0,0 +1,45 @@
1
+ import * as A3D from "../../../abstract-3d";
2
+ import { dxf3DFACE } from "../dxf-encoding";
3
+
4
+ export function dxfCylinder(
5
+ c: A3D.Cylinder,
6
+ m: A3D.Material,
7
+ sides: number,
8
+ parentPos: A3D.Vec3,
9
+ parentRot: A3D.Vec3
10
+ ): string {
11
+ let dxfString = "";
12
+ const pos = A3D.vec3TransRot(c.pos, parentPos, parentRot);
13
+ const rot = A3D.vec3RotCombine(parentRot, c.rot ?? A3D.vec3Zero);
14
+ const vec3tr = (x: number, y: number, z: number): A3D.Vec3 => A3D.vec3TransRot(A3D.vec3(x, y, z), pos, rot);
15
+
16
+ const angleStep = (2 * Math.PI) / sides;
17
+ let currentAngle = 0;
18
+
19
+ const half = c.length / 2;
20
+ const topPos = vec3tr(0, half, 0);
21
+ const botPos = vec3tr(0, -half, 0);
22
+
23
+ const botVec3Array = Array<A3D.Vec3>();
24
+ const topVec3Array = Array<A3D.Vec3>();
25
+
26
+ for (let i = 0; i <= sides; i++) {
27
+ const x = Math.sin(currentAngle) * c.radius;
28
+ const z = Math.cos(currentAngle) * c.radius;
29
+ const currBot = vec3tr(x, -half, z);
30
+ const currTop = vec3tr(x, half, z);
31
+ botVec3Array.push(currBot);
32
+ topVec3Array.push(currTop);
33
+ if (i !== 0) {
34
+ const prevBot = botVec3Array[i - 1]!;
35
+ const prevTop = topVec3Array[i - 1]!;
36
+ dxfString +=
37
+ dxf3DFACE(botPos, prevBot, currBot, currBot, m.dxf) +
38
+ dxf3DFACE(topPos, prevTop, currTop, currTop, m.dxf) +
39
+ dxf3DFACE(currBot, prevBot, prevTop, currTop, m.dxf);
40
+ }
41
+ currentAngle += angleStep;
42
+ }
43
+
44
+ return dxfString;
45
+ }
@@ -0,0 +1,16 @@
1
+ import * as A3D from "../../../abstract-3d";
2
+ import { dxf3DFACE } from "../dxf-encoding";
3
+
4
+ export function dxfPlane(p: A3D.Plane, m: A3D.Material, parentPos: A3D.Vec3, parentRot: A3D.Vec3): string {
5
+ const half = A3D.vec2Scale(p.size, 0.5);
6
+ const pos = A3D.vec3TransRot(p.pos, parentPos, parentRot);
7
+ const rot = A3D.vec3RotCombine(parentRot, p.rot ?? A3D.vec3Zero);
8
+ const vec3tr = (x: number, y: number): A3D.Vec3 => A3D.vec3TransRot(A3D.vec3(x, y, 0), pos, rot);
9
+ return dxf3DFACE(
10
+ vec3tr(-half.x, -half.y),
11
+ vec3tr(half.x, -half.y),
12
+ vec3tr(half.x, half.y),
13
+ vec3tr(-half.x, half.y),
14
+ m.dxf
15
+ );
16
+ }
@@ -0,0 +1,36 @@
1
+ import * as A3D from "../../../abstract-3d";
2
+ import { dxf3DFACE } from "../dxf-encoding";
3
+
4
+ const chunkSize = 4;
5
+
6
+ export function dxfPolygon(p: A3D.Polygon, m: A3D.Material, parentPos: A3D.Vec3, parentRot: A3D.Vec3): string {
7
+ let polygonString = "";
8
+ const pos = A3D.vec3TransRot(p.pos, parentPos, parentRot);
9
+ const rot = A3D.vec3RotCombine(parentRot, p.rot ?? A3D.vec3Zero);
10
+ const points = p.points.map((p) => A3D.vec3TransRot(p, pos, rot));
11
+ let i = 0;
12
+ if (points.length >= chunkSize) {
13
+ for (i; i < points.length; i += chunkSize) {
14
+ polygonString += dxf3DFACE(points[i]!, points[i + 1]!, points[i + 2]!, points[i + 3]!, m.dxf);
15
+ }
16
+ }
17
+
18
+ if (i <= points.length && chunkSize - 1 <= points.length) {
19
+ const lastArrayLength = points.length - i;
20
+ switch (lastArrayLength) {
21
+ case 1:
22
+ polygonString += dxf3DFACE(points[i - 2]!, points[i - 1]!, points[i]!, points[i]!, m.dxf);
23
+ break;
24
+ case 2:
25
+ polygonString += dxf3DFACE(points[i - 1]!, points[i]!, points[i + 1]!, points[i + 1]!, m.dxf);
26
+ break;
27
+ case 3:
28
+ polygonString += dxf3DFACE(points[i]!, points[i + 1]!, points[i + 2]!, points[i + 2]!, m.dxf);
29
+ break;
30
+ default:
31
+ break;
32
+ }
33
+ }
34
+
35
+ return polygonString;
36
+ }
@@ -0,0 +1,36 @@
1
+ import * as A3D from "../../../abstract-3d";
2
+ import { dxf3DFACE } from "../dxf-encoding";
3
+
4
+ const chunkSize = 4;
5
+
6
+ export function dxfPolygon(s: A3D.Shape, m: A3D.Material, parentPos: A3D.Vec3, parentRot: A3D.Vec3): string {
7
+ let polygonString = "";
8
+ const pos = A3D.vec3TransRot(s.pos, parentPos, parentRot);
9
+ const rot = A3D.vec3RotCombine(parentRot, s.rot ?? A3D.vec3Zero);
10
+ const points = s.points.map((p) => A3D.vec3TransRot(A3D.vec3(p.x, p.y, 0), pos, rot));
11
+ let i = 0;
12
+ if (points.length >= chunkSize) {
13
+ for (i; i < points.length; i += chunkSize) {
14
+ polygonString += dxf3DFACE(points[i]!, points[i + 1]!, points[i + 2]!, points[i + 3]!, m.dxf);
15
+ }
16
+ }
17
+
18
+ if (i <= points.length && chunkSize - 1 <= points.length) {
19
+ const lastArrayLength = points.length - i;
20
+ switch (lastArrayLength) {
21
+ case 1:
22
+ polygonString += dxf3DFACE(points[i - 2]!, points[i - 1]!, points[i]!, points[i]!, m.dxf);
23
+ break;
24
+ case 2:
25
+ polygonString += dxf3DFACE(points[i - 1]!, points[i]!, points[i + 1]!, points[i + 1]!, m.dxf);
26
+ break;
27
+ case 3:
28
+ polygonString += dxf3DFACE(points[i]!, points[i + 1]!, points[i + 2]!, points[i + 2]!, m.dxf);
29
+ break;
30
+ default:
31
+ break;
32
+ }
33
+ }
34
+
35
+ return polygonString;
36
+ }
@@ -0,0 +1,38 @@
1
+ import * as A3D from "../../abstract-3d";
2
+ import { dxfFooter, dxfHeader } from "./dxf-encoding";
3
+ import { dxfPlane } from "./dxf-geometries/dxf-plane";
4
+ import { dxfBox } from "./dxf-geometries/dxf-box";
5
+ import { dxfCylinder } from "./dxf-geometries/dxf-cylinder";
6
+ import { dxfCone } from "./dxf-geometries/dxf-cone";
7
+ import { dxfPolygon } from "./dxf-geometries/dxf-polygon";
8
+ import { dimBoundZero, rotationForCameraPos, sizeCenterForCameraPos } from "../shared";
9
+
10
+ export const toDxf = (scene: A3D.Scene, view: A3D.View): string => {
11
+ const unitRot = A3D.vec3RotCombine(rotationForCameraPos(view), scene.rotation ?? A3D.vec3Zero);
12
+ const rotatedCenter = A3D.vec3Rot(scene.center, A3D.vec3Zero, scene.rotation ?? A3D.vec3Zero);
13
+ const [size, center] = sizeCenterForCameraPos(scene.size, rotatedCenter, dimBoundZero, A3D.vec3Zero, view, 1);
14
+ return dxfHeader(size, center) + scene.groups.reduce((a, c) => a + dxfGroup(c, center, unitRot), "") + dxfFooter;
15
+ };
16
+
17
+ function dxfGroup(g: A3D.Group, parentPos: A3D.Vec3, parentRot: A3D.Vec3): string {
18
+ const pos = A3D.vec3TransRot(g.pos, parentPos, parentRot);
19
+ const rot = A3D.vec3RotCombine(parentRot, g.rot ?? A3D.vec3Zero);
20
+ return (
21
+ (g.meshes?.reduce((a, c) => {
22
+ switch (c.geometry.type) {
23
+ case "Plane":
24
+ return a + dxfPlane(c.geometry, c.material, pos, rot);
25
+ case "Box":
26
+ return a + dxfBox(c.geometry, c.material, pos, rot);
27
+ case "Cylinder":
28
+ return a + dxfCylinder(c.geometry, c.material, 18, pos, rot);
29
+ case "Cone":
30
+ return a + dxfCone(c.geometry, c.material, 18, pos, rot);
31
+ case "Polygon":
32
+ return a + dxfPolygon(c.geometry, c.material, pos, rot);
33
+ default:
34
+ return a;
35
+ }
36
+ }, "") ?? "") + g.groups?.reduce((a, c) => a + dxfGroup(c, pos, rot), "") ?? ""
37
+ );
38
+ }
@@ -0,0 +1 @@
1
+ export * from "./dxf";
@@ -0,0 +1,4 @@
1
+ export * from "./dxf";
2
+ export * from "./svg";
3
+ export * from "./stl";
4
+ export * from "./react";
@@ -0,0 +1,5 @@
1
+ export * from "./react";
2
+ export type { HotSpotInfo } from "./react-hotspot";
3
+ export type { CameraType, Camera, ControlsHelper } from "./react-camera";
4
+ export type { MaterialState } from "./react-material";
5
+ export { ERROR_IMG_KEY } from "./react-material";