@hatiolab/figure-model 0.1.34 → 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 +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 +57 -3
- package/dist/v3-from-v2.d.ts.map +1 -1
- package/dist/v3-from-v2.js +276 -91
- 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 +175 -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 +10 -0
- package/dist/v3-graph.d.ts.map +1 -1
- package/dist/v3-graph.js +77 -16
- 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 +3 -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,179 @@ 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
|
+
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 };
|
|
64
138
|
const compiled = compileV3Asset(asset);
|
|
65
|
-
const
|
|
139
|
+
const graph = compileV3Graph(asset.document.model);
|
|
140
|
+
const inputs = stateInputs(asset);
|
|
66
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
|
+
};
|
|
67
155
|
if (!asset.occupancy) {
|
|
68
156
|
violations.push({ code: 'OCCUPANCY_UNDECLARED', detail: 'the asset does not declare the volume it occupies or the face it stands on' });
|
|
69
|
-
return { violations };
|
|
157
|
+
return { coverage: { method: 'defaults', inputs, states: 0, detail: 'nothing to inspect against' }, violations };
|
|
70
158
|
}
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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;
|
|
77
221
|
const extent = {
|
|
78
222
|
x: values[asset.occupancy.extent.x],
|
|
79
223
|
y: values[asset.occupancy.extent.y],
|
|
80
224
|
z: values[asset.occupancy.extent.z]
|
|
81
225
|
};
|
|
82
|
-
|
|
83
|
-
|
|
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));
|
|
84
239
|
const round = (v) => Math.round(v * 1e4) / 1e4;
|
|
85
240
|
// The declared box: X and Z centred, Y from the floor (ADR-0065).
|
|
86
241
|
const low = { x: -extent.x / 2, y: 0, z: -extent.z / 2 };
|
|
@@ -93,7 +248,7 @@ export function inspectV3Asset(asset, stateOverrides = {}) {
|
|
|
93
248
|
const over = Math.max(box.centre[axis] + reach - high[axis], low[axis] - (box.centre[axis] - reach));
|
|
94
249
|
if (over > SKIN) {
|
|
95
250
|
const mm = round(over);
|
|
96
|
-
|
|
251
|
+
push({
|
|
97
252
|
code: 'PART_OUTSIDE_OCCUPANCY',
|
|
98
253
|
part: box.part,
|
|
99
254
|
axis,
|
|
@@ -110,7 +265,7 @@ export function inspectV3Asset(asset, stateOverrides = {}) {
|
|
|
110
265
|
if (lowest && placement === 'floor') {
|
|
111
266
|
const gap = lowest.centre.y - lowest.extent.y / 2 - low.y;
|
|
112
267
|
if (gap > SKIN)
|
|
113
|
-
|
|
268
|
+
push({
|
|
114
269
|
code: 'PARTS_OFF_PLACEMENT_FACE',
|
|
115
270
|
part: lowest.part,
|
|
116
271
|
axis: 'y',
|
|
@@ -121,7 +276,7 @@ export function inspectV3Asset(asset, stateOverrides = {}) {
|
|
|
121
276
|
if (highest && placement === 'ceiling') {
|
|
122
277
|
const gap = high.y - (highest.centre.y + highest.extent.y / 2);
|
|
123
278
|
if (gap > SKIN)
|
|
124
|
-
|
|
279
|
+
push({
|
|
125
280
|
code: 'PARTS_OFF_PLACEMENT_FACE',
|
|
126
281
|
part: highest.part,
|
|
127
282
|
axis: 'y',
|
|
@@ -129,6 +284,5 @@ export function inspectV3Asset(asset, stateOverrides = {}) {
|
|
|
129
284
|
detail: `the highest part '${highest.part}' hangs ${round(gap)} mm below the ceiling the figure is declared to hang from`
|
|
130
285
|
});
|
|
131
286
|
}
|
|
132
|
-
return { extent, placement, violations };
|
|
133
287
|
}
|
|
134
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' | '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,6 +1,16 @@
|
|
|
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
|
/**
|
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
|
@@ -394,9 +394,12 @@ Object.assign(ops, {
|
|
|
394
394
|
requireTypes(t, [ratio, ratio, ratio, angle], p);
|
|
395
395
|
return [transformType(n.params.from, n.params.to)];
|
|
396
396
|
},
|
|
397
|
-
run: ([
|
|
398
|
-
|
|
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)
|
|
399
401
|
fail('AXIS', p, 'unit axis required');
|
|
402
|
+
const ax = ax0 / n, ay = ay0 / n, az = az0 / n;
|
|
400
403
|
const c = Math.cos(q), s = Math.sin(q), k = 1 - c;
|
|
401
404
|
return [
|
|
402
405
|
{
|
|
@@ -418,9 +421,10 @@ Object.assign(ops, {
|
|
|
418
421
|
return [transformType(n.params.from, n.params.to)];
|
|
419
422
|
},
|
|
420
423
|
run: ([ax, ay, az, q], p) => {
|
|
421
|
-
|
|
424
|
+
const n = Math.hypot(ax, ay, az);
|
|
425
|
+
if (Math.abs(n - 1) > 1e-6)
|
|
422
426
|
fail('AXIS', p, 'unit axis required');
|
|
423
|
-
return [{ r: identity(), t: [ax * q, ay * q, az * q] }];
|
|
427
|
+
return [{ r: identity(), t: [(ax / n) * q, (ay / n) * q, (az / n) * q] }];
|
|
424
428
|
}
|
|
425
429
|
},
|
|
426
430
|
'compose@1': {
|
|
@@ -526,6 +530,49 @@ Object.assign(ops, {
|
|
|
526
530
|
return [{ provider: 'frustum', dimensions: { radiusTop, radiusBottom, height } }];
|
|
527
531
|
}
|
|
528
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
|
+
},
|
|
529
576
|
// A closed section in the local X–Z plane (profile x → X, profile y → Z, as V2 draws it), pushed along Y.
|
|
530
577
|
'polygon-shape@1': {
|
|
531
578
|
ports: ['shape'],
|
|
@@ -572,11 +619,11 @@ Object.assign(ops, {
|
|
|
572
619
|
fail('TYPE', p, 'shape required');
|
|
573
620
|
const names = t[0].provider === 'portal'
|
|
574
621
|
? ['top', 'bottomLeft', 'bottomRight', 'openingTop', 'frontTop']
|
|
575
|
-
: ['box', 'roundedBox', 'sphere', 'hollowBox'].includes(t[0].provider)
|
|
622
|
+
: ['box', 'roundedBox', 'roundedBoxXZ', 'sphere', 'hollowBox', 'hollowBoxXZ'].includes(t[0].provider)
|
|
576
623
|
? ['left', 'right', 'bottom', 'top', 'back', 'front']
|
|
577
624
|
: t[0].provider === 'polygon'
|
|
578
625
|
? ['bottom', 'top']
|
|
579
|
-
: t[0].provider === 'frustum'
|
|
626
|
+
: t[0].provider === 'frustum' || t[0].provider === 'ellipticCylinder'
|
|
580
627
|
? ['start', 'end']
|
|
581
628
|
: ['start', 'end', 'radialBottom'];
|
|
582
629
|
if (!names.includes(n.params.name))
|
|
@@ -604,9 +651,9 @@ Object.assign(ops, {
|
|
|
604
651
|
}
|
|
605
652
|
: s.provider === 'polygon'
|
|
606
653
|
? { 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)
|
|
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)
|
|
610
657
|
? {
|
|
611
658
|
left: [-d.width / 2, 0, 0],
|
|
612
659
|
right: [d.width / 2, 0, 0],
|
|
@@ -632,6 +679,12 @@ Object.assign(ops, {
|
|
|
632
679
|
});
|
|
633
680
|
// Template members are values, not separately rendered placements.
|
|
634
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])));
|
|
635
688
|
/** Every operator the kernel knows, by name. `v3-graph.test.ts` holds the list still. */
|
|
636
689
|
export const V3_OPERATORS = Object.freeze(Object.keys(ops));
|
|
637
690
|
/**
|
|
@@ -676,7 +729,7 @@ function compileInternal(source) {
|
|
|
676
729
|
if (!Array.isArray(source[k]))
|
|
677
730
|
fail('SCHEMA', k, 'array required');
|
|
678
731
|
// Snapshot protects a compiled plan from later authoring mutations.
|
|
679
|
-
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 = [];
|
|
680
733
|
const assign = (name, owner) => {
|
|
681
734
|
id(name, owner);
|
|
682
735
|
if (writers.has(name))
|
|
@@ -690,7 +743,7 @@ function compileInternal(source) {
|
|
|
690
743
|
if (p.role && !['design', 'state'].includes(p.role))
|
|
691
744
|
fail('SCHEMA', p.id, 'unknown input role');
|
|
692
745
|
if (p.role === 'state')
|
|
693
|
-
|
|
746
|
+
dependence.set(p.id, new Set([p.id]));
|
|
694
747
|
if (num(p.min, p.id) > num(p.max, p.id))
|
|
695
748
|
fail('RANGE', p.id, 'min > max');
|
|
696
749
|
if (p.unit === 'count') {
|
|
@@ -739,12 +792,19 @@ function compileInternal(source) {
|
|
|
739
792
|
return types.get(ref);
|
|
740
793
|
});
|
|
741
794
|
const resultTypes = op.types(inputTypes, n.id, n);
|
|
742
|
-
const
|
|
743
|
-
|
|
744
|
-
|
|
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
|
+
}
|
|
745
805
|
op.ports.forEach((p, i) => types.set(n.outputs[p], resultTypes[i]));
|
|
746
|
-
if (
|
|
747
|
-
Object.values(n.outputs).forEach(ref =>
|
|
806
|
+
if (depends.size)
|
|
807
|
+
Object.values(n.outputs).forEach(ref => dependence.set(ref, new Set(depends)));
|
|
748
808
|
active.pop();
|
|
749
809
|
visited.add(name);
|
|
750
810
|
order.push(n);
|
|
@@ -753,6 +813,7 @@ function compileInternal(source) {
|
|
|
753
813
|
visit(name);
|
|
754
814
|
return {
|
|
755
815
|
outputTypes: Object.fromEntries([...types].map(([k, v]) => [k, structuredClone(v)])),
|
|
816
|
+
dependence: Object.fromEntries([...dependence].map(([k, v]) => [k, [...v].sort()])),
|
|
756
817
|
order: order.map(n => n.id),
|
|
757
818
|
evaluate(input) {
|
|
758
819
|
fields(input, m.inputs.map(p => p.id), [], 'input values');
|