Процесс редактирования плоскости сечения

Ниже мы рассмотрим процесс, позволяющий создавать и редактировать плоскость сечения.

Плоскость сечения

Функции

Тип EditSectionPlaneProcess (TypeScript):

export type EditSectionPlaneProcess = {
    name: "EditSectionPlane"
    id?: number
    options: EditSectionPlaneOptions
    events: {
        onUpdate?: (a: number, b: number, c: number) => void
        onInvert?: (value: "front" | "back") => void
        onCtrlOriginChanged?: (centered: boolean) => void
    }
}

В дополнение к options этот процесс имеет необязательное свойство id. Если оно указано, это позволяет редактировать плоскости сечения, уже добавленные с помощью команды.

Примечание

Можно добавить новую плоскость сечения (если не превышено ограничение в 6 плоскостей), отредактировав плоскость сечения с пустым параметром id.

Добавлено в версии 1.8.0: Увеличено количество плоскостей одновременно в сцене с 4 до 6. Добавлен контроллер для интерактивного преобразования положения плоскости.

Интерактивная трансформация

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

  • линейное перемещение по оси Z;

  • плоскостное движение по плоскости XY;

  • вращение вокруг осей X и Y.

Контроллер плоскости

Параметры

Тип параметров секущей плоскости (Typescript):

export type EditSectionPlaneOptions = {
    placement?: {
        a: number,
        b: number,
        c: number
    }
    colors?: {
        lines: C3DViewRGB,
        rect: C3DViewRGB,
        transparent: number
    }
    direction?: "front" | "back"
    centering?: boolean
}

Имя

Описание

placement

Плоскость сечения определяется двумя углами и смещением (подробнее). По умолчанию используется {a: 0, b: 0, c: 0}.

colors.lines

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

colors.rect

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

colors.transparent

Прозрачность плоскости сечения. По умолчанию установлено значение 0.4.

direction

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

centering

Выравнивает ли процесс контроллер по центру (началу) плоскости сечения. По умолчанию установлено значение true.

Примечание

Все параметры можно изменить во время выполнения процесса с помощью команды обновления.

Добавлено в версии 1.8.0: Добавлена ​​опция centering для центрирования контроллера.

Обратные вызовы

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

  1. onUpdate(a, b, c) генерируется при изменении плоскости (через команду процесса обновления).

  2. onInvert(direction) генерируется при изменении направления плоскости.

  3. onCtrlOriginChanged(centered) генерируется, когда начало координат контроллера становится отличным от плоского (centered равно false) или равно ему (centered равно true).

Добавлено в версии 1.8.0: Добавлено событие onCtrlOriginChanged.

Запуск

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

view.runCommand({
    name: "RunProcessCommand", 
    process: {
        name: "EditSectionPlane",
        id: 1,
        options: {
            placement: {
                a: 3,
                b: 1,
                c: 100
            }
        },
        events: {}
    }
})

Обновление

Любые изменения в плоскости сечения доступны только с помощью команды обновления.

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

type UpdateProcess = {
    name: "UpdateProcessCommand"
    options: {
        name: "EditSectionPlane"
        placement?: {
            a: number
            b: number
            c: number 
        }
        colors?: {
            lines: C3DViewRGB
            rect: C3DViewRGB
            transparent: number
        }
        direction?: "front"|"back"
    }
}

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

view.runCommand({
    name: "UpdateProcessCommand", 
    options: {
        name: "EditSectionPlane",
        placement: {
            a: 3,
            b: 2,
            c: 100
        }
    }
})