@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.
- package/CHANGELOG.md +41 -5
- package/dist/asset-types.d.ts +19 -0
- package/dist/asset-types.d.ts.map +1 -1
- package/dist/asset-types.js +2 -0
- package/dist/asset-types.js.map +1 -1
- package/dist/asset.d.ts.map +1 -1
- package/dist/asset.js +5 -3
- package/dist/asset.js.map +1 -1
- package/dist/authoring-actions.js +8 -0
- package/dist/authoring-actions.js.map +1 -1
- package/dist/authoring-fastening.d.ts +16 -2
- package/dist/authoring-fastening.d.ts.map +1 -1
- package/dist/authoring-fastening.js +106 -47
- package/dist/authoring-fastening.js.map +1 -1
- package/dist/authoring-placement.d.ts.map +1 -1
- package/dist/authoring-placement.js +116 -22
- package/dist/authoring-placement.js.map +1 -1
- package/dist/authoring-proportion.d.ts.map +1 -1
- package/dist/authoring-proportion.js +25 -8
- package/dist/authoring-proportion.js.map +1 -1
- package/dist/authoring-types.d.ts +62 -34
- package/dist/authoring-types.d.ts.map +1 -1
- package/dist/authoring-types.js +8 -8
- package/dist/authoring-types.js.map +1 -1
- package/dist/clip-keeping.d.ts.map +1 -1
- package/dist/clip-keeping.js +7 -5
- package/dist/clip-keeping.js.map +1 -1
- package/dist/contract.d.ts +11 -1
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js.map +1 -1
- package/dist/data-interface.d.ts +1 -1
- package/dist/data-interface.d.ts.map +1 -1
- package/dist/data-interface.js +43 -5
- package/dist/data-interface.js.map +1 -1
- package/dist/editor-workspace.js +1 -1
- package/dist/editor-workspace.js.map +1 -1
- package/dist/examples.js +6 -6
- package/dist/examples.js.map +1 -1
- package/dist/fasten-place.d.ts +18 -0
- package/dist/fasten-place.d.ts.map +1 -1
- package/dist/fasten-place.js +36 -0
- package/dist/fasten-place.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/item-notes.d.ts +17 -0
- package/dist/item-notes.d.ts.map +1 -0
- package/dist/item-notes.js +28 -0
- package/dist/item-notes.js.map +1 -0
- package/dist/joint-fields.d.ts +6 -8
- package/dist/joint-fields.d.ts.map +1 -1
- package/dist/joint-fields.js +6 -6
- package/dist/joint-fields.js.map +1 -1
- package/dist/joint-list.d.ts +11 -9
- package/dist/joint-list.d.ts.map +1 -1
- package/dist/joint-list.js +75 -53
- package/dist/joint-list.js.map +1 -1
- package/dist/joint-motions.d.ts +30 -0
- package/dist/joint-motions.d.ts.map +1 -0
- package/dist/joint-motions.js +28 -0
- package/dist/joint-motions.js.map +1 -0
- package/dist/joint-part-edits.d.ts.map +1 -1
- package/dist/joint-part-edits.js +95 -34
- package/dist/joint-part-edits.js.map +1 -1
- package/dist/joint-writing.d.ts +3 -4
- package/dist/joint-writing.d.ts.map +1 -1
- package/dist/joint-writing.js +229 -170
- package/dist/joint-writing.js.map +1 -1
- package/dist/kernel-version.d.ts +1 -1
- package/dist/kernel-version.js +1 -1
- package/dist/part-edit.d.ts.map +1 -1
- package/dist/part-edit.js +4 -2
- package/dist/part-edit.js.map +1 -1
- package/dist/proposal.d.ts +1 -1
- package/dist/proposal.d.ts.map +1 -1
- package/dist/proposal.js +5 -3
- package/dist/proposal.js.map +1 -1
- package/dist/recipe-from-parts.d.ts.map +1 -1
- package/dist/recipe-from-parts.js +12 -4
- package/dist/recipe-from-parts.js.map +1 -1
- package/dist/recipe.d.ts.map +1 -1
- package/dist/recipe.js +10 -8
- package/dist/recipe.js.map +1 -1
- package/dist/release-contract.d.ts +1 -1
- package/dist/release-contract.d.ts.map +1 -1
- package/dist/release-contract.js +56 -4
- package/dist/release-contract.js.map +1 -1
- package/dist/release-metrics.d.ts +8 -0
- package/dist/release-metrics.d.ts.map +1 -1
- package/dist/release-metrics.js +7 -2
- package/dist/release-metrics.js.map +1 -1
- package/dist/robots.d.ts.map +1 -1
- package/dist/robots.js +43 -46
- package/dist/robots.js.map +1 -1
- package/docs/attachment-response-spec-review-2026-10-24.md +56 -0
- package/docs/editor-integration.md +2 -0
- package/docs/modeller-interaction-performance-2026-10-07.md +1 -1
- package/docs/performance-followup-2026-10-05.md +1 -1
- package/docs/review-2026-09-22.md +2 -2
- package/docs/status.md +12 -2
- package/package.json +1 -1
package/dist/joint-list.js
CHANGED
|
@@ -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:
|
|
6
|
-
export const FIGURE_JOINT_LIST_SCHEMA =
|
|
7
|
-
/** How the values are measured:
|
|
8
|
-
export const FIGURE_JOINT_LIST_DERIVATION =
|
|
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 (`{
|
|
11
|
-
* (`{ 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.
|
|
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
|
|
96
|
-
const quantityRefOf = (asset, child) => asset.document.model.nodes.find(n => n.id ===
|
|
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
|
|
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,
|
|
108
|
-
const parent
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
const
|
|
112
|
-
|
|
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
|
|
123
|
-
/* The
|
|
124
|
-
const d = compose(
|
|
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
|
|
181
|
-
if (
|
|
182
|
-
rest[
|
|
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
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
parentPart,
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
const follows = figureMimicTermsOf(
|
|
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 =
|
|
217
|
-
const input = leader && inputs.get(
|
|
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,
|
|
240
|
+
entry.axis = axisOf(reader, read, drivers);
|
|
221
241
|
entry.follows = follows;
|
|
222
242
|
}
|
|
223
243
|
else {
|
|
224
|
-
const input = inputs.get(
|
|
244
|
+
const input = inputs.get(motionStateIdOf(a));
|
|
225
245
|
if (!input)
|
|
226
|
-
return refuse(
|
|
227
|
-
/* A revolute
|
|
228
|
-
const limited =
|
|
229
|
-
entry.axis = axisOf(reader,
|
|
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:
|
|
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
|
|
247
|
-
* at `inputs` (design inputs, instance size and state; the stored values for
|
|
248
|
-
* share reads its distance here: a consumer never works it out from the length
|
|
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
|
|
252
|
-
|
|
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 =
|
|
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
|
|
281
|
+
return axis.motion.type === 'revolute' ? (value * 180) / Math.PI : value;
|
|
260
282
|
}
|
|
261
283
|
//# sourceMappingURL=joint-list.js.map
|
package/dist/joint-list.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/joint-part-edits.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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.
|
|
66
|
+
...(j.motion
|
|
59
67
|
? {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
91
|
-
|
|
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
|
|
146
|
-
const going = new Set([...(own ? [own
|
|
147
|
-
/* A follower has no control of its own, so its own
|
|
148
|
-
const taken = new Set([
|
|
149
|
-
|
|
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(
|
|
207
|
+
const staying = figureMimicLeadersOf(fa).filter(t => !going.has(t.motion));
|
|
156
208
|
if (staying.length)
|
|
157
|
-
fail('PART_FOLLOWED', part, `${
|
|
158
|
-
const terms = figureMimicLeadersOf(
|
|
159
|
-
const leader = joints.find(
|
|
160
|
-
const
|
|
161
|
-
const
|
|
162
|
-
const
|
|
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 =
|
|
219
|
+
const turn = fa.type === 'revolute';
|
|
167
220
|
const toUnit = (base) => round6(turn ? (base * 180) / Math.PI : base);
|
|
168
|
-
const offset = (
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|