Игра, над которой я работал, включает в себя редактор карт. Это боевой симулятор, установленный в 18-19 веке, поэтому Э.Г. Ватерлоо, последний бой Кастера, Исандлвана.
Помимо других функций, пользователь может рисовать области или линии в форме линий. Е.Г. Леса или дороги.
Это довольно сложный процесс, поэтому это обязательно обзор.
Я использую InkCanvas для рисования кривых, потому что чернила очень хорошо сглаживают маленькие колебания при рисовании. И, конечно же, у этого есть курсор пера.
Затем я перевожу удар пользователя, который он нарисовал. Я прорабатываю все точки в нем, строю геометрию.
Это оформлено в пользовательский интерфейс с использованием шаблонов данных. У меня есть Canvas, так как панель элементов элемента управления контентом хранит все это.
Есть также здания и места, которые вы просто щелкаете где-то, чтобы разместить. Есть несколько шаблонов для зданий.
Каждая нарисованная или добавленная вещь является моделью представления, которая входит в наблюдаемую коллекцию, связанную с источником элементов этого элемента управления. Вы можете связать panel.zindex, но по умолчанию порядок их добавления определяет zindex.
Нет явной системы слоев, по которой вы можете сгруппировать их, но вы могли бы довольно легко представить виртуальную, добавив свойство слоя в вашу модель представления.
Я также привязал отфильтрованную версию этого к списку, чтобы пользователь мог манипулировать атрибутами каждого ландшафта. Ваша версия может включать такие вещи, как преобразование, чтобы сделать вещи больше.
Я не реализовал их перетаскивание, но у меня есть аналогичные настройки для юнитов в редакторе сценариев. Вы можете перетащить юниты вокруг, чтобы расположить их. У них есть свойства X и Y, которые я связываю с canvastele шаблона itemtemplate и canvas.top. Пользователь может вращать юниты с помощью колесика мыши. У меня есть связанная команда делает это.