@openheart/tavio-renderer 2.3.30-with-wasm → 2.5.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 (40) hide show
  1. package/build/esm/assets/{tavio-JUxSmuMi.js → tavio-2ixVQ2OF.js} +149 -149
  2. package/build/esm/assets/{workerHelpers-yS8SNwfU.js → workerHelpers-DfEuvGGn.js} +1 -1
  3. package/build/esm/index.js +8609 -6542
  4. package/build/esm/types/camera/cameraPath.d.ts +37 -3
  5. package/build/esm/types/editor/selector/boxSelector.d.ts +4 -3
  6. package/build/esm/types/editor/selector/cameraSelector.d.ts +57 -0
  7. package/build/esm/types/editor/selector/selector.d.ts +25 -1
  8. package/build/esm/types/editor/selector/sphereSelector.d.ts +1 -0
  9. package/build/esm/types/module.d.ts +5 -4
  10. package/build/esm/types/viewer/canvas.d.ts +159 -1560
  11. package/build/esm/types/viewer/constants.d.ts +99 -0
  12. package/build/esm/types/viewer/driver/coreDriver.d.ts +1474 -0
  13. package/build/esm/types/viewer/driver/iCoreDriver.d.ts +224 -0
  14. package/build/esm/types/viewer/driver/offscreenDriver.d.ts +231 -0
  15. package/build/esm/types/viewer/driver/rpcBridge.d.ts +39 -0
  16. package/build/esm/types/viewer/driver/workerElementAdapter.d.ts +66 -0
  17. package/build/esm/types/viewer/materialGenerator.d.ts +24 -27
  18. package/build/esm/types/viewer/renderView.d.ts +4 -3
  19. package/build/esm/types/viewer/shaderRegistry.d.ts +22 -0
  20. package/build/esm/types/viewer/tavioMesh/localTransform.d.ts +65 -0
  21. package/build/esm/types/viewer/tavioMesh/minMaxRange.d.ts +47 -0
  22. package/build/esm/types/viewer/tavioMesh/parsers/imageParser.d.ts +14 -0
  23. package/build/esm/types/{utility/plyDecoder.d.ts → viewer/tavioMesh/parsers/plyParser.d.ts} +4 -15
  24. package/build/esm/types/viewer/tavioMesh/parsers/splatParser.d.ts +12 -0
  25. package/build/esm/types/viewer/tavioMesh/selection.d.ts +39 -0
  26. package/build/esm/types/viewer/{tavioMesh.d.ts → tavioMesh/tavioMesh.d.ts} +73 -62
  27. package/build/esm/types/viewer/types.d.ts +376 -0
  28. package/build/esm/types/wasm-bindings/wasm-worker-client.d.ts +10 -0
  29. package/build/esm/types/worker/renderingWorker.d.ts +8 -0
  30. package/build/esm/types/worker/tavioWorker.d.ts +1 -1
  31. package/build/esm/wasm/pkg/no-thread/tavio.d.ts +13 -13
  32. package/build/esm/wasm/pkg/no-thread/tavio.js +123 -123
  33. package/build/esm/wasm/pkg/no-thread/tavio_bg.wasm +0 -0
  34. package/build/esm/wasm/pkg/no-thread/tavio_bg.wasm.d.ts +13 -13
  35. package/build/esm/wasm/pkg/thread/tavio.d.ts +17 -17
  36. package/build/esm/wasm/pkg/thread/tavio.js +151 -151
  37. package/build/esm/wasm/pkg/thread/tavio_bg.wasm +0 -0
  38. package/build/esm/wasm/pkg/thread/tavio_bg.wasm.d.ts +17 -17
  39. package/package.json +1 -1
  40. package/build/esm/types/animation/animationController.d.ts +0 -146
