@hatiolab/figure-model 0.1.9 → 0.1.12
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.d.ts +16 -5
- package/dist/blueprint.d.ts.map +1 -1
- package/dist/blueprint.js +64 -29
- package/dist/blueprint.js.map +1 -1
- package/dist/cost.js +2 -2
- package/dist/cost.js.map +1 -1
- package/dist/grouping.d.ts +30 -5
- package/dist/grouping.d.ts.map +1 -1
- package/dist/grouping.js +55 -10
- package/dist/grouping.js.map +1 -1
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +5 -2
- package/dist/keys.js.map +1 -1
- package/dist/types.d.ts +213 -41
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +107 -9
- package/dist/types.js.map +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +205 -37
- package/dist/validate.js.map +1 -1
- package/docs/format.md +190 -25
- package/docs/sizing.md +183 -0
- package/docs/validation.md +20 -7
- package/package.json +1 -1
package/dist/blueprint.d.ts
CHANGED
|
@@ -13,12 +13,23 @@ export declare class FigureCompileError extends Error {
|
|
|
13
13
|
*
|
|
14
14
|
* cube · wall BoxGeometry 면 6 × 2 = 12
|
|
15
15
|
* cylinder CylinderGeometry(seg) 측면 2·seg + 캡 2·seg = 4·seg
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* polygon(n 점) ExtrudeGeometry 캡 2·(n−2) + 측면 2·n
|
|
16
|
+
* 민 것(n 점) ExtrudeGeometry 캡 2·(n−2) + 측면 2·n = 4n − 4
|
|
17
|
+
* 속 판 것 ExtrudeGeometry+구멍 4·(n + m) m 은 안쪽 테의 점 수
|
|
19
18
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* ## 라운드를 안 세다가 12 배를 놓쳤다
|
|
20
|
+
*
|
|
21
|
+
* 한동안 `rect` 를 라운드와 무관하게 12 로 셌다. 「베벨과 라운드는 세지 않는다」고
|
|
22
|
+
* 적어 두기까지 했다. three 로 실제로 만들어 세어 보면
|
|
23
|
+
*
|
|
24
|
+
* rect 각짐 12 cube 와 같다 — 민다고 비싸지지 않는다
|
|
25
|
+
* rect round=24 140 모서리마다 8 점으로 뽑으므로 테가 36 점이 된다
|
|
26
|
+
* 속 판 rect round=24 160 구멍은 +20 이다. 고리의 캡이 통짜 캡보다 싸다
|
|
27
|
+
*
|
|
28
|
+
* **비싼 것은 미는 것이 아니라 라운드다.** 그리고 라운드는 저작자가 무심코 넣는
|
|
29
|
+
* 값이라, 예산이 12 배 적게 세고 있으면 그 선택의 대가가 화면에 안 나타난다.
|
|
30
|
+
*
|
|
31
|
+
* 그리는 쪽이 테를 몇 점으로 뽑는지(`SEGMENT_PRESETS[0]`)와 **같은 수**를 쓴다.
|
|
32
|
+
* 다르면 재는 값과 그려지는 것이 갈린다.
|
|
22
33
|
*/
|
|
23
34
|
export declare function trianglesOf(part: FigurePart): number;
|
|
24
35
|
/** `sizing` 이 없으면 무엇으로 보나 — 비례 확대가 가장 예측 가능하다. */
|
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,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"}
|
package/dist/blueprint.js
CHANGED
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
*/
|
|
23
23
|
import { validate } from "./validate.js";
|
|
24
24
|
import { geometryKeyOf, groupKeyOf, materialKeyOf, usesSegments } from "./keys.js";
|
|
25
|
-
import { standsAlone } from "./grouping.js";
|
|
25
|
+
import { animatedNames, standsAlone } from "./grouping.js";
|
|
26
26
|
// 키는 keys.ts 가 기준이 되는 원본이다. 소비처가 쓰던 이름 그대로 다시 내보낸다.
|
|
27
27
|
export { geometryKeyOf, emissiveKeyOf, materialKeyOf, usesSegments } from "./keys.js";
|
|
28
|
-
import { BLUEPRINT_VERSION, DEFAULT_SIZING } from "./types.js";
|
|
28
|
+
import { BLUEPRINT_VERSION, DEFAULT_SIZING, SEGMENT_PRESETS } from "./types.js";
|
|
29
29
|
/** 컴파일할 수 없을 때 던진다. 오류보고없이 빈 청사진을 돌려주지 않는다. */
|
|
30
30
|
export class FigureCompileError extends Error {
|
|
31
31
|
errors;
|
|
@@ -46,12 +46,23 @@ export class FigureCompileError extends Error {
|
|
|
46
46
|
*
|
|
47
47
|
* cube · wall BoxGeometry 면 6 × 2 = 12
|
|
48
48
|
* cylinder CylinderGeometry(seg) 측면 2·seg + 캡 2·seg = 4·seg
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* polygon(n 점) ExtrudeGeometry 캡 2·(n−2) + 측면 2·n
|
|
49
|
+
* 민 것(n 점) ExtrudeGeometry 캡 2·(n−2) + 측면 2·n = 4n − 4
|
|
50
|
+
* 속 판 것 ExtrudeGeometry+구멍 4·(n + m) m 은 안쪽 테의 점 수
|
|
52
51
|
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
52
|
+
* ## 라운드를 안 세다가 12 배를 놓쳤다
|
|
53
|
+
*
|
|
54
|
+
* 한동안 `rect` 를 라운드와 무관하게 12 로 셌다. 「베벨과 라운드는 세지 않는다」고
|
|
55
|
+
* 적어 두기까지 했다. three 로 실제로 만들어 세어 보면
|
|
56
|
+
*
|
|
57
|
+
* rect 각짐 12 cube 와 같다 — 민다고 비싸지지 않는다
|
|
58
|
+
* rect round=24 140 모서리마다 8 점으로 뽑으므로 테가 36 점이 된다
|
|
59
|
+
* 속 판 rect round=24 160 구멍은 +20 이다. 고리의 캡이 통짜 캡보다 싸다
|
|
60
|
+
*
|
|
61
|
+
* **비싼 것은 미는 것이 아니라 라운드다.** 그리고 라운드는 저작자가 무심코 넣는
|
|
62
|
+
* 값이라, 예산이 12 배 적게 세고 있으면 그 선택의 대가가 화면에 안 나타난다.
|
|
63
|
+
*
|
|
64
|
+
* 그리는 쪽이 테를 몇 점으로 뽑는지(`SEGMENT_PRESETS[0]`)와 **같은 수**를 쓴다.
|
|
65
|
+
* 다르면 재는 값과 그려지는 것이 갈린다.
|
|
55
66
|
*/
|
|
56
67
|
export function trianglesOf(part) {
|
|
57
68
|
const seg = part.segments ?? 12;
|
|
@@ -66,13 +77,39 @@ export function trianglesOf(part) {
|
|
|
66
77
|
return 2 * seg * (h - 1);
|
|
67
78
|
}
|
|
68
79
|
case 'rect':
|
|
69
|
-
return 12;
|
|
70
80
|
case 'polygon': {
|
|
71
|
-
const n = part
|
|
72
|
-
|
|
81
|
+
const n = outlinePointsOf(part);
|
|
82
|
+
const hollow = part.shape?.hollow;
|
|
83
|
+
if (!hollow)
|
|
84
|
+
return 4 * n - 4;
|
|
85
|
+
const m = innerPointsOf(part);
|
|
86
|
+
const ring = 4 * (n + m);
|
|
87
|
+
// 바닥이 0 이면 위아래가 다 뚫린 테두리다 — 덮는 판이 없다.
|
|
88
|
+
const floor = (hollow.floor ?? hollow.wall) > 0 ? 4 * n - 4 : 0;
|
|
89
|
+
return ring + floor;
|
|
73
90
|
}
|
|
74
91
|
}
|
|
75
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* 민 단면의 테가 몇 점인가.
|
|
95
|
+
*
|
|
96
|
+
* 라운드가 있으면 모서리 넷이 저마다 곡선이 되고, 그리는 쪽이 곡선 하나를
|
|
97
|
+
* `SEGMENT_PRESETS[0]` 점으로 뽑는다. 곡선 사이를 잇는 직선의 끝점 넷이 더 붙는다.
|
|
98
|
+
*
|
|
99
|
+
* `polygon` 은 라운드를 쓰지 않는다 — 그리는 쪽이 적힌 점을 그대로 잇는다.
|
|
100
|
+
*/
|
|
101
|
+
function outlinePointsOf(part) {
|
|
102
|
+
if (part.primitive === 'polygon')
|
|
103
|
+
return part.shape?.path?.length ?? 3;
|
|
104
|
+
return part.shape?.round ? 4 * SEGMENT_PRESETS[0] + 4 : 4;
|
|
105
|
+
}
|
|
106
|
+
/** 안쪽 테. 벽 두께만큼 들어오므로 라운드가 그만큼 줄고, 0 이 되면 각진 모서리가 된다. */
|
|
107
|
+
function innerPointsOf(part) {
|
|
108
|
+
if (part.primitive === 'polygon')
|
|
109
|
+
return part.shape?.path?.length ?? 3;
|
|
110
|
+
const round = (part.shape?.round ?? 0) - (part.shape?.hollow?.wall ?? 0);
|
|
111
|
+
return round > 0 ? 4 * SEGMENT_PRESETS[0] + 4 : 4;
|
|
112
|
+
}
|
|
76
113
|
/** `sizing` 이 없으면 무엇으로 보나 — 비례 확대가 가장 예측 가능하다. */
|
|
77
114
|
/**
|
|
78
115
|
* 회전까지 반영한 부품의 축별 크기.
|
|
@@ -136,6 +173,10 @@ function memberOf(part) {
|
|
|
136
173
|
};
|
|
137
174
|
if (usesSegments(part.primitive) && part.segments !== undefined)
|
|
138
175
|
member.segments = part.segments;
|
|
176
|
+
if (part.keepRound !== undefined)
|
|
177
|
+
member.keepRound = part.keepRound;
|
|
178
|
+
if (part.anchor !== undefined)
|
|
179
|
+
member.anchor = part.anchor;
|
|
139
180
|
if (part.repeat !== undefined)
|
|
140
181
|
member.repeat = part.repeat;
|
|
141
182
|
if (part.shape !== undefined)
|
|
@@ -155,35 +196,29 @@ export function compile(source) {
|
|
|
155
196
|
throw new FigureCompileError(errors);
|
|
156
197
|
const src = source;
|
|
157
198
|
const groups = [];
|
|
158
|
-
const
|
|
199
|
+
const animations = (src.animations ?? []);
|
|
200
|
+
// 어느 부품을 clip 이 움직이나. 묶음을 가르는 판단이 이걸 먼저 알아야 한다.
|
|
201
|
+
const moving = animatedNames(animations);
|
|
159
202
|
const labels = [];
|
|
160
203
|
const byKey = new Map();
|
|
161
204
|
for (const part of src.parts) {
|
|
162
205
|
if (part.label !== undefined) {
|
|
163
206
|
labels.push({ ...part.label, at: part.name });
|
|
164
207
|
}
|
|
165
|
-
if (part.
|
|
166
|
-
//
|
|
167
|
-
const point = { name: part.name, kind: part.animation.kind };
|
|
168
|
-
if (part.animation.axis !== undefined)
|
|
169
|
-
point.axis = part.animation.axis;
|
|
170
|
-
if (part.animation.pivot !== undefined)
|
|
171
|
-
point.pivot = part.animation.pivot;
|
|
172
|
-
if (part.animation.turnsPerSecond !== undefined)
|
|
173
|
-
point.turnsPerSecond = part.animation.turnsPerSecond;
|
|
174
|
-
points.push(point);
|
|
208
|
+
if (moving.has(part.name)) {
|
|
209
|
+
// clip 이 움직이는 부품은 단독 묶음이다 — 합치면 따로 움직일 수 없다
|
|
175
210
|
const group = {
|
|
176
211
|
materialKey: materialKeyOf(part),
|
|
177
212
|
material: part.material,
|
|
178
213
|
animated: true,
|
|
179
214
|
members: [memberOf(part)]
|
|
180
215
|
};
|
|
181
|
-
if (part.
|
|
182
|
-
group.
|
|
216
|
+
if (part.materialSlot !== undefined)
|
|
217
|
+
group.materialSlot = part.materialSlot;
|
|
183
218
|
groups.push(group);
|
|
184
219
|
continue;
|
|
185
220
|
}
|
|
186
|
-
if (standsAlone(part)) {
|
|
221
|
+
if (standsAlone(part, moving)) {
|
|
187
222
|
// 크기 반응이 다른 부품도 단독 묶음이다 — 합친 geometry 는 변환을 하나만 받는다
|
|
188
223
|
const group = {
|
|
189
224
|
materialKey: materialKeyOf(part),
|
|
@@ -191,8 +226,8 @@ export function compile(source) {
|
|
|
191
226
|
animated: false,
|
|
192
227
|
members: [memberOf(part)]
|
|
193
228
|
};
|
|
194
|
-
if (part.
|
|
195
|
-
group.
|
|
229
|
+
if (part.materialSlot !== undefined)
|
|
230
|
+
group.materialSlot = part.materialSlot;
|
|
196
231
|
groups.push(group);
|
|
197
232
|
continue;
|
|
198
233
|
}
|
|
@@ -208,8 +243,8 @@ export function compile(source) {
|
|
|
208
243
|
animated: false,
|
|
209
244
|
members: [memberOf(part)]
|
|
210
245
|
};
|
|
211
|
-
if (part.
|
|
212
|
-
group.
|
|
246
|
+
if (part.materialSlot !== undefined)
|
|
247
|
+
group.materialSlot = part.materialSlot;
|
|
213
248
|
byKey.set(key, group);
|
|
214
249
|
groups.push(group);
|
|
215
250
|
}
|
|
@@ -220,7 +255,7 @@ export function compile(source) {
|
|
|
220
255
|
base: src.base,
|
|
221
256
|
budget: { triangles, groups: groups.length },
|
|
222
257
|
groups,
|
|
223
|
-
|
|
258
|
+
animations,
|
|
224
259
|
labels,
|
|
225
260
|
violations
|
|
226
261
|
};
|
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,WAAW,EAAE,MAAM,eAAe,CAAA;
|
|
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,EAYhB,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,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,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,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,UAAU;QACV,MAAM;QACN,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/cost.js
CHANGED
|
@@ -136,8 +136,8 @@ export function scoreOf(blueprint) {
|
|
|
136
136
|
key: 'animations',
|
|
137
137
|
label: '애니메이션',
|
|
138
138
|
used: animations,
|
|
139
|
-
limit: LIMITS.
|
|
140
|
-
ratio: animations / LIMITS.
|
|
139
|
+
limit: LIMITS.animatedParts,
|
|
140
|
+
ratio: animations / LIMITS.animatedParts,
|
|
141
141
|
why: '포인트마다 묶음이 하나 늘고, 프레임마다 갱신이 는다'
|
|
142
142
|
},
|
|
143
143
|
{
|
package/dist/cost.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA6F/C;;;;;;;;;GASG;AACH,MAAM,UAAU,MAAM,CAAC,SAA0B,EAAE,SAAS,GAAG,GAAG;IAChE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;IAE5C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAA;IAChC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAElC,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAA;QACvC,IAAI,OAAO;YAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC3D,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,KAAK,EAAE,CAAA;YACP,SAAS,IAAI,MAAM,CAAC,SAAS,CAAA;YAC7B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAA;IAEtC;;;;;;;;;;MAUE;IACF,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CACvC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,KAAK;QACL,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAA0B,EAAE,SAAS,CAAC,IAAI,CAAC;YAC1E,CAAC,CAAC,CAAC,CAAC,EACR,CAAC,CACF,CAAA;IAED,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,KAAK;QACL,SAAS;QACT,MAAM;QACN,SAAS;QACT,cAAc,EAAE,MAAM,CAAC,IAAI;QAC3B,iBAAiB,EAAE,SAAS,CAAC,IAAI;QACjC,eAAe,EAAE,QAAQ,CAAC,IAAI;QAC9B,UAAU,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK;QACjD,EAAE,EAAE;YACF,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,SAAS,GAAG,CAAC;YACxB,SAAS,EAAE,SAAS,GAAG,CAAC;YACxB,mDAAmD;YACnD,UAAU,EAAE,MAAM;YAClB,SAAS,EAAE,SAAS,CAAC,IAAI;YACzB,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,oBAAoB,EAAE,MAAM;SAC7B;KACF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAA;IACnB,MAAM,KAAK,GAAG;QACZ,GAAG,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,SAAS,SAAS,IAAI,CAAC,MAAM,EAAE;QAC7E,MAAM,IAAI,CAAC,cAAc,UAAU,IAAI,CAAC,iBAAiB,GAAG;KAC7D,CAAA;IAED,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,cAAc,oBAAoB,CAAC,CAAA;IAChF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,gBAAgB,EAAE,CAAC,SAAS,gBAAgB,EAAE,CAAC,SAAS,EAAE,CAAC,CAAA;IAErF,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,QAAQ,CAAC,CAAA;IAErE,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,eAAe,+BAA+B,CAAC,CAAA;IAC9E,CAAC;IAED,IAAI,EAAE,CAAC,oBAAoB,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,kCAAkC,EAAE,CAAC,oBAAoB,SAAS,CAAC,CAAA;IAChF,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AA8DD,MAAM,YAAY,GAA4B;IAC5C,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,CAAC;CACT,CAAA;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,YAAY;QAAE,IAAI,KAAK,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;IAC3E,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,SAA0B;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IAEjC,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAA;IAClE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAA;IAC9G,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IAErG,MAAM,OAAO,GAAsB;QACjC;YACE,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,IAAI,CAAC,SAAS;YACpB,KAAK,EAAE,MAAM,CAAC,cAAc;YAC5B,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,cAAc;YAC7C,GAAG,EAAE,gCAAgC;SACtC;QACD;YACE,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"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"}
|
package/dist/grouping.d.ts
CHANGED
|
@@ -1,13 +1,38 @@
|
|
|
1
|
-
import type { FigurePart, Vec3 } from './types.ts';
|
|
2
|
-
/**
|
|
3
|
-
|
|
1
|
+
import type { AnimationClip, FigurePart, Vec3 } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The parts any clip moves.
|
|
4
|
+
*
|
|
5
|
+
* Merging is decided per part, and a clip names its parts from the outside, so
|
|
6
|
+
* the two have to be brought together before grouping can answer anything.
|
|
7
|
+
*/
|
|
8
|
+
export declare function animatedNames(clips: readonly AnimationClip[] | undefined): ReadonlySet<string>;
|
|
9
|
+
/**
|
|
10
|
+
* A part draws on its own when it cannot be merged with its neighbours.
|
|
11
|
+
*
|
|
12
|
+
* A curved part stands alone whatever its sizing. A merged geometry takes one
|
|
13
|
+
* transform, and an instance scaled differently on each axis turns a cylinder
|
|
14
|
+
* merged into it into an elliptical one -- declared round, drawn oval. Keeping
|
|
15
|
+
* it round means keeping its own transform.
|
|
16
|
+
*
|
|
17
|
+
* `needsOwnMesh` in things-scene must answer the same. When the two disagree,
|
|
18
|
+
* the number the report shows and the number the screen draws come apart, which
|
|
19
|
+
* is the fault this whole file was written to close.
|
|
20
|
+
*/
|
|
21
|
+
export declare function standsAlone(part: FigurePart, animated?: ReadonlySet<string>): boolean;
|
|
4
22
|
/**
|
|
5
23
|
* The merge groups a set of parts produces.
|
|
6
24
|
*
|
|
7
25
|
* Each entry is the parts that end up in one merged geometry. Parts that stand
|
|
8
26
|
* alone get an entry of their own.
|
|
9
27
|
*/
|
|
10
|
-
export declare function groupsOf(parts: readonly FigurePart[]): FigurePart[][];
|
|
28
|
+
export declare function groupsOf(parts: readonly FigurePart[], animated?: ReadonlySet<string>): FigurePart[][];
|
|
29
|
+
/**
|
|
30
|
+
* Does this part hold its section circular under a lopsided instance?
|
|
31
|
+
*
|
|
32
|
+
* Only curved primitives can, and they do unless the author turns it off. A
|
|
33
|
+
* bolt head nobody looks at is worth merging; a wheel is not.
|
|
34
|
+
*/
|
|
35
|
+
export declare function keepsRound(part: FigurePart): boolean;
|
|
11
36
|
/**
|
|
12
37
|
* How many meshes one repeat part draws **as authored**.
|
|
13
38
|
*
|
|
@@ -25,7 +50,7 @@ export declare function repeatCountOf(part: FigurePart, base: Vec3): number;
|
|
|
25
50
|
*
|
|
26
51
|
* A merged group is one call. A repeat part is one call per copy.
|
|
27
52
|
*/
|
|
28
|
-
export declare function drawCallsOf(parts: readonly FigurePart[], base: Vec3): number;
|
|
53
|
+
export declare function drawCallsOf(parts: readonly FigurePart[], base: Vec3, animated?: ReadonlySet<string>): number;
|
|
29
54
|
/**
|
|
30
55
|
* Draw calls for one merged group.
|
|
31
56
|
*
|
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":"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"}
|
package/dist/grouping.js
CHANGED
|
@@ -17,32 +17,66 @@
|
|
|
17
17
|
*
|
|
18
18
|
* ## The three splits
|
|
19
19
|
*
|
|
20
|
-
* animation
|
|
21
|
-
* merged geometry with
|
|
20
|
+
* animation a part some clip moves goes on its own, since it cannot share a
|
|
21
|
+
* merged geometry with parts that stay put
|
|
22
22
|
* sizing a part that does not scale with the instance takes its own
|
|
23
23
|
* transform, and a merged geometry only takes one
|
|
24
|
+
* curvature a cylinder or sphere takes its own transform too, or the one
|
|
25
|
+
* transform a merged geometry gets turns it oval
|
|
24
26
|
* repeat one authored part, many meshes -- each copy is a draw call
|
|
25
27
|
*
|
|
26
28
|
* The first two make groups. The third multiplies inside a group, which is why
|
|
27
29
|
* `drawCallsOf` is not simply `groupsOf().length`.
|
|
28
30
|
*/
|
|
29
31
|
import { groupKeyOf } from "./keys.js";
|
|
30
|
-
import { DEFAULT_SIZING, REPEAT_LIMIT } from "./types.js";
|
|
31
|
-
/**
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
import { CURVED_PRIMITIVES, DEFAULT_SIZING, REPEAT_LIMIT } from "./types.js";
|
|
33
|
+
/**
|
|
34
|
+
* The parts any clip moves.
|
|
35
|
+
*
|
|
36
|
+
* Merging is decided per part, and a clip names its parts from the outside, so
|
|
37
|
+
* the two have to be brought together before grouping can answer anything.
|
|
38
|
+
*/
|
|
39
|
+
export function animatedNames(clips) {
|
|
40
|
+
const names = new Set();
|
|
41
|
+
for (const clip of clips ?? []) {
|
|
42
|
+
for (const channel of clip.channels ?? []) {
|
|
43
|
+
if (typeof channel?.target === 'string')
|
|
44
|
+
names.add(channel.target);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return names;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A part draws on its own when it cannot be merged with its neighbours.
|
|
51
|
+
*
|
|
52
|
+
* A curved part stands alone whatever its sizing. A merged geometry takes one
|
|
53
|
+
* transform, and an instance scaled differently on each axis turns a cylinder
|
|
54
|
+
* merged into it into an elliptical one -- declared round, drawn oval. Keeping
|
|
55
|
+
* it round means keeping its own transform.
|
|
56
|
+
*
|
|
57
|
+
* `needsOwnMesh` in things-scene must answer the same. When the two disagree,
|
|
58
|
+
* the number the report shows and the number the screen draws come apart, which
|
|
59
|
+
* is the fault this whole file was written to close.
|
|
60
|
+
*/
|
|
61
|
+
export function standsAlone(part, animated = EMPTY) {
|
|
62
|
+
if (animated.has(part.name))
|
|
63
|
+
return true;
|
|
64
|
+
if ((part.sizing ?? DEFAULT_SIZING) !== 'scale')
|
|
65
|
+
return true;
|
|
66
|
+
return keepsRound(part);
|
|
34
67
|
}
|
|
68
|
+
const EMPTY = new Set();
|
|
35
69
|
/**
|
|
36
70
|
* The merge groups a set of parts produces.
|
|
37
71
|
*
|
|
38
72
|
* Each entry is the parts that end up in one merged geometry. Parts that stand
|
|
39
73
|
* alone get an entry of their own.
|
|
40
74
|
*/
|
|
41
|
-
export function groupsOf(parts) {
|
|
75
|
+
export function groupsOf(parts, animated = EMPTY) {
|
|
42
76
|
const groups = [];
|
|
43
77
|
const byKey = new Map();
|
|
44
78
|
for (const part of parts) {
|
|
45
|
-
if (standsAlone(part)) {
|
|
79
|
+
if (standsAlone(part, animated)) {
|
|
46
80
|
groups.push([part]);
|
|
47
81
|
continue;
|
|
48
82
|
}
|
|
@@ -58,6 +92,17 @@ export function groupsOf(parts) {
|
|
|
58
92
|
}
|
|
59
93
|
return groups;
|
|
60
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Does this part hold its section circular under a lopsided instance?
|
|
97
|
+
*
|
|
98
|
+
* Only curved primitives can, and they do unless the author turns it off. A
|
|
99
|
+
* bolt head nobody looks at is worth merging; a wheel is not.
|
|
100
|
+
*/
|
|
101
|
+
export function keepsRound(part) {
|
|
102
|
+
if (!CURVED_PRIMITIVES.includes(part.primitive))
|
|
103
|
+
return false;
|
|
104
|
+
return part.keepRound !== false;
|
|
105
|
+
}
|
|
61
106
|
/**
|
|
62
107
|
* How many meshes one repeat part draws **as authored**.
|
|
63
108
|
*
|
|
@@ -83,8 +128,8 @@ export function repeatCountOf(part, base) {
|
|
|
83
128
|
*
|
|
84
129
|
* A merged group is one call. A repeat part is one call per copy.
|
|
85
130
|
*/
|
|
86
|
-
export function drawCallsOf(parts, base) {
|
|
87
|
-
return groupsOf(parts).reduce((total, group) => total + callsForGroup(group, base), 0);
|
|
131
|
+
export function drawCallsOf(parts, base, animated = EMPTY) {
|
|
132
|
+
return groupsOf(parts, animated).reduce((total, group) => total + callsForGroup(group, base), 0);
|
|
88
133
|
}
|
|
89
134
|
/**
|
|
90
135
|
* Draw calls for one merged group.
|
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/keys.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAG3D,mCAAmC;AACnC,wBAAgB,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnC;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAG3D,mCAAmC;AACnC,wBAAgB,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnC;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAUtD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAqBtD;AAED;;;;;;;GAOG;AACH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAE7D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEnD"}
|
package/dist/keys.js
CHANGED
|
@@ -29,7 +29,10 @@ export function geometryKeyOf(part) {
|
|
|
29
29
|
const seg = part.segments === undefined ? '' : `|s${part.segments}`;
|
|
30
30
|
const round = part.shape?.round ? `|r${q(part.shape.round)}` : '';
|
|
31
31
|
const pathLen = part.primitive === 'polygon' ? `|p${part.shape?.path?.length ?? 0}` : '';
|
|
32
|
-
|
|
32
|
+
// 두께가 형상을 정한다 — 빼면 두께만 고친 통이 옛 형상을 그대로 받는다.
|
|
33
|
+
const h = part.shape?.hollow;
|
|
34
|
+
const hollow = h ? `|h${q(h.wall)},${q(h.floor ?? h.wall)}` : '';
|
|
35
|
+
return `${part.primitive}|${dims}${seg}${round}${pathLen}${hollow}`;
|
|
33
36
|
}
|
|
34
37
|
/**
|
|
35
38
|
* MaterialBank 키. 색은 토큰 이름으로 둔다 — 값을 구우면 테마를 바꿔도 안 따라온다.
|
|
@@ -76,6 +79,6 @@ export function emissiveKeyOf(part) {
|
|
|
76
79
|
return part.material.emissive ? `${materialKeyOf(part)}||emissive` : null;
|
|
77
80
|
}
|
|
78
81
|
export function groupKeyOf(part) {
|
|
79
|
-
return `${materialKeyOf(part)}||${part.
|
|
82
|
+
return `${materialKeyOf(part)}||${part.materialSlot ?? '-'}`;
|
|
80
83
|
}
|
|
81
84
|
//# sourceMappingURL=keys.js.map
|
package/dist/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEjD,mCAAmC;AACnC,MAAM,UAAU,CAAC,CAAC,CAAS;IACzB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;AACpC,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,YAAY,CAAC,SAAwB;IACnD,OAAO,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;IAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAA;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACxF,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,OAAO,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
|