abstract-3d 2.7.32 → 2.8.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 (209) hide show
  1. package/README.md +1 -1
  2. package/lib/abstract-3d.d.ts +1 -1
  3. package/lib/abstract-3d.d.ts.map +1 -1
  4. package/lib/abstract-3d.js +46 -29
  5. package/lib/abstract-3d.js.map +1 -1
  6. package/lib/renderers/dxf/dxf-encoding/dxf-build.d.ts +4 -0
  7. package/lib/renderers/dxf/dxf-encoding/dxf-build.d.ts.map +1 -0
  8. package/lib/renderers/dxf/dxf-encoding/dxf-build.js +8 -0
  9. package/lib/renderers/dxf/dxf-encoding/dxf-build.js.map +1 -0
  10. package/lib/renderers/dxf/dxf-encoding/dxf-color.js +3 -2
  11. package/lib/renderers/dxf/dxf-encoding/dxf-color.js.map +1 -1
  12. package/lib/renderers/dxf/dxf-encoding/dxf-common.d.ts +1 -3
  13. package/lib/renderers/dxf/dxf-encoding/dxf-common.d.ts.map +1 -1
  14. package/lib/renderers/dxf/dxf-encoding/dxf-common.js +3 -10
  15. package/lib/renderers/dxf/dxf-encoding/dxf-common.js.map +1 -1
  16. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.d.ts.map +1 -1
  17. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js +1 -1
  18. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js.map +1 -1
  19. package/lib/renderers/dxf/dxf-encoding/dxf-footer.js +1 -1
  20. package/lib/renderers/dxf/dxf-encoding/dxf-header.d.ts.map +1 -1
  21. package/lib/renderers/dxf/dxf-encoding/dxf-header.js +1 -1
  22. package/lib/renderers/dxf/dxf-encoding/dxf-header.js.map +1 -1
  23. package/lib/renderers/dxf/dxf-encoding/dxf-line.d.ts.map +1 -1
  24. package/lib/renderers/dxf/dxf-encoding/dxf-line.js.map +1 -1
  25. package/lib/renderers/dxf/dxf-encoding/dxf-lwpolyline.d.ts.map +1 -1
  26. package/lib/renderers/dxf/dxf-encoding/dxf-lwpolyline.js +1 -3
  27. package/lib/renderers/dxf/dxf-encoding/dxf-lwpolyline.js.map +1 -1
  28. package/lib/renderers/dxf/dxf-encoding/dxf-mtext.d.ts.map +1 -1
  29. package/lib/renderers/dxf/dxf-encoding/dxf-mtext.js +0 -1
  30. package/lib/renderers/dxf/dxf-encoding/dxf-mtext.js.map +1 -1
  31. package/lib/renderers/dxf/dxf-encoding/dxf-polyline.d.ts.map +1 -1
  32. package/lib/renderers/dxf/dxf-encoding/dxf-polyline.js.map +1 -1
  33. package/lib/renderers/dxf/dxf-encoding/dxf-solid.d.ts.map +1 -1
  34. package/lib/renderers/dxf/dxf-encoding/dxf-solid.js.map +1 -1
  35. package/lib/renderers/dxf/dxf-encoding/dxf-triangle.d.ts.map +1 -1
  36. package/lib/renderers/dxf/dxf-encoding/dxf-triangle.js.map +1 -1
  37. package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts.map +1 -1
  38. package/lib/renderers/dxf/dxf-geometries/dxf-box.js +1 -1
  39. package/lib/renderers/dxf/dxf-geometries/dxf-box.js.map +1 -1
  40. package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts.map +1 -1
  41. package/lib/renderers/dxf/dxf-geometries/dxf-cone.js +2 -3
  42. package/lib/renderers/dxf/dxf-geometries/dxf-cone.js.map +1 -1
  43. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts.map +1 -1
  44. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js +2 -3
  45. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js.map +1 -1
  46. package/lib/renderers/dxf/dxf-geometries/dxf-dimension.d.ts.map +1 -1
  47. package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js.map +1 -1
  48. package/lib/renderers/dxf/dxf-geometries/dxf-image.d.ts +1 -1
  49. package/lib/renderers/dxf/dxf-geometries/dxf-image.d.ts.map +1 -1
  50. package/lib/renderers/dxf/dxf-geometries/dxf-image.js +4 -9
  51. package/lib/renderers/dxf/dxf-geometries/dxf-image.js.map +1 -1
  52. package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts.map +1 -1
  53. package/lib/renderers/dxf/dxf-geometries/dxf-plane.js +1 -1
  54. package/lib/renderers/dxf/dxf-geometries/dxf-plane.js.map +1 -1
  55. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts.map +1 -1
  56. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js +1 -1
  57. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js.map +1 -1
  58. package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts.map +1 -1
  59. package/lib/renderers/dxf/dxf-geometries/dxf-shape.js.map +1 -1
  60. package/lib/renderers/dxf/dxf.d.ts +1 -1
  61. package/lib/renderers/dxf/dxf.d.ts.map +1 -1
  62. package/lib/renderers/dxf/dxf.js +6 -5
  63. package/lib/renderers/dxf/dxf.js.map +1 -1
  64. package/lib/renderers/react/react-camera.d.ts +1 -1
  65. package/lib/renderers/react/react-camera.d.ts.map +1 -1
  66. package/lib/renderers/react/react-camera.js +13 -18
  67. package/lib/renderers/react/react-camera.js.map +1 -1
  68. package/lib/renderers/react/react-dimension.js +1 -1
  69. package/lib/renderers/react/react-dimension.js.map +1 -1
  70. package/lib/renderers/react/react-group.d.ts +1 -1
  71. package/lib/renderers/react/react-group.d.ts.map +1 -1
  72. package/lib/renderers/react/react-group.js +4 -3
  73. package/lib/renderers/react/react-group.js.map +1 -1
  74. package/lib/renderers/react/react-hotspot.d.ts +1 -1
  75. package/lib/renderers/react/react-hotspot.d.ts.map +1 -1
  76. package/lib/renderers/react/react-hotspot.js +2 -2
  77. package/lib/renderers/react/react-hotspot.js.map +1 -1
  78. package/lib/renderers/react/react-image-material.d.ts.map +1 -1
  79. package/lib/renderers/react/react-image-material.js +5 -6
  80. package/lib/renderers/react/react-image-material.js.map +1 -1
  81. package/lib/renderers/react/react-material.d.ts.map +1 -1
  82. package/lib/renderers/react/react-material.js +3 -15
  83. package/lib/renderers/react/react-material.js.map +1 -1
  84. package/lib/renderers/react/react-mesh.d.ts +1 -1
  85. package/lib/renderers/react/react-mesh.d.ts.map +1 -1
  86. package/lib/renderers/react/react-mesh.js +10 -9
  87. package/lib/renderers/react/react-mesh.js.map +1 -1
  88. package/lib/renderers/react/react-scene.d.ts +1 -1
  89. package/lib/renderers/react/react-scene.d.ts.map +1 -1
  90. package/lib/renderers/react/react-scene.js +3 -11
  91. package/lib/renderers/react/react-scene.js.map +1 -1
  92. package/lib/renderers/react/react.d.ts +2 -2
  93. package/lib/renderers/react/react.d.ts.map +1 -1
  94. package/lib/renderers/react/react.js +4 -4
  95. package/lib/renderers/react/react.js.map +1 -1
  96. package/lib/renderers/step/step-encoding.d.ts.map +1 -1
  97. package/lib/renderers/step/step-encoding.js.map +1 -1
  98. package/lib/renderers/step/step-geometries/step-box.d.ts.map +1 -1
  99. package/lib/renderers/step/step-geometries/step-box.js +1 -1
  100. package/lib/renderers/step/step-geometries/step-box.js.map +1 -1
  101. package/lib/renderers/step/step-geometries/step-cylinder.d.ts.map +1 -1
  102. package/lib/renderers/step/step-geometries/step-cylinder.js.map +1 -1
  103. package/lib/renderers/stl/stl-geometries/stl-cone.d.ts.map +1 -1
  104. package/lib/renderers/stl/stl-geometries/stl-cone.js +1 -2
  105. package/lib/renderers/stl/stl-geometries/stl-cone.js.map +1 -1
  106. package/lib/renderers/stl/stl-geometries/stl-cylinder.d.ts.map +1 -1
  107. package/lib/renderers/stl/stl-geometries/stl-cylinder.js +1 -2
  108. package/lib/renderers/stl/stl-geometries/stl-cylinder.js.map +1 -1
  109. package/lib/renderers/stl/stl-geometries/stl-plane.d.ts.map +1 -1
  110. package/lib/renderers/stl/stl-geometries/stl-plane.js +1 -6
  111. package/lib/renderers/stl/stl-geometries/stl-plane.js.map +1 -1
  112. package/lib/renderers/stl/stl.d.ts.map +1 -1
  113. package/lib/renderers/stl/stl.js +3 -4
  114. package/lib/renderers/stl/stl.js.map +1 -1
  115. package/lib/renderers/svg/svg-encoding.d.ts.map +1 -1
  116. package/lib/renderers/svg/svg-encoding.js +3 -3
  117. package/lib/renderers/svg/svg-encoding.js.map +1 -1
  118. package/lib/renderers/svg/svg-geometries/shared.d.ts.map +1 -1
  119. package/lib/renderers/svg/svg-geometries/shared.js.map +1 -1
  120. package/lib/renderers/svg/svg-geometries/svg-box.d.ts.map +1 -1
  121. package/lib/renderers/svg/svg-geometries/svg-box.js +2 -2
  122. package/lib/renderers/svg/svg-geometries/svg-box.js.map +1 -1
  123. package/lib/renderers/svg/svg-geometries/svg-cone.d.ts.map +1 -1
  124. package/lib/renderers/svg/svg-geometries/svg-cone.js +4 -9
  125. package/lib/renderers/svg/svg-geometries/svg-cone.js.map +1 -1
  126. package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts.map +1 -1
  127. package/lib/renderers/svg/svg-geometries/svg-cylinder.js +4 -9
  128. package/lib/renderers/svg/svg-geometries/svg-cylinder.js.map +1 -1
  129. package/lib/renderers/svg/svg-geometries/svg-image.d.ts.map +1 -1
  130. package/lib/renderers/svg/svg-geometries/svg-image.js +2 -2
  131. package/lib/renderers/svg/svg-geometries/svg-image.js.map +1 -1
  132. package/lib/renderers/svg/svg-geometries/svg-line.d.ts.map +1 -1
  133. package/lib/renderers/svg/svg-geometries/svg-line.js +3 -5
  134. package/lib/renderers/svg/svg-geometries/svg-line.js.map +1 -1
  135. package/lib/renderers/svg/svg-geometries/svg-plane.d.ts.map +1 -1
  136. package/lib/renderers/svg/svg-geometries/svg-plane.js +3 -5
  137. package/lib/renderers/svg/svg-geometries/svg-plane.js.map +1 -1
  138. package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts.map +1 -1
  139. package/lib/renderers/svg/svg-geometries/svg-polygon.js +3 -5
  140. package/lib/renderers/svg/svg-geometries/svg-polygon.js.map +1 -1
  141. package/lib/renderers/svg/svg-geometries/svg-shape.d.ts.map +1 -1
  142. package/lib/renderers/svg/svg-geometries/svg-shape.js +2 -2
  143. package/lib/renderers/svg/svg-geometries/svg-shape.js.map +1 -1
  144. package/lib/renderers/svg/svg-geometries/svg-text.d.ts.map +1 -1
  145. package/lib/renderers/svg/svg-geometries/svg-text.js +1 -1
  146. package/lib/renderers/svg/svg-geometries/svg-text.js.map +1 -1
  147. package/lib/renderers/svg/svg.d.ts +1 -1
  148. package/lib/renderers/svg/svg.d.ts.map +1 -1
  149. package/lib/renderers/svg/svg.js +5 -5
  150. package/lib/renderers/svg/svg.js.map +1 -1
  151. package/lib/utils.d.ts +3 -5
  152. package/lib/utils.d.ts.map +1 -1
  153. package/lib/utils.js +12 -20
  154. package/lib/utils.js.map +1 -1
  155. package/package.json +17 -17
  156. package/src/abstract-3d.ts +70 -151
  157. package/src/custom_typings/react-three-fiber.d.ts +1 -1
  158. package/src/renderers/dxf/dxf-encoding/dxf-3dface.ts +1 -1
  159. package/src/renderers/dxf/dxf-encoding/dxf-build.ts +10 -0
  160. package/src/renderers/dxf/dxf-encoding/dxf-color.ts +27 -26
  161. package/src/renderers/dxf/dxf-encoding/dxf-common.ts +9 -17
  162. package/src/renderers/dxf/dxf-encoding/dxf-dimension.ts +3 -26
  163. package/src/renderers/dxf/dxf-encoding/dxf-footer.ts +2 -2
  164. package/src/renderers/dxf/dxf-encoding/dxf-header.ts +14 -4
  165. package/src/renderers/dxf/dxf-encoding/dxf-line.ts +2 -8
  166. package/src/renderers/dxf/dxf-encoding/dxf-lwpolyline.ts +21 -17
  167. package/src/renderers/dxf/dxf-encoding/dxf-mtext.ts +12 -3
  168. package/src/renderers/dxf/dxf-encoding/dxf-polyline.ts +3 -10
  169. package/src/renderers/dxf/dxf-encoding/dxf-solid.ts +2 -10
  170. package/src/renderers/dxf/dxf-encoding/dxf-triangle.ts +4 -16
  171. package/src/renderers/dxf/dxf-geometries/dxf-box.ts +2 -11
  172. package/src/renderers/dxf/dxf-geometries/dxf-cone.ts +3 -19
  173. package/src/renderers/dxf/dxf-geometries/dxf-cylinder.ts +4 -22
  174. package/src/renderers/dxf/dxf-geometries/dxf-dimension.ts +10 -3
  175. package/src/renderers/dxf/dxf-geometries/dxf-image.ts +11 -33
  176. package/src/renderers/dxf/dxf-geometries/dxf-plane.ts +3 -19
  177. package/src/renderers/dxf/dxf-geometries/dxf-polygon.ts +9 -28
  178. package/src/renderers/dxf/dxf-geometries/dxf-shape.ts +5 -5
  179. package/src/renderers/dxf/dxf.ts +10 -25
  180. package/src/renderers/react/react-camera.tsx +27 -26
  181. package/src/renderers/react/react-dimension.tsx +1 -7
  182. package/src/renderers/react/react-group.tsx +6 -16
  183. package/src/renderers/react/react-hotspot.tsx +4 -10
  184. package/src/renderers/react/react-image-material.tsx +7 -8
  185. package/src/renderers/react/react-material.tsx +4 -21
  186. package/src/renderers/react/react-mesh.tsx +15 -69
  187. package/src/renderers/react/react-scene.tsx +7 -21
  188. package/src/renderers/react/react.tsx +4 -4
  189. package/src/renderers/step/step-encoding.ts +36 -100
  190. package/src/renderers/step/step-geometries/step-box.ts +2 -17
  191. package/src/renderers/step/step-geometries/step-cylinder.ts +6 -36
  192. package/src/renderers/stl/stl-geometries/stl-cone.ts +1 -2
  193. package/src/renderers/stl/stl-geometries/stl-cylinder.ts +1 -2
  194. package/src/renderers/stl/stl-geometries/stl-plane.ts +1 -6
  195. package/src/renderers/stl/stl.ts +3 -7
  196. package/src/renderers/svg/svg-encoding.ts +12 -44
  197. package/src/renderers/svg/svg-geometries/shared.ts +1 -4
  198. package/src/renderers/svg/svg-geometries/svg-box.ts +2 -2
  199. package/src/renderers/svg/svg-geometries/svg-cone.ts +6 -15
  200. package/src/renderers/svg/svg-geometries/svg-cylinder.ts +6 -18
  201. package/src/renderers/svg/svg-geometries/svg-image.ts +7 -17
  202. package/src/renderers/svg/svg-geometries/svg-line.ts +3 -8
  203. package/src/renderers/svg/svg-geometries/svg-plane.ts +3 -8
  204. package/src/renderers/svg/svg-geometries/svg-polygon.ts +3 -8
  205. package/src/renderers/svg/svg-geometries/svg-shape.ts +2 -2
  206. package/src/renderers/svg/svg-geometries/svg-text.ts +1 -1
  207. package/src/renderers/svg/svg.ts +8 -18
  208. package/src/utils.ts +13 -18
  209. package/CHANGELOG.md +0 -92
