fix: 报告对话框碰撞数对齐历史表格(碰撞对 vs 唯一对象语义明确)

数字来源分析:
- 历史表格/批处理列表 = 碰撞对总数(ClashDetectiveCollisionCount——副实例
  Clash 确认的碰撞事件数,同一物体多帧/多次碰撞计多对)
- 报告对话框原显示 = 重建对象明细数(去重后的唯一对象列表——
  每对象一条明细,数量 < 碰撞对)

修复:CollectAllCollisionData 优先使用检测记录 CollisionCount
(与历史表格一致);报告对话框两个数字语义明确:
- 总碰撞数 = 碰撞对(7/23)
- 碰撞构件 = 唯一对象(5/8)
This commit is contained in:
tian 2026-08-06 23:38:39 +08:00
parent 4ced5eb77b
commit 1700eeaa52

View File

@ -711,7 +711,25 @@ namespace NavisworksTransport.Commands
allCollisions.AddRange(testCollisionsRaw); allCollisions.AddRange(testCollisionsRaw);
// 统计碰撞总数 // 统计碰撞总数
// 🔥 优先使用检测记录的 CollisionCount碰撞对总数与历史表格一致
// DB 重建的对象明细是去重后的唯一对象列表(数量可能小于碰撞对——
// 同一物体与运动物体在多个帧/多次碰撞时,碰撞对 > 唯一对象)
result.ClashDetectiveCollisionCount = testCollisionsRaw.Count; 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} 个碰撞"); LogManager.Debug($"测试 '{targetTestName}' 包含 {testCollisionsRaw.Count} 个碰撞");
// 统计被撞物体(缓存中已经是复合对象,不需要再去重) // 统计被撞物体(缓存中已经是复合对象,不需要再去重)