@hatiolab/figure-model 0.1.9 → 0.1.11
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 +62 -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 +11 -4
- package/dist/grouping.d.ts.map +1 -1
- package/dist/grouping.js +25 -8
- 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 +189 -41
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +78 -9
- package/dist/types.js.map +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +177 -39
- package/dist/validate.js.map +1 -1
- package/docs/format.md +150 -25
- package/docs/validation.md +18 -7
- package/package.json +1 -1
package/dist/types.d.ts
CHANGED
|
@@ -40,6 +40,66 @@ export declare const DEFAULT_SIZING: "scale";
|
|
|
40
40
|
export declare const REPEAT_LIMIT = 100;
|
|
41
41
|
export declare const SIZING_RULES: readonly ["scale", "fixed", "stretch", "repeat"];
|
|
42
42
|
export type SizingRule = (typeof SIZING_RULES)[number];
|
|
43
|
+
/**
|
|
44
|
+
* 부품이 한 축에서 기준 상자의 **어느 면을 붙잡나**. 축마다 따로 정한다.
|
|
45
|
+
*
|
|
46
|
+
* scale **아무 면도 안 붙잡는다.** 상자와 함께 비례로 커진다
|
|
47
|
+
* min 아래(또는 왼쪽·뒤) 면에서 잰 거리를 지킨다
|
|
48
|
+
* center 자리는 비례로 따라가고 **크기는 지킨다**
|
|
49
|
+
* max 위(또는 오른쪽·앞) 면에서 잰 거리를 지킨다
|
|
50
|
+
* span **양쪽을 다 붙잡는다.** 가운데가 늘어나 사이를 채운다
|
|
51
|
+
*
|
|
52
|
+
* 붙잡는 면의 수로 읽으면 하나다 — 0 개면 상자와 함께 커지고, 1 개면 그 면에서 잰
|
|
53
|
+
* 거리를 지키고, 2 개면 사이를 채운다. 3D 도구의 나인슬라이스가 하는 일이고 여기서는
|
|
54
|
+
* 그것이 세 축으로 있다.
|
|
55
|
+
*
|
|
56
|
+
* ## `repeat` 의 축에서는 **줄이 어떻게 되는가**를 말한다
|
|
57
|
+
*
|
|
58
|
+
* 같은 「반복」이 두 가지다.
|
|
59
|
+
*
|
|
60
|
+
* 컨베이어의 롤러 길어지면 롤러가 **는다.** 한 칸 간격은 그대로다
|
|
61
|
+
* 셀트레이의 셀 커지면 셀이 **커진다.** 개수는 그 트레이가 몇 셀짜리냐이지
|
|
62
|
+
* 화면에 얼마나 크게 그렸느냐가 아니다
|
|
63
|
+
*
|
|
64
|
+
* 앞의 것이 `center`(줄이 상자를 채운다), 뒤의 것이 `scale`(줄이 상자와 함께 큰다)이다.
|
|
65
|
+
*
|
|
66
|
+
* ## 없던 것을 왜 더하나
|
|
67
|
+
*
|
|
68
|
+
* `sizing` 은 부품의 **크기**가 인스턴스를 어떻게 따라가는지만 말했다. **자리**는
|
|
69
|
+
* 언제나 비례였다. 그래서 시그널 타워를 3 배로 세우면 기둥은 늘어나는데 램프들은
|
|
70
|
+
* 기둥 위 공중으로 흩어졌다 — 저작한 자리 512 가 1536 이 되고, 그 사이의 틈 100 이
|
|
71
|
+
* 300 이 되기 때문이다.
|
|
72
|
+
*
|
|
73
|
+
* 1× foot 0..90 · pole 85..705 · bracket 703..747 · … · cap 1037..1087
|
|
74
|
+
* 3× foot 90..180 · pole 255..2115 · bracket 2153..2197 · … · cap 3161..3211
|
|
75
|
+
*
|
|
76
|
+
* 램프는 상자 안 어디쯤이 아니라 **기둥 꼭대기**에 붙어 있다. 형식에 그 말을 적을
|
|
77
|
+
* 자리가 없었다.
|
|
78
|
+
*
|
|
79
|
+
* ## 적지 않으면 **가까운 면**을 붙잡는다
|
|
80
|
+
*
|
|
81
|
+
* 상자의 위 절반에 저작한 것은 위를, 아래 절반에 저작한 것은 아래를 붙잡는다.
|
|
82
|
+
* 정확히 가운데면 `center` 다. 사람이 램프를 꼭대기 근처에 놓을 때 뜻하는 것이
|
|
83
|
+
* 그것이고, 그래서 표본 열넷 중 어느 것도 이 값을 적지 않고 제대로 선다.
|
|
84
|
+
*
|
|
85
|
+
* `sizing` 이 `'scale'` 인 부품에는 뜻이 없다 — 그 부품은 상자와 함께 커진다.
|
|
86
|
+
*/
|
|
87
|
+
export declare const ANCHOR_RULES: readonly ["scale", "min", "center", "max", "span"];
|
|
88
|
+
export type AnchorRule = (typeof ANCHOR_RULES)[number];
|
|
89
|
+
/**
|
|
90
|
+
* 축별 앵커. 적지 않은 축은 `sizing` 이 정한 것을 따른다.
|
|
91
|
+
*
|
|
92
|
+
* **`sizing` 하나로는 못 하는 말이 있어서 있다.** 컨베이어의 데크가 그렇다 —
|
|
93
|
+
* 길이(x)와 폭(z)은 상자를 채우고 두께(y)는 24 mm 그대로여야 한다. `sizing` 은
|
|
94
|
+
* 부품당 하나라 「x 는 채우고 y 는 붙잡는다」를 적을 자리가 없었다.
|
|
95
|
+
*
|
|
96
|
+
* sizing: 'fixed', anchor: { x: 'span', y: 'max', z: 'span' }
|
|
97
|
+
*/
|
|
98
|
+
export interface PartAnchor {
|
|
99
|
+
x?: AnchorRule;
|
|
100
|
+
y?: AnchorRule;
|
|
101
|
+
z?: AnchorRule;
|
|
102
|
+
}
|
|
43
103
|
/**
|
|
44
104
|
* 디테일 등급 — 이 형상을 얼마나 상세하게 만들 것인지 저작자가 밝히는 값.
|
|
45
105
|
*
|
|
@@ -57,11 +117,30 @@ export declare const DETAIL_LEVELS: readonly ["S", "M", "L"];
|
|
|
57
117
|
export type DetailLevel = (typeof DETAIL_LEVELS)[number];
|
|
58
118
|
/** 등급별 부품 수 상한. */
|
|
59
119
|
export declare const PART_LIMIT: Record<DetailLevel, number>;
|
|
60
|
-
/**
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
120
|
+
/**
|
|
121
|
+
* 채널이 무엇을 움직이나. **glTF 의 `target.path` 그대로다.**
|
|
122
|
+
*
|
|
123
|
+
* `weights` 는 없다 — 모프 타깃이 없는 형식이다.
|
|
124
|
+
*/
|
|
125
|
+
export declare const CHANNEL_PATHS: readonly ["translation", "rotation", "scale"];
|
|
126
|
+
export type ChannelPath = (typeof CHANNEL_PATHS)[number];
|
|
127
|
+
/** 키프레임 사이를 어떻게 잇나. glTF 의 `CUBICSPLINE` 은 없다 — 접선을 손으로 적을 형식이 아니다. */
|
|
128
|
+
export declare const INTERPOLATIONS: readonly ["linear", "step"];
|
|
129
|
+
export type Interpolation = (typeof INTERPOLATIONS)[number];
|
|
130
|
+
/**
|
|
131
|
+
* clip 이 어떻게 구동되나.
|
|
132
|
+
*
|
|
133
|
+
* **glTF 에는 없는 항목이다.** glTF 는 재생을 런타임에 맡긴다. 여기서 형식이 말하는
|
|
134
|
+
* 이유는 트윈이 타임라인을 재생하지 않기 때문이다 — 「문 열기 클립을 재생하라」가 아니라
|
|
135
|
+
* 「지금 40% 열려 있다」다.
|
|
136
|
+
*
|
|
137
|
+
* loop 시각이 흐른다. 인스턴스가 주는 값은 **배속**이다. 도는 롤러가 그렇다
|
|
138
|
+
* hold 시각이 멈춰 있다. 인스턴스가 주는 값은 **0~1 위치**다. 열린 정도가 그렇다
|
|
139
|
+
*
|
|
140
|
+
* 같은 clip 이 둘 다 될 수 있지만, 그 자산이 무엇인지는 저작 시점에 정해진다.
|
|
141
|
+
*/
|
|
142
|
+
export declare const CLIP_DRIVES: readonly ["loop", "hold"];
|
|
143
|
+
export type ClipDrive = (typeof CLIP_DRIVES)[number];
|
|
65
144
|
export declare const AXES: readonly ["x", "y", "z"];
|
|
66
145
|
export type Axis = (typeof AXES)[number];
|
|
67
146
|
/** 텍스트를 언제 보이나. 표현 수단(sprite·overlay)은 런타임이 고른다. */
|
|
@@ -252,28 +331,53 @@ export interface RepeatSpec {
|
|
|
252
331
|
*/
|
|
253
332
|
pitch: number;
|
|
254
333
|
}
|
|
334
|
+
/** 한 시각의 값. glTF sampler 의 input 한 칸과 output 한 칸이다. */
|
|
335
|
+
export interface Keyframe {
|
|
336
|
+
/** 시각(초). 0 이상이고 **오름차순**이어야 한다. */
|
|
337
|
+
at: number;
|
|
338
|
+
/**
|
|
339
|
+
* 그 시각의 값. 경로마다 뜻이 다르다.
|
|
340
|
+
*
|
|
341
|
+
* translation 부품 기준 옮김
|
|
342
|
+
* rotation **오일러 도(°)** — `transform.rotation` 과 같은 약속
|
|
343
|
+
* scale 배율. 1 이 제 크기
|
|
344
|
+
*/
|
|
345
|
+
value: Vec3;
|
|
346
|
+
}
|
|
255
347
|
/**
|
|
256
|
-
*
|
|
348
|
+
* 한 부품의 한 속성을 시간에 따라 움직인다. **glTF 의 channel + sampler 를 합친 것.**
|
|
257
349
|
*
|
|
258
|
-
*
|
|
259
|
-
*
|
|
260
|
-
* 몸체 가운데를 돌아야 하면 피봇을 명시해야 한다.
|
|
350
|
+
* glTF 는 채널과 샘플러를 나누어 여러 채널이 한 샘플러를 나눠 쓸 수 있게 한다. 그건
|
|
351
|
+
* 정점 데이터를 아끼려는 장치고, 손으로 적는 형식에서는 한 겹 더 들어갈 뿐이라 합쳤다.
|
|
261
352
|
*/
|
|
262
|
-
export interface
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
pivot?: Vec3;
|
|
353
|
+
export interface AnimationChannel {
|
|
354
|
+
/** 어느 부품인가. `FigurePart.name`. **노드 인덱스가 아니다** — 이 형식은 이름으로 가리킨다. */
|
|
355
|
+
target: string;
|
|
356
|
+
path: ChannelPath;
|
|
267
357
|
/**
|
|
268
|
-
*
|
|
269
|
-
*
|
|
270
|
-
* 안 적으면 런타임의 기본값을 쓴다. 적는 편이 낫다 — 롤 프레스와 환기팬이 한 화면에
|
|
271
|
-
* 있을 때 둘이 같은 속도로 도는 것이 가장 눈에 띄는 거짓말이다.
|
|
358
|
+
* 회전 중심. `rotation` 에서만 뜻이 있고, 부품 기준 로컬이다.
|
|
272
359
|
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
360
|
+
* **glTF 에는 없다.** 거기서는 부모 노드를 하나 끼워서 중심을 옮긴다. 이 형식의 부품은
|
|
361
|
+
* 겹치지 않으므로 끼울 노드가 없어 여기 둔다. 안 적으면 부품 제 중심이다.
|
|
275
362
|
*/
|
|
276
|
-
|
|
363
|
+
pivot?: Vec3;
|
|
364
|
+
/** 안 적으면 `linear`. */
|
|
365
|
+
interpolation?: Interpolation;
|
|
366
|
+
/** **둘 이상**이어야 한다. 하나뿐이면 움직이는 것이 아니라 자세 하나다. */
|
|
367
|
+
keys: Keyframe[];
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* 움직임 한 벌. **glTF 의 `animations[]` 한 칸이다.**
|
|
371
|
+
*
|
|
372
|
+
* 길이는 적지 않는다 — 마지막 키의 시각이 곧 길이다. 따로 적으면 어긋날 수 있고,
|
|
373
|
+
* 어긋나면 어느 쪽이 맞는지 알 방법이 없다.
|
|
374
|
+
*/
|
|
375
|
+
export interface AnimationClip {
|
|
376
|
+
/** **저장되는 식별자다.** 인스턴스가 이 이름으로 구동한다. */
|
|
377
|
+
name: string;
|
|
378
|
+
/** 안 적으면 `loop`. */
|
|
379
|
+
drive?: ClipDrive;
|
|
380
|
+
channels: AnimationChannel[];
|
|
277
381
|
}
|
|
278
382
|
/** 텍스트 표현 자리. 무엇을·언제만 정하고 수단은 런타임이 고른다. */
|
|
279
383
|
export interface LabelSpec {
|
|
@@ -288,6 +392,35 @@ export interface PartShape {
|
|
|
288
392
|
path?: Point2[];
|
|
289
393
|
/** 코너 라운드. `rect` · `polygon` 공통. */
|
|
290
394
|
round?: number;
|
|
395
|
+
/** 속을 판다. `HollowSpec` 참고. */
|
|
396
|
+
hollow?: HollowSpec;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* 민 단면의 **속을 판다** — 트레이 · 토트 · 통 · 케이스 · 프레임이 전부 이 모양이다.
|
|
400
|
+
*
|
|
401
|
+
* 없을 때는 바닥판 하나에 벽 넷을 세워 만들었다. 다섯 부품이 드는 것도 문제지만 더
|
|
402
|
+
* 나쁜 것은 **모양이 안 맞는다**는 것이다. 셀트레이의 바닥판은 모서리를 둥글게 깎았는데
|
|
403
|
+
* 벽 넷은 각진 상자라, 네 귀퉁이에서 둥근 것과 각진 것이 만난다.
|
|
404
|
+
*
|
|
405
|
+
* 한 덩어리로 밀면 바깥 테가 한 바퀴 이어지고, 안쪽 테도 같은 반경에서 두께만큼 줄어든
|
|
406
|
+
* 채 따라온다. 벽과 바닥이 맞닿는 자리가 없어져 z-fighting 이 날 자리도 하나 준다.
|
|
407
|
+
*
|
|
408
|
+
* `size` 는 **바깥 치수**다. 판 자리는 그 안쪽이다.
|
|
409
|
+
*
|
|
410
|
+
* ## 왜 프리미티브를 새로 만들지 않았나
|
|
411
|
+
*
|
|
412
|
+
* 「속을 판다」는 상자만의 성질이 아니다. `polygon` 을 파면 U 자 가드 · ㄷ 자 프레임이
|
|
413
|
+
* 같은 규칙으로 나온다. 새 프리미티브를 두면 그 둘이 서로 모르는 두 벌이 된다.
|
|
414
|
+
*/
|
|
415
|
+
export interface HollowSpec {
|
|
416
|
+
/** 벽 두께. 안쪽 테는 바깥 테에서 이만큼 들어온다. */
|
|
417
|
+
wall: number;
|
|
418
|
+
/**
|
|
419
|
+
* 바닥 두께. 없으면 벽과 같다.
|
|
420
|
+
*
|
|
421
|
+
* `0` 이면 **위아래가 다 뚫린다** — 통이 아니라 테두리다. 프레임 · 덕트가 그렇다.
|
|
422
|
+
*/
|
|
423
|
+
floor?: number;
|
|
291
424
|
}
|
|
292
425
|
export interface FigurePart {
|
|
293
426
|
/**
|
|
@@ -302,11 +435,24 @@ export interface FigurePart {
|
|
|
302
435
|
/** extrude 계열의 단면. */
|
|
303
436
|
shape?: PartShape;
|
|
304
437
|
material: PartMaterial;
|
|
305
|
-
/**
|
|
306
|
-
|
|
438
|
+
/**
|
|
439
|
+
* 상태 색이 연동될 재질 슬롯. 없으면 상태를 표현하지 않는다.
|
|
440
|
+
*
|
|
441
|
+
* **`slot` 이 아니라 `materialSlot` 이다.** 이 낱말은 스택에서 이미 임자가 있다 —
|
|
442
|
+
* operato-scene 의 `SlotDef` 는 **보유물이 앉는 자리**이고, 그것이 언젠가 이 형식에도
|
|
443
|
+
* 들어온다(`Capacity.get slots()`). 그때 한 형식 안에서 `slot` 이 「재질 인덱스」와
|
|
444
|
+
* 「자재가 앉는 자리」 둘을 뜻하게 된다. 여기는 재질 쪽이므로 그렇게 부른다.
|
|
445
|
+
*/
|
|
446
|
+
materialSlot?: MaterialSlot;
|
|
307
447
|
sizing?: SizingRule;
|
|
448
|
+
/**
|
|
449
|
+
* 어느 면을 붙잡나. 적지 않은 축은 **가까운 면**이다(`ANCHOR_ENDS` 참고).
|
|
450
|
+
*
|
|
451
|
+
* `sizing` 이 정한 것을 축마다 덮어쓴다. `sizing: 'stretch'` 는 가장 긴 축에
|
|
452
|
+
* `'span'` 을 넣는 짧은 표기이고, 여기 적으면 그것이 이긴다.
|
|
453
|
+
*/
|
|
454
|
+
anchor?: PartAnchor;
|
|
308
455
|
repeat?: RepeatSpec;
|
|
309
|
-
animation?: AnimationPoint;
|
|
310
456
|
label?: LabelSpec;
|
|
311
457
|
}
|
|
312
458
|
/** 저작 결과. 편집 가능한 원본 데이터. */
|
|
@@ -325,6 +471,13 @@ export interface FigureSource {
|
|
|
325
471
|
/** StyleKit 참조. 팔레트·분할 수·그리드·등급을 한 번에 받는다. */
|
|
326
472
|
styleKit?: string;
|
|
327
473
|
parts: FigurePart[];
|
|
474
|
+
/**
|
|
475
|
+
* 움직임. **glTF 처럼 부품 바깥에 둔다.**
|
|
476
|
+
*
|
|
477
|
+
* 한 clip 이 부품 여럿을 같이 움직이기 때문이다 — 문 두 짝이 같이 열리는 것이 clip
|
|
478
|
+
* 하나다. 부품 안에 넣으면 그 「같이」를 적을 자리가 없다.
|
|
479
|
+
*/
|
|
480
|
+
animations?: AnimationClip[];
|
|
328
481
|
}
|
|
329
482
|
/** 청사진 스키마 버전. 형식이 바뀌면 올린다. */
|
|
330
483
|
export declare const BLUEPRINT_VERSION = 1;
|
|
@@ -342,6 +495,8 @@ export interface BlueprintMember {
|
|
|
342
495
|
*/
|
|
343
496
|
segments?: number;
|
|
344
497
|
sizing: SizingRule;
|
|
498
|
+
/** 어느 면을 붙잡나. 원본에 적힌 것만 실린다 — 적지 않은 축은 그리는 쪽이 센다. */
|
|
499
|
+
anchor?: PartAnchor;
|
|
345
500
|
repeat?: RepeatSpec;
|
|
346
501
|
shape?: PartShape;
|
|
347
502
|
/** 이 부품의 삼각형 수 추정. */
|
|
@@ -357,20 +512,13 @@ export interface BlueprintGroup {
|
|
|
357
512
|
/** MaterialBank 키. */
|
|
358
513
|
materialKey: string;
|
|
359
514
|
material: PartMaterial;
|
|
360
|
-
|
|
361
|
-
/**
|
|
515
|
+
materialSlot?: MaterialSlot;
|
|
516
|
+
/** 움직이는 부품이 든 그룹인지. 그런 그룹은 부품을 하나만 갖는다. */
|
|
362
517
|
animated: boolean;
|
|
363
518
|
members: BlueprintMember[];
|
|
364
519
|
}
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
name: string;
|
|
368
|
-
kind: AnimationKind;
|
|
369
|
-
axis?: Axis;
|
|
370
|
-
pivot?: Vec3;
|
|
371
|
-
/** 초당 회전 수. 안 적으면 런타임 기본값. */
|
|
372
|
-
turnsPerSecond?: number;
|
|
373
|
-
}
|
|
520
|
+
/** 청사진의 clip. 원본에 적은 것 그대로다. */
|
|
521
|
+
export type BlueprintClip = AnimationClip;
|
|
374
522
|
export interface BlueprintLabel extends LabelSpec {
|
|
375
523
|
/** 어느 부품에 붙나. `FigurePart.name`. */
|
|
376
524
|
at: string;
|
|
@@ -391,13 +539,13 @@ export interface Violation {
|
|
|
391
539
|
* 처리를 정해야 하는데, 코드가 늘어난 것이 알려지지 않으면 그 대응이 빠진다. 뜻은
|
|
392
540
|
* `docs/validation.md` 에 있고, 문서와 이 목록이 어긋나면 테스트가 실패한다.
|
|
393
541
|
*/
|
|
394
|
-
export declare const ERROR_CODES: readonly ["not-object", "not-finite", "not-positive", "out-of-range", "not-integer", "not-boolean", "not-allowed", "missing-type", "missing-base", "missing-parts", "bad-style-kit", "missing-name", "duplicate-name", "missing-transform", "missing-position", "missing-size", "too-few-segments", "missing-shape-path", "bad-shape-point", "missing-material", "material-unresolvable", "missing-repeat", "missing-
|
|
542
|
+
export declare const ERROR_CODES: readonly ["not-object", "not-finite", "not-positive", "out-of-range", "not-integer", "not-boolean", "not-allowed", "missing-type", "missing-base", "missing-parts", "bad-style-kit", "missing-name", "duplicate-name", "missing-transform", "missing-position", "missing-size", "too-few-segments", "missing-shape-path", "bad-shape-point", "hollow-too-thick", "hollow-not-convex", "missing-material", "material-unresolvable", "missing-repeat", "missing-channels", "unknown-channel-target", "too-few-keys", "keys-out-of-order", "missing-surface-ref", "missing-label-name", "missing-label-source"];
|
|
395
543
|
export type ErrorCode = (typeof ERROR_CODES)[number];
|
|
396
544
|
/**
|
|
397
545
|
* 위반 코드 전부. 위반은 컴파일을 막지 않는다 — 저작 화면이 알려 주는 데 쓴다.
|
|
398
546
|
* 뜻과 한도는 `docs/validation.md` 에 있다.
|
|
399
547
|
*/
|
|
400
|
-
export declare const VIOLATION_CODES: readonly ["segments-off-preset", "segments-ignored", "repeat-ignored", "detail-level-missing", "too-many-parts", "too-many-
|
|
548
|
+
export declare const VIOLATION_CODES: readonly ["segments-off-preset", "segments-ignored", "repeat-ignored", "anchor-ignored", "hollow-ignored", "pivot-ignored", "detail-level-missing", "too-many-parts", "too-many-animated-parts", "too-many-material-groups", "too-many-transparent", "too-many-surface-textures", "too-many-always-labels"];
|
|
401
549
|
export type ViolationCode = (typeof VIOLATION_CODES)[number];
|
|
402
550
|
/** 형식·정합성 오류. 이것이 있으면 컴파일할 수 없다. */
|
|
403
551
|
export interface FigureError {
|
|
@@ -418,11 +566,11 @@ export interface FigureBlueprint {
|
|
|
418
566
|
detailLevel?: DetailLevel;
|
|
419
567
|
budget: {
|
|
420
568
|
triangles: number;
|
|
421
|
-
/** 묶음 수 = 재질·슬롯 조합 수 +
|
|
569
|
+
/** 묶음 수 = 재질·슬롯 조합 수 + 움직이는 부품 수. **재는 것은 이것이다.** */
|
|
422
570
|
groups: number;
|
|
423
571
|
};
|
|
424
572
|
groups: BlueprintGroup[];
|
|
425
|
-
|
|
573
|
+
animations: BlueprintClip[];
|
|
426
574
|
labels: BlueprintLabel[];
|
|
427
575
|
violations: Violation[];
|
|
428
576
|
}
|
|
@@ -470,8 +618,8 @@ export interface FigureInstanceModel {
|
|
|
470
618
|
export declare const LIMITS: {
|
|
471
619
|
/** 재질·슬롯 조합 수. */
|
|
472
620
|
readonly materialGroups: 3;
|
|
473
|
-
/**
|
|
474
|
-
readonly
|
|
621
|
+
/** 움직이는 부품 수. 프레임마다 매트릭스를 갱신하고, 저마다 단독 묶음이다. */
|
|
622
|
+
readonly animatedParts: 2;
|
|
475
623
|
/** 투명 재질. 정렬 비용이 크다. */
|
|
476
624
|
readonly transparentMaterials: 1;
|
|
477
625
|
/**
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAqBA,8CAA8C;AAC9C,eAAO,MAAM,eAAe,oEAAqE,CAAA;AACjG,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAE5D,+BAA+B;AAC/B,eAAO,MAAM,kBAAkB,EAAE,SAAS,aAAa,EAAwB,CAAA;AAE/E,oCAAoC;AACpC,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAA2C,CAAA;AAE/F,kCAAkC;AAClC,eAAO,MAAM,oBAAoB,EAAE,SAAS,aAAa,EAA2B,CAAA;AAEpF;;;GAGG;AACH,eAAO,MAAM,cAAc,0BAA2B,CAAA;AACtD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1D,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,gFAAiF,CAAA;AAC9G,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE9D;;;;;;;GAOG;AACH,oDAAoD;AACpD,eAAO,MAAM,cAAc,EAAG,OAAgB,CAAA;AAE9C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,MAAM,CAAA;AAE/B,eAAO,MAAM,YAAY,kDAAmD,CAAA;AAC5E,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAEtD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,0BAA2B,CAAA;AACrD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,mBAAmB;AACnB,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAyB,CAAA;AAE5E,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -56,6 +56,51 @@ export const DEFAULT_SIZING = 'scale';
|
|
|
56
56
|
*/
|
|
57
57
|
export const REPEAT_LIMIT = 100;
|
|
58
58
|
export const SIZING_RULES = ['scale', 'fixed', 'stretch', 'repeat'];
|
|
59
|
+
/**
|
|
60
|
+
* 부품이 한 축에서 기준 상자의 **어느 면을 붙잡나**. 축마다 따로 정한다.
|
|
61
|
+
*
|
|
62
|
+
* scale **아무 면도 안 붙잡는다.** 상자와 함께 비례로 커진다
|
|
63
|
+
* min 아래(또는 왼쪽·뒤) 면에서 잰 거리를 지킨다
|
|
64
|
+
* center 자리는 비례로 따라가고 **크기는 지킨다**
|
|
65
|
+
* max 위(또는 오른쪽·앞) 면에서 잰 거리를 지킨다
|
|
66
|
+
* span **양쪽을 다 붙잡는다.** 가운데가 늘어나 사이를 채운다
|
|
67
|
+
*
|
|
68
|
+
* 붙잡는 면의 수로 읽으면 하나다 — 0 개면 상자와 함께 커지고, 1 개면 그 면에서 잰
|
|
69
|
+
* 거리를 지키고, 2 개면 사이를 채운다. 3D 도구의 나인슬라이스가 하는 일이고 여기서는
|
|
70
|
+
* 그것이 세 축으로 있다.
|
|
71
|
+
*
|
|
72
|
+
* ## `repeat` 의 축에서는 **줄이 어떻게 되는가**를 말한다
|
|
73
|
+
*
|
|
74
|
+
* 같은 「반복」이 두 가지다.
|
|
75
|
+
*
|
|
76
|
+
* 컨베이어의 롤러 길어지면 롤러가 **는다.** 한 칸 간격은 그대로다
|
|
77
|
+
* 셀트레이의 셀 커지면 셀이 **커진다.** 개수는 그 트레이가 몇 셀짜리냐이지
|
|
78
|
+
* 화면에 얼마나 크게 그렸느냐가 아니다
|
|
79
|
+
*
|
|
80
|
+
* 앞의 것이 `center`(줄이 상자를 채운다), 뒤의 것이 `scale`(줄이 상자와 함께 큰다)이다.
|
|
81
|
+
*
|
|
82
|
+
* ## 없던 것을 왜 더하나
|
|
83
|
+
*
|
|
84
|
+
* `sizing` 은 부품의 **크기**가 인스턴스를 어떻게 따라가는지만 말했다. **자리**는
|
|
85
|
+
* 언제나 비례였다. 그래서 시그널 타워를 3 배로 세우면 기둥은 늘어나는데 램프들은
|
|
86
|
+
* 기둥 위 공중으로 흩어졌다 — 저작한 자리 512 가 1536 이 되고, 그 사이의 틈 100 이
|
|
87
|
+
* 300 이 되기 때문이다.
|
|
88
|
+
*
|
|
89
|
+
* 1× foot 0..90 · pole 85..705 · bracket 703..747 · … · cap 1037..1087
|
|
90
|
+
* 3× foot 90..180 · pole 255..2115 · bracket 2153..2197 · … · cap 3161..3211
|
|
91
|
+
*
|
|
92
|
+
* 램프는 상자 안 어디쯤이 아니라 **기둥 꼭대기**에 붙어 있다. 형식에 그 말을 적을
|
|
93
|
+
* 자리가 없었다.
|
|
94
|
+
*
|
|
95
|
+
* ## 적지 않으면 **가까운 면**을 붙잡는다
|
|
96
|
+
*
|
|
97
|
+
* 상자의 위 절반에 저작한 것은 위를, 아래 절반에 저작한 것은 아래를 붙잡는다.
|
|
98
|
+
* 정확히 가운데면 `center` 다. 사람이 램프를 꼭대기 근처에 놓을 때 뜻하는 것이
|
|
99
|
+
* 그것이고, 그래서 표본 열넷 중 어느 것도 이 값을 적지 않고 제대로 선다.
|
|
100
|
+
*
|
|
101
|
+
* `sizing` 이 `'scale'` 인 부품에는 뜻이 없다 — 그 부품은 상자와 함께 커진다.
|
|
102
|
+
*/
|
|
103
|
+
export const ANCHOR_RULES = ['scale', 'min', 'center', 'max', 'span'];
|
|
59
104
|
/**
|
|
60
105
|
* 디테일 등급 — 이 형상을 얼마나 상세하게 만들 것인지 저작자가 밝히는 값.
|
|
61
106
|
*
|
|
@@ -72,10 +117,27 @@ export const SIZING_RULES = ['scale', 'fixed', 'stretch', 'repeat'];
|
|
|
72
117
|
export const DETAIL_LEVELS = ['S', 'M', 'L'];
|
|
73
118
|
/** 등급별 부품 수 상한. */
|
|
74
119
|
export const PART_LIMIT = { S: 3, M: 8, L: 20 };
|
|
75
|
-
/**
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
120
|
+
/**
|
|
121
|
+
* 채널이 무엇을 움직이나. **glTF 의 `target.path` 그대로다.**
|
|
122
|
+
*
|
|
123
|
+
* `weights` 는 없다 — 모프 타깃이 없는 형식이다.
|
|
124
|
+
*/
|
|
125
|
+
export const CHANNEL_PATHS = ['translation', 'rotation', 'scale'];
|
|
126
|
+
/** 키프레임 사이를 어떻게 잇나. glTF 의 `CUBICSPLINE` 은 없다 — 접선을 손으로 적을 형식이 아니다. */
|
|
127
|
+
export const INTERPOLATIONS = ['linear', 'step'];
|
|
128
|
+
/**
|
|
129
|
+
* clip 이 어떻게 구동되나.
|
|
130
|
+
*
|
|
131
|
+
* **glTF 에는 없는 항목이다.** glTF 는 재생을 런타임에 맡긴다. 여기서 형식이 말하는
|
|
132
|
+
* 이유는 트윈이 타임라인을 재생하지 않기 때문이다 — 「문 열기 클립을 재생하라」가 아니라
|
|
133
|
+
* 「지금 40% 열려 있다」다.
|
|
134
|
+
*
|
|
135
|
+
* loop 시각이 흐른다. 인스턴스가 주는 값은 **배속**이다. 도는 롤러가 그렇다
|
|
136
|
+
* hold 시각이 멈춰 있다. 인스턴스가 주는 값은 **0~1 위치**다. 열린 정도가 그렇다
|
|
137
|
+
*
|
|
138
|
+
* 같은 clip 이 둘 다 될 수 있지만, 그 자산이 무엇인지는 저작 시점에 정해진다.
|
|
139
|
+
*/
|
|
140
|
+
export const CLIP_DRIVES = ['loop', 'hold'];
|
|
79
141
|
export const AXES = ['x', 'y', 'z'];
|
|
80
142
|
/** 텍스트를 언제 보이나. 표현 수단(sprite·overlay)은 런타임이 고른다. */
|
|
81
143
|
export const LABEL_WHENS = ['always', 'zoomed', 'selected', 'abnormal'];
|
|
@@ -128,14 +190,18 @@ export const ERROR_CODES = [
|
|
|
128
190
|
// 단면
|
|
129
191
|
'missing-shape-path',
|
|
130
192
|
'bad-shape-point',
|
|
193
|
+
'hollow-too-thick',
|
|
194
|
+
'hollow-not-convex',
|
|
131
195
|
// 재질
|
|
132
196
|
'missing-material',
|
|
133
197
|
'material-unresolvable',
|
|
134
198
|
// 크기 반응
|
|
135
199
|
'missing-repeat',
|
|
136
200
|
// 애니메이션
|
|
137
|
-
'missing-
|
|
138
|
-
'
|
|
201
|
+
'missing-channels',
|
|
202
|
+
'unknown-channel-target',
|
|
203
|
+
'too-few-keys',
|
|
204
|
+
'keys-out-of-order',
|
|
139
205
|
// 예외 표면
|
|
140
206
|
'missing-surface-ref',
|
|
141
207
|
// 라벨
|
|
@@ -150,9 +216,12 @@ export const VIOLATION_CODES = [
|
|
|
150
216
|
'segments-off-preset',
|
|
151
217
|
'segments-ignored',
|
|
152
218
|
'repeat-ignored',
|
|
219
|
+
'anchor-ignored',
|
|
220
|
+
'hollow-ignored',
|
|
221
|
+
'pivot-ignored',
|
|
153
222
|
'detail-level-missing',
|
|
154
223
|
'too-many-parts',
|
|
155
|
-
'too-many-
|
|
224
|
+
'too-many-animated-parts',
|
|
156
225
|
'too-many-material-groups',
|
|
157
226
|
'too-many-transparent',
|
|
158
227
|
'too-many-surface-textures',
|
|
@@ -170,8 +239,8 @@ export const VIOLATION_CODES = [
|
|
|
170
239
|
export const LIMITS = {
|
|
171
240
|
/** 재질·슬롯 조합 수. */
|
|
172
241
|
materialGroups: 3,
|
|
173
|
-
/**
|
|
174
|
-
|
|
242
|
+
/** 움직이는 부품 수. 프레임마다 매트릭스를 갱신하고, 저마다 단독 묶음이다. */
|
|
243
|
+
animatedParts: 2,
|
|
175
244
|
/** 투명 재질. 정렬 비용이 크다. */
|
|
176
245
|
transparentMaterials: 1,
|
|
177
246
|
/**
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,8CAA8C;AAC9C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAU,CAAA;AAGjG,+BAA+B;AAC/B,MAAM,CAAC,MAAM,kBAAkB,GAA6B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AAE/E,oCAAoC;AACpC,MAAM,CAAC,MAAM,eAAe,GAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;AAE/F,kCAAkC;AAClC,MAAM,CAAC,MAAM,oBAAoB,GAA6B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;AAEpF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,CAAU,CAAA;AAGtD,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAA;AAG9G;;;;;;;GAOG;AACH,oDAAoD;AACpD,MAAM,CAAC,MAAM,cAAc,GAAG,OAAgB,CAAA;AAE9C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAA;AAE/B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAA;AAG5E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAA;AAGrD,mBAAmB;AACnB,MAAM,CAAC,MAAM,UAAU,GAAgC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAA;AAE5E
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/validate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAqBA,OAAO,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAqBA,OAAO,EAoBL,KAAK,WAAW,EAGhB,KAAK,SAAS,EAEf,MAAM,YAAY,CAAA;AAOnB,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,UAAU,EAAE,SAAS,EAAE,CAAA;CACxB;AAmgBD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CA2CxD"}
|