From 971c993bb70b090af71da7465ef9f0c7f25cdc07 Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Tue, 3 Feb 2026 21:57:55 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BA=A0=E6=AD=A3=E5=AE=89=E5=85=A8=E9=97=B4?= =?UTF-8?q?=E9=9A=99=E5=A4=9A=E6=AC=A1=E8=BD=AC=E6=8D=A2=E7=9A=84bug?= =?UTF-8?q?=EF=BC=9B=E6=9B=B4=E6=96=B0=E8=BF=90=E5=8A=A8=E5=92=8C=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E5=AF=B9=E8=B1=A1=E6=A0=87=E8=AF=86=E4=B8=BAPathId?= =?UTF-8?q?=E4=BB=A5=E7=A1=AE=E4=BF=9D=E5=94=AF=E4=B8=80=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Core/Animation/PathAnimationManager.cs | 35 ++++++++++++++++------ 1 file changed, 26 insertions(+), 9 deletions(-) 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)