@hatiolab/figure-model 0.1.2 → 0.1.3
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/CHANGELOG.md +11 -11
- package/README.md +9 -9
- package/dist/blueprint.d.ts +32 -3
- package/dist/blueprint.d.ts.map +1 -1
- package/dist/blueprint.js +76 -6
- package/dist/blueprint.js.map +1 -1
- package/dist/cost-chart.d.ts +1 -1
- package/dist/cost-chart.js +2 -2
- package/dist/cost.d.ts +4 -4
- package/dist/cost.d.ts.map +1 -1
- package/dist/cost.js +2 -2
- package/dist/cost.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/keys.d.ts +2 -2
- package/dist/keys.js +3 -3
- package/dist/keys.js.map +1 -1
- package/dist/types.d.ts +38 -26
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +22 -10
- package/dist/types.js.map +1 -1
- package/dist/validate.d.ts +1 -1
- package/dist/validate.js +6 -6
- package/dist/validate.js.map +1 -1
- package/docs/design.md +2 -2
- package/docs/format-survey.md +3 -3
- package/docs/format.md +17 -17
- package/docs/validation.md +5 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# 변경 기록
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
버전은 [유의적 버전](https://semver.org/lang/ko/)을 따른다. 청사진 형식 자체의 버전은
|
|
4
4
|
`BLUEPRINT_VERSION` 으로 따로 매긴다 — 패키지 판을 올려도 형식이 그대로면 이 값은
|
|
5
5
|
움직이지 않는다.
|
|
6
6
|
|
|
7
|
-
## 아직
|
|
7
|
+
## 아직 버전을 붙이지 않음
|
|
8
8
|
|
|
9
9
|
### 분할 수 프리셋에 24 · 32 를 더했다
|
|
10
10
|
|
|
11
|
-
`SEGMENT_PRESETS` 가 `8 · 12 · 16 · 24 · 32` 가 되었다. 그 값을 쓰던
|
|
12
|
-
|
|
11
|
+
`SEGMENT_PRESETS` 가 `8 · 12 · 16 · 24 · 32` 가 되었다. 그 값을 쓰던 원본 데이터는 이제 위반이
|
|
12
|
+
아니다. 없던 값을 허용하는 것뿐이라 기존 원본 데이터에는 영향이 없다.
|
|
13
13
|
|
|
14
14
|
전에 셋으로 자른 근거는 **보드 배율의 톱뷰 실루엣**이었다(24 · 48 · 96px 에서
|
|
15
15
|
16 → 32 차이가 1.9 ~ 2.2%). 그 측정이 덮지 못하는 자리가 있다 — 저작면은 자산을
|
|
@@ -40,15 +40,15 @@ n각형이 원에서 벗어나는 최대 거리는 `r(1 − cos(π/n))` 이라
|
|
|
40
40
|
|
|
41
41
|
### 좌표 규약을 3D 도구들의 것으로 되돌렸다 — **깨지는 변경**
|
|
42
42
|
|
|
43
|
-
`PartTransform` 과 `base` 의
|
|
43
|
+
`PartTransform` 과 `base` 의 축·용어가 모두 바뀌었다. 0.1.0 으로 저작한 원본 데이터는 그대로
|
|
44
44
|
읽히지 않는다.
|
|
45
45
|
|
|
46
46
|
- 축이 `x` 오른쪽 · **`y` 위** · `z` 앞이다. glTF · three.js · Unity · Godot 와 같다.
|
|
47
|
-
전에는 things-scene **컴포넌트 state** 의
|
|
48
|
-
캔버스에서 온
|
|
47
|
+
전에는 things-scene **컴포넌트 state** 의 용어를 가져와 `z` 를 위로 뒀는데, 그것은 2D
|
|
48
|
+
캔버스에서 온 용어이지 3D 규약이 아니었다. things-scene 의 3D 세계는 y 가 위이고
|
|
49
49
|
반입한 glTF 모델도 축을 돌리지 않고 그대로 쓴다
|
|
50
50
|
- `width` · `height` · `depth` 를 쓰지 않는다. `transform.size` 와 `base` 가 `Vec3` 이고
|
|
51
|
-
축 이름으로
|
|
51
|
+
축 이름으로 부른다. 어느 축인지 외워야 하는 용어가 사고의 원인이었다
|
|
52
52
|
- 자리가 `transform.position` 으로 갈라졌고 **부품의 중심**을 가리킨다. 전에는 최소
|
|
53
53
|
모서리였다. 모델러들은 원점을 격자에 붙이고 크기는 따로 스냅한다
|
|
54
54
|
- 오류 코드 `missing-depth` 가 없어지고 `missing-position` · `missing-size` 가 생겼다.
|
|
@@ -63,13 +63,13 @@ n각형이 원에서 벗어나는 최대 거리는 `r(1 − cos(π/n))` 이라
|
|
|
63
63
|
|
|
64
64
|
### 담긴 것
|
|
65
65
|
|
|
66
|
-
- **형식** — `FigureSource`(편집 가능한
|
|
66
|
+
- **형식** — `FigureSource`(편집 가능한 원본 데이터)와 `FigureBlueprint`(보드가 렌더링하는 형태).
|
|
67
67
|
청사진 형식 판 `BLUEPRINT_VERSION = 1`
|
|
68
68
|
- **검증** — `validate()` 가 오류와 위반을 갈라 낸다. 가르는 기준은 「이 상태로 세울 수
|
|
69
69
|
있나」 하나다. 오류 24종·위반 9종이 목록으로 잠겨 있어 없는 코드를 낼 수 없다
|
|
70
|
-
- **컴파일** — `compile()` 이
|
|
70
|
+
- **컴파일** — `compile()` 이 원본 데이터를 재질별로 병합된 부품 그래프로 옮긴다
|
|
71
71
|
- **키** — `geometryKeyOf` · `materialKeyOf` · `groupKeyOf`. 무엇을 나눠 쓰고 무엇을
|
|
72
|
-
합치는지 정하는 식이며 `src/keys.ts` 가 유일한
|
|
72
|
+
합치는지 정하는 식이며 `src/keys.ts` 가 유일한 기준이다
|
|
73
73
|
- **원가와 점수** — `costOf` · `scoreOf` · `costCurve` · `costCurveSvg`. 인스턴스가 늘 때
|
|
74
74
|
무엇이 늘고 무엇이 그대로인지 낸다. 점수의 근거는 이미 선언된 한도뿐이다
|
|
75
75
|
- **문서** — `docs/format.md`(형식 레퍼런스) · `docs/validation.md`(코드표) ·
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @hatiolab/figure-model
|
|
2
2
|
|
|
3
|
-
Figure 저작 결과의
|
|
3
|
+
Figure 저작 결과의 **원본 형식과 검증**. 런타임 의존이 없다.
|
|
4
4
|
|
|
5
5
|
렌더러가 들어 있지 않다. 저작도구가 만들고, 서버가 검증해 저장하고, 뷰어·모델러가
|
|
6
6
|
소비한다 — 청사진은 실행 시점에 바깥에서 받아 이미 알고 있는 것이다.
|
|
@@ -43,7 +43,7 @@ call 을 줄이고, 2D 는 윤곽을 합쳐 `fill()` 호출을 줄인다.
|
|
|
43
43
|
|
|
44
44
|
격자 스냅 · 분할 프리셋(8·12·16) · 색 팔레트 · 디테일 등급(부품 3·8·20). 넷 다
|
|
45
45
|
「감각적인 로우폴리」를 위해 둔 규칙인데, 같은 규칙이 geometry 키와 material 키를
|
|
46
|
-
줄인다. 품질 규칙과 성능 규칙이 따로 있으면 서로
|
|
46
|
+
줄인다. 품질 규칙과 성능 규칙이 따로 있으면 서로 어긋난다. 여기서는 하나로 둔다.
|
|
47
47
|
|
|
48
48
|
## 쓰기
|
|
49
49
|
|
|
@@ -75,7 +75,7 @@ describeCost(cost).forEach(line => console.log(line))
|
|
|
75
75
|
// InstancedMesh 를 쓰면 draw call 이 4까지 내려간다
|
|
76
76
|
|
|
77
77
|
const { grade, score, tightest } = scoreOf(blueprint)
|
|
78
|
-
// grade 'A' · score 67 · tightest 는
|
|
78
|
+
// grade 'A' · score 67 · tightest 는 한도에 가장 가까운 항목
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
**그대로인 값이 곧 재활용되는 것이다.** 삼각형과 draw call 은 인스턴스에 비례하지만
|
|
@@ -104,7 +104,7 @@ import { costOf } from '@hatiolab/figure-model/cost'
|
|
|
104
104
|
| | |
|
|
105
105
|
| -------------- | ------------------------------------------------ |
|
|
106
106
|
| `things-scene` | `src/figure/` 가 청사진을 읽어 컴포넌트로 세운다 |
|
|
107
|
-
| 저작도구 |
|
|
107
|
+
| 저작도구 | 원본 데이터를 만들고 고친다 |
|
|
108
108
|
| 서버 | 저장 전에 `validate()` 로 거른다 |
|
|
109
109
|
|
|
110
110
|
### things-scene 과 형식이 갈리지 않게 하는 법
|
|
@@ -114,7 +114,7 @@ import { costOf } from '@hatiolab/figure-model/cost'
|
|
|
114
114
|
라이브러리가 아직 배포되지 않은 패키지를 의존성으로 가질 수 없기 때문이다.
|
|
115
115
|
|
|
116
116
|
두 벌이 되면 갈릴 수 있으므로, 이 모듈이 **실제로 낸** 청사진을 things-scene 의
|
|
117
|
-
`test/fixtures/figure-blueprint-sample.json` 에 두고 그쪽
|
|
117
|
+
`test/fixtures/figure-blueprint-sample.json` 에 두고 그쪽 테스트가 읽는다. 형식을
|
|
118
118
|
바꿨으면 표본을 다시 뽑는다.
|
|
119
119
|
|
|
120
120
|
```sh
|
|
@@ -122,8 +122,8 @@ import { costOf } from '@hatiolab/figure-model/cost'
|
|
|
122
122
|
node test/fixtures/emit-figure-blueprint.mjs
|
|
123
123
|
```
|
|
124
124
|
|
|
125
|
-
그때 그쪽
|
|
126
|
-
`import type`
|
|
125
|
+
그때 그쪽 테스트가 실패하면 읽는 쪽 계약도 함께 고친다. 이 패키지가 배포되고 나면
|
|
126
|
+
`import type` 하나로 줄일 수 있다.
|
|
127
127
|
|
|
128
128
|
## 명령
|
|
129
129
|
|
|
@@ -148,9 +148,9 @@ npm run format 서식 정리
|
|
|
148
148
|
|
|
149
149
|
## 의존
|
|
150
150
|
|
|
151
|
-
**런타임 의존이 없다.** 브라우저에서도 그대로
|
|
151
|
+
**런타임 의존이 없다.** 브라우저에서도 그대로 동작한다.
|
|
152
152
|
|
|
153
|
-
devDependency 는 셋 — `typescript`(타입 검사·`.d.ts` 생성), `@types/node`(
|
|
153
|
+
devDependency 는 셋 — `typescript`(타입 검사·`.d.ts` 생성), `@types/node`(테스트와
|
|
154
154
|
벤치가 `node:test`·`node:zlib` 을 쓴다), `prettier`(서식). 셋 다 `dist` 에 들어가지
|
|
155
155
|
않는다.
|
|
156
156
|
|
package/dist/blueprint.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ValidateResult } from './validate.ts';
|
|
2
2
|
export { geometryKeyOf, materialKeyOf, usesSegments } from './keys.ts';
|
|
3
|
-
import { type FigureBlueprint, type FigurePart } from './types.ts';
|
|
4
|
-
/** 컴파일할 수 없을 때 던진다.
|
|
3
|
+
import { type FigureBlueprint, type FigurePart, type Axis, type PartTransform, type Vec3 } from './types.ts';
|
|
4
|
+
/** 컴파일할 수 없을 때 던진다. 오류보고없이 빈 청사진을 돌려주지 않는다. */
|
|
5
5
|
export declare class FigureCompileError extends Error {
|
|
6
6
|
readonly errors: ValidateResult['errors'];
|
|
7
7
|
constructor(errors: ValidateResult['errors']);
|
|
@@ -22,7 +22,36 @@ export declare class FigureCompileError extends Error {
|
|
|
22
22
|
*/
|
|
23
23
|
export declare function trianglesOf(part: FigurePart): number;
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* 회전까지 반영한 부품의 축별 크기.
|
|
26
|
+
*
|
|
27
|
+
* 회전한 상자의 여덟 꼭짓점을 각 축에 내린 것 — 축에 맞춘 경계다. 회전 행렬은
|
|
28
|
+
* `Rx·Ry·Rz` 이고 three 의 기본 Euler 순서('XYZ')와 같다. 그리는 쪽이 같은 순서로
|
|
29
|
+
* 돌리므로 여기서만 다르면 답이 달라진다.
|
|
30
|
+
*/
|
|
31
|
+
export declare function rotatedExtentOf(part: {
|
|
32
|
+
transform: PartTransform;
|
|
33
|
+
}): Vec3;
|
|
34
|
+
/**
|
|
35
|
+
* `stretch` 일 때 늘어나는 축.
|
|
36
|
+
*
|
|
37
|
+
* 형식에 축을 적는 자리가 없다. 대신 **부품이 가장 길게 뻗은 축**으로 정한다. 문서가
|
|
38
|
+
* 든 예(프레임 · 벨트 · 레일)가 전부 "길어서 그 물건인 것"이라 이 규칙과 맞는다.
|
|
39
|
+
* 정육면체에 가까운 부품에는 뜻이 없는데, 그런 부품은 애초에 `stretch` 를 쓸 자리가 아니다.
|
|
40
|
+
*
|
|
41
|
+
* **회전을 반영해 측정한다.** 크기만 보면 x 로 길게 그린 레일을 y 로 90° 돌려 세워도 여전히
|
|
42
|
+
* x 라고 답한다. 그러면 레일이 길이가 아니라 두께 쪽으로 늘어난다.
|
|
43
|
+
*
|
|
44
|
+
* 두 축의 길이가 같으면 x → z → y 순으로 정한다. 순서를 정해 두지 않으면 같은 부품이
|
|
45
|
+
* 소비처마다 다른 축으로 늘어난다.
|
|
46
|
+
*
|
|
47
|
+
* **소비처가 저마다 계산하면 안 된다.** 3D 와 2D 톱뷰와 속성 편집기가 같은 답을 내야
|
|
48
|
+
* 하므로 여기 한 곳에서만 정한다.
|
|
49
|
+
*/
|
|
50
|
+
export declare function stretchAxisOf(part: {
|
|
51
|
+
transform: PartTransform;
|
|
52
|
+
}): Axis;
|
|
53
|
+
/**
|
|
54
|
+
* 원본 데이터를 청사진으로 컴파일한다.
|
|
26
55
|
*
|
|
27
56
|
* `errors` 가 있으면 던진다 — 세울 수 없는 것을 반쯤 세운 청사진으로 돌려주면
|
|
28
57
|
* 어디서 잘못됐는지 알 수 없다. `violations` 는 청사진에 담아 돌려준다. 정책 위반은
|
package/dist/blueprint.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint.d.ts","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blueprint.d.ts","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAI7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACtE,OAAO,EAML,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;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAoBpD;AAKD;;;;;;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;AAiBD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,CAmFxD"}
|
package/dist/blueprint.js
CHANGED
|
@@ -1,25 +1,31 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* 원본 데이터 → 청사진 컴파일.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* 원본 데이터는 편집을 위한 형식이다. 보드가 그것을 그대로 렌더링하면 부품마다 mesh 가 생겨서
|
|
7
7
|
* 자산 500 개 × 부품 8 개 = 4000 draw call 이 된다. 청사진은 그것을 줄인 형식이다.
|
|
8
8
|
*
|
|
9
9
|
* 핵심은 **병합**이다. 같은 재질·슬롯을 쓰고 애니메이션이 없는 부품을 한 묶음으로
|
|
10
10
|
* 묶는다. 3D 는 그 묶음의 geometry 를 합치고, 2D 는 윤곽을 한 path 로 합쳐 한 번에
|
|
11
11
|
* 채운다. 병목이 양쪽 다 묶음 수여서 같은 병합이 함께 값을 한다.
|
|
12
12
|
*
|
|
13
|
-
* 자산당 묶음 수 = 재질·슬롯 조합 수 + 애니메이션 포인트 수
|
|
13
|
+
* 자산당 묶음 수 = 재질·슬롯 조합 수 + 애니메이션 포인트 수 + 크기 반응이 다른 부품 수
|
|
14
|
+
*
|
|
15
|
+
* **합칠 수 없는 부품이 둘 있다.**
|
|
14
16
|
*
|
|
15
17
|
* 애니메이션이 걸린 부품은 합치지 않는다. 합치면 그 부품만 따로 움직일 수 없다.
|
|
18
|
+
*
|
|
19
|
+
* `sizing` 이 `'scale'` 이 아닌 부품도 합치지 않는다. 이유가 같다 — 합친 geometry 는
|
|
20
|
+
* 변환을 하나만 받는데, `fixed` 는 크기를 그대로 두고 `stretch` 는 한 축만 늘리고
|
|
21
|
+
* `repeat` 는 개수를 바꾼다. 인스턴스마다 다르게 반응해야 하므로 각자 서야 한다.
|
|
16
22
|
*/
|
|
17
23
|
import { validate } from "./validate.js";
|
|
18
24
|
import { geometryKeyOf, groupKeyOf, materialKeyOf, usesSegments } from "./keys.js";
|
|
19
|
-
// 키는 keys.ts 가
|
|
25
|
+
// 키는 keys.ts 가 기준이 되는 원본이다. 소비처가 쓰던 이름 그대로 다시 내보낸다.
|
|
20
26
|
export { geometryKeyOf, materialKeyOf, usesSegments } from "./keys.js";
|
|
21
27
|
import { BLUEPRINT_VERSION } from "./types.js";
|
|
22
|
-
/** 컴파일할 수 없을 때 던진다.
|
|
28
|
+
/** 컴파일할 수 없을 때 던진다. 오류보고없이 빈 청사진을 돌려주지 않는다. */
|
|
23
29
|
export class FigureCompileError extends Error {
|
|
24
30
|
errors;
|
|
25
31
|
constructor(errors) {
|
|
@@ -68,6 +74,57 @@ export function trianglesOf(part) {
|
|
|
68
74
|
}
|
|
69
75
|
/** `sizing` 이 없으면 무엇으로 보나 — 비례 확대가 가장 예측 가능하다. */
|
|
70
76
|
const DEFAULT_SIZING = 'scale';
|
|
77
|
+
/**
|
|
78
|
+
* 회전까지 반영한 부품의 축별 크기.
|
|
79
|
+
*
|
|
80
|
+
* 회전한 상자의 여덟 꼭짓점을 각 축에 내린 것 — 축에 맞춘 경계다. 회전 행렬은
|
|
81
|
+
* `Rx·Ry·Rz` 이고 three 의 기본 Euler 순서('XYZ')와 같다. 그리는 쪽이 같은 순서로
|
|
82
|
+
* 돌리므로 여기서만 다르면 답이 달라진다.
|
|
83
|
+
*/
|
|
84
|
+
export function rotatedExtentOf(part) {
|
|
85
|
+
const { size, rotation } = part.transform;
|
|
86
|
+
if (!rotation)
|
|
87
|
+
return { ...size };
|
|
88
|
+
const rad = Math.PI / 180;
|
|
89
|
+
const cx = Math.cos((rotation.x ?? 0) * rad);
|
|
90
|
+
const sx = Math.sin((rotation.x ?? 0) * rad);
|
|
91
|
+
const cy = Math.cos((rotation.y ?? 0) * rad);
|
|
92
|
+
const sy = Math.sin((rotation.y ?? 0) * rad);
|
|
93
|
+
const cz = Math.cos((rotation.z ?? 0) * rad);
|
|
94
|
+
const sz = Math.sin((rotation.z ?? 0) * rad);
|
|
95
|
+
// Rx·Ry·Rz 의 세 줄
|
|
96
|
+
const r = [
|
|
97
|
+
[cy * cz, -cy * sz, sy],
|
|
98
|
+
[sx * sy * cz + cx * sz, -sx * sy * sz + cx * cz, -sx * cy],
|
|
99
|
+
[-cx * sy * cz + sx * sz, cx * sy * sz + sx * cz, cx * cy]
|
|
100
|
+
];
|
|
101
|
+
const along = (row) => Math.abs(row[0]) * size.x + Math.abs(row[1]) * size.y + Math.abs(row[2]) * size.z;
|
|
102
|
+
return { x: along(r[0]), y: along(r[1]), z: along(r[2]) };
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* `stretch` 일 때 늘어나는 축.
|
|
106
|
+
*
|
|
107
|
+
* 형식에 축을 적는 자리가 없다. 대신 **부품이 가장 길게 뻗은 축**으로 정한다. 문서가
|
|
108
|
+
* 든 예(프레임 · 벨트 · 레일)가 전부 "길어서 그 물건인 것"이라 이 규칙과 맞는다.
|
|
109
|
+
* 정육면체에 가까운 부품에는 뜻이 없는데, 그런 부품은 애초에 `stretch` 를 쓸 자리가 아니다.
|
|
110
|
+
*
|
|
111
|
+
* **회전을 반영해 측정한다.** 크기만 보면 x 로 길게 그린 레일을 y 로 90° 돌려 세워도 여전히
|
|
112
|
+
* x 라고 답한다. 그러면 레일이 길이가 아니라 두께 쪽으로 늘어난다.
|
|
113
|
+
*
|
|
114
|
+
* 두 축의 길이가 같으면 x → z → y 순으로 정한다. 순서를 정해 두지 않으면 같은 부품이
|
|
115
|
+
* 소비처마다 다른 축으로 늘어난다.
|
|
116
|
+
*
|
|
117
|
+
* **소비처가 저마다 계산하면 안 된다.** 3D 와 2D 톱뷰와 속성 편집기가 같은 답을 내야
|
|
118
|
+
* 하므로 여기 한 곳에서만 정한다.
|
|
119
|
+
*/
|
|
120
|
+
export function stretchAxisOf(part) {
|
|
121
|
+
const { x, y, z } = rotatedExtentOf(part);
|
|
122
|
+
if (x >= z && x >= y)
|
|
123
|
+
return 'x';
|
|
124
|
+
if (z >= y)
|
|
125
|
+
return 'z';
|
|
126
|
+
return 'y';
|
|
127
|
+
}
|
|
71
128
|
function memberOf(part) {
|
|
72
129
|
const member = {
|
|
73
130
|
name: part.name,
|
|
@@ -86,7 +143,7 @@ function memberOf(part) {
|
|
|
86
143
|
return member;
|
|
87
144
|
}
|
|
88
145
|
/**
|
|
89
|
-
*
|
|
146
|
+
* 원본 데이터를 청사진으로 컴파일한다.
|
|
90
147
|
*
|
|
91
148
|
* `errors` 가 있으면 던진다 — 세울 수 없는 것을 반쯤 세운 청사진으로 돌려주면
|
|
92
149
|
* 어디서 잘못됐는지 알 수 없다. `violations` 는 청사진에 담아 돌려준다. 정책 위반은
|
|
@@ -124,6 +181,19 @@ export function compile(source) {
|
|
|
124
181
|
groups.push(group);
|
|
125
182
|
continue;
|
|
126
183
|
}
|
|
184
|
+
if ((part.sizing ?? DEFAULT_SIZING) !== 'scale') {
|
|
185
|
+
// 크기 반응이 다른 부품도 단독 묶음이다 — 합친 geometry 는 변환을 하나만 받는다
|
|
186
|
+
const group = {
|
|
187
|
+
materialKey: materialKeyOf(part),
|
|
188
|
+
material: part.material,
|
|
189
|
+
animated: false,
|
|
190
|
+
members: [memberOf(part)]
|
|
191
|
+
};
|
|
192
|
+
if (part.slot !== undefined)
|
|
193
|
+
group.slot = part.slot;
|
|
194
|
+
groups.push(group);
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
127
197
|
const key = groupKeyOf(part);
|
|
128
198
|
const existing = byKey.get(key);
|
|
129
199
|
if (existing) {
|
package/dist/blueprint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"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"}
|
package/dist/cost-chart.d.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* 정점 버퍼 · 재질 10,000 개에서도 그대로다 ← 재활용되는 것
|
|
9
9
|
* InstancedMesh 의 draw call 평평하다 ← 아직 얻지 않은 몫
|
|
10
10
|
*
|
|
11
|
-
* 의존을 만들지 않으려고 SVG 를 문자열로 낸다. 브라우저에서도 node 에서도 그대로
|
|
11
|
+
* 의존을 만들지 않으려고 SVG 를 문자열로 낸다. 브라우저에서도 node 에서도 그대로 동작한다.
|
|
12
12
|
* 색은 다섯 계열만 쓰고 축과 글자는 `currentColor` 라서 밝은 테마·어두운 테마 양쪽에서
|
|
13
13
|
* 읽힌다.
|
|
14
14
|
*/
|
package/dist/cost-chart.js
CHANGED
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
* 정점 버퍼 · 재질 10,000 개에서도 그대로다 ← 재활용되는 것
|
|
9
9
|
* InstancedMesh 의 draw call 평평하다 ← 아직 얻지 않은 몫
|
|
10
10
|
*
|
|
11
|
-
* 의존을 만들지 않으려고 SVG 를 문자열로 낸다. 브라우저에서도 node 에서도 그대로
|
|
11
|
+
* 의존을 만들지 않으려고 SVG 를 문자열로 낸다. 브라우저에서도 node 에서도 그대로 동작한다.
|
|
12
12
|
* 색은 다섯 계열만 쓰고 축과 글자는 `currentColor` 라서 밝은 테마·어두운 테마 양쪽에서
|
|
13
13
|
* 읽힌다.
|
|
14
14
|
*/
|
|
15
15
|
import { costOf } from "./cost.js";
|
|
16
16
|
/**
|
|
17
|
-
* 1-2-5 간격으로 자릿수를
|
|
17
|
+
* 1-2-5 간격으로 자릿수를 순회한다.
|
|
18
18
|
*
|
|
19
19
|
* 로그 축에서 눈에 고르게 놓이는 값들이다. 1·2·5·10·20·50·100 … 등비로 늘리면 자릿수
|
|
20
20
|
* 하나에 점이 셋씩 놓여 곡선이 매끄럽다.
|
package/dist/cost.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* 이걸 100개 놓으면 무엇이 100배가 되고 무엇이 그대로인가.
|
|
7
7
|
*
|
|
8
|
-
* 그대로인 것이 곧 **재활용되는 것**이다. geometry 와 재질은 타입당
|
|
8
|
+
* 그대로인 것이 곧 **재활용되는 것**이다. geometry 와 재질은 타입당 하나라 인스턴스
|
|
9
9
|
* 수와 무관하다. 반면 삼각형과 draw call 은 인스턴스에 비례한다. 이 둘을 갈라 보여
|
|
10
10
|
* 주면, 저작자가 「부품을 하나 더 넣을까」를 근거를 갖고 정할 수 있다.
|
|
11
11
|
*/
|
|
@@ -120,8 +120,8 @@ export interface FigureScore {
|
|
|
120
120
|
/**
|
|
121
121
|
* 0–100. **선언된 한도에 남은 여유**다.
|
|
122
122
|
*
|
|
123
|
-
* 가장
|
|
124
|
-
* 병목이 되기 때문이다. 평균을 내면
|
|
123
|
+
* 한도에 가장 가까운 항목 하나로 정한다. 넷 중 하나만 꽉 차 있어도 대량 배치에서는 그것이
|
|
124
|
+
* 병목이 되기 때문이다. 평균을 내면 한도에 가까운 하나가 여유 있는 셋에 묻힌다.
|
|
125
125
|
*/
|
|
126
126
|
score: number;
|
|
127
127
|
/**
|
|
@@ -130,7 +130,7 @@ export interface FigureScore {
|
|
|
130
130
|
* D 는 곧 위반이 있다는 뜻이다 — `blueprint.violations` 에 사유가 들어 있다.
|
|
131
131
|
*/
|
|
132
132
|
grade: FigureGrade;
|
|
133
|
-
/** 가장
|
|
133
|
+
/** 한도에 가장 가까운 항목. **여기부터 고치면 된다.** */
|
|
134
134
|
tightest: FigureBudgetUse;
|
|
135
135
|
budgets: FigureBudgetUse[];
|
|
136
136
|
/**
|
package/dist/cost.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;;;;OAKG;IACH,oBAAoB,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IAEZ,eAAe;IACf,KAAK,EAAE,MAAM,CAAA;IAEb,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAA;IAEjB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAA;IAEd;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAA;IAEtB,uCAAuC;IACvC,iBAAiB,EAAE,MAAM,CAAA;IAEzB;;;;;OAKG;IACH,eAAe,EAAE,MAAM,CAAA;IAEvB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB,yBAAyB;IACzB,EAAE,EAAE,YAAY,CAAA;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,eAAe,EAAE,SAAS,SAAM,GAAG,UAAU,CA0C9E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAwBvD;AAID;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,SAAS,CAAA;IAClE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAE/C,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;;;OAIG;IACH,KAAK,EAAE,WAAW,CAAA;IAElB,
|
|
1
|
+
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;;;;OAKG;IACH,oBAAoB,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IAEZ,eAAe;IACf,KAAK,EAAE,MAAM,CAAA;IAEb,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAA;IAEjB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAA;IAEd;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAA;IAEtB,uCAAuC;IACvC,iBAAiB,EAAE,MAAM,CAAA;IAEzB;;;;;OAKG;IACH,eAAe,EAAE,MAAM,CAAA;IAEvB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB,yBAAyB;IACzB,EAAE,EAAE,YAAY,CAAA;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,eAAe,EAAE,SAAS,SAAM,GAAG,UAAU,CA0C9E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAwBvD;AAID;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,SAAS,CAAA;IAClE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAE/C,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;;;OAIG;IACH,KAAK,EAAE,WAAW,CAAA;IAElB,sCAAsC;IACtC,QAAQ,EAAE,eAAe,CAAA;IAEzB,OAAO,EAAE,eAAe,EAAE,CAAA;IAE1B;;;;;OAKG;IACH,KAAK,EAAE;QACL,kBAAkB;QAClB,QAAQ,EAAE,MAAM,CAAA;QAChB,eAAe;QACf,KAAK,EAAE,MAAM,CAAA;QACb,uCAAuC;QACvC,KAAK,EAAE,MAAM,CAAA;QACb,mBAAmB;QACnB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAaD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,eAAe,GAAG,WAAW,CAoE/D"}
|
package/dist/cost.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* 이걸 100개 놓으면 무엇이 100배가 되고 무엇이 그대로인가.
|
|
7
7
|
*
|
|
8
|
-
* 그대로인 것이 곧 **재활용되는 것**이다. geometry 와 재질은 타입당
|
|
8
|
+
* 그대로인 것이 곧 **재활용되는 것**이다. geometry 와 재질은 타입당 하나라 인스턴스
|
|
9
9
|
* 수와 무관하다. 반면 삼각형과 draw call 은 인스턴스에 비례한다. 이 둘을 갈라 보여
|
|
10
10
|
* 주면, 저작자가 「부품을 하나 더 넣을까」를 근거를 갖고 정할 수 있다.
|
|
11
11
|
*/
|
|
@@ -113,7 +113,7 @@ export function scoreOf(blueprint) {
|
|
|
113
113
|
used: cost.groups,
|
|
114
114
|
limit: LIMITS.materialGroups,
|
|
115
115
|
ratio: cost.groups / LIMITS.materialGroups,
|
|
116
|
-
why: '인스턴스 하나마다 이만큼 draw call 이
|
|
116
|
+
why: '인스턴스 하나마다 이만큼 draw call 이 필요하다'
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
key: 'animations',
|
package/dist/cost.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from './types.ts';
|
|
2
2
|
export { validate, type ValidateResult } from './validate.ts';
|
|
3
|
-
export { compile, FigureCompileError, geometryKeyOf, materialKeyOf, trianglesOf, usesSegments } from './blueprint.ts';
|
|
3
|
+
export { compile, FigureCompileError, geometryKeyOf, materialKeyOf, rotatedExtentOf, stretchAxisOf, trianglesOf, usesSegments } from './blueprint.ts';
|
|
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
|
//# 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,
|
|
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"}
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
export * from "./types.js";
|
|
13
13
|
export { validate } from "./validate.js";
|
|
14
|
-
export { compile, FigureCompileError, geometryKeyOf, materialKeyOf, trianglesOf, usesSegments } from "./blueprint.js";
|
|
14
|
+
export { compile, FigureCompileError, geometryKeyOf, materialKeyOf, rotatedExtentOf, stretchAxisOf, trianglesOf, usesSegments } from "./blueprint.js";
|
|
15
15
|
export { costOf, describeCost, scoreOf } from "./cost.js";
|
|
16
16
|
export { costCurve, costCurveSvg } from "./cost-chart.js";
|
|
17
17
|
//# 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,
|
|
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"}
|
package/dist/keys.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 키 — 무엇을 무엇과 나눠 쓰는지, 무엇을 무엇과 합치는지를 정하는 식.
|
|
3
3
|
*
|
|
4
|
-
* **이 파일이 유일한
|
|
4
|
+
* **이 파일이 유일한 기준이다.** 검사(`validate.ts`)와 컴파일(`blueprint.ts`)이 같은
|
|
5
5
|
* 식을 써야 한다. 다르면 「묶음 수 한도를 지켰다」고 검사가 말한 것과 실제로 만들어지는
|
|
6
6
|
* 묶음 수가 어긋나고, 그 어긋남은 오류 없이 성능으로만 나타난다.
|
|
7
7
|
*
|
|
@@ -23,7 +23,7 @@ export declare function geometryKeyOf(part: FigurePart): string;
|
|
|
23
23
|
/**
|
|
24
24
|
* MaterialBank 키. 색은 토큰 이름으로 둔다 — 값을 구우면 테마를 바꿔도 안 따라온다.
|
|
25
25
|
*
|
|
26
|
-
* `transparent` 가 키에
|
|
26
|
+
* `transparent` 가 키에 들어간다. 투명 재질은 별도 정렬 경로를 타므로 불투명과 합칠 수 없다.
|
|
27
27
|
*/
|
|
28
28
|
export declare function materialKeyOf(part: FigurePart): string;
|
|
29
29
|
/**
|
package/dist/keys.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 키 — 무엇을 무엇과 나눠 쓰는지, 무엇을 무엇과 합치는지를 정하는 식.
|
|
3
3
|
*
|
|
4
|
-
* **이 파일이 유일한
|
|
4
|
+
* **이 파일이 유일한 기준이다.** 검사(`validate.ts`)와 컴파일(`blueprint.ts`)이 같은
|
|
5
5
|
* 식을 써야 한다. 다르면 「묶음 수 한도를 지켰다」고 검사가 말한 것과 실제로 만들어지는
|
|
6
6
|
* 묶음 수가 어긋나고, 그 어긋남은 오류 없이 성능으로만 나타난다.
|
|
7
7
|
*
|
|
@@ -34,11 +34,11 @@ export function geometryKeyOf(part) {
|
|
|
34
34
|
/**
|
|
35
35
|
* MaterialBank 키. 색은 토큰 이름으로 둔다 — 값을 구우면 테마를 바꿔도 안 따라온다.
|
|
36
36
|
*
|
|
37
|
-
* `transparent` 가 키에
|
|
37
|
+
* `transparent` 가 키에 들어간다. 투명 재질은 별도 정렬 경로를 타므로 불투명과 합칠 수 없다.
|
|
38
38
|
*/
|
|
39
39
|
export function materialKeyOf(part) {
|
|
40
40
|
const m = part.material;
|
|
41
|
-
// 표면이 키에
|
|
41
|
+
// 표면이 키에 들어간다. 같은 색이라도 표면이 다르면 다른 재질이다. 같은 표면끼리는
|
|
42
42
|
// 한 재질을 나눠 쓴다(이름으로 가리키는 고정 자산이라 인스턴스와 무관하다).
|
|
43
43
|
const surface = m.surface ? `s${m.surface.kind}:${m.surface.ref}` : '-';
|
|
44
44
|
return [m.token ?? '-', m.preset ?? '-', m.flatShading ? 'f' : '-', m.transparent ? 't' : '-', surface].join('|');
|
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;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA;IACvB,
|
|
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;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA;IACvB,iDAAiD;IACjD,6CAA6C;IAC7C,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;IACvE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACnH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAA;AACtD,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** 저작에 쓰는 프리미티브. mesh 계열과 extrude 계열로
|
|
1
|
+
/** 저작에 쓰는 프리미티브. mesh 계열과 extrude 계열로 나뉜다. */
|
|
2
2
|
export declare const PRIMITIVE_KINDS: readonly ["cube", "wall", "cylinder", "sphere", "rect", "polygon"];
|
|
3
3
|
export type PrimitiveKind = (typeof PRIMITIVE_KINDS)[number];
|
|
4
4
|
/** extrude 계열은 2D 단면이 필요하다. */
|
|
@@ -26,7 +26,19 @@ export type MaterialPreset = (typeof MATERIAL_PRESETS)[number];
|
|
|
26
26
|
*/
|
|
27
27
|
export declare const SIZING_RULES: readonly ["scale", "fixed", "stretch", "repeat"];
|
|
28
28
|
export type SizingRule = (typeof SIZING_RULES)[number];
|
|
29
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* 디테일 등급 — 이 형상을 얼마나 상세하게 만들 것인지 저작자가 밝히는 값.
|
|
31
|
+
*
|
|
32
|
+
* S 단순 표지 · 기둥처럼 형태가 단순한 것
|
|
33
|
+
* M 보통 대부분의 설비
|
|
34
|
+
* L 상세 화면의 주역이 되는 큰 설비
|
|
35
|
+
*
|
|
36
|
+
* 밝힌 등급이 부품 수 상한을 정한다. 그리고 성숙도가 그 등급에 걸맞게 만들어졌는지
|
|
37
|
+
* 본다. 등급만 L 로 올려 놓고 부품 셋으로 끝내면 밝힌 것과 만든 것이 다르다.
|
|
38
|
+
*
|
|
39
|
+
* **뜻을 여기 적어 두는 이유가 있다.** 한동안 이 값의 내용물이 부품 수 상한 하나뿐이었다.
|
|
40
|
+
* 그래서 "왜 L 인가" 에 답할 수가 없었고, 저작 화면도 등급이라는 글자만 보여 주었다.
|
|
41
|
+
*/
|
|
30
42
|
export declare const DETAIL_LEVELS: readonly ["S", "M", "L"];
|
|
31
43
|
export type DetailLevel = (typeof DETAIL_LEVELS)[number];
|
|
32
44
|
/** 등급별 부품 수 상한. */
|
|
@@ -57,19 +69,19 @@ export interface Point2 {
|
|
|
57
69
|
*
|
|
58
70
|
* **`x` 오른쪽, `y` 위, `z` 앞(보는 쪽).** glTF·three.js·Unity 와 같다.
|
|
59
71
|
*
|
|
60
|
-
* 전에는 things-scene 컴포넌트 state 의
|
|
61
|
-
*
|
|
62
|
-
* 위이고,
|
|
63
|
-
*
|
|
72
|
+
* 전에는 things-scene 컴포넌트 state 의 용어를 그대로 가져와 `z` 를 위로 두었다. 그
|
|
73
|
+
* 용어는 2D 캔버스에서 온 것이지 3D 규약이 아니다. things-scene 의 3D 세계는 y 가
|
|
74
|
+
* 위이고, 불러온 glTF 모델도 축을 돌리지 않고 그대로 쓴다. 도형 안쪽 좌표까지 캔버스
|
|
75
|
+
* 용어를 따를 이유가 없어서 되돌렸다.
|
|
64
76
|
*
|
|
65
|
-
* ##
|
|
77
|
+
* ## 용어도 모델러가 쓰는 그대로다
|
|
66
78
|
*
|
|
67
79
|
* `position`·`rotation`·`size` 셋이고 저마다 X·Y·Z 를 갖는다. Blender 의
|
|
68
80
|
* Location·Rotation·Dimensions, Godot 의 Position·Rotation·Size, glTF 의
|
|
69
81
|
* translation·rotation·scale 과 같은 짜임이다.
|
|
70
82
|
*
|
|
71
|
-
* `width`·`height`·`depth` 는 쓰지 않는다. 그
|
|
72
|
-
*
|
|
83
|
+
* `width`·`height`·`depth` 는 쓰지 않는다. 그 용어들은 **어느 축인지를 따로 외워야
|
|
84
|
+
* 한다.** 축을 되돌린 원인이 바로 그것이었다.
|
|
73
85
|
*
|
|
74
86
|
* 보드 컴포넌트의 state 는 여전히 `width`·`height`·`depth` 이고 축 배정도 다르다.
|
|
75
87
|
* 그 환산은 그리는 쪽 경계 한 곳에서 한다. 형식 안에서는 축이 한 뜻이다.
|
|
@@ -138,8 +150,8 @@ export interface PartMaterial {
|
|
|
138
150
|
/**
|
|
139
151
|
* 면을 각지게 그리나. **없으면 각지게 그린다(`true`).**
|
|
140
152
|
*
|
|
141
|
-
* 기본값을
|
|
142
|
-
* 두었는데, 저작 화면의 체크상자는 값이 없으면 꺼진 것으로
|
|
153
|
+
* 기본값을 여기에 정해 둔다. 전에는 형식에 기본값이 없고 그리는 쪽만 `?? true` 로
|
|
154
|
+
* 두었는데, 저작 화면의 체크상자는 값이 없으면 꺼진 것으로 보였다. **적힌 것과
|
|
143
155
|
* 보이는 것이 달랐다.**
|
|
144
156
|
*
|
|
145
157
|
* 각진 것이 기본인 이유는 저폴리의 생김새가 거기서 나오기 때문이다. 12 분할 원기둥을
|
|
@@ -155,7 +167,7 @@ export interface PartMaterial {
|
|
|
155
167
|
*/
|
|
156
168
|
surface?: PartSurface;
|
|
157
169
|
}
|
|
158
|
-
/** `sizing === 'repeat'` 일 때
|
|
170
|
+
/** `sizing === 'repeat'` 일 때 늘어나는 축과 간격. */
|
|
159
171
|
export interface RepeatSpec {
|
|
160
172
|
axis: Axis;
|
|
161
173
|
/** 부품 사이 간격. 비례 그리드 단위로 두면 늘려도 정돈된다. */
|
|
@@ -164,7 +176,7 @@ export interface RepeatSpec {
|
|
|
164
176
|
/**
|
|
165
177
|
* 애니메이션 포인트.
|
|
166
178
|
*
|
|
167
|
-
* `pivot` 을 적지 않으면
|
|
179
|
+
* `pivot` 을 적지 않으면 회전축이 부품 자기 중심이 된다.
|
|
168
180
|
* `threed/real-object-extrude.ts:98` 의 `geometry.center()` 때문이다. 교반 축이
|
|
169
181
|
* 몸체 가운데를 돌아야 하면 피봇을 명시해야 한다.
|
|
170
182
|
*/
|
|
@@ -191,7 +203,7 @@ export interface PartShape {
|
|
|
191
203
|
export interface FigurePart {
|
|
192
204
|
/**
|
|
193
205
|
* 부품 이름. **저장되는 식별자다** — 바인딩·애니메이션·슬롯이 이 이름을 가리킨다.
|
|
194
|
-
* 바꾸면 인스턴스의 바인딩이
|
|
206
|
+
* 바꾸면 인스턴스의 바인딩이 오류보고없이 끊긴다.
|
|
195
207
|
*/
|
|
196
208
|
name: string;
|
|
197
209
|
primitive: PrimitiveKind;
|
|
@@ -208,20 +220,20 @@ export interface FigurePart {
|
|
|
208
220
|
animation?: AnimationPoint;
|
|
209
221
|
label?: LabelSpec;
|
|
210
222
|
}
|
|
211
|
-
/** 저작
|
|
223
|
+
/** 저작 결과. 편집 가능한 원본 데이터. */
|
|
212
224
|
export interface FigureSource {
|
|
213
225
|
/** 컴포넌트 타입 이름. **저장되는 식별자다.** */
|
|
214
226
|
type: string;
|
|
215
227
|
/**
|
|
216
228
|
* 기준 크기. 배치 크기는 이 비율에서 산출된다.
|
|
217
229
|
*
|
|
218
|
-
* 부품과 같은
|
|
219
|
-
* 배정도 달라서, 그리는 쪽 경계에서 한 번
|
|
230
|
+
* 부품과 같은 축이다. `base.y` 가 높이다. 보드 컴포넌트의 state 는 용어도 축
|
|
231
|
+
* 배정도 달라서, 그리는 쪽 경계에서 한 번 변환해 받는다.
|
|
220
232
|
*/
|
|
221
233
|
base: Vec3;
|
|
222
234
|
anchor?: Vec3;
|
|
223
235
|
detailLevel?: DetailLevel;
|
|
224
|
-
/** StyleKit 참조. 팔레트·분할 수·그리드·등급을 한
|
|
236
|
+
/** StyleKit 참조. 팔레트·분할 수·그리드·등급을 한 번에 받는다. */
|
|
225
237
|
styleKit?: string;
|
|
226
238
|
parts: FigurePart[];
|
|
227
239
|
}
|
|
@@ -237,7 +249,7 @@ export interface BlueprintMember {
|
|
|
237
249
|
* 곡면의 분할 수. `SEGMENTED_PRIMITIVES` 인 부품에만 있다.
|
|
238
250
|
*
|
|
239
251
|
* `geometryKey` 안에도 들어 있지만 키는 문자열이라 다시 파싱해야 한다. 그리는 쪽이
|
|
240
|
-
* 2D 톱뷰를 3D 와 **같은 분할 수**로 근사하려면 이 값이 필요하므로 따로
|
|
252
|
+
* 2D 톱뷰를 3D 와 **같은 분할 수**로 근사하려면 이 값이 필요하므로 따로 제공한다.
|
|
241
253
|
*/
|
|
242
254
|
segments?: number;
|
|
243
255
|
sizing: SizingRule;
|
|
@@ -257,7 +269,7 @@ export interface BlueprintGroup {
|
|
|
257
269
|
materialKey: string;
|
|
258
270
|
material: PartMaterial;
|
|
259
271
|
slot?: MaterialSlot;
|
|
260
|
-
/** 애니메이션 포인트에
|
|
272
|
+
/** 애니메이션 포인트에 연결된 그룹인지. 연결된 그룹은 부품을 하나만 갖는다. */
|
|
261
273
|
animated: boolean;
|
|
262
274
|
members: BlueprintMember[];
|
|
263
275
|
}
|
|
@@ -285,8 +297,8 @@ export interface Violation {
|
|
|
285
297
|
* 값으로 좁혀져 있어, 코드를 새로 쓰면 타입 검사가 막는다.
|
|
286
298
|
*
|
|
287
299
|
* 목록을 두는 이유는 소비처 때문이다. 오류를 사용자에게 보이는 쪽은 코드마다 문구와
|
|
288
|
-
* 처리를 정해야 하는데, 코드가
|
|
289
|
-
* `docs/validation.md` 에 있고, 문서와 이 목록이 어긋나면
|
|
300
|
+
* 처리를 정해야 하는데, 코드가 늘어난 것이 알려지지 않으면 그 대응이 빠진다. 뜻은
|
|
301
|
+
* `docs/validation.md` 에 있고, 문서와 이 목록이 어긋나면 테스트가 실패한다.
|
|
290
302
|
*/
|
|
291
303
|
export declare const ERROR_CODES: readonly ["not-object", "not-finite", "not-positive", "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-axis", "missing-pivot", "missing-surface-ref", "missing-label-name", "missing-label-source"];
|
|
292
304
|
export type ErrorCode = (typeof ERROR_CODES)[number];
|
|
@@ -310,7 +322,7 @@ export interface FigureBlueprint {
|
|
|
310
322
|
anchor?: Vec3;
|
|
311
323
|
/**
|
|
312
324
|
* 디테일 등급. **부품 수 한도가 여기서 나온다** — 소비처가 「이 Figure 가 예산 안에
|
|
313
|
-
* 있나」를 판단하려면 등급을 알아야 한다.
|
|
325
|
+
* 있나」를 판단하려면 등급을 알아야 한다. 원본에 지정되지 않았으면 없다.
|
|
314
326
|
*/
|
|
315
327
|
detailLevel?: DetailLevel;
|
|
316
328
|
budget: {
|
|
@@ -326,7 +338,7 @@ export interface FigureBlueprint {
|
|
|
326
338
|
/**
|
|
327
339
|
* 보드 모델에 저장되는 인스턴스.
|
|
328
340
|
*
|
|
329
|
-
*
|
|
341
|
+
* **다른 컴포넌트와 같은 형태다.** 청사진도 원본 데이터도 보드에 들어가지 않는다.
|
|
330
342
|
* `type` 이 청사진을 찾는 키이고, 청사진은 실행 시점에 바깥에서 받아 이미 알고 있다.
|
|
331
343
|
*
|
|
332
344
|
* ```json
|
|
@@ -334,9 +346,9 @@ export interface FigureBlueprint {
|
|
|
334
346
|
* "zPos": 0, "tag": "EQ-003" }
|
|
335
347
|
* ```
|
|
336
348
|
*
|
|
337
|
-
* 이렇게 두는
|
|
349
|
+
* 이렇게 두는 이유는 세 가지다.
|
|
338
350
|
*
|
|
339
|
-
* 1. 보드가
|
|
351
|
+
* 1. 보드가 커지지 않는다. 자산 500 개의 부품 원본 데이터를 보드에 넣으면 크기가 크게 늘어난다.
|
|
340
352
|
* 2. Figure 를 고치면 배치된 것에 반영된다. 보드에 사본이 없으므로.
|
|
341
353
|
* 3. **보드는 이것이 저작된 자산인지 코드로 만든 컴포넌트인지 알 필요가 없다.**
|
|
342
354
|
* `Component.register` 로 타입이 등록되므로 여느 타입처럼 다룬다.
|
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,eAAO,MAAM,YAAY,kDAAmD,CAAA;AAC5E,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAEtD
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
3
|
*
|
|
4
|
-
* Figure 계약 — 저작 결과(
|
|
4
|
+
* Figure 계약 — 저작 결과(원본)와 보드가 소비하는 산출물(청사진)의 형식.
|
|
5
5
|
*
|
|
6
6
|
* **이 모듈은 의존이 없다.** things-scene 의 Component·THREE 를 쓰지 않는 순수
|
|
7
7
|
* 데이터 정의이므로, 서버·클라이언트·저작도구가 모두 같은 형식을 본다. 필요하면
|
|
8
8
|
* 별도 패키지로 떼어낼 수 있다.
|
|
9
9
|
*
|
|
10
|
-
* 두
|
|
10
|
+
* 형식은 두 가지다.
|
|
11
11
|
*
|
|
12
|
-
* FigureSource 저작 결과. 편집 가능한
|
|
13
|
-
* FigureBlueprint 보드가
|
|
12
|
+
* FigureSource 저작 결과. 편집 가능한 원본. DB 에 저장된다.
|
|
13
|
+
* FigureBlueprint 보드가 렌더링하는 형태. 원본에서 파생되는 캐시. 저장하지 않는다.
|
|
14
14
|
*
|
|
15
15
|
* 청사진은 2D 와 3D 를 한 구조로 다룬다 — 재질별로 묶고(`groups`), 3D 는 그
|
|
16
16
|
* 묶음의 geometry 를 합쳐 draw call 을 줄이고, 2D 는 윤곽을 합쳐 `fill()` 호출을
|
|
17
|
-
* 줄인다. 병목이 양쪽 다
|
|
17
|
+
* 줄인다. 병목이 양쪽 다 "묶음 수"이므로 같은 병합으로 양쪽이 함께 이득을 본다.
|
|
18
18
|
*
|
|
19
19
|
* 설계 문서: things-scene/docs/plans/figure-blueprint.md
|
|
20
20
|
*/
|
|
21
|
-
/** 저작에 쓰는 프리미티브. mesh 계열과 extrude 계열로
|
|
21
|
+
/** 저작에 쓰는 프리미티브. mesh 계열과 extrude 계열로 나뉜다. */
|
|
22
22
|
export const PRIMITIVE_KINDS = ['cube', 'wall', 'cylinder', 'sphere', 'rect', 'polygon'];
|
|
23
23
|
/** extrude 계열은 2D 단면이 필요하다. */
|
|
24
24
|
export const EXTRUDE_PRIMITIVES = ['rect', 'polygon'];
|
|
@@ -42,7 +42,19 @@ export const MATERIAL_PRESETS = ['default', 'metal', 'glass', 'plastic', 'wood',
|
|
|
42
42
|
* repeat 개수가 늘어난다. 롤러·선반 단 ← 새 geometry 가 생기지 않는다
|
|
43
43
|
*/
|
|
44
44
|
export const SIZING_RULES = ['scale', 'fixed', 'stretch', 'repeat'];
|
|
45
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* 디테일 등급 — 이 형상을 얼마나 상세하게 만들 것인지 저작자가 밝히는 값.
|
|
47
|
+
*
|
|
48
|
+
* S 단순 표지 · 기둥처럼 형태가 단순한 것
|
|
49
|
+
* M 보통 대부분의 설비
|
|
50
|
+
* L 상세 화면의 주역이 되는 큰 설비
|
|
51
|
+
*
|
|
52
|
+
* 밝힌 등급이 부품 수 상한을 정한다. 그리고 성숙도가 그 등급에 걸맞게 만들어졌는지
|
|
53
|
+
* 본다. 등급만 L 로 올려 놓고 부품 셋으로 끝내면 밝힌 것과 만든 것이 다르다.
|
|
54
|
+
*
|
|
55
|
+
* **뜻을 여기 적어 두는 이유가 있다.** 한동안 이 값의 내용물이 부품 수 상한 하나뿐이었다.
|
|
56
|
+
* 그래서 "왜 L 인가" 에 답할 수가 없었고, 저작 화면도 등급이라는 글자만 보여 주었다.
|
|
57
|
+
*/
|
|
46
58
|
export const DETAIL_LEVELS = ['S', 'M', 'L'];
|
|
47
59
|
/** 등급별 부품 수 상한. */
|
|
48
60
|
export const PART_LIMIT = { S: 3, M: 8, L: 20 };
|
|
@@ -74,8 +86,8 @@ export const BLUEPRINT_VERSION = 1;
|
|
|
74
86
|
* 값으로 좁혀져 있어, 코드를 새로 쓰면 타입 검사가 막는다.
|
|
75
87
|
*
|
|
76
88
|
* 목록을 두는 이유는 소비처 때문이다. 오류를 사용자에게 보이는 쪽은 코드마다 문구와
|
|
77
|
-
* 처리를 정해야 하는데, 코드가
|
|
78
|
-
* `docs/validation.md` 에 있고, 문서와 이 목록이 어긋나면
|
|
89
|
+
* 처리를 정해야 하는데, 코드가 늘어난 것이 알려지지 않으면 그 대응이 빠진다. 뜻은
|
|
90
|
+
* `docs/validation.md` 에 있고, 문서와 이 목록이 어긋나면 테스트가 실패한다.
|
|
79
91
|
*/
|
|
80
92
|
export const ERROR_CODES = [
|
|
81
93
|
// 형태
|
|
@@ -85,7 +97,7 @@ export const ERROR_CODES = [
|
|
|
85
97
|
'not-integer',
|
|
86
98
|
'not-boolean',
|
|
87
99
|
'not-allowed',
|
|
88
|
-
//
|
|
100
|
+
// 원본의 필수 항목
|
|
89
101
|
'missing-type',
|
|
90
102
|
'missing-base',
|
|
91
103
|
'missing-parts',
|
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,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAA;AAG5E
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/validate.d.ts
CHANGED
package/dist/validate.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
3
|
*
|
|
4
|
-
* Figure
|
|
4
|
+
* Figure 원본 데이터 검증.
|
|
5
5
|
*
|
|
6
6
|
* 두 갈래로 돌려준다.
|
|
7
7
|
*
|
|
@@ -223,10 +223,10 @@ function validatePart(c, raw, index, seen) {
|
|
|
223
223
|
if (kindOk && a.kind === 'rotation' && a.axis === undefined) {
|
|
224
224
|
c.error('missing-axis', `${path}.animation.axis`, '회전은 축이 있어야 한다');
|
|
225
225
|
}
|
|
226
|
-
// 피봇을 적지 않으면 부품 자기
|
|
226
|
+
// 피봇을 적지 않으면 회전축이 부품 자기 중심이 된다. geometry.center() 때문
|
|
227
227
|
if (kindOk && PIVOT_REQUIRED.includes(a.kind)) {
|
|
228
228
|
if (a.pivot === undefined) {
|
|
229
|
-
c.error('missing-pivot', `${path}.animation.pivot`, '회전은 피봇이 있어야
|
|
229
|
+
c.error('missing-pivot', `${path}.animation.pivot`, '회전은 피봇이 있어야 한다. 없으면 회전축이 부품 자기 중심이 된다');
|
|
230
230
|
}
|
|
231
231
|
else {
|
|
232
232
|
validateVec3(c, a.pivot, `${path}.animation.pivot`, 'pivot');
|
|
@@ -255,7 +255,7 @@ function validatePart(c, raw, index, seen) {
|
|
|
255
255
|
}
|
|
256
256
|
function checkPolicy(c, source) {
|
|
257
257
|
const parts = source.parts;
|
|
258
|
-
//
|
|
258
|
+
// 등급. 없으면 예산을 잡을 수 없다. 오류보고없이 넘기지 않는다.
|
|
259
259
|
if (source.detailLevel === undefined) {
|
|
260
260
|
c.violate('detail-level-missing', '디테일 등급이 없다 — 부품 수 예산을 잡을 수 없다');
|
|
261
261
|
}
|
|
@@ -292,7 +292,7 @@ function checkPolicy(c, source) {
|
|
|
292
292
|
}
|
|
293
293
|
}
|
|
294
294
|
/**
|
|
295
|
-
*
|
|
295
|
+
* 원본 데이터를 검증한다.
|
|
296
296
|
*
|
|
297
297
|
* 바깥에서 온 데이터(DB · API · 파일)를 받으므로 `unknown` 을 받는다.
|
|
298
298
|
* `errors` 가 비어 있으면 `source` 는 `FigureSource` 로 다룰 수 있다.
|
|
@@ -300,7 +300,7 @@ function checkPolicy(c, source) {
|
|
|
300
300
|
export function validate(source) {
|
|
301
301
|
const c = new Collector();
|
|
302
302
|
if (!isObject(source)) {
|
|
303
|
-
c.error('not-object', '', '
|
|
303
|
+
c.error('not-object', '', '원본 데이터는 객체여야 한다');
|
|
304
304
|
return { errors: c.errors, violations: c.violations };
|
|
305
305
|
}
|
|
306
306
|
if (!isNonEmptyString(source.type)) {
|
package/dist/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
package/docs/design.md
CHANGED
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
|
|
70
70
|
## 3. 계약
|
|
71
71
|
|
|
72
|
-
###
|
|
72
|
+
### 원본 데이터 (`FigureSource`) — 저작 결과, 편집 가능
|
|
73
73
|
|
|
74
74
|
```
|
|
75
75
|
FigureSource
|
|
@@ -176,7 +176,7 @@ src/figure/index.ts 재출력
|
|
|
176
176
|
test/unit/figure/test-blueprint.js
|
|
177
177
|
```
|
|
178
178
|
|
|
179
|
-
**순수 함수다.** 씬을
|
|
179
|
+
**순수 함수다.** 씬을 만들지 않고 테스트한다. `model/arrange.ts` · `utils/polygon-shape.ts`
|
|
180
180
|
와 같은 방식이다.
|
|
181
181
|
|
|
182
182
|
## 6. 남은 것
|
package/docs/format-survey.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 기존 3D 모델 포맷 검토 — 왜 자체 형식인가
|
|
2
2
|
|
|
3
|
-
자체 형식을 만들기 전에 쓸 수 있는 표준이 있는지 먼저 본다. 결론은
|
|
3
|
+
자체 형식을 만들기 전에 쓸 수 있는 표준이 있는지 먼저 본다. 결론은 **원본 형식으로 쓸
|
|
4
4
|
만한 것이 없다**이고, 이 문서는 그 근거다.
|
|
5
5
|
|
|
6
6
|
---
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
| 강점 | 사실상 표준. 웹 로더가 성숙. 재질·애니메이션 규격이 있다 |
|
|
30
30
|
| **막히는 것** | **구운 메시다.** 정점 배열이라 치수·분할 수·프리미티브 종류가 남지 않는다 |
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
원본 형식으로 쓰면 네 가지가 무너진다.
|
|
33
33
|
|
|
34
34
|
- **StyleKit 추종 불가** — 스타일을 바꿔도 이미 구운 것은 안 바뀐다
|
|
35
35
|
- **톱뷰 계산 불가** — 형상을 모르니 2D 윤곽을 계산할 수 없다 (스냅샷으로 떨어진다)
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
것이 아니라 glTF 안에 우리 형식을 넣는 것**이고, 형상은 여전히 구워져 있어 ①의
|
|
41
41
|
이득(파라메트릭 편집·공유)이 없다.
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
**결론. 내보내기에는 쓴다. 원본 형식으로는 못 쓴다.**
|
|
44
44
|
|
|
45
45
|
### USD / USDZ
|
|
46
46
|
|
package/docs/format.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# 형식 레퍼런스
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
원본 데이터(`FigureSource`)와 청사진(`FigureBlueprint`)의 모든 필드.
|
|
4
4
|
|
|
5
5
|
```
|
|
6
6
|
FigureSource 저작 결과. 편집 가능한 정본. DB 에 저장된다.
|
|
7
7
|
FigureBlueprint 보드가 세우는 형태. 정본에서 파생되는 캐시. 저장하지 않는다.
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
-
값의
|
|
10
|
+
값의 기준이 되는 원본은 `src/types.ts` 다. 이 문서와 코드가 어긋나면 `src/docs.test.ts` 가 실패한다.
|
|
11
11
|
|
|
12
12
|
## 좌표 규약
|
|
13
13
|
|
|
@@ -20,7 +20,7 @@ z 앞 (보는 쪽)
|
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
크기도 축 이름으로 부른다. `width` · `height` · `depth` 는 쓰지 않는다 — 어느 축인지
|
|
23
|
-
따로 외워야 하는
|
|
23
|
+
따로 외워야 하는 용어이고, 실제로 그것 때문에 사고가 났다.
|
|
24
24
|
|
|
25
25
|
```
|
|
26
26
|
transform.position { x, y, z } 부품 중심의 자리
|
|
@@ -36,7 +36,7 @@ transform.rotation { x, y, z } 축별 회전(도), 선택
|
|
|
36
36
|
|
|
37
37
|
---
|
|
38
38
|
|
|
39
|
-
## `FigureSource` —
|
|
39
|
+
## `FigureSource` — 원본 데이터
|
|
40
40
|
|
|
41
41
|
| 필드 | 타입 | 필수 | 뜻 |
|
|
42
42
|
| ------------- | -------------------------- | ---- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -45,13 +45,13 @@ transform.rotation { x, y, z } 축별 회전(도), 선택
|
|
|
45
45
|
| `parts` | `FigurePart[]` | ✓ | 부품. 하나는 있어야 한다 |
|
|
46
46
|
| `anchor` | `Vec3` | | 배치 기준점 |
|
|
47
47
|
| `detailLevel` | `'S' \| 'M' \| 'L'` | | 부품 수 상한을 정한다 (3 · 8 · 20) |
|
|
48
|
-
| `styleKit` | `string` | | StyleKit
|
|
48
|
+
| `styleKit` | `string` | | StyleKit 이름. 팔레트·분할 수·그리드·등급을 한 번에 받는다 |
|
|
49
49
|
|
|
50
50
|
## `FigurePart` — 부품
|
|
51
51
|
|
|
52
52
|
| 필드 | 타입 | 필수 | 뜻 |
|
|
53
53
|
| ----------- | ----------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
54
|
-
| `name` | `string` | ✓ | **저장되는 식별자다.** 바인딩·애니메이션·슬롯이 이 이름을 가리킨다. 바꾸면 인스턴스의 바인딩이
|
|
54
|
+
| `name` | `string` | ✓ | **저장되는 식별자다.** 바인딩·애니메이션·슬롯이 이 이름을 가리킨다. 바꾸면 인스턴스의 바인딩이 오류보고없이 끊긴다. 한 Figure 안에서 겹칠 수 없다 |
|
|
55
55
|
| `primitive` | `PrimitiveKind` | ✓ | 아래 표 |
|
|
56
56
|
| `transform` | `PartTransform` | ✓ | 자리와 크기 |
|
|
57
57
|
| `material` | `PartMaterial` | ✓ | 색과 질감 |
|
|
@@ -101,7 +101,7 @@ mesh 계열은 치수만으로 선다. extrude 계열은 2D 단면을 위로 민
|
|
|
101
101
|
|
|
102
102
|
#### 색은 팔레트 토큰 하나뿐이다 — 빠뜨린 것이 아니라 금지한 것이다
|
|
103
103
|
|
|
104
|
-
무늬·그라디언트를
|
|
104
|
+
무늬·그라디언트를 담을 항목이 `PartMaterial` 에 없는 것은 아직 만들지 않아서가 아니다.
|
|
105
105
|
두 이유에서 일부러 뺐다.
|
|
106
106
|
|
|
107
107
|
| | 이유 |
|
|
@@ -129,7 +129,7 @@ mesh 계열은 치수만으로 선다. extrude 계열은 2D 단면을 위로 민
|
|
|
129
129
|
| ------- | ------------------- | ----------------------------------------------------------------------------------- |
|
|
130
130
|
| `kind` | `AnimationKind` | `fade` · `heartbeat` · `moving` · `outline` · `rotation` · `vibration` · `waypoint` |
|
|
131
131
|
| `axis` | `'x' \| 'y' \| 'z'` | 회전은 필수 |
|
|
132
|
-
| `pivot` | `Vec3` | **회전은 필수.** 없으면 부품 자기
|
|
132
|
+
| `pivot` | `Vec3` | **회전은 필수.** 없으면 회전축이 부품 자기 중심이 된다 |
|
|
133
133
|
|
|
134
134
|
### `LabelSpec`
|
|
135
135
|
|
|
@@ -157,12 +157,12 @@ mesh 계열은 치수만으로 선다. extrude 계열은 2D 단면을 위로 민
|
|
|
157
157
|
|
|
158
158
|
## `FigureBlueprint` — 청사진
|
|
159
159
|
|
|
160
|
-
`compile(source)` 가
|
|
160
|
+
`compile(source)` 가 만든다. 저장하지 않고 원본 데이터에서 언제든 다시 만든다.
|
|
161
161
|
|
|
162
162
|
| 필드 | 타입 | 뜻 |
|
|
163
163
|
| -------------------------- | ----------------------- | ----------------------------------------- |
|
|
164
164
|
| `version` | `number` | `BLUEPRINT_VERSION`. 형식이 바뀌면 오른다 |
|
|
165
|
-
| `type` · `base` · `anchor` | |
|
|
165
|
+
| `type` · `base` · `anchor` | | 원본 데이터에서 그대로 |
|
|
166
166
|
| `budget` | `{ triangles, groups }` | 예산. `groups` 가 **재는 값**이다 |
|
|
167
167
|
| `groups` | `BlueprintGroup[]` | 재질별로 병합된 묶음 |
|
|
168
168
|
| `points` | `BlueprintPoint[]` | 애니메이션 포인트. 부품 이름으로 가리킨다 |
|
|
@@ -174,16 +174,16 @@ mesh 계열은 치수만으로 선다. extrude 계열은 2D 단면을 위로 민
|
|
|
174
174
|
| 필드 | 뜻 |
|
|
175
175
|
| ------------- | --------------------------------------------------- |
|
|
176
176
|
| `materialKey` | MaterialBank 키 |
|
|
177
|
-
| `material` |
|
|
177
|
+
| `material` | 원본 데이터의 `PartMaterial` 그대로 |
|
|
178
178
|
| `slot` | 재질 슬롯 |
|
|
179
|
-
| `animated` | 애니메이션이
|
|
179
|
+
| `animated` | 애니메이션이 연결된 그룹인지. **연결되면 부품을 하나만 갖는다** |
|
|
180
180
|
| `members` | `BlueprintMember[]` |
|
|
181
181
|
|
|
182
182
|
### `BlueprintMember` — 묶음 안의 부품
|
|
183
183
|
|
|
184
184
|
| 필드 | 뜻 |
|
|
185
185
|
| ------------------------------------------------------------------ | ----------------------------------------------------------------- |
|
|
186
|
-
| `name` · `primitive` · `transform` · `shape` · `sizing` · `repeat` |
|
|
186
|
+
| `name` · `primitive` · `transform` · `shape` · `sizing` · `repeat` | 원본 데이터에서 |
|
|
187
187
|
| `segments` | 곡면 분할 수. **2D 톱뷰를 3D 와 같은 각으로 근사하려면 필요하다** |
|
|
188
188
|
| `geometryKey` | GeometryBank 키. 실체가 아니라 참조다 |
|
|
189
189
|
| `triangles` | 이 부품의 삼각형 수 **추정** |
|
|
@@ -198,7 +198,7 @@ mesh 계열은 치수만으로 선다. extrude 계열은 2D 단면을 위로 민
|
|
|
198
198
|
| `materialKeyOf` | `token\|preset\|f\|t` (`-` 는 없음) |
|
|
199
199
|
| `groupKeyOf` | `materialKey\|\|slot` |
|
|
200
200
|
|
|
201
|
-
**geometry 키에 치수가
|
|
201
|
+
**geometry 키에 치수가 들어간다.** 경로에서 오는 형상은 단위로 정규화하면 모서리 반경
|
|
202
202
|
비율이 망가지므로 치수를 굽고, 대신 같은 치수끼리만 공유한다. **자리는 키에 들지
|
|
203
203
|
않는다** — 어디 있든 같은 형상이다.
|
|
204
204
|
|
|
@@ -249,11 +249,11 @@ material 키를 줄인다.
|
|
|
249
249
|
| `transparent` | `LIMITS.transparentMaterials` | 투명은 별도 정렬 경로 |
|
|
250
250
|
| `parts` | `PART_LIMIT[detailLevel]` | 등급이 정한 상한. 등급이 없으면 이 항목이 빠진다 |
|
|
251
251
|
|
|
252
|
-
- `score` —
|
|
252
|
+
- `score` — **한도에 가장 가까운 항목에 남은 여유**(0–100). 평균이 아니다. 넷 중 하나만 꽉
|
|
253
253
|
차 있어도 대량 배치에서는 그것이 병목이 되므로, 평균을 내면 병목이 여유에 묻힌다.
|
|
254
254
|
- `grade` — **A** 여유 절반 이상 · **B** 4분의 1 이상 · **C** 한도 안 · **D** 한도 초과.
|
|
255
255
|
D 는 곧 위반이 있다는 뜻이고 사유는 `blueprint.violations` 에 있다.
|
|
256
|
-
- `tightest` — 어느 한도가
|
|
256
|
+
- `tightest` — 어느 한도가 가장 가까운가. **여기부터 고치면 된다.**
|
|
257
257
|
- `reuse` — 형상 되쓰기. **점수에 넣지 않는다.** 되쓰기는 많을수록 좋지만 한도가
|
|
258
258
|
없다. 점수에 섞으면 「형상을 억지로 같게 만들라」는 신호가 되어 저작을 왜곡한다.
|
|
259
259
|
|
|
@@ -272,7 +272,7 @@ material 키를 줄인다.
|
|
|
272
272
|
## 구현 상태 — 선언됐으나 아직 동작하지 않는 것
|
|
273
273
|
|
|
274
274
|
**이 절이 이 문서에서 가장 중요하다.** 형식에 자리가 있다고 해서 그 자리가 동작하는
|
|
275
|
-
것은 아니다. 아래는
|
|
275
|
+
것은 아니다. 아래는 원본 데이터와 청사진에 함께 나가지만 **읽어서 무언가 하는 코드가 아직
|
|
276
276
|
없는** 것들이다.
|
|
277
277
|
|
|
278
278
|
| 선언 | 검증 | 청사진에 실림 | 읽는 곳 |
|
package/docs/validation.md
CHANGED
|
@@ -19,7 +19,7 @@ const { errors, violations } = validate(source)
|
|
|
19
19
|
|
|
20
20
|
## 코드는 목록으로 잠겨 있다
|
|
21
21
|
|
|
22
|
-
`ERROR_CODES` · `VIOLATION_CODES` 가
|
|
22
|
+
`ERROR_CODES` · `VIOLATION_CODES` 가 기준이 되는 원본이고 `FigureError.code` · `Violation.code` 가
|
|
23
23
|
그 값으로 좁혀져 있다. **목록에 없는 코드는 타입 검사가 막는다.** 이 문서와 목록이
|
|
24
24
|
어긋나면 `src/docs.test.ts` 가 깨진다.
|
|
25
25
|
|
|
@@ -36,14 +36,14 @@ const { errors, violations } = validate(source)
|
|
|
36
36
|
|
|
37
37
|
| 코드 | 언제 |
|
|
38
38
|
| -------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
|
39
|
-
| `not-object` | 객체여야 할 자리에 객체가 아닌 것이 왔다 (
|
|
39
|
+
| `not-object` | 객체여야 할 자리에 객체가 아닌 것이 왔다 (원본 데이터 자체, 부품, `transform.rotation`, `material`, `animation`, `label`, `Vec3`) |
|
|
40
40
|
| `not-finite` | 수여야 할 자리가 수가 아니거나 `NaN`·`Infinity` 다 |
|
|
41
41
|
| `not-positive` | 0 보다 커야 하는데 아니다 (`base` 의 세 변) |
|
|
42
42
|
| `not-integer` | `segments` 가 정수가 아니다 |
|
|
43
43
|
| `not-boolean` | `material.flatShading` · `material.transparent` 가 참·거짓이 아니다 |
|
|
44
44
|
| `not-allowed` | 열거 값이 목록 밖이다 (`primitive` · `preset` · `slot` · `sizing` · `axis` · `detailLevel` · `animation.kind` · `label.when`) |
|
|
45
45
|
|
|
46
|
-
###
|
|
46
|
+
### 원본의 필수 항목
|
|
47
47
|
|
|
48
48
|
| 코드 | 언제 | 왜 |
|
|
49
49
|
| --------------- | ----------------------------------------- | --------------------------------------------------------- |
|
|
@@ -87,8 +87,8 @@ const { errors, violations } = validate(source)
|
|
|
87
87
|
|
|
88
88
|
| 코드 | 언제 | 왜 |
|
|
89
89
|
| --------------- | ------------------------ | ---------------------------------------------------------------------------------------------- |
|
|
90
|
-
| `missing-axis` | 회전인데 `axis` 가 없다 | 어느 축으로
|
|
91
|
-
| `missing-pivot` | 회전인데 `pivot` 이 없다 | 없으면 부품 **자기
|
|
90
|
+
| `missing-axis` | 회전인데 `axis` 가 없다 | 어느 축으로 회전하는지 모른다 |
|
|
91
|
+
| `missing-pivot` | 회전인데 `pivot` 이 없다 | 없으면 회전축이 부품 **자기 중심**이 된다. 교반 축이 몸체 가운데를 돌아야 하면 결과가 완전히 달라진다 |
|
|
92
92
|
|
|
93
93
|
### 예외 표면
|
|
94
94
|
|