@constructorfleet/sketchforge-engine 1.14.0 → 1.16.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 (59) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +61 -3
  3. package/dist/domain/sketchforge.d.ts +25 -0
  4. package/dist/domain/sketchforge.d.ts.map +1 -1
  5. package/dist/engine.d.ts.map +1 -1
  6. package/dist/engine.js +159 -6
  7. package/dist/engine.js.map +1 -1
  8. package/dist/projectMeshes.d.ts.map +1 -1
  9. package/dist/projectMeshes.js +4 -2
  10. package/dist/projectMeshes.js.map +1 -1
  11. package/dist/revolveRequests.d.ts +94 -1
  12. package/dist/revolveRequests.d.ts.map +1 -1
  13. package/dist/revolveRequests.js +3 -1
  14. package/dist/revolveRequests.js.map +1 -1
  15. package/dist/serverStepExplode.d.ts.map +1 -1
  16. package/dist/serverStepExplode.js +34 -2
  17. package/dist/serverStepExplode.js.map +1 -1
  18. package/dist/shapeRequests.d.ts +1 -1
  19. package/dist/shapeRequests.d.ts.map +1 -1
  20. package/dist/shapeRequests.js +1 -1
  21. package/dist/shapeRequests.js.map +1 -1
  22. package/dist/sketchCadProfile.d.ts +23 -0
  23. package/dist/sketchCadProfile.d.ts.map +1 -0
  24. package/dist/sketchCadProfile.js +166 -0
  25. package/dist/sketchCadProfile.js.map +1 -0
  26. package/dist/sketchCadSweep.d.ts +4 -0
  27. package/dist/sketchCadSweep.d.ts.map +1 -0
  28. package/dist/sketchCadSweep.js +95 -0
  29. package/dist/sketchCadSweep.js.map +1 -0
  30. package/dist/sketchSweepRequest.d.ts +5 -0
  31. package/dist/sketchSweepRequest.d.ts.map +1 -0
  32. package/dist/sketchSweepRequest.js +107 -0
  33. package/dist/sketchSweepRequest.js.map +1 -0
  34. package/dist/skfProject.d.ts +2 -0
  35. package/dist/skfProject.d.ts.map +1 -1
  36. package/dist/skfProject.js +76 -3
  37. package/dist/skfProject.js.map +1 -1
  38. package/dist/stepAssemblyHierarchy.d.ts +14 -0
  39. package/dist/stepAssemblyHierarchy.d.ts.map +1 -0
  40. package/dist/stepAssemblyHierarchy.js +170 -0
  41. package/dist/stepAssemblyHierarchy.js.map +1 -0
  42. package/dist/stepComponentMetadata.d.ts +9 -1
  43. package/dist/stepComponentMetadata.d.ts.map +1 -1
  44. package/dist/stepComponentMetadata.js +6 -2
  45. package/dist/stepComponentMetadata.js.map +1 -1
  46. package/dist/stepGlbColors.d.ts.map +1 -1
  47. package/dist/stepGlbColors.js +2 -25
  48. package/dist/stepGlbColors.js.map +1 -1
  49. package/dist/stepGlbDocument.d.ts +25 -0
  50. package/dist/stepGlbDocument.d.ts.map +1 -0
  51. package/dist/stepGlbDocument.js +27 -0
  52. package/dist/stepGlbDocument.js.map +1 -0
  53. package/dist/stepImportCommon.d.ts.map +1 -1
  54. package/dist/stepImportCommon.js +9 -9
  55. package/dist/stepImportCommon.js.map +1 -1
  56. package/dist/workplaneShapes.d.ts.map +1 -1
  57. package/dist/workplaneShapes.js +3 -1
  58. package/dist/workplaneShapes.js.map +1 -1
  59. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sketchCadProfile.js","sourceRoot":"","sources":["../src/sketchCadProfile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type OcctKernel, type ShapeHandle } from "occt-wasm";
