@constructorfleet/sketchforge-engine 1.18.0 → 1.20.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 (45) hide show
  1. package/README.md +3 -3
  2. package/dist/domain/sketchforge.d.ts +39 -0
  3. package/dist/domain/sketchforge.d.ts.map +1 -1
  4. package/dist/engine.d.ts +1 -1
  5. package/dist/engine.d.ts.map +1 -1
  6. package/dist/engine.js +364 -21
  7. package/dist/engine.js.map +1 -1
  8. package/dist/faceLineage.d.ts +10 -0
  9. package/dist/faceLineage.d.ts.map +1 -0
  10. package/dist/faceLineage.js +84 -0
  11. package/dist/faceLineage.js.map +1 -0
  12. package/dist/parametricRecompute.d.ts +2 -0
  13. package/dist/parametricRecompute.d.ts.map +1 -1
  14. package/dist/parametricRecompute.js +85 -0
  15. package/dist/parametricRecompute.js.map +1 -1
  16. package/dist/revolveRequests.d.ts +10 -0
  17. package/dist/revolveRequests.d.ts.map +1 -1
  18. package/dist/serverCadOperations.d.ts +54 -3
  19. package/dist/serverCadOperations.d.ts.map +1 -1
  20. package/dist/serverCadOperations.js +224 -6
  21. package/dist/serverCadOperations.js.map +1 -1
  22. package/dist/serverCadShell.d.ts +3 -1
  23. package/dist/serverCadShell.d.ts.map +1 -1
  24. package/dist/serverCadShell.js +15 -5
  25. package/dist/serverCadShell.js.map +1 -1
  26. package/dist/sketchExtrusionRequest.d.ts +4 -0
  27. package/dist/sketchExtrusionRequest.d.ts.map +1 -0
  28. package/dist/sketchExtrusionRequest.js +92 -0
  29. package/dist/sketchExtrusionRequest.js.map +1 -0
  30. package/dist/skfProject.d.ts.map +1 -1
  31. package/dist/skfProject.js +85 -8
  32. package/dist/skfProject.js.map +1 -1
  33. package/dist/stepComponentMetadata.d.ts.map +1 -1
  34. package/dist/stepComponentMetadata.js +55 -2
  35. package/dist/stepComponentMetadata.js.map +1 -1
  36. package/dist/stepExport.d.ts.map +1 -1
  37. package/dist/stepExport.js +54 -8
  38. package/dist/stepExport.js.map +1 -1
  39. package/dist/stepGlbColors.d.ts.map +1 -1
  40. package/dist/stepGlbColors.js +10 -2
  41. package/dist/stepGlbColors.js.map +1 -1
  42. package/dist/support/lib/operator-configuration.json +78 -2
  43. package/dist/support/lib/operatorConfiguration.d.ts +26 -2
  44. package/dist/support/lib/operatorConfiguration.d.ts.map +1 -1
  45. package/package.json +1 -1
