From 6f1efe53af734e10edf8c2102c23863912f93ca6 Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Tue, 16 Sep 2025 18:47:15 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BD=91=E6=A0=BC=E7=94=9F=E6=88=90=E6=8A=8A?= =?UTF-8?q?=E7=BB=99=E6=89=80=E6=9C=89=E7=BD=91=E6=A0=BC=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=AB=98=E5=BA=A6=E5=8C=BA=E9=97=B4=E6=94=BE=E5=88=B0=E9=97=A8?= =?UTF-8?q?=E4=B9=8B=E5=89=8D=EF=BC=9B=E4=BF=AE=E5=A4=8D=E5=AF=BB=E8=B7=AF?= =?UTF-8?q?=E4=B8=AD=E9=AB=98=E5=BA=A6=E6=A3=80=E6=9F=A5=E7=9A=84=E5=8D=95?= =?UTF-8?q?=E4=BD=8D=E8=BD=AC=E6=8D=A2bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/settings.local.json | 3 ++- src/PathPlanning/AutoPathFinder.cs | 8 +++----- src/PathPlanning/GridMapGenerator.cs | 26 +++++++++++++------------- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index c1831cb..09b748d 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -136,7 +136,8 @@ "Bash(xcopy:*)", "Read(//c/ProgramData/Autodesk/Navisworks Manage 2026/NavisworksTransport/logs/**)", "Bash(sed:*)", - "Read(//c/ProgramData/Autodesk/**)" + "Read(//c/ProgramData/Autodesk/**)", + "Bash(cd:*)" ], "deny": [], "additionalDirectories": [ diff --git a/src/PathPlanning/AutoPathFinder.cs b/src/PathPlanning/AutoPathFinder.cs index 07ca37b..1a3712f 100644 --- a/src/PathPlanning/AutoPathFinder.cs +++ b/src/PathPlanning/AutoPathFinder.cs @@ -1244,17 +1244,15 @@ namespace NavisworksTransport.PathPlanning // 检查高度约束 if (cell.PassableHeights != null && cell.PassableHeights.Any()) { - // 将车辆高度从米转换为模型单位 - double vehicleHeightInModelUnits = vehicleHeight * UnitsConverter.GetMetersToUnitsConversionFactor(Application.ActiveDocument.Units); - LogManager.Info($"[高度检查] 检查 {cell.PassableHeights.Count} 个高度区间,车辆高度:{vehicleHeight}m ({vehicleHeightInModelUnits:F2}模型单位)"); + LogManager.Info($"[高度检查] 检查 {cell.PassableHeights.Count} 个高度区间,车辆高度:{vehicleHeight}模型单位)"); foreach (var interval in cell.PassableHeights) { - bool spanOk = interval.GetSpan() >= vehicleHeightInModelUnits; + bool spanOk = interval.GetSpan() >= vehicleHeight; // 将绝对坐标转换为相对于网格底面的坐标 double relativeZ = point.Z - cell.WorldPosition.Z; bool containsHeight = interval.Contains(relativeZ); - LogManager.Info($"[高度检查] 区间 {interval}: 跨度={interval.GetSpan():F2}模型单位 (需要≥{vehicleHeightInModelUnits:F2}模型单位): {spanOk}, 包含相对Z={relativeZ:F2}: {containsHeight}"); + LogManager.Info($"[高度检查] 区间 {interval}: 跨度={interval.GetSpan():F2}模型单位 (需要≥{vehicleHeight:F2}模型单位): {spanOk}, 包含相对Z={relativeZ:F2}: {containsHeight}"); if (spanOk && containsHeight) { diff --git a/src/PathPlanning/GridMapGenerator.cs b/src/PathPlanning/GridMapGenerator.cs index 01d87df..ed1c0cf 100644 --- a/src/PathPlanning/GridMapGenerator.cs +++ b/src/PathPlanning/GridMapGenerator.cs @@ -84,7 +84,7 @@ namespace NavisworksTransport.PathPlanning var allChannelItems = CategoryAttributeManager.GetAllTraversableLogisticsItems(document); LogManager.Info($"【生成网格地图】直接获取到 {allChannelItems.Count} 个可通行物流元素"); - // 智能收集通道相关节点(包括父节点、同级节点等) + // 智能收集可通行模型相关节点(包括父节点、同级节点等) var channelRelatedItems = CollectChannelRelatedItems(allChannelItems.ToList()); LogManager.Info($"【生成网格地图】智能收集到 {channelRelatedItems.Count} 个通道相关节点"); @@ -94,16 +94,16 @@ namespace NavisworksTransport.PathPlanning ProcessObstaclesWithBoundingBoxOptimized(document, channelCoverage.GridMap, channelRelatedItems, scanHeight); LogManager.Info($"【阶段2完成】障碍物处理后网格统计: {channelCoverage.GridMap.GetStatistics()}"); - - // 2.5. 单独处理门元素,设置为可通行 - LogManager.Info("【生成网格地图】步骤2.5: 处理门元素"); - ProcessDoorElements(channelCoverage.GridMap, allChannelItems); - LogManager.Info($"【阶段2.5完成】门元素处理后网格统计: {channelCoverage.GridMap.GetStatistics()}"); - // 2.6. 为通道网格设置PassableHeights确保高度约束检查 - LogManager.Info("【生成网格地图】步骤2.6: 为通道网格设置高度约束"); + // 2.5. 为所有可通行网格设置PassableHeights确保高度约束检查 + LogManager.Info("【生成网格地图】步骤2.5: 为可通行网格设置高度约束"); SetChannelPassableHeights(channelCoverage.GridMap, scanHeight); - LogManager.Info($"【阶段2.6完成】通道高度约束设置后网格统计: {channelCoverage.GridMap.GetStatistics()}"); + LogManager.Info($"【阶段2.5完成】高度约束设置后网格统计: {channelCoverage.GridMap.GetStatistics()}"); + + // 2.6. 单独处理门元素,设置为可通行,并设置通行高度 + LogManager.Info("【生成网格地图】步骤2.6: 处理门元素"); + ProcessDoorElements(channelCoverage.GridMap, allChannelItems); + LogManager.Info($"【阶段2.6完成】门元素处理后网格统计: {channelCoverage.GridMap.GetStatistics()}"); // 3. 应用车辆尺寸膨胀(如果需要) if (vehicleRadius > 0 || safetyMargin > 0) @@ -268,7 +268,7 @@ namespace NavisworksTransport.PathPlanning } /// - /// 为通道网格设置PassableHeights确保高度约束检查 + /// 为所有可通行网格设置PassableHeights确保高度约束检查 /// /// 网格地图 /// 扫描高度(车辆高度+安全间隙) @@ -278,7 +278,7 @@ namespace NavisworksTransport.PathPlanning double metersToModelUnits = UnitsConverter.GetMetersToUnitsConversionFactor(Application.ActiveDocument.Units); double scanHeightInModelUnits = scanHeight * metersToModelUnits; - LogManager.Info($"【通道高度设置】开始为通道网格设置高度约束,扫描高度: {scanHeight:F2}米 ({scanHeightInModelUnits:F2}模型单位)"); + LogManager.Info($"【高度约束设置】开始为所有可通行网格设置高度约束,扫描高度: {scanHeight:F2}米 ({scanHeightInModelUnits:F2}模型单位)"); int processedCount = 0; for (int x = 0; x < gridMap.Width; x++) @@ -286,7 +286,7 @@ namespace NavisworksTransport.PathPlanning for (int y = 0; y < gridMap.Height; y++) { var cell = gridMap.Cells[x, y]; - if (cell.CellType == CategoryAttributeManager.LogisticsElementType.通道 && cell.IsWalkable) + if (cell.IsWalkable) { cell.PassableHeights = new List { @@ -298,7 +298,7 @@ namespace NavisworksTransport.PathPlanning } } - LogManager.Info($"【通道高度设置】完成,已处理 {processedCount} 个通道网格"); + LogManager.Info($"【高度约束设置】完成,已处理 {processedCount} 个可通行网格"); } ///