2013-03-06 4 views
1

У меня здесь довольно большая проблема. Я использую MVVM в своем приложении для рисования (Caliburn.Micro), и я не могу найти разумный способ сделать его рисованием фигур с предварительным просмотром в реальном времени.Лучший способ обновить значения фигур в WPF

Чертежный холст состоит из холста, который получает входные данные и подает данные в модель, и сетку, содержащую множество холстов, по одному для каждого слоя. Модель генерирует события (я буду использовать линии в качестве примера):

  1. События для создания линии - это создает простой объект строки со свойствами для начальной точки, конечной точки, цвета, толщины и автоматически сгенерированного ID. Событие имеет линию и слой, в который она была добавлена.
  2. На мыши перемещается конечная точка объекта линии, созданная в 1. обновляется, и новое событие запускается с обновленной формой и ее слоем в качестве параметра.
  3. На мыши вверх 2. также бывает.

Теперь в ViewModel, который регистрирует эти события, я просто добавить, чтобы исправить холст эквивалентной формы WPF (в данном случае System.Windows.Shapes.Line) и установить параметры при добавлении формы. Но я не могу прийти ни к какому идее, которое было бы надежно обновлять параметры формы при перемещении мыши, чтобы показать предварительный просмотр вытянутой фигуры в реальном времени.

Я пробовал использовать свойства зависимостей, но он не работал и, казалось, был излишним (из-за количества фигур, которые будут на всех этих холстах). Я также пытался расширить линию, но это невозможно, потому что класс запечатан. Мне также необходимо взаимодействовать с фигурами, которые нарисованы (например, изменение размера, вращение).

ответ

1

Я бы заглянул в writebitmap и расширения WriteableBitmapEx. Это будет иметь довольно хорошую производительность, в зависимости от того, сколько вещей вы должны сделать. Если вам нужно иметь 1000 предметов на экране сразу, вам может понадобиться изучить DirectX с помощью обертки, такой как SlimDx или SharpDx.

+0

Эта библиотека выглядит очень красиво. Я полагаю, что перемещение/поворот/изменение размера фигур будет чем-то, что мне нужно реализовать, как в Java2D? –

+0

Существует ветка, которая изменяет размер и поворачивает методы. Я никогда их не использовал, но стоит посмотреть. – mdm20

+0

После некоторого тестирования я могу сказать: это безумно быстро по сравнению с чистым WPF, и это очень просто. Я нашел поворот и изменение размера для всего изображения, но это не большая проблема, чтобы реализовать его по фигуре. Большое спасибо за намек на эту библиотеку, это очень помогло! –

0

Итак, вам в основном нужны две строки, одна из которых выглядит как раньше, и одна, которая выглядит так, как это будет выглядеть, когда пользователь «совершает» свои изменения? У вас может быть класс контейнера, который содержит два одинаковых типа фигуры и перемещает второй, когда пользователь находится в режиме редактирования. Когда пользователь выходит из режима редактирования, вы можете либо сохранить первый (пользователь отменен), либо сделать вторую новую, одну и только первую форму.

+0

Мне нужна только одна строка, начальная точка которой будет установлена ​​на мышь вниз, а конечная точка будет перемещаться курсором до тех пор, пока я не отпущу кнопку. Поэтому мне нужен хороший способ обновить свойство, которое удерживало конечную точку линии в графическом интерфейсе из моего класса модели. –

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