@hatiolab/figure-model 0.1.66 → 0.1.68
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 +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/v3-authoring-actions.d.ts +34 -1
- package/dist/v3-authoring-actions.d.ts.map +1 -1
- package/dist/v3-authoring-actions.js +208 -59
- package/dist/v3-authoring-actions.js.map +1 -1
- package/dist/v3-kernel-version.d.ts +1 -1
- package/dist/v3-kernel-version.js +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export { V3_KERNEL_VERSION } from './v3-kernel-version.ts';
|
|
|
17
17
|
export { V3_FACE_NORMALS } from './v3-surface.ts';
|
|
18
18
|
export { v3CostOf, v3TrianglesOf, type V3Cost } from './v3-cost.ts';
|
|
19
19
|
export { v3ScoreOf, v3PartCountOf, v3PartBudgetOf, v3GradeOf, v3MaterialKeyOf, v3IndependentBodiesOf, V3_GRADE_SCALE, V3_BUDGET_KEYS, V3_PER_INSTANCE, type V3Score, type V3BudgetUse, type V3BudgetKey } from './v3-score.ts';
|
|
20
|
-
export { applyV3Authoring, proposeV3Occupancy, v3AttachmentsOf, v3BindingsOf, V3_FACES, type V3BindingPlace, type V3AuthoringAction, type V3DimensionSource, type V3Measure, type V3FaceAlignment, type V3Face, type V3MotionRequest, type V3OccupancyProposal, type V3Joint, type V3JointType, type V3JointAxis, V3_JOINT_TYPES, checkV3Joints } from './v3-authoring-actions.ts';
|
|
20
|
+
export { applyV3Authoring, proposeV3Occupancy, proposeV3Proportion, type V3ProportionPlan, v3AttachmentsOf, v3BindingsOf, V3_FACES, type V3BindingPlace, type V3AuthoringAction, type V3DimensionSource, type V3Measure, type V3FaceAlignment, type V3Face, type V3MotionRequest, type V3OccupancyProposal, type V3Joint, type V3JointType, type V3JointAxis, V3_JOINT_TYPES, checkV3Joints } from './v3-authoring-actions.ts';
|
|
21
21
|
export { convertV2ToV3, compareV2WithV3, v2WorldBoxes, v3WorldBoxes, eulerXYZ, V3_SIZE_INPUTS, SAME_TOLERANCE_MM, SAME_TOLERANCE_DEG, type V3ConversionOptions, type V3ConversionResult, type V3ConversionRefusal, type V3ConversionLoss, type V3ConversionNote, type V2MotionState, type V3CompareOptions, paletteHash, v2ClipDuration, v3StateOverrides, axisAngle, repeatBoundaryScales, type V3ConversionMethod, type V3RangeChange, type V3SameReport, type V3SameDifference, type WorldBox } from './v3-from-v2.ts';
|
|
22
22
|
export type * from './v3-asset-types.ts';
|
|
23
23
|
export type { V3Unit, V3Dimensions, V3ValueType, V3GraphInput, V3GraphConstant, V3GraphNode, V3Graph, V3Pose, V3Shape, V3PlacedValue, V3PlacedGeometry, V3ScalarGeometry, V3Geometry, V3RuntimeValue, V3GraphEvaluation, V3CompiledGraph } from './v3-graph-types.ts';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,YAAY,CAAA;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACtH,OAAO,EAAE,wBAAwB,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzJ,OAAO,EAAE,uBAAuB,EAAE,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC7J,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AACvG,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AACjO,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACzJ,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAA;AACxF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,KAAK,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnF,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAClL,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAC9N,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,KAAK,eAAe,EAAE,KAAK,mBAAmB,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -29,7 +29,7 @@ export { V3_KERNEL_VERSION } from "./v3-kernel-version.js";
|
|
|
29
29
|
export { V3_FACE_NORMALS } from "./v3-surface.js";
|
|
30
30
|
export { v3CostOf, v3TrianglesOf } from "./v3-cost.js";
|
|
31
31
|
export { v3ScoreOf, v3PartCountOf, v3PartBudgetOf, v3GradeOf, v3MaterialKeyOf, v3IndependentBodiesOf, V3_GRADE_SCALE, V3_BUDGET_KEYS, V3_PER_INSTANCE } from "./v3-score.js";
|
|
32
|
-
export { applyV3Authoring, proposeV3Occupancy, v3AttachmentsOf, v3BindingsOf, V3_FACES, V3_JOINT_TYPES, checkV3Joints } from "./v3-authoring-actions.js";
|
|
32
|
+
export { applyV3Authoring, proposeV3Occupancy, proposeV3Proportion, v3AttachmentsOf, v3BindingsOf, V3_FACES, V3_JOINT_TYPES, checkV3Joints } from "./v3-authoring-actions.js";
|
|
33
33
|
export { convertV2ToV3, compareV2WithV3, v2WorldBoxes, v3WorldBoxes, eulerXYZ, V3_SIZE_INPUTS, SAME_TOLERANCE_MM, SAME_TOLERANCE_DEG, paletteHash, v2ClipDuration, v3StateOverrides, axisAngle, repeatBoundaryScales } from "./v3-from-v2.js";
|
|
34
34
|
export { assertV3Json, parseV3Json, v3Utf8ByteLength, V3_JSON_MAX_BYTES, V3_JSON_MAX_DEPTH } from "./v3-json.js";
|
|
35
35
|
export { validate } from "./validate.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,YAAY,CAAA;AAC1B,4FAA4F;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAmB,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAgD,MAAM,gBAAgB,CAAA;AACtH,OAAO,EAAE,wBAAwB,EAAuF,MAAM,2BAA2B,CAAA;AACzJ,OAAO,EAAE,uBAAuB,EAA6F,MAAM,0BAA0B,CAAA;AAC7J,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AACvG,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAgG,MAAM,cAAc,CAAA;AACjO,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACzJ,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAe,MAAM,sBAAsB,CAAA;AACxF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAc,MAAM,wBAAwB,CAAA;AACnF,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,wBAAwB,EAAsB,YAAY,EAAoB,MAAM,eAAe,CAAA;AAClL,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAe,MAAM,cAAc,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAoD,MAAM,eAAe,CAAA;AAC9N,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAA4N,cAAc,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -92,7 +92,7 @@ export interface V3Joint {
|
|
|
92
92
|
*/
|
|
93
93
|
repeat?: {
|
|
94
94
|
axis: V3JointAxis;
|
|
95
|
-
pitch:
|
|
95
|
+
pitch: V3Measure;
|
|
96
96
|
count?: number;
|
|
97
97
|
};
|
|
98
98
|
}
|
|
@@ -286,6 +286,16 @@ export type V3AuthoringAction =
|
|
|
286
286
|
| {
|
|
287
287
|
kind: 'scale-uniformly';
|
|
288
288
|
}
|
|
289
|
+
/**
|
|
290
|
+
* "Every length follows the one ratio." For a figure that grows by one ratio (`scale-uniformly` first): each part's
|
|
291
|
+
* own measure, each fastening's offset and gap in millimetres, and each row's pitch become their value now over the
|
|
292
|
+
* size the figure is at now, times that size -- written as the links a person would write one by one, so any part
|
|
293
|
+
* can be given its own number again (`unlink-dimension`). A measure that already follows something is left, and
|
|
294
|
+
* named (`proposeV3Proportion`). Angles, ratios and counts are not lengths (chief architect's ruling 2026-09-25).
|
|
295
|
+
*/
|
|
296
|
+
| {
|
|
297
|
+
kind: 'follow-size-in-proportion';
|
|
298
|
+
}
|
|
289
299
|
/** "This figure is authored to this detail": S, M or L, and so its part limit (`PART_LIMIT`). `null` declares none. */
|
|
290
300
|
| {
|
|
291
301
|
kind: 'set-detail-level';
|
|
@@ -495,4 +505,27 @@ export interface V3BindingPlace {
|
|
|
495
505
|
region: Record<Axis, number> | null;
|
|
496
506
|
}
|
|
497
507
|
export declare function v3BindingsOf(asset: V3Asset): V3BindingPlace[];
|
|
508
|
+
/** What 「every length follows the one ratio」 changes, and what it leaves and why. */
|
|
509
|
+
export interface V3ProportionPlan {
|
|
510
|
+
/** A part's own measure on a shape axis, and the share of the figure's size on that axis it becomes. */
|
|
511
|
+
dimensions: Array<{
|
|
512
|
+
part: string;
|
|
513
|
+
axis: Axis;
|
|
514
|
+
times: number;
|
|
515
|
+
}>;
|
|
516
|
+
/** A fastening's length in millimetres: an offset along a face axis, the gap, or a row's pitch. */
|
|
517
|
+
lengths: Array<{
|
|
518
|
+
joint: string;
|
|
519
|
+
at: 'gap' | 'pitch' | Axis;
|
|
520
|
+
axis: Axis;
|
|
521
|
+
times: number;
|
|
522
|
+
}>;
|
|
523
|
+
/** What stays as it is, with why: it follows something already, or it is a length this command does not write. */
|
|
524
|
+
skipped: Array<{
|
|
525
|
+
what: string;
|
|
526
|
+
reason: string;
|
|
527
|
+
}>;
|
|
528
|
+
}
|
|
529
|
+
/** Reads the asset; changes nothing. Refused for a figure that does not grow by one ratio. */
|
|
530
|
+
export declare function proposeV3Proportion(asset: V3Asset): V3ProportionPlan;
|
|
498
531
|
//# sourceMappingURL=v3-authoring-actions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3-authoring-actions.d.ts","sourceRoot":"","sources":["../src/v3-authoring-actions.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAOlD,6EAA6E;AAC7E,eAAO,MAAM,QAAQ;;;;;;;CAAmF,CAAA;AACxG,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,QAAQ,CAAA;AAE1C;;;;GAIG;AACH,eAAO,MAAM,cAAc,6CAA8C,CAAA;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AACzD,gCAAgC;AAChC,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAEzC;;;;;;;;;;GAUG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,gBAAgB,CAAA;KAAE,CAAA;IACnE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACrC,uGAAuG;IACvG,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;QACzB,GAAG,CAAC,EAAE,SAAS,CAAA;QACf,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAA;QAC9C,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QACpC;;;;;WAKG;QACH,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,oGAAoG;IACpG,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,wGAAwG;IACxG,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,iBAAiB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACtE,mHAAmH;IACnH,KAAK,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvE,qHAAqH;IACrH,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9D;;;;;OAKG;IACH,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"v3-authoring-actions.d.ts","sourceRoot":"","sources":["../src/v3-authoring-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -248,6 +248,13 @@ function sumOf(m, name, terms, hint) {
|
|
|
248
248
|
}
|
|
249
249
|
return out;
|
|
250
250
|
}
|
|
251
|
+
/** The size one axis reads once the figure grows by one ratio: u times its authored size (`scaleUniformly`). */
|
|
252
|
+
function uniformSizeOf(m, axis, path) {
|
|
253
|
+
const node = nodeById(m, `sizing.size.${axis}`);
|
|
254
|
+
if (!node)
|
|
255
|
+
fail('TARGET_ABSENT', path, `the figure grows by one ratio but has no sizing.size.${axis}`);
|
|
256
|
+
return node.outputs.value;
|
|
257
|
+
}
|
|
251
258
|
function sourceRef(m, asset, source, path) {
|
|
252
259
|
if (!source || typeof source !== 'object')
|
|
253
260
|
fail('SCHEMA', path, 'a dimension source is required');
|
|
@@ -255,7 +262,8 @@ function sourceRef(m, asset, source, path) {
|
|
|
255
262
|
const id = `size.${source.axis}`;
|
|
256
263
|
if (!m.inputs.some((i) => i.id === id))
|
|
257
264
|
fail('TARGET_ABSENT', path, `the instance has no ${id}; declare it before following it`);
|
|
258
|
-
|
|
265
|
+
/* A figure that grows by one ratio is read at that ratio's size: a link made after it had read the raw size. */
|
|
266
|
+
return asset.sizing === 'uniform' ? uniformSizeOf(m, source.axis, path) : id;
|
|
259
267
|
}
|
|
260
268
|
if (source.of === 'input') {
|
|
261
269
|
const input = m.inputs.find((i) => i.id === source.input);
|
|
@@ -793,6 +801,9 @@ export function applyV3Authoring(source, action) {
|
|
|
793
801
|
case 'scale-uniformly':
|
|
794
802
|
scaleUniformly(asset);
|
|
795
803
|
break;
|
|
804
|
+
case 'follow-size-in-proportion':
|
|
805
|
+
followSizeInProportion(asset);
|
|
806
|
+
break;
|
|
796
807
|
case 'set-detail-level':
|
|
797
808
|
if (action.level === null)
|
|
798
809
|
delete asset.detailLevel;
|
|
@@ -1048,8 +1059,8 @@ function checkJoint(asset, j) {
|
|
|
1048
1059
|
fail('JOINT_SCHEMA', row, `a row runs along X, Y or Z, not ${String(r.axis)}`);
|
|
1049
1060
|
if (r.axis.toLowerCase() === V3_FACES[j.body1.face])
|
|
1050
1061
|
fail('JOINT_SCHEMA', row, `a row runs across the face it is fastened to; ${r.axis} is out of that face`);
|
|
1051
|
-
if (!(Number.isFinite(r.pitch) && r.pitch > 0))
|
|
1052
|
-
fail('GEOMETRY_DOMAIN', row, 'a row has a positive pitch');
|
|
1062
|
+
if (typeof r.pitch === 'number' ? !(Number.isFinite(r.pitch) && r.pitch > 0) : !(r.pitch && typeof r.pitch === 'object' && r.pitch.from))
|
|
1063
|
+
fail('GEOMETRY_DOMAIN', row, 'a row has a positive pitch, or one that follows a length');
|
|
1053
1064
|
if (r.count !== undefined && !(Number.isSafeInteger(r.count) && r.count >= 1 && r.count <= REPEAT_LIMIT))
|
|
1054
1065
|
fail('GEOMETRY_DOMAIN', row, `a row has 1 to ${REPEAT_LIMIT} copies`);
|
|
1055
1066
|
const held = others.filter(o => 'part' in o.body0 && o.body0.part === j.body1.part).map(o => o.body1.part);
|
|
@@ -1311,7 +1322,7 @@ function repeatPart(asset, j) {
|
|
|
1311
1322
|
const limit = constantOf(m, 'count', REPEAT_LIMIT, 'limit');
|
|
1312
1323
|
const count = j.repeat.count;
|
|
1313
1324
|
m.nodes.push(count === undefined
|
|
1314
|
-
? { id: `${part}.layout`, op: 'fit-pitch@1', args: [length, zero, zero, extent,
|
|
1325
|
+
? { id: `${part}.layout`, op: 'fit-pitch@1', args: [length, zero, zero, extent, measureRef(m, asset, name, j.repeat.pitch, 'pitch', path), centred, limit], outputs: { layout: `${part}.layout.value` } }
|
|
1315
1326
|
: { id: `${part}.layout`, op: 'fixed-count@1', args: [constantOf(m, 'count', count, 'count'), length, zero, zero, extent, centred, limit], outputs: { layout: `${part}.layout.value` } });
|
|
1316
1327
|
/* The part is the row's template now: a member, drawn only through the row. */
|
|
1317
1328
|
place.op = 'member@1';
|
|
@@ -1762,37 +1773,83 @@ const linOf = (m, ref) => {
|
|
|
1762
1773
|
const constant = m.constants.find((c) => c.id === ref);
|
|
1763
1774
|
return constant ? { terms: [], c: constant.value } : { terms: [{ ref, k: 1 }], c: 0 };
|
|
1764
1775
|
};
|
|
1765
|
-
/**
|
|
1776
|
+
/**
|
|
1777
|
+
* The same sum read back through the sums and scalings that make it up, down to what no command rewrites: the inputs,
|
|
1778
|
+
* and values that are not a sum (a row's count). A declared room that read a node a joint writes -- where a leg stands,
|
|
1779
|
+
* a share of the figure's depth -- was broken by the next fastening, which writes that joint's nodes afresh: the gantry
|
|
1780
|
+
* could not be re-fastened once its room was declared (UNKNOWN_REFERENCE, 2026-09-25).
|
|
1781
|
+
*/
|
|
1782
|
+
function linThroughSums(m, lin) {
|
|
1783
|
+
const constant = (ref) => m.constants.find((c) => c.id === ref)?.value;
|
|
1784
|
+
const ratio = (ref) => m.constants.find((c) => c.id === ref && c.unit === 'ratio')?.value;
|
|
1785
|
+
const expand = (ref, k, depth) => {
|
|
1786
|
+
const c = constant(ref);
|
|
1787
|
+
if (c !== undefined)
|
|
1788
|
+
return { terms: [], c: c * k };
|
|
1789
|
+
const w = depth < 256 ? writerOf(m, ref) : undefined;
|
|
1790
|
+
if (w?.op === 'add@1')
|
|
1791
|
+
return w.args.reduce((sum, arg) => linAdd(sum, expand(arg, k, depth + 1)), { terms: [], c: 0 });
|
|
1792
|
+
/* Only a length times a ratio: what is left is then a length, as each term of the room must be. */
|
|
1793
|
+
if (w?.op === 'mul@1') {
|
|
1794
|
+
const [a, b] = w.args;
|
|
1795
|
+
if (ratio(b) !== undefined)
|
|
1796
|
+
return expand(a, k * ratio(b), depth + 1);
|
|
1797
|
+
if (ratio(a) !== undefined)
|
|
1798
|
+
return expand(b, k * ratio(a), depth + 1);
|
|
1799
|
+
}
|
|
1800
|
+
return { terms: [{ ref, k }], c: 0 };
|
|
1801
|
+
};
|
|
1802
|
+
return linNorm(lin.terms.reduce((sum, t) => linAdd(sum, expand(t.ref, t.k, 0)), { terms: [], c: lin.c }));
|
|
1803
|
+
}
|
|
1804
|
+
/**
|
|
1805
|
+
* How far a slide has gone when its control is at one end of its range, as a sum: each control at that end, what the
|
|
1806
|
+
* figure's sizes make of the rest. A mimic of a leader whose stroke follows a length is the leader's ratio times that
|
|
1807
|
+
* length times its multiplier -- read through, not refused: the telescopic conveyor's second and third stages were
|
|
1808
|
+
* left out of its declared room, 2600 and 5200 mm past it (2026-09-25).
|
|
1809
|
+
*/
|
|
1766
1810
|
function travelAt(m, asset, motion, bound) {
|
|
1767
1811
|
const pick = (i) => (bound === 'start' ? (asset.stateDefaults[i.id] ?? i.min) : bound === 'min' ? i.min : i.max);
|
|
1768
|
-
|
|
1769
|
-
const
|
|
1770
|
-
|
|
1812
|
+
const constant = (r) => m.constants.find((c) => c.id === r)?.value;
|
|
1813
|
+
const stateOf = (r) => m.inputs.find((i) => i.id === r && i.role === 'state');
|
|
1814
|
+
/* A value no control reaches: it is the same at either end, so it stays a term of the sum. */
|
|
1815
|
+
const still = (ref, depth = 0) => {
|
|
1816
|
+
if (stateOf(ref))
|
|
1817
|
+
return false;
|
|
1818
|
+
const w = depth < 256 ? writerOf(m, ref) : undefined;
|
|
1819
|
+
return !w || w.args.every((a) => typeof a !== 'string' || still(a, depth + 1));
|
|
1820
|
+
};
|
|
1821
|
+
const read = (ref, depth = 0) => {
|
|
1822
|
+
const c = constant(ref);
|
|
1823
|
+
if (c !== undefined)
|
|
1824
|
+
return { terms: [], c };
|
|
1825
|
+
const state = stateOf(ref);
|
|
1771
1826
|
if (state)
|
|
1772
|
-
return pick(state);
|
|
1773
|
-
const w = writerOf(m, ref);
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
const
|
|
1777
|
-
|
|
1827
|
+
return { terms: [], c: pick(state) };
|
|
1828
|
+
const w = depth < 256 ? writerOf(m, ref) : undefined;
|
|
1829
|
+
if (w?.op === 'add@1') {
|
|
1830
|
+
let out = { terms: [], c: 0 };
|
|
1831
|
+
for (const arg of w.args) {
|
|
1832
|
+
const l = read(arg, depth + 1);
|
|
1833
|
+
if (!l)
|
|
1834
|
+
return null;
|
|
1835
|
+
out = linAdd(out, l);
|
|
1836
|
+
}
|
|
1837
|
+
return out;
|
|
1778
1838
|
}
|
|
1779
|
-
if (w?.op === '
|
|
1780
|
-
const
|
|
1781
|
-
|
|
1839
|
+
if (w?.op === 'mul@1' && w.args.length === 2) {
|
|
1840
|
+
const [a, b] = w.args.map(arg => read(arg, depth + 1));
|
|
1841
|
+
if (!a || !b)
|
|
1842
|
+
return null;
|
|
1843
|
+
// One side a number: a product of two sizes is not a length.
|
|
1844
|
+
if (!a.terms.length)
|
|
1845
|
+
return linAdd({ terms: [], c: 0 }, b, a.c);
|
|
1846
|
+
if (!b.terms.length)
|
|
1847
|
+
return linAdd({ terms: [], c: 0 }, a, b.c);
|
|
1848
|
+
return null;
|
|
1782
1849
|
}
|
|
1783
|
-
return null;
|
|
1850
|
+
return still(ref) ? { terms: [{ ref, k: 1 }], c: 0 } : null;
|
|
1784
1851
|
};
|
|
1785
|
-
|
|
1786
|
-
const direct = valueOf(quantity);
|
|
1787
|
-
if (direct !== null)
|
|
1788
|
-
return { terms: [], c: direct };
|
|
1789
|
-
const writer = writerOf(m, quantity);
|
|
1790
|
-
if (writer?.op === 'mul@1' && writer.args.length === 2) {
|
|
1791
|
-
const v = valueOf(writer.args[0]);
|
|
1792
|
-
if (v !== null)
|
|
1793
|
-
return { terms: [{ ref: writer.args[1], k: v }], c: 0 };
|
|
1794
|
-
}
|
|
1795
|
-
return null;
|
|
1852
|
+
return read(motion.args[3]);
|
|
1796
1853
|
}
|
|
1797
1854
|
/** Where a part's centre is on one axis, as a sum, following whatever it is fastened to. */
|
|
1798
1855
|
function centreLin(m, asset, id, axis, bound) {
|
|
@@ -1888,7 +1945,7 @@ function magnitudeOf(m, lin) {
|
|
|
1888
1945
|
* ball is the pivot plus and minus its radius on each axis. Read by the proposal; the release gate still checks
|
|
1889
1946
|
* the parts against it.
|
|
1890
1947
|
*/
|
|
1891
|
-
function reachOf(m, asset, id, freezeless = true) {
|
|
1948
|
+
function reachOf(m, asset, id, ends, freezeless = true) {
|
|
1892
1949
|
const chain = [];
|
|
1893
1950
|
for (let part = id; part; part = parentOf(m, part))
|
|
1894
1951
|
chain.push(part);
|
|
@@ -1935,32 +1992,39 @@ function reachOf(m, asset, id, freezeless = true) {
|
|
|
1935
1992
|
}
|
|
1936
1993
|
}
|
|
1937
1994
|
}
|
|
1938
|
-
|
|
1995
|
+
/*
|
|
1996
|
+
The pivot: where the topmost turn is fastened, and everything above it. Above it nothing turns, but a slide may
|
|
1997
|
+
carry it -- the telescopic conveyor's nose turns at the end of its third stage -- so the pivot is read at each
|
|
1998
|
+
end of the controls, a ball at each: a slide is a straight line, so the balls at its two ends bound it all the
|
|
1999
|
+
way (it had been refused, and the nose left out of the room).
|
|
2000
|
+
*/
|
|
1939
2001
|
const pivotPart = chain[top];
|
|
1940
|
-
const
|
|
1941
|
-
|
|
1942
|
-
const
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
at = linAdd(at,
|
|
2002
|
+
const parent = parentOf(m, pivotPart);
|
|
2003
|
+
if (parent) {
|
|
2004
|
+
const pose = nodeById(m, `${parent}.pose`);
|
|
2005
|
+
if (!pose)
|
|
2006
|
+
return `${parent} has no pose this command can read`;
|
|
2007
|
+
for (const ref of pose.args.slice(3, 6))
|
|
2008
|
+
if (angleOf(m, asset, ref) !== 0)
|
|
2009
|
+
return `${parent} is turned, so where ${pivotPart} turns is not a point this command can add up`;
|
|
2010
|
+
}
|
|
2011
|
+
const seat = nodeById(m, `${pivotPart}.seat.rigid`);
|
|
2012
|
+
const centres = [];
|
|
2013
|
+
for (const end of ends) {
|
|
2014
|
+
const centre = {};
|
|
2015
|
+
for (const axis of AXES) {
|
|
2016
|
+
let at = seat ? linOf(m, seat.args[AXES.indexOf(axis)]) : { terms: [], c: 0 };
|
|
2017
|
+
if (parent) {
|
|
2018
|
+
const above = centreLin(m, asset, parent, axis, end);
|
|
2019
|
+
if (typeof above === 'string')
|
|
2020
|
+
return above;
|
|
2021
|
+
at = linAdd(at, above);
|
|
2022
|
+
}
|
|
2023
|
+
centre[axis] = at;
|
|
1960
2024
|
}
|
|
1961
|
-
centre
|
|
2025
|
+
centres.push(centre);
|
|
1962
2026
|
}
|
|
1963
|
-
return {
|
|
2027
|
+
return { centres, radius };
|
|
1964
2028
|
}
|
|
1965
2029
|
/** A sum written as graph nodes: each term scaled, then added up, then the constant. */
|
|
1966
2030
|
function emitLin(m, name, l, hint) {
|
|
@@ -2009,16 +2073,18 @@ function occupancyLins(asset, over) {
|
|
|
2009
2073
|
return false;
|
|
2010
2074
|
})();
|
|
2011
2075
|
if (turns) {
|
|
2012
|
-
const reach = reachOf(m, asset, place.id);
|
|
2076
|
+
const reach = reachOf(m, asset, place.id, over === 'rest' ? ['start'] : ['min', 'max']);
|
|
2013
2077
|
if (typeof reach === 'string') {
|
|
2014
2078
|
skipped.push({ part: place.id, reason: reach });
|
|
2015
2079
|
continue;
|
|
2016
2080
|
}
|
|
2017
2081
|
parts.push(place.id);
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2082
|
+
for (const at of reach.centres) {
|
|
2083
|
+
const centre = Object.fromEntries(AXES.map(a => [a, linNorm(at[a])]));
|
|
2084
|
+
const key = JSON.stringify(centre);
|
|
2085
|
+
const ball = balls.get(key);
|
|
2086
|
+
balls.set(key, { centre, radius: ball ? linAtLeast(ball.radius, reach.radius) : linNorm(reach.radius) });
|
|
2087
|
+
}
|
|
2022
2088
|
continue;
|
|
2023
2089
|
}
|
|
2024
2090
|
/*
|
|
@@ -2105,7 +2171,7 @@ function declareOccupancy(asset, a) {
|
|
|
2105
2171
|
const args = [];
|
|
2106
2172
|
const layout = AXES.flatMap(axis => [low[axis], high[axis]]).map(side => side
|
|
2107
2173
|
.map((l) => {
|
|
2108
|
-
const n =
|
|
2174
|
+
const n = linThroughSums(m, l);
|
|
2109
2175
|
args.push(constantOf(m, 'mm', round6(n.c), 'd'));
|
|
2110
2176
|
for (const t of n.terms)
|
|
2111
2177
|
args.push(t.ref, constantOf(m, 'ratio', t.k, 'k'));
|
|
@@ -2430,6 +2496,89 @@ function scaleUniformly(asset) {
|
|
|
2430
2496
|
asset.sizing = 'uniform';
|
|
2431
2497
|
return asset;
|
|
2432
2498
|
}
|
|
2499
|
+
/** Reads the asset; changes nothing. Refused for a figure that does not grow by one ratio. */
|
|
2500
|
+
export function proposeV3Proportion(asset) {
|
|
2501
|
+
return proportionPlan(asset);
|
|
2502
|
+
}
|
|
2503
|
+
function proportionPlan(asset) {
|
|
2504
|
+
const m = asset.document.model;
|
|
2505
|
+
if (asset.sizing !== 'uniform')
|
|
2506
|
+
fail('SIZING_UNDECLARED', 'sizing', 'the figure does not grow by one ratio; declare that first (scale-uniformly), then every length can follow it');
|
|
2507
|
+
const values = compileV3Graph(m).evaluate({ ...asset.designInputs, ...asset.stateDefaults }).values;
|
|
2508
|
+
const sizeNow = Object.fromEntries(AXES.map(axis => [axis, values[uniformSizeOf(m, axis, 'sizing')]]));
|
|
2509
|
+
const plan = { dimensions: [], lengths: [], skipped: [] };
|
|
2510
|
+
/* To nine places: the ratio's own mean is kept to six, and its noise is not the author's (0.1, not 0.0999999999787). */
|
|
2511
|
+
const share = (value, axis) => Math.round((value / sizeNow[axis]) * 1e9) / 1e9;
|
|
2512
|
+
const describe = (ref) => {
|
|
2513
|
+
const w = writerOf(m, ref);
|
|
2514
|
+
return String(w?.args?.[0] ?? ref).replace(/\.value$/, '');
|
|
2515
|
+
};
|
|
2516
|
+
const parts = m.nodes.filter((n) => n.op === 'place@1' || (n.op === 'member@1' && nodeById(m, `${n.id}.repeat`))).map((n) => n.id);
|
|
2517
|
+
for (const part of parts) {
|
|
2518
|
+
const shape = writerOf(m, nodeById(m, part).args[0]);
|
|
2519
|
+
const measures = shape?.op === 'box-shape@1' || shape?.op === 'rounded-box@1' ? 3 : shape?.op === 'cylinder-shape@1' ? 2 : 0;
|
|
2520
|
+
if (!measures) {
|
|
2521
|
+
plan.skipped.push({ what: part, reason: `a ${String(shape?.op ?? 'shape').replace(/-shape@1$|@1$/, '')}'s measures are not linked by this command` });
|
|
2522
|
+
continue;
|
|
2523
|
+
}
|
|
2524
|
+
for (let i = 0; i < measures; i++) {
|
|
2525
|
+
const axis = AXES[i];
|
|
2526
|
+
const from = dimensionSource(m, part, axis) ?? shape.args[i];
|
|
2527
|
+
if (!ownInput(m, part, from)) {
|
|
2528
|
+
plan.skipped.push({ what: `${part}.${axis}`, reason: `follows ${describe(from)}` });
|
|
2529
|
+
continue;
|
|
2530
|
+
}
|
|
2531
|
+
plan.dimensions.push({ part, axis, times: share(values[from], axis) });
|
|
2532
|
+
}
|
|
2533
|
+
}
|
|
2534
|
+
for (const j of (asset.joints ?? [])) {
|
|
2535
|
+
const faceAxis = V3_FACES[j.body1.face];
|
|
2536
|
+
const gap = j.origin?.gap;
|
|
2537
|
+
if (typeof gap === 'number' && gap !== 0)
|
|
2538
|
+
plan.lengths.push({ joint: j.id, at: 'gap', axis: faceAxis, times: share(gap, faceAxis) });
|
|
2539
|
+
else if (gap && typeof gap === 'object')
|
|
2540
|
+
plan.skipped.push({ what: `${j.id}.gap`, reason: 'follows a length already' });
|
|
2541
|
+
for (const [axis, how] of Object.entries(j.origin?.align ?? {})) {
|
|
2542
|
+
if (!how || typeof how !== 'object')
|
|
2543
|
+
continue;
|
|
2544
|
+
if (typeof how.mm === 'number') {
|
|
2545
|
+
if (how.mm !== 0)
|
|
2546
|
+
plan.lengths.push({ joint: j.id, at: axis, axis, times: share(how.mm, axis) });
|
|
2547
|
+
}
|
|
2548
|
+
else
|
|
2549
|
+
plan.skipped.push({ what: `${j.id}.${axis}`, reason: 'follows a length already' });
|
|
2550
|
+
}
|
|
2551
|
+
if (j.repeat && j.repeat.count === undefined) {
|
|
2552
|
+
const axis = j.repeat.axis.toLowerCase();
|
|
2553
|
+
if (typeof j.repeat.pitch === 'number')
|
|
2554
|
+
plan.lengths.push({ joint: j.id, at: 'pitch', axis, times: share(j.repeat.pitch, axis) });
|
|
2555
|
+
else
|
|
2556
|
+
plan.skipped.push({ what: `${j.id}.pitch`, reason: 'follows a length already' });
|
|
2557
|
+
}
|
|
2558
|
+
if (j.type === 'prismatic' && !j.travel && !j.mimic)
|
|
2559
|
+
plan.skipped.push({ what: `${j.id}.motion`, reason: 'a slide in millimetres; make its travel follow the size where the motion is changed' });
|
|
2560
|
+
if (j.type === 'prismatic' && j.mimic?.offset)
|
|
2561
|
+
plan.skipped.push({ what: `${j.id}.offset`, reason: 'a follower\'s offset in millimetres' });
|
|
2562
|
+
}
|
|
2563
|
+
return plan;
|
|
2564
|
+
}
|
|
2565
|
+
function followSizeInProportion(asset) {
|
|
2566
|
+
const plan = proportionPlan(asset);
|
|
2567
|
+
for (const d of plan.dimensions)
|
|
2568
|
+
linkDimension(asset, { kind: 'link-dimension', part: d.part, axis: d.axis, source: { of: 'instance', axis: d.axis }, times: d.times });
|
|
2569
|
+
const follows = (axis, times) => ({ from: { of: 'instance', axis }, times });
|
|
2570
|
+
for (const l of plan.lengths) {
|
|
2571
|
+
const j = asset.joints.find(o => o.id === l.joint);
|
|
2572
|
+
if (l.at === 'gap')
|
|
2573
|
+
j.origin = { ...j.origin, gap: follows(l.axis, l.times) };
|
|
2574
|
+
else if (l.at === 'pitch')
|
|
2575
|
+
j.repeat = { ...j.repeat, pitch: follows(l.axis, l.times) };
|
|
2576
|
+
else
|
|
2577
|
+
j.origin = { ...j.origin, align: { ...j.origin.align, [l.at]: { mm: follows(l.axis, l.times) } } };
|
|
2578
|
+
}
|
|
2579
|
+
// The joints' nodes are made again from these records after the command, as after every command.
|
|
2580
|
+
return asset;
|
|
2581
|
+
}
|
|
2433
2582
|
function scalePosition(asset, a) {
|
|
2434
2583
|
const m = asset.document.model;
|
|
2435
2584
|
const path = `${a.part}.${a.axis}`;
|