我想使用拖动矩形来实现多个形状的选择。我在这样的画布上有很多形状:
这些形状绑定到相应的模型(MVVM)。我的选择矩形看起来像这样:
当我完成绘制选择矩形(鼠标向上事件),我运行这个代码:
var itemToSelect = ViewModel.ItemsInCanvas.Where((item) =>
{
// TODO : test each types of shapes to know if the selection rectangle intersects with it
}).ToList();
我有不同种类的形状对象模型:
- 四边形:我可以(在代码中)获得四个点中每个点的坐标。
- 三角形:我可以(在代码中)获得三个点中每个点的坐标。
- 曲线:我可以获得路径数据(作为字符串)。
- ligne :我可以得到两个点(正弦是同一个对象)
- 圆圈:我可以得到高度和宽度。
我还可以获得每个形状的顶部和左侧。
所有这些形状都存储在我的主视图模型的列表中: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();
但它不起作用,测试总是返回相同的东西:相交。
我认为测试并没有考虑每个形状的位置(比如它是绝对的,而不是相对的)。
你知道我怎么做测试吗?