abstract-3d 2.7.33 → 2.8.1
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/lib/abstract-3d.d.ts.map +1 -1
- package/lib/abstract-3d.js +45 -28
- package/lib/abstract-3d.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-build.d.ts +4 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-build.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-build.js +8 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-build.js.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-color.js +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-color.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-common.d.ts +1 -3
- package/lib/renderers/dxf/dxf-encoding/dxf-common.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-common.js +0 -12
- package/lib/renderers/dxf/dxf-encoding/dxf-common.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-footer.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-footer.js +0 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-footer.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-header.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-header.js +0 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-header.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-line.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-line.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-polyline.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-polyline.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-solid.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-solid.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-triangle.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-triangle.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-box.js +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-box.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.js +2 -3
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js +2 -3
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-image.d.ts +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-image.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-image.js +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-image.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.js +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.js +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.js.map +1 -1
- package/lib/renderers/dxf/dxf.d.ts +1 -1
- package/lib/renderers/dxf/dxf.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf.js +6 -5
- package/lib/renderers/dxf/dxf.js.map +1 -1
- package/lib/renderers/react/react-camera.d.ts +1 -1
- package/lib/renderers/react/react-camera.d.ts.map +1 -1
- package/lib/renderers/react/react-camera.js +12 -17
- package/lib/renderers/react/react-camera.js.map +1 -1
- package/lib/renderers/react/react-dimension.js +1 -1
- package/lib/renderers/react/react-dimension.js.map +1 -1
- package/lib/renderers/react/react-group.d.ts +1 -1
- package/lib/renderers/react/react-group.d.ts.map +1 -1
- package/lib/renderers/react/react-group.js +4 -3
- package/lib/renderers/react/react-group.js.map +1 -1
- package/lib/renderers/react/react-hotspot.d.ts +1 -1
- package/lib/renderers/react/react-hotspot.d.ts.map +1 -1
- package/lib/renderers/react/react-hotspot.js +2 -2
- package/lib/renderers/react/react-hotspot.js.map +1 -1
- package/lib/renderers/react/react-image-material.d.ts.map +1 -1
- package/lib/renderers/react/react-image-material.js +1 -1
- package/lib/renderers/react/react-image-material.js.map +1 -1
- package/lib/renderers/react/react-material.d.ts.map +1 -1
- package/lib/renderers/react/react-material.js +3 -15
- package/lib/renderers/react/react-material.js.map +1 -1
- package/lib/renderers/react/react-mesh.d.ts +1 -1
- package/lib/renderers/react/react-mesh.d.ts.map +1 -1
- package/lib/renderers/react/react-mesh.js +9 -8
- package/lib/renderers/react/react-mesh.js.map +1 -1
- package/lib/renderers/react/react-scene.d.ts +1 -1
- package/lib/renderers/react/react-scene.d.ts.map +1 -1
- package/lib/renderers/react/react-scene.js +3 -11
- package/lib/renderers/react/react-scene.js.map +1 -1
- package/lib/renderers/react/react.d.ts +2 -2
- package/lib/renderers/react/react.d.ts.map +1 -1
- package/lib/renderers/react/react.js +3 -3
- package/lib/renderers/react/react.js.map +1 -1
- package/lib/renderers/step/step-encoding.d.ts.map +1 -1
- package/lib/renderers/step/step-encoding.js.map +1 -1
- package/lib/renderers/step/step-geometries/step-box.d.ts.map +1 -1
- package/lib/renderers/step/step-geometries/step-box.js +1 -1
- package/lib/renderers/step/step-geometries/step-box.js.map +1 -1
- package/lib/renderers/step/step-geometries/step-cylinder.d.ts.map +1 -1
- package/lib/renderers/step/step-geometries/step-cylinder.js.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-cone.d.ts.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-cone.js +1 -2
- package/lib/renderers/stl/stl-geometries/stl-cone.js.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-cylinder.d.ts.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-cylinder.js +1 -2
- package/lib/renderers/stl/stl-geometries/stl-cylinder.js.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-plane.d.ts.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-plane.js +1 -6
- package/lib/renderers/stl/stl-geometries/stl-plane.js.map +1 -1
- package/lib/renderers/stl/stl.d.ts.map +1 -1
- package/lib/renderers/stl/stl.js +3 -4
- package/lib/renderers/stl/stl.js.map +1 -1
- package/lib/renderers/svg/svg-encoding.d.ts.map +1 -1
- package/lib/renderers/svg/svg-encoding.js +3 -3
- package/lib/renderers/svg/svg-encoding.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/shared.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/shared.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-box.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-box.js +2 -2
- package/lib/renderers/svg/svg-geometries/svg-box.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-cone.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-cone.js +3 -8
- package/lib/renderers/svg/svg-geometries/svg-cone.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-cylinder.js +3 -8
- package/lib/renderers/svg/svg-geometries/svg-cylinder.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-image.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-image.js +2 -2
- package/lib/renderers/svg/svg-geometries/svg-image.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-line.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-line.js +3 -5
- package/lib/renderers/svg/svg-geometries/svg-line.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-plane.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-plane.js +3 -5
- package/lib/renderers/svg/svg-geometries/svg-plane.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-polygon.js +3 -5
- package/lib/renderers/svg/svg-geometries/svg-polygon.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-shape.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-shape.js +2 -2
- package/lib/renderers/svg/svg-geometries/svg-shape.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-text.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-text.js +1 -1
- package/lib/renderers/svg/svg-geometries/svg-text.js.map +1 -1
- package/lib/renderers/svg/svg.d.ts +1 -1
- package/lib/renderers/svg/svg.d.ts.map +1 -1
- package/lib/renderers/svg/svg.js +5 -5
- package/lib/renderers/svg/svg.js.map +1 -1
- package/lib/utils.d.ts +3 -5
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +12 -20
- package/lib/utils.js.map +1 -1
- package/package.json +17 -17
- package/src/abstract-3d.ts +68 -149
- package/src/custom_typings/react-three-fiber.d.ts +1 -1
- package/src/renderers/dxf/dxf-encoding/dxf-build.ts +10 -0
- package/src/renderers/dxf/dxf-encoding/dxf-color.ts +1 -0
- package/src/renderers/dxf/dxf-encoding/dxf-common.ts +1 -23
- package/src/renderers/dxf/dxf-encoding/dxf-dimension.ts +3 -26
- package/src/renderers/dxf/dxf-encoding/dxf-footer.ts +0 -1
- package/src/renderers/dxf/dxf-encoding/dxf-header.ts +0 -1
- package/src/renderers/dxf/dxf-encoding/dxf-line.ts +1 -7
- package/src/renderers/dxf/dxf-encoding/dxf-polyline.ts +1 -7
- package/src/renderers/dxf/dxf-encoding/dxf-solid.ts +1 -9
- package/src/renderers/dxf/dxf-encoding/dxf-triangle.ts +4 -16
- package/src/renderers/dxf/dxf-geometries/dxf-box.ts +2 -11
- package/src/renderers/dxf/dxf-geometries/dxf-cone.ts +3 -19
- package/src/renderers/dxf/dxf-geometries/dxf-cylinder.ts +4 -22
- package/src/renderers/dxf/dxf-geometries/dxf-dimension.ts +1 -8
- package/src/renderers/dxf/dxf-geometries/dxf-image.ts +3 -13
- package/src/renderers/dxf/dxf-geometries/dxf-plane.ts +3 -19
- package/src/renderers/dxf/dxf-geometries/dxf-polygon.ts +2 -9
- package/src/renderers/dxf/dxf-geometries/dxf-shape.ts +2 -10
- package/src/renderers/dxf/dxf.ts +10 -25
- package/src/renderers/react/react-camera.tsx +26 -25
- package/src/renderers/react/react-dimension.tsx +1 -7
- package/src/renderers/react/react-group.tsx +6 -16
- package/src/renderers/react/react-hotspot.tsx +4 -10
- package/src/renderers/react/react-image-material.tsx +1 -1
- package/src/renderers/react/react-material.tsx +4 -21
- package/src/renderers/react/react-mesh.tsx +14 -68
- package/src/renderers/react/react-scene.tsx +7 -21
- package/src/renderers/react/react.tsx +3 -3
- package/src/renderers/step/step-encoding.ts +36 -100
- package/src/renderers/step/step-geometries/step-box.ts +2 -17
- package/src/renderers/step/step-geometries/step-cylinder.ts +6 -36
- package/src/renderers/stl/stl-geometries/stl-cone.ts +1 -2
- package/src/renderers/stl/stl-geometries/stl-cylinder.ts +1 -2
- package/src/renderers/stl/stl-geometries/stl-plane.ts +1 -6
- package/src/renderers/stl/stl.ts +3 -7
- package/src/renderers/svg/svg-encoding.ts +12 -44
- package/src/renderers/svg/svg-geometries/shared.ts +1 -4
- package/src/renderers/svg/svg-geometries/svg-box.ts +2 -2
- package/src/renderers/svg/svg-geometries/svg-cone.ts +5 -14
- package/src/renderers/svg/svg-geometries/svg-cylinder.ts +5 -17
- package/src/renderers/svg/svg-geometries/svg-image.ts +5 -15
- package/src/renderers/svg/svg-geometries/svg-line.ts +3 -8
- package/src/renderers/svg/svg-geometries/svg-plane.ts +3 -8
- package/src/renderers/svg/svg-geometries/svg-polygon.ts +3 -8
- package/src/renderers/svg/svg-geometries/svg-shape.ts +2 -2
- package/src/renderers/svg/svg-geometries/svg-text.ts +1 -1
- package/src/renderers/svg/svg.ts +8 -18
- package/src/utils.ts +13 -18
- 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
|
|
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
|
|
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;
|
package/src/renderers/dxf/dxf.ts
CHANGED
|
@@ -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 {
|
|
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 {
|
|
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
|
|
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 {
|
|
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
|
-
|
|
67
|
-
const
|
|
68
|
-
const
|
|
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
|
|
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)
|
|
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
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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:
|
|
278
|
+
setControls: (controls: OrbitControlsInstance) => void;
|
|
278
279
|
}
|
|
279
280
|
): React.JSX.Element => {
|
|
280
|
-
const ref = useRef<
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
}
|