type LinkType = 'in' | 'out' | 'center' type LinkDirection = '<-' | '->' | '<->' | '' type CursorMode = 'normal' | 'ALink' | 'SLink' | 'PointCallback' | 'PointAdd' | 'LinkAdd' | 'LinkAdd2' | 'Measure' | 'MeasureArea' | 'MeasureAngle' | 'selectByRec' interface CurrentMouseInfo { /** * 当前鼠标所在的设计图 */ viewport: any /** * 鼠标在设计图上的 X 坐标 */ x: number /** * 鼠标在设计图上的 Y 坐标 */ z: number /** * 鼠标在设计图上的坐标, 归一化到 [0, 1] 范围 */ mouse: any isShiftKey: boolean isCtrlKey: boolean isAltKey: boolean isMetaKey: boolean } interface InitThreeOption { stateManagerId: string } interface InteractionCudOption { } /** * 渲染器操作选项 */ interface RendererCudOption { createFromInteraction?: boolean /** * 是否是模拟时创建的实体 */ isRuntime?: boolean //THREE.Vector3 position?: any //THREE.Quaternion rotation?: any getParentObject3D?: (viewport:any, item: ItemJson) => any } /** * 实体操作选项 */ interface EntityCudOption { /** * 原始实体对象 */ originEntity?: ItemJson } interface IGridHelper { /** * 启用坐标轴 */ axesEnabled: boolean; /** * 坐标轴大小, 单位米 */ axesSize: number; /** * 坐标轴颜色, 十六进制颜色值 */ axesColor: number; /** * 坐标轴透明度 */ axesWidth: number; /** * 启用网格 */ gridEnabled: boolean; /** * 网格大小, 单位米 */ gridSize: number; /** * 网格分割数 */ gridDivisions: number; /** * 网格颜色, 十六进制颜色值 */ gridColor: number; /** * 网格透明度 */ gridOpacity: number; /** * 背景颜色, 十六进制颜色值 */ backgroundColor: number; /** * 启用吸附 */ snapEnabled: boolean; /** * 吸附距离, 单位米 */ snapDistance: number; } interface ItemMetrix { /** * 物体ID, 唯一标识 */ id: string /** * 变换矩阵, 3x3矩阵, X轴正增长向右, Y轴正增长向屏幕外, Z轴正增长向下。右手坐标系 */ tf: [ /** * 平移向量 position, 三维坐标 * [0]=x轴向右, [1]=y轴高度向屏幕外, [2]=z轴向下 */ [number, number, number], /** * 旋转向量 rotation, 单位为度 * [0]=X轴逆向旋转角度, [1]=Y轴逆向旋转角度, [2]=Z轴逆向旋转角度 * 对应 three.js 应进行"角度"转"弧度"的换算 */ [number, number, number], /** * 缩放向量 scale, 三维缩放比例, [0]=X宽度, [1]=Y高度, [2]=Z长度 */ [number, number, number], ] } /** * 物体单元(点) * 举例: * { * id: 'p1', // 物体唯一ID * t: 'measure', // 物体类型, measure表示测量, 需交给 itemType.name == 'measure' 的组件处理 * tf: [ // 变换矩阵, 3x3矩阵, 采用Y轴向上为正, X轴向右, Z轴向前的右手坐标系 * [-9.0, 0, -1.0], // 平移向量 position * [0, 0, 0], // 旋转向量 rotation, 表示绕Y轴旋转的角度, 单位为度。对应 three.js 应进行"角度"转"弧度"的换算 * [0.25, 0.1, 0.25] // 缩放向量 scale * ], * dt: { // 实体的自定义数据 * label: '测量1', // 标签名称, 显示用 * color: '#ff0000', // 颜色, 显示用. 十六进制颜色值 * center: ['p2'], // S连线(又称逻辑连线), 与其他点之间的无方向性关联, 关系的起点需要在他的 dt.center[] 数组中添加目标点的id, 关系的终点需要在他的 dt.center[] 数组中添加起点的 id * in: [], // A连线(又称物体流动线)的输入, 关系的终点需要在 dt.in[] 数组中添加起点的 id * out: [] // A连线(又称物体流动线)的输出, 关系的起点需要在 dt.out[] 数组中添加目标点的 id * ...其他属性 * } * } */ interface ItemJson extends ItemMetrix { /** * 物体名称, 显示用, 最后初始化到 three.js 的 name 中, 可以不设置, 可以不唯一, 但他的查找速度是 O(N) */ name?: string /** * "点"的物体单元类型, 最终对应到 measure / conveyor / task 等不同的单元处理逻辑中 */ t: string /** * 可见行, 对应 THREE.Object3D 的 visible */ v: boolean /** * 用户数据, 可自定义, 一般用在 three.js 的 userData 中 */ dt: { /** * 标签名称, 显示用, 每个单元类型的 renderer 有自己的渲染逻辑 */ label?: string /** * 颜色, 每个单元类型的 renderer 有自己的渲染逻辑 */ color?: string /** * S连线(又称逻辑连线), 与其他点之间的无方向性关联, 关系的起点需要在他的 dt.center[] 数组中添加目标点的id, 关系的终点需要在他的 dt.center[] 数组中添加起点的 id */ center?: string[] /** * A连线(又称物体流动线)的输入, 关系的终点需要在 dt.in[] 数组中添加起点的 id */ in?: string[] /** * A连线(又称物体流动线)的输出, 关系的起点需要在 dt.out[] 数组中添加目标点的 id */ out?: string[] /** * 是否可以被选中, 默认 true */ selectable?: boolean /** * 是否受保护, 不可在图形编辑器中拖拽, 默认 false */ protected?: boolean /** * 物品所在的存储位置 */ storeAt?: { item: string, // 货架(地堆货位)ID bay?: number, // 货架(地堆货位)的列 level?: number // 货架(地堆货位)的层 cell?: number // 货架(地堆货位)的格 } /** * 连接存储的位置, 用于在图形编辑器中显示连接线 */ linkStore?: { item: string, // 货架(地堆货位)ID bay?: number, // 货架(地堆货位)的列 level?: number // 货架(地堆货位)的层 cell?: number // 货架(地堆货位)的格 }[] bays?: { bayWidth: number, topHeight: number, levelHeight: number[] }[] /** * 其他自定义数据, 可以存储任何数据 */ [key: string]: any }, } /** * Object3D 与 Mesh / Geometry 都能存储的用户相关数据 */ interface UserData { /** * 类型, 用于哪个模块处理该对象 */ t: string /** * 实体 ID, 用于标识该对象对应的 ItemJson 的 id */ entityId: string /** * createType='line' 时, 起点 ID */ startId?: string /** * createType='line' 时, 终点 ID */ endId?: string /** * 关联显示文本标签的 ID */ labelObjectId?: string /** * 创建类型, 用于区分是点还是线 */ createType: 'point' | 'line' /** * 是否可拖拽, 用于图形编辑器中拖拽操作 */ draggable: boolean /** * 是否可选中, 用于图形编辑器中选中操作 */ selectable: boolean [key: string]: any } /** * 三维物体对象 */ type Object3DIF = any interface ServerResponse { success: boolean, msg: string, data: T } interface VData { /** * 场景数据 */ items: ItemJson[] /** * 楼层的其他数据 */ infos: any /** * 是否发生了变化,通知外部是否需要保存数据 */ isChanged: boolean /** * 所有地图目录 */ catalog: Catalog /** * 服务器地址 */ server?: string /** * 项目ID */ project_uuid?: string /** * 项目名称 */ project_label?: string /** * 子系统集合 */ sub_system_list?: string[] /** * 当前楼层代码 */ catalogCode: string /** * 世界模型公共数据 */ worldData: any /** * 当前连接的运行环境ID */ currentRunEnvId: number } interface CatalogItem { catalogCode: string; // 楼层代码 label: string; // 楼层显示名称 } interface CatalogGroup { label: string; // 楼层组名称 items: CatalogItem[]; // 楼层组中的楼层列表 } /** * 世界模型目录数据 */ type Catalog = CatalogGroup[]; interface IControls { init(viewport: any): void dispose(): void } interface Vector3IF { x: number; y: number; z: number; /** * 计算当前向量到另一个向量的距离 */ distanceTo(vector: Vector3IF): number; } interface QuaternionIF { x: number, y: number, z: number }