@hatiolab/things-scene 10.0.0-beta.2 → 10.0.0-beta.21
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 +2240 -0
- package/dist-types/components/audio.d.ts +2 -2
- package/dist-types/components/container-abstract.d.ts +4 -4
- package/dist-types/components/container.d.ts +3 -3
- package/dist-types/components/ellipse.d.ts +2 -2
- package/dist-types/components/html-overlay-container.d.ts +3 -3
- package/dist-types/components/html-overlay-element.d.ts +4 -4
- package/dist-types/components/image-view.d.ts +2 -2
- package/dist-types/components/info-window.d.ts +2 -2
- package/dist-types/components/line.d.ts +1 -1
- package/dist-types/components/local-ref.d.ts +2 -2
- package/dist-types/components/mixins/connectable.d.ts +2 -2
- package/dist-types/components/mixins/data-source.d.ts +2 -2
- package/dist-types/components/mixins/html-element.d.ts +2 -2
- package/dist-types/components/mixins/move-handle.d.ts +2 -2
- package/dist-types/components/mixins/rect-path.d.ts +2 -2
- package/dist-types/components/mixins/value-holder.d.ts +2 -2
- package/dist-types/components/node.d.ts +2 -2
- package/dist-types/components/popup.d.ts +2 -2
- package/dist-types/components/rect.d.ts +4 -4
- package/dist-types/components/ruler.d.ts +2 -2
- package/dist-types/components/text.d.ts +2 -2
- package/dist-types/decorator/decorator-registry.d.ts +4 -0
- package/dist-types/decorator/decorator-registry.d.ts.map +1 -1
- package/dist-types/layer/model-layer.d.ts +42 -7
- package/dist-types/layer/model-layer.d.ts.map +1 -1
- package/dist-types/layer/modeling-layer.d.ts.map +1 -1
- package/dist-types/things-scene/api/align.d.ts.map +1 -1
- package/dist-types/things-scene/api/distribute.d.ts.map +1 -1
- package/dist-types/things-scene/application-context.d.ts +3 -0
- package/dist-types/things-scene/application-context.d.ts.map +1 -1
- package/dist-types/things-scene/create.d.ts +2 -1
- package/dist-types/things-scene/create.d.ts.map +1 -1
- package/dist-types/things-scene/index.d.ts +1 -0
- package/dist-types/things-scene/index.d.ts.map +1 -1
- package/dist-types/things-scene/scene.d.ts +1 -1
- package/dist-types/things-scene/scene.d.ts.map +1 -1
- package/dist-types/threed/arrow-3d.d.ts +2 -1
- package/dist-types/threed/arrow-3d.d.ts.map +1 -1
- package/dist-types/threed/common.d.ts +5 -0
- package/dist-types/threed/common.d.ts.map +1 -1
- package/dist-types/threed/environments/factory-environment.d.ts +11 -0
- package/dist-types/threed/environments/factory-environment.d.ts.map +1 -0
- package/dist-types/threed/environments/home-environment.d.ts +11 -0
- package/dist-types/threed/environments/home-environment.d.ts.map +1 -0
- package/dist-types/threed/environments/index.d.ts +6 -0
- package/dist-types/threed/environments/index.d.ts.map +1 -0
- package/dist-types/threed/environments/office-environment.d.ts +11 -0
- package/dist-types/threed/environments/office-environment.d.ts.map +1 -0
- package/dist-types/threed/environments/studio-environment.d.ts +12 -0
- package/dist-types/threed/environments/studio-environment.d.ts.map +1 -0
- package/dist-types/threed/environments/warehouse-environment.d.ts +11 -0
- package/dist-types/threed/environments/warehouse-environment.d.ts.map +1 -0
- package/dist-types/threed/factories/banner.d.ts +3 -2
- package/dist-types/threed/factories/banner.d.ts.map +1 -1
- package/dist-types/threed/factories/camera.d.ts +3 -2
- package/dist-types/threed/factories/camera.d.ts.map +1 -1
- package/dist-types/threed/factories/cube.d.ts +3 -2
- package/dist-types/threed/factories/cube.d.ts.map +1 -1
- package/dist-types/threed/factories/cylinder.d.ts +1 -0
- package/dist-types/threed/factories/cylinder.d.ts.map +1 -1
- package/dist-types/threed/factories/gltf-object.d.ts +10 -4
- package/dist-types/threed/factories/gltf-object.d.ts.map +1 -1
- package/dist-types/threed/factories/light.d.ts +1 -0
- package/dist-types/threed/factories/light.d.ts.map +1 -1
- package/dist-types/threed/factories/sphere.d.ts +1 -0
- package/dist-types/threed/factories/sphere.d.ts.map +1 -1
- package/dist-types/threed/factories/sprite.d.ts +3 -2
- package/dist-types/threed/factories/sprite.d.ts.map +1 -1
- package/dist-types/threed/factories/wall.d.ts +3 -2
- package/dist-types/threed/factories/wall.d.ts.map +1 -1
- package/dist-types/threed/managers/box-selection-manager.d.ts +26 -0
- package/dist-types/threed/managers/box-selection-manager.d.ts.map +1 -0
- package/dist-types/threed/managers/camera-bookmark-manager.d.ts +127 -0
- package/dist-types/threed/managers/camera-bookmark-manager.d.ts.map +1 -0
- package/dist-types/threed/managers/camera-manager.d.ts +9 -3
- package/dist-types/threed/managers/camera-manager.d.ts.map +1 -1
- package/dist-types/threed/managers/controls-manager.d.ts +13 -4
- package/dist-types/threed/managers/controls-manager.d.ts.map +1 -1
- package/dist-types/threed/managers/gizmo-operation-manager.d.ts +5 -0
- package/dist-types/threed/managers/gizmo-operation-manager.d.ts.map +1 -1
- package/dist-types/threed/managers/index.d.ts +2 -0
- package/dist-types/threed/managers/index.d.ts.map +1 -1
- package/dist-types/threed/managers/interaction-manager.d.ts +10 -0
- package/dist-types/threed/managers/interaction-manager.d.ts.map +1 -1
- package/dist-types/threed/managers/renderer-manager.d.ts +6 -0
- package/dist-types/threed/managers/renderer-manager.d.ts.map +1 -1
- package/dist-types/threed/managers/scene-manager.d.ts +11 -0
- package/dist-types/threed/managers/scene-manager.d.ts.map +1 -1
- package/dist-types/threed/managers/types.d.ts +1 -1
- package/dist-types/threed/managers/types.d.ts.map +1 -1
- package/dist-types/threed/real-object-dom-element.d.ts.map +1 -1
- package/dist-types/threed/real-object-extrude.d.ts +6 -0
- package/dist-types/threed/real-object-extrude.d.ts.map +1 -1
- package/dist-types/threed/real-object-gltf.d.ts +38 -1
- package/dist-types/threed/real-object-gltf.d.ts.map +1 -1
- package/dist-types/threed/real-object-text.d.ts +2 -0
- package/dist-types/threed/real-object-text.d.ts.map +1 -1
- package/dist-types/threed/real-object.d.ts +12 -1
- package/dist-types/threed/real-object.d.ts.map +1 -1
- package/dist-types/threed/text-editor-3d.d.ts +11 -0
- package/dist-types/threed/text-editor-3d.d.ts.map +1 -0
- package/dist-types/threed/texture/text-texture.d.ts +15 -0
- package/dist-types/threed/texture/text-texture.d.ts.map +1 -1
- package/dist-types/threed/three-capability.d.ts +95 -4
- package/dist-types/threed/three-capability.d.ts.map +1 -1
- package/dist-types/threed/three-container.d.ts +5 -1
- package/dist-types/threed/three-container.d.ts.map +1 -1
- package/dist-types/threed/three-dimensional-container.d.ts +0 -1
- package/dist-types/threed/three-dimensional-container.d.ts.map +1 -1
- package/dist-types/types/index.d.ts +1 -0
- package/dist-types/types/index.d.ts.map +1 -1
- package/package.json +4 -13
- package/things-scene-min.js +12 -12
- package/things-scene-min.js.map +1 -1
- package/things-scene.mjs +8 -8
- package/things-scene.mjs.map +1 -1
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
export type EasingType = 'ease-in-out' | 'ease-in' | 'ease-out' | 'linear';
|
|
3
|
+
export interface SplineContext {
|
|
4
|
+
prevPos: THREE.Vector3;
|
|
5
|
+
nextPos: THREE.Vector3;
|
|
6
|
+
}
|
|
7
|
+
export interface CameraBookmark {
|
|
8
|
+
name?: string;
|
|
9
|
+
position: {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
z: number;
|
|
13
|
+
};
|
|
14
|
+
target: {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
z: number;
|
|
18
|
+
};
|
|
19
|
+
/** 이 슬롯에서 머무르는 시간 (ms, 기본 2000) */
|
|
20
|
+
holdDuration?: number;
|
|
21
|
+
/** 이 슬롯으로 이동하는 전환 시간 (ms, 기본 1200) */
|
|
22
|
+
transitionDuration?: number;
|
|
23
|
+
/** 전환 이징 함수 (기본 ease-in-out) */
|
|
24
|
+
easing?: EasingType;
|
|
25
|
+
/** 재생 목록에서 제외 */
|
|
26
|
+
excludeFromPlay?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare class CameraBookmarkManager {
|
|
29
|
+
private _slots;
|
|
30
|
+
private _animating;
|
|
31
|
+
private _animationId?;
|
|
32
|
+
private _animationProgress;
|
|
33
|
+
private _playStartOffset;
|
|
34
|
+
private _lastPlayProgress;
|
|
35
|
+
private _playIndex;
|
|
36
|
+
private _playing;
|
|
37
|
+
private _orbitRotating;
|
|
38
|
+
private _orbitPaused;
|
|
39
|
+
private _onInvalidate?;
|
|
40
|
+
private _onAnimationComplete?;
|
|
41
|
+
get isAnimating(): boolean;
|
|
42
|
+
get isPlaying(): boolean;
|
|
43
|
+
get isOrbitRotating(): boolean;
|
|
44
|
+
get isOrbitPaused(): boolean;
|
|
45
|
+
get playIndex(): number;
|
|
46
|
+
get lastPlayProgress(): number;
|
|
47
|
+
/**
|
|
48
|
+
* 전체 경로 진행률 0~1 (재생 중: 세그먼트 + 세그먼트 내 진행률)
|
|
49
|
+
*/
|
|
50
|
+
get playProgress(): number;
|
|
51
|
+
setCallbacks(onInvalidate: () => void, onAnimationComplete?: () => void): void;
|
|
52
|
+
/**
|
|
53
|
+
* 슬롯에 카메라 위치를 저장한다.
|
|
54
|
+
* bookmark에 name 프로퍼티가 없으면 기존 이름을 보존한다 (카메라 위치만 갱신).
|
|
55
|
+
* name 프로퍼티가 있으면 (undefined 포함) 그대로 사용한다 (리오더 등).
|
|
56
|
+
*/
|
|
57
|
+
saveSlot(index: number, bookmark: CameraBookmark): void;
|
|
58
|
+
renameSlot(index: number, name: string): void;
|
|
59
|
+
clearSlot(index: number): void;
|
|
60
|
+
getSlot(index: number): CameraBookmark | undefined;
|
|
61
|
+
exportSlots(): (CameraBookmark | null)[];
|
|
62
|
+
importSlots(data: (CameraBookmark | null | undefined)[]): void;
|
|
63
|
+
resetAll(): void;
|
|
64
|
+
getPlayableSlots(): number[];
|
|
65
|
+
swapSlots(a: number, b: number): void;
|
|
66
|
+
moveSlot(from: number, to: number): void;
|
|
67
|
+
/**
|
|
68
|
+
* 카메라를 슬롯 위치로 애니메이션 이동한다.
|
|
69
|
+
* splineContext가 제공되면 Catmull-Rom 곡선으로 보간, 없으면 직선+slerp.
|
|
70
|
+
*/
|
|
71
|
+
animateToSlot(index: number, camera: THREE.PerspectiveCamera, controls: {
|
|
72
|
+
target: THREE.Vector3;
|
|
73
|
+
restoreTarget(t: THREE.Vector3): void;
|
|
74
|
+
update(): boolean;
|
|
75
|
+
}, duration?: number, splineContext?: SplineContext): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* evaluatePath를 따라 fromT→targetT 구간을 애니메이션한다 (부분 세그먼트 resume용).
|
|
78
|
+
*/
|
|
79
|
+
private _animatePathSegment;
|
|
80
|
+
/**
|
|
81
|
+
* 공통 rAF 애니메이션 루프. onFrame에 eased progress를 전달한다.
|
|
82
|
+
*/
|
|
83
|
+
private _runAnimation;
|
|
84
|
+
/**
|
|
85
|
+
* progress 값으로부터 playIndex와 playStartOffset을 계산한다.
|
|
86
|
+
*/
|
|
87
|
+
private _initFromProgress;
|
|
88
|
+
/**
|
|
89
|
+
* playOrder 기준 순회 플레이. excludeFromPlay 슬롯은 건너뛴다.
|
|
90
|
+
* 3개 이상 슬롯이면 Catmull-Rom 스플라인으로 곡선 경로를 따른다.
|
|
91
|
+
*/
|
|
92
|
+
startPlay(camera: THREE.PerspectiveCamera, controls: {
|
|
93
|
+
target: THREE.Vector3;
|
|
94
|
+
restoreTarget(t: THREE.Vector3): void;
|
|
95
|
+
update(): boolean;
|
|
96
|
+
}, defaultHold?: number, defaultTransition?: number, startFromProgress?: number, fromBeginning?: boolean): void;
|
|
97
|
+
/**
|
|
98
|
+
* 현재 재생 상태에 맞는 SplineContext를 생성한다.
|
|
99
|
+
*/
|
|
100
|
+
private _buildSplineContext;
|
|
101
|
+
/**
|
|
102
|
+
* 슬롯 인덱스에 해당하는 경로상 진행률을 _lastPlayProgress에 설정한다.
|
|
103
|
+
*/
|
|
104
|
+
setProgressForSlot(slotIndex: number): void;
|
|
105
|
+
stopPlay(): void;
|
|
106
|
+
/** stopPlay + lastPlayProgress 초기화 (모드 전환 시 사용) */
|
|
107
|
+
resetPlay(): void;
|
|
108
|
+
toggleOrbitRotation(controls: {
|
|
109
|
+
isAutoRotating(): boolean;
|
|
110
|
+
setAutoRotate(enabled: boolean): void;
|
|
111
|
+
}): void;
|
|
112
|
+
/** 모드 전환(P키 등)에서 사용 — orbit 완전 초기화 */
|
|
113
|
+
stopOrbitRotation(controls: {
|
|
114
|
+
setAutoRotate(enabled: boolean): void;
|
|
115
|
+
}): void;
|
|
116
|
+
/**
|
|
117
|
+
* 전체 재생 경로의 t∈[0,1] 지점에서의 카메라 position/target을 계산한다.
|
|
118
|
+
* 3개 이상 슬롯이면 Catmull-Rom 스플라인(루프), 2개면 직선 보간.
|
|
119
|
+
*/
|
|
120
|
+
evaluatePath(t: number): {
|
|
121
|
+
position: THREE.Vector3;
|
|
122
|
+
target: THREE.Vector3;
|
|
123
|
+
} | null;
|
|
124
|
+
stopAnimation(): void;
|
|
125
|
+
destroy(): void;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=camera-bookmark-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"camera-bookmark-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/camera-bookmark-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,6 @@ export declare class CameraManager {
|
|
|
9
9
|
get camera(): THREE.PerspectiveCamera | undefined;
|
|
10
10
|
get activeCamera(): THREE.Camera;
|
|
11
11
|
get activeView(): CameraViewName;
|
|
12
|
-
get zoom(): number | undefined;
|
|
13
12
|
get cameraZPos(): number;
|
|
14
13
|
setup(width: number, height: number, config: CameraConfig): THREE.PerspectiveCamera;
|
|
15
14
|
addToScene(scene: THREE.Scene): void;
|
|
@@ -19,12 +18,19 @@ export declare class CameraManager {
|
|
|
19
18
|
* 직교 투영 카메라로 특정 뷰를 설정한다.
|
|
20
19
|
* Top/Front/Back/Right/Left — 원근법 없는 정사영 뷰.
|
|
21
20
|
*/
|
|
22
|
-
setOrthoView(view: CameraViewName, width: number, height: number): THREE.OrthographicCamera;
|
|
21
|
+
setOrthoView(view: CameraViewName, width: number, height: number, viewportWidth?: number, viewportHeight?: number): THREE.OrthographicCamera;
|
|
23
22
|
/**
|
|
24
23
|
* Perspective 카메라로 복귀한다.
|
|
25
24
|
*/
|
|
26
25
|
restorePerspective(): THREE.PerspectiveCamera;
|
|
27
|
-
|
|
26
|
+
/**
|
|
27
|
+
* 직교 카메라 frustum을 업데이트한다.
|
|
28
|
+
* @param sceneWidth 씬 모델 너비
|
|
29
|
+
* @param sceneHeight 씬 모델 높이
|
|
30
|
+
* @param viewportWidth 실제 뷰포트 너비 (옵션)
|
|
31
|
+
* @param viewportHeight 실제 뷰포트 높이 (옵션)
|
|
32
|
+
*/
|
|
33
|
+
updateOrthoFrustum(sceneWidth: number, sceneHeight: number, viewportWidth?: number, viewportHeight?: number): void;
|
|
28
34
|
destroy(): void;
|
|
29
35
|
}
|
|
30
36
|
//# sourceMappingURL=camera-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/camera-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAExF,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAC,CAAyB;IAC9C,OAAO,CAAC,YAAY,CAAC,CAA0B;IAC/C,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,WAAW,CAAY;IAE/B,IAAI,MAAM,wCAET;IAED,IAAI,YAAY,IAAI,KAAK,CAAC,MAAM,CAK/B;IAED,IAAI,UAAU,IAAI,cAAc,CAE/B;IAED,IAAI,
|
|
1
|
+
{"version":3,"file":"camera-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/camera-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAExF,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAC,CAAyB;IAC9C,OAAO,CAAC,YAAY,CAAC,CAA0B;IAC/C,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,WAAW,CAAY;IAE/B,IAAI,MAAM,wCAET;IAED,IAAI,YAAY,IAAI,KAAK,CAAC,MAAM,CAK/B;IAED,IAAI,UAAU,IAAI,cAAc,CAE/B;IAED,IAAI,UAAU,WAEb;IAED,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;IAqBzD,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK;IAK7B,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAgB1C,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC;IAU9C;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,kBAAkB;IAyC5I;;OAEG;IACH,kBAAkB,IAAI,KAAK,CAAC,iBAAiB;IAK7C;;;;;;OAMG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;IAyB3G,OAAO;CAKR"}
|
|
@@ -7,6 +7,7 @@ export declare class ControlsManager {
|
|
|
7
7
|
private _state;
|
|
8
8
|
private _autoRotate;
|
|
9
9
|
private _autoRotateSpeed;
|
|
10
|
+
private _onUserInteraction?;
|
|
10
11
|
private _dampingFactor;
|
|
11
12
|
private _rotateSpeed;
|
|
12
13
|
private _panSpeed;
|
|
@@ -38,6 +39,7 @@ export declare class ControlsManager {
|
|
|
38
39
|
private get _isOrthoLocked();
|
|
39
40
|
setup(camera: THREE.Camera, host: Component): void;
|
|
40
41
|
setEnabled(enabled: boolean): void;
|
|
42
|
+
setOnUserInteraction(cb: (() => void) | undefined): void;
|
|
41
43
|
onDragStart(e: DragEvent): void;
|
|
42
44
|
onDragMove(e: DragEvent): void;
|
|
43
45
|
onDragEnd(_e: DragEvent): void;
|
|
@@ -47,15 +49,22 @@ export declare class ControlsManager {
|
|
|
47
49
|
onKeyDown(e: KeyboardEvent): void;
|
|
48
50
|
update(): boolean;
|
|
49
51
|
reset(): void;
|
|
52
|
+
/**
|
|
53
|
+
* 현재 카메라 위치/타겟을 리셋 기준점으로 저장한다.
|
|
54
|
+
* Pin Camera View 등으로 기본 위치를 변경한 후 호출.
|
|
55
|
+
*/
|
|
56
|
+
pinResetPosition(): void;
|
|
50
57
|
setCamera(camera: THREE.Camera): void;
|
|
58
|
+
isAutoRotating(): boolean;
|
|
51
59
|
setAutoRotate(enabled: boolean): void;
|
|
52
60
|
markCameraChanged(): void;
|
|
53
61
|
/**
|
|
54
|
-
* Perspective
|
|
55
|
-
*
|
|
56
|
-
*
|
|
62
|
+
* Perspective dolly zoom: 카메라를 target 방향으로 이동 (실제 거리 변화).
|
|
63
|
+
* projection zoom이 아닌 물리적 접근/후퇴로 자연스러운 3D 줌 제공.
|
|
64
|
+
* 커서 위치 기준 target 이동으로 커서 아래 월드 좌표가 고정된다.
|
|
65
|
+
* factor < 1: 가까이 (zoom in), factor > 1: 멀어짐 (zoom out)
|
|
57
66
|
*/
|
|
58
|
-
|
|
67
|
+
dollyAtCursor(factor: number, ndcX: number, ndcY: number): void;
|
|
59
68
|
/**
|
|
60
69
|
* 직교 뷰 줌: 마우스 커서 위치를 기준으로 확대/축소.
|
|
61
70
|
* 커서 아래의 월드 좌표가 줌 후에도 동일한 화면 위치에 유지된다.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controls-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/controls-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAC1D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAY9B,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,KAAK,CAAC,CAAW;IAEzB,OAAO,CAAC,QAAQ,CAAO;IACvB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"controls-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/controls-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAC1D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAY9B,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,KAAK,CAAC,CAAW;IAEzB,OAAO,CAAC,QAAQ,CAAO;IACvB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,kBAAkB,CAAC,CAAY;IACvC,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,UAAU,CAAI;IAGtB,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,OAAO,CAAsB;IAGrC,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,UAAU,CAAsB;IAGxC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,SAAS,CAAsB;IAGvC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,eAAe,CAAyB;IAGhD,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,cAAc,CAAsB;IAE5C,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAE1B;IAED,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO;IAKnC,+BAA+B;IAC/B,OAAO,KAAK,cAAc,GAEzB;IAED,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS;IAqB3C,UAAU,CAAC,OAAO,EAAE,OAAO;IAI3B,oBAAoB,CAAC,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS;IAMjD,WAAW,CAAC,CAAC,EAAE,SAAS;IAkBxB,UAAU,CAAC,CAAC,EAAE,SAAS;IAevB,SAAS,CAAC,EAAE,EAAE,SAAS;IAOvB,YAAY,CAAC,CAAC,EAAE,UAAU;IA4B1B,WAAW,CAAC,CAAC,EAAE,UAAU;IAyBzB,UAAU,CAAC,EAAE,EAAE,UAAU;IAOzB,SAAS,CAAC,CAAC,EAAE,aAAa;IAgB1B,MAAM,IAAI,OAAO;IAiEjB,KAAK;IAUL;;;OAGG;IACH,gBAAgB;IAMhB,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM;IAmB9B,cAAc,IAAI,OAAO;IAIzB,aAAa,CAAC,OAAO,EAAE,OAAO;IAK9B,iBAAiB;IAIjB;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IA2BxD;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAqB5D,OAAO;IAOP,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,cAAc;IActB;;;;OAIG;IACH,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,IAAI;CAyCb"}
|
|
@@ -47,6 +47,11 @@ export declare class GizmoOperationManager {
|
|
|
47
47
|
* 기즈모 드래그 결과를 컴포넌트 속성에 역변환하여 반영한다.
|
|
48
48
|
*/
|
|
49
49
|
private _syncFromGizmo;
|
|
50
|
+
/**
|
|
51
|
+
* 오브젝트 바닥면이 Y=0(바닥)에 가까우면 스냅한다.
|
|
52
|
+
* Object3D.position.y는 오브젝트 중심이므로, 바닥면 = position.y - effectiveDepth/2.
|
|
53
|
+
*/
|
|
54
|
+
private _applyGroundSnap;
|
|
50
55
|
/**
|
|
51
56
|
* scale 기즈모 드래그를 dimension 변경으로 역산한다.
|
|
52
57
|
* 축 매핑: scale.x → width, scale.y → depth, scale.z → height
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gizmo-operation-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/gizmo-operation-manager.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAA;IAClB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,UAAU,IAAI,IAAI,CAAA;CACnB;AAcD;;;;;GAKG;AACH,qBAAa,qBAAqB;IAEhC,OAAO,CAAC,iBAAiB,CAAC,CAAkB;IAC5C,OAAO,CAAC,aAAa,CAAC,CAAqC;IAE3D,OAAO,CAAC,sBAAsB,CAAC,CAAQ;IAGvC,OAAO,CAAC,kBAAkB,CAAC,CAAoD;IAC/E,OAAO,CAAC,gBAAgB,CAAQ;IAGhC,OAAO,CAAC,mBAAmB,CAAC,CAAgC;IAC5D,OAAO,CAAC,qBAAqB,CAAC,CAAa;IAC3C,OAAO,CAAC,4BAA4B,CAAC,CAA8B;IACnE,OAAO,CAAC,6BAA6B,CAAC,CAAqC;IAE3E;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIpC;;;;OAIG;IACH,cAAc,CACZ,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE;QAAE,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,EACvD,OAAO,EAAE,MAAM,kBAAkB,GAAG,SAAS,EAC7C,SAAS,CAAC,EAAE;QACV,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;KAChD,GACA,IAAI;IA6BP,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,wBAAwB;IA2ChC,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,UAAU;IAuClB;;OAEG;IACH,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"gizmo-operation-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/gizmo-operation-manager.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAA;IAClB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,UAAU,IAAI,IAAI,CAAA;CACnB;AAcD;;;;;GAKG;AACH,qBAAa,qBAAqB;IAEhC,OAAO,CAAC,iBAAiB,CAAC,CAAkB;IAC5C,OAAO,CAAC,aAAa,CAAC,CAAqC;IAE3D,OAAO,CAAC,sBAAsB,CAAC,CAAQ;IAGvC,OAAO,CAAC,kBAAkB,CAAC,CAAoD;IAC/E,OAAO,CAAC,gBAAgB,CAAQ;IAGhC,OAAO,CAAC,mBAAmB,CAAC,CAAgC;IAC5D,OAAO,CAAC,qBAAqB,CAAC,CAAa;IAC3C,OAAO,CAAC,4BAA4B,CAAC,CAA8B;IACnE,OAAO,CAAC,6BAA6B,CAAC,CAAqC;IAE3E;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIpC;;;;OAIG;IACH,cAAc,CACZ,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE;QAAE,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,EACvD,OAAO,EAAE,MAAM,kBAAkB,GAAG,SAAS,EAC7C,SAAS,CAAC,EAAE;QACV,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;KAChD,GACA,IAAI;IA6BP,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,wBAAwB;IA2ChC,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,UAAU;IAuClB;;OAEG;IACH,OAAO,CAAC,cAAc;IAyEtB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;CAsBhC"}
|
|
@@ -8,5 +8,7 @@ export { GizmoManager, type GizmoMode } from './gizmo-manager.js';
|
|
|
8
8
|
export { GizmoOperationManager, type GizmoOperationHost } from './gizmo-operation-manager.js';
|
|
9
9
|
export { InteractionManager, type InteractionDelegate } from './interaction-manager.js';
|
|
10
10
|
export { PlacementManager, type PlacementDelegate } from './placement-manager.js';
|
|
11
|
+
export { CameraBookmarkManager, type CameraBookmark } from './camera-bookmark-manager.js';
|
|
12
|
+
export { BoxSelectionManager } from './box-selection-manager.js';
|
|
11
13
|
export type { CameraConfig, RendererConfig, LightingConfig } from './types.js';
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAC7F,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACvF,OAAO,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACjF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAC7F,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACvF,OAAO,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACjF,OAAO,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -32,6 +32,16 @@ export interface InteractionDelegate {
|
|
|
32
32
|
handleTouchEnd(e: TouchEvent): void;
|
|
33
33
|
/** 키 입력. 처리했으면 true, 상위로 전파해야 하면 false */
|
|
34
34
|
handleKeyDown(e: KeyboardEvent): boolean;
|
|
35
|
+
/** 키 해제. 처리했으면 true */
|
|
36
|
+
handleKeyUp?(e: KeyboardEvent): boolean;
|
|
37
|
+
/** Space 키 패닝 모드 여부 */
|
|
38
|
+
isSpacePanning?(): boolean;
|
|
39
|
+
/** 박스 셀렉션 시작 */
|
|
40
|
+
handleBoxSelectionStart?(x: number, y: number): void;
|
|
41
|
+
/** 박스 셀렉션 업데이트 */
|
|
42
|
+
handleBoxSelectionUpdate?(x: number, y: number): void;
|
|
43
|
+
/** 박스 셀렉션 종료 (additive: Shift 유지 여부 — 기존 선택에 추가) */
|
|
44
|
+
handleBoxSelectionEnd?(additive: boolean): void;
|
|
35
45
|
}
|
|
36
46
|
/**
|
|
37
47
|
* DOM 이벤트 핸들링과 드래그 상태 관리를 담당하는 매니저.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interaction-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/interaction-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,2BAA2B;IAC3B,eAAe,IAAI,OAAO,CAAA;IAC1B,6BAA6B;IAC7B,oBAAoB,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACzC,qCAAqC;IACrC,oBAAoB,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACzC,mDAAmD;IACnD,iBAAiB,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAAA;IACzC,0CAA0C;IAC1C,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7C,8BAA8B;IAC9B,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;IACxE,YAAY;IACZ,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IAChC,eAAe;IACf,cAAc,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACnC,YAAY;IACZ,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACrC,YAAY;IACZ,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACpC,YAAY;IACZ,cAAc,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACnC,0CAA0C;IAC1C,aAAa,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"interaction-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/interaction-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,12 @@ export declare class RendererManager {
|
|
|
25
25
|
*/
|
|
26
26
|
setOutlineObjects(objects: THREE.Object3D[]): void;
|
|
27
27
|
resize(width: number, height: number): void;
|
|
28
|
+
private _scene?;
|
|
29
|
+
private _camera?;
|
|
30
|
+
/**
|
|
31
|
+
* 포스트프로세싱 없이 직접 렌더링할 때 사용할 scene/camera를 설정한다.
|
|
32
|
+
*/
|
|
33
|
+
setDirectRenderTargets(scene: THREE.Scene, camera: THREE.Camera): void;
|
|
28
34
|
render(): void;
|
|
29
35
|
renderCSS3D(camera: THREE.Camera): void;
|
|
30
36
|
getSize(): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/renderer-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAA;AAKpF,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAA;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAC,CAAqB;IACvC,OAAO,CAAC,cAAc,CAAC,CAAe;IACtC,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,SAAS,CAAC,CAAgB;IAClC,OAAO,CAAC,YAAY,CAAC,CAAa;IAClC,OAAO,CAAC,eAAe,CAAQ;IAE/B,IAAI,QAAQ,oCAEX;IAED,IAAI,aAAa,kBAKhB;IAED,IAAI,UAAU,gBAKb;IAED,IAAI,QAAQ,+BAEX;IAED,IAAI,cAAc,YAEjB;IAED,IAAI,UAAU,kCAEb;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"renderer-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/renderer-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAA;AAKpF,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAA;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAC,CAAqB;IACvC,OAAO,CAAC,cAAc,CAAC,CAAe;IACtC,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,SAAS,CAAC,CAAgB;IAClC,OAAO,CAAC,YAAY,CAAC,CAAa;IAClC,OAAO,CAAC,eAAe,CAAQ;IAE/B,IAAI,QAAQ,oCAEX;IAED,IAAI,aAAa,kBAKhB;IAED,IAAI,UAAU,gBAKb;IAED,IAAI,QAAQ,+BAEX;IAED,IAAI,cAAc,YAEjB;IAED,IAAI,UAAU,kCAEb;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO;IA8C1E,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM;IAmBlD,OAAO,CAAC,mBAAmB;IAI3B,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,KAAK,CAAC,QAAQ;IA4CnH,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM;IAa3C;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE;IAM3C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOpC,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAc;IAE9B;;OAEG;IACH,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM;IAK/D,MAAM;IAmBN,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM;IAIhC,OAAO,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAM5C,OAAO;IAQP,iBAAiB;CAMlB"}
|
|
@@ -5,11 +5,22 @@ export declare class SceneManager {
|
|
|
5
5
|
private _mixer?;
|
|
6
6
|
private _timer?;
|
|
7
7
|
private _envTexture?;
|
|
8
|
+
private _renderer?;
|
|
8
9
|
get scene(): THREE.Scene | undefined;
|
|
9
10
|
get mixer(): THREE.AnimationMixer | undefined;
|
|
10
11
|
setup(): THREE.Scene;
|
|
11
12
|
setupMixer(): THREE.AnimationMixer;
|
|
12
13
|
setupEnvironment(renderer: THREE.WebGLRenderer): void;
|
|
14
|
+
/**
|
|
15
|
+
* 환경맵 프리셋을 적용한다.
|
|
16
|
+
*/
|
|
17
|
+
private _applyEnvironment;
|
|
18
|
+
/**
|
|
19
|
+
* 3D 씬 배경(sky)을 설정한다.
|
|
20
|
+
* @param sky - 프리셋 이름('studio'|'warehouse'|'factory'|'office') | 'color' | '' (none)
|
|
21
|
+
* @param skyColor - sky='color'일 때 사용할 색상
|
|
22
|
+
*/
|
|
23
|
+
setSky(sky?: string, skyColor?: string): void;
|
|
13
24
|
addFloor(component: Component): void;
|
|
14
25
|
/**
|
|
15
26
|
* 기존 floor를 제거하고 새로 생성하여 교체한다.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/scene-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"scene-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/scene-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAmB1D,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,SAAS,CAAC,CAAqB;IAEvC,IAAI,KAAK,4BAER;IAED,IAAI,KAAK,qCAER;IAED,KAAK;IAKL,UAAU;IAOV,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa;IAK9C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAetC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAO7B;;;OAGG;IACH,WAAW,CAAC,SAAS,EAAE,SAAS;IAYhC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ;IAI/B,eAAe;IAOf,OAAO;CAyBR"}
|
|
@@ -2,7 +2,6 @@ export interface CameraConfig {
|
|
|
2
2
|
fov: number;
|
|
3
3
|
near: number;
|
|
4
4
|
far: number;
|
|
5
|
-
zoom: number;
|
|
6
5
|
cameraX?: number;
|
|
7
6
|
cameraY?: number;
|
|
8
7
|
cameraZ?: number;
|
|
@@ -11,6 +10,7 @@ export interface RendererConfig {
|
|
|
11
10
|
precision: string;
|
|
12
11
|
antialias: boolean;
|
|
13
12
|
exposure: number;
|
|
13
|
+
postprocessing?: boolean;
|
|
14
14
|
}
|
|
15
15
|
export interface LightingConfig {
|
|
16
16
|
hemisphere: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IACxE,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,cAAc,EAAE,OAAO,CAAA;QACvB,UAAU,CAAC,EAAE,OAAO,CAAA;QACpB,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;QACb,UAAU,EAAE,OAAO,CAAA;QACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QAClC,UAAU,EAAE,MAAM,CAAA;QAClB,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"real-object-dom-element.d.ts","sourceRoot":"","sources":["../../src/threed/real-object-dom-element.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,qBAAa,oBAAqB,SAAQ,UAAU,CAAC,WAAW,CAAC;IAC/D,sCAAsC;IACtC,SAAS,KAAK,cAAc,WAE3B;IAED,SAAS,CAAC,mBAAmB;IAI7B;;;OAGG;IACH,IAAI,QAAQ;;;;MAQX;IAED;;OAEG;IACH,gBAAgB;
|
|
1
|
+
{"version":3,"file":"real-object-dom-element.d.ts","sourceRoot":"","sources":["../../src/threed/real-object-dom-element.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,qBAAa,oBAAqB,SAAQ,UAAU,CAAC,WAAW,CAAC;IAC/D,sCAAsC;IACtC,SAAS,KAAK,cAAc,WAE3B;IAED,SAAS,CAAC,mBAAmB;IAI7B;;;OAGG;IACH,IAAI,QAAQ;;;;MAQX;IAED;;OAEG;IACH,gBAAgB;IAiChB,KAAK;IAeL,eAAe;IAWf,WAAW;CAUZ"}
|
|
@@ -27,6 +27,12 @@ export declare class RealObjectExtrude extends RealObject {
|
|
|
27
27
|
updateAlpha(): void;
|
|
28
28
|
updateStrokeStyle(): void;
|
|
29
29
|
updateFillStyle(): void;
|
|
30
|
+
updateText(): void;
|
|
31
|
+
/**
|
|
32
|
+
* cap 면(앞/뒤)에 fillStyle + 텍스트를 합성한 텍스처를 적용한다.
|
|
33
|
+
* 텍스트가 없으면 fillStyle만 적용한다.
|
|
34
|
+
*/
|
|
35
|
+
private _applyCapTexture;
|
|
30
36
|
updateDimension(): void;
|
|
31
37
|
}
|
|
32
38
|
//# sourceMappingURL=real-object-extrude.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"real-object-extrude.d.ts","sourceRoot":"","sources":["../../src/threed/real-object-extrude.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"real-object-extrude.d.ts","sourceRoot":"","sources":["../../src/threed/real-object-extrude.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAOhE;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,iBAAiB,CAAC,EAAE,gBAAgB,CAAA;IACpC,OAAO,CAAC,KAAK,CAAC,CAAY;IAE1B,KAAK;IAKL,IAAI,KAAK,IAAI,GAAG,CAEf;IAED,IAAI,gBAAgB,qBAInB;IAED,KAAK;IAoCL,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc;IAoBxD,eAAe,IAAI,KAAK,CAAC,QAAQ,EAAE;IAuBnC,aAAa;IAoCb,OAAO,CAAC,YAAY;IAMpB,gBAAgB;IAqBhB,WAAW;IAUX,iBAAiB;IAQjB,eAAe;IAIf,UAAU;IAIV;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA4DxB,eAAe;CAKhB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
import type { Properties } from '../interfaces/types.js';
|
|
3
3
|
import { RealObject } from './real-object.js';
|
|
4
|
+
import { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
|
|
4
5
|
export interface GLTFNodeState {
|
|
5
6
|
color?: string;
|
|
6
7
|
visible?: boolean;
|
|
@@ -16,17 +17,53 @@ export interface GLTFAnimationState {
|
|
|
16
17
|
loop?: 'once' | 'repeat' | 'pingpong';
|
|
17
18
|
}
|
|
18
19
|
export declare class RealObjectGLTF extends RealObject {
|
|
20
|
+
private static _topViewCache;
|
|
21
|
+
private static _gltfCache;
|
|
19
22
|
private static _sharedLoader;
|
|
20
|
-
|
|
23
|
+
/**
|
|
24
|
+
* DRACO/KTX2/Meshopt/SpecGloss가 모두 설정된 공유 GLTFLoader를 반환한다.
|
|
25
|
+
* renderer를 전달하면 KTX2 detectSupport를 갱신한다.
|
|
26
|
+
* 2D 스냅샷 등 renderer 없이도 호출 가능하다.
|
|
27
|
+
*/
|
|
28
|
+
static getSharedLoader(renderer?: THREE.WebGLRenderer): GLTFLoader;
|
|
29
|
+
/**
|
|
30
|
+
* URL로 GLTF를 로드한다. 동일 URL은 캐시하여 1회만 파싱한다.
|
|
31
|
+
* 로드 실패 시 캐시에서 제거하여 재시도 가능.
|
|
32
|
+
*/
|
|
33
|
+
static loadGLTF(url: string, renderer?: THREE.WebGLRenderer): Promise<GLTF>;
|
|
21
34
|
private pivot?;
|
|
22
35
|
private objectSize?;
|
|
23
36
|
private _nodeIndex;
|
|
24
37
|
private _originals;
|
|
25
38
|
private _animationActions;
|
|
26
39
|
private _fillStyleOriginals;
|
|
40
|
+
private _clonedMaterials;
|
|
41
|
+
/**
|
|
42
|
+
* mesh의 material이 아직 복제되지 않았으면 복제하여 독립 인스턴스로 만든다.
|
|
43
|
+
* GLTF 캐시로 인해 동일 소스의 오브젝트들이 material을 공유하므로,
|
|
44
|
+
* material을 변경하기 전에 반드시 호출해야 한다.
|
|
45
|
+
*/
|
|
46
|
+
private _ensureOwnMaterial;
|
|
27
47
|
private _loadGen;
|
|
28
48
|
build(): void;
|
|
29
49
|
private gltfLoaded;
|
|
50
|
+
private _renderTopViewSnapshot;
|
|
51
|
+
/**
|
|
52
|
+
* 오프스크린 렌더러로 Object3D의 탑뷰(Y축 위→아래) 스냅샷을 생성한다.
|
|
53
|
+
* GLTFObject에서 2D 모드 독립 로딩 시에도 사용한다.
|
|
54
|
+
*/
|
|
55
|
+
static renderTopView(object: THREE.Object3D): HTMLCanvasElement;
|
|
56
|
+
/** 캐시에서 스냅샷을 조회한다 */
|
|
57
|
+
static getTopViewCache(source: string): HTMLCanvasElement | undefined;
|
|
58
|
+
/** 캐시에 스냅샷을 저장한다 */
|
|
59
|
+
static setTopViewCache(source: string, canvas: HTMLCanvasElement): void;
|
|
60
|
+
/**
|
|
61
|
+
* GLTF 파싱 캐시와 탑뷰 스냅샷 캐시를 모두 비운다.
|
|
62
|
+
* Scene(보드) 전환 시 호출하여 메모리를 회수한다.
|
|
63
|
+
* clone()은 geometry/texture를 공유 참조하므로,
|
|
64
|
+
* 모든 컴포넌트가 dispose된 후에만 호출해야 한다.
|
|
65
|
+
*/
|
|
66
|
+
static flushCache(): void;
|
|
30
67
|
private _buildNodeIndex;
|
|
31
68
|
getNode(name: string): THREE.Object3D | undefined;
|
|
32
69
|
get nodeNames(): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"real-object-gltf.d.ts","sourceRoot":"","sources":["../../src/threed/real-object-gltf.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"real-object-gltf.d.ts","sourceRoot":"","sources":["../../src/threed/real-object-gltf.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAG7C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAA;AAO3E,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAA;CACtC;AAQD,qBAAa,cAAe,SAAQ,UAAU;IAE5C,OAAO,CAAC,MAAM,CAAC,aAAa,CAAuC;IAGnE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAmC;IAG5D,OAAO,CAAC,MAAM,CAAC,aAAa,CAA0B;IAEtD;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,GAAG,UAAU;IA2BlE;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAe3E,OAAO,CAAC,KAAK,CAAC,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAC,CAAqC;IAGxD,OAAO,CAAC,UAAU,CAAoC;IAGtD,OAAO,CAAC,UAAU,CASd;IAGJ,OAAO,CAAC,iBAAiB,CAA2C;IAGpE,OAAO,CAAC,mBAAmB,CAKvB;IAIJ,OAAO,CAAC,gBAAgB,CAAgC;IAExD;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,QAAQ,CAAI;IAEpB,KAAK;IA8BL,OAAO,CAAC,UAAU;IAmElB,OAAO,CAAC,sBAAsB;IAO9B;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,GAAG,iBAAiB;IA8E/D,qBAAqB;IACrB,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIrE,oBAAoB;IACpB,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB;IAIhE;;;;;OAKG;IACH,MAAM,CAAC,UAAU;IAOjB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS;IAIjD,IAAI,SAAS,IAAI,MAAM,EAAE,CAExB;IAID,OAAO,CAAC,gBAAgB;IA0CxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAoBlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,qBAAqB;IA8B7B,IAAI,cAAc,IAAI,MAAM,EAAE,CAE7B;IAED,OAAO,CAAC,qBAAqB;IAU7B,eAAe;IA2Cf,OAAO,CAAC,wBAAwB;IA2BhC,KAAK;IAiBL,eAAe;IAUf,YAAY;IAIZ,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU;CA0C/C"}
|
|
@@ -6,6 +6,8 @@ export declare class RealObjectText extends RealObjectMesh {
|
|
|
6
6
|
/** 평면 오브젝트: 바닥(Y=0.5) 위로 올려 z-fighting 방지 */
|
|
7
7
|
protected get syncZPosOffset(): number;
|
|
8
8
|
buildGeometry(): void;
|
|
9
|
+
updateStrokeStyle(): void;
|
|
10
|
+
updateFillStyle(): void;
|
|
9
11
|
updateDimension(): void;
|
|
10
12
|
updateText(): void;
|
|
11
13
|
updateAlpha(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"real-object-text.d.ts","sourceRoot":"","sources":["../../src/threed/real-object-text.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAGtD;;GAEG;AACH,qBAAa,cAAe,SAAQ,cAAc;IAChD,6CAA6C;IAC7C,SAAS,KAAK,cAAc,WAE3B;IAED,aAAa;
|
|
1
|
+
{"version":3,"file":"real-object-text.d.ts","sourceRoot":"","sources":["../../src/threed/real-object-text.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAGtD;;GAEG;AACH,qBAAa,cAAe,SAAQ,cAAc;IAChD,6CAA6C;IAC7C,SAAS,KAAK,cAAc,WAE3B;IAED,aAAa;IAKb,iBAAiB;IAEjB,eAAe;IAKf,eAAe;IAiBf,UAAU;IAyDV,WAAW;CASZ"}
|
|
@@ -10,13 +10,19 @@ export declare abstract class RealObject<T extends THREE.Object3D = THREE.Object
|
|
|
10
10
|
protected _suppressOnchange: boolean;
|
|
11
11
|
object3d: T;
|
|
12
12
|
private _onchangeWrapper;
|
|
13
|
-
static buildFillStyleTexture(component: Component): THREE.
|
|
13
|
+
static buildFillStyleTexture(component: Component): THREE.Texture<unknown> | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* 패턴 fillStyle을 2D 옵션(fitPattern, offset, align, repeat, color)에 맞춰
|
|
16
|
+
* 캔버스 텍스처로 생성한다. 이미지 로드 완료 후 component.invalidate()로 갱신.
|
|
17
|
+
*/
|
|
18
|
+
private static buildPatternTexture;
|
|
14
19
|
private static buildGradientTexture;
|
|
15
20
|
constructor(component: Component);
|
|
16
21
|
update(): void;
|
|
17
22
|
protected getObject3dInstance(): T;
|
|
18
23
|
build(): void;
|
|
19
24
|
updateMaterial3d(): void;
|
|
25
|
+
private _applyShadow;
|
|
20
26
|
get component(): Component;
|
|
21
27
|
get threeContainer(): ThreeDimensionalContainer | undefined;
|
|
22
28
|
get focused(): boolean;
|
|
@@ -84,6 +90,11 @@ export declare abstract class RealObject<T extends THREE.Object3D = THREE.Object
|
|
|
84
90
|
* 볼륨체(extrude): depth/2 (기하 중심), 평면(plane/text): depth (윗면 위치).
|
|
85
91
|
*/
|
|
86
92
|
protected get syncZPosOffset(): number;
|
|
93
|
+
/**
|
|
94
|
+
* object3d 중심에서 텍스트 표면(상단)까지의 로컬 Y 오프셋.
|
|
95
|
+
* 볼륨체(extrude): depth/2, 평면(plane/text): 0.
|
|
96
|
+
*/
|
|
97
|
+
get textSurfaceYOffset(): number;
|
|
87
98
|
/**
|
|
88
99
|
* 기즈모 드래그 결과를 컴포넌트 상태에 역변환하여 반영한다 (translate/rotate 모드 전용).
|
|
89
100
|
* Object3D → Component 방향의 동기화. scale은 dimension으로 처리하므로 여기서는 제외.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"real-object.d.ts","sourceRoot":"","sources":["../../src/threed/real-object.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,wBAAwB,CAAA;AAM/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAO5E,8BAAsB,UAAU,CAAC,CAAC,SAAS,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAE,YAAW,WAAW;IAChG,SAAS,CAAC,UAAU,EAAE,SAAS,CAAA;IAC/B,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAQ;IACnC,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,iBAAiB,UAAQ;IAE5B,QAAQ,EAAE,CAAC,CAAA;IAKlB,OAAO,CAAC,gBAAgB,CAGvB;IAED,MAAM,CAAC,qBAAqB,CAAC,SAAS,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"real-object.d.ts","sourceRoot":"","sources":["../../src/threed/real-object.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,wBAAwB,CAAA;AAM/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAO5E,8BAAsB,UAAU,CAAC,CAAC,SAAS,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAE,YAAW,WAAW;IAChG,SAAS,CAAC,UAAU,EAAE,SAAS,CAAA;IAC/B,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAQ;IACnC,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,iBAAiB,UAAQ;IAE5B,QAAQ,EAAE,CAAC,CAAA;IAKlB,OAAO,CAAC,gBAAgB,CAGvB;IAED,MAAM,CAAC,qBAAqB,CAAC,SAAS,EAAE,SAAS;IAcjD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA2FlC,OAAO,CAAC,MAAM,CAAC,oBAAoB;gBA8DvB,SAAS,EAAE,SAAS;IAOhC,MAAM;IAYN,SAAS,CAAC,mBAAmB,IAAI,CAAC;IAIlC,KAAK;IAOL,gBAAgB;IAMhB,OAAO,CAAC,YAAY;IAWpB,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,cAAc,IAAI,yBAAyB,GAAG,SAAS,CAS1D;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,EAK3B;IAED,OAAO;IAMP,KAAK;IASL;;OAEG;IACH,eAAe;IAUf,IAAI,QAAQ;;;;MAOX;IAED,IAAI,QAAQ;;;;MAQX;IAED,IAAI,KAAK;;;;MAUR;IAED,IAAI,EAAE,WAML;IAED,IAAI,EAAE,WAML;IAED,IAAI,EAAE,QAKL;IAED,IAAI,MAAM;;;;MAWT;IAED,IAAI,SAAS;;;;MAOZ;IAED;;;OAGG;IACH,IAAI,cAAc,IAAI,MAAM,CAE3B;IAGD,cAAc;IAKd,YAAY;IAKZ,WAAW;IAKX;;;;OAIG;IACH,kBAAkB;IAuClB,eAAe;IAKf,WAAW;IAoBX,YAAY;IAIZ,iBAAiB;IACjB,eAAe;IACf,UAAU;IAEV;;;OAGG;IACH;;;OAGG;IACH,SAAS,KAAK,cAAc,IAAI,MAAM,CAErC;IAED;;;OAGG;IACH,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED;;;OAGG;IACH,gBAAgB;IA6BhB;;;;OAIG;IACH,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMrD,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU;CAyC/C"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type Component from '../components/component.js';
|
|
2
|
+
import type { RendererManager } from './managers/renderer-manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* 3D 텍스트 편집을 시작한다.
|
|
5
|
+
*
|
|
6
|
+
* - textarea를 CSS3DObject로 래핑하여 컴포넌트의 3D 위치에 배치
|
|
7
|
+
* - 편집 중 RealObjectText의 mesh를 숨겨 겹침 방지
|
|
8
|
+
* - 편집 완료(blur) 시 CSS3DObject 제거, mesh 복원, 텍스트 업데이트
|
|
9
|
+
*/
|
|
10
|
+
export declare function startTextEdit3D(component: Component, rendererManager: RendererManager, renderCallback: () => void): void;
|
|
11
|
+
//# sourceMappingURL=text-editor-3d.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-editor-3d.d.ts","sourceRoot":"","sources":["../../src/threed/text-editor-3d.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAErE;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,MAAM,IAAI,GACzB,IAAI,CAkMN"}
|
|
@@ -1,7 +1,22 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
export declare function fontStyle(bold: boolean, italic: boolean, fontSize: number, fontFamily: string): string;
|
|
3
|
+
export declare function nextPowerOf2(n: number): number;
|
|
3
4
|
export declare function drawTextTexture(canvas: HTMLCanvasElement, text: string, textStyle: any): void;
|
|
4
5
|
export declare function textTexture(text: string, width: number, height: number, textStyle: any): THREE.CanvasTexture<HTMLCanvasElement>;
|
|
6
|
+
/**
|
|
7
|
+
* 패턴(이미지) 배경 + 텍스트를 합성한 텍스처를 비동기로 생성한다.
|
|
8
|
+
* 2D fill.ts와 동일한 패턴 옵션을 지원한다:
|
|
9
|
+
* fitPattern, width/height, offsetX/offsetY, align, noRepeat, color
|
|
10
|
+
*
|
|
11
|
+
* @param imageUrl resolved 이미지 URL
|
|
12
|
+
* @param text 텍스트 (빈 문자열이면 텍스트 생략)
|
|
13
|
+
* @param compWidth 컴포넌트 너비
|
|
14
|
+
* @param compHeight 컴포넌트 높이
|
|
15
|
+
* @param textStyle 텍스트 스타일 (fontColor, fontSize 등)
|
|
16
|
+
* @param fillStyle 패턴 fillStyle 객체 (fitPattern, offsetX 등)
|
|
17
|
+
* @param onReady 텍스처 완성 콜백
|
|
18
|
+
*/
|
|
19
|
+
export declare function patternTextTexture(imageUrl: string, text: string, compWidth: number, compHeight: number, textStyle: any, fillStyle: any, onReady: (texture: THREE.CanvasTexture) => void): void;
|
|
5
20
|
export declare function textBounds(text: string, textStyle: any): {
|
|
6
21
|
width: number;
|
|
7
22
|
height: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-texture.d.ts","sourceRoot":"","sources":["../../../src/threed/texture/text-texture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAUtG;
|
|
1
|
+
{"version":3,"file":"text-texture.d.ts","sourceRoot":"","sources":["../../../src/threed/texture/text-texture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAUtG;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,UAerC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,QA+CtF;AAgDD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,0CAwCtF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,GAAG,EACd,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,GAC9C,IAAI,CAoGN;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA0B1F"}
|