@hatiolab/things-scene 10.0.5 → 10.1.0

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.
Files changed (76) hide show
  1. package/dist-types/diagnostics/inspector.d.ts +47 -0
  2. package/dist-types/diagnostics/inspector.d.ts.map +1 -1
  3. package/dist-types/figure/figure-blueprint.d.ts +118 -0
  4. package/dist-types/figure/figure-blueprint.d.ts.map +1 -0
  5. package/dist-types/figure/figure-instance.d.ts +283 -0
  6. package/dist-types/figure/figure-instance.d.ts.map +1 -0
  7. package/dist-types/figure/figure-palette.d.ts +37 -0
  8. package/dist-types/figure/figure-palette.d.ts.map +1 -0
  9. package/dist-types/figure/figure-real-object.d.ts +73 -0
  10. package/dist-types/figure/figure-real-object.d.ts.map +1 -0
  11. package/dist-types/figure/figure-registry.d.ts +71 -0
  12. package/dist-types/figure/figure-registry.d.ts.map +1 -0
  13. package/dist-types/figure/index.d.ts +12 -0
  14. package/dist-types/figure/index.d.ts.map +1 -0
  15. package/dist-types/interfaces/real-object.d.ts +34 -0
  16. package/dist-types/interfaces/real-object.d.ts.map +1 -1
  17. package/dist-types/layer/model-layer.d.ts +9 -2
  18. package/dist-types/layer/model-layer.d.ts.map +1 -1
  19. package/dist-types/model/arrange.d.ts +61 -0
  20. package/dist-types/model/arrange.d.ts.map +1 -0
  21. package/dist-types/model/index.d.ts +1 -0
  22. package/dist-types/model/index.d.ts.map +1 -1
  23. package/dist-types/things-scene/index.d.ts +1 -0
  24. package/dist-types/things-scene/index.d.ts.map +1 -1
  25. package/dist-types/threed/common.d.ts +8 -0
  26. package/dist-types/threed/common.d.ts.map +1 -1
  27. package/dist-types/threed/factories/backdrop.d.ts.map +1 -1
  28. package/dist-types/threed/factories/camera.d.ts +1 -1
  29. package/dist-types/threed/factories/cube.d.ts +8 -0
  30. package/dist-types/threed/factories/cube.d.ts.map +1 -1
  31. package/dist-types/threed/factories/cylinder.d.ts +17 -0
  32. package/dist-types/threed/factories/cylinder.d.ts.map +1 -1
  33. package/dist-types/threed/factories/sphere.d.ts +11 -0
  34. package/dist-types/threed/factories/sphere.d.ts.map +1 -1
  35. package/dist-types/threed/factories/wall.d.ts +8 -0
  36. package/dist-types/threed/factories/wall.d.ts.map +1 -1
  37. package/dist-types/threed/geometry-bank.d.ts +64 -0
  38. package/dist-types/threed/geometry-bank.d.ts.map +1 -0
  39. package/dist-types/threed/index.d.ts +4 -0
  40. package/dist-types/threed/index.d.ts.map +1 -1
  41. package/dist-types/threed/instanced-set.d.ts +211 -0
  42. package/dist-types/threed/instanced-set.d.ts.map +1 -0
  43. package/dist-types/threed/managers/event-manager3d.d.ts.map +1 -1
  44. package/dist-types/threed/managers/renderer-manager.d.ts +3 -3
  45. package/dist-types/threed/managers/renderer-manager.d.ts.map +1 -1
  46. package/dist-types/threed/managers/scene-manager.d.ts +33 -9
  47. package/dist-types/threed/managers/scene-manager.d.ts.map +1 -1
  48. package/dist-types/threed/material-3d.d.ts +9 -0
  49. package/dist-types/threed/material-3d.d.ts.map +1 -1
  50. package/dist-types/threed/real-object-camera-meshed.d.ts +1 -1
  51. package/dist-types/threed/real-object-dom-texture.d.ts +2 -2
  52. package/dist-types/threed/real-object-extrude.d.ts +14 -0
  53. package/dist-types/threed/real-object-extrude.d.ts.map +1 -1
  54. package/dist-types/threed/real-object-mesh.d.ts +79 -2
  55. package/dist-types/threed/real-object-mesh.d.ts.map +1 -1
  56. package/dist-types/threed/real-object-plane-2d.d.ts +2 -2
  57. package/dist-types/threed/real-object-scene.d.ts +2 -2
  58. package/dist-types/threed/real-object-service.d.ts +2 -2
  59. package/dist-types/threed/real-object.d.ts +46 -2
  60. package/dist-types/threed/real-object.d.ts.map +1 -1
  61. package/dist-types/threed/segments.d.ts +49 -0
  62. package/dist-types/threed/segments.d.ts.map +1 -0
  63. package/dist-types/threed/three-capability.d.ts +7 -0
  64. package/dist-types/threed/three-capability.d.ts.map +1 -1
  65. package/dist-types/threed/three-container.d.ts +8 -3
  66. package/dist-types/threed/three-container.d.ts.map +1 -1
  67. package/dist-types/threed/top-outline.d.ts +37 -0
  68. package/dist-types/threed/top-outline.d.ts.map +1 -0
  69. package/dist-types/threed/utils/dispose.d.ts.map +1 -1
  70. package/dist-types/transition/transition-effect.d.ts.map +1 -1
  71. package/package.json +3 -3
  72. package/things-scene-min.js +11 -11
  73. package/things-scene-min.js.map +1 -1
  74. package/things-scene-transfer.mjs +3 -3
  75. package/things-scene.mjs +3 -3
  76. package/things-scene.mjs.map +1 -1
