写交接:SolidWorks 装配的接手点 + 本会话成果汇总

用户已在 SolidWorks 里手工把两块板载入同一装配体,刀片尚未摆位。
在 PROGRESS 顶部加「新会话从这里开始」作为唯一入口:当前装配体状态、
下一步(刀片绕 X +90° 竖起 + 平移到槽位)、卡点(CreateTransform 封送)、
本会话七项成果与对应提交、四条待办。

装配体状态快照存 .claude/r2/3d/_sw_assembly_state.json:
- 活动文档 D:\DCDC\新建文件夹\3D_BASE-PCB_2026-09-12.SLDASM
- 底板包围盒 x 0.01~97.99,变换为单位阵 ⇒ 原点 = 板左下角(可直接套板坐标)
- 刀片无旋转、平放,引用 PhoneRail_blade.SLDASM(实体文件)

NOTES 两处更正:
- §14 二次更正:坐标系取决于插入方式 —— AddComponent4 插的会重心归零,
  用户 GUI 手工插的保留板左下角原点。动手前先 GetBox 看一眼,别假设。
- §19 新增:三个磁盘文件各是什么、底板零部件引用的是临时件(一清理就断链),
  并写明新会话第一件事不要 CloseAllDocuments。

新建文件夹/(126 MB STEP/SLDASM)加进 .gitignore。

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_0168Bu6SEx3cXXCJLkdnE6zB
这个提交包含在:
zhou yang
2026-09-12 14:48:48 +08:00
共同撰写人 Claude Opus 5
父节点 ff50ccd4b0
当前提交 5a80d8a872
共修改 4 个文件,包含 185 行新增和 5 行删除
@@ -205,11 +205,16 @@ n = asm.ToolsCheckInterference2(0, EMPTY, False, pcomp, pface)
## 14. 刀片竖插到底板槽位的变换(纯几何,已算好)
⛔⛔ **前提作废(2026-09-12 更正)**:下表是按"原点 = 板左下角"算的,
而那只在**单独打开导入的装配体**时成立。一旦用 `AddComponent4` 插进总装,
实测包围盒变成 **刀片 `x -45~45 / y -34~34 / z -3.2~3.2`、底板 `x -49~49 / y -49~49 / z -9.7~9.7`**
—— 两块板都**以各自几何中心为原点**(SolidWorks 插入时做了重心归零)。
⇒ 平移量必须按 `GetBox` 读回的**真实包围盒**现算,不能用板坐标直接减。下表仅留作参考。
⚠ **坐标系要看插入方式,不能一概而论(2026-09-12 二次更正)**:
| 插入方式 | 实测包围盒 | 原点在哪 |
|---|---|---|
| 我用 `AddComponent4(p,'',0,0,0)` | 刀片 `x -45~45`、底板 `x -49~49` | **几何中心**(被重心归零)|
| **用户在 GUI 里手工插入** | 底板 `x 0.01~97.99 / y 0.01~97.99` | **板左下角**(与 EDA 板坐标一致)|
⇒ 下表那套"原点 = 板左下角"的平移量,在**手工插入的装配体里是直接可用的**;
在 `AddComponent4` 插出来的装配体里要按 `GetBox` 现算。
**动手前先 `GetBox` 读一次,看原点在哪**,别假设。
(原始推导)坐标系:STEP 原点 = 板左下角
(刀片板体包围盒 `x 0.01~89.99 / y 0.01~67.99 / z 0~1.67`,正是 90×68×1.6)。
@@ -320,3 +325,49 @@ mu = wc.Dispatch(raw) # → 可用的 IMathUt
→ `CloseAllDocuments(True)` 清理。
**未完成**:① 刀片摆位(§17)② 干涉结果解读(`PComp` 数组解析、限定范围检查 §16)。
## 19. 📍 当前 SolidWorks 里的装配体(2026-09-12 交接点)
用户**手工**把两块板载入了同一个装配体(不是脚本做的):
```
活动文档:D:\DCDC\新建文件夹\3D_BASE-PCB_2026-09-12.SLDASM
├─ 3D_BASE-PCB_2026-09-12.step-1 底板(用户自己重导的 STEP,不是脚本那份)
│ 包围盒 x 0.01~97.99 y 0.01~97.99 z -6.30~13.17 mm
│ 变换 = 单位阵 ⇒ **原点 = 板左下角,与 EDA 板坐标一致**
│ 引用 %TEMP%\swx32108\IC~~\3D_BASE-PCB_2026-09-12.step.SLDASM ⚠ 临时件
└─ PhoneRail_blade-1 刀片
包围盒 x -34.57~55.40 y 33.71~101.68 z -2.35~4.02 mm
变换 = 无旋转 + 平移 (-34.6, 33.7, 2.4) mm ⇒ **还是平放的,没竖起来**
引用 D:\DCDC\新建文件夹\PhoneRail_blade.SLDASM ✅ 实体文件,可用
```
状态快照存在 `.claude/r2/3d/_sw_assembly_state.json`。
### 磁盘上的文件(`D:\DCDC\新建文件夹\`,126 MB,**未进 git**)
| 文件 | 是什么 |
|---|---|
| `3D_BASE-PCB_2026-09-12.SLDASM` 29.97 MB | **装配体本身**(活动文档)|
| `3D_BASE-PCB_2026-09-12.step` 53.87 MB | 用户自己重导的底板 STEP |
| `PhoneRail_blade.SLDASM` 16.61 MB | 刀片零部件 ✅ 实体,装配体引用的就是它 |
| `PhoneRail_blade.step` 31.22 MB | 刀片 STEP |
| `~$*.SLDASM`(各 6 B)| SolidWorks 锁文件 ⇒ 这两份**正被打开** |
⚠⚠ **底板零部件引用的是临时件**(`%TEMP%\swx32108\IC~~D_BASE-PCB_2026-09-12.step.SLDASM`),
**不是**上表那个 29.97 MB 的装配体文件(那是装配体自己)。
⇒ 只要没 `CloseAllDocuments`、没重启 SolidWorks,引用就还在;
**一旦清理或重启,重开装配体时底板零部件会丢引用**。
⇒ 要长期可用:在 GUI 里把**底板零部件**也另存到 `新建文件夹\` 下并替换引用
(⛔ 别用脚本的 `SaveAs3`,那个写出来是废件,见 §11)。
⚠ **新会话第一件事**:别急着 `CloseAllDocuments` —— 那会清空临时目录、
让当前这个装配体的底板引用断掉。先确认用户是否已把底板另存。
### 下一步只差摆位
刀片要**绕 X 轴 +90° 竖起**,再平移到某个槽位。因为底板原点 = 板左下角,
§14 那张表的平移量**可以直接用**(`dx = 4.00`、`dy = 槽心 y + 0.8`、`dz = Z0`)。
卡点仍是 §17:`CreateTransform` 的 pywin32 封送没解决。
**绕开的办法**:在 GUI 里手工拖 + 加配合(比解封送快),或者继续攻 §17。