В этом разделе
Класс
AnnotationView всегда создается на основе класса
AnnotationData и определяет внешний вид аннотации и способ взаимодействия пользователя с аннотацией.
Связь между классами, производными от
AnnotationData и
AnnotationView, регистрируется с помощью метода
AnnotationViewFactory.RegisterViewForAnnotationData.
Как и в случае с классами, производными от класса
AnnotationData, классы, производные от класса
AnnotationView, делятся на 3 типа:
Класс
AnnotationView содержит свойство
AnnotationView.Data, которое позволяет получить ссылку на связанный экземпляр класса
AnnotationData. Также класс
AnnotationView содержит набор свойств, аналогичных свойствам класса
AnnotationData, которые позволяют передавать свойства аннотации через
AnnotationView.
Вот C#/VB.NET код, который демонстрирует, как создать вид для аннотации
EllipseAnnotationData:
public static Vintasoft.Imaging.Annotation.UI.AnnotationView CreateViewForEllipseAnnotationData(
Vintasoft.Imaging.Annotation.EllipseAnnotationData ellipseAnnotation)
{
return new Vintasoft.Imaging.Annotation.UI.EllipseAnnotationView(ellipseAnnotation);
}
Public Shared Function CreateViewForEllipseAnnotationData(ellipseAnnotation As Vintasoft.Imaging.Annotation.EllipseAnnotationData) As Vintasoft.Imaging.Annotation.UI.AnnotationView
Return New Vintasoft.Imaging.Annotation.UI.EllipseAnnotationView(ellipseAnnotation)
End Function
Прямоугольники, ограничивающие аннотацию
Вид аннотации имеет несколько типов ограничивающих прямоугольников. Для решения различных задач, связанных с корректным рисованием и взаимодействием с аннотацией, используются следующие типы:
- "Ограничивающий прямоугольник" - определяет прямоугольник, выровненный по осям, который включает в себя аннотацию. Этот прямоугольник определяется только свойствами аннотации AnnotationView.Location, AnnotationView.Size и AnnotationView.Rotation и может использоваться для расчета "Прямоугольника рисования". Для получения прямоугольника необходимо вызвать метод AnnotationView.GetBoundingBox.
- "Ограничивающий прямоугольник автора" - определяет прямоугольник, выровненный по осям, который, в свою очередь, определяет область аннотации при преобразовании аннотации, а также используется для выбора аннотации в просмотрщике изображений с аннотациями. В большинстве случаев "Ограничивающий прямоугольник автора" соответствует области аннотации "Ограничивающий прямоугольник". Для получения прямоугольника необходимо вызвать метод AnnotationView.GetAuthorBoundingBox. Этот метод является виртуальным, поэтому его можно переопределить в классах, производных от класса AnnotationView.
- "Прямоугольник рисования" - определяет прямоугольник, выровненный по осям, который полностью охватывает всю визуальную часть аннотации, но не более того. "Прямоугольник рисования" может быть больше "Ограничивающего прямоугольника" из-за дополнительных визуальных элементов аннотации, таких как тень аннотации, подпись с значением длины аннотации, сглаживание интерполированных линий и т. д.
Выделение аннотации в WinForms просмотрщике изображений с аннотациями
Каждая аннотация может получить фокус в просмотрщике изображений. Когда аннотация сфокусирована, вокруг нее появляется прямоугольник выделения, который можно трансформировать (масштабировать, зеркально отображать, вращать), при этом аннотация будет трансформироваться пропорционально прямоугольнику выделения.
Вид аннотаций, основанных на наборе точек, кроме того, можно трансформировать с помощью точек. Когда аннотация выбрана - все ее точки становятся выбранными, пользователь может изменить расположение каждой точки с помощью перетаскивания.
Также виды для аннотаций, основанных на наборе точек, поддерживают режим составного выделения, который позволяет преобразовывать аннотации как с помощью прямоугольника выделения, так и с помощью точек.
Режим выбора/преобразования аннотаций, основанных на наборе точек, можно изменить с помощью свойства
LineAnnotationViewBase.GripMode.
Построение и преобразование аннотаций в WinForms просмотрщике изображений с аннотациями.
Свойство
AnnotationView.Builder определяет интерактивный контроллер, который используется для построения аннотаций.
Свойство
AnnotationView.Transformer определяет интерактивный контроллер, который используется для преобразования аннотаций.
Кроме того, класс
AnnotationView имеет свойство
AnnotationView.InteractionController, которое определяет используемый в данный момент интерактивный контроллер.
Подробную информацию о построении и преобразовании аннотаций можно найти в статье:
Создание и преобразование аннотаций в WinForms
.
Отслеживание состояния аннотации
Класс
AnnotationView предоставляет события, которые позволяют отслеживать состояние аннотации:
- AnnotationView.Drawing - возникает перед рисованием аннотации.
- AnnotationView.Drawn - возникает после отрисовки аннотации.
- AnnotationView.MouseDown - возникает, когда указатель мыши находится над аннотацией и нажата кнопка мыши.
- AnnotationView.MouseUp - возникает, когда указатель мыши находится над аннотацией и кнопка мыши отпущена.
- AnnotationView.MouseEnter - возникает, когда указатель мыши попадает на аннотацию.
- AnnotationView.MouseMove - происходит, когда указатель мыши перемещается над аннотацией.
- AnnotationView.MouseLeave - происходит, когда указатель мыши покидает аннотацию.
- AnnotationView.MouseWheel - происходит, когда колесико мыши движется и аннотация находится в фокусе.
- AnnotationView.Click - происходит при клике по аннотации.
- AnnotationView.DoubleClick - происходит при двойном клике по аннотации.
- AnnotationView.StateChanged - возникает при изменении состояния аннотации, например, при поступлении события PropertyChanged из объекта данных аннотации.
Коллекция аннотаций
Класс
AnnotationViewCollection всегда создается на основе класса
AnnotationDataCollection и представляет собой коллекцию видов аннотаций, связанных с данными аннотаций из
AnnotationDataCollection.
Класс
AnnotationViewCollection синхронно вносит изменения в свою коллекцию и в связанную
AnnotationDataCollection.
Класс
AnnotationViewCollection предоставляет возможность добавлять, удалять, изменять порядок, изменять порядок элементов, преобразовывать в массив элементов
AnnotationView и получать доступ к
AnnotationDataCollection. Также класс
AnnotationViewCollection позволяет:
- искать элемент AnnotationView, связанный с указанным экземпляром AnnotationData
- рендерить все виды из коллекции на указанном объекте System.Windows.Media.DrawingContext
- рендерить все виды из коллекции на указанном VintasoftImage.