网格生成把给所有网格设置高度区间放到门之前;修复寻路中高度检查的单位转换bug
This commit is contained in:
parent
8fbad77e65
commit
6f1efe53af
@ -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": [
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 为通道网格设置PassableHeights确保高度约束检查
|
||||
/// 为所有可通行网格设置PassableHeights确保高度约束检查
|
||||
/// </summary>
|
||||
/// <param name="gridMap">网格地图</param>
|
||||
/// <param name="scanHeight">扫描高度(车辆高度+安全间隙)</param>
|
||||
@ -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<HeightInterval>
|
||||
{
|
||||
@ -298,7 +298,7 @@ namespace NavisworksTransport.PathPlanning
|
||||
}
|
||||
}
|
||||
|
||||
LogManager.Info($"【通道高度设置】完成,已处理 {processedCount} 个通道网格");
|
||||
LogManager.Info($"【高度约束设置】完成,已处理 {processedCount} 个可通行网格");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user