我使用这个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
属性
答案 0 :(得分:0)
您在5
的构造函数中传入的AxisAngleRotation3D
是MSDN之类的“角度”。因此,您应该能够从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