# CLAUDE.md

## 前置指令

1. **XAML 文件可以直接更改** — 使用 Edit 工具直接修改 `.xaml` 文件
2. **CS 文件有 TSM 加密** — `.cs` 文件在本地是加密的，无法直接读取或编辑。需要通过 `git show HEAD:path` 获取内容。但注意：有时最新的 CS 文件还未提交到 git，此时可以让用户直接提供最新的 CS 文件内容
3. **所有回复使用中文** — 所有与用户的交流、注释说明等均使用中文

## PageCalib 目录结构

PageCalib 是标定页面模块，采用 MVVM 架构，包含 8 个标定子模块。主入口通过 `PageCalibView.xaml` + `PageCalibViewModel.cs` 管理导航。

### 目录组织

```
PageCalib/
├── View/                           # 主视图
│   ├── PageCalibView.xaml          # 主页面，使用 SideMenu 导航
│   └── PageCalibView.xaml.cs
├── ViewModel/                      # 主视图模型
│   └── PageCalibViewModel.cs       # 管理 8 个标定子模块导航
├── HeightMeasure/                  # 高度标定模块
│   ├── Model/                      # HeightBaseSetting, IHeightMeasure, DiastimeterHeightMeasure
│   ├── Service/                    # HeightMeasureMotionService
│   ├── View/                       # HeightView.xaml
│   └── ViewModel/                  # HeightViewModel
├── OriginCalib/                    # 原点标定模块
│   ├── Model/                      # OriginCalibSetting
│   ├── Service/                    # ICalibrationPostProcessor, OriginCalibrationMotionService, CalibrationPostProcessors
│   ├── View/                       # OriginCalibView.xaml
│   └── ViewModel/                  # OriginCalibViewModel, OriginCalibModuleViewModel, AvoidanceAxisViewModel, CalibrationAxisViewModel
└── AlgorithmCalib/                 # 算法标定模块（包含多个子模块）
    ├── Common/                     # 公共接口和结果类
    │   ├── IAlgorithmCalibModule.cs
    │   ├── AlgorithmCalibResult.cs
    │   └── CalibrationProgressEventArgs.cs
    ├── Model/                      # 参数模型
    │   ├── AlgorithmCalibModuleNames.cs
    │   ├── FusionCalibParItem.cs
    │   ├── RotateCalibParItem.cs
    │   └── FusionCalib/            # FusionCalibSetting, FusionCalibModuleItem
    ├── Task/                       # 标定任务
    │   ├── RotateFormCalibTask.cs
    │   └── FusionCalibTask.cs
    ├── View/                       # 各子模块视图
    │   ├── PixRatioCalib/          # 像素比标定
    │   ├── DistortionCorrectionCalib/ # 畸变校正标定
    │   ├── RotateCenterCalib/      # 旋转中心标定
    │   ├── RotateMatixFormCalib/   # 旋转表标定
    │   ├── MotionCalib/            # 运动系标定
    │   └── FusionCalib/            # 融合标定（Die/Pad）
    ├── ViewModel/                  # 各子模块视图模型
    │   ├── PixRatioCalib/
    │   ├── DistortionCorrectionCalib/
    │   ├── RotateCenterCalib/
    │   ├── RotateMatixFormCalib/
    │   ├── MotionCalib/
    │   └── FusionCalib/
    └── Service/                    # 各子模块服务
        ├── RotateFormCalib/        # RotateMatixFormCalibMotionService, FileService, PostProcessor
        ├── MotionCalib/            # MotionCalibFileService
        └── FusionCalib/            # FusionCalibMotionService, PostProcessor, FusionAlignProcessor
```

### 标定子模块列表

| 模块名称 | 中文名 | 主 ViewModel | 说明 |
|---------|--------|-------------|------|
| HeightMeasure | 高度标定 | HeightViewModel | 测高标定，包含产品和方片高度测量 |
| OriginCalib | 原点标定 | OriginCalibViewModel | 原点位置标定 |
| PixRatioCalib | 像素比标定 | PixRatioCalibContentsViewModel | 相机像素比例标定 |
| DistortionCorrectionCalib | 畸变校准标定 | DistortionCorrectionCalibContentsViewModel | 相机畸变校正 |
| MotionCalib | 运动系标定 | MotionCalibContentsViewModel | 运动系统标定 |
| RotateCenterCalib | 旋转中心标定 | RotateCenterCalibContentsViewModel | 旋转中心位置标定 |
| RotateFormCalib | 旋转表标定 | RotateMatixFormCalibViewModel | 旋转矩阵表标定 |
| FusionCalib | 融合标定 | FusionCalibViewModel | Die/Pad 融合标定 |

### 通用 UI 模式

算法标定子模块（PixRatio、DistortionCorrection、RotateCenter、MotionCalib、FusionCalib）采用统一的 ContentsView 布局：
- 顶部：当前标定名称 + 进度文本
- 中间：ContentControl 绑定 ShowScreenVM 显示具体内容
- 底部：上一个/下一个导航按钮

