@hatiolab/figure-model 0.1.13 → 0.1.14

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 +1 @@
1
- {"version":3,"file":"blueprint-shape.d.ts","sourceRoot":"","sources":["../src/blueprint-shape.ts"],"names":[],"mappings":"AAgCA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAiD1D"}
1
+ {"version":3,"file":"blueprint-shape.d.ts","sourceRoot":"","sources":["../src/blueprint-shape.ts"],"names":[],"mappings":"AAgCA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CA8E1D"}
@@ -16,7 +16,7 @@
16
16
  *
17
17
  * 문제를 찾으면 사람이 읽을 수 있는 사유 목록을 돌려준다. 비어 있으면 읽을 수 있다.
18
18
  */
19
- import { BLUEPRINT_VERSION } from "./types.js";
19
+ import { BLUEPRINT_VERSION, PART_ROLES } from "./types.js";
20
20
  function isFiniteNumber(v) {
21
21
  return typeof v === 'number' && Number.isFinite(v);
22
22
  }
@@ -78,6 +78,36 @@ export function blueprintProblems(value) {
78
78
  }
79
79
  });
80
80
  });
81
+ /*
82
+ 자리와 문.
83
+
84
+ `groups` 와 달리 없어도 된다 — 능력을 안 지는 도형이 대부분이다. 있으면 형태를 본다.
85
+ 그리지 않는 것이라 **틀려도 화면에는 아무 일도 안 일어나고**, 물건을 앉히려는 순간에야
86
+ 프레임마다 조용히 실패한다. 등록에서 한 번 크게 실패하는 편이 낫다.
87
+ */
88
+ if (bp.anchors !== undefined) {
89
+ if (!Array.isArray(bp.anchors)) {
90
+ problems.push('anchors 가 배열이 아니다');
91
+ }
92
+ else {
93
+ bp.anchors.forEach((at, ai) => {
94
+ const where = `anchors[${ai}]`;
95
+ if (typeof at?.name !== 'string' || at.name.length === 0) {
96
+ problems.push(`${where}.name 이 없다 — 이름이 곧 slot·port 의 id 다`);
97
+ }
98
+ if (!Array.isArray(at?.roles) || at.roles.length === 0) {
99
+ problems.push(`${where}.roles 가 역할 하나 이상의 배열이 아니다`);
100
+ }
101
+ else if (at.roles.some(role => !PART_ROLES.includes(role))) {
102
+ problems.push(`${where}.roles 에 ${PART_ROLES.join(' · ')} 밖의 값이 있다`);
103
+ }
104
+ const t = at?.transform;
105
+ if (!t || !isFiniteVec3(t.position) || !isFiniteVec3(t.size)) {
106
+ problems.push(`${where}.transform 의 값이 온전하지 않다`);
107
+ }
108
+ });
109
+ }
110
+ }
81
111
  return problems;
82
112
  }
83
113
  //# sourceMappingURL=blueprint-shape.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"blueprint-shape.js","sourceRoot":"","sources":["../src/blueprint-shape.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blueprint-shape.js","sourceRoot":"","sources":["../src/blueprint-shape.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"blueprint.d.ts","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAK7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACrF,OAAO,EAQL,KAAK,eAAe,EACpB,KAAK,UAAU,EAGf,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,KAAK,IAAI,EACV,MAAM,YAAY,CAAA;AAEnB,+CAA+C;AAC/C,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;gBAE7B,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC;CAS7C;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CA0BpD;AAuBD,kDAAkD;AAElD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAuBxE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAKtE;AAmBD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,CAgFxD"}
1
+ {"version":3,"file":"blueprint.d.ts","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAK7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACrF,OAAO,EASL,KAAK,eAAe,EACpB,KAAK,UAAU,EAGf,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,KAAK,IAAI,EACV,MAAM,YAAY,CAAA;AAEnB,+CAA+C;AAC/C,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;gBAE7B,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC;CAS7C;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CA0BpD;AAuBD,kDAAkD;AAElD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAuBxE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAKtE;AA0CD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,CA6FxD"}
package/dist/blueprint.js CHANGED
@@ -162,6 +162,32 @@ export function stretchAxisOf(part) {
162
162
  return 'z';
163
163
  return 'y';
164
164
  }
