纠正安全间隙多次转换的bug;更新运动和指定对象标识为PathId以确保唯一性

This commit is contained in:
tian 2026-02-03 21:57:55 +08:00
parent 4d28ec5547
commit 971c993bb7

View File

@ -1036,14 +1036,14 @@ namespace NavisworksTransport.Core.Animation
// 使用包围盒距离检测方法
double distance = BoundingBoxGeometryUtils.CalculateDistance(virtualBoundingBox, colliderBox);
var safetyMarginInModelUnits = UnitsConverter.ConvertFromMeters(_safetyMargin);
bool intersects = distance <= safetyMarginInModelUnits;
// _safetyMargin 已经是模型单位在CreateAnimation中已转换直接使用
bool intersects = distance <= _safetyMargin;
if (intersects)
{
// LogManager.Debug($"帧 {i} 检测到碰撞: {_animatedObject.DisplayName} <-> {collider.DisplayName}, 距离: {distance:F4},阈值: {safetyMarginInModelUnits:F4}");
// LogManager.Debug($"移动物体位置: {framePosition.X:F2},{framePosition.Y:F2},{framePosition.Z:F2}");
// LogManager.Debug($"被撞物体位置:{GetObjectPosition(collider).X:F2},{GetObjectPosition(collider).Y:F2},{GetObjectPosition(collider).Z:F2}");
LogManager.Debug($"帧 {i} 检测到碰撞: {_animatedObject.DisplayName} <-> {collider.DisplayName}, 距离: {distance:F4},阈值: {_safetyMargin:F4}");
LogManager.Debug($"移动物体位置: {framePosition.X:F2},{framePosition.Y:F2},{framePosition.Z:F2}");
LogManager.Debug($"被撞物体位置:{GetObjectPosition(collider).X:F2},{GetObjectPosition(collider).Y:F2},{GetObjectPosition(collider).Z:F2}");
var collisionResult = new CollisionResult
{
@ -1234,7 +1234,7 @@ namespace NavisworksTransport.Core.Animation
}
// 每一帧都打印当前朝向
LogManager.Debug($"帧[{frameIndex}] 圆弧段[{currentEdgeIndex}]: 进度={edgeProgress:F4}, 当前朝向={currentYaw * 180.0 / Math.PI:F2}度");
// LogManager.Debug($"帧[{frameIndex}] 圆弧段[{currentEdgeIndex}]: 进度={edgeProgress:F4}, 当前朝向={currentYaw * 180.0 / Math.PI:F2}度");
return currentYaw;
}
@ -2972,8 +2972,23 @@ namespace NavisworksTransport.Core.Animation
{
var sb = new StringBuilder();
// 包含对象名称
sb.Append(animatedObject?.DisplayName ?? "null");
// 包含对象的唯一标识使用PathId而不是DisplayName
if (animatedObject != null)
{
try
{
var pathId = Autodesk.Navisworks.Api.Application.ActiveDocument.Models.CreatePathId(animatedObject);
sb.Append($"{pathId.ModelIndex}:{pathId.PathId}");
}
catch
{
sb.Append(animatedObject.DisplayName ?? "null");
}
}
else
{
sb.Append("null");
}
sb.Append("|");
// 包含路径ID区分不同的路径
@ -2997,6 +3012,7 @@ namespace NavisworksTransport.Core.Animation
sb.Append("|");
// 包含手工检测对象列表(确保手工指定模式的目标变化时重新检测)
// 使用PathId作为唯一标识而不是DisplayName
if (_manualCollisionOverrideEnabled && _manualCollisionTargets != null && _manualCollisionTargets.Count > 0)
{
sb.Append("ManualTargets:");
@ -3004,7 +3020,8 @@ namespace NavisworksTransport.Core.Animation
{
try
{
sb.Append(target.DisplayName);
var targetPathId = Autodesk.Navisworks.Api.Application.ActiveDocument.Models.CreatePathId(target);
sb.Append($"{targetPathId.ModelIndex}:{targetPathId.PathId}");
sb.Append(",");
}
catch (Exception)