@hatiolab/figure-model 0.4.2 → 0.4.4

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.
@@ -1,19 +1,28 @@
1
1
  /*
2
- * Slot layouts (ADR-0118): a holder's tiers, the slots on each tier, how slots are numbered, where an item sits in a
3
- * slot, and whether it fits. Pure computation; nothing here knows a scene, a graph or a component.
2
+ * Slot layouts (ADR-0118): a holder's anchors, the tiers placed on them, the slots of each tier, how slots are numbered,
3
+ * where an item sits in a slot, and whether it fits. Pure computation; nothing here knows a scene, a graph or a component.
4
4
  *
5
- * A holder has one or more tiers; each tier has its own arrangement (SINGLE, ROW, GRID or CUSTOM). A slot's address is
6
- * (tier, slot), both counted from 1, and slot numbers restart on every tier. ROW and GRID slots are not stored: they are
7
- * worked out from the rule, so thousands of slots are one rule. A slot's id is `t{tier}_s{slot}` -- a logical id, not
8
- * the name of a node in any 3D asset.
5
+ * holder → anchor → tier → slot → item
9
6
  *
10
- * Coordinates are the holder's own: X and Z put a slot's centre relative to the tier's centre, Y is the tier floor's
11
- * height above the holder's floor. Lengths are in whatever unit the layout is written in; nothing here converts them.
12
- * Rotations are in degrees about Y.
7
+ * An anchor is a frame the holder gives: a position and a direction, and whatever moves it (a fork, a lift). The holder
8
+ * decides how many anchors there are; nothing here makes one. A tier is a group of slots placed on one anchor -- a shelf
9
+ * level, the load area of one fork. Several tiers may share an anchor, at the same height or not. A slot is one place an
10
+ * item is put; its address is (tier, slot). Tier numbers are the holder's own and slot numbers the tier's own: positive,
11
+ * unique, kept as they are when tiers or slots are removed or shown in another order -- never renumbered by height or
12
+ * position. ROW and GRID slots are not stored: they are worked out from the rule, so thousands of slots are one rule. A
13
+ * slot's id is `t{tier}_s{slot}` -- a logical id, not the name of a node in any 3D asset.
14
+ *
15
+ * Where an item is, each part said once:
16
+ * item in the world = holder × anchor × tier × slot × seat
17
+ * The anchor's frame is the holder's to give. Here a tier is placed in its anchor's frame (position, turn about the
18
+ * anchor's Y), a slot in its tier's (offset in X and Z, turn about Y), and an item in its slot (stack height, scale).
19
+ * Lengths are in whatever unit the layout is written in; nothing here converts them. Rotations are in degrees about Y.
13
20
  */
14
21
  export function layoutIssue(code, path, params) {
15
22
  return params ? { code, path, params } : { code, path };
16
23
  }
24
+ /** The anchor at the holder's own origin, for a holder that gives no other. */
25
+ export const HOLDER_ANCHOR = 'holder';
17
26
  /* ── checking a layout ───────────────────────────────────────────────────── */
18
27
  const isFiniteNumber = (v) => typeof v === 'number' && Number.isFinite(v);
19
28
  const isPositive = (v) => isFiniteNumber(v) && v > 0;