2
+ import { cadSketchSweepPaths } from "./sketchCadProfile.js";
3
+ export declare function buildCadSketchSweep(cad: OcctKernel, profile: Parameters<typeof cadSketchSweepPaths>[0]): ShapeHandle;
4
+ //# sourceMappingURL=sketchCadSweep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sketchCadSweep.d.ts","sourceRoot":"","sources":["../src/sketchCadSweep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,UAAU,EAAE,KAAK,WAAW,EAAa,MAAM,WAAW,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,uBAAuB,CAAC;AAuBvF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CA6BpH"}
@@ -0,0 +1,95 @@
1
+ import { TransitionMode } from "occt-wasm";
2
+ import { cadSketchSweepPaths } from "./sketchCadProfile.js";
3
+ import { LocalizedError } from "./support/i18n/LocalizedError.js";
4
+ import { deriveSketchSweepFrames, sketchSweepSpinePointInSection } from "./sketchSweepFrames.js";
5
+ function pathWire(cad, path, map = (point) => ({ x: point.x, y: 0, z: point.z })) {
6
+ const edges = 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
+ map(from),
13
+ map({ ...first, sweepDepth: first.sweepDepth ?? from.sweepDepth }),
14
+ map({ ...second, sweepDepth: second.sweepDepth ?? to.sweepDepth }),
15
+ map(to),
16
+ ]);
17
+ }
18
+ return cad.makeLineEdge(map(from), map(to));
19
+ });
20
+ return cad.makeWire(edges);
21
+ }
22
+ export function buildCadSketchSweep(cad, profile) {
23
+ const { sections, spine: rawSpine } = cadSketchSweepPaths(profile);
24
+ const defaultSection = {
25
+ origin: { x: 0, y: 0, z: 0 },
26
+ normal: { x: 0, y: 1, z: 0 },
27
+ xAxis: { x: 1, y: 0, z: 0 },
28
+ zAxis: { x: 0, y: 0, z: 1 },
29
+ };
30
+ const frames = profile.sweepFrames ?? deriveSketchSweepFrames(defaultSection);
31
+ const spineInOrthogonalPlane = (point) => {
32
+ const position = sketchSweepSpinePointInSection(frames, point);
33
+ return { ...position, z: position.z + (point.sweepDepth ?? 0) };
34
+ };
35
+ const spine = orientedSpine(rawSpine, spineInOrthogonalPlane);
36
+ // The builder returns geometry in the section frame's canonical coordinates.
37
+ // The editor applies the selected workplane transform once after meshing.
38
+ const sectionInWorkplane = (point) => ({ x: point.x, y: 0, z: point.z });
39
+ const spineWire = pathWire(cad, spine, spineInOrthogonalPlane);
40
+ const solids = sections.map((region) => {
41
+ const solid = cad.sweep(pathWire(cad, region.outer, sectionInWorkplane), spineWire, TransitionMode.RoundCorner);
42
+ if (region.holes.length === 0)
43
+ return solid;
44
+ const cut = region.holes.reduce((result, hole) => {
45
+ const holeSolid = cad.sweep(pathWire(cad, hole, sectionInWorkplane), spineWire, TransitionMode.RoundCorner);
46
+ return cad.cut(result, holeSolid);
47
+ }, solid);
48
+ const remainingSolids = cad.getSubShapes(cut, "solid");
49
+ return remainingSolids.length === 1 ? remainingSolids[0] : cut;
50
+ });
51
+ return solids.length === 1 ? solids[0] : cad.makeCompound(solids);
52
+ }
53
+ function orientedSpine(path, map) {
54
+ if (path.steps.length === 0)
55
+ throw new LocalizedError("errors.sketch.sweepNeedsSectionAndSpine");
56
+ const reversed = reversePath(path);
57
+ const forwardAligned = initialTangentIsNormal(path, map);
58
+ const reverseAligned = initialTangentIsNormal(reversed, map);
59
+ if (!forwardAligned && !reverseAligned)
60
+ throw new LocalizedError("errors.sketch.sweepSpineDirection");
61
+ if (forwardAligned && reverseAligned) {
62
+ const forwardStart = path.steps[0].from;
63
+ const reverseStart = reversed.steps[0].from;
64
+ const forwardDistance = forwardStart.x ** 2 + forwardStart.z ** 2 + (forwardStart.sweepDepth ?? 0) ** 2;
65
+ const reverseDistance = reverseStart.x ** 2 + reverseStart.z ** 2 + (reverseStart.sweepDepth ?? 0) ** 2;
66
+ return reverseDistance < forwardDistance ? reversed : path;
67
+ }
68
+ return reverseAligned ? reversed : path;
69
+ }
70
+ function initialTangentIsNormal(path, map) {
71
+ const step = path.steps[0];
72
+ if (!step)
73
+ return false;
74
+ const forward = step.segment.startId === step.from.id;
75
+ const firstControl = forward ? step.from.handleOut : step.from.handleIn;
76
+ const secondControl = forward ? step.to.handleIn : step.to.handleOut;
77
+ const firstHandle = step.segment.kind !== "line" && firstControl && secondControl ? firstControl : undefined;
78
+ const start = map(step.from);
79
+ const tangentEnd = firstHandle
80
+ ? map({ ...firstHandle, sweepDepth: firstHandle.sweepDepth ?? step.from.sweepDepth })
81
+ : map(step.to);
82
+ const dx = tangentEnd.x - start.x;
83
+ const dy = tangentEnd.y - start.y;
84
+ const dz = tangentEnd.z - start.z;
85
+ const length = Math.hypot(dx, dy, dz);
86
+ return length > 0 && Math.hypot(dx, dz) <= length * 1e-6;
87
+ }
88
+ function reversePath(path) {
89
+ return {
90
+ ...path,
91
+ points: [...path.points].reverse(),
92
+ steps: [...path.steps].reverse().map((step) => ({ ...step, from: step.to, to: step.from })),
93
+ };
94
+ }
95
+ //# sourceMappingURL=sketchCadSweep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sketchCadSweep.js","sourceRoot":"","sources":["../src/sketchCadSweep.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { WorkplaneShape } from "./domain/sketchforge.js";
2
+ export declare function invalidSketchSweepProfile(profile: unknown): string | null;
3
+ /** Build a retained sketch sweep from the public shape request's profile. */
4
+ export declare function sketchSweepShapeFromRequest(request: Record<string, unknown>): Promise<WorkplaneShape>;
5
+ //# sourceMappingURL=sketchSweepRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sketchSweepRequest.d.ts","sourceRoot":"","sources":["../src/sketchSweepRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAM7E,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA8BzE;AAED,6EAA6E;AAC7E,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAyD3G"}
@@ -0,0 +1,107 @@
1
+ import { createLocalId } from "./localIds.js";
2
+ import { withCadKernel } from "./serverCadKernel.js";
3
+ import { buildCadSketchSweep } from "./sketchCadSweep.js";
4
+ import { canonicalizeShape, cleanNearZero } from "./workplaneShapes.js";
5
+ export function invalidSketchSweepProfile(profile) {
6
+ if (!profile || typeof profile !== "object" || Array.isArray(profile))
7
+ return "A sketch sweep profile must be an object.";
8
+ const value = profile;
9
+ if (!Array.isArray(value.points) || value.points.length < 5 || value.points.length > 5000) {
10
+ return "A sketch sweep profile must contain between 5 and 5000 points.";
11
+ }
12
+ if (!Array.isArray(value.segments) || value.segments.length < 4 || value.segments.length > 10000) {
13
+ return "A sketch sweep profile must contain between 4 and 10000 segments.";
14
+ }
15
+ const pointIds = new Set();
16
+ for (const point of value.points) {
17
+ if (!point || typeof point !== "object" || Array.isArray(point))
18
+ return "Every sketch sweep point must be an object.";
19
+ const entry = point;
20
+ if (typeof entry.id !== "string" || !entry.id || pointIds.has(entry.id))
21
+ return "Sketch sweep point IDs must be unique non-empty strings.";
22
+ pointIds.add(entry.id);
23
+ if (![entry.x, entry.z, entry.sweepDepth ?? 0].every((coordinate) => typeof coordinate === "number" && Number.isFinite(coordinate) && Math.abs(coordinate) <= 10000)) {
24
+ return "Sketch sweep point coordinates must be finite and within 10000 mm.";
25
+ }
26
+ }
27
+ const segmentIds = new Set();
28
+ for (const segment of value.segments) {
29
+ if (!segment || typeof segment !== "object" || Array.isArray(segment))
30
+ return "Every sketch sweep segment must be an object.";
31
+ const entry = segment;
32
+ if (typeof entry.id !== "string" || !entry.id || segmentIds.has(entry.id))
33
+ return "Sketch sweep segment IDs must be unique non-empty strings.";
34
+ if (typeof entry.startId !== "string" || typeof entry.endId !== "string" || !pointIds.has(entry.startId) || !pointIds.has(entry.endId)) {
35
+ return "Sketch sweep segments must reference existing point IDs.";
36
+ }
37
+ segmentIds.add(entry.id);
38
+ }
39
+ return null;
40
+ }
41
+ /** Build a retained sketch sweep from the public shape request's profile. */
42
+ export async function sketchSweepShapeFromRequest(request) {
43
+ const profile = request.profile;
44
+ return withCadKernel((cad) => {
45
+ const solid = buildCadSketchSweep(cad, profile);
46
+ if (!cad.isValid(solid))
47
+ throw new Error("The sketch sweep produced invalid geometry");
48
+ const mesh = cad.tessellate(solid, { linearDeflection: 0.05, angularDeflection: 0.16 });
49
+ const positions = mesh.positions;
50
+ const normals = mesh.normals;
51
+ const indices = mesh.indices;
52
+ if (positions.length < 9 || indices.length < 3)
53
+ throw new Error("The sketch sweep produced no solid geometry");
54
+ let minX = Infinity, minY = Infinity, minZ = Infinity;
55
+ let maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;
56
+ for (let i = 0; i < positions.length; i += 3) {
57
+ minX = Math.min(minX, positions[i]);
58
+ minY = Math.min(minY, positions[i + 1]);
59
+ minZ = Math.min(minZ, positions[i + 2]);
60
+ maxX = Math.max(maxX, positions[i]);
61
+ maxY = Math.max(maxY, positions[i + 1]);
62
+ maxZ = Math.max(maxZ, positions[i + 2]);
63
+ }
64
+ if (![minX, minY, minZ, maxX, maxY, maxZ].every(Number.isFinite))
65
+ throw new Error("The sketch sweep produced invalid bounds");
66
+ const id = typeof request.id === "string" ? request.id : createLocalId("sketch-sweep");
67
+ const centerX = (minX + maxX) / 2;
68
+ const centerZ = (minZ + maxZ) / 2;
69
+ const width = Math.max(0.01, maxX - minX);
70
+ const height = Math.max(0.01, maxY - minY);
71
+ const depth = Math.max(0.01, maxZ - minZ);
72
+ const flattenedPositions = [];
73
+ const flattenedNormals = [];
74
+ for (let i = 0; i < indices.length; i += 1) {
75
+ const vertex = indices[i] * 3;
76
+ flattenedPositions.push(positions[vertex] - centerX, positions[vertex + 1] - minY, positions[vertex + 2] - centerZ);
77
+ if (normals.length >= vertex + 3)
78
+ flattenedNormals.push(normals[vertex], normals[vertex + 1], normals[vertex + 2]);
79
+ }
80
+ return canonicalizeShape({
81
+ id,
82
+ name: typeof request.name === "string" && request.name.trim() ? request.name.trim() : "Sketch sweep",
83
+ kind: "mesh",
84
+ color: typeof request.color === "string" ? request.color : "#d41721",
85
+ x: cleanNearZero(centerX, 0.0005) + (typeof request.x === "number" ? request.x : 0),
86
+ z: cleanNearZero(centerZ, 0.0005) + (typeof request.z === "number" ? request.z : 0),
87
+ elevation: cleanNearZero(minY, 0.0005) + (typeof request.elevation === "number" ? request.elevation : 0),
88
+ width, depth, height, size: Math.max(width, depth),
89
+ rotation: typeof request.rotation === "number" && Number.isFinite(request.rotation) ? request.rotation : 0,
90
+ rotationX: typeof request.rotationX === "number" && Number.isFinite(request.rotationX) ? request.rotationX : 0,
91
+ rotationZ: typeof request.rotationZ === "number" && Number.isFinite(request.rotationZ) ? request.rotationZ : 0,
92
+ hole: request.hole === true,
93
+ sketchProfile: structuredClone(profile),
94
+ sketchOperation: "sweep",
95
+ sketchSourceId: `sketch/${id}`,
96
+ importedMesh: {
97
+ positions: flattenedPositions,
98
+ normals: flattenedNormals.length === flattenedPositions.length ? flattenedNormals : undefined,
99
+ baseWidth: maxX - minX, baseDepth: maxZ - minZ, baseHeight: maxY - minY,
100
+ triangleCount: Math.floor(indices.length / 3), sourceFormat: "json",
101
+ },
102
+ cadBrep: cad.toBREP(solid),
103
+ cadBrepFrame: { x: centerX, z: centerZ, elevation: minY, width, depth, height },
104
+ });
105
+ });
106
+ }
107
+ //# sourceMappingURL=sketchSweepRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sketchSweepRequest.js","sourceRoot":"","sources":["../src/sketchSweepRequest.ts"],"names":[],"mappings":"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"}
@@ -96,6 +96,8 @@ export type SkfProjectDocumentV1 = {
96
96
  id: string;
97
97
  nodeId: string;
98
98
  objectId: string;
99
+ sourceNodeId?: string;
100
+ sourceObjectId?: string;
99
101
  operation?: SketchOperation;
100
102
  extrusionDepth: number;
101
103
  revolve?: SketchRevolveSettings;
@@ -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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"}
@@ -380,6 +380,16 @@ async function serializeShapeNode(shape, nodeId, nodes, builder, sourceAssetsByA
380
380
  ...(sketchProfile.constraints?.length ? { constraints: sketchProfile.constraints } : {}),
381
381
  ...(images.length ? { images } : {}),
382
382
  };
383
+ // Older saved shapes have no explicit source ID. Give them a stable
384
+ // identity derived from the output object when they are next packaged.
385
+ const hasSketchExtrusionSource = shape.sketchOperation === "extrude"
386
+ || shape.sketchOperation === "revolve"
387
+ || shape.sketchOperation === "sweep"
388
+ || (shape.sketchOperation === undefined && shape.kind !== "sketch");
389
+ if (shape.sketchSourceId || hasSketchExtrusionSource) {
390
+ definition.sketchSourceId = shape.sketchSourceId ?? `sketch/${safeNodeToken(shape.id)}`;
391
+ definition.sketchSourceNodeId = `${nodeId}/source-sketch`;
392
+ }
383
393
  }