@@ -28,9 +28,7 @@ export function svgPolygon(
28
28
  const [mask, maskAttribute] = svgHoleMask(rot, size, holes ?? []);
29
29
  const pol = `<polygon points="${points
30
30
  .reduce((a, c) => (a += `${c.x.toFixed(0)},${c.y.toFixed(0)} `), "")
31
- .slice(0, -1)}" fill="${fill}" fill-opacity="${opacity.toFixed(
32
- 1
33
- )}" stroke="${stroke}" stroke-width="${strokeWidth}" ${maskAttribute}/>`;
31
+ .slice(0, -1)}" fill="${fill}" fill-opacity="${opacity.toFixed(1)}" stroke="${stroke}" stroke-width="${strokeWidth}" ${maskAttribute}/>`;
34
32
  return mask + pol + svgStrokedHoles(pos, rot, holes ?? [], stroke, strokeWidth);
35
33
  }
36
34
 
@@ -46,21 +44,13 @@ export function svgCircle(
46
44
  ): string {
47
45
  const size = vec2Scale(vec2(radius, radius), 2);
48
46
  const [mask, maskAttribute] = svgHoleMask(rot, size, holes ?? []);
49
- const cir = `<circle r="${radius.toFixed(0)}" cx="${pos.x.toFixed(0)}" cy="${pos.y.toFixed(
50
- 0
51
- )}" fill="${fill}" fill-opacity="${opacity.toFixed(
47
+ const cir = `<circle r="${radius.toFixed(0)}" cx="${pos.x.toFixed(0)}" cy="${pos.y.toFixed(0)}" fill="${fill}" fill-opacity="${opacity.toFixed(
52
48
  1
53
49
  )}" stroke="${stroke}" stroke-width="${strokeWidth}" ${maskAttribute}/>`;
