# 终点反推的直线装配路径设计 ## 背景 当前空轨路径已经扩展出轨上/轨下、顶面对接/底面对接、局部姿态等能力,但用户进一步澄清了真实业务: - 已知箱体最终安装后的准确位置和空间方向 - 该场景只需要一条起点到终点的直线运动 - 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 使用指南。