# R2 外壳建模脚本(SolidWorks 侧) 这些脚本通过 pywin32 挂**已经开着**的 SolidWorks 实例建模, 产物落在 `D:\DCDC\新建文件夹\5blades\`(不进 git,太大)。 > **动手前必读** `.claude/skills/solidworks-assembly/NOTES-probed.md` §33~§35 —— > 本机的 API 口径与坑(基准面轴映射、`AddToDB`、`FeatureCut4` 不可靠、 > 判据要用圆柱面直方图而不是包围盒……)每一条都真实踩过。 ## ✅✅ 现行外壳:`TopShell_v11` + `BottomPlate_v6`(2026-09-30,Type-C 外侧沉槽) 用户实测 v10 的两个 Type-C 口墙太厚、线插不到底。`make_v11.py` 从 v10 派生:贯穿孔仍 = 母座口 8.34×2.60 R0.7, **外侧加 13.4×7.4 R3.2 沉槽、深 1.4,槽底留 1.0 薄壁**(用户:不要完全掏空);标识右移到口中心 +10.5。 运行:`make_v11.py` → `topshell_v11.py` → `place_v11.py` → `export_stl_v11.py`(底盖不变)。 ⚠ `place_v11.py` 之前要先在 SolidWorks 里**打开总装和 TopShell_v11 / BottomPlate_v6 / OD6010_m0_frame 三个零件**, 否则 `AddComponent4` 返回 None(零件必须已在内存里)。参数在 `make_v11.py` 文件头 `PK_*`。 ### 螺丝(2026-09-30,`screws_v1.py`) 用户:原配螺丝太短。建 3 种螺丝零件并装进总装(16 颗),长度只改脚本头 `SPECS` 的 L 后重跑: | 位置 | 规格 | 数量 | 头下长度去向 | |---|---|---|---| | 底盖 → 顶盖角柱 | **M3×10 薄头内六角 DIN 7984**(头 Ø5.5×2.0,平顶) | 4 | 头埋进沉孔 Ø6.5 深 2、与底面齐平;1.6 板 + **8.4 进角柱**(孔深 82) | | PCB → 底盖立柱 | **M3×8 同上** | 4 | 1.68 板(STEP 实测)+ **6.3 进立柱**(孔深 10,余 3.7) | | 风扇 → 端墙 | **风扇自攻螺丝 5×12**(螺纹 Ø5,平头 Ø7×2) | 8 | 2.4 墙 + **9.6 进风扇**(风扇厚 10,螺尖不进分风腔) | 复验:包围盒 16/16 在位;干涉 368 = 基线 360 + 8 处「风扇螺丝 ↔ 风扇孔」(自攻咬合,预期),底盖 / PCB 螺丝 0 处。 ⚠ 实物要核:热熔螺母长度(按 ≤ 6 选的长度)、风扇螺丝螺纹外径(墙孔 Ø5.2,外径 > 5.1 就穿不过墙)。 ## ⛔ 已被 v11 取代:`TopShell_v10` + `BottomPlate_v6`(嵌入式底盖) `make_v10.py`(从 `topshell_v9 / bottomplate_v5 / place_v9` 派生)→ `topshell_v10.py` → `bottomplate_v6.py` → `add_fillets.py BottomPlate_v6.SLDPRT 1.0 z` → `place_v10.py`。配合间隙参数 `CLR`(默认 0.3)在 `make_v10.py` 文件头。 ## ⛔ 已被 v10 取代:`TopShell_v9` + `BottomPlate_v5`(格栅加横筋,可打印) `make_v8.py`(v8:3 条 1.2 横撑,已被 v9 取代)→ `patch_make_v9.py` 产出 **`make_v9.py`** → `topshell_v9.py` → `place_v9.py`(复验已改为**不忽略隐藏实体**)→ `render_v9.py`。 格栅参数在 `make_v9.py`:`GR_W/GR_RIB`(槽宽/竖筋)、`XB_W/XB_SEG`(横筋宽/最长槽段)。 ## ⛔ 已被 v9 取代:`TopShell_v7` + `BottomPlate_v5`(美化 + 无滤网,整机 134.3) 派生链(每步都是纯文本补丁、锚点断言次数): `make_v4.py` 产物 → **`make_v5.py`**(顶面圆角 / 圆头槽 / 东格栅 / 标识;新写 `bottomplate_v4.py`;`filterframe_v3.py`) → **`make_v6.py`**(两端都格栅)→ **`make_v7.py`**(删滤网导轨与滤网框,底盖西沿回 −17.9)。 运行:`topshell_v7.py` → `bottomplate_v5.py` → `add_fillets.py BottomPlate_v5.SLDPRT 2.5 z` → `place_v7.py` → `render_v7.py`(按视线方向截图)。 `filterframe_v*.py` 与 v5/v6 的顶盖、总装脚本只作派生源,不再运行。 ## ⛔ 已被 v7 取代:`TopShell_v4`(开口精简) 在短机版流程第 2 步之后加:`make_v4.py`(从 `topshell_v3.py` / `place_v3.py` 派生)→ `topshell_v4.py` → `place_v4.py`。 北墙无开口;南墙 Type-C 开口 = 母座口内侧轮廓(`USB_W/USB_H/USB_R` = 8.34/2.60/0.70,母座实测见 `probe_usbc2.py`)。 ## ✅✅ 现行方案:短机版(2026-09-13,整机 140.7) 风扇 60×60×10(孔距 50.2)+ 分风腔 10。**生成顺序**: 1. `make_v3.py` —— 从 `topshell_v2 / bottomplate_v2 / filterframe_v1 / place_filter` 文本派生出 v3 四个脚本(几何常量集中在文件头) 2. `patch_v3_cut.py` —— 把顶盖的面上切除换成「读 `ModelToSketchTransform` 先验平面、再按变换精确画」(**必须跑**,否则东墙那刀可能切到顶板上) 3. `topshell_v3.py`(圆角已内联)、`bottomplate_v3.py` → `add_fillets.py BottomPlate_v3.SLDPRT 3.0 z`、`filterframe_v2.py` 4. `import_fan6010.py`(Orion OD6010 STEP → SLDPRT,只查干涉用) 5. **`place_v3.py`** —— 换件 + 风扇 25→10 + 干涉 / 螺丝孔 / 风扇腰孔 / 滤网间隙 全套复验 改实物尺寸(螺丝外径、头高、分风腔)只动 `make_v3.py` 文件头常量后按上面顺序重跑。 ## ⛔ 前一版(已被短机版取代):两件式(2026-09-13) | 件 | 定稿文件 | 脚本 | |---|---|---| | 一体顶盖 | `TopShell_v2.SLDPRT` | `make_topshell_v2.py` 从 `topshell_v1.py` 派生出 `topshell_v2.py`(圆角已内联,**不要再跑 add_fillets**:导轨让包围盒判据漏掉西侧两角)| | 底盖 | `BottomPlate_v2.SLDPRT` | `bottomplate_v2.py` → `add_fillets.py BottomPlate_v2.SLDPRT 3.0 z` | | 滤网框 | `FilterFrame_v1.SLDPRT` | `filterframe_v1.py`(判据:贴墙面/外表面**面积**等于设计值 ⇒ 窗口与格孔都开出来了)| | 入总装 + 复验 | — | **`place_filter.py`**(由 `make_place_filter.py` 从 `place_twopiece.py` 派生;含滤网滑槽间隙核对)| `topshell_v1.py` / `bottomplate_v1.py` / `place_twopiece.py` 是无滤网版,留作派生源。 ## ⛔ 六件式(已作废,仅作参考):定稿件 ↔ 脚本 | 件 | 定稿文件 | 脚本 | |---|---|---| | 托盘 | `Tray_v9.SLDPRT` | `tray_v2.py`(⚠ 文件里的 `DST` 已指向废版 v11,**跑之前把 DST 改回想要的版本号**)| | 端板 ×2 | `EndPlate_v13.SLDPRT` | `endplate_v11.py`(几何 + C 组 + 北侧 A 组)→ `endplate_v12_south.py`(南侧 A 组)→ `add_fillets.py … 3.0 x` → `endplate_v13_foot.py`(L 脚锁孔)。`endplate_v10.py` 是无孔版 | | 装配内同轴核对 | — | **`check_coaxial.py`**(螺母孔 ↔ 相邻板过孔、脚锁孔 ↔ 托盘,只读)| | 南板 | `SouthPanel_v4.SLDPRT` | `southpanel_v4.py` | | 北板 | `NorthPanel_v3.SLDPRT` | `northpanel_v3.py` | | 顶盖 | `TopPanel_v4.SLDPRT` | `toppanel_v4.py` | | 圆角(全部件)| — | `add_fillets.py <零件名> <半径> <轴>`(端板轴 x / 南北板 y / 顶盖 z / 托盘 z)| | 入总装 + 复验 | — | **`place_v10.py`**(15 mm 分风腔版的整体摆位);只换端板用 `swap_endplate_v13.py` | `add_panels.py` / `add_endplates.py` 是 152.8 短机版的旧入口,**已被 `place_v10.py` 取代**,留作参考。 ## 分析 / 探测(只读,不改模型) | 脚本 | 用途 | |---|---| | `probe_top.py` | 回读总装顶层件的包围盒 + 刀片通道间距,存 `_top.json` | | `probe_plenum.py` | 查分风腔切片与南北条带里有哪些底板器件(挡风板能占哪儿) | | `shroud_feas.py` | **纯本地算**(吃 `_top.json`):逐通道风口覆盖率、旁通面积、分风腔深度 ↔ 阻力比 | | `contact_map.py` | 贴合面检查 —— **干涉为零 ≠ 装配成立**,托盘悬空那次就是这么查出来的 | | `screw_plan.py` | 按实测贴合面算螺丝位置(⚠ 内含的 A/C 组坐标是**旧的 x −13.70/111.70**,已被角柱方案取代)| ## 三条固定纪律 1. **改几何就换版本号**,别覆盖正开着的文件 —— 同名 `SaveAs3` 会返回 err=1 且**不写盘**。 2. **不信返回值**:另存看 `os.path.exists` + 时间戳;打孔看**圆柱面半径直方图**(按孔径分桶); 开口看面数。包围盒对通孔/圆角**没有分辨力**。 3. **零件保持打开** —— `AddComponent4` 要求目标文档在打开状态。 清理文档只能**点名关**,绝不能 `CloseAllDocuments`(会清空 `%TEMP%\swx*\IC~~\`,废掉总装引用)。