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。生成顺序:
make_v3.py—— 从topshell_v2 / bottomplate_v2 / filterframe_v1 / place_filter文本派生出 v3 四个脚本(几何常量集中在文件头)patch_v3_cut.py—— 把顶盖的面上切除换成「读ModelToSketchTransform先验平面、再按变换精确画」(必须跑,否则东墙那刀可能切到顶板上)topshell_v3.py(圆角已内联)、bottomplate_v3.py→add_fillets.py BottomPlate_v3.SLDPRT 3.0 z、filterframe_v2.pyimport_fan6010.py(Orion OD6010 STEP → SLDPRT,只查干涉用)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,已被角柱方案取代) |
三条固定纪律
- 改几何就换版本号,别覆盖正开着的文件 —— 同名
SaveAs3会返回 err=1 且不写盘。 - 不信返回值:另存看
os.path.exists+ 时间戳;打孔看圆柱面半径直方图(按孔径分桶); 开口看面数。包围盒对通孔/圆角没有分辨力。 - 零件保持打开 ——
AddComponent4要求目标文档在打开状态。 清理文档只能点名关,绝不能CloseAllDocuments(会清空%TEMP%\swx*\IC~~\,废掉总装引用)。