@constructorfleet/sketchforge-engine 1.26.0 → 1.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/cadAnalysis.d.ts +94 -0
  2. package/dist/cadAnalysis.d.ts.map +1 -0
  3. package/dist/cadAnalysis.js +143 -0
  4. package/dist/cadAnalysis.js.map +1 -0
  5. package/dist/cadShell.d.ts +143 -0
  6. package/dist/cadShell.d.ts.map +1 -0
  7. package/dist/cadShell.js +306 -0
  8. package/dist/cadShell.js.map +1 -0
  9. package/dist/domain/sketchforge.d.ts +1 -1
  10. package/dist/domain/sketchforge.d.ts.map +1 -1
  11. package/dist/engine.d.ts.map +1 -1
  12. package/dist/engine.js +57 -15
  13. package/dist/engine.js.map +1 -1
  14. package/dist/parametricRecompute.d.ts.map +1 -1
  15. package/dist/parametricRecompute.js +7 -4
  16. package/dist/parametricRecompute.js.map +1 -1
  17. package/dist/revolveRequests.d.ts.map +1 -1
  18. package/dist/serverCadInterference.d.ts +8 -45
  19. package/dist/serverCadInterference.d.ts.map +1 -1
  20. package/dist/serverCadInterference.js +13 -42
  21. package/dist/serverCadInterference.js.map +1 -1
  22. package/dist/serverCadOperations.d.ts.map +1 -1
  23. package/dist/serverCadOperations.js +76 -25
  24. package/dist/serverCadOperations.js.map +1 -1
  25. package/dist/serverCadShell.d.ts +7 -94
  26. package/dist/serverCadShell.d.ts.map +1 -1
  27. package/dist/serverCadShell.js +25 -269
  28. package/dist/serverCadShell.js.map +1 -1
  29. package/dist/serverCadThickness.d.ts +8 -8
  30. package/dist/serverCadThickness.d.ts.map +1 -1
  31. package/dist/serverCadThickness.js +15 -42
  32. package/dist/serverCadThickness.js.map +1 -1
  33. package/dist/serverStepExplode.d.ts +1 -2
  34. package/dist/serverStepExplode.d.ts.map +1 -1
  35. package/dist/serverStepExplode.js +15 -148
  36. package/dist/serverStepExplode.js.map +1 -1
  37. package/dist/sketchFaceDraftKernel.d.ts +5 -5
  38. package/dist/sketchFaceDraftKernel.d.ts.map +1 -1
  39. package/dist/sketchFaceDraftKernel.js +11 -9
  40. package/dist/sketchFaceDraftKernel.js.map +1 -1
  41. package/dist/stepAssemblyExplode.d.ts +45 -0
  42. package/dist/stepAssemblyExplode.d.ts.map +1 -0
  43. package/dist/stepAssemblyExplode.js +195 -0
  44. package/dist/stepAssemblyExplode.js.map +1 -0
  45. package/dist/support/cadModifierTypes.d.ts +59 -0
  46. package/dist/support/cadModifierTypes.d.ts.map +1 -1
  47. package/dist/support/i18n/locales/en/messages.json +13 -1
  48. package/package.json +1 -1
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Split a retained STEP source into positioned, independently editable solids
3
+ * on whichever OCCT kernel the caller holds.
4
+ *
5
+ * The server runs this through `withCadKernel` (`serverStepExplode`), and the
6
+ * editor runs it on the browser kernel STEP import already loaded
7
+ * (`explodeStepAssemblyInBrowser`), so both produce the same groups and leaves.
8
+ */
9
+ import * as THREE from "three";
10
+ import { importedShapeFromTriangleSoup } from "./stlImport.js";
11
+ import { stepComponentMetadata, stepShapeKey } from "./stepComponentMetadata.js";
12
+ import { groupedShapeFromSelection } from "./serverShapeGroups.js";
13
+ import { loadOcctKernel } from "./support/lib/brepKernel.js";
14
+ import { meshYawDegrees } from "./workplaneShapes.js";
15
+ export const MAX_EXPLODE_SOLIDS = 200;
16
+ export const MAX_EXPLODE_SOURCE_BYTES = 8 * 1024 * 1024;
17
+ const X_AXIS = { point: { x: 0, y: 0, z: 0 }, direction: { x: 1, y: 0, z: 0 } };
18
+ /** A refused explosion: an English message, an HTTP-style status, and a stable reason. */
19
+ export class StepExplodeError extends Error {
20
+ reason;
21
+ status;
22
+ params;
23
+ constructor(reason, message, status = 422, params = {}) {
24
+ super(message);
25
+ this.name = "StepExplodeError";
26
+ this.reason = reason;
27
+ this.status = status;
28
+ this.params = params;
29
+ }
30
+ }
31
+ function boundsOf(cad, shape) {
32
+ return cad.getBoundingBox(shape, false);
33
+ }
34
+ function leafPaths(nodes, parentPath = []) {
35
+ return nodes.flatMap((node) => {
36
+ const path = [...parentPath, { ...(node.id ? { id: node.id } : {}), name: node.name }];
37
+ return node.children.length ? leafPaths(node.children, path) : [path];
38
+ });
39
+ }
40
+ function uniqueNamedPath(paths, name) {
41
+ const matches = paths.filter((path) => path.at(-1)?.name === name);
42
+ return matches.length === 1 ? matches[0] : undefined;
43
+ }
44
+ function groupExplodedHierarchy(parts, roots) {
45
+ const partsByOccurrence = new Map();
46
+ for (const part of parts) {
47
+ const occurrenceId = part.stepComponent?.occurrenceId;
48
+ if (!occurrenceId)
49
+ return null;
50
+ const matches = partsByOccurrence.get(occurrenceId) ?? [];
51
+ matches.push(part);
52
+ partsByOccurrence.set(occurrenceId, matches);
53
+ }
54
+ const consumed = new Set();
55
+ let complete = true;
56
+ const namedGroup = (name, children) => {
57
+ const group = groupedShapeFromSelection(children, { allowSingle: true, name });
58
+ if (!group) {
59
+ complete = false;
60
+ return children;
61
+ }
62
+ return [group];
63
+ };
64
+ const visit = (node) => {
65
+ if (!node.children.length) {
66
+ if (!node.id) {
67
+ complete = false;
68
+ return [];
69
+ }
70
+ const matches = partsByOccurrence.get(node.id);
71
+ if (!matches?.length) {
72
+ complete = false;
73
+ return [];
74
+ }
75
+ matches.forEach((part) => consumed.add(part));
76
+ return matches.length > 1 ? namedGroup(node.name, matches) : matches;
77
+ }
78
+ const children = node.children.flatMap(visit);
79
+ if (!children.length)
80
+ return [];
81
+ return namedGroup(node.name, children);
82
+ };
83
+ const grouped = roots.flatMap(visit);
84
+ // Keep the proven flat behavior when even one source solid cannot be
85
+ // associated to a product occurrence. A partial tree would hide geometry.
86
+ return complete && consumed.size === parts.length && grouped.length ? grouped : null;
87
+ }
88
+ /** Refuse, without touching a kernel, a shape or source that cannot be exploded. */
89
+ export function assertStepExplodable(shape, source) {
90
+ if (shape.importedMesh?.sourceFormat !== "step" || !shape.importedMesh.assetId) {
91
+ throw new StepExplodeError("not_step", "Only a STEP import with its original source asset can be exploded.");
92
+ }
93
+ if (source.sourceFormat !== "step" || source.byteLength > MAX_EXPLODE_SOURCE_BYTES) {
94
+ throw new StepExplodeError("source_too_large", `STEP explosion supports source files up to ${MAX_EXPLODE_SOURCE_BYTES} bytes.`, 413, { bytes: MAX_EXPLODE_SOURCE_BYTES });
95
+ }
96
+ }
97
+ /** Turn a STEP-imported mesh shape into one exact mesh/B-rep-backed shape per solid, on `cad`. */
98
+ export function explodeStepAssemblyWithKernel(cad, shape, source) {
99
+ assertStepExplodable(shape, source);
100
+ const imported = cad.importStep(new TextDecoder().decode(source.bytes));
101
+ const solids = cad.getSubShapes(imported, "solid");
102
+ if (solids.length < 2)
103
+ throw new StepExplodeError("single_solid", "This STEP file contains only one solid; there is nothing to explode.");
104
+ if (solids.length > MAX_EXPLODE_SOLIDS) {
105
+ throw new StepExplodeError("too_many_solids", `STEP explosion supports at most ${MAX_EXPLODE_SOLIDS} solids; this file contains ${solids.length}.`, 413, { max: MAX_EXPLODE_SOLIDS, count: solids.length });
106
+ }
107
+ // Match the importer's Z-up conversion and scene-wide recentering.
108
+ const turnedAssembly = cad.rotate(imported, X_AXIS, -Math.PI / 2);
109
+ const assemblyBounds = boundsOf(cad, turnedAssembly);
110
+ const centerX = (assemblyBounds.xmin + assemblyBounds.xmax) / 2;
111
+ const floorY = assemblyBounds.ymin;
112
+ const centerZ = (assemblyBounds.zmin + assemblyBounds.zmax) / 2;
113
+ const rotation = new THREE.Matrix4().makeRotationFromEuler(new THREE.Euler(THREE.MathUtils.degToRad(shape.rotationX ?? 0), THREE.MathUtils.degToRad(meshYawDegrees(shape)), THREE.MathUtils.degToRad(shape.rotationZ ?? 0), "XYZ"));
114
+ const mirrors = new THREE.Vector3(shape.mirrorX ? -1 : 1, shape.mirrorY ? -1 : 1, shape.mirrorZ ? -1 : 1);
115
+ const parentCenter = new THREE.Vector3(shape.x, (shape.elevation ?? 0) + shape.height / 2, shape.z);
116
+ const componentMetadata = stepComponentMetadata(cad, new TextDecoder().decode(source.bytes));
117
+ const paths = leafPaths(shape.stepAssembly ?? []);
118
+ const occurrencePartIndexes = new Map();
119
+ const parts = solids.map((solid, index) => {
120
+ const candidates = componentMetadata.bySolid.get(stepShapeKey(cad, solid)) ?? [];
121
+ const firstCandidate = candidates[0];
122
+ const metadata = firstCandidate ? {
123
+ ...(candidates.length === 1 && firstCandidate.name ? { name: firstCandidate.name } : {}),
124
+ ...(candidates.length === 1 && firstCandidate.occurrenceId ? { occurrenceId: firstCandidate.occurrenceId } : {}),
125
+ ...(candidates.every((candidate) => candidate.color === firstCandidate.color) && firstCandidate.color
126
+ ? { color: firstCandidate.color }
127
+ : {}),
128
+ } : undefined;
129
+ const path = metadata?.occurrenceId
130
+ ? paths.find((candidate) => candidate.at(-1)?.id === metadata.occurrenceId)
131
+ : metadata?.name ? uniqueNamedPath(paths, metadata.name) : undefined;
132
+ const occurrenceId = path?.at(-1)?.id;
133
+ const occurrencePartIndex = occurrenceId ? (occurrencePartIndexes.get(occurrenceId) ?? 0) : 0;
134
+ if (occurrenceId)
135
+ occurrencePartIndexes.set(occurrenceId, occurrencePartIndex + 1);
136
+ const componentName = path?.at(-1)?.name ?? (paths.length === 0 ? metadata?.name : undefined);
137
+ const turned = cad.rotate(solid, X_AXIS, -Math.PI / 2);
138
+ const positioned = cad.translate(turned, -centerX, -floorY, -centerZ);
139
+ const bounds = boundsOf(cad, positioned);
140
+ const partX = (bounds.xmin + bounds.xmax) / 2;
141
+ const partY = bounds.ymin;
142
+ const partZ = (bounds.zmin + bounds.zmax) / 2;
143
+ const local = cad.translate(positioned, -partX, -partY, -partZ);
144
+ const mesh = cad.tessellate(positioned);
145
+ const positions = [];
146
+ const normals = [];
147
+ for (let cursor = 0; cursor < mesh.indices.length; cursor += 1) {
148
+ const vertex = mesh.indices[cursor] * 3;
149
+ positions.push(mesh.positions[vertex], mesh.positions[vertex + 1], mesh.positions[vertex + 2]);
150
+ if (mesh.normals.length === mesh.positions.length)
151
+ normals.push(mesh.normals[vertex], mesh.normals[vertex + 1], mesh.normals[vertex + 2]);
152
+ }
153
+ const child = importedShapeFromTriangleSoup(componentName ?? `${shape.name} ${index + 1}`, positions, normals.length ? normals : undefined, "step");
154
+ const offset = new THREE.Vector3(partX, partY - shape.height / 2, partZ).multiply(mirrors).applyMatrix4(rotation).add(parentCenter);
155
+ child.color = metadata?.color ?? shape.color;
156
+ child.material = shape.material;
157
+ child.appearance = shape.appearance;
158
+ child.hole = shape.hole;
159
+ child.hidden = shape.hidden;
160
+ child.locked = shape.locked;
161
+ child.rotation = shape.rotation;
162
+ child.rotationX = shape.rotationX;
163
+ child.rotationZ = shape.rotationZ;
164
+ child.mirrorX = shape.mirrorX;
165
+ child.mirrorY = shape.mirrorY;
166
+ child.mirrorZ = shape.mirrorZ;
167
+ child.x = offset.x;
168
+ child.elevation = offset.y;
169
+ child.z = offset.z;
170
+ child.importedMesh.brepStep = cad.exportStep(local);
171
+ if (path && occurrenceId) {
172
+ child.stepComponent = {
173
+ id: `${occurrenceId}/solid-${occurrencePartIndex + 1}`,
174
+ occurrenceId,
175
+ path,
176
+ };
177
+ }
178
+ return child;
179
+ });
180
+ const grouped = groupExplodedHierarchy(parts, shape.stepAssembly ?? []);
181
+ return grouped ? { shapes: grouped, hierarchy: "nested" } : { shapes: parts, hierarchy: "flat" };
182
+ }
183
+ /**
184
+ * Explode on the browser kernel that STEP import loads.
185
+ *
186
+ * Like browser STEP import, this leaves the kernel's handle arena alone: the
187
+ * same kernel backs brepjs for STEP export, and emptying the arena under it
188
+ * would dangle handles it still holds.
189
+ */
190
+ export async function explodeStepAssemblyInBrowser(shape, source) {
191
+ assertStepExplodable(shape, source);
192
+ const kernel = await loadOcctKernel();
193
+ return explodeStepAssemblyWithKernel(kernel, shape, source);
194
+ }
195
+ //# sourceMappingURL=stepAssemblyExplode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stepAssemblyExplode.js","sourceRoot":"","sources":["../src/stepAssemblyExplode.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import type { LocalizedErrorPayload } from "./i18n/LocalizedError.js";
2
2
  import type { WorkplaneShape } from "./../domain/sketchforge.js";
