@hatiolab/figure-model 0.10.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/CHANGELOG.md +41 -5
  2. package/dist/asset-types.d.ts +19 -0
  3. package/dist/asset-types.d.ts.map +1 -1
  4. package/dist/asset-types.js +2 -0
  5. package/dist/asset-types.js.map +1 -1
  6. package/dist/asset.d.ts.map +1 -1
  7. package/dist/asset.js +5 -3
  8. package/dist/asset.js.map +1 -1
  9. package/dist/authoring-actions.js +8 -0
  10. package/dist/authoring-actions.js.map +1 -1
  11. package/dist/authoring-fastening.d.ts +16 -2
  12. package/dist/authoring-fastening.d.ts.map +1 -1
  13. package/dist/authoring-fastening.js +106 -47
  14. package/dist/authoring-fastening.js.map +1 -1
  15. package/dist/authoring-placement.d.ts.map +1 -1
  16. package/dist/authoring-placement.js +116 -22
  17. package/dist/authoring-placement.js.map +1 -1
  18. package/dist/authoring-proportion.d.ts.map +1 -1
  19. package/dist/authoring-proportion.js +25 -8
  20. package/dist/authoring-proportion.js.map +1 -1
  21. package/dist/authoring-types.d.ts +62 -34
  22. package/dist/authoring-types.d.ts.map +1 -1
  23. package/dist/authoring-types.js +8 -8
  24. package/dist/authoring-types.js.map +1 -1
  25. package/dist/clip-keeping.d.ts.map +1 -1
  26. package/dist/clip-keeping.js +7 -5
  27. package/dist/clip-keeping.js.map +1 -1
  28. package/dist/contract.d.ts +11 -1
  29. package/dist/contract.d.ts.map +1 -1
  30. package/dist/contract.js.map +1 -1
  31. package/dist/data-interface.d.ts +1 -1
  32. package/dist/data-interface.d.ts.map +1 -1
  33. package/dist/data-interface.js +43 -5
  34. package/dist/data-interface.js.map +1 -1
  35. package/dist/editor-workspace.js +1 -1
  36. package/dist/editor-workspace.js.map +1 -1
  37. package/dist/examples.js +6 -6
  38. package/dist/examples.js.map +1 -1
  39. package/dist/fasten-place.d.ts +18 -0
  40. package/dist/fasten-place.d.ts.map +1 -1
  41. package/dist/fasten-place.js +36 -0
  42. package/dist/fasten-place.js.map +1 -1
  43. package/dist/index.d.ts +6 -4
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +5 -3
  46. package/dist/index.js.map +1 -1
  47. package/dist/item-notes.d.ts +17 -0
  48. package/dist/item-notes.d.ts.map +1 -0
  49. package/dist/item-notes.js +28 -0
  50. package/dist/item-notes.js.map +1 -0
  51. package/dist/joint-fields.d.ts +6 -8
  52. package/dist/joint-fields.d.ts.map +1 -1
  53. package/dist/joint-fields.js +6 -6
  54. package/dist/joint-fields.js.map +1 -1
  55. package/dist/joint-list.d.ts +11 -9
  56. package/dist/joint-list.d.ts.map +1 -1
  57. package/dist/joint-list.js +75 -53
  58. package/dist/joint-list.js.map +1 -1
  59. package/dist/joint-motions.d.ts +30 -0
  60. package/dist/joint-motions.d.ts.map +1 -0
  61. package/dist/joint-motions.js +28 -0
  62. package/dist/joint-motions.js.map +1 -0
  63. package/dist/joint-part-edits.d.ts.map +1 -1
  64. package/dist/joint-part-edits.js +95 -34
  65. package/dist/joint-part-edits.js.map +1 -1
  66. package/dist/joint-writing.d.ts +3 -4
  67. package/dist/joint-writing.d.ts.map +1 -1
  68. package/dist/joint-writing.js +229 -170
  69. package/dist/joint-writing.js.map +1 -1
  70. package/dist/kernel-version.d.ts +1 -1
  71. package/dist/kernel-version.js +1 -1
  72. package/dist/part-edit.d.ts.map +1 -1
  73. package/dist/part-edit.js +4 -2
  74. package/dist/part-edit.js.map +1 -1
  75. package/dist/proposal.d.ts +1 -1
  76. package/dist/proposal.d.ts.map +1 -1
  77. package/dist/proposal.js +5 -3
  78. package/dist/proposal.js.map +1 -1
  79. package/dist/recipe-from-parts.d.ts.map +1 -1
  80. package/dist/recipe-from-parts.js +12 -4
  81. package/dist/recipe-from-parts.js.map +1 -1
  82. package/dist/recipe.d.ts.map +1 -1
  83. package/dist/recipe.js +10 -8
  84. package/dist/recipe.js.map +1 -1
  85. package/dist/release-contract.d.ts +1 -1
  86. package/dist/release-contract.d.ts.map +1 -1
  87. package/dist/release-contract.js +56 -4
  88. package/dist/release-contract.js.map +1 -1
  89. package/dist/release-metrics.d.ts +8 -0
  90. package/dist/release-metrics.d.ts.map +1 -1
  91. package/dist/release-metrics.js +7 -2
  92. package/dist/release-metrics.js.map +1 -1
  93. package/dist/robots.d.ts.map +1 -1
  94. package/dist/robots.js +43 -46
  95. package/dist/robots.js.map +1 -1
  96. package/docs/attachment-response-spec-review-2026-10-24.md +56 -0
  97. package/docs/editor-integration.md +2 -0
  98. package/docs/modeller-interaction-performance-2026-10-07.md +1 -1
  99. package/docs/performance-followup-2026-10-05.md +1 -1
  100. package/docs/review-2026-09-22.md +2 -2
  101. package/docs/status.md +12 -2
  102. package/package.json +1 -1
