@hatiolab/figure-model 0.1.34 → 0.1.36
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 +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/v3-asset-types.d.ts +2 -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 +4 -1
- 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-from-v2.d.ts +66 -3
- package/dist/v3-from-v2.d.ts.map +1 -1
- package/dist/v3-from-v2.js +359 -94
- package/dist/v3-from-v2.js.map +1 -1
- package/dist/v3-gate.d.ts +53 -4
- package/dist/v3-gate.d.ts.map +1 -1
- package/dist/v3-gate.js +194 -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 +15 -3
- package/dist/v3-graph.d.ts.map +1 -1
- package/dist/v3-graph.js +118 -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-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))
|
|
@@ -35,16 +36,21 @@ export function v3WorldBoxesOf(geometry, writers) {
|
|
|
35
36
|
? [d.radiusX * 2, d.radiusY * 2, d.radiusZ * 2]
|
|
36
37
|
: g.shape.provider === 'frustum'
|
|
37
38
|
? [Math.max(d.radiusTop, d.radiusBottom) * 2, d.height, Math.max(d.radiusTop, d.radiusBottom) * 2]
|
|
38
|
-
:
|
|
39
|
+
: g.shape.provider === 'ellipticCylinder'
|
|
40
|
+
? [d.radiusX * 2, d.length, d.radiusZ * 2]
|
|
41
|
+
: [d.width, d.height, d.depth];
|
|
39
42
|
const r = g.pose.r;
|
|
40
43
|
const extent = AXES.map((_, a) => local.reduce((s, v, i) => s + Math.abs(r[a][i]) * v, 0));
|
|
41
|
-
|
|
44
|
+
const box = {
|
|
42
45
|
part,
|
|
43
46
|
centre: { x: g.pose.t[0], y: g.pose.t[1], z: g.pose.t[2] },
|
|
44
47
|
extent: { x: extent[0], y: extent[1], z: extent[2] },
|
|
45
48
|
dims: local,
|
|
46
49
|
rotation: r
|
|
47
|
-
}
|
|
50
|
+
};
|
|
51
|
+
if (options.points)
|
|
52
|
+
box.points = transformPoints(v3ShapePoints(g.shape, g.segments), r, g.pose.t);
|
|
53
|
+
out.push(box);
|
|
48
54
|
}
|
|
49
55
|
return out;
|
|
50
56
|
}
|
|
@@ -57,30 +63,198 @@ export function v3WritersOf(asset) {
|
|
|
57
63
|
return writers;
|
|
58
64
|
}
|
|
59
65
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
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.
|
|
62
73
|
*/
|
|
63
|
-
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
|
+
case 'curve@1': {
|
|
116
|
+
// A piecewise-linear curve is monotone in x when its key values never change direction; then its extremes
|
|
117
|
+
// are at x's extremes. Keys that depend on state, or a curve that rises and falls, are not covered.
|
|
118
|
+
if (n.args.slice(1).some(a => dep(a).length)) {
|
|
119
|
+
reasons.push(`${n.id}: a curve key depends on ${[...new Set(n.args.slice(1).flatMap(dep))].join(', ')}`);
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
const constant = new Map(asset.document.model.constants.map(c => [c.id, c.value]));
|
|
123
|
+
const values = [];
|
|
124
|
+
for (let i = 2; i < n.args.length; i += 2)
|
|
125
|
+
values.push(constant.get(n.args[i]) ?? NaN);
|
|
126
|
+
const up = values.every((v, i) => i === 0 || v >= values[i - 1]);
|
|
127
|
+
const down = values.every((v, i) => i === 0 || v <= values[i - 1]);
|
|
128
|
+
if (values.some(Number.isNaN))
|
|
129
|
+
reasons.push(`${n.id}: a curve key is not a constant`);
|
|
130
|
+
else if (!up && !down)
|
|
131
|
+
reasons.push(`${n.id}: the curve rises and falls (${values.join(', ')}), so its extreme may lie inside the range`);
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
default:
|
|
135
|
+
// sin, axis-turn, layout operators, distance, providers with a state-dependent argument are not corner-extremal
|
|
136
|
+
// by this basis; providers are shapes whose extents are the arguments themselves, which is fine only when the
|
|
137
|
+
// arguments are (handled by their own nodes), so treat shape providers as pass-through.
|
|
138
|
+
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')
|
|
139
|
+
break;
|
|
140
|
+
reasons.push(`${n.id}: ${n.op} with a state-dependent argument (${[...new Set(stateful.flatMap(dep))].join(', ')})`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return reasons;
|
|
144
|
+
}
|
|
145
|
+
/** The state inputs of an asset with their declared bounds. */
|
|
146
|
+
function stateInputs(asset) {
|
|
147
|
+
return asset.document.model.inputs.filter(i => i.role === 'state').map(i => ({ id: i.id, min: i.min, max: i.max }));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Inspect an asset against its declared occupancy. Without `at`, the whole valid state range is covered: every
|
|
151
|
+
* state input at its bounds (and, when a rotation depends on state, along its sweep), and a violation found at any
|
|
152
|
+
* evaluated state is a violation. The occupancy is never widened to make one go away.
|
|
153
|
+
*/
|
|
154
|
+
export function inspectV3Asset(asset, options = {}) {
|
|
155
|
+
// Backwards compatible: a plain record is `at`.
|
|
156
|
+
const opts = 'at' in options || 'sweepSteps' in options || 'maxCornerInputs' in options || Object.keys(options).length === 0 ? options : { at: options };
|
|
64
157
|
const compiled = compileV3Asset(asset);
|
|
65
|
-
const
|
|
158
|
+
const graph = compileV3Graph(asset.document.model);
|
|
159
|
+
const inputs = stateInputs(asset);
|
|
66
160
|
const violations = [];
|
|
161
|
+
const seen = new Set();
|
|
162
|
+
const push = (v) => {
|
|
163
|
+
const key = JSON.stringify([v.code, v.part, v.axis]);
|
|
164
|
+
if (seen.has(key)) {
|
|
165
|
+
// Keep the worst distance for a part and axis across the states evaluated.
|
|
166
|
+
const prior = violations.find(x => x.code === v.code && x.part === v.part && x.axis === v.axis);
|
|
167
|
+
if ((v.mm ?? 0) > (prior.mm ?? 0))
|
|
168
|
+
Object.assign(prior, v);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
seen.add(key);
|
|
172
|
+
violations.push(v);
|
|
173
|
+
};
|
|
67
174
|
if (!asset.occupancy) {
|
|
68
175
|
violations.push({ code: 'OCCUPANCY_UNDECLARED', detail: 'the asset does not declare the volume it occupies or the face it stands on' });
|
|
69
|
-
return { violations };
|
|
176
|
+
return { coverage: { method: 'defaults', inputs, states: 0, detail: 'nothing to inspect against' }, violations };
|
|
70
177
|
}
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
178
|
+
// Which states to evaluate.
|
|
179
|
+
let states;
|
|
180
|
+
let coverage;
|
|
181
|
+
if (opts.at) {
|
|
182
|
+
states = [opts.at];
|
|
183
|
+
coverage = { method: 'defaults', inputs, states: 1, detail: 'one state, as asked' };
|
|
184
|
+
}
|
|
185
|
+
else if (!inputs.length) {
|
|
186
|
+
states = [{}];
|
|
187
|
+
coverage = { method: 'proven', inputs, states: 1, detail: 'no state input; the rest pose is the only pose' };
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
const unprovable = cornerExtremalBasis(asset, graph.dependence);
|
|
191
|
+
const maxCorners = opts.maxCornerInputs ?? 10;
|
|
192
|
+
const allCorners = inputs.length <= maxCorners;
|
|
193
|
+
const corners = [];
|
|
194
|
+
if (allCorners) {
|
|
195
|
+
for (let mask = 0; mask < 1 << inputs.length; mask++)
|
|
196
|
+
corners.push(Object.fromEntries(inputs.map((i, k) => [i.id, mask & (1 << k) ? i.max : i.min])));
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
// Too many inputs to enumerate: the all-min and all-max corners and every single flip from each. Not all corners.
|
|
200
|
+
const lows = Object.fromEntries(inputs.map(i => [i.id, i.min]));
|
|
201
|
+
const highs = Object.fromEntries(inputs.map(i => [i.id, i.max]));
|
|
202
|
+
corners.push(lows, highs);
|
|
203
|
+
for (const i of inputs)
|
|
204
|
+
corners.push({ ...lows, [i.id]: i.max }, { ...highs, [i.id]: i.min });
|
|
205
|
+
unprovable.push(`${inputs.length} state inputs exceed the corner cap of ${maxCorners}; only ${corners.length} of ${2 ** inputs.length} corners were evaluated`);
|
|
206
|
+
}
|
|
207
|
+
if (!unprovable.length) {
|
|
208
|
+
states = corners;
|
|
209
|
+
coverage = {
|
|
210
|
+
method: 'proven',
|
|
211
|
+
inputs,
|
|
212
|
+
states: corners.length,
|
|
213
|
+
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`
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
const steps = opts.sweepSteps ?? 9;
|
|
218
|
+
const sweeps = [];
|
|
219
|
+
for (const i of inputs)
|
|
220
|
+
for (let k = 0; k < steps; k++) {
|
|
221
|
+
const v = i.min + ((i.max - i.min) * k) / (steps - 1);
|
|
222
|
+
sweeps.push({ [i.id]: v });
|
|
223
|
+
}
|
|
224
|
+
states = [...corners, ...sweeps];
|
|
225
|
+
coverage = {
|
|
226
|
+
method: 'sampled',
|
|
227
|
+
inputs,
|
|
228
|
+
states: states.length,
|
|
229
|
+
sweepSteps: steps,
|
|
230
|
+
unprovable,
|
|
231
|
+
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`
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
for (const state of states) {
|
|
236
|
+
const evaluated = compiled.evaluate(state);
|
|
237
|
+
inspectOne(asset, graph, evaluated.geometry, state, push);
|
|
238
|
+
}
|
|
239
|
+
const values = graph.evaluate({ ...asset.designInputs, ...asset.stateDefaults }).values;
|
|
77
240
|
const extent = {
|
|
78
241
|
x: values[asset.occupancy.extent.x],
|
|
79
242
|
y: values[asset.occupancy.extent.y],
|
|
80
243
|
z: values[asset.occupancy.extent.z]
|
|
81
244
|
};
|
|
82
|
-
|
|
83
|
-
|
|
245
|
+
return { extent, placement: asset.occupancy.placement, coverage, violations };
|
|
246
|
+
}
|
|
247
|
+
function inspectOne(asset, graph, geometry, state, push) {
|
|
248
|
+
const occupancy = asset.occupancy;
|
|
249
|
+
// The asset evaluation returns geometry only; the declared lengths are graph values, so read the graph itself.
|
|
250
|
+
const values = graph.evaluate({ ...asset.designInputs, ...asset.stateDefaults, ...state }).values;
|
|
251
|
+
const extent = {
|
|
252
|
+
x: values[occupancy.extent.x],
|
|
253
|
+
y: values[occupancy.extent.y],
|
|
254
|
+
z: values[occupancy.extent.z]
|
|
255
|
+
};
|
|
256
|
+
const placement = occupancy.placement;
|
|
257
|
+
const boxes = v3WorldBoxesOf(geometry, v3WritersOf(asset));
|
|
84
258
|
const round = (v) => Math.round(v * 1e4) / 1e4;
|
|
85
259
|
// The declared box: X and Z centred, Y from the floor (ADR-0065).
|
|
86
260
|
const low = { x: -extent.x / 2, y: 0, z: -extent.z / 2 };
|
|
@@ -93,7 +267,7 @@ export function inspectV3Asset(asset, stateOverrides = {}) {
|
|
|
93
267
|
const over = Math.max(box.centre[axis] + reach - high[axis], low[axis] - (box.centre[axis] - reach));
|
|
94
268
|
if (over > SKIN) {
|
|
95
269
|
const mm = round(over);
|
|
96
|
-
|
|
270
|
+
push({
|
|
97
271
|
code: 'PART_OUTSIDE_OCCUPANCY',
|
|
98
272
|
part: box.part,
|
|
99
273
|
axis,
|
|
@@ -110,7 +284,7 @@ export function inspectV3Asset(asset, stateOverrides = {}) {
|
|
|
110
284
|
if (lowest && placement === 'floor') {
|
|
111
285
|
const gap = lowest.centre.y - lowest.extent.y / 2 - low.y;
|
|
112
286
|
if (gap > SKIN)
|
|
113
|
-
|
|
287
|
+
push({
|
|
114
288
|
code: 'PARTS_OFF_PLACEMENT_FACE',
|
|
115
289
|
part: lowest.part,
|
|
116
290
|
axis: 'y',
|
|
@@ -121,7 +295,7 @@ export function inspectV3Asset(asset, stateOverrides = {}) {
|
|
|
121
295
|
if (highest && placement === 'ceiling') {
|
|
122
296
|
const gap = high.y - (highest.centre.y + highest.extent.y / 2);
|
|
123
297
|
if (gap > SKIN)
|
|
124
|
-
|
|
298
|
+
push({
|
|
125
299
|
code: 'PARTS_OFF_PLACEMENT_FACE',
|
|
126
300
|
part: highest.part,
|
|
127
301
|
axis: 'y',
|
|
@@ -129,6 +303,5 @@ export function inspectV3Asset(asset, stateOverrides = {}) {
|
|
|
129
303
|
detail: `the highest part '${highest.part}' hangs ${round(gap)} mm below the ceiling the figure is declared to hang from`
|
|
130
304
|
});
|
|
131
305
|
}
|
|
132
|
-
return { extent, placement, violations };
|
|
133
306
|
}
|
|
134
307
|
//# 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' | 'frustum';
|
|
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,GAAG,SAAS,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,12 +1,24 @@
|
|
|
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
|
|
8
|
-
* (
|
|
9
|
-
*
|
|
17
|
+
* The operators whose output is not affine in its scalar arguments. `geomean@1` (ADR-0087 decision 2 addendum) and
|
|
18
|
+
* `curve@1` (piecewise-linear, V3 designer's approval 2026-09-22). The converter feeds `curve@1` state inputs only, so
|
|
19
|
+
* every converted asset stays affine in the size; a curve of a design input is legal in the kernel but would take the
|
|
20
|
+
* 8-size regression check's ground away, and the gate's corner-extremal basis treats a non-monotone curve as unproven.
|
|
21
|
+
* Adding another means another ruling, and the test that pins this list goes red until it has happened.
|
|
10
22
|
*/
|
|
11
23
|
export declare const V3_NON_AFFINE_OPERATORS: readonly string[];
|
|
12
24
|
/**
|
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;AA8sBxB,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;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAA4C,CAAA;AAEjG;;;;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
|
@@ -106,6 +106,41 @@ const ops = {
|
|
|
106
106
|
return [Math.pow(a.reduce((s, x) => s * x, 1), 1 / a.length)];
|
|
107
107
|
}
|
|
108
108
|
},
|
|
109
|
+
// A piecewise-linear curve through keys (V3 designer's approval, 2026-09-22): value(x) for x between two keys is the
|
|
110
|
+
// straight line between them; outside the keys the end value holds (as V2 `sampleChannel` and glTF do). Keys are
|
|
111
|
+
// constants or values: args are x, then at₀, v₀, at₁, v₁, … with the ats strictly increasing. Every `at` has x's
|
|
112
|
+
// dimension and every `v` one dimension, which is the output's. Linear only; a step curve is a different operator.
|
|
113
|
+
'curve@1': {
|
|
114
|
+
ports: ['value'],
|
|
115
|
+
types(t, p) {
|
|
116
|
+
if (t.length < 5 || t.length % 2 === 0 || !t.every(Array.isArray))
|
|
117
|
+
fail('TYPE', p, 'x and at least two (at, value) key pairs, all scalars');
|
|
118
|
+
for (let i = 1; i < t.length; i += 2) {
|
|
119
|
+
if (!eq(t[i], t[0]))
|
|
120
|
+
fail('TYPE', p, `key ${(i - 1) / 2}: at must have the dimension of x`);
|
|
121
|
+
if (!eq(t[i + 1], t[2]))
|
|
122
|
+
fail('TYPE', p, `key ${(i - 1) / 2}: every value must have one dimension`);
|
|
123
|
+
}
|
|
124
|
+
return [t[2]];
|
|
125
|
+
},
|
|
126
|
+
run: (a, p) => {
|
|
127
|
+
const x = a[0];
|
|
128
|
+
const n = (a.length - 1) / 2;
|
|
129
|
+
const at = (k) => a[1 + 2 * k], val = (k) => a[2 + 2 * k];
|
|
130
|
+
for (let k = 1; k < n; k++)
|
|
131
|
+
if (!(at(k) > at(k - 1)))
|
|
132
|
+
fail('DOMAIN', p, `keys out of order: at[${k}] = ${at(k)} is not after at[${k - 1}] = ${at(k - 1)}`);
|
|
133
|
+
if (x <= at(0))
|
|
134
|
+
return [val(0)];
|
|
135
|
+
if (x >= at(n - 1))
|
|
136
|
+
return [val(n - 1)];
|
|
137
|
+
let k = 0;
|
|
138
|
+
while (k < n - 2 && at(k + 1) <= x)
|
|
139
|
+
k++;
|
|
140
|
+
const r = (x - at(k)) / (at(k + 1) - at(k));
|
|
141
|
+
return [val(k) + (val(k + 1) - val(k)) * r];
|
|
142
|
+
}
|
|
143
|
+
},
|
|
109
144
|
'between@1': {
|
|
110
145
|
ports: ['length', 'center'],
|
|
111
146
|
types(t, p) {
|
|
@@ -394,9 +429,12 @@ Object.assign(ops, {
|
|
|
394
429
|
requireTypes(t, [ratio, ratio, ratio, angle], p);
|
|
395
430
|
return [transformType(n.params.from, n.params.to)];
|
|
396
431
|
},
|
|
397
|
-
run: ([
|
|
398
|
-
|
|
432
|
+
run: ([ax0, ay0, az0, q], p) => {
|
|
433
|
+
// A unit axis, written with six decimals by authors and converters: 1e-6 of slack, then normalised exactly.
|
|
434
|
+
const n = Math.hypot(ax0, ay0, az0);
|
|
435
|
+
if (Math.abs(n - 1) > 1e-6)
|
|
399
436
|
fail('AXIS', p, 'unit axis required');
|
|
437
|
+
const ax = ax0 / n, ay = ay0 / n, az = az0 / n;
|
|
400
438
|
const c = Math.cos(q), s = Math.sin(q), k = 1 - c;
|
|
401
439
|
return [
|
|
402
440
|
{
|
|
@@ -418,9 +456,10 @@ Object.assign(ops, {
|
|
|
418
456
|
return [transformType(n.params.from, n.params.to)];
|
|
419
457
|
},
|
|
420
458
|
run: ([ax, ay, az, q], p) => {
|
|
421
|
-
|
|
459
|
+
const n = Math.hypot(ax, ay, az);
|
|
460
|
+
if (Math.abs(n - 1) > 1e-6)
|
|
422
461
|
fail('AXIS', p, 'unit axis required');
|
|
423
|
-
return [{ r: identity(), t: [ax * q, ay * q, az * q] }];
|
|
462
|
+
return [{ r: identity(), t: [(ax / n) * q, (ay / n) * q, (az / n) * q] }];
|
|
424
463
|
}
|
|
425
464
|
},
|
|
426
465
|
'compose@1': {
|
|
@@ -526,6 +565,49 @@ Object.assign(ops, {
|
|
|
526
565
|
return [{ provider: 'frustum', dimensions: { radiusTop, radiusBottom, height } }];
|
|
527
566
|
}
|
|
528
567
|
},
|
|
568
|
+
// Shape-dimension contract §1 (2026-09-22): every round thing has per-axis dimensions. The @1 forms stay valid and
|
|
569
|
+
// mean the equal case; @2 writes both axes. A renderer draws the ellipse or elliptic corner it is given.
|
|
570
|
+
'cylinder-shape@2': {
|
|
571
|
+
ports: ['shape'],
|
|
572
|
+
params: ['frame'],
|
|
573
|
+
types(t, p, n) {
|
|
574
|
+
requireTypes(t, [length, length, length], p);
|
|
575
|
+
return [{ kind: 'shape', provider: 'ellipticCylinder', frame: n.params.frame }];
|
|
576
|
+
},
|
|
577
|
+
run: ([radiusX, radiusZ, length], p) => {
|
|
578
|
+
if (!(radiusX > 0 && radiusZ > 0 && length > 0))
|
|
579
|
+
fail('GEOMETRY_DOMAIN', p, 'positive radii and length required');
|
|
580
|
+
return [{ provider: 'ellipticCylinder', dimensions: { radiusX, radiusZ, length } }];
|
|
581
|
+
}
|
|
582
|
+
},
|
|
583
|
+
'rounded-box@2': {
|
|
584
|
+
ports: ['shape'],
|
|
585
|
+
params: ['frame'],
|
|
586
|
+
types(t, p, n) {
|
|
587
|
+
requireTypes(t, Array(5).fill(length), p);
|
|
588
|
+
return [{ kind: 'shape', provider: 'roundedBoxXZ', frame: n.params.frame }];
|
|
589
|
+
},
|
|
590
|
+
run: ([width, height, depth, roundX, roundZ], p) => {
|
|
591
|
+
if (!(width > 0 && height > 0 && depth > 0 && roundX >= 0 && roundZ >= 0 && roundX <= width / 2 && roundZ <= depth / 2))
|
|
592
|
+
fail('GEOMETRY_DOMAIN', p, 'positive dimensions and corner semi-axes within half the section required');
|
|
593
|
+
return [{ provider: 'roundedBoxXZ', dimensions: { width, height, depth, roundX, roundZ } }];
|
|
594
|
+
}
|
|
595
|
+
},
|
|
596
|
+
'hollow-box@2': {
|
|
597
|
+
ports: ['shape'],
|
|
598
|
+
params: ['frame'],
|
|
599
|
+
types(t, p, n) {
|
|
600
|
+
requireTypes(t, Array(8).fill(length), p);
|
|
601
|
+
return [{ kind: 'shape', provider: 'hollowBoxXZ', frame: n.params.frame }];
|
|
602
|
+
},
|
|
603
|
+
run: ([width, height, depth, roundX, roundZ, wallX, wallZ, floor], p) => {
|
|
604
|
+
if (!(width > 0 && height > 0 && depth > 0 && roundX >= 0 && roundZ >= 0 && roundX <= width / 2 && roundZ <= depth / 2))
|
|
605
|
+
fail('GEOMETRY_DOMAIN', p, 'positive dimensions and corner semi-axes within half the section required');
|
|
606
|
+
if (!(wallX > 0 && wallZ > 0 && wallX < width / 2 && wallZ < depth / 2 && floor >= 0 && floor < height))
|
|
607
|
+
fail('GEOMETRY_DOMAIN', p, 'walls thinner than half the section and a floor thinner than the height required');
|
|
608
|
+
return [{ provider: 'hollowBoxXZ', dimensions: { width, height, depth, roundX, roundZ, wallX, wallZ, floor } }];
|
|
609
|
+
}
|
|
610
|
+
},
|
|
529
611
|
// A closed section in the local X–Z plane (profile x → X, profile y → Z, as V2 draws it), pushed along Y.
|
|
530
612
|
'polygon-shape@1': {
|
|
531
613
|
ports: ['shape'],
|
|
@@ -572,11 +654,11 @@ Object.assign(ops, {
|
|
|
572
654
|
fail('TYPE', p, 'shape required');
|
|
573
655
|
const names = t[0].provider === 'portal'
|
|
574
656
|
? ['top', 'bottomLeft', 'bottomRight', 'openingTop', 'frontTop']
|
|
575
|
-
: ['box', 'roundedBox', 'sphere', 'hollowBox'].includes(t[0].provider)
|
|
657
|
+
: ['box', 'roundedBox', 'roundedBoxXZ', 'sphere', 'hollowBox', 'hollowBoxXZ'].includes(t[0].provider)
|
|
576
658
|
? ['left', 'right', 'bottom', 'top', 'back', 'front']
|
|
577
659
|
: t[0].provider === 'polygon'
|
|
578
660
|
? ['bottom', 'top']
|
|
579
|
-
: t[0].provider === 'frustum'
|
|
661
|
+
: t[0].provider === 'frustum' || t[0].provider === 'ellipticCylinder'
|
|
580
662
|
? ['start', 'end']
|
|
581
663
|
: ['start', 'end', 'radialBottom'];
|
|
582
664
|
if (!names.includes(n.params.name))
|
|
@@ -604,9 +686,9 @@ Object.assign(ops, {
|
|
|
604
686
|
}
|
|
605
687
|
: s.provider === 'polygon'
|
|
606
688
|
? { bottom: [0, -d.height / 2, 0], top: [0, d.height / 2, 0] }
|
|
607
|
-
: s.provider === 'frustum'
|
|
608
|
-
? { start: [0, -d.height / 2, 0], end: [0, d.height / 2, 0] }
|
|
609
|
-
: ['box', 'roundedBox', 'hollowBox'].includes(s.provider)
|
|
689
|
+
: s.provider === 'frustum' || s.provider === 'ellipticCylinder'
|
|
690
|
+
? { start: [0, -(d.height ?? d.length) / 2, 0], end: [0, (d.height ?? d.length) / 2, 0] }
|
|
691
|
+
: ['box', 'roundedBox', 'roundedBoxXZ', 'hollowBox', 'hollowBoxXZ'].includes(s.provider)
|
|
610
692
|
? {
|
|
611
693
|
left: [-d.width / 2, 0, 0],
|
|
612
694
|
right: [d.width / 2, 0, 0],
|
|
@@ -632,14 +714,22 @@ Object.assign(ops, {
|
|
|
632
714
|
});
|
|
633
715
|
// Template members are values, not separately rendered placements.
|
|
634
716
|
ops['member@1'] = { ...ops['place@1'], geometry: undefined };
|
|
717
|
+
// Shape-dimension contract §2: every operator declares what it does with a state-dependent argument. Layout
|
|
718
|
+
// counts and pitches are structure and cost, design-only; everything else may follow state.
|
|
719
|
+
for (const [name, op] of Object.entries(ops))
|
|
720
|
+
op.state = name === 'fit-pitch@1' || name === 'fixed-count@1' ? 'refuses' : 'follows';
|
|
721
|
+
/** Every operator's state policy, by name, for the guard test and for readers of the contract. */
|
|
722
|
+
export const V3_OPERATOR_STATE_POLICY = Object.freeze(Object.fromEntries(Object.entries(ops).map(([k, op]) => [k, op.state])));
|
|
635
723
|
/** Every operator the kernel knows, by name. `v3-graph.test.ts` holds the list still. */
|
|
636
724
|
export const V3_OPERATORS = Object.freeze(Object.keys(ops));
|
|
637
725
|
/**
|
|
638
|
-
* The operators whose output is not affine in
|
|
639
|
-
* (
|
|
640
|
-
*
|
|
726
|
+
* The operators whose output is not affine in its scalar arguments. `geomean@1` (ADR-0087 decision 2 addendum) and
|
|
727
|
+
* `curve@1` (piecewise-linear, V3 designer's approval 2026-09-22). The converter feeds `curve@1` state inputs only, so
|
|
728
|
+
* every converted asset stays affine in the size; a curve of a design input is legal in the kernel but would take the
|
|
729
|
+
* 8-size regression check's ground away, and the gate's corner-extremal basis treats a non-monotone curve as unproven.
|
|
730
|
+
* Adding another means another ruling, and the test that pins this list goes red until it has happened.
|
|
641
731
|
*/
|
|
642
|
-
export const V3_NON_AFFINE_OPERATORS = Object.freeze(['geomean@1']);
|
|
732
|
+
export const V3_NON_AFFINE_OPERATORS = Object.freeze(['geomean@1', 'curve@1']);
|
|
643
733
|
/**
|
|
644
734
|
* The operators whose output is not affine in a **state** input: a rotation matrix is sin/cos in the joint
|
|
645
735
|
* angle (motion contract, "two corrections"). Rigid in space, so placement stays rigid; the 8-size check is a
|
|
@@ -676,7 +766,7 @@ function compileInternal(source) {
|
|
|
676
766
|
if (!Array.isArray(source[k]))
|
|
677
767
|
fail('SCHEMA', k, 'array required');
|
|
678
768
|
// Snapshot protects a compiled plan from later authoring mutations.
|
|
679
|
-
const m = structuredClone(source), writers = new Map(), types = new Map(),
|
|
769
|
+
const m = structuredClone(source), writers = new Map(), types = new Map(), dependence = new Map(), nodes = new Map(), order = [], active = [];
|
|
680
770
|
const assign = (name, owner) => {
|
|
681
771
|
id(name, owner);
|
|
682
772
|
if (writers.has(name))
|
|
@@ -690,7 +780,7 @@ function compileInternal(source) {
|
|
|
690
780
|
if (p.role && !['design', 'state'].includes(p.role))
|
|
691
781
|
fail('SCHEMA', p.id, 'unknown input role');
|
|
692
782
|
if (p.role === 'state')
|
|
693
|
-
|
|
783
|
+
dependence.set(p.id, new Set([p.id]));
|
|
694
784
|
if (num(p.min, p.id) > num(p.max, p.id))
|
|
695
785
|
fail('RANGE', p.id, 'min > max');
|
|
696
786
|
if (p.unit === 'count') {
|
|
@@ -739,12 +829,19 @@ function compileInternal(source) {
|
|
|
739
829
|
return types.get(ref);
|
|
740
830
|
});
|
|
741
831
|
const resultTypes = op.types(inputTypes, n.id, n);
|
|
742
|
-
const
|
|
743
|
-
|
|
744
|
-
|
|
832
|
+
const depends = new Set();
|
|
833
|
+
for (const ref of n.args)
|
|
834
|
+
for (const s of dependence.get(ref) ?? [])
|
|
835
|
+
depends.add(s);
|
|
836
|
+
if (depends.size) {
|
|
837
|
+
if (op.state === undefined)
|
|
838
|
+
fail('STATE_POLICY', n.id, `${n.op} declares no policy for a state-dependent argument (${[...depends].join(', ')})`);
|
|
839
|
+
if (op.state === 'refuses')
|
|
840
|
+
fail('TOPOLOGY_STATE', n.id, `${n.op} must depend on design inputs only; it depends on ${[...depends].join(', ')}`);
|
|
841
|
+
}
|
|
745
842
|
op.ports.forEach((p, i) => types.set(n.outputs[p], resultTypes[i]));
|
|
746
|
-
if (
|
|
747
|
-
Object.values(n.outputs).forEach(ref =>
|
|
843
|
+
if (depends.size)
|
|
844
|
+
Object.values(n.outputs).forEach(ref => dependence.set(ref, new Set(depends)));
|
|
748
845
|
active.pop();
|
|
749
846
|
visited.add(name);
|
|
750
847
|
order.push(n);
|
|
@@ -753,6 +850,7 @@ function compileInternal(source) {
|
|
|
753
850
|
visit(name);
|
|
754
851
|
return {
|
|
755
852
|
outputTypes: Object.fromEntries([...types].map(([k, v]) => [k, structuredClone(v)])),
|
|
853
|
+
dependence: Object.fromEntries([...dependence].map(([k, v]) => [k, [...v].sort()])),
|
|
756
854
|
order: order.map(n => n.id),
|
|
757
855
|
evaluate(input) {
|
|
758
856
|
fields(input, m.inputs.map(p => p.id), [], 'input values');
|