Процесс заметок (красный карандаш)

Заметки позволяют пользователю сообщать различную информацию об обновлениях, изменениях или чем-то важном. Набор инструментов предлагает пользователям различные возможности для управления и отображения дополнительного уровня информации поверх визуальной 3D-сцены.

Ниже мы рассмотрим процесс создания заметок.

Тип EditMarkupProcess (TypeScript):

export type EditMarkupProcess = {
    name: "EditMarkup",
    editing?: {
        uuid: string,
        cameraRestoringDuration?: number
    }
    options: MarkupOptions
    events: {
        onExit?: (uuid: string) => void
        onCameraProjectionChanged?: (prj: CameraProjection) => void
        onCameraRestored?: (uuid: string) => void
    }
}

Этот процесс позволяет пользователю построить (рисовать) любой 2D-примитив, указанный в списке.

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

Примитивы в объекте разметки всегда рисуются в плоскости, параллельной плоскости экрана. Для этого процесс отключает все процессы камеры (панорамирование, масштабирование и т. д.), поэтому пользователь не может каким-либо образом изменить ее параметры (например, положение), пока процесс активен. Это приводит к тому, что объект разметки сильно зависит от параметров камеры. Поэтому процесс сохраняет камеру в объекте разметки каждый раз, когда он (процесс) запускается в режиме создания* и использует их для восстановления камеры каждый раз, когда он запускается в режиме редактирования.

После остановки процесса все процессы камеры восстанавливаются и ответственность за дальнейшее отображение объекта разметки возлагается на пользователя.

Режимы

Процесс может работать в двух режимах: создание и редактирование. Режим создания определяет, что процесс создает новый объект заметки. Режим редактирования определяет, что процесс редактирует существующий объект заметки. Очевидно, что процесс в таком режиме может быть успешно запущен только в том случае, если в сцене существует указанный объект.

Свойство ‘Editing’

Свойство editing позволяет запустить процесс разметки в режиме редактирования. Рассмотрим варианты данного объекта.

  1. uuid — обязательное поле, необходимое для поиска объекта разметки с указанным uuid и подготовки его к редактированию. Если объект с uuid не найден, процесс отображает сообщение об ошибке на консоли и прекращает работу.

  2. cameraRestoringDuration — необязательное поле, необходимое для установки продолжительности анимации восстановления параметров камеры.

По умолчанию, т.е. если свойство editing не передано, процесс запускается в режиме создания.

Дополнительные опции

Тип параметров разметки (Typescript):

export type MarkupOptions = {
    type?: MarkupType
    pen?: {
        color?: C3DViewRGB
        width?: number
    }
    phantomPen?: {
        color?: C3DViewRGB
        width?: number
    }
}

options позволяет настроить параметры процесса:

  • type указывает тип начального примитива, который будет построен;

  • pen позволяет настроить внешний вид конечных примитивов заметки объекта (цвет и ширину линий);

  • phantomPen позволяет настроить внешний вид фантомных примитивов объекта.

Рассмотрим варианты:

Имя

Описание

type

Список доступных примитивов. По умолчанию ["None"]

pen.color

Цвет пера разметки. По умолчанию используется {r: 0, g: 0, b: 0}.

pen.width

Ширина пера разметки. По умолчанию – 1.

phantomPen.color

Цвет фантомного пера. По умолчанию используется {r: 0, g: 0, b: 0}.

phantomPen.width

Ширина фантомного пера. По умолчанию – 1.

Тип заметки

export enum MarkupType {
    LineSegment = 'lineSegment',
    Polyline = 'polyline',
    Rectangle = 'rect',
    Ellipse = 'ellipse',
    Circle = 'circle',
    Eraser = 'eraser',
    None = 'none'
}

События

Доступные события.

  1. onExit(uuid) вызывается, когда пользователь останавливает процесс и возвращает uuid созданного объекта разметки.

  2. onCameraProjectionChanged(prj) вызывается, если процесс меняет проекцию камеры при восстановлении ее параметров и возвращает «новую» проекцию камеры prj. Это событие вызывается только тогда, когда процесс запущен в режиме редактирования и восстановленная проекция действительно отличается от текущей.

  3. onCameraRestored(uuid) вызывается сразу после того, как процесс восстанавливает параметры камеры. Это событие вызывается только тогда, когда процесс запускается в режиме редактирования.

Запуск процесса

Чтобы запустить процесс, вам следует вызвать команду RunProcessCommand с именем EditMarkup процесса:

Пример запуска процесса EditMarkup (TypeScript):

view.runCommand({
    name: "RunProcessCommand",
    process: {
        name: "EditMarkup",
        options: {
            type: MarkupType.LineSegment
        },
        events: {}
    }
})

или то же самое в режиме редактирования:

view.runCommand({
    name: "RunProcessCommand",
    process: {
        name: "EditMarkup",
        editing: {
            uuid: "..."
        },
        options: {
            type: MarkupType.LineSegment
        },
        events: {}
    }
})

Обновление процесса

Обновление позволяет изменить опции, которые устанавливаются при запуске процесса.

Обобщенный тип команды обновления (TypeScript):

type UpdateProcess = {
    name: "UpdateProcessCommand"
    options: { name: "EditMarkup" } & MarkupOptions
}

Пример команды для обновления создаваемого примитива разметки (TypeScript):

view.runCommand({
    name: "UpdateProcessCommand",
    options: {
        name: "EditMarkup",
        type: MarkupType.LineSegment
    }
})