@hatiolab/figure-model 0.1.33 → 0.1.35
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/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/v3-asset-types.d.ts +26 -0
- package/dist/v3-asset-types.d.ts.map +1 -1
- package/dist/v3-asset.d.ts.map +1 -1
- package/dist/v3-asset.js +7 -2
- package/dist/v3-asset.js.map +1 -1
- package/dist/v3-capabilities.js +1 -0
- package/dist/v3-capabilities.js.map +1 -1
- package/dist/v3-driver.d.ts +16 -0
- package/dist/v3-driver.d.ts.map +1 -0
- package/dist/v3-driver.js +145 -0
- package/dist/v3-driver.js.map +1 -0
- package/dist/v3-from-v2.d.ts +109 -9
- package/dist/v3-from-v2.d.ts.map +1 -1
- package/dist/v3-from-v2.js +912 -119
- package/dist/v3-from-v2.js.map +1 -1
- package/dist/v3-gate.d.ts +56 -4
- package/dist/v3-gate.d.ts.map +1 -1
- package/dist/v3-gate.js +178 -21
- package/dist/v3-gate.js.map +1 -1
- package/dist/v3-graph-types.d.ts +6 -1
- package/dist/v3-graph-types.d.ts.map +1 -1
- package/dist/v3-graph.d.ts +17 -1
- package/dist/v3-graph.d.ts.map +1 -1
- package/dist/v3-graph.js +144 -20
- package/dist/v3-graph.js.map +1 -1
- package/dist/v3-kernel-version.d.ts +8 -0
- package/dist/v3-kernel-version.d.ts.map +1 -0
- package/dist/v3-kernel-version.js +11 -0
- package/dist/v3-kernel-version.js.map +1 -0
- package/dist/v3-mesh-compare.d.ts +27 -0
- package/dist/v3-mesh-compare.d.ts.map +1 -0
- package/dist/v3-mesh-compare.js +198 -0
- package/dist/v3-mesh-compare.js.map +1 -0
- package/docs/v3-motion-contract.md +178 -0
- package/docs/v3-operator-contracts.md +4 -0
- package/docs/v3-shape-dimension-contract.md +146 -0
- package/package.json +2 -1
package/dist/v3-gate.js
CHANGED
|
@@ -21,8 +21,9 @@
|
|
|
21
21
|
import { compileV3Asset } from "./v3-asset.js";
|
|
22
22
|
import { compileV3Graph } from "./v3-graph.js";
|
|
23
23
|
import { AXES, SKIN } from "./types.js";
|
|
24
|
+
import { transformPoints, v3ShapePoints } from "./v3-mesh-compare.js";
|
|
24
25
|
/** Axis-aligned world boxes of evaluated geometry. `part` is the placing node: a `place@1` id or the repeated member. */
|
|
25
|
-
export function v3WorldBoxesOf(geometry, writers) {
|
|
26
|
+
export function v3WorldBoxesOf(geometry, writers, options = {}) {
|
|
26
27
|
const out = [];
|
|
27
28
|
for (const g of geometry) {
|
|
28
29
|
if (!('pose' in g))
|
|
@@ -33,15 +34,23 @@ export function v3WorldBoxesOf(geometry, writers) {
|
|
|
33
34
|
? [d.radius * 2, d.length, d.radius * 2]
|
|
34
35
|
: g.shape.provider === 'sphere'
|
|
35
36
|
? [d.radiusX * 2, d.radiusY * 2, d.radiusZ * 2]
|
|
36
|
-
:
|
|
37
|
+
: g.shape.provider === 'frustum'
|
|
38
|
+
? [Math.max(d.radiusTop, d.radiusBottom) * 2, d.height, Math.max(d.radiusTop, d.radiusBottom) * 2]
|
|
39
|
+
: g.shape.provider === 'ellipticCylinder'
|
|
40
|
+
? [d.radiusX * 2, d.length, d.radiusZ * 2]
|
|
41
|
+
: [d.width, d.height, d.depth];
|
|
37
42
|
const r = g.pose.r;
|
|
38
43
|
const extent = AXES.map((_, a) => local.reduce((s, v, i) => s + Math.abs(r[a][i]) * v, 0));
|
|
39
|
-
|
|
44
|
+
const box = {
|
|
40
45
|
part,
|
|
41
46
|
centre: { x: g.pose.t[0], y: g.pose.t[1], z: g.pose.t[2] },
|
|
42
47
|
extent: { x: extent[0], y: extent[1], z: extent[2] },
|
|
48
|
+
dims: local,
|
|
43
49
|
rotation: r
|
|
44
|
-
}
|
|
50
|
+
};
|
|
51
|
+
if (options.points)
|
|
52
|
+
box.points = transformPoints(v3ShapePoints(g.shape, g.segments), r, g.pose.t);
|
|
53
|
+
out.push(box);
|
|
45
54
|
}
|
|
46
55
|
return out;
|
|
47
56
|
}
|
|
@@ -54,30 +63,179 @@ export function v3WritersOf(asset) {
|
|
|
54
63
|
return writers;
|
|
55
64
|
}
|
|
56
65
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
66
|
+
* Why the extremes of every state-dependent coordinate lie at the corners of the state box, or why that cannot be
|
|
67
|
+
* shown. The basis: a value that is multilinear in the state inputs (each input to degree one) or a monotone
|
|
68
|
+
* function of such values takes its extremes at the corners. That holds through `add`, through `mul` and `geomean`
|
|
69
|
+
* when the two arguments depend on disjoint state inputs (x·x does not qualify), through `div` by a state-free
|
|
70
|
+
* denominator, and through translations in `rigid`. It does not hold through `sin`, `axis-turn`, a
|
|
71
|
+
* state-dependent rotation angle in `rigid`, a state-dependent denominator, or a product of two values that share
|
|
72
|
+
* an input. Returns the reasons it fails, empty when it holds.
|
|
59
73
|
*/
|
|
60
|
-
export function
|
|
74
|
+
export function cornerExtremalBasis(asset, dependence) {
|
|
75
|
+
const reasons = [];
|
|
76
|
+
const dep = (ref) => dependence[ref] ?? [];
|
|
77
|
+
const shares = (a, b) => dep(a).some(x => dep(b).includes(x));
|
|
78
|
+
for (const n of asset.document.model.nodes) {
|
|
79
|
+
const stateful = n.args.filter(a => dep(a).length);
|
|
80
|
+
if (!stateful.length)
|
|
81
|
+
continue;
|
|
82
|
+
switch (n.op) {
|
|
83
|
+
case 'add@1':
|
|
84
|
+
case 'compose@1':
|
|
85
|
+
case 'attach@1':
|
|
86
|
+
case 'place@1':
|
|
87
|
+
case 'member@1':
|
|
88
|
+
case 'feature@1':
|
|
89
|
+
case 'assembly@1':
|
|
90
|
+
case 'repeat@1':
|
|
91
|
+
case 'select-item@1':
|
|
92
|
+
case 'map-point@1':
|
|
93
|
+
case 'point@1':
|
|
94
|
+
break;
|
|
95
|
+
case 'mul@1':
|
|
96
|
+
case 'geomean@1':
|
|
97
|
+
for (let i = 0; i < n.args.length; i++)
|
|
98
|
+
for (let j = i + 1; j < n.args.length; j++)
|
|
99
|
+
if (shares(n.args[i], n.args[j]))
|
|
100
|
+
reasons.push(`${n.id}: ${n.op} of two values that both depend on ${dep(n.args[i]).filter(x => dep(n.args[j]).includes(x)).join(', ')}`);
|
|
101
|
+
break;
|
|
102
|
+
case 'div@1':
|
|
103
|
+
if (dep(n.args[1]).length)
|
|
104
|
+
reasons.push(`${n.id}: division by a value that depends on ${dep(n.args[1]).join(', ')}`);
|
|
105
|
+
break;
|
|
106
|
+
case 'rigid@1':
|
|
107
|
+
for (const a of n.args.slice(3))
|
|
108
|
+
if (dep(a).length)
|
|
109
|
+
reasons.push(`${n.id}: a rotation angle depends on ${dep(a).join(', ')}`);
|
|
110
|
+
break;
|
|
111
|
+
case 'axis-slide@1':
|
|
112
|
+
if (n.args.slice(0, 3).some(a => dep(a).length))
|
|
113
|
+
reasons.push(`${n.id}: the slide axis depends on state`);
|
|
114
|
+
break;
|
|
115
|
+
default:
|
|
116
|
+
// sin, axis-turn, layout operators, distance, providers with a state-dependent argument are not corner-extremal
|
|
117
|
+
// by this basis; providers are shapes whose extents are the arguments themselves, which is fine only when the
|
|
118
|
+
// arguments are (handled by their own nodes), so treat shape providers as pass-through.
|
|
119
|
+
if (n.op.endsWith('-shape@1') || n.op.endsWith('-shape@2') || n.op === 'rounded-box@1' || n.op === 'rounded-box@2' || n.op === 'hollow-box@1' || n.op === 'hollow-box@2' || n.op === 'portal-profile@1')
|
|
120
|
+
break;
|
|
121
|
+
reasons.push(`${n.id}: ${n.op} with a state-dependent argument (${[...new Set(stateful.flatMap(dep))].join(', ')})`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return reasons;
|
|
125
|
+
}
|
|
126
|
+
/** The state inputs of an asset with their declared bounds. */
|
|
127
|
+
function stateInputs(asset) {
|
|
128
|
+
return asset.document.model.inputs.filter(i => i.role === 'state').map(i => ({ id: i.id, min: i.min, max: i.max }));
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Inspect an asset against its declared occupancy. Without `at`, the whole valid state range is covered: every
|
|
132
|
+
* state input at its bounds (and, when a rotation depends on state, along its sweep), and a violation found at any
|
|
133
|
+
* evaluated state is a violation. The occupancy is never widened to make one go away.
|
|
134
|
+
*/
|
|
135
|
+
export function inspectV3Asset(asset, options = {}) {
|
|
136
|
+
// Backwards compatible: a plain record is `at`.
|
|
137
|
+
const opts = 'at' in options || 'sweepSteps' in options || 'maxCornerInputs' in options || Object.keys(options).length === 0 ? options : { at: options };
|
|
61
138
|
const compiled = compileV3Asset(asset);
|
|
62
|
-
const
|
|
139
|
+
const graph = compileV3Graph(asset.document.model);
|
|
140
|
+
const inputs = stateInputs(asset);
|
|
63
141
|
const violations = [];
|
|
142
|
+
const seen = new Set();
|
|
143
|
+
const push = (v) => {
|
|
144
|
+
const key = JSON.stringify([v.code, v.part, v.axis]);
|
|
145
|
+
if (seen.has(key)) {
|
|
146
|
+
// Keep the worst distance for a part and axis across the states evaluated.
|
|
147
|
+
const prior = violations.find(x => x.code === v.code && x.part === v.part && x.axis === v.axis);
|
|
148
|
+
if ((v.mm ?? 0) > (prior.mm ?? 0))
|
|
149
|
+
Object.assign(prior, v);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
seen.add(key);
|
|
153
|
+
violations.push(v);
|
|
154
|
+
};
|
|
64
155
|
if (!asset.occupancy) {
|
|
65
156
|
violations.push({ code: 'OCCUPANCY_UNDECLARED', detail: 'the asset does not declare the volume it occupies or the face it stands on' });
|
|
66
|
-
return { violations };
|
|
157
|
+
return { coverage: { method: 'defaults', inputs, states: 0, detail: 'nothing to inspect against' }, violations };
|
|
67
158
|
}
|
|
68
|
-
//
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
159
|
+
// Which states to evaluate.
|
|
160
|
+
let states;
|
|
161
|
+
let coverage;
|
|
162
|
+
if (opts.at) {
|
|
163
|
+
states = [opts.at];
|
|
164
|
+
coverage = { method: 'defaults', inputs, states: 1, detail: 'one state, as asked' };
|
|
165
|
+
}
|
|
166
|
+
else if (!inputs.length) {
|
|
167
|
+
states = [{}];
|
|
168
|
+
coverage = { method: 'proven', inputs, states: 1, detail: 'no state input; the rest pose is the only pose' };
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
const unprovable = cornerExtremalBasis(asset, graph.dependence);
|
|
172
|
+
const maxCorners = opts.maxCornerInputs ?? 10;
|
|
173
|
+
const allCorners = inputs.length <= maxCorners;
|
|
174
|
+
const corners = [];
|
|
175
|
+
if (allCorners) {
|
|
176
|
+
for (let mask = 0; mask < 1 << inputs.length; mask++)
|
|
177
|
+
corners.push(Object.fromEntries(inputs.map((i, k) => [i.id, mask & (1 << k) ? i.max : i.min])));
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
// Too many inputs to enumerate: the all-min and all-max corners and every single flip from each. Not all corners.
|
|
181
|
+
const lows = Object.fromEntries(inputs.map(i => [i.id, i.min]));
|
|
182
|
+
const highs = Object.fromEntries(inputs.map(i => [i.id, i.max]));
|
|
183
|
+
corners.push(lows, highs);
|
|
184
|
+
for (const i of inputs)
|
|
185
|
+
corners.push({ ...lows, [i.id]: i.max }, { ...highs, [i.id]: i.min });
|
|
186
|
+
unprovable.push(`${inputs.length} state inputs exceed the corner cap of ${maxCorners}; only ${corners.length} of ${2 ** inputs.length} corners were evaluated`);
|
|
187
|
+
}
|
|
188
|
+
if (!unprovable.length) {
|
|
189
|
+
states = corners;
|
|
190
|
+
coverage = {
|
|
191
|
+
method: 'proven',
|
|
192
|
+
inputs,
|
|
193
|
+
states: corners.length,
|
|
194
|
+
detail: `every state-dependent value reaches the geometry through corner-extremal operations (multilinear in the state inputs, or monotone functions of such values), so the extremes are at the ${corners.length} corners of the state box; all ${corners.length} evaluated`
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
const steps = opts.sweepSteps ?? 9;
|
|
199
|
+
const sweeps = [];
|
|
200
|
+
for (const i of inputs)
|
|
201
|
+
for (let k = 0; k < steps; k++) {
|
|
202
|
+
const v = i.min + ((i.max - i.min) * k) / (steps - 1);
|
|
203
|
+
sweeps.push({ [i.id]: v });
|
|
204
|
+
}
|
|
205
|
+
states = [...corners, ...sweeps];
|
|
206
|
+
coverage = {
|
|
207
|
+
method: 'sampled',
|
|
208
|
+
inputs,
|
|
209
|
+
states: states.length,
|
|
210
|
+
sweepSteps: steps,
|
|
211
|
+
unprovable,
|
|
212
|
+
detail: `not proven (${unprovable.join('; ')}). Checked at ${states.length} states: ${corners.length} corners and each input in ${steps} steps with the others at their defaults. A violation may lie between these states; this is not a bound over the range`
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
for (const state of states) {
|
|
217
|
+
const evaluated = compiled.evaluate(state);
|
|
218
|
+
inspectOne(asset, graph, evaluated.geometry, state, push);
|
|
219
|
+
}
|
|
220
|
+
const values = graph.evaluate({ ...asset.designInputs, ...asset.stateDefaults }).values;
|
|
74
221
|
const extent = {
|
|
75
222
|
x: values[asset.occupancy.extent.x],
|
|
76
223
|
y: values[asset.occupancy.extent.y],
|
|
77
224
|
z: values[asset.occupancy.extent.z]
|
|
78
225
|
};
|
|
79
|
-
|
|
80
|
-
|
|
226
|
+
return { extent, placement: asset.occupancy.placement, coverage, violations };
|
|
227
|
+
}
|
|
228
|
+
function inspectOne(asset, graph, geometry, state, push) {
|
|
229
|
+
const occupancy = asset.occupancy;
|
|
230
|
+
// The asset evaluation returns geometry only; the declared lengths are graph values, so read the graph itself.
|
|
231
|
+
const values = graph.evaluate({ ...asset.designInputs, ...asset.stateDefaults, ...state }).values;
|
|
232
|
+
const extent = {
|
|
233
|
+
x: values[occupancy.extent.x],
|
|
234
|
+
y: values[occupancy.extent.y],
|
|
235
|
+
z: values[occupancy.extent.z]
|
|
236
|
+
};
|
|
237
|
+
const placement = occupancy.placement;
|
|
238
|
+
const boxes = v3WorldBoxesOf(geometry, v3WritersOf(asset));
|
|
81
239
|
const round = (v) => Math.round(v * 1e4) / 1e4;
|
|
82
240
|
// The declared box: X and Z centred, Y from the floor (ADR-0065).
|
|
83
241
|
const low = { x: -extent.x / 2, y: 0, z: -extent.z / 2 };
|
|
@@ -90,7 +248,7 @@ export function inspectV3Asset(asset, stateOverrides = {}) {
|
|
|
90
248
|
const over = Math.max(box.centre[axis] + reach - high[axis], low[axis] - (box.centre[axis] - reach));
|
|
91
249
|
if (over > SKIN) {
|
|
92
250
|
const mm = round(over);
|
|
93
|
-
|
|
251
|
+
push({
|
|
94
252
|
code: 'PART_OUTSIDE_OCCUPANCY',
|
|
95
253
|
part: box.part,
|
|
96
254
|
axis,
|
|
@@ -107,7 +265,7 @@ export function inspectV3Asset(asset, stateOverrides = {}) {
|
|
|
107
265
|
if (lowest && placement === 'floor') {
|
|
108
266
|
const gap = lowest.centre.y - lowest.extent.y / 2 - low.y;
|
|
109
267
|
if (gap > SKIN)
|
|
110
|
-
|
|
268
|
+
push({
|
|
111
269
|
code: 'PARTS_OFF_PLACEMENT_FACE',
|
|
112
270
|
part: lowest.part,
|
|
113
271
|
axis: 'y',
|
|
@@ -118,7 +276,7 @@ export function inspectV3Asset(asset, stateOverrides = {}) {
|
|
|
118
276
|
if (highest && placement === 'ceiling') {
|
|
119
277
|
const gap = high.y - (highest.centre.y + highest.extent.y / 2);
|
|
120
278
|
if (gap > SKIN)
|
|
121
|
-
|
|
279
|
+
push({
|
|
122
280
|
code: 'PARTS_OFF_PLACEMENT_FACE',
|
|
123
281
|
part: highest.part,
|
|
124
282
|
axis: 'y',
|
|
@@ -126,6 +284,5 @@ export function inspectV3Asset(asset, stateOverrides = {}) {
|
|
|
126
284
|
detail: `the highest part '${highest.part}' hangs ${round(gap)} mm below the ceiling the figure is declared to hang from`
|
|
127
285
|
});
|
|
128
286
|
}
|
|
129
|
-
return { extent, placement, violations };
|
|
130
287
|
}
|
|
131
288
|
//# sourceMappingURL=v3-gate.js.map
|
package/dist/v3-gate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3-gate.js","sourceRoot":"","sources":["../src/v3-gate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"v3-gate.js","sourceRoot":"","sources":["../src/v3-gate.ts"],"names":[],"mappings":"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"}
|
package/dist/v3-graph-types.d.ts
CHANGED
|
@@ -45,7 +45,7 @@ export interface V3Pose {
|
|
|
45
45
|
t: number[];
|
|
46
46
|
}
|
|
47
47
|
export interface V3Shape {
|
|
48
|
-
provider: 'box' | 'cylinder' | 'roundedBox' | 'portal' | 'sphere' | 'polygon' | 'hollowBox';
|
|
48
|
+
provider: 'box' | 'cylinder' | 'roundedBox' | 'portal' | 'sphere' | 'polygon' | 'hollowBox' | 'frustum' | 'ellipticCylinder' | 'roundedBoxXZ' | 'hollowBoxXZ';
|
|
49
49
|
dimensions: Record<string, number>;
|
|
50
50
|
profile?: Array<{
|
|
51
51
|
id: string;
|
|
@@ -85,6 +85,11 @@ export interface V3GraphEvaluation {
|
|
|
85
85
|
}
|
|
86
86
|
export interface V3CompiledGraph {
|
|
87
87
|
outputTypes: Record<string, V3ValueType>;
|
|
88
|
+
/**
|
|
89
|
+
* Which state inputs each value can change with (shape-dimension contract §2). A value absent here depends on
|
|
90
|
+
* design inputs and constants only. Part of the type, kept beside unit and frame rather than inside them.
|
|
91
|
+
*/
|
|
92
|
+
dependence: Record<string, string[]>;
|
|
88
93
|
order: string[];
|
|
89
94
|
evaluate(input: Record<string, number>): V3GraphEvaluation;
|
|
90
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3-graph-types.d.ts","sourceRoot":"","sources":["../src/v3-graph-types.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAA;AAC5F,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AACnD,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ;IAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAC3E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CAC1B;AACD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AACD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AACD,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,aAAa,GAAG,cAAc,CAAA;IACvC,MAAM,EAAE,YAAY,EAAE,CAAA;IACtB,SAAS,EAAE,eAAe,EAAE,CAAA;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAA;CACrB;AACD,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;IACb,CAAC,EAAE,MAAM,EAAE,CAAA;CACZ;AACD,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,KAAK,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"v3-graph-types.d.ts","sourceRoot":"","sources":["../src/v3-graph-types.ts"],"names":[],"mappings":"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"}
|
package/dist/v3-graph.d.ts
CHANGED
|
@@ -1,13 +1,29 @@
|
|
|
1
1
|
import { V3ContractError as ContractError } from './v3-contract.ts';
|
|
2
2
|
import type { V3CompiledGraph } from './v3-graph-types.ts';
|
|
3
|
+
/**
|
|
4
|
+
* What an operator does with an argument that depends on a state input (shape-dimension contract §2).
|
|
5
|
+
* follows the output depends on state too; shapes, poses and arithmetic
|
|
6
|
+
* refuses a state-dependent argument is a compile error; layout counts and pitches (structure and cost)
|
|
7
|
+
* An operator without a policy fails to compile the moment such an argument reaches it (STATE_POLICY). There is
|
|
8
|
+
* no list of banned operators to keep in sync: the policy is on the operator itself.
|
|
9
|
+
*/
|
|
10
|
+
export type V3StatePolicy = 'follows' | 'refuses';
|
|
3
11
|
export { ContractError };
|
|
12
|
+
/** Every operator's state policy, by name, for the guard test and for readers of the contract. */
|
|
13
|
+
export declare const V3_OPERATOR_STATE_POLICY: Readonly<Record<string, V3StatePolicy>>;
|
|
4
14
|
/** Every operator the kernel knows, by name. `v3-graph.test.ts` holds the list still. */
|
|
5
15
|
export declare const V3_OPERATORS: readonly string[];
|
|
6
16
|
/**
|
|
7
|
-
* The operators whose output is not affine in the design inputs. `geomean@1` is the only one
|
|
17
|
+
* The operators whose output is not affine in the **design** inputs. `geomean@1` is the only one
|
|
8
18
|
* (ADR-0087 decision 2 addendum). Adding a second means another ADR conversation, and the test that
|
|
9
19
|
* pins this list goes red until it has happened.
|
|
10
20
|
*/
|
|
11
21
|
export declare const V3_NON_AFFINE_OPERATORS: readonly string[];
|
|
22
|
+
/**
|
|
23
|
+
* The operators whose output is not affine in a **state** input: a rotation matrix is sin/cos in the joint
|
|
24
|
+
* angle (motion contract, "two corrections"). Rigid in space, so placement stays rigid; the 8-size check is a
|
|
25
|
+
* rest-pose regression check and says nothing about motion.
|
|
26
|
+
*/
|
|
27
|
+
export declare const V3_STATE_NON_AFFINE_OPERATORS: readonly string[];
|
|
12
28
|
export declare function compileV3Graph(source: unknown): V3CompiledGraph;
|
|
13
29
|
//# sourceMappingURL=v3-graph.d.ts.map
|
package/dist/v3-graph.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3-graph.d.ts","sourceRoot":"","sources":["../src/v3-graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,KAAK,EAAE,eAAe,EAAwB,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"v3-graph.d.ts","sourceRoot":"","sources":["../src/v3-graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,KAAK,EAAE,eAAe,EAAwB,MAAM,qBAAqB,CAAA;AAIhF;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,CAAA;AASjD,OAAO,EAAE,aAAa,EAAE,CAAA;AAkrBxB,kGAAkG;AAClG,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAE5E,CAAA;AAED,yFAAyF;AACzF,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAAoC,CAAA;AAE9E;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAAiC,CAAA;AAEtF;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAAmC,CAAA;AAgB9F,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,CAE/D"}
|
package/dist/v3-graph.js
CHANGED
|
@@ -385,6 +385,48 @@ Object.assign(ops, {
|
|
|
385
385
|
];
|
|
386
386
|
}
|
|
387
387
|
},
|
|
388
|
+
// Motion (docs/v3-motion-contract.md). The axis is a unit vector in the `to` frame; right-handed rotation.
|
|
389
|
+
// axis-turn@1 is rigid in space but sin/cos in q: not affine in a state input.
|
|
390
|
+
'axis-turn@1': {
|
|
391
|
+
ports: ['pose'],
|
|
392
|
+
params: ['from', 'to'],
|
|
393
|
+
types(t, p, n) {
|
|
394
|
+
requireTypes(t, [ratio, ratio, ratio, angle], p);
|
|
395
|
+
return [transformType(n.params.from, n.params.to)];
|
|
396
|
+
},
|
|
397
|
+
run: ([ax0, ay0, az0, q], p) => {
|
|
398
|
+
// A unit axis, written with six decimals by authors and converters: 1e-6 of slack, then normalised exactly.
|
|
399
|
+
const n = Math.hypot(ax0, ay0, az0);
|
|
400
|
+
if (Math.abs(n - 1) > 1e-6)
|
|
401
|
+
fail('AXIS', p, 'unit axis required');
|
|
402
|
+
const ax = ax0 / n, ay = ay0 / n, az = az0 / n;
|
|
403
|
+
const c = Math.cos(q), s = Math.sin(q), k = 1 - c;
|
|
404
|
+
return [
|
|
405
|
+
{
|
|
406
|
+
r: [
|
|
407
|
+
[c + ax * ax * k, ax * ay * k - az * s, ax * az * k + ay * s],
|
|
408
|
+
[ay * ax * k + az * s, c + ay * ay * k, ay * az * k - ax * s],
|
|
409
|
+
[az * ax * k - ay * s, az * ay * k + ax * s, c + az * az * k]
|
|
410
|
+
],
|
|
411
|
+
t: [0, 0, 0]
|
|
412
|
+
}
|
|
413
|
+
];
|
|
414
|
+
}
|
|
415
|
+
},
|
|
416
|
+
'axis-slide@1': {
|
|
417
|
+
ports: ['pose'],
|
|
418
|
+
params: ['from', 'to'],
|
|
419
|
+
types(t, p, n) {
|
|
420
|
+
requireTypes(t, [ratio, ratio, ratio, length], p);
|
|
421
|
+
return [transformType(n.params.from, n.params.to)];
|
|
422
|
+
},
|
|
423
|
+
run: ([ax, ay, az, q], p) => {
|
|
424
|
+
const n = Math.hypot(ax, ay, az);
|
|
425
|
+
if (Math.abs(n - 1) > 1e-6)
|
|
426
|
+
fail('AXIS', p, 'unit axis required');
|
|
427
|
+
return [{ r: identity(), t: [(ax / n) * q, (ay / n) * q, (az / n) * q] }];
|
|
428
|
+
}
|
|
429
|
+
},
|
|
388
430
|
'compose@1': {
|
|
389
431
|
ports: ['pose'],
|
|
390
432
|
types(t, p) {
|
|
@@ -473,6 +515,64 @@ Object.assign(ops, {
|
|
|
473
515
|
return [{ provider: 'sphere', dimensions: { radiusX, radiusY, radiusZ } }];
|
|
474
516
|
}
|
|
475
517
|
},
|
|
518
|
+
// A cylinder whose two ends have different radii (ADR-0087 decision 2 ruling 1). Equal radii make a cylinder,
|
|
519
|
+
// a zero radius a cone. The axis is local Y; `radiusTop` is at +Y as three's CylinderGeometry orders them.
|
|
520
|
+
'frustum-shape@1': {
|
|
521
|
+
ports: ['shape'],
|
|
522
|
+
params: ['frame'],
|
|
523
|
+
types(t, p, n) {
|
|
524
|
+
requireTypes(t, [length, length, length], p);
|
|
525
|
+
return [{ kind: 'shape', provider: 'frustum', frame: n.params.frame }];
|
|
526
|
+
},
|
|
527
|
+
run: ([radiusTop, radiusBottom, height], p) => {
|
|
528
|
+
if (!(height > 0 && radiusTop >= 0 && radiusBottom >= 0 && radiusTop + radiusBottom > 0))
|
|
529
|
+
fail('GEOMETRY_DOMAIN', p, 'positive height and non-negative radii, not both zero, required');
|
|
530
|
+
return [{ provider: 'frustum', dimensions: { radiusTop, radiusBottom, height } }];
|
|
531
|
+
}
|
|
532
|
+
},
|
|
533
|
+
// Shape-dimension contract §1 (2026-09-22): every round thing has per-axis dimensions. The @1 forms stay valid and
|
|
534
|
+
// mean the equal case; @2 writes both axes. A renderer draws the ellipse or elliptic corner it is given.
|
|
535
|
+
'cylinder-shape@2': {
|
|
536
|
+
ports: ['shape'],
|
|
537
|
+
params: ['frame'],
|
|
538
|
+
types(t, p, n) {
|
|
539
|
+
requireTypes(t, [length, length, length], p);
|
|
540
|
+
return [{ kind: 'shape', provider: 'ellipticCylinder', frame: n.params.frame }];
|
|
541
|
+
},
|
|
542
|
+
run: ([radiusX, radiusZ, length], p) => {
|
|
543
|
+
if (!(radiusX > 0 && radiusZ > 0 && length > 0))
|
|
544
|
+
fail('GEOMETRY_DOMAIN', p, 'positive radii and length required');
|
|
545
|
+
return [{ provider: 'ellipticCylinder', dimensions: { radiusX, radiusZ, length } }];
|
|
546
|
+
}
|
|
547
|
+
},
|
|
548
|
+
'rounded-box@2': {
|
|
549
|
+
ports: ['shape'],
|
|
550
|
+
params: ['frame'],
|
|
551
|
+
types(t, p, n) {
|
|
552
|
+
requireTypes(t, Array(5).fill(length), p);
|
|
553
|
+
return [{ kind: 'shape', provider: 'roundedBoxXZ', frame: n.params.frame }];
|
|
554
|
+
},
|
|
555
|
+
run: ([width, height, depth, roundX, roundZ], p) => {
|
|
556
|
+
if (!(width > 0 && height > 0 && depth > 0 && roundX >= 0 && roundZ >= 0 && roundX <= width / 2 && roundZ <= depth / 2))
|
|
557
|
+
fail('GEOMETRY_DOMAIN', p, 'positive dimensions and corner semi-axes within half the section required');
|
|
558
|
+
return [{ provider: 'roundedBoxXZ', dimensions: { width, height, depth, roundX, roundZ } }];
|
|
559
|
+
}
|
|
560
|
+
},
|
|
561
|
+
'hollow-box@2': {
|
|
562
|
+
ports: ['shape'],
|
|
563
|
+
params: ['frame'],
|
|
564
|
+
types(t, p, n) {
|
|
565
|
+
requireTypes(t, Array(8).fill(length), p);
|
|
566
|
+
return [{ kind: 'shape', provider: 'hollowBoxXZ', frame: n.params.frame }];
|
|
567
|
+
},
|
|
568
|
+
run: ([width, height, depth, roundX, roundZ, wallX, wallZ, floor], p) => {
|
|
569
|
+
if (!(width > 0 && height > 0 && depth > 0 && roundX >= 0 && roundZ >= 0 && roundX <= width / 2 && roundZ <= depth / 2))
|
|
570
|
+
fail('GEOMETRY_DOMAIN', p, 'positive dimensions and corner semi-axes within half the section required');
|
|
571
|
+
if (!(wallX > 0 && wallZ > 0 && wallX < width / 2 && wallZ < depth / 2 && floor >= 0 && floor < height))
|
|
572
|
+
fail('GEOMETRY_DOMAIN', p, 'walls thinner than half the section and a floor thinner than the height required');
|
|
573
|
+
return [{ provider: 'hollowBoxXZ', dimensions: { width, height, depth, roundX, roundZ, wallX, wallZ, floor } }];
|
|
574
|
+
}
|
|
575
|
+
},
|
|
476
576
|
// A closed section in the local X–Z plane (profile x → X, profile y → Z, as V2 draws it), pushed along Y.
|
|
477
577
|
'polygon-shape@1': {
|
|
478
578
|
ports: ['shape'],
|
|
@@ -519,11 +619,13 @@ Object.assign(ops, {
|
|
|
519
619
|
fail('TYPE', p, 'shape required');
|
|
520
620
|
const names = t[0].provider === 'portal'
|
|
521
621
|
? ['top', 'bottomLeft', 'bottomRight', 'openingTop', 'frontTop']
|
|
522
|
-
: ['box', 'roundedBox', 'sphere', 'hollowBox'].includes(t[0].provider)
|
|
622
|
+
: ['box', 'roundedBox', 'roundedBoxXZ', 'sphere', 'hollowBox', 'hollowBoxXZ'].includes(t[0].provider)
|
|
523
623
|
? ['left', 'right', 'bottom', 'top', 'back', 'front']
|
|
524
624
|
: t[0].provider === 'polygon'
|
|
525
625
|
? ['bottom', 'top']
|
|
526
|
-
: [
|
|
626
|
+
: t[0].provider === 'frustum' || t[0].provider === 'ellipticCylinder'
|
|
627
|
+
? ['start', 'end']
|
|
628
|
+
: ['start', 'end', 'radialBottom'];
|
|
527
629
|
if (!names.includes(n.params.name))
|
|
528
630
|
fail('UNKNOWN_FEATURE', p, n.params.name);
|
|
529
631
|
// Provider-aligned feature axes, not outward-normal mating axes.
|
|
@@ -549,16 +651,18 @@ Object.assign(ops, {
|
|
|
549
651
|
}
|
|
550
652
|
: s.provider === 'polygon'
|
|
551
653
|
? { bottom: [0, -d.height / 2, 0], top: [0, d.height / 2, 0] }
|
|
552
|
-
:
|
|
553
|
-
? {
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
654
|
+
: s.provider === 'frustum' || s.provider === 'ellipticCylinder'
|
|
655
|
+
? { start: [0, -(d.height ?? d.length) / 2, 0], end: [0, (d.height ?? d.length) / 2, 0] }
|
|
656
|
+
: ['box', 'roundedBox', 'roundedBoxXZ', 'hollowBox', 'hollowBoxXZ'].includes(s.provider)
|
|
657
|
+
? {
|
|
658
|
+
left: [-d.width / 2, 0, 0],
|
|
659
|
+
right: [d.width / 2, 0, 0],
|
|
660
|
+
bottom: [0, -d.height / 2, 0],
|
|
661
|
+
top: [0, d.height / 2, 0],
|
|
662
|
+
back: [0, 0, -d.depth / 2],
|
|
663
|
+
front: [0, 0, d.depth / 2]
|
|
664
|
+
}
|
|
665
|
+
: { start: [0, -d.length / 2, 0], end: [0, d.length / 2, 0], radialBottom: [0, 0, -d.radius] };
|
|
562
666
|
return [{ r: identity(), t: points[n.params.name] }];
|
|
563
667
|
}
|
|
564
668
|
},
|
|
@@ -575,14 +679,26 @@ Object.assign(ops, {
|
|
|
575
679
|
});
|
|
576
680
|
// Template members are values, not separately rendered placements.
|
|
577
681
|
ops['member@1'] = { ...ops['place@1'], geometry: undefined };
|
|
682
|
+
// Shape-dimension contract §2: every operator declares what it does with a state-dependent argument. Layout
|
|
683
|
+
// counts and pitches are structure and cost, design-only; everything else may follow state.
|
|
684
|
+
for (const [name, op] of Object.entries(ops))
|
|
685
|
+
op.state = name === 'fit-pitch@1' || name === 'fixed-count@1' ? 'refuses' : 'follows';
|
|
686
|
+
/** Every operator's state policy, by name, for the guard test and for readers of the contract. */
|
|
687
|
+
export const V3_OPERATOR_STATE_POLICY = Object.freeze(Object.fromEntries(Object.entries(ops).map(([k, op]) => [k, op.state])));
|
|
578
688
|
/** Every operator the kernel knows, by name. `v3-graph.test.ts` holds the list still. */
|
|
579
689
|
export const V3_OPERATORS = Object.freeze(Object.keys(ops));
|
|
580
690
|
/**
|
|
581
|
-
* The operators whose output is not affine in the design inputs. `geomean@1` is the only one
|
|
691
|
+
* The operators whose output is not affine in the **design** inputs. `geomean@1` is the only one
|
|
582
692
|
* (ADR-0087 decision 2 addendum). Adding a second means another ADR conversation, and the test that
|
|
583
693
|
* pins this list goes red until it has happened.
|
|
584
694
|
*/
|
|
585
695
|
export const V3_NON_AFFINE_OPERATORS = Object.freeze(['geomean@1']);
|
|
696
|
+
/**
|
|
697
|
+
* The operators whose output is not affine in a **state** input: a rotation matrix is sin/cos in the joint
|
|
698
|
+
* angle (motion contract, "two corrections"). Rigid in space, so placement stays rigid; the 8-size check is a
|
|
699
|
+
* rest-pose regression check and says nothing about motion.
|
|
700
|
+
*/
|
|
701
|
+
export const V3_STATE_NON_AFFINE_OPERATORS = Object.freeze(['axis-turn@1']);
|
|
586
702
|
function checkedValue(value, type, path) {
|
|
587
703
|
if (Array.isArray(type))
|
|
588
704
|
return num(value, path);
|
|
@@ -613,7 +729,7 @@ function compileInternal(source) {
|
|
|
613
729
|
if (!Array.isArray(source[k]))
|
|
614
730
|
fail('SCHEMA', k, 'array required');
|
|
615
731
|
// Snapshot protects a compiled plan from later authoring mutations.
|
|
616
|
-
const m = structuredClone(source), writers = new Map(), types = new Map(),
|
|
732
|
+
const m = structuredClone(source), writers = new Map(), types = new Map(), dependence = new Map(), nodes = new Map(), order = [], active = [];
|
|
617
733
|
const assign = (name, owner) => {
|
|
618
734
|
id(name, owner);
|
|
619
735
|
if (writers.has(name))
|
|
@@ -627,7 +743,7 @@ function compileInternal(source) {
|
|
|
627
743
|
if (p.role && !['design', 'state'].includes(p.role))
|
|
628
744
|
fail('SCHEMA', p.id, 'unknown input role');
|
|
629
745
|
if (p.role === 'state')
|
|
630
|
-
|
|
746
|
+
dependence.set(p.id, new Set([p.id]));
|
|
631
747
|
if (num(p.min, p.id) > num(p.max, p.id))
|
|
632
748
|
fail('RANGE', p.id, 'min > max');
|
|
633
749
|
if (p.unit === 'count') {
|
|
@@ -676,12 +792,19 @@ function compileInternal(source) {
|
|
|
676
792
|
return types.get(ref);
|
|
677
793
|
});
|
|
678
794
|
const resultTypes = op.types(inputTypes, n.id, n);
|
|
679
|
-
const
|
|
680
|
-
|
|
681
|
-
|
|
795
|
+
const depends = new Set();
|
|
796
|
+
for (const ref of n.args)
|
|
797
|
+
for (const s of dependence.get(ref) ?? [])
|
|
798
|
+
depends.add(s);
|
|
799
|
+
if (depends.size) {
|
|
800
|
+
if (op.state === undefined)
|
|
801
|
+
fail('STATE_POLICY', n.id, `${n.op} declares no policy for a state-dependent argument (${[...depends].join(', ')})`);
|
|
802
|
+
if (op.state === 'refuses')
|
|
803
|
+
fail('TOPOLOGY_STATE', n.id, `${n.op} must depend on design inputs only; it depends on ${[...depends].join(', ')}`);
|
|
804
|
+
}
|
|
682
805
|
op.ports.forEach((p, i) => types.set(n.outputs[p], resultTypes[i]));
|
|
683
|
-
if (
|
|
684
|
-
Object.values(n.outputs).forEach(ref =>
|
|
806
|
+
if (depends.size)
|
|
807
|
+
Object.values(n.outputs).forEach(ref => dependence.set(ref, new Set(depends)));
|
|
685
808
|
active.pop();
|
|
686
809
|
visited.add(name);
|
|
687
810
|
order.push(n);
|
|
@@ -690,6 +813,7 @@ function compileInternal(source) {
|
|
|
690
813
|
visit(name);
|
|
691
814
|
return {
|
|
692
815
|
outputTypes: Object.fromEntries([...types].map(([k, v]) => [k, structuredClone(v)])),
|
|
816
|
+
dependence: Object.fromEntries([...dependence].map(([k, v]) => [k, [...v].sort()])),
|
|
693
817
|
order: order.map(n => n.id),
|
|
694
818
|
evaluate(input) {
|
|
695
819
|
fields(input, m.inputs.map(p => p.id), [], 'input values');
|