リセット規模のGDI+変換マトリクス
質問
書い機能を描くUIを扱う(回転、サイズの変更など)は私のインターネットで提供され、Windows Formsアプリ。この機能を要求されたときに呼び出されるオブジェクトを選択します。
呼び出し側に送ってグラフィックスオブジェクトを適切に回転させれば、スケーリングおよび翻訳への大きなスキームのもの(これにより、選択されたオブジェクトは、独自の回転/翻訳/スケールとUIに対応して相対的な翻訳と回転れました。r.tの選択したオブジェクト今の気持ちを抱いて欲しいと思いUIを扱うのと同じサイズの規模にかかわらず親会社の選択したオブジェクト
いの除去をリセット型に変換マトリクス?したいリセットスケールの1つの貴重な翻訳と回転。
解決
反粒幾何学 使の基本的な方法を決めるためのスケーリング変換の実施につagg_trans_affine.cpp).することにより:
- 計算の回転変換
- 複製への変換、反転
- 変えられるポイント計算の結果から
翻訳スレッドセーフで、C#、この次のように記述されています。
Matrix transform = (Matrix)graphics.Transform.Clone();
PointF[] rotationPoints = new PointF[] { new PointF(0, 0), new PointF(1, 0) };
transform.TransformPoints(rotationPoints);
double rotationRadians = Math.Atan2(rotationPoints[1].Y - rotationPoints[0].Y, rotationPoints[1].X - rotationPoints[0].X);
transform.Rotate((float)(-rotationRadians * (180.0 / Math.PI)));
PointF[] scalePoints = new PointF[] { new PointF(0, 0), new PointF(1, 1) };
transform.TransformPoints(scalePoints);
float xScale = scalePoints[1].X - scalePoints[0].X;
float yScale = scalePoints[1].Y - scalePoints[0].Y;
のAGGコードが含まれて警告が退化する場合が正しく動作しませんかに使用できる可能性がありのまま利用可能です。
他のヒント
あなたは変換の順序が重要であることを認識する必要があります。したがって、単にスケールを除去して次の変換(例えば、オフセット)の「意味」を変更してもよい。
たぶん、ちょうど(のはこのcurrentscale
呼びます)これまでに適用されるスケールの記録を保持し、あなたのtranformationsに1/currentscale
のスケールを追加します。
所属していません StackOverflow