From be9131b89fa3a00ae042f9f3fa7e1eb0d71b296b Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Mon, 19 Jan 2026 23:13:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=89=A9=E4=BD=93=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E9=80=BB=E8=BE=91=EF=BC=8C=E5=A2=9E=E5=8A=A0=E8=A7=92?= =?UTF-8?q?=E5=BA=A6=E4=BF=AE=E6=AD=A3=E5=80=BC=E7=9A=84=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=EF=BC=8C=E7=A1=AE=E4=BF=9D=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E7=9B=B8=E5=90=8C=E7=89=A9=E4=BD=93=E6=97=B6=E4=BF=9D=E6=8C=81?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E8=A7=92=E5=BA=A6=E4=BF=AE=E6=AD=A3=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Core/Animation/PathAnimationManager.cs | 14 ++++++++++++++ .../WPF/ViewModels/AnimationControlViewModel.cs | 15 ++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/Core/Animation/PathAnimationManager.cs b/src/Core/Animation/PathAnimationManager.cs index c3c7310..e5decab 100644 --- a/src/Core/Animation/PathAnimationManager.cs +++ b/src/Core/Animation/PathAnimationManager.cs @@ -2541,6 +2541,16 @@ namespace NavisworksTransport.Core.Animation } } + /// + /// 直接设置物体角度修正值(不触发物体旋转) + /// + /// 角度修正值(度) + public void SetObjectRotationCorrectionDirect(double rotationCorrection) + { + _objectRotationCorrection = rotationCorrection; + LogManager.Debug($"[角度修正] 直接设置角度修正值: {_objectRotationCorrection:F1}°(不触发旋转)"); + } + #region 动画实现方法 @@ -2800,6 +2810,10 @@ namespace NavisworksTransport.Core.Animation sb.Append(vehicleSizeString); sb.Append("|"); + // 包含角度修正(确保角度修正改变时重新检测) + sb.Append($"RotationCorrection:{_objectRotationCorrection:F2}deg"); + sb.Append("|"); + // 包含手工检测对象列表(确保手工指定模式的目标变化时重新检测) if (_manualCollisionOverrideEnabled && _manualCollisionTargets != null && _manualCollisionTargets.Count > 0) { diff --git a/src/UI/WPF/ViewModels/AnimationControlViewModel.cs b/src/UI/WPF/ViewModels/AnimationControlViewModel.cs index e58cde0..cbfcaf1 100644 --- a/src/UI/WPF/ViewModels/AnimationControlViewModel.cs +++ b/src/UI/WPF/ViewModels/AnimationControlViewModel.cs @@ -1326,9 +1326,10 @@ namespace NavisworksTransport.UI.WPF.ViewModels // 1. 保存旧物体引用,在设置新物体之前 var oldObject = _selectedAnimatedObject; + bool isSameObject = oldObject != null && ReferenceEquals(oldObject, newObject); // 2. 如果有旧物体且与新物体不同,先归位 - if (oldObject != null && !ReferenceEquals(oldObject, newObject)) + if (!isSameObject && oldObject != null) { _pathAnimationManager?.RestoreObjectToCADPosition(); LogManager.Info($"[选择物体] 已归位旧物体: {oldObject.DisplayName}"); @@ -1347,8 +1348,16 @@ namespace NavisworksTransport.UI.WPF.ViewModels SelectedAnimatedObject = newObject; LogManager.Info($"已选择移动物体: {SelectedAnimatedObject.DisplayName}"); - // 重置PathAnimationManager的角度修正值(每个物体的旋转独立) - _pathAnimationManager?.SetObjectRotationCorrection(0.0); + // 只有选择不同的物体时,才重置角度修正值 + if (!isSameObject) + { + _pathAnimationManager?.SetObjectRotationCorrectionDirect(0.0); + LogManager.Debug($"[选择物体] 已重置角度修正值为0度(新物体)"); + } + else + { + LogManager.Debug($"[选择物体] 保持当前角度修正值(同一物体)"); + } // 3. 立即移动到起点(如果路径存在) if (CurrentPathRoute != null && CurrentPathRoute.Points != null && _pathAnimationManager != null)