4

ドラッグ長方形を使用して形状の複数選択を実装したいと思います。私はそのようなキャンバス上に多くの形状を持っています: ここに画像の説明を入力

これらの形状は、対応するモデル (MVVM) にバインドされます。私の選択長方形は次のようになります: ここに画像の説明を入力

選択長方形 (マウスアップ イベント) の描画が終了したら、次のコードを実行します。

var itemToSelect = ViewModel.ItemsInCanvas.Where((item) =>
{
    // TODO : test each types of shapes to know if the selection rectangle intersects with it
}).ToList();

形状のさまざまな種類のオブジェクト モデルがあります。

  • 四角形 : 4 つの点のそれぞれの座標を (コードで) 取得できます。
  • 三角形 : 3 つの点のそれぞれの座標を (コードで) 取得できます。
  • 曲線: パス データを (文字列として) 取得できます。
  • The ligne : 2 つの点を取得できます (正弦波は同じオブジェクトです)
  • 円 : 高さと幅を取得できます。

各形状の上部と左側も取得できます。

これらの形状はすべて、私のメイン ビュー モデルのリストに格納されています: ItemsInCanvas

上記のコードを入力すると、各要素をテストして、それらが選択長方形 (座標を知っている) と交差するかどうかを確認したいと思います。

私の最初の試みは(曲線アイテムのみ):

var itemToSelect = ViewModel.ItemsInCanvas.Where((item) =>
{
    if (item is CurveItem)
    {
        // I got my Curve Item
        CurveItem curveItem = (item as CurveItem);
        // I got the selection rectangle
        RectangleGeometry SelectionRectangleGeometry = new RectangleGeometry(SelectionRectangle);
        // Is the rectangle intersecting the shape ?
        if (SelectionRectangleGeometry.FillContainsWithDetail(Geometry.Parse(curveItem.Data)) == IntersectionDetail.Intersects)
            return true;
    }
}).ToList();

しかし、それは機能しません。テストは常に同じものを返します: Intersects.

テストでは、各形状の位置が考慮されていないと思います (相対的ではなく、絶対的である場合のように)。

テストを行う方法を知っていますか?

4

1 に答える 1