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