从RotateTransform3D获取数据

时间:2013-03-25 23:21:56

标签: c# wpf rotatetransform

我使用这个C#代码设置我的RotateTransform3D:

rotation = new RotateTransform3D(
    new AxisAngleRotation3D(new Vector3D(0, 0, 1),
    Convert.ToDouble(5)),
    new Point3D(0, 0, 0)
);

我怎么得到“5”回来? 如果我做了

MessageBox.Show(rotation.Rotation.toString())

它表示System.Windows.Media.Media3D.AxisAngleRotation3D,但“.Rotation”应生成一个Rotation3D对象,如MSDN所示。

我该怎么做?

修改:其他信息

在我的代码中,我将RotateTransform3D设置为Transform3DGroup内的子项,并使用此代码:

myGroupArray[0].Children.Add(
    new RotateTransform3D(
        new AxisAngleRotation3D(new Vector3D(0, 0, 1),
        Convert.ToDouble(5)),
        new Point3D(0, 0, 0)
    )
);

在另一个功能中,我尝试用这个恢复我的“5”:

RotateTransform3D rotation = new RotateTransform3D();
rotation = (RotateTransform3D)myGroupArray[0].Children[0];

现在,甚至做

MessageBox.Show(rotation.Rotation.Angle.ToString());

导致错误,因为Rotation3D不包含Angle属性

2 个答案:

答案 0 :(得分:0)

您在5的构造函数中传入的AxisAngleRotation3DMSDN之类的“角度”。因此,您应该能够从Rotation中检索它:

MessageBox.Show((rotation.Rotation as AxisAngleRotation3D).Angle.ToString());

System.Windows.Media.Media3D.AxisAngleRotation3D继承自Rotation3D,因此它是Rotation3D

编辑:我错过了演员表演。原因是RotateTransform3D类将旋转定义为AxisAngleRotation3D的基类 - 它没有Angle属性。由于您知道自己使用实际的AxisAngleRotation3D创建了它,因此可以将其转换为一个。

答案 1 :(得分:0)

适用于

MessageBox.Show((rotation.Rotation as AxisAngleRotation3D).Angle.ToString());

感谢iTateSLC(来自here)的解决方案:D