You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
425 lines
8.3 KiB
425 lines
8.3 KiB
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<T> {
|
|
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
|
|
}
|
|
|