abstract-3d 2.9.3 → 2.10.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/lib/abstract-3d.d.ts +4 -1
- package/lib/abstract-3d.d.ts.map +1 -1
- package/lib/abstract-3d.js +4 -2
- package/lib/abstract-3d.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 +15 -21
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js.map +1 -1
- package/lib/renderers/react/react-mesh.d.ts.map +1 -1
- package/lib/renderers/react/react-mesh.js +51 -21
- package/lib/renderers/react/react-mesh.js.map +1 -1
- package/lib/renderers/step/step-geometries/step-cone.d.ts.map +1 -1
- package/lib/renderers/step/step-geometries/step-cone.js +1 -9
- package/lib/renderers/step/step-geometries/step-cone.js.map +1 -1
- package/lib/renderers/step/step-geometries/step-cylinder.d.ts +1 -1
- package/lib/renderers/step/step-geometries/step-cylinder.d.ts.map +1 -1
- package/lib/renderers/step/step-geometries/step-cylinder.js +2 -2
- package/lib/renderers/step/step-geometries/step-cylinder.js.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-cylinder.d.ts +1 -1
- package/lib/renderers/stl/stl-geometries/stl-cylinder.d.ts.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-cylinder.js +9 -17
- package/lib/renderers/stl/stl-geometries/stl-cylinder.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 +11 -9
- package/lib/renderers/svg/svg-geometries/svg-cylinder.js.map +1 -1
- package/package.json +2 -2
- package/src/abstract-3d.ts +8 -2
- package/src/renderers/dxf/dxf-geometries/dxf-cylinder.ts +15 -22
- package/src/renderers/react/react-mesh.tsx +76 -64
- package/src/renderers/step/step-geometries/step-cone.ts +2 -10
- package/src/renderers/step/step-geometries/step-cylinder.ts +2 -2
- package/src/renderers/stl/stl-geometries/stl-cylinder.ts +9 -17
- package/src/renderers/svg/svg-geometries/svg-cylinder.ts +11 -9
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
import type { Material, Vec3, Cone
|
|
1
|
+
import type { Material, Vec3, Cone } from "../../../abstract-3d.js";
|
|
2
2
|
import type { MutableStep } from "../step-encoding.js";
|
|
3
3
|
import { stepCylinder } from "./step-cylinder.js";
|
|
4
4
|
|
|
5
5
|
export function stepCone(c: Cone, mat: Material, parentPos: Vec3, parentRot: Vec3, m: MutableStep): void {
|
|
6
|
-
|
|
7
|
-
const cylinder: Cylinder = {
|
|
8
|
-
type: "Cylinder",
|
|
9
|
-
pos: c.pos,
|
|
10
|
-
rot: c.rot,
|
|
11
|
-
length: c.length,
|
|
12
|
-
radius: c.radius,
|
|
13
|
-
};
|
|
14
|
-
stepCylinder(cylinder, mat, parentPos, parentRot, m, 0.0);
|
|
6
|
+
stepCylinder({ type: "Cylinder", pos: c.pos, rot: c.rot, length: c.length, radius: c.radius, radiusEnd: 0 }, mat, parentPos, parentRot, m);
|
|
15
7
|
}
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
const SMALLEST_RADIUS = 1e-4;
|
|
46
46
|
const GEOMETRY_EPSILON = 1e-12;
|
|
47
47
|
|
|
48
|
-
export function stepCylinder(c: Cylinder, mat: Material, parentPos: Vec3, parentRot: Vec3, m: MutableStep
|
|
48
|
+
export function stepCylinder(c: Cylinder, mat: Material, parentPos: Vec3, parentRot: Vec3, m: MutableStep): void {
|
|
49
49
|
const h = c.length;
|
|
50
50
|
|
|
51
51
|
if (h <= GEOMETRY_EPSILON) {
|
|
@@ -53,7 +53,7 @@ export function stepCylinder(c: Cylinder, mat: Material, parentPos: Vec3, parent
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
const bottomRadius = Math.max(c.radius, SMALLEST_RADIUS);
|
|
56
|
-
const requestedTopRadius = Math.max(
|
|
56
|
+
const requestedTopRadius = Math.max(c.radiusEnd ?? c.radius, SMALLEST_RADIUS);
|
|
57
57
|
|
|
58
58
|
const radiusTolerance = GEOMETRY_EPSILON * Math.max(1, bottomRadius, requestedTopRadius);
|
|
59
59
|
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import type { Cylinder, Material, Vec3 } from "../../../abstract-3d.js";
|
|
2
|
-
import { vec3TransRot, vec3RotCombine, vec3Zero, vec3, equals
|
|
2
|
+
import { vec3TransRot, vec3RotCombine, vec3Zero, vec3, equals } from "../../../abstract-3d.js";
|
|
3
3
|
import { stlPlaneOfVertices } from "../stl-encoding.js";
|
|
4
|
-
import { stlPlane } from "./stl-plane.js";
|
|
5
4
|
|
|
6
|
-
export function stlCylinder(c: Cylinder,
|
|
5
|
+
export function stlCylinder(c: Cylinder, _m: Material, sides: number, parentPos: Vec3, parentRot: Vec3): string {
|
|
7
6
|
let stlString = "";
|
|
8
7
|
const pos = vec3TransRot(c.pos, parentPos, parentRot);
|
|
9
8
|
const rot = vec3RotCombine(parentRot, c.rot ?? vec3Zero);
|
|
@@ -16,6 +15,7 @@ export function stlCylinder(c: Cylinder, m: Material, sides: number, parentPos:
|
|
|
16
15
|
let currentAngle = angleStart;
|
|
17
16
|
|
|
18
17
|
const half = c.length / 2;
|
|
18
|
+
const radiusEnd = c.radiusEnd ?? c.radius;
|
|
19
19
|
const topPos = vec3tr(0, half, 0);
|
|
20
20
|
const botPos = vec3tr(0, -half, 0);
|
|
21
21
|
|
|
@@ -23,10 +23,10 @@ export function stlCylinder(c: Cylinder, m: Material, sides: number, parentPos:
|
|
|
23
23
|
const topVec3Array = Array<Vec3>();
|
|
24
24
|
|
|
25
25
|
for (let i = 0; i <= sides; i++) {
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const currBot = vec3tr(
|
|
29
|
-
const currTop = vec3tr(
|
|
26
|
+
const sin = Math.sin(currentAngle);
|
|
27
|
+
const cos = Math.cos(currentAngle);
|
|
28
|
+
const currBot = vec3tr(sin * c.radius, -half, cos * c.radius);
|
|
29
|
+
const currTop = vec3tr(sin * radiusEnd, half, cos * radiusEnd);
|
|
30
30
|
botVec3Array.push(currBot);
|
|
31
31
|
topVec3Array.push(currTop);
|
|
32
32
|
if (i !== 0) {
|
|
@@ -41,16 +41,8 @@ export function stlCylinder(c: Cylinder, m: Material, sides: number, parentPos:
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
if (!equals(angleStart, angleEnd - Math.PI * 2) && angleLength > 0.0) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const halfRadius = c.radius / 2;
|
|
47
|
-
const plane1Rot = vec3(0, aStart, 0);
|
|
48
|
-
const plane2Rot = vec3(0, aEnd, 0);
|
|
49
|
-
const plane1Pos = vec3Scale(vec3(Math.cos(aStart), 0, -Math.sin(aStart)), halfRadius);
|
|
50
|
-
const plane2Pos = vec3Scale(vec3(Math.cos(aEnd), 0, -Math.sin(aEnd)), halfRadius);
|
|
51
|
-
const planeSize = vec3(c.radius, c.length, 1);
|
|
52
|
-
stlString += stlPlane({ type: "Plane", pos: plane1Pos, size: planeSize, rot: plane1Rot }, m, pos, rot);
|
|
53
|
-
stlString += stlPlane({ type: "Plane", pos: plane2Pos, size: planeSize, rot: plane2Rot }, m, pos, rot);
|
|
44
|
+
stlString += stlPlaneOfVertices(botPos, botVec3Array[0]!, topVec3Array[0]!, topPos);
|
|
45
|
+
stlString += stlPlaneOfVertices(botPos, topPos, topVec3Array[sides]!, botVec3Array[sides]!);
|
|
54
46
|
}
|
|
55
47
|
|
|
56
48
|
return stlString;
|
|
@@ -13,7 +13,8 @@ export function cylinder(
|
|
|
13
13
|
parentPos: Vec3,
|
|
14
14
|
parentRot: Vec3
|
|
15
15
|
): ReadonlyArray<zOrderElement> {
|
|
16
|
-
const half =
|
|
16
|
+
const half = c.length / 2;
|
|
17
|
+
const radiusEnd = c.radiusEnd ?? c.radius;
|
|
17
18
|
const pos = vec3TransRot(c.pos, parentPos, parentRot);
|
|
18
19
|
const rot = vec3RotCombine(parentRot, c.rot ?? vec3Zero);
|
|
19
20
|
const vec3tr = (p: Vec3): Vec3 => vec3TransRot(p, pos, rot);
|
|
@@ -32,10 +33,10 @@ export function cylinder(
|
|
|
32
33
|
const botVec3Array = Array<Vec3>();
|
|
33
34
|
const topVec3Array = Array<Vec3>();
|
|
34
35
|
for (let i = 0; i <= sides; i++) {
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
const currBot = vec3tr(vec3(
|
|
38
|
-
const currTop = vec3tr(vec3(
|
|
36
|
+
const sin = Math.sin(currentAngle);
|
|
37
|
+
const cos = Math.cos(currentAngle);
|
|
38
|
+
const currBot = vec3tr(vec3(sin * c.radius, -half, cos * c.radius));
|
|
39
|
+
const currTop = vec3tr(vec3(sin * radiusEnd, half, cos * radiusEnd));
|
|
39
40
|
botVec3Array.push(currBot);
|
|
40
41
|
topVec3Array.push(currTop);
|
|
41
42
|
if (i !== 0) {
|
|
@@ -49,11 +50,12 @@ export function cylinder(
|
|
|
49
50
|
}
|
|
50
51
|
if (!c.open) {
|
|
51
52
|
// Add circle if direcly facing camera
|
|
52
|
-
const circleTop = vec3tr(vec3(0, half
|
|
53
|
-
const circleBottom = vec3tr(vec3(0, -half
|
|
53
|
+
const circleTop = vec3tr(vec3(0, half, 0));
|
|
54
|
+
const circleBottom = vec3tr(vec3(0, -half, 0));
|
|
54
55
|
if (equals(circleTop.x, circleBottom.x, 0.1) && equals(circleTop.y, circleBottom.y, 0.1)) {
|
|
55
|
-
const circlePos = circleTop.z > circleBottom.z ? circleTop : circleBottom;
|
|
56
|
-
|
|
56
|
+
const [circlePos, circleRadius] = circleTop.z > circleBottom.z ? [circleTop, radiusEnd] : [circleBottom, c.radius];
|
|
57
|
+
const holes = radiusEnd === c.radius ? c.holes : undefined;
|
|
58
|
+
zOrderComponents.push(zElem(svgCircle(circleRadius, rot, point(circlePos.x, circlePos.y), fill, opacity, stroke, stBW, holes), circlePos.z));
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
return zOrderComponents;
|