2
我正在製作一個程序,其中我試圖在ModelVisual3D上實現幾個轉換。我對TranslateTransform3D沒有問題,但是當我嘗試旋轉一個對象(ModelVisual3D)時,它的CenterX,CenterY和CenterZ座標將會變爲0,0,0。我不知道如何記住對象的最後一個位置,當我旋轉它時,對象停留在我翻譯它的地方。我實現了旋轉對象的是,當LeftMouseButton被雙擊,但旋轉只執行once.Here是代碼的和平,這對應於RotateTransform:RotateTransform3D出現問題
MyViewport.MouseMove += (sender, e) =>
{
if (modelHit != null && e.LeftButton == MouseButtonState.Pressed)
{
Point endPosition = e.GetPosition(gridDesigner);
Vector3D vector3D = GetTranslationVector3D(modelHit, startPosition, endPosition);
Matrix3D matrix3D = modelHit.Transform.Value;
vector3D += new Vector3D(matrix3D.OffsetX, matrix3D.OffsetY, matrix3D.OffsetZ);
matrix3D.OffsetX = vector3D.X;
matrix3D.OffsetY = 0.2f;
matrix3D.OffsetZ = vector3D.Z;
modelHit.Transform = new MatrixTransform3D(matrix3D);
startPosition = endPosition;
MyViewport.MouseLeftButtonDown += (Sender, m) =>
{
if (modelHit != null && m.LeftButton == MouseButtonState.Pressed)
{
RotateTransform3D rotateTransform = new RotateTransform3D();
AxisAngleRotation3D axisAngleRotation=new AxisAngleRotation3D();
Matrix3D modelHitCoordinates = modelHit.Transform.Value;
rotateTransform.CenterX = modelHitCoordinates.OffsetX;
rotateTransform.CenterY = 0.1;
rotateTransform.CenterZ = modelHitCoordinates.OffsetZ;
axisAngleRotation.Axis = new Vector3D(0, 1, 0);
axisAngleRotation.Angle = 0;
rotateTransform.Rotation = axisAngleRotation;
if (m.ClickCount == 2)
{
axisAngleRotation.Angle += 45;
modelHit.Transform = rotateTransform;
}
}
};
}
};
純粹,簡單的旋轉始終圍繞原點(0,0,0)。如果你想圍繞它的「中心」旋轉一些對象(假設你知道中心的位置),你必須對它進行轉換,使得centr與系統的原點一致,然後旋轉,然後將其翻譯回來。 – heltonbiker 2014-10-27 13:48:20
@heltonbiker編號轉換方法確實允許您指定一個旋轉中心,因此它可以完成您在內部描述的轉換(如果使用了正確的類型,請參見下文)。 – roadrunner66 2015-03-17 15:51:19