@@ -0,0 +1,92 @@
1
+ import { createLocalId } from "./localIds.js";
2
+ import { withCadKernel } from "./serverCadKernel.js";
3
+ import { cadSketchRegions } from "./sketchCadProfile.js";
4
+ import { canonicalizeShape, cleanNearZero } from "./workplaneShapes.js";
5
+ function pathWire(cad, path) {
6
+ return cad.makeWire(path.steps.map(({ segment, from, to }) => {
7
+ const forward = segment.startId === from.id;
8
+ const first = forward ? from.handleOut : from.handleIn;
9
+ const second = forward ? to.handleIn : to.handleOut;
10
+ if (segment.kind !== "line" && first && second) {
11
+ return cad.makeBezierEdge([
12
+ { x: from.x, y: 0, z: from.z }, { x: first.x, y: 0, z: first.z },
13
+ { x: second.x, y: 0, z: second.z }, { x: to.x, y: 0, z: to.z },
14
+ ]);
15
+ }
16
+ return cad.makeLineEdge({ x: from.x, y: 0, z: from.z }, { x: to.x, y: 0, z: to.z });
17
+ }));
18
+ }
19
+ /** Rebuild a retained sketch extrusion as exact OCCT geometry. */
20
+ export async function sketchExtrusionShapeFromRequest(request) {
21
+ const profile = request.profile;
22
+ const height = request.height;
23
+ if (typeof height !== "number" || !Number.isFinite(height) || height <= 0 || height > 10000) {
24
+ throw new Error("A sketch extrusion height must be finite and greater than zero.");
25
+ }
26
+ return withCadKernel((cad) => {
27
+ const regions = cadSketchRegions(profile);
28
+ if (regions.length === 0)
29
+ throw new Error("A sketch extrusion requires a closed profile.");
30
+ const solids = regions.map((region) => {
31
+ let face = cad.makeFace(pathWire(cad, region.outer));
32
+ if (region.holes.length)
33
+ face = cad.addHolesInFace(face, region.holes.map((hole) => pathWire(cad, hole)));
34
+ return cad.extrude(face, 0, height, 0);
35
+ });
36
+ const solid = solids.length === 1 ? solids[0] : cad.makeCompound(solids);
37
+ if (!cad.isValid(solid))
38
+ throw new Error("The sketch extrusion produced invalid geometry.");
39
+ const mesh = cad.tessellate(solid, { linearDeflection: 0.05, angularDeflection: 0.16 });
40
+ if (mesh.positions.length < 9 || mesh.indices.length < 3)
41
+ throw new Error("The sketch extrusion produced no solid geometry.");
42
+ let minX = Infinity, minY = Infinity, minZ = Infinity;
43
+ let maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;
44
+ for (let i = 0; i < mesh.positions.length; i += 3) {
45
+ minX = Math.min(minX, mesh.positions[i]);
46
+ maxX = Math.max(maxX, mesh.positions[i]);
47
+ minY = Math.min(minY, mesh.positions[i + 1]);
48
+ maxY = Math.max(maxY, mesh.positions[i + 1]);
49
+ minZ = Math.min(minZ, mesh.positions[i + 2]);
50
+ maxZ = Math.max(maxZ, mesh.positions[i + 2]);
51
+ }
52
+ const centerX = (minX + maxX) / 2;
53
+ const centerZ = (minZ + maxZ) / 2;
54
+ const positions = [];
55
+ const normals = [];
56
+ for (const index of mesh.indices) {
57
+ const vertex = index * 3;
58
+ positions.push(mesh.positions[vertex] - centerX, mesh.positions[vertex + 1] - minY, mesh.positions[vertex + 2] - centerZ);
59
+ if (mesh.normals.length >= vertex + 3)
60
+ normals.push(mesh.normals[vertex], mesh.normals[vertex + 1], mesh.normals[vertex + 2]);
61
+ }
62
+ const width = Math.max(0.01, maxX - minX);
63
+ const depth = Math.max(0.01, maxZ - minZ);
64
+ const builtHeight = Math.max(0.01, maxY - minY);
65
+ const id = typeof request.id === "string" ? request.id : createLocalId("sketch-extrusion");
66
+ return canonicalizeShape({
67
+ id,
68
+ name: typeof request.name === "string" && request.name.trim() ? request.name.trim() : "Sketch extrusion",
69
+ kind: "mesh",
70
+ color: typeof request.color === "string" ? request.color : "#d41721",
71
+ x: cleanNearZero(centerX, 0.0005) + (typeof request.x === "number" ? request.x : 0),
72
+ z: cleanNearZero(centerZ, 0.0005) + (typeof request.z === "number" ? request.z : 0),
73
+ elevation: cleanNearZero(minY, 0.0005) + (typeof request.elevation === "number" ? request.elevation : 0),
74
+ width, depth, height: builtHeight, size: Math.max(width, depth),
75
+ rotation: typeof request.rotation === "number" ? request.rotation : 0,
76
+ rotationX: typeof request.rotationX === "number" ? request.rotationX : 0,
77
+ rotationZ: typeof request.rotationZ === "number" ? request.rotationZ : 0,
78
+ hole: request.hole === true,
79
+ sketchProfile: structuredClone(profile), sketchOperation: "extrude",
80
+ sketchSourceId: typeof request.sketchSourceId === "string" ? request.sketchSourceId : `sketch/${id}`,
81
+ importedMesh: {
82
+ positions, normals: normals.length === positions.length ? normals : undefined,
83
+ baseWidth: width, baseDepth: depth, baseHeight: builtHeight,
84
+ triangleCount: Math.floor(mesh.indices.length / 3), sourceFormat: "json",
85
+ },
86
+ cadBrep: cad.toBREP(solid),
87
+ faceIds: cad.getSubShapes(solid, "face").map((_, index) => `face_${createLocalId(`${id}-face-${index}`)}`),
88
+ cadBrepFrame: { x: centerX, z: centerZ, elevation: minY, width, depth, height: builtHeight },
89
+ });
90
+ });
91
+ }
92
+ //# sourceMappingURL=sketchExtrusionRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sketchExtrusionRequest.js","sourceRoot":"","sources":["../src/sketchExtrusionRequest.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skfProject.d.ts","sourceRoot":"","sources":["../src/skfProject.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skfProject.d.ts","sourceRoot":"","sources":["../src/skfProject.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import { canonicalizeShape } from "./workplaneShapes.js";
8
8
  import { importedShapeFromStl } from "./stlImport.js";
