@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.
- package/dist/blueprint-shape.d.ts.map +1 -1
- package/dist/blueprint-shape.js +31 -1
- package/dist/blueprint-shape.js.map +1 -1
- package/dist/blueprint.d.ts.map +1 -1
- package/dist/blueprint.js +38 -0
- package/dist/blueprint.js.map +1 -1
- package/dist/gate.d.ts +11 -0
- package/dist/gate.d.ts.map +1 -1
- package/dist/gate.js +121 -2
- package/dist/gate.js.map +1 -1
- package/dist/grouping.d.ts +13 -1
- package/dist/grouping.d.ts.map +1 -1
- package/dist/grouping.js +20 -1
- package/dist/grouping.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/sizing.d.ts +19 -8
- package/dist/sizing.d.ts.map +1 -1
- package/dist/sizing.js +31 -0
- package/dist/sizing.js.map +1 -1
- package/dist/types.d.ts +124 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +19 -1
- package/dist/types.js.map +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +110 -5
- package/dist/validate.js.map +1 -1
- package/docs/validation.md +38 -0
- package/package.json +1 -1
|
@@ -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,
|
|
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"}
|
package/dist/blueprint-shape.js
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"blueprint-shape.js","sourceRoot":"","sources":["../src/blueprint-shape.ts"],"names":[],"mappings":"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"}
|
package/dist/blueprint.d.ts.map
CHANGED
|
@@ -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,
|
|
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)
|
package/dist/blueprint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,QAAQ,EAAuB,MAAM,eAAe,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAClF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE1D,oDAAoD;AACpD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACrF,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,
|
|
1
|
+
{"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,QAAQ,EAAuB,MAAM,eAAe,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAClF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE1D,oDAAoD;AACpD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACrF,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,EAahB,MAAM,YAAY,CAAA;AAEnB,+CAA+C;AAC/C,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,MAAM,CAA0B;IAEzC,YAAY,MAAgC;QAC1C,MAAM,IAAI,GAAG,MAAM;aAChB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aAC/C,IAAI,CAAC,KAAK,CAAC,CAAA;QACd,KAAK,CAAC,mBAAmB,MAAM,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAA;QACnD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;IAE/B,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,EAAE,CAAA;QACX,KAAK,UAAU;YACb,OAAO,CAAC,GAAG,GAAG,CAAA;QAChB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;YAC1C,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1B,CAAC;QACD,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,CAAA;YACjC,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAE7B,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;YAC7B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YACxB,sCAAsC;YACtC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC/D,OAAO,IAAI,GAAG,KAAK,CAAA;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,IAAgB;IACvC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,CAAA;IACtE,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5D,CAAC;AAED,yDAAyD;AACzD,SAAS,aAAa,CAAC,IAAgB;IACrC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,CAAA;IAEtE,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,CAAA;IACxE,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACpD,CAAC;AAED,kDAAkD;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAkC;IAChE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;IACzC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAA;IAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAA;IACzB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;IAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;IAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;IAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;IAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;IAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;IAE5C,iBAAiB;IACjB,MAAM,CAAC,GAAG;QACR,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QACvB,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QAC3D,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;KAC3D,CAAA;IAED,MAAM,KAAK,GAAG,CAAC,GAAa,EAAE,EAAE,CAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IAEtF,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,CAAA;AAC9D,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAAC,IAAkC;IAC9D,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IACzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,CAAA;IAChC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,CAAA;IACtB,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,kBAAkB,CAAC,IAAgB;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAW,CAAA;IAC7B,MAAM,EAAE,GAAoB;QAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACtB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc;KACtC,CAAA;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IACtD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;IACzD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC5D,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,IAAgB;IAChC,MAAM,MAAM,GAAoB;QAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC;QAChC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc;QACrC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC;KAC7B,CAAA;IACD,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAChG,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;IACnE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC1D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IACvD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,MAAe;IACrC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC/C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE3D,MAAM,GAAG,GAAG,MAAsB,CAAA;IAElC,MAAM,MAAM,GAAqB,EAAE,CAAA;IACnC,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAoB,CAAA;IAC5D,gDAAgD;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;IACxC,MAAM,MAAM,GAAqB,EAAE,CAAA;IACnC,MAAM,OAAO,GAAsB,EAAE,CAAA;IACrC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAA;IAE/C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAC/C,CAAC;QAED;;;UAGE;QACF,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAA;YACtC,SAAQ;QACV,CAAC;QAED,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,4CAA4C;YAC5C,MAAM,KAAK,GAAmB;gBAC5B,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC;gBAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aAC1B,CAAA;YACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;gBAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;YAC3E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAClB,SAAQ;QACV,CAAC;QAED,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAC9B,oDAAoD;YACpD,MAAM,KAAK,GAAmB;gBAC5B,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC;gBAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aAC1B,CAAA;YACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;gBAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;YAC3E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAClB,SAAQ;QACV,CAAC;QAED,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC/B,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;YACrC,SAAQ;QACV,CAAC;QAED,MAAM,KAAK,GAAmB;YAC5B,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SAC1B,CAAA;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;QAC3E,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACrB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpB,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAEpG,MAAM,SAAS,GAAoB;QACjC,OAAO,EAAE,iBAAiB;QAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAC5C,MAAM;QACN,OAAO;QACP,UAAU;QACV,MAAM;QACN,yCAAyC;QACzC,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QACpC,UAAU;KACX,CAAA;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;QAAE,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;IAC3D,+CAA+C;IAC/C,YAAY;IACZ,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;QAAE,SAAS,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAA;IAE1E,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
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
|
}
|
package/dist/gate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,
|
|
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
|
|
189
|
+
const drawn = blueprint.groups.flatMap((group) => group.members);
|
|
91
190
|
const findings = [];
|
|
92
|
-
if (!
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAInE;;;;;;;;;;;;;;;;;GAiBG;AAEH,8CAA8C;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAyE;IAC/F,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE;IAC1B,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE;IAC1B,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE;IAC1B,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;IACjC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;IACjC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;IACjC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;CACzC,CAAA;AAED,iDAAiD;AACjD,MAAM,MAAM,GAAG,CAAC,CAAA;AAEhB;;;;GAIG;AACH,MAAM,IAAI,GAAG,GAAG,CAAA;AAEhB,MAAM,IAAI,GAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAO7C,2BAA2B;AAC3B,SAAS,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"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"}
|
package/dist/grouping.d.ts
CHANGED
|
@@ -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
|
/**
|
package/dist/grouping.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../src/grouping.ts"],"names":[],"mappings":"
|
|
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;
|
package/dist/grouping.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping.js","sourceRoot":"","sources":["../src/grouping.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"grouping.js","sourceRoot":"","sources":["../src/grouping.ts"],"names":[],"mappings":"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"}
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,YAAY,CAAA;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,
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
170
|
+
export declare function repeatPlan(member: SizingSubject, scale: InstanceScale, base: Vec3): {
|
|
160
171
|
axis: Axis;
|
|
161
172
|
count: number;
|
|
162
173
|
pitch: number;
|
package/dist/sizing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sizing.d.ts","sourceRoot":"","sources":["../src/sizing.ts"],"names":[],"mappings":"
|
|
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"}
|