import * as THREE from "three"; import { TextureLoader } from "../texture/loader"; import { BaseController, BaseControllerInitArgs } from "./base"; import { Pose } from "../types/pose"; import { State } from "../types/state"; import { MovePanoEffect } from "../types/movePanoEffect"; import { GestureEvent } from "../utils/event"; import { Works, WorkObserver } from "../work"; import { ModelScene } from "../model"; import { Motion } from "../utils/motion"; import { IntersectMeshInterface } from "../types/intersectMeshInterface"; type LocationMotion = Motion<"x" | "y" | "z" | "distance">; type PerspToOrthoMotion = Motion<"perspToOrtho">; type ModelAlphaMotion = Motion<"modelAlpha">; interface MapviewControllerCustomInitArgs { /** 默认水平角 */ defaultLongitude?: number; /** 默认俯仰角 */ defaultLatitude?: number; /** 默认相机距离 */ defaultDistance?: number; /** 最大俯仰角 */ maxLatitude?: number | ((fov: number) => number); /** 最小俯仰角 */ minLatitude?: number | ((fov: number) => number); /** * 相机类型 * perspective 透视相机 * orthographic 正交相机 * auto 在俯视为正交相机, 斜视为透视相机(默认) */ cameraType?: "perspective" | "orthographic" | "auto"; /** * 相机电子围栏 */ cameraFence?: THREE.Box3 | THREE.Sphere | null; /** 鼠标焦点环自定义创建器 */ intersectMeshCreator?: () => IntersectMeshInterface; } declare const defaultMapviewControllerCustomInitArgs: Required; type MapviewControllerInitArgs = BaseControllerInitArgs & MapviewControllerCustomInitArgs; declare class MapviewController extends BaseController implements Required { defaultLongitude: number; defaultLatitude: number; defaultDistance: number; maxLatitude: number | ((fov: number) => number); minLatitude: number | ((fov: number) => number); cameraType: "perspective" | "orthographic" | "auto"; cameraFence: THREE.Box3 | THREE.Sphere | null; intersectMeshCreator: () => IntersectMeshInterface; locationMotion: LocationMotion; modelAlphaMotion: ModelAlphaMotion; perspToOrthoMotion: PerspToOrthoMotion; protected panState?: { x: number; y: number; defaultPrevented: boolean; buttons: number; target: THREE.Vector3; pointerLength: number; }; protected pinchState?: { x: number; y: number; scale: number; distance: number; }; protected intersectMesh: IntersectMeshInterface; protected pendingTextureId: string | null; protected textureLoader: TextureLoader; static parseArgs(args: MapviewControllerInitArgs): Required; static distanceFromModel(modelScene: ModelScene, fov: number, aspect: number): number; static initAnimationEndState(args: MapviewControllerInitArgs): State; constructor(args: MapviewControllerInitArgs); updateConfiguration(args: MapviewControllerCustomInitArgs): boolean; /** 析构函数 */ destroy(): void; /** 是否准备好,即不在用户操作中,并且不再动画中 */ isReady(): boolean; /** 生命周期:更新 Work */ updateWork(works: Works, state: Partial, options: { duration: number; effect: MovePanoEffect; }, userAction: boolean): boolean; /** 生命周期:更新模型 */ updateModel(modelScene: ModelScene): void; /** 转动摄像头 */ updateCamera(pose: Partial, duration: number, userAction: boolean): Promise; /** 通过帧动画转动摄像头 */ updateCameraWithKeyframes(keyframes: { progress: number; value: Pose; key?: string; }[], duration: number, userAction: boolean): Promise; /** 生命周期:时间迭代 */ updateTime(time: number, deltaTime: number): void; /** 获取目标姿态 */ getTargetState(): State; /** 初始化动画 */ protected initAnimation(): Promise; /** * 方向射线上寻找下一个目标点位 * @param raycaster - 方向射线 * @returns 方向射线上寻找下一个目标点位 */ protected getForwardObserverOrNot(raycaster: THREE.Raycaster): WorkObserver | null; /** 计算 屏幕像素 offset 与 转动间的关系 */ protected coordinatesForOffset(offset: { x: number; y: number; }): { longitude: number; latitude: number; }; /** 惯性滚动 */ protected requestMomentumMovement(event: GestureEvent, isFirst: boolean, velocity: { longitude: number; latitude: number; x: number; y: number; z: number; }, duration: number): void; protected fixFinalState(state: State): void; /** 触摸 Pan 事件,相机转动 */ protected onPanGesture(event: GestureEvent): void; /** 触摸 Pinch 事件, 相机缩放 */ protected onPinchGesture(event: GestureEvent): void; /** 鼠标移动事件 展示交点环 */ protected onMouseMove(event: GestureEvent): void; /** 鼠标滚轮事件 相机缩放 */ protected onMouseWheel(event: GestureEvent): void; /** 触摸 点击屏幕 */ protected onTapGesture(event: GestureEvent): void; /** 触摸 双点屏幕 */ protected onDblTapGesture(event: GestureEvent): void; /** 隐藏焦点环 */ protected hideIntersectMesh(): void; } export { MapviewController, MapviewControllerInitArgs, MapviewControllerCustomInitArgs, defaultMapviewControllerCustomInitArgs, };