From 6e20628bd215b1a1468b5cb2622f6b3f4318ca9b Mon Sep 17 00:00:00 2001
From: tian <11429339@qq.com>
Date: Wed, 17 Sep 2025 14:17:55 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=B7=AF=E5=BE=84=E5=8F=AF?=
=?UTF-8?q?=E8=A7=86=E5=8C=96=E6=8F=92=E4=BB=B6=E7=9A=84=E5=8F=82=E6=95=B0?=
=?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E8=BF=87=E7=A8=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/Core/PathPlanningManager.cs | 38 ++++++
src/Core/PathPointRenderPlugin.cs | 15 +--
.../ViewModels/SystemManagementViewModel.cs | 121 ------------------
3 files changed, 44 insertions(+), 130 deletions(-)
diff --git a/src/Core/PathPlanningManager.cs b/src/Core/PathPlanningManager.cs
index 023c55a..3953453 100644
--- a/src/Core/PathPlanningManager.cs
+++ b/src/Core/PathPlanningManager.cs
@@ -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}");
}
+ ///
+ /// 初始化渲染插件的默认值
+ /// 推送合理的网格大小和车辆参数,确保渲染插件在任何情况下都有正确的可视化效果
+ ///
+ 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接口实现
diff --git a/src/Core/PathPointRenderPlugin.cs b/src/Core/PathPointRenderPlugin.cs
index ff8d3fe..35c4e66 100644
--- a/src/Core/PathPointRenderPlugin.cs
+++ b/src/Core/PathPointRenderPlugin.cs
@@ -271,9 +271,6 @@ namespace NavisworksTransport
private Dictionary _pathVisualizations = new Dictionary();
private bool _isEnabled = true;
- // 为向后兼容保留的旧字段
- private List _circleMarkers = new List();
-
// 预览点标记
private CircleMarker _previewMarker = null;
@@ -281,16 +278,16 @@ namespace NavisworksTransport
private List _previewLines = new List();
// 当前网格大小(米),用于自适应点大小计算
- 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;
diff --git a/src/UI/WPF/ViewModels/SystemManagementViewModel.cs b/src/UI/WPF/ViewModels/SystemManagementViewModel.cs
index 944e862..24694f5 100644
--- a/src/UI/WPF/ViewModels/SystemManagementViewModel.cs
+++ b/src/UI/WPF/ViewModels/SystemManagementViewModel.cs
@@ -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 车辆参数同步
-
- ///
- /// 同步车辆参数到渲染插件
- /// 首先尝试从 PathPlanningManager 获取,如果不可用则尝试从 PathEditingViewModel 获取
- ///
- 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);
- }
- }
-
- ///
- /// 获取 PathEditingViewModel 实例
- ///
- /// PathEditingViewModel 实例或 null
- 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 辅助方法
///