From a8e8760e2b06e28266bee7766a316d70d9030ec9 Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Tue, 7 Oct 2025 15:57:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9Gridmap=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E9=87=8D=E5=BB=BA=E6=9C=BA=E5=88=B6=EF=BC=8C=E8=80=83=E8=99=91?= =?UTF-8?q?=E6=89=80=E6=9C=89=E7=89=A9=E6=B5=81=E6=9E=84=E4=BB=B6=E5=8F=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/PathPlanning/GridMapCacheKey.cs | 45 ++++++++++++++--------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/src/PathPlanning/GridMapCacheKey.cs b/src/PathPlanning/GridMapCacheKey.cs index 244a51d..c230a63 100644 --- a/src/PathPlanning/GridMapCacheKey.cs +++ b/src/PathPlanning/GridMapCacheKey.cs @@ -9,14 +9,14 @@ namespace NavisworksTransport.PathPlanning { /// /// GridMap缓存键,用于标识唯一的GridMap生成配置 - /// 基于通道数据、车辆尺寸、网格尺寸等关键参数 + /// 基于所有物流属性构件、车辆尺寸、网格尺寸等关键参数 /// public class GridMapCacheKey : IEquatable { /// - /// 通道数据哈希值(所有可通行物流构件) + /// 物流数据哈希值(所有物流属性构件,包括通道、门、无关项等) /// - public string ChannelDataHash { get; set; } + public string LogisticsDataHash { get; set; } /// /// 边界范围哈希 @@ -46,10 +46,10 @@ namespace NavisworksTransport.PathPlanning /// /// 构造函数 /// - public GridMapCacheKey(string channelDataHash, string boundsHash, double cellSize, + public GridMapCacheKey(string logisticsDataHash, string boundsHash, double cellSize, double vehicleRadius, double safetyMargin, double vehicleHeight) { - ChannelDataHash = channelDataHash ?? throw new ArgumentNullException(nameof(channelDataHash)); + LogisticsDataHash = logisticsDataHash ?? throw new ArgumentNullException(nameof(logisticsDataHash)); BoundsHash = boundsHash ?? throw new ArgumentNullException(nameof(boundsHash)); CellSize = cellSize; VehicleRadius = vehicleRadius; @@ -65,7 +65,7 @@ namespace NavisworksTransport.PathPlanning if (other == null) return false; if (ReferenceEquals(this, other)) return true; - return ChannelDataHash == other.ChannelDataHash && + return LogisticsDataHash == other.LogisticsDataHash && BoundsHash == other.BoundsHash && Math.Abs(CellSize - other.CellSize) < 1e-6 && Math.Abs(VehicleRadius - other.VehicleRadius) < 1e-6 && @@ -89,7 +89,7 @@ namespace NavisworksTransport.PathPlanning unchecked { int hash = 17; - hash = hash * 23 + (ChannelDataHash?.GetHashCode() ?? 0); + hash = hash * 23 + (LogisticsDataHash?.GetHashCode() ?? 0); hash = hash * 23 + (BoundsHash?.GetHashCode() ?? 0); hash = hash * 23 + CellSize.GetHashCode(); hash = hash * 23 + VehicleRadius.GetHashCode(); @@ -104,21 +104,20 @@ namespace NavisworksTransport.PathPlanning /// public override string ToString() { - var channelPreview = ChannelDataHash != null ? - ChannelDataHash.Substring(0, Math.Min(8, ChannelDataHash.Length)) : + var logisticsPreview = LogisticsDataHash != null ? + LogisticsDataHash.Substring(0, Math.Min(8, LogisticsDataHash.Length)) : "NULL"; var boundsPreview = BoundsHash != null ? BoundsHash.Substring(0, Math.Min(8, BoundsHash.Length)) : "NULL"; - return $"GridMapKey[Ch={channelPreview}, Bounds={boundsPreview}, " + + return $"GridMapKey[Logistics={logisticsPreview}, Bounds={boundsPreview}, " + $"Cell={CellSize:F2}, VR={VehicleRadius:F1}m, SM={SafetyMargin:F1}m, VH={VehicleHeight:F1}m]"; } /// /// 根据参数生成GridMap缓存键 /// - /// Navisworks文档 /// 边界范围 /// 网格大小 /// 车辆半径(米) @@ -129,19 +128,19 @@ namespace NavisworksTransport.PathPlanning double cellSize, double vehicleRadius, double safetyMargin, double vehicleHeight) { - var channelDataHash = ComputeChannelDataHash(); + var logisticsDataHash = ComputeLogisticsDataHash(); var boundsHash = ComputeBoundsHash(bounds); - return new GridMapCacheKey(channelDataHash, boundsHash, cellSize, + return new GridMapCacheKey(logisticsDataHash, boundsHash, cellSize, vehicleRadius, safetyMargin, vehicleHeight); } /// - /// 计算通道数据哈希值 - /// 基于所有可通行物流构件的ID、属性、几何等信息 + /// 计算物流数据哈希值 + /// 基于所有物流属性构件(包括通道、门、无关项等)的ID、属性、几何等信息 /// - /// 通道数据哈希 - private static string ComputeChannelDataHash() + /// 物流数据哈希 + private static string ComputeLogisticsDataHash() { try { @@ -149,13 +148,13 @@ namespace NavisworksTransport.PathPlanning { var hashBuilder = new StringBuilder(); - // 获取所有可通行的物流模型项 - var allChannelItems = CategoryAttributeManager.GetAllTraversableLogisticsItems(); + // 获取所有有物流属性的模型项(不仅仅是可通行项) + var allLogisticsItems = CategoryAttributeManager.GetAllLogisticsItems(); // 按InstanceGuid排序确保一致性 - var sortedItems = allChannelItems.OrderBy(item => item.InstanceGuid.ToString()).ToList(); + var sortedItems = allLogisticsItems.OrderBy(item => item.InstanceGuid.ToString()).ToList(); - hashBuilder.Append($"ChannelCount:{sortedItems.Count}|"); + hashBuilder.Append($"LogisticsCount:{sortedItems.Count}|"); foreach (var item in sortedItems) { @@ -199,8 +198,8 @@ namespace NavisworksTransport.PathPlanning } catch (Exception ex) { - LogManager.Warning($"[通道哈希] 计算通道数据哈希失败: {ex.Message},使用时间戳标识"); - return $"CHANNEL_HASH_FAILED_{DateTime.Now.Ticks}"; + LogManager.Warning($"[物流哈希] 计算物流数据哈希失败: {ex.Message},使用时间戳标识"); + return $"LOGISTICS_HASH_FAILED_{DateTime.Now.Ticks}"; } }