diff --git a/src/Core/Animation/PathAnimationManager.cs b/src/Core/Animation/PathAnimationManager.cs index 8a5526c..3116b1b 100644 --- a/src/Core/Animation/PathAnimationManager.cs +++ b/src/Core/Animation/PathAnimationManager.cs @@ -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)