abstract-3d 2.6.19 → 2.7.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.
- package/CHANGELOG.md +4 -0
- package/lib/abstract-3d.d.ts +13 -1
- package/lib/abstract-3d.d.ts.map +1 -1
- package/lib/abstract-3d.js +77 -0
- package/lib/abstract-3d.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-color.d.ts +5 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-color.d.ts.map +1 -0
- package/lib/renderers/dxf/{color.js → dxf-encoding/dxf-color.js} +24 -19
- package/lib/renderers/dxf/dxf-encoding/dxf-color.js.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-common.d.ts +13 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-common.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-common.js +23 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-common.js.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.d.ts +6 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js +50 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-footer.d.ts +2 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-footer.d.ts.map +1 -0
- package/lib/renderers/dxf/{dxf-encoding.js → dxf-encoding/dxf-footer.js} +3 -1819
- package/lib/renderers/dxf/{dxf-encoding.js.map → dxf-encoding/dxf-footer.js.map} +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-header.d.ts +3 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-header.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-header.js +1653 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-header.js.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-line.d.ts +5 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-line.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-line.js +29 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-line.js.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-polyline.d.ts +5 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-polyline.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-polyline.js +73 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-polyline.js.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-quad.d.ts +5 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-quad.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-quad.js +39 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-quad.js.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-text.d.ts +19 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-text.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-text.js +70 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-text.js.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-triangle.d.ts +5 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-triangle.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-triangle.js +3 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-triangle.js.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts +2 -2
- package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-box.js +8 -8
- package/lib/renderers/dxf/dxf-geometries/dxf-box.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts +2 -2
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.js +4 -4
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts +2 -2
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js +6 -5
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.d.ts +4 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js +13 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-image.d.ts +2 -2
- package/lib/renderers/dxf/dxf-geometries/dxf-image.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-image.js +8 -7
- package/lib/renderers/dxf/dxf-geometries/dxf-image.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts +2 -2
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.js +3 -3
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts +2 -2
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js +7 -6
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts +2 -2
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.js +6 -5
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-text.d.ts +4 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-text.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-text.js +8 -0
- package/lib/renderers/dxf/dxf-geometries/dxf-text.js.map +1 -0
- package/lib/renderers/dxf/dxf.d.ts +4 -3
- package/lib/renderers/dxf/dxf.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf.js +36 -22
- package/lib/renderers/dxf/dxf.js.map +1 -1
- package/lib/renderers/dxf/index.d.ts +1 -1
- package/lib/renderers/dxf/index.d.ts.map +1 -1
- package/lib/renderers/react/react-dimension.d.ts +4 -3
- package/lib/renderers/react/react-dimension.d.ts.map +1 -1
- package/lib/renderers/react/react-dimension.js +4 -3
- package/lib/renderers/react/react-dimension.js.map +1 -1
- package/lib/renderers/step/step-encoding.d.ts +2 -0
- package/lib/renderers/step/step-encoding.d.ts.map +1 -1
- package/lib/renderers/step/step-encoding.js +16 -3
- 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 +3 -0
- 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 +67 -21
- package/lib/renderers/step/step-geometries/step-cylinder.js.map +1 -1
- package/lib/renderers/svg/svg.d.ts.map +1 -1
- package/lib/renderers/svg/svg.js +6 -27
- package/lib/renderers/svg/svg.js.map +1 -1
- package/lib/utils.d.ts +3 -0
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +30 -0
- package/lib/utils.js.map +1 -1
- package/package.json +2 -2
- package/src/abstract-3d.ts +127 -7
- package/src/renderers/dxf/{color.ts → dxf-encoding/dxf-color.ts} +27 -20
- package/src/renderers/dxf/dxf-encoding/dxf-common.ts +31 -0
- package/src/renderers/dxf/dxf-encoding/dxf-dimension.ts +60 -0
- package/src/renderers/dxf/{dxf-encoding.ts → dxf-encoding/dxf-footer.ts} +4 -1870
- package/src/renderers/dxf/dxf-encoding/dxf-header.ts +1657 -0
- package/src/renderers/dxf/dxf-encoding/dxf-line.ts +35 -0
- package/src/renderers/dxf/dxf-encoding/dxf-polyline.ts +83 -0
- package/src/renderers/dxf/dxf-encoding/dxf-quad.ts +47 -0
- package/src/renderers/dxf/dxf-encoding/dxf-text.ts +71 -0
- package/src/renderers/dxf/dxf-encoding/dxf-triangle.ts +12 -0
- package/src/renderers/dxf/dxf-geometries/dxf-box.ts +18 -8
- package/src/renderers/dxf/dxf-geometries/dxf-cone.ts +13 -4
- package/src/renderers/dxf/dxf-geometries/dxf-cylinder.ts +13 -11
- package/src/renderers/dxf/dxf-geometries/dxf-dimension.ts +14 -0
- package/src/renderers/dxf/dxf-geometries/dxf-image.ts +11 -9
- package/src/renderers/dxf/dxf-geometries/dxf-plane.ts +7 -6
- package/src/renderers/dxf/dxf-geometries/dxf-polygon.ts +8 -6
- package/src/renderers/dxf/dxf-geometries/dxf-shape.ts +8 -6
- package/src/renderers/dxf/dxf-geometries/dxf-text.ts +9 -0
- package/src/renderers/dxf/dxf.ts +57 -39
- package/src/renderers/dxf/index.ts +1 -1
- package/src/renderers/react/react-dimension.tsx +8 -4
- package/src/renderers/step/step-encoding.ts +24 -5
- package/src/renderers/step/step-geometries/step-box.ts +6 -0
- package/src/renderers/step/step-geometries/step-cylinder.ts +303 -101
- package/src/renderers/svg/svg.ts +6 -34
- package/src/utils.ts +39 -0
- package/lib/renderers/dxf/color.d.ts +0 -7
- package/lib/renderers/dxf/color.d.ts.map +0 -1
- package/lib/renderers/dxf/color.js.map +0 -1
- package/lib/renderers/dxf/dxf-encoding.d.ts +0 -17
- package/lib/renderers/dxf/dxf-encoding.d.ts.map +0 -1
package/src/renderers/dxf/dxf.ts
CHANGED
|
@@ -1,37 +1,42 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
group,
|
|
10
|
-
bounds3ToSize,
|
|
11
|
-
vec3,
|
|
12
|
-
rotationForCameraPos,
|
|
2
|
+
type Bounds3,
|
|
3
|
+
type Dimensions,
|
|
4
|
+
type Group,
|
|
5
|
+
type Scene,
|
|
6
|
+
type Vec3,
|
|
7
|
+
type View,
|
|
8
|
+
bounds3Center,
|
|
13
9
|
bounds3FromPosAndSize,
|
|
14
|
-
Bounds3,
|
|
15
10
|
bounds3Merge,
|
|
16
|
-
|
|
17
|
-
vec3Add,
|
|
18
|
-
sizeBoundsForCameraPos,
|
|
11
|
+
bounds3ToSize,
|
|
19
12
|
boundsScene,
|
|
13
|
+
group,
|
|
14
|
+
rotationForCameraPos,
|
|
15
|
+
sizeBoundsForCameraPos,
|
|
16
|
+
vec3,
|
|
17
|
+
vec3Add,
|
|
18
|
+
vec3RotCombine,
|
|
20
19
|
vec3Sub,
|
|
20
|
+
vec3TransRot,
|
|
21
|
+
vec3Zero
|
|
21
22
|
} from "../../abstract-3d.js";
|
|
22
|
-
import { DEFAULT_CIRCLE_SIDE_COUNT,
|
|
23
|
+
import { DEFAULT_CIRCLE_SIDE_COUNT, type DxfOrigin, type Handle, dxfBuild, dxfHandleInit } from "./dxf-encoding/dxf-common.js";
|
|
24
|
+
import { type Optional, calculateVisibleViews } from "../../utils.js";
|
|
23
25
|
import { dxfPlane } from "./dxf-geometries/dxf-plane.js";
|
|
24
26
|
import { dxfBox } from "./dxf-geometries/dxf-box.js";
|
|
25
27
|
import { dxfCylinder } from "./dxf-geometries/dxf-cylinder.js";
|
|
26
28
|
import { dxfCone } from "./dxf-geometries/dxf-cone.js";
|
|
27
29
|
import { dxfPolygon } from "./dxf-geometries/dxf-polygon.js";
|
|
28
|
-
import { Optional } from "../../utils.js";
|
|
29
30
|
import { dxfImage } from "./dxf-geometries/dxf-image.js";
|
|
31
|
+
import { dxfText } from "./dxf-geometries/dxf-text.js";
|
|
32
|
+
import { dxfEncLine } from "./dxf-encoding/dxf-line.js";
|
|
33
|
+
import { dxfDimension } from "./dxf-geometries/dxf-dimension.js";
|
|
30
34
|
|
|
31
35
|
export type DxfOptions = {
|
|
32
36
|
readonly view: View;
|
|
33
37
|
readonly origin: DxfOrigin;
|
|
34
38
|
readonly cylinderSideCount: number;
|
|
39
|
+
readonly showDimensions: boolean;
|
|
35
40
|
};
|
|
36
41
|
|
|
37
42
|
export type DxfScenesOptionsBase = Omit<DxfOptions, "origin"> & { readonly origin: Exclude<DxfOrigin, "SameAsScene"> };
|
|
@@ -44,28 +49,30 @@ export type DxfScene = {
|
|
|
44
49
|
|
|
45
50
|
export function renderScenes(scenes: ReadonlyArray<DxfScene>, baseOptions?: Optional<DxfScenesOptionsBase>): string {
|
|
46
51
|
let allGroups = "";
|
|
52
|
+
let allDimensions = "";
|
|
47
53
|
const allBounds = Array<Bounds3>();
|
|
48
|
-
const handle =
|
|
54
|
+
const handle = dxfHandleInit();
|
|
49
55
|
const originOffset = originOffsetFromScenes(scenes, baseOptions?.origin ?? "Center");
|
|
50
56
|
for (const view of scenes) {
|
|
51
|
-
const { groups, size, center } = renderInternal(
|
|
57
|
+
const { groups, dimensions, size, center } = renderInternal(
|
|
52
58
|
view.scene,
|
|
53
59
|
optionsDef({ ...baseOptions, ...view.options, origin: "Center" }),
|
|
54
60
|
vec3Add(view.pos, originOffset),
|
|
55
61
|
handle
|
|
56
62
|
);
|
|
57
63
|
allGroups += groups;
|
|
64
|
+
allDimensions += dimensions;
|
|
58
65
|
allBounds.push(bounds3FromPosAndSize(center, size));
|
|
59
66
|
}
|
|
60
67
|
const bounds = bounds3Merge(...allBounds);
|
|
61
|
-
return
|
|
68
|
+
return dxfBuild(allGroups, allDimensions, bounds, bounds3ToSize(bounds), bounds3Center(bounds));
|
|
62
69
|
}
|
|
63
70
|
|
|
64
71
|
export const render = (scene: Scene, options?: Optional<DxfOptions>): string => {
|
|
65
72
|
const opts = optionsDef(options);
|
|
66
73
|
const bounds = boundsScene(scene);
|
|
67
|
-
const { groups, size, center } = renderInternal(scene, opts, vec3Zero,
|
|
68
|
-
return
|
|
74
|
+
const { groups, dimensions, size, center } = renderInternal(scene, opts, vec3Zero, dxfHandleInit());
|
|
75
|
+
return dxfBuild(groups, dimensions, bounds, size, center);
|
|
69
76
|
};
|
|
70
77
|
|
|
71
78
|
const renderInternal = (
|
|
@@ -73,7 +80,7 @@ const renderInternal = (
|
|
|
73
80
|
options: DxfOptions,
|
|
74
81
|
offset: Vec3,
|
|
75
82
|
handleRef: Handle
|
|
76
|
-
): { readonly groups: string; readonly size: Vec3; readonly center: Vec3 } => {
|
|
83
|
+
): { readonly groups: string; readonly dimensions: string; readonly size: Vec3; readonly center: Vec3 } => {
|
|
77
84
|
const unitRot = vec3RotCombine(rotationForCameraPos(options.view), scene.rotation_deprecated ?? vec3Zero);
|
|
78
85
|
const unitCenter = scene.center_deprecated ?? vec3Zero;
|
|
79
86
|
const [size] = sizeBoundsForCameraPos(scene.size_deprecated, unitCenter, unitRot);
|
|
@@ -81,8 +88,11 @@ const renderInternal = (
|
|
|
81
88
|
const dxfOriginOffset = originOffsetFromBounds(bounds, options.origin);
|
|
82
89
|
const pos =
|
|
83
90
|
options.origin === "SameAsScene" ? vec3Zero : vec3NegateY(vec3Add(unitCenter, vec3Add(offset, dxfOriginOffset)));
|
|
91
|
+
const visibleViews = calculateVisibleViews(options.view, scene.rotation_deprecated);
|
|
92
|
+
|
|
84
93
|
return {
|
|
85
94
|
groups: scene.groups.reduce((a, c) => a + dxfGroup(c, pos, unitRot, options, handleRef), ""),
|
|
95
|
+
dimensions: dxfDimensions(scene.dimensions_deprecated, vec3Zero, unitRot, visibleViews, options, handleRef),
|
|
86
96
|
size,
|
|
87
97
|
center: pos,
|
|
88
98
|
};
|
|
@@ -148,6 +158,16 @@ function dxfGroup(g: Group, parentPos: Vec3, parentRot: Vec3, options: DxfOption
|
|
|
148
158
|
dxf += dxfImage(mesh.geometry, pos, rot, handleRef);
|
|
149
159
|
break;
|
|
150
160
|
}
|
|
161
|
+
case "Line": {
|
|
162
|
+
//const start = vec3TransRot(mesh.geometry.start, pos, rot);
|
|
163
|
+
//const end = vec3TransRot(mesh.geometry.end, pos, rot);
|
|
164
|
+
//dxf += dxfEncLine(start, end, 7, handleRef);
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
case "Text": {
|
|
168
|
+
//dxf += dxfText(mesh.geometry, mesh.material, pos, rot, handleRef);
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
151
171
|
default:
|
|
152
172
|
break;
|
|
153
173
|
}
|
|
@@ -160,11 +180,19 @@ function dxfGroup(g: Group, parentPos: Vec3, parentRot: Vec3, options: DxfOption
|
|
|
160
180
|
return dxf;
|
|
161
181
|
}
|
|
162
182
|
|
|
183
|
+
function dxfDimensions(d: Dimensions | undefined, parentPos: Vec3, parentRot: Vec3, _visibleViews: Record<string, boolean>, options: DxfOptions, handleRef: Handle): string {
|
|
184
|
+
if(!d || !options.showDimensions) {
|
|
185
|
+
return "";
|
|
186
|
+
}
|
|
187
|
+
return d.dimensions.map((d) => dxfDimension(d, parentPos, parentRot, handleRef)).join("");
|
|
188
|
+
}
|
|
189
|
+
|
|
163
190
|
function optionsDef(options: Optional<DxfOptions> | undefined): DxfOptions {
|
|
164
191
|
return {
|
|
165
192
|
view: options?.view ?? "front",
|
|
166
193
|
origin: options?.origin ?? "BottomLeftFront",
|
|
167
|
-
cylinderSideCount: DEFAULT_CIRCLE_SIDE_COUNT,
|
|
194
|
+
cylinderSideCount: options?.cylinderSideCount ?? DEFAULT_CIRCLE_SIDE_COUNT,
|
|
195
|
+
showDimensions: options?.showDimensions ?? true,
|
|
168
196
|
};
|
|
169
197
|
}
|
|
170
198
|
|
|
@@ -178,22 +206,12 @@ export const renderOld = (scene: Scene, options?: Optional<DxfOptions>): string
|
|
|
178
206
|
opts.origin === "Center" ? vec3Zero : vec3(Math.abs(bounds.min.x), Math.abs(bounds.min.y), -bounds.max.z),
|
|
179
207
|
center
|
|
180
208
|
);
|
|
181
|
-
|
|
182
|
-
const
|
|
183
|
-
max: {
|
|
184
|
-
x: bounds.max.x + offset.x,
|
|
185
|
-
y: bounds.max.y + offset.y,
|
|
186
|
-
z: bounds.max.z + offset.z,
|
|
187
|
-
},
|
|
188
|
-
min: {
|
|
189
|
-
x: bounds.min.x + offset.x,
|
|
190
|
-
y: bounds.min.y + offset.y,
|
|
191
|
-
z: bounds.min.z + offset.z,
|
|
192
|
-
},
|
|
193
|
-
};
|
|
209
|
+
const dimensionsPos = vec3TransRot(center, offset, unitRot);
|
|
210
|
+
const visibleViews = calculateVisibleViews(opts.view, scene.rotation_deprecated);
|
|
194
211
|
|
|
195
212
|
const bounds2 = bounds3FromPosAndSize(offset, scene.size_deprecated);
|
|
196
213
|
const groupRoot = group([], offset, vec3Zero, scene.groups);
|
|
197
|
-
const handleRef =
|
|
198
|
-
|
|
214
|
+
const handleRef = dxfHandleInit();
|
|
215
|
+
const dimensions = dxfDimensions(scene.dimensions_deprecated, dimensionsPos, unitRot, visibleViews, opts, handleRef);
|
|
216
|
+
return dxfBuild(dxfGroup(groupRoot, center, unitRot, opts, handleRef), dimensions, bounds2, scene.size_deprecated, center);
|
|
199
217
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from "./dxf.js";
|
|
2
|
-
export type { DxfOrigin } from "./dxf-encoding.js";
|
|
2
|
+
export type { DxfOrigin } from "./dxf-encoding/dxf-common.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useFrame } from "@react-three/fiber";
|
|
2
2
|
import React from "react";
|
|
3
3
|
import type { Group } from "three";
|
|
4
|
-
import { Dimensions, Vec3, Dimension, vec3TransRot, vec3Flip, Mesh } from "../../abstract-3d.js";
|
|
4
|
+
import { Dimensions, Vec3, Dimension, vec3TransRot, vec3Flip, Mesh, dimensionConvertToTypeMesh, vec3Zero, Material } from "../../abstract-3d.js";
|
|
5
5
|
import { ReactMaterial } from "./react-material.js";
|
|
6
6
|
import { ReactMesh } from "./react-mesh.js";
|
|
7
7
|
|
|
@@ -26,7 +26,8 @@ export const ReactDimensions = React.memo(
|
|
|
26
26
|
{dimensions?.dimensions.map((dimension, i) => (
|
|
27
27
|
<ReactDimension
|
|
28
28
|
key={i}
|
|
29
|
-
|
|
29
|
+
dimension={dimension}
|
|
30
|
+
material={dimensions.material}
|
|
30
31
|
visible={showDimensions}
|
|
31
32
|
sceneRotation={sceneRotation}
|
|
32
33
|
sceneCenter={sceneCenter}
|
|
@@ -40,18 +41,21 @@ export const ReactDimensions = React.memo(
|
|
|
40
41
|
);
|
|
41
42
|
|
|
42
43
|
export function ReactDimension({
|
|
43
|
-
|
|
44
|
+
dimension,
|
|
45
|
+
material,
|
|
44
46
|
visible,
|
|
45
47
|
children,
|
|
46
48
|
sceneRotation,
|
|
47
49
|
sceneCenter,
|
|
48
50
|
}: {
|
|
49
|
-
readonly
|
|
51
|
+
readonly dimension: Dimension;
|
|
52
|
+
readonly material: Material;
|
|
50
53
|
readonly visible: boolean;
|
|
51
54
|
readonly children: React.JSX.Element;
|
|
52
55
|
readonly sceneRotation: Vec3 | undefined;
|
|
53
56
|
readonly sceneCenter: Vec3 | undefined;
|
|
54
57
|
}): React.JSX.Element {
|
|
58
|
+
const d = dimensionConvertToTypeMesh(dimension, sceneRotation ?? vec3Zero, material);
|
|
55
59
|
const ref = React.useRef<Group>(undefined!);
|
|
56
60
|
useFrame(({ camera }) => {
|
|
57
61
|
ref.current.visible =
|
|
@@ -2,6 +2,8 @@ import { Vec2, Vec3 } from "../../abstract-3d.js";
|
|
|
2
2
|
|
|
3
3
|
export type MutableStep = { refs: Map<string, number>; step: string; geoContext3d: number; };
|
|
4
4
|
|
|
5
|
+
export const STEP_NUMBER_EPSILON: number = 1e-5;
|
|
6
|
+
|
|
5
7
|
const mutate = (step: string, m: MutableStep): number => {
|
|
6
8
|
const prevRef = m.refs.get(step);
|
|
7
9
|
if (prevRef !== undefined) {
|
|
@@ -15,6 +17,20 @@ const mutate = (step: string, m: MutableStep): number => {
|
|
|
15
17
|
}
|
|
16
18
|
};
|
|
17
19
|
|
|
20
|
+
const stepNumber = (num: number): number => {
|
|
21
|
+
const absNum = Math.abs(num);
|
|
22
|
+
if(absNum < STEP_NUMBER_EPSILON) {
|
|
23
|
+
return 0.0;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const roundNum = Math.round(num);
|
|
27
|
+
if(Math.abs(absNum - Math.abs(roundNum)) < STEP_NUMBER_EPSILON) {
|
|
28
|
+
return roundNum;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return num;
|
|
32
|
+
}
|
|
33
|
+
|
|
18
34
|
export const HEADER = (date: string): string =>
|
|
19
35
|
`ISO-10303-21;
|
|
20
36
|
HEADER;
|
|
@@ -32,16 +48,16 @@ END-ISO-10303-21;`;
|
|
|
32
48
|
|
|
33
49
|
export const CARTESIAN_POINT = (p: Vec3 | Vec2, m: MutableStep): number =>
|
|
34
50
|
mutate(
|
|
35
|
-
`CARTESIAN_POINT('',(${p.x},${p.y}${
|
|
36
|
-
(p as Vec3)?.z !== undefined ? `,${(p as Vec3).z}` : ""
|
|
51
|
+
`CARTESIAN_POINT('',(${stepNumber(p.x)},${stepNumber(p.y)}${
|
|
52
|
+
(p as Vec3)?.z !== undefined ? `,${stepNumber((p as Vec3).z)}` : ""
|
|
37
53
|
}))`,
|
|
38
54
|
m
|
|
39
55
|
);
|
|
40
56
|
|
|
41
57
|
export const DIRECTION = (d: Vec3 | Vec2, m: MutableStep): number =>
|
|
42
58
|
mutate(
|
|
43
|
-
`DIRECTION('',(${d.x},${d.y}${
|
|
44
|
-
(d as Vec3)?.z !== undefined ? `,${(d as Vec3).z}` : ""
|
|
59
|
+
`DIRECTION('',(${stepNumber(d.x)},${stepNumber(d.y)}${
|
|
60
|
+
(d as Vec3)?.z !== undefined ? `,${stepNumber((d as Vec3).z)}` : ""
|
|
45
61
|
}))`,
|
|
46
62
|
m
|
|
47
63
|
);
|
|
@@ -96,7 +112,10 @@ export const PCURVE = (
|
|
|
96
112
|
): number => mutate(`PCURVE('',#${CYLINDRICAL_SURFACE_or_PLANE},#${DEFINITIONAL_REPRESENTATION})`, m);
|
|
97
113
|
|
|
98
114
|
export const CYLINDRICAL_SURFACE = (AXIS2_PLACEMENT_3D: number, radius: number, m: MutableStep): number =>
|
|
99
|
-
mutate(`CYLINDRICAL_SURFACE('',#${AXIS2_PLACEMENT_3D},${radius})`, m);
|
|
115
|
+
mutate(`CYLINDRICAL_SURFACE('',#${AXIS2_PLACEMENT_3D},${stepNumber(radius)})`, m);
|
|
116
|
+
|
|
117
|
+
export const CONICAL_SURFACE = (AXIS2_PLACEMENT_3D: number, radius: number, semiAngle: number, m: MutableStep): number =>
|
|
118
|
+
mutate(`CONICAL_SURFACE('',#${AXIS2_PLACEMENT_3D},${stepNumber(radius)},${stepNumber(semiAngle)})`, m);
|
|
100
119
|
|
|
101
120
|
export const DEFINITIONAL_REPRESENTATION = (LINEorCircle: number, m: MutableStep): number =>
|
|
102
121
|
mutate(`DEFINITIONAL_REPRESENTATION('',(#${LINEorCircle}),#7)`, m);
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
vec3Sub,
|
|
12
12
|
vec3Add,
|
|
13
13
|
vec3Rot,
|
|
14
|
+
vec3Length,
|
|
14
15
|
} from "../../../abstract-3d.js";
|
|
15
16
|
import { parseRgb } from "../../../utils.js";
|
|
16
17
|
import {
|
|
@@ -44,6 +45,7 @@ import {
|
|
|
44
45
|
PRODUCT_DEFINITION_FORMATION,
|
|
45
46
|
PRODUCT_DEFINITION_SHAPE,
|
|
46
47
|
SHAPE_DEFINITION_REPRESENTATION,
|
|
48
|
+
STEP_NUMBER_EPSILON,
|
|
47
49
|
STYLED_ITEM,
|
|
48
50
|
SURFACE_SIDE_STYLE,
|
|
49
51
|
SURFACE_STYLE_FILL_AREA,
|
|
@@ -60,6 +62,10 @@ export function stepBox(b: Box, mat: Material, parentPos: Vec3, parentRot: Vec3,
|
|
|
60
62
|
const color = parseRgb(mat.normal);
|
|
61
63
|
const rotate = (v: Vec3): Vec3 => vec3Rot(v, vec3Zero, rotation);
|
|
62
64
|
|
|
65
|
+
if(size.x === 0.0 || size.y === 0.0 || size.z === 0.0) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
|
|
63
69
|
const corners = [
|
|
64
70
|
vec3(0, 0, 0),
|
|
65
71
|
vec3(0, 0, size.z),
|