Как мне смоделировать пользовательский интерфейс для рисования многоугольника с сенсорными событиями? - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть приложение WPF / C #, которое позволяет пользователю рисовать различные формы на холсте с помощью мыши или касания. Линии, круги, прямоугольники работают просто отлично. Но теперь я должен добавить возможность многоугольника / полилинии. Я не уверен, что лучший подход к этому. Я надеюсь, что кто-то здесь имеет некоторый опыт в этом и может сказать мне, что работает хорошо, а что нет.

До сих пор в моем приложении процесс рисования каждого типа фигуры был одинаковым.

  • Пользователь щелкает левой кнопкой мыши или касается холста с активным «инструментом» фигуры: запускается новая фигура.
  • Когда пользователь перемещает мышь, удерживая кнопку или палец вниз, я соответствующим образом изменяю размер новой фигуры
  • Когда пользователь отпускает мышь или поднимает палец, новая форма завершается.

Это было просто реализовать; Для мыши я отслеживаю MouseLeftButtonDown, MouseMove и MouseLeftButton вверх. Для прикосновения я отслеживаю ManipulationStarting, ManipulationStarted, ManipulationDelta и ManipulationCompleted.

Но Полилиния / Полигон меняет вещи. В случае мыши, рисование новой фигуры должно продолжаться даже после того, как пользователь отпускает левую кнопку мыши. Чтобы закончить, он / она должен щелкнуть правой кнопкой мыши в любом месте холста (или щелкнуть левой кнопкой мыши точно по исходному узлу полилинии). Но так как у меня все еще есть событие MouseMove, я могу показать пользователю, где следующий узел окажется в реальном времени.

Кажется, это хорошо согласуется с профессиональными приложениями, которые я использовал. Но при касании, конечно, я не получаю никаких уведомлений, таких как движение мыши, когда палец пользователя не касается поверхности.

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

Есть с трудом завоеванный опыт?

...