@@ -37,24 +46,38 @@ function checkSpec(spec, path, issues) {
37
46
  * Everything wrong with a layout; an empty list is a sound one. stackLimit may be Infinity (no limit); a layout that is
38
47
  * to be stored as JSON is also checked with `persistenceIssues`.
39
48
  */
40
- export function validateSlotLayout(layout) {
49
+ export function validateSlotLayout(layout, options = {}) {
41
50
  const issues = [];
42
51
  if (!layout || !Array.isArray(layout.tiers) || layout.tiers.length === 0)
43
52
  return [layoutIssue('TIERS_REQUIRED', 'tiers')];
44
- if (!['ON', 'IN', 'HANG'].includes(layout.mount))
45
- issues.push(layoutIssue('MOUNT_INVALID', 'mount'));
53
+ const anchors = options.anchors ? new Set(options.anchors) : null;
54
+ const tierNos = new Set();
46
55
  layout.tiers.forEach((tier, i) => {
47
56
  const path = `tiers[${i}]`;
48
57
  if (!tier || typeof tier !== 'object') {
49
58
  issues.push(layoutIssue('OBJECT_REQUIRED', path));
50
59
  return;
51
60
  }
52
- if (tier.tierNo !== i + 1)
53
- issues.push(layoutIssue('TIER_NUMBER_SEQUENCE', `${path}.tierNo`));
54
- if (!isFiniteNumber(tier.elevation))
55
- issues.push(layoutIssue('FINITE_NUMBER_REQUIRED', `${path}.elevation`));
56
- else if (i > 0 && isFiniteNumber(layout.tiers[i - 1]?.elevation) && tier.elevation <= layout.tiers[i - 1].elevation)
57
- issues.push(layoutIssue('ELEVATION_NOT_ASCENDING', `${path}.elevation`));
61
+ if (!isPositiveInt(tier.tierNo))
62
+ issues.push(layoutIssue('POSITIVE_INTEGER_REQUIRED', `${path}.tierNo`));
63
+ else if (tierNos.has(tier.tierNo))
64
+ issues.push(layoutIssue('TIER_NUMBER_DUPLICATE', `${path}.tierNo`, { tierNo: tier.tierNo }));
65
+ else
66
+ tierNos.add(tier.tierNo);
67
+ if (typeof tier.anchorId !== 'string' || !tier.anchorId.trim())
68
+ issues.push(layoutIssue('ANCHOR_REQUIRED', `${path}.anchorId`));
69
+ else if (anchors && !anchors.has(tier.anchorId))
70
+ issues.push(layoutIssue('ANCHOR_UNKNOWN', `${path}.anchorId`, { anchorId: tier.anchorId }));
71
+ if (!['ON', 'IN', 'HANG'].includes(tier.mount))
72
+ issues.push(layoutIssue('MOUNT_INVALID', `${path}.mount`));
73
+ if (!tier.position || typeof tier.position !== 'object')
74
+ issues.push(layoutIssue('OBJECT_REQUIRED', `${path}.position`));
75
+ else
76
+ for (const k of ['x', 'y', 'z'])
77
+ if (!isFiniteNumber(tier.position[k]))
78
+ issues.push(layoutIssue('FINITE_NUMBER_REQUIRED', `${path}.position.${k}`));
79
+ if (!isFiniteNumber(tier.rotation))
80
+ issues.push(layoutIssue('FINITE_NUMBER_REQUIRED', `${path}.rotation`));
58
81
  const l = tier.layout;
59
82
  switch (l?.pattern) {
60
83
  case 'SINGLE':
@@ -81,14 +104,24 @@ export function validateSlotLayout(layout) {
81
104
  checkSpec(l.slot, `${path}.layout.slot`, issues);
82
105
  break;
83
106
  case 'CUSTOM': {
84
- const slots = Array.isArray(l.slots) ? l.slots : [];
85
- const nos = slots.map(s => s?.slotNo).sort((a, b) => a - b);
86
- if (!nos.length || nos.some((n, k) => n !== k + 1))
87
- issues.push(layoutIssue('SLOT_NUMBER_SEQUENCE', `${path}.layout.slots`));
88
- slots.forEach((s, k) => {
107
+ if (!Array.isArray(l.slots)) {
108
+ issues.push(layoutIssue('ARRAY_REQUIRED', `${path}.layout.slots`));
109
+ break;
110
+ }
111
+ if (!l.slots.length)
112
+ issues.push(layoutIssue('SLOTS_REQUIRED', `${path}.layout.slots`));
113
+ const slotNos = new Set();
114
+ l.slots.forEach((s, k) => {
115
+ const at = `${path}.layout.slots[${k}]`;
116
+ if (!isPositiveInt(s?.slotNo))
117
+ issues.push(layoutIssue('POSITIVE_INTEGER_REQUIRED', `${at}.slotNo`));
118
+ else if (slotNos.has(s.slotNo))
119
+ issues.push(layoutIssue('SLOT_NUMBER_DUPLICATE', `${at}.slotNo`, { slotNo: s.slotNo }));
120
+ else
121
+ slotNos.add(s.slotNo);
89
122
  if (!isFiniteNumber(s?.offset?.x) || !isFiniteNumber(s?.offset?.z))
90
- issues.push(layoutIssue('FINITE_NUMBER_REQUIRED', `${path}.layout.slots[${k}].offset`));
91
- checkSpec(s, `${path}.layout.slots[${k}]`, issues);
123
+ issues.push(layoutIssue('FINITE_NUMBER_REQUIRED', `${at}.offset`));
124
+ checkSpec(s, at, issues);
92
125
  });
93
126
  break;
94
127
  }
@@ -126,6 +159,12 @@ export function slotCount(pattern) {
126
159
  return pattern.slots.length;
127
160
  }
128
161
  }
162
+ /** A tier's slot numbers, in order. ROW and GRID count from 1; CUSTOM has the numbers it was given. */
163
+ export function slotNumbers(pattern) {
164
+ if (pattern.pattern === 'CUSTOM')
165
+ return pattern.slots.map(s => s.slotNo).sort((a, b) => a - b);
166
+ return Array.from({ length: slotCount(pattern) }, (_, i) => i + 1);
167
+ }
129
168
  /** A GRID slot's number from its row r and column c (from 1), counted from the origin corner. */
130
169
  export function gridSlotNo(rows, cols, r, c, order = 'ROW_MAJOR') {
131
170
  switch (order) {
@@ -169,7 +208,7 @@ const flip = (v, max) => (max && v !== 0 ? -v : v);
169
208
  */
170
209
  export function resolveSlot(layout, address, options = {}) {
171
210
  const tier = layout?.tiers?.find(t => t?.tierNo === address?.tier);
172
- if (!tier || !isPositiveInt(address.slot) || address.slot > slotCount(tier.layout))
211
+ if (!tier || !isPositiveInt(address.slot))
173
212
  return null;
174
213
  const l = tier.layout;
175
214
  let spec;
@@ -177,16 +216,22 @@ export function resolveSlot(layout, address, options = {}) {
177
216
  let name;
178
217
  switch (l.pattern) {
179
218
  case 'SINGLE':
219
+ if (address.slot !== 1)
220
+ return null;
180
221
  spec = l.slot;
181
222
  offset = { x: 0, z: 0 };
182
223
  break;
183
224
  case 'ROW': {
225
+ if (address.slot > l.count)
226
+ return null;
184
227
  const v = flip((address.slot - 1 - (l.count - 1) / 2) * l.pitch, l.origin === 'MAX');
185
228
  spec = l.slot;
186
229
  offset = l.axis === 'X' ? { x: v, z: 0 } : { x: 0, z: v };
187
230
  break;
188
231
  }
189
232
  case 'GRID': {
233
+ if (address.slot > l.rows * l.cols)
234
+ return null;
190
235
  const { r, c } = gridCellOf(l.rows, l.cols, address.slot, l.order);
191
236
  const origin = l.origin ?? { x: 'MIN', z: 'MIN' };
192
237
  spec = l.slot;
@@ -210,7 +255,10 @@ export function resolveSlot(layout, address, options = {}) {
210
255
  tier: tier.tierNo,
211
256
  slotNo: address.slot,
212
257
  name,
213
- elevation: tier.elevation,
258
+ anchorId: tier.anchorId,
259
+ mount: tier.mount,
260
+ tierPosition: { ...tier.position },
261
+ tierRotation: tier.rotation,
214
262
  offset,
215
263
  allowed: { ...spec.allowed },
216
264
  accepts: spec.accepts ? [...spec.accepts] : undefined,
@@ -228,12 +276,31 @@ export function addressOfSlotId(slotId) {
228
276
  const m = typeof slotId === 'string' ? /^t(\d+)_s(\d+)$/.exec(slotId) : null;
229
277
  return m ? { tier: Number(m[1]), slot: Number(m[2]) } : null;
230
278
  }
231
- /** Every address of a layout, tier by tier. For a big GRID, resolve only the addresses you need. */
279
+ /** Every address of a layout, tier by tier as written. For a big GRID, resolve only the addresses you need. */
232
280
  export function* slotAddresses(layout) {
233
281
  for (const tier of layout?.tiers ?? [])
234
- for (let slot = 1; slot <= slotCount(tier.layout); slot++)
282
+ for (const slot of slotNumbers(tier.layout))
235
283
  yield { tier: tier.tierNo, slot };
236
284
  }
285
+ /** A point of the tier's X-Z plane turned by the tier's rotation about Y (right-handed: +X turns toward -Z). */
286
+ function turnY(x, z, degrees) {
287
+ if (!degrees)
288
+ return { x, z };
289
+ const a = (degrees * Math.PI) / 180;
290
+ const c = Math.cos(a);
291
+ const s = Math.sin(a);
292
+ // clears the 6e-17 left at multiples of 90°
293
+ const clean = (v) => Math.round(v * 1e9) / 1e9;
294
+ return { x: clean(x * c + z * s), z: clean(-x * s + z * c) };
295
+ }
296
+ /** A slot's frame in its anchor's: the tier's placement, then the slot's offset and turn in the tier. */
297
+ export function slotFrame(slot) {
298
+ const o = turnY(slot.offset.x, slot.offset.z, slot.tierRotation);
299
+ return {
300
+ position: { x: slot.tierPosition.x + o.x, y: slot.tierPosition.y, z: slot.tierPosition.z + o.z },
301
+ rotation: slot.tierRotation + slot.rotation
302
+ };
303
+ }
237
304
  export const DEFAULT_SEAT_MARGIN = 0.05;
238
305
  const knownDims = (d) => !!d && isPositive(d.width) && isPositive(d.depth) && isPositive(d.height);
239
306
  /** The X and Z extent of an item turned by `rotation` degrees. */
@@ -246,12 +313,14 @@ export function rotatedFootprint(dims, rotation) {
246
313
  return { width: clean(dims.width * c + dims.depth * s), depth: clean(dims.width * s + dims.depth * c) };
247
314
  }
248
315
  /**
249
- * Where an item sits in a slot: shrunk to fit the slot's width and depth (by its turned extent, never enlarged), on top
250
- * of `belowHeight` -- the shown heights (height × scale) of what is stacked under it. `margin` is room left only for
251
- * showing (0 ≤ margin < 1); whether it fits is judged elsewhere, at full size. Null when a size or value is unusable --
252
- * never NaN or Infinity.
316
+ * Where an item sits in its slot's own frame: shrunk to fit the slot's width and depth (by its turned extent, never
317
+ * enlarged), on top of `belowHeight` -- the shown heights (height × scale) of what is stacked under it -- along +Y for ON
318
+ * and IN, -Y for HANG. x and z are 0 and it is not turned: the slot's frame has the offset and the turn. `margin` is room
319
+ * left only for showing (0 ≤ margin < 1); whether it fits is judged elsewhere, at full size. Null when a size or value is
320
+ * unusable -- never NaN or Infinity.
321
+ * slotFrame(slot) then seatInSlot(...) = seatTransform(...)
253
322
  */
254
- export function seatTransform(dims, slot, mount, belowHeight = 0, margin = DEFAULT_SEAT_MARGIN) {
323
+ export function seatInSlot(dims, slot, belowHeight = 0, margin = DEFAULT_SEAT_MARGIN) {
255
324
  if (!knownDims(dims))
256
325
  return null;
257
326
  if (!isFiniteNumber(belowHeight) || !isFiniteNumber(margin) || margin < 0 || margin >= 1)
@@ -259,34 +328,112 @@ export function seatTransform(dims, slot, mount, belowHeight = 0, margin = DEFAU
259
328
  const fp = rotatedFootprint(dims, slot.rotation);
260
329
  const scale = Math.min(1, Math.min(slot.allowed.width / fp.width, slot.allowed.depth / fp.depth) * (1 - margin));
261
330
  const h = dims.height * scale;
262
- const dir = mount === 'HANG' ? -1 : 1;
263
- const y = slot.elevation + dir * (belowHeight + h / 2);
264
- return { position: { x: slot.offset.x, y, z: slot.offset.z }, rotation: slot.rotation, scale };
331
+ const dir = slot.mount === 'HANG' ? -1 : 1;
332
+ return { position: { x: 0, y: dir * (belowHeight + h / 2), z: 0 }, rotation: 0, scale };
333
+ }
334
+ /** Where an item sits in its anchor's frame: the slot's frame, then the seat in it. */
335
+ export function seatTransform(dims, slot, belowHeight = 0, margin = DEFAULT_SEAT_MARGIN) {
336
+ const seat = seatInSlot(dims, slot, belowHeight, margin);
337
+ if (!seat)
338
+ return null;
339
+ const f = slotFrame(slot);
340
+ return { position: { x: f.position.x, y: f.position.y + seat.position.y, z: f.position.z }, rotation: f.rotation, scale: seat.scale };
265
341
  }
266
- /** Where each of a slot's stacked items sits, bottom first. An item of unknown size is null and adds no height. */
267
- export function stackSeatTransforms(stack, slot, mount, margin = DEFAULT_SEAT_MARGIN) {
342
+ /** Where each of a slot's stacked items sits in the anchor's frame, bottom first. An item of unknown size is null and adds no height. */
343
+ export function stackSeatTransforms(stack, slot, margin = DEFAULT_SEAT_MARGIN) {
268
344
  let below = 0;
269
345
  return stack.map(dims => {
270
- const t = dims ? seatTransform(dims, slot, mount, below, margin) : null;
346
+ const t = dims ? seatTransform(dims, slot, below, margin) : null;
271
347
  if (t)
272
348
  below += dims.height * t.scale;
273
349
  return t;
274
350
  });
275
351
  }
276
- /** A slot anchor's place in the holder: the slot's offset and the tier's elevation, nothing else. */
277
- export function slotAnchorPosition(slot) {
278
- return { x: slot.offset.x, y: slot.elevation, z: slot.offset.z };
352
+ /** Below this, a shared length is a touch, not an overlap. */
353
+ const TOUCH = 1e-6;
354
+ function roomOf(slot, tierIndex) {
355
+ const f = slotFrame(slot);
356
+ const hw = slot.allowed.width / 2;
357
+ const hd = slot.allowed.depth / 2;
358
+ const corners = [
359
+ [-hw, -hd],
360
+ [hw, -hd],
361
+ [hw, hd],
362
+ [-hw, hd]
363
+ ].map(([x, z]) => {
364
+ const p = turnY(x, z, f.rotation);
365
+ return { x: f.position.x + p.x, z: f.position.z + p.z };
366
+ });
367
+ const ax = turnY(1, 0, f.rotation);
368
+ const az = turnY(0, 1, f.rotation);
369
+ const dir = slot.mount === 'HANG' ? -1 : 1;
370
+ const ys = [f.position.y, f.position.y + dir * slot.allowed.height];
371
+ const xs = corners.map(c => c.x);
372
+ return {
373
+ tierIndex,
374
+ tier: slot.tier,
375
+ slot: slot.slotNo,
376
+ corners,
377
+ axes: [ax, az],
378
+ y0: Math.min(...ys),
379
+ y1: Math.max(...ys),
380
+ minX: Math.min(...xs),
381
+ maxX: Math.max(...xs)
382
+ };
383
+ }
384
+ /** Whether two turned rectangles share area: no axis of either separates them by more than a touch. */
385
+ function footprintsOverlap(a, b) {
386
+ for (const axis of [...a.axes, ...b.axes]) {
387
+ const pa = a.corners.map(c => c.x * axis.x + c.z * axis.z);
388
+ const pb = b.corners.map(c => c.x * axis.x + c.z * axis.z);
389
+ const shared = Math.min(Math.max(...pa), Math.max(...pb)) - Math.max(Math.min(...pa), Math.min(...pb));
390
+ if (shared <= TOUCH)
391
+ return false;
392
+ }
393
+ return true;
279
394
  }
280
395
  /**
281
- * Where an item sits when it hangs off a slot anchor: only the stack height, half its height, scale and turn; x and z are
282
- * 0 because the anchor already has the offset and elevation.
283
- * slotAnchorPosition(slot) + seatInAnchor(...).position = seatTransform(...).position
396
+ * Where a sound layout's slots crowd each other or leave their anchor's face, as warnings. Only slots on the same anchor
397
+ * are compared: anchors move apart. Rooms are each slot's allowed box, placed by its tier and turned; sharing a face or
398
+ * an edge is not overlapping.
284
399
  */
285
- export function seatInAnchor(dims, slot, mount, belowHeight = 0, margin = DEFAULT_SEAT_MARGIN) {
286
- const t = seatTransform(dims, slot, mount, belowHeight, margin);
287
- if (!t)
288
- return null;
289
- return { position: { x: 0, y: t.position.y - slot.elevation, z: 0 }, rotation: t.rotation, scale: t.scale };
400
+ export function slotSpaceWarnings(layout, options = {}) {
401
+ const warnings = [];
402
+ const byAnchor = new Map();
403
+ layout.tiers.forEach((tier, i) => {
404
+ const rooms = byAnchor.get(tier.anchorId) ?? [];
405
+ byAnchor.set(tier.anchorId, rooms);
406
+ for (const n of slotNumbers(tier.layout))
407
+ rooms.push(roomOf(resolveSlot(layout, { tier: tier.tierNo, slot: n }), i));
408
+ });
409
+ for (const [anchorId, rooms] of byAnchor) {
410
+ const face = options.anchorFaces?.[anchorId];
411
+ if (!face)
412
+ warnings.push({ code: 'ANCHOR_SPACE_UNKNOWN', path: 'tiers', params: { anchorId } });
413
+ else
414
+ for (const r of rooms)
415
+ if (r.corners.some(c => Math.abs(c.x) - face.width / 2 > TOUCH || Math.abs(c.z) - face.depth / 2 > TOUCH))
416
+ warnings.push({ code: 'SLOT_OUTSIDE_ANCHOR', path: `tiers[${r.tierIndex}]`, params: { tier: r.tier, slot: r.slot } });
417
+ // sweep along X so a big grid is not compared pair by pair
418
+ const sorted = [...rooms].sort((a, b) => a.minX - b.minX);
419
+ for (let i = 0; i < sorted.length; i++) {
420
+ const a = sorted[i];
421
+ for (let j = i + 1; j < sorted.length && sorted[j].minX < a.maxX - TOUCH; j++) {
422
+ const b = sorted[j];
423
+ if (Math.min(a.y1, b.y1) - Math.max(a.y0, b.y0) <= TOUCH)
424
+ continue;
425
+ if (!footprintsOverlap(a, b))
426
+ continue;
427
+ const [first, second] = a.tierIndex < b.tierIndex || (a.tierIndex === b.tierIndex && a.slot < b.slot) ? [a, b] : [b, a];
428
+ warnings.push({
429
+ code: 'SLOT_OVERLAP',
430
+ path: `tiers[${second.tierIndex}]`,
431
+ params: { tier: second.tier, slot: second.slot, otherTier: first.tier, otherSlot: first.slot }
432
+ });
433
+ }
434
+ }
435
+ }
436
+ return warnings;
290
437
  }
291
438
  /**
292
439
  * Whether one more item fits in a slot that already holds `occupants`, at full size. The count limit and the height
@@ -1 +1 @@
1
- {"version":3,"file":"slot-layout.js","sourceRoot":"","sources":["../src/slot-layout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slot-layout.js","sourceRoot":"","sources":["../src/slot-layout.ts"],"names":[],"mappings":"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"}
@@ -1,36 +1,46 @@
1
1
  import type { FigureSurfaceReference } from './asset-types.ts';
2
2
  import { type SlotLayout, type SlotMount } from './slot-layout.ts';
3
+ import type { Vec3 } from './words.ts';
4
+ /** A frame the figure gives its tiers: a face of one of its parts. */
5
+ export interface FigureSlotAnchor {
6
+ id: string;
7
+ /** The frame of the face -- the same rule as a binding's frame. */
8
+ frame: string;
9
+ /** The face. Its tiers are placed in the part's X and Z; they rise along its Y, away from the face. */
10
+ pose: FigureSurfaceReference;
11
+ }
3
12
  export interface FigureSlotLayoutDeclaration {
4
13
  label: string;
5
14
  role: 'seat' | 'grip';
6
- /** The frame of the face the layout sits on -- the same rule as a binding's frame. */
7
- frame: string;
8
- /** The face the layout sits on. Its slots are laid out in the part's X and Z; tiers rise along its Y. */
9
- pose: FigureSurfaceReference;
10
- /** Every slot must name the types it takes (ADR-0087 decision 3). */
15
+ anchors: FigureSlotAnchor[];
16
+ /** Every tier stands on one of the anchors; every slot must name the types it takes (ADR-0087 decision 3). */
11
17
  layout: SlotLayout;
12
18
  }
13
- /** One slot unfolded from a layout: a place like a binding, plus where on the face it is. */
19
+ /** One slot unfolded from a layout: a place like a binding, plus where it is on its anchor. */
14
20
  export interface FigureSlotPlace {
15
21
  id: string;
16
22
  label: string;
17
23
  role: 'seat' | 'grip';
24
+ /** The anchor's face: the frame and the pose a binding would have. */
18
25
  frame: string;
19
26
  pose: FigureSurfaceReference;
27
+ anchorId: string;
20
28
  accepts: string[];
21
29
  /** How many it holds at once: the slot's stackLimit. */
22
30
  capacity: number;
23
31
  tier: number;
24
32
  slot: number;
25
33
  name?: string;
26
- /** The slot's centre on the face, in the part's X and Z. */
34
+ /** The tier's centre on the anchor: X and Z in the part's axes, Y away from the face (toward it for a bottom face). */
35
+ tierPosition: Vec3;
36
+ /** The tier's turn about the face's normal, degrees. */
37
+ tierRotation: number;
38
+ /** The slot's centre from the tier's centre, in the tier's axes. */
27
39
  offset: {
28
40
  x: number;
29
41
  z: number;
30
42
  };
31
- /** The tier floor's height above the face, along the part's Y (below it for HANG). */
32
- elevation: number;
33
- /** Degrees about Y. */
43
+ /** The slot's turn about Y in the tier, degrees. */
34
44
  rotation: number;
35
45
  mount: SlotMount;
36
46
  /** The room a held thing may take: width along X, height along Y, depth along Z. */
@@ -1 +1 @@
1
- {"version":3,"file":"slot-places.d.ts","sourceRoot":"","sources":["../src/slot-places.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAwC,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAExG,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAA;IACb,yGAAyG;IACzG,IAAI,EAAE,sBAAsB,CAAA;IAC5B,qEAAqE;IACrE,MAAM,EAAE,UAAU,CAAA;CACnB;AAED,6FAA6F;AAC7F,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,sBAAsB,CAAA;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4DAA4D;IAC5D,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAChC,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,SAAS,CAAA;IAChB,oFAAoF;IACpF,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1D;AAED,+GAA+G;AAC/G,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,2BAA2B,GAAG,SAAS,GAAG,eAAe,EAAE,CA0B1G"}
1
+ {"version":3,"file":"slot-places.d.ts","sourceRoot":"","sources":["../src/slot-places.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAA;IACb,uGAAuG;IACvG,IAAI,EAAE,sBAAsB,CAAA;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,8GAA8G;IAC9G,MAAM,EAAE,UAAU,CAAA;CACnB;AAED,+FAA+F;AAC/F,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,sBAAsB,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uHAAuH;IACvH,YAAY,EAAE,IAAI,CAAA;IAClB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAA;IACpB,oEAAoE;IACpE,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAChC,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,SAAS,CAAA;IAChB,oFAAoF;IACpF,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1D;AAED,+GAA+G;AAC/G,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,2BAA2B,GAAG,SAAS,GAAG,eAAe,EAAE,CA8B1G"}
@@ -1,37 +1,42 @@
1
1
  /*
2
2
  * A figure's slot layout declaration and the places it unfolds into (ADR-0118).
3
3
  *
4
- * A figure declares one slot layout on a face of one of its parts. Compiling unfolds it into one place per slot, each
5
- * with the id `t{tier}_s{slot}` -- a logical id, not the name of a node in the asset. The count and the ids are what the
6
- * author wrote; resizing the figure does not change them. Unfolding reads the declaration only, so the release
7
- * comparison and the authoring read-back see the same places the compiled figure evaluates.
4
+ * A figure gives anchors -- faces of its parts, so an anchor on a moving part (a fork) moves with it -- and a slot layout
5
+ * whose tiers stand on them. Compiling unfolds the layout into one place per slot, each with the id `t{tier}_s{slot}` --
6
+ * a logical id, not the name of a node in the asset. The count and the ids are what the author wrote; resizing the
7
+ * figure does not change them, and neither does the number of anchors. Unfolding reads the declaration only, so the
8
+ * release comparison and the authoring read-back see the same places the compiled figure evaluates.
8
9
  */
9
10
  import { resolveSlot, slotAddresses, slotIdOf } from "./slot-layout.js";
10
11
  /** The places a declaration unfolds into, tier by tier and slot by slot. None when there is no declaration. */
11
12
  export function figureSlotPlacesOf(declaration) {
12
- if (!declaration?.layout)
13
+ if (!declaration?.layout || !Array.isArray(declaration.anchors))
13
14
  return [];
15
+ const anchors = new Map(declaration.anchors.map(a => [a.id, a]));
14
16
  const places = [];
15
17
  for (const address of slotAddresses(declaration.layout)) {
16
18
  const s = resolveSlot(declaration.layout, address);
17
- if (!s)
19
+ const anchor = s && anchors.get(s.anchorId);
20
+ if (!s || !anchor)
18
21
  continue;
19
22
  const id = slotIdOf(address);
20
23
  places.push({
21
24
  id,
22
25
  label: `${declaration.label} ${id}`,
23
26
  role: declaration.role,
24
- frame: declaration.frame,
25
- pose: { ...declaration.pose },
27
+ frame: anchor.frame,
28
+ pose: { ...anchor.pose },
29
+ anchorId: anchor.id,
26
30
  accepts: [...(s.accepts ?? [])],
27
31
  capacity: s.stackLimit,
28
32
  tier: s.tier,
29
33
  slot: s.slotNo,
30
34
  ...(s.name ? { name: s.name } : {}),
35
+ tierPosition: { ...s.tierPosition },
36
+ tierRotation: s.tierRotation,
31
37
  offset: { ...s.offset },
32
- elevation: s.elevation,
33
38
  rotation: s.rotation,
34
- mount: declaration.layout.mount,
39
+ mount: s.mount,
35
40
  allowed: { ...s.allowed }
36
41
  });
37
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"slot-places.js","sourceRoot":"","sources":["../src/slot-places.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAmC,MAAM,kBAAkB,CAAA;AAqCxG,+GAA+G;AAC/G,MAAM,UAAU,kBAAkB,CAAC,WAAoD;IACrF,IAAI,CAAC,WAAW,EAAE,MAAM;QAAE,OAAO,EAAE,CAAA;IACnC,MAAM,MAAM,GAAsB,EAAE,CAAA;IACpC,KAAK,MAAM,OAAO,IAAI,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAClD,IAAI,CAAC,CAAC;YAAE,SAAQ;QAChB,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC5B,MAAM,CAAC,IAAI,CAAC;YACV,EAAE;YACF,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE,EAAE;YACnC,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,IAAI,EAAE,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE;YAC7B,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC/B,QAAQ,EAAE,CAAC,CAAC,UAAU;YACtB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,MAAM;YACd,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;YACvB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK;YAC/B,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE;SAC1B,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"slot-places.js","sourceRoot":"","sources":["../src/slot-places.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,WAAW,EACX,aAAa,EACb,QAAQ,EAGT,MAAM,kBAAkB,CAAA;AAgDzB,+GAA+G;AAC/G,MAAM,UAAU,kBAAkB,CAAC,WAAoD;IACrF,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAA;IAC1E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAU,CAAC,CAAC,CAAA;IACzE,MAAM,MAAM,GAAsB,EAAE,CAAA;IACpC,KAAK,MAAM,OAAO,IAAI,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM;YAAE,SAAQ;QAC3B,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC5B,MAAM,CAAC,IAAI,CAAC;YACV,EAAE;YACF,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE,EAAE;YACnC,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE;YACxB,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC/B,QAAQ,EAAE,CAAC,CAAC,UAAU;YACtB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,MAAM;YACd,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC,YAAY,EAAE;YACnC,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;YACvB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE;SAC1B,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -55,6 +55,10 @@ CPU 프로파일 포함 시간(compileAsset 272 ms 안): `checkFigureJoints` 189
55
55
  | 항목 | 상태 |
56
56
  | --- | --- |
57
57
  | 워크스페이스 파생 기억·횟수 계측·예산 시험 | figure-model 0.4.1 발행 |
58
- | 화면 쪽 정리(파싱 1회, `view.geometry` 심기, 미리보기·검사 디바운스, 안 보이는 패널 건너뛰기) | things-factory v10 커밋 둘, 미발행 |
59
- | `stringsIn` 비할당 순회 | figure-model 8085989 커밋(시험 806 통과), 미발행 |
58
+ | 화면 쪽 정리(파싱 1회, `view.geometry` 심기, 미리보기·검사 디바운스, 안 보이는 패널 건너뛰기) | figure-ui 10.1.126·127에 포함·발행 |
59
+ | `stringsIn` 비할당 순회 | figure-model 8085989(시험 806 통과), 0.4.2에 포함·발행 |
60
60
  | joint 대조 줄이기, 컴파일 결과 기억 | ADR-0119 안건, 미결정 |
61
+
62
+ ## 측정 조건 (10-10)
63
+
64
+ 프레임·긴 프레임·렌더 시간은 브라우저 창이 보이는 상태(`document.visibilityState === 'visible'`)에서만 믿는다. 숨겨지면 프레임이 생기지 않아 긴 프레임이 0으로 나오고 타이머가 늦어진다. 시스템 부하는 이 머신에서 평소 3~4이고, 다른 세션의 빌드나 색인이 돌면 같은 조작이 4~5배로 나온다. 결과에는 부하와 창 상태를 같이 적는다. 컴파일 횟수 시험, Node 벤치, JS 프로파일은 창과 무관하다.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hatiolab/figure-model",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "The figure format (figure-asset-1): a kernel that evaluates a figure from its declared relations, the authoring commands a modeller and an AI share, the release gate and the score.",
5
5
  "keywords": [
6
6
  "figure",
@@ -48,7 +48,7 @@
48
48
  "version": "node scripts/sync-kernel-version.mjs && git add src/kernel-version.ts",
49
49
  "build": "tsc -p tsconfig.build.json",
50
50
  "check": "tsc -p tsconfig.json --noEmit",
51
- "test": "npm run check && node --test src/*.test.ts",
51
+ "test": "npm run check && FIGURE_FREEZE_COMPILED=1 node --test src/*.test.ts",
52
52
  "test:coverage:slot-layout": "node --test --experimental-test-coverage --test-coverage-include=src/slot-layout.ts --test-coverage-include=src/slot-places.ts --test-coverage-lines=100 --test-coverage-branches=95 --test-coverage-functions=95 src/slot-layout.test.ts src/slot-places.test.ts",
53
53
  "test:rewrite": "node --test scripts/*.test.ts",
54
54
  "test:released": "node --test scripts/released-kernel.check.ts",