3
3
  import type { SketchProfile } from "./../domain/sketchforge.js";
4
4
  import type { ResolvedSketchFaceDraftSource, RetainedFaceDraftResolution } from "./../sketchFaceDraftKernel.js";
5
+ import type { InterferenceOperand, InterferenceResult, WallThicknessResult } from "./../cadAnalysis.js";
5
6
  export type CadModifierKind = "chamfer" | "fillet";
6
7
  export type CadModifierEdge = {
7
8
  id: number;
@@ -74,6 +75,21 @@ export type CadModifierWorkerRequest = {
74
75
  type: "boolean";
75
76
  requestId: number;
76
77
  parts: CadModifierMeshPart[];
78
+ }
79
+ /** Read-only analysis (#380): exact gaps and overlap volumes between the operands. */
80
+ | {
81
+ type: "interference";
82
+ requestId: number;
83
+ operands: Array<InterferenceOperand & {
84
+ part: CadModifierMeshPart;
85
+ }>;
86
+ clearance: number;
87
+ }
88
+ /** Read-only analysis (#380): the sampled thinnest wall of one solid. */
89
+ | {
90
+ type: "wall-thickness";
91
+ requestId: number;
92
+ part: CadModifierMeshPart;
77
93
  } | {
78
94
  type: "draft-prism";
79
95
  requestId: number;
@@ -105,6 +121,17 @@ export type CadModifierWorkerRequest = {
105
121
  type: "exact";
106
122
  requestId: number;
107
123
  parts: CadModifierMeshPart[];
124
+ }
125
+ /**
126
+ * Hollow one shape to a wall of `thickness` mm, leaving `openFaces` off --
127
+ * direction names or indexes of the part's B-rep faces (#379).
128
+ */
129
+ | {
130
+ type: "shell";
131
+ requestId: number;
132
+ part: CadModifierMeshPart;
133
+ thickness: number;
134
+ openFaces: Array<number | string>;
108
135
  } | {
109
136
  type: "dispose";
110
137
  requestId: number;
@@ -137,6 +164,14 @@ export type CadModifierWorkerResponse = {
137
164
  /** Volume before and after the holes, so the caller can tell a cut that did nothing. */
138
165
  fusedVolume: number;
139
166
  cutVolume: number;
167
+ } | {
168
+ type: "interference";
169
+ requestId: number;
170
+ result: InterferenceResult;
171
+ } | {
172
+ type: "wall-thickness";
173
+ requestId: number;
174
+ result: WallThicknessOutcome;
140
175
  } | {
141
176
  type: "draft-prism";
142
177
  requestId: number;
@@ -179,6 +214,19 @@ export type CadModifierWorkerResponse = {
179
214
  brep: string;
180
215
  faceCount: number;
181
216
  faceGroups: number[];
217
+ } | {
218
+ type: "shell";
219
+ requestId: number;
220
+ positions: Float32Array;
221
+ normals: Float32Array;
222
+ indices: Uint32Array;
223
+ triangleCount: number;
224
+ brep: string;
225
+ faceGroups: number[];
226
+ faceCount: number;
227
+ /** The exact solid's volume after and before, so the caller can say what went. */
228
+ volume: number;
229
+ sourceVolume: number;
182
230
  } | {
183
231
  type: "disposed";
184
232
  requestId: number;
@@ -187,4 +235,15 @@ export type CadModifierWorkerResponse = {
187
235
  requestId: number;
188
236
  resetSession?: boolean;
189
237
  } & LocalizedErrorPayload);
238
+ /** A sampled wall thickness, or why the solid could not be sampled at all. */
239
+ export type WallThicknessOutcome = {
240
+ ok: true;
241
+ value: WallThicknessResult;
242
+ } | {
243
+ ok: false;
244
+ refusal: {
245
+ reason: "no_faces" | "too_many_faces";
246
+ limit?: number;
247
+ };
248
+ };
190
249
  //# sourceMappingURL=cadModifierTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cadModifierTypes.d.ts","sourceRoot":"","sources":["../../src/support/cadModifierTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cadModifierTypes.d.ts","sourceRoot":"","sources":["../../src/support/cadModifierTypes.ts"],"names":[],"mappings":"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"}
@@ -1278,7 +1278,19 @@
1278
1278
  "validatorReset": "The CAD kernel exposed an incomplete validation function and reset. Start the edge tool again; no page refresh is needed.",
1279
1279
  "memoryFaultReset": "The CAD kernel hit a memory fault and reset. Start the edge tool again; no page refresh is needed.",
1280
1280
  "draftNotRetained": "The face draft cannot be kept with the sketch: the drafted face is not flat, or no longer matches one side of the profile. Undo the change, or draft another face.",
1281
- "draftNotReplayable": "The draft this shape keeps cannot be rebuilt, because the shape has been mirrored, resized, filleted or chamfered since it was drafted. Undo that change first; the shape and its sketch are left as they were."
1281
+ "draftNotReplayable": "The draft this shape keeps cannot be rebuilt, because the shape has been mirrored, resized, filleted or chamfered since it was drafted. Undo that change first; the shape and its sketch are left as they were.",
1282
+ "shell": {
1283
+ "thicknessInvalid": "Enter a wall thickness greater than zero.",
1284
+ "noVolume": "This shape has no volume to hollow out.",
1285
+ "faceIndexInvalid": "One of the faces to leave open is not on this shape. Choose faces from the Faces card's numbers.",
1286
+ "noFlatFace": "This shape has no flat face on that side to leave open. Hollow it sealed, or choose its faces by number.",
1287
+ "everyFaceOpen": "Leaving every face open would remove the shape rather than hollow it. Leave at least one face closed.",
1288
+ "tooThick": "That wall is too thick for this shape: hollowing it leaves no cavity. Try a thinner wall.",
1289
+ "cannotOffset": "This shape's surfaces cannot be offset inwards into a sound wall. A ball with unequal radii, a pointed cone, a tube, ring, round roof or loft fails this way at any thickness; cut a cavity with a hole shape instead.",
1290
+ "unreadable": "The hollowed solid could not be stored. Try a different wall thickness.",
1291
+ "unsupported": "This shape cannot be hollowed exactly. Hollow a box, cylinder, polygon, pyramid, roof, wedge, sphere, torus or cone with a flat top, or a shape that already has exact faces.",
1292
+ "treated": "A shape with a fillet, chamfer or draft cannot be hollowed, because nothing could rebuild the treatment on the wall. Undo the treatment, hollow the shape, then treat it again."
1293
+ }
1282
1294
  },
1283
1295
  "mesh": {
1284
1296
  "incompleteTriangles": "Mesh does not contain complete triangles",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@constructorfleet/sketchforge-engine",
3
- "version": "1.26.0",
3
+ "version": "1.27.0",
4
4
  "description": "Portable geometry and project engine for SketchForge.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "publishConfig": {