54
50
  return mask + cir + svgStrokedHoles(pos, rot, holes ?? [], stroke, strokeWidth);
55
51
  }
56
52
 
57
- function svgStrokedHoles(
58
- pos: Vec2,
59
- rot: Vec3,
60
- holes: ReadonlyArray<Hole>,
61
- strokeColor: string,
62
- strokeThickness: number
63
- ): string {
53
+ function svgStrokedHoles(pos: Vec2, rot: Vec3, holes: ReadonlyArray<Hole>, strokeColor: string, strokeThickness: number): string {
64
54
  if (strokeThickness <= Number.EPSILON) {
65
55
  return "";
66
56
  }
@@ -100,19 +90,14 @@ function svgStrokedHoles(
100
90
  />`;
101
91
  break;
102
92
  }
93
+ default:
94
+ break;
103
95
  }
104
96
  }
105
97
  return svgHoles;
106
98
  }
107
99
 
108
- export const svgCircle2 = (
109
- radius: number,
110
- pos: Vec2,
111
- fill: string,
112
- stroke: string,
113
- strokeWidth: number,
114
- _holes?: ReadonlyArray<Hole>
115
- ): string =>
100
+ export const svgCircle2 = (radius: number, pos: Vec2, fill: string, stroke: string, strokeWidth: number, _holes?: ReadonlyArray<Hole>): string =>
116
101
  `<circle r="${radius.toFixed(0)}" cx="${pos.x.toFixed(0)}" cy="${pos.y.toFixed(
117
102
  0
118
103
  )}" fill="${fill}" stroke="${stroke}" stroke-width="${strokeWidth}" />`;
@@ -138,9 +123,7 @@ function svgMaskHoles(rot: Vec3, size: Vec2, holes: ReadonlyArray<Hole>): string
138
123
  switch (hole.type) {
139
124
  case "RoundHole": {
140
125
  holeMasks.push(
141
- `<ellipse cx="${holePos.x / size.x}" cy="${holePos.y / size.y}" rx="${hole.radius / size.x}" ry="${
142
- hole.radius / size.y
143
- }" fill="black" />`
126
+ `<ellipse cx="${holePos.x / size.x}" cy="${holePos.y / size.y}" rx="${hole.radius / size.x}" ry="${hole.radius / size.y}" fill="black" />`
144
127
  );
145
128
  break;
146
129
  }
@@ -165,29 +148,16 @@ function svgMaskHoles(rot: Vec3, size: Vec2, holes: ReadonlyArray<Hole>): string
165
148
  export const svgText = (text: string, matrix: string, color: string, font: string, fontSize: number): string =>
166
149
  `<text font-family="${font}" font-size="${fontSize}px" text-anchor="middle" alignment-baseline="middle" fill="${color}" transform="${matrix}">${text}</text>`;
167
150
 
168
- export type EmbededImage =
169
- | { readonly type: "url"; readonly url: string }
170
- | { readonly type: "svg"; readonly svg: string };
151
+ export type EmbededImage = { readonly type: "url"; readonly url: string } | { readonly type: "svg"; readonly svg: string };
171
152
 
172
153
  export const rawSvgPrefix = "data:image/svg+xml,";
173
154
 
174
- export const svgImage = (
175
- p: Vec2,
176
- size: Vec2,
177
- rot: Vec3,
178
- data: EmbededImage,
179
- background?: string,
180
- scale?: Vec2
181
- ): string => {
155
+ export const svgImage = (p: Vec2, size: Vec2, rot: Vec3, data: EmbededImage, background?: string, scale?: Vec2): string => {
182
156
  const matrix = svgTrsMatrix(p, rot, scale);
183
157
 
184
158
  if (data.type === "url") {
185
- const bg = background
186
- ? `<rect width="${size.x.toFixed(0)}" height="${size.y.toFixed(0)}" fill="${background}"/>`
187
- : "";
188
- return `<g transform="${matrix}">${bg}<image width="${size.x.toFixed(0)}" height="${size.y.toFixed(0)}" href="${
189
- data.url
190
- }"/></g>`;
159
+ const bg = background ? `<rect width="${size.x.toFixed(0)}" height="${size.y.toFixed(0)}" fill="${background}"/>` : "";
160
+ return `<g transform="${matrix}">${bg}<image width="${size.x.toFixed(0)}" height="${size.y.toFixed(0)}" href="${data.url}"/></g>`;
191
161
  }
192
162
 
193
163
  // scale maps image-space coords → world coords, so the wrapper SVG and rect
@@ -195,9 +165,7 @@ export const svgImage = (
195
165
  const imgW = scale ? size.x / scale.x : size.x;
196
166
  const imgH = scale ? size.y / scale.y : size.y;
197
167
  const bg = background ? `<rect width="${imgW.toFixed(0)}" height="${imgH.toFixed(0)}" fill="${background}"/>` : "";
198
- return `<g transform="${matrix}"><svg width="${imgW.toFixed(0)}" height="${imgH.toFixed(0)}">${bg}${
199
- data.svg
200
- }</svg></g>`;
168
+ return `<g transform="${matrix}"><svg width="${imgW.toFixed(0)}" height="${imgH.toFixed(0)}">${bg}${data.svg}</svg></g>`;
201
169
  };
202
170
 
203
171
  const counter = (() => {
@@ -12,10 +12,7 @@ export const white = "rgb(255, 255, 255)";
12
12
  export const transparent = "rgba(255, 255, 255, 0)";
13
13
  export const black = "rgb(15, 15, 15)";
14
14
 
15
- export type ImageDataUri =
16
- | `data:image/png;base64,${string}`
17
- | `data:image/jpeg;base64,${string}`
18
- | `data:image/svg+xml,${string}`;
15
+ export type ImageDataUri = `data:image/png;base64,${string}` | `data:image/jpeg;base64,${string}` | `data:image/svg+xml,${string}`;
19
16
 
20
17
  export type SvgOptions = {
21
18
  readonly view: View;
@@ -1,9 +1,9 @@
1
1
  import type { Box, Vec2, Vec3, Material } from "../../../abstract-3d.js";
2
2
  import { vec3Scale, vec3TransRot, vec3RotCombine, vec3Zero, vec3, vec3ZMean } from "../../../abstract-3d.js";
3
+ import { rgbGrayScale } from "../../../utils.js";
4
+ import { svgPolygon } from "../svg-encoding.js";
3
5
  import type { zOrderElement, SvgOptions } from "./shared.js";
4
6
  import { gray, black, zElem } from "./shared.js";
5
- import { svgPolygon } from "../svg-encoding.js";
6
- import { rgbGrayScale } from "../../../utils.js";
7
7
 
8
8
  export function box(
9
9
  b: Box,
@@ -1,9 +1,9 @@
1
1
  import type { Cone, Vec2, Vec3, Material } from "../../../abstract-3d.js";
2
2
  import { vec3, vec3TransRot, vec3RotCombine, vec3Zero, vec3ZMean, equals } from "../../../abstract-3d.js";
3
+ import { rgbGrayScale } from "../../../utils.js";
4
+ import { svgCircle, svgPolygon } from "../svg-encoding.js";
3
5
  import type { zOrderElement, SvgOptions } from "./shared.js";
4
6
  import { gray, stBW, zElem, transparent } from "./shared.js";
5
- import { svgCircle, svgPolygon } from "../svg-encoding.js";
6
- import { rgbGrayScale } from "../../../utils.js";
7
7
 
8
8
  export function cone(
9
9
  c: Cone,
@@ -36,26 +36,17 @@ export function cone(
36
36
  botVec3Array.push(currBot);
37
37
  if (i !== 0) {
38
38
  const prevBot = botVec3Array[i - 1]!;
39
- const points = [
40
- point(currBot.x, currBot.y),
41
- point(prevBot.x, prevBot.y),
42
- point(topPos.x, topPos.y),
43
- point(topPos.x, topPos.y),
44
- ];
45
- zOrderComponents.push(
46
- zElem(svgPolygon(rot, points, fill, opacity, stroke, stBW), vec3ZMean(currBot, prevBot, topPos))
47
- );
39
+ const points = [point(currBot.x, currBot.y), point(prevBot.x, prevBot.y), point(topPos.x, topPos.y), point(topPos.x, topPos.y)];
40
+ zOrderComponents.push(zElem(svgPolygon(rot, points, fill, opacity, stroke, stBW), vec3ZMean(currBot, prevBot, topPos)));
48
41
  }
49
42
  currentAngle += angleStep;
50
43
  }
51
44
 
52
45
  // Add circle if direcly facing camera
53
- const cylTop = vec3tr(vec3(0, +half.y, 0));
46
+ const cylTop = vec3tr(vec3(0, half.y, 0));
54
47
  const cylBottom = vec3tr(vec3(0, -half.y, 0));
55
48
  if (equals(cylTop.x, cylBottom.x, 0.1) && equals(cylTop.y, cylBottom.y, 0.1)) {
56
- zOrderComponents.push(
57
- zElem(svgCircle(c.radius, rot, point(cylBottom.x, cylBottom.y), fill, opacity, stroke, stBW), cylBottom.z)
58
- );
49
+ zOrderComponents.push(zElem(svgCircle(c.radius, rot, point(cylBottom.x, cylBottom.y), fill, opacity, stroke, stBW), cylBottom.z));
59
50
  }
60
51
 
61
52
  return zOrderComponents;
@@ -1,9 +1,9 @@
1
1
  import type { Cylinder, Vec2, Vec3, Material } from "../../../abstract-3d.js";
2
2
  import { vec3, vec3TransRot, vec3RotCombine, vec3Zero, vec3ZMean, equals } from "../../../abstract-3d.js";
3
+ import { rgbGrayScale } from "../../../utils.js";
4
+ import { svgCircle, svgPolygon } from "../svg-encoding.js";
3
5
  import type { SvgOptions, zOrderElement } from "./shared.js";
4
6
  import { gray, stBW, transparent, zElem } from "./shared.js";
5
- import { svgCircle, svgPolygon } from "../svg-encoding.js";
6
- import { rgbGrayScale } from "../../../utils.js";
7
7
 
8
8
  export function cylinder(
9
9
  c: Cylinder,
@@ -42,30 +42,18 @@ export function cylinder(
42
42
  const prevBot = botVec3Array[i - 1]!;
43
43
  const prevTop = topVec3Array[i - 1]!;
44
44
 
45
- const points = [
46
- point(currBot.x, currBot.y),
47
- point(prevBot.x, prevBot.y),
48
- point(prevTop.x, prevTop.y),
49
- point(currTop.x, currTop.y),
50
- ];
51
- zOrderComponents.push(
52
- zElem(svgPolygon(rot, points, fill, opacity, stroke, stBW), vec3ZMean(currBot, prevBot, currTop, prevTop))
53
- );
45
+ const points = [point(currBot.x, currBot.y), point(prevBot.x, prevBot.y), point(prevTop.x, prevTop.y), point(currTop.x, currTop.y)];
46
+ zOrderComponents.push(zElem(svgPolygon(rot, points, fill, opacity, stroke, stBW), vec3ZMean(currBot, prevBot, currTop, prevTop)));
54
47
  }
55
48
  currentAngle += angleStep;
56
49
  }
57
50
  if (!c.open) {
58
51
  // Add circle if direcly facing camera
59
- const circleTop = vec3tr(vec3(0, +half.y, 0));
52
+ const circleTop = vec3tr(vec3(0, half.y, 0));
60
53
  const circleBottom = vec3tr(vec3(0, -half.y, 0));
61
54
  if (equals(circleTop.x, circleBottom.x, 0.1) && equals(circleTop.y, circleBottom.y, 0.1)) {
62
55
  const circlePos = circleTop.z > circleBottom.z ? circleTop : circleBottom;
63
- zOrderComponents.push(
64
- zElem(
65
- svgCircle(c.radius, rot, point(circlePos.x, circlePos.y), fill, opacity, stroke, stBW, c.holes),
66
- circlePos.z
67
- )
68
- );
56
+ zOrderComponents.push(zElem(svgCircle(c.radius, rot, point(circlePos.x, circlePos.y), fill, opacity, stroke, stBW, c.holes), circlePos.z));
69
57
  }
70
58
  }
71
59
  return zOrderComponents;
@@ -1,11 +1,11 @@
1
1
  import { createSVG } from "abstract-image";
2
+ import { exhaustiveCheck } from "ts-exhaustive-check";
2
3
  import type { ImageMesh, Vec2, Vec3 } from "../../../abstract-3d.js";
3
4
  import { vec2Scale, vec3TransRot, vec3RotCombine, vec3Zero, vec3 } from "../../../abstract-3d.js";
4
- import type { zOrderElement, SvgOptions } from "./shared.js";
5
- import { zElem } from "./shared.js";
6
5
  import type { EmbededImage } from "../svg-encoding.js";
7
6
  import { rawSvgPrefix, svgImage } from "../svg-encoding.js";
8
- import { exhaustiveCheck } from "ts-exhaustive-check";
7
+ import type { zOrderElement, SvgOptions } from "./shared.js";
8
+ import { zElem } from "./shared.js";
9
9
 
10
10
  export function image(
11
11
  i: ImageMesh,
@@ -29,14 +29,7 @@ export function image(
29
29
  y: i.size.y / i.image.image.size.height,
30
30
  };
31
31
  const svg = createSVG(i.image.image, opts);
32
- const img = svgImage(
33
- point(v4.x, v4.y),
34
- i.size,
35
- rot,
36
- { type: "svg", svg },
37
- opts.imageBg ? opts.background : undefined,
38
- scale
39
- );
32
+ const img = svgImage(point(v4.x, v4.y), i.size, rot, { type: "svg", svg }, opts.imageBg ? opts.background : undefined, scale);
40
33
  return [zElem(img, (v2.z + v4.z) / 2)];
41
34
  }
42
35
  case "Url": {
@@ -44,14 +37,11 @@ export function image(
44
37
  const image: EmbededImage | undefined = imageData?.startsWith(rawSvgPrefix)
45
38
  ? {
46
39
  type: "svg",
47
- svg: decodeURIComponent(imageData.slice(rawSvgPrefix.length)).replace(
48
- /^\s*(<\?xml[^>]*\?>\s*)?(<!DOCTYPE[^>]*>\s*)?/i,
49
- ""
50
- ),
40
+ svg: decodeURIComponent(imageData.slice(rawSvgPrefix.length)).replace(/^\s*(<\?xml[^>]*\?>\s*)?(<!DOCTYPE[^>]*>\s*)?/i, ""),
51
41
  }
52
42
  : i.image.url
53
- ? { type: "url", url: imageData ?? i.image.url }
54
- : undefined;
43
+ ? { type: "url", url: imageData ?? i.image.url }
44
+ : undefined;
55
45
 
56
46
  if (image) {
57
47
  const img = svgImage(point(v4.x, v4.y), i.size, rot, image, opts.imageBg ? opts.background : undefined);
@@ -1,9 +1,9 @@
1
1
  import type { CulledLine, Line, Vec2, Vec3 } from "../../../abstract-3d.js";
2
2
  import { vec3TransRot, vec3ZMean } from "../../../abstract-3d.js";
3
+ import { rgbGrayScale } from "../../../utils.js";
4
+ import { svgLine } from "../svg-encoding.js";
3
5
  import type { SvgOptions, zOrderElement } from "./shared.js";
4
6
  import { zElem } from "./shared.js";
5
- import { svgLine } from "../svg-encoding.js";
6
- import { rgbGrayScale } from "../../../utils.js";
7
7
 
8
8
  export function line(
9
9
  l: Line | CulledLine,
@@ -15,10 +15,5 @@ export function line(
15
15
  ): ReadonlyArray<zOrderElement> {
16
16
  const v1 = vec3TransRot(l.start, parentPos, parentRot);
17
17
  const v2 = vec3TransRot(l.end, parentPos, parentRot);
18
- return [
19
- zElem(
20
- svgLine(point(v1.x, v1.y), point(v2.x, v2.y), opts.gray_scale ? rgbGrayScale(fill) : fill, l.thickness),
21
- vec3ZMean(v1, v2)
22
- ),
23
- ];
18
+ return [zElem(svgLine(point(v1.x, v1.y), point(v2.x, v2.y), opts.gray_scale ? rgbGrayScale(fill) : fill, l.thickness), vec3ZMean(v1, v2))];
24
19
  }
@@ -1,9 +1,9 @@
1
1
  import type { Plane, Vec2, Vec3, Material, Hole } from "../../../abstract-3d.js";
2
2
  import { vec2Scale, vec3TransRot, vec3RotCombine, vec3Zero, vec3, vec3ZMean } from "../../../abstract-3d.js";
3
+ import { rgbGrayScale } from "../../../utils.js";
4
+ import { svgPolygon } from "../svg-encoding.js";
3
5
  import type { zOrderElement, SvgOptions } from "./shared.js";
4
6
  import { gray, black, zElem } from "./shared.js";
5
- import { svgPolygon } from "../svg-encoding.js";
6
- import { rgbGrayScale } from "../../../utils.js";
7
7
 
8
8
  export function plane(
9
9
  p: Plane,
@@ -29,10 +29,5 @@ export function plane(
29
29
  const [strokeColor, fill, strokeThickness] = opts.only_stroke
30
30
  ? [opts.gray_scale ? gray : material.normal, opts.background, opts.stroke_thickness]
31
31
  : [black, opts.gray_scale ? rgbGrayScale(material.normal) : material.normal, 0];
32
- return [
33
- zElem(
34
- svgPolygon(rot, points, fill, material.opacity ?? 1.0, strokeColor, strokeThickness, holes),
35
- vec3ZMean(v1, v2, v3, v4)
36
- ),
37
- ];
32
+ return [zElem(svgPolygon(rot, points, fill, material.opacity ?? 1.0, strokeColor, strokeThickness, holes), vec3ZMean(v1, v2, v3, v4))];
38
33
  }
@@ -1,9 +1,9 @@
1
1
  import type { Polygon, Vec3, Vec2, Material } from "../../../abstract-3d.js";
2
2
  import { vec3ZMean, vec3TransRot, vec3RotCombine, vec3Zero } from "../../../abstract-3d.js";
3
+ import { rgbGrayScale } from "../../../utils.js";
4
+ import { svgPolygon } from "../svg-encoding.js";
3
5
  import type { zOrderElement, SvgOptions } from "./shared.js";
4
6
  import { gray, zElem, transparent } from "./shared.js";
5
- import { svgPolygon } from "../svg-encoding.js";
6
- import { rgbGrayScale } from "../../../utils.js";
7
7
 
8
8
  export function polygon(
9
9
  p: Polygon,
@@ -21,10 +21,5 @@ export function polygon(
21
21
  const [strokeColor, fill, strokeThickness] = opts.only_stroke
22
22
  ? [opts.gray_scale ? gray : color, opts.background, opts.stroke_thickness]
23
23
  : [transparent, opts.gray_scale ? rgbGrayScale(color) : color, 0];
24
- return [
25
- zElem(
26
- svgPolygon(rot, points, fill, material.opacity ?? 1.0, strokeColor, strokeThickness),
27
- vec3ZMean(...rotatedPoints)
28
- ),
29
- ];
24
+ return [zElem(svgPolygon(rot, points, fill, material.opacity ?? 1.0, strokeColor, strokeThickness), vec3ZMean(...rotatedPoints))];
30
25
  }
@@ -1,9 +1,9 @@
1
1
  import type { Vec3, Vec2, Shape, Material } from "../../../abstract-3d.js";
2
2
  import { vec3ZMean, vec3TransRot, vec3RotCombine, vec3, vec3Zero } from "../../../abstract-3d.js";
3
+ import { rgbGrayScale } from "../../../utils.js";
4
+ import { svgPolygon } from "../svg-encoding.js";
3
5
  import type { zOrderElement, SvgOptions } from "./shared.js";
4
6
  import { gray, zElem, transparent } from "./shared.js";
5
- import { svgPolygon } from "../svg-encoding.js";
6
- import { rgbGrayScale } from "../../../utils.js";
7
7
 
8
8
  export function shape(
9
9
  s: Shape,
@@ -1,8 +1,8 @@
1
1
  import type { Text, Vec2, Vec3 } from "../../../abstract-3d.js";
2
2
  import { vec3TransRot, vec3RotCombine, vec3Zero, vec3, vec3Dot, vec3Rot } from "../../../abstract-3d.js";
3
+ import { svgText } from "../svg-encoding.js";
3
4
  import type { SvgOptions, zOrderElement } from "./shared.js";
4
5
  import { svgTrsMatrix, zElem } from "./shared.js";
5
- import { svgText } from "../svg-encoding.js";
6
6
 
7
7
  const SVG_FORWARD: Vec3 = vec3(0.0, 0.0, 1.0);
8
8
  const SVG_DOT_OPPOSITE_THRESHOLD: number = -0.9;
@@ -16,19 +16,19 @@ import {
16
16
  vec3Flip,
17
17
  dimensionConvertToTypeMesh,
18
18
  } from "../../abstract-3d.js";
19
+ import type { Optional } from "../../utils.js";
20
+ import { calculateVisibleViews, isViewVisible } from "../../utils.js";
21
+ import { svg } from "./svg-encoding.js";
19
22
  import type { SvgOptions, zOrderElement } from "./svg-geometries/shared.js";
20
23
  import { box } from "./svg-geometries/svg-box.js";
24
+ import { cone } from "./svg-geometries/svg-cone.js";
21
25
  import { cylinder } from "./svg-geometries/svg-cylinder.js";
26
+ import { image } from "./svg-geometries/svg-image.js";
22
27
  import { line } from "./svg-geometries/svg-line.js";
23
28
  import { plane } from "./svg-geometries/svg-plane.js";
24
- import { shape } from "./svg-geometries/svg-shape.js";
25
29
  import { polygon } from "./svg-geometries/svg-polygon.js";
30
+ import { shape } from "./svg-geometries/svg-shape.js";
26
31
  import { text } from "./svg-geometries/svg-text.js";
27
- import { cone } from "./svg-geometries/svg-cone.js";
28
- import type { Optional } from "../../utils.js";
29
- import { calculateVisibleViews, isViewVisible } from "../../utils.js";
30
- import { svg } from "./svg-encoding.js";
31
- import { image } from "./svg-geometries/svg-image.js";
32
32
 
33
33
  export type SvgScene = {
34
34
  readonly scene: Scene;
@@ -109,11 +109,7 @@ function renderInternal(
109
109
  const visibleViews = calculateVisibleViews(opts.view, scene.rotation_deprecated);
110
110
 
111
111
  for (const dim of scene.dimensions_deprecated?.dimensions ?? []) {
112
- const d = dimensionConvertToTypeMesh(
113
- dim,
114
- scene.rotation_deprecated ?? vec3Zero,
115
- scene.dimensions_deprecated?.material
116
- );
112
+ const d = dimensionConvertToTypeMesh(dim, scene.rotation_deprecated ?? vec3Zero, scene.dimensions_deprecated?.material);
117
113
  if (isViewVisible(d.views[0], visibleViews)) {
118
114
  const pos = vec3TransRot(d.pos, unitCenterFlipped, unitRot);
119
115
  const rot = vec3RotCombine(unitRot, d.rot);
@@ -125,13 +121,7 @@ function renderInternal(
125
121
  return { elements, size: svgSize, center: svgCenter };
126
122
  }
127
123
 
128
- function svgGroup(
129
- g: Group,
130
- parentPos: Vec3,
131
- parentRot: Vec3,
132
- point: (x: number, y: number) => Vec2,
133
- opts: SvgOptions
134
- ): ReadonlyArray<zOrderElement> {
124
+ function svgGroup(g: Group, parentPos: Vec3, parentRot: Vec3, point: (x: number, y: number) => Vec2, opts: SvgOptions): ReadonlyArray<zOrderElement> {
135
125
  const pos = vec3TransRot(g.pos, parentPos, parentRot);
136
126
  const rot = vec3RotCombine(parentRot, g.rot ?? vec3Zero);
137
127
  const elements = Array<zOrderElement>();
package/src/utils.ts CHANGED
@@ -1,3 +1,4 @@
1
+ // oxlint-disable no-bitwise
1
2
  import type { Vec3, View } from "./abstract-3d.js";
2
3
  import { vec3, vec3Rot, vec3Zero } from "./abstract-3d.js";
3
4
 
@@ -43,15 +44,13 @@ export function rgbGrayScale(color: string): string {
43
44
  }
44
45
 
45
46
  /**
46
- * This will take a HEX or RGB web color. pSBC can shade it darker or lighter,
47
- * or blend it with a second color, and can also pass it right thru but convert
48
- * from Hex to RGB (Hex2RGB) or RGB to Hex (RGB2Hex).
49
- * All without you even knowing what color format you are using.
47
+ * This will take a HEX or RGB web color. pSBC can shade it darker or lighter, or blend it with a second color, and can also pass it right thru but
48
+ * convert from Hex to RGB (Hex2RGB) or RGB to Hex (RGB2Hex). All without you even knowing what color format you are using.
50
49
  *
51
50
  * @param {number} p - From 0 to 1 Percentage float (Required).
52
51
  * @param {string} from - The starting color in HEX or RGB format.
53
52
  * @param {string} [to] - The ending color in HEX or RGB format, optional.
54
- * @returns {string|null} Either Hex or RGB color. Null if invalid color or percentage number.
53
+ * @returns {string | null} Either Hex or RGB color. Null if invalid color or percentage number.
55
54
  */
56
55
 
57
56
  export function shade(p: number, from: string, to?: string): string | undefined {
@@ -60,7 +59,7 @@ export function shade(p: number, from: string, to?: string): string | undefined
60
59
  p < -1 ||
61
60
  p > 1 ||
62
61
  typeof from !== "string" ||
63
- (from[0] !== "r" && from[0] !== "#") ||
62
+ (!from.startsWith("r") && !from.startsWith("#")) ||
64
63
  (to && typeof to !== "string")
65
64
  ) {
66
65
  return undefined; // ErrorCheck
@@ -72,13 +71,17 @@ export function shade(p: number, from: string, to?: string): string | undefined
72
71
 
73
72
  if (l > 9) {
74
73
  const dArr = d.split(",");
75
- if (dArr.length < 3 || dArr.length > 4) return null; // ErrorCheck
74
+ if (dArr.length < 3 || dArr.length > 4) {
75
+ return null;
76
+ } // ErrorCheck
76
77
  RGB[0] = i(dArr[0]!.split("(")[1]!);
77
78
  RGB[1] = i(dArr[1]!);
78
79
  RGB[2] = i(dArr[2]!);
79
80
  RGB[3] = dArr[3] ? parseFloat(dArr[3]) : -1;
80
81
  } else {
81
- if (l === 8 || l === 6 || l < 4) return null; // ErrorCheck
82
+ if (l === 8 || l === 6 || l < 4) {
83
+ return null;
84
+ } // ErrorCheck
82
85
  if (l < 6) {
83
86
  d = "#" + d[1] + d[1] + d[2] + d[2] + d[3] + d[3] + (l > 4 ? String(d[4]) + d[4] : ""); // 3 or 4 digit
84
87
  }
@@ -124,9 +127,7 @@ export function shade(p: number, from: string, to?: string): string | undefined
124
127
  r((t[2]! - f[2]!) * p + f[2]!) +
125
128
  (f[3]! < 0 && t[3]! < 0
126
129
  ? ")"
127
- : "," +
128
- (f[3]! > -1 && t[3]! > -1 ? r(((t[3]! - f[3]!) * p + f[3]!) * 10000) / 10000 : t[3]! < 0 ? f[3] : t[3]) +
129
- ")")
130
+ : "," + (f[3]! > -1 && t[3]! > -1 ? r(((t[3]! - f[3]!) * p + f[3]!) * 10000) / 10000 : t[3]! < 0 ? f[3] : t[3]) + ")")
130
131
  );
131
132
  }
132
133
 
@@ -137,13 +138,7 @@ export function shade(p: number, from: string, to?: string): string | undefined
137
138
  r((t[0]! - f[0]!) * p + f[0]!) * 0x1000000 +
138
139
  r((t[1]! - f[1]!) * p + f[1]!) * 0x10000 +
139
140
  r((t[2]! - f[2]!) * p + f[2]!) * 0x100 +
140
- (f[3]! > -1 && t[3]! > -1
141
- ? r(((t[3]! - f[3]!) * p + f[3]!) * 255)
142
- : t[3]! > -1
143
- ? r(t[3]! * 255)
144
- : f[3]! > -1
145
- ? r(f[3]! * 255)
146
- : 255)
141
+ (f[3]! > -1 && t[3]! > -1 ? r(((t[3]! - f[3]!) * p + f[3]!) * 255) : t[3]! > -1 ? r(t[3]! * 255) : f[3]! > -1 ? r(f[3]! * 255) : 255)
147
142
  )
148
143
  .toString(16)
149
144
  .slice(1, f[3]! > -1 || t[3]! > -1 ? undefined : -2)
package/CHANGELOG.md DELETED
@@ -1,92 +0,0 @@
1
- # Change Log
2
-
3
- All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/).
4
-
5
- ## [2.7.31] - 2026-09-05
6
-
7
- - Internal: adopt `verbatimModuleSyntax` and stricter compiler/lint settings (no unused locals/params, no bracket-free index-signature access, no non-null-assertion lint rule dropped). No functional changes.
8
-
9
- ## v2.7.4
10
-
11
- - Added culled lines
12
-
13
- ## v2.7.0
14
-
15
- - Added support for aligned dimensions for native dimension support in DXF
16
-
17
- ## v2.4.0
18
-
19
- - Added support for tooltips.
20
-
21
- ## v2.2.0
22
-
23
- - Added flag to react 3d renderer allowing user to force reset pan and zoom on cube/viewport click
24
-
25
- ## v2.1.0
26
-
27
- - Made dxf exporter use LINE and POLYLINE instead of 3DFACE for the lines and polylines
28
-
29
- ## v2.0.9
30
-
31
- - Made Text only front sided
32
-
33
- ## v1.7.0
34
-
35
- - Allow using the abstract 3d scene origin in the DXF export
36
-
37
- ## v1.6.0
38
-
39
- - Included abstract image and made a new Image component to draw abstract images.
40
-
41
- ## v1.4.0
42
-
43
- - Added a flag to turn off alpha test on texture materials.
44
-
45
- ## v1.3.9
46
-
47
- - Added a setting for the dxf exporter to specify the sides of the cylinders.
48
-
49
- ## v1.3.4
50
-
51
- - Bugfix Polygon: THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported.
52
-
53
- ## v1.3.1
54
-
55
- - Text bounds calculation.
56
-
57
- ## v1.3.0
58
-
59
- - Exposed functions to calculate bounds from geometry.
60
-
61
- ## v1.2.2
62
-
63
- - Fixed the square holes to the SVG renderer
64
- - Added opacity to the SVG elements
65
-
66
- ## v1.2.0
67
-
68
- - Added holes rendering to the SVG renderer
69
-
70
- ## v1.1.4
71
-
72
- - Added screen space ambient occlusion
73
-
74
- ## v1.1.0
75
-
76
- - Added outlines to hotspots
77
-
78
- ## v0.9.0
79
-
80
- - Added React event to React renderer callbacks
81
-
82
- ## v0.8.0
83
-
84
- - Added reactPopovers to React renderer
85
-
86
- ## v0.7.0
87
-
88
- - Added onHoverGroup to React renderer
89
-
90
- ## v0.1.0 - 2024-06-05
91
-
92
- - Start of changelog.