165
+ /**
166
+ * 능력의 닻 — 그리지 않는 자리를 청사진으로 옮긴다.
167
+ *
168
+ * 기하를 안 만든다(`geometryKey`·`triangles` 없음). 자리 계산에 필요한 넷만 실어 나른다.
169
+ *
170
+ * 이름을 `anchorOf` 로 두지 않는다 — 그 이름은 `sizing.ts` 에서 「어느 **면**을 붙잡나」를 뜻한다.
171
+ * 한 형식 안에서 같은 이름이 두 가지를 뜻하면 읽는 사람이 매번 어느 쪽인지 가려야 한다.
172
+ */
173
+ function capabilityAnchorOf(part) {
174
+ const spec = part.capability;
175
+ const at = {
176
+ name: part.name,
177
+ roles: [...spec.roles],
178
+ transform: part.transform,
179
+ sizing: part.sizing ?? DEFAULT_SIZING
180
+ };
181
+ if (part.anchor !== undefined)
182
+ at.anchor = part.anchor;
183
+ if (part.repeat !== undefined)
184
+ at.repeat = part.repeat;
185
+ if (spec.accepts !== undefined)
186
+ at.accepts = spec.accepts;
187
+ if (spec.capacity !== undefined)
188
+ at.capacity = spec.capacity;
189
+ return at;
190
+ }
165
191
  function memberOf(part) {
166
192
  const member = {
167
193
  name: part.name,
@@ -200,11 +226,20 @@ export function compile(source) {
200
226
  // 어느 부품을 clip 이 움직이나. 묶음을 가르는 판단이 이걸 먼저 알아야 한다.
201
227
  const moving = animatedNames(animations);
202
228
  const labels = [];
229
+ const anchors = [];
203
230
  const byKey = new Map();
204
231
  for (const part of src.parts) {
205
232
  if (part.label !== undefined) {
206
233
  labels.push({ ...part.label, at: part.name });
207
234
  }
235
+ /*
236
+ 능력의 닻은 **그리는 목록에 넣지 않는다.** 그리지 않고 세지도 않는다 — `costOf` 가 보는 것이
237
+ `groups` 이므로, 여기서 가르면 자리가 삼각형·묶음·부품 수에 끼어들 길이 없다.
238
+ */
239
+ if (part.capability !== undefined) {
240
+ anchors.push(capabilityAnchorOf(part));
241
+ continue;
242
+ }
208
243
  if (moving.has(part.name)) {
209
244
  // clip 이 움직이는 부품은 단독 묶음이다 — 합치면 따로 움직일 수 없다
210
245
  const group = {
@@ -255,8 +290,11 @@ export function compile(source) {
255
290
  base: src.base,
256
291
  budget: { triangles, groups: groups.length },
257
292
  groups,
293
+ anchors,
258
294
  animations,
259
295
  labels,
296
+ /* 정본이 선언한 능력을 그대로 실어 나른다 — 판정은 씬이 한다. */
297
+ capabilities: src.capabilities ?? [],
260
298
  violations
261
299
  };
262
300
  if (src.anchor !== undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"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"}
package/dist/gate.d.ts CHANGED
@@ -12,7 +12,18 @@ export interface SizingFinding {
12
12
  code: 'sizing-splits' | 'sizing-loose';
13
13
  /** 어느 조합에서. `sizing-loose` 에는 없다. */
14
14
  way?: string;
15
+ /** 무엇을 쟀나. */
15
16
  message: string;
17
+ /**
18
+ * **왜 그것이 문제인가.** 잰 것만 말하면 읽는 사람은 「그래서?」에서 멈춘다 — 화면에
19
+ * 「1 조각이 2 조각으로 갈라진다」만 떴을 때 실제로 그랬다.
20
+ */
21
+ why: string;
22
+ /**
23
+ * **무엇을 바꾸면 되나.** 부품 이름과 값으로 말한다. 규칙 이름만 대면(「앵커를 맞추세요」)
24
+ * 어느 부품의 어느 축을 무엇으로 바꾸는지 다시 찾아야 한다.
25
+ */
26
+ how: string;
16
27
  /** 갈라져 나온 조각들의 부품 이름. 숫자가 아니라 자리를 말한다. */
17
28
  clumps: string[][];
18
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAmB,eAAe,EAAE,YAAY,EAAQ,MAAM,YAAY,CAAA;AAqB5F,8CAA8C;AAC9C,eAAO,MAAM,WAAW,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAA;CAAE,EAQ3F,CAAA;AAkED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,IAAI,EAAE,eAAe,GAAG,cAAc,CAAA;IACtC,qCAAqC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,0CAA0C;IAC1C,MAAM,EAAE,MAAM,EAAE,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,eAAe,EAAE,MAAM,GAAE,MAAe,GAAG,YAAY,CAkC9F;AAED,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,MAAe,GAAG,YAAY,CAE1F"}
1
+ {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAiB,eAAe,EAAE,YAAY,EAAQ,MAAM,YAAY,CAAA;AAqB1F,8CAA8C;AAC9C,eAAO,MAAM,WAAW,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAA;CAAE,EAQ3F,CAAA;AA0LD,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,IAAI,EAAE,eAAe,GAAG,cAAc,CAAA;IACtC,qCAAqC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,cAAc;IACd,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAA;IACX,0CAA0C;IAC1C,MAAM,EAAE,MAAM,EAAE,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,eAAe,EAAE,MAAM,GAAE,MAAe,GAAG,YAAY,CAuD9F;AAED,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,MAAe,GAAG,YAAY,CAE1F"}
package/dist/gate.js CHANGED
@@ -79,6 +79,105 @@ function clumpsOf(spans) {
79
79
  });
80
80
  return [...by.values()];
81
81
  }
82
+ /** 사람이 눈으로 보는 것 — 갈라짐은 언제나 이것이다. */
83
+ const WHY_SPLIT = '배치할 때 크기를 바꾸면 이 부품이 맞댄 면에서 떨어져 공중에 뜬 것처럼 보인다. 사람 눈에는 부서진 것이다';
84
+ /**
85
+ * 자리가 떨어지면 보이는 것은 **부품이 아니라 물건**이다.
86
+ *
87
+ * 자리는 그려지지 않으므로 화면에서 갈라진 자리 자체는 아무도 못 본다. 사람이 보는 것은 그
88
+ * 자리에 놓인 재고가 선반을 벗어나 허공에 뜬 모습이고, 그것을 「부품이 떨어진다」고 말하면
89
+ * 저작자는 어느 부품을 봐야 할지 찾지 못한다.
90
+ */
91
+ const WHY_SPLIT_SLOT = '배치할 때 크기를 바꾸면 물건을 놓는 자리가 그 면에서 떨어진다. 자리에 놓인 재고가 표면을 벗어나 공중에 뜬 것처럼 보인다';
92
+ /**
93
+ * 떨어져 나온 쪽에 자리가 있나.
94
+ *
95
+ * 자리가 **몸통에 붙어 있는데** 다른 부품이 떨어진 경우까지 자리 이야기를 하면, 저작자는 멀쩡한
96
+ * 자리를 들여다보게 된다. 가장 큰 덩어리를 몸통으로 보고, 그 밖에 있는 자리만 센다.
97
+ */
98
+ function slotCameOff(clumps, isSlot) {
99
+ if (clumps.length < 2 || isSlot.size === 0)
100
+ return false;
101
+ const body = clumps.reduce((big, clump) => (clump.length > big.length ? clump : big));
102
+ return clumps.some(clump => clump !== body && clump.some(name => isSlot.has(name)));
103
+ }
104
+ /** 어느 면에 붙어 있나 — 상자 가운데를 기준으로 그 부품이 놓인 쪽. */
105
+ function sideOf(member, axis) {
106
+ return member.transform.position[axis] >= 0 ? 'max' : 'min';
107
+ }
108
+ /**
109
+ * **무엇을 바꾸면 붙어 있나.**
110
+ *
111
+ * 갈라진 두 덩어리를 축마다 견줘 원인을 하나 고른다. 두 가지가 실제로 나온다.
112
+ *
113
+ * 붙잡는 면이 다르다 한쪽은 바닥에서 잰 거리를, 다른 쪽은 천장에서 잰 거리를 지킨다.
114
+ * 시그널타워가 3배에서 램프를 공중에 띄운 그 모양이다
115
+ * 자리만 비례로 간다 맞댄 쪽은 단면을 지키느라(`keepRound`) 덜 커지는데, 이 부품의 자리는
116
+ * 상자와 함께 온전히 커져 표면을 지나쳐 버린다
117
+ *
118
+ * 둘 다 아니면 규칙 이름을 대지 않고 **무엇을 재 보라고**만 말한다 — 원인을 지어내지 않는다.
119
+ */
120
+ function remedyFor(members, base, axes, clumps, scale) {
121
+ /*
122
+ **어느 쪽이 떨어져 나온 것인지는 크기로 정하지 않는다.**
123
+
124
+ 처음에는 「부품 수가 적은 덩어리가 떨어져 나온 쪽」으로 두었다. 둘 다 한 개일 때 그 기준이
125
+ 아무것도 정하지 못했고(시험이 그것을 잡았다), 원인이 있는데도 「같은 규칙을 따르는지 본다」로
126
+ 떨어졌다. 그래서 **양쪽으로 다 따져 보고 설명이 되는 쪽**을 고른다. 고칠 부품이 적은 쪽을
127
+ 먼저 시도하므로, 둘 다 설명되면 적은 수정을 권한다.
128
+ */
129
+ const candidates = clumps
130
+ .map((clump, at) => ({
131
+ broken: members.filter(member => clump.includes(member.name)),
132
+ main: members.filter(member => clumps.some((other, i) => i !== at && other.includes(member.name)))
133
+ }))
134
+ .filter(pair => pair.broken.length > 0 && pair.main.length > 0)
135
+ .sort((a, b) => a.broken.length - b.broken.length);
136
+ for (const { broken, main } of candidates) {
137
+ const named = broken.map(member => member.name).join('·');
138
+ /*
139
+ ① 붙잡는 면이 다르다 — 한쪽은 바닥에서, 다른 쪽은 천장에서 잰 거리를 지킨다.
140
+
141
+ **어느 쪽을 고쳐야 하는지는 말하지 않는다.** 게이트는 저작자의 뜻을 모른다 — 받침을 바닥에
142
+ 붙여 둔 것이 맞을 수도 있고, 램프를 천장에 매단 것이 맞을 수도 있다. 한쪽을 지목했더니
143
+ 「받침을 max 로 맞추라」는 틀린 조언이 나왔다(시험이 그것을 잡았다).
144
+
145
+ 그래서 양쪽을 이름과 값으로 말하고, 흔한 경우의 눈대중만 덧붙인다.
146
+ */
147
+ for (const axis of axes) {
148
+ const brokenAnchors = new Set(broken.map(member => anchorOf(member, base, axis)));
149
+ const mainAnchors = new Set(main.map(member => anchorOf(member, base, axis)));
150
+ const mixed = [...brokenAnchors].filter(rule => !mainAnchors.has(rule));
151
+ if (mixed.length && mainAnchors.size === 1) {
152
+ const [theirs] = [...mainAnchors];
153
+ const others = main.map(member => member.name).join('·');
154
+ return (`${named} 의 anchor.${axis} 는 ${mixed.join('·')} 이고 ${others} 는 ${theirs} 다 — ` +
155
+ `한 축에서 서로 다른 면을 붙잡으면 늘어날 때 벌어진다. 둘을 같은 값으로 맞춘다` +
156
+ (axis === 'y' ? ' (바닥에 서는 것이면 min 이다)' : ''));
157
+ }
158
+ }
159
+ /*
160
+ ② 붙잡는 면이 같은데도 갈라진다 — 맞댄 쪽의 **크기**가 상자만큼 못 커지는 경우다(단면 유지).
161
+ 그 값을 그대로 보여 준다. 「덜 커진다」는 말보다 1.41배와 2배를 나란히 두는 것이 빠르다.
162
+ */
163
+ for (const axis of axes) {
164
+ const grow = scale[axis];
165
+ const slowest = main
166
+ .map(member => ({ member, net: sizingScale(member, scale, base)[axis] * grow }))
167
+ .sort((a, b) => a.net - b.net)[0];
168
+ if (slowest && slowest.net < grow - 0.01) {
169
+ const face = sideOf(broken[0], axis);
170
+ return (
171
+ /* 「쪽은」으로 받는다 — 부품 이름은 영문 식별자라 은/는 을 고를 수 없다. */
172
+ `맞댄 ${slowest.member.name} 쪽은 단면을 지키느라 ${axis} 로 ${slowest.net.toFixed(2)}배만 커지는데 ` +
173
+ `${named} 의 자리는 ${grow}배로 간다. ${named} 의 anchor.${axis} 를 ${face} 로 두면 그 면에서 잰 거리를 지켜 붙어 있는다`);
174
+ }
175
+ }
176
+ }
177
+ /* 둘 다 아니면 규칙 이름을 대지 않는다 — 원인을 지어내지 않고 무엇을 재 보라고만 말한다. */
178
+ const all = clumps.map(clump => [...clump].sort().join('+')).join(' | ');
179
+ return `${all} 쪽이 ${axes.join('·')} 에서 같은 규칙을 따르는지 본다`;
180
+ }
82
181
  /**
83
182
  * 크기를 바꿔 봐도 한 덩어리인가.
84
183
  *
@@ -87,16 +186,33 @@ function clumpsOf(spans) {
87
186
  * 보기 때문이다.
88
187
  */
89
188
  export function sizingReport(blueprint, factor = FACTOR) {
90
- const members = blueprint.groups.flatMap((group) => group.members);
189
+ const drawn = blueprint.groups.flatMap((group) => group.members);
91
190
  const findings = [];
92
- if (!members.length) {
191
+ if (!drawn.length) {
93
192
  return { findings, clumpsAtOne: 0, factor };
94
193
  }
194
+ /*
195
+ **자리도 함께 세운다. 문은 아니다.**
196
+
197
+ 자리(slot)는 안에 있다 — 물건이 앉을 면 위다. 그 면이 커질 때 자리가 따라가지 않으면 재고가
198
+ 허공에 뜬다. 그리는 부품이 떨어지는 것과 같은 결함이고, 자리는 그려지지 않으니 **저작자가
199
+ 화면을 봐서는 영영 모른다.** 게이트가 아니면 잡을 자리가 없다.
200
+
201
+ 문(port)은 밖이다. 몸에서 떨어진 자리에 두는 것이 정상이라, 함께 세면 문 하나 있는 도형마다
202
+ 「1배에서 이미 두 조각」이 뜬다. 옳은 저작을 결함이라 부르는 검사는 곧 아무도 안 읽는다.
203
+ */
204
+ const slots = (blueprint.anchors ?? []).filter(at => at.roles.includes('slot'));
205
+ const members = [...drawn, ...slots];
206
+ const isSlot = new Set(slots.map(at => at.name));
95
207
  const one = clumpsOf(spansAt(members, blueprint.base, { x: 1, y: 1, z: 1 }));
96
208
  if (one.length > 1) {
97
209
  findings.push({
98
210
  code: 'sizing-loose',
99
211
  message: `1배에서 이미 ${one.length} 조각이다. 크기를 바꾸기 전에 이미 떨어져 있다`,
212
+ why: slotCameOff(one, isSlot)
213
+ ? '물건이 앉는 자리가 놓일 면에서 이미 떨어져 있다. 1배에서도 재고가 떠 보이고, 크기를 바꾸면 그 틈이 함께 커진다'
214
+ : '붙어 있어야 할 부품들이 저작 자체에서 떨어져 있다. 크기를 바꾸면 그 틈이 함께 커진다',
215
+ how: `${one.map(clump => [...clump].sort().join('+')).join(' · ')} 가 서로 닿도록 자리나 크기를 맞춘다. 일부러 띄운 것이면 그대로 두어도 발행은 된다`,
100
216
  clumps: one
101
217
  });
102
218
  }
@@ -110,6 +226,9 @@ export function sizingReport(blueprint, factor = FACTOR) {
110
226
  code: 'sizing-splits',
111
227
  way: way.name,
112
228
  message: `${way.name} 축을 ${factor}배로 하면 ${one.length} 조각이 ${grown.length} 조각으로 갈라진다`,
229
+ /* 떨어져 나온 쪽이 자리이면 사람이 보는 것은 부품이 아니라 그 위의 물건이다. */
230
+ why: slotCameOff(grown, isSlot) ? WHY_SPLIT_SLOT : WHY_SPLIT,
231
+ how: remedyFor(members, blueprint.base, way.axes, grown, scale),
113
232
  clumps: grown
114
233
  });
115
234
  }
package/dist/gate.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"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"}
@@ -19,11 +19,23 @@ export declare function animatedNames(clips: readonly AnimationClip[] | undefine
19
19
  * is the fault this whole file was written to close.
20
20
  */
21
21
  export declare function standsAlone(part: FigurePart, animated?: ReadonlySet<string>): boolean;
22
+ /**
23
+ * Does this part get drawn?
24
+ *
25
+ * A part carrying a `capability` spec is a **place** -- a slot something sits
26
+ * in, a port something enters by. It has no material and no geometry, and
27
+ * `compile` routes it to `anchors` rather than to a group.
28
+ *
29
+ * Every count of what drawing costs has to skip it. Left in, it does not merely
30
+ * inflate a number: `groupKeyOf` reads a material that is not there and throws
31
+ * on a source the format calls valid.
32
+ */
33
+ export declare function isDrawn(part: FigurePart): boolean;
22
34
  /**
23
35
  * The merge groups a set of parts produces.
24
36
  *
25
37
  * Each entry is the parts that end up in one merged geometry. Parts that stand
26
- * alone get an entry of their own.
38
+ * alone get an entry of their own. Parts that are not drawn make no entry.
27
39
  */
28
40
  export declare function groupsOf(parts: readonly FigurePart[], animated?: ReadonlySet<string>): FigurePart[][];
29
41
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../src/grouping.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjE;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAQ9F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,GAAE,WAAW,CAAC,MAAM,CAAS,GAAG,OAAO,CAI5F;AAID;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,QAAQ,GAAE,WAAW,CAAC,MAAM,CAAS,GAAG,UAAU,EAAE,EAAE,CAwB5G;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAGpD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CASlE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,IAAI,EAAE,IAAI,EACV,QAAQ,GAAE,WAAW,CAAC,MAAM,CAAS,GACpC,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAI9E"}
1
+ {"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../src/grouping.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjE;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAQ9F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,GAAE,WAAW,CAAC,MAAM,CAAS,GAAG,OAAO,CAI5F;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEjD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,QAAQ,GAAE,WAAW,CAAC,MAAM,CAAS,GAAG,UAAU,EAAE,EAAE,CA0B5G;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAGpD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CASlE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,IAAI,EAAE,IAAI,EACV,QAAQ,GAAE,WAAW,CAAC,MAAM,CAAS,GACpC,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAI9E"}
package/dist/grouping.js CHANGED
@@ -27,6 +27,9 @@
27
27
  *
28
28
  * The first two make groups. The third multiplies inside a group, which is why
29
29
  * `drawCallsOf` is not simply `groupsOf().length`.
30
+ *
31
+ * Before any of that, a part that is not drawn at all -- a capability anchor --
32
+ * drops out. See `isDrawn`.
30
33
  */
31
34
  import { groupKeyOf } from "./keys.js";
32
35
  import { CURVED_PRIMITIVES, DEFAULT_SIZING, REPEAT_LIMIT } from "./types.js";
@@ -66,16 +69,32 @@ export function standsAlone(part, animated = EMPTY) {
66
69
  return keepsRound(part);
67
70
  }
68
71
  const EMPTY = new Set();
72
+ /**
73
+ * Does this part get drawn?
74
+ *
75
+ * A part carrying a `capability` spec is a **place** -- a slot something sits
76
+ * in, a port something enters by. It has no material and no geometry, and
77
+ * `compile` routes it to `anchors` rather than to a group.
78
+ *
79
+ * Every count of what drawing costs has to skip it. Left in, it does not merely
80
+ * inflate a number: `groupKeyOf` reads a material that is not there and throws
81
+ * on a source the format calls valid.
82
+ */
83
+ export function isDrawn(part) {
84
+ return part.capability === undefined;
85
+ }
69
86
  /**
70
87
  * The merge groups a set of parts produces.
71
88
  *
72
89
  * Each entry is the parts that end up in one merged geometry. Parts that stand
73
- * alone get an entry of their own.
90
+ * alone get an entry of their own. Parts that are not drawn make no entry.
74
91
  */
75
92
  export function groupsOf(parts, animated = EMPTY) {
76
93
  const groups = [];
77
94
  const byKey = new Map();
78
95
  for (const part of parts) {
96
+ if (!isDrawn(part))
97
+ continue;
79
98
  if (standsAlone(part, animated)) {
80
99
  groups.push([part]);
81
100
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"grouping.js","sourceRoot":"","sources":["../src/grouping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grouping.js","sourceRoot":"","sources":["../src/grouping.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAG5E;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAA2C;IACvE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAC/B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,OAAO,OAAO,EAAE,MAAM,KAAK,QAAQ;gBAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACpE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,IAAgB,EAAE,WAAgC,KAAK;IACjF,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACxC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IAC5D,OAAO,UAAU,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,KAAK,GAAwB,IAAI,GAAG,EAAE,CAAA;AAE5C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CAAC,IAAgB;IACtC,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS,CAAA;AACtC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,KAA4B,EAAE,WAAgC,KAAK;IAC1F,MAAM,MAAM,GAAmB,EAAE,CAAA;IACjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAA;IAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,SAAQ;QAE5B,IAAI,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;YACnB,SAAQ;QACV,CAAC;QAED,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAE7B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjB,SAAQ;QACV,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,CAAA;QACtB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACtB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAA;IAC7D,OAAO,IAAI,CAAC,SAAS,KAAK,KAAK,CAAA;AACjC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,IAAgB,EAAE,IAAU;IACxD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAA;IAEtD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;IACnC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QAAE,OAAO,CAAC,CAAA;IAEpD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAE/E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,KAA4B,EAC5B,IAAU,EACV,WAAgC,KAAK;IAErC,OAAO,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AAClG,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAA4B,EAAE,IAAU;IACpE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEtD,OAAO,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7C,CAAC"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,6 @@ export { compile, FigureCompileError, geometryKeyOf, materialKeyOf, rotatedExten
4
4
  export { costOf, describeCost, scoreOf, type FigureBudgetUse, type FigureCost, type FigureCostAt, type FigureGrade, type FigureScore } from './cost.ts';
5
5
  export { costCurve, costCurveSvg, type CostCurveOptions, type CostCurvePoint } from './cost-chart.ts';
6
6
  export { blueprintProblems } from './blueprint-shape.ts';
7
- export { anchorOf, needsOwnMesh, repeatOffset, repeatPlan, REPEAT_LIMIT, rotatedExtent, sizingPosition, sizingScale, stretchAxis, type Axis as SizingAxis, type InstanceScale } from './sizing.ts';
7
+ export { anchorOf, anchorOfPart, needsOwnMesh, repeatOffset, repeatPlan, REPEAT_LIMIT, rotatedExtent, sizingPosition, sizingScale, stretchAxis, type Axis as SizingAxis, type InstanceScale } from './sizing.ts';
8
8
  export { sizingReport, sizingReportOf, SIZING_WAYS, type SizingFinding, type SizingReport } from './gate.ts';
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,OAAO,EACP,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAMxD,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,IAAI,IAAI,UAAU,EACvB,KAAK,aAAa,EACnB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,OAAO,EACP,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAMxD,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,IAAI,IAAI,UAAU,EACvB,KAAK,aAAa,EACnB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAA"}
package/dist/index.js CHANGED
@@ -20,7 +20,7 @@ export { blueprintProblems } from "./blueprint-shape.js";
20
20
  * 크기 반응 규칙 — **앵커의 뜻을 아는 자리.** things-scene 에서 옮겨 왔다(2026-09-09). 그리는 쪽과
21
21
  * 발행 게이트가 같은 계산을 봐야 화면과 판정이 어긋나지 않는다.
22
22
  */
23
- export { anchorOf, needsOwnMesh, repeatOffset, repeatPlan, REPEAT_LIMIT, rotatedExtent, sizingPosition, sizingScale, stretchAxis } from "./sizing.js";
23
+ export { anchorOf, anchorOfPart, needsOwnMesh, repeatOffset, repeatPlan, REPEAT_LIMIT, rotatedExtent, sizingPosition, sizingScale, stretchAxis } from "./sizing.js";
24
24
  /* 발행해도 되나 — 크기를 바꿔 봐야 아는 것들. */
25
25
  export { sizingReport, sizingReportOf, SIZING_WAYS } from "./gate.js";
26
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAuB,MAAM,eAAe,CAAA;AAC7D,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,OAAO,EAMR,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,EAAE,YAAY,EAA8C,MAAM,iBAAiB,CAAA;AACrG,iDAAiD;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD;;;GAGG;AACH,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EAGZ,MAAM,aAAa,CAAA;AAEpB,gCAAgC;AAChC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAyC,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAuB,MAAM,eAAe,CAAA;AAC7D,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,OAAO,EAMR,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,EAAE,YAAY,EAA8C,MAAM,iBAAiB,CAAA;AACrG,iDAAiD;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD;;;GAGG;AACH,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EAGZ,MAAM,aAAa,CAAA;AAEpB,gCAAgC;AAChC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAyC,MAAM,WAAW,CAAA"}
package/dist/sizing.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { AnchorRule, Axis, BlueprintMember, Vec3 } from './types.ts';
1
+ import type { AnchorRule, Axis, SizingSubject, FigurePart, Vec3 } from './types.ts';
2
2
  export type { Axis };
3
3
  /**
4
4
  * 인스턴스 크기가 바뀔 때 부품이 어떻게 반응하나.
@@ -70,7 +70,18 @@ export type { Axis };
70
70
  * 세는 것은 **부품의 면에서 상자의 면까지**이지 중심에서가 아니다. 중심으로 재면
71
71
  * 굵은 부품과 얇은 부품이 같은 자리에서 다른 답을 낸다.
72
72
  */
73
- export declare function anchorOf(member: BlueprintMember, base: Vec3, axis: Axis): AnchorRule;
73
+ /**
74
+ * 저작면이 묻는 자리 — **부품 하나로 답한다.**
75
+ *
76
+ * `anchorOf` 는 `SizingSubject` 를 받는다. 그런데 이 값을 **보여 줘야 하는 곳**은 저작면이고,
77
+ * 거기에는 청사진이 없다(편집 중인 `FigurePart` 만 있다). 그 자리가 규칙을 다시 쓰면 화면이
78
+ * 말하는 붙잡는 면과 실제로 그려지는 것이 갈린다 — 규칙은 한 벌이어야 한다.
79
+ *
80
+ * 부품은 `sizing` 하나만 채우면 그 모양이 된다. 청사진에만 있는 칸(`geometryKey` · `triangles`)은
81
+ * 셈이 보지 않는다 — 그 사실이 어긋나면 아래 시험이 깨진다(`gate.test.ts`: 부품과 청사진이 같은 답).
82
+ */
83
+ export declare function anchorOfPart(part: FigurePart, base: Vec3, axis: Axis): AnchorRule;
84
+ export declare function anchorOf(member: SizingSubject, base: Vec3, axis: Axis): AnchorRule;
74
85
  /** 인스턴스 배율. `bounds ÷ base` 다. */
75
86
  export interface InstanceScale {
76
87
  x: number;
@@ -91,7 +102,7 @@ export interface InstanceScale {
91
102
  * `standsAlone` 이 **같은 답**을 내야 한다. 갈리면 성숙도가 세는 수와 화면이 그리는
92
103
  * 수가 달라진다.
93
104
  */
94
- export declare function needsOwnMesh(member: BlueprintMember): boolean;
105
+ export declare function needsOwnMesh(member: SizingSubject): boolean;
95
106
  /**
96
107
  * 회전까지 반영한 부품의 축별 크기.
97
108
  *
@@ -102,14 +113,14 @@ export declare function needsOwnMesh(member: BlueprintMember): boolean;
102
113
  * figure-model 의 `rotatedExtentOf` 와 같은 식이다. 그쪽이 정본이고 여기는 읽는 쪽의
103
114
  * 사본이다 — 이 패키지는 figure-model 에 의존하지 않는다(`figure-blueprint.ts` 참고).
104
115
  */
105
- export declare function rotatedExtent(member: BlueprintMember): Vec3;
116
+ export declare function rotatedExtent(member: SizingSubject): Vec3;
106
117
  /**
107
118
  * `stretch` 일 때 늘어나는 축 — **가장 길게 뻗은 축**이다.
108
119
  *
109
120
  * 형식에 축을 적는 자리가 없어서 크기에서 읽는다. 프레임 · 벨트 · 레일이 전부 "길어서
110
121
  * 그 물건인 것"이라 이 규칙과 맞는다. 같으면 x → z → y 순으로 정한다.
111
122
  */
112
- export declare function stretchAxis(member: BlueprintMember): Axis;
123
+ export declare function stretchAxis(member: SizingSubject): Axis;
113
124
  /**
114
125
  * 부품 mesh 에 걸 배율 — 부모가 건 인스턴스 배율을 **어디까지 되돌릴까**.
115
126
  *
@@ -117,7 +128,7 @@ export declare function stretchAxis(member: BlueprintMember): Axis;
117
128
  *
118
129
  * `repeat` 는 부품 자체의 크기를 지킨다 — 늘어나는 것은 개수다.
119
130
  */
120
- export declare function sizingScale(member: BlueprintMember, scale: InstanceScale, base: Vec3): Vec3;
131
+ export declare function sizingScale(member: SizingSubject, scale: InstanceScale, base: Vec3): Vec3;
121
132
  /**
122
133
  * 부품을 놓을 자리 — **부모가 배율을 걸기 전의 자리**다.
123
134
  *
@@ -130,7 +141,7 @@ export declare function sizingScale(member: BlueprintMember, scale: InstanceScal
130
141
  * max 위 면에서 잰 거리를 지킨다
131
142
  * stretch 양쪽을 다 지키므로 자리는 두 끝의 가운데다
132
143
  */
133
- export declare function sizingPosition(member: BlueprintMember, scale: InstanceScale, base: Vec3): Vec3;
144
+ export declare function sizingPosition(member: SizingSubject, scale: InstanceScale, base: Vec3): Vec3;
134
145
  /**
135
146
  * `repeat` 를 몇 개로 펼치나.
136
147
  *
@@ -156,7 +167,7 @@ export declare function sizingPosition(member: BlueprintMember, scale: InstanceS
156
167
  *
157
168
  * 롤러는 일정한 간격으로 전 구간에 깔린다. 길이가 두 배면 롤러도 두 배다.
158
169
  */
159
- export declare function repeatPlan(member: BlueprintMember, scale: InstanceScale, base: Vec3): {
170
+ export declare function repeatPlan(member: SizingSubject, scale: InstanceScale, base: Vec3): {
160
171
  axis: Axis;
161
172
  count: number;
162
173
  pitch: number;
@@ -1 +1 @@
1
- {"version":3,"file":"sizing.d.ts","sourceRoot":"","sources":["../src/sizing.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEzE,YAAY,EAAE,IAAI,EAAE,CAAA;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,GACT,UAAU,CAYZ;AAuCD,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAGD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAE7D;AAeD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAsB3D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAKzD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,IAAI,GACT,IAAI,CAkDN;AAiHD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,IAAI,GACT,IAAI,CA4CN;AASD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,IAAI,GACT;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwBrD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,MAAM,CAAA;AAE/B;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhF"}
1
+ {"version":3,"file":"sizing.d.ts","sourceRoot":"","sources":["../src/sizing.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEnF,YAAY,EAAE,IAAI,EAAE,CAAA;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH;;;;;;;;;;;;;;;GAeG;AACH;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,UAAU,CAOjF;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,GACT,UAAU,CAYZ;AAuCD,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAGD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAE3D;AAeD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAsBzD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAKvD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,IAAI,GACT,IAAI,CAkDN;AAiHD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,IAAI,GACT,IAAI,CA4CN;AASD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,IAAI,GACT;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwBrD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,MAAM,CAAA;AAE/B;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhF"}