abstract-3d 2.7.33 → 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 (202) hide show
  1. package/lib/abstract-3d.d.ts.map +1 -1
  2. package/lib/abstract-3d.js +45 -28
  3. package/lib/abstract-3d.js.map +1 -1
  4. package/lib/renderers/dxf/dxf-encoding/dxf-build.d.ts +4 -0
  5. package/lib/renderers/dxf/dxf-encoding/dxf-build.d.ts.map +1 -0
  6. package/lib/renderers/dxf/dxf-encoding/dxf-build.js +8 -0
  7. package/lib/renderers/dxf/dxf-encoding/dxf-build.js.map +1 -0
  8. package/lib/renderers/dxf/dxf-encoding/dxf-color.js +1 -0
  9. package/lib/renderers/dxf/dxf-encoding/dxf-color.js.map +1 -1
  10. package/lib/renderers/dxf/dxf-encoding/dxf-common.d.ts +1 -3
  11. package/lib/renderers/dxf/dxf-encoding/dxf-common.d.ts.map +1 -1
  12. package/lib/renderers/dxf/dxf-encoding/dxf-common.js +0 -12
  13. package/lib/renderers/dxf/dxf-encoding/dxf-common.js.map +1 -1
  14. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.d.ts.map +1 -1
  15. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js +1 -1
  16. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js.map +1 -1
  17. package/lib/renderers/dxf/dxf-encoding/dxf-footer.d.ts.map +1 -1
  18. package/lib/renderers/dxf/dxf-encoding/dxf-footer.js +0 -1
  19. package/lib/renderers/dxf/dxf-encoding/dxf-footer.js.map +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 +0 -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-polyline.d.ts.map +1 -1
  26. package/lib/renderers/dxf/dxf-encoding/dxf-polyline.js.map +1 -1
  27. package/lib/renderers/dxf/dxf-encoding/dxf-solid.d.ts.map +1 -1
  28. package/lib/renderers/dxf/dxf-encoding/dxf-solid.js.map +1 -1
  29. package/lib/renderers/dxf/dxf-encoding/dxf-triangle.d.ts.map +1 -1
  30. package/lib/renderers/dxf/dxf-encoding/dxf-triangle.js.map +1 -1
  31. package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts.map +1 -1
  32. package/lib/renderers/dxf/dxf-geometries/dxf-box.js +1 -1
  33. package/lib/renderers/dxf/dxf-geometries/dxf-box.js.map +1 -1
  34. package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts.map +1 -1
  35. package/lib/renderers/dxf/dxf-geometries/dxf-cone.js +2 -3
  36. package/lib/renderers/dxf/dxf-geometries/dxf-cone.js.map +1 -1
  37. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts.map +1 -1
  38. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js +2 -3
  39. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js.map +1 -1
  40. package/lib/renderers/dxf/dxf-geometries/dxf-dimension.d.ts.map +1 -1
  41. package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js +1 -1
  42. package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js.map +1 -1
  43. package/lib/renderers/dxf/dxf-geometries/dxf-image.d.ts +1 -1
  44. package/lib/renderers/dxf/dxf-geometries/dxf-image.d.ts.map +1 -1
  45. package/lib/renderers/dxf/dxf-geometries/dxf-image.js +1 -1
  46. package/lib/renderers/dxf/dxf-geometries/dxf-image.js.map +1 -1
  47. package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts.map +1 -1
  48. package/lib/renderers/dxf/dxf-geometries/dxf-plane.js +1 -1
  49. package/lib/renderers/dxf/dxf-geometries/dxf-plane.js.map +1 -1
  50. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts.map +1 -1
  51. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js +1 -1
  52. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js.map +1 -1
  53. package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts.map +1 -1
  54. package/lib/renderers/dxf/dxf-geometries/dxf-shape.js +1 -1
  55. package/lib/renderers/dxf/dxf-geometries/dxf-shape.js.map +1 -1
  56. package/lib/renderers/dxf/dxf.d.ts +1 -1
  57. package/lib/renderers/dxf/dxf.d.ts.map +1 -1
  58. package/lib/renderers/dxf/dxf.js +6 -5
  59. package/lib/renderers/dxf/dxf.js.map +1 -1
  60. package/lib/renderers/react/react-camera.d.ts +1 -1
  61. package/lib/renderers/react/react-camera.d.ts.map +1 -1
  62. package/lib/renderers/react/react-camera.js +12 -17
  63. package/lib/renderers/react/react-camera.js.map +1 -1
  64. package/lib/renderers/react/react-dimension.js +1 -1
  65. package/lib/renderers/react/react-dimension.js.map +1 -1
  66. package/lib/renderers/react/react-group.d.ts +1 -1
  67. package/lib/renderers/react/react-group.d.ts.map +1 -1
  68. package/lib/renderers/react/react-group.js +4 -3
  69. package/lib/renderers/react/react-group.js.map +1 -1
  70. package/lib/renderers/react/react-hotspot.d.ts +1 -1
  71. package/lib/renderers/react/react-hotspot.d.ts.map +1 -1
  72. package/lib/renderers/react/react-hotspot.js +2 -2
  73. package/lib/renderers/react/react-hotspot.js.map +1 -1
  74. package/lib/renderers/react/react-image-material.d.ts.map +1 -1
  75. package/lib/renderers/react/react-image-material.js +1 -1
  76. package/lib/renderers/react/react-image-material.js.map +1 -1
  77. package/lib/renderers/react/react-material.d.ts.map +1 -1
  78. package/lib/renderers/react/react-material.js +3 -15
  79. package/lib/renderers/react/react-material.js.map +1 -1
  80. package/lib/renderers/react/react-mesh.d.ts +1 -1
  81. package/lib/renderers/react/react-mesh.d.ts.map +1 -1
  82. package/lib/renderers/react/react-mesh.js +9 -8
  83. package/lib/renderers/react/react-mesh.js.map +1 -1
  84. package/lib/renderers/react/react-scene.d.ts +1 -1
  85. package/lib/renderers/react/react-scene.d.ts.map +1 -1
  86. package/lib/renderers/react/react-scene.js +3 -11
  87. package/lib/renderers/react/react-scene.js.map +1 -1
  88. package/lib/renderers/react/react.d.ts +2 -2
  89. package/lib/renderers/react/react.d.ts.map +1 -1
  90. package/lib/renderers/react/react.js +3 -3
  91. package/lib/renderers/react/react.js.map +1 -1
  92. package/lib/renderers/step/step-encoding.d.ts.map +1 -1
  93. package/lib/renderers/step/step-encoding.js.map +1 -1
  94. package/lib/renderers/step/step-geometries/step-box.d.ts.map +1 -1
  95. package/lib/renderers/step/step-geometries/step-box.js +1 -1
  96. package/lib/renderers/step/step-geometries/step-box.js.map +1 -1
  97. package/lib/renderers/step/step-geometries/step-cylinder.d.ts.map +1 -1
  98. package/lib/renderers/step/step-geometries/step-cylinder.js.map +1 -1
  99. package/lib/renderers/stl/stl-geometries/stl-cone.d.ts.map +1 -1
  100. package/lib/renderers/stl/stl-geometries/stl-cone.js +1 -2
  101. package/lib/renderers/stl/stl-geometries/stl-cone.js.map +1 -1
  102. package/lib/renderers/stl/stl-geometries/stl-cylinder.d.ts.map +1 -1
  103. package/lib/renderers/stl/stl-geometries/stl-cylinder.js +1 -2
  104. package/lib/renderers/stl/stl-geometries/stl-cylinder.js.map +1 -1
  105. package/lib/renderers/stl/stl-geometries/stl-plane.d.ts.map +1 -1
  106. package/lib/renderers/stl/stl-geometries/stl-plane.js +1 -6
  107. package/lib/renderers/stl/stl-geometries/stl-plane.js.map +1 -1
  108. package/lib/renderers/stl/stl.d.ts.map +1 -1
  109. package/lib/renderers/stl/stl.js +3 -4
  110. package/lib/renderers/stl/stl.js.map +1 -1
  111. package/lib/renderers/svg/svg-encoding.d.ts.map +1 -1
  112. package/lib/renderers/svg/svg-encoding.js +3 -3
  113. package/lib/renderers/svg/svg-encoding.js.map +1 -1
  114. package/lib/renderers/svg/svg-geometries/shared.d.ts.map +1 -1
  115. package/lib/renderers/svg/svg-geometries/shared.js.map +1 -1
  116. package/lib/renderers/svg/svg-geometries/svg-box.d.ts.map +1 -1
  117. package/lib/renderers/svg/svg-geometries/svg-box.js +2 -2
  118. package/lib/renderers/svg/svg-geometries/svg-box.js.map +1 -1
  119. package/lib/renderers/svg/svg-geometries/svg-cone.d.ts.map +1 -1
  120. package/lib/renderers/svg/svg-geometries/svg-cone.js +3 -8
  121. package/lib/renderers/svg/svg-geometries/svg-cone.js.map +1 -1
  122. package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts.map +1 -1
  123. package/lib/renderers/svg/svg-geometries/svg-cylinder.js +3 -8
  124. package/lib/renderers/svg/svg-geometries/svg-cylinder.js.map +1 -1
  125. package/lib/renderers/svg/svg-geometries/svg-image.d.ts.map +1 -1
  126. package/lib/renderers/svg/svg-geometries/svg-image.js +2 -2
  127. package/lib/renderers/svg/svg-geometries/svg-image.js.map +1 -1
  128. package/lib/renderers/svg/svg-geometries/svg-line.d.ts.map +1 -1
  129. package/lib/renderers/svg/svg-geometries/svg-line.js +3 -5
  130. package/lib/renderers/svg/svg-geometries/svg-line.js.map +1 -1
  131. package/lib/renderers/svg/svg-geometries/svg-plane.d.ts.map +1 -1
  132. package/lib/renderers/svg/svg-geometries/svg-plane.js +3 -5
  133. package/lib/renderers/svg/svg-geometries/svg-plane.js.map +1 -1
  134. package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts.map +1 -1
  135. package/lib/renderers/svg/svg-geometries/svg-polygon.js +3 -5
  136. package/lib/renderers/svg/svg-geometries/svg-polygon.js.map +1 -1
  137. package/lib/renderers/svg/svg-geometries/svg-shape.d.ts.map +1 -1
  138. package/lib/renderers/svg/svg-geometries/svg-shape.js +2 -2
  139. package/lib/renderers/svg/svg-geometries/svg-shape.js.map +1 -1
  140. package/lib/renderers/svg/svg-geometries/svg-text.d.ts.map +1 -1
  141. package/lib/renderers/svg/svg-geometries/svg-text.js +1 -1
  142. package/lib/renderers/svg/svg-geometries/svg-text.js.map +1 -1
  143. package/lib/renderers/svg/svg.d.ts +1 -1
  144. package/lib/renderers/svg/svg.d.ts.map +1 -1
  145. package/lib/renderers/svg/svg.js +5 -5
  146. package/lib/renderers/svg/svg.js.map +1 -1
  147. package/lib/utils.d.ts +3 -5
  148. package/lib/utils.d.ts.map +1 -1
  149. package/lib/utils.js +12 -20
  150. package/lib/utils.js.map +1 -1
  151. package/package.json +17 -17
  152. package/src/abstract-3d.ts +68 -149
  153. package/src/custom_typings/react-three-fiber.d.ts +1 -1
  154. package/src/renderers/dxf/dxf-encoding/dxf-build.ts +10 -0
  155. package/src/renderers/dxf/dxf-encoding/dxf-color.ts +1 -0
  156. package/src/renderers/dxf/dxf-encoding/dxf-common.ts +1 -23
  157. package/src/renderers/dxf/dxf-encoding/dxf-dimension.ts +3 -26
  158. package/src/renderers/dxf/dxf-encoding/dxf-footer.ts +0 -1
  159. package/src/renderers/dxf/dxf-encoding/dxf-header.ts +0 -1
  160. package/src/renderers/dxf/dxf-encoding/dxf-line.ts +1 -7
  161. package/src/renderers/dxf/dxf-encoding/dxf-polyline.ts +1 -7
  162. package/src/renderers/dxf/dxf-encoding/dxf-solid.ts +1 -9
  163. package/src/renderers/dxf/dxf-encoding/dxf-triangle.ts +4 -16
  164. package/src/renderers/dxf/dxf-geometries/dxf-box.ts +2 -11
  165. package/src/renderers/dxf/dxf-geometries/dxf-cone.ts +3 -19
  166. package/src/renderers/dxf/dxf-geometries/dxf-cylinder.ts +4 -22
  167. package/src/renderers/dxf/dxf-geometries/dxf-dimension.ts +1 -8
  168. package/src/renderers/dxf/dxf-geometries/dxf-image.ts +3 -13
  169. package/src/renderers/dxf/dxf-geometries/dxf-plane.ts +3 -19
  170. package/src/renderers/dxf/dxf-geometries/dxf-polygon.ts +2 -9
  171. package/src/renderers/dxf/dxf-geometries/dxf-shape.ts +2 -10
  172. package/src/renderers/dxf/dxf.ts +10 -25
  173. package/src/renderers/react/react-camera.tsx +26 -25
  174. package/src/renderers/react/react-dimension.tsx +1 -7
  175. package/src/renderers/react/react-group.tsx +6 -16
  176. package/src/renderers/react/react-hotspot.tsx +4 -10
  177. package/src/renderers/react/react-image-material.tsx +1 -1
  178. package/src/renderers/react/react-material.tsx +4 -21
  179. package/src/renderers/react/react-mesh.tsx +14 -68
  180. package/src/renderers/react/react-scene.tsx +7 -21
  181. package/src/renderers/react/react.tsx +3 -3
  182. package/src/renderers/step/step-encoding.ts +36 -100
  183. package/src/renderers/step/step-geometries/step-box.ts +2 -17
  184. package/src/renderers/step/step-geometries/step-cylinder.ts +6 -36
  185. package/src/renderers/stl/stl-geometries/stl-cone.ts +1 -2
  186. package/src/renderers/stl/stl-geometries/stl-cylinder.ts +1 -2
  187. package/src/renderers/stl/stl-geometries/stl-plane.ts +1 -6
  188. package/src/renderers/stl/stl.ts +3 -7
  189. package/src/renderers/svg/svg-encoding.ts +12 -44
  190. package/src/renderers/svg/svg-geometries/shared.ts +1 -4
  191. package/src/renderers/svg/svg-geometries/svg-box.ts +2 -2
  192. package/src/renderers/svg/svg-geometries/svg-cone.ts +5 -14
  193. package/src/renderers/svg/svg-geometries/svg-cylinder.ts +5 -17
  194. package/src/renderers/svg/svg-geometries/svg-image.ts +5 -15
  195. package/src/renderers/svg/svg-geometries/svg-line.ts +3 -8
  196. package/src/renderers/svg/svg-geometries/svg-plane.ts +3 -8
  197. package/src/renderers/svg/svg-geometries/svg-polygon.ts +3 -8
  198. package/src/renderers/svg/svg-geometries/svg-shape.ts +2 -2
  199. package/src/renderers/svg/svg-geometries/svg-text.ts +1 -1
  200. package/src/renderers/svg/svg.ts +8 -18
  201. package/src/utils.ts +13 -18
  202. package/CHANGELOG.md +0 -92