@@ -1,24 +1,25 @@
1
1
  import { compileFigureAsset } from "./asset.js";
2
2
  import { figureMimicLeadersOf } from "./authoring-types.js";
3
+ import { figureAxisById, figureAxesOf, figureMotionsOf, motionNodeIdOf, motionStateIdOf } from "./joint-motions.js";
3
4
  import { FigureContractError } from "./contract.js";
4
5
  import { compileFigureGraph } from "./graph.js";
5
- /** The record's shape: 2, the control's two units and `unlisted`. */
6
- export const FIGURE_JOINT_LIST_SCHEMA = 2;
7
- /** How the values are measured: 1, the rest-pose axis read from two evaluations of the compiled graph. */
8
- export const FIGURE_JOINT_LIST_DERIVATION = 1;
6
+ /** The record's shape: 3, a joint per axis (ADR-0159); 2 had the control's two units and `unlisted`. */
7
+ export const FIGURE_JOINT_LIST_SCHEMA = 3;
8
+ /** How the values are measured: 2, each axis's own stage read from two evaluations of the compiled graph (1 read the child). */
9
+ export const FIGURE_JOINT_LIST_DERIVATION = 2;
9
10
  /**
10
- * A mimic in either form the record takes: one leader (`{ joint, multiplier, offset? }`), or a sum
11
- * (`{ sum: [{ joint, multiplier }], offset? }`, ADR-0107 decision 2). Both read as a sum.
11
+ * A mimic in either form the record takes: one leader (`{ motion, multiplier, offset? }`), or a sum
12
+ * (`{ sum: [{ motion, multiplier }], offset? }`, ADR-0107 decision 2). Both read as a sum, each leader named as the list
13
+ * names it: by its axis's id.
12
14
  */
13
15
  export function figureMimicTermsOf(mimic) {
14
16
  if (!mimic || typeof mimic !== 'object')
15
17
  return undefined;
16
- return { sum: figureMimicLeadersOf({ mimic }).map(t => ({ joint: t.joint, multiplier: t.multiplier })), offset: mimic.offset ?? 0 };
18
+ return { sum: figureMimicLeadersOf({ mimic }).map(t => ({ joint: t.motion, multiplier: t.multiplier })), offset: mimic.offset ?? 0 };
17
19
  }
18
20
  const refuse = (joint, detail) => {
19
21
  throw new FigureContractError('JOINT_AXIS_UNREAD', `joints.${joint}`, detail);
20
22
  };
21
- const stateIdOf = (j) => j.state?.id ?? j.id;
22
23
  /** Parents first, then record order. The records make a tree (validated), so this ends. */
