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.
- package/CHANGELOG.md +7 -0
- package/LICENSE +21 -0
- package/README.md +7 -0
- package/lib/abstract-3d.d.ts +317 -0
- package/lib/abstract-3d.d.ts.map +1 -0
- package/lib/abstract-3d.js +333 -0
- package/lib/abstract-3d.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +19 -0
- package/lib/index.js.map +1 -0
- package/lib/renderers/dxf/dxf-encoding.d.ts +7 -0
- package/lib/renderers/dxf/dxf-encoding.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-encoding.js +343 -0
- package/lib/renderers/dxf/dxf-encoding.js.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts +3 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-box.js +52 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-box.js.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts +3 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.js +54 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.js.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts +3 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js +62 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts +3 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.js +38 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.js.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts +3 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js +61 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts +3 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.js +61 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.js.map +1 -0
- package/lib/renderers/dxf/dxf.d.ts +3 -0
- package/lib/renderers/dxf/dxf.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf.js +64 -0
- package/lib/renderers/dxf/dxf.js.map +1 -0
- package/lib/renderers/dxf/index.d.ts +2 -0
- package/lib/renderers/dxf/index.d.ts.map +1 -0
- package/lib/renderers/dxf/index.js +18 -0
- package/lib/renderers/dxf/index.js.map +1 -0
- package/lib/renderers/index.d.ts +5 -0
- package/lib/renderers/index.d.ts.map +1 -0
- package/lib/renderers/index.js +21 -0
- package/lib/renderers/index.js.map +1 -0
- package/lib/renderers/react/index.d.ts +6 -0
- package/lib/renderers/react/index.d.ts.map +1 -0
- package/lib/renderers/react/index.js +21 -0
- package/lib/renderers/react/index.js.map +1 -0
- package/lib/renderers/react/react-camera.d.ts +60 -0
- package/lib/renderers/react/react-camera.d.ts.map +1 -0
- package/lib/renderers/react/react-camera.js +132 -0
- package/lib/renderers/react/react-camera.js.map +1 -0
- package/lib/renderers/react/react-dimension.d.ts +12 -0
- package/lib/renderers/react/react-dimension.d.ts.map +1 -0
- package/lib/renderers/react/react-dimension.js +39 -0
- package/lib/renderers/react/react-dimension.js.map +1 -0
- package/lib/renderers/react/react-group.d.ts +18 -0
- package/lib/renderers/react/react-group.d.ts.map +1 -0
- package/lib/renderers/react/react-group.js +62 -0
- package/lib/renderers/react/react-group.js.map +1 -0
- package/lib/renderers/react/react-hotspot.d.ts +30 -0
- package/lib/renderers/react/react-hotspot.d.ts.map +1 -0
- package/lib/renderers/react/react-hotspot.js +71 -0
- package/lib/renderers/react/react-hotspot.js.map +1 -0
- package/lib/renderers/react/react-material.d.ts +13 -0
- package/lib/renderers/react/react-material.d.ts.map +1 -0
- package/lib/renderers/react/react-material.js +85 -0
- package/lib/renderers/react/react-material.js.map +1 -0
- package/lib/renderers/react/react-mesh.d.ts +10 -0
- package/lib/renderers/react/react-mesh.d.ts.map +1 -0
- package/lib/renderers/react/react-mesh.js +238 -0
- package/lib/renderers/react/react-mesh.js.map +1 -0
- package/lib/renderers/react/react-scene.d.ts +20 -0
- package/lib/renderers/react/react-scene.d.ts.map +1 -0
- package/lib/renderers/react/react-scene.js +44 -0
- package/lib/renderers/react/react-scene.js.map +1 -0
- package/lib/renderers/react/react.d.ts +30 -0
- package/lib/renderers/react/react.d.ts.map +1 -0
- package/lib/renderers/react/react.js +48 -0
- package/lib/renderers/react/react.js.map +1 -0
- package/lib/renderers/shared.d.ts +6 -0
- package/lib/renderers/shared.d.ts.map +1 -0
- package/lib/renderers/shared.js +93 -0
- package/lib/renderers/shared.js.map +1 -0
- package/lib/renderers/stl/index.d.ts +2 -0
- package/lib/renderers/stl/index.d.ts.map +1 -0
- package/lib/renderers/stl/index.js +18 -0
- package/lib/renderers/stl/index.js.map +1 -0
- package/lib/renderers/stl/stl-encoding.d.ts +4 -0
- package/lib/renderers/stl/stl-encoding.d.ts.map +1 -0
- package/lib/renderers/stl/stl-encoding.js +26 -0
- package/lib/renderers/stl/stl-encoding.js.map +1 -0
- package/lib/renderers/stl/stl-geometries/stl-box.d.ts +3 -0
- package/lib/renderers/stl/stl-geometries/stl-box.d.ts.map +1 -0
- package/lib/renderers/stl/stl-geometries/stl-box.js +57 -0
- package/lib/renderers/stl/stl-geometries/stl-box.js.map +1 -0
- package/lib/renderers/stl/stl-geometries/stl-cone.d.ts +3 -0
- package/lib/renderers/stl/stl-geometries/stl-cone.d.ts.map +1 -0
- package/lib/renderers/stl/stl-geometries/stl-cone.js +54 -0
- package/lib/renderers/stl/stl-geometries/stl-cone.js.map +1 -0
- package/lib/renderers/stl/stl-geometries/stl-cylinder.d.ts +3 -0
- package/lib/renderers/stl/stl-geometries/stl-cylinder.d.ts.map +1 -0
- package/lib/renderers/stl/stl-geometries/stl-cylinder.js +62 -0
- package/lib/renderers/stl/stl-geometries/stl-cylinder.js.map +1 -0
- package/lib/renderers/stl/stl-geometries/stl-plane.d.ts +3 -0
- package/lib/renderers/stl/stl-geometries/stl-plane.d.ts.map +1 -0
- package/lib/renderers/stl/stl-geometries/stl-plane.js +44 -0
- package/lib/renderers/stl/stl-geometries/stl-plane.js.map +1 -0
- package/lib/renderers/stl/stl-geometries/stl-polygon.d.ts +3 -0
- package/lib/renderers/stl/stl-geometries/stl-polygon.d.ts.map +1 -0
- package/lib/renderers/stl/stl-geometries/stl-polygon.js +59 -0
- package/lib/renderers/stl/stl-geometries/stl-polygon.js.map +1 -0
- package/lib/renderers/stl/stl-geometries/stl-shape.d.ts +3 -0
- package/lib/renderers/stl/stl-geometries/stl-shape.d.ts.map +1 -0
- package/lib/renderers/stl/stl-geometries/stl-shape.js +59 -0
- package/lib/renderers/stl/stl-geometries/stl-shape.js.map +1 -0
- package/lib/renderers/stl/stl.d.ts +3 -0
- package/lib/renderers/stl/stl.d.ts.map +1 -0
- package/lib/renderers/stl/stl.js +57 -0
- package/lib/renderers/stl/stl.js.map +1 -0
- package/lib/renderers/svg/index.d.ts +3 -0
- package/lib/renderers/svg/index.d.ts.map +1 -0
- package/lib/renderers/svg/index.js +18 -0
- package/lib/renderers/svg/index.js.map +1 -0
- package/lib/renderers/svg/svg-encoding.d.ts +14 -0
- package/lib/renderers/svg/svg-encoding.d.ts.map +1 -0
- package/lib/renderers/svg/svg-encoding.js +27 -0
- package/lib/renderers/svg/svg-encoding.js.map +1 -0
- package/lib/renderers/svg/svg-geometries/shared.d.ts +12 -0
- package/lib/renderers/svg/svg-geometries/shared.d.ts.map +1 -0
- package/lib/renderers/svg/svg-geometries/shared.js +12 -0
- package/lib/renderers/svg/svg-geometries/shared.js.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-box.d.ts +4 -0
- package/lib/renderers/svg/svg-geometries/svg-box.d.ts.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-box.js +70 -0
- package/lib/renderers/svg/svg-geometries/svg-box.js.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-cone.d.ts +4 -0
- package/lib/renderers/svg/svg-geometries/svg-cone.d.ts.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-cone.js +64 -0
- package/lib/renderers/svg/svg-geometries/svg-cone.js.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts +4 -0
- package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-cylinder.js +69 -0
- package/lib/renderers/svg/svg-geometries/svg-cylinder.js.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-line.d.ts +4 -0
- package/lib/renderers/svg/svg-geometries/svg-line.d.ts.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-line.js +39 -0
- package/lib/renderers/svg/svg-geometries/svg-line.js.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-plane.d.ts +5 -0
- package/lib/renderers/svg/svg-geometries/svg-plane.d.ts.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-plane.js +57 -0
- package/lib/renderers/svg/svg-geometries/svg-plane.js.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts +4 -0
- package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-polygon.js +20 -0
- package/lib/renderers/svg/svg-geometries/svg-polygon.js.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-shape.d.ts +4 -0
- package/lib/renderers/svg/svg-geometries/svg-shape.d.ts.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-shape.js +20 -0
- package/lib/renderers/svg/svg-geometries/svg-shape.js.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-text.d.ts +4 -0
- package/lib/renderers/svg/svg-geometries/svg-text.d.ts.map +1 -0
- package/lib/renderers/svg/svg-geometries/svg-text.js +46 -0
- package/lib/renderers/svg/svg-geometries/svg-text.js.map +1 -0
- package/lib/renderers/svg/svg.d.ts +10 -0
- package/lib/renderers/svg/svg.d.ts.map +1 -0
- package/lib/renderers/svg/svg.js +98 -0
- package/lib/renderers/svg/svg.js.map +1 -0
- package/package.json +31 -0
- package/src/abstract-3d.ts +578 -0
- package/src/index.ts +2 -0
- package/src/renderers/dxf/dxf-encoding.ts +348 -0
- package/src/renderers/dxf/dxf-geometries/dxf-box.ts +27 -0
- package/src/renderers/dxf/dxf-geometries/dxf-cone.ts +31 -0
- package/src/renderers/dxf/dxf-geometries/dxf-cylinder.ts +45 -0
- package/src/renderers/dxf/dxf-geometries/dxf-plane.ts +16 -0
- package/src/renderers/dxf/dxf-geometries/dxf-polygon.ts +36 -0
- package/src/renderers/dxf/dxf-geometries/dxf-shape.ts +36 -0
- package/src/renderers/dxf/dxf.ts +38 -0
- package/src/renderers/dxf/index.ts +1 -0
- package/src/renderers/index.ts +4 -0
- package/src/renderers/react/index.ts +5 -0
- package/src/renderers/react/react-camera.tsx +208 -0
- package/src/renderers/react/react-dimension.tsx +76 -0
- package/src/renderers/react/react-group.tsx +133 -0
- package/src/renderers/react/react-hotspot.tsx +116 -0
- package/src/renderers/react/react-material.tsx +159 -0
- package/src/renderers/react/react-mesh.tsx +380 -0
- package/src/renderers/react/react-scene.tsx +137 -0
- package/src/renderers/react/react.tsx +118 -0
- package/src/renderers/shared.ts +111 -0
- package/src/renderers/stl/index.ts +1 -0
- package/src/renderers/stl/stl-encoding.ts +22 -0
- package/src/renderers/stl/stl-geometries/stl-box.ts +33 -0
- package/src/renderers/stl/stl-geometries/stl-cone.ts +37 -0
- package/src/renderers/stl/stl-geometries/stl-cylinder.ts +45 -0
- package/src/renderers/stl/stl-geometries/stl-plane.ts +16 -0
- package/src/renderers/stl/stl-geometries/stl-polygon.ts +35 -0
- package/src/renderers/stl/stl-geometries/stl-shape.ts +35 -0
- package/src/renderers/stl/stl.ts +33 -0
- package/src/renderers/svg/index.ts +2 -0
- package/src/renderers/svg/svg-encoding.ts +46 -0
- package/src/renderers/svg/svg-geometries/shared.ts +10 -0
- package/src/renderers/svg/svg-geometries/svg-box.ts +61 -0
- package/src/renderers/svg/svg-geometries/svg-cone.ts +52 -0
- package/src/renderers/svg/svg-geometries/svg-cylinder.ts +58 -0
- package/src/renderers/svg/svg-geometries/svg-line.ts +20 -0
- package/src/renderers/svg/svg-geometries/svg-plane.ts +44 -0
- package/src/renderers/svg/svg-geometries/svg-polygon.ts +25 -0
- package/src/renderers/svg/svg-geometries/svg-shape.ts +25 -0
- package/src/renderers/svg/svg-geometries/svg-text.ts +28 -0
- 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";
|