优化路径可视化插件的参数初始化过程

This commit is contained in:
tian 2025-09-17 14:17:55 +08:00
parent 7b11a91da0
commit 6e20628bd2
3 changed files with 44 additions and 130 deletions

View File

@ -119,6 +119,9 @@ namespace NavisworksTransport
{
LogManager.WriteLog("[路径管理] ✅ PathPointRenderPlugin实例获取成功");
LogManager.WriteLog($"[路径管理] 渲染插件状态 - 启用: {_renderPlugin.IsEnabled}, 标记数量: {_renderPlugin.MarkerCount}");
// 推送默认的网格大小和车辆参数,确保渲染插件有合理的初始值
InitializeRenderPluginDefaults();
}
else
{
@ -142,6 +145,41 @@ namespace NavisworksTransport
LogManager.Info($"PathPlanningManager初始化完成ManagerId: {_managerId}");
}
/// <summary>
/// 初始化渲染插件的默认值
/// 推送合理的网格大小和车辆参数,确保渲染插件在任何情况下都有正确的可视化效果
/// </summary>
private void InitializeRenderPluginDefaults()
{
try
{
// 设置默认网格大小0.5米,适合大多数场景)
const double defaultGridSizeInMeters = 0.5;
_renderPlugin.SetGridSize(defaultGridSizeInMeters);
LogManager.Info($"[渲染插件初始化] 已设置默认网格大小: {defaultGridSizeInMeters}米");
// 设置默认车辆参数与PathEditingViewModel的默认值保持一致
const double defaultVehicleLength = 1.0; // 米
const double defaultVehicleWidth = 1.0; // 米
const double defaultVehicleHeight = 2.0; // 米
const double defaultSafetyMargin = 0.25; // 米
_renderPlugin.SetVehicleParameters(
defaultVehicleLength,
defaultVehicleWidth,
defaultVehicleHeight,
defaultSafetyMargin
);
LogManager.Info($"[渲染插件初始化] 已设置默认车辆参数: 长={defaultVehicleLength}m, 宽={defaultVehicleWidth}m, 高={defaultVehicleHeight}m, 安全间隙={defaultSafetyMargin}m");
}
catch (Exception ex)
{
LogManager.Error($"[渲染插件初始化] 设置默认值失败: {ex.Message}", ex);
// 即使失败也不抛出异常避免影响PathPlanningManager的初始化
}
}
#endregion
#region IPathPlanningManager接口实现

View File

@ -271,9 +271,6 @@ namespace NavisworksTransport
private Dictionary<string, PathVisualization> _pathVisualizations = new Dictionary<string, PathVisualization>();
private bool _isEnabled = true;
// 为向后兼容保留的旧字段
private List<CircleMarker> _circleMarkers = new List<CircleMarker>();
// 预览点标记
private CircleMarker _previewMarker = null;
@ -281,16 +278,16 @@ namespace NavisworksTransport
private List<LineMarker> _previewLines = new List<LineMarker>();
// 当前网格大小(米),用于自适应点大小计算
private double _currentGridSizeInMeters = 0.5;
private double _currentGridSizeInMeters;
// 路径可视化模式配置
private PathVisualizationMode _visualizationMode = PathVisualizationMode.StandardLine;
// 车辆参数(默认值可以从PathPlanningManager获取
private double _vehicleLength = 1.0; // 米
private double _vehicleWidth = 1.0; // 米
private double _vehicleHeight = 2.0; // 米
private double _safetyMargin = 0.25; // 米
// 车辆参数(必须通过SetVehicleParameters方法设置
private double _vehicleLength;
private double _vehicleWidth;
private double _vehicleHeight;
private double _safetyMargin;
// 静态实例,用于外部访问
private static PathPointRenderPlugin _instance;

View File