@@ -0,0 +1,224 @@
1
+ import { default as EventEmitter } from 'eventemitter3';
2
+ import { iViewerOption, iViewerMaterialOption, iLoadingOption, iHeaderInfo, iTransform, iVectorLike, iSelectorInfo, iPickingInfo, iCameraPathOption, iCameraParameter, tSelectionMode, tMaskSource, tControlsType, tUniformValue, tCustomDefines, tCustomUniforms } from '../types';
3
+ import { iCollisionTarget } from '../../worker/tavioWorker';
4
+ import { iSphereSelectorOption } from '../../editor/selector/sphereSelector';
5
+ import { iBoxSelectorOption } from '../../editor/selector/boxSelector';
6
+ import { iCameraSelectorOption } from '../../editor/selector/cameraSelector';
7
+ import { MeshStandardMaterialParameters } from 'three';
8
+ import { iLatitudeLongitude } from '../../camera/flightControls';
9
+ import { WorkerElementAdapter } from './workerElementAdapter';
10
+ import { CameraPath } from '../../camera/cameraPath';
11
+ export interface iCoreDriver extends EventEmitter {
12
+ canvas: HTMLCanvasElement | OffscreenCanvas;
13
+ viewerOption: iViewerOption;
14
+ getElementAdapter(): HTMLCanvasElement | OffscreenCanvas | WorkerElementAdapter;
15
+ init(canvas: HTMLCanvasElement | OffscreenCanvas, materialOption?: iViewerMaterialOption): void;
16
+ start(): void;
17
+ pause(): void;
18
+ resume(): void;
19
+ resize(width?: number, height?: number, start?: boolean): void;
20
+ dispose(): void;
21
+ addAmbientLight(color: number, intensity: number): void;
22
+ addSpotLight(position: iVectorLike, target: iVectorLike, color: number, intensity: number, distance: number, angle: number, penumbra: number, decay: number, castShadow?: boolean, isDebug?: boolean): void;
23
+ addWhiteCube(position?: iVectorLike, scale?: iVectorLike, receiveShadow?: boolean, materialOption?: MeshStandardMaterialParameters): void;
24
+ setAmbientLightIntensity(intensity: number): void;
25
+ setSpotLightPosition(position: iVectorLike): void;
26
+ setSpotLightTargetPosition(target: iVectorLike): void;
27
+ setSpotLightIntensity(intensity: number): void;
28
+ setSpotLightDistance(distance: number): void;
29
+ setSpotLightAngle(angle: number): void;
30
+ setSpotLightPenumbra(penumbra: number): void;
31
+ setSpotLightDecay(decay: number): void;
32
+ renderShadow(): void;
33
+ loadTavio(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
34
+ loadTavioWasm(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
35
+ loadPly(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
36
+ loadSplat(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
37
+ loadImage(name: string, source: string | Blob | ArrayBuffer | ImageBitmap, option?: iLoadingOption): Promise<void>;
38
+ loadCanvas(name: string, canvas: HTMLCanvasElement | OffscreenCanvas | ImageBitmap, option?: iLoadingOption): Promise<void>;
39
+ concatTavio(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
40
+ concatPly(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
41
+ concatSplat(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
42
+ concatImage(name: string, source: string | Blob | ArrayBuffer | ImageBitmap, option?: iLoadingOption): Promise<void>;
43
+ concatCanvas(name: string, canvas: HTMLCanvasElement | OffscreenCanvas | ImageBitmap, option?: iLoadingOption): Promise<void>;
44
+ saveSplatWasm(name: string, fileName?: string): Promise<any>;
45
+ savePlyWasm(name: string, fileName?: string): Promise<any>;
46
+ saveSpzWasm(name: string, fileName?: string): Promise<any>;
47
+ saveTavioWasm(name: string, fileName?: string, options?: any): Promise<any>;
48
+ exportTavioWasm(name: string, options?: any): Promise<any>;
49
+ addTavioMesh(name: string): void;
50
+ removeTavioMesh(name: string, renderViewName?: string | Symbol): void;
51
+ removeTavioMeshAllRenderView(name: string): void;
52
+ disposeTavioMesh(name: string): void;
53
+ setVisibilityTavioMesh(name: string, visibility: boolean): void;
54
+ setVisibilityPoints(name: string, visibility: boolean): void;
55
+ setBackgroundOpacity(opacity: number): void;
56
+ setBackgroundByTavioMesh(name: string): void;
57
+ getFirstMeshName(): Promise<string | null> | string | null;
58
+ createRenderView(name: string | Symbol): void;
59
+ setRenderView(name?: string | Symbol | null): void;
60
+ getCurrentRenderViewName(): Promise<string | null> | string | null;
61
+ getRenderViewCount(): Promise<number> | number;
62
+ setRenderViewSize(renderViewName?: string | Symbol, x?: number, y?: number, width?: number, height?: number, start?: boolean): void;
63
+ getWorldPositionByRenderView(x: number, y: number, isDebug?: boolean): Promise<iPickingInfo | null> | iPickingInfo | null;
64
+ setUniforms(uniforms: Record<string, tUniformValue>): void;
65
+ setPointUniforms(uniforms: Record<string, tUniformValue>): void;
66
+ setCustomDefines(defines: tCustomDefines): void;
67
+ setCustomUniforms(uniforms: tCustomUniforms): void;
68
+ setGaussianScale(scale: number): void;
69
+ setOpacityAdditive(opacity: number): void;
70
+ setOpacityMultiplier(multiplier: number): void;
71
+ setOpacityPoints(opacity: number): void;
72
+ setSphericalHarmonicsIntensity(intensity: number): void;
73
+ setUsingSphericalHarmonics(isUsing: boolean): void;
74
+ setColorBlur(blur: number): void;
75
+ setColorSharpness(sharpness: number): void;
76
+ setColorTemperature(temperature: number): void;
77
+ setColorTint(tint: number): void;
78
+ setColorContrast(contrast: number): void;
79
+ setHSVColor(hsv: iVectorLike): void;
80
+ setColorRGB(rgb: iVectorLike): void;
81
+ setClippingEnabled(enabled: boolean): void;
82
+ setClippingSphere(position: iVectorLike, scale: iVectorLike): void;
83
+ setOutsideClipPointSize(size: number): void;
84
+ setOutsideClipOpacity(opacity: number): void;
85
+ setEffectMinimumScale(value: number): void;
86
+ setEffectDistanceBase(value: number): void;
87
+ setEffectDistanceRange(value: number): void;
88
+ setWorldOrigin(x: number, y: number, z: number): void;
89
+ setEffectDistancePoints(value: number): void;
90
+ setEffectDistanceNearPoints(value: number): void;
91
+ setEffectSonar(value: number): void;
92
+ setEffectSonarRange(value: number): void;
93
+ startBloomPoints(duration?: number): void;
94
+ startDissolveToGaussian(duration?: number, backgroundFadeInDelay?: number, backgroundFadeInDuration?: number): void;
95
+ startSonarWave(duration?: number): void;
96
+ animatePath(name?: string, duration?: number): void;
97
+ startFadeInBackground(duration?: number): void;
98
+ startFadeOutBackground(duration?: number): void;
99
+ setOrbitCursorAutoDisplay(enabled: boolean): void;
100
+ isOrbitCursorAutoDisplayEnabled(): Promise<boolean> | boolean;
101
+ setOrbitCursorDisplay(enabled: boolean): void;
102
+ isOrbitCursorDisplay(): Promise<boolean> | boolean;
103
+ setOrbitCursorScale(scale: number): void;
104
+ setAxisVisible(visible: boolean): void;
105
+ isAxisVisible(): Promise<boolean> | boolean;
106
+ applyLocalTransformToSelected(name: string, translation: iVectorLike, rotation: iVectorLike, scale: iVectorLike): void;
107
+ resetLocalTransformOfSelected(name: string): void;
108
+ resetAllLocalTransforms(name: string): void;
109
+ setLocalTransformGizmoEnabled(enabled: boolean): void;
110
+ setLocalTransformGizmoMode(mode: "translate" | "rotate" | "scale"): void;
111
+ setDropShadow(enabled: boolean): void;
112
+ setModelTransform(name: string, translation: iVectorLike, rotation: iVectorLike, scale: number): void;
113
+ getModelTransform(name: string): Promise<iTransform | null> | iTransform | null;
114
+ setTransform(name: string, index: number, translation: iVectorLike, rotation: iVectorLike, scale: number): void;
115
+ getTransform(name: string, index: number): Promise<iTransform | null> | iTransform | null;
116
+ setBillboard(name: string, index: number, flag: boolean): void;
117
+ setCameraParameter(position?: number[] | iVectorLike, target?: number[] | iVectorLike, fov?: number): void;
118
+ getCameraParameter(): Promise<iCameraParameter> | iCameraParameter;
119
+ setCameraColliderEnabled(enabled: boolean): void;
120
+ setCameraColliderSelector(selectorNames?: string[]): void;
121
+ getCameraColliderEnabled(): Promise<boolean> | boolean;
122
+ setInteractiveMode(interactive: boolean): void;
123
+ getInteractiveMode(): Promise<boolean> | boolean;
124
+ setControlsType(controlsType: string): void;
125
+ getControlsType(): Promise<tControlsType> | tControlsType;
126
+ setControlsAttenuation(attenuation: number): void;
127
+ selectCameraPath(name: string): void;
128
+ updateCameraPath(time?: number): void;
129
+ createCameraPath(position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean, times?: number[] | null): CameraPath | void;
130
+ /** times: 各制御点に対応する時刻(0.0 ~ 1.0)。省略時は等間隔 */
131
+ addCameraPath(name: string, position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean, times?: number[] | null): void;
132
+ removeCameraPath(name: string): void;
133
+ /** 名前を指定してカメラパスのデバッグ可視化(補間曲線と制御点)の表示/非表示を切り替える */
134
+ setCameraPathDebugVisible(name: string, visible: boolean): void;
135
+ getPathNames(): Promise<string[]> | string[];
136
+ getActiveCameraPathName(): Promise<string | null> | string | null;
137
+ getCameraPathByTime(name?: string, time?: number): Promise<{
138
+ position: iVectorLike;
139
+ target: iVectorLike;
140
+ } | null> | {
141
+ position: iVectorLike;
142
+ target: iVectorLike;
143
+ } | null;
144
+ getCameraPathTime(): Promise<number> | number;
145
+ setCameraPathOption(option: iCameraPathOption): void;
146
+ setCameraPathCollisionRadius(radius: number): void;
147
+ setCameraPathInteraction(x: number, y: number): void;
148
+ setOrbitPointerDown(isDown: boolean): void;
149
+ setOrbitRelativeRotateLeft(value: number): void;
150
+ setOrbitRelativeRotateUp(value: number): void;
151
+ setOrbitRelativeTranslateLeft(value: number): void;
152
+ setOrbitRelativeTranslateUp(value: number): void;
153
+ setOrbitRelativeDollyOut(value: number): void;
154
+ getOrbitDistance(): Promise<number> | number;
155
+ setOrbitDistance(distance: number): void;
156
+ setOrbitRotation(pitch: number, yaw: number, isForce?: boolean): void;
157
+ setOrbitRelativeRotation(pitch: number, yaw: number): void;
158
+ setOrbitEnableZoom(enable: boolean): void;
159
+ setOrbitEnablePan(enable: boolean): void;
160
+ setOrbitEnableLimit(enable: boolean): void;
161
+ setOrbitEnableZoomLimit(enable: boolean): void;
162
+ setOrbitOverflow(value: number): void;
163
+ setOrbitUpLimit(value: number): void;
164
+ setOrbitDownLimit(value: number): void;
165
+ setOrbitLeftLimit(value: number): void;
166
+ setOrbitRightLimit(value: number): void;
167
+ setOrbitZoomInLimit(value: number): void;
168
+ setOrbitZoomOutLimit(value: number): void;
169
+ setTransferPosition(position: iVectorLike): void;
170
+ setTransferRelativePosition(position: iVectorLike, isForce?: boolean): void;
171
+ moveTransferByDirection(offset: iVectorLike, scale: number, isForce?: boolean): void;
172
+ moveTransferByHorizontalDirection(x: number, y: number, scale: number, isForce?: boolean): void;
173
+ moveTransferToTop(scale: number, isForce?: boolean): void;
174
+ moveTransferToBottom(scale: number, isForce?: boolean): void;
175
+ setTransferFov(fov: number): void;
176
+ getFlightParameter(): Promise<iLatitudeLongitude | null> | iLatitudeLongitude | null;
177
+ setFlightLongitude(longitude: number): void;
178
+ setFlightLatitude(latitude: number): void;
179
+ setFlightRelativeLatitude(latitude: number, isForce?: boolean): void;
180
+ setFlightRelativeLongitude(longitude: number, isForce?: boolean): void;
181
+ selectSplatByScreenArea(minX: number, minY: number, maxX: number, maxY: number, mode?: tSelectionMode, maskCanvas?: tMaskSource | {
182
+ width: number;
183
+ height: number;
184
+ data: ArrayBuffer;
185
+ }): void;
186
+ setFrameRateLimit(fps: number): void;
187
+ setDevicePixelRatio(value: number): void;
188
+ getDevicePixelRatio(): number | null;
189
+ getHeaderInfo(name: string): Promise<iHeaderInfo | null> | iHeaderInfo | null;
190
+ setCollisionReversed(reversed: boolean): void;
191
+ deleteSelectedGaussian(): void;
192
+ undoDeletedGaussian(): void;
193
+ resetDeletedGaussian(): void;
194
+ resetCollision(): void;
195
+ setCollision(collision: iCollisionTarget | iCollisionTarget[], mode?: tSelectionMode): void;
196
+ checkCollisionBySelector(name: string, mode?: tSelectionMode): void;
197
+ checkCollisionBySelectors(names: string[], mode?: tSelectionMode): void;
198
+ checkCollisionByAllSelectors(mode?: tSelectionMode): void;
199
+ getAllSelectorInfo(): Promise<iSelectorInfo[]> | iSelectorInfo[];
200
+ setSelectorVisible(name: string, visible: boolean): void;
201
+ setSelectorModeTranslate(name: string): void;
202
+ setSelectorModeScale(name: string): void;
203
+ setSelectorModeRotate(name: string): void;
204
+ setSelectorPosition(name: string, position: iVectorLike): void;
205
+ setSelectorRotation(name: string, rotation: iVectorLike): void;
206
+ /** 指定したセレクターを、targetの方向へ向ける(現在位置からの相対方向) */
207
+ setSelectorLookAt(name: string, target: iVectorLike): void;
208
+ /** 指定したセレクターの操作用ギズモだけの表示・操作可否を設定する(本体の表示はそのまま) */
209
+ setSelectorGizmoVisible(name: string, visible: boolean): void;
210
+ /** 指定したセレクター本体の色を設定する */
211
+ setSelectorColor(name: string, color: number): void;
212
+ /** 2点を結ぶ編集用のガイド線を追加・更新する */
213
+ setGuideLine(name: string, from: iVectorLike, to: iVectorLike, color?: number): void;
214
+ /** 編集用のガイド線を削除する */
215
+ removeGuideLine(name: string): void;
216
+ /** 画面上の位置(正規化デバイス座標)にある、表示中のセレクターの名前を返す(無ければnull) */
217
+ pickSelector(ndcX: number, ndcY: number): Promise<string | null> | string | null;
218
+ setSelectorScale(name: string, scale: iVectorLike): void;
219
+ deleteSelector(name: string): void;
220
+ addSphereSelector(name: string, option?: iSphereSelectorOption): void;
221
+ addBoxSelector(name: string, option?: iBoxSelectorOption): void;
222
+ /** カメラを模した四角錐アイコンのセレクターを追加する(カメラのposition編集用ポイントハンドル) */
223
+ addCameraSelector(name: string, option?: iCameraSelectorOption): void;
224
+ }
@@ -0,0 +1,231 @@
1
+ import { default as EventEmitter } from 'eventemitter3';
2
+ import { iCoreDriver } from './iCoreDriver';
3
+ import { iViewerOption, iViewerMaterialOption, iLoadingOption, iHeaderInfo, iTransform, iVectorLike, iSelectorInfo, iPickingInfo, iCameraPathOption, iCameraParameter, tSelectionMode, tMaskSource, tControlsType, tUniformValue, tCustomDefines, tCustomUniforms } from '../types';
4
+ import { iCollisionTarget } from '../../worker/tavioWorker';
5
+ import { iLatitudeLongitude } from '../../camera/flightControls';
6
+ import { iSphereSelectorOption } from '../../editor/selector/sphereSelector';
7
+ import { iBoxSelectorOption } from '../../editor/selector/boxSelector';
8
+ import { iCameraSelectorOption } from '../../editor/selector/cameraSelector';
9
+ import { MeshStandardMaterialParameters } from 'three';
10
+ import { WorkerElementAdapter } from './workerElementAdapter';
11
+ /**
12
+ * # OffscreenDriver (Main-Thread RPC Proxy)
13
+ *
14
+ * ## 役割と背景
15
+ * メインスレッド側に位置し、`iCoreDriver` インターフェースを 100% 透過的に実装する RPC プロキシ。
16
+ * アプリケーション(demo/main.ts 等)からの公開 API 呼び出しを受け取ると、
17
+ * `postRpc` を通じて Worker スレッド上の `renderingWorker.ts`(CoreDriver)へ処理を委譲し、
18
+ * Worker 側から発生した描画・更新イベントをメインスレッドのリスナーへバブリング(中継)します。
19
+ */
20
+ export declare class OffscreenDriver extends EventEmitter implements iCoreDriver {
21
+ canvas: HTMLCanvasElement | OffscreenCanvas;
22
+ viewerOption: iViewerOption;
23
+ getElementAdapter(): HTMLCanvasElement | OffscreenCanvas | WorkerElementAdapter;
24
+ private worker;
25
+ private reqIdCounter;
26
+ private rpcResolvers;
27
+ private isInitialized;
28
+ constructor(viewerOption?: iViewerOption);
29
+ init(canvas: HTMLCanvasElement | OffscreenCanvas, materialOption?: iViewerMaterialOption): void;
30
+ private bindDomEvents;
31
+ private handleWorkerMessage;
32
+ postCommand(method: string, args?: any[], transferables?: Transferable[]): void;
33
+ private postRpc;
34
+ start(): void;
35
+ pause(): void;
36
+ resume(): void;
37
+ resize(width?: number, height?: number, start?: boolean): void;
38
+ dispose(): void;
39
+ setUniforms(uniforms: Record<string, tUniformValue>): void;
40
+ setPointUniforms(uniforms: Record<string, tUniformValue>): void;
41
+ setColorTemperature(temperature: number): void;
42
+ setColorTint(tint: number): void;
43
+ setColorContrast(contrast: number): void;
44
+ setHSVColor(hsv: iVectorLike): void;
45
+ setColorRGB(rgb: iVectorLike): void;
46
+ setClippingEnabled(enabled: boolean): void;
47
+ setClippingSphere(position: iVectorLike, scale: iVectorLike): void;
48
+ setOutsideClipPointSize(size: number): void;
49
+ setOutsideClipOpacity(opacity: number): void;
50
+ setEffectMinimumScale(value: number): void;
51
+ setEffectDistanceBase(value: number): void;
52
+ setEffectDistanceRange(value: number): void;
53
+ setWorldOrigin(x: number, y: number, z: number): void;
54
+ setEffectDistancePoints(value: number): void;
55
+ setEffectDistanceNearPoints(value: number): void;
56
+ setEffectSonar(value: number): void;
57
+ setEffectSonarRange(value: number): void;
58
+ startBloomPoints(duration?: number): void;
59
+ startDissolveToGaussian(duration?: number, backgroundFadeInDelay?: number, backgroundFadeInDuration?: number): void;
60
+ startSonarWave(duration?: number): void;
61
+ animatePath(name?: string, duration?: number): void;
62
+ startFadeInBackground(duration?: number): void;
63
+ startFadeOutBackground(duration?: number): void;
64
+ applyLocalTransformToSelected(name: string, translation: iVectorLike, rotation: iVectorLike, scale: iVectorLike): void;
65
+ resetLocalTransformOfSelected(name: string): void;
66
+ resetAllLocalTransforms(name: string): void;
67
+ setLocalTransformGizmoEnabled(enabled: boolean): void;
68
+ setLocalTransformGizmoMode(mode: "translate" | "rotate" | "scale"): void;
69
+ setOrbitCursorAutoDisplay(enabled: boolean): void;
70
+ isOrbitCursorAutoDisplayEnabled(): Promise<boolean> | boolean;
71
+ setOrbitCursorDisplay(enabled: boolean): void;
72
+ isOrbitCursorDisplay(): Promise<boolean> | boolean;
73
+ setOrbitCursorScale(scale: number): void;
74
+ setAxisVisible(visible: boolean): void;
75
+ isAxisVisible(): Promise<boolean> | boolean;
76
+ private resolveSource;
77
+ renderShadow(): void;
78
+ loadTavio(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
79
+ loadTavioWasm(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
80
+ loadPly(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
81
+ loadSplat(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
82
+ loadImage(name: string, source: string | Blob | ArrayBuffer | ImageBitmap, option?: iLoadingOption): Promise<void>;
83
+ loadCanvas(name: string, canvas: HTMLCanvasElement | OffscreenCanvas | ImageBitmap, option?: iLoadingOption): Promise<void>;
84
+ concatTavio(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
85
+ concatPly(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
86
+ concatSplat(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
87
+ concatImage(name: string, source: string | Blob | ArrayBuffer | ImageBitmap, option?: iLoadingOption): Promise<void>;
88
+ concatCanvas(name: string, canvas: HTMLCanvasElement | OffscreenCanvas | ImageBitmap, option?: iLoadingOption): Promise<void>;
89
+ disposeTavioMesh(name: string): void;
90
+ setVisibilityTavioMesh(name: string, visibility: boolean): void;
91
+ setVisibilityPoints(name: string, visibility: boolean): void;
92
+ setBackgroundOpacity(opacity: number): void;
93
+ setBackgroundByTavioMesh(name: string): void;
94
+ setModelTransform(name: string, translation: iVectorLike, rotation: iVectorLike, scale: number): void;
95
+ getModelTransform(name: string): Promise<iTransform | null>;
96
+ setTransform(name: string, index: number, translation: iVectorLike, rotation: iVectorLike, scale: number): void;
97
+ getTransform(name: string, index: number): Promise<iTransform | null>;
98
+ setBillboard(name: string, index: number, flag: boolean): void;
99
+ setCameraParameter(position?: number[] | iVectorLike, target?: number[] | iVectorLike, fov?: number): void;
100
+ setControlsType(controlsType: string): void;
101
+ getControlsType(): Promise<tControlsType>;
102
+ selectCameraPath(name: string): void;
103
+ updateCameraPath(time?: number): void;
104
+ setOrbitPointerDown(isDown: boolean): void;
105
+ setOrbitRelativeRotateLeft(value: number): void;
106
+ setOrbitRelativeRotateUp(value: number): void;
107
+ setOrbitRelativeTranslateLeft(value: number): void;
108
+ setOrbitRelativeTranslateUp(value: number): void;
109
+ setOrbitRelativeDollyOut(value: number): void;
110
+ getOrbitDistance(): Promise<number>;
111
+ setOrbitDistance(distance: number): void;
112
+ setOrbitRotation(pitch: number, yaw: number, isForce?: boolean): void;
113
+ setOrbitRelativeRotation(pitch: number, yaw: number): void;
114
+ setOrbitEnableZoom(enable: boolean): void;
115
+ setOrbitEnablePan(enable: boolean): void;
116
+ setOrbitEnableLimit(enable: boolean): void;
117
+ setOrbitEnableZoomLimit(enable: boolean): void;
118
+ addAmbientLight(color: number, intensity: number): void;
119
+ setAmbientLightIntensity(intensity: number): void;
120
+ setSpotLightPosition(position: iVectorLike): void;
121
+ setSpotLightTargetPosition(target: iVectorLike): void;
122
+ setSpotLightIntensity(intensity: number): void;
123
+ setSpotLightDistance(distance: number): void;
124
+ setSpotLightAngle(angle: number): void;
125
+ setSpotLightPenumbra(penumbra: number): void;
126
+ setSpotLightDecay(decay: number): void;
127
+ addSpotLight(position: iVectorLike, target: iVectorLike, color: number, intensity: number, distance: number, angle: number, penumbra: number, decay: number, castShadow?: boolean, isDebug?: boolean): void;
128
+ addWhiteCube(position?: iVectorLike, scale?: iVectorLike, receiveShadow?: boolean, materialOption?: MeshStandardMaterialParameters): void;
129
+ saveSplatWasm(name: string, fileName?: string): Promise<any>;
130
+ savePlyWasm(name: string, fileName?: string): Promise<any>;
131
+ saveSpzWasm(name: string, fileName?: string): Promise<any>;
132
+ saveTavioWasm(name: string, fileName?: string, options?: any): Promise<any>;
133
+ exportTavioWasm(name: string, options?: any): Promise<any>;
134
+ addTavioMesh(name: string): void;
135
+ getFirstMeshName(): Promise<string | null>;
136
+ createRenderView(name: string | Symbol): void;
137
+ setRenderView(name?: string | Symbol | null): void;
138
+ getCurrentRenderViewName(): Promise<string | null>;
139
+ setRenderViewSize(renderViewName?: string | Symbol, x?: number, y?: number, width?: number, height?: number, start?: boolean): void;
140
+ getWorldPositionByRenderView(x: number, y: number, isDebug?: boolean): Promise<iPickingInfo | null>;
141
+ setCustomDefines(defines: tCustomDefines): void;
142
+ setCustomUniforms(uniforms: tCustomUniforms): void;
143
+ setGaussianScale(scale: number): void;
144
+ setOpacityAdditive(opacity: number): void;
145
+ setOpacityMultiplier(multiplier: number): void;
146
+ setOpacityPoints(opacity: number): void;
147
+ setSphericalHarmonicsIntensity(intensity: number): void;
148
+ setColorBlur(blur: number): void;
149
+ setColorSharpness(sharpness: number): void;
150
+ getCameraParameter(): Promise<iCameraParameter>;
151
+ setCameraColliderEnabled(enabled: boolean): void;
152
+ setCameraColliderSelector(selectorNames?: string[]): void;
153
+ setInteractiveMode(interactive: boolean): void;
154
+ getInteractiveMode(): Promise<boolean>;
155
+ createCameraPath(position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean, times?: number[] | null): void;
156
+ addCameraPath(name: string, position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean, times?: number[] | null): void;
157
+ removeCameraPath(name: string): void;
158
+ setCameraPathDebugVisible(name: string, visible: boolean): void;
159
+ getPathNames(): Promise<string[]>;
160
+ getActiveCameraPathName(): Promise<string | null>;
161
+ getCameraPathByTime(name?: string, time?: number): Promise<{
162
+ position: iVectorLike;
163
+ target: iVectorLike;
164
+ } | null>;
165
+ getCameraPathTime(): Promise<number>;
166
+ setCameraPathOption(option: iCameraPathOption): void;
167
+ setCameraPathCollisionRadius(radius: number): void;
168
+ setCameraPathInteraction(x: number, y: number): void;
169
+ setTransferPosition(position: iVectorLike): void;
170
+ moveTransferByDirection(offset: iVectorLike, scale: number, isForce?: boolean): void;
171
+ setTransferFov(fov: number): void;
172
+ getFlightParameter(): Promise<iLatitudeLongitude | null>;
173
+ setFlightLongitude(longitude: number): void;
174
+ setFlightLatitude(latitude: number): void;
175
+ setOrbitOverflow(value: number): void;
176
+ setOrbitUpLimit(value: number): void;
177
+ setOrbitDownLimit(value: number): void;
178
+ setOrbitLeftLimit(value: number): void;
179
+ setOrbitRightLimit(value: number): void;
180
+ setOrbitZoomInLimit(value: number): void;
181
+ setOrbitZoomOutLimit(value: number): void;
182
+ selectSplatByScreenArea(minX: number, minY: number, maxX: number, maxY: number, mode?: tSelectionMode, maskCanvas?: tMaskSource | {
183
+ width: number;
184
+ height: number;
185
+ data: ArrayBuffer;
186
+ }): void;
187
+ removeTavioMesh(name: string, renderViewName?: string | Symbol): void;
188
+ removeTavioMeshAllRenderView(name: string): void;
189
+ setUsingSphericalHarmonics(isUsing: boolean): void;
190
+ setDropShadow(enabled: boolean): void;
191
+ setControlsAttenuation(attenuation: number): void;
192
+ setFlightRelativeLatitude(latitude: number, isForce?: boolean): void;
193
+ setFlightRelativeLongitude(longitude: number, isForce?: boolean): void;
194
+ setTransferRelativePosition(position: iVectorLike, isForce?: boolean): void;
195
+ moveTransferByHorizontalDirection(x: number, y: number, scale: number, isForce?: boolean): void;
196
+ moveTransferToTop(scale: number, isForce?: boolean): void;
197
+ moveTransferToBottom(scale: number, isForce?: boolean): void;
198
+ getCameraColliderEnabled(): Promise<boolean>;
199
+ getRenderViewCount(): Promise<number>;
200
+ setFrameRateLimit(fps: number): void;
201
+ setDevicePixelRatio(value: number): void;
202
+ getDevicePixelRatio(): number | null;
203
+ getHeaderInfo(name: string): Promise<iHeaderInfo | null>;
204
+ setCollisionReversed(reversed: boolean): void;
205
+ deleteSelectedGaussian(): void;
206
+ undoDeletedGaussian(): void;
207
+ resetDeletedGaussian(): void;
208
+ resetCollision(): void;
209
+ setCollision(collision: iCollisionTarget | iCollisionTarget[], mode?: tSelectionMode): void;
210
+ checkCollisionBySelector(name: string, mode?: tSelectionMode): void;
211
+ checkCollisionBySelectors(names: string[], mode?: tSelectionMode): void;
212
+ checkCollisionByAllSelectors(mode?: tSelectionMode): void;
213
+ getAllSelectorInfo(): Promise<iSelectorInfo[]>;
214
+ setSelectorVisible(name: string, visible: boolean): void;
215
+ setSelectorModeTranslate(name: string): void;
216
+ setSelectorModeScale(name: string): void;
217
+ setSelectorModeRotate(name: string): void;
218
+ setSelectorPosition(name: string, position: iVectorLike): void;
219
+ setSelectorRotation(name: string, rotation: iVectorLike): void;
220
+ setSelectorLookAt(name: string, target: iVectorLike): void;
221
+ setSelectorGizmoVisible(name: string, visible: boolean): void;
222
+ setSelectorColor(name: string, color: number): void;
223
+ setGuideLine(name: string, from: iVectorLike, to: iVectorLike, color?: number): void;
224
+ removeGuideLine(name: string): void;
225
+ pickSelector(ndcX: number, ndcY: number): Promise<string | null>;
226
+ setSelectorScale(name: string, scale: iVectorLike): void;
227
+ deleteSelector(name: string): void;
228
+ addSphereSelector(name: string, option?: iSphereSelectorOption): void;
229
+ addBoxSelector(name: string, option?: iBoxSelectorOption): void;
230
+ addCameraSelector(name: string, option?: iCameraSelectorOption): void;
231
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * # RPC / Event Message Protocol for Offscreen Worker
3
+ *
4
+ * ## 役割と背景
5
+ * Offscreen Worker モードにおいて、メインスレッドと Worker スレッド間で型安全な
6
+ * 非同期メソッド呼び出し(RPC)および双方向イベント伝播(Event Bubbling)を行うためのプロトコル定義。
7
+ */
8
+ export interface WorkerCmdMessage {
9
+ type: "cmd";
10
+ method: string;
11
+ args: any[];
12
+ }
13
+ export interface WorkerRpcMessage {
14
+ type: "rpc";
15
+ reqId: number;
16
+ method: string;
17
+ args: any[];
18
+ }
19
+ export interface WorkerRpcReplyMessage {
20
+ type: "rpc:reply";
21
+ reqId: number;
22
+ result?: any;
23
+ error?: string;
24
+ }
25
+ export interface WorkerEventMessage {
26
+ type: "event";
27
+ name: string;
28
+ payload?: any;
29
+ }
30
+ export type WorkerMessage = WorkerCmdMessage | WorkerRpcMessage | WorkerRpcReplyMessage | WorkerEventMessage;
31
+ /**
32
+ * 転送不可なオブジェクトや DOM 依存オブジェクトをメッセージパラメータ用に安全にクリーンアップする
33
+ *
34
+ * ## 役割と背景
35
+ * postMessage は HTMLCanvasElement や関数などのクローン不可能なオブジェクトを送信すると
36
+ * DataCloneError を発生させます。本関数は引数配列を事前走査し、安全に転送可能な
37
+ * プレーンデータ / ArrayBuffer / TypedArray / Blob のみを抽出・サニタイズします。
38
+ */
39
+ export declare function sanitizeArgsForMessage(args: any[]): any[];
@@ -0,0 +1,66 @@
1
+ /**
2
+ * # Worker Element Adapter (DOM Emulator in Worker)
3
+ *
4
+ * ## 役割と背景
5
+ * Web Worker 環境には `document` や `window` や `HTMLCanvasElement` が存在しません。
6
+ * 本クラスは、メインスレッド側でキャッチされた pointerdown / pointermove / wheel などの DOM イベントを
7
+ * Worker 内で受領し、Three.js の Controls(OrbitControls / TransferControls など)が
8
+ * あたかも本物の DOM 要素からイベントを受け取っているかのようにエミュレートするアダプターです。
9
+ */
10
+ export interface SyntheticPointerEventInit {
11
+ type: string;
12
+ pointerId?: number;
13
+ pointerType?: string;
14
+ clientX?: number;
15
+ clientY?: number;
16
+ offsetX?: number;
17
+ offsetY?: number;
18
+ button?: number;
19
+ buttons?: number;
20
+ altKey?: boolean;
21
+ ctrlKey?: boolean;
22
+ metaKey?: boolean;
23
+ shiftKey?: boolean;
24
+ deltaX?: number;
25
+ deltaY?: number;
26
+ boundingLeft?: number;
27
+ boundingTop?: number;
28
+ boundingWidth?: number;
29
+ boundingHeight?: number;
30
+ }
31
+ export declare class WorkerElementAdapter {
32
+ width: number;
33
+ height: number;
34
+ clientWidth: number;
35
+ clientHeight: number;
36
+ boundingLeft: number;
37
+ boundingTop: number;
38
+ style: Record<string, string>;
39
+ private ownerListeners;
40
+ ownerDocument: any;
41
+ private listeners;
42
+ constructor(width?: number, height?: number);
43
+ setSize(width: number, height: number): void;
44
+ addEventListener(type: string, listener: (evt: any) => void): void;
45
+ removeEventListener(type: string, listener: (evt: any) => void): void;
46
+ dispatchEvent(event: any): boolean;
47
+ /**
48
+ * メインスレッドから転送されたイベント情報をもとに合成イベントを作成して一括配信する
49
+ */
50
+ dispatchTransferredEvent(init: SyntheticPointerEventInit): void;
51
+ getContext(): null;
52
+ getBoundingClientRect(): {
53
+ left: number;
54
+ top: number;
55
+ width: number;
56
+ height: number;
57
+ right: number;
58
+ bottom: number;
59
+ x: number;
60
+ y: number;
61
+ };
62
+ setPointerCapture(): void;
63
+ releasePointerCapture(): void;
64
+ focus(): void;
65
+ blur(): void;
66
+ }
@@ -1,36 +1,20 @@
1
1
  import { RawShaderMaterial } from 'three';
2
- /**
3
- * MaterialGenerator は原則として static なメソッドのみで実装しステートを持たない。
4
- *
5
- * ビューアの基本機能については src/shaderChunk 以下にシェーダのチャンクとなる各部品を置く。
6
- * src/shaderChunk/common 以下にあるシェーダは 3DGS を描画するのみで色もつかない、最もシンプルな形。
7
- * src/shaderChunk/viewer は直流成分および交流成分の計算など、ビューアの基本機能を拡張する。
8
- * src/shaderChunk/editor はカラーグレーディングなどのエディタ用機能。
9
- * src/shaderChunk/picking は座標をレンダリングするピッキング用のシェーダ。
10
- *
11
- * 独自に拡張する場合は、iMaterialOption 単体またはその配列を定義し MaterialGenerator.generate() に渡す。
12
- * iMaterialOption.target で、ベーシックやピッキングなどのシェーダを結合する対象を(CHUNK_TARGET の論理和で)指定する。
13
- * iMaterialOption.uniforms で拡張部分で用いる uniform 変数を定義。
14
- * iMaterialOption.vertex / fragment でシェーダのチャンク情報を iShaderChunk 単体または配列で指定する。
15
- *
16
- * iShaderChunk.stage は SHADER_STAGE で定義されているシェーダ内のステージの指定。
17
- * iShaderChunk.source はシェーダのソースコード。
18
- *
19
- * このファイル内で定義されているシェーダのチャンクは src/shaderChunk/common 以下にあるもののみ。
20
- * それ以外のチャンクは canvas.ts など、ビューア実装側で付与する。
21
- */
2
+ import { tCustomUniforms, tCustomDefines, tUniformValue } from './types';
22
3
  /**
23
4
  * チャンクをどのシェーダに反映するかを表す
24
5
  * これらの値は論理和を用いて組み合わせて指定できる
25
6
  */
26
7
  export declare const CHUNK_TARGET: {
27
8
  readonly ANY: 0;
28
- readonly BASIC: 1;
29
- readonly PICKING: 2;
30
- readonly SHADOWING: 4;
31
- readonly INDEX_SELECTION: 8;
9
+ readonly ANY_SPLAT: 1;
10
+ readonly BASIC: 2;
11
+ readonly PICKING: 4;
12
+ readonly SHADOWING: 8;
13
+ readonly INDEX_SELECTION: 16;
14
+ readonly POINTS: 32;
32
15
  };
33
- export type tChunkTarget = typeof CHUNK_TARGET[keyof typeof CHUNK_TARGET];
16
+ export type tChunkTargetValue = typeof CHUNK_TARGET[keyof typeof CHUNK_TARGET];
17
+ export type tChunkTarget = tChunkTargetValue | (number & {});
34
18
  /**
35
19
  * チャンクがどのステージにあたるかを表す
36
20
  * 指定されたステージの末尾に処理が追加される
@@ -69,6 +53,7 @@ export interface iMaterials {
69
53
  picking: RawShaderMaterial;
70
54
  shadowing: RawShaderMaterial;
71
55
  indexSelection: RawShaderMaterial;
56
+ points: RawShaderMaterial;
72
57
  }
73
58
  /**
74
59
  * マテリアル生成に使われるシェーダチャンク
@@ -82,8 +67,8 @@ export interface iShaderChunk {
82
67
  */
83
68
  export interface iMaterialOption {
84
69
  target: tChunkTarget;
85
- uniforms?: any;
86
- defines?: any;
70
+ uniforms?: tCustomUniforms | Record<string, tUniformValue>;
71
+ defines?: tCustomDefines;
87
72
  vertex?: iShaderChunk | iShaderChunk[];
88
73
  fragment?: iShaderChunk | iShaderChunk[];
89
74
  }
@@ -99,6 +84,18 @@ export declare class MaterialGenerator {
99
84
  * shaderChunk/common に含まれるフラグメントシェーダのチャンクをセットした Map オブジェクトを生成する
100
85
  */
101
86
  private static _createFragmentMap;
87
+ /**
88
+ * shaderChunk/points に含まれる頂点シェーダのチャンクをセットした Map オブジェクトを生成する
89
+ */
90
+ private static _createPointsVertexMap;
91
+ /**
92
+ * shaderChunk/points に含まれるフラグメントシェーダのチャンクをセットした Map オブジェクトを生成する
93
+ */
94
+ private static _createPointsFragmentMap;
95
+ /**
96
+ * 点描画マテリアル用 uniform 変数の初期値を生成する
97
+ */
98
+ private static _createPointsUniforms;
102
99
  /**
103
100
  * シェーダチャンクに iMaterialOption.vertex / fragment に含まれるソースコードを結合する
104
101
  * @param option - シェーダチャンクを含むマテリアルオプション
@@ -1,5 +1,5 @@
1
- import { Group, SpotLight, PerspectiveCamera, Quaternion, Scene, Vector3, AmbientLight, CameraHelper } from 'three';
2
- import { tControlInstance, tControlsType } from './canvas';
1
+ import { AxesHelper, Group, SpotLight, PerspectiveCamera, Quaternion, Scene, Vector3, AmbientLight, CameraHelper } from 'three';
2
+ import { tControlInstance, tControlsType } from './types';
3
3
  import { CameraCollider } from '../camera/cameraCollider';
4
4
  import { TransferControls } from '../camera/transferControls';
5
5
  import { CameraPathManager } from '../camera/cameraPathManager';
@@ -43,9 +43,10 @@ export declare class RenderView {
43
43
  previousRotation: Quaternion;
44
44
  previousFov: number;
45
45
  orbitCursor: Group;
46
- previousOrbitTarget: Vector3;
47
46
  orbitCursorAutoDisplay: boolean;
48
47
  orbitCursorDisplay: boolean;
48
+ previousOrbitTarget: Vector3;
49
+ axesHelper?: AxesHelper;
49
50
  /**
50
51
  * @param name - レンダービューの名前
51
52
  */