NavisworksTransport/doc/working/vehicle_parameter_sync_fix.md

4.0 KiB
Raw 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 中的 SetVehicleParameters() 方法从未被调用

修复方案

1. PathEditingViewModel.cs 修改

修改内容:

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

代码变化:

// 车辆参数setter现在会自动同步到渲染插件
public double VehicleLength
{
    get => _vehicleLength;
    set
    {
        if (SetProperty(ref _vehicleLength, value))
        {
            SyncVehicleParametersToRenderPlugin();
            OnPropertyChanged(nameof(CanExecuteAutoPlanPath));
        }
    }
}

// 同步方法
private void SyncVehicleParametersToRenderPlugin()
{
    try
    {
        if (PathPointRenderPlugin.Instance != null)
        {
            PathPointRenderPlugin.Instance.SetVehicleParameters(
                VehicleLength,
                VehicleWidth,
                VehicleHeight,
                SafetyMargin);
        }
    }
    catch (Exception ex)
    {
        LogManager.Error($"[车辆参数同步] 同步车辆参数失败: {ex.Message}", ex);
    }
}

2. SystemManagementViewModel.cs 修改

修改内容:

  • 修改 OnPathVisualizationModeChanged() 方法,在切换到车辆通行空间模式时同步参数
  • 修改 OnVehicleHeightModeChanged() 方法,在高度模式变更时同步参数
  • 添加 SyncVehicleParametersFromPathEditingViewModel() 方法
  • 添加 GetPathEditingViewModel() 方法

代码变化:

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

    // 在切换到车辆通行空间模式时,同步车辆参数
    if (IsVehicleSpaceMode)
    {
        SyncVehicleParametersFromPathEditingViewModel();
    }
}

修复效果

  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