@ -397,12 +397,6 @@ namespace NavisworksTransport.UI.WPF.ViewModels
var renderPlugin = PathPointRenderPlugin.Instance;
if (renderPlugin != null)
{
// 在切换到车辆通行空间模式时,先同步车辆参数再设置模式
if (IsVehicleSpaceMode)
{
SyncVehicleParametersFromPathEditingViewModel();
}
var mode = IsVehicleSpaceMode ? PathVisualizationMode.VehicleSpace : PathVisualizationMode.StandardLine;
renderPlugin.VisualizationMode = mode;
@ -967,121 +961,6 @@ namespace NavisworksTransport.UI.WPF.ViewModels
#endregion
#region
/// <summary>
/// 同步车辆参数到渲染插件
/// 首先尝试从 PathPlanningManager 获取,如果不可用则尝试从 PathEditingViewModel 获取
/// </summary>
private void SyncVehicleParametersFromPathEditingViewModel()
{
try
{
bool syncSuccess = false;
// 方法 1: 从 PathPlanningManager 获取车辆参数(更可靠)
var pathPlanningManager = GetPathPlanningManager();
if (pathPlanningManager != null)
{
try
{
// PathPlanningManager 可能有车辆参数的最新值
// 但由于需要检查 PathPlanningManager 的具体 API这里直接跳过到方法2
LogManager.Debug("[系统管理-车辆参数同步] PathPlanningManager可用但暂时使用PathEditingViewModel方式");
}
catch (Exception ex)
{
LogManager.Debug($"[系统管理-车辆参数同步] 从 PathPlanningManager 获取车辆参数异常: {ex.Message}");
}
}
// 方法 2: 从 PathEditingViewModel 获取车辆参数
if (!syncSuccess)
{
var pathEditingViewModel = GetPathEditingViewModel();
if (pathEditingViewModel != null)
{
if (PathPointRenderPlugin.Instance != null)
{
PathPointRenderPlugin.Instance.SetVehicleParameters(
pathEditingViewModel.VehicleLength,
pathEditingViewModel.VehicleWidth,
pathEditingViewModel.VehicleHeight,
pathEditingViewModel.SafetyMargin);
LogManager.WriteLog($"[系统管理-车辆参数同步] 已同步车辆参数: 长={pathEditingViewModel.VehicleLength:F2}m, 宽={pathEditingViewModel.VehicleWidth:F2}m, 高={pathEditingViewModel.VehicleHeight:F2}m, 安全间隙={pathEditingViewModel.SafetyMargin:F2}m");
syncSuccess = true;
}
else
{
LogManager.Warning("[系统管理-车辆参数同步] PathPointRenderPlugin实例为空无法同步车辆参数");
}
}
}
// 方法 3: 使用默认参数作为后备
if (!syncSuccess)
{
LogManager.Info("[系统管理-车辆参数同步] 无法获取实际车辆参数,使用默认车辆参数");
if (PathPointRenderPlugin.Instance != null)
{
// 使用PathEditingViewModel的默认值而不是PathPointRenderPlugin的默认值
PathPointRenderPlugin.Instance.SetVehicleParameters(1.0, 1.0, 2.0, 0.25);
LogManager.WriteLog("[系统管理-车辆参数同步] 使用默认车辆参数: 长=1.0m, 宽=1.0m, 高=2.0m, 安全间隙=0.25m");
}
}
}
catch (Exception ex)
{
LogManager.Error($"[系统管理-车辆参数同步] 同步车辆参数失败: {ex.Message}", ex);
}
}
/// <summary>
/// 获取 PathEditingViewModel 实例
/// </summary>
/// <returns>PathEditingViewModel 实例或 null</returns>
private PathEditingViewModel GetPathEditingViewModel()
{
try
{
// 通过主 ViewModel 获取 PathEditingView 的 ViewModel
if (_mainViewModel != null)
{
// 尝试通过反射获取LogisticsControlPanel
var mainViewModelType = _mainViewModel.GetType();
// 查找可能的PathEditingView属性或字段
var pathEditingViewProperty = mainViewModelType.GetProperty("PathEditingView");
if (pathEditingViewProperty != null)
{
var pathEditingView = pathEditingViewProperty.GetValue(_mainViewModel);
if (pathEditingView != null)
{
var viewModelProperty = pathEditingView.GetType().GetProperty("ViewModel");
if (viewModelProperty != null)
{
return viewModelProperty.GetValue(pathEditingView) as PathEditingViewModel;
}
}
}
LogManager.Debug("[获取PathEditingViewModel] 未找到PathEditingView属性或ViewModel属性");
}
LogManager.Debug("[获取PathEditingViewModel] _mainViewModel为空或无法获取PathEditingView");
return null;
}
catch (Exception ex)
{
LogManager.Error($"[获取PathEditingViewModel] 异常: {ex.Message}", ex);
return null;
}
}
#endregion
#region
/// <summary>