2

シナリオ

グリッドにいくつかのオブジェクトがあります。それらの操作デルタ イベント内でそれらを変換します。オブジェクトは、ユーザーのポインターの下で動かなくなったように見えます。それは動作し、次のようになります。

ellipse.ManipulationDelta += (s, e) =>
{
    var transform = ellipse.RenderTransform as CompositeTransform;
    transform.TranslateX = e.Cumulative.Translation.X;
    transform.TranslateY = e.Cumulative.Translation.Y;
}

すべての可動オブジェクトには楕円形の境界があり、その外側にオブジェクトをドラッグすることはできません。この値は簡単に計算できます。このようなもの:

ellipse.ManipulationDelta += (s, e) =>
{
    var boundary = new Ellipse { Height = 50, Width = 100 };

    var transform = ellipse.RenderTransform as CompositeTransform;
    transform.TranslateX = e.Cumulative.Translation.X;
    transform.TranslateY = e.Cumulative.Translation.Y;
};

要件

要求されたポイントが楕円境界の外にある場合、要素を変換しないロジックを実装したいと思います。

ここに画像の説明を入力

おそらくこのようなもの:

ellipse.ManipulationDelta += (s, e) =>
{
    var boundary = new Ellipse { Height = 50, Width = 100 };
    var point = DeterminePoint(boundary, e.Cumulative.Translation);

    var transform = ellipse.RenderTransform as CompositeTransform;
    transform.TranslateX = point.X;
    transform.TranslateY = point.Y;
};

Point DeterminePoint(Ellipse boundary, Point target) { /* TODO */ }

ロジックを四角形に制限するコードは簡単に記述できます。ただし、長方形は必須ではなく、楕円が必須です。TODOこの質問の核心は、上記のコードのセクションです。

前もって感謝します。

4

0 に答える 0