@@ -1,10 +1,50 @@
1
1
  import type { ComponentNature } from '../interfaces/types.js';
2
2
  import type { Material3D, ResolvedMaterial3D } from '../threed/material-3d.js';
3
+ /**
4
+ * 재질이 그려지지 않을 조건 — **왜 화면이 검은지**를 말해 준다.
5
+ *
6
+ * 이것을 두는 이유. PBR 에서 완전한 금속은 확산 성분이 없어 보이는 것이 전부 반사다.
7
+ * 반사할 환경(IBL)이 없으면 저작자가 고른 색과 무관하게 검게 나온다. 그때 저작자는
8
+ * 색을 잘못 골랐다고 생각한다 — 화면이 원인을 알려 주지 않기 때문이다.
9
+ */
10
+ export interface MaterialVisibilityWarning {
11
+ code: 'metal-without-environment';
12
+ /** 사람이 읽는 사유. 그대로 보여도 된다. */
13
+ message: string;
14
+ /** 판단에 쓴 값. */
15
+ metalness: number;
16
+ }
3
17
  interface ThreedInfo {
4
18
  is3dish: boolean;
5
19
  type: string;
6
20
  material3d?: Material3D;
7
21
  resolved?: ResolvedMaterial3D;
22
+ /**
23
+ * 재질을 나눠 쓰고 있나.
24
+ *
25
+ * 대량으로 놓이는 컴포넌트(캐리어·선반 칸·롤러)는 재질을 나눠 써야 한다. 안 나눠
26
+ * 쓰면 인스턴스 수만큼 재질이 생긴다 — 캐리어 1만 개면 재질 1만 개다.
27
+ *
28
+ * `violated` 는 「나눠 써야 한다고 선언했는데 못 쓰고 있다」는 뜻이고, 그때
29
+ * `reason` 이 무엇을 고쳐야 하는지 말한다.
30
+ *
31
+ * 판단할 수 없으면(3D 오브젝트가 아직 없는 등) `undefined` 다 — **나눠 쓴다고
32
+ * 단정하지 않는다.**
33
+ */
34
+ materialSharing?: {
35
+ shared: boolean;
36
+ required: boolean;
37
+ violated: boolean;
38
+ reason?: string;
39
+ bankKey?: string;
40
+ };
41
+ /**
42
+ * 이 재질이 의도대로 안 보일 조건. 없으면 빈 배열이다.
43
+ *
44
+ * **비어 있다는 것과 「모른다」는 것은 다르다** — 판단할 수 없었으면 `undefined` 다
45
+ * (씬을 못 찾은 경우 등).
46
+ */
47
+ visibilityWarnings?: MaterialVisibilityWarning[];
8
48
  nodeNames?: string[];
9
49
  animationNames?: string[];
10
50
  nodes?: Record<string, any>;
@@ -181,6 +221,13 @@ declare class SceneInspector {
181
221
  * Material3D, GLTF 노드/애니메이션 등.
182
222
  */
183
223
  getThreedInfo(componentId: string, sceneIndex?: number): ThreedInfo | null;
224
+ /**
225
+ * 반사할 환경이 없는데 금속성이 높으면 알린다.
226
+ *
227
+ * 문턱 0.5 — 그 아래는 확산 성분이 남아 색이 보인다. 1.0 은 완전히 검게 나온다.
228
+ * 문턱을 넘었다고 잘못된 것은 아니다. 환경을 주면 의도대로 보인다.
229
+ */
230
+ private _materialVisibilityWarnings;
184
231
  private _getScene;
185
232
  private _cleanup;
186
233
  private _findComponent;
@@ -1 +1 @@
1
- {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/diagnostics/inspector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/diagnostics/inspector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * 청사진을 **읽는 쪽**의 계약.
3
+ *
4
+ * 정본은 `@hatiolab/figure-model` 의 `FigureBlueprint` 다. 여기 있는 것은 그 형식 중
5
+ * things-scene 이 실제로 읽는 부분만 적은 것이며, **의존성을 만들지 않으려고** 형식을
6
+ * 다시 적었다. figure-model 은 의존성 없는 순수 데이터 모듈이고 things-scene 은 npm 에
7
+ * 배포되므로, 아직 배포되지 않은 패키지를 배포되는 라이브러리의 의존성으로 넣을 수 없다.
8
+ *
9
+ * **두 벌이 되면 어긋날 수 있다.** 그래서 `test/fixtures/figure-blueprint-sample.json`
10
+ * 에 figure-model 이 실제로 낸 청사진을 넣어 두고, 시험이 그것을 이 형식으로 읽는다.
11
+ * figure-model 의 형식이 바뀌면 표본을 다시 뽑을 때 시험이 깨진다.
12
+ *
13
+ * 좌표 규약은 figure-model 의 `PartTransform` 과 같다 — `x`·`y`·`z` 는 부품의 **최소
14
+ * 모서리**이고 기준은 `base` 상자의 (0,0,0) 이다. `x` 오른쪽, `y` 아래, `z` 위이며
15
+ * `depth` 가 높이다.
16
+ */
17
+ export type FigurePrimitiveKind = 'cube' | 'wall' | 'cylinder' | 'sphere' | 'rect' | 'polygon';
18
+ export type FigureMaterialSlot = 'cap' | 'side';
19
+ export type FigureSizingRule = 'scale' | 'fixed' | 'stretch' | 'repeat';
20
+ export type FigureAnimationKind = 'fade' | 'heartbeat' | 'moving' | 'outline' | 'rotation' | 'vibration' | 'waypoint';
21
+ export interface FigureVec3 {
22
+ x: number;
23
+ y: number;
24
+ z: number;
25
+ }
26
+ export interface FigurePartTransform extends FigureVec3 {
27
+ width: number;
28
+ height: number;
29
+ depth: number;
30
+ rotation?: Partial<FigureVec3>;
31
+ }
32
+ export interface FigurePartMaterial {
33
+ /** 팔레트 토큰. 값이 아니라 이름이다 — 해석은 그리는 쪽이 한다. */
34
+ token?: string;
35
+ preset?: 'default' | 'metal' | 'glass' | 'plastic' | 'wood' | 'ceramic' | 'rubber';
36
+ flatShading?: boolean;
37
+ transparent?: boolean;
38
+ }
39
+ export interface FigurePartShape {
40
+ /** polygon 의 단면. `base` 좌표계의 점들. */
41
+ path?: {
42
+ x: number;
43
+ y: number;
44
+ }[];
45
+ /** rect 의 모서리 반경. */
46
+ round?: number;
47
+ }
48
+ export interface FigureBlueprintMember {
49
+ name: string;
50
+ primitive: FigurePrimitiveKind;
51
+ /** GeometryBank 키. 치수가 들어 있다. */
52
+ geometryKey: string;
53
+ transform: FigurePartTransform;
54
+ sizing: FigureSizingRule;
55
+ repeat?: {
56
+ axis: 'x' | 'y' | 'z';
57
+ gap: number;
58
+ };
59
+ shape?: FigurePartShape;
60
+ triangles: number;
61
+ }
62
+ export interface FigureBlueprintGroup {
63
+ materialKey: string;
64
+ material: FigurePartMaterial;
65
+ slot?: FigureMaterialSlot;
66
+ /** 애니메이션 포인트에 걸린 묶음. 걸리면 부품 하나만 든다. */
67
+ animated: boolean;
68
+ members: FigureBlueprintMember[];
69
+ }
70
+ export interface FigureBlueprintPoint {
71
+ /** 어느 부품인가. `FigureBlueprintMember.name`. */
72
+ name: string;
73
+ kind: FigureAnimationKind;
74
+ axis?: 'x' | 'y' | 'z';
75
+ pivot?: FigureVec3;
76
+ }
77
+ export interface FigureBlueprintLabel {
78
+ name: string;
79
+ source: string;
80
+ when: 'always' | 'zoomed' | 'selected' | 'abnormal';
81
+ /** 어느 부품에 붙나. */
82
+ at: string;
83
+ }
84
+ export interface FigureBlueprint {
85
+ version: number;
86
+ type: string;
87
+ base: {
88
+ width: number;
89
+ height: number;
90
+ depth: number;
91
+ };
92
+ anchor?: FigureVec3;
93
+ budget: {
94
+ triangles: number;
95
+ groups: number;
96
+ };
97
+ groups: FigureBlueprintGroup[];
98
+ points: FigureBlueprintPoint[];
99
+ labels: FigureBlueprintLabel[];
100
+ violations: {
101
+ code: string;
102
+ message: string;
103
+ actual?: number;
104
+ limit?: number;
105
+ }[];
106
+ }
107
+ /** 이 판올림이 읽을 수 있는 청사진 판. */
108
+ export declare const SUPPORTED_BLUEPRINT_VERSION = 1;
109
+ /**
110
+ * 청사진의 형태를 확인한다 — **읽기 전에 한 번**, 등록 시점에.
111
+ *
112
+ * 그리는 시점이 아니라 등록 시점에 보는 이유는, 잘못된 청사진이 프레임마다 조용히
113
+ * 실패하는 대신 등록에서 한 번 크게 실패하게 하려는 것이다.
114
+ *
115
+ * 문제를 찾으면 사람이 읽을 수 있는 사유 목록을 돌려준다. 비어 있으면 읽을 수 있다.
116
+ */
117
+ export declare function blueprintProblems(value: unknown): string[];
118
+ //# sourceMappingURL=figure-blueprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figure-blueprint.d.ts","sourceRoot":"","sources":["../../src/figure/figure-blueprint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,283 @@
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
+ declare const FigureInstance_base: {
7
+ new (...args: any[]): {
8
+ contains(x: number, y: number): boolean;
9
+ get path(): {
10
+ x: any;
11
+ y: any;
12
+ }[];
13
+ set path(path: {
14
+ x: any;
15
+ y: any;
16
+ }[]);
17
+ get anchors(): {
18
+ name: string;
19
+ position: {
20
+ x: any;
21
+ y: any;
22
+ };
23
+ }[];
24
+ get bounds(): any;
25
+ set bounds(bounds: any);
26
+ render(ctx: CanvasRenderingContext2D): void;
27
+ _app: any;
28
+ _model: any;
29
+ _state: any;
30
+ _delta: any;
31
+ _animation: any;
32
+ _animate: any;
33
+ _parent: any;
34
+ _disposed: any;
35
+ _textHidden: any;
36
+ _text_substitutor: any;
37
+ _value_substitutor: any;
38
+ _mappings: any;
39
+ _realObject: IRealObject | undefined;
40
+ _cachedState: any;
41
+ updatedAt: any;
42
+ fontSize: any;
43
+ __cache__: any;
44
+ created(): void;
45
+ added(parent: import("../types/component.js").Container): void;
46
+ removed(parent: import("../types/component.js").Container): void;
47
+ ready(): Promise<void>;
48
+ _readyInvoked: boolean;
49
+ invokeReady(): void | Promise<void>;
50
+ touch(): void;
51
+ clearCache(...attrs: string[]): void;
52
+ removeSelf(completely?: boolean): void;
53
+ resetAnimation(): void;
54
+ dispose(): void;
55
+ get nature(): ComponentNature;
56
+ get disposed(): boolean;
57
+ isLayer(): boolean;
58
+ isGroup(): boolean;
59
+ isContainer(): this is import("../types/component.js").Container;
60
+ isLine(): boolean;
61
+ isRoot(): boolean;
62
+ isRootModel(): boolean;
63
+ is3dish(): boolean;
64
+ get is3dMode(): boolean;
65
+ isIn3DSpace(): boolean;
66
+ isTemplate(): boolean;
67
+ isHTMLElement(): boolean;
68
+ isConnectable(): boolean;
69
+ isIdentifiable(): boolean;
70
+ isPositionable(): boolean;
71
+ replaceRefids(replaceMap: Record<string, string>): void;
72
+ get(property: string): any;
73
+ set(props: any, propval?: any): any;
74
+ getState(property: string): any;
75
+ setState(props: Partial<import("../index.js").State> | string, propval?: any): any;
76
+ get model(): any;
77
+ get state(): import("../index.js").State;
78
+ get refid(): any;
79
+ get hierarchy(): any;
80
+ get volatile(): string[];
81
+ _applyProps(target: Record<string, any>, props: Record<string, any>, options: import("../components/component.js").ApplyPropsOptions): /*elided*/ any;
82
+ move(offset: {
83
+ x: number;
84
+ y: number;
85
+ }, ...args: boolean[]): void;
86
+ symmetryX(x?: number): void;
87
+ symmetryY(y: number): void;
88
+ adjustResize(bounds: import("../index.js").BOUNDS, origin_bounds: import("../index.js").BOUNDS, diagonal: boolean): {
89
+ left: any;
90
+ top: any;
91
+ width: any;
92
+ height: any;
93
+ };
94
+ adjustRotation(rotation: number, step: boolean): number;
95
+ outline(progress: number): any;
96
+ get center(): import("../index.js").POINT;
97
+ set center(p: import("../index.js").POINT);
98
+ get location(): import("../index.js").POINT;
99
+ set location(l: import("../index.js").POINT);
100
+ get rotate(): import("../index.js").POINT;
101
+ set rotate(r: import("../index.js").POINT);
102
+ get dimension(): import("../index.js").DIMENSION;
103
+ set dimension(d: import("../index.js").DIMENSION);
104
+ get drawPath(): import("../index.js").POINT[];
105
+ get rotatePoint(): import("../index.js").POINT;
106
+ get mutable(): boolean;
107
+ get resizable(): boolean;
108
+ get rotatable(): boolean;
109
+ buildRealObject(): IRealObject | undefined;
110
+ get realObject(): IRealObject | undefined;
111
+ draw(context?: SceneRenderContext): void;
112
+ prerender(context: SceneRenderContext): void;
113
+ postrender(context: SceneRenderContext): void;
114
+ prepare(resolve: (component: Component) => void, reject: (reason: any) => void): void;
115
+ prepareIf(condition: boolean): void;
116
+ drawText(context: SceneRenderContext): void;
117
+ drawStroke(context: SceneRenderContext, override?: Record<string, unknown>): void;
118
+ drawFill(context: SceneRenderContext, override?: Record<string, unknown>): void;
119
+ get strokeStyle(): any;
120
+ set strokeStyle(v: any);
121
+ get fillStyle(): any;
122
+ set fillStyle(v: any);
123
+ get fontColor(): string;
124
+ set fontColor(v: string);
125
+ get rotation(): number;
126
+ set rotation(v: number);
127
+ get decorators(): string[];
128
+ get decotag(): string;
129
+ get hidden(): boolean;
130
+ set hidden(v: boolean);
131
+ get tag(): string;
132
+ set tag(v: string);
133
+ get appendum(): any;
134
+ set appendum(v: any);
135
+ defaultTextSubstitutor(): string;
136
+ textLines(context?: SceneRenderContext): any[][];
137
+ get font(): string;
138
+ get lineHeight(): number;
139
+ get textSubstitutor(): () => string;
140
+ get text(): string;
141
+ set text(v: string);
142
+ get textBounds(): import("../index.js").BOUNDS;
143
+ get textRotation(): number;
144
+ get textHidden(): boolean;
145
+ set textHidden(v: boolean);
146
+ get hasTextProperty(): boolean;
147
+ animate(opts: import("../index.js").AnimationConfig): any;
148
+ effect(context: SceneRenderContext, model: any): void;
149
+ serialize(...others: any[]): string;
150
+ trim(): void;
151
+ closeScene(data: any): void;
152
+ delta(attr?: string | object, value?: any): any;
153
+ invalidate(): void;
154
+ get value(): any;
155
+ set value(v: any);
156
+ get data(): any;
157
+ set data(v: any);
158
+ set tap(v: any);
159
+ get mappings(): any[];
160
+ get retention(): number;
161
+ get animation(): import("../index.js").AnimationController | undefined;
162
+ get started(): boolean;
163
+ set started(v: boolean);
164
+ get controls(): import("../index.js").Control[] | undefined;
165
+ findFirst(finder: string | ((c: Component) => boolean), ...others: any[]): Component | undefined;
166
+ findAll(s: string | ((c: Component) => boolean), ...others: any[]): any[] | undefined;
167
+ capture(x: number, y: number, except?: (c: Component) => boolean): any;
168
+ findAnchor(name: string): any;
169
+ isDescendible(container: Component | any): boolean;
170
+ getContext(component?: unknown): any;
171
+ get root(): Component;
172
+ get rootModel(): Component;
173
+ get parent(): Component;
174
+ set parent(v: Component);
175
+ get scalable(): boolean;
176
+ get stuck(): boolean;
177
+ get capturable(): boolean;
178
+ get position(): string;
179
+ get origin(): string;
180
+ get offset(): import("../index.js").POINT;
181
+ get app(): import("../index.js").ApplicationContext;
182
+ drawEffect(context: SceneRenderContext): void;
183
+ prepareFill(resolve: Function, reject: Function): void;
184
+ prepareFillIf(condition: boolean): void;
185
+ onchangeFill(after: Record<string, any>, before: Record<string, any>): void;
186
+ drawImage(context: SceneRenderContext, image: HTMLImageElement, left: number, top: number, width: number, height: number): void;
187
+ mutateBounds(logic: ((bounds: import("../index.js").BOUNDS) => import("../index.js").BOUNDS | void) | null, context?: any): void;
188
+ 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;
189
+ access(accessor: string): any;
190
+ substitute(template: string, data: any): string | undefined;
191
+ onchangeMappings(after: Record<string, any>, before: Record<string, any>): void;
192
+ onchangeData(after: Record<string, any>, before: Record<string, any>): void;
193
+ buildMappings(): void;
194
+ executeMappings(force?: boolean): void;
195
+ disposeMappings(): void;
196
+ ondropfile(transfered: FileList, files: string[]): void;
197
+ transcoordS2P(x: number, y: number, rp?: import("../index.js").POINT): import("../index.js").POINT;
198
+ transcoordP2S(x: number, y: number, rp?: import("../index.js").POINT): import("../index.js").POINT;
199
+ transcoordS2T(x: number, y: number, top?: Component): import("../index.js").POINT;
200
+ transcoordT2P(x: number, y: number, top?: Component): import("../index.js").POINT;
201
+ transcoordT2S(x: number, y: number, top?: Component): import("../index.js").POINT;
202
+ transcoordS2TR(x: number, y: number, top?: Component): import("../index.js").POINT;
203
+ transcoordS2O(x: number, y: number, target: Component): import("../index.js").POINT;
204
+ transcoordC2S(x: number, y: number, top?: Component): import("../index.js").POINT;
205
+ transcoordS2C(x: number, y: number, top?: Component): import("../index.js").POINT;
206
+ toParent(x: number, y: number, rp?: import("../index.js").POINT): import("../index.js").POINT;
207
+ fromParent(x: number, y: number, rp?: import("../index.js").POINT): import("../index.js").POINT;
208
+ toScene(x: number, y: number, top?: Component): import("../index.js").POINT;
209
+ fromScene(x: number, y: number, top?: Component): import("../index.js").POINT;
210
+ toLocal(x: number, y: number, top?: Component): import("../index.js").POINT;
211
+ toGlobal(x: number, y: number, top?: Component): import("../index.js").POINT;
212
+ toOther(x: number, y: number, target: Component): import("../index.js").POINT;
213
+ on<K extends keyof import("../index.js").ComponentEventMap>(name: K, callback: (...args: import("../index.js").ComponentEventMap[K]) => void, context?: any): /*elided*/ any;
214
+ on(name: string | object, callback: Function, context?: any): /*elided*/ any;
215
+ off<K extends keyof import("../index.js").ComponentEventMap>(name: K, callback?: ((...args: import("../index.js").ComponentEventMap[K]) => void) | undefined, context?: any): /*elided*/ any;
216
+ off(name?: string | object, callback?: Function, context?: any): /*elided*/ any;
217
+ once<K extends keyof import("../index.js").ComponentEventMap>(name: K, callback: (...args: import("../index.js").ComponentEventMap[K]) => void, context?: any): /*elided*/ any;
218
+ once(name: string | object, callback: Function, context?: any): /*elided*/ any;
219
+ trigger<K extends keyof import("../index.js").ComponentEventMap>(name: K, ...args: import("../index.js").ComponentEventMap[K]): /*elided*/ any;
220
+ trigger(name: string, ...args: any[]): /*elided*/ any;
221
+ delegate_on(delegator: any): /*elided*/ any;
222
+ delegate_off(delegator: any): /*elided*/ any;
223
+ onchange(after: Record<string, any>, before: Record<string, any>): void;
224
+ calculateBounds?(): void;
225
+ oncreate_element?(element: HTMLElement): void;
226
+ removeComponent(component: Component, ghost?: boolean): void;
227
+ addComponent(component: Component, ghost?: boolean): void;
228
+ insertComponentAt(component: Component, index: number, ghost?: boolean): void;
229
+ getOverlay(component: Component): HTMLElement | undefined;
230
+ findById(id: string): Component | undefined;
231
+ findByRefid(ref: string | number): Component | undefined;
232
+ findAllById(id: string): Component[];
233
+ resize(): void;
234
+ fit(type?: string): void;
235
+ get components(): Component[] | undefined;
236
+ get layout(): any;
237
+ get auxOverlay(): HTMLElement | undefined;
238
+ get isReady(): boolean;
239
+ get unitScale(): number;
240
+ get selected(): Component[];
241
+ set selected(_v: Component[]);
242
+ get focused(): Component | null;
243
+ set focused(_v: Component | null);
244
+ get hasSameParentForAllSelected(): boolean;
245
+ set hasSameParentForAllSelected(_v: boolean);
246
+ get fitMode(): string | undefined;
247
+ set fitMode(_v: string | undefined);
248
+ get element(): HTMLElement | null;
249
+ set element(_v: HTMLElement | null);
250
+ };
251
+ } & typeof Shape;
252
+ export declare class FigureInstance extends FigureInstance_base {
253
+ /**
254
+ * 이 타입을 그리는 것이 FigureInstance 임을 등록한다. `registerFigure()` 가 부른다.
255
+ *
256
+ * 청사진 등록과 컴포넌트 타입 등록이 늘 함께 일어나야, 보드가 `type` 만 적고도
257
+ * 세워진다.
258
+ */
259
+ static registerType(type: string): void;
260
+ get hasTextProperty(): boolean;
261
+ is3dish(): boolean;
262
+ get nature(): ComponentNature;
263
+ buildRealObject(): IRealObject | undefined;
264
+ /** 이 인스턴스가 그리는 청사진. 등록이 지워졌으면 null 이다. */
265
+ get figure(): import("./figure-registry.js").PreparedFigure | null;
266
+ render(ctx: SceneRenderContext): void;
267
+ /** 부품 하나의 톱뷰 윤곽을 현재 path 에 그린다. */
268
+ private tracePart;
269
+ /**
270
+ * 청사진을 못 찾았을 때. **빈 자리로 두지 않는다** — 아무것도 안 그리면 보는 사람은
271
+ * 컴포넌트가 없는 것인지 청사진이 없는 것인지 알 수 없다. 자리와 타입 이름을 보인다.
272
+ */
273
+ private renderMissing;
274
+ /**
275
+ * Shape 의 drawFill·drawStroke 를 타지 않는다.
276
+ *
277
+ * 부품마다 제 색으로 이미 칠했다. 그리고 인스턴스의 `fillStyle` 은 「청사진 색을
278
+ * 전부 덮어라」는 뜻이 아니다 — 그렇게 읽으면 저작한 색이 통째로 사라진다.
279
+ */
280
+ postrender(context: SceneRenderContext): void;
281
+ }
282
+ export default FigureInstance;
283
+ //# sourceMappingURL=figure-instance.d.ts.map
@@ -0,0 +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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsC7D,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;IAqB9B,mCAAmC;IACnC,OAAO,CAAC,SAAS;IAoDjB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;;OAKG;IACM,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;CAGvD;AAMD,eAAe,cAAc,CAAA"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 팔레트 — 청사진의 색 **토큰**을 실제 색으로 옮긴다.
3
+ *
4
+ * 청사진은 `'#4a9eff'` 가 아니라 `'palette.primary'` 를 담는다. 값을 구우면 테마를
5
+ * 바꿔도 따라오지 않고, 저작한 자산 수백 개를 하나씩 고쳐야 한다.
6
+ *
7
+ * 토큰 수를 적게 두는 것은 미감과 성능 양쪽의 근거다 — 색이 적으면 화면이 정돈되고,
8
+ * MaterialBank 의 키도 그만큼만 생긴다.
9
+ */
10
+ export type FigurePalette = Readonly<Record<string, string>>;
11
+ /**
12
+ * 기본 팔레트.
13
+ *
14
+ * **여기 든 이름이 저작에서 고를 수 있는 전부다.** 자유색을 허용하지 않는 것이
15
+ * 「감각적인 로우폴리」의 첫 규칙이고, 동시에 재질 키를 묶는 근거다.
16
+ */
17
+ export declare const DEFAULT_PALETTE: FigurePalette;
18
+ /** 팔레트가 바뀔 때마다 오른다. 해석해 둔 색을 다시 풀어야 하는지 판단하는 데 쓴다. */
19
+ export declare function paletteVersion(): number;
20
+ /** 팔레트를 등록한다. 같은 이름이면 갈아 끼운다. */
21
+ export declare function registerPalette(name: string, palette: FigurePalette): void;
22
+ /** 쓸 팔레트를 고른다. 없는 이름이면 던진다 — 조용히 기본으로 돌아가지 않는다. */
23
+ export declare function setActivePalette(name: string): void;
24
+ export declare function activePaletteName(): string;
25
+ export declare function activePalette(): FigurePalette;
26
+ /**
27
+ * 토큰을 색으로 옮긴다. **모르는 토큰이면 던진다.**
28
+ *
29
+ * 회색 같은 것으로 갈음하지 않는다 — 그러면 저작자는 자기가 고른 색이 안 나온 것을
30
+ * 팔레트 탓인지 저작 실수인지 알 수 없다. 등록 시점에 한 번 크게 실패하는 편이 낫다.
31
+ */
32
+ export declare function resolveToken(token: string): string;
33
+ /** 토큰이 없는 부품에 쓸 색. 청사진이 색을 안 정했다는 뜻이지 오류는 아니다. */
34
+ export declare const UNTOKENED_COLOR: string;
35
+ /** 시험을 위해 처음 상태로 되돌린다. */
36
+ export declare function resetPalettes(): void;
37
+ //# sourceMappingURL=figure-palette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figure-palette.d.ts","sourceRoot":"","sources":["../../src/figure/figure-palette.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,aAO7B,CAAA;AAOD,sDAAsD;AACtD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,iCAAiC;AACjC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAG1E;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CASnD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,aAAa,IAAI,aAAa,CAE7C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASlD;AAED,kDAAkD;AAClD,eAAO,MAAM,eAAe,QAAsC,CAAA;AAElE,0BAA0B;AAC1B,wBAAgB,aAAa,IAAI,IAAI,CAKpC"}
@@ -0,0 +1,73 @@
1
+ import * as THREE from 'three';
2
+ import { RealObject } from '../threed/real-object.js';
3
+ import type { TopOutline } from '../interfaces/real-object.js';
4
+ import type { PreparedFigure } from './figure-registry.js';
5
+ import type { FigureBlueprintMember } from './figure-blueprint.js';
6
+ /**
7
+ * 저작한 Figure 의 3D 표현.
8
+ *
9
+ * ## 어떻게 서나
10
+ *
11
+ * object3d 묶음마다 mesh 하나를 자식으로 둔다
12
+ * 배율 = state.scale × dimensionScale(bounds ÷ base)
13
+ * ├ mesh(묶음 0) 공유 병합 geometry + 공유 material
14
+ * └ mesh(묶음 1)
15
+ *
16
+ * 치수는 `RealObject.dimensionScale` 에 실는다. 엔진이 state.scale·애니메이션과
17
+ * **곱해서** 반영하므로 서로 덮지 않는다. Figure 만 다른 구조를 쓸 이유가 없다.
18
+ *
19
+ * ## 무엇이 공유되고 무엇이 인스턴스마다 생기나
20
+ *
21
+ * **geometry 는 타입·묶음당 하나다.** 부품들을 base 좌표계에서 미리 합쳐 두고
22
+ * GeometryBank 에 넣는다. 인스턴스가 500개든 5,000개든 정점 버퍼는 묶음 수만큼만
23
+ * 있다. **material 도 마찬가지로 MaterialBank 가 공유한다.**
24
+ *
25
+ * **Mesh 객체는 인스턴스마다 생긴다.** three.js 에서 한 객체는 부모가 하나뿐이고 자기
26
+ * 행렬을 가지므로 같은 Mesh 를 여러 자리에 놓을 수 없다. 다만 Mesh 는 껍데기다 —
27
+ * geometry·material 참조와 행렬만 든다. 진짜로 객체까지 하나가 되는 길은
28
+ * `InstancedMesh` 이고, 그것은 인스턴스별 선택·컬링·재질을 다르게 다뤄야 해서 별개
29
+ * 결정이다.
30
+ */
31
+ /** base 좌표 → three 좌표. 모델 x→X, **모델 z(높이)→Y**, 모델 y→Z. */
32
+ export declare function memberGeometry(member: FigureBlueprintMember): THREE.BufferGeometry | null;
33
+ /**
34
+ * 한 묶음의 부품들을 하나로 합친다. **타입·묶음당 한 번만** 만들고 창고에 둔다 —
35
+ * 같은 (타입, 묶음)이면 몇 번을 불러도 **같은 객체**가 나온다. 공유가 실제로
36
+ * 일어나는지 시험이 확인할 수 있게 내보낸다.
37
+ *
38
+ * 합친 결과는 base 좌표계이고 base 상자의 중심이 원점이 되도록 옮긴다 — 다른
39
+ * 컴포넌트들이 `geometry.center()` 로 맞추는 기준과 같다.
40
+ */
41
+ export declare function mergedGeometryOf(figure: PreparedFigure, index: number): THREE.BufferGeometry | null;
42
+ export declare class FigureRealObject extends RealObject {
43
+ /** 부품 이름 → mesh. 애니메이션·바인딩이 부품을 찾는 자리다. */
44
+ private _meshByName;
45
+ get figure(): PreparedFigure | null;
46
+ /** 부품 이름으로 mesh 를 찾는다. 이름이 곧 바인딩·애니메이션이 붙는 자리다. */
47
+ meshOf(name: string): THREE.Mesh | undefined;
48
+ build(): void;
49
+ /**
50
+ * 인스턴스의 높이.
51
+ *
52
+ * 보드는 `left`·`top`·`width`·`height` 만 적는 것이 보통이고 `depth` 는 잘 적지
53
+ * 않는다. 그때 기본 높이(≈1)를 쓰면 `base.depth` 로 나뉘어 형상이 납작하게 눌린다.
54
+ *
55
+ * **저작한 비례를 지킨다** — 평면 두 축이 커진 만큼 높이도 커진다. 배치 크기가
56
+ * 템플릿의 비율로 처리된다는 것이 이 뜻이다. 두 축의 기하평균을 쓰므로 한 축만 늘여도
57
+ * 덜 왜곡된다. `state.depth` 를 적었으면 그것이 이긴다.
58
+ */
59
+ get effectiveDepth(): number;
60
+ /**
61
+ * 인스턴스 치수를 **배율로만** 준다 — geometry 는 건드리지 않으므로 인스턴스가
62
+ * 늘어도 정점 버퍼가 늘지 않는다.
63
+ */
64
+ updateDimension(): void;
65
+ /**
66
+ * Figure 는 부품이 여럿이라 **하나의 폐다각형이 아니다.** 2D 표현은 컴포넌트가
67
+ * 부품마다 그리므로(`FigureInstance.render`) 여기서 윤곽을 지어내지 않는다.
68
+ * 경계상자를 돌려주면 부르는 쪽이 그것을 실제 윤곽으로 오해한다.
69
+ */
70
+ topOutline(): TopOutline | null;
71
+ clear(): THREE.Object3D<THREE.Object3DEventMap>;
72
+ }
73
+ //# sourceMappingURL=figure-real-object.d.ts.map
@@ -0,0 +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,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CAyCzF;AA+CD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CA2CnG;AAkBD,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,2CAA2C;IAC3C,OAAO,CAAC,WAAW,CAAgC;IAEnD,IAAI,MAAM,IAAI,cAAc,GAAG,IAAI,CAElC;IAED,mDAAmD;IACnD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS;IAI5C,KAAK;IAwBL;;;;;;;;;OASG;IACH,IAAa,cAAc,IAAI,MAAM,CAepC;IAED;;;OAGG;IACH,eAAe,IAAI,IAAI;IAevB;;;;OAIG;IACM,UAAU,IAAI,UAAU,GAAG,IAAI;IAIxC,KAAK;CAIN"}