From 999fffcaa7cf738d6cd0b5c157438186d0438854 Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Tue, 9 Jun 2026 10:06:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=B4=B4=E5=90=88=E5=9C=B0=E9=9D=A2?= =?UTF-8?q?=EF=BC=9A=E6=81=A2=E5=A4=8Dgit=E7=89=88=E6=9C=AC=E6=97=8B?= =?UTF-8?q?=E8=BD=AC=E9=80=BB=E8=BE=91=20+=20=E5=BA=95=E8=BE=B9=E8=B4=B4?= =?UTF-8?q?=E5=9C=B0=E9=AB=98=E5=BA=A6=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-and-deploy.bat | 4 ++++ .../ViewModels/AnimationControlViewModel.cs | 18 ++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 build-and-deploy.bat diff --git a/build-and-deploy.bat b/build-and-deploy.bat new file mode 100644 index 0000000..7dcced8 --- /dev/null +++ b/build-and-deploy.bat @@ -0,0 +1,4 @@ +@echo off +call "%~dp0compile.bat" +if %ERRORLEVEL% NEQ 0 exit /b 1 +call "%~dp0deploy-plugin.bat" diff --git a/src/UI/WPF/ViewModels/AnimationControlViewModel.cs b/src/UI/WPF/ViewModels/AnimationControlViewModel.cs index e0d5a27..0dcdd47 100644 --- a/src/UI/WPF/ViewModels/AnimationControlViewModel.cs +++ b/src/UI/WPF/ViewModels/AnimationControlViewModel.cs @@ -2265,8 +2265,7 @@ namespace NavisworksTransport.UI.WPF.ViewModels if (d > 0.9999f) overrideQ = Quaternion.Identity; else if (d < -0.9999f) overrideQ = Quaternion.CreateFromAxisAngle(Vector3.UnitX, (float)Math.PI); else overrideQ = Quaternion.CreateFromAxisAngle(Vector3.Normalize(Vector3.Cross(cadWorldN, t)), (float)Math.Acos(d)); - - // 直接施压 OverridePermanentTransform,不走 ApplyRotationCorrectionInPlace + // 旋转(git 版本逻辑,已验证正确) var center = item.BoundingBox().Center; var tp = new Vector3((float)center.X, (float)center.Y, (float)center.Z); var rtp = Vector3.Transform(tp, overrideQ); @@ -2275,6 +2274,21 @@ namespace NavisworksTransport.UI.WPF.ViewModels id.Translation = new Vector3D(center.X - rtp.X, center.Y - rtp.Y, center.Z - rtp.Z); doc.Models.OverridePermanentTransform(modelItems, id.Combine(), true); + // 旋转后再平移:旋转后边界盒最低点贴地 + var hst = CoordinateSystemManager.Instance.ResolvedType; + var newBounds = item.BoundingBox(); + var newCenter = newBounds.Center; + var ps = CurrentPathRoute?.Points?[0]; + double objectBottom = hst == CoordinateSystemType.YUp ? newBounds.Min.Y : newBounds.Min.Z; + double groundLevel = hst == CoordinateSystemType.YUp ? ps.Y : ps.Z; + var delta = new Vector3D( + ps.X - newCenter.X, + hst == CoordinateSystemType.YUp ? groundLevel - objectBottom : ps.Y - newCenter.Y, + hst == CoordinateSystemType.YUp ? ps.Z - newCenter.Z : groundLevel - objectBottom); + doc.Models.OverridePermanentTransform(modelItems, Transform3D.CreateTranslation(delta), false); + + resultCorrection = ObjectPassageProjectionOptimizer.CanonicalQuaternionToHostEulerCorrection(overrideQ); + LogManager.Info($"[贴合地面] raw=({_pendingAlignToGroundNormal.X:F4},{_pendingAlignToGroundNormal.Y:F4},{_pendingAlignToGroundNormal.Z:F4}) cadWorldN=({cadWorldN.X:F4},{cadWorldN.Y:F4},{cadWorldN.Z:F4}) t=({t.X:F4},{t.Y:F4},{t.Z:F4}) overrideQ=({overrideQ.X:F4},{overrideQ.Y:F4},{overrideQ.Z:F4},{overrideQ.W:F4})"); } _pathAnimationManager?.SetObjectRotationCorrectionDirect(resultCorrection);