UNPKG

@realsee/dnalogel

Version:
122 lines (121 loc) 5.37 kB
import type { PartialDeep } from 'type-fest'; import type { BaseOptions } from '../../base/BasePlugin'; import type { Five } from '@realsee/five'; import type { ShowState } from '../utils/correctFiveState'; import type { FloorplanServerData } from '../typings/floorplanServerData'; import type { State, Config, EventMap, ShowOptions, HideOptions, Parameters, PluginData, PluginServerData, HighlightData } from './typing'; import * as BasePlugin from '../../base/BasePluginWithData'; export declare class Controller extends BasePlugin.Controller<State, EventMap, PluginServerData, PluginData> { name: string; state: State; protected data?: PluginData; /** 展示户型图时,需要正确的状态 */ protected showState: ShowState; /** show 动画的公共 Promise */ protected showPromise?: Promise<void>; private app?; private panoIndex; private floorIndex; private selector?; /** 公共 Promise 的 reject 方法 */ private showRejection?; /** 户型图父容器 */ private wrapper?; /** 户型图主容器 */ private container; /** 展示户型图图前,Five 的 Panorama Longitude */ private lastPanoramaLongitude; /** 户型图大小 */ private size; private defaultMissingFloorConfig; /** 是否已经执行过事件监听 */ private hasAddedEventListener; /** 上一次隐藏是否是用户调用了 hide 导致的 */ private isHiddenByHideFunc; /** 高亮区域 */ private highlightData; private store; constructor(five: Five, params?: Parameters); load(serverData: PluginServerData | FloorplanServerData, state?: Partial<State>, userAction?: boolean): Promise<void>; /** 把插件的渲染DOM插入到对应的容器中去 */ appendTo(wrapper: Element): this; /** 启用插件 */ enable(options?: BaseOptions): void; /** 禁用插件 */ disable(options?: BaseOptions): void; /** 销毁插件 */ dispose: () => void; /** 展示户型图 * 1. show 函数大部分情况下需要耗时 * 2. 如果当前已经在展示中,将不会触发任何事件 * 3. 如果展示过程被中断,将抛出错误 * 4. 多次调用 show 方法,只会触发一次 showAnimationEnded 事件,但是展示结果会取决于最后一次调用参数 * 5. 如果多次调用 show 方法,参数与上次参数不一致时,上次 show Promise 会被 reject * @param opts.floorIndex 楼层 * @param opts.modelOpacity 模型透明度 * @param opts.immediately 是否立即展示 * @param opts.isAutoShow 是否是自动展示 * @param opts.userAction 是否是用户行为 */ show: (options?: Omit<Partial<ShowOptions>, 'isAutoShow'>) => Promise<void>; /** 隐藏户型图 */ hide: (options?: Partial<HideOptions>) => Promise<void>; /** 更改插件 State */ setState(state: PartialDeep<State>, options?: BaseOptions): void; changeConfigs(config: Partial<Config>, userAction?: boolean): void; /** 更新户型图大小 */ updateSize: () => boolean; /** 根据旋转角度计算 pxmm * @description 当 longitude 大于 45° 或小于 -45°(相对于基准方向)时,使用 Z 轴计算 */ private getPxmmWithRotation; /** 使用 Z 轴计算 pxmm * @description 当相机旋转导致 X 轴接近垂直于屏幕时,改用 Z 轴计算 */ private getPxmmZAxis; highlight: (highlightData: HighlightData) => void; unhighlight: () => void; /** 更新展示状态 * @description 可以更新 longitude、latitude、fov 等参数 * @param showState 需要更新的状态,会与现有状态合并 * @example * // 更新 longitude * plugin.updateShowState({ longitude: Math.PI / 2 }) */ updateShowState: (showState: Partial<ShowState>) => void; protected formatData(serverData: PluginServerData): Promise<PluginData>; private _disable; private _enable; private _show; private _hide; private updateState; /** 如果用户是通过 selector 设置父容器,需要在 modelLoaded 之后把 container 自动放到父容器里 * * - TODO: 等 selector 功能下掉之后删除这个逻辑 */ private initContainer; private handleClick; private addEventListener; private removeEventListener; /** modelLoaded 之后自动执行 append container 操作 */ private onFiveModelLoaded; /** 更改模型时,自动隐藏户型图 */ private onFiveModeChange; /** 惯性结束后,判断能否自动展示户型图 */ private onFiveInteriaPan; /** panoIndex 改变时,更新 floorIndex */ private onFivePanoArrived; /** cameraUpdate 时判断户型图是否应该自动隐藏 */ private onFiveCameraUpdate; /** 在户型图展示时阻止多指操作, 阻止鼠标放大 */ private onFiveWantsGesture; /** 户型图展示中,转动三维模型,结束时应该自动修复模型状态 */ private onFiveWantsPanGesture; /** 阻止点击分间走点 */ private onFiveWantsTapGesture; /** 从 Panorama 切换到其他模态时,记录当前的相机水平视角 */ private onFiveWantsChangeMode; /** 模型楼层高亮改变时,自动进行楼层切换 */ private onModelShownFloorChange; private render; }