dsh-engineering-ui 0.0.0-stage → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +772 -3
- package/engineering/plugins/dsh-engineering-ui/cordis.patch.yml +5 -0
- package/engineering/plugins/dsh-engineering-ui/icon.svg +14 -0
- package/engineering/plugins/dsh-engineering-ui/lib/client.js +8259 -0
- package/engineering/plugins/dsh-engineering-ui/lib/defense-sign.js +1552 -0
- package/engineering/plugins/dsh-engineering-ui/lib/index.js +5633 -0
- package/engineering/plugins/dsh-engineering-ui/lib/job-wait-guard.js +236 -0
- package/engineering/plugins/dsh-engineering-ui/lib/mem-guard.js +331 -0
- package/engineering/plugins/dsh-engineering-ui/lib/webots.js +114 -0
- package/engineering/plugins/dsh-engineering-ui/locale/en.json +6 -0
- package/engineering/plugins/dsh-engineering-ui/locale/zh.json +6 -0
- package/engineering/plugins/dsh-engineering-ui/preset-engineering.patch.yml +601 -0
- package/engineering/skills/assembly-orchestration/SKILL.md +651 -0
- package/engineering/skills/cad-workflow/SKILL.md +132 -0
- package/engineering/skills/mode-selection/SKILL.md +660 -0
- package/engineering/skills/physics-in-loop/SKILL.md +238 -0
- package/engineering/skills/physics-in-loop/references/feadocs.md +142 -0
- package/engineering/skills/solidworks-bridge/SKILL.md +445 -0
- package/engineering/skills/sw-design/SKILL.md +112 -0
- package/engineering/skills/sw-design/references/autocad-workflow.md +81 -0
- package/engineering/skills/sw-design/references/gbt-drafting.md +71 -0
- package/engineering/skills/sw-to-cad/SKILL.md +121 -0
- package/engineering/skills/webots-simulation/SKILL.md +58 -0
- package/engineering/tools/LICENSE.Auto-SolidWorks +21 -0
- package/engineering/tools/_plugin_paths.py +93 -0
- package/engineering/tools/_root.py +330 -0
- package/engineering/tools/_store.py +446 -0
- package/engineering/tools/ac_bridge.py +459 -0
- package/engineering/tools/ac_rules.json +21 -0
- package/engineering/tools/ac_validate.py +699 -0
- package/engineering/tools/ask_user.py +887 -0
- package/engineering/tools/build_arm1.py +46 -0
- package/engineering/tools/build_assembly.py +94 -0
- package/engineering/tools/build_base.py +57 -0
- package/engineering/tools/build_housing.py +70 -0
- package/engineering/tools/build_structural.py +43 -0
- package/engineering/tools/build_transmission.py +69 -0
- package/engineering/tools/cadx.lsp +128 -0
- package/engineering/tools/choice_contract.py +61 -0
- package/engineering/tools/conn_state.py +1671 -0
- package/engineering/tools/defense_gate.py +3374 -0
- package/engineering/tools/drawing_input.py +314 -0
- package/engineering/tools/env_check.py +467 -0
- package/engineering/tools/examples/build_axis.py +142 -0
- package/engineering/tools/examples/build_cup.py +56 -0
- package/engineering/tools/examples/build_plate.py +58 -0
- package/engineering/tools/examples/build_sphere.py +30 -0
- package/engineering/tools/examples/build_transition_duct.py +381 -0
- package/engineering/tools/gate_integrity.py +401 -0
- package/engineering/tools/mode2_flow.py +3589 -0
- package/engineering/tools/mode_checker.py +77 -0
- package/engineering/tools/mode_gate.py +8013 -0
- package/engineering/tools/part_registry.py +4266 -0
- package/engineering/tools/physics/__init__.py +50 -0
- package/engineering/tools/physics/_compat.py +12 -0
- package/engineering/tools/physics/design_state.py +142 -0
- package/engineering/tools/physics/domain_validator.py +751 -0
- package/engineering/tools/physics/fatigue.py +489 -0
- package/engineering/tools/physics/fea_solver.py +1163 -0
- package/engineering/tools/physics/feapy_solver.py +314 -0
- package/engineering/tools/physics/gb_materials.json +1228 -0
- package/engineering/tools/physics/geometry_gate.py +337 -0
- package/engineering/tools/physics/load_case.py +951 -0
- package/engineering/tools/physics/material_db.py +874 -0
- package/engineering/tools/physics/mesh_adapter.py +321 -0
- package/engineering/tools/physics/refine_rules.py +272 -0
- package/engineering/tools/physics/rules/gb_base_rules.json +377 -0
- package/engineering/tools/physics/rules/gb_drafting_rules.json +57 -0
- package/engineering/tools/physics/rules/gb_electrical_rules.json +25 -0
- package/engineering/tools/physics/rules/gb_fasteners_rules.json +73 -0
- package/engineering/tools/physics/rules/gb_housing_rules.json +41 -0
- package/engineering/tools/physics/rules/gb_manufacturing_rules.json +25 -0
- package/engineering/tools/physics/rules/gb_material_verify_rules.json +72 -0
- package/engineering/tools/physics/rules/gb_materials_rules.json +377 -0
- package/engineering/tools/physics/rules/gb_safety_rules.json +89 -0
- package/engineering/tools/physics/rules/gb_springs_rules.json +41 -0
- package/engineering/tools/physics/rules/gb_standards_registry.json +1646 -0
- package/engineering/tools/physics/rules/gb_structural_rules.json +201 -0
- package/engineering/tools/physics/rules/gb_surface_rules.json +25 -0
- package/engineering/tools/physics/rules/gb_transmission_rules.json +233 -0
- package/engineering/tools/physics/rules/housing_rules.json +48 -0
- package/engineering/tools/physics/rules/manifest.json +54 -0
- package/engineering/tools/physics/rules/mold_rules.json +48 -0
- package/engineering/tools/physics/rules/structural_rules.json +56 -0
- package/engineering/tools/physics/rules/transmission_rules.json +48 -0
- package/engineering/tools/physics/simulation_report.py +829 -0
- package/engineering/tools/physics_bridge.py +2685 -0
- package/engineering/tools/profile-manifest.ps1 +72 -0
- package/engineering/tools/run_regression.py +109 -0
- package/engineering/tools/settings.py +419 -0
- package/engineering/tools/solidworks-modeling.md +519 -0
- package/engineering/tools/sw_bridge.py +8215 -0
- package/engineering/tools/sw_guard.py +1066 -0
- package/engineering/tools/sw_surface.py +87 -0
- package/engineering/tools/swapi.py +14766 -0
- package/engineering/tools/verify_sync.py +218 -0
- package/engineering/tools/visual_check.py +2589 -0
- package/engineering/tools/webots_env.py +121 -0
- package/engineering/tools/webots_mcp/__init__.py +3 -0
- package/engineering/tools/webots_mcp/__main__.py +3 -0
- package/engineering/tools/webots_mcp/assembly.py +391 -0
- package/engineering/tools/webots_mcp/bootstrap.py +55 -0
- package/engineering/tools/webots_mcp/controller_worker.py +124 -0
- package/engineering/tools/webots_mcp/evidence.py +288 -0
- package/engineering/tools/webots_mcp/fake_worker.py +69 -0
- package/engineering/tools/webots_mcp/fault_resources.py +121 -0
- package/engineering/tools/webots_mcp/host.py +45 -0
- package/engineering/tools/webots_mcp/ledger.py +73 -0
- package/engineering/tools/webots_mcp/owned_job.py +70 -0
- package/engineering/tools/webots_mcp/physical_gate.py +187 -0
- package/engineering/tools/webots_mcp/physics.py +152 -0
- package/engineering/tools/webots_mcp/pipeline.py +108 -0
- package/engineering/tools/webots_mcp/recipes.py +129 -0
- package/engineering/tools/webots_mcp/repair.py +132 -0
- package/engineering/tools/webots_mcp/repair_trial.py +375 -0
- package/engineering/tools/webots_mcp/runtime.py +311 -0
- package/engineering/tools/webots_mcp/server.py +217 -0
- package/engineering/tools/webots_mcp/sw_export.py +509 -0
- package/engineering/tools/webots_mcp/transport.py +156 -0
- package/engineering/tools/workflow_gate.py +6134 -0
- package/package.json +64 -4
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: solidworks-bridge
|
|
3
|
+
description: >-
|
|
4
|
+
SolidWorks 自动化建模桥接工具(DSH_SW 通用版)。
|
|
5
|
+
通过 Python win32com 驱动 SolidWorks,支持 SW 2018~2024 任意版本。
|
|
6
|
+
单位:毫米(mm),默认前缀:DSH_。
|
|
7
|
+
whenToUse: >-
|
|
8
|
+
当用户要求用 SolidWorks 建模、画图、生成 3D 零件、输出 .sldprt 文件时使用。
|
|
9
|
+
source: engineering
|
|
10
|
+
provider: filesystem
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# SolidWorks 建模桥接(DSH_SW 通用版)
|
|
14
|
+
|
|
15
|
+
> **本文件是通用版**:不写死任何电脑路径或 SolidWorks 版本号。
|
|
16
|
+
> 复制到其他电脑后,把 `<包目录>` 替换成实际路径即可。
|
|
17
|
+
|
|
18
|
+
## 0. 核心架构
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
DSH (pwsh 工具)
|
|
22
|
+
│ python <包目录>\sw_bridge.py run <脚本.py>
|
|
23
|
+
▼
|
|
24
|
+
sw_bridge.py (win32com 执行器)
|
|
25
|
+
│ win32com.client.dynamic.Dispatch('SldWorks.Application')
|
|
26
|
+
▼
|
|
27
|
+
SolidWorks(任意版本,自动探测模板)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 1. 单位约定
|
|
31
|
+
|
|
32
|
+
**所有尺寸单位默认毫米(mm)**,用户没说单位就是 mm。
|
|
33
|
+
脚本中直接写 `m.rect(0, 0, 120, 80)` 就是 120mm×80mm。
|
|
34
|
+
|
|
35
|
+
## 2. 保存命名约定
|
|
36
|
+
|
|
37
|
+
**保存文件名按用户提供的模型名称命名**:
|
|
38
|
+
- 前缀统一 `DSH_` + 用户提供的名称 + `.sldprt`
|
|
39
|
+
- 用户说"建模一个圆球",就保存为 `DSH_圆球.sldprt`
|
|
40
|
+
- 用户给了明确文件名则优先用用户指定的名字
|
|
41
|
+
|
|
42
|
+
## 3. 完整 API 速查
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
import swapi
|
|
46
|
+
|
|
47
|
+
# ── 文档操作 ───────────────────────────────────────
|
|
48
|
+
m = swapi.new_part() # 新建零件(模板自动探测)
|
|
49
|
+
m = swapi.from_active() # 包装当前活动文档
|
|
50
|
+
m.save(path) # 另存为(返回 {"ok": True/False, "path": ...})
|
|
51
|
+
m.massprops() # 质量属性(体积/重量/重心)
|
|
52
|
+
m.close() # 关闭文档
|
|
53
|
+
m.export_pdf(path) # 导出 PDF
|
|
54
|
+
|
|
55
|
+
# ── 展示 / 可视化 ─────────────────────────────────
|
|
56
|
+
m.bring_to_front() # 窗口置前 + 最大化
|
|
57
|
+
m.set_view_iso() # 等轴测视角 + 居中 + 缩放 1.2x
|
|
58
|
+
m.zoom_to_fit() # 缩放适应窗口
|
|
59
|
+
m.screenshot(path) # 窗口截图 PNG
|
|
60
|
+
m.export_image(path) # 导出位图
|
|
61
|
+
m.rebuild() # 重建模型
|
|
62
|
+
|
|
63
|
+
# ── 基准面 / 草图 ────────────────────────────────
|
|
64
|
+
m.begin_sketch("Front Plane") # 在基准面开始草图(自动正视+居中)
|
|
65
|
+
m.begin_sketch_on_face(x, y, z) # 在实体表面开草图(坐标 mm)
|
|
66
|
+
m.end_sketch() # 结束草图(自动 MergePoints 闭合端点)
|
|
67
|
+
|
|
68
|
+
# ── 草图图元(坐标单位 mm)───────────────────────
|
|
69
|
+
m.rect(cx, cy, w, h) # 中心矩形
|
|
70
|
+
m.circle(cx, cy, r) # 圆
|
|
71
|
+
m.line(x1, y1, x2, y2) # 直线
|
|
72
|
+
m.polyline([(x1,y1), (x2,y2), ...]) # 折线
|
|
73
|
+
m.centerline(x1, y1, x2, y2) # 中心线(旋转轴)
|
|
74
|
+
|
|
75
|
+
# ── 特征操作(尺寸单位 mm)──────────────────────
|
|
76
|
+
m.extrude(depth, symmetric=False) # 拉伸凸台
|
|
77
|
+
m.cut(depth=10, through=True) # 切除 / 完全贯穿
|
|
78
|
+
m.revolve(angle_deg=360, cut=False) # 旋转(需先画中心线)
|
|
79
|
+
m.fillet(radius, edge_points) # 圆角:边上的采样点坐标
|
|
80
|
+
m.chamfer(width, edge_points, 45) # 倒角
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 4. 调用方式(DSH AI 使用)
|
|
84
|
+
|
|
85
|
+
AI 通过 DSH 的 `pwsh` 工具执行:
|
|
86
|
+
|
|
87
|
+
> **路径查找(新电脑/未知环境)**:先运行 `python "<工程模式根目录>\tools\sw_bridge.py" self-path`,返回 JSON 中的 `.dir` 字段即为 `<包目录>`。无需手动替换占位符。
|
|
88
|
+
|
|
89
|
+
```powershell
|
|
90
|
+
# 查找 sw_bridge.py 路径(推荐第一步)
|
|
91
|
+
python "<工程模式根目录>\tools\sw_bridge.py" self-path
|
|
92
|
+
# 返回: {"ok": true, "path": "C:\\...\\sw_bridge.py", "dir": "C:\\..."}
|
|
93
|
+
|
|
94
|
+
# 检查 SolidWorks 连接状态
|
|
95
|
+
python "<包目录>\sw_bridge.py" status
|
|
96
|
+
|
|
97
|
+
# 执行建模脚本
|
|
98
|
+
python "<包目录>\sw_bridge.py" run "<脚本路径>"
|
|
99
|
+
|
|
100
|
+
# 展示成品
|
|
101
|
+
python "<包目录>\sw_bridge.py" show
|
|
102
|
+
|
|
103
|
+
# 生成工程图(强制中文视图名 *前视/*上视/*右视/*等轴测)
|
|
104
|
+
python "<包目录>\sw_bridge.py" drawing "零件路径" [输出路径]
|
|
105
|
+
|
|
106
|
+
# 导出 DWG
|
|
107
|
+
python "<包目录>\sw_bridge.py" dwg "零件路径" [输出路径]
|
|
108
|
+
|
|
109
|
+
# 清理临时文件
|
|
110
|
+
python "<包目录>\sw_bridge.py" cleanup "目录路径"
|
|
111
|
+
|
|
112
|
+
# Vision 不可用时截图供前端识图
|
|
113
|
+
python "<包目录>\sw_bridge.py" vision-fallback "描述"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 4.5 SW 使用窗口互斥 + 批量调用(多小屋并行时必须遵守)
|
|
117
|
+
|
|
118
|
+
### SW 进程级互斥窗口(代码级强制,自动生效)
|
|
119
|
+
|
|
120
|
+
每个 sw_bridge.py 调用都会自动检测 SLDWORKS.EXE 进程并排队(FIFO 先到先用):
|
|
121
|
+
|
|
122
|
+
```powershell
|
|
123
|
+
# 推荐:带上房间名(来自小屋 prompt 中的房间名)
|
|
124
|
+
python "<包目录>\sw_bridge.py" run "script.py" --room "结构件"
|
|
125
|
+
|
|
126
|
+
# 或用环境变量
|
|
127
|
+
$env:DSH_ROOM = "结构件"; python "<包目录>\sw_bridge.py" run "script.py"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
- 并行模式下多个小屋同时跑:SW 调用自动检测进程并 FIFO 排队(谁先排队谁先用)
|
|
131
|
+
- 若返回 sw_busy:true:用 `python mode_gate.py sw-wait <房间> --timeout 90` 原地阻塞等锁(或 `wait-rooms`),
|
|
132
|
+
再重试同一条命令(必须带 --room);队列位置已保留,禁止放弃
|
|
133
|
+
- 🚫禁止用 `Start-Sleep 90 + job_output wait:true` 长阻塞轮询:静默等待会让用户以为 DSH 卡死
|
|
134
|
+
(2026-10-31 事故,见 docs/DSH卡死事故分析_job_output阻塞.md)
|
|
135
|
+
- 前一个小屋完全关闭 SW 进程后,队首小屋自动获得 SW 使用权
|
|
136
|
+
- 串行模式 / 非模式2:锁自动跳过,零影响
|
|
137
|
+
- 锁随小屋生命周期保持,由主对话的 room-end 统一释放并确保 SW 进程关闭
|
|
138
|
+
- 小屋收工前必须 close-all 完全关闭 SW,否则 room-end 等 20 秒后会强制关闭
|
|
139
|
+
|
|
140
|
+
### 一次调用规划多步操作(批量执行,禁止逐步调用)
|
|
141
|
+
|
|
142
|
+
❌ **禁止**这样逐步调用(每次都要重新连接 SW,又慢又占锁窗口):
|
|
143
|
+
```powershell
|
|
144
|
+
python "<工程模式根目录>\tools\sw_bridge.py" new # 连接1
|
|
145
|
+
python "<工程模式根目录>\tools\sw_bridge.py" sketch-rect 120 80 30 # 连接2
|
|
146
|
+
python "<工程模式根目录>\tools\sw_bridge.py" save "x.sldprt" # 连接3
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
✅ **必须**把全部建模步骤写进一个脚本,一次 run 执行(一次调用规划多步):
|
|
150
|
+
```powershell
|
|
151
|
+
python "<工程模式根目录>\tools\sw_bridge.py" run "D:\work\build_part.py" --room "结构件"
|
|
152
|
+
```
|
|
153
|
+
```python
|
|
154
|
+
# build_part.py —— 所有步骤一个脚本内完成
|
|
155
|
+
import swapi
|
|
156
|
+
m = swapi.new_part()
|
|
157
|
+
m.begin_sketch("Front Plane"); m.rect(0, 0, 120, 80); m.extrude(30)
|
|
158
|
+
m.begin_sketch("Top Plane"); m.circle(0, 0, 12); m.cut(through=True)
|
|
159
|
+
m.set_view_iso()
|
|
160
|
+
m.save(r"C:\output\DSH_底座.sldprt")
|
|
161
|
+
print("DONE")
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### 开新子代理前的 SW 收尾(铁律)
|
|
165
|
+
|
|
166
|
+
在创建任何下一个子代理(同级小屋或下一级子代理孩子)之前:
|
|
167
|
+
1. 当前建模必须已完成并保存(`m.save(...)`)
|
|
168
|
+
2. 调用 `python "<工程模式根目录>\tools\sw_bridge.py" close-all` 保存并关闭 SW
|
|
169
|
+
3. 确认 SW 锁已释放(room-end 会自动释放;或 `python "<工程模式根目录>\tools\mode_gate.py" sw-release <房间名>`)
|
|
170
|
+
**严禁开着 SW 去开下一个子代理!**
|
|
171
|
+
|
|
172
|
+
## 5. 已踩坑与解决方案
|
|
173
|
+
|
|
174
|
+
### 坑 1:草图吸附导致坐标不精确
|
|
175
|
+
- **现象**:输入 17.5mm 被吸附到 18mm
|
|
176
|
+
- **解决**:swapi 连接时自动禁用推理/吸附(`_disable_snapping`)
|
|
177
|
+
|
|
178
|
+
### 坑 2:对称拉伸枚举随版本变化
|
|
179
|
+
- **现象**:2022 用枚举 6,2018 用枚举 5
|
|
180
|
+
- **解决**:`swapi._get_midplane_enum(sw)` 自动适配
|
|
181
|
+
|
|
182
|
+
### 坑 3:圆角必须指定 Options=2
|
|
183
|
+
- **现象**:调用 FeatureFillet3 但不传 Options 参数会静默失败
|
|
184
|
+
- **解决**:`FeatureFillet3(2, R1_m, 0, 0, 0, 0, 0, None×7)`
|
|
185
|
+
|
|
186
|
+
### 坑 4:键槽 API 语义
|
|
187
|
+
- **现象**:CreateSketchSlot 的 CenterCenter 模式在 pywin32 下生成错误几何
|
|
188
|
+
- **解决**:只用 FullLength 模式,X2 传右圆弧圆心而非最外端点
|
|
189
|
+
|
|
190
|
+
### 坑 5:中文草图名跨语言不可靠
|
|
191
|
+
- **现象**:英文版 SW 草图叫 "Sketch2",中文版叫 "草图2"
|
|
192
|
+
- **解决**:用 `swapi.select_sketch_by_index(sw, model, 2)` 按序号选
|
|
193
|
+
|
|
194
|
+
### 坑 6:欢迎页 vs 主窗口混淆
|
|
195
|
+
- **现象**:SolidWorks 2022 有两个大窗口,主窗口标题含版本号
|
|
196
|
+
- **解决**:`swapi._find_sw_windows()` 排除纯 "SOLIDWORKS" 标题
|
|
197
|
+
|
|
198
|
+
## 5.5 关键 Bug 修复(2025-08-21)
|
|
199
|
+
|
|
200
|
+
### Bug 6: FACE vs PLANE 选择
|
|
201
|
+
- **现象**: 第一个特征后,`begin_sketch("Front Plane")` 失效,ActiveSketch 始终为 None
|
|
202
|
+
- **根因**: 在已有特征的文档中,选择 PLANE 基准面无法激活草图
|
|
203
|
+
- **解决**: 改用 `begin_sketch_on_face(x, y, z)` 选择实体表面
|
|
204
|
+
- **示例**:
|
|
205
|
+
```python
|
|
206
|
+
# 错误:底座创建后继续用基准面会失败
|
|
207
|
+
m.begin_sketch("Front Plane") # ActiveSketch = None
|
|
208
|
+
|
|
209
|
+
# 正确:在实体表面开草图
|
|
210
|
+
m.begin_sketch_on_face(25, 0, 10) # 底座顶面中心
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Bug 7: CreateLine 返回 None
|
|
214
|
+
- **现象**: 线段创建静默失败
|
|
215
|
+
- **解决**: 确保 `ActiveSketch is not None` 后再调用 CreateLine
|
|
216
|
+
- **代码**: `_ensure_sketch_active()` 方法
|
|
217
|
+
|
|
218
|
+
### Bug 8: 三角形轮廓不闭合
|
|
219
|
+
- **现象**: 3条线画完但 FeatureExtrusion3 返回 None
|
|
220
|
+
- **解决**: 在 end_sketch() 前调用 `MergePoints(0.0005)` 闭合端点
|
|
221
|
+
- **代码**:
|
|
222
|
+
```python
|
|
223
|
+
active_sk = self.skm.ActiveSketch
|
|
224
|
+
active_sk.MergePoints(0.0005) # Bug 8 关键!
|
|
225
|
+
self.skm.InsertSketch(True)
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Bug 4: FeatureCut3 完全无效
|
|
229
|
+
- **现象**: 所有参数组合都返回 None,体积不变
|
|
230
|
+
- **解决**: 改用 FeatureExtrusion3 的切除模式(AddPad=False)
|
|
231
|
+
- **代码**:
|
|
232
|
+
```python
|
|
233
|
+
def cut(self, depth=10, through=False):
|
|
234
|
+
T1 = SW_END_THROUGH if through else SW_END_BLIND
|
|
235
|
+
d = depth * MM
|
|
236
|
+
feat = self.fm.FeatureExtrusion3(
|
|
237
|
+
False, False, False, T1, 0, d, 0, # AddPad=False 即切除
|
|
238
|
+
...)
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Bug 3: extrude-to-point (T1=2) 参数类型不匹配
|
|
242
|
+
- **现象**: 无论传 list/tuple/None/VARIANT 都报类型不匹配
|
|
243
|
+
- **解决**: 放弃此方法,改用标准 FeatureExtrusion3
|
|
244
|
+
|
|
245
|
+
### Bug 10: 遗留文档干扰
|
|
246
|
+
- **现象**: 新建零件时有13个旧文档打开
|
|
247
|
+
- **解决**: `new_part()` 前先关闭所有文档
|
|
248
|
+
```python
|
|
249
|
+
for _ in range(50):
|
|
250
|
+
try:
|
|
251
|
+
if sw.ActiveDoc: sw.ActiveDoc.CloseDoc(0)
|
|
252
|
+
except: pass
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Bug 16: begin_sketch 多特征后永久失效
|
|
256
|
+
- **现象**: 第一个特征后,后续所有 `begin_sketch("Front Plane")` 调用失败
|
|
257
|
+
- **根因**: `clear_selection()` 过早清除平面选择状态,干扰 `InsertSketch(True)` 的选面逻辑;残留草图模式未退出
|
|
258
|
+
- **解决**: 移除 `select_plane()` 中的 `clear_selection()`;在 `begin_sketch()` 开头先 `InsertSketch(False)` 退出残留模式;草图激活成功后再清理选择;fallback 改为动态范围搜索(±5~200mm)
|
|
259
|
+
|
|
260
|
+
### Bug 17: begin_sketch_on_face 最大边界面不可选
|
|
261
|
+
- **现象**: 最小边界(x=0/y=0/z=0)可选,最大边界(x=max/y=max)完全不可选
|
|
262
|
+
- **根因**: `SelectByID2(FACE, x,y,z)` 使用射线拾取,在最大边界处射线穿过边/顶点而非面;且 face.GetBox 返回 SW 内部坐标(居中),与用户局部坐标不匹配
|
|
263
|
+
- **解决**: 两步匹配法——第一遍用原始坐标尝试;失败后聚合所有面 GetBox 计算实体整体包围盒,将用户局部坐标转换为内部坐标(`internal = body_min + local`)再匹配;匹配后用 `face.Select(True)` 直接选面
|
|
264
|
+
- **验证**: 9项测试全部通过 ✅(含最大边界 x=100/y=60、球面、多特征后)
|
|
265
|
+
|
|
266
|
+
### Bug 18: 多特征后 on_face 成功率下降
|
|
267
|
+
- **现象**: 随特征数量增加,`begin_sketch_on_face` 失败率上升
|
|
268
|
+
- **根因**: SW COM 内部选择状态累积导致退化
|
|
269
|
+
- **解决**: 每次 `SelectByID2` 尝试前调用 `clear_selection()`;特征创建后自动 `rebuild()`
|
|
270
|
+
|
|
271
|
+
## 6. 建模方法论
|
|
272
|
+
|
|
273
|
+
### 旋转体(轴、球、法兰)
|
|
274
|
+
```python
|
|
275
|
+
m.begin_sketch("Front Plane")
|
|
276
|
+
m.polyline([(0,R1), (x1,R1), (x1,R2), (x2,R2), (x2,0), (0,0)])
|
|
277
|
+
m.centerline(-20, 0, 200, 0) # 旋转轴略超出轮廓
|
|
278
|
+
m.end_sketch()
|
|
279
|
+
m.revolve(360)
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### 板/箱体
|
|
283
|
+
```python
|
|
284
|
+
m.begin_sketch("Front Plane")
|
|
285
|
+
m.rect(0, 0, 120, 80)
|
|
286
|
+
m.end_sketch()
|
|
287
|
+
m.extrude(10)
|
|
288
|
+
# 面上画孔
|
|
289
|
+
m.begin_sketch_on_face(0, 0, 10)
|
|
290
|
+
m.circle(0, 0, 10)
|
|
291
|
+
m.end_sketch()
|
|
292
|
+
m.cut(through=True)
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### 圆角/倒角
|
|
296
|
+
```python
|
|
297
|
+
# 圆角:取棱边上一点坐标
|
|
298
|
+
m.fillet(5, [(60, 40, 5), (-60, 40, 5)])
|
|
299
|
+
# 倒角
|
|
300
|
+
m.chamfer(1, [(0, 40, 10)], angle_deg=45)
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### 🧭 产物归属登记(Bug-16/17 修复 · 小屋必做)
|
|
304
|
+
|
|
305
|
+
每次 `m.save(...)` 之后,**主动登记产物归属**(取代 mode_gate 的 mtime 猜测):
|
|
306
|
+
|
|
307
|
+
```powershell
|
|
308
|
+
python "<工程模式根目录>\tools\mode_gate.py" room-artifact "结构件" "C:\...\DSH_车架底板.SLDPRT" 车架底板
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
> 【Bug-16/17】原实现只按"最近 mtime"推断,导致一个房间刚产出的文件被同时
|
|
312
|
+
> 归到 4 个房间名下。登记后 room-status 只显示本房间登记过的文件。
|
|
313
|
+
|
|
314
|
+
### 💓 心跳(Bug-23 修复 · 已非必需)
|
|
315
|
+
|
|
316
|
+
**小屋无需再手动跳心跳**。存活判定以 **DSH 平台状态**为权威:
|
|
317
|
+
大屋在 `list_agents` 后调
|
|
318
|
+
`python "<工程模式根目录>\tools\mode_gate.py" platform-sync <房间名> running`,
|
|
319
|
+
mode_gate 据此判定死活(10 分钟内有效)。
|
|
320
|
+
|
|
321
|
+
- `sw_bridge.py` 仍会在取锁/释放时顺手刷新心跳(兼容旧流程);
|
|
322
|
+
- `room-heartbeat` 命令保留但**不再是判定死活的前提**;
|
|
323
|
+
- 旧文档"心跳超 180s 就判死并自动重启"的规则**已废除** ——
|
|
324
|
+
实测心跳会因小屋忙于建模而失真(age 涨到 1222~1777s 而平台侧仍 running)。
|
|
325
|
+
|
|
326
|
+
```powershell
|
|
327
|
+
# 兼容用法(可选):
|
|
328
|
+
python "<包目录>\mode_gate.py" room-heartbeat "结构件"
|
|
329
|
+
# 权威做法(大屋执行):
|
|
330
|
+
python "<包目录>\mode_gate.py" platform-sync "结构件" running
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## 6.5 【第二轮修复】新增建模 API(Bug-34~46)
|
|
336
|
+
|
|
337
|
+
> 以下 API 为第二轮回归修复新增,**优先使用它们**,可绕开已踩过的坑。
|
|
338
|
+
|
|
339
|
+
### 🧩 参数化齿轮(Bug-41)—— 不要再用 polyline 逐点画齿形
|
|
340
|
+
|
|
341
|
+
```python
|
|
342
|
+
# ✅ 推荐:模数/齿数/齿宽 → 一次成型(渐开线齿廓,点数自适应)
|
|
343
|
+
r = m.gear(module_mm=1, teeth=30, thickness_mm=8, bore_dia_mm=5,
|
|
344
|
+
plane="Top Plane")
|
|
345
|
+
# r["params"] 含分度圆/齿顶圆/齿根圆/基圆直径,可直接写进图纸说明
|
|
346
|
+
|
|
347
|
+
# 只想要齿廓点集(自己控制特征时):
|
|
348
|
+
prof = m.involute_gear_profile(1, 30, pressure_angle_deg=20)
|
|
349
|
+
pts = prof["points"] # 单齿轮廓,16 点(旧方案 300+ 点必失败)
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
**为什么**:实测用 polyline 逐点画 z=30 齿形(300+ 点)时 SW 判定"轮廓无效",
|
|
353
|
+
`FeatureExtrusion3` 返回 None。新 API 用解析渐开线 + 齿数自适应点数
|
|
354
|
+
(16 点/齿),既精确又能被 SW 稳定识别。
|
|
355
|
+
|
|
356
|
+
### 🔩 专用孔命令(Bug-42)—— 不要再用 circle+cut 赌方向
|
|
357
|
+
|
|
358
|
+
```python
|
|
359
|
+
# ✅ 显式指定孔轴线方向,不再依赖 SW 默认贯穿方向
|
|
360
|
+
m.bore(dia_mm=10, axis="X", through=True) # 沿 X 的贯穿孔
|
|
361
|
+
m.bore(dia_mm=6, axis="Y", depth_mm=20, through=False) # 沿 Y 的盲孔
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
**为什么**:实测 circle+cut(through=True) 的贯穿方向由 SW 决定,
|
|
365
|
+
在轴承座上开 Ø10 内孔时方向偏了,去料率仅 0.7%,被误判失败。
|
|
366
|
+
|
|
367
|
+
### 📐 尺寸约束(Bug-34)—— annotate 能自动出图的前提
|
|
368
|
+
|
|
369
|
+
```python
|
|
370
|
+
# ✅ 建模时就加尺寸约束,工程图的 InsertModelAnnotations 才有东西可插
|
|
371
|
+
m.begin_sketch("Top Plane")
|
|
372
|
+
m.rect(0, 0, 300, 180)
|
|
373
|
+
m.add_dimension(-150, -90, 150, -90, value_mm=300) # 总长
|
|
374
|
+
m.add_dimension(150, -90, 150, 90, value_mm=180) # 总宽
|
|
375
|
+
# 或批量:
|
|
376
|
+
m.add_key_dimensions([(-150,-90),(150,-90),(150,90),(-150,90)])
|
|
377
|
+
m.end_sketch(); m.extrude(8)
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
**为什么**:台账回归结论——"annotate 插 0 个标注,因为本轮建模未加约束"。
|
|
381
|
+
不加尺寸 → 模型无可插入的 DisplayDimension → 工程图永远没有尺寸标注。
|
|
382
|
+
若确实没加,可用 `m.annotate_geometry_fallback()` 得到"建议标注清单"手工补。
|
|
383
|
+
|
|
384
|
+
### 🔗 旋转特征(Bug-40)—— 显式给轴,不依赖按名选面
|
|
385
|
+
|
|
386
|
+
```python
|
|
387
|
+
# 多特征零件上按名选基准面会降级到实体面,导致 revolve 拿不到轴
|
|
388
|
+
m.revolve_on_face(face_point=(0,0,20), axis_point=(0,0,0), axis_dir=(0,0,1))
|
|
389
|
+
# 之后在草图内画轮廓,再 m.revolve(360)
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### 🏗️ 装配摆位与验收(Bug-30/44)
|
|
393
|
+
|
|
394
|
+
```python
|
|
395
|
+
# 建组件(坐标可能被 SW 忽略,务必用自测验收)
|
|
396
|
+
m.add_component(r"...\DSH_车架底板.SLDPRT", 113, 0, 0)
|
|
397
|
+
|
|
398
|
+
# ✅ 验收标准(台账明确要求:读回坐标 == 期望才算修好)
|
|
399
|
+
m.verify_component_position(comp, [113, 0, 0]) # -> {"ok": True, ...}
|
|
400
|
+
|
|
401
|
+
# 一键自测(含补救)
|
|
402
|
+
m.self_test_assembly_placement(r"...\DSH_车架底板.SLDPRT", (113, 0, 0))
|
|
403
|
+
|
|
404
|
+
# 批量按坐标摆位(内部优先用装配体级 TransformComponent)
|
|
405
|
+
m.place_components_by_coords([("DSH_车架底板-1", 113, 0, 0),
|
|
406
|
+
("DSH_车轮-1", 100, 75, 30)])
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
**关键**:组件对象(Component2)在 late-binding 下**只读**,
|
|
410
|
+
SetTransform/MoveComponent 全不可用;正确途径是**装配体文档级**的
|
|
411
|
+
`TransformComponent(组件数组, MathTransform)`(已实现为首选路径)。
|
|
412
|
+
|
|
413
|
+
### 📦 零件归属自检(Bug-38)
|
|
414
|
+
|
|
415
|
+
```powershell
|
|
416
|
+
# 保存前校验零件是否属于本房间(越界会被拒绝保存)
|
|
417
|
+
python sw_bridge.py check-part "DSH_电机座.SLDPRT" --room 结构件
|
|
418
|
+
# -> {"allowed": false, "owner_room": "传动机构", ...}
|
|
419
|
+
|
|
420
|
+
# 总装前核对归属与去重
|
|
421
|
+
python "<工程模式根目录>\tools\workflow_gate.py" verify-ownership
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
---
|
|
425
|
+
|
|
426
|
+
## 7. 典型工作流(用户约定)
|
|
427
|
+
|
|
428
|
+
1. **新建零件** → `m = swapi.new_part()`(自动清理遗留文档)
|
|
429
|
+
2. **画草图** → 第一个特征用 `m.begin_sketch("Front Plane")`,后续用 `m.begin_sketch_on_face(x, y, z)`
|
|
430
|
+
3. **画轮廓** → 使用 `rect()`、`circle()`、`line()` 等,每步检查 ActiveSketch
|
|
431
|
+
4. **闭合端点** → `end_sketch()` 前自动调用 `MergePoints(0.0005)`
|
|
432
|
+
5. **创建特征** → `m.extrude(10)` / `m.cut(through=True)` / `m.revolve(360)`
|
|
433
|
+
6. **循环** 步骤 2-5 直到完成
|
|
434
|
+
7. **保存** → `m.save(os.path.join(dir, "DSH_零件名.sldprt"))`
|
|
435
|
+
8. **生成工程图** → `python "<工程模式根目录>\tools\sw_bridge.py" drawing "零件路径"`
|
|
436
|
+
9. **导出 DWG** → `python "<工程模式根目录>\tools\sw_bridge.py" dwg "零件路径"`
|
|
437
|
+
10. **展示** → `python "<工程模式根目录>\tools\sw_bridge.py" show`
|
|
438
|
+
|
|
439
|
+
**关键规则**:
|
|
440
|
+
- `begin_sketch()` 在多特征后已修复(Bug 16),先退出残留草图模式再重新选面
|
|
441
|
+
- `begin_sketch_on_face()` 优先用**面包围盒匹配+face.Select(True)**选面(Bug 17),可可靠命中最大边界和旋转体曲面
|
|
442
|
+
- 每个 SelectByID2 尝试前自动清除选择状态(Bug 18)
|
|
443
|
+
- 特征创建后自动 rebuild() 刷新 COM 状态(Bug 18)
|
|
444
|
+
- `cut()` 已改用 FeatureExtrusion3 切除模式,不再依赖 FeatureCut3
|
|
445
|
+
- `MergePoints()` 在 end_sketch() 内自动调用,无需手动调用
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sw-design
|
|
3
|
+
description: SolidWorks 机械设计工作流。涵盖三维建模、装配设计、工程图输出、GB/T 制图规范、AutoCAD 几何验证(CADX)和 SolidWorks 桥接。
|
|
4
|
+
whenToUse: 当需要进行 SolidWorks 三维建模、装配设计、出工程图或将 SolidWorks 零件转换为 AutoCAD 图纸时使用
|
|
5
|
+
disable-model-invocation: false
|
|
6
|
+
user-invocable: true
|
|
7
|
+
source: engineering
|
|
8
|
+
provider: filesystem
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## SolidWorks 机械设计工作流
|
|
12
|
+
|
|
13
|
+
### 一、设计前分析
|
|
14
|
+
|
|
15
|
+
1. **需求分析**
|
|
16
|
+
- 明确零件的功能要求、材料、热处理、表面处理
|
|
17
|
+
- 确定载荷类型和大小,评估应力和疲劳风险
|
|
18
|
+
- 确定工作环境条件(温度、湿度、腐蚀性)
|
|
19
|
+
|
|
20
|
+
2. **尺寸合理性检查**
|
|
21
|
+
- 壁厚是否均匀?是否有应力集中风险?
|
|
22
|
+
- 加工工艺是否可行?脱模斜度是否合适?
|
|
23
|
+
- 运动部件是否有足够间隙?配合公差是否合理?
|
|
24
|
+
- 是否考虑热膨胀?
|
|
25
|
+
|
|
26
|
+
### 二、零件建模流程(solidworks-modeling.md 参考)
|
|
27
|
+
|
|
28
|
+
1. **草图绘制**
|
|
29
|
+
- 选择合适的基准面(前视/上视/右视)
|
|
30
|
+
- 使用几何约束(水平、垂直、共线、同心、相切等)
|
|
31
|
+
- 使用尺寸约束标注尺寸
|
|
32
|
+
- 确保草图完全定义(黑色,非蓝色)
|
|
33
|
+
|
|
34
|
+
2. **特征建模**
|
|
35
|
+
- 拉伸凸台/基体、旋转凸台/基体
|
|
36
|
+
- 拉伸切除、旋转切除
|
|
37
|
+
- 扫描、放样
|
|
38
|
+
- 添加圆角、倒角
|
|
39
|
+
- 异形孔向导(标准孔、螺纹孔)
|
|
40
|
+
- 镜像、阵列(圆周/线性)
|
|
41
|
+
|
|
42
|
+
**⚠️ Bug-20 注意 — 多基准面切换后草图定位偏移:**
|
|
43
|
+
- 肋板/三角加强筋等特征,优先在 **Front Plane**(前视基准面)上绘制轮廓再拉伸,
|
|
44
|
+
而非在 Top Plane 上定位后再拉伸。Top Plane 上的坐标在多步操作中容易漂移。
|
|
45
|
+
- 如果必须在非基准面上开草图,使用 `begin_sketch_on_face(x, y, z)` 明确指定坐标,
|
|
46
|
+
并确保该面与目标特征位置对齐。
|
|
47
|
+
- 复杂装配体(如 L 形支架),建议全部特征在同一基准面完成后再做装配体。
|
|
48
|
+
|
|
49
|
+
3. **零件验证**
|
|
50
|
+
- 质量属性检查(质量、体积、重心)
|
|
51
|
+
- 干涉检查
|
|
52
|
+
- 简单应力分析(Simulation Xpress)
|
|
53
|
+
|
|
54
|
+
### 三、装配体设计
|
|
55
|
+
|
|
56
|
+
1. **装配顺序规划**
|
|
57
|
+
- 确定基准零件
|
|
58
|
+
- 规划装配路径
|
|
59
|
+
- 考虑装配工具操作空间
|
|
60
|
+
|
|
61
|
+
2. **配合定义**
|
|
62
|
+
- 标准配合:重合、平行、垂直、相切、同轴心、距离、角度
|
|
63
|
+
- 高级配合:对称、宽度、路径配合、线性耦合
|
|
64
|
+
- 机械配合:凸轮、齿轮、齿条小齿轮、螺旋、万向节
|
|
65
|
+
|
|
66
|
+
3. **装配体验证**
|
|
67
|
+
- 干涉检查
|
|
68
|
+
- 碰撞检查
|
|
69
|
+
- 动态间隙检查
|
|
70
|
+
- 爆炸视图生成
|
|
71
|
+
|
|
72
|
+
### 四、工程图输出
|
|
73
|
+
|
|
74
|
+
1. **视图选择**
|
|
75
|
+
- 标准三视图(前视、上视、右视)+ 等轴测
|
|
76
|
+
- 投影视图、剖视图(全剖、半剖、局部剖、阶梯剖)
|
|
77
|
+
- 局部放大图、辅助视图
|
|
78
|
+
|
|
79
|
+
2. **标注规范(参考 references/gbt-drafting.md)**
|
|
80
|
+
- 尺寸标注(GB/T 4458.4)
|
|
81
|
+
- 公差标注(GB/T 1800 系列)
|
|
82
|
+
- 表面粗糙度(GB/T 131)
|
|
83
|
+
- 形位公差(GB/T 1182)
|
|
84
|
+
- 标题栏(GB/T 10609.1)
|
|
85
|
+
|
|
86
|
+
3. **图层规范(参考 references/autocad-workflow.md)**
|
|
87
|
+
- `OUTLINE` / `THIN` / `CENTER` / `HIDDEN` / `DIM` / `TEXT` / `HATCH`
|
|
88
|
+
|
|
89
|
+
### 五、AutoCAD 几何验证(CADX)
|
|
90
|
+
|
|
91
|
+
> 参考:`references/autocad-workflow.md`
|
|
92
|
+
|
|
93
|
+
从 SolidWorks 生成的工程图导出为 DWG/DXF 后,可使用 CADX 进行几何验证:
|
|
94
|
+
|
|
95
|
+
```powershell
|
|
96
|
+
# 导出 DXF(SolidWorks 工程图 → DXF)
|
|
97
|
+
python "<工程模式根目录>\tools\sw_bridge.py" export-dxf "<输出.dxf>"
|
|
98
|
+
|
|
99
|
+
# 运行 CADX 几何验证(7 项检查)
|
|
100
|
+
python "<工程模式根目录>\tools\sw_bridge.py" cad-validate "<输出.dxf>"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**验证流程:**
|
|
104
|
+
1. 读取 DXF 中所有实体(LWPOLYLINE、LINE、CIRCLE、DIMENSION 等)
|
|
105
|
+
2. 逐项执行 7 种检查,记录问题位置和严重等级
|
|
106
|
+
3. 返回 JSON 摘要:`{status: "PASSED/REVIEW/FAILED", critical, warning, info, issues: [...]}`
|
|
107
|
+
4. CRITICAL 项必须在发布前修复
|
|
108
|
+
|
|
109
|
+
### 六、参考文档
|
|
110
|
+
|
|
111
|
+
- `references/gbt-drafting.md` — GB/T 机械制图国家标准(线型、标注、视图、剖视)
|
|
112
|
+
- `references/autocad-workflow.md` — AutoCAD 工作流、CADX 验证命令、坐标约定
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# AutoCAD 工作流与几何验证(DSH 工程模式)
|
|
2
|
+
|
|
3
|
+
> 来源:CADX 工程模式 + AutoCAD-skills mechanical-drafting-gbt
|
|
4
|
+
> 用途:指导 AI 操作 AutoCAD 时的流程规范、验证规则和坐标约定。
|
|
5
|
+
|
|
6
|
+
## 连接与安全
|
|
7
|
+
|
|
8
|
+
- 优先挂接已有 AutoCAD 进程,不强制启动或关闭用户会话
|
|
9
|
+
- 所有 COM 操作使用 dynamic dispatch(`win32com.client.dynamic.Dispatch`),不依赖类型库注册
|
|
10
|
+
- AutoCAD busy 时(RPC_E_CALL_REJECTED)先发送 ESC 取消挂起命令,再重试
|
|
11
|
+
- 坐标单位统一 mm,与 swapi 一致
|
|
12
|
+
|
|
13
|
+
## 几何验证流程(7 项检查)
|
|
14
|
+
|
|
15
|
+
每次生成或修改 AutoCAD 图纸后,必须运行以下验证:
|
|
16
|
+
|
|
17
|
+
| # | 检查项 | 严重等级 | 说明 |
|
|
18
|
+
|---|--------|---------|------|
|
|
19
|
+
| 1 | UNCLOSED_POLYLINE | WARNING/INFO | 应闭合但开口 > 10mm 的多段线 |
|
|
20
|
+
| 2 | OVERLAPPING_GEOMETRY | CRITICAL | 墙体/轮廓线错误重叠 |
|
|
21
|
+
| 3 | ROOM_TOO_SMALL | CRITICAL | 房间面积低于 GB/T 最低标准 |
|
|
22
|
+
| 4 | ROOM_ASPECT_RATIO | WARNING | 长宽比超出合理范围(> 3:1) |
|
|
23
|
+
| 5 | WALL_TOO_THIN | CRITICAL | 平行墙间距 < 100mm(机械)或 150mm(建筑) |
|
|
24
|
+
| 6 | MISSING_ELEMENTS | WARNING/INFO | 房间缺少门或窗 |
|
|
25
|
+
| 7 | DIMENSION_MISMATCH | CRITICAL | 标注值与实际几何不符(误差 > 2%) |
|
|
26
|
+
|
|
27
|
+
验证入口:
|
|
28
|
+
```powershell
|
|
29
|
+
python "<工程目录>\sw_bridge.py" cad-validate <图纸.dwg 或 .dxf> [规则文件]
|
|
30
|
+
# 或直连 AutoCAD:
|
|
31
|
+
python "<工程目录>\sw_bridge.py" cad-validate-live
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 坐标与命名约定
|
|
35
|
+
|
|
36
|
+
- **单位**:所有尺寸 mm(整数),输出前 ×1000 换算
|
|
37
|
+
- **图层命名**:大写 + 字母数字下划线,如 `OUTLINE`、`DIM`、`CENTER`
|
|
38
|
+
- **线型层级**:
|
|
39
|
+
- `OUTLINE`:粗实线(可见轮廓)
|
|
40
|
+
- `THIN`:细实线(尺寸、剖面线)
|
|
41
|
+
- `CENTER`:细点画线(轴线)
|
|
42
|
+
- `HIDDEN`:细虚线(不可见轮廓)
|
|
43
|
+
- `HATCH`:细实线(剖面填充)
|
|
44
|
+
- `DIM`:细实线(尺寸标注)
|
|
45
|
+
- `TEXT`:细实线(文字说明)
|
|
46
|
+
|
|
47
|
+
## CAD 执行铁律
|
|
48
|
+
|
|
49
|
+
1. **事务原子性**:每次批量创建实体前记录句柄,失败时仅回滚该批次
|
|
50
|
+
2. **后验验证**:每创建实体后立即读取返回句柄,比对类型/图层/坐标
|
|
51
|
+
3. **禁止猜测**:未确定的配合/公差/材料一律标 `TBD`,不自行补全
|
|
52
|
+
4. **视图一致性**:多视图必须共享同一参数源,禁止从不同视角独立估算
|
|
53
|
+
5. **比例真实性**:标题栏声明 `1:1` 时,实际导出比例必须确实是 1:1;`FIT`/`NTS` 不得与固定比例混用
|
|
54
|
+
|
|
55
|
+
## 快速参考命令
|
|
56
|
+
|
|
57
|
+
```powershell
|
|
58
|
+
# 环境自检
|
|
59
|
+
python "<工程模式根目录>\tools\sw_bridge.py" doctor
|
|
60
|
+
|
|
61
|
+
# 连接状态
|
|
62
|
+
python "<工程模式根目录>\tools\sw_bridge.py" status
|
|
63
|
+
|
|
64
|
+
# 列出已打开文档
|
|
65
|
+
python "<工程模式根目录>\tools\sw_bridge.py" list
|
|
66
|
+
|
|
67
|
+
# SolidWorks 零件 → 工程图
|
|
68
|
+
python "<工程模式根目录>\tools\sw_bridge.py" drawing <零件.sldprt>
|
|
69
|
+
|
|
70
|
+
# 工程图 → DWG(AutoCAD 可读)
|
|
71
|
+
python "<工程模式根目录>\tools\sw_bridge.py" dwg <零件.sldprt>
|
|
72
|
+
|
|
73
|
+
# 导出 DXF(供 CADX 验证)
|
|
74
|
+
python "<工程模式根目录>\tools\sw_bridge.py" export-dxf <图纸.dxf>
|
|
75
|
+
|
|
76
|
+
# AutoCAD 几何验证
|
|
77
|
+
python "<工程模式根目录>\tools\sw_bridge.py" cad-validate <图纸.dxf>
|
|
78
|
+
|
|
79
|
+
# 展示 SolidWorks 窗口 + 截图
|
|
80
|
+
python "<工程模式根目录>\tools\sw_bridge.py" show
|
|
81
|
+
```
|