/** * 点群データプロバイダ * * レンダラーに点群データを与えるためのクラスです。 * コンストラクタの引数によって実際の処理が決定されます。 * 独自の点群プロバイダを作成する際は、通常このクラスを直接継承するのではなく {@link PointCloudProvider.Hook} を用いる方法で行います。 * */ declare class PointCloudProvider { private _status; private readonly _init_resolvers; private readonly _hook; protected _time_info_handler?: PointCloudProvider.TimeInfoHandler; private _info; private _version; private _requests; constructor(hook: PointCloudProvider.Hook, option?: PointCloudProvider.Option); /** * 初期化します。 * * @see {@link PointCloudProvider.Hook.init} */ init(): Promise>; getInfo(): Required; /** * リクエスト可能な状態かを返す。 * 初期化が完了しているかだけではなく、現在処理中のリクエスト数も考慮した上でリクエスト可能な状態か判断する。 */ isReady(): boolean; /** * タイル画像をリクエストする * 2回以上呼ばれた場合は、処理をスキップし初回と同様の値を返却する。 * @param level レベル * @param x x * @param y y * @param z z * @param options.signal リクエストキャンセル用のシグナル * @see {@link PointCloudProvider.Hook.requestTile} */ requestTile(level: number, x: number, y: number, z: number, options?: { signal?: AbortSignal; }): Promise; flushQueue(): void; toString(): string; /** * 読み込み情報のハンドラを指定する * @param time_info_handler 読み込み情報取得時のハンドラ */ setTimeInfoHandler(time_info_handler: PointCloudProvider.TimeInfoHandler): void; /** * 読み込み情報のハンドラを破棄する */ clearTimeInfoHandler(): void; /** * 読み込み情報のハンドラが変更されたことを通知します。 */ protected onChangeTimeInfoHandler(time_info_handler_available: boolean): void; /** * 読み込み情報のハンドラが指定されているかを取得します。 */ protected isTimeInfoHandlerAvailable(): boolean; /** * 実行中のリクエスト数を返す */ getNumberOfRequests(): number; /** * 破棄 */ destroy(): void; } declare namespace PointCloudProvider { /** * 点群プロバイダフック * * 独自の点群プロバイダを作成する際に利用します。 * * オブジェクトによる実装 * 単純な動作の場合は下記のように簡易的に実装することができます。 * @example * ```ts * viewer.point_cloud_collection.add(new PointCloudProvider({ * init: () => { * // 必要に応じて初期化します。 * }, * requestTile: ( level, x, y, z ) => { * // タイルを取得します。 * }, * })); * ``` * * クラスによる実装 * 下記のように実装することで、複雑なプロバイダを記述することができます。 * @example * ```ts * // クラスとして定義 * class ProviderHook implements mapray.PointCloudProvider.Hook { * constructor( id, option ) { * // タイルへのアクセスに必要な情報などを受け取る * } * async init() { * // 認証やログインなどを行い、アクセスできるようにする * } * async requestTile( level, x, y, z ) { * // 実際にデータにアクセスする * } * } * * // インスタンス化して利用します。 * viewer.point_cloud_collection.add( new ProviderHook( "id", { token: "xxxxxx" } ) ); * ``` * */ interface Hook { /** * タイルプロバイダを初期化しリクエストできる状態にします。 * * - リクエストできる状態に遷移できなかった場合は必ず例外をスローします * - この関数は2回以上呼ばれることはありません * * @param signal 中断信号(可能であれば処理を中断する) * @returns タイルプロバイダの情報 */ init(options?: { signal?: AbortSignal; }): Promise; /** * タイルをリクエストします。 * * 座標が (level, x, y, z) のタイルデータを要求します。 * {@link Hook.init} の呼び出しに成功した場合に、レンダラが必要なタイミングで何度も呼び出します。 * * @param level レベル * @param x X タイル座標 * @param y Y タイル座標 * @param z Z タイル座標 * @param signal 中断信号(可能であれば処理を中断する) * * @return リクエスト結果 */ requestTile(level: number, x: number, y: number, z: number, options?: { signal?: AbortSignal; }): Promise; } interface Data { header: { childFlags: number; debug1: number; indices: Int32Array; average: Float32Array; eigenVector: [Float32Array, Float32Array, Float32Array]; eigenVectorLength: [number, number, number]; }; body: Float32Array; times?: TimeInfo; } interface Option { time_info_handler?: TimeInfoHandler; } /** * 時間計測 */ interface TimeInfo { path: string; start: number; end: number; } /** * 時間計測終了時のコールバック関数定義 */ type TimeInfoHandler = (time_info: TimeInfo) => void; interface CloudInfo { url: string; fileinfo: Info; } interface Info { version?: string; format: string; url?: string | null; content_root: [level: number, x: number, y: number, z: number]; } function applyInfoWithDefaults(info: Info): Required; function isCloudInfo(info: CloudInfo | Info): info is CloudInfo; } export default PointCloudProvider; //# sourceMappingURL=PointCloudProvider.d.ts.map