23
24
  function treeOrder(joints) {
24
25
  const byChild = new Map(joints.map(j => [j.body1.part, j]));
@@ -92,24 +93,42 @@ const round = (v) => {
92
93
  const r = Math.round(v * 1e9) / 1e9;
93
94
  return r === 0 ? 0 : r;
94
95
  };
95
- /** The ref a joint's motion moves by: its control, or the node that makes its distance or angle. */
96
- const quantityRefOf = (asset, child) => asset.document.model.nodes.find(n => n.id === `${child}.motion`)?.args[3];
96
+ /** The ref an axis moves by: its control, or the node that makes its distance or angle. */
97
+ const quantityRefOf = (asset, child, k) => asset.document.model.nodes.find(n => n.id === motionNodeIdOf(child, k))?.args[3];
98
+ /** A stage of a part's motion as one evaluation drew it: the axis's own motion, about its frame's origin. */
99
+ const stageOf = (values, child, k) => values[`${motionNodeIdOf(child, k)}.value`];
100
+ /**
101
+ * The frame an axis moves in, turned as one evaluation drew it, in its parent part's frame: the joint frame (the seat)
102
+ * and every axis before it in its joint, through the point each passes.
103
+ */
104
+ function frameBefore(values, child, k) {
105
+ let r = values[`${child}.seat.value`]?.r;
106
+ for (let i = 0; r && i < k; i++) {
107
+ const stage = (values[`${motionNodeIdOf(child, i)}.about.value`] ?? values[`${motionNodeIdOf(child, i)}.value`]);
108
+ r = stage && mm(r, stage.r);
109
+ }
110
+ return r;
111
+ }
97
112
  /** How far a joint's own value went in one evaluation: its motion's quantity, in base units, as the graph computed it. */
98
113
  function quantityOf(ref, values) {
99
114
  const v = values[ref];
100
115
  return typeof v === 'number' && Number.isFinite(v) ? v : undefined;
101
116
  }
102
117
  /**
103
- * A moving joint's axis at rest, measured. `drivers` are the state inputs that can move it: its own control, or its
104
- * leaders' controls. Each is tried, a step of at most 45 (degrees, millimetres or a share) into its range, smaller
105
- * until a turn stays under a quarter: what a turn of 180° and more says about its axis is ambiguous.
118
+ * A moving axis at rest, measured (derivation 2). `drivers` are the state inputs that can move it: its own control, or
119
+ * its leaders' controls. Each is tried, a step of at most 45 (degrees, millimetres or a share) into its range, smaller
120
+ * until a turn stays under a quarter: what a turn of 180° and more says about its axis is ambiguous. What is read is
121
+ * the axis's own stage, in the frame the axes before it leave it at rest -- the child's whole motion is every axis
122
+ * its drivers move, and a leader moving an axis of its own joint with it read as the two turned together (review
123
+ * 2026-10-24, F2).
106
124
  */
107
- function axisOf(reader, asset, j, drivers) {
108
- const parent = 'part' in j.body0 ? j.body0.part : null;
109
- const child = j.body1.part;
110
- const ref = quantityRefOf(asset, child);
111
- const q0 = ref === undefined ? undefined : quantityOf(ref, reader.atRest.values);
112
- if (q0 === undefined)
125
+ function axisOf(reader, j, drivers) {
126
+ const { parent, child, ref, k } = j;
127
+ const rest = reader.atRest.values;
128
+ const q0 = ref === undefined ? undefined : quantityOf(ref, rest);
129
+ const s0 = stageOf(rest, child, k);
130
+ const frame = frameBefore(rest, child, k);
131
+ if (q0 === undefined || !s0 || !frame)
113
132
  return refuse(j.id, `${child} has no motion in the graph for ${j.type} joint ${j.id}`);
114
133
  const at0 = relativeOf(reader.atRest.geometry, parent, child, j.id);
115
134
  for (const input of drivers) {
@@ -119,9 +138,9 @@ function axisOf(reader, asset, j, drivers) {
119
138
  const dq = quantityOf(ref, after.values) - q0;
120
139
  if (!(Math.abs(dq) > 1e-9))
121
140
  break;
122
- const at1 = relativeOf(after.geometry, parent, child, j.id);
123
- /* The child's motion in its parent's frame: at1 = D · at0, D a turn about the joint's axis or a slide along it. */
124
- const d = compose(at1.rel, inverse(at0.rel));
141
+ const s1 = stageOf(after.values, child, k);
142
+ /* The axis's own motion in its frame: s1 = D · s0, D a turn about the axis or a slide along it. */
143
+ const d = compose(s1, inverse(s0));
125
144
  let local;
126
145
  if (j.type === 'revolute') {
127
146
  const r = d.r;
@@ -142,7 +161,7 @@ function axisOf(reader, asset, j, drivers) {
142
161
  if (Math.abs(Math.hypot(...local) - 1) > 1e-6)
143
162
  return refuse(j.id, `${child} moved ${Math.hypot(...d.t)} mm as ${j.id}'s value went ${Math.abs(dq)}; the slide is not along a unit axis`);
144
163
  }
145
- const axis = mv(at0.parentR, local);
164
+ const axis = mv(at0.parentR, mv(frame, local));
146
165
  const n2 = Math.hypot(...axis);
147
166
  return axis.map(x => round(x / n2));
148
167
  }
@@ -177,9 +196,9 @@ export function jointListOf(asset, evaluation) {
177
196
  const inputs = new Map(asset.document.model.inputs.filter(i => i.role === 'state').map(i => [i.id, i]));
178
197
  /* The rest pose: every independent joint at 0 (ADR-0093); any other state input at its default. */
179
198
  const rest = {};
180
- for (const j of records)
181
- if (j.type !== 'fixed' && !j.mimic && inputs.has(stateIdOf(j)))
182
- rest[stateIdOf(j)] = 0;
199
+ for (const { motion } of figureAxesOf(records))
200
+ if (!motion.mimic && inputs.has(motionStateIdOf(motion)))
201
+ rest[motionStateIdOf(motion)] = 0;
183
202
  /*
184
203
  0 is evaluated as is, also where a joint's limits do not hold it (10..80): the graph is compiled for this reading
185
204
  with those controls' ranges widened to 0. Only here -- a board's evaluation, the state defaults and every command
@@ -195,67 +214,70 @@ export function jointListOf(asset, evaluation) {
195
214
  const list = { schema: FIGURE_JOINT_LIST_SCHEMA, derivation: FIGURE_JOINT_LIST_DERIVATION, joints: [], unlisted: [] };
196
215
  const covered = new Set();
197
216
  if (records.length) {
198
- const byId = new Map(records.map(j => [j.id, j]));
199
217
  const byChild = new Map(records.map(j => [j.body1.part, j]));
218
+ /* The joint a part hangs in the list by: its record's last axis, or the record itself when it is fastened still. */
219
+ const lastOf = (j) => figureMotionsOf(j).at(-1)?.id ?? j.id;
200
220
  const instance = evaluation === 'incremental' ? plan.evaluator() : plan;
201
221
  const evaluate = (state) => instance.evaluate({ ...asset.designInputs, ...asset.stateDefaults, ...state });
202
222
  const reader = { rest, atRest: evaluate(rest), evaluate };
203
223
  for (const j of treeOrder(records)) {
204
224
  const parentPart = 'part' in j.body0 ? j.body0.part : null;
205
- const entry = {
206
- id: j.id,
207
- type: j.type,
208
- parent: parentPart ? (byChild.get(parentPart)?.id ?? null) : null,
209
- parentPart,
210
- child: j.body1.part
211
- };
212
- if (j.type !== 'fixed') {
213
- const follows = figureMimicTermsOf(j.mimic);
225
+ const above = parentPart ? byChild.get(parentPart) : undefined;
226
+ const parent = above ? lastOf(above) : null;
227
+ const motions = figureMotionsOf(j);
228
+ if (!motions.length)
229
+ list.joints.push({ id: j.id, type: 'fixed', parent, parentPart, child: j.body1.part });
230
+ for (const [k, a] of motions.entries()) {
231
+ const entry = { id: a.id, type: a.type, parent: k ? motions[k - 1].id : parent, parentPart, child: j.body1.part };
232
+ const read = { id: a.id, type: a.type, parent: parentPart, child: j.body1.part, k, ref: quantityRefOf(asset, j.body1.part, k) };
233
+ const follows = figureMimicTermsOf(a.mimic);
214
234
  if (follows) {
215
235
  const drivers = follows.sum.flatMap(t => {
216
- const leader = byId.get(t.joint);
217
- const input = leader && inputs.get(stateIdOf(leader));
236
+ const leader = figureAxisById(records, t.joint);
237
+ const input = leader && inputs.get(motionStateIdOf(leader.motion));
218
238
  return input ? [input] : [];
219
239
  });
220
- entry.axis = axisOf(reader, asset, j, drivers);
240
+ entry.axis = axisOf(reader, read, drivers);
221
241
  entry.follows = follows;
222
242
  }
223
243
  else {
224
- const input = inputs.get(stateIdOf(j));
244
+ const input = inputs.get(motionStateIdOf(a));
225
245
  if (!input)
226
- return refuse(j.id, `${stateIdOf(j)}, the state input of ${j.id}, is not in the model`);
227
- /* A revolute joint without limits turns without end: its input's -180..180 is a phase, not a limit. */
228
- const limited = j.lowerLimit !== undefined || j.upperLimit !== undefined || j.type === 'prismatic';
229
- entry.axis = axisOf(reader, asset, j, [input]);
246
+ return refuse(a.id, `${motionStateIdOf(a)}, the state input of ${a.id}, is not in the model`);
247
+ /* A revolute axis without limits turns without end: its input's -180..180 is a phase, not a limit. */
248
+ const limited = a.lowerLimit !== undefined || a.upperLimit !== undefined || a.type === 'prismatic';
249
+ entry.axis = axisOf(reader, read, [input]);
230
250
  entry.control = {
231
251
  input: input.id,
232
252
  inputUnit: input.unit,
233
- motionUnit: j.type === 'revolute' ? 'deg' : 'mm',
253
+ motionUnit: a.type === 'revolute' ? 'deg' : 'mm',
234
254
  ...(limited ? { min: input.min, max: input.max } : {})
235
255
  };
236
256
  covered.add(input.id);
237
257
  }
258
+ list.joints.push(entry);
238
259
  }
239
- list.joints.push(entry);
240
260
  }
241
261
  }
242
262
  list.unlisted = movingInputsOf(asset, plan.dependence).filter(i => !covered.has(i.id)).map(i => ({ input: i.id, unit: i.unit }));
243
263
  return list;
244
264
  }
245
265
  /**
246
- * How far a moving joint has gone -- degrees for a turn, millimetres for a slide -- as the kernel evaluates the figure
247
- * at `inputs` (design inputs, instance size and state; the stored values for the rest). A slide whose control is a
248
- * share reads its distance here: a consumer never works it out from the length its stroke follows.
266
+ * How far a moving joint of the list has gone -- one axis, by its id (ADR-0159): degrees for a turn, millimetres for a
267
+ * slide -- as the kernel evaluates the figure at `inputs` (design inputs, instance size and state; the stored values for
268
+ * the rest). A slide whose control is a share reads its distance here: a consumer never works it out from the length
269
+ * its stroke follows.
249
270
  */
250
271
  export function figureJointMotionOf(asset, jointId, inputs = {}) {
251
- const j = (asset.joints ?? []).find(o => o.id === jointId);
252
- if (!j)
272
+ const records = (asset.joints ?? []);
273
+ const axis = figureAxisById(records, jointId);
274
+ if (!axis && !records.some(o => o.id === jointId))
253
275
  throw new FigureContractError('TARGET_ABSENT', `joints.${jointId}`, `${jointId} is not a joint of this figure`);
254
- const ref = j.type === 'fixed' ? undefined : quantityRefOf(asset, j.body1.part);
276
+ const ref = axis ? quantityRefOf(asset, axis.joint.body1.part, axis.k) : undefined;
255
277
  if (ref === undefined)
256
278
  throw new FigureContractError('JOINT_SCHEMA', `joints.${jointId}`, `${jointId} does not move; it has no value to give`);
257
279
  const values = compileFigureGraph(asset.document.model).evaluate({ ...asset.designInputs, ...asset.stateDefaults, ...inputs }).values;
258
280
  const value = quantityOf(ref, values);
259
- return j.type === 'revolute' ? (value * 180) / Math.PI : value;
281
+ return axis.motion.type === 'revolute' ? (value * 180) / Math.PI : value;
260
282
  }
261
283
  //# sourceMappingURL=joint-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"joint-list.js","sourceRoot":"","sources":["../src/joint-list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"joint-list.js","sourceRoot":"","sources":["../src/joint-list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { FigureJoint, FigureJointMotion } from './authoring-types.ts';
2
+ /** An axis with the id it goes by. */
3
+ export type FigureNamedMotion = FigureJointMotion & {
4
+ id: string;
5
+ };
6
+ /** The id an axis goes by: its own, or the joint's for the first axis and `<joint>.<k>` for the k-th. */
7
+ export declare const motionIdOf: (j: FigureJoint, k: number) => string;
8
+ /** A joint's axes in order, each with its id: none for a fastening. */
9
+ export declare function figureMotionsOf(j: FigureJoint): FigureNamedMotion[];
10
+ /** Whether a joint moves at all. */
11
+ export declare const isMovingJoint: (j: FigureJoint) => boolean;
12
+ /** The control an axis's value is: its state's id, or the axis's own. */
13
+ export declare const motionStateIdOf: (m: FigureNamedMotion) => string;
14
+ /** The node an axis's motion is written to: `<part>.motion` for the first, `<part>.motion.<k>` for the k-th. */
15
+ export declare const motionNodeIdOf: (part: string, k: number) => string;
16
+ /** Every axis of every joint, with the joint it is on and its place in it. */
17
+ export declare function figureAxesOf(joints: FigureJoint[] | undefined): Array<{
18
+ joint: FigureJoint;
19
+ motion: FigureNamedMotion;
20
+ k: number;
21
+ }>;
22
+ /** The axis that goes by this id, with its joint and its place in it. */
23
+ export declare function figureAxisById(joints: FigureJoint[] | undefined, id: string): {
24
+ joint: FigureJoint;
25
+ motion: FigureNamedMotion;
26
+ k: number;
27
+ } | undefined;
28
+ /** The controls a person moves to pose a figure: every axis that leads itself, by its state's id. */
29
+ export declare const figureOwnControlsOf: (joints: FigureJoint[] | undefined) => string[];
30
+ //# sourceMappingURL=joint-motions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joint-motions.d.ts","sourceRoot":"","sources":["../src/joint-motions.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE1E,sCAAsC;AACtC,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAElE,yGAAyG;AACzG,eAAO,MAAM,UAAU,GAAI,GAAG,WAAW,EAAE,GAAG,MAAM,KAAG,MAAoE,CAAA;AAE3H,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,CAAC,EAAE,WAAW,GAAG,iBAAiB,EAAE,CAEnE;AAED,oCAAoC;AACpC,eAAO,MAAM,aAAa,GAAI,GAAG,WAAW,KAAG,OAAyD,CAAA;AAExG,yEAAyE;AACzE,eAAO,MAAM,eAAe,GAAI,GAAG,iBAAiB,KAAG,MAA6B,CAAA;AAEpF,gHAAgH;AAChH,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,GAAG,MAAM,KAAG,MAAkE,CAAA;AAE3H,8EAA8E;AAC9E,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,GAChC,KAAK,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAErE;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,EACjC,EAAE,EAAE,MAAM,GACT;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAE1E;AAED,qGAAqG;AACrG,eAAO,MAAM,mBAAmB,GAAI,QAAQ,WAAW,EAAE,GAAG,SAAS,KAAG,MAAM,EAGtC,CAAA"}
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ /** The id an axis goes by: its own, or the joint's for the first axis and `<joint>.<k>` for the k-th. */
5
+ export const motionIdOf = (j, k) => j.motion?.[k]?.id ?? (k === 0 ? j.id : `${j.id}.${k + 1}`);
6
+ /** A joint's axes in order, each with its id: none for a fastening. */
7
+ export function figureMotionsOf(j) {
8
+ return (Array.isArray(j.motion) ? j.motion : []).map((m, k) => ({ ...m, id: motionIdOf(j, k) }));
9
+ }
10
+ /** Whether a joint moves at all. */
11
+ export const isMovingJoint = (j) => Array.isArray(j.motion) && j.motion.length > 0;
12
+ /** The control an axis's value is: its state's id, or the axis's own. */
13
+ export const motionStateIdOf = (m) => m.state?.id ?? m.id;
14
+ /** The node an axis's motion is written to: `<part>.motion` for the first, `<part>.motion.<k>` for the k-th. */
15
+ export const motionNodeIdOf = (part, k) => (k === 0 ? `${part}.motion` : `${part}.motion.${k + 1}`);
16
+ /** Every axis of every joint, with the joint it is on and its place in it. */
17
+ export function figureAxesOf(joints) {
18
+ return (joints ?? []).flatMap(joint => figureMotionsOf(joint).map((motion, k) => ({ joint, motion, k })));
19
+ }
20
+ /** The axis that goes by this id, with its joint and its place in it. */
21
+ export function figureAxisById(joints, id) {
22
+ return figureAxesOf(joints).find(a => a.motion.id === id);
23
+ }
24
+ /** The controls a person moves to pose a figure: every axis that leads itself, by its state's id. */
25
+ export const figureOwnControlsOf = (joints) => figureAxesOf(joints)
26
+ .filter(a => !a.motion.mimic)
27
+ .map(a => motionStateIdOf(a.motion));
28
+ //# sourceMappingURL=joint-motions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joint-motions.js","sourceRoot":"","sources":["../src/joint-motions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,yGAAyG;AACzG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAc,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAE3H,uEAAuE;AACvE,MAAM,UAAU,eAAe,CAAC,CAAc;IAC5C,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAClG,CAAC;AAED,oCAAoC;AACpC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAc,EAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;AAExG,yEAAyE;AACzE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAoB,EAAU,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,CAAA;AAEpF,gHAAgH;AAChH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAE3H,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAC1B,MAAiC;IAEjC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC3G,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc,CAC5B,MAAiC,EACjC,EAAU;IAEV,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;AAC3D,CAAC;AAED,qGAAqG;AACrG,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAiC,EAAY,EAAE,CACjF,YAAY,CAAC,MAAM,CAAC;KACjB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"joint-part-edits.d.ts","sourceRoot":"","sources":["../src/joint-part-edits.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAA;AAyB7B;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CA+C3F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAkBtF;AAaD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,GACX,aAAa,CAqQf;AAGD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAwCzD;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAwB1D"}
1
+ {"version":3,"file":"joint-part-edits.d.ts","sourceRoot":"","sources":["../src/joint-part-edits.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAA;AA0B7B;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CA6D3F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CA+CtF;AAaD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,GACX,aAAa,CAgRf;AAGD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAwCzD;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAwB1D"}
@@ -9,7 +9,8 @@ import { AXES } from "./words.js";
9
9
  import { figureMimicLeadersOf, followedTermsOf } from "./authoring-types.js";
10
10
  import { fail, nodeById, writerOf, partOf, namer, constantOf, stableDimension, ownInput, dropIfUnused, round6, stringsIn } from "./authoring-nodes.js";
11
11
  import { eulerXYZ } from "./authoring-geometry.js";
12
- import { stateIdOf, stripJoint, jointMeasures, mapMeasureSources, rewriteJoints } from "./joint-writing.js";
12
+ import { stripJoint, jointMeasures, mapMeasureSources, rewriteJoints } from "./joint-writing.js";
13
+ import { figureAxesOf, figureMotionsOf, motionIdOf, motionNodeIdOf, motionStateIdOf } from "./joint-motions.js";
13
14
  /*
14
15
  * A part edit that renames or removes a part reads the joint records first: the records are the canon and the joint
15
16
  * nodes are made from them (ADR-0093). Renaming or deleting a part in the graph alone left records naming a part that
@@ -46,23 +47,37 @@ export function renameFigurePartInJoints(asset, from, to) {
46
47
  out.designInputs = Object.fromEntries(Object.entries(out.designInputs ?? {}).map(([k, v]) => [carried(k), v]));
47
48
  /* A length that follows the part's measure follows it under its new name, in each term of a sum too. */
48
49
  const source = (s) => s?.of === 'part' ? { ...s, part: name(s.part) } : s;
49
- asset.joints = joints.map(was => {
50
+ /* An axis named after its joint is named after the joint's new name; a follower follows it under that name. */
51
+ const renamed = joints.map(j => ({
52
+ ...j,
53
+ id: name(j.id),
54
+ ...(j.motion ? { motion: j.motion.map(a => (a.id !== undefined ? { ...a, id: name(a.id) } : a)) } : {})
55
+ }));
56
+ const axisNames = new Map(joints.flatMap((j, i) => figureMotionsOf(j).map((a, k) => [a.id, motionIdOf(renamed[i], k)])));
57
+ const axisName = (id) => axisNames.get(id) ?? id;
58
+ asset.joints = renamed.map(was => {
50
59
  const j = structuredClone(was);
51
60
  for (const { get, set } of jointMeasures(j))
52
61
  set(mapMeasureSources(get(), source));
53
62
  return {
54
63
  ...j,
55
- id: name(j.id),
56
64
  body0: 'part' in j.body0 ? { ...j.body0, part: name(j.body0.part) } : j.body0,
57
65
  body1: { ...j.body1, part: name(j.body1.part) },
58
- ...(j.mimic
66
+ ...(j.motion
59
67
  ? {
60
- mimic: Object.hasOwn(j.mimic, 'sum')
61
- ? { ...j.mimic, sum: figureMimicLeadersOf(j).map(t => ({ ...t, joint: name(t.joint) })) }
62
- : { ...j.mimic, joint: name(j.mimic.joint) }
68
+ motion: j.motion.map(a => ({
69
+ ...a,
70
+ ...(a.mimic
71
+ ? {
72
+ mimic: Object.hasOwn(a.mimic, 'sum')
73
+ ? { ...a.mimic, sum: figureMimicLeadersOf(a).map(t => ({ ...t, motion: axisName(t.motion) })) }
74
+ : { ...a.mimic, motion: axisName(a.mimic.motion) }
75
+ }
76
+ : {}),
77
+ ...(a.state?.id !== undefined ? { state: { ...a.state, id: name(a.state.id) } } : {})
78
+ }))
63
79
  }
64
- : {}),
65
- ...(j.state?.id !== undefined ? { state: { ...j.state, id: name(j.state.id) } } : {})
80
+ : {})
66
81
  };
67
82
  });
68
83
  rewriteJoints(asset);
@@ -77,18 +92,50 @@ export function copyFigurePartJoint(asset, from, to) {
77
92
  if (!j)
78
93
  return;
79
94
  const m = asset.document.model;
80
- const ids = new Set(joints.map(o => o.id));
95
+ /* Joints and axes are named in one space (ADR-0159): a copy's names are clear of both, a fastening's too (F4). */
96
+ const ids = new Set([...joints.map(o => o.id), ...figureAxesOf(joints).map(a => a.motion.id)]);
81
97
  const inputs = new Set(m.inputs.map((i) => i.id));
82
- const fresh = (base, taken) => {
98
+ const fresh = (base, taken, clear = () => true) => {
83
99
  let id = base;
84
- for (let n = 2; taken.has(id); n++)
100
+ for (let n = 2; taken.has(id) || !clear(id); n++)
85
101
  id = `${base}-${n}`;
86
102
  return id;
87
103
  };
88
- const id = fresh(j.id === from ? to : `${j.id}-copy`, ids);
104
+ /* The joint's own name, and the names its unnamed axes take after it, all free. */
105
+ const unnamed = (j.motion ?? []).map((a, k) => (a.id === undefined ? k : -1)).filter(k => k >= 0);
106
+ const id = fresh(j.id === from ? to : `${j.id}-copy`, ids, base => unnamed.every(k => !ids.has(k ? `${base}.${k + 1}` : base)));
89
107
  const copy = { ...structuredClone(j), id, body1: { ...j.body1, part: to } };
90
- if (j.type !== 'fixed' && !j.mimic)
91
- copy.state = { ...(j.state ?? {}), id: fresh(j.state?.id ? `${j.state.id}-copy` : id, inputs) };
108
+ ids.add(id);
109
+ for (const k of unnamed)
110
+ ids.add(k ? `${id}.${k + 1}` : id);
111
+ /*
112
+ Each axis of the copy is its own: a name of its own when it had one, and a control of its own when it leads itself.
113
+ One that followed an axis of the same joint follows the copy's.
114
+ */
115
+ if (copy.motion) {
116
+ const named = copy.motion.map(a => {
117
+ if (a.id === undefined)
118
+ return a;
119
+ const own = fresh(`${a.id}-copy`, ids);
120
+ ids.add(own);
121
+ return { ...a, id: own };
122
+ });
123
+ const ours = new Map(figureMotionsOf(j).map((a, k) => [a.id, motionIdOf({ ...copy, motion: named }, k)]));
124
+ const leader = (motion) => ours.get(motion) ?? motion;
125
+ copy.motion = named.map((a, k) => {
126
+ if (a.mimic)
127
+ return {
128
+ ...a,
129
+ mimic: Object.hasOwn(a.mimic, 'sum')
130
+ ? { ...a.mimic, sum: figureMimicLeadersOf(a).map(t => ({ ...t, motion: leader(t.motion) })) }
131
+ : { ...a.mimic, motion: leader(a.mimic.motion) }
132
+ };
133
+ const state = fresh(a.state?.id ? `${a.state.id}-copy` : motionIdOf({ ...copy, motion: named }, k), inputs);
134
+ inputs.add(state);
135
+ return { ...a, state: { ...(a.state ?? {}), id: state } };
136
+ });
137
+ }
138
+ ;
92
139
  asset.joints = [...joints, copy];
93
140
  rewriteJoints(asset);
94
141
  }
@@ -142,30 +189,36 @@ export function releaseFigurePartJoints(asset, part) {
142
189
  const graph = compileFigureGraph(m);
143
190
  const atRest = graph.evaluate(inputs(rest)).values;
144
191
  const now = graph.evaluate(inputs()).values;
145
- /* A part moving with a joint that goes: its own control, over what the leader's distance or angle came to. */
146
- const going = new Set([...(own ? [own.id] : []), ...children.map(j => j.id)]);
147
- /* A follower has no control of its own, so its own record's nominal id is not taken. */
148
- const taken = new Set([...m.inputs.map((i) => i.id), ...joints.filter(j => !j.mimic).map(stateIdOf)]);
149
- for (const f of joints.filter(o => figureMimicLeadersOf(o).some(t => going.has(t.joint)) && !going.has(o.id))) {
192
+ /* A part moving with a joint that goes: each axis of it a control of its own, over what its leaders' came to. */
193
+ const going = new Set(figureAxesOf([...(own ? [own] : []), ...children]).map(a => a.motion.id));
194
+ /* A follower has no control of its own, so its own axis's nominal id is not taken. */
195
+ const taken = new Set([
196
+ ...m.inputs.map((i) => i.id),
197
+ ...figureAxesOf(joints)
198
+ .filter(x => !x.motion.mimic)
199
+ .map(x => motionStateIdOf(x.motion))
200
+ ]);
201
+ for (const { joint: f, motion: fa, k: fk } of figureAxesOf(joints).filter(x => figureMimicLeadersOf(x.motion).some(t => going.has(t.motion)) && !going.has(x.motion.id))) {
150
202
  /*
151
203
  A sum whose leaders all go is a control of its own over what the sum came to, as one leader's follower is. One
152
204
  whose other leaders stay would follow them and stand still by the rest -- what it should then be is not said, so
153
205
  it is refused by name rather than made up.
154
206
  */
155
- const staying = figureMimicLeadersOf(f).filter(t => !going.has(t.joint));
207
+ const staying = figureMimicLeadersOf(fa).filter(t => !going.has(t.motion));
156
208
  if (staying.length)
157
- fail('PART_FOLLOWED', part, `${f.id} follows ${staying.map(t => t.joint).join(', ')} as well as a joint that goes with ${part}; make ${f.id} follow only the joints that stay first`);
158
- const terms = figureMimicLeadersOf(f).map(t => {
159
- const leader = joints.find(o => o.id === t.joint);
160
- const quantity = nodeById(m, `${leader.body1.part}.motion`)?.args[3] ?? stateIdOf(leader);
161
- const state = m.inputs.find((i) => i.id === stateIdOf(leader));
162
- const distance = (value) => Number(graph.evaluate(inputs({ [stateIdOf(leader)]: value })).values[quantity]);
209
+ fail('PART_FOLLOWED', part, `${fa.id} follows ${staying.map(t => t.motion).join(', ')} as well as a joint that goes with ${part}; make ${fa.id} follow only the joints that stay first`);
210
+ const terms = figureMimicLeadersOf(fa).map(t => {
211
+ const leader = figureAxesOf(joints).find(x => x.motion.id === t.motion);
212
+ const control = motionStateIdOf(leader.motion);
213
+ const quantity = nodeById(m, motionNodeIdOf(leader.joint.body1.part, leader.k))?.args[3] ?? control;
214
+ const state = m.inputs.find((i) => i.id === control);
215
+ const distance = (value) => Number(graph.evaluate(inputs({ [control]: value })).values[quantity]);
163
216
  const [a, b] = [distance(state?.min ?? 0) * t.multiplier, distance(state?.max ?? 1) * t.multiplier];
164
217
  return { lo: Math.min(a, b), hi: Math.max(a, b), now: Number(now[quantity]) * t.multiplier };
165
218
  });
166
- const turn = f.type === 'revolute';
219
+ const turn = fa.type === 'revolute';
167
220
  const toUnit = (base) => round6(turn ? (base * 180) / Math.PI : base);
168
- const offset = (f.mimic.offset ?? 0) * (turn ? Math.PI / 180 : 1);
221
+ const offset = (fa.mimic.offset ?? 0) * (turn ? Math.PI / 180 : 1);
169
222
  /*
170
223
  Each leader moves on its own control, so the sum's least and greatest are each term's, added (a negative multiplier
171
224
  swaps a term's ends, above). When leaders are driven by one upstream input -- not the case today, a leader leads
@@ -178,8 +231,9 @@ export function releaseFigurePartJoints(asset, part) {
178
231
  id = `${f.body1.part}-${n}`;
179
232
  taken.add(id);
180
233
  const start = Math.min(hi, Math.max(lo, total(t => t.now)));
181
- const { mimic: _led, travel: _share, ...alone } = f;
182
- joints = joints.map(o => o.id === f.id ? { ...alone, lowerLimit: lo, upperLimit: hi, state: { ...(f.state ?? {}), id, start } } : o);
234
+ const { mimic: _led, travel: _share, ...alone } = f.motion[fk];
235
+ const leading = { ...alone, lowerLimit: lo, upperLimit: hi, state: { ...(fa.state ?? {}), id, start } };
236
+ joints = joints.map(o => (o.id === f.id ? { ...o, motion: o.motion.map((x, i) => (i === fk ? leading : x)) } : o));
183
237
  notice.controls.push({ part: f.body1.part, control: id, min: lo, max: hi });
184
238
  }
185
239
  /*
@@ -228,12 +282,13 @@ export function releaseFigurePartJoints(asset, part) {
228
282
  */
229
283
  const jointNodes = (p) => (n) => n.id.startsWith(`${p}.on.`) ||
230
284
  n.id.startsWith(`${p}.row`) ||
285
+ n.id.startsWith(`${p}.turned.`) ||
286
+ (n.id.startsWith(`${p}.motion`) && /^\.motion(\.\d+)?(\.(through|back|about|about\.turned))?$/.test(n.id.slice(p.length))) ||
231
287
  [
232
288
  `${p}.seat.rigid`,
233
289
  `${p}.chain`,
234
290
  `${p}.world`,
235
291
  `${p}.turned`,
236
- `${p}.motion`,
237
292
  `${p}.layout`,
238
293
  `${p}.assembly`,
239
294
  `${p}.repeat`
@@ -297,7 +352,9 @@ export function releaseFigurePartJoints(asset, part) {
297
352
  delete a.joints;
298
353
  for (const j of children) {
299
354
  const child = j.body1.part;
300
- const control = j.type !== 'fixed' && !j.mimic ? stateIdOf(j) : undefined;
355
+ const controls = figureMotionsOf(j)
356
+ .filter(x => !x.mimic)
357
+ .map(motionStateIdOf);
301
358
  stripJoint(a, j);
302
359
  const at = standing.get(child);
303
360
  const pose = nodeById(m, `${child}.pose`);
@@ -316,7 +373,11 @@ export function releaseFigurePartJoints(asset, part) {
316
373
  for (const ref of old)
317
374
  if (!pose.args.includes(ref))
318
375
  dropIfUnused(a, ref, ownInput(m, child, ref) ? ref : undefined);
319
- notice.released.push({ part: child, ...(control ? { control } : {}) });
376
+ /* One entry for each control that moved it, or one for the part when none did. */
377
+ if (!controls.length)
378
+ notice.released.push({ part: child });
379
+ for (const control of controls)
380
+ notice.released.push({ part: child, control });
320
381
  }
321
382
  /*
322
383
  A control goes with its joint once nothing reads it -- read only after every part is let go of: a lamp and the shade