refactor: use PathAnimationManager.ApplyQuaternionRotationInPlace
- New method mirrors proven ApplyRotationCorrectionInPlace pattern - ViewModel only calls existing project APIs, no raw OverridePermanentTransform
This commit is contained in:
parent
3634551e53
commit
f75dcb1f50
@ -461,6 +461,32 @@ namespace NavisworksTransport.Core.Animation
|
||||
doc.Models.OverridePermanentTransform(modelItems, comp.Combine(), false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 直接用四元数绕物体包围盒中心旋转(增量模式)。
|
||||
/// 用于贴地面等不需要走 Euler 角度链的场景。
|
||||
/// </summary>
|
||||
public void ApplyQuaternionRotationInPlace(Quaternion rotation)
|
||||
{
|
||||
var item = CurrentControlledObject;
|
||||
if (item == null) return;
|
||||
|
||||
var modelItems = new ModelItemCollection { item };
|
||||
var doc = NavisApplication.ActiveDocument;
|
||||
|
||||
var center = GetLiveBoundingBoxCenter(item);
|
||||
var tp = new Vector3((float)center.X, (float)center.Y, (float)center.Z);
|
||||
var rotatedTp = Vector3.Transform(tp, rotation);
|
||||
|
||||
var identity = Transform3D.CreateTranslation(new Vector3D(0, 0, 0));
|
||||
var comp = identity.Factor();
|
||||
comp.Rotation = new Rotation3D(rotation.X, rotation.Y, rotation.Z, rotation.W);
|
||||
comp.Translation = new Vector3D(
|
||||
center.X - rotatedTp.X,
|
||||
center.Y - rotatedTp.Y,
|
||||
center.Z - rotatedTp.Z);
|
||||
doc.Models.OverridePermanentTransform(modelItems, comp.Combine(), false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将当前显示姿态同步为跟踪状态(yaw=0 对应对齐 X 轴)。
|
||||
/// 用于自动调整确认前,替代 RestoreObjectToCADPosition 的复位→设置链路。
|
||||
|
||||
@ -2316,20 +2316,8 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
rotation = Quaternion.CreateFromAxisAngle(axis, angle);
|
||||
}
|
||||
|
||||
// 绕物体中心增量旋转
|
||||
var modelItem = _pathAnimationManager.AnimatedObject;
|
||||
var modelItems = new ModelItemCollection { modelItem };
|
||||
var center = modelItem.BoundingBox().Center;
|
||||
var toOrigin = Autodesk.Navisworks.Api.Transform3D.CreateTranslation(
|
||||
new Vector3D(-center.X, -center.Y, -center.Z));
|
||||
var rotate = new Autodesk.Navisworks.Api.Transform3D(
|
||||
new Rotation3D(rotation.X, rotation.Y, rotation.Z, rotation.W));
|
||||
var fromOrigin = Autodesk.Navisworks.Api.Transform3D.CreateTranslation(
|
||||
new Vector3D(center.X, center.Y, center.Z));
|
||||
var combined = Autodesk.Navisworks.Api.Transform3D.Multiply(
|
||||
Autodesk.Navisworks.Api.Transform3D.Multiply(fromOrigin, rotate), toOrigin);
|
||||
doc.Models.OverridePermanentTransform(modelItems, combined, false);
|
||||
|
||||
// 使用项目中已有的四元数旋转方法
|
||||
_pathAnimationManager.ApplyQuaternionRotationInPlace(rotation);
|
||||
_pathAnimationManager.SyncTrackedStateToCurrentDisplayPose();
|
||||
UpdatePassageSpaceVisualization();
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user