9
9
  import { importedShapeFromSvg } from "./svgImport.js";
10
10
  import { normalizeSnapGrid, normalizeWorkspaceSettings } from "./workplaneSettings.js";
11
+ import { cadSketchRegions } from "./sketchCadProfile.js";
11
12
  export const SKF_SCHEMA_ID = "com.sketchforge.project";
12
13
  export const SKF_FORMAT_VERSION = 2;
13
14
  export const SKF_MINIMUM_READER_VERSION = 2;
@@ -30,7 +31,7 @@ const SHAPE_KINDS = new Set([
30
31
  ]);
31
32
  const LOFT_PROFILE_SHAPES = new Set(["Oval", "Rectangle", "Triangle", "Pentagon", "Hexagon"]);
32
33
  const FEATURE_TYPES = new Set([
33
- "group", "boolean-subtraction", "boolean-intersection", "mirror", "sketch-extrusion", "sketch-revolve", "sketch-sweep", "fillet", "chamfer",
34
+ "group", "boolean-subtraction", "boolean-intersection", "mirror", "sketch-extrusion", "sketch-revolve", "sketch-sweep", "fillet", "chamfer", "face-draft",
34
35
  ]);
35
36
  function exactArrayBuffer(bytes) {
36
37
  return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
@@ -438,6 +439,8 @@ async function serializeShapeNode(shape, nodeId, nodes, builder, sourceAssetsByA
438
439
  sketchRevolve: undefined,
439
440
  sketchSourceId: undefined,
440
441
  sketchSourceNodeId: undefined,
442
+ faceDraft: undefined,
443
+ faceDraftSourceFrame: undefined,
441
444
  sketchSourceOfObjectId: shape.id,
442
445
  },
443
446
  });
@@ -590,6 +593,19 @@ function activeProjectIndexes(state) {
590
593
  });
591
594
  previous = featureId;
592
595
  });
