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

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
}