优化路径可视化插件的参数初始化过程
This commit is contained in:
parent
7b11a91da0
commit
6e20628bd2
@ -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接口实现
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user