feat: 接入 SCDM 优先编辑闭环并支持阵列局部间距
接入 SCDM probe/edit/cache/校验链路,增强孔组、阵列、关系式和参数表交互。 支持阵列相邻段间距、移动意图切换、结果回滚校验,并补充对应回归脚本。
This commit is contained in:
@@ -10,96 +10,104 @@
|
||||
- 主入口是 `python main.py`;无参数启动会快速进入空场景,不默认读取 STEP。常用测试模型是 `assets/models/geom_extract.step`;立方体测试模型是 `assets/models/cube_10mm.step`。
|
||||
- 左侧操作面板当前优先保留最小建模链路:STEP 文件、选择模式 / 按 ID 选择、当前选中对象、编辑、参数化建模和导出模型;部分辅助面板暂时收起,后续需要时再放回。
|
||||
- 局部编辑会先做计划、风险提示、预览和后台执行;失败时会尽量回滚,成功后进入撤销/重做历史。
|
||||
- 后续过渡到 `SCDM-first` 后端:能由 SpaceClaim/SCDM 识别和修改的特征,优先调用 SCDM 脚本接口;本软件不再重复造完整特征识别和直接建模内核,只负责 UI、缓存、脚本生成、校验、回滚和结果映射。
|
||||
- 当前开发顺序改为分阶段闭环:先集中完成 Face 修改能力并让工程师专项测试,再进入孔/槽,再进入凸台、圆角/倒角、Edge 和壳体等特征,最后扩展二级/三级关系;不要每类只做一点。
|
||||
- 当前统一走 `SCDM-first` 主线:能由 SpaceClaim/SCDM 识别和修改的特征,优先调用 SCDM 脚本接口;本软件不再重复造完整特征识别和直接建模内核,只负责 UI、缓存、脚本生成、校验、回滚、结果映射、参数导出和关系式管理。
|
||||
- 当前开发顺序按一条路线闭环:SCDM 识别与缓存 -> 能力字典和参数表 -> 参数化建模任务 -> 结果校验和 ID 续接 -> 按 Face、孔、槽、凸台、圆角/倒角、阵列、壳体逐项适配;本地 OCCT / Analysis Situs 只作为兜底和对照。
|
||||
- 新开 Codex 聊天框继续开发时,只需要 Codex 阅读 README 末尾的“Codex 项目记忆”;普通开发者可以忽略那一节。
|
||||
|
||||
## 软件整体架构
|
||||
|
||||
当前项目大致是这样分层的:
|
||||
当前项目大致是这样分层的。行数按当前 Git 跟踪的可读源码/脚本统计,排除 README、STEP 模型、图标、`.git`、`local`、`third_party` 和临时文件。
|
||||
|
||||
```text
|
||||
python-occt
|
||||
├── main.py
|
||||
python-occt(源码/脚本 84,740 行)
|
||||
├── main.py(7 行)
|
||||
│ └── 程序入口,支持普通启动、烟测、隔离子进程 worker 入口
|
||||
│
|
||||
├── step_editor/
|
||||
│ ├── app.py
|
||||
├── step_editor/(62,303 行)
|
||||
│ ├── app.py(1,976 行)
|
||||
│ │ └── 主窗口初始化、左侧操作面板、按钮和布局
|
||||
│ │
|
||||
│ ├── window_core.py
|
||||
│ ├── window_core.py(4,171 行)
|
||||
│ │ └── STEP 加载、VTK 视图、模型显示、拾取、高亮、坐标轴、FPS、显示刷新
|
||||
│ │
|
||||
│ ├── window_actions.py
|
||||
│ ├── window_actions.py(9,677 行)
|
||||
│ │ └── 导出、参数化建模动作、后台任务、隔离子进程、操作历史
|
||||
│ │
|
||||
│ ├── window_state.py
|
||||
│ ├── window_state.py(10,169 行)
|
||||
│ │ └── 选择状态、参数表状态、按钮启用/禁用、撤销/重做、历史定位
|
||||
│ │
|
||||
│ ├── model.py
|
||||
│ ├── model.py(5,713 行)
|
||||
│ │ └── StepModel 核心对象,保存 shape、Face、Edge、Solid、拓扑缓存和 mixin 组合
|
||||
│ │
|
||||
│ ├── features.py
|
||||
│ ├── features.py(3,591 行)
|
||||
│ │ └── 特征识别和编辑计划,比如孔、槽、凸台、圆角、壳体、解析曲面
|
||||
│ │
|
||||
│ ├── recognition_graph.py
|
||||
│ ├── recognition_graph.py(539 行)
|
||||
│ │ └── 内部 Face 几何图和通孔拆面识别缓存,记录平面/圆柱、邻接、共面、平行、垂直、同轴等基础关系
|
||||
│ │
|
||||
│ ├── asitus_bridge.py
|
||||
│ ├── asitus_bridge.py(308 行)
|
||||
│ │ └── Analysis Situs 孔组识别 CLI 桥接,把外部识别到的孔 Face 组映射回 Python/Qt Face 编号
|
||||
│ │
|
||||
│ ├── scdm_backend.py
|
||||
│ ├── scdm_backend.py(623 行)
|
||||
│ │ └── SCDM 后端发现和缓存底座,负责自动发现并缓存 SpaceClaim.exe,生成 /RunScript 命令并做最小烟测
|
||||
│ │
|
||||
│ ├── scdm_probe.py
|
||||
│ ├── scdm_probe.py(680 行)
|
||||
│ │ └── SCDM probe 任务生成和脚本生成,负责写 scdm_probe_job.json、临时 RunScript 脚本和 raw 识别输出约定
|
||||
│ │
|
||||
│ ├── scdm_edit_runner.py
|
||||
│ ├── scdm_edit_runner.py(1,145 行)
|
||||
│ │ └── SCDM 修改任务执行器,负责写 scdm_edit_job.json、临时修改脚本、result.step、result.json 和 error.json
|
||||
│ │
|
||||
│ ├── scdm_result_validator.py
|
||||
│ ├── scdm_result_validator.py(770 行)
|
||||
│ │ └── SCDM 结果校验和 ID 续接工具,负责输出文件检查、目标值回测、旧对象到新对象的唯一匹配和关系式 ID 重写
|
||||
│ │
|
||||
│ ├── scdm_schema.py / scdm_capabilities.py / scdm_feature_mapper.py / scdm_property_specs.py
|
||||
│ ├── scdm_schema.py / scdm_capabilities.py / scdm_feature_mapper.py / scdm_property_specs.py(1,821 行)
|
||||
│ │ └── SCDM raw 结果、产品能力字典、scdm_feature_cache.json 映射和参数表 spec 转换层,避免把 SCDM 原始技术对象直接暴露给 UI
|
||||
│ │
|
||||
│ ├── operations.py
|
||||
│ ├── operations.py(14,604 行)
|
||||
│ │ └── 真正的几何编辑实现,比如拉伸/切除、孔径、孔深、边长、圆角、倒角
|
||||
│ │
|
||||
│ ├── geometry_utils.py
|
||||
│ ├── geometry_utils.py(1,427 行)
|
||||
│ │ └── 通用 OCCT 几何工具、布尔结果处理、B-Rep 校验、拓扑辅助
|
||||
│ │
|
||||
│ ├── polydata.py
|
||||
│ ├── polydata.py(425 行)
|
||||
│ │ └── 把 OCCT Shape / Face / Edge 转成 VTK polydata,用于显示和拾取
|
||||
│ │
|
||||
│ ├── step_io.py
|
||||
│ ├── step_io.py(160 行)
|
||||
│ │ └── STEP/XCAF 读取、STEP 导出、内部 BREP 临时交换
|
||||
│ │
|
||||
│ ├── export.py
|
||||
│ ├── export.py(179 行)
|
||||
│ │ └── 导出完整模型、零件、Solid、Face、Edge,以及质量检查
|
||||
│ │
|
||||
│ ├── isolated_edit_worker.py
|
||||
│ ├── isolated_edit_worker.py(238 行)
|
||||
│ │ └── 高风险几何编辑的隔离子进程入口
|
||||
│ │
|
||||
│ ├── workers.py
|
||||
│ ├── workers.py(51 行)
|
||||
│ │ └── Qt 后台任务 worker,避免主界面被计算堵死
|
||||
│ │
|
||||
│ ├── ui_helpers.py / widgets.py / info_panel.py
|
||||
│ ├── ui_helpers.py / widgets.py / info_panel.py(1,682 行)
|
||||
│ │ └── UI 辅助函数、自定义控件、属性信息显示
|
||||
│ │
|
||||
│ └── recognition_priority.py
|
||||
│ └── recognition_priority.py(238 行)
|
||||
│ └── 特征识别优先级,让常用、稳定、语义清楚的特征排前面
|
||||
│
|
||||
├── scripts/
|
||||
├── scripts/(21,988 行)
|
||||
│ └── 各类专项验证脚本和一级编辑总回归入口
|
||||
│
|
||||
├── tools/asitus_probe/(386 行)
|
||||
│ └── Analysis Situs probe 的 C++ 源码和 CMake 配置
|
||||
│
|
||||
├── environment.yml / .gitignore(56 行)
|
||||
│ └── Conda 环境和 Git 忽略规则
|
||||
│
|
||||
└── assets/models/
|
||||
└── 仓库自带测试 STEP 模型
|
||||
```
|
||||
|
||||
## SCDM 后端过渡路线
|
||||
## SCDM-first 主路线
|
||||
|
||||
本阶段目标:把 SpaceClaim/SCDM 接成优先几何后端。SCDM 负责识别和执行它能稳定处理的直接建模能力;本软件负责显示、选择、能力映射、任务生成、异步执行、结果校验、回滚、ID 续接和参数导出。SCDM 不接管本软件 UI,也不把 SCDM 原始界面文字直接展示给客户。
|
||||
本阶段开始,README 里过去分散写的 SCDM 后端、开源辅助识别、参数化编辑和关系式内容统一收敛成一条 SCDM-first 路线,不再并行推进多套方案。
|
||||
|
||||
统一主线是:SCDM 负责识别和执行它能稳定处理的直接建模能力;本软件负责显示、选择、能力映射、参数表、关系式、任务生成、异步执行、结果校验、回滚、ID 续接和参数导出。Analysis Situs 和本地 OCCT 识别不再作为主路线和 SCDM 抢“谁说了算”,只作为兜底、对照验证和轻量几何关系辅助。SCDM 不接管本软件 UI,也不把 SCDM 原始界面文字直接展示给客户。
|
||||
|
||||
交付判断不是“调用了 SCDM”,而是下面这条闭环能稳定跑通:
|
||||
|
||||
@@ -107,103 +115,153 @@ python-occt
|
||||
导入 STEP
|
||||
-> 自动找到可用的 SpaceClaim.exe,并缓存路径、来源、版本和验证结果
|
||||
-> 本软件显示模型并建立当前 Face / Edge / Solid 基础索引
|
||||
-> 生成 scdm_probe_job.json,说明要让 SCDM 扫描哪个 STEP、输出到哪里、使用哪个适配器
|
||||
-> SCDM probe 打开 STEP,读取结构化几何对象、可执行命令候选、失败/限制原因
|
||||
-> 写出 scdm_raw_features.json,保留 SCDM 原始结构化结果,不依赖 UI 显示名称
|
||||
-> 本软件把 raw 结果映射到能力字典,生成 scdm_feature_cache.json
|
||||
-> 用户点击对象时,参数表只显示 cache 中已产品化、可执行、可校验的参数
|
||||
-> 用户修改目标值后,生成 scdm_edit_job.json 和对应 SCDM 修改脚本
|
||||
-> SpaceClaim.exe /RunScript 在后台隔离执行,成功输出 result.step,失败输出 error.json
|
||||
-> 本软件用 OCCT 重新读 result.step,做 B-Rep 校验、目标值回测和非预期变形检查
|
||||
-> 校验通过后替换当前模型,重新跑 probe 刷新 scdm_feature_cache.json
|
||||
-> 本软件把“请识别这个 STEP”的任务写给 SCDM,并用 /RunScript 启动 SpaceClaim
|
||||
-> SCDM 在后台打开 STEP,识别可编辑对象、参数、命令候选和限制原因,并把结果写回给本软件
|
||||
-> 本软件把 SCDM 结果翻译成能力字典和中文参数,并缓存起来,后续点击对象直接查缓存
|
||||
-> 用户点击对象时,参数表只显示已经产品化、可执行、可校验的参数
|
||||
-> 用户修改目标值后,本软件把“改哪个对象、改成多少、失败怎么回滚”的修改任务写给 SCDM
|
||||
-> SpaceClaim.exe /RunScript 在后台执行修改,成功写出新的 STEP,失败写出错误原因
|
||||
-> 本软件用 OCCT 重新读取新的 STEP,做 B-Rep 校验、目标值回测和非预期变形检查
|
||||
-> 校验通过后替换当前模型,重新让 SCDM 识别并刷新缓存
|
||||
-> 用新缓存更新 Face / Edge / 特征 ID 映射和关系式引用
|
||||
```
|
||||
|
||||
核心实现拆分如下:
|
||||
### 本软件与 SCDM 如何交互
|
||||
|
||||
本软件不是把 SCDM 界面嵌进来,也不是让客户写脚本。客户看到的仍然是本软件:导入 STEP、点击 Face/Feature、修改“偏移、孔径、位置、阵列间距”等中文参数,然后点击“参数化建模”。SCDM 只是在后台作为几何编辑后端运行。
|
||||
|
||||
两边的沟通方式是“文件中转 + 命令启动”,不是网络接口,也不是共享内存。`RunScript` 不是我们生成的文件名,而是 SpaceClaim 的启动参数;本软件真正生成的是临时脚本文件,然后用类似下面的命令把脚本交给 SCDM 执行:
|
||||
|
||||
```powershell
|
||||
SpaceClaim.exe /RunScript=local\scdm\<模型名>_<指纹>\scdm_probe.py
|
||||
SpaceClaim.exe /RunScript=local\scdm\<模型名>_<指纹>\edit\scdm_edit.py
|
||||
```
|
||||
|
||||
这两个脚本文件由本软件自动生成。第一个脚本负责“识别这个 STEP 能改什么”,第二个脚本负责“按用户输入修改模型”。脚本旁边会有一份任务 JSON,里面写着要打开哪个 STEP、要识别或修改哪个对象、目标值是多少、结果写到哪里。
|
||||
|
||||
```text
|
||||
SCDM-first 实施路线
|
||||
├── S0. 后端发现与缓存
|
||||
│ ├── [x] 新建 step_editor/scdm_backend.py
|
||||
│ ├── [x] 读取 local/scdm_backend.json,缓存可用时直接复用 SpaceClaim.exe
|
||||
│ ├── [x] 缓存失效时自动发现:Windows 注册表 -> 环境变量 -> ANSYS 常见安装目录 -> PATH
|
||||
│ ├── [x] 自动发现失败时,后端返回需要用户配置;导入模型后的 SCDM probe 会自动弹出路径选择框,用户选择 SpaceClaim.exe 后写回缓存
|
||||
│ ├── [x] 找到后可运行最小 /RunScript 烟测,确认能启动、能写报告、许可证可用
|
||||
│ ├── [x] 写回 local/scdm_backend.json:path、source、version、verifiedAt、runScriptOk、licenseOk
|
||||
│ └── [x] 验收:scripts/verify_scdm_backend.py 覆盖缓存、发现、禁用开关和 /RunScript 命令;SCDM 不可用时主程序仍可走 OCCT 降级模式
|
||||
识别阶段:
|
||||
本软件写识别任务 JSON + 识别脚本 scdm_probe.py
|
||||
-> 用 SpaceClaim.exe /RunScript=scdm_probe.py 启动 SCDM
|
||||
-> SCDM 打开 STEP,并把“识别到什么、哪些参数可改、有哪些限制”写回 JSON
|
||||
-> 本软件读取结果,翻译成中文能力和参数表,并缓存起来
|
||||
|
||||
修改阶段:
|
||||
本软件写修改任务 JSON + 修改脚本 scdm_edit.py
|
||||
-> 用 SpaceClaim.exe /RunScript=scdm_edit.py 启动 SCDM
|
||||
-> SCDM 按任务修改模型,并输出新的 STEP 或失败原因
|
||||
-> 本软件读取新 STEP,校验通过才替换当前模型;失败就回滚
|
||||
```
|
||||
|
||||
这些中转文件都放在项目的 `local/scdm/` 工作目录里,只用于本软件和 SCDM 后台沟通、调试和失败回放;清掉后可以重新生成,不提交到 Git。以 `ICEPAK-NATURAL.stp` 为例,当前本机路径类似:
|
||||
|
||||
```text
|
||||
local/scdm/ICEPAK-NATURAL_19ff9d1ede49/
|
||||
├── scdm_probe.py # 本软件生成,喂给 SCDM 做识别
|
||||
├── scdm_probe_job.json # 本软件生成,告诉识别脚本要打开哪个 STEP、结果写哪
|
||||
├── scdm_raw_features.json # SCDM 写回,原始识别结果
|
||||
├── scdm_feature_cache.json# 本软件生成,翻译后的中文参数和能力缓存
|
||||
└── edit/
|
||||
├── scdm_edit.py # 本软件生成,喂给 SCDM 做修改
|
||||
├── scdm_edit_job.json # 本软件生成,告诉修改脚本改哪个对象、目标值是多少
|
||||
├── result.step # SCDM 修改成功后输出的新 STEP
|
||||
└── error.json # SCDM 修改失败时输出的错误原因
|
||||
```
|
||||
|
||||
模型文件变更后会重新计算指纹,目录名也会变,旧识别结果不会误用到新模型上。`导出参数` 生成的外部流程组件是另一条链路,不属于本软件和 SCDM 的后台通信。
|
||||
|
||||
这里说的“SCDM 能做”,不是指 SCDM 界面里人工能点的所有按钮,而是指本软件能通过脚本拿到下面四类证据:
|
||||
|
||||
1. SCDM 返回了结构化对象或可定位几何,比如 Face、Hole、Slot、Boss、Round、Chamfer、Pattern、Shell。
|
||||
2. SCDM 返回或脚本环境确认了可用命令,比如 `OffsetFaces`、`Move`、`Fill`、`Delete`、`Chamfer`、`ConstantRound`。
|
||||
3. 当前对象有可用的当前值或定位信息,比如直径、位置、半径、Face locator、实例中心。
|
||||
4. 修改后能用新 STEP、新 cache、目标值回测或“目标特征消失”证明结果是对的。
|
||||
|
||||
不满足这四点的内容,只能进入诊断、日志或“待适配能力”,不能直接展示成客户可修改参数。
|
||||
|
||||
SCDM 内部如何处理相邻面、圆角链、二级/三级拓扑传播,交给 SCDM。本软件不再把手写一级、二级、三级传播当成新增能力主线,只负责把 SCDM 能力适配成可见参数、可执行任务和可校验结果;SCDM 做不到或当前脚本拿不到证据的能力,先不开放。
|
||||
|
||||
状态标记:
|
||||
|
||||
- `[x]` 已适配:已有能力字典、参数表/命令入口、edit job、runner 或 UI gate、结果校验和回归测试。
|
||||
- `[~]` 部分适配:已有识别、cache、脚本入口或假 runner,但真实 STEP 样例、命令细节或结果守门还要继续补。
|
||||
- `[ ]` 待适配:SCDM 可能能做,但本软件还没有完成结构化识别、命令脚本和结果校验闭环。
|
||||
|
||||
核心路线只保留下面这一棵树。前半段是 SCDM 后端闭环,后半段是按客户高频和 SCDM 可验证能力开放参数:
|
||||
|
||||
```text
|
||||
SCDM-first 主路线
|
||||
├── 0. 后端发现与可用性
|
||||
│ ├── [x] [自动发现 SpaceClaim.exe -> 缓存路径、来源、版本和验证结果]
|
||||
│ ├── [x] [发现顺序 -> 缓存、注册表、环境变量、ANSYS 常见目录、PATH]
|
||||
│ ├── [x] [找不到 -> 导入模型后弹出路径选择,用户选中后写回缓存]
|
||||
│ └── [x] [SCDM 不可用 -> 软件仍可查看、导出并使用本地兜底能力]
|
||||
│
|
||||
├── S1. Probe 任务与原始识别输出
|
||||
│ ├── [x] 新建 step_editor/scdm_probe.py,负责生成 scdm_probe_job.json 和临时 SCDM probe 脚本
|
||||
│ ├── [x] Probe 输入:STEP 路径、单位、模型指纹、输出目录、SCDM 版本、扫描范围
|
||||
│ ├── [~] Probe 动作:当前脚本已防御式遍历 Body / Face / Edge,Edge raw 已输出长度、起终点、圆弧半径和相邻 Face 摘要,并会先尝试 `StandardHoles.Find` / `GetHoleFaces`,失败或为空再回退到圆柱碎片聚合;圆柱面会尝试 `RoundInfo.Create` 生成圆角诊断摘要,Chamfer / Fill 的深度 API 识别仍待继续补
|
||||
│ ├── [x] Probe 输出:scdm_raw_features.json,包含 geometry、topologyHint、backendCommandCandidates、rawLimitations、availableCommands、Face 邻接、Edge 几何摘要和 featureInventory
|
||||
│ ├── [x] 不依赖 SCDM UI 文案;只记录 API 类型、几何属性、命令对象、参数字段和返回状态
|
||||
│ └── [~] 验收:scripts/verify_scdm_probe_pipeline.py 已覆盖 job/script/raw->cache 假数据闭环、`StandardHoles.Find`、`RoundInfo` 脚本入口和 availableCommands 映射;本机 SCDM v222 已验证 ICEPAK 可打开并遍历 13 Body / 158 Face / 396 Edge,且 396 条 Edge 均可回传长度、起终点和相邻 Face 数,脚本环境可见 `StandardHoles` / `OffsetFaces` / `Move` / `Fill` / `Delete` / `Chamfer` / `ConstantRound` / `RoundInfo`;该样例的标准孔和圆角 API 识别结果均为 0,仍需继续拿更多样例适配
|
||||
├── 1. SCDM 识别与缓存
|
||||
│ ├── [x] [scdm_probe_job.json -> /RunScript 扫描 STEP]
|
||||
│ ├── [x] [scdm_raw_features.json -> 保存 SCDM 结构化对象、几何属性、命令候选和限制原因]
|
||||
│ ├── [x] [scdm_feature_cache.json -> 映射为本软件能力字典和中文参数]
|
||||
│ ├── [x] [cache 命中 -> 点击对象只查缓存,不重复启动 SCDM]
|
||||
│ ├── [~] [probe 深度 -> Face / Edge / Body 已稳定遍历,Hole / Round API 真实样例继续补]
|
||||
│ └── [x] [不能产品化的 raw 结果 -> 只进诊断,不进客户参数表]
|
||||
│
|
||||
├── S2. 统一 Schema 与能力字典
|
||||
│ ├── [x] 新建 step_editor/scdm_schema.py,定义 raw feature、normalized feature、capability、edit job 的字段
|
||||
│ ├── [x] 新建 step_editor/scdm_capabilities.py,定义产品能力 key、中文名、单位、输入类型、默认建模意图、SCDM 命令、所需后端命令组和校验器
|
||||
│ ├── [x] 第一批能力:hole.diameter、hole.position、face.offset、feature.fill
|
||||
│ ├── [x] S7 后续能力先以 productized=false 进入能力字典和诊断缓存,不直接显示成客户可执行参数
|
||||
│ ├── [x] 未进入能力字典的 SCDM 结果只进入诊断和日志,状态为 discovered_not_productized
|
||||
│ ├── [x] 每个能力都必须声明 postCheck,例如目标孔径、目标轴心、目标偏移或目标特征消失
|
||||
│ └── [x] 验收:假 raw JSON 经过映射后,只产出已定义能力;未定义能力不会出现在产品化 cache
|
||||
├── 2. 能力字典、参数表和用户入口
|
||||
│ ├── [x] [capability key -> 中文名、单位、输入类型、建模意图、后端命令和 postCheck]
|
||||
│ ├── [x] [参数表 -> 只显示已产品化、可执行、可校验的参数]
|
||||
│ ├── [x] [不可改 -> UI 阶段直接说明是未实现、命令不可用、识别不完整还是风险过高]
|
||||
│ ├── [x] [参数化建模 -> 多个目标值统一提交,不再每行一个操作按钮]
|
||||
│ ├── [x] [导出参数 -> 勾选输入参数后生成组件目录 main.py 和参数 schema]
|
||||
│ └── [~] [关系式 -> 作为参数表上游输入,计算后回填目标值,已阻止自引用/重复目标/循环依赖]
|
||||
│
|
||||
├── S3. SCDM 缓存生成与失效策略
|
||||
│ ├── [x] 新建 step_editor/scdm_feature_mapper.py,把 scdm_raw_features.json 映射为 scdm_feature_cache.json
|
||||
│ ├── [x] cache 记录:modelFingerprint、backendVersion、objects、capabilities、geometrySignature、blockReason
|
||||
│ ├── [x] SCDM raw 没有 Python Face ID 时,用本软件当前 StepModel 的轻量几何签名补回 faceIds,支持米/mm 单位比例匹配
|
||||
│ ├── [x] cache 会额外保留 geometry_candidate_hints:当 SCDM 只给出平面/圆柱面/圆边/直边这些底层证据,而没有明确 slot/boss/round 对象时,先把 S7 候选记为“几何证据待分类”,不进入客户参数表
|
||||
│ ├── [x] 导入模型、重新加载、SCDM 参数化修改成功、撤销和重做后都会标记 cache 失效并后台刷新
|
||||
│ ├── [x] cache 可用时点击对象只查窗口/model 上的 scdm_feature_cache,不重新启动 SCDM
|
||||
│ ├── [x] cache 正在生成时,UI 状态栏显示“正在后台识别 SCDM 可修改参数”,不阻塞旋转查看模型
|
||||
│ └── [~] 验收:raw->cache 映射已由 scripts/verify_scdm_probe_pipeline.py 覆盖;window_core.py 已接后台预热,真实 SCDM 运行耗时和失败提示待样例机验证
|
||||
├── 3. SCDM 参数化建模执行
|
||||
│ ├── [x] [scdm_edit_job.json -> 记录模型、对象签名、能力、目标值、输出路径和超时]
|
||||
│ ├── [x] [/RunScript 后台执行 -> 成功写 result.step/result.json,失败写 error.json]
|
||||
│ ├── [x] [face.offset / hole.diameter / hole.position -> ICEPAK 真实 SCDM 回测通过]
|
||||
│ ├── [~] [slot.width / slot.depth / slot.position / boss.diameter / boss.height / boss.position -> runner、UI gate 和目标校验已接,真实样例待补]
|
||||
│ └── [~] [round.radius / chamfer.distance / feature.fill / feature.delete_round_or_chamfer -> 脚本和假 runner 已接,真实样例待补]
|
||||
│
|
||||
├── S4. 参数表接入
|
||||
│ ├── [x] 修改 window_state.py 的参数表数据源:存在 SCDM cache 时优先转成参数表 spec,现有 OCCT/Analysis Situs 能力作为兜底;对大模型多内孔平面位置调整这类本地已验证快路径,参数表会优先走 OCCT 专用一级边界重建,避免 SCDM 直接建模长时间计算
|
||||
│ ├── [x] 选中对象后,用当前 Face / Edge 索引、逻辑 ID、整孔 Face 组和 SCDM->Python faceIds 映射匹配 cache 中的 geometrySignature
|
||||
│ ├── [~] 匹配成功且 capability 已接入执行器时展示能力字典里的中文参数、当前值、建模意图、目标值和输入参数勾选框;参数表只展示 enabled 能力,未开放能力只进状态提示/诊断;当前按能力开放 `face.offset`、`hole.diameter`、`hole.position`、`slot.position`、`boss.position`
|
||||
│ ├── [x] 匹配失败或能力未开放时给出短原因:后台识别中、SCDM 未识别、能力未产品化、脚本命令不可用、后端失败;当前状态栏和下方诊断信息都会显示 SCDM 后端状态、当前选择状态、可执行能力和未开放原因
|
||||
│ ├── [x] 保留现有关系式、参数导出和统一“参数化建模”按钮,不新增一套 SCDM 专用 UI;数值型 SCDM 能力改目标值后执行,命令型能力在选中该行后由同一个按钮执行
|
||||
│ └── [~] 验收:scripts/verify_scdm_probe_pipeline.py 已验证 Face / Hole 参数 spec 转换、能力级启用开关和圆柱碎片组到本地 Face ID 的回填;scripts/verify_property_card_editor_ui.py 已覆盖 SCDM 状态摘要和选择诊断同步;真实 UI 长流程回归待继续
|
||||
├── 4. 结果校验、回滚和 ID 续接
|
||||
│ ├── [x] [OCCT 回读 result.step -> 检查输出文件、B-Rep 和基础模型规模]
|
||||
│ ├── [~] [目标回测 -> 已覆盖数值目标、位置目标、目标特征消失和未编辑对象漂移]
|
||||
│ ├── [~] [ID 续接 -> 简单唯一匹配已接,歧义/拆分/合并样例继续补]
|
||||
│ ├── [~] [关系式刷新 -> 修改后按新 cache 重写 Face / Edge / 特征 ID]
|
||||
│ └── [x] [失败 -> 回滚原模型并给出明确原因]
|
||||
│
|
||||
├── S5. 修改任务执行闭环
|
||||
│ ├── [x] 新建 step_editor/scdm_edit_runner.py,生成 scdm_edit_job.json 和临时 SCDM 修改脚本
|
||||
│ ├── [x] edit job 记录:模型路径、对象签名、capabilityKey、目标值、输出 STEP、超时、回滚文件
|
||||
│ ├── [~] 第一批执行:face.offset、孔径、孔位置已在本机 SCDM v222 + ICEPAK 样例真机验证;S7.2 的槽位置和 S7.3 的凸台位置已接入 `Move` 脚本、edit job、cache 映射和 UI gate,真实槽/凸台样例回测待补;命令型能力的统一按钮承载已补,填孔/删除小特征已补 `Fill.Execute` / `Delete.Execute` 脚本适配但仍待真实 STEP 验证后再开放
|
||||
│ ├── [~] SpaceClaim.exe /RunScript 已接入 UI 后台任务,成功后加载 result.step,重新触发 SCDM probe,并在 cache 刷新后再通知关系式/批量执行继续;校验通过后会写入撤销历史,撤销/重做会触发 SCDM cache 失效和后台刷新
|
||||
│ ├── [x] 成功写 result.step / result.json;失败写 error.json,包含 SCDM 命令、对象、参数和失败原因
|
||||
│ └── [~] 验收:scripts/verify_scdm_edit_runner.py 已覆盖 job/script/result/error、缺失输出、空 STEP、`Fill.Execute` / `Delete.Execute` 脚本路径和假 runner 闭环;真实 SCDM 已验证 `OffsetFaces.Execute`、`Move.Translate`、`DocumentSave.Execute`,UI 撤销历史和撤销/重做 cache 失效已接入,真实长流程回归待继续
|
||||
├── 5. 当前已开放或正在开放的 SCDM 能力
|
||||
│ ├── [x] [Face 偏移 -> face.offset / OffsetFaces]
|
||||
│ ├── [x] [孔直径 -> hole.diameter / StandardHoles 或同轴 OffsetFaces]
|
||||
│ ├── [x] [孔位置 -> hole.position / Move]
|
||||
│ ├── [x] [填孔/删除小特征 -> feature.fill / Fill 或 Delete]
|
||||
│ ├── [~] [槽宽 -> slot.width / OffsetFaces,真实 STEP 回测待补]
|
||||
│ ├── [~] [槽深 -> slot.depth / Move 或 OffsetFaces,只开放 SCDM 返回槽深、槽底面和深度方向证据的槽]
|
||||
│ ├── [x] [槽位置 -> slot.position / Move]
|
||||
│ ├── [~] [凸台直径 -> boss.diameter / OffsetFaces,真实 STEP 回测待补]
|
||||
│ ├── [~] [凸台高度 -> boss.height / Move 或 OffsetFaces,真实 STEP 回测待补]
|
||||
│ ├── [x] [凸台位置 -> boss.position / Move]
|
||||
│ ├── [~] [圆角半径 -> round.radius / ConstantRound,只开放 SCDM 明确返回等半径证据的圆角]
|
||||
│ ├── [~] [倒角距离 -> chamfer.distance / Chamfer,只开放 SCDM 明确返回等距倒角证据的倒角]
|
||||
│ ├── [~] [删除圆角/倒角 -> feature.delete_round_or_chamfer / Fill 或 Delete,真实 STEP 回测待补]
|
||||
│ ├── [x] [阵列间距 -> pattern.spacing / Move,整体阵列保持中心不变并等距重排;安全范围由支撑面动态计算,不针对 Face92 写死]
|
||||
│ └── [~] [局部间距 -> pattern.segment_spacing / Move,按“FaceA-FaceB 间距”或“零件A-零件B 间距”修改相邻段;已支持固定前项移动后侧、固定后项移动前侧、两侧均分保持中心]
|
||||
│
|
||||
├── S6. 结果校验、ID 续接和关系式刷新
|
||||
│ ├── [~] 用 OCCT 读取 result.step,校验 B-Rep 有效性、Solid 数量、目标参数、关键特征是否仍存在;当前 UI 已拒绝缺失/空输出 STEP,并在重新 probe 后调用 OCCT B-Rep 检查、目标值回测、未编辑对象漂移检查和 raw summary 全局规模漂移检查,圆角链/孔面数量等更专门几何质量规则待继续
|
||||
│ ├── [x] 修改前后保存 geometrySignature,用新 cache 做旧对象到新对象的唯一匹配
|
||||
│ ├── [~] 唯一匹配成功时更新 Face / Edge / 特征 ID,并同步更新关系式文本;SCDM 修改后的 cache 刷新阶段已接入关系式 ID 重写,歧义场景仍需更多真实样例回归
|
||||
│ ├── [x] 找不到或匹配多个时,返回 none / multiple 状态,供 UI 将关系式标记为失效并提示用户重新选择对象
|
||||
│ ├── [~] 对 SCDM 返回成功但几何变形的结果必须回滚;当前已能在 cache 层拦截其它已识别对象丢失、漂移、歧义匹配,以及 Face/Edge/Object 总量异常大幅变化,并由 UI 恢复编辑前快照;圆角/孔面数量等更专门质量规则待补
|
||||
│ └── [~] 验收:scripts/verify_scdm_result_validator.py 已覆盖输出文件、目标值、raw summary 全局规模漂移、未编辑对象漂移、ID 映射、关系式重写和歧义匹配;ICEPAK 真实 SCDM 已回读验证 face.offset、孔径和孔位置输出 STEP
|
||||
├── 6. 下一批只按 SCDM 能力适配
|
||||
│ ├── [ ] [阵列实例位置 -> pattern.instance_position]
|
||||
│ └── [~] [壳体厚度 -> shell.thickness,薄壁候选配对已进 cache,真实命令和 STEP 回测待补]
|
||||
│
|
||||
├── S7. 能力扩展顺序
|
||||
│ ├── [~] 第二批:slot.position 已接入能力字典、参数表、`move_slot` 执行脚本和 fake runner 回归,真实槽 STEP 回测待补;slot.width、slot.depth 仍只进入 planned_not_productized 诊断,真实 SCDM 命令和样例回测待补
|
||||
│ ├── [~] 第三批:boss.position 已接入能力字典、参数表、`move_boss` 执行脚本和 fake runner 回归,真实凸台 STEP 回测待补;boss.height、boss.diameter 仍只进入 planned_not_productized 诊断,真实 SCDM 命令和样例回测待补
|
||||
│ ├── [~] 第四批:round.radius、chamfer.distance、feature.delete_round_or_chamfer 已进入能力字典和 planned_not_productized 诊断;probe 已补 `RoundInfo` 摘要入口,真实 SCDM 命令和样例回测待补
|
||||
│ ├── [~] 第五批:pattern.spacing、pattern.instance_position、shell.thickness 已进入能力字典和 planned_not_productized 诊断;重复圆柱孔中心已能派生 linear_pattern 候选并写入 derived_feature_candidates,真实 SCDM 命令和样例回测待补
|
||||
│ ├── [x] 内部能力进度报告:`scdm_status.summarize_scdm_capability_progress` 会统计能力字典、执行器开放名单、当前 cache 已识别能力、后端命令阻止项、planned_not_productized、discovered_not_productized、geometry_candidate_hints、derived_feature_candidates,以及 SCDM probe 的对象/曲面/命令候选分布,供开发诊断和内部日志解释当前进度;客户 UI 只展示能识别/不能识别、能修改/不能修改
|
||||
│ └── [~] 每新增一个 capability,都必须同时补 probe 映射、edit runner、postCheck、UI 假 cache 测试和真实 STEP 样例;当前已补能力字典、probe 映射、Face 邻接、Edge raw 几何摘要、featureInventory、geometry_candidate_hints、假 cache 测试和能力进度报告,slot.position、boss.position 已补 edit runner 协议,其它 S7 能力的 edit runner 与真实 STEP 样例待补
|
||||
│
|
||||
└── S8. 打包与交付策略
|
||||
├── [ ] 不把商业 SCDM 打包进本软件,只检测客户本机安装和许可证
|
||||
├── [~] 打包产物带默认发现逻辑、自动路径选择和 SCDM 不可用说明;当前“软件进度”已改为紧凑按钮,点击后弹出 Markdown 风格能力清单,按“已能修改、已能识别、暂不能修改、暂不能稳定识别”组织;SCDM 找不到时再自动弹出 SpaceClaim.exe 路径选择
|
||||
├── [~] SCDM-only 能力在后端命令不可用时禁用并显示原因;当前已根据 availableCommands 阻止缺少 `OffsetFaces` / `Move` / `Fill` / `Delete` 等命令的能力,隐藏策略待打包态细化
|
||||
├── [x] 日志保留本次使用的后端:SCDM / OCCT / Analysis Situs,方便给客户解释结果来源;当前 SCDM probe/edit job、result.json、SCDM 操作历史、普通 OCCT 操作历史和左侧状态摘要都会记录后端来源,普通 OCCT 历史会额外写 execution=Qt worker/isolated subprocess,以及 recognition=internal StepModel 或 Analysis Situs + internal StepModel
|
||||
└── [ ] 验收:无 SCDM 机器可启动和查看 STEP;有 SCDM 机器可完成第一批 SCDM 修改闭环
|
||||
└── 7. 交付与兜底边界
|
||||
├── [x] [软件进度 -> 只展示能识别、不能识别、能修改、不能修改]
|
||||
├── [x] [日志 -> 记录本次使用 SCDM / OCCT / Analysis Situs 哪个后端]
|
||||
├── [x] [Analysis Situs -> 只做辅助定位、兜底识别和开源对照]
|
||||
├── [x] [本地 OCCT -> 只保留已验证兜底能力,不再作为新主线扩展]
|
||||
├── [ ] [商业 SCDM -> 不打包进本软件,只检测客户本机安装和许可证]
|
||||
└── [ ] [SCDM 之外的新能力 -> 等 SCDM 能力适配完再评估]
|
||||
```
|
||||
|
||||
短期开发只做第一批能力,不追求把 SCDM 识别到的所有候选都立即开放。`scdm_raw_features.json` 保留 SCDM 发现的全部结构化候选,供后续扩展;`scdm_feature_cache.json` 只保存已经映射到能力字典、能执行、能校验、能解释失败原因的产品化能力。`geometry_candidate_hints` 只表示“有几何证据值得继续分类”,不能当作可编辑参数展示给客户。`软件进度` 弹窗只展示客户关心的能力边界:哪些能识别、哪些不能稳定识别、哪些能修改、哪些暂不能修改;cache 数量、probe 证据、Runner 开放数等后台细节留在日志和开发诊断里。这样既能利用 SCDM 的专业识别和直接建模能力,也不会把未验证的内部候选暴露给客户。
|
||||
|
||||
## Analysis Situs 接入状态
|
||||
### Analysis Situs 辅助定位(非主线后端)
|
||||
|
||||
一句话状态:还没有全量接完;当前已经完成“孔组识别桥接 + AAG 轻量关系摘要 + 几何关系摘要”这一步,能把 Analysis Situs 识别出的拆面圆柱孔组用于整孔高亮、参数表和一级关系计划,也能把外部 AAG 的 Face、邻接、角度类型、共面、同轴、平行、垂直和相切摘要缓存到 `StepModel`,并作为 `recognition_graph.py` 的 `external_*` 关系证据;但还没有把它的完整 AAG/特征分析能力接成通用识别引擎。
|
||||
一句话状态:Analysis Situs 不再作为当前主识别路线继续接入;它保留为 SCDM-first 路线里的辅助定位、兜底识别和开源对照验证。当前已经完成“孔组识别桥接 + AAG 轻量关系摘要 + 几何关系摘要”,能把拆面圆柱孔组用于整孔高亮、参数表兜底和一级关系计划,也能把外部 AAG 的 Face、邻接、角度类型、共面、同轴、平行、垂直和相切摘要缓存到 `StepModel`,并作为 `recognition_graph.py` 的 `external_*` 关系证据。
|
||||
|
||||
当前已完成:
|
||||
|
||||
@@ -225,19 +283,18 @@ SCDM-first 实施路线
|
||||
powershell -ExecutionPolicy Bypass -File .\scripts\build_asitus_probe.ps1
|
||||
```
|
||||
|
||||
当前未完成:
|
||||
当前不再作为主线推进的内容:
|
||||
|
||||
- `[ ]` 还没有把 Analysis Situs 的完整 AAG 关系图作为主识别数据源;现在已经消费孔组、AAG 邻接/角度摘要和基础几何关系摘要,并用它们增强孔、槽、凸台、圆角候选的置信度和排序,但编辑计划的主判断仍以本项目现有 `StepModel` / `recognition_graph.py` 为准。
|
||||
- `[ ]` 还没有用 Analysis Situs 直接识别倒角、壳体、阵列孔或装配约束;槽、凸台和圆角当前只是辅助识别提示,不等同于外部特征引擎直接给出的可编辑特征。
|
||||
- `[ ]` 还没有让 Analysis Situs 的共面、同轴、平行、垂直、相切关系直接驱动一级/二级编辑计划;目前它们只作为外部证据增强识别图和置信度,真正能不能改仍由现有 `StepModel`、`recognition_graph.py`、编辑计划和结果守门共同决定。
|
||||
- `[ ]` 不再把 Analysis Situs 的完整 AAG 关系图接成主识别数据源;主识别和主修改优先走 SCDM,Analysis Situs 只增强孔、槽、凸台、圆角候选的置信度和排序。
|
||||
- `[ ]` 不再优先用 Analysis Situs 直接识别倒角、壳体、阵列孔或装配约束;这些高频能力按 SCDM capability 字典逐项产品化。
|
||||
- `[ ]` 不再让 Analysis Situs 的共面、同轴、平行、垂直、相切关系直接驱动一级/二级编辑计划;它们只作为外部证据,真正能不能改由 SCDM cache、能力字典、编辑计划和结果守门共同决定。
|
||||
- `[ ]` 还没有把 Analysis Situs CLI 编译产物纳入打包流程;本地没有 `recognize_holes.exe` 时,程序只走内部识别,不会报错退出。
|
||||
- `[ ]` 还没有做 pybind11 直连;当前是 Python 调外部 CLI,优点是隔离稳定,缺点是启动和 JSON 交换有额外开销。
|
||||
- `[ ]` 暂不做 pybind11 直连;当前 Python 调外部 CLI 的方式更适合作为兜底工具,避免把开源 C++ 分析库直接塞进主 GUI 进程。
|
||||
|
||||
下一步接入顺序:
|
||||
后续只在两种情况下继续动 Analysis Situs:
|
||||
|
||||
1. 把 `tools/asitus_probe` 的构建步骤写入 Windows 打包流程,让交付包能自带可用的 `recognize_holes.exe` 或明确跳过外部识别。
|
||||
2. 继续扩展倒角、壳体、阵列孔等候选的辅助识别提示,仍然只参与“识别和排序”,不直接绕过一级编辑守门。
|
||||
3. 最后再评估是否需要 pybind11 直连;在稳定性没证明之前,CLI 隔离比直接把 C++ 库塞进主进程更安全。
|
||||
1. SCDM 不可用,需要无商业后端兜底识别孔组或轻量关系。
|
||||
2. 需要开源结果和 SCDM probe 结果做对照,帮助判断 SCDM 识别是否漏掉明显几何关系。
|
||||
|
||||
## 怎么运行
|
||||
|
||||
@@ -294,7 +351,7 @@ python main.py assets\models\cube_10mm.step
|
||||
python scripts\generate_cube_step.py
|
||||
```
|
||||
|
||||
10. 验证几何修改基线。当前推进和测试优先级按用户常用操作排序:先 Face 面编辑,再孔、槽、凸台、圆角/倒角、壳体和 Edge,最后再扩二级/三级关系。完整一级编辑回归可以用一个入口串起来:
|
||||
10. 验证几何修改基线。当前主线按 SCDM capability 适配推进;下面这个入口仍保留历史 OCCT/一级编辑回归,用来证明本地兜底能力、UI 和文档守门没有退化:
|
||||
|
||||
```powershell
|
||||
python scripts\verify_first_level_edit_suites.py
|
||||
@@ -391,194 +448,6 @@ git diff --check
|
||||
|
||||
需要注意:STEP 文件通常是 B-Rep 几何数据,不是带完整建模历史的参数化 CAD 原文件。所以“随便选一条边改长度”不一定能稳定实现,实际会转化成更可靠的操作,比如移动某个面、重切某个孔、调整某个圆角等。
|
||||
|
||||
## 参数化编辑路线图
|
||||
|
||||
排序原则:`用户最常用优先 > B-Rep 上稳定可实现 > 参数语义清楚`。这张路线图是后续实现顺序和验收拆分的主线;UI 可以只显示短版进度,但开发和测试按下面这棵树推进。
|
||||
|
||||
状态标记:
|
||||
|
||||
- `[x]` 已实现:已经接入 UI/后端/回归测试,适用于当前明确支持的模型范围。
|
||||
- `[~]` 部分实现/进行中:已有识别、计划或部分模型编辑能力,但真实 STEP 上还需要继续补守门、补失败解释或补局部重建。
|
||||
- `[ ]` 未实现:作为后续目标保留,当前不应在 UI 里伪装成可稳定修改。
|
||||
|
||||
验收口径:
|
||||
|
||||
- `[x]` 不是“所有 CAD 形态都能改”,而是“当前声明支持的模型范围已经有 UI/后端/回归测试闭环”。
|
||||
- R1 Face 是当前主线的第一阶段收口对象;孔、槽、凸台、圆角、壳体和 Edge 已有各自一级基线,但仍按模型工程师给出的真实 STEP 失败项继续补边界。
|
||||
- R8 的二级/三级传播、跨特征约束和特征组联动不算在 0~7 完成度里,不能拿它反向判定 R1 Face 没完成。
|
||||
|
||||
```text
|
||||
STEP/B-Rep 参数化编辑主线
|
||||
├── 0. 先让用户知道“能不能改”
|
||||
│ ├── [x] [选中对象 -> 识别建模形式]
|
||||
│ │ └── Face / 孔 / 槽 / 凸台 / Edge / 圆角 / 倒角候选都要先映射成用户能理解的 CAD 入口。
|
||||
│ ├── [x] [识别结果 -> 显示可修改项]
|
||||
│ │ └── 特征参数表只放当前真正可执行的 [参数 -> 操作],面积这类结果变量放诊断信息。
|
||||
│ ├── [x] [不能修改 -> 立即说明原因]
|
||||
│ │ └── 所有常见特征入口的 blocked plan 会在执行前统一归类成非法输入 / 暂未实现 / 风险过高 / 识别不足,避免等几十秒后才失败。
|
||||
│ ├── [x] [高风险修改 -> 后台隔离执行]
|
||||
│ │ └── OCCT 布尔、圆角、局部重建等危险计算走子进程,失败回滚,主界面和原模型保持稳定。
|
||||
│ └── [x] [路线图 -> 验收脚本守门]
|
||||
│ └── quick 回归覆盖属性表、一级事实、关联探测、各阶段入口、README 口径一致性,并守住 0~7 不混入二级/三级传播任务。
|
||||
│
|
||||
├── 1. 平面 Face,第一条主线
|
||||
│ ├── [x] [偏移 -> 推拉平面 / 拉伸切除]
|
||||
│ │ └── 当前 Face 移动或加料/切削,边、点和共享边一级相邻面跟随重建,复杂端盖走隔离和回滚。
|
||||
│ ├── [x] [偏移 + 保持关系 -> 受限拉伸/切除]
|
||||
│ │ └── 偏移行新增“保持关系”建模意图:执行前要求一级相邻 Face 都能验证为平面平行/垂直关系,执行后反查关系;非平面、斜交或复杂多边界慢计划会提前阻止并有回归守门。
|
||||
│ ├── [x] [面内长度 -> 改长度]
|
||||
│ │ └── 近矩形平面 Face 沿长度方向变化,一级相邻面跟随,面积不作为驱动参数。
|
||||
│ ├── [x] [面内宽度 -> 改宽度]
|
||||
│ │ └── 近矩形平面 Face 沿宽度方向变化,一级相邻面跟随。
|
||||
│ ├── [~] [中心位置 -> 后端保留,界面暂不开放]
|
||||
│ │ └── 中心移动已有后端验证,但模型工程师判断当前客户价值不高,特征参数表暂不显示。
|
||||
│ ├── [x] [壳体厚度 -> 改薄壁厚度]
|
||||
│ │ └── 平面相对面可做局部拉伸/切除或厚度方向缩放,并做 Face 结果校验。
|
||||
│ └── [x] [复杂多边界端盖 -> 边界侧壁重建]
|
||||
│ └── 大 STEP 多内孔平面端盖可走 boundary-shell-rebuild,浅范围内外移动保持内孔线圈和单 Solid;接近切穿或需要孔底/槽底更深关系判断时快速阻止。
|
||||
│
|
||||
├── 2. 孔,第二条主线
|
||||
│ ├── [x] [直径/半径 -> 改孔径]
|
||||
│ │ └── 通孔/盲孔优先同轴重切孔壁,结果必须仍能识别目标圆柱孔。
|
||||
│ ├── [x] [深度 -> 改盲孔深度]
|
||||
│ │ └── 加深切削、变浅补料,目标底面和盲孔语义必须能回读。
|
||||
│ ├── [x] [中心位置 -> 移动孔]
|
||||
│ │ └── 先补旧孔再切新孔,移动的是整个孔特征,不是一片圆柱面。
|
||||
│ ├── [x] [孔本体 -> 封堵/删除孔]
|
||||
│ │ └── 孔壁消失,孔口补面有效,结果保持单 Solid。
|
||||
│ ├── [x] [锥孔/沉孔 -> 局部重切或提前阻止]
|
||||
│ │ └── 简单圆锥解析重建,嵌入式锥孔/沉孔优先局部重切;复杂浅锥、螺纹孔和组合孔提前解释为受限能力。
|
||||
│ ├── [x] [孔编辑范围 -> 单个稳定孔特征]
|
||||
│ │ └── 单孔、锥孔、沉孔的一级关系修改已经作为孔阶段基线。
|
||||
│ ├── [~] [Ctrl 多选完整孔 -> 批量孔径 / 位置偏移]
|
||||
│ │ └── 第一版支持多个完整圆柱孔统一改孔径或按同一偏移移动;等距、阵列、同尺寸联动关系式仍放到第 8 阶段。
|
||||
│ └── [~] [关系式 -> FaceID.参数 = 表达式]
|
||||
│ └── 第一版先把关系式作为“目标值生成器”:用户输入 `Face87.直径 = Face85.直径` 或 `Face87.位置 = Face85.位置 + (0, 0, -3.5)`,程序先计算并回填当前参数表目标值,再复用现有一级编辑执行;跨对象批量队列、等距/阵列/同尺寸联动和持久约束求解后续再扩展。
|
||||
│
|
||||
├── 3. 槽 / 长圆孔,从孔扩展到组合切除特征
|
||||
│ ├── [x] [槽宽 -> 改槽宽]
|
||||
│ │ └── 两侧壁和圆弧端同步更新,结果仍能识别为槽/半孔。
|
||||
│ ├── [x] [槽深 -> 改盲槽深度]
|
||||
│ │ └── 槽底移动,槽口边界有效,不把母体切坏。
|
||||
│ ├── [x] [矩形槽/口袋长宽/深度 -> 局部重建矩形切除]
|
||||
│ │ └── 规则矩形槽/口袋可改长宽和深度;中心移动后端保留但参数表暂不开放。
|
||||
│ ├── [x] [弧长/弧角/开口角 -> 改圆弧槽段]
|
||||
│ │ └── 保持圆柱槽语义,重切后能回读目标弧长或角度。
|
||||
│ ├── [x] [总长/中心距 -> 改长圆槽长度]
|
||||
│ │ └── 自动或手动配对两个圆弧端,槽宽保持不变。
|
||||
│ ├── [x] [中心位置 -> 移动槽]
|
||||
│ │ └── 半圆槽和长圆槽都按特征整体补旧槽、切新槽。
|
||||
│ ├── [x] [复杂/交叉槽 -> 识别并快速阻止]
|
||||
│ │ └── 多个同半径槽端但没有稳定共享侧壁配对时,会标成复杂槽/多槽组,不在扫描列表和参数表里暴露槽宽、槽深、弧长、弧角或轴心入口。
|
||||
│ └── [ ] [复杂草图槽/跨复杂面槽 -> 稳定修改]
|
||||
│ └── 非圆柱槽、跨复杂面的槽暂不承诺稳定编辑;多槽组关联放到第 8 阶段。
|
||||
│
|
||||
├── 4. 凸台 / Boss,从切除特征扩展到加料特征
|
||||
│ ├── [x] [直径/半径 -> 改圆柱凸台直径]
|
||||
│ │ └── 移除旧凸台包络后重建,底部融合必须有效。
|
||||
│ ├── [x] [高度 -> 改凸台高度]
|
||||
│ │ └── 顶面移动,侧壁延伸或裁剪,目标高度可回读。
|
||||
│ ├── [x] [中心位置 -> 移动圆柱凸台]
|
||||
│ │ └── 旧凸台先移除,新凸台按目标轴心补回,不只移动侧壁。
|
||||
│ ├── [x] [矩形凸台/口袋高度/深度 -> 端面推拉]
|
||||
│ │ └── 规则矩形凸台顶面和规则矩形口袋底面可按高度/深度推拉,修改后会回读矩形拉伸尺寸。
|
||||
│ ├── [x] [矩形凸台/口袋长度/宽度 -> 局部重建矩形包络]
|
||||
│ │ └── 规则矩形凸台/口袋可先移除或补回旧包络,再按目标长宽重建;当前不在一次编辑中交换长宽方向。
|
||||
│ ├── [~] [矩形凸台/口袋中心位置 -> 后端保留,界面暂不开放]
|
||||
│ │ └── 中心移动后端仍有计划和回归覆盖,但客户参数表暂时只开放长宽、高度/深度这类更常用尺寸。
|
||||
│ ├── [x] [多台阶矩形凸台顶层规则台阶 -> 独立编辑]
|
||||
│ │ └── 选中多台阶凸台最上层规则矩形台阶的顶面时,可按独立矩形凸台修改长宽和高度。
|
||||
│ └── [x] [复杂多台阶凸台整体 -> 识别并快速阻止]
|
||||
│ └── 多台阶中间过渡面会标记为受限,扫描列表、参数表和计划阶段都不暴露伪可改入口;整组联动、异形凸台和复杂融合边界仍未作为稳定能力。
|
||||
│
|
||||
├── 5. 圆角 / 倒角,从主形体扩展到边修饰
|
||||
│ ├── [x] [Edge -> 添加圆角]
|
||||
│ │ └── 简单直线 Edge 可调用 OCCT 倒圆,失败时回滚。
|
||||
│ ├── [x] [Edge -> 添加倒角]
|
||||
│ │ └── 支持对称倒角、不等距倒角和距离+角度倒角的简单边场景。
|
||||
│ ├── [x] [距离 -> 改已有简单等距倒角]
|
||||
│ │ └── 选中简单倒角斜面时按短边和支撑面估算倒角距离,先移除旧倒角面,再在恢复出的锐边上重新倒角。
|
||||
│ ├── [x] [半径 -> 改已有简单圆角]
|
||||
│ │ └── 当前走 defeature + refillet,目标半径和结果邻域必须反查通过。
|
||||
│ ├── [x] [弧长 -> 调整已有圆角]
|
||||
│ │ └── 按当前圆弧角把目标弧长换算成目标半径,再走 defeature + refillet,结果弧长必须反查通过。
|
||||
│ ├── [x] [简单等半径圆角链 -> 整链半径/弧长修改]
|
||||
│ │ └── 2 到 4 个共享边连通的同半径圆角 Face 可一起 defeature,再对恢复出的多条锐边重新倒圆;弧长会按当前圆弧角换算成目标半径,结果至少反查到同数量目标半径/弧长圆角面。
|
||||
│ ├── [x] [变半径 / 复杂圆角链 -> 识别并快速阻止]
|
||||
│ │ └── 相邻不同半径圆角 Face、角部 blend 或超过 4 个面的同半径长链会阻止,不暴露为单个可改圆角参数。
|
||||
│ └── [ ] [复杂圆角链 / 变半径圆角 -> 通用稳定重建]
|
||||
│ └── 大链式 blend、变半径圆角和复杂角部补面同步重建仍未完成,暂不承诺修改。
|
||||
│
|
||||
├── 6. Edge 一级编辑,补齐底层直接改边能力
|
||||
│ ├── [x] [边长 -> 改直线 Edge 长度]
|
||||
│ │ └── 支持只改当前边、移动端面、相邻圆柱和缩放所属对象等显式建模意图。
|
||||
│ ├── [x] [起点/终点 -> 移动直线 Edge]
|
||||
│ │ └── 简单全平面模型可移动端点并重建相邻面;中心移动后端保留但参数表暂不开放。
|
||||
│ ├── [x] [圆形 Edge 半径/直径 -> 代理到相邻圆柱]
|
||||
│ │ └── 圆边优先复用孔/槽/凸台直径或轴心修改,而不是裸改曲线。
|
||||
│ ├── [x] [椭圆 Edge 主/小半径 -> 单轴缩放]
|
||||
│ │ └── 简单椭圆边可沿主轴或小轴做局部仿射,并校验采样半径。
|
||||
│ ├── [x] [移动端面 -> 简单盒体保持垂直边长语义]
|
||||
│ │ └── 直线 Edge 可把长度变化转成端面推拉,端面和同向边跟随,计划和结果都会反查端面/侧面垂直关系。
|
||||
│ ├── [x] [固定起点/终点/中心 -> Edge 长度锚点]
|
||||
│ │ └── 修改直线 Edge 长度时可选择固定起点、固定终点或固定中心,结果会按锚点反查。
|
||||
│ ├── [x] [平行/垂直 -> 端面推拉一级关系守门]
|
||||
│ │ └── 移动端面策略会确认直接相邻平面和移动端面可验证,执行前给出平面约束摘要,执行后反查垂直/平行关系。
|
||||
│ ├── [x] [平行/垂直 -> Face/Edge 一级事实识别]
|
||||
│ │ └── Face 和 Edge 一级事实图会记录直接邻域内的平行、垂直、斜交关系数量和摘要;Face 事实图还会明确同域/共面碎片和一级同轴圆柱关系,供 UI 说明、计划守门和后续约束求解复用。
|
||||
│ ├── [~] [平行/垂直 -> 通用可选约束]
|
||||
│ │ └── Face 偏移可走受限拉伸/切除,Face 面内长度/宽度的“保持关系”会转成所属对象单向缩放,Edge 长度可走端面推拉;这些路径都会要求一级平面关系可验证并做结果反查。跨多面、跨特征的通用约束求解仍需继续泛化。
|
||||
│ ├── [x] [复杂曲线 Edge -> 可编辑入口守门]
|
||||
│ │ └── B-spline / Bezier / 其它复杂曲线不再在扫描列表或参数表里伪装成稳定“改长度”入口。
|
||||
│ └── [ ] [任意曲线 Edge -> 通用约束编辑]
|
||||
│ └── B-spline 边、复杂曲线边和多约束边不作为当前稳定目标。
|
||||
│
|
||||
├── 7. 壳体 / 解析曲面,补齐高价值但边界更窄的能力
|
||||
│ ├── [x] [壳体厚度 -> 局部拉伸/切除或缩放]
|
||||
│ │ └── 简单薄板和可识别相对平面已纳入 Face/壳体套件。
|
||||
│ ├── [x] [圆锥参考半径/半角 -> 简单圆锥解析重建]
|
||||
│ │ └── 嵌入式锥孔优先局部重切,复杂拔模面提前阻止。
|
||||
│ ├── [x] [球面半径 -> 缩放特征]
|
||||
│ │ └── 修改后仍需识别为目标球面。
|
||||
│ ├── [x] [环面主/小半径 -> 缩放特征]
|
||||
│ │ └── 修改后仍需识别为目标环面。
|
||||
│ └── [x] [完整抽壳/开口面编辑 -> 先识别开口薄壁上下文并明确限制]
|
||||
│ └── 开口薄壁盒/槽腔类区域会标出“完整抽壳/开口面编辑”受限;可编辑对象扫描会优先露出真实薄壁的壳体厚度入口,当前仍只开放局部壳体厚度、平面推拉或整体缩放,不做通用抽壳历史恢复。
|
||||
│
|
||||
└── 8. 二级 / 三级关系,从“局部能改”走向“关系能保持”
|
||||
├── [ ] [Face 二级传播 -> 孔底/槽底/台阶联动]
|
||||
│ └── 当前只自动处理一级共享边邻域,二级/三级传播放到本阶段。
|
||||
├── [x] [一级影响范围 -> 明确显示]
|
||||
│ └── 当前 Face/孔/槽/Edge 已能显示或记录一级边界、顶点和直接相邻 Face 事实。
|
||||
├── [~] [关联探测 -> 找相邻特征]
|
||||
│ └── 已能在有限共享边拓扑范围内找关联孔、槽、凸台等,并合并部分关联尺寸到参数表。
|
||||
├── [~] [共面/同域碎片 -> 同步处理]
|
||||
│ └── 同域合并已用于计划、扫描和历史定位;作为用户可选“共面同步修改”仍需完善。
|
||||
├── [~] [同轴圆柱 -> 保持同轴]
|
||||
│ └── 孔、槽、凸台和圆柱端盖已在部分路径保持同轴;跨特征同轴约束还不是通用能力。
|
||||
├── [ ] [平行/垂直平面 -> 保持方向关系]
|
||||
│ └── 用户选择保持平行/垂直时,相关面方向需要作为约束参与重建。
|
||||
├── [ ] [相切关系 -> 保持连续]
|
||||
│ └── 圆角、圆柱过渡和相切支撑面的连续性需要在传播计划里显式表达。
|
||||
├── [ ] [重复特征组 -> 同组联动]
|
||||
│ └── 孔组、阵列孔、多槽组和多个同尺寸凸台要能选择只改当前一个,或改同组全部。
|
||||
└── [ ] [传播冲突 -> 用户选择范围]
|
||||
└── 当二级/三级关系互相冲突时,列出冲突原因,允许只执行一级或扩展传播,不强行硬改。
|
||||
```
|
||||
|
||||
## 关系式实现流程
|
||||
|
||||
当前关系式先按“可见公式 + 目标值生成器”推进,不把第一版伪装成完整 CAD 约束求解器。
|
||||
|
||||
1. `[~]` 公式输入与显示:左侧 `特征参数` 下方增加 `关系式` 区域,只提供 `添加公式` 和已有公式列表。公式面向用户显示为 `Face87.直径 = Face85.直径`、`Face87.位置 = Face85.位置 + (0, 0, -3.5)` 这类通用 `对象ID.参数` 形式,不使用“孔1/孔2”这类临时命名。
|
||||
2. `[~]` 公式补全:输入 `Face87.` 后,按当前选中对象、当前多选对象和可见参数表提供参数候选;第一版优先覆盖 `直径`、`半径`、`位置`、`位置X/Y/Z`、`偏移`、`面内长度`、`面内宽度`、`长度` 等已经能稳定显示或计算的参数。
|
||||
3. `[~]` 公式计算:点击 `参数化建模` 时,先计算启用的关系式,把结果回填到当前可见参数表目标值;随后继续走现有单参数或多参数批量建模执行链路。第一版不直接跨多个未显示对象开新编辑任务。
|
||||
4. `[~]` 简单 Face ID 追踪:公式保存时记录引用 Face 的逻辑 ID 和轻量几何签名;编辑成功后,如果旧 `Face87` 在新模型中能唯一映射到新 `Face90`,就自动把公式显示更新为 `Face90.参数`。如果找不到、找到多个、Face 被拆分/合并或参数不再存在,则把公式标为失效,提示用户重新选择。
|
||||
5. `[ ]` 跨对象批量执行:后续把多个公式目标拆成执行队列,例如先算 `Face87.直径`、`Face92.直径`,再按对象逐个切换选择并执行已有建模动作;失败时停在明确对象和原因。
|
||||
6. `[ ]` 循环依赖和冲突处理:后续检查 `A = B`、`B = A`、同一目标被多个公式覆盖、同一参数既手工改又被公式驱动等冲突,给出可读提示。
|
||||
7. `[ ]` 持久化:后续把公式、对象签名、目标参数、建模意图和失效状态保存到项目配置或组件配置里,重新打开模型后能尝试恢复。
|
||||
8. `[ ]` 复杂拓扑追踪:后续再处理 `原 Face -> 多个新 Face`、`多个原 Face -> 一个新 Face`、特征删除、阵列孔重编号、装配 occurrence 等情况。
|
||||
|
||||
## 几何修改语义原则
|
||||
|
||||
所有可修改参数都要先明确“这次修改到底代表什么”,不能只因为程序能算出一个结果就直接放行。这个原则适用于 Face、Edge、孔、槽、凸台、圆角、Solid 和整件特征,不是 Edge 专属。比如修改 Face 可能代表 Face 拉伸/切除、局部补料、局部切削、平移所属对象或整体缩放;修改孔/槽可能代表重切侧壁、移动轴心、调整端面深度或重新配对长圆槽端部;修改圆角可能代表移除旧圆角后重建;修改 Edge 可能代表只动这条边、移动相关端面,或者高风险地缩放所属几何。
|
||||
@@ -637,7 +506,7 @@ Face 编辑失败、超时或被稳定性保护阻止时,弹窗不应只显示
|
||||
- 能导出选中的零件。
|
||||
- 能撤销/重做编辑。
|
||||
- 先实现少量可控编辑操作,用于验证后续特征编辑路线。
|
||||
- 当前开发顺序固定按上面的“参数化编辑路线图”推进:先把交互规则和 Face 打稳,再进入孔、槽、凸台、圆角/倒角、Edge、壳体/解析曲面,最后扩展二级/三级关系;每一类都要先做到可操作、可解释、可测试,再进入下一类,避免每类只做一点导致测试分散。
|
||||
- 当前开发顺序固定按上面的 `SCDM-first 主路线` 推进:先打通 SCDM 识别、能力字典、参数表、执行、校验和 ID 续接闭环,再按 SCDM 已能结构化表达的 Face、孔、槽、凸台、圆角/倒角、阵列、壳体能力逐项适配。历史 OCCT/一级编辑套件继续作为兜底回归,不再作为新增能力主线。
|
||||
|
||||
## 能改哪些,一分钟版
|
||||
|
||||
@@ -684,11 +553,11 @@ Face 编辑失败、超时或被稳定性保护阻止时,弹窗不应只显示
|
||||
- 使用 VTK 显示模型,并通过 PySide6/Qt 承载桌面界面。
|
||||
- 左侧操作面板按功能模块分组显示,并使用四边同色的轻量彩色边框和标题层级区分文件、模型树、选择、编辑、导出、显示、测量、候选、历史和属性信息。
|
||||
- 支持选择模式:
|
||||
- 零件
|
||||
- Part
|
||||
- Solid
|
||||
- Face
|
||||
- Edge
|
||||
- 特征
|
||||
- Feature
|
||||
- 鼠标悬停对象会以红色预高亮,真正选中后会以黄色高亮。
|
||||
- 普通 Face / 特征点选优先走轻量选择:只高亮命中的对象并显示基础参数,避免旋转、悬停、点选时触发同域面、端盖、底面等重计算;大模型会关闭鼠标悬停拾取高亮,只保留点击选择;真正执行编辑计划、扫描候选或历史定位时才做更深识别。
|
||||
- 大模型的 VTK 显示网格带有预算保护:即使编辑后请求较细的显示 deflection,也不会对上千个 Face 的 STEP 无限制生成百万级圆柱三角面;B-Rep 几何编辑和结果校验仍使用真实拓扑,显示网格只负责渲染和拾取。只显示少量 Face 或隔离选中对象时仍可局部细化这些 Face,不会触发全模型超细重网格。
|
||||
@@ -701,7 +570,7 @@ Face 编辑失败、超时或被稳定性保护阻止时,弹窗不应只显示
|
||||
- Face / 特征的 `复制 ID` 也优先复制 `逻辑 Face ID`,属性区会同时显示 `逻辑选择 ID` 和 `当前拓扑 Face ID`;这样编辑后拓扑编号变化时,用户仍能用原来的逻辑 ID 回到同一个面区域。
|
||||
- `鼠标选择模式` 下拉框关闭时会把鼠标滚轮交还给左侧滚动面板,避免鼠标经过时误切换模式;打开下拉列表后仍可用滚轮滚动选项。
|
||||
- `按 ID 选择` 会在输入框和 `选择` 按钮之间同步显示当前鼠标选择模式。
|
||||
- `特征` 模式现在会把点到的Face解释为几何特征候选:
|
||||
- `Feature` 模式现在会把点到的Face解释为几何特征候选:
|
||||
- 平面会识别为可拉伸/切除平面候选。
|
||||
- 平面会尝试查找同一Solid内投影重叠的相对平面,用于估算壳体局部区域厚度。
|
||||
- 圆柱面会识别为圆柱孔候选、槽/半孔候选、圆角/倒圆候选、凸台/外圆候选或未明确圆柱特征。
|
||||
@@ -994,7 +863,7 @@ vertices: 3262
|
||||
|
||||
## 下一步要实现什么
|
||||
|
||||
当前已经有按阶段跑通的一级编辑基线,但这还不等于 CAD 级完成。后续按上面的“参数化编辑路线图”继续推进:`[x]` 项保持回归和真实 STEP 验证,`[~]` 项优先补守门、补失败解释、补更多模型样例,`[ ]` 项不能提前在 UI 里伪装成稳定能力。每一类先用小模型和默认大模型保持回归通过,再拿模型工程师的真实 STEP 失败项补识别、补守门、补局部重建策略。
|
||||
当前已经有按阶段跑通的本地一级编辑基线,但这还不等于 CAD 级完成。后续按上面的 `SCDM-first 主路线` 继续推进:`[x]` 项保持回归和真实 STEP 验证,`[~]` 项优先补 SCDM API 细节、守门、失败解释和更多真实模型样例,`[ ]` 项不能提前在 UI 里伪装成稳定能力。新增能力优先看 SCDM 能否返回结构化对象、当前值、可用命令和可校验结果;本地 OCCT 只作为兜底和已验证快路径保留。
|
||||
|
||||
当前整体验证基线:
|
||||
|
||||
@@ -1008,19 +877,19 @@ vertices: 3262
|
||||
- 2026-08-18,新增 `python scripts\verify_scdm_backend.py`、`python scripts\verify_scdm_status.py`、`python scripts\verify_scdm_probe_pipeline.py`、`python scripts\verify_scdm_edit_runner.py` 和 `python scripts\verify_scdm_result_validator.py`,覆盖 SCDM 后端发现、缓存、禁用开关、/RunScript 命令生成、左侧状态摘要、probe job/script 生成、raw->cache 映射、edit job/script/result/error 执行协议,以及结果文件检查、目标值回测、ID 映射和关系式重写;已接入 `--quick`。
|
||||
- 2026-08-18,本机 `D:\softwaresInstallDir\ANSYS Inc\v222\SCDM\SpaceClaim.exe` 已通过真实 `/RunScript` smoke;对 `assets/models/ICEPAK-NATURAL.stp` 的真实 probe 可打开模型并输出 13 个 Body、158 个 Face、396 条 Edge,396 条 Edge 均可回传长度、起终点和相邻 Face 数,其中 160 条圆弧/圆边可回传半径和圆心。当前 `StandardHoles.GetHoleFaces` 对该 STEP 返回 0 个标准孔面,因此已改为按同中心/同轴/同半径聚合圆柱碎片;真实 SCDM 已验证 face.offset、孔径和孔位置,输出 STEP 均可被 SCDM probe 回读。
|
||||
|
||||
Face 阶段的当前验收口径(R1 已收口):
|
||||
Face 阶段的当前验收口径(本地 OCCT 兜底基线,R1 已收口):
|
||||
|
||||
- 已验收:平面 Face 的 `偏移`,稳定矩形/简单全平面 Face 的 `面内长度`、`面内宽度`,以及壳体厚度、圆柱端盖/圆柱侧面高度这类挂在 Face 入口上的高频编辑;支持 `局部重建`、`拉伸/切除`、`移动特征`、`缩放特征` 和受限的 `保持关系`。`中心` 移动后端保留,但特征参数表暂不开放。
|
||||
- 已验收:Face 的 `一级关系` 定义为选中 Face 本身、必要的同域/共面碎片 Face、这些 Face 的边界 Edge/Vertex,以及与该区域共享边的直接相邻 Face。只共享顶点的对象、相邻 Face 再连出去的 Face 都不作为 R1 自动传播范围。
|
||||
- 已验收:选中平面 Face 时,程序会生成 `一级关系` 事实包,记录当前 Face 区域、同域/共面碎片、一级平行/垂直关系、一级同轴圆柱事实、边界 Edge/Vertex、共享边相邻 Face,并明确二级、三级关系暂不自动传播;这些事实用于计划、校验和诊断,不再作为特征参数行显示。
|
||||
- 可用但受限:带内孔平面、曲面 Solid 上的平面、自由曲面、非矩形面、复杂端盖、接近切穿的内切等场景会按明确守门执行;能稳定改就走隔离/回滚,不能稳定改就提前 blocked 并说明原因。
|
||||
- 未实现/不承诺:原 CAD 历史恢复、任意复杂 Face 的通用局部重建、孔底/槽底/台阶等二级/三级传播、跨特征约束求解和特征组联动;这些属于 R8,不算 R1 未完成项。
|
||||
- 未实现/不承诺:原 CAD 历史恢复、任意复杂 Face 的通用局部重建、手写孔底/槽底/台阶等二级/三级传播、跨特征约束求解和特征组联动;这些不再作为 SCDM-first 近期主线,不算 Face 兜底基线未完成项。
|
||||
- `python scripts\verify_first_level_edit_suites.py --stage face` 必须通过,集中运行 R1 Face 专项套件和 Face isolated worker。
|
||||
- `python scripts\verify_face_edit_suite.py` 必须通过,集中覆盖面内长度/面内宽度、中心、偏移、保持关系、壳体厚度、拉伸/切除、局部变形禁用、目标值保护、属性回读、逻辑 Face ID 保持,以及 UI 里标题/复制 ID/按 ID 选择是否优先使用逻辑 Face ID。
|
||||
- `python scripts\verify_property_editor_specs.py` 必须通过,确保平面 Face 的特征参数表使用 `面内长度`、`面内宽度`、`偏移` 这些用户可理解的名称,暂时隐藏 `中心`,且不把面积暴露成可编辑驱动参数,并递归检查提示文字里不再出现容易误解的旧词。
|
||||
- `python scripts\verify_face_first_level_topology.py` 必须通过,确保普通正方体 Face 的一级关系能识别 4 条边界 Edge、4 个边界 Vertex、4 个共享边相邻 Face,并证明局部移动后目标 Face 的边界 Vertex 与共享边 Edge 已到新位置、一级侧面跟随重建、二级底面不跟随移动。
|
||||
|
||||
孔/槽阶段的当前验收口径(R2/R3 已收口):
|
||||
孔/槽阶段的当前验收口径(本地 OCCT 兜底基线,R2/R3 已收口):
|
||||
|
||||
- 已验收:圆柱孔/盲孔的 `直径`、`半径`、`轴心`、`盲孔深度` 和 `封堵/删除孔`。孔径按同轴重切孔壁执行,轴心移动会先补旧孔再切新孔,盲孔深度会按加深切削或变浅补料处理,结果必须仍能回读目标孔特征。
|
||||
- 已验收:槽/半孔/长圆槽的 `槽宽`、`槽深`、`圆弧长度`、`圆弧角度`、`开口角度`、`轴心`、`总长度` 和 `中心距`。普通半圆槽按局部圆柱槽重切,长圆槽按两端圆弧配对后重建,修改后必须仍能识别为目标槽或半孔。
|
||||
@@ -1028,18 +897,18 @@ Face 阶段的当前验收口径(R1 已收口):
|
||||
- 已验收:孔/槽局部布尔和重建会走隔离 worker,修改后会校验 B-Rep、单 Solid、目标几何回读和逻辑 Face ID 保持;失败时回滚,不破坏原模型。
|
||||
- 可用但受限:当前只承诺单个稳定孔、单个盲孔、单个半圆槽和可稳定配对的长圆槽;锥孔/沉孔只处理简单解析或局部重切路径,复杂浅锥、螺纹孔、组合孔、底面识别不可靠的盲孔会提前阻止。
|
||||
- 可用但受限:复杂槽、交叉槽、多槽端配对不唯一时,只做识别和快速阻止,不在参数表暴露槽宽、槽深、弧长、弧角或轴心这些伪可改入口。
|
||||
- 未实现/不承诺:孔组、阵列孔、同尺寸孔联动、多槽组联动、螺纹孔语义编辑、任意草图槽、跨复杂面槽、孔底/槽底带动台阶的二级/三级传播;这些属于 R8 或后续阶段,不算 R2/R3 未完成项。
|
||||
- 未实现/不承诺:孔组、阵列孔、同尺寸孔联动、多槽组联动、螺纹孔语义编辑、任意草图槽、跨复杂面槽、手写孔底/槽底带动台阶的二级/三级传播;这些不再作为 SCDM-first 近期主线,不算孔/槽兜底基线未完成项。
|
||||
- `python scripts\verify_first_level_edit_suites.py --stage hole-slot` 必须通过,集中运行 R2/R3 孔槽专项套件。
|
||||
- `python scripts\verify_hole_slot_edit_suite.py` 必须通过,覆盖孔/槽一级圆柱拓扑、通孔/盲孔局部重建、半圆槽/长圆槽局部重建、隔离 worker、逻辑 Face ID 保持、识别摘要、一级事实图和属性表分组。
|
||||
- `python scripts\verify_cylindrical_first_level_topology.py` 必须通过,确保孔/槽类圆柱特征会暴露侧壁、边界 Edge/Vertex、直接相邻 Face、底面/开口面/槽边界面,并明确二级、三级关系暂不自动传播。
|
||||
- `python scripts\verify_hole_slot_isolated_edit.py` 必须通过,确保孔径、孔径缩放特征、孔轴心、孔封堵、盲孔深度、槽宽、槽宽缩放特征、槽深、弧长、弧角、槽轴心、长圆槽总长度和中心距都能通过隔离执行通道验证。
|
||||
|
||||
0~7 其它阶段的当前基线:
|
||||
本地 OCCT 兜底能力的当前基线:
|
||||
|
||||
- R2/R3 孔槽已经拆成独立验收口径;后续只在真实 STEP 失败项上补识别、补守门、补局部重建,不把孔组、阵列孔、多槽组联动提前混进 0~7。
|
||||
- R2/R3 孔槽已经拆成独立验收口径;后续只在真实 STEP 失败项上补识别、补守门、补局部重建。孔组、阵列孔、多槽组联动是否开放,改由上面的 SCDM capability 路线判断。
|
||||
- `python scripts\verify_first_level_edit_suites.py --stage edge` 覆盖 Edge 一级拓扑、长度建模意图、坐标修改、圆角/倒角、椭圆 Edge 和 isolated worker。任意曲线 Edge 通用约束编辑仍未开放。
|
||||
- `python scripts\verify_first_level_edit_suites.py --stage boss --stage round-chamfer --stage shell --stage analytic` 覆盖凸台、圆角/倒角、壳体厚度和解析曲面当前可用范围。复杂链式特征、通用抽壳历史恢复和跨特征传播仍不承诺。
|
||||
- R2/R3 孔槽收口后,下一步优先把 Edge、凸台、圆角/倒角、壳体和解析曲面也按“已验收 / 可用但受限 / 未实现”继续收口。
|
||||
- 这些阶段后续只作为本地兜底能力维护;新增客户入口优先从 SCDM capability 路线开放。
|
||||
|
||||
## 怎么使用
|
||||
|
||||
@@ -1056,11 +925,11 @@ Face 阶段的当前验收口径(R1 已收口):
|
||||
|
||||
左侧 `选择模式` 用来切换鼠标选择模式:
|
||||
|
||||
- `零件`:选择整个零件。
|
||||
- `Part`:选择整个零件。
|
||||
- `Solid`:选择实体。
|
||||
- `Face`:选择面。
|
||||
- `Edge`:选择边。
|
||||
- `特征`:按几何特征候选方式选择。平面会识别为可拉伸/切除平面候选;圆柱面会进一步识别为圆柱孔、槽/半孔、圆角/倒圆、凸台/外圆等候选。
|
||||
- `Feature`:按几何特征候选方式选择。平面会识别为可拉伸/切除平面候选;圆柱面会进一步识别为圆柱孔、槽/半孔、圆角/倒圆、凸台/外圆等候选。
|
||||
圆柱面候选会额外显示侧壁 Face、端面 Face、疑似底面 Face、开口端相邻 Face 和边界 Edge。
|
||||
- 鼠标悬停时,当前模式下将要选中的对象会显示为红色;真正选中后会显示为黄色。
|
||||
- 如果当前模式是 `Edge`,即使鼠标点到的是面,程序也会从这个面的边界里选取距离鼠标拾取点最近的Edge。
|
||||
@@ -1204,7 +1073,7 @@ Face 阶段的当前验收口径(R1 已收口):
|
||||
- 它会按目标直径或半径比例均匀缩放所属特征或 Solid,适合“整个所属对象一起放大/缩小”的意图。
|
||||
- 它不适合只想改孔壁的场景,因为高度、厚度和同一对象上的其它尺寸会一起变化。
|
||||
- `槽/半孔宽度` + `调整槽/半孔宽度`:
|
||||
- 先切换到 `特征` 选择模式并选择一个槽/半孔候选 Face,或从圆柱面候选表中选择局部圆柱形 `hole/groove candidate`。
|
||||
- 先切换到 `Feature` 选择模式并选择一个槽/半孔候选 Face,或从圆柱面候选表中选择局部圆柱形 `hole/groove candidate`。
|
||||
- 选中符合条件的槽/半孔后,`槽/半孔宽度` 会自动填入一个比当前槽宽估算略大的建议值。
|
||||
- 输入目标槽宽后点击 `调整槽/半孔宽度`。
|
||||
- 程序会用当前圆弧角度把目标槽宽换算成目标圆柱直径,再复用圆柱孔/槽调整流程。
|
||||
@@ -1325,7 +1194,7 @@ Face 阶段的当前验收口径(R1 已收口):
|
||||
- 这是“给直线边添加新圆角”,不是修改已有圆角面。
|
||||
- 由于 STEP 不带建模历史,某些边会被 OCCT 判断为不适合倒圆;失败时程序会提示并尝试恢复编辑前状态。
|
||||
- `圆角半径` / `圆角弧长` 的 `重建圆角`:
|
||||
- 先切换到 `特征` 选择模式并选择一个已有圆角/倒圆候选 Face,或从 `可编辑对象` 中点击 `修改已有圆角半径` 行进入。
|
||||
- 先切换到 `Feature` 选择模式并选择一个已有圆角/倒圆候选 Face,或从 `可编辑对象` 中点击 `修改已有圆角半径` 行进入。
|
||||
- 在当前选中对象表里修改 `圆角半径` 或 `圆角弧长`,并把 `建模意图` 设为 `重建圆角`。
|
||||
- 输入目标值后点击 `参数化建模`。
|
||||
- 程序会先检查该Face是否为 `round/fillet candidate`、是否识别到至少两个支撑Face、目标半径是否有效,以及当前零件是否为单Solid。
|
||||
@@ -1414,7 +1283,7 @@ Face 阶段的当前验收口径(R1 已收口):
|
||||
- `导出选中零件`:导出当前选中的零件。
|
||||
- `导出选中Solid`:先选中一个Solid,再导出该Solid。
|
||||
- `导出选中面区域`:先切换到 `Face` 选择模式并选中一个Face,再导出该Face;如果当前选择已经带有特征区域信息,则会导出这片已知区域。
|
||||
- `导出选中特征区域`:先切换到 `特征` 选择模式并选中特征,再导出当前特征高亮的Face集合。
|
||||
- `导出选中特征区域`:先切换到 `Feature` 选择模式并选中特征,再导出当前特征高亮的Face集合。
|
||||
- `导出选中Edge`:先切换到 `Edge` 选择模式并选中一个Edge,再导出该Edge。
|
||||
- `导出参数`:在 `特征参数` 表的 `输入参数` 列勾选需要外部驱动的尺寸行后,点击按钮会在项目根目录写出 `data.json`,并在 `nodes/` 下生成一个 FlowEditor 风格的参数化组件 `main.py`。组件脚本会把勾选的输入参数直接嵌入 `INPUT_PARAMETERS`,通过 `PARAMETERS / NODE_INFO` 暴露给节点设计器,并提供 `execute(inputs, params, context)` 调用入口;组件目录里不会额外生成 `data.json` 或 `step_edit_config.json`。执行后返回 `output_step`,指向修改后的 STEP 文件。
|
||||
- `检查导出质量`:检查当前选中对象;如果没有选中对象,就检查当前完整模型。
|
||||
@@ -1483,6 +1352,7 @@ pythonocc-step-editor/
|
||||
verify_hole_resize.py # 临时生成通孔/盲孔 STEP 并验证孔径/孔轴心/盲孔深度修改
|
||||
verify_property_editor_specs.py # 验证属性表不会把通用 Face 编辑混入孔/槽/凸台/圆角/解析曲面特征
|
||||
verify_property_card_editor_ui.py # 验证参数表 UI 能构建、检测目标值修改并展开完整参数
|
||||
verify_relation_formula_rules.py # 验证关系式自引用、重复目标和循环依赖会在添加阶段阻止
|
||||
verify_parametric_component_export.py # 验证导出参数会生成嵌入参数列表的组件 main.py,组件目录不额外写 data.json
|
||||
verify_scdm_backend.py # 验证 SCDM 后端发现、缓存、禁用开关和 /RunScript 烟测命令生成
|
||||
verify_scdm_status.py # 验证 SCDM 左侧状态摘要、后端来源、识别缓存计数和 OCCT/Analysis Situs 兜底说明
|
||||
@@ -1605,7 +1475,7 @@ git diff --check
|
||||
- `assets/screenshots/`:调试截图和问题截图,默认忽略,不提交。
|
||||
- `scripts/generate_cube_step.py`:生成 `assets/models/cube_10mm.step`。
|
||||
- `scripts/verify_first_level_acceptance_docs.py`:验证 README 里声明的一级验收口径、阶段命令和脚本清单仍然能对上 `verify_first_level_edit_suites.py`,避免目标文档和实际验证入口脱节。
|
||||
- `scripts/verify_first_level_edit_suites.py`:一级编辑总验证入口。默认按 Face、孔/槽、Edge、凸台、圆角/倒角、壳体和解析曲面阶段串起现有专项套件;`--quick` 跑烟测、属性表、参数表 UI、SCDM 后端发现底座、SCDM 状态摘要、SCDM probe/cache 假数据管线、SCDM edit job/runner 协议、SCDM result validator、ICEPAK 真实 STEP 同域圆柱孔、一级事实图、关联探测、显示网格预算和验收文档一致性;`--stage edge` 这类参数可只跑某个阶段。
|
||||
- `scripts/verify_first_level_edit_suites.py`:一级编辑总验证入口。默认按 Face、孔/槽、Edge、凸台、圆角/倒角、壳体和解析曲面阶段串起现有专项套件;`--quick` 跑烟测、属性表、参数表 UI、关系式规则、SCDM 后端发现底座、SCDM 状态摘要、SCDM probe/cache 假数据管线、SCDM edit job/runner 协议、SCDM result validator、ICEPAK 真实 STEP 同域圆柱孔、一级事实图、关联探测、显示网格预算和验收文档一致性;`--stage edge` 这类参数可只跑某个阶段。
|
||||
- `scripts/verify_scdm_backend.py`:纯 Python 检查 SCDM 后端发现和缓存逻辑,不依赖 OCC;覆盖环境变量、常见安装目录、`local/scdm_backend.json`、禁用开关和 `/RunScript` 命令生成。
|
||||
- `scripts/verify_scdm_status.py`:纯 Python 检查 SCDM 运行状态摘要,不依赖 OCC;覆盖未配置、已配置、后台识别中、识别成功、识别失败、cache 失效和缓存来源显示。
|
||||
- `scripts/verify_scdm_probe_pipeline.py`:纯 Python 检查 SCDM probe job、RunScript 脚本生成、raw 识别结果到产品化 cache 的映射;覆盖第一批 `hole.diameter`、`hole.position` 和 `face.offset` 能力。
|
||||
|
||||
Reference in New Issue
Block a user