Я хотел бы реализовать множественный выбор фигур с помощью прямоугольника перетаскивания. У меня много форм на холсте: WPF mutliselection of forms с использованием прямоугольника перетаскивания
Формы токов связаны с соответствующими моделями (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();
Но он не работает, тест возвращает Аллуэй то же самое: пересекающей.
Я думаю, что тест не заботится о положении каждой фигуры (например, если он был абсолютным, а не относительным).
Знаете ли вы, как я могу выполнить свои тесты?
Спасибо, что это работает, но теперь я должен найти объект модели, связанный с формой. – Ben
Вы можете поместить объект модели в свойство [Тег] (http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.tag.aspx) каждого Shape. – Clemens
Как это сделать, когда я использую Rectangle для рисования выделенной области? Я не могу понять, как рисовать геометрию на холсте. –