@hatiolab/things-scene 10.1.0 → 10.1.1
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-types/figure/figure-blueprint.d.ts +19 -14
- package/dist-types/figure/figure-blueprint.d.ts.map +1 -1
- package/dist-types/figure/figure-instance.d.ts +17 -1
- package/dist-types/figure/figure-instance.d.ts.map +1 -1
- package/dist-types/figure/figure-part-component.d.ts +324 -0
- package/dist-types/figure/figure-part-component.d.ts.map +1 -0
- package/dist-types/figure/figure-real-object.d.ts +28 -9
- package/dist-types/figure/figure-real-object.d.ts.map +1 -1
- package/dist-types/figure/index.d.ts +1 -0
- package/dist-types/figure/index.d.ts.map +1 -1
- package/dist-types/threed/coordinate-ground.d.ts +51 -0
- package/dist-types/threed/coordinate-ground.d.ts.map +1 -0
- package/dist-types/threed/floor/floor.d.ts +22 -0
- package/dist-types/threed/floor/floor.d.ts.map +1 -1
- package/dist-types/threed/index.d.ts +4 -0
- package/dist-types/threed/index.d.ts.map +1 -1
- package/dist-types/threed/managers/event-manager3d.d.ts +7 -0
- package/dist-types/threed/managers/event-manager3d.d.ts.map +1 -1
- package/dist-types/threed/managers/gizmo-operation-manager.d.ts +8 -0
- package/dist-types/threed/managers/gizmo-operation-manager.d.ts.map +1 -1
- package/dist-types/threed/managers/renderer-manager.d.ts.map +1 -1
- package/dist-types/threed/managers/types.d.ts +10 -0
- package/dist-types/threed/managers/types.d.ts.map +1 -1
- package/dist-types/threed/parted-real-object.d.ts +79 -0
- package/dist-types/threed/parted-real-object.d.ts.map +1 -0
- package/dist-types/threed/real-object-gltf.d.ts +11 -0
- package/dist-types/threed/real-object-gltf.d.ts.map +1 -1
- package/dist-types/threed/three-capability.d.ts +11 -0
- package/dist-types/threed/three-capability.d.ts.map +1 -1
- package/package.json +1 -1
- package/things-scene-min.js +11 -11
- package/things-scene-min.js.map +1 -1
- package/things-scene-transfer.mjs +3 -3
- package/things-scene.mjs +3 -3
- package/things-scene.mjs.map +1 -1
|
@@ -3,16 +3,23 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 정본은 `@hatiolab/figure-model` 의 `FigureBlueprint` 다. 여기 있는 것은 그 형식 중
|
|
5
5
|
* things-scene 이 실제로 읽는 부분만 적은 것이며, **의존성을 만들지 않으려고** 형식을
|
|
6
|
-
* 다시 적었다.
|
|
7
|
-
*
|
|
6
|
+
* 다시 적었다.
|
|
7
|
+
*
|
|
8
|
+
* figure-model 은 이미 npm 에 있으므로(`@hatiolab/figure-model`) `import type` 으로
|
|
9
|
+
* 받아 이 중복을 지울 수 있다 — 타입만 받으면 런타임 의존이 생기지 않는다. 배포되는
|
|
10
|
+
* 라이브러리의 의존성 목록을 바꾸는 일이라 아직 하지 않았다.
|
|
8
11
|
*
|
|
9
12
|
* **두 벌이 되면 어긋날 수 있다.** 그래서 `test/fixtures/figure-blueprint-sample.json`
|
|
10
13
|
* 에 figure-model 이 실제로 낸 청사진을 넣어 두고, 시험이 그것을 이 형식으로 읽는다.
|
|
11
14
|
* figure-model 의 형식이 바뀌면 표본을 다시 뽑을 때 시험이 깨진다.
|
|
12
15
|
*
|
|
13
|
-
* 좌표 규약은 figure-model 의 `PartTransform` 과 같다 —
|
|
14
|
-
*
|
|
15
|
-
* `
|
|
16
|
+
* 좌표 규약은 figure-model 의 `PartTransform` 과 같다 — **3D 도구들이 쓰는 그대로**
|
|
17
|
+
* `x` 오른쪽, `y` 위, `z` 앞이고, `position` 은 부품 **중심**의 자리이며 기준은
|
|
18
|
+
* `base` 상자의 중심 (0,0,0) 이다. 크기는 `size.x`·`size.y`·`size.z` 로 부른다.
|
|
19
|
+
*
|
|
20
|
+
* **컴포넌트 state 의 낱말과 다르다.** state 는 `width`·`height`·`depth` 이고 그쪽은
|
|
21
|
+
* `depth` 가 높이다. 환산은 `figure-real-object.ts` 의 `updateDimension` 한 곳에서만
|
|
22
|
+
* 한다 — 그 밖에서는 청사진의 축을 그대로 three 에 넘긴다(three 도 y 가 위다).
|
|
16
23
|
*/
|
|
17
24
|
export type FigurePrimitiveKind = 'cube' | 'wall' | 'cylinder' | 'sphere' | 'rect' | 'polygon';
|
|
18
25
|
export type FigureMaterialSlot = 'cap' | 'side';
|
|
@@ -23,10 +30,11 @@ export interface FigureVec3 {
|
|
|
23
30
|
y: number;
|
|
24
31
|
z: number;
|
|
25
32
|
}
|
|
26
|
-
export interface FigurePartTransform
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
export interface FigurePartTransform {
|
|
34
|
+
/** 부품 중심의 자리. */
|
|
35
|
+
position: FigureVec3;
|
|
36
|
+
/** 축별 크기. */
|
|
37
|
+
size: FigureVec3;
|
|
30
38
|
rotation?: Partial<FigureVec3>;
|
|
31
39
|
}
|
|
32
40
|
export interface FigurePartMaterial {
|
|
@@ -84,11 +92,8 @@ export interface FigureBlueprintLabel {
|
|
|
84
92
|
export interface FigureBlueprint {
|
|
85
93
|
version: number;
|
|
86
94
|
type: string;
|
|
87
|
-
base
|
|
88
|
-
|
|
89
|
-
height: number;
|
|
90
|
-
depth: number;
|
|
91
|
-
};
|
|
95
|
+
/** 기준 크기(축별). `base.y` 가 높이다. */
|
|
96
|
+
base: FigureVec3;
|
|
92
97
|
anchor?: FigureVec3;
|
|
93
98
|
budget: {
|
|
94
99
|
triangles: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"figure-blueprint.d.ts","sourceRoot":"","sources":["../../src/figure/figure-blueprint.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"figure-blueprint.d.ts","sourceRoot":"","sources":["../../src/figure/figure-blueprint.ts"],"names":[],"mappings":"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"}
|
|
@@ -264,8 +264,24 @@ export declare class FigureInstance extends FigureInstance_base {
|
|
|
264
264
|
/** 이 인스턴스가 그리는 청사진. 등록이 지워졌으면 null 이다. */
|
|
265
265
|
get figure(): import("./figure-registry.js").PreparedFigure | null;
|
|
266
266
|
render(ctx: SceneRenderContext): void;
|
|
267
|
-
/**
|
|
267
|
+
/**
|
|
268
|
+
* 부품 하나의 톱뷰 윤곽을 현재 path 에 그린다. `ox`·`oy` 는 캔버스에 놓인 원점이다.
|
|
269
|
+
*
|
|
270
|
+
* ## 회전을 반영한다
|
|
271
|
+
*
|
|
272
|
+
* 3D 는 도는데 2D 가 안 돌면 **같은 물건이 두 화면에서 다르게** 보인다. 위에서
|
|
273
|
+
* 내려다보므로 축마다 뜻이 다르다.
|
|
274
|
+
*
|
|
275
|
+
* y 회전 평면 안에서 도는 것이다. 그대로 돌려 그린다 — 정확하다
|
|
276
|
+
* x·z 회전 부품이 **기울어진다.** 발자국의 모양 자체가 달라져서 원기둥이 타원
|
|
277
|
+
* 비슷한 것이 되고 상자는 육각형 그림자가 된다
|
|
278
|
+
*
|
|
279
|
+
* 기울어진 것은 **회전한 상자의 평면 경계**로 근사한다. 실제 그림자보다 조금 크게
|
|
280
|
+
* 잡히지만, 안 돌린 채로 두면 「어디에 걸리는지」를 아예 못 보여 준다.
|
|
281
|
+
*/
|
|
268
282
|
private tracePart;
|
|
283
|
+
/** 부품의 평면 윤곽을 `cx`·`cy` 를 중심으로 그린다. 회전은 부르는 쪽이 이미 걸었다. */
|
|
284
|
+
private traceShape;
|
|
269
285
|
/**
|
|
270
286
|
* 청사진을 못 찾았을 때. **빈 자리로 두지 않는다** — 아무것도 안 그리면 보는 사람은
|
|
271
287
|
* 컴포넌트가 없는 것인지 청사진이 없는 것인지 알 수 없다. 자리와 타입 이름을 보인다.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"figure-instance.d.ts","sourceRoot":"","sources":["../../src/figure/figure-instance.ts"],"names":[],"mappings":"AAIA,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAClD,OAAO,KAAK,MAAM,wBAAwB,CAAA;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"figure-instance.d.ts","sourceRoot":"","sources":["../../src/figure/figure-instance.ts"],"names":[],"mappings":"AAIA,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAClD,OAAO,KAAK,MAAM,wBAAwB,CAAA;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgF7D,qBAAa,cAAe,SAAQ,mBAAe;IACjD;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIvC,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,OAAO,IAAI,OAAO;IAIlB,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED,eAAe,IAAI,WAAW,GAAG,SAAS;IAI1C,0CAA0C;IAC1C,IAAI,MAAM,yDAET;IAED,MAAM,CAAC,GAAG,EAAE,kBAAkB;IA6B9B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,SAAS;IA6CjB,0DAA0D;IAC1D,OAAO,CAAC,UAAU;IAmDlB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;;OAKG;IACM,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;CAGvD;AAMD,eAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import Component from '../components/component.js';
|
|
2
|
+
import Shape from '../components/shape.js';
|
|
3
|
+
import type { SceneRenderContext } from '../interfaces/rendering.js';
|
|
4
|
+
import type { IRealObject } from '../interfaces/real-object.js';
|
|
5
|
+
import type { ComponentNature } from '../interfaces/types.js';
|
|
6
|
+
import { RealObject } from '../threed/real-object.js';
|
|
7
|
+
import { MATERIAL_PRESETS } from '../threed/material-3d.js';
|
|
8
|
+
/** 이 컴포넌트가 3D 로 세울 수 있는 도형. `PRIMITIVE_KINDS` 와 같은 집합이다. */
|
|
9
|
+
export type FigurePartPrimitive = 'cube' | 'wall' | 'cylinder' | 'sphere' | 'rect' | 'polygon';
|
|
10
|
+
/** 부품 컴포넌트가 갖는, 씬 공통 상태 밖의 값들. */
|
|
11
|
+
export interface FigurePartState {
|
|
12
|
+
primitive?: FigurePartPrimitive;
|
|
13
|
+
segments?: number;
|
|
14
|
+
/** `rect` 의 모서리 굴림, `polygon` 의 단면 경로. */
|
|
15
|
+
round?: number;
|
|
16
|
+
path?: {
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
}[];
|
|
20
|
+
/** 팔레트 토큰. 값이 아니라 이름을 둔다 — 테마를 바꾸면 따라온다. */
|
|
21
|
+
token?: string;
|
|
22
|
+
preset?: keyof typeof MATERIAL_PRESETS;
|
|
23
|
+
flatShading?: boolean;
|
|
24
|
+
transparent?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 부품의 3D 표현.
|
|
28
|
+
*
|
|
29
|
+
* 치수를 형상에 굽지 않는다 — 단위 형상을 창고에서 꺼내 `dimensionScale` 로 키운다.
|
|
30
|
+
* 그래야 크기가 다른 부품끼리도 형상 하나를 나눠 쓴다. 단면을 미는 것(`rect` ·
|
|
31
|
+
* `polygon`)만 예외인데, 단위로 정규화하면 모서리 굴림 비율이 망가지기 때문이다.
|
|
32
|
+
*/
|
|
33
|
+
export declare class FigurePartRealObject extends RealObject {
|
|
34
|
+
build(): void;
|
|
35
|
+
/** 단위 형상. 치수는 배율로 준다. */
|
|
36
|
+
private unitGeometry;
|
|
37
|
+
/**
|
|
38
|
+
* 단면을 밀어 만든 형상. **치수가 구워지므로 열쇠에 치수가 든다.**
|
|
39
|
+
*
|
|
40
|
+
* 단면은 평면도다 — 가로가 `width`, 세로가 `height` 이고 밀리는 두께가 `depth` 다.
|
|
41
|
+
* 여기서는 두께 1 로 만들고 배율로 키운다. 굴림은 평면 안의 값이라 배율에 안 눌린다.
|
|
42
|
+
*/
|
|
43
|
+
private extrudedGeometry;
|
|
44
|
+
private crossSection;
|
|
45
|
+
/**
|
|
46
|
+
* 재질. **팔레트 토큰과 프리셋으로만 정한다** — 배포된 Figure 와 같은 규칙이다.
|
|
47
|
+
*
|
|
48
|
+
* 창고가 값으로 공유하므로 같은 토큰·프리셋을 쓰는 부품끼리 재질 하나를 나눠 쓴다.
|
|
49
|
+
* 접었을 때 세어지는 「재질 묶음」이 저작 중에도 그대로 눈에 보인다.
|
|
50
|
+
*/
|
|
51
|
+
private material;
|
|
52
|
+
/**
|
|
53
|
+
* 치수를 배율로 준다.
|
|
54
|
+
*
|
|
55
|
+
* 단면을 민 것은 평면 치수가 이미 형상에 구워져 있으므로 두께만 키운다 — 평면까지
|
|
56
|
+
* 배율을 걸면 두 번 곱해진다.
|
|
57
|
+
*/
|
|
58
|
+
updateDimension(): void;
|
|
59
|
+
}
|
|
60
|
+
declare const FigurePart_base: {
|
|
61
|
+
new (...args: any[]): {
|
|
62
|
+
contains(x: number, y: number): boolean;
|
|
63
|
+
get path(): {
|
|
64
|
+
x: any;
|
|
65
|
+
y: any;
|
|
66
|
+
}[];
|
|
67
|
+
set path(path: {
|
|
68
|
+
x: any;
|
|
69
|
+
y: any;
|
|
70
|
+
}[]);
|
|
71
|
+
get anchors(): {
|
|
72
|
+
name: string;
|
|
73
|
+
position: {
|
|
74
|
+
x: any;
|
|
75
|
+
y: any;
|
|
76
|
+
};
|
|
77
|
+
}[];
|
|
78
|
+
get bounds(): any;
|
|
79
|
+
set bounds(bounds: any);
|
|
80
|
+
render(ctx: CanvasRenderingContext2D): void;
|
|
81
|
+
_app: any;
|
|
82
|
+
_model: any;
|
|
83
|
+
_state: any;
|
|
84
|
+
_delta: any;
|
|
85
|
+
_animation: any;
|
|
86
|
+
_animate: any;
|
|
87
|
+
_parent: any;
|
|
88
|
+
_disposed: any;
|
|
89
|
+
_textHidden: any;
|
|
90
|
+
_text_substitutor: any;
|
|
91
|
+
_value_substitutor: any;
|
|
92
|
+
_mappings: any;
|
|
93
|
+
_realObject: IRealObject | undefined;
|
|
94
|
+
_cachedState: any;
|
|
95
|
+
updatedAt: any;
|
|
96
|
+
fontSize: any;
|
|
97
|
+
__cache__: any;
|
|
98
|
+
created(): void;
|
|
99
|
+
added(parent: import("../types/component.js").Container): void;
|
|
100
|
+
removed(parent: import("../types/component.js").Container): void;
|
|
101
|
+
ready(): Promise<void>;
|
|
102
|
+
_readyInvoked: boolean;
|
|
103
|
+
invokeReady(): void | Promise<void>;
|
|
104
|
+
touch(): void;
|
|
105
|
+
clearCache(...attrs: string[]): void;
|
|
106
|
+
removeSelf(completely?: boolean): void;
|
|
107
|
+
resetAnimation(): void;
|
|
108
|
+
dispose(): void;
|
|
109
|
+
get nature(): ComponentNature;
|
|
110
|
+
get disposed(): boolean;
|
|
111
|
+
isLayer(): boolean;
|
|
112
|
+
isGroup(): boolean;
|
|
113
|
+
isContainer(): this is import("../types/component.js").Container;
|
|
114
|
+
isLine(): boolean;
|
|
115
|
+
isRoot(): boolean;
|
|
116
|
+
isRootModel(): boolean;
|
|
117
|
+
is3dish(): boolean;
|
|
118
|
+
get is3dMode(): boolean;
|
|
119
|
+
isIn3DSpace(): boolean;
|
|
120
|
+
isTemplate(): boolean;
|
|
121
|
+
isHTMLElement(): boolean;
|
|
122
|
+
isConnectable(): boolean;
|
|
123
|
+
isIdentifiable(): boolean;
|
|
124
|
+
isPositionable(): boolean;
|
|
125
|
+
replaceRefids(replaceMap: Record<string, string>): void;
|
|
126
|
+
get(property: string): any;
|
|
127
|
+
set(props: any, propval?: any): any;
|
|
128
|
+
getState(property: string): any;
|
|
129
|
+
setState(props: Partial<import("../index.js").State> | string, propval?: any): any;
|
|
130
|
+
get model(): any;
|
|
131
|
+
get state(): import("../index.js").State;
|
|
132
|
+
get refid(): any;
|
|
133
|
+
get hierarchy(): any;
|
|
134
|
+
get volatile(): string[];
|
|
135
|
+
_applyProps(target: Record<string, any>, props: Record<string, any>, options: import("../components/component.js").ApplyPropsOptions): /*elided*/ any;
|
|
136
|
+
move(offset: {
|
|
137
|
+
x: number;
|
|
138
|
+
y: number;
|
|
139
|
+
}, ...args: boolean[]): void;
|
|
140
|
+
symmetryX(x?: number): void;
|
|
141
|
+
symmetryY(y: number): void;
|
|
142
|
+
adjustResize(bounds: import("../index.js").BOUNDS, origin_bounds: import("../index.js").BOUNDS, diagonal: boolean): {
|
|
143
|
+
left: any;
|
|
144
|
+
top: any;
|
|
145
|
+
width: any;
|
|
146
|
+
height: any;
|
|
147
|
+
};
|
|
148
|
+
adjustRotation(rotation: number, step: boolean): number;
|
|
149
|
+
outline(progress: number): any;
|
|
150
|
+
get center(): import("../index.js").POINT;
|
|
151
|
+
set center(p: import("../index.js").POINT);
|
|
152
|
+
get location(): import("../index.js").POINT;
|
|
153
|
+
set location(l: import("../index.js").POINT);
|
|
154
|
+
get rotate(): import("../index.js").POINT;
|
|
155
|
+
set rotate(r: import("../index.js").POINT);
|
|
156
|
+
get dimension(): import("../index.js").DIMENSION;
|
|
157
|
+
set dimension(d: import("../index.js").DIMENSION);
|
|
158
|
+
get drawPath(): import("../index.js").POINT[];
|
|
159
|
+
get rotatePoint(): import("../index.js").POINT;
|
|
160
|
+
get mutable(): boolean;
|
|
161
|
+
get resizable(): boolean;
|
|
162
|
+
get rotatable(): boolean;
|
|
163
|
+
buildRealObject(): IRealObject | undefined;
|
|
164
|
+
get realObject(): IRealObject | undefined;
|
|
165
|
+
draw(context?: SceneRenderContext): void;
|
|
166
|
+
prerender(context: SceneRenderContext): void;
|
|
167
|
+
postrender(context: SceneRenderContext): void;
|
|
168
|
+
prepare(resolve: (component: Component) => void, reject: (reason: any) => void): void;
|
|
169
|
+
prepareIf(condition: boolean): void;
|
|
170
|
+
drawText(context: SceneRenderContext): void;
|
|
171
|
+
drawStroke(context: SceneRenderContext, override?: Record<string, unknown>): void;
|
|
172
|
+
drawFill(context: SceneRenderContext, override?: Record<string, unknown>): void;
|
|
173
|
+
get strokeStyle(): any;
|
|
174
|
+
set strokeStyle(v: any);
|
|
175
|
+
get fillStyle(): any;
|
|
176
|
+
set fillStyle(v: any);
|
|
177
|
+
get fontColor(): string;
|
|
178
|
+
set fontColor(v: string);
|
|
179
|
+
get rotation(): number;
|
|
180
|
+
set rotation(v: number);
|
|
181
|
+
get decorators(): string[];
|
|
182
|
+
get decotag(): string;
|
|
183
|
+
get hidden(): boolean;
|
|
184
|
+
set hidden(v: boolean);
|
|
185
|
+
get tag(): string;
|
|
186
|
+
set tag(v: string);
|
|
187
|
+
get appendum(): any;
|
|
188
|
+
set appendum(v: any);
|
|
189
|
+
defaultTextSubstitutor(): string;
|
|
190
|
+
textLines(context?: SceneRenderContext): any[][];
|
|
191
|
+
get font(): string;
|
|
192
|
+
get lineHeight(): number;
|
|
193
|
+
get textSubstitutor(): () => string;
|
|
194
|
+
get text(): string;
|
|
195
|
+
set text(v: string);
|
|
196
|
+
get textBounds(): import("../index.js").BOUNDS;
|
|
197
|
+
get textRotation(): number;
|
|
198
|
+
get textHidden(): boolean;
|
|
199
|
+
set textHidden(v: boolean);
|
|
200
|
+
get hasTextProperty(): boolean;
|
|
201
|
+
animate(opts: import("../index.js").AnimationConfig): any;
|
|
202
|
+
effect(context: SceneRenderContext, model: any): void;
|
|
203
|
+
serialize(...others: any[]): string;
|
|
204
|
+
trim(): void;
|
|
205
|
+
closeScene(data: any): void;
|
|
206
|
+
delta(attr?: string | object, value?: any): any;
|
|
207
|
+
invalidate(): void;
|
|
208
|
+
get value(): any;
|
|
209
|
+
set value(v: any);
|
|
210
|
+
get data(): any;
|
|
211
|
+
set data(v: any);
|
|
212
|
+
set tap(v: any);
|
|
213
|
+
get mappings(): any[];
|
|
214
|
+
get retention(): number;
|
|
215
|
+
get animation(): import("../index.js").AnimationController | undefined;
|
|
216
|
+
get started(): boolean;
|
|
217
|
+
set started(v: boolean);
|
|
218
|
+
get controls(): import("../index.js").Control[] | undefined;
|
|
219
|
+
findFirst(finder: string | ((c: Component) => boolean), ...others: any[]): Component | undefined;
|
|
220
|
+
findAll(s: string | ((c: Component) => boolean), ...others: any[]): any[] | undefined;
|
|
221
|
+
capture(x: number, y: number, except?: (c: Component) => boolean): any;
|
|
222
|
+
findAnchor(name: string): any;
|
|
223
|
+
isDescendible(container: Component | any): boolean;
|
|
224
|
+
getContext(component?: unknown): any;
|
|
225
|
+
get root(): Component;
|
|
226
|
+
get rootModel(): Component;
|
|
227
|
+
get parent(): Component;
|
|
228
|
+
set parent(v: Component);
|
|
229
|
+
get scalable(): boolean;
|
|
230
|
+
get stuck(): boolean;
|
|
231
|
+
get capturable(): boolean;
|
|
232
|
+
get position(): string;
|
|
233
|
+
get origin(): string;
|
|
234
|
+
get offset(): import("../index.js").POINT;
|
|
235
|
+
get app(): import("../index.js").ApplicationContext;
|
|
236
|
+
drawEffect(context: SceneRenderContext): void;
|
|
237
|
+
prepareFill(resolve: Function, reject: Function): void;
|
|
238
|
+
prepareFillIf(condition: boolean): void;
|
|
239
|
+
onchangeFill(after: Record<string, any>, before: Record<string, any>): void;
|
|
240
|
+
drawImage(context: SceneRenderContext, image: HTMLImageElement, left: number, top: number, width: number, height: number): void;
|
|
241
|
+
mutateBounds(logic: ((bounds: import("../index.js").BOUNDS) => import("../index.js").BOUNDS | void) | null, context?: any): void;
|
|
242
|
+
mutatePath(beforeLogic: ((path: import("../index.js").POINT[]) => import("../index.js").POINT[] | void) | null, afterLogic: ((path: import("../index.js").POINT[]) => import("../index.js").POINT[] | void) | null, context?: any): void;
|
|
243
|
+
access(accessor: string): any;
|
|
244
|
+
substitute(template: string, data: any): string | undefined;
|
|
245
|
+
onchangeMappings(after: Record<string, any>, before: Record<string, any>): void;
|
|
246
|
+
onchangeData(after: Record<string, any>, before: Record<string, any>): void;
|
|
247
|
+
buildMappings(): void;
|
|
248
|
+
executeMappings(force?: boolean): void;
|
|
249
|
+
disposeMappings(): void;
|
|
250
|
+
ondropfile(transfered: FileList, files: string[]): void;
|
|
251
|
+
transcoordS2P(x: number, y: number, rp?: import("../index.js").POINT): import("../index.js").POINT;
|
|
252
|
+
transcoordP2S(x: number, y: number, rp?: import("../index.js").POINT): import("../index.js").POINT;
|
|
253
|
+
transcoordS2T(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
254
|
+
transcoordT2P(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
255
|
+
transcoordT2S(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
256
|
+
transcoordS2TR(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
257
|
+
transcoordS2O(x: number, y: number, target: Component): import("../index.js").POINT;
|
|
258
|
+
transcoordC2S(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
259
|
+
transcoordS2C(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
260
|
+
toParent(x: number, y: number, rp?: import("../index.js").POINT): import("../index.js").POINT;
|
|
261
|
+
fromParent(x: number, y: number, rp?: import("../index.js").POINT): import("../index.js").POINT;
|
|
262
|
+
toScene(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
263
|
+
fromScene(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
264
|
+
toLocal(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
265
|
+
toGlobal(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
266
|
+
toOther(x: number, y: number, target: Component): import("../index.js").POINT;
|
|
267
|
+
on<K extends keyof import("../index.js").ComponentEventMap>(name: K, callback: (...args: import("../index.js").ComponentEventMap[K]) => void, context?: any): /*elided*/ any;
|
|
268
|
+
on(name: string | object, callback: Function, context?: any): /*elided*/ any;
|
|
269
|
+
off<K extends keyof import("../index.js").ComponentEventMap>(name: K, callback?: ((...args: import("../index.js").ComponentEventMap[K]) => void) | undefined, context?: any): /*elided*/ any;
|
|
270
|
+
off(name?: string | object, callback?: Function, context?: any): /*elided*/ any;
|
|
271
|
+
once<K extends keyof import("../index.js").ComponentEventMap>(name: K, callback: (...args: import("../index.js").ComponentEventMap[K]) => void, context?: any): /*elided*/ any;
|
|
272
|
+
once(name: string | object, callback: Function, context?: any): /*elided*/ any;
|
|
273
|
+
trigger<K extends keyof import("../index.js").ComponentEventMap>(name: K, ...args: import("../index.js").ComponentEventMap[K]): /*elided*/ any;
|
|
274
|
+
trigger(name: string, ...args: any[]): /*elided*/ any;
|
|
275
|
+
delegate_on(delegator: any): /*elided*/ any;
|
|
276
|
+
delegate_off(delegator: any): /*elided*/ any;
|
|
277
|
+
onchange(after: Record<string, any>, before: Record<string, any>): void;
|
|
278
|
+
calculateBounds?(): void;
|
|
279
|
+
oncreate_element?(element: HTMLElement): void;
|
|
280
|
+
removeComponent(component: Component, ghost?: boolean): void;
|
|
281
|
+
addComponent(component: Component, ghost?: boolean): void;
|
|
282
|
+
insertComponentAt(component: Component, index: number, ghost?: boolean): void;
|
|
283
|
+
getOverlay(component: Component): HTMLElement | undefined;
|
|
284
|
+
findById(id: string): Component | undefined;
|
|
285
|
+
findByRefid(ref: string | number): Component | undefined;
|
|
286
|
+
findAllById(id: string): Component[];
|
|
287
|
+
resize(): void;
|
|
288
|
+
fit(type?: string): void;
|
|
289
|
+
get components(): Component[] | undefined;
|
|
290
|
+
get layout(): any;
|
|
291
|
+
get auxOverlay(): HTMLElement | undefined;
|
|
292
|
+
get isReady(): boolean;
|
|
293
|
+
get unitScale(): number;
|
|
294
|
+
get selected(): Component[];
|
|
295
|
+
set selected(_v: Component[]);
|
|
296
|
+
get focused(): Component | null;
|
|
297
|
+
set focused(_v: Component | null);
|
|
298
|
+
get hasSameParentForAllSelected(): boolean;
|
|
299
|
+
set hasSameParentForAllSelected(_v: boolean);
|
|
300
|
+
get fitMode(): string | undefined;
|
|
301
|
+
set fitMode(_v: string | undefined);
|
|
302
|
+
get element(): HTMLElement | null;
|
|
303
|
+
set element(_v: HTMLElement | null);
|
|
304
|
+
};
|
|
305
|
+
} & typeof Shape;
|
|
306
|
+
/**
|
|
307
|
+
* 저작 중인 부품. 판 위에 놓이는 여느 컴포넌트다.
|
|
308
|
+
*
|
|
309
|
+
* 2D 는 위에서 내려다본 발자국을 그린다. 저작면의 2D 뷰와 배포된 Figure 의 2D 표현이
|
|
310
|
+
* 같은 규칙으로 그려져야, 접기 전후로 그림이 달라지지 않는다.
|
|
311
|
+
*/
|
|
312
|
+
export declare class FigurePart extends FigurePart_base {
|
|
313
|
+
/** 이름이 `register` 면 밑바탕 클래스의 것과 부딪힌다 — `FigureInstance` 와 같은 이름을 쓴다. */
|
|
314
|
+
static registerType(): void;
|
|
315
|
+
get hasTextProperty(): boolean;
|
|
316
|
+
is3dish(): boolean;
|
|
317
|
+
get nature(): ComponentNature;
|
|
318
|
+
buildRealObject(): IRealObject | undefined;
|
|
319
|
+
render(ctx: SceneRenderContext): void;
|
|
320
|
+
/** 위에서 내려다본 발자국. 3D 와 **같은 분할 수**로 근사한다. */
|
|
321
|
+
private traceFootprint;
|
|
322
|
+
}
|
|
323
|
+
export {};
|
|
324
|
+
//# sourceMappingURL=figure-part-component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figure-part-component.d.ts","sourceRoot":"","sources":["../../src/figure/figure-part-component.ts"],"names":[],"mappings":"AAMA,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAClD,OAAO,KAAK,MAAM,wBAAwB,CAAA;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAGrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAyC3D,4DAA4D;AAC5D,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;AAQ9F,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,mBAAmB,CAAA;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACjC,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,OAAO,gBAAgB,CAAA;IACtC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAMD;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,UAAU;IAClD,KAAK;IAgBL,yBAAyB;IACzB,OAAO,CAAC,YAAY;IAapB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,YAAY;IA4CpB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAsBhB;;;;;OAKG;IACH,eAAe,IAAI,IAAI;CAWxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,eAAe;IAC7C,wEAAwE;IACxE,MAAM,CAAC,YAAY,IAAI,IAAI;IAI3B,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,OAAO,IAAI,OAAO;IAIlB,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED,eAAe,IAAI,WAAW,GAAG,SAAS;IAI1C,MAAM,CAAC,GAAG,EAAE,kBAAkB;IAU9B,4CAA4C;IAC5C,OAAO,CAAC,cAAc;CA2CvB"}
|
|
@@ -28,29 +28,40 @@ import type { FigureBlueprintMember } from './figure-blueprint.js';
|
|
|
28
28
|
* `InstancedMesh` 이고, 그것은 인스턴스별 선택·컬링·재질을 다르게 다뤄야 해서 별개
|
|
29
29
|
* 결정이다.
|
|
30
30
|
*/
|
|
31
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* 청사진 좌표가 곧 three 좌표다 — 둘 다 x 오른쪽, y 위, z 앞이고, 둘 다 원점이
|
|
33
|
+
* 중심이다. **갈아끼울 것이 없다.**
|
|
34
|
+
*
|
|
35
|
+
* 컴포넌트 state 와의 환산은 `updateDimension` 한 곳에만 있다.
|
|
36
|
+
*/
|
|
32
37
|
export declare function memberGeometry(member: FigureBlueprintMember): THREE.BufferGeometry | null;
|
|
33
38
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
39
|
+
* 부품 하나의 형상을 **제 중심을 원점에 두고** 만든다.
|
|
40
|
+
*
|
|
41
|
+
* 자리를 굽지 않는다. 그러면 크기·종류가 같은 부품끼리는 자리가 달라도 같은 형상을
|
|
42
|
+
* 나눠 쓸 수 있고, 저작면에서는 `mesh.position` 이 곧 부품의 자리가 되어 기즈모로 끈
|
|
43
|
+
* 결과를 그대로 되읽을 수 있다.
|
|
44
|
+
*/
|
|
45
|
+
export declare function memberGeometryAtOrigin(member: FigureBlueprintMember): THREE.BufferGeometry | null;
|
|
46
|
+
/**
|
|
47
|
+
* 한 묶음의 부품들을 하나로 합친다. **모양당 한 번만** 만들고 창고에 둔다 — 모양이
|
|
48
|
+
* 같으면 몇 번을 불러도 **같은 객체**가 나온다. 공유가 실제로 일어나는지 시험이
|
|
49
|
+
* 확인할 수 있게 내보낸다.
|
|
37
50
|
*
|
|
38
|
-
* 합친 결과는
|
|
39
|
-
* 컴포넌트들이 `geometry.center()` 로 맞추는 기준과
|
|
51
|
+
* 합친 결과는 청사진 좌표 그대로다. 청사진의 원점이 이미 base 상자의 중심이라, 다른
|
|
52
|
+
* 컴포넌트들이 `geometry.center()` 로 맞추는 기준과 같은 자리에 있다.
|
|
40
53
|
*/
|
|
41
54
|
export declare function mergedGeometryOf(figure: PreparedFigure, index: number): THREE.BufferGeometry | null;
|
|
42
55
|
export declare class FigureRealObject extends RealObject {
|
|
43
56
|
/** 부품 이름 → mesh. 애니메이션·바인딩이 부품을 찾는 자리다. */
|
|
44
57
|
private _meshByName;
|
|
45
58
|
get figure(): PreparedFigure | null;
|
|
46
|
-
/** 부품 이름으로 mesh 를 찾는다. 이름이 곧 바인딩·애니메이션이 붙는 자리다. */
|
|
47
|
-
meshOf(name: string): THREE.Mesh | undefined;
|
|
48
59
|
build(): void;
|
|
49
60
|
/**
|
|
50
61
|
* 인스턴스의 높이.
|
|
51
62
|
*
|
|
52
63
|
* 보드는 `left`·`top`·`width`·`height` 만 적는 것이 보통이고 `depth` 는 잘 적지
|
|
53
|
-
* 않는다. 그때 기본 높이(≈1)를 쓰면 `base.
|
|
64
|
+
* 않는다. 그때 기본 높이(≈1)를 쓰면 `base.y` 로 나뉘어 형상이 납작하게 눌린다.
|
|
54
65
|
*
|
|
55
66
|
* **저작한 비례를 지킨다** — 평면 두 축이 커진 만큼 높이도 커진다. 배치 크기가
|
|
56
67
|
* 템플릿의 비율로 처리된다는 것이 이 뜻이다. 두 축의 기하평균을 쓰므로 한 축만 늘여도
|
|
@@ -60,6 +71,14 @@ export declare class FigureRealObject extends RealObject {
|
|
|
60
71
|
/**
|
|
61
72
|
* 인스턴스 치수를 **배율로만** 준다 — geometry 는 건드리지 않으므로 인스턴스가
|
|
62
73
|
* 늘어도 정점 버퍼가 늘지 않는다.
|
|
74
|
+
*
|
|
75
|
+
* **낱말이 갈리는 유일한 자리다.** 청사진은 3D 도구들의 축(`x` 오른쪽, `y` 위,
|
|
76
|
+
* `z` 앞)을 쓰고, 컴포넌트 state 는 2D 캔버스에서 온 낱말(`width`·`height` 가
|
|
77
|
+
* 평면, `depth` 가 높이)을 쓴다. 환산은 여기서 한 번만 한다.
|
|
78
|
+
*
|
|
79
|
+
* state.width ↔ base.x 평면 가로
|
|
80
|
+
* state.height ↔ base.z 평면 세로
|
|
81
|
+
* state.depth ↔ base.y 높이
|
|
63
82
|
*/
|
|
64
83
|
updateDimension(): void;
|
|
65
84
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"figure-real-object.d.ts","sourceRoot":"","sources":["../../src/figure/figure-real-object.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAKrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAA;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAElE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH
|
|
1
|
+
{"version":3,"file":"figure-real-object.d.ts","sourceRoot":"","sources":["../../src/figure/figure-real-object.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAKrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAA;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAElE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CAuBzF;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CAiCjG;AAmFD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CA0CnG;AAkBD,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,2CAA2C;IAC3C,OAAO,CAAC,WAAW,CAAgC;IAEnD,IAAI,MAAM,IAAI,cAAc,GAAG,IAAI,CAElC;IAED,KAAK;IAwBL;;;;;;;;;OASG;IACH,IAAa,cAAc,IAAI,MAAM,CAepC;IAED;;;;;;;;;;;OAWG;IACH,eAAe,IAAI,IAAI;IAevB;;;;OAIG;IACM,UAAU,IAAI,UAAU,GAAG,IAAI;IAIxC,KAAK;CAIN"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* 적재되며 컴포넌트 클래스를 registry 에 넣기 때문이다. 그래서 instance 를 먼저 읽는다.
|
|
6
6
|
*/
|
|
7
7
|
export * from './figure-instance.js';
|
|
8
|
+
export * from './figure-part-component.js';
|
|
8
9
|
export * from './figure-blueprint.js';
|
|
9
10
|
export * from './figure-palette.js';
|
|
10
11
|
export * from './figure-registry.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/figure/index.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/figure/index.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAA;AAKpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
/**
|
|
3
|
+
* 좌표 바탕 — 바닥 모눈과 축.
|
|
4
|
+
*
|
|
5
|
+
* 3D 저작면에서 이것이 없으면 **어디가 원점이고 어느 쪽이 위인지 알 수 없다.** 형상만
|
|
6
|
+
* 떠 있으면 크기도 방향도 짐작이 안 된다.
|
|
7
|
+
*
|
|
8
|
+
* ## 왜 씬이 갖나
|
|
9
|
+
*
|
|
10
|
+
* 한동안 저작 화면이 만들어 `scene3d` 에 얹었다. 그랬더니 2D 로 갔다 오면 사라졌다 —
|
|
11
|
+
* 그때 씬이 통째로 다시 서면서 새 `THREE.Scene` 을 만드는데, 얹어 둔 것은 옛 씬에
|
|
12
|
+
* 남기 때문이다. 씬이 소유하면 다시 설 때 같이 산다.
|
|
13
|
+
*
|
|
14
|
+
* 3D 저작면이면 다 필요한 것이라, 자리도 여기가 맞다.
|
|
15
|
+
*
|
|
16
|
+
* ## 두 단계로 그린다
|
|
17
|
+
*
|
|
18
|
+
* 잔 눈금만 있으면 「지금 몇 칸인가」를 셀 수 없다. 다섯 칸마다 굵은 눈금을 둔다 —
|
|
19
|
+
* 자와 모눈종이가 하는 것과 같다.
|
|
20
|
+
*
|
|
21
|
+
* ## 멀어질수록 사라지게
|
|
22
|
+
*
|
|
23
|
+
* 끝까지 같은 세기로 그으면 원경에서 선이 뒤엉켜 **어두운 띠**가 된다. 정점 색을
|
|
24
|
+
* 배경색 쪽으로 섞어 반지름에 따라 지운다 — 투명도가 아니라 색으로 지우므로 깊이
|
|
25
|
+
* 정렬과 싸우지 않는다.
|
|
26
|
+
*/
|
|
27
|
+
export interface CoordinateGroundOptions {
|
|
28
|
+
/** 잔 눈금 한 칸. */
|
|
29
|
+
step: number;
|
|
30
|
+
/** 원점에서 몇 칸까지 뻗나. */
|
|
31
|
+
cells?: number;
|
|
32
|
+
/** 배경색. 선이 이 색으로 스러진다. */
|
|
33
|
+
background?: string;
|
|
34
|
+
/** 축 이름표를 보이나. */
|
|
35
|
+
labels?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare const COORDINATE_GROUND_NAME = "coordinate-ground";
|
|
38
|
+
/**
|
|
39
|
+
* 가로 길이에 어울리는 **둥근** 눈금 한 칸. 대여섯 칸이 되게 잡는다.
|
|
40
|
+
*
|
|
41
|
+
* 그냥 나누면 27 · 33 같은 값이 나온다. 그 눈금에 맞추면 좌표가 54 · 81 이 되어 사람이
|
|
42
|
+
* 읽을 수 없다. 1 · 2 · 5 사다리로 올려 붙인다 — 자와 차트 눈금이 쓰는 방식이다.
|
|
43
|
+
*
|
|
44
|
+
* 칸이 성기어야 형상이 주인공이 된다. 열 칸으로 잡았더니 모눈이 촘촘해 바탕이 먼저
|
|
45
|
+
* 보였다.
|
|
46
|
+
*/
|
|
47
|
+
export declare function niceGridStep(span: number): number;
|
|
48
|
+
export declare function buildCoordinateGround(options: CoordinateGroundOptions): THREE.Group;
|
|
49
|
+
/** 좌표 바탕이 쥐고 있는 것을 놓는다. 창고에 든 것이 아니라 우리가 만든 것들이다. */
|
|
50
|
+
export declare function disposeCoordinateGround(ground: THREE.Object3D): void;
|
|
51
|
+
//# sourceMappingURL=coordinate-ground.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinate-ground.d.ts","sourceRoot":"","sources":["../../src/threed/coordinate-ground.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,WAAW,uBAAuB;IACtC,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kBAAkB;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAYD,eAAO,MAAM,sBAAsB,sBAAsB,CAAA;AAEzD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD;AAYD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,uBAAuB,GAAG,KAAK,CAAC,KAAK,CAsCnF;AA+GD,qDAAqD;AACrD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAYpE"}
|
|
@@ -1,4 +1,26 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
import type Component from '../../components/component.js';
|
|
3
|
+
/**
|
|
4
|
+
* 판의 바닥판을 만든다. 필요 없으면 만들지 않는다.
|
|
5
|
+
*
|
|
6
|
+
* ## `floor: false` 를 따로 두는 까닭
|
|
7
|
+
*
|
|
8
|
+
* **판의 면은 한 개념이다** — 2D 에서는 종이이고 3D 에서는 바닥판이다. 그래서 `fillStyle`
|
|
9
|
+
* 하나가 둘을 정하는 것은 원래 일관적이다.
|
|
10
|
+
*
|
|
11
|
+
* 그런데 **그 둘을 따로 원하는 화면이 있다.** 3D 저작면이 그렇다:
|
|
12
|
+
*
|
|
13
|
+
* - 2D 종이는 **밝아야 한다.** 편집 손잡이와 안내선이 어두운 색이라 어두운 바탕에서는
|
|
14
|
+
* 안 보인다.
|
|
15
|
+
* - 3D 바닥판은 **없어야 한다.** 좌표 모눈과 겹쳐 싸우고, 원점 아래쪽을 가린다.
|
|
16
|
+
*
|
|
17
|
+
* 이 조합을 말할 방법이 없었다. 유일한 길이 `fillStyle: 'none'` 인데 그러면 2D 종이까지
|
|
18
|
+
* 비어 버려 편집 도구가 안 보인다.
|
|
19
|
+
*
|
|
20
|
+
* 바닥이 별개로 없어질 수 있다는 것은 코드가 이미 인정하고 있었다 — `placement === 'space'`
|
|
21
|
+
* 는 `fillStyle` 과 무관하게 바닥을 안 만든다. 그 자리를 명시적으로 연 것뿐이다.
|
|
22
|
+
*
|
|
23
|
+
* **안 주면 종전 그대로다.** 이미 세워져 있는 보드는 아무것도 달라지지 않는다.
|
|
24
|
+
*/
|
|
3
25
|
export declare function createFloor(component: Component): THREE.Mesh | undefined;
|
|
4
26
|
//# sourceMappingURL=floor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floor.d.ts","sourceRoot":"","sources":["../../../src/threed/floor/floor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAqB1D,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"floor.d.ts","sourceRoot":"","sources":["../../../src/threed/floor/floor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAqB1D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,CA2ExE"}
|
|
@@ -94,4 +94,8 @@ export { createCanvasTexture, renderCanvasTexture } from './texture/canvas-textu
|
|
|
94
94
|
export { textTexture, textBounds, drawTextTexture, fontStyle } from './texture/text-texture.js';
|
|
95
95
|
export { createCanvas, PIXEL_RATIO } from './html/elements.js';
|
|
96
96
|
export { createFloor } from './floor/floor.js';
|
|
97
|
+
export { isParted, partAtByIndex } from './parted-real-object.js';
|
|
98
|
+
export type { PartedRealObject } from './parted-real-object.js';
|
|
99
|
+
export { buildCoordinateGround, disposeCoordinateGround, niceGridStep } from './coordinate-ground.js';
|
|
100
|
+
export type { CoordinateGroundOptions } from './coordinate-ground.js';
|
|
97
101
|
//# sourceMappingURL=index.d.ts.map
|