NavisworksTransport/doc/design/2026/linear-assembly-reference-path.md

300 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 终点反推的直线装配路径设计
## 背景
当前空轨路径已经扩展出轨上/轨下、顶面对接/底面对接、局部姿态等能力,但用户进一步澄清了真实业务:
- 已知箱体最终安装后的准确位置和空间方向
- 该场景只需要一条起点到终点的直线运动
- Navisworks 里用户无法点击空气中的点,必须点击到某个实际对象
因此,这类路径不应继续建模为“轨道识别”问题,而应建模为“已知终点位姿的直线装配运动”问题。
## 核心思路
### 1. 终点位姿作为主输入
由用户选择终点处已经组装好的箱体,系统读取:
- 包围盒
- 当前朝向
- 终点构件中心 / 顶面中心 / 底面中心
终点位姿是整个运动仿真的主基准。
### 2. 生成可点击的参考杆
为了满足 Navisworks 的点击限制,系统不只绘制一条渲染线,而是生成一个临时参考实体:
- 形态:细长杆体
- 初版建议:直接复用 `unit_cube.nwc`,通过缩放生成细长方杆
- 作用:
- 可视化直线参考路径
- 允许用户点击取点
- 为起点吸附提供稳定对象
### 3. 用户点击参考杆确定起点
用户在三维视图中点击参考杆上的某个位置后:
- 获取点击坐标
- 将点击点投影到参考杆轴线
- 该投影点作为真实起点
### 4. 生成最终直线路径
系统根据:
- 起点
- 终点位姿
- 轨上/轨下
- 顶面对接/底面对接
生成直线路径点列,并继续复用现有:
- 动画
- 通行空间
- 碰撞检测
## 与当前 Rail 方案的关系
### 保留
- `RailMountMode`
- `RailPayloadAnchorMode`
- `RailPathDefinitionMode`
- `RailPathPoseHelper`
- 动画完整姿态支持
这些都仍然有价值,因为终点和路径参考点之间仍需要姿态推导。
### 弱化 / 退出主路径
- 轨道几何识别
- 双轨自动分析
- 基于轨道装置的中心线提取
这些能力可保留为辅助模式,但不再作为该场景的主生成逻辑。
## 最小可行实现
### Phase 1
新增“终点反推参考杆”基础能力:
- 选择终点箱体
- 读取终点包围盒和朝向
- 生成参考杆临时实体
- 支持显示 / 隐藏 / 更新参考杆
### Phase 2
新增“点击参考杆生成直线路径”:
- 用户点击参考杆
- 起点投影到参考线
- 终点由终点箱体位姿推导
- 自动生成两点直线路径
### Phase 3
补齐 UI 与持久化:
- 在 PathEditingViewModel / PathEditingView 中新增入口
- 保存终点箱体引用、参考线方向、参考杆长度等参数
## 推荐复用点
- `VirtualObjectManager`
- 复用 `unit_cube.nwc` 的加载、缩放、隐藏逻辑
- `ModelItemTransformHelper`
- 复用带缩放的位姿变换
- `NavisworksSelectionHelper`
- 复用当前选择对象读取
- `PathPlanningManager`
- 复用点击工具和路径点落点链路
## 需要新增的能力
建议新增一个专用管理器,而不是继续塞进 `VirtualObjectManager`
- `AssemblyReferencePathManager`
职责:
- 管理参考杆临时实体
- 根据终点箱体位姿生成参考轴线
- 提供点击点到参考线的投影
- 输出最终直线路径点
## 结论
本需求的主问题是“箱体的直线装配运动仿真”,不是“轨道识别”。
推荐将实现重心切换为:
`终点箱体位姿 -> 参考杆 -> 点击起点 -> 直线路径 -> 动画/碰撞`
这条路线比轨道几何分析更稳定、更符合 Navisworks 交互约束,也更贴近用户真实使用方式。
## 当前实现状态
当前 worktree 中已经完成一版可试用实现,核心能力包括:
- 在路径编辑页新增“直线装配参考”区域
- 支持捕获终点处已安装箱体
- 支持选择 `轨上安装 / 轨下安装`
- 支持选择 `顶面对接 / 底面对接`
- 根据终点箱体位姿生成一根可点击的参考杆
- 在三维中渲染终点对接点标记
- 用户点击参考杆后,自动吸附到参考线并生成两点直线路径
- 新生成路径仍使用 `PathType.Rail`,因此可继续复用现有 Rail 动画、通行空间和碰撞检测链路
说明:
- 顶部原有“空轨路径”入口仍保留,但已改名为“传统空轨路径”
- 当前推荐优先使用“直线装配参考”流程
## 当前操作流程
### 1. 选择终点箱体
先在 Navisworks 三维视图中选中终点处已经安装好的箱体,然后在路径编辑页点击:
- `捕获终点箱体`
系统会记录:
- 箱体名称
- 包围盒中心与尺寸
- 当前选择的安装方式
- 当前选择的对接基准
- 推导出的终点对接点
### 2. 设置装配构型
在“直线装配参考”区域中设置:
- `安装方式`
- `轨下安装`
- `轨上安装`
- `对接基准`
- `顶面对接`
- `底面对接`
这两个参数会直接写入最终生成的 `PathRoute`
- `RailMountMode`
- `RailPayloadAnchorMode`
### 3. 生成参考杆
设置参考杆参数后点击:
- `生成参考杆`
当前实现会:
- 从终点对接点沿箱体前向反推出参考杆
- 在三维场景中生成一根可点击的细长参考杆
- 同时渲染终点对接点标记,便于确认当前到底是顶面中心还是底面中心
参考杆资源优先使用:
- `resources/unit_cylinder.nwc`
如果该资源暂未放入,则会临时退回:
- `resources/unit_cube.nwc`
### 4. 点击参考杆生成路径
点击:
- `取起点并生成路径`
然后在三维中点击参考杆附近任意可拾取位置。系统会:
- 获取点击坐标
- 投影到参考杆轴线
- 将投影点作为真实起点
- 将终点对接点作为真实终点
- 自动创建一条两点直线路径
生成后的路径名称形如:
- `直线装配_1`
## 当前界面入口
相关界面位于:
- `路径编辑页 -> 直线装配参考`
当前主要按钮:
- `捕获终点箱体`
- `生成参考杆`
- `取起点并生成路径`
- `隐藏参考杆`
传统模式入口:
- `传统空轨路径`
## 当前已知边界
### 1. 终点对接点依赖包围盒和当前朝向
当前终点对接点通过以下信息推导:
- 世界包围盒
- 当前变换的局部 Z 方向
- 估算出的局部箱体高度
这对规则箱型构件是可行的,但如果对象几何明显偏离箱体、或包围盒受附属零件影响较大,终点锚点可能仍需进一步校核。
### 2. 参考杆方向当前取箱体前向
当前参考杆方向来自:
- 箱体变换后的局部 X 轴
这适合“装配移动方向与构件主朝向一致”的场景。
如果后续遇到“箱体朝向正确,但装配退让方向不是局部 X 轴”的场景,需要再补一个“参考方向选择”输入。
### 3. 仍然复用 Rail 路径类型
当前新路径仍记为:
- `PathType.Rail`
这是有意为之,目的是复用已有 Rail 动画和通行空间逻辑。
如果未来这类路径越来越多,可以再考虑单独抽象成新的路径类型,例如 `LinearAssembly`
## 建议测试用例
建议至少验证以下组合:
1. `轨下安装 + 顶面对接`
2. `轨下安装 + 底面对接`
3. `轨上安装 + 顶面对接`
4. `轨上安装 + 底面对接`
每组建议检查:
- 终点对接点标记是否落在预期位置
- 参考杆是否从终点沿正确方向反推
- 点击参考杆后起点是否吸附到参考线上
- 生成路径后,动画位置和通行空间偏移是否符合构型
## 后续建议
下一阶段建议优先做这几项:
1. 增加“参考方向来源”选项
例如允许用户直接指定反推方向,而不只使用箱体局部 X 轴。
2. 为直线装配路径增加更明确的导出字段
便于区分“传统空轨路径”和“终点反推的直线装配路径”。
3. 补一份面向最终用户的简短操作说明
可以从本节内容提炼成更短的 UI 使用指南。