@@ -4,20 +4,8 @@ import type { DxfColor } from "./dxf-color.js";
4
4
  import type { Handle } from "./dxf-common.js";
5
5
  import { dxfEncSolid } from "./dxf-solid.js";
6
6
 
7
- export const dxfEnc3DFaceTriangle = (
8
- vec1: Vec3,
9
- vec2: Vec3,
10
- vec3: Vec3,
11
- col: DxfColor,
12
- handleRef: Handle,
13
- blockRefHandle?: string
14
- ): string => dxfEnc3DFace(vec1, vec2, vec3, vec3, col, handleRef, blockRefHandle);
7
+ export const dxfEnc3DFaceTriangle = (vec1: Vec3, vec2: Vec3, vec3: Vec3, col: DxfColor, handleRef: Handle, blockRefHandle?: string): string =>
8
+ dxfEnc3DFace(vec1, vec2, vec3, vec3, col, handleRef, blockRefHandle);
15
9
 
16
- export const dxfEncSolidTriangle = (
17
- vec1: Vec3,
18
- vec2: Vec3,
19
- vec3: Vec3,
20
- col: DxfColor,
21
- handleRef: Handle,
22
- blockRefHandle?: string
23
- ): string => dxfEncSolid(vec1, vec2, vec3, vec3, col, handleRef, blockRefHandle);
10
+ export const dxfEncSolidTriangle = (vec1: Vec3, vec2: Vec3, vec3: Vec3, col: DxfColor, handleRef: Handle, blockRefHandle?: string): string =>
11
+ dxfEncSolid(vec1, vec2, vec3, vec3, col, handleRef, blockRefHandle);
@@ -1,15 +1,6 @@
1
- import {
2
- type Box,
3
- type Material,
4
- type Vec3,
5
- vec3,
6
- vec3RotCombine,
7
- vec3Scale,
8
- vec3TransRot,
9
- vec3Zero,
10
- } from "../../../abstract-3d.js";
11
- import type { Handle } from "../dxf-encoding/dxf-common.js";
1
+ import { type Box, type Material, type Vec3, vec3, vec3RotCombine, vec3Scale, vec3TransRot, vec3Zero } from "../../../abstract-3d.js";
12
2
  import { dxfEnc3DFace } from "../dxf-encoding/dxf-3dface.js";
