Unify real-object override rotation application

This commit is contained in:
tian 2026-04-02 00:19:36 +08:00
parent 7ff510daf0
commit 9e8fea3241
2 changed files with 18 additions and 6 deletions

View File

@ -141,5 +141,12 @@ namespace NavisworksTransport.UnitTests.CoordinateSystem
Assert.AreEqual(trackedRotation.C, resolved.C, 1e-9); Assert.AreEqual(trackedRotation.C, resolved.C, 1e-9);
Assert.AreEqual(trackedRotation.D, resolved.D, 1e-9); Assert.AreEqual(trackedRotation.D, resolved.D, 1e-9);
} }
[TestMethod]
public void ShouldUseRealObjectOverrideRotation_ShouldEnableForRealObjects()
{
Assert.IsTrue(PathAnimationManager.ShouldUseRealObjectOverrideRotation(true));
Assert.IsFalse(PathAnimationManager.ShouldUseRealObjectOverrideRotation(false));
}
} }
} }

View File

@ -2748,7 +2748,7 @@ namespace NavisworksTransport.Core.Animation
try try
{ {
ModelItem controlledObject = CurrentControlledObject; ModelItem controlledObject = CurrentControlledObject;
bool isRailRealObject = _route?.PathType == PathType.Rail && IsRealObjectMode && controlledObject != null; bool usesRealObjectOverrideRotation = ShouldUseRealObjectOverrideRotation(IsRealObjectMode) && controlledObject != null;
if (controlledObject == null) if (controlledObject == null)
{ {
return; return;
@ -2841,7 +2841,7 @@ namespace NavisworksTransport.Core.Animation
} }
currentRotationForTransform = currentRotation; currentRotationForTransform = currentRotation;
if (isRailRealObject) if (usesRealObjectOverrideRotation)
{ {
if (ModelItemTransformHelper.TryGetCurrentOverrideRotation(controlledObject, out var currentOverrideRotation)) if (ModelItemTransformHelper.TryGetCurrentOverrideRotation(controlledObject, out var currentOverrideRotation))
{ {
@ -2896,11 +2896,11 @@ namespace NavisworksTransport.Core.Animation
$"Y=({targetLinear.Get(0, 1):F4},{targetLinear.Get(1, 1):F4},{targetLinear.Get(2, 1):F4}), " + $"Y=({targetLinear.Get(0, 1):F4},{targetLinear.Get(1, 1):F4},{targetLinear.Get(2, 1):F4}), " +
$"Z=({targetLinear.Get(0, 2):F4},{targetLinear.Get(1, 2):F4},{targetLinear.Get(2, 2):F4})"); $"Z=({targetLinear.Get(0, 2):F4},{targetLinear.Get(1, 2):F4},{targetLinear.Get(2, 2):F4})");
if (isRailRealObject) if (usesRealObjectOverrideRotation)
{ {
var overrideLinear = new Transform3D(targetRotationForTransform).Linear; var overrideLinear = new Transform3D(targetRotationForTransform).Linear;
LogManager.Debug( LogManager.Debug(
$"[Rail覆盖姿态] {controlledObject.DisplayName} Override目标: " + $"[真实物体覆盖姿态] {controlledObject.DisplayName} Override目标: " +
$"X=({overrideLinear.Get(0, 0):F4},{overrideLinear.Get(1, 0):F4},{overrideLinear.Get(2, 0):F4}), " + $"X=({overrideLinear.Get(0, 0):F4},{overrideLinear.Get(1, 0):F4},{overrideLinear.Get(2, 0):F4}), " +
$"Y=({overrideLinear.Get(0, 1):F4},{overrideLinear.Get(1, 1):F4},{overrideLinear.Get(2, 1):F4}), " + $"Y=({overrideLinear.Get(0, 1):F4},{overrideLinear.Get(1, 1):F4},{overrideLinear.Get(2, 1):F4}), " +
$"Z=({overrideLinear.Get(0, 2):F4},{overrideLinear.Get(1, 2):F4},{overrideLinear.Get(2, 2):F4})"); $"Z=({overrideLinear.Get(0, 2):F4},{overrideLinear.Get(1, 2):F4},{overrideLinear.Get(2, 2):F4})");
@ -2918,11 +2918,11 @@ namespace NavisworksTransport.Core.Animation
_hasTrackedRotation = true; _hasTrackedRotation = true;
_currentYaw = ModelItemTransformHelper.GetYawFromRotation(appliedTargetRotation); _currentYaw = ModelItemTransformHelper.GetYawFromRotation(appliedTargetRotation);
if (isRailRealObject) if (usesRealObjectOverrideRotation)
{ {
Point3D hostActualAfter = GetTrackedObjectPosition(controlledObject); Point3D hostActualAfter = GetTrackedObjectPosition(controlledObject);
LogManager.Debug( LogManager.Debug(
$"[Rail姿态应用] 宿主最终跟踪中心=({hostActualAfter.X:F3},{hostActualAfter.Y:F3},{hostActualAfter.Z:F3}), " + $"[真实物体姿态应用] 宿主最终跟踪中心=({hostActualAfter.X:F3},{hostActualAfter.Y:F3},{hostActualAfter.Z:F3}), " +
$"目标跟踪中心=({newPosition.X:F3},{newPosition.Y:F3},{newPosition.Z:F3}), " + $"目标跟踪中心=({newPosition.X:F3},{newPosition.Y:F3},{newPosition.Z:F3}), " +
$"偏差=({hostActualAfter.X - newPosition.X:F3},{hostActualAfter.Y - newPosition.Y:F3},{hostActualAfter.Z - newPosition.Z:F3})"); $"偏差=({hostActualAfter.X - newPosition.X:F3},{hostActualAfter.Y - newPosition.Y:F3},{hostActualAfter.Z - newPosition.Z:F3})");
} }
@ -4036,6 +4036,11 @@ namespace NavisworksTransport.Core.Animation
return transformRotation; return transformRotation;
} }
internal static bool ShouldUseRealObjectOverrideRotation(bool isRealObjectMode)
{
return isRealObjectMode;
}
private void SyncTrackedRotationToDisplayedPose(ModelItem sourceObject) private void SyncTrackedRotationToDisplayedPose(ModelItem sourceObject)
{ {
if (sourceObject == null) if (sourceObject == null)