Files
cadSet/docs/designir-3-support-analysis.md
T

316 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`