import { KeydownType, type Options } from '@meta2d/core'; import { invert } from 'lodash-es'; /** * 地图点位类型枚举 * 定义了场景编辑器中所有支持的点位类型 * 数值1-9为小点位,10以上为大点位(有特殊图标) */ //#region 点位 export enum MapPointType { /** 普通点 - 基础导航点,机器人可通过 */ 普通点 = 1, /** 等待点 - 机器人等待或暂停的位置 */ 等待点, /** 避让点 - 机器人主动避让其他机器人的点位 */ 避让点, /** 临时避让点 - 动态生成的临时避让位置,有特殊标记 */ 临时避让点, /** 库区点 - 仓储作业区域 */ 库区点, /** 密集库区点 - 密集库区点位 */ 密集库区点, /** 电梯点 - 机器人乘坐电梯的专用点位 */ 电梯点 = 11, /** 自动门点 - 需要自动门控制的通行点位 */ 自动门点, /** 充电点 - 机器人充电的专用位置,可绑定特定机器人 */ 充电点, /** 停靠点 - 机器人停靠等待的位置,可绑定特定机器人 */ 停靠点, /** 动作点 - 机器人执行特定动作的位置(如取货、放货) */ 动作点, /** 禁行点 - 禁止机器人通过的点位 */ 禁行点, } /** * 点位类型映射数组,用于UI显示和选择 * 过滤掉非数字类型的枚举项 */ export const MAP_POINT_TYPES = Object.freeze( <[string, MapPointType][]>Object.entries(MapPointType).filter(([, v]) => typeof v === 'number'), ); //#endregion /** * 点位扩展类型映射,用于UI显示和选择 */ export const MAP_POINT_EXTENSION_TYPES = Object.freeze({ [MapPointType.等待点]: [MapPointType.临时避让点], [MapPointType.库区点]: [MapPointType.临时避让点], [MapPointType.临时避让点]: [MapPointType.等待点, MapPointType.库区点, MapPointType.密集库区点], [MapPointType.密集库区点]: [MapPointType.动作点, MapPointType.临时避让点], [MapPointType.动作点]: [MapPointType.密集库区点], }); /** * 地图路线类型枚举 * 定义了连接点位之间的路径类型 */ //#region 线路 export enum MapRouteType { /** 直线 - 两点间直线连接 */ 直线 = 'line', /** 二阶贝塞尔曲线 - 带一个控制点的曲线 */ 二阶贝塞尔曲线 = 'bezier2', /** 三阶贝塞尔曲线 - 带两个控制点的曲线,更灵活 */ 三阶贝塞尔曲线 = 'bezier3', } /** * 路线类型反向映射,用于从字符串值获取枚举键 */ export const MAP_ROUTE_TYPE = invert(MapRouteType); /** * 路线类型映射数组,用于UI显示和选择 */ export const MAP_ROUTE_TYPES = Object.freeze(<[string, MapRouteType][]>Object.entries(MapRouteType)); /** * 路线通行类型枚举 * 定义了路线的通行权限和限制 */ export enum MapRoutePassType { /** 无限制 - 所有机器人都可以通行 */ 无, /** 仅空载可通行 - 只有空载的机器人可以通过 */ 仅空载可通行, /** 仅载货可通行 - 只有载货的机器人可以通过 */ 仅载货可通行, /** 禁行 - 禁止所有机器人通行,显示为虚线 */ 禁行 = 10, } /** * 路线通行类型映射数组,用于UI显示和选择 */ export const MAP_ROUTE_PASS_TYPES = Object.freeze( <[string, MapRoutePassType][]>Object.entries(MapRoutePassType).filter(([, v]) => typeof v === 'number'), ); //#endregion /** * 地图区域类型枚举 * 定义了场景中不同功能的区域类型 */ //#region 区域 export enum MapAreaType { /** 库区 - 仓储作业区域,包含动作点 */ 库区 = 1, /** 互斥区 - 同时只能有一个机器人进入的区域 */ 互斥区 = 11, /** 非互斥区 - 可以同时有多个机器人进入的区域 */ 非互斥区, /** 约束区 - 机器人运动受到特定约束的区域 */ 约束区, } /** * 区域类型映射数组,用于UI显示和选择 */ export const MAP_AREA_TYPES = Object.freeze( <[string, MapAreaType][]>Object.entries(MapAreaType).filter(([, v]) => typeof v === 'number'), ); //#endregion /** * 场景编辑器核心配置 * 基于Meta2D引擎的编辑器配置参数 */ export const EDITOR_CONFIG: Options = { /** 键盘事件类型 - 禁用所有键盘快捷键 */ keydown: KeydownType.None, /** 严格作用域 - 限制编辑操作范围 */ strictScope: true, /** 移动连接线 - 禁用拖动时自动移动连接的线条 */ moveConnectedLine: false, /** 禁用输入 - 禁用文本输入功能 */ disableInput: true, /** 禁用旋转 - 禁用图形旋转功能 */ disableRotate: true, /** 禁用尺寸调整 - 允许图形大小调整 */ disableSize: false, /** 禁用锚点 - 禁用连接锚点显示 */ disableAnchor: false, /** 禁用空线条 - 不允许创建没有连接点的线条 */ disableEmptyLine: true, /** 禁用重复线条 - 不允许在同一对点之间创建多条线 */ disableRepeatLine: true, /** 最小缩放比例 - 画布最小缩放到1% */ minScale: 0.01, /** 最大缩放比例 - 画布最大缩放到401% */ maxScale: 4.01, /** 缩放步长 - 每次滚轮滚动的缩放幅度(5%) */ scaleOff: 0.05, /** 默认锚点 - 不设置默认锚点 */ defaultAnchors: [], /** 全局透明度 - 普通状态下图形透明度(0为不透明) */ globalAlpha: 0, /** 激活状态全局透明度 - 选中状态下图形透明度 */ activeGlobalAlpha: 0, /** 默认字体大小 - 14像素 */ fontSize: 14, /** 行高倍数 - 1.5倍行高 */ lineHeight: 1.5, /** 字体族 - 使用系统默认字体 */ fontFamily: 'system-ui', /** 文本旋转 - 禁用文本跟随图形旋转 */ textRotate: false, /** 文本水平对齐 - 居中对齐 */ textAlign: 'center', /** 文本垂直基线 - 顶部对齐 */ textBaseline: 'top', };