Сцена

объект Сцена
объект SceneReactor

Производный от: Система координат (TransformNodeReactor)

Сцена - это основной объект приложения. Он присутствует в презентации всегда, все объекты, производные от Узел (NodeReactor) (Метка (MarkerReactor), Модель (ModelReactor), Проекция на экран (HudReactor) и т.д.) должны быть потомкам, или потомками потомков сцены.

Кроме того, все объекты типа Метка (MarkerReactor) должны находиться непосредственно в сцене.

Нажатия на экран

Вводится в Сцена (SceneReactor)

Данные события срабатывают, когда пользователь нажимает на любую точку экрана, причём в отличие от нажатий на объект данные события будут срабатывать при нажатии на любую точку экрана.

У Сцена (SceneReactor) также остаются и нажатия на объект, которые будут срабатывать при нажатии на любой объект сцены.

../_images/scene_screenclicks_actions.png

Событие

Описание

Нажатие на экран (onScreenClick)

Вызывается, когда пользователь нажимает на экран

Двойное нажатие на экран (onScreenDoubleClick)

Вызывается, когда пользователь дважды нажимает на экран

событие Нажатие на экран
событие onScreenClick()

Вызывается, когда пользователь нажимает на экран

событие Двойное нажатие на экран
событие onScreenDoubleClick()

Вызывается, когда пользователь дважды нажимает на экран

Предупреждение

Каждому вызову Двойное нажатие на экран (onScreenDoubleClick) будет предшествовать вызов Нажатие на экран (onScreenClick). Таким образом, не стоит подписываться на оба события для одного объекта одновременно, либо необходимо фильтровать клики при помощи объекта Таймер (TimerReactor).

Работа с потомками и иерархией

Вводится в Группа (GroupNodeReactor)

Каждый объект, производный от Группа (GroupNodeReactor) может иметь одного или нескольких потомков, производных от Узел (NodeReactor). Например, любой Модель (ModelReactor) может быть добавлен на метку - в Метка (MarkerReactor), или любой объект может быть добавлен в Сцена (SceneReactor).

Примечание

Вся система объектов, производных от Узел (NodeReactor) повторяет структуру библиотеки OpenSceneGraph . Соответственно, многие особенности библиотеки распрастраняются и на систему объектов EV Toolbox.

Иерархия объектов может быть изменена в списке объектов при помощи drag’n’drop или при помощи контекстного меню.

../_images/group_children_actions.png

Параметр

Описание

Список потомков (children)

Список потомков данного объекта

Действие

Описание

Дочерний узел - добавить (addChild)

Добавить потомка в конец списка потомков

Дочерний узел - вставить (insertChild)

Вставить потомка в середину списка потомков.

Дочерний узел - удалить последний (removeLastChild)

Удалить последнего потомка из списка потомков

Дочерний узел - удалить (removeChild)

Убирает указанный объект из списка потомков.

Дочерний узел - удалить по индексу (removeChild)

Убирает объект по данному индексу из списка потомков.

Группа - удалить дочерние узлы (removeChildren)

Убирает заданное число объектов из списка потомков, начиная с заданного индекса.

Группа - удалить все дочерние узлы (clearChildren)

Полностью очищает список потомков объекта.

параметр Список потомков
параметр children

Список всех дочерних объектов. Имеет тип table, в котором находятся ссылки на все дочерние объекты.

Примечание

В интерфейсе версии Standard данный параметр устанавливается неявно, путём переноса объектов в списке объектов

Пример использования:

local marker = ...      -- Тип MarkerReactor
local model = ...       -- Тип NodeReactor или производный
local transform = ...   -- Тип TransformNodeReactor

-- Подписываемся на onHide маркера - событие исчезновения его из вида
marker:subscribeEvent("onHide", function()
    -- Переносим трансформацию маркера на transform
    transform.trans = marker.trans
    transform.rotate = marker.rotate
    transform.scale = marker.scale

    -- Удаляем модель из маркера
    marker:removeChild(model)

    -- Добавляем модель в transform
    transform:addChild(model)
end)

-- При показе метки
marker:subscribeEvent("onShow", function()
    -- Удаляем модель из transform'а
    transform:removeChild(model)

    -- Добавляем модель в маркер
    marker:addChild(model)
end)

действие Дочерний узел - добавить
действие addChild(child)

Добавить потомка в конец списка потомков

Параметры

Узел / child – Объект, производный от Узел (NodeReactor), который будет добавлен в качестве потомка

действие Дочерний узел - вставить
действие insertChild(index, child)

Вставить потомка в середину списка потомков.

Параметры
  • Индекс / index – Индекс, на который надо вставить нового потомка. Индексация начинается с единицы.

  • Узел / child – Объект, производный от Узел (NodeReactor), который будет добавлен в качестве потомка

действие Дочерний узел - удалить последний
действие removeLastChild()

Удалить последнего потомка из списка потомков

действие Дочерний узел - удалить
действие removeChild(child)

Убирает указанный объект из списка потомков.

Если данного объекта не было в спике потомков, то ничего не происходит. Если в списке потомков данный объект встречался дважды, будет удалено только первое вхождение.

Параметры

Узел / child – Объект, который необходимо убрать из списка потомков

действие Дочерний узел - удалить по индексу
действие removeChild(index)

Убирает объект по данному индексу из списка потомков.

Параметры

Индекс / index – Индекс объекта в списке потомков, который необходимо удалить.

действие Группа - удалить дочерние узлы
действие removeChildren(startIndex, numChildren = 1)

Убирает заданное число объектов из списка потомков, начиная с заданного индекса.

Примечание

Вызов с Числом узлов равным единице равносилен вызову Дочерний узел - удалить по индексу (removeChild)

Параметры
  • Начать с индекса / startindex – Индекс первого объекта, который должен быть удалён

  • Число узлов / numChildren – Число потомков, которые должны быть удалены из списка потомков

действие Группа - удалить все дочерние узлы
действие clearChildren()

Полностью очищает список потомков объекта.