В этом разделе
Класс
WpfAnnotationView всегда создается на основе класса
AnnotationData и определяет внешний вид аннотации и способ взаимодействия пользователя с аннотацией.
Связь между классами, производными от
AnnotationData и
WpfAnnotationView, регистрируется с помощью метода
WpfAnnotationViewFactory.RegisterViewForAnnotationData.
Как и в случае с классами, производными от класса
AnnotationData, классы, производные от класса
WpfAnnotationView, делятся на 3 типа:
Класс
WpfAnnotationView содержит свойство
WpfAnnotationView.Data, которое позволяет получить ссылку на связанный экземпляр класса
AnnotationData. Также класс
WpfAnnotationView содержит набор свойств, аналогичных свойствам класса
AnnotationData, которые позволяют передавать свойства аннотации через
WpfAnnotationView.
Вот C#/VB.NET код, который демонстрирует, как создать вид для аннотации
EllipseAnnotationData:
public static Vintasoft.Imaging.Annotation.Wpf.UI.WpfAnnotationView CreateViewForEllipseAnnotationData(
Vintasoft.Imaging.Annotation.EllipseAnnotationData ellipseAnnotation)
{
return new Vintasoft.Imaging.Annotation.Wpf.UI.WpfEllipseAnnotationView(ellipseAnnotation);
}
Public Shared Function CreateViewForEllipseAnnotationData(ellipseAnnotation As Vintasoft.Imaging.Annotation.EllipseAnnotationData) As Vintasoft.Imaging.Annotation.Wpf.UI.WpfAnnotationView
Return New Vintasoft.Imaging.Annotation.Wpf.UI.WpfEllipseAnnotationView(ellipseAnnotation)
End Function
Прямоугольники, ограничивающие аннотацию
Вид аннотации имеет несколько типов ограничивающих прямоугольников. Для решения различных задач, связанных с корректным рисованием и взаимодействием с аннотацией, используются следующие типы:
- "Ограничивающий прямоугольник" - определяет прямоугольник, выровненный по осям, который включает в себя аннотацию. Этот прямоугольник определяется только свойствами аннотации WpfAnnotationView.Location, WpfAnnotationView.Size и WpfAnnotationView.Rotation и может использоваться для расчета "Прямоугольника рисования". Для получения прямоугольника необходимо вызвать метод WpfAnnotationView.GetBoundingBox.
- "Ограничивающий прямоугольник автора" - определяет прямоугольник, выровненный по осям, который, в свою очередь, определяет область аннотации при преобразовании аннотации, а также используется для выбора аннотации в просмотрщике изображений с аннотациями. В большинстве случаев "Ограничивающий прямоугольник автора" соответствует области аннотации "Ограничивающий прямоугольник". Для получения прямоугольника необходимо вызвать метод WpfAnnotationView.GetAuthorBoundingBox. Этот метод является виртуальным, поэтому его можно переопределить в классах, производных от класса WpfAnnotationView.
- "Прямоугольник рисования" - определяет прямоугольник, выровненный по осям, который полностью охватывает всю визуальную часть аннотации, но не более того. "Прямоугольник рисования" может быть больше "Ограничивающего прямоугольника" из-за дополнительных визуальных элементов аннотации, таких как тень аннотации, подпись с значением длины аннотации, сглаживание интерполированных линий и т. д.
Рендеринг аннотаций в контексте рисования
Класс
WpfAnnotationView предоставляет метод
WpfAnnotationView.Render, который позволяет рендерить аннотации на указанном объекте System.Windows.Media.DrawingContext.
Вот C#/VB.NET код, который демонстрирует, как отрендерить указанную аннотацию на указанном изображении:
public static void DrawAnnotationOnImage(
Vintasoft.Imaging.Annotation.Wpf.UI.WpfAnnotationViewCollection annotations,
Vintasoft.Imaging.VintasoftImage image)
{
annotations.Draw(image, (Vintasoft.Imaging.VintasoftImage)image.Clone());
}
Public Shared Sub DrawAnnotationOnImage(annotations As Vintasoft.Imaging.Annotation.Wpf.UI.WpfAnnotationViewCollection, image As Vintasoft.Imaging.VintasoftImage)
annotations.Draw(image, DirectCast(image.Clone(), Vintasoft.Imaging.VintasoftImage))
End Sub
Выделение аннотации в WPF просмотрщике изображений с аннотациями
Каждая аннотация может получить фокус в просмотрщике изображений. Когда аннотация сфокусирована, вокруг нее появляется прямоугольник выделения, который можно трансформировать (масштабировать, зеркально отображать, вращать), при этом аннотация будет трансформироваться пропорционально прямоугольнику выделения.
Вид аннотаций, основанных на наборе точек, кроме того, можно трансформировать с помощью точек. Когда аннотация выбрана - все ее точки становятся выбранными, пользователь может изменить расположение каждой точки с помощью перетаскивания.
Также виды для аннотаций, основанных на наборе точек, поддерживают режим составного выделения, который позволяет преобразовывать аннотации как с помощью прямоугольника выделения, так и с помощью точек.
Режим выбора/преобразования аннотации, основанной на наборе точек, можно изменить с помощью свойства
WpfLineAnnotationViewBase.GripMode.
Создание и преобразование аннотации в WPF просмотрщике изображений с аннотациями.
Свойство
WpfAnnotationView.Builder определяет интерактивный контроллер, который используется для построения аннотации.
Свойство
WpfAnnotationView.Transformer определяет интерактивный контроллер, который используется для преобразования аннотации.
Кроме того, класс
WpfAnnotationView имеет свойство
WpfAnnotationView.InteractionController, которое определяет используемый в данный момент интерактивный контроллер.
Подробную информацию о построении и преобразовании аннотаций можно найти в статье:
Создание и преобразование аннотаций в WPF
.
Отслеживание состояния аннотации
Класс
WpfAnnotationView предоставляет события, которые позволяют отслеживать состояние аннотации:
- WpfAnnotationView.Rendering - происходит перед ренедрингом аннотации.
- WpfAnnotationView.Rendered - возникает после рендеринга аннотации.
- WpfAnnotationView.MouseDown - возникает, когда указатель мыши находится над аннотацией и нажата кнопка мыши.
- WpfAnnotationView.MouseUp - возникает, когда указатель мыши находится над аннотацией и кнопка мыши отпущена.
- WpfAnnotationView.MouseEnter - происходит, когда указатель мыши попадает на аннотацию.
- WpfAnnotationView.MouseMove - происходит, когда указатель мыши находится над аннотацией.
- WpfAnnotationView.MouseLeave - происходит, когда указатель мыши покидает аннотацию.
- WpfAnnotationView.MouseWheel - возникает, когда колесо мыши перемещается и аннотация находится в фокусе.
- WpfAnnotationView.Click - происходит при клике по аннотации.
- WpfAnnotationView.DoubleClick - происходит при двойном клике по аннотации.
- WpfAnnotationView.StateChanged - возникает при изменении состояния аннотации, например, при поступлении события PropertyChanged от объекта данных аннотации.
Коллекция аннотаций
Класс
WpfAnnotationViewCollection всегда создается на основе класса
AnnotationDataCollection и представляет собой коллекцию представлений аннотаций, которые связаны с данными аннотаций из
AnnotationDataCollection.
Класс
WpfAnnotationViewCollection синхронно вносит изменения в свою коллекцию и в связанный
AnnotationDataCollection.
Класс
WpfAnnotationViewCollection предоставляет возможность добавлять, удалять, изменять порядок элементов, объединять элементы, преобразовывать в массив элементов
WpfAnnotationView и получать доступ к
AnnotationDataCollection. Также класс
WpfAnnotationViewCollection позволяет:
- найти элемент WpfAnnotationView, связанный с указанным экземпляром AnnotationData
- рендерить все виды из коллекции на указанном объекте System.Windows.Media.DrawingContext
- рендерить все виды из коллекции на указанном VintasoftImage.