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} 个可通行网格");
}
///