mapRenderTokens.ts 3.75 KB
/**
 * 机器人物理尺寸(单位:mm)。
 * 用于控制机器人图标在地图 world 坐标中的 1:1 渲染尺寸。
 */
export type RobotPhysicalSizeMm = {
  /** 机器人图标宽度(mm) */
  iconWidthMm: number
  /** 机器人图标高度(mm) */
  iconHeightMm: number
}

/**
 * 地图渲染尺寸令牌(Render Tokens)。
 * 约定:
 * 1. 所有尺寸均使用地图 world 坐标单位(当前为 mm)。
 * 2. 本文件仅定义“物理尺寸和比例”,不做大/中/小档位切换。
 */
export type MapRenderTokens = {
  /** 尺寸单位标识。当前固定为毫米(mm) */
  unit: 'mm'

  /** 机器人类型与后端 robotType 枚举值映射 */
  robotType: {
    /** 潜伏式机器人类型值 */
    latent: number
    /** 叉车式机器人类型值 */
    forklift: number
  }

  /** 按机器人类型定义实际图标尺寸(mm) */
  robotByType: {
    /** 未匹配到类型时的默认尺寸 */
    default: RobotPhysicalSizeMm
    /** 潜伏式机器人尺寸 */
    latent: RobotPhysicalSizeMm
    /** 叉车式机器人尺寸 */
    forklift: RobotPhysicalSizeMm
  }

  /** 托盘标志(库位图形)的尺寸定义 */
  trayMarker: {
    /** 托盘原始矢量图基准宽度(mm) */
    baseGraphicWidthMm: number
    /** 托盘原始矢量图基准高度(mm) */
    baseGraphicHeightMm: number
    /** 托盘渲染实际宽度(mm) */
    widthMm: number
    /** 托盘渲染实际高度(mm) */
    heightMm: number
  }

  /** 机器人高亮路径样式 */
  highlightPath: {
    /** 高亮路径线宽(mm) */
    strokeWidthMm: number
  }

  /** 机器人选中态圆环样式(相对机器人尺寸的比例) */
  robotSelection: {
    /** 选中圆环半径比例(相对于机器人基准尺寸) */
    radiusRatio: number
    /** 选中圆环线宽比例(相对于机器人高度) */
    strokeWidthRatio: number
    /** 虚线段长度比例(相对于机器人基准尺寸) */
    dashLengthRatio: number
    /** 虚线段间隔比例(相对于机器人基准尺寸) */
    dashGapRatio: number
  }

  /** 机器人编码文字样式(相对机器人尺寸的比例) */
  robotLabel: {
    /** 文字字号比例(相对于机器人高度) */
    fontSizeRatio: number
  }
}

/**
 * 地图渲染全局令牌默认值。
 * 修改本对象即可统一调整 Dashboard 机器人、托盘与高亮路径尺寸。
 */
export const mapRenderTokens = Object.freeze({
  /** 当前地图尺寸单位:毫米 */
  unit: 'mm',

  /** 后端 robotType 与前端语义映射 */
  robotType: {
    latent: 1,
    forklift: 2,
  },

  /** 机器人默认物理尺寸(mm) */
  robotByType: {
    /** 默认回退尺寸(未识别类型时使用) */
    default: {
      iconWidthMm: 2133,
      iconHeightMm: 1707,
    },
    /** 潜伏式机器人尺寸(mm) */
    latent: {
      iconWidthMm: 600,
      iconHeightMm: 500,
    },
    /** 叉车式机器人尺寸(mm) */
    forklift: {
      iconWidthMm: 2773,
      iconHeightMm: 1707,
    },
  },

  /** 托盘标志尺寸配置(长 * 宽) */
  trayMarker: {
    /** 原始图形基准宽度(mm) */
    baseGraphicWidthMm: 300,
    /** 原始图形基准高度(mm) */
    baseGraphicHeightMm: 300,
    /** 托盘实际渲染宽度(mm) */
    widthMm: 290,
    /** 托盘实际渲染高度(mm) */
    heightMm: 290,
  },

  /** 高亮路径配置 */
  highlightPath: {
    /** 高亮路径线宽(mm) */
    strokeWidthMm: 60,
  },

  /** 机器人选中圆环配置(比例) */
  robotSelection: {
    radiusRatio: 0.58,
    strokeWidthRatio: 0.1,
    dashLengthRatio: 0.24,
    dashGapRatio: 0.12,
  },

  /** 机器人编码文字配置(比例) */
  robotLabel: {
    fontSizeRatio: 0.35,
  },
} as const satisfies MapRenderTokens)