2017-01-25 2 views
2

Я использовал System.Windows.Shapes перед тем, как добавить Shapes в Canvas -controls. Они могут использоваться как объекты, а визуальные изменения изменяются при редактировании полей. Я также могу добавить обработчики событий для кликов и т. Д.Рисование и выбор фигур с помощью Win2D?

Мне нужна такая функциональность, используя Win2D. Есть ли простой способ?

Я пытаюсь создать простое приложение, как это:

  • Пользователь может рисует фигуры на холст
  • Формы могут быть выбраны и выделены, нажав
  • выбранные фигуры можно манипулировать (цвет , непрозрачность, ширина, высота, положение и т.д.)
  • Формы могут быть наслаивали поверх друг с другом (Z-индекс)

Я предполагаю, что одним из способов было бы создание пользовательских классов Shape с помощью Draw -methods. Я бы тогда манипулировал только объектом, и изменения отразились бы на визуальных эффектах по методу Draw. При каждом аннулировании холста объекты будут снова нарисованы.

Любые идеи?

+0

Кажется, я мог использовать 'CanvasTextLayout.LayoutBounds' или' CanvasGeometry.ComputeBounds', чтобы получить внешние границы некоторых рисованных объектов. Использование его в качестве зоны с кликом может быть первым шагом, но это не так точно. Он выбирает линейный круг при нажатии в пустой середине - не только при нажатии на строку. Пользователь может выбирать между этими режимами, тo. – W0lfw00ds

ответ

1

Win2D может помочь вам с ударом-тестированием. С геометриями, которые имеют цвет заливки, затем используйте CanvasGeometry.FillContainsPoint(...) и для геометрий, которые имеют только контур/ход, используйте CanvasGeometry.StrokeContainsPoint(...). Используя эти два метода, вы получите точный хит-тест. Использование границ неточно для непрямоугольных форм, включая повернутые прямоугольники.

Для z-индексации вам необходимо отслеживать порядок ваших геометрий и просматривать список сверху до тех пор, пока PointerPoint не ударит.

Если ваш список геометрий слишком велик, и вы заметили задержку, вы можете начать тестирование с использованием границ сначала, и если он не сработает, перейдите к следующему элементу, если он попадает, затем используйте приведенные выше методы, чтобы получить точное считывание.

Смежные вопросы