NavisworksTransport/doc/working/vehicle_parameter_sync_fix.md

4.0 KiB
Raw Permalink Blame History

物体参数同步问题修复

问题描述

PathPointRenderPlugin.cs 中使用了硬编码的默认物体参数 (2.0m × 1.5m × 2.0m),而用户在 PathEditingViewModel 中配置的参数 (1.0m × 1.0m × 2.0m) 没有被正确同步到渲染插件,导致物体通行空间模式显示的尺寸不正确。

根本原因

  1. PathPointRenderPlugin.cs 中有硬编码的默认物体参数
  2. PathEditingViewModel.cs 的物体参数属性setter只更新了UI没有同步到渲染插件
  3. SystemManagementViewModel 在切换可视化模式时没有同步最新的物体参数
  4. PathPointRenderPlugin.cs 中的 SetObjectParameters() 方法从未被调用

修复方案

1. PathEditingViewModel.cs 修改

修改内容:

  • 为所有物体参数属性setter添加 SyncObjectParametersToRenderPlugin() 调用
  • 添加 SyncObjectParametersToRenderPlugin() 方法
  • UpdatePathVisualization() 方法中添加参数同步
  • 在两个构造函数中添加初始化参数同步

代码变化:

// 物体参数setter现在会自动同步到渲染插件
public double ObjectLength
{
    get => _objectLength;
    set
    {
        if (SetProperty(ref _objectLength, value))
        {
            SyncObjectParametersToRenderPlugin();
            OnPropertyChanged(nameof(CanExecuteAutoPlanPath));
        }
    }
}

// 同步方法
private void SyncObjectParametersToRenderPlugin()
{
    try
    {
        if (PathPointRenderPlugin.Instance != null)
        {
            PathPointRenderPlugin.Instance.SetObjectParameters(
                ObjectLength,
                ObjectWidth,
                ObjectHeight,
                SafetyMargin);
        }
    }
    catch (Exception ex)
    {
        LogManager.Error($"[物体参数同步] 同步物体参数失败: {ex.Message}", ex);
    }
}

2. SystemManagementViewModel.cs 修改

修改内容:

  • 修改 OnPathVisualizationModeChanged() 方法,在切换到物体通行空间模式时同步参数
  • 修改 OnObjectHeightModeChanged() 方法,在高度模式变更时同步参数
  • 添加 SyncObjectParametersFromPathEditingViewModel() 方法
  • 添加 GetPathEditingViewModel() 方法

代码变化:

// 可视化模式切换时同步参数
private void OnPathVisualizationModeChanged()
{
    // ... 现有逻辑 ...

    // 在切换到物体通行空间模式时,同步物体参数
    if (IsObjectSpaceMode)
    {
        SyncObjectParametersFromPathEditingViewModel();
    }
}

修复效果

  1. 实时同步:用户在路径编辑界面修改物体参数时,参数会立即同步到渲染插件
  2. 模式切换同步:在系统管理界面切换可视化模式时,会自动同步当前的物体参数
  3. 初始化同步:插件启动时会使用正确的用户配置参数,而不是硬编码默认值
  4. 多层保障:提供了多种获取物体参数的方式,确保同步的可靠性

测试步骤

  1. 启动插件打开NavisworksTransport插件
  2. 检查默认参数:验证物体通行空间模式使用的是 1.0m × 1.0m × 2.0m 而不是 2.0m × 1.5m × 2.0m
  3. 修改参数:在路径编辑界面修改物体参数
  4. 验证同步:切换到物体通行空间模式,确认显示的尺寸与设置的参数一致
  5. 模式切换测试:在系统管理界面切换可视化模式,确认参数正确同步

技术细节

  • 同步触发点

    • PathEditingViewModel 属性setter变更时
    • UpdatePathVisualization() 调用时
    • SystemManagementViewModel 模式切换时
    • 插件初始化时
  • 获取参数的优先级

    1. 从 PathEditingViewModel 获取用户配置的参数
    2. 使用 PathEditingViewModel 的默认值 (1.0, 1.0, 2.0, 0.25)
    3. 避免使用 PathPointRenderPlugin 的硬编码默认值
  • 线程安全:所有同步操作都包含异常处理,确保不会影响主程序运行

编译状态

编译成功 - 所有修改已通过编译验证

修复完成时间2025-09-14