UNPKG

@realsee/dnalogel

Version:
129 lines (128 loc) 4.89 kB
import * as THREE from 'three'; import { Object3D } from '../../shared-utils'; import { LineSegments } from '../../shared-utils'; import type { Controller } from '../Controller'; import type * as PluginType from '../typing'; import LabelItem from '../../components/AreaLabel/LabelItem.svelte'; import { Subscribe } from '../../shared-utils/Subscribe'; declare class AreaMakerModelGroup extends Object3D { private areaMakerItem; constructor(areaMakerItem: AreaMakerItem); raycast(raycaster: THREE.Raycaster, intersects: THREE.Intersection[]): void; } export declare class AreaMakerItem { id: string | number; /** 标注名称 */ name: string; /** 标注几何体 */ makerObject: THREE.Mesh<THREE.ExtrudeBufferGeometry, THREE.MeshBasicMaterial>; /** 标注几何体的边框 */ outline: LineSegments<THREE.EdgesGeometry, THREE.LineBasicMaterial>; /** 标注底面 Y 坐标 */ bottomY: PluginType.ServerAreaMakerItem['object_data']['bottom_y']; /** 标注透明度 */ opacity: PluginType.ServerAreaMakerItem['object_data']['opacity']; /** 标注高度 */ height: PluginType.ServerAreaMakerItem['object_data']['height']; /** 标注所在楼层 */ floorIndex: PluginType.ServerAreaMakerItem['floor_index']; /** 标注底面形状 */ shape: THREE.Shape; /** 是否被挂载 */ mounted: boolean; /** 查询问题使用的调试对象 */ checkMsg: { /** 当标注没有展示时,可以通过这个字段查看原因 */ checkVisibleMsg: string; /** 当标注标签没有展示时,可以通过这个字段查看原因 */ checkTagVisibleMsg: string; }; /** 模型容器 */ modelGroup: AreaMakerModelGroup; /** 标注是否可见 */ visible: boolean; /** 标注标签实例 */ tagApp: LabelItem | null; /** 标注标签是否可见 */ tagVisible: boolean | null; /** 标注标签的世界坐标 */ tagPosition: THREE.Vector3; /** 标注标签的 NDC 坐标 */ tagNDCPosition: THREE.Vector3; /** 标注标签的 transform */ tagTransform: { left: number; top: number; }; /** 标注标签的显示层级 */ tagZIndex: number; /** 标注实例的事件处理器 */ hooks: Subscribe<PluginType.AreaMakerItemEventMap>; /** 自定义 Dom */ itemRenderer?: PluginType.ItemRenderer; /** 数据 */ private data; /** Plugin 实例 */ private plugin; /** 标注透明度动画 */ private opacityAnime?; /** 是否在容器 resize 动画中 */ private isInContainerResizeAnimation; /** 监听容器 resize 的计时器 id,用于判断 resize 过程是否结束 */ private containerResizeTimeoutID; private resizeObserver?; constructor(plugin: Controller, data: PluginType.ServerAreaMakerItem); /** 挂载标注 */ mount(): void; /** 卸载标注 */ unmount(): void; /** 更改标注透明度 * @param opacity 标注透明度,范围:0-1 */ setOpacity(opacity: number): void; /** 更改标注颜色 * @param color 标注颜色,支持 hex * @example setColor('#FF0000') */ setColor(color: string): void; /** 更改标注高度 * @param height 标注高度,单位:米 */ setHeight(height: number): void; /** 更改标注标签的显示层级 * @description 为什么需要这个方法 * 在相机朝向或位置发生变化时,各个标签所在的坐标与相机的远近关系发生了变化,所以标签的层级也会有变化。 * 比如: * - 相机 -> 标签 A -> 标签 B: 标签 A 在标签 B 的前面 * - 标签 A <- 标签 B <- 相机: 标签 A 在标签 B 的后面 * 但是当前元素是无法感知到这种变化的,所以需要通过父元素调用这个方法来更新标签的层级。 */ setTagZIndex(zIndex: number): void; /** 显示标注 */ /** 隐藏标注 */ /** 透明度动画 */ private doOpacityAnime; /** 插件 Config 变化时更新自身 depthTest */ private onPluginConfigChange; /** 插件整体可见性变化时,需要更新自身可见性 */ private onPluginStateChange; /** 更新标注可见性 */ private updateVisible; /** 检测标注是否可见 */ private checkVisible; /** 更新标注标签 */ private updateTag; /** 更新标注标签的 NDC Position */ private updateTagNDCPosition; /** 更新标注标签的 transform */ private updateTagDomTransform; /** 更新标注标签可见性 */ private updateTagVisible; /** 检测标注标签是否可见 */ private checkTagVisible; /** 相机位姿发生变化时,更新标签 */ private onFiveCameraUpdate; /** tag container DOM 发生 resize */ private onContainerResize; } export {};