# Navisworks 变换与旋转规则

本文件只记录和本项目最相关的结论。

## 关键结论

1. `Rotation` 不是“绕物体中心旋转”，而是和整体变换组合后共同决定结果。
2. `ResetPermanentTransform` 会清掉覆盖变换，后续 `BoundingBox()` 与 `Transform` 都会回到设计文件原始状态。
3. `OverridePermanentTransform` 与 `SetModelUnitsAndTransform` 会直接改变当前模型覆盖变换。
4. 对真实模型做完整姿态时，要特别区分：
   - 目标姿态算得对不对
   - 还是增量/绝对应用方式把正确姿态弄坏
5. 对虚拟物体做完整姿态时，若尺寸依赖缩放实现，应用姿态时必须明确是否保留当前缩放。

## 本项目里的常见坑

### 1. UI 轴和内部轴混用

- UI `X/Y/Z` 一律是宿主坐标系
- 内部坐标系只用于数学求解
- 不要把 UI 输入直接当成资产坐标系角度

### 2. 通行空间和真实物体使用不同尺寸语义

如果出现：

- 通行空间对，物体位置错
- 或物体对，通行空间错

优先检查：

- 是否一边用了原始高度
- 另一边用了旋转后的法线尺寸

### 3. 虚拟物体资源原点问题

若虚拟物体在“原点”时 `BoundingBox.Center` 不是 `(0,0,0)`：

- 先检查 `unit_cube.nwc` 是否为最新资源
- 再查代码

不要一上来怀疑移动逻辑。

### 4. Rail 角度修正

`Rail` 不能像平面路径那样在宿主空间直接补转。

必须：

- 先并入 `canonical -> rail pose` 链
- 再落位

## 推荐排查顺序

1. 先确认资源文件是否正确
2. 再确认日志里的目标姿态/目标位置是否合理
3. 最后才看 Navisworks 应用变换的方法是否有问题

