RotateTransform3D出现问题

时间:2014-10-27 13:44:15

标签: c# wpf 3d

我正在编写一个程序,我正在尝试在ModelVisual3D上实现几个转换。我对TranslateTransform3D没有任何问题,但是当我尝试旋转一个对象(ModelVisual3D)时,它的CenterX,CenterY和CenterZ坐标将变为0,0,0。我不知道如何记住对象的最后位置,当我旋转它时,对象留在那里我翻译它。我实现了一个对象的旋转,当双击LeftMouseButton时,旋转只执行一次。这是代码的和平,对应于RotateTransform:

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;

                    }

                }
            };
    }
};

1 个答案:

答案 0 :(得分:0)

查看您正在转型的类型。如果你的类型是" Vector3D"然后Transform方法将忽略旋转中心。我不认为这是正确记录的。

您正在旋转的类型和中心都必须属于#34; Point3D"。

该方法的作者的意图是合法的。空间方向(a" Vector3D")不应该取决于旋转中心,因此旋转中心的额外平移不是必需的。但是,如果在3D空间中旋转位置(" Point3D"),则旋转中心确实很重要。