fix: 贴合地面:恢复git版本旋转逻辑 + 底边贴地高度修正
This commit is contained in:
parent
034acb1d65
commit
999fffcaa7
4
build-and-deploy.bat
Normal file
4
build-and-deploy.bat
Normal file
@ -0,0 +1,4 @@
|
||||
@echo off
|
||||
call "%~dp0compile.bat"
|
||||
if %ERRORLEVEL% NEQ 0 exit /b 1
|
||||
call "%~dp0deploy-plugin.bat"
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user