VintaSoft Imaging .NET SDK 14.1: Документация для .NET разработчика
    Класс WpfUserInteractionVisualTool

    Основные понятия

    WpfUserInteractionVisualTool - базовый класс для визуальных инструментов, которые выполняют взаимодействие между пользователем и интерактивным объектом в WpfImageViewer с помощью устройств ввода (таких как клавиатура, мышь и т. д.). Класс позволяет реализовать пользовательскую (определяемую пользователем) логику взаимодействия между коллекцией интерактивных объектов и пользователем.Классы, производные от этого класса, являются визуальными инструментами, такими как WpfAnnotationVisualTool, WpfRectangularSelectionTool, WpfCustomSelectionTool.

    Основными понятиями модели интерактивного взаимодействия являются:

    Основные принципы работы модели взаимодействия

    Работу модели взаимодействия можно разделить на 5 этапов:
    1. Визуальный инструмент взаимодействия получает выбранный объект и считает его активным объектом, визуальный инструмент взаимодействия получает контроллер взаимодействия из активного объекта и считает его активным контроллером взаимодействия.
    2. Визуальный инструмент взаимодействия выполняет вызов метода UpdateInteractionAreas для активного контроллера взаимодействия и получает список областей взаимодействия, используя свойство InteractionAreas контроллера взаимодействия. Визуальный инструмент взаимодействия отображает области взаимодействия поверх других интерактивных объектов в средстве просмотра изображений.
    3. Визуальный инструмент взаимодействия анализирует события, поступающие от устройств ввода (например, нажатие кнопки мыши, перемещение указателя мыши), и определяет область взаимодействия, с которой работает пользователь. События от устройств ввода преобразуются в события взаимодействия в соответствии с типом области взаимодействия, а затем направляются в активный контроллер взаимодействия с помощью метода IInteractionController.OnInteraction(InteractionEventArgs).
    4. Контроллер взаимодействия в методе OnInteraction выполняет логику взаимодействия между областью взаимодействия и интерактивным объектом. Например: Интерактивный объект поддерживает вращение, реализуя интерфейс интерактивного объекта, в котором существует свойство RotationAngle. После получения контроллером события взаимодействия с точкой вращения (точка вращения - область взаимодействия) он вычислит угол поворота, на который необходимо повернуть объект, и изменит свойство RotationAngle объекта на необходимый угол.
    5. Когда контроллер взаимодействия изменяет какое-либо свойство, которое изменяет состояние объекта (например, угол поворота), объект генерирует событие StateChanged, на которое подписывается визуальный инструмент взаимодействия. Визуальный инструмент взаимодействия будет выполнять обновление интерактивных областей в контроллере активного взаимодействия, а затем перерисовывать интерактивный объект и интерактивные области в просмотрщике изображений.


    Иерархия интерфейсов интерактивных объектов

    IInteractiveObject - базовый интерфейс, определяющий общие характеристики всех интерактивных объектов.

    IRectangularInteractiveObject - определяет прямоугольный объект, поддерживающий вращение.

    IPointBasedInteractiveObject - определяет объект, состоящий из набора точек.

    Примечание: Тот факт, что свойства интерактивных объектов описываются иерархией интерфейсов, позволил создать интерактивные объекты, которые могли бы реализовывать сразу несколько интерфейсов интерактивных объектов. Например, объект может поддерживать изменение своих базовых точек (IPointBasedInteractiveObject), а также изменение его формы (растяжение, сжатие, поворот) с использованием прямоугольного интерфейса объекта (IRectangularInteractiveObject).



    Иерархия контроллеров взаимодействия

    Контроллеры взаимодействия для удобства разделены на 2 группы:
    IInteractionController - базовый интерфейс, определяющий общие характеристики всех интерактивных контроллеров взаимодействия.

    WpfRectangularObjectBuilder - конструктор объектов, реализующий интерфейс IRectangularInteractiveObject.

    WpfRectangularObjectTransformer - преобразователь объектов, реализующий интерфейс IRectangularInteractiveObject. Предоставляет возможность перемещать, растягивать, сжимать, вращать объект.

    WpfPointBasedObjectPointBuilder - конструктор объектов, реализующий интерфейс IPointBasedInteractiveObject. Предоставляет возможность конструировать объект, добавляя к нему новые точки щелчком мыши.

    WpfPointBasedObjectFreehandBuilder - конструктор объектов, реализующий интерфейс IPointBasedInteractiveObject. Предоставляет возможность конструировать объект, добавляя к нему новые точки движением мыши.

    WpfPointBasedObjectLineBuilder - конструктор объектов, реализующий интерфейс IPointBasedInteractiveObject. Предоставляет возможность конструировать объект, состоящий из двух точек (линии).

    WpfPointBasedObjectRectangularBuilder - конструктор объектов, реализующий интерфейс IPointBasedInteractiveObject. Предоставляет возможность конструировать объект путем масштабирования всех его точек.

    WpfPointBasedObjectPointTransformer - преобразователь объектов, реализующий интерфейс IPointBasedInteractiveObject. Предоставляет возможность отмечать, перемещать, удалять, добавлять точки объекта.

    WpfPointBasedObjectRectangularTransformer - преобразователь объектов, реализующий интерфейс IPointBasedInteractiveObject. Предоставляет возможность перемещать, растягивать, сжимать, вращать объект.

    WpfPointBasedObjectDistortionTransformer - преобразователь объектов, реализующий интерфейс IPointBasedInteractiveObject. Предоставляет возможность применять искажение и перекос.

    WpfCompositeInteractionController - составной контроллер взаимодействия, который может объединять работу нескольких контроллеров взаимодействия и используется для:

    Иерархия областей взаимодействия

    Базовым классом для всех областей взаимодействия является класс WpfInteractionArea.

    Области взаимодействия для удобства разделены на 3 группы: