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 辅助方法 ///