384
394
  let importedReference;
385
395
  if (importedMesh) {
@@ -412,6 +422,26 @@ async function serializeShapeNode(shape, nodeId, nodes, builder, sourceAssetsByA
412
422
  if (cadBrep)
413
423
  cadBrepAssetId = (await builder.addText("brep", cadBrep, "application/vnd.sketchforge.brep")).id;
414
424
  const cadDisplayEdgesAssetId = cadDisplayEdges ? (await builder.addDisplayEdges(cadDisplayEdges)).id : undefined;
425
+ const sourceSketchId = typeof definition.sketchSourceId === "string" ? definition.sketchSourceId : undefined;
426
+ if (sourceSketchId && definition.sketchSourceNodeId && definition.sketchProfile) {
427
+ nodes.push({
428
+ nodeId: `${nodeId}/source-sketch`,
429
+ objectId: sourceSketchId,
430
+ objectType: "sketch",
431
+ workplaneId: "base",
432
+ definition: {
433
+ ...definition,
434
+ id: sourceSketchId,
435
+ name: `${shape.name} sketch`,
436
+ kind: "sketch",
437
+ sketchOperation: undefined,
438
+ sketchRevolve: undefined,
439
+ sketchSourceId: undefined,
440
+ sketchSourceNodeId: undefined,
441
+ sketchSourceOfObjectId: shape.id,
442
+ },
443
+ });
444
+ }
415
445
  const groupedShapeNodeIds = [];
416
446
  for (const child of groupedShapes ?? []) {
417
447
  const childNodeId = `${nodeId}/group/${safeNodeToken(child.id)}`;
@@ -488,24 +518,35 @@ function activeProjectIndexes(state) {
488
518
  return;
489
519
  (node.groupedShapeNodeIds ?? []).forEach(visit);
490
520
  let previous;
491
- if (node.definition.sketchProfile) {
521
+ if (node.definition.sketchProfile && typeof node.definition.sketchSourceOfObjectId !== "string") {
492
522
  const operation = node.definition.sketchOperation ?? "extrude";
523
+ const sourceSketchId = typeof node.definition.sketchSourceId === "string"
524
+ ? node.definition.sketchSourceId
525
+ : `sketch/${safeNodeToken(node.objectId)}`;
493
526
  const featureType = operation === "revolve" ? "sketch-revolve" : operation === "sweep" ? "sketch-sweep" : "sketch-extrusion";
494
527
  const featureId = `feature/${safeNodeToken(node.nodeId)}/${featureType}`;
528
+ const hasSourceDependency = node.definition.sketchOperation === "extrude"
529
+ || node.definition.sketchOperation === "revolve"
530
+ || node.definition.sketchOperation === "sweep"
531
+ || (node.definition.sketchOperation === undefined && node.definition.kind !== "sketch");
495
532
  features.push({
496
533
  id: featureId,
497
534
  type: featureType,
498
535
  outputObjectId: node.objectId,
499
- inputObjectIds: [],
536
+ inputObjectIds: hasSourceDependency ? [sourceSketchId] : [],
500
537
  dependsOnFeatureIds: [],
501
538
  parameters: operation === "revolve"
502
539
  ? { ...node.definition.sketchRevolve, axis: "vertical-sketch-axis", mode: "create" }
503
540
  : operation === "sweep" ? { mode: "create" } : { depth: node.definition.height, direction: "positive-y", mode: "create" },
504
541
  });
505
542
  sketches.push({
506
- id: `sketch/${safeNodeToken(node.objectId)}`,
543
+ id: typeof node.definition.sketchSourceId === "string" ? sourceSketchId : `sketch/${safeNodeToken(node.objectId)}`,
507
544
  nodeId: node.nodeId,
508
545
  objectId: node.objectId,
546
+ ...(typeof node.definition.sketchSourceNodeId === "string" ? {
547
+ sourceNodeId: node.definition.sketchSourceNodeId,
548
+ sourceObjectId: sourceSketchId,
549
+ } : {}),
509
550
  operation,
510
551
  extrusionDepth: operation === "extrude" ? Number(node.definition.height) : 0,
511
552
  ...(operation === "revolve" && node.definition.sketchRevolve ? { revolve: node.definition.sketchRevolve } : {}),
@@ -895,6 +936,12 @@ function validateShapeDefinition(definition, label) {
895
936
  }
896
937
  if (definition.sketchProfile)
897
938
  validateSketchProfile(definition.sketchProfile, `${label}.sketchProfile`);
939
+ if (definition.sketchSourceId !== undefined)
940
+ stringValue(definition.sketchSourceId, `${label}.sketchSourceId`);
941
+ if (definition.sketchSourceNodeId !== undefined)
942
+ stringValue(definition.sketchSourceNodeId, `${label}.sketchSourceNodeId`);
943
+ if (definition.sketchSourceOfObjectId !== undefined)
944
+ stringValue(definition.sketchSourceOfObjectId, `${label}.sketchSourceOfObjectId`);
898
945
  if (definition.sketchOperation !== undefined && definition.sketchOperation !== "extrude" && definition.sketchOperation !== "revolve" && definition.sketchOperation !== "sweep") {
899
946
  throw new LocalizedError("errors.skf.fieldInvalid", { label: `${label}.sketchOperation` });
900
947
  }
@@ -1126,6 +1173,32 @@ async function validateDocumentAndAssets(raw, files) {
1126
1173
  }
1127
1174
  if (!stateById.has(document.sceneStateId))
1128
1175
  throw new LocalizedError("errors.skf.sceneStateMissing");
1176
+ // Source sketches are persisted graph nodes, but are not rendered scene
1177
+ // shapes. Include their IDs when validating feature input references.
1178
+ if (Array.isArray(document.sketches)) {
1179
+ for (const [index, sketch] of document.sketches.entries()) {
1180
+ const record = objectRecord(sketch, `sketches[${index}]`);
1181
+ activeObjectIds.add(stringValue(record.id, `sketches[${index}].id`));
1182
+ if (record.sourceNodeId === undefined && record.sourceObjectId === undefined)
1183
+ continue;
1184
+ const sourceObjectId = stringValue(record.sourceObjectId, `sketches[${index}].sourceObjectId`);
1185
+ const sourceNodeId = stringValue(record.sourceNodeId, `sketches[${index}].sourceNodeId`);
1186
+ const sourceNode = stateById.get(document.sceneStateId)?.nodes.find((node) => node.nodeId === sourceNodeId);
1187
+ const outputNode = stateById.get(document.sceneStateId)?.nodes.find((node) => node.nodeId === record.nodeId);
1188
+ const sourceDefinition = sourceNode?.definition;
1189
+ const outputDefinition = outputNode?.definition;
1190
+ if (record.id !== sourceObjectId
1191
+ || sourceNode?.objectId !== sourceObjectId
1192
+ || sourceDefinition?.sketchSourceOfObjectId !== record.objectId
1193
+ || outputDefinition?.sketchSourceId !== sourceObjectId
1194
+ || outputDefinition?.sketchSourceNodeId !== sourceNodeId) {
1195
+ throw new LocalizedError("errors.skf.featureMissingInput", {
1196
+ id: `sketch/${index}`,
1197
+ objectId: sourceObjectId,
1198
+ });
1199
+ }
1200
+ }
1201
+ }
1129
1202
  if (!Number.isInteger(document.history.index) || document.history.index < 0 || document.history.index >= document.history.entries.length) {
1130
1203
  throw new LocalizedError("errors.skf.historyIndexInvalid");
1131
1204
  }