1

我用这个 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为 a 内的孩子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属性

4

2 回答 2

0

它适用于

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

感谢 iTateSLC(从这里)的解决方案:D

于 2013-03-26T00:39:37.950 回答
0

5你在你的构造函数中传入的是MSDN也说AxisAngleRotation3D的“角度” 。因此,您应该能够从 Rotation 中检索它:

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

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

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

于 2013-03-25T23:52:26.060 回答