596
+ const faceDraft = node.definition.faceDraft;
597
+ if (faceDraft) {
598
+ const featureId = `feature/${safeNodeToken(node.nodeId)}/face-draft`;
599
+ features.push({
600
+ id: featureId,
601
+ type: "face-draft",
602
+ outputObjectId: node.objectId,
603
+ inputObjectIds: [node.objectId],
604
+ dependsOnFeatureIds: previous ? [previous] : [],
605
+ parameters: { ...faceDraft },
606
+ });
607
+ previous = featureId;
608
+ }
593
609
  if (node.definition.mirrorX || node.definition.mirrorY || node.definition.mirrorZ) {
594
610
  const featureId = `feature/${safeNodeToken(node.nodeId)}/mirror`;
595
611
  features.push({
@@ -866,12 +882,19 @@ function validateSketchProfile(value, label) {
866
882
  throw new LocalizedError("errors.skf.fieldInvalid", { label: `${constraintLabel}.id` });
867
883
  constraintIds.add(id);
868
884
  const kind = stringValue(constraint.kind, `${constraintLabel}.kind`);
869
- if (kind === "horizontal" || kind === "vertical") {
885
+ if (kind === "fixed") {
886
+ const pointId = stringValue(constraint.pointId, `${constraintLabel}.pointId`);
887
+ if (!pointIds.has(pointId))
888
+ throw new LocalizedError("errors.skf.fieldInvalid", { label: `${constraintLabel}.pointId` });
889
+ finiteNumber(constraint.xMm, `${constraintLabel}.xMm`);
890
+ finiteNumber(constraint.zMm, `${constraintLabel}.zMm`);
891
+ }
892
+ else if (kind === "horizontal" || kind === "vertical") {
870
893
  if (!segmentIds.has(stringValue(constraint.segmentId, `${constraintLabel}.segmentId`))) {
871
894
  throw new LocalizedError("errors.skf.fieldInvalid", { label: `${constraintLabel}.segmentId` });
872
895
  }
873
896
  }
874
- else if (kind === "perpendicular") {
897
+ else if (kind === "perpendicular" || kind === "parallel") {
875
898
  if (!Array.isArray(constraint.segmentIds) || constraint.segmentIds.length !== 2 || constraint.segmentIds[0] === constraint.segmentIds[1] || !constraint.segmentIds.every((segmentId) => typeof segmentId === "string" && segmentIds.has(segmentId))) {
876
899
  throw new LocalizedError("errors.skf.fieldInvalid", { label: `${constraintLabel}.segmentIds` });
877
900
  }
@@ -890,7 +913,7 @@ function validateSketchProfile(value, label) {
890
913
  });
891
914
  }
892
915
  }
893
- function validateShapeDefinition(definition, label) {
916
+ function validateShapeDefinition(definition, label, options = {}) {
894
917
  const id = stringValue(definition.id, `${label}.id`);
895
918
  stringValue(definition.name, `${label}.name`);
896
919
  const kind = stringValue(definition.kind, `${label}.kind`);
@@ -919,13 +942,13 @@ function validateShapeDefinition(definition, label) {
919
942
  if (definition.faceColors !== undefined) {
920
943
  const colors = objectRecord(definition.faceColors, `${label}.faceColors`);
921
944
  for (const [faceId, color] of Object.entries(colors)) {
922
- if (!(/^(?:\d+|face_.+)$/.test(faceId)) || typeof color !== "string" || !/^#[0-9a-fA-F]{6}(?:[0-9a-fA-F]{2})?$/.test(color)) {
945
+ if (!faceId.trim() || typeof color !== "string" || !/^#[0-9a-fA-F]{6}(?:[0-9a-fA-F]{2})?$/.test(color)) {
923
946
  throw new LocalizedError("errors.skf.fieldInvalid", { label: `${label}.faceColors.${faceId}` });
924
947
  }
925
948
  }
926
949
  }
927
950
  if (definition.faceIds !== undefined && (!Array.isArray(definition.faceIds)
928
- || definition.faceIds.some((faceId) => typeof faceId !== "string" || !faceId.startsWith("face_"))
951
+ || definition.faceIds.some((faceId) => typeof faceId !== "string" || !faceId.trim())
929
952
  || new Set(definition.faceIds).size !== definition.faceIds.length)) {
930
953
  throw new LocalizedError("errors.skf.fieldInvalid", { label: `${label}.faceIds` });
931
954
  }
@@ -960,6 +983,56 @@ function validateShapeDefinition(definition, label) {
960
983
  finiteNumber(settings[field], `${label}.sketchRevolve.${field}`);
961
984
  });
962
985
  }
986
+ if (definition.faceDraft !== undefined) {
987
+ const draft = objectRecord(definition.faceDraft, `${label}.faceDraft`);
988
+ const revolveSettings = definition.sketchRevolve && typeof definition.sketchRevolve === "object" && !Array.isArray(definition.sketchRevolve)
989
+ ? definition.sketchRevolve
990
+ : undefined;
991
+ const plainFullTurnRevolve = definition.sketchOperation === "revolve" && revolveSettings
992
+ && typeof revolveSettings.sweepAngle === "number"
993
+ && Math.abs(Math.abs(revolveSettings.sweepAngle) - 360) <= 1e-6
994
+ && (revolveSettings.pitch === undefined || revolveSettings.pitch === 0)
995
+ && (revolveSettings.coreRadius === undefined || revolveSettings.coreRadius === 0);
996
+ if (kind !== "mesh"
997
+ || (definition.sketchOperation !== "extrude" && definition.sketchOperation !== "sweep" && !plainFullTurnRevolve)
998
+ || definition.sketchProfile === undefined
999
+ || plainFullTurnRevolve && cadSketchRegions(definition.sketchProfile).length !== 1
1000
+ || definition.sketchSourceId === undefined
1001
+ || definition.draftPrismAngle !== undefined
1002
+ || (Array.isArray(definition.edgeTreatments) && definition.edgeTreatments.length > 0)
1003
+ || options.hasEdgeTreatmentHistory) {
1004
+ throw new LocalizedError("errors.skf.fieldInvalid", { label: `${label}.faceDraft` });
1005
+ }
1006
+ const sourceFaceId = stringValue(draft.sourceFaceId, `${label}.faceDraft.sourceFaceId`);
1007
+ if (!sourceFaceId.trim())
1008
+ throw new LocalizedError("errors.skf.fieldInvalid", { label: `${label}.faceDraft.sourceFaceId` });
1009
+ const angle = finiteNumber(draft.angle, `${label}.faceDraft.angle`);
1010
+ if (angle === 0 || Math.abs(angle) >= 45)
1011
+ throw new LocalizedError("errors.skf.outOfRange", { label: `${label}.faceDraft.angle` });
1012
+ if (!["x", "y", "z", "-x", "-y", "-z"].includes(draft.pullDirection)) {
1013
+ throw new LocalizedError("errors.skf.fieldInvalid", { label: `${label}.faceDraft.pullDirection` });
1014
+ }
1015
+ const normal = objectRecord(draft.sourceFaceNormal, `${label}.faceDraft.sourceFaceNormal`);
1016
+ const coordinates = ["x", "y", "z"].map((axis) => finiteNumber(normal[axis], `${label}.faceDraft.sourceFaceNormal.${axis}`));
1017
+ const magnitude = Math.hypot(...coordinates);
1018
+ if (Math.abs(magnitude - 1) > 1e-4)
1019
+ throw new LocalizedError("errors.skf.fieldInvalid", { label: `${label}.faceDraft.sourceFaceNormal` });
1020
+ }
1021
+ if (definition.faceDraftSourceFrame !== undefined) {
1022
+ const frame = objectRecord(definition.faceDraftSourceFrame, `${label}.faceDraftSourceFrame`);
1023
+ ["x", "z", "elevation", "width", "depth", "height"].forEach((field) => finiteNumber(frame[field], `${label}.faceDraftSourceFrame.${field}`));
1024
+ if (["width", "depth", "height"].some((field) => frame[field] <= 0)) {
1025
+ throw new LocalizedError("errors.skf.nonPositiveDimensions", { label: `${label}.faceDraftSourceFrame` });
1026
+ }
1027
+ }
1028
+ if (definition.faceDraftSourceScale !== undefined) {
1029
+ const scale = objectRecord(definition.faceDraftSourceScale, `${label}.faceDraftSourceScale`);
1030
+ ["width", "depth", "height"].forEach((field) => {
1031
+ if (finiteNumber(scale[field], `${label}.faceDraftSourceScale.${field}`) <= 0) {
1032
+ throw new LocalizedError("errors.skf.fieldInvalid", { label: `${label}.faceDraftSourceScale.${field}` });
1033
+ }
1034
+ });
1035
+ }
963
1036
  if (kind === "gear") {
964
1037
  const teeth = finiteNumber(definition.teeth, `${label}.teeth`);
965
1038
  if (!Number.isInteger(teeth) || teeth < 6 || teeth > 64)
@@ -1128,7 +1201,9 @@ async function validateDocumentAndAssets(raw, files) {
1128
1201
  if (nodeById.has(nodeId))
1129
1202
  throw new LocalizedError("errors.skf.stateDuplicateNodeId", { state: stateId, id: nodeId });
1130
1203
  const definition = objectRecord(node.definition, `node '${nodeId}'.definition`);
1131
- const objectId = validateShapeDefinition(definition, `node '${nodeId}'`);
1204
+ const objectId = validateShapeDefinition(definition, `node '${nodeId}'`, {
1205
+ hasEdgeTreatmentHistory: Boolean(node.edgeTreatmentHistory?.length),
1206
+ });
1132
1207
  if (node.objectId !== objectId)
1133
1208
  throw new LocalizedError("errors.skf.nodeObjectIdMismatch", { id: nodeId });
1134
1209
  if (node.importedMesh) {
@@ -1461,7 +1536,9 @@ function validateLegacyRuntimeShape(shape, label) {
1461
1536
  delete definition.groupedShapes;
1462
1537
  delete definition.edgeTreatmentHistory;
1463
1538
  delete definition.cadBrep;
1464
- validateShapeDefinition(definition, label);
1539
+ validateShapeDefinition(definition, label, {
1540
+ hasEdgeTreatmentHistory: Array.isArray(edgeHistory) && edgeHistory.length > 0,
1541
+ });
1465
1542
  if (importedMesh) {
1466
1543
  const mesh = objectRecord(importedMesh, `${label}.importedMesh`);
1467
1544
  if (!Array.isArray(mesh.positions) || mesh.positions.length > SKF_LIMITS.meshNumbers || mesh.positions.some((value) => typeof value !== "number" || !Number.isFinite(value))) {