type LinkType = 'in' | 'out' | 'center' interface CurrentMouseInfo { /** * 当前鼠标所在的设计图 */ viewport: any /** * 鼠标在设计图上的 X 坐标 */ x: number /** * 鼠标在设计图上的 Y 坐标 */ z: number /** * 鼠标在设计图上的坐标, 归一化到 [0, 1] 范围 */ mouse: any } interface InitThreeOption { stateManagerId: string } interface InteractionCudOption { } /** * 渲染器操作选项 */ interface RendererCudOption { createFromInteraction: boolean } /** * 实体操作选项 */ interface EntityCudOption { /** * 原始实体对象 */ originEntity?: ItemJson } interface IGridHelper { /** * 启用坐标轴 */ axesEnabled: boolean; /** * 坐标轴大小, 单位米 */ axesSize: number; /** * 坐标轴分割数 */ axesDivisions: number; /** * 坐标轴颜色, 十六进制颜色值 */ axesColor: number; /** * 坐标轴透明度 */ axesOpacity: number; /** * 启用网格 */ gridEnabled: boolean; /** * 网格大小, 单位米 */ gridSize: number; /** * 网格分割数 */ gridDivisions: number; /** * 网格颜色, 十六进制颜色值 */ gridColor: number; /** * 网格透明度 */ gridOpacity: number; /** * 启用吸附 */ snapEnabled: boolean; /** * 吸附距离, 单位米 */ snapDistance: 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 { /** * 对应 three.js 中的 uuid, 物体ID, 唯一标识, 需保证唯一, 有方法可以进行快速的 O(1) 查找 */ id?: string /** * 物体名称, 显示用, 最后初始化到 three.js 的 name 中, 可以不设置, 可以不唯一, 但他的查找速度是 O(N) */ name?: string /** * "点"的物体单元类型, 最终对应到 measure / conveyor / task 等不同的单元处理逻辑中 */ t: string /** * 可见行, 对应 THREE.Object3D 的 visible */ v: boolean /** * 变换矩阵, 3x3矩阵, 采用Y轴向上为正, X轴向右, Z轴向前的右手坐标系 */ tf: [ /** * 平移向量 position, 三维坐标 */ [number, number, number], /** * 旋转向量 rotation, 表示绕Y轴旋转的角度, 单位为度。对应 three.js 应进行"角度"转"弧度"的换算 */ [number, number, number], /** * 缩放向量 scale, 三维缩放比例 */ [number, number, number], ] /** * 用户数据, 可自定义, 一般用在 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 /** * 其他自定义数据, 可以存储任何数据 */ [key: string]: any }, }