添加碰撞检测进度条

This commit is contained in:
tian 2026-01-06 17:10:50 +08:00
parent fd05ffce3c
commit e3958affb7

View File

@ -323,8 +323,14 @@ namespace NavisworksTransport
var mainTestName = $"物流碰撞检测_{pathName}_{DateTime.Now:yyyyMMdd_HHmmss}";
LogManager.Info($"[分组测试] 创建主测试: {mainTestName}");
Progress progress = null;
try
{
// 开始进度条ClashDetective本身会显示进度这里只提供提示信息
progress = Application.BeginProgress(
"碰撞检测数据分析中,请稍候..."
);
// 使用事务确保操作的原子性
using (var transaction = doc.BeginTransaction("创建分组碰撞测试"))
{
@ -362,7 +368,7 @@ namespace NavisworksTransport
// 调试:打印所有去重后的碰撞对信息
LogManager.Debug($"[分组测试] 去重后的碰撞对列表:");
int groupIndex = 0;
int debugIndex = 0;
foreach (var group in groupedCollisions)
{
var firstCollision = group.First();
@ -376,8 +382,8 @@ namespace NavisworksTransport
var item2Hash = item2?.GetHashCode() ?? -1;
var frameCount = group.Count();
LogManager.Debug($" [{groupIndex}] Item1={item1Name}(Hash:{item1Hash}), Item2={item2Name}(Hash:{item2Hash}), 帧数={frameCount}");
groupIndex++;
LogManager.Debug($" [{debugIndex}] Item1={item1Name}(Hash:{item1Hash}), Item2={item2Name}(Hash:{item2Hash}), 帧数={frameCount}");
debugIndex++;
}
var collisionGroup = new ClashResultGroup
@ -391,8 +397,17 @@ namespace NavisworksTransport
int skippedCount = 0;
// 2. 遍历每一组
foreach (var group in groupedCollisions)
for (int groupIndex = 0; groupIndex < groupedCollisions.Count; groupIndex++)
{
// 检查用户是否取消
if (progress.IsCanceled)
{
LogManager.Info($"[分组测试] 用户取消操作,已处理 {groupIndex}/{groupedCollisions.Count} 组");
break;
}
var group = groupedCollisions[groupIndex];
// 3. 排序:按距离/重叠深度排序,优先检测最严重的碰撞
// 注意Distance通常越小或负值越大表示碰撞越深具体取决于计算方式
// 这里假设Distance越小越严重
@ -566,6 +581,14 @@ namespace NavisworksTransport
{
LogManager.Error($"[分组测试] 创建分组测试失败: {groupEx.Message}");
}
finally
{
// 确保关闭进度条
if (progress != null)
{
Application.EndProgress();
}
}
// 关键修复:碰撞测试完成后,将物体恢复到动画终点位置
if (animatedObject != null && IsModelItemValid(animatedObject))