Appearance
刀模坐标系与线型语义
真源:packages/dieline/src/types.ts(数据模型 + 通用不变量)、packages/dieline/src/box-families.mjs(五族注册)及各族 .mjs(几何生成)、 packages/dieline/src/uv.ts(UV 口径)。本页是抄件。
当前二维刀模支持五族:四摇盖 rectangular、反插式 tuck_end、自锁底 auto_bottom、套筒 sleeve、邮寄盒 mailer。三维折叠仍限四边形摇盖族,当前按用户要求暂缓。
坐标系(全仓库唯一口径)
| 平面 | x | y | 原点 | 单位 |
|---|---|---|---|---|
| 展开图 / 画布 / 导出 | 向右 | 向下 | 展开图外接框左上角(也就是胶舌的左边缘) | mm |
3D world(uv.ts 注释与折叠链测试) | 向右 | 向上 | front 面 z = 0,盒体向 −z 延伸,观察者在 +z 看 front | mm |
位图选区(assetRef.extraction.selection) | 向右 | 向下 | 参考图左上角 | px |
约定:
- mm 是唯一的工作单位,渲染层负责 mm→px(
DEFAULT_PX_PER_MM = 4,docs/demo/scene.mjs里的PX = 4)。packages/内禁止出现裸像素常量。 - 面板多边形顶点顺序固定:左上起顺时针(
types.ts对polygonMm的注释),常规面板为 4 点;自锁底的指定底翼允许 4–32 点,3D 对非四边形显式拒绝。 validateDieline允许−0.001的浮点容差判断面板是否越出外接框。
线型语义(lineKindSchema)
| kind | 语义 | 生成器是否产出 | 渲染颜色 / 导出图层 |
|---|---|---|---|
cut | 模切(刀锋,切断) | ✔ | #d63a3a → DXF DIE_CUT(色号 1) |
crease | 压线/折线(折痕,不切断) | ✔ | #239451,虚线 strokeDashArray [2·PX, 1·PX] → DXF CREASE(色号 3) |
glue | 胶位/糊边(涂胶区,不切断不折) | ✔ | #2863bd → DXF GLUE(色号 5) |
perf | 齿孔线/易撕线 | ✘ 枚举里有,当前生成器不产出 | 需要印厂工艺确认间距后才能用 |
与 ADR-0003 的措辞差异
docs/decisions/ADR-0003-dieline-3d-uv.md 写的是 cut | crease | glue | bleed。实现里的第 4 种是 perf, 出血(bleed)不是线型,而是 design.bleed 的四边 mm 数值 + auxKind: "bleed" 的辅助层语义。 偏差登记在 ADR 摘要与偏差。
数据模型
dielineSchema(types.ts):
| 键 | 类型 | 约束 |
|---|---|---|
dielineId / boxType | string | 生成器写入对应族的刀模 ID / 盒型标识 |
sheetMm | { width>0, height>0 } | 展开图外接尺寸 mm |
panels | Panel[] | ≥1 |
edges | DielineEdge[] | ≥4 |
material | { name?, thicknessMm? } | 记录板材名称、厚度、规则来源与待确认事项;厚度参与端翼让位和内廓估算,不等于完整折放补偿 |
Panel:
| 键 | 约束 | 说明 |
|---|---|---|
panelId | /^[a-z][a-z0-9_]{1,31}$/ | 如 front、front_top、glue_flap |
polygonMm | 长度 4–32 的点数组 | 常规面板4点,非四边形只用于自锁底指定底翼 |
faceIndex | 非负整数,全表唯一 | 每面板一个 3D mesh face;重复会导致贴图互相覆盖 |
uvRotateQuarter | 0…3 | 面内 1/4 旋转;当前生成器恒为 0 |
mirrorU | boolean | 当前恒为 false;出现 true 必须配文字方向测试 |
role | side | top | bottom | glue | tuck | dust | lock | hook | 各族按结构产出,锁底含锁片/侧钩片 |
DielineEdge:kind + from + to + panelId(折线连接两个面板时记主面板)。
通用不变量(validateDieline,返回错误数组,空=通过)
panelId不得重复。faceIndex不得重复 —— 否则 2D→3D 贴图互相覆盖。- 每个面板的每个顶点必须落在
sheetMm外接框内(容差1e-3)。 - 至少存在一条
cut线 —— 否则无法模切。
出血与安全区默认值
| 项 | 默认 | 真源 | 当前状态 |
|---|---|---|---|
出血 bleed.top/right/bottom/left | 各 3 mm | bleedSchema(packages/design-json/src/layers.ts) | schema 默认值;验证版编辑器未画出血框(P2-01/P2-02 补齐) |
安全区 safeAreaInsetMm | 5 mm | design.ts 的 nonNegDefault() | 同上 |
| 导出是否包含刀线 | 包含 | docs/demo/scene.mjs:aux 对象带 data-aux 一起进 SVG;DXF 按图层输出 | 印厂若要"只有印刷内容"的 PDF 需人工去掉引导层(P4-02 之前没有按印厂切换的配置) |
纸厚未补偿
生成器输出的展开尺寸是内空 + 折边的几何原型,没有按纸张厚度做折放(knock-down)补偿、 圆角半径和工艺缝隙。material.thicknessMm 只是元数据,不参与任何计算。 边界与后续归属见 能力边界。
下一步阅读
- 具体尺寸怎么算出来的 → 四摇盖胶封盒几何
- 折起来盒顶盖不盖得上 → 摇盖闭合:双层台阶,不是开口
- 贴图与文字方向 → UV 图集与文字方向不变量