import * as THREE from "three"; import type { Mode } from "../application/mode"; import type { TilesetHeader } from "../model/tile3d/header"; import type { WorkObserverProto } from './workObserverProto'; import type { LooseWork, LoosePanoWork } from "./looseWorkType"; import { CubeFace } from "../types/cube"; import type { PanoId } from "../utils/pano"; import type { Histogram } from "../texture/histogram"; /** 全景视频贴片 */ export interface WorkVideo { work: Work; /** 视频源 url */ source: string; /** 视频源变化矩阵 */ matrix: THREE.Matrix4; /** 视频源长宽尺寸 */ size: THREE.Vector2; } export interface WorkCubeImage extends Record { work: Work; histogram?: Histogram; } export interface WorkTile extends WorkCubeImage { /** 层级 */ level: number; /** 尺寸 */ size: number; /** 缩放比例 */ scale: number; } /** 全景图 */ export interface WorkImage extends WorkCubeImage { /** 分辨率表 */ sizeList: readonly number[]; /** 瓦片信息 */ tiles: readonly WorkTile[]; /** 点位视频 */ video?: WorkVideo; } /** 初始化位姿参数 */ export interface WorkInitial { work: Work; /** 模态 */ mode?: Mode; /** 点位序号 */ panoIndex?: number; /** 相机水平角 */ longitude?: number; /** 相机俯仰角 */ latitude?: number; /** 相机可视角度(垂直)*/ fov?: number; /** 相机观察点位置 [x, y, z] */ offset?: THREE.Vector3; /** 相机距离观察点距离 */ distance?: number; } /** 每个点位的数据 */ export interface WorkObserver extends WorkObserverProto { /** work */ work: Work; /** 序号 */ index: number; /** 序号 */ panoIndex: number; /** * 序号 * @example * `${workCode}[${panoIndex}]` */ panoId: PanoId; /** 点位所在楼层 */ floorIndex: number; /** 点位 derived_id */ derivedId: number | string; /** 点位 derived_id_str */ derivedIdStr: string; /** 点位是否激活可用 */ active: boolean; /** 点位是否可加载 */ loadable: boolean; /** 点位全景图 */ images: WorkImage; /** * @deprecated * 可以看到的相关点位序号 * 数据和 accessibleNodes 一致,使用 accessibleNodes */ visibleNodes: readonly number[]; /** 可以连通的相关点位序号 */ accessibleNodes: readonly number[]; /** 点位和模型的地面坐标 */ standingPosition: THREE.Vector3; /** 点位和模型的观察点坐标 */ position: THREE.Vector3; /** 点位和模型的旋转对齐关系四元数 */ quaternion: THREE.Quaternion; /** 点位和模型的旋转对齐关系矩阵 */ matrix: THREE.Matrix4; } export interface WorkModelLayer { /** work */ work: Work; /** 模型类型 point_cloud | mesh | gaussian_splatting */ type: 'point_cloud' | 'mesh' | 'gaussian_splatting'; /** 模型名称 */ name: string; /** 指定上方向 */ upAxis: string; /** 如果 tileset.json 地址 */ tileset: string; } /** 模型数据 */ export interface WorkModel { /** work */ work: Work; /** 模型文件地址 at3d / domez */ file?: string; /** 模型贴图文件地址 */ textures?: readonly string[]; /** 模型贴图文件地址的父目录 */ textureBase?: string; /** 指定上方向,对于 obj, ply 等定义不明确的需要指定上方向 */ upAxis?: string; /** 模型的地理坐标数据 */ coordinate?: NonNullable['coordinate']; /** 3d tile */ layers: readonly WorkModelLayer[]; } export interface Work { /** 数据签发人 */ issuer: string; /** 编号 */ workCode: string; /** 内部项目 id */ projectId?: string; /** 允许访问的安全域名 */ allowHosts: readonly string[]; /** 过期时间 */ expire: Date; /** 名称 */ name: string; /** 根地址 */ baseURL: string; /** 初始化参数 */ initial: WorkInitial; /** 相对位姿 */ transform: THREE.Matrix4; /** 模型参数 */ model?: WorkModel; /** 全景点位信息 */ observers: readonly WorkObserver[]; } export declare class Work { jsonp: boolean; shortPath: boolean; observerBox: THREE.Box3; /** * 控制参数 * @deprecated 通过 work.transform 替换 */ options: { /** * 位姿修正 * @deprecated 通过 work.transform 替换 */ transform: THREE.Matrix4; }; /** * 原始数据 * @deprecated 通过 work.toJSON 替换 */ raw: { works: string[]; }; /** * 解析 Work 数据 * @param obj - work 数据,从如数开发者平台获取 * @param options - 配置参数, 可以在此二次设置 baseURL 等参数 * @returns - 签署过的 Work 数据结构 */ static parse: typeof parseWork; constructor(obj: Work | LoosePanoWork | LooseWork | (Work | LooseWork)[] | any, options: ParseOptions); getURL(source: string): string; verifyURL(source: string): boolean; toJSON(): any; } export type ParseOptions = { /** 位姿 */ transform?: THREE.Matrix4 | number[]; /** 重置 WorkCode */ workCode?: string | ((input: any) => string); /** 重写资源前缀 */ baseURL?: string; /** 资源地址使用短地址 */ shortPath?: boolean; /** 资源使用 jsonp 方式发布 */ jsonp?: boolean; }; /** * 解析 Work 数据 * @param obj - work 数据,从如数开发者平台获取 * @param options - 配置参数, 可以在此二次设置 baseURL 等参数 * @returns - 签署过的 Work 数据结构 */ export declare function parseWork(obj: Work | LoosePanoWork | LooseWork | string | any, options?: ParseOptions): Work;