@constructorfleet/sketchforge-engine 1.26.0 → 1.28.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/dist/cadAnalysis.d.ts +94 -0
- package/dist/cadAnalysis.d.ts.map +1 -0
- package/dist/cadAnalysis.js +157 -0
- package/dist/cadAnalysis.js.map +1 -0
- package/dist/cadBakeMetadata.d.ts +11 -2
- package/dist/cadBakeMetadata.d.ts.map +1 -1
- package/dist/cadBakeMetadata.js +9 -0
- package/dist/cadBakeMetadata.js.map +1 -1
- package/dist/cadProjection.d.ts.map +1 -1
- package/dist/cadProjection.js.map +1 -1
- package/dist/cadSection.d.ts.map +1 -1
- package/dist/cadShell.d.ts +143 -0
- package/dist/cadShell.d.ts.map +1 -0
- package/dist/cadShell.js +313 -0
- package/dist/cadShell.js.map +1 -0
- package/dist/cadSolids.d.ts.map +1 -1
- package/dist/cadSolids.js +18 -1
- package/dist/cadSolids.js.map +1 -1
- package/dist/cutBrepFrameMigration.d.ts +46 -0
- package/dist/cutBrepFrameMigration.d.ts.map +1 -0
- package/dist/cutBrepFrameMigration.js +105 -0
- package/dist/cutBrepFrameMigration.js.map +1 -0
- package/dist/cutterPadding.d.ts.map +1 -1
- package/dist/domain/cameraProjection.js.map +1 -1
- package/dist/domain/sketchforge.d.ts +31 -1
- package/dist/domain/sketchforge.d.ts.map +1 -1
- package/dist/editorHistory.d.ts.map +1 -1
- package/dist/editorHistory.js.map +1 -1
- package/dist/engine.d.ts +3 -3
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +156 -78
- package/dist/engine.js.map +1 -1
- package/dist/exactBooleanParts.d.ts +4 -2
- package/dist/exactBooleanParts.d.ts.map +1 -1
- package/dist/exactBooleanParts.js +7 -3
- package/dist/exactBooleanParts.js.map +1 -1
- package/dist/exactBooleanSolids.d.ts.map +1 -1
- package/dist/gearProfile.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/loftProfile.d.ts +1 -1
- package/dist/loftProfile.d.ts.map +1 -1
- package/dist/loftProfile.js.map +1 -1
- package/dist/meshEdgeProjection.d.ts +104 -0
- package/dist/meshEdgeProjection.d.ts.map +1 -0
- package/dist/meshEdgeProjection.js +439 -0
- package/dist/meshEdgeProjection.js.map +1 -0
- package/dist/meshImport.d.ts.map +1 -1
- package/dist/meshImport.js +2 -20
- package/dist/meshImport.js.map +1 -1
- package/dist/meshMassProperties.d.ts +92 -0
- package/dist/meshMassProperties.d.ts.map +1 -0
- package/dist/meshMassProperties.js +570 -0
- package/dist/meshMassProperties.js.map +1 -0
- package/dist/meshSection.d.ts +44 -0
- package/dist/meshSection.d.ts.map +1 -0
- package/dist/meshSection.js +154 -0
- package/dist/meshSection.js.map +1 -0
- package/dist/meshShellOverlap.d.ts +75 -0
- package/dist/meshShellOverlap.d.ts.map +1 -0
- package/dist/meshShellOverlap.js +797 -0
- package/dist/meshShellOverlap.js.map +1 -0
- package/dist/meshShellSolids.d.ts +44 -0
- package/dist/meshShellSolids.d.ts.map +1 -0
- package/dist/meshShellSolids.js +116 -0
- package/dist/meshShellSolids.js.map +1 -0
- package/dist/nodeSvgDomParser.d.ts +3 -0
- package/dist/nodeSvgDomParser.d.ts.map +1 -0
- package/dist/nodeSvgDomParser.js +53 -0
- package/dist/nodeSvgDomParser.js.map +1 -0
- package/dist/parametricRecompute.d.ts.map +1 -1
- package/dist/parametricRecompute.js +63 -10
- package/dist/parametricRecompute.js.map +1 -1
- package/dist/placementWorkplane.d.ts.map +1 -1
- package/dist/placementWorkplane.js.map +1 -1
- package/dist/projectAssets.d.ts +1 -1
- package/dist/projectStore.d.ts +1 -1
- package/dist/projectStore.d.ts.map +1 -1
- package/dist/projectStore.js +23 -2
- package/dist/projectStore.js.map +1 -1
- package/dist/revolveRequests.d.ts +57 -1
- package/dist/revolveRequests.d.ts.map +1 -1
- package/dist/revolveRequests.js +103 -4
- package/dist/revolveRequests.js.map +1 -1
- package/dist/sceneExport.d.ts +6 -0
- package/dist/sceneExport.d.ts.map +1 -1
- package/dist/sceneExport.js +6 -2
- package/dist/sceneExport.js.map +1 -1
- package/dist/serverCadInterference.d.ts +8 -45
- package/dist/serverCadInterference.d.ts.map +1 -1
- package/dist/serverCadInterference.js +21 -43
- package/dist/serverCadInterference.js.map +1 -1
- package/dist/serverCadOperations.d.ts +73 -4
- package/dist/serverCadOperations.d.ts.map +1 -1
- package/dist/serverCadOperations.js +356 -71
- package/dist/serverCadOperations.js.map +1 -1
- package/dist/serverCadProjection.d.ts +14 -1
- package/dist/serverCadProjection.d.ts.map +1 -1
- package/dist/serverCadProjection.js +135 -13
- package/dist/serverCadProjection.js.map +1 -1
- package/dist/serverCadProperties.d.ts +14 -7
- package/dist/serverCadProperties.d.ts.map +1 -1
- package/dist/serverCadProperties.js +60 -24
- package/dist/serverCadProperties.js.map +1 -1
- package/dist/serverCadSection.d.ts +21 -1
- package/dist/serverCadSection.d.ts.map +1 -1
- package/dist/serverCadSection.js +157 -43
- package/dist/serverCadSection.js.map +1 -1
- package/dist/serverCadShell.d.ts +7 -94
- package/dist/serverCadShell.d.ts.map +1 -1
- package/dist/serverCadShell.js +25 -272
- package/dist/serverCadShell.js.map +1 -1
- package/dist/serverCadThickness.d.ts +8 -8
- package/dist/serverCadThickness.d.ts.map +1 -1
- package/dist/serverCadThickness.js +15 -42
- package/dist/serverCadThickness.js.map +1 -1
- package/dist/serverShapeBooleans.d.ts +75 -0
- package/dist/serverShapeBooleans.d.ts.map +1 -1
- package/dist/serverShapeBooleans.js +251 -9
- package/dist/serverShapeBooleans.js.map +1 -1
- package/dist/serverShapeGroups.js.map +1 -1
- package/dist/serverStepExplode.d.ts +1 -2
- package/dist/serverStepExplode.d.ts.map +1 -1
- package/dist/serverStepExplode.js +15 -148
- package/dist/serverStepExplode.js.map +1 -1
- package/dist/shapeBounds.d.ts.map +1 -1
- package/dist/shapeCatalog.d.ts.map +1 -1
- package/dist/shapeCatalog.js +1 -0
- package/dist/shapeCatalog.js.map +1 -1
- package/dist/shapeRequests.d.ts +13 -0
- package/dist/shapeRequests.d.ts.map +1 -1
- package/dist/shapeRequests.js +14 -0
- package/dist/shapeRequests.js.map +1 -1
- package/dist/sketchCadProfile.d.ts +13 -0
- package/dist/sketchCadProfile.d.ts.map +1 -1
- package/dist/sketchCadProfile.js +108 -0
- package/dist/sketchCadProfile.js.map +1 -1
- package/dist/sketchCadSweep.js.map +1 -1
- package/dist/sketchEdgeSegmentLineage.d.ts +32 -0
- package/dist/sketchEdgeSegmentLineage.d.ts.map +1 -0
- package/dist/sketchEdgeSegmentLineage.js +49 -0
- package/dist/sketchEdgeSegmentLineage.js.map +1 -0
- package/dist/sketchEdgeSegmentLineageKernel.d.ts +83 -0
- package/dist/sketchEdgeSegmentLineageKernel.d.ts.map +1 -0
- package/dist/sketchEdgeSegmentLineageKernel.js +125 -0
- package/dist/sketchEdgeSegmentLineageKernel.js.map +1 -0
- package/dist/sketchFaceDraftKernel.d.ts +16 -9
- package/dist/sketchFaceDraftKernel.d.ts.map +1 -1
- package/dist/sketchFaceDraftKernel.js +19 -11
- package/dist/sketchFaceDraftKernel.js.map +1 -1
- package/dist/sketchRevolve.d.ts +13 -0
- package/dist/sketchRevolve.d.ts.map +1 -1
- package/dist/sketchRevolve.js +4 -1
- package/dist/sketchRevolve.js.map +1 -1
- package/dist/skfProject.d.ts +1 -1
- package/dist/skfProject.d.ts.map +1 -1
- package/dist/skfProject.js +63 -4
- package/dist/skfProject.js.map +1 -1
- package/dist/sphereTessellation.d.ts.map +1 -1
- package/dist/stepAssemblyExplode.d.ts +45 -0
- package/dist/stepAssemblyExplode.d.ts.map +1 -0
- package/dist/stepAssemblyExplode.js +195 -0
- package/dist/stepAssemblyExplode.js.map +1 -0
- package/dist/stepAssemblyHierarchy.js.map +1 -1
- package/dist/stepComponentMetadata.d.ts +1 -1
- package/dist/stepComponentMetadata.d.ts.map +1 -1
- package/dist/stepComponentMetadata.js +93 -39
- package/dist/stepComponentMetadata.js.map +1 -1
- package/dist/stepExport.d.ts +14 -1
- package/dist/stepExport.d.ts.map +1 -1
- package/dist/stepExport.js +81 -32
- package/dist/stepExport.js.map +1 -1
- package/dist/stepImportCommon.d.ts +4 -1
- package/dist/stepImportCommon.d.ts.map +1 -1
- package/dist/stepImportCommon.js +7 -6
- package/dist/stepImportCommon.js.map +1 -1
- package/dist/stlImport.js.map +1 -1
- package/dist/support/cadModifierTypes.d.ts +100 -1
- package/dist/support/cadModifierTypes.d.ts.map +1 -1
- package/dist/support/i18n/LocalizedError.d.ts.map +1 -1
- package/dist/support/i18n/locales/en/messages.json +42 -2
- package/dist/support/i18n/locales.d.ts.map +1 -1
- package/dist/support/lib/appTheme.d.ts.map +1 -1
- package/dist/support/lib/materialPresets.js.map +1 -1
- package/dist/support/lib/measurementUnits.d.ts.map +1 -1
- package/dist/support/lib/operator-configuration.json +13 -1
- package/dist/support/lib/operatorConfiguration.d.ts +5 -5
- package/dist/support/lib/workplaneGrid.js.map +1 -1
- package/dist/svgImport.d.ts +2 -0
- package/dist/svgImport.d.ts.map +1 -1
- package/dist/svgImport.js +7 -0
- package/dist/svgImport.js.map +1 -1
- package/dist/threadCatalog.js.map +1 -1
- package/dist/workplaneSettings.js.map +1 -1
- package/dist/workplaneShapes.d.ts +2 -2
- package/dist/workplaneShapes.d.ts.map +1 -1
- package/dist/workplaneShapes.js.map +1 -1
- package/package.json +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverCadSection.d.ts","sourceRoot":"","sources":["../src/serverCadSection.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"serverCadSection.d.ts","sourceRoot":"","sources":["../src/serverCadSection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAA2E,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAO7H,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,MAAM,cAAc,GAAG;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAIrE,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAC5C;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,UAAY,CAAC;AACpD,eAAO,MAAM,YAAY,QAAS,CAAC;AACnC,eAAO,MAAM,kBAAkB,SAAU,CAAC;AA8N1C,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpH;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpH"}
|
package/dist/serverCadSection.js
CHANGED
|
@@ -1,15 +1,33 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Section contours for one bounded, named axis plane. Node-only.
|
|
3
|
+
*
|
|
4
|
+
* Shapes the project describes exactly are cut by the OCCT kernel. Shapes it
|
|
5
|
+
* describes only by their triangles -- imported meshes, and anything stored as
|
|
6
|
+
* a mesh -- are sliced directly (`meshSection.ts`): sewing their triangles into
|
|
7
|
+
* a solid first is what made a 50,000-triangle section take minutes, and the
|
|
8
|
+
* sewn solid's section is the same polyline anyway.
|
|
9
|
+
*/
|
|
2
10
|
import { renderSectionDxf, renderSectionSvg, SECTION_PLANES } from "./cadSection.js";
|
|
3
11
|
import { withCadKernel } from "./serverCadKernel.js";
|
|
4
12
|
import { ServerCadError } from "./serverCadOperations.js";
|
|
5
13
|
import { placedSolidForShape } from "./serverShapeBooleans.js";
|
|
6
14
|
import { EDITOR_TO_DRAWING_TRANSFORM } from "./cadProjection.js";
|
|
15
|
+
import { sectionTriangleSoup } from "./meshSection.js";
|
|
16
|
+
import { worldMeshForShape } from "./serverShapeGroups.js";
|
|
7
17
|
const MAX_SECTION_SHAPES = 100;
|
|
8
18
|
const MAX_SECTION_SPAN = 8_000;
|
|
9
|
-
const MAX_SECTION_FACE_SPAN = 10_000;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
19
|
+
export const MAX_SECTION_FACE_SPAN = 10_000;
|
|
20
|
+
/**
|
|
21
|
+
* Triangles a section reads, across every mesh in it, counted from the stored
|
|
22
|
+
* positions as well as the recorded count. Slicing is linear, so this bounds
|
|
23
|
+
* memory rather than time: placing a mesh builds a vertex array, a transformed
|
|
24
|
+
* copy, and a Float64Array in the drawing frame, about 400 bytes a triangle
|
|
25
|
+
* at peak. Measured by hand, not in the perf lane (which stops at 240,000): a
|
|
26
|
+
* 1,965,600-triangle section ran out of a 1 GiB heap and completed in 1.5 GiB.
|
|
27
|
+
*/
|
|
28
|
+
export const MAX_SECTION_MESH_TRIANGLES = 2_000_000;
|
|
29
|
+
export const MAX_CONTOURS = 10_000;
|
|
30
|
+
export const MAX_SAMPLED_POINTS = 100_000;
|
|
13
31
|
const FRAMES = {
|
|
14
32
|
xy: {
|
|
15
33
|
normal: "z", u: "x", v: "y",
|
|
@@ -31,6 +49,13 @@ function axisBounds(bounds, axis) {
|
|
|
31
49
|
return { min: bounds.ymin, max: bounds.ymax };
|
|
32
50
|
return { min: bounds.zmin, max: bounds.zmax };
|
|
33
51
|
}
|
|
52
|
+
/** Triangles a shape's stored mesh holds, read from the positions themselves as well as the count beside them. */
|
|
53
|
+
function meshTriangleCount(shape) {
|
|
54
|
+
const mesh = shape.importedMesh;
|
|
55
|
+
if (!mesh)
|
|
56
|
+
return 0;
|
|
57
|
+
return Math.max(mesh.triangleCount ?? 0, Math.floor((mesh.positions?.length ?? 0) / 9));
|
|
58
|
+
}
|
|
34
59
|
function validateRequest(shapes, options) {
|
|
35
60
|
if (!options || !SECTION_PLANES.includes(options.plane))
|
|
36
61
|
throw new ServerCadError(`plane must be one of: ${SECTION_PLANES.join(", ")}.`, 400);
|
|
@@ -39,14 +64,72 @@ function validateRequest(shapes, options) {
|
|
|
39
64
|
}
|
|
40
65
|
if (shapes.length > MAX_SECTION_SHAPES)
|
|
41
66
|
throw new ServerCadError(`A section drawing supports a maximum of ${MAX_SECTION_SHAPES} shapes.`, 413);
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
67
|
+
const counts = shapes.map(meshTriangleCount);
|
|
68
|
+
const triangles = counts.reduce((sum, count) => sum + count, 0);
|
|
69
|
+
if (triangles > MAX_SECTION_MESH_TRIANGLES) {
|
|
70
|
+
const alone = counts.some((count) => count > MAX_SECTION_MESH_TRIANGLES);
|
|
71
|
+
throw new ServerCadError(alone
|
|
72
|
+
? `Section drawing supports a maximum of ${MAX_SECTION_MESH_TRIANGLES} mesh triangles; one selected mesh has ${Math.max(...counts)}. `
|
|
73
|
+
+ "Reduce the mesh before importing it."
|
|
74
|
+
: `Section drawing supports a maximum of ${MAX_SECTION_MESH_TRIANGLES} mesh triangles across the selected shapes; these have ${triangles}. `
|
|
75
|
+
+ "Pass shapeIds to section fewer shapes at a time, or reduce the meshes before importing them.", 413);
|
|
76
|
+
}
|
|
45
77
|
}
|
|
46
78
|
function sectionCompound(cad, shapes) {
|
|
47
79
|
const handles = shapes.map((shape) => cad.transform(placedSolidForShape(cad, shape), [...EDITOR_TO_DRAWING_TRANSFORM]));
|
|
48
80
|
return handles.length === 1 ? handles[0] : cad.makeCompound(handles);
|
|
49
81
|
}
|
|
82
|
+
/** A mesh shape's triangles where it stands, in the drawing frame, three vertices per triangle. */
|
|
83
|
+
function drawingFramePositions(shape) {
|
|
84
|
+
const mesh = worldMeshForShape(shape);
|
|
85
|
+
if (!mesh)
|
|
86
|
+
return null;
|
|
87
|
+
const positions = new Float64Array(mesh.faces.length * 9);
|
|
88
|
+
const m = EDITOR_TO_DRAWING_TRANSFORM;
|
|
89
|
+
let cursor = 0;
|
|
90
|
+
for (const face of mesh.faces) {
|
|
91
|
+
for (const vertexIndex of face) {
|
|
92
|
+
const [x, y, z] = mesh.vertices[vertexIndex];
|
|
93
|
+
positions[cursor++] = m[0] * x + m[1] * y + m[2] * z + m[3];
|
|
94
|
+
positions[cursor++] = m[4] * x + m[5] * y + m[6] * z + m[7];
|
|
95
|
+
positions[cursor++] = m[8] * x + m[9] * y + m[10] * z + m[11];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return positions;
|
|
99
|
+
}
|
|
100
|
+
function positionBounds(positions) {
|
|
101
|
+
if (positions.length < 9)
|
|
102
|
+
return null;
|
|
103
|
+
const bounds = { xmin: Infinity, xmax: -Infinity, ymin: Infinity, ymax: -Infinity, zmin: Infinity, zmax: -Infinity };
|
|
104
|
+
for (let index = 0; index + 2 < positions.length; index += 3) {
|
|
105
|
+
const x = positions[index];
|
|
106
|
+
const y = positions[index + 1];
|
|
107
|
+
const z = positions[index + 2];
|
|
108
|
+
if (x < bounds.xmin)
|
|
109
|
+
bounds.xmin = x;
|
|
110
|
+
if (x > bounds.xmax)
|
|
111
|
+
bounds.xmax = x;
|
|
112
|
+
if (y < bounds.ymin)
|
|
113
|
+
bounds.ymin = y;
|
|
114
|
+
if (y > bounds.ymax)
|
|
115
|
+
bounds.ymax = y;
|
|
116
|
+
if (z < bounds.zmin)
|
|
117
|
+
bounds.zmin = z;
|
|
118
|
+
if (z > bounds.zmax)
|
|
119
|
+
bounds.zmax = z;
|
|
120
|
+
}
|
|
121
|
+
return bounds;
|
|
122
|
+
}
|
|
123
|
+
function unionBounds(bounds) {
|
|
124
|
+
if (!bounds.length)
|
|
125
|
+
return null;
|
|
126
|
+
return bounds.reduce((left, right) => ({
|
|
127
|
+
xmin: Math.min(left.xmin, right.xmin), xmax: Math.max(left.xmax, right.xmax),
|
|
128
|
+
ymin: Math.min(left.ymin, right.ymin), ymax: Math.max(left.ymax, right.ymax),
|
|
129
|
+
zmin: Math.min(left.zmin, right.zmin), zmax: Math.max(left.zmax, right.zmax),
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
const AXIS_INDEX = { x: 0, y: 1, z: 2 };
|
|
50
133
|
function contourCoordinates(plane, x, y, z) {
|
|
51
134
|
if (plane === "xy")
|
|
52
135
|
return [x, y];
|
|
@@ -79,47 +162,78 @@ function sampledContours(cad, section, plane, deflection) {
|
|
|
79
162
|
}
|
|
80
163
|
return contours;
|
|
81
164
|
}
|
|
82
|
-
/**
|
|
165
|
+
/** Refuse a scene the plane misses or that is too large to draw, and frame what is left. */
|
|
166
|
+
function checkedFrame(bounds, options) {
|
|
167
|
+
const values = [bounds.xmin, bounds.xmax, bounds.ymin, bounds.ymax, bounds.zmin, bounds.zmax];
|
|
168
|
+
if (values.some((value) => !Number.isFinite(value) || Math.abs(value) > 100_000)) {
|
|
169
|
+
throw new ServerCadError("The selected scene has coordinates outside the supported section range.", 413);
|
|
170
|
+
}
|
|
171
|
+
const frame = FRAMES[options.plane];
|
|
172
|
+
const normal = axisBounds(bounds, frame.normal);
|
|
173
|
+
if (options.offset < normal.min - 1e-7 || options.offset > normal.max + 1e-7) {
|
|
174
|
+
throw new ServerCadError("The requested section plane does not intersect the selected scene.", 422);
|
|
175
|
+
}
|
|
176
|
+
const uBounds = axisBounds(bounds, frame.u);
|
|
177
|
+
const vBounds = axisBounds(bounds, frame.v);
|
|
178
|
+
const spans = [bounds.xmax - bounds.xmin, bounds.ymax - bounds.ymin, bounds.zmax - bounds.zmin];
|
|
179
|
+
if (spans.some((span) => span > MAX_SECTION_SPAN)) {
|
|
180
|
+
throw new ServerCadError(`Section drawings support a maximum section span of ${MAX_SECTION_SPAN} mm.`, 413);
|
|
181
|
+
}
|
|
182
|
+
const margin = Math.max(1, Math.max(uBounds.max - uBounds.min, vBounds.max - vBounds.min) * 0.02);
|
|
183
|
+
if (uBounds.max - uBounds.min + margin * 2 > MAX_SECTION_FACE_SPAN || vBounds.max - vBounds.min + margin * 2 > MAX_SECTION_FACE_SPAN) {
|
|
184
|
+
throw new ServerCadError(`Section faces are limited to ${MAX_SECTION_FACE_SPAN} mm on each side.`, 413);
|
|
185
|
+
}
|
|
186
|
+
return { frame, uBounds, vBounds, margin, diagonal: Math.hypot(...spans) };
|
|
187
|
+
}
|
|
188
|
+
function exactContours(cad, scene, options, framed) {
|
|
189
|
+
const { frame, uBounds, vBounds, margin, diagonal } = framed;
|
|
190
|
+
const face = cad.transform(cad.makeRectangle(uBounds.max - uBounds.min + margin * 2, vBounds.max - vBounds.min + margin * 2), frame.matrix(uBounds.min - margin, vBounds.min - margin, options.offset));
|
|
191
|
+
const section = cad.section(scene, face);
|
|
192
|
+
if (Number(section) === 0)
|
|
193
|
+
return [];
|
|
194
|
+
return sampledContours(cad, section, options.plane, Math.max(diagonal * 0.002, 1e-4));
|
|
195
|
+
}
|
|
196
|
+
function meshContours(meshes, options) {
|
|
197
|
+
const frame = FRAMES[options.plane];
|
|
198
|
+
const axes = { normal: AXIS_INDEX[frame.normal], u: AXIS_INDEX[frame.u], v: AXIS_INDEX[frame.v], offset: options.offset };
|
|
199
|
+
return meshes.flatMap((positions) => sectionTriangleSoup(positions, axes));
|
|
200
|
+
}
|
|
201
|
+
function finishedDrawing(contours, options, framed) {
|
|
202
|
+
const points = contours.reduce((sum, contour) => sum + contour.length / 2, 0);
|
|
203
|
+
if (contours.length > MAX_CONTOURS || points > MAX_SAMPLED_POINTS) {
|
|
204
|
+
throw new ServerCadError("Section drawing is too complex to return safely.", 413);
|
|
205
|
+
}
|
|
206
|
+
if (!contours.length)
|
|
207
|
+
throw new ServerCadError("The requested section plane produced no contours.", 422);
|
|
208
|
+
const drawing = { plane: options.plane, offset: options.offset, contours };
|
|
209
|
+
const bounds = { minU: framed.uBounds.min, maxU: framed.uBounds.max, minV: framed.vBounds.min, maxV: framed.vBounds.max };
|
|
210
|
+
return { drawing, bounds };
|
|
211
|
+
}
|
|
212
|
+
/** Cut the visible stored solids by a bounded plane and return scale-readable contours. */
|
|
83
213
|
async function sectionShapesToDrawing(shapes, options) {
|
|
84
214
|
validateRequest(shapes, options);
|
|
85
215
|
const visible = shapes.filter((shape) => shape.hidden !== true && shape.hole !== true);
|
|
86
216
|
if (!visible.length)
|
|
87
217
|
return Promise.reject(new ServerCadError("No visible solid objects to section.", 422));
|
|
218
|
+
const meshes = [];
|
|
219
|
+
const exact = [];
|
|
220
|
+
for (const shape of visible) {
|
|
221
|
+
const positions = drawingFramePositions(shape);
|
|
222
|
+
if (positions)
|
|
223
|
+
meshes.push(positions);
|
|
224
|
+
else
|
|
225
|
+
exact.push(shape);
|
|
226
|
+
}
|
|
227
|
+
const meshBounds = meshes.map(positionBounds).filter((bounds) => bounds !== null);
|
|
228
|
+
if (!exact.length) {
|
|
229
|
+
const framed = checkedFrame(unionBounds(meshBounds), options);
|
|
230
|
+
return finishedDrawing(meshContours(meshes, options), options, framed);
|
|
231
|
+
}
|
|
88
232
|
return withCadKernel((cad) => {
|
|
89
|
-
const scene = sectionCompound(cad,
|
|
90
|
-
const
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
throw new ServerCadError("The selected scene has coordinates outside the supported section range.", 413);
|
|
94
|
-
}
|
|
95
|
-
const frame = FRAMES[options.plane];
|
|
96
|
-
const normal = axisBounds(bounds, frame.normal);
|
|
97
|
-
if (options.offset < normal.min - 1e-7 || options.offset > normal.max + 1e-7) {
|
|
98
|
-
throw new ServerCadError("The requested section plane does not intersect the selected scene.", 422);
|
|
99
|
-
}
|
|
100
|
-
const uBounds = axisBounds(bounds, frame.u);
|
|
101
|
-
const vBounds = axisBounds(bounds, frame.v);
|
|
102
|
-
const spans = [bounds.xmax - bounds.xmin, bounds.ymax - bounds.ymin, bounds.zmax - bounds.zmin];
|
|
103
|
-
if (spans.some((span) => span > MAX_SECTION_SPAN)) {
|
|
104
|
-
throw new ServerCadError(`Section drawings support a maximum section span of ${MAX_SECTION_SPAN} mm.`, 413);
|
|
105
|
-
}
|
|
106
|
-
const margin = Math.max(1, Math.max(uBounds.max - uBounds.min, vBounds.max - vBounds.min) * 0.02);
|
|
107
|
-
if (uBounds.max - uBounds.min + margin * 2 > MAX_SECTION_FACE_SPAN || vBounds.max - vBounds.min + margin * 2 > MAX_SECTION_FACE_SPAN) {
|
|
108
|
-
throw new ServerCadError(`Section faces are limited to ${MAX_SECTION_FACE_SPAN} mm on each side.`, 413);
|
|
109
|
-
}
|
|
110
|
-
const face = cad.transform(cad.makeRectangle(uBounds.max - uBounds.min + margin * 2, vBounds.max - vBounds.min + margin * 2), frame.matrix(uBounds.min - margin, vBounds.min - margin, options.offset));
|
|
111
|
-
const section = cad.section(scene, face);
|
|
112
|
-
if (Number(section) === 0)
|
|
113
|
-
throw new ServerCadError("The requested section plane produced no contours.", 422);
|
|
114
|
-
const diagonal = Math.hypot(...spans);
|
|
115
|
-
const contours = sampledContours(cad, section, options.plane, Math.max(diagonal * 0.002, 1e-4));
|
|
116
|
-
if (!contours.length)
|
|
117
|
-
throw new ServerCadError("The requested section plane produced no contours.", 422);
|
|
118
|
-
const drawing = { plane: options.plane, offset: options.offset, contours };
|
|
119
|
-
return { drawing, bounds: {
|
|
120
|
-
minU: uBounds.min, maxU: uBounds.max,
|
|
121
|
-
minV: vBounds.min, maxV: vBounds.max,
|
|
122
|
-
} };
|
|
233
|
+
const scene = sectionCompound(cad, exact);
|
|
234
|
+
const framed = checkedFrame(unionBounds([cad.getBoundingBox(scene, false), ...meshBounds]), options);
|
|
235
|
+
const contours = exactContours(cad, scene, options, framed);
|
|
236
|
+
return finishedDrawing([...contours, ...meshContours(meshes, options)], options, framed);
|
|
123
237
|
});
|
|
124
238
|
}
|
|
125
239
|
export async function sectionShapesToSvg(shapes, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverCadSection.js","sourceRoot":"","sources":["../src/serverCadSection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"serverCadSection.js","sourceRoot":"","sources":["../src/serverCadSection.ts"],"names":[],"mappings":"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"}
|
package/dist/serverCadShell.d.ts
CHANGED
|
@@ -1,101 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Hollowing a solid on the server, with a wall of a given thickness.
|
|
3
3
|
*
|
|
4
|
-
* This is the operation a 3D print needs most
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* This is the operation a 3D print needs most: a solid box weighs 8 grams of
|
|
5
|
+
* filament and a 2 mm-walled one weighs two, and a box with its top face left
|
|
6
|
+
* open is a tray. The hollowing itself is `cadShell.ts`, which the editor's
|
|
7
|
+
* CAD worker shares; this module is the Node side of it.
|
|
8
8
|
*
|
|
9
9
|
* Node-only, and built on the same footing as the fillet endpoint: the shape is
|
|
10
10
|
* rebuilt as true geometry rather than meshed, and the result is stored with
|
|
11
11
|
* its exact BREP alongside the triangles, so a hollowed part still exports to
|
|
12
12
|
* STEP and can still be filleted afterwards.
|
|
13
|
-
*
|
|
14
|
-
* Two things about `shell` are worth knowing before changing any of this, both
|
|
15
|
-
* found by measuring rather than by reading:
|
|
16
|
-
*
|
|
17
|
-
* - With no faces removed it does not hollow anything. It returns the *inner*
|
|
18
|
-
* solid -- the original offset inwards by the thickness -- so a sealed
|
|
19
|
-
* hollow has to be the original cut by that, which is what `hollowedSolid`
|
|
20
|
-
* does. Asking it to hollow a closed solid directly gives you back a
|
|
21
|
-
* smaller solid part, which looks plausible and is not what was asked for.
|
|
22
|
-
* - A thickness that does not fit does not reliably fail. Past half the
|
|
23
|
-
* part it variously returns an empty compound, a solid that reports
|
|
24
|
-
* `isValid: false` with a correct bounding box, or the original solid
|
|
25
|
-
* untouched with every extent and the validity flag intact. Only the volume
|
|
26
|
-
* tells those apart from a real answer, which is why `hollowedSolid`
|
|
27
|
-
* measures it rather than trusting the call to throw.
|
|
28
13
|
*/
|
|
29
|
-
import type { OcctKernel, ShapeHandle, Vec3 } from "occt-wasm";
|
|
30
14
|
import { type ServerCadResult } from "./serverCadOperations.js";
|
|
15
|
+
import { type CadShellFace } from "./cadShell.js";
|
|
31
16
|
import type { WorkplaneShape } from "./domain/sketchforge.js";
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
*
|
|
35
|
-
* A caller that knows the geometry can name face indexes from the listing, but
|
|
36
|
-
* nobody wants to list a box's faces to find out which one is the lid. The
|
|
37
|
-
* local frame these resolve in is the one every geometry builder here produces:
|
|
38
|
-
* centred in X and Z, base at Y=0, +Z towards the viewer.
|
|
39
|
-
*/
|
|
40
|
-
declare const FACE_DIRECTIONS: {
|
|
41
|
-
readonly top: {
|
|
42
|
-
readonly x: 0;
|
|
43
|
-
readonly y: 1;
|
|
44
|
-
readonly z: 0;
|
|
45
|
-
};
|
|
46
|
-
readonly bottom: {
|
|
47
|
-
readonly x: 0;
|
|
48
|
-
readonly y: -1;
|
|
49
|
-
readonly z: 0;
|
|
50
|
-
};
|
|
51
|
-
readonly right: {
|
|
52
|
-
readonly x: 1;
|
|
53
|
-
readonly y: 0;
|
|
54
|
-
readonly z: 0;
|
|
55
|
-
};
|
|
56
|
-
readonly left: {
|
|
57
|
-
readonly x: -1;
|
|
58
|
-
readonly y: 0;
|
|
59
|
-
readonly z: 0;
|
|
60
|
-
};
|
|
61
|
-
readonly front: {
|
|
62
|
-
readonly x: 0;
|
|
63
|
-
readonly y: 0;
|
|
64
|
-
readonly z: 1;
|
|
65
|
-
};
|
|
66
|
-
readonly back: {
|
|
67
|
-
readonly x: 0;
|
|
68
|
-
readonly y: 0;
|
|
69
|
-
readonly z: -1;
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
export type FaceDirection = keyof typeof FACE_DIRECTIONS;
|
|
73
|
-
export declare const FACE_DIRECTION_NAMES: FaceDirection[];
|
|
74
|
-
export type ServerCadFace = {
|
|
75
|
-
index: number;
|
|
17
|
+
export { FACE_DIRECTION_NAMES, faceOutwardNormal, type FaceDirection } from "./cadShell.js";
|
|
18
|
+
export type ServerCadFace = CadShellFace & {
|
|
76
19
|
/** App-owned identity, stable across listings and persisted when referenced. */
|
|
77
20
|
id: string;
|
|
78
|
-
/** As OCCT names the underlying surface: `plane`, `cylinder`, `bspline`... */
|
|
79
|
-
surfaceType: string;
|
|
80
|
-
area: number;
|
|
81
|
-
/** Area-weighted centre of the face, which is a real point on a curved one. */
|
|
82
|
-
centroid: {
|
|
83
|
-
x: number;
|
|
84
|
-
y: number;
|
|
85
|
-
z: number;
|
|
86
|
-
};
|
|
87
|
-
/** The outward normal, or null for a surface that cannot report one. */
|
|
88
|
-
normal: {
|
|
89
|
-
x: number;
|
|
90
|
-
y: number;
|
|
91
|
-
z: number;
|
|
92
|
-
} | null;
|
|
93
|
-
/**
|
|
94
|
-
* The direction name this face answers to, when it is the outermost flat face
|
|
95
|
-
* pointing that way. A cavity floor points up as surely as a lid does, so a
|
|
96
|
-
* face only takes a name if nothing it is parallel to sits further out.
|
|
97
|
-
*/
|
|
98
|
-
facing: FaceDirection | null;
|
|
99
21
|
};
|
|
100
22
|
export type ServerCadShellRequest = {
|
|
101
23
|
/** Wall thickness in mm, measured inwards from the surface. */
|
|
@@ -103,14 +25,6 @@ export type ServerCadShellRequest = {
|
|
|
103
25
|
/** Faces to leave open, as direction names or indexes from the face listing. */
|
|
104
26
|
openFaces?: ReadonlyArray<number | string>;
|
|
105
27
|
};
|
|
106
|
-
/**
|
|
107
|
-
* The normal pointing out of the solid at the middle of a face.
|
|
108
|
-
*
|
|
109
|
-
* Exported because the measurement endpoint needs the same normal to answer
|
|
110
|
-
* "what is the angle between these two faces", and a second copy of this would
|
|
111
|
-
* be free to drift from the one the face listing and the shell request agree on.
|
|
112
|
-
*/
|
|
113
|
-
export declare function faceOutwardNormal(cad: OcctKernel, face: ShapeHandle): Vec3 | null;
|
|
114
28
|
/** A shape's faces, numbered as a shell request refers to them by index. */
|
|
115
29
|
export declare function shapeFaces(shape: WorkplaneShape, options?: {
|
|
116
30
|
topology?: "exact";
|
|
@@ -122,5 +36,4 @@ export declare function shapeFaces(shape: WorkplaneShape, options?: {
|
|
|
122
36
|
* later treatment work from, and the mesh is what the viewport draws.
|
|
123
37
|
*/
|
|
124
38
|
export declare function applyShell(shape: WorkplaneShape, request: ServerCadShellRequest): Promise<ServerCadResult>;
|
|
125
|
-
export {};
|
|
126
39
|
//# sourceMappingURL=serverCadShell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverCadShell.d.ts","sourceRoot":"","sources":["../src/serverCadShell.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"serverCadShell.d.ts","sourceRoot":"","sources":["../src/serverCadShell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAsH,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACpL,OAAO,EAAiD,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5F,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IACzC,gFAAgF;IAChF,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,SAAS,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;CAC5C,CAAC;AAgBF,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAQhH;AAMD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAwB1G"}
|