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())

それは言いますが、 MSDNSystem.Windows.Media.Media3D.AxisAngleRotation3Dが言うように、「。Rotation」はRotation3Dオブジェクトを生成するはずです。

どうやってやるの?

編集:その他の情報

私のコードでは、これ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

5コンストラクターに渡すのは、MSDN言うAxisAngleRotation3Dように「角度」です。したがって、ローテーションから次のように取得できるはずです。

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

System.Windows.Media.Media3D.AxisAngleRotation3Dから継承するRotation3Dため、Rotation3Dです。

編集:キャストが必要になることを見逃しました。その理由は、RotateTransform3Dクラスがローテーションを-の基本クラスとして定義しているためです。これにはプロパティAxisAngleRotation3Dがありません。Angle実際のを使用して作成したことがわかっているのでAxisAngleRotation3D、1つにキャストできます。

于 2013-03-25T23:52:26.060 に答える
0

それはで動作します

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

ソリューションを提供してくれたiTateSLC(ここから)に感謝します:D

于 2013-03-26T00:39:37.950 に答える