316 lines
19 KiB
Markdown
316 lines
19 KiB
Markdown
# DesignIR 3.0 支持能力分析与补全范围
|
||
|
||
本文档分析当前 CadSet 通过 `DesignIR 3.0 JSON -> text-to-cad / SimpleCADAPI -> STEP`
|
||
生成模型时的能力边界,并给出 DesignIR 3.0 JSON 应补全的支持范围。目标是把
|
||
DesignIR 从“少量语义特征可编译 + SurfaceIR 可重建”推进为能承接两个生成后端主要能力的
|
||
统一可编辑模型契约。
|
||
|
||
## 结论摘要
|
||
|
||
- 当前 DesignIR 3.0 的顶层契约已经统一了三种模式:纯语义参数化、STEP 推断的
|
||
SurfaceIR、以及语义层加编译后 SurfaceIR 快照的 hybrid 模式。
|
||
- STEP 上传重建路径相对完整:可抽取 analytic/B-spline surface、拓扑、边界、pcurve,
|
||
再通过独立 rebuild、几何验收、SimpleCADAPI B-Rep 比较和参数扰动验收交付。
|
||
- 语义生成路径仍然很窄:`designir_pipeline.py` 目前只真正编译
|
||
`extrude_circle`、`add_cylinder`、`extrude_rectangle`、`through_hole`、
|
||
`polar_hole_pattern`。
|
||
- DesignIR 3.0 schema 对 `features`、`sketches`、`constraints` 的结构约束较弱,
|
||
允许任意 object,但 compiler 实际支持的 operation 很少。这导致“JSON 看似可写”,
|
||
但不能稳定生成模型。
|
||
- SimpleCADAPI 本身能力明显更强,覆盖 primitives、sketch、curve、revolve、sweep、
|
||
loft、twisted sweep、boolean、fillet、chamfer、shell、pattern、assembly constraint、
|
||
unit、tolerance、semantic tag、operation graph、translator 和标准机械件库。
|
||
- text-to-cad 当前主要负责路由、DesignIR 所有权、验证、SurfaceIR 重建、Viewer 交付;
|
||
对语义 DesignIR 的通用后端编译能力仍集中在 `designir_pipeline.py` 的小交集内。
|
||
|
||
## 支持等级定义
|
||
|
||
| 等级 | 含义 |
|
||
| --- | --- |
|
||
| L0 | 不支持,或只能作为自由文本/未定义 object 存在 |
|
||
| L1 | 路由或文档知道该能力,但 DesignIR 不能稳定表达或编译 |
|
||
| L2 | DesignIR 可表达,但缺少一个或多个后端 compiler adapter |
|
||
| L3 | 可由一个后端稳定生成并导出 STEP |
|
||
| L4 | build123d 和 SimpleCADAPI 路径都可生成,且有基础验证 |
|
||
| L5 | 有标准工厂/语义图/参数扰动/验收或专门测试覆盖 |
|
||
|
||
## 当前系统分层
|
||
|
||
| 层 | 当前职责 | 主要证据 |
|
||
| --- | --- | --- |
|
||
| cad-router | 根据需求选择 build123d 或 SimpleCADAPI,上传 STEP 时切到 SurfaceIR 执行 | `text-to-cad/skills/cad-router/scripts/route.py` |
|
||
| DesignIR 3.0 schema | 定义统一 envelope、语义层、SurfaceIR 层、编辑接口、验证契约 | `designir-pipeline/contracts/designir-3.0.schema.json` |
|
||
| semantic compiler | 把语义 DesignIR 编译为 build123d 或 SimpleCADAPI STEP | `designir-pipeline/scripts/designir_pipeline.py` |
|
||
| SurfaceIR runtime | 从 STEP 抽取/重建 surface-parametric DesignIR,验证几何和语义参数编辑 | `designir-pipeline/scripts/surfaceir_pipeline.py` |
|
||
| SimpleCADAPI | 标准机械件、语义图、单位、公差、assembly、translator、B-Rep 比较 | `SimpleCADAPI/src/simplecadapi` 与测试 |
|
||
| cad-agent-studio | 任务、参数、导出、预览 UI 集成 | `cad-agent-studio/src/lib` 与 API routes |
|
||
|
||
## 模型类型支持矩阵
|
||
|
||
| 模型/零件类型 | text-to-cad 路由 | DesignIR 语义 JSON | build123d 编译 | SimpleCADAPI 编译 | 当前等级 | 说明 |
|
||
| --- | --- | --- | --- | --- | --- | --- |
|
||
| 简单圆柱、圆盘、轴类 | 可识别 | `extrude_circle/add_cylinder` | 支持 | 支持 | L4 | 任意轴圆柱在 build123d 路径较好;SimpleCADAPI 路径圆柱支持任意轴 |
|
||
| 简单长方体、板、块 | 可识别 | `extrude_rectangle` | 支持 | 支持 | L4 | SimpleCADAPI box 当前要求正 Z 轴 |
|
||
| 法兰/轮毂/中心孔/螺栓孔阵列 | 可识别 | 圆柱 + 通孔 + polar hole | 支持 | 支持 | L4 | 当前最成熟的语义样例 |
|
||
| 单孔/通孔 | 可识别 | `through_hole` | 支持 | 支持 | L4 | 语义 compiler 中孔切割要求正 Z 轴 |
|
||
| 线性孔阵列 | SurfaceIR 可推断 | JSON 没有可编译语义 operation | 不支持 | 不支持 | L1 | SurfaceIR 可推断 `linear_hole_pattern`,语义 compiler 未实现 |
|
||
| 一般挤出草图 | 后端可做 | DesignIR 未定义稳定 profile vocab | 不支持 | 不支持 | L1 | 目前只规范化圆/矩形 |
|
||
| 旋转体、轴肩、锥台 | 后端可做 | 缺少 `revolve`/`cone` 语义 operation | 不支持 | 不支持 | L1 | SurfaceIR 可从 STEP 捕捉结果面,但语义生成不支持 |
|
||
| sweep/loft/twisted/helical sweep | 后端可做 | 缺少语义 operation | 不支持 | 不支持 | L1 | SimpleCADAPI 已有可回放操作 |
|
||
| fillet/chamfer/shell | 后端可做 | 缺少 modifier/selector 契约 | 不支持 | 不支持 | L1 | 最大缺口是稳定选择边/面 |
|
||
| 一般 boolean union/cut/intersect | 后端可做 | 只有隐式 union 和孔 cut | 部分 | 部分 | L2 | 需要把工具体、host、结果命名写入 JSON |
|
||
| 镜像/平移/旋转 | 后端可做 | 缺少 transform operation | 不支持 | 不支持 | L1 | SimpleCADAPI 支持表达式参数 |
|
||
| 线性/径向 pattern | 后端可做 | 缺少通用 pattern | 不支持 | 不支持 | L1 | 当前仅 polar hole special case |
|
||
| 齿轮、齿条、内齿圈、锥齿轮、摆线盘 | 路由到 SimpleCADAPI | 无标准工厂 feature | 不支持 | 不支持 | L1 | SimpleCADAPI stdlib 原生强,但 DesignIR 不会调用 |
|
||
| 螺栓、螺母、滚子链轮 | 路由到 SimpleCADAPI | 无标准工厂 feature | 不支持 | 不支持 | L1 | fastener/chain 工厂已有参数语义 |
|
||
| 滚珠轴承 | 路由到 SimpleCADAPI | 无 assembly/factory feature | 不支持 | 不支持 | L1 | SimpleCADAPI 返回 assembly,DesignIR part contract 未承接 |
|
||
| 行星/摆线减速器、关节执行器 | 路由倾向 SimpleCADAPI | 缺少 product/assembly/constraint JSON | 不支持 | 不支持 | L1 | examples 已证明后端能做复杂 product |
|
||
| 自由曲面/NURBS | 路由偏 build123d | SurfaceIR 可存 final surface;语义生成不足 | 低 | 低 | L1-L2 | 语义层缺少 profile/path/surface patch vocab |
|
||
| 上传 STEP 任意 B-Rep 重建 | route `--execute` | `surface_parametric` 完整 envelope | SurfaceIR 执行 | B-Rep 比较 | L5 | 这是重建路径,不等价于语义 authoring |
|
||
|
||
## 特征能力支持矩阵
|
||
|
||
| 特征类别 | 当前 DesignIR 语义支持 | 后端原生能力 | 主要差距 | 建议目标等级 |
|
||
| --- | --- | --- | --- | --- |
|
||
| 参数与表达式 | 数值参数、简单表达式、`mm/deg/count/ratio` | SimpleCADAPI 有 expression graph 和 units | 缺少 typed unit value、dimension checking、参数域/默认 UI hints | L5 |
|
||
| Datum/坐标系 | primary axis 和基本 axis | 两后端均可定位 | 缺少 datum plane、local frame、workplane、connector datum 的规范结构 | L4 |
|
||
| Sketch | 仅圆/矩形归一化 | SimpleCADAPI 支持 point/line/circle/arc/bspline 和约束 | schema 未定义 sketch entity/constraint vocab | L4 |
|
||
| Primitive | 圆柱/圆挤出、矩形盒 | box/cylinder/cone/sphere 等 | 缺少 cone、sphere、torus-like primitive、primitive metadata | L4 |
|
||
| Extrude | 圆/矩形 profile 的 add body | 一般 face extrude | 缺少 profile 引用、direction、extent、symmetric、cut/new/merge 模式 | L4 |
|
||
| Revolve | 无 | SimpleCADAPI/build123d 均可 | 缺少 axis/origin/angle/profile contract | L4 |
|
||
| Sweep/Loft | 无 | SimpleCADAPI 已有 sweep/loft/twisted/helical | 缺少 path/profile/section/ruled/twist contract | L3-L4 |
|
||
| Boolean | add body 隐式 union;hole cut special case | union/cut/intersect | 缺少 body graph、tool list、skip strategy、tracking policy | L4 |
|
||
| Hole feature | through hole、polar hole pattern | 后端可更多 | 缺少 blind/counterbore/countersink/threaded/tapped/slot hole | L5 |
|
||
| Edge/face modifiers | 无 | fillet/chamfer/shell | 缺少 stable selector 与作用范围 | L4 |
|
||
| Patterns | polar hole only | linear/radial/mirror pattern | 缺少通用 source feature、transform series、merge/cut policy | L4 |
|
||
| Standard factory | 无 | SimpleCADAPI stdlib 强 | 缺少 factory op、参数 schema、生成 graph/metadata 绑定 | L5 |
|
||
| Assembly/product | 另有 assembly schema,但未接入 DesignIR semantic compiler | SimpleCADAPI assembly/connector/constraint 完整 | DesignIR part envelope 与 product-level contract 分离 | L3-L5 |
|
||
| Semantic tags/lineage | feature id、preserved interface | SimpleCADAPI tag/topology lineage/source mapping | 缺少 output role、selector by semantic tag、lineage carry-over | L5 |
|
||
| Tolerance/material | validation_contract 字符串为主 | SimpleCADAPI units/tolerance/material | 缺少公差链、材料、表面处理的结构化字段 | L4 |
|
||
| Translators/scene package | 无 | SimpleCADAPI FreeCAD/Fusion/SolidWorks/scene.zip | DesignIR 没声明 translator intent 和 export contract | L3 |
|
||
| Validation/edit | perturbation 契约、SurfaceIR 参数验收 | 两路径均可扩展 | 语义 compiler 的 edit validation 只覆盖少数参数 | L5 |
|
||
|
||
## 当前 DesignIR 3.0 JSON 的关键不足
|
||
|
||
1. `features` 是松散 object array,缺少 machine-readable operation enum 和 per-operation schema。
|
||
2. semantic compiler 仍把 DesignIR 3.0 压平成 legacy 2.0 payload 再验证,实际 vocabulary 被
|
||
`SUPPORTED_OPERATIONS` 限制。
|
||
3. schema 层能容纳 `sketches/patterns/constraints/attachments`,但 compiler 只使用极少字段。
|
||
4. 缺少稳定 selector 模型。fillet/chamfer/shell/general boolean 需要选择边/面/feature 输出,
|
||
不能依赖 STEP face id 或后端临时拓扑 id。
|
||
5. SimpleCADAPI 的 `ModelResult`、operation graph、semantic tag、source mapping、units、
|
||
tolerance chain 没有映射回 DesignIR。
|
||
6. SimpleCADAPI 标准工厂已覆盖多个机械族,但 DesignIR 无 `standard_factory` feature,
|
||
导致路由能选 SimpleCADAPI,JSON compiler 却不会生成齿轮/轴承/紧固件等模型。
|
||
7. assembly/product 能力没有成为 DesignIR 3.0 的一等对象。复杂 reducers/actuators 只能靠
|
||
原生 Python generator,不能靠 DesignIR JSON 表达。
|
||
8. build123d 的广义建模能力没有在 DesignIR vocabulary 中体现;当前 DesignIR 对它也只开放
|
||
圆柱、盒子和孔阵列小子集。
|
||
|
||
## 补全后的 DesignIR 3.0 JSON 支持范围
|
||
|
||
补全应分为“统一语义词汇”和“后端 adapter 映射”两部分。DesignIR 不应直接复制后端 API,
|
||
但必须覆盖足够稳定的建模意图。
|
||
|
||
### 1. 通用结构
|
||
|
||
建议新增或规范化以下结构:
|
||
|
||
- `operation_registry_version`: 语义 feature vocabulary 版本。
|
||
- `semantic_layer.bodies`: 命名 body graph,用于区分 source body、tool body、result body。
|
||
- `semantic_layer.feature_outputs`: feature 输出角色,例如 `body`, `top_face`, `side_faces`,
|
||
`created_edges`, `tool_body`。
|
||
- `semantic_layer.selectors`: 以 semantic role/tag、feature output、datum relation、geometry rule
|
||
选择边/面/体。
|
||
- `backend_capabilities`: 每个 feature 对 `build123d`、`simplecadapi` 的支持状态、fallback、
|
||
最低版本和测试状态。
|
||
- `model_graph_artifacts`: SimpleCADAPI `*.simplecad.model.json`、operation graph、scene package
|
||
等派生产物引用。
|
||
|
||
### 2. 参数、表达式、单位
|
||
|
||
目标支持:
|
||
|
||
- typed parameter:`length`、`angle`、`count`、`ratio`、`dimensionless`、`area`、`volume`。
|
||
- `value_ref`: 支持 literal、parameter、expression、unit value。
|
||
- 参数域:`min`、`max`、`step`、`recommended_values`、`integer_only`。
|
||
- 派生表达式 DAG:记录依赖、单位推断、是否可编辑。
|
||
- UI/edit hints:slider、number input、enum、toggle,但不替代验证。
|
||
|
||
### 3. Datum、Frame、Connector
|
||
|
||
目标支持:
|
||
|
||
- datum point/axis/plane/frame/workplane。
|
||
- local coordinate frame 与 parent frame。
|
||
- connector datum:face/edge/vertex/placement connector,用于 assembly 和可编辑接口。
|
||
- preserved interface:用 connector 和 semantic selector 表示,而不是纯字符串。
|
||
|
||
### 4. Sketch 与 Profile
|
||
|
||
目标支持:
|
||
|
||
- sketch entity:point、line、circle、arc、ellipse、polyline、bspline、construction geometry。
|
||
- sketch constraints:coincident、distance、distance_x/y、horizontal、vertical、parallel、
|
||
perpendicular、tangent、concentric、equal_length、equal_radius、diameter、radius、angle、
|
||
midpoint、symmetric、fix。
|
||
- profile:closed wire、outer loop、inner loops、face from sketch、face from wires。
|
||
|
||
### 5. Solid Feature Vocabulary
|
||
|
||
第一阶段应补齐两后端高确定性的共同能力:
|
||
|
||
- `primitive_box`
|
||
- `primitive_cylinder`
|
||
- `primitive_cone`
|
||
- `primitive_sphere`
|
||
- `extrude`
|
||
- `revolve`
|
||
- `boolean_union`
|
||
- `boolean_cut`
|
||
- `boolean_intersect`
|
||
- `through_hole`
|
||
- `blind_hole`
|
||
- `counterbore_hole`
|
||
- `countersink_hole`
|
||
- `linear_pattern`
|
||
- `radial_pattern`
|
||
- `mirror_feature`
|
||
- `translate_feature`
|
||
- `rotate_feature`
|
||
- `fillet`
|
||
- `chamfer`
|
||
- `shell`
|
||
|
||
第二阶段补齐曲面和复杂生成:
|
||
|
||
- `sweep`
|
||
- `loft`
|
||
- `twisted_sweep`
|
||
- `helical_sweep`
|
||
- `thread_external`
|
||
- `thread_internal`
|
||
- `knurl`
|
||
- `rib`
|
||
- `boss`
|
||
- `pocket`
|
||
- `slot`
|
||
- `draft`
|
||
- `surface_patch`
|
||
- `surface_trim`
|
||
|
||
### 6. Standard Factory Vocabulary
|
||
|
||
DesignIR 应提供稳定的 `standard_factory` feature,用于调用 SimpleCADAPI 标准库,同时保留
|
||
参数语义和 ModelResult graph:
|
||
|
||
| family | factory operation | 关键参数 |
|
||
| --- | --- | --- |
|
||
| spur gear | `standard_factory.gear.spur` | `n_teeth`, `module`, `pressure_angle`, `gear_height`, `backlash`, bore |
|
||
| helical gear | `standard_factory.gear.helical` | spur 参数 + `helix_angle/handedness` |
|
||
| herringbone gear | `standard_factory.gear.herringbone` | helical 参数 + center gap/phase |
|
||
| ring gear | `standard_factory.gear.ring` | internal teeth、rim、bore、height |
|
||
| straight bevel gear | `standard_factory.gear.straight_bevel` | `n_teeth`, `module`, `pitch_angle`, `face_width` |
|
||
| rack | `standard_factory.gear.rack` | tooth count/length、module、height、width |
|
||
| cycloidal disc | `standard_factory.gear.cycloidal_disc` | lobe count、pin radius、eccentricity、disc thickness |
|
||
| bolt | `standard_factory.fastener.bolt` | diameter、length、head style、drive style、thread style/detail |
|
||
| nut | `standard_factory.fastener.nut` | diameter、width、height、nut style、hole style、thread detail |
|
||
| roller chain sprocket | `standard_factory.chain.roller_sprocket` | tooth count、chain pitch、roller diameter、thickness、bore radius |
|
||
| ball bearing | `standard_factory.bearing.ball_bearing` | inner/outer diameter、width、ball diameter/count、clearance |
|
||
|
||
这些 feature 对 build123d 的支持可以是 `unsupported` 或 `fallback_to_backend_native_python`,
|
||
但 DesignIR 必须诚实记录;对 SimpleCADAPI 应达到 L5。
|
||
|
||
### 7. Assembly/Product Vocabulary
|
||
|
||
复杂机械产品需要 product-level DesignIR,而不只是 part-level DesignIR:
|
||
|
||
- `components`: part、subassembly、standard factory component。
|
||
- `placements`: explicit placement、connector-to-connector placement。
|
||
- `connectors`: face/edge/vertex/placement connector。
|
||
- `constraints`: fixed、revolute、prismatic、gear、belt、rack-pinion。
|
||
- `solve_policy`: strict/non-strict、residual thresholds。
|
||
- `public_interfaces`: 对外暴露的轴线、安装面、孔系、连接器。
|
||
- `export_policy`: STEP compound、scene package、URDF/MJCF fixed-base 或显式机构导出。
|
||
|
||
短期可复用 `assembly-designir-1.0.schema.json`,但需要在 DesignIR 3.0 文档中明确
|
||
part 与 product 的边界和交付 artifact contract。
|
||
|
||
### 8. Validation Contract 补全
|
||
|
||
每个新增 feature 至少要有:
|
||
|
||
- geometry checks:solid count、volume、bounds、face/edge count、surface type mix。
|
||
- semantic checks:参数是否驱动目标 feature、selector 是否解析到非空对象。
|
||
- edit checks:参数扰动后目标变化、非目标 interface 保持。
|
||
- backend checks:build123d/SimpleCADAPI 生成一致性,或明确单后端支持。
|
||
- graph checks:SimpleCADAPI replay、model JSON roundtrip、semantic tag presence。
|
||
- translator checks:需要导出 FreeCAD/Fusion/SolidWorks 时才启用。
|
||
|
||
## 推荐实现阶段
|
||
|
||
### P0: 文档和注册表对齐
|
||
|
||
- 把本文档中的 feature vocabulary 拆成 machine-readable `designir-capabilities.json`。
|
||
- 在 `designir-3.0.schema.json` 中给 `features` 增加 operation discriminators。
|
||
- 保留 `missing_capabilities`,但要求 unsupported feature 必须列明后端和原因。
|
||
|
||
### P1: 两后端共同核心
|
||
|
||
- 实现 cone、sphere、general extrude、revolve、boolean union/cut/intersect。
|
||
- 实现 linear/radial pattern、transform、fillet、chamfer、shell。
|
||
- 为 build123d 和 SimpleCADAPI 都加 compiler tests。
|
||
|
||
### P2: Sketch/Profile
|
||
|
||
- 定义 sketch entity 和 constraints schema。
|
||
- 支持 face from sketch/wire,并让 extrude/revolve/sweep/loft 引用 profile。
|
||
- 加入 selector by feature output role,避免 brittle topology refs。
|
||
|
||
### P3: SimpleCADAPI 标准机械件
|
||
|
||
- 增加 `standard_factory.*` operation。
|
||
- 输出 `.simplecad.model.json` 并在 `cad-task.json` 中登记。
|
||
- 对 gear、fastener、bearing、chain 四类先做端到端测试。
|
||
|
||
### P4: Product/Assembly
|
||
|
||
- 统一 part DesignIR 与 assembly DesignIR 的引用关系。
|
||
- 映射 SimpleCADAPI assembly、connector、constraint、solve report。
|
||
- 让 reducer/actuator 类模型可由 JSON 组织,而不是只能依赖示例 Python。
|
||
|
||
### P5: Surface/Freeform 与高级编辑
|
||
|
||
- 在 semantic layer 增加 surface patch、trim、loft continuity、NURBS control support。
|
||
- 将 SurfaceIR 的推断参数与语义 authoring 参数合流,但仍区分 inferred 与 authored。
|
||
- 对上传 STEP 的语义修复和新建自由曲面模型建立共同 vocabulary。
|
||
|
||
## 当前优先级建议
|
||
|
||
最高优先级不是继续扩大 router 关键词,而是扩展 DesignIR 语义 vocabulary 和 compiler adapter:
|
||
|
||
1. 先补 `operation schema + compiler adapter + tests` 的闭环。
|
||
2. 然后补 `standard_factory.*`,因为 SimpleCADAPI 已经有成熟工厂,收益最大。
|
||
3. 再补 selector/feature output role,支撑 fillet/chamfer/shell/general boolean。
|
||
4. 最后补 product-level assembly,使 reducer、bearing、actuator 等复杂模型真正能由
|
||
DesignIR JSON 表达和编辑。
|
||
|
||
## 参考文件
|
||
|
||
- `text-to-cad/skills/cad-router/references/designir-3.0.md`
|
||
- `text-to-cad/skills/cad-router/references/capabilities.md`
|
||
- `text-to-cad/skills/cad-router/scripts/capabilities.json`
|
||
- `text-to-cad/skills/cad-router/scripts/route.py`
|
||
- `text-to-cad/skills/cad-router/scripts/reconstruct_step.py`
|
||
- `designir-pipeline/contracts/designir-3.0.schema.json`
|
||
- `designir-pipeline/scripts/designir_pipeline.py`
|
||
- `designir-pipeline/scripts/surfaceir_pipeline.py`
|
||
- `designir-pipeline/tests/test_designir_pipeline.py`
|
||
- `designir-pipeline/tests/test_surfaceir_pipeline.py`
|
||
- `SimpleCADAPI/src/simplecadapi/__init__.py`
|
||
- `SimpleCADAPI/src/simplecadapi/operations.py`
|
||
- `SimpleCADAPI/src/simplecadapi/std/gear.py`
|
||
- `SimpleCADAPI/src/simplecadapi/std/fastener.py`
|
||
- `SimpleCADAPI/src/simplecadapi/std/bearing.py`
|
||
- `SimpleCADAPI/src/simplecadapi/std/chain.py`
|