diff --git a/src/Commands/GenerateCollisionReportCommand.cs b/src/Commands/GenerateCollisionReportCommand.cs index 4b4ee1b..77f1dc4 100644 --- a/src/Commands/GenerateCollisionReportCommand.cs +++ b/src/Commands/GenerateCollisionReportCommand.cs @@ -711,7 +711,25 @@ namespace NavisworksTransport.Commands allCollisions.AddRange(testCollisionsRaw); // 统计碰撞总数 + // 🔥 优先使用检测记录的 CollisionCount(碰撞对总数,与历史表格一致): + // DB 重建的对象明细是去重后的唯一对象列表(数量可能小于碰撞对—— + // 同一物体与运动物体在多个帧/多次碰撞时,碰撞对 > 唯一对象) result.ClashDetectiveCollisionCount = testCollisionsRaw.Count; + try + { + var pathDatabase = PathPlanningManager.Instance?.GetPathDatabase(); + var record = pathDatabase?.GetDetectionResultByTestName(targetTestName); + if (record != null && record.CollisionCount > 0) + { + result.ClashDetectiveCollisionCount = record.CollisionCount; + LogManager.Info($"碰撞对总数使用检测记录值: {record.CollisionCount}(重建对象 {testCollisionsRaw.Count} 个)"); + } + } + catch (Exception countEx) + { + LogManager.Warning($"读取检测记录碰撞数失败: {countEx.Message}"); + } + LogManager.Debug($"测试 '{targetTestName}' 包含 {testCollisionsRaw.Count} 个碰撞"); // 统计被撞物体(缓存中已经是复合对象,不需要再去重)