# 常见使用场景示例 ## 场景1:创建并显示对话框 ```csharp using NavisworksTransport.Utils; public class MyViewModel { private MyDialog _dialog; public void ShowDialog() { // 防止重复打开 if (_dialog != null && _dialog.IsVisible) { _dialog.Activate(); return; } // 创建对话框 _dialog = new MyDialog(); // ✅ 使用 DialogHelper 设置 Owner DialogHelper.SetOwnerSafely(_dialog); // 显示非模态对话框 _dialog.Show(); // 清理引用 _dialog.Closed += (s, e) => _dialog = null; } } ``` ## 场景2:带单位转换的计算 ```csharp using NavisworksTransport.Utils; public class PathPlanner { /// /// 设置网格大小 /// /// 网格单元大小(米) public void SetCellSize(double cellSizeInMeters) { // ✅ 转换为模型单位存储 double cellSize = UnitsConverter.ConvertFromMeters(cellSizeInMeters); // 后续计算使用 cellSize(模型单位) _grid = new GridMap(cellSize); } /// /// 获取路径长度(用于显示) /// public string GetPathLengthDisplay(PathRoute route) { // ✅ 转换为米显示 double lengthInMeters = UnitsConverter.ConvertToMeters(route.TotalLength); return $"{lengthInMeters:F2} 米"; } } ``` ## 场景3:完整的操作日志记录 ```csharp using NavisworksTransport.Utils; public class PathService { public async Task CreatePathAsync(PathParameters parameters) { LogManager.Info("[路径创建] === 开始创建路径 ==="); LogManager.Info($"[路径创建] 参数: {parameters}"); try { // 验证参数 if (!ValidateParameters(parameters)) { LogManager.Warning("[路径创建] 参数验证失败"); return null; } // 执行创建 var route = await GeneratePathAsync(parameters); LogManager.Info($"[路径创建] 成功: {route.Name}, ID: {route.Id}"); LogManager.Info($"[路径创建] 长度: {route.TotalLength:F2} 米, 点数: {route.Points.Count}"); return route; } catch (Exception ex) { // ✅ 记录完整异常信息 LogManager.Error($"[路径创建] 失败: {ex.Message}", ex); throw; } finally { LogManager.Info("[路径创建] === 创建完成 ==="); } } } ``` ## 场景4:几何计算 ```csharp using NavisworksTransport.Utils; public class PathAnalyzer { /// /// 计算路径总长度 /// public double CalculateTotalLength(List points) { double totalLength = 0; for (int i = 0; i < points.Count - 1; i++) { // ✅ 使用 GeometryHelper totalLength += GeometryHelper.Distance(points[i], points[i + 1]); } return totalLength; } /// /// 检查转弯是否过急 /// public bool IsTurnTooSharp(Point3D prev, Point3D current, Point3D next, double maxAngle) { Vector3D v1 = GeometryHelper.Subtract(current, prev); Vector3D v2 = GeometryHelper.Subtract(next, current); double angle = GeometryHelper.AngleBetweenDegrees(v1, v2); return angle > maxAngle; } } ``` ## 场景5:确认对话框 ```csharp using NavisworksTransport.Utils; using System.Windows; public class PathViewModel { public void DeletePath(PathRoute route) { // ✅ 使用 DialogHelper 显示确认对话框 var result = DialogHelper.ShowMessageBox( $"确定要删除路径 \"{route.Name}\" 吗?\n此操作不可撤销。", "确认删除", MessageBoxButton.YesNo, MessageBoxImage.Warning ); if (result != MessageBoxResult.Yes) { LogManager.Info($"[删除] 用户取消删除: {route.Name}"); return; } // 执行删除 _pathPlanningManager.DeleteRoute(route.Id); LogManager.Info($"[删除] 路径已删除: {route.Name}"); } } ```