@hatiolab/figure-model 0.1.12 → 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 +47 -0
- package/dist/gate.d.ts.map +1 -0
- package/dist/gate.js +242 -0
- package/dist/gate.js.map +1 -0
- 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 +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/sizing.d.ts +190 -0
- package/dist/sizing.d.ts.map +1 -0
- package/dist/sizing.js +506 -0
- package/dist/sizing.js.map +1 -0
- 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":"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"}
|
package/dist/gate.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Axis, FigureBlueprint, FigureSource } from './types.ts';
|
|
2
|
+
/** 크기를 바꿔 보는 일곱 가지. 축 하나씩 셋, 둘씩 셋, 셋 한꺼번에. */
|
|
3
|
+
export declare const SIZING_WAYS: readonly {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly axes: readonly Axis[];
|
|
6
|
+
}[];
|
|
7
|
+
export interface SizingFinding {
|
|
8
|
+
/**
|
|
9
|
+
* `sizing-splits` 이 조합에서 조각이 갈라진다 — 발행을 막는다
|
|
10
|
+
* `sizing-loose` 1배에서 이미 여러 조각이다 — 알리기만 한다
|
|
11
|
+
*/
|
|
12
|
+
code: 'sizing-splits' | 'sizing-loose';
|
|
13
|
+
/** 어느 조합에서. `sizing-loose` 에는 없다. */
|
|
14
|
+
way?: string;
|
|
15
|
+
/** 무엇을 쟀나. */
|
|
16
|
+
message: string;
|
|
17
|
+
/**
|
|
18
|
+
* **왜 그것이 문제인가.** 잰 것만 말하면 읽는 사람은 「그래서?」에서 멈춘다 — 화면에
|
|
19
|
+
* 「1 조각이 2 조각으로 갈라진다」만 떴을 때 실제로 그랬다.
|
|
20
|
+
*/
|
|
21
|
+
why: string;
|
|
22
|
+
/**
|
|
23
|
+
* **무엇을 바꾸면 되나.** 부품 이름과 값으로 말한다. 규칙 이름만 대면(「앵커를 맞추세요」)
|
|
24
|
+
* 어느 부품의 어느 축을 무엇으로 바꾸는지 다시 찾아야 한다.
|
|
25
|
+
*/
|
|
26
|
+
how: string;
|
|
27
|
+
/** 갈라져 나온 조각들의 부품 이름. 숫자가 아니라 자리를 말한다. */
|
|
28
|
+
clumps: string[][];
|
|
29
|
+
}
|
|
30
|
+
export interface SizingReport {
|
|
31
|
+
findings: SizingFinding[];
|
|
32
|
+
/** 1배에서의 덩어리 수. 1 이면 붙어 있는 한 덩어리다. */
|
|
33
|
+
clumpsAtOne: number;
|
|
34
|
+
/** 몇 배로 재봤나. */
|
|
35
|
+
factor: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 크기를 바꿔 봐도 한 덩어리인가.
|
|
39
|
+
*
|
|
40
|
+
* 1배에서 이미 갈라져 있으면 그것을 먼저 말하고(`sizing-loose`), 그 뒤 일곱 조합에서 **덩어리가
|
|
41
|
+
* 늘어나는** 경우를 찾는다. 늘어나지 않으면 조용하다 — 부품이 움직였는지가 아니라 **떨어졌는지**를
|
|
42
|
+
* 보기 때문이다.
|
|
43
|
+
*/
|
|
44
|
+
export declare function sizingReport(blueprint: FigureBlueprint, factor?: number): SizingReport;
|
|
45
|
+
/** 정본 문자열이 아니라 객체를 받는 쪽. 부르는 자리가 이미 컴파일해 두었으면 위 함수를 쓴다. */
|
|
46
|
+
export declare function sizingReportOf(source: FigureSource, factor?: number): SizingReport;
|
|
47
|
+
//# sourceMappingURL=gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { compile } from "./blueprint.js";
|
|
2
|
+
import { rotatedExtentOf } from "./blueprint.js";
|
|
3
|
+
import { anchorOf, sizingPosition, sizingScale } from "./sizing.js";
|
|
4
|
+
/*
|
|
5
|
+
* 발행해도 되나 — **크기를 바꿔 봐야 알 수 있는 것들.**
|
|
6
|
+
*
|
|
7
|
+
* ## 왜 형식이 이것을 재나
|
|
8
|
+
*
|
|
9
|
+
* 이 검사는 브라우저 하네스에만 있었다(things-factory `test/browser/check-figure-scaling.mjs`). 그
|
|
10
|
+
* 자리에서는 사람이 돌릴 때만 돌고, 서버는 같은 질문에 답할 방법이 없어 **아무 검사 없이 발행이
|
|
11
|
+
* 되었다.** 앵커의 뜻을 아는 것이 형식이므로(`sizing.ts`), 그 뜻이 실제로 성립하는지도 형식이 잰다.
|
|
12
|
+
*
|
|
13
|
+
* ## 무엇을 재나
|
|
14
|
+
*
|
|
15
|
+
* **덩어리가 늘어나지 않는가.** 도형은 서로 닿아 한 덩어리여야 한다. 크기를 바꿨을 때 조각이 갈라
|
|
16
|
+
* 지면 사람 눈에 「부서졌다」로 보인다 — 시그널타워를 3배로 세우니 램프가 기둥 위 공중에 뜬 것이
|
|
17
|
+
* 그것이었고, 앵커 규칙이 생긴 이유다.
|
|
18
|
+
*
|
|
19
|
+
* 축을 하나씩만 늘리는 것으로는 부족하다. x 만 늘려서 멀쩡한 것이 x·z 를 함께 늘리면 갈라진다 —
|
|
20
|
+
* `aspect-` 처럼 다른 축을 보는 규칙이 있어서다. 그래서 **일곱 조합**을 전부 본다.
|
|
21
|
+
*/
|
|
22
|
+
/** 크기를 바꿔 보는 일곱 가지. 축 하나씩 셋, 둘씩 셋, 셋 한꺼번에. */
|
|
23
|
+
export const SIZING_WAYS = [
|
|
24
|
+
{ name: 'x', axes: ['x'] },
|
|
25
|
+
{ name: 'y', axes: ['y'] },
|
|
26
|
+
{ name: 'z', axes: ['z'] },
|
|
27
|
+
{ name: 'x-y', axes: ['x', 'y'] },
|
|
28
|
+
{ name: 'x-z', axes: ['x', 'z'] },
|
|
29
|
+
{ name: 'y-z', axes: ['y', 'z'] },
|
|
30
|
+
{ name: 'x-y-z', axes: ['x', 'y', 'z'] }
|
|
31
|
+
];
|
|
32
|
+
/** 몇 배로 재나. 2배면 대개 드러나고, 3배는 같은 자리를 더 크게 벌린다. */
|
|
33
|
+
const FACTOR = 2;
|
|
34
|
+
/**
|
|
35
|
+
* 맞대어 놓은 면은 정확히 0 만큼 떨어져 있다. 부동소수 나머지를 「닿았다」로 친다.
|
|
36
|
+
*
|
|
37
|
+
* 이 값을 키우면 실제로 떨어진 것도 붙은 것으로 읽히고, 줄이면 맞댄 면이 갈라진 것으로 읽힌다.
|
|
38
|
+
*/
|
|
39
|
+
const SKIN = 0.5;
|
|
40
|
+
const AXES = ['x', 'y', 'z'];
|
|
41
|
+
/** 이 배율에서 부품들이 차지하는 구간. */
|
|
42
|
+
function spansAt(members, base, scale) {
|
|
43
|
+
return members.map(member => {
|
|
44
|
+
/*
|
|
45
|
+
**배율을 한 번만 준다.** 축마다 따로 주면 `aspect-` 처럼 다른 축을 보는 규칙이 자기 축만 늘어난
|
|
46
|
+
세상을 보게 되어, 실제로 그려지는 것과 다른 답이 나온다.
|
|
47
|
+
*/
|
|
48
|
+
const at = sizingPosition(member, scale, base);
|
|
49
|
+
const sized = sizingScale(member, scale, base);
|
|
50
|
+
const extent = rotatedExtentOf(member);
|
|
51
|
+
const box = {};
|
|
52
|
+
for (const axis of AXES) {
|
|
53
|
+
const centre = at[axis] * scale[axis];
|
|
54
|
+
const half = (extent[axis] * sized[axis] * scale[axis]) / 2;
|
|
55
|
+
box[axis] = [centre - half, centre + half];
|
|
56
|
+
}
|
|
57
|
+
return { name: member.name, box };
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function meets(a, b) {
|
|
61
|
+
return AXES.every(axis => a.box[axis][0] - SKIN <= b.box[axis][1] && b.box[axis][0] - SKIN <= a.box[axis][1]);
|
|
62
|
+
}
|
|
63
|
+
/** 닿는 것끼리 이어 덩어리를 만든다. 덩어리마다 부품 이름을 담는다. */
|
|
64
|
+
function clumpsOf(spans) {
|
|
65
|
+
const owner = spans.map((_, at) => at);
|
|
66
|
+
const rootOf = (at) => (owner[at] === at ? at : (owner[at] = rootOf(owner[at])));
|
|
67
|
+
for (let i = 0; i < spans.length; i++) {
|
|
68
|
+
for (let j = i + 1; j < spans.length; j++) {
|
|
69
|
+
if (meets(spans[i], spans[j]))
|
|
70
|
+
owner[rootOf(i)] = rootOf(j);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const by = new Map();
|
|
74
|
+
spans.forEach((span, at) => {
|
|
75
|
+
const key = rootOf(at);
|
|
76
|
+
if (!by.has(key))
|
|
77
|
+
by.set(key, []);
|
|
78
|
+
by.get(key).push(span.name);
|
|
79
|
+
});
|
|
80
|
+
return [...by.values()];
|
|
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
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 크기를 바꿔 봐도 한 덩어리인가.
|
|
183
|
+
*
|
|
184
|
+
* 1배에서 이미 갈라져 있으면 그것을 먼저 말하고(`sizing-loose`), 그 뒤 일곱 조합에서 **덩어리가
|
|
185
|
+
* 늘어나는** 경우를 찾는다. 늘어나지 않으면 조용하다 — 부품이 움직였는지가 아니라 **떨어졌는지**를
|
|
186
|
+
* 보기 때문이다.
|
|
187
|
+
*/
|
|
188
|
+
export function sizingReport(blueprint, factor = FACTOR) {
|
|
189
|
+
const drawn = blueprint.groups.flatMap((group) => group.members);
|
|
190
|
+
const findings = [];
|
|
191
|
+
if (!drawn.length) {
|
|
192
|
+
return { findings, clumpsAtOne: 0, factor };
|
|
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));
|
|
207
|
+
const one = clumpsOf(spansAt(members, blueprint.base, { x: 1, y: 1, z: 1 }));
|
|
208
|
+
if (one.length > 1) {
|
|
209
|
+
findings.push({
|
|
210
|
+
code: 'sizing-loose',
|
|
211
|
+
message: `1배에서 이미 ${one.length} 조각이다. 크기를 바꾸기 전에 이미 떨어져 있다`,
|
|
212
|
+
why: slotCameOff(one, isSlot)
|
|
213
|
+
? '물건이 앉는 자리가 놓일 면에서 이미 떨어져 있다. 1배에서도 재고가 떠 보이고, 크기를 바꾸면 그 틈이 함께 커진다'
|
|
214
|
+
: '붙어 있어야 할 부품들이 저작 자체에서 떨어져 있다. 크기를 바꾸면 그 틈이 함께 커진다',
|
|
215
|
+
how: `${one.map(clump => [...clump].sort().join('+')).join(' · ')} 가 서로 닿도록 자리나 크기를 맞춘다. 일부러 띄운 것이면 그대로 두어도 발행은 된다`,
|
|
216
|
+
clumps: one
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
for (const way of SIZING_WAYS) {
|
|
220
|
+
const scale = { x: 1, y: 1, z: 1 };
|
|
221
|
+
for (const axis of way.axes)
|
|
222
|
+
scale[axis] = factor;
|
|
223
|
+
const grown = clumpsOf(spansAt(members, blueprint.base, scale));
|
|
224
|
+
if (grown.length > one.length) {
|
|
225
|
+
findings.push({
|
|
226
|
+
code: 'sizing-splits',
|
|
227
|
+
way: way.name,
|
|
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),
|
|
232
|
+
clumps: grown
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return { findings, clumpsAtOne: one.length, factor };
|
|
237
|
+
}
|
|
238
|
+
/** 정본 문자열이 아니라 객체를 받는 쪽. 부르는 자리가 이미 컴파일해 두었으면 위 함수를 쓴다. */
|
|
239
|
+
export function sizingReportOf(source, factor = FACTOR) {
|
|
240
|
+
return sizingReport(compile(source), factor);
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=gate.js.map
|
package/dist/gate.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
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,4 +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, anchorOfPart, needsOwnMesh, repeatOffset, repeatPlan, REPEAT_LIMIT, rotatedExtent, sizingPosition, sizingScale, stretchAxis, type Axis as SizingAxis, type InstanceScale } from './sizing.ts';
|
|
8
|
+
export { sizingReport, sizingReportOf, SIZING_WAYS, type SizingFinding, type SizingReport } from './gate.ts';
|
|
7
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"}
|
|
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
|
@@ -16,4 +16,11 @@ export { costOf, describeCost, scoreOf } from "./cost.js";
|
|
|
16
16
|
export { costCurve, costCurveSvg } from "./cost-chart.js";
|
|
17
17
|
/* 이미 컴파일된 청사진의 형태를 확인한다 — 서버·파일에서 온 것을 읽기 전에. */
|
|
18
18
|
export { blueprintProblems } from "./blueprint-shape.js";
|
|
19
|
+
/*
|
|
20
|
+
* 크기 반응 규칙 — **앵커의 뜻을 아는 자리.** things-scene 에서 옮겨 왔다(2026-09-09). 그리는 쪽과
|
|
21
|
+
* 발행 게이트가 같은 계산을 봐야 화면과 판정이 어긋나지 않는다.
|
|
22
|
+
*/
|
|
23
|
+
export { anchorOf, anchorOfPart, needsOwnMesh, repeatOffset, repeatPlan, REPEAT_LIMIT, rotatedExtent, sizingPosition, sizingScale, stretchAxis } from "./sizing.js";
|
|
24
|
+
/* 발행해도 되나 — 크기를 바꿔 봐야 아는 것들. */
|
|
25
|
+
export { sizingReport, sizingReportOf, SIZING_WAYS } from "./gate.js";
|
|
19
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"}
|
|
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"}
|