@openheart/tavio-renderer 2.4.0 → 2.6.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.
@@ -15,10 +15,25 @@ export declare class CameraPath {
15
15
  private positionSpline;
16
16
  private targetSpline;
17
17
  private visualizationObjects;
18
+ private times;
18
19
  /**
19
20
  * @constructor
20
21
  */
21
22
  constructor();
23
+ /**
24
+ * 各制御点に対応する時刻を設定する。制御点ごとに到達するタイミングを変えたい場合に使う
25
+ * (軌道の形は変わらず、各区間を通過する速さだけが変わる)。
26
+ * 2要素以上・有限値・単調非減少でない場合は無視して等間隔として扱う。
27
+ * @param times - 各制御点の時刻(0.0 ~ 1.0)。null で等間隔に戻す
28
+ */
29
+ setTimes(times: number[] | null): this;
30
+ /**
31
+ * 時刻 t(0.0 ~ 1.0)を、スプラインの等間隔パラメータに変換する。
32
+ * times が設定されていて制御点数と一致する場合のみ、t が属する区間を求めてその区間内の割合に変換する
33
+ * @param t - 時刻(0.0 ~ 1.0)
34
+ * @param pointCount - 対象スプラインの制御点数
35
+ */
36
+ private toSplineParameter;
22
37
  /**
23
38
  * カメラパスから指定された時刻の座標・注視点を返す
24
39
  * @param t - 時刻(0.0 ~ 1.0)
@@ -84,8 +99,25 @@ export declare class CameraPath {
84
99
  /**
85
100
  * シーンを指定して、補間後の曲線と制御点を可視化する
86
101
  * @param parent - ラインと点を追加する Object3D
87
- */
88
- insertObject(parent: Object3D): void;
102
+ * @param options.showPoints - 制御点(Points)も表示するか(デフォルト: true)。
103
+ * 本レンダラーでは Points の描画サイズが環境によって意図せず巨大な板状に見えることが
104
+ * あるため、曲線(Line)だけで十分な用途ではfalseを指定できるようにしている。
105
+ * @param options.lineWidth - 曲線の太さ(px)。指定すると太さを持つ線(Line2 + LineMaterial)で描画する
106
+ * (WebGLの通常の線は環境によって1pxに制限されるため)。省略時は通常の1pxの線
107
+ * @param options.resolution - 描画領域のサイズ(px)。lineWidth指定時に太さの計算に使う
108
+ * @param options.lineColor - 曲線の色(座標・注視点の両方)。省略時は座標がマゼンタ、注視点が緑
109
+ * @param options.showTargetLine - 注視点の曲線も表示するか(デフォルト: true)
110
+ */
111
+ insertObject(parent: Object3D, options?: {
112
+ showPoints?: boolean;
113
+ lineWidth?: number;
114
+ resolution?: {
115
+ x: number;
116
+ y: number;
117
+ };
118
+ lineColor?: number;
119
+ showTargetLine?: boolean;
120
+ }): void;
89
121
  /**
90
122
  * 可視化用に追加したオブジェクトを削除する
91
123
  * @param parent - オブジェクトを削除する親 Object3D
@@ -99,6 +131,7 @@ export declare class CameraPath {
99
131
  * @param segments - スプラインを何本の線の結合でジオメトリ生成するか
100
132
  * @param pointColor - 制御点の色
101
133
  * @param lineColor - ラインの色
134
+ * @param showPoints - 制御点(Points)も追加するか
102
135
  */
103
136
  private insert;
104
137
  }