3
+ import type { Handle } from "../dxf-encoding/dxf-common.js";
13
4
 
14
5
  export function dxfBox(b: Box, m: Material, parentPos: Vec3, parentRot: Vec3, handleRef: Handle): string {
15
6
  const pos = vec3TransRot(b.pos, parentPos, parentRot);
@@ -1,23 +1,8 @@
1
- import {
2
- type Cone,
3
- type Material,
4
- type Vec3,
5
- vec3,
6
- vec3RotCombine,
7
- vec3TransRot,
8
- vec3Zero,
9
- } from "../../../abstract-3d.js";
1
+ import { type Cone, type Material, type Vec3, vec3, vec3RotCombine, vec3TransRot, vec3Zero } from "../../../abstract-3d.js";
10
2
  import type { Handle } from "../dxf-encoding/dxf-common.js";
11
3
  import { dxfEnc3DFaceTriangle } from "../dxf-encoding/dxf-triangle.js";
12
4
 
13
- export function dxfCone(
14
- c: Cone,
15
- m: Material,
16
- sides: number,
17
- parentPos: Vec3,
18
- parentRot: Vec3,
19
- handleRef: Handle
20
- ): string {
5
+ export function dxfCone(c: Cone, m: Material, sides: number, parentPos: Vec3, parentRot: Vec3, handleRef: Handle): string {
21
6
  let dxfString = "";
22
7
  const pos = vec3TransRot(c.pos, parentPos, parentRot);
23
8
  const rot = vec3RotCombine(parentRot, c.rot ?? vec3Zero);
@@ -37,8 +22,7 @@ export function dxfCone(
37
22
  if (i !== 0) {
38
23
  const prevBot = botVec3Array[i - 1]!;
39
24
  dxfString +=
40
- dxfEnc3DFaceTriangle(botPos, prevBot, currBot, m.normal, handleRef) +
41
- dxfEnc3DFaceTriangle(currBot, prevBot, topPos, m.normal, handleRef);
25
+ dxfEnc3DFaceTriangle(botPos, prevBot, currBot, m.normal, handleRef) + dxfEnc3DFaceTriangle(currBot, prevBot, topPos, m.normal, handleRef);
42
26
  }
43
27
  currentAngle += angleStep;
44
28
  }
@@ -1,27 +1,10 @@
1
- import {
2
- type Cylinder,
3
- type Material,
4
- type Vec3,
5
- equals,
6
- vec3,
7
- vec3RotCombine,
8
- vec3Scale,
9
- vec3TransRot,
10
- vec3Zero,
11
- } from "../../../abstract-3d.js";
12
- import type { Handle } from "../dxf-encoding/dxf-common.js";
1
+ import { type Cylinder, type Material, type Vec3, equals, vec3, vec3RotCombine, vec3Scale, vec3TransRot, vec3Zero } from "../../../abstract-3d.js";
13
2
  import { dxfEnc3DFace } from "../dxf-encoding/dxf-3dface.js";
3
+ import type { Handle } from "../dxf-encoding/dxf-common.js";
14
4
  import { dxfEnc3DFaceTriangle } from "../dxf-encoding/dxf-triangle.js";
15
5
  import { dxfPlane } from "./dxf-plane.js";
16
6
 
17
- export function dxfCylinder(
18
- c: Cylinder,
19
- m: Material,
20
- sides: number,
21
- parentPos: Vec3,
22
- parentRot: Vec3,
23
- handleRef: Handle
24
- ): string {
7
+ export function dxfCylinder(c: Cylinder, m: Material, sides: number, parentPos: Vec3, parentRot: Vec3, handleRef: Handle): string {
25
8
  const pos = vec3TransRot(c.pos, parentPos, parentRot);
26
9
  const rot = vec3RotCombine(parentRot, c.rot ?? vec3Zero);
27
10
  const vec3tr = (x: number, y: number, z: number): Vec3 => vec3TransRot(vec3(x, y, z), pos, rot);
@@ -47,8 +30,7 @@ export function dxfCylinder(
47
30
  if (i !== 0 && prevBot && prevTop) {
48
31
  if (!c.open) {
49
32
  dxfString +=
50
- dxfEnc3DFaceTriangle(botPos, prevBot, currBot, m.normal, handleRef) +
51
- dxfEnc3DFaceTriangle(topPos, prevTop, currTop, m.normal, handleRef);
33
+ dxfEnc3DFaceTriangle(botPos, prevBot, currBot, m.normal, handleRef) + dxfEnc3DFaceTriangle(topPos, prevTop, currTop, m.normal, handleRef);
52
34
  }
53
35
  dxfString += dxfEnc3DFace(currBot, prevBot, prevTop, currTop, m.normal, handleRef);
54
36
  }
@@ -1,11 +1,4 @@
1
- import {
2
- type Dimension,
3
- dimensionIsOfTypeMesh,
4
- type Vec3,
5
- vec3Length,
6
- vec3Sub,
7
- vec3TransRot,
8
- } from "../../../abstract-3d.js";
1
+ import { type Dimension, dimensionIsOfTypeMesh, type Vec3, vec3Length, vec3Sub, vec3TransRot } from "../../../abstract-3d.js";
9
2
  import type { Handle } from "../dxf-encoding/dxf-common.js";
10
3
  import { type DxfDimensionDefinition, dxfEncDimension } from "../dxf-encoding/dxf-dimension.js";
11
4
 
@@ -1,19 +1,9 @@
1
+ import type { AbstractImage, Component } from "abstract-image";
2
+ import { type ImageMesh, type Vec3, vec2Scale, vec3, vec3Add, vec3Rot, vec3RotCombine, vec3TransRot, vec3Zero } from "../../../abstract-3d.js";
3
+ import type { DxfDynamicColor } from "../dxf-encoding/dxf-color.js";
1
4
  import { DEFAULT_CIRCLE_SIDE_COUNT, type Handle } from "../dxf-encoding/dxf-common.js";
2
5
  import { dxfEncLine } from "../dxf-encoding/dxf-line.js";
3
6
  import { dxfEncLwPolyline } from "../dxf-encoding/dxf-lwpolyline.js";
4
- import type { AbstractImage, Component } from "abstract-image";
5
- import type { DxfDynamicColor } from "../dxf-encoding/dxf-color.js";
6
- import {
7
- type ImageMesh,
8
- type Vec3,
9
- vec2Scale,
10
- vec3,
11
- vec3Add,
12
- vec3Rot,
13
- vec3RotCombine,
14
- vec3TransRot,
15
- vec3Zero,
16
- } from "../../../abstract-3d.js";
17
7
 
18
8
  export function dxfImage(i: ImageMesh, parentPos: Vec3, parentRot: Vec3, handleRef: Handle): string {
19
9
  const half = vec2Scale(i.size, 0.5);
@@ -1,27 +1,11 @@
1
- import {
2
- type Plane,
3
- type Material,
4
- type Vec3,
5
- vec2Scale,
6
- vec3,
7
- vec3TransRot,
8
- vec3RotCombine,
9
- vec3Zero,
10
- } from "../../../abstract-3d.js";
11
- import type { Handle } from "../dxf-encoding/dxf-common.js";
1
+ import { type Plane, type Material, type Vec3, vec2Scale, vec3, vec3TransRot, vec3RotCombine, vec3Zero } from "../../../abstract-3d.js";
12
2
  import { dxfEnc3DFace } from "../dxf-encoding/dxf-3dface.js";
3
+ import type { Handle } from "../dxf-encoding/dxf-common.js";
13
4
 
14
5
  export function dxfPlane(p: Plane, m: Material, parentPos: Vec3, parentRot: Vec3, handleRef: Handle): string {
15
6
  const half = vec2Scale(p.size, 0.5);
16
7
  const pos = vec3TransRot(p.pos, parentPos, parentRot);
17
8
  const rot = vec3RotCombine(parentRot, p.rot ?? vec3Zero);
18
9
  const vec3tr = (x: number, y: number): Vec3 => vec3TransRot(vec3(x, y, 0), pos, rot);
19
- return dxfEnc3DFace(
20
- vec3tr(-half.x, -half.y),
21
- vec3tr(half.x, -half.y),
22
- vec3tr(half.x, half.y),
23
- vec3tr(-half.x, half.y),
24
- m.normal,
25
- handleRef
26
- );
10
+ return dxfEnc3DFace(vec3tr(-half.x, -half.y), vec3tr(half.x, -half.y), vec3tr(half.x, half.y), vec3tr(-half.x, half.y), m.normal, handleRef);
27
11
  }
@@ -1,13 +1,6 @@
1
- import {
2
- type Polygon,
3
- type Material,
4
- type Vec3,
5
- vec3RotCombine,
6
- vec3TransRot,
7
- vec3Zero,
8
- } from "../../../abstract-3d.js";
9
- import type { Handle } from "../dxf-encoding/dxf-common.js";
1
+ import { type Polygon, type Material, type Vec3, vec3RotCombine, vec3TransRot, vec3Zero } from "../../../abstract-3d.js";
10
2
  import { dxfEnc3DFace } from "../dxf-encoding/dxf-3dface.js";
3
+ import type { Handle } from "../dxf-encoding/dxf-common.js";
11
4
  import { dxfEnc3DFaceTriangle } from "../dxf-encoding/dxf-triangle.js";
12
5
 
13
6
  const QUAD_STRIDE = 4;
@@ -1,14 +1,6 @@
1
- import {
2
- type Shape,
3
- type Material,
4
- type Vec3,
5
- vec3TransRot,
6
- vec3RotCombine,
7
- vec3Zero,
8
- vec3,
9
- } from "../../../abstract-3d.js";
10
- import type { Handle } from "../dxf-encoding/dxf-common.js";
1
+ import { type Shape, type Material, type Vec3, vec3TransRot, vec3RotCombine, vec3Zero, vec3 } from "../../../abstract-3d.js";
11
2
  import { dxfEnc3DFace } from "../dxf-encoding/dxf-3dface.js";
3
+ import type { Handle } from "../dxf-encoding/dxf-common.js";
12
4
  import { dxfEnc3DFaceTriangle } from "../dxf-encoding/dxf-triangle.js";
13
5
 
14
6
  const QUAD_STRIDE = 4;
@@ -20,22 +20,17 @@ import {
20
20
  vec3TransRot,
21
21
  vec3Zero,
22
22
  } from "../../abstract-3d.js";
23
- import {
24
- DEFAULT_CIRCLE_SIDE_COUNT,
25
- type DxfOrigin,
26
- type Handle,
27
- dxfBuild,
28
- dxfHandleInit,
29
- } from "./dxf-encoding/dxf-common.js";
30
23
  import { type Optional, calculateVisibleViews } from "../../utils.js";
31
- import { dxfPlane } from "./dxf-geometries/dxf-plane.js";
24
+ import { dxfBuild } from "./dxf-encoding/dxf-build.js";
25
+ import { DEFAULT_CIRCLE_SIDE_COUNT, type DxfOrigin, type Handle, dxfHandleInit } from "./dxf-encoding/dxf-common.js";
26
+ import type { DxfDimensionDefinition } from "./dxf-encoding/dxf-dimension.js";
32
27
  import { dxfBox } from "./dxf-geometries/dxf-box.js";
33
- import { dxfCylinder } from "./dxf-geometries/dxf-cylinder.js";
34
28
  import { dxfCone } from "./dxf-geometries/dxf-cone.js";
35
- import { dxfPolygon } from "./dxf-geometries/dxf-polygon.js";
36
- import { dxfImage } from "./dxf-geometries/dxf-image.js";
29
+ import { dxfCylinder } from "./dxf-geometries/dxf-cylinder.js";
37
30
  import { dxfDimension } from "./dxf-geometries/dxf-dimension.js";
38
- import type { DxfDimensionDefinition } from "./dxf-encoding/dxf-dimension.js";
31
+ import { dxfImage } from "./dxf-geometries/dxf-image.js";
32
+ import { dxfPlane } from "./dxf-geometries/dxf-plane.js";
33
+ import { dxfPolygon } from "./dxf-geometries/dxf-polygon.js";
39
34
 
40
35
  export type DxfOptions = {
41
36
  readonly view: View;
@@ -106,8 +101,7 @@ const renderInternal = (
106
101
  const [size] = sizeBoundsForCameraPos(scene.size_deprecated, unitCenter, unitRot);
107
102
  const bounds = bounds3FromPosAndSize(unitCenter, size);
108
103
  const dxfOriginOffset = originOffsetFromBounds(bounds, options.origin);
109
- const pos =
110
- options.origin === "SameAsScene" ? vec3Zero : vec3NegateY(vec3Add(unitCenter, vec3Add(offset, dxfOriginOffset)));
104
+ const pos = options.origin === "SameAsScene" ? vec3Zero : vec3NegateY(vec3Add(unitCenter, vec3Add(offset, dxfOriginOffset)));
111
105
  const visibleViews = calculateVisibleViews(options.view, scene.rotation_deprecated);
112
106
  return {
113
107
  groups: scene.groups.reduce((a, c) => a + dxfGroup(c, pos, unitRot, options, handleRef), ""),
@@ -244,10 +238,7 @@ export const renderOld = (scene: Scene, options?: Optional<DxfOptions>): string
244
238
  const viewRotation = rotationForCameraPos(opts.view);
245
239
  const unitRot = vec3RotCombine(viewRotation, scene.rotation_deprecated ?? vec3Zero);
246
240
  const bounds = bounds3FromPosAndSize(center, scene.size_deprecated);
247
- const offset = vec3Sub(
248
- opts.origin === "Center" ? vec3Zero : vec3(Math.abs(bounds.min.x), Math.abs(bounds.min.y), -bounds.max.z),
249
- center
250
- );
241
+ const offset = vec3Sub(opts.origin === "Center" ? vec3Zero : vec3(Math.abs(bounds.min.x), Math.abs(bounds.min.y), -bounds.max.z), center);
251
242
  const dimensionsPos = vec3TransRot(center, offset, unitRot);
252
243
  const visibleViews = calculateVisibleViews(opts.view, scene.rotation_deprecated);
253
244
 
@@ -264,11 +255,5 @@ export const renderOld = (scene: Scene, options?: Optional<DxfOptions>): string
264
255
  opts,
265
256
  handleRef
266
257
  );
267
- return dxfBuild(
268
- dxfGroup(groupRoot, center, unitRot, opts, handleRef),
269
- dimensions,
270
- bounds2,
271
- scene.size_deprecated,
272
- center
273
- );
258
+ return dxfBuild(dxfGroup(groupRoot, center, unitRot, opts, handleRef), dimensions, bounds2, scene.size_deprecated, center);
274
259
  };
@@ -1,4 +1,3 @@
1
- import React, { useLayoutEffect, useRef, useState } from "react";
2
1
  import {
3
2
  type GizmoHelperProps,
4
3
  PerspectiveCamera,
@@ -10,8 +9,10 @@ import {
10
9
  GizmoViewport,
11
10
  } from "@react-three/drei";
12
11
  import { type ThreeEvent, useThree } from "@react-three/fiber";
13
- import { exhaustiveCheck } from "ts-exhaustive-check";
12
+ import React, { useLayoutEffect, useRef, useState } from "react";
13
+ import type { OrthographicCamera as ThreeOrthographicCamera, PerspectiveCamera as ThreePerspectiveCamera } from "three";
14
14
  import { Vector3 } from "three";
15
+ import { exhaustiveCheck } from "ts-exhaustive-check";
15
16
  import type { View, Scene, Vec3 } from "../../abstract-3d.js";
16
17
  import { vec3 } from "../../abstract-3d.js";
17
18
 
@@ -44,6 +45,9 @@ export type ControlsHelper = (Viewcube | Viewport) & {
44
45
  type Viewcube = { readonly type: "Viewcube"; readonly viewcubeProps: GenericProps };
45
46
  type Viewport = { readonly type: "Viewport"; readonly viewportProps: GizmoViewportProps };
46
47
 
48
+ type RefInstance<C> = C extends React.ForwardRefExoticComponent<infer P> ? (P extends React.RefAttributes<infer R> ? R : never) : never;
49
+ type OrbitControlsInstance = RefInstance<typeof OrbitControls>;
50
+
47
51
  export function ReactCamera({
48
52
  useAnimations: _useAnimations,
49
53
  camera,
@@ -63,9 +67,10 @@ export function ReactCamera({
63
67
  readonly bufferZones?: BufferZones;
64
68
  readonly fitPadding?: number;
65
69
  }): React.JSX.Element {
66
- const [controls, setControls] = useState<any>(null);
67
- const perspectiveRef = useRef<any>(undefined);
68
- const orthographicRef = useRef<any>(undefined);
70
+ // oxlint-disable-next-line typescript/no-redundant-type-constituents -- oxlint's type-aware checker resolves OrbitControlsInstance (a conditional type over a forward-ref component) as `any`; tsc resolves it correctly and the `| null` is not actually redundant
71
+ const [controls, setControls] = useState<OrbitControlsInstance | null>(null);
72
+ const perspectiveRef = useRef<ThreePerspectiveCamera | undefined>(undefined);
73
+ const orthographicRef = useRef<ThreeOrthographicCamera | undefined>(undefined);
69
74
 
70
75
  const initialDistRef = useRef<number | null>(null);
71
76
  const initialTargetRef = useRef(new Vector3());
@@ -76,18 +81,18 @@ export function ReactCamera({
76
81
  const invalidate = useThree(({ invalidate }) => invalidate);
77
82
 
78
83
  const resetZoomOnGizmoClick = (): void => {
79
- if (!controls || initialDistRef.current == null || (!perspectiveRef.current && !orthographicRef.current)) {
84
+ if (!controls || initialDistRef.current === null || (!perspectiveRef.current && !orthographicRef.current)) {
80
85
  return;
81
86
  }
82
87
 
83
- const newCamera = camera.type === "Perspective" ? perspectiveRef.current : orthographicRef.current;
88
+ const newCamera = (camera.type === "Perspective" ? perspectiveRef.current : orthographicRef.current)!;
84
89
  const target = initialTargetRef.current.clone();
85
90
 
86
91
  controls.target.copy(target);
87
92
 
88
93
  const dist = initialDistRef.current;
89
94
  const dir = newCamera.position.clone().sub(target).normalize();
90
- newCamera.fov = initialFovRef.current;
95
+ (newCamera as ThreePerspectiveCamera).fov = initialFovRef.current!;
91
96
  newCamera.zoom = 1;
92
97
  newCamera.position.copy(target.clone().add(dir.multiplyScalar(dist)));
93
98
 
@@ -128,7 +133,9 @@ export function ReactCamera({
128
133
  const canvasW = canvasSize.width;
129
134
  const canvasH = canvasSize.height;
130
135
 
131
- if (canvasW === 0 || canvasH === 0) return;
136
+ if (canvasW === 0 || canvasH === 0) {
137
+ return;
138
+ }
132
139
 
133
140
  // Usable area in CSS pixels
134
141
  const usableW = Math.max(1, canvasW - bufLeft - bufRight);
@@ -145,19 +152,13 @@ export function ReactCamera({
145
152
  initialDistRef.current = dist;
146
153
 
147
154
  // Fit scene into the usable area
148
- let sceneHalfW: number;
149
- let sceneHalfH: number;
150
-
151
155
  const padFactor = 1 + fitPadding;
152
- if (sceneAspect > usableAspect) {
153
- // Scene wider than usable area — constrain by width
154
- sceneHalfW = (screenW / 2) * padFactor;
155
- sceneHalfH = (screenW / 2 / usableAspect) * padFactor;
156
- } else {
157
- // Scene taller — constrain by height
158
- sceneHalfH = (screenH / 2) * padFactor;
159
- sceneHalfW = ((usableAspect * screenH) / 2) * padFactor;
160
- }
156
+ const { sceneHalfW, sceneHalfH } =
157
+ sceneAspect > usableAspect
158
+ ? // Scene wider than usable area — constrain by width
159
+ { sceneHalfW: (screenW / 2) * padFactor, sceneHalfH: (screenW / 2 / usableAspect) * padFactor }
160
+ : // Scene taller — constrain by height
161
+ { sceneHalfH: (screenH / 2) * padFactor, sceneHalfW: ((usableAspect * screenH) / 2) * padFactor };
161
162
 
162
163
  // World units per CSS pixel in the usable area
163
164
  const wpp = (sceneHalfW * 2) / usableW;
@@ -207,7 +208,7 @@ export function ReactCamera({
207
208
  return (
208
209
  <>
209
210
  <PerspectiveCamera
210
- ref={perspectiveRef}
211
+ ref={perspectiveRef as unknown as React.RefObject<ThreePerspectiveCamera | null>}
211
212
  near={camera.near}
212
213
  far={camera.far}
213
214
  fov={camera.type === "Perspective" ? camera.fov : 75}
@@ -216,7 +217,7 @@ export function ReactCamera({
216
217
  makeDefault={camera.type === "Perspective"}
217
218
  />
218
219
  <OrthographicCamera
219
- ref={orthographicRef}
220
+ ref={orthographicRef as unknown as React.RefObject<ThreeOrthographicCamera | null>}
220
221
  up={[0, 1, 0]}
221
222
  near={camera.near}
222
223
  far={camera.far}
@@ -274,10 +275,10 @@ export function ReactCamera({
274
275
 
275
276
  const ControlsWrapper = (
276
277
  props: OrbitControlsProps & {
277
- setControls: (controls: any) => void;
278
+ setControls: (controls: OrbitControlsInstance) => void;
278
279
  }
279
280
  ): React.JSX.Element => {
280
- const ref = useRef<any>(null);
281
+ const ref = useRef<OrbitControlsInstance>(null);
281
282
 
282
283
  useLayoutEffect(() => {
283
284
  if (!ref.current) {
@@ -64,13 +64,7 @@ export function ReactDimension({
64
64
  }
65
65
 
66
66
  const DimensionMeshes = React.memo(
67
- ({
68
- meshes,
69
- children,
70
- }: {
71
- readonly meshes: ReadonlyArray<Mesh>;
72
- readonly children: React.JSX.Element;
73
- }): React.JSX.Element => (
67
+ ({ meshes, children }: { readonly meshes: ReadonlyArray<Mesh>; readonly children: React.JSX.Element }): React.JSX.Element => (
74
68
  <>
75
69
  {meshes.map((m, i) => (
76
70
  <ReactMesh key={i} mesh={m}>
@@ -1,13 +1,13 @@
1
- import React from "react";
1
+ import { Html } from "@react-three/drei";
2
2
  import type { ThreeEvent } from "@react-three/fiber";
3
3
  import { useFrame } from "@react-three/fiber";
4
+ import React from "react";
4
5
  import type { Group } from "three";
5
6
  import type { Group as Group_1 } from "../../abstract-3d.js";
7
+ import { ImageMaterial } from "./react-image-material.js";
6
8
  import type { MaterialState } from "./react-material.js";
7
9
  import { ReactMaterial } from "./react-material.js";
8
10
  import { ReactMesh } from "./react-mesh.js";
9
- import { ImageMaterial } from "./react-image-material.js";
10
- import { Html } from "@react-three/drei";
11
11
  import type { ReactPopover } from "./react-types.js";
12
12
 
13
13
  export function ReactGroup({
@@ -58,12 +58,7 @@ export function ReactGroup({
58
58
  e: ThreeEvent<MouseEvent>
59
59
  ) => void;
60
60
  readonly getTooltips?: (id: string) => ReadonlyArray<ReactPopover>;
61
- readonly createGroupKey?: (
62
- g: Group_1,
63
- idx: number,
64
- rootData: Record<string, string> | undefined,
65
- id: string
66
- ) => string;
61
+ readonly createGroupKey?: (g: Group_1, idx: number, rootData: Record<string, string> | undefined, id: string) => string;
67
62
  }): React.JSX.Element {
68
63
  const ref = React.useRef<Group>(undefined!);
69
64
  useFrame(({ invalidate }, delta) => {
@@ -82,6 +77,7 @@ export function ReactGroup({
82
77
  }
83
78
  });
84
79
  const [hovered, setHovered] = React.useState<boolean>(false);
80
+ // oxlint-disable-next-line typescript/prefer-nullish-coalescing -- `id && ...includes(id)` can legitimately be `false`, which must fall through to hoveredParent
85
81
  const hoveredFinal = hovered || (id && hoveredIdsExternal?.includes(id)) || !!hoveredParent;
86
82
  const selected = selectedIds?.[id ?? ""];
87
83
 
@@ -174,13 +170,7 @@ export function ReactGroup({
174
170
  id &&
175
171
  getTooltips &&
176
172
  getTooltips(id).map((p) => (
177
- <Html
178
- key={p.id}
179
- position={[p.pos.x, p.pos.y, p.pos.z]}
180
- center
181
- pointerEvents="none"
182
- style={{ pointerEvents: "none" }}
183
- >
173
+ <Html key={p.id} position={[p.pos.x, p.pos.y, p.pos.z]} center pointerEvents="none" style={{ pointerEvents: "none" }}>
184
174
  {p.content}
185
175
  </Html>
186
176
  ))}
@@ -1,10 +1,10 @@
1
- import React from "react";
2
1
  import { Html } from "@react-three/drei";
2
+ import type { ThreeEvent } from "@react-three/fiber";
3
+ import React from "react";
3
4
  import type { Box, HotSpot } from "../../abstract-3d.js";
4
5
  import { vec3Scale, vec3Zero } from "../../abstract-3d.js";
5
- import { ReactMesh } from "./react-mesh.js";
6
6
  import { ReactMaterial } from "./react-material.js";
7
- import type { ThreeEvent } from "@react-three/fiber";
7
+ import { ReactMesh } from "./react-mesh.js";
8
8
 
9
9
  export interface HotSpotInfo {
10
10
  readonly replaceId: string;
@@ -97,13 +97,7 @@ export function ReactHotSpot({
97
97
  <ReactMaterial isText={false} isHotSpot={true} material={h.mesh.material} hovered={hovered} />
98
98
  </ReactMesh>
99
99
  <ReactMesh mesh={{ ...h.mesh, geometry: { ...geo, size: vec3Scale(geo.size, 1.0125) } }}>
100
- <ReactMaterial
101
- isText={false}
102
- isHotSpot={true}
103
- drawBackOnly={true}
104
- material={{ normal: "rgb(0, 0, 0)", opacity: 1.0 }}
105
- hovered={hovered}
106
- />
100
+ <ReactMaterial isText={false} isHotSpot={true} drawBackOnly={true} material={{ normal: "rgb(0, 0, 0)", opacity: 1.0 }} hovered={hovered} />
107
101
  </ReactMesh>
108
102
  </group>
109
103
  {hotSpotTexts && text && (
@@ -1,6 +1,6 @@
1
+ import { createSVG } from "abstract-image";
1
2
  import React from "react";
2
3
  import { suspend } from "suspend-react";
3
- import { createSVG } from "abstract-image";
4
4
  import { CanvasTexture, DoubleSide, PlaneGeometry, SRGBColorSpace, type Texture, TextureLoader } from "three";
5
5
  import type { Material, Image as A3dImage } from "../../abstract-3d.js";
6
6
  import type { MaterialState } from "./react-material.js";
@@ -27,15 +27,9 @@ export function ReactMaterial({
27
27
  readonly isHotSpot?: boolean;
28
28
  readonly drawBackOnly?: boolean;
29
29
  }): React.JSX.Element {
30
- const mat = !materialState
31
- ? material
32
- : materialState === "Accept"
33
- ? acceptMat
34
- : materialState === "Error"
35
- ? errorMar
36
- : warningMat;
30
+ const mat = !materialState ? material : materialState === "Accept" ? acceptMat : materialState === "Error" ? errorMar : warningMat;
37
31
 
38
- const opacity = material.opacity !== undefined ? material.opacity : materialDefaults.opacity!;
32
+ const opacity = material.opacity ?? materialDefaults.opacity!;
39
33
  if (isText) {
40
34
  return (
41
35
  <meshBasicMaterial
@@ -92,17 +86,6 @@ const textSelectMat: Material = { normal: "rgb(0, 26, 65)", opacity: 1.0, metaln
92
86
  const errorMar: Material = { normal: "#b82f3a", opacity: 1.0, metalness: 0.5, roughness: 0.5 };
93
87
  const warningMat: Material = { normal: "rgb(240, 197, 48)", opacity: 1.0, metalness: 0.5, roughness: 0.5 };
94
88
 
95
- export function getColor(
96
- selected: boolean | undefined,
97
- hovered: boolean | undefined,
98
- mat: Material,
99
- selectedMat: Material
100
- ): string | undefined {
101
- return selected
102
- ? hovered
103
- ? shade(-0.4, selectedMat.normal)
104
- : selectedMat.normal
105
- : hovered
106
- ? shade(-0.4, mat.normal)
107
- : mat.normal;
89
+ export function getColor(selected: boolean | undefined, hovered: boolean | undefined, mat: Material, selectedMat: Material): string | undefined {
90
+ return selected ? (hovered ? shade(-0.4, selectedMat.normal) : selectedMat.normal) : hovered ? shade(-0.4, mat.normal) : mat.normal;
108
91
  }