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.
 
 
 

452 lines
8.2 KiB

type LinkType = 'in' | 'out' | 'center'
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
}
/**
* 实体操作选项
*/
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 // 货架(地堆货位)的格
}
bays?: {
bayWidth: 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 Loadable {
/**
* 拿起物体
*/
pickupItem(item: string)
/**
* 卸下物体
*/
dropItem(item: ItemJson, storeItemId: string, bay?: number, level?: number, cell?: number): void
}
/**
* 搬运能力
*/
interface Carry {
/**
* 是否正在搬运物体
*/
isCarrying: boolean
/**
* 是否正在装载
*/
isLoading: boolean
/**
* 是否正在卸载
*/
isUnloading: boolean
/**
* 装载
*/
addLoad(item: string): void
/**
* 卸载
*/
addUnload(item: string, rack: string, bay?: number, level?: number): void
}
/**
* 行走能力
*/
interface Walk {
isWalking: boolean
/**
* 行走到指定位置
*/
addTravel(pos: Vector3IF | string): void
/**
* 旋转到指定角度
*/
addRotation(angle: number): void
}
/**
* 叉臂能力
*/
interface ForkArm {
isArmExtended: boolean
/**
* 升出叉臂
*/
addArmExtender(): void
/**
* 收回叉臂
*/
addArmRetractor(): void
}
/**
* 升降塔能力
*/
interface LiftingArm {
isArmRaised: boolean
/**
* 升起叉臂
*/
addArmRaise(hight: number): void
/**
* 降下叉臂
*/
addArmLower(): void
}
interface EntityIf {
id: string
t: string
item: ItemJson
object: Object3DIF
/**
* 取消所有任务
*/
cancelTask(): void
/**
* 暂停任务
*/
taskPause(): void
/**
* 恢复任务
*/
taskResume(): void
/**
* 开始执行任务
*/
taskStartRun(): void
/**
* 是否已暂停
*/
isPaused: boolean
/**
* 当前任务数
*/
taskCount: number
/**
* 当前任务是否正在运行
*/
taskIsRunning: boolean
}
/**
* CL2 叉车接口
*/
interface Cl2If extends EntityIf, Carry, Walk, ForkArm, LiftingArm {
}
/**
* CLX 叉车接口
*/
interface ClxIf extends EntityIf, Carry, Walk, ForkArm, LiftingArm {
}