@@ -114,7 +147,8 @@ interface iVectorLike {
114
147
  * カメラパスを生成するヘルパー関数
115
148
  * @param position - カメラの座標({x, y, z} のオブジェクト、または [x, y, z] の数値の配列)の配列
116
149
  * @param target - 注視点の座標({x, y, z} のオブジェクト、または [x, y, z] の数値の配列)の配列
150
+ * @param times - 各制御点に対応する時刻(0.0 ~ 1.0)。省略時は等間隔
117
151
  * @returns 生成された CameraPath
118
152
  */
119
- export declare function createCameraPath(position: iVectorLike[] | number[][], target: iVectorLike[] | number[][]): CameraPath;
153
+ export declare function createCameraPath(position: iVectorLike[] | number[][], target: iVectorLike[] | number[][], times?: number[] | null): CameraPath;
120
154
  export {};
@@ -0,0 +1,57 @@
1
+ import { PerspectiveCamera, Ray, Vector3 } from 'three';
2
+ import { Selector, iIntersection } from './selector';
3
+ export interface iCameraSelectorOption {
4
+ radius?: number;
5
+ color?: number;
6
+ lineWidth?: number;
7
+ aspectRatio?: number;
8
+ }
9
+ /**
10
+ * カメラの位置(position)を表す、カメラを模した四角錐(フラスタム)アイコンのセレクター。
11
+ * 底面はカメラのフレーム(画角)を模した長方形(aspectRatioで指定)にし、正方形の底面を持つ
12
+ * ConeGeometryではなくカスタムジオメトリで、頂点から底面各頂点への4本の稜線と底面の
13
+ * 輪郭(4辺)だけのシンプルな形状を作る(底面を閉じる面は作らない)。
14
+ * これをWireframeGeometry2 + LineMaterial(Fat Lines)で太さのある線として描画する。
15
+ * 底面は+Z方向を向く(Selector.lookAt()でtarget方向を向けたときに底面がtarget側になるため)。
16
+ * SphereSelectorと同じくTransformControlsをtranslateモードのみで使う想定(位置編集用の
17
+ * ポイントハンドルとしての利用が主目的)。
18
+ * containsPoint/intersectRayは、実際の四角錐形状ではなく底面・奥行きを包含できる
19
+ * 外接球で近似する(このセレクターは領域選択ではなく位置マーカーとしての利用が主目的のため)。
20
+ * @class
21
+ */
22
+ export declare class CameraSelector extends Selector {
23
+ private radius;
24
+ private boundingRadius;
25
+ private frustumGeometry;
26
+ private wireGeometry;
27
+ private material;
28
+ /**
29
+ * @param camera - TransformControls に設定するカメラ
30
+ * @param eventTarget - TransformControls に設定するイベント処理の対象要素
31
+ * @param option - セットアップオプション
32
+ */
33
+ constructor(camera: PerspectiveCamera, eventTarget: HTMLElement, option?: iCameraSelectorOption);
34
+ /**
35
+ * 設定されている半径(外接球の近似半径)を返す
36
+ */
37
+ getRadius(): number;
38
+ /**
39
+ * セットアップを行う
40
+ * @param option - セットアップオプション
41
+ */
42
+ setup(option?: iCameraSelectorOption): void;
43
+ /**
44
+ * 開放処理
45
+ */
46
+ dispose(): void;
47
+ /**
48
+ * 包含判定処理(外接球で近似)
49
+ * @param point - 任意の点(座標)
50
+ */
51
+ containsPoint(point: Vector3): boolean;
52
+ /**
53
+ * Ray オブジェクトの入射点と射出点までの距離を求める処理(外接球で近似)
54
+ * @param ray - 判定を行う Ray
55
+ */
56
+ intersectRay(ray: Ray): iIntersection;
57
+ }
@@ -1,5 +1,5 @@
1
1
  import { default as EventEmitter } from 'eventemitter3';
2
- import { Euler, Matrix4, Object3D, PerspectiveCamera, Quaternion, Ray, Vector3 } from 'three';
2
+ import { Euler, Matrix4, Object3D, PerspectiveCamera, Quaternion, Ray, Sphere, Vector3 } from 'three';
3
3
  import { TransformControls } from 'three/examples/jsm/controls/TransformControls.js';
4
4
  /**
5
5
  * Selector は選択範囲を管理・制御するための基底クラスで、継承される前提になっている。
@@ -43,6 +43,23 @@ export declare abstract class Selector extends EventEmitter {
43
43
  */
44
44
  set visible(visible: boolean);
45
45
  get visible(): boolean;
46
+ /**
47
+ * 操作用のギズモ(TransformControls)だけの表示・操作可否を切り替える。
48
+ * 本体(object)の表示はそのまま残すため、「全件表示しつつ、選択中の1件だけドラッグ可能にする」
49
+ * といった使い方ができる
50
+ * @param visible - ギズモを表示して操作可能にするか
51
+ */
52
+ setGizmoVisible(visible: boolean): void;
53
+ /**
54
+ * クリック判定(レイキャスト)用に、本体を包む球(ワールド座標)を返す。非表示の場合はnull。
55
+ * 形状ごとの厳密な判定ではなく、回転を含めた本体全体を包む境界球で近似する
56
+ */
57
+ getPickSphere(): Sphere | null;
58
+ /**
59
+ * 本体の色を変更する(material.color を持つマテリアルの場合のみ)
60
+ * @param color - 設定する色(例: 0xffffff)
61
+ */
62
+ setColor(color: number): void;
46
63
  /**
47
64
  * @constructor
48
65
  * @param camera - TransformControls に設定するカメラ
@@ -107,6 +124,13 @@ export declare abstract class Selector extends EventEmitter {
107
124
  * @param Euler - 設定する回転(オイラー角)
108
125
  */
109
126
  setEuler(euler: Euler): void;
127
+ /**
128
+ * 指定した位置の方を向くよう回転を設定する(現在位置からの相対方向)。
129
+ * カメラの位置マーカー(CameraSelector)を、対応する注視点(target)の方向へ
130
+ * 向けたい場合などに使う。
131
+ * @param target - 向く先の位置(ワールド座標)
132
+ */
133
+ lookAt(target: Vector3): void;
110
134
  /**
111
135
  * 平行移動モードを設定する
112
136
  * @param index - 対象となるインデックス(省略時はすべてのコントロールを対象とする)
@@ -4,6 +4,7 @@ export interface iSphereSelectorOption {
4
4
  radius?: number;
5
5
  segment?: number;
6
6
  color?: number;
7
+ fill?: boolean;
7
8
  }
8
9
  /**
9
10
  * スプラットを選択するための sphere インターフェースを提供する
@@ -7,6 +7,7 @@ import { iVectorLike, iViewerOption, iViewerMaterialOption, iLoadingOption, iHea
7
7
  import { iCollisionTarget } from '../worker/tavioWorker';
8
8
  import { iSphereSelectorOption } from '../editor/selector/sphereSelector';
9
9
  import { iBoxSelectorOption } from '../editor/selector/boxSelector';
10
+ import { iCameraSelectorOption } from '../editor/selector/cameraSelector';
10
11
  export declare class Core extends EventEmitter {
11
12
  private driver;
12
13
  static CHUNK_TARGET: {
@@ -61,6 +62,18 @@ export declare class Core extends EventEmitter {
61
62
  loadTavio(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
62
63
  loadTavioWasm(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
63
64
  loadPly(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
65
+ loadPlyWasm(name: string, url: string, options?: {
66
+ useSphericalHarmonics?: boolean;
67
+ }): Promise<void>;
68
+ loadSplatWasm(name: string, url: string, options?: {
69
+ useSphericalHarmonics?: boolean;
70
+ }): Promise<void>;
71
+ loadSpzWasm(name: string, url: string, options?: {
72
+ useSphericalHarmonics?: boolean;
73
+ }): Promise<void>;
74
+ loadSogWasm(name: string, url: string, options?: {
75
+ useSphericalHarmonics?: boolean;
76
+ }): Promise<void>;
64
77
  loadSplat(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
65
78
  loadImage(name: string, source: string | Blob | ArrayBuffer | ImageBitmap, option?: iLoadingOption): Promise<void>;
66
79
  loadCanvas(name: string, canvas: HTMLCanvasElement | OffscreenCanvas | ImageBitmap, option?: iLoadingOption): Promise<void>;
@@ -74,6 +87,12 @@ export declare class Core extends EventEmitter {
74
87
  saveSpzWasm(name: string, fileName?: string): Promise<any>;
75
88
  saveTavioWasm(name: string, fileName?: string, options?: any): Promise<any>;
76
89
  exportTavioWasm(name: string, options?: any): Promise<any>;
90
+ /**
91
+ * 現在の描画内容を画像として取得する。OffscreenCanvas(Worker)で描画している場合も取得できる
92
+ * @param type - 画像の MIME タイプ [default: "image/png"]
93
+ * @param quality - 画質(0〜1)。"image/jpeg" や "image/webp" のときのみ有効
94
+ */
95
+ captureImage(type?: string, quality?: number): Promise<Blob>;
77
96
  addTavioMesh(name: string): void;
78
97
  removeTavioMesh(name: string, renderViewName?: string | Symbol): void;
79
98
  removeTavioMeshAllRenderView(name: string): void;
@@ -145,9 +164,10 @@ export declare class Core extends EventEmitter {
145
164
  setControlsAttenuation(attenuation: number): void;
146
165
  selectCameraPath(name: string): void;
147
166
  updateCameraPath(time?: number): void;
148
- createCameraPath(position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean): CameraPath | void;
149
- addCameraPath(name: string, position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean): void;
167
+ createCameraPath(position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean, times?: number[] | null): CameraPath | void;
168
+ addCameraPath(name: string, position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean, times?: number[] | null): void;
150
169
  removeCameraPath(name: string): void;
170
+ setCameraPathDebugVisible(name: string, visible: boolean): void;
151
171
  getPathNames(): Promise<string[]> | string[];
152
172
  getActiveCameraPathName(): Promise<string | null> | string | null;
153
173
  getCameraPathByTime(name?: string, time?: number): Promise<{
@@ -226,8 +246,15 @@ export declare class Core extends EventEmitter {
226
246
  setSelectorModeRotate(name: string): void;
227
247
  setSelectorPosition(name: string, position: iVectorLike): void;
228
248
  setSelectorRotation(name: string, rotation: iVectorLike): void;
249
+ setSelectorLookAt(name: string, target: iVectorLike): void;
250
+ setSelectorGizmoVisible(name: string, visible: boolean): void;
251
+ setSelectorColor(name: string, color: number): void;
252
+ setGuideLine(name: string, from: iVectorLike, to: iVectorLike, color?: number): void;
253
+ removeGuideLine(name: string): void;
254
+ pickSelector(ndcX: number, ndcY: number): Promise<string | null> | string | null;
229
255
  setSelectorScale(name: string, scale: iVectorLike): void;
230
256
  deleteSelector(name: string): void;
231
257
  addSphereSelector(name: string, option?: iSphereSelectorOption): void;
232
258
  addBoxSelector(name: string, option?: iBoxSelectorOption): void;
259
+ addCameraSelector(name: string, option?: iCameraSelectorOption): void;
233
260
  }
@@ -1,6 +1,7 @@
1
1
  import { RawShaderMaterial, WebGLRenderTarget, WebGLRenderer, PMREMGenerator, MeshStandardMaterialParameters } from 'three';
2
2
  import { iSphereSelectorOption } from '../../editor/selector/sphereSelector';
3
3
  import { iBoxSelectorOption } from '../../editor/selector/boxSelector';
4
+ import { iCameraSelectorOption } from '../../editor/selector/cameraSelector';
4
5
  import { iSelectorInfo, tControlsType, tMaskSource, tSelectionMode, iVectorLike, iCameraPathOption, iCameraParameter, iViewerOption, iViewerMaterialOption, iLoadingOption, iHeaderInfo, iTransform, iPickingInfo, tUniformValue, tCustomDefines, tCustomUniforms } from '../types';
5
6
  import { iCollisionTarget } from '../../worker/tavioWorker';
6
7
  import { WorkerElementAdapter } from './workerElementAdapter';
@@ -84,6 +85,7 @@ export declare class CoreDriver extends EventEmitter implements iCoreDriver {
84
85
  private _frameIntervalMs;
85
86
  /** 直前にフレームを描画した時刻(Date.now()) */
86
87
  private _lastFrameTimestamp;
88
+ private _rafId;
87
89
  /**
88
90
  * 対応する Controls 種別
89
91
  */
@@ -313,6 +315,15 @@ export declare class CoreDriver extends EventEmitter implements iCoreDriver {
313
315
  bytes: Uint8Array;
314
316
  version: string;
315
317
  }>;
318
+ /**
319
+ * 現在の描画内容を画像として取得する
320
+ * preserveDrawingBuffer が無効でも取得できるよう、その場で1フレーム描画し、同じタスク内で
321
+ * canvas のスナップショットを取る(toBlob / convertToBlob は呼び出し時点の内容を複製する)
322
+ * OffscreenCanvas(Worker)では OffscreenDriver から RPC で呼び出され、Worker 内で convertToBlob する
323
+ * @param type - 画像の MIME タイプ [default: "image/png"]
324
+ * @param quality - 画質(0〜1)。"image/jpeg" や "image/webp" のときのみ有効
325
+ */
326
+ captureImage(type?: string, quality?: number): Promise<Blob>;
316
327
  /**
317
328
  * tavio 形式のリソースを保存する
318
329
  * @param name - このメッシュの固有名
@@ -434,6 +445,13 @@ export declare class CoreDriver extends EventEmitter implements iCoreDriver {
434
445
  * @param start - リサイズと同時に描画を開始するかどうか
435
446
  */
436
447
  resize(width?: number, height?: number, start?: boolean): void;
448
+ /**
449
+ * 予約中の描画を取り消し、その場で1フレーム描画する(以降は通常の描画ループに戻る)。
450
+ * canvas のサイズを変えると描画内容がクリアされるが、ResizeObserver の通知はブラウザの
451
+ * その回の描画処理(requestAnimationFrame)の後に来るため、次のフレームを待つと
452
+ * クリアされた空の状態が一瞬表示され、リサイズ中にちらついて見える。これを防ぐために使う
453
+ */
454
+ private _renderImmediately;
437
455
  /**
438
456
  * 描画を開始する
439
457
  * ※ pause() によって一時停止中の場合は何もしない(再開するには resume() を呼ぶ)
@@ -748,8 +766,9 @@ export declare class CoreDriver extends EventEmitter implements iCoreDriver {
748
766
  * @param position - カメラの座標({x, y, z} のオブジェクト、または [x, y, z] の数値の配列)の配列
749
767
  * @param target - 注視点の座標({x, y, z} のオブジェクト、または [x, y, z] の数値の配列)の配列
750
768
  * @param debug - デバッグモードをオンにすると、各点とその補間後の軌跡がシーンに追加される
769
+ * @param times - 各制御点に対応する時刻(0.0 ~ 1.0)。省略時は等間隔
751
770
  */
752
- createCameraPath(position: iVectorLike[] | number[][], target: iVectorLike[] | number[][], debug?: boolean): CameraPath;
771
+ createCameraPath(position: iVectorLike[] | number[][], target: iVectorLike[] | number[][], debug?: boolean, times?: number[] | null): CameraPath;
753
772
  /**
754
773
  * カメラパスが有効な場合、指定された時間を設定し更新する
755
774
  * @param time - 設定する時間(0.0 ~ 1.0)
@@ -761,13 +780,21 @@ export declare class CoreDriver extends EventEmitter implements iCoreDriver {
761
780
  * @param position - カメラ移動経路の座標配列
762
781
  * @param target - カメラ注視点経路の座標配列
763
782
  * @param debug - デバッグ用軌跡描画を行うかどうか
783
+ * @param times - 各制御点に対応する時刻(0.0 ~ 1.0)。省略時は等間隔
764
784
  */
765
- addCameraPath(name: string, position: iVectorLike[] | number[][], target: iVectorLike[] | number[][], debug?: boolean): void;
785
+ addCameraPath(name: string, position: iVectorLike[] | number[][], target: iVectorLike[] | number[][], debug?: boolean, times?: number[] | null): void;
766
786
  /**
767
787
  * カメラパスを名前で削除する
768
788
  * @param name - 削除するカメラパスの名前
769
789
  */
770
790
  removeCameraPath(name: string): void;
791
+ /**
792
+ * 名前を指定してカメラパスのデバッグ可視化(補間曲線と制御点)の表示/非表示を切り替える。
793
+ * removeObject→(必要なら)insertObjectの順で呼ぶため、繰り返し呼んでも多重に追加されない。
794
+ * @param name - 対象のカメラパスの名前
795
+ * @param visible - 表示するかどうか
796
+ */
797
+ setCameraPathDebugVisible(name: string, visible: boolean): void;
771
798
  /**
772
799
  * アクティブなカメラパスを選択する
773
800
  * @param name - 選択するカメラパスの名前
@@ -1258,6 +1285,7 @@ export declare class CoreDriver extends EventEmitter implements iCoreDriver {
1258
1285
  */
1259
1286
  setPointUniforms(uniforms: Record<string, tUniformValue>): void;
1260
1287
  private selectorMap;
1288
+ private guideLineMap;
1261
1289
  private reversedCollision;
1262
1290
  /**
1263
1291
  * セレクターによる衝突判定の反転フラグを設定する
@@ -1349,6 +1377,45 @@ export declare class CoreDriver extends EventEmitter implements iCoreDriver {
1349
1377
  * @param visible - 可視性
1350
1378
  */
1351
1379
  setSelectorVisible(name: string, visible: boolean): void;
1380
+ /**
1381
+ * 名前を指定して、セレクターの操作用ギズモだけの表示・操作可否を設定する(本体の表示はそのまま)
1382
+ * @param name - 対象セレクター名
1383
+ * @param visible - ギズモを表示して操作可能にするか
1384
+ */
1385
+ setSelectorGizmoVisible(name: string, visible: boolean): void;
1386
+ /**
1387
+ * 名前を指定してセレクター本体の色を設定する
1388
+ * @param name - 対象セレクター名
1389
+ * @param color - 設定する色(例: 0xffffff)
1390
+ */
1391
+ setSelectorColor(name: string, color: number): void;
1392
+ /**
1393
+ * 名前を指定して、2点を結ぶガイド線を追加・更新する(編集時の補助表示用。
1394
+ * 常に手前に描画し、スプラットに隠れないようにする)
1395
+ * @param name - ガイド線の識別名
1396
+ * @param from - 始点
1397
+ * @param to - 終点
1398
+ * @param color - 線の色(省略時は白)
1399
+ */
1400
+ setGuideLine(name: string, from: iVectorLike, to: iVectorLike, color?: number): void;
1401
+ /**
1402
+ * 名前を指定してガイド線を削除する
1403
+ * @param name - 削除するガイド線の識別名
1404
+ */
1405
+ removeGuideLine(name: string): void;
1406
+ /**
1407
+ * 画面上の位置(正規化デバイス座標)からレイを飛ばし、最初に当たる表示中のセレクターの名前を返す。
1408
+ * 各セレクターを包む境界球で判定し、遠くにある小さなセレクターでもクリックしやすいよう、
1409
+ * 画面上でPICK_TOLERANCE_PXぶんの大きさは最低限確保する
1410
+ * @param ndcX - 正規化デバイス座標のX(-1 ~ 1、左端が-1)
1411
+ * @param ndcY - 正規化デバイス座標のY(-1 ~ 1、下端が-1)
1412
+ */
1413
+ pickSelector(ndcX: number, ndcY: number): string | null;
1414
+ /**
1415
+ * 編集用の線(カメラパスの曲線・ガイド線)を、太さを持つ線で描画するための設定を返す
1416
+ * (LineMaterialは描画領域のサイズを基準に太さを計算するため、現在のサイズを渡す)
1417
+ */
1418
+ private getEditLineDrawOptions;
1352
1419
  /**
1353
1420
  * 名前を指定してセレクターを平行移動モードにする
1354
1421
  * @param name - 設定するセレクターの名前
@@ -1376,6 +1443,12 @@ export declare class CoreDriver extends EventEmitter implements iCoreDriver {
1376
1443
  * @param rotation - 設定する回転(Euler)
1377
1444
  */
1378
1445
  setSelectorRotation(name: string, rotation: iVectorLike): void;
1446
+ /**
1447
+ * 名前を指定してセレクターを、targetの方向へ向ける(現在位置からの相対方向)
1448
+ * @param name - 設定するセレクターの名前
1449
+ * @param target - 向く先の位置
1450
+ */
1451
+ setSelectorLookAt(name: string, target: iVectorLike): void;
1379
1452
  /**
1380
1453
  * 名前を指定してセレクターのスケールを設定する
1381
1454
  * @param name - 設定するセレクターの名前
@@ -1399,4 +1472,12 @@ export declare class CoreDriver extends EventEmitter implements iCoreDriver {
1399
1472
  * @param option - セレクターに対するオプション
1400
1473
  */
1401
1474
  addBoxSelector(name: string, option?: iBoxSelectorOption): void;
1475
+ /**
1476
+ * 名前を指定して、カメラを模した四角錐アイコンのセレクターを追加する
1477
+ * (既定の状態では visible が false である点に注意)。カメラのposition編集用の
1478
+ * ポイントハンドルとしての利用を主目的とする。
1479
+ * @param name - 追加するセレクターに付与する名前
1480
+ * @param option - セレクターに対するオプション
1481
+ */
1482
+ addCameraSelector(name: string, option?: iCameraSelectorOption): void;
1402
1483
  }
@@ -3,6 +3,7 @@ import { iViewerOption, iViewerMaterialOption, iLoadingOption, iHeaderInfo, iTra
3
3
  import { iCollisionTarget } from '../../worker/tavioWorker';
4
4
  import { iSphereSelectorOption } from '../../editor/selector/sphereSelector';
5
5
  import { iBoxSelectorOption } from '../../editor/selector/boxSelector';
6
+ import { iCameraSelectorOption } from '../../editor/selector/cameraSelector';
6
7
  import { MeshStandardMaterialParameters } from 'three';
7
8
  import { iLatitudeLongitude } from '../../camera/flightControls';
8
9
  import { WorkerElementAdapter } from './workerElementAdapter';
@@ -33,6 +34,18 @@ export interface iCoreDriver extends EventEmitter {
33
34
  loadTavioWasm(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
34
35
  loadPly(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
35
36
  loadSplat(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
37
+ loadPlyWasm(name: string, url: string, options?: {
38
+ useSphericalHarmonics?: boolean;
39
+ }): Promise<void>;
40
+ loadSplatWasm(name: string, url: string, options?: {
41
+ useSphericalHarmonics?: boolean;
42
+ }): Promise<void>;
43
+ loadSpzWasm(name: string, url: string, options?: {
44
+ useSphericalHarmonics?: boolean;
45
+ }): Promise<void>;
46
+ loadSogWasm(name: string, url: string, options?: {
47
+ useSphericalHarmonics?: boolean;
48
+ }): Promise<void>;
36
49
  loadImage(name: string, source: string | Blob | ArrayBuffer | ImageBitmap, option?: iLoadingOption): Promise<void>;
37
50
  loadCanvas(name: string, canvas: HTMLCanvasElement | OffscreenCanvas | ImageBitmap, option?: iLoadingOption): Promise<void>;
38
51
  concatTavio(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
@@ -45,6 +58,12 @@ export interface iCoreDriver extends EventEmitter {
45
58
  saveSpzWasm(name: string, fileName?: string): Promise<any>;
46
59
  saveTavioWasm(name: string, fileName?: string, options?: any): Promise<any>;
47
60
  exportTavioWasm(name: string, options?: any): Promise<any>;
61
+ /**
62
+ * 現在の描画内容を画像として取得する(描画内容の画像化・サムネイル生成用)
63
+ * @param type - 画像の MIME タイプ [default: "image/png"]
64
+ * @param quality - 画質(0〜1)。"image/jpeg" や "image/webp" のときのみ有効
65
+ */
66
+ captureImage(type?: string, quality?: number): Promise<Blob>;
48
67
  addTavioMesh(name: string): void;
49
68
  removeTavioMesh(name: string, renderViewName?: string | Symbol): void;
50
69
  removeTavioMeshAllRenderView(name: string): void;
@@ -125,9 +144,12 @@ export interface iCoreDriver extends EventEmitter {
125
144
  setControlsAttenuation(attenuation: number): void;
126
145
  selectCameraPath(name: string): void;
127
146
  updateCameraPath(time?: number): void;
128
- createCameraPath(position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean): CameraPath | void;
129
- addCameraPath(name: string, position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean): void;
147
+ createCameraPath(position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean, times?: number[] | null): CameraPath | void;
148
+ /** times: 各制御点に対応する時刻(0.0 ~ 1.0)。省略時は等間隔 */
149
+ addCameraPath(name: string, position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean, times?: number[] | null): void;
130
150
  removeCameraPath(name: string): void;
151
+ /** 名前を指定してカメラパスのデバッグ可視化(補間曲線と制御点)の表示/非表示を切り替える */
152
+ setCameraPathDebugVisible(name: string, visible: boolean): void;
131
153
  getPathNames(): Promise<string[]> | string[];
132
154
  getActiveCameraPathName(): Promise<string | null> | string | null;
133
155
  getCameraPathByTime(name?: string, time?: number): Promise<{
@@ -199,8 +221,22 @@ export interface iCoreDriver extends EventEmitter {
199
221
  setSelectorModeRotate(name: string): void;
200
222
  setSelectorPosition(name: string, position: iVectorLike): void;
201
223
  setSelectorRotation(name: string, rotation: iVectorLike): void;
224
+ /** 指定したセレクターを、targetの方向へ向ける(現在位置からの相対方向) */
225
+ setSelectorLookAt(name: string, target: iVectorLike): void;
226
+ /** 指定したセレクターの操作用ギズモだけの表示・操作可否を設定する(本体の表示はそのまま) */
227
+ setSelectorGizmoVisible(name: string, visible: boolean): void;
228
+ /** 指定したセレクター本体の色を設定する */
229
+ setSelectorColor(name: string, color: number): void;
230
+ /** 2点を結ぶ編集用のガイド線を追加・更新する */
231
+ setGuideLine(name: string, from: iVectorLike, to: iVectorLike, color?: number): void;
232
+ /** 編集用のガイド線を削除する */
233
+ removeGuideLine(name: string): void;
234
+ /** 画面上の位置(正規化デバイス座標)にある、表示中のセレクターの名前を返す(無ければnull) */
235
+ pickSelector(ndcX: number, ndcY: number): Promise<string | null> | string | null;
202
236
  setSelectorScale(name: string, scale: iVectorLike): void;
203
237
  deleteSelector(name: string): void;
204
238
  addSphereSelector(name: string, option?: iSphereSelectorOption): void;
205
239
  addBoxSelector(name: string, option?: iBoxSelectorOption): void;
240
+ /** カメラを模した四角錐アイコンのセレクターを追加する(カメラのposition編集用ポイントハンドル) */
241
+ addCameraSelector(name: string, option?: iCameraSelectorOption): void;
206
242
  }
@@ -5,6 +5,7 @@ import { iCollisionTarget } from '../../worker/tavioWorker';
5
5
  import { iLatitudeLongitude } from '../../camera/flightControls';
6
6
  import { iSphereSelectorOption } from '../../editor/selector/sphereSelector';
7
7
  import { iBoxSelectorOption } from '../../editor/selector/boxSelector';
8
+ import { iCameraSelectorOption } from '../../editor/selector/cameraSelector';
8
9
  import { MeshStandardMaterialParameters } from 'three';
9
10
  import { WorkerElementAdapter } from './workerElementAdapter';
10
11
  /**
@@ -77,6 +78,18 @@ export declare class OffscreenDriver extends EventEmitter implements iCoreDriver
77
78
  loadTavio(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
78
79
  loadTavioWasm(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
79
80
  loadPly(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
81
+ loadPlyWasm(name: string, url: string, options?: {
82
+ useSphericalHarmonics?: boolean;
83
+ }): Promise<void>;
84
+ loadSplatWasm(name: string, url: string, options?: {
85
+ useSphericalHarmonics?: boolean;
86
+ }): Promise<void>;
87
+ loadSpzWasm(name: string, url: string, options?: {
88
+ useSphericalHarmonics?: boolean;
89
+ }): Promise<void>;
90
+ loadSogWasm(name: string, url: string, options?: {
91
+ useSphericalHarmonics?: boolean;
92
+ }): Promise<void>;
80
93
  loadSplat(name: string, source: string | Blob | ArrayBuffer, option?: iLoadingOption): Promise<void>;
81
94
  loadImage(name: string, source: string | Blob | ArrayBuffer | ImageBitmap, option?: iLoadingOption): Promise<void>;
82
95
  loadCanvas(name: string, canvas: HTMLCanvasElement | OffscreenCanvas | ImageBitmap, option?: iLoadingOption): Promise<void>;
@@ -130,6 +143,11 @@ export declare class OffscreenDriver extends EventEmitter implements iCoreDriver
130
143
  saveSpzWasm(name: string, fileName?: string): Promise<any>;
131
144
  saveTavioWasm(name: string, fileName?: string, options?: any): Promise<any>;
132
145
  exportTavioWasm(name: string, options?: any): Promise<any>;
146
+ /**
147
+ * Worker 内の OffscreenCanvas で描画した内容を画像として取得する
148
+ * (Blob は構造化複製で Worker からメインスレッドへ返る)
149
+ */
150
+ captureImage(type?: string, quality?: number): Promise<Blob>;
133
151
  addTavioMesh(name: string): void;
134
152
  getFirstMeshName(): Promise<string | null>;
135
153
  createRenderView(name: string | Symbol): void;
@@ -151,9 +169,10 @@ export declare class OffscreenDriver extends EventEmitter implements iCoreDriver
151
169
  setCameraColliderSelector(selectorNames?: string[]): void;
152
170
  setInteractiveMode(interactive: boolean): void;
153
171
  getInteractiveMode(): Promise<boolean>;
154
- createCameraPath(position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean): void;
155
- addCameraPath(name: string, position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean): void;
172
+ createCameraPath(position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean, times?: number[] | null): void;
173
+ addCameraPath(name: string, position: number[][] | iVectorLike[], target: number[][] | iVectorLike[], debug?: boolean, times?: number[] | null): void;
156
174
  removeCameraPath(name: string): void;
175
+ setCameraPathDebugVisible(name: string, visible: boolean): void;
157
176
  getPathNames(): Promise<string[]>;
158
177
  getActiveCameraPathName(): Promise<string | null>;
159
178
  getCameraPathByTime(name?: string, time?: number): Promise<{
@@ -215,8 +234,15 @@ export declare class OffscreenDriver extends EventEmitter implements iCoreDriver
215
234
  setSelectorModeRotate(name: string): void;
216
235
  setSelectorPosition(name: string, position: iVectorLike): void;
217
236
  setSelectorRotation(name: string, rotation: iVectorLike): void;
237
+ setSelectorLookAt(name: string, target: iVectorLike): void;
238
+ setSelectorGizmoVisible(name: string, visible: boolean): void;
239
+ setSelectorColor(name: string, color: number): void;
240
+ setGuideLine(name: string, from: iVectorLike, to: iVectorLike, color?: number): void;
241
+ removeGuideLine(name: string): void;
242
+ pickSelector(ndcX: number, ndcY: number): Promise<string | null>;
218
243
  setSelectorScale(name: string, scale: iVectorLike): void;
219
244
  deleteSelector(name: string): void;
220
245
  addSphereSelector(name: string, option?: iSphereSelectorOption): void;
221
246
  addBoxSelector(name: string, option?: iBoxSelectorOption): void;
247
+ addCameraSelector(name: string, option?: iCameraSelectorOption): void;
222
248
  }
@@ -1,4 +1,14 @@
1
1
  import { WasmFnMap, WasmWorkerInitOptions } from './wasm-worker';
2
+ /** wasmバイナリのURL(レンダリングWorkerへ渡すため、メインスレッドで求めた値を取り出す) */
3
+ export declare const getWasmBinaryUrls: () => {
4
+ thread?: string;
5
+ noThread?: string;
6
+ };
7
+ /** wasmバイナリのURLを差し替える(レンダリングWorkerで、メインスレッドから受け取った値を使う) */
8
+ export declare const setWasmBinaryUrls: (urls: {
9
+ thread?: string;
10
+ noThread?: string;
11
+ }) => void;
2
12
  export interface ResolvedGaussianEdits {
3
13
  pointCount: number;
4
14
  gaussianData: Uint8Array;
@@ -92,8 +92,8 @@ export interface InitOutput {
92
92
  readonly registerEventHandler: (a: number) => number;
93
93
  readonly resolveGaussianEdits: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => void;
94
94
  readonly sort: (a: number, b: number, c: number) => number;
95
- readonly __wasm_bindgen_func_elem_2970: (a: number, b: number, c: number, d: number) => void;
96
95
  readonly __wasm_bindgen_func_elem_2972: (a: number, b: number, c: number, d: number) => void;
96
+ readonly __wasm_bindgen_func_elem_2974: (a: number, b: number, c: number, d: number) => void;
97
97
  readonly __wasm_bindgen_func_elem_1183: (a: number, b: number, c: number) => void;
98
98
  readonly __wbindgen_export: (a: number, b: number) => number;
99
99
  readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;