旋转表标定（RotateMatixFormCalib）采用卡片式布局：
- 左侧：相机预览
- 右侧：模块卡片（避让位置、标定参数、验证参数、进度条、操作按钮）

## 融合标定需求与实现

### 轴映射关系

| 项目 | WS轴（Wafer轴） | PHS轴（Pad轴） |
|------|-----------------|----------------|
| 旧项目 | X2, Y2 | X1, Y1 |
| 新项目 | X2, Y1 | X1, Y2 |

### 融合标定流程

#### 1. Die融合标定（ws圆形标定融合）
在X1全行程不同位置，标定建立X2,Y1的die融合表，用于对位晶粒。

**标定方法：**
- 在die运动系下（固定X1），移动X2,Y1扫描获取N×N点阵，作为初始位置
- 选取X2负限位位置附近设置起始位置，将X1,X2平移相同距离移动到起始位置
- 设定标定范围、标定间隔，扫描一系列N×N点阵，保存为die融合位置表

**验证方法：**
- 在die运动系下飞拍任意坐标
- 再选取任意X1位置，使用融合位置表计算出任意坐标移动到该X1位置下的X2,Y1坐标
- 同时获取到在该X1位置下实际逼近的X2,Y1坐标
- 输出即为标定误差，可选择若干位置覆盖测试全行程误差

#### 2. Pad融合标定（stage拼接融合）
在Y1全行程不同位置，建立X1,Y2的pad融合表，用于对位pad。

**标定方法：**
- 在pad运动系下（固定Y1），移动X1,Y2扫描获取N×N点阵，作为初始位置
- 选取Y2负限位位置附近设置起始位置，将Y1,Y2平移相同距离移动到起始位置
- 设立标定范围、标定间隔，扫描一系列N×N点阵，保存为pad融合位置表

**验证方法：**
- 在pad运动系下飞拍任意坐标
- 再选取任意Y1位置，使用融合位置表计算出任意坐标移动到该Y1位置下的X1,Y2坐标
- 同时获取到在该Y1位置下实际逼近的X1,Y2坐标
- 输出即为标定误差，可选择若干位置覆盖测试全行程误差

#### 3. 整体对位验证（对位流程）
整体对位流程为：
1. 飞拍获取die的下相机X2,Y2坐标，X1坐标固定（上相机die运动系X2,Y1），转换为X1,Y1坐标
2. Pad定位mark获取X1,Y2坐标，Y1坐标固定（上相机pad运动系X1,Y2），即转化为X1,Y1坐标
3. 通过查找die融合表将die X方向对齐pad（此时Y1会产生少许偏移）
4. 再根据此时Y1值，将pad Y方向对齐die（X1会产生少许偏移）
5. 此时再移动X2跟上X1的移动量（此处直接移动或查表再移动）

### 新项目融合标定文件结构

```
AlgorithmCalib/
├── View/FusionCalib/
│   ├── DieFusionCalibView.xaml           # Die融合标定视图（标定+验证Tab）
│   ├── PadFusionCalibView.xaml           # Pad融合标定视图（标定+验证Tab）
│   └── FusionAlignVerifyView.xaml        # 整体对位验证视图（4步骤流程）
├── ViewModel/FusionCalib/
│   ├── FusionCalibViewModel.cs           # Die/Pad融合标定共用ViewModel
│   ├── FusionAlignVerifyViewModel.cs     # 整体对位验证ViewModel
│   └── FusionMultipleCalibViewModel.cs   # 多模块融合标定ViewModel
├── Service/FusionCalib/
│   ├── FusionCalibMotionService.cs       # 融合标定运动服务
│   ├── FusionCalibPostProcessor.cs       # 融合标定后处理器
│   └── FusionAlignProcessor.cs           # 对位处理器
└── Model/FusionCalib/
    ├── FusionCalibSetting.cs             # 融合标定设置
    └── FusionCalibModuleItem.cs          # 融合标定模块参数
```

### 旧项目参考文件

旧项目融合标定参考文件位于 `AlgorithmCalib/Old_fusionCalib/` 目录：
- `oldProjectDetail.xaml` - 旧项目融合标定流程说明
- `newProjectVisionDemand.xaml` - 新项目需求说明
- `CameraFusionCali02AViewModel.xaml` - 旧项目ViewModel实现（CS内容）
- `CameraFusionCalibrationMotion02A.xaml` - 旧项目Motion实现（CS内容）

### 关键API调用

旧项目使用的JM1Vision API：
- `JM1Manager.Instance.cal_wafer_fusion()` - 计算wafer融合表
- `JM1Manager.Instance.get_ws_pos()` - 根据融合表查询WS位置
- `JM1Manager.Instance.pos_verify()` - 验证标定精度
- `JM1Manager.Instance.Save()` - 保存标定数据
