Группа

объект Группа
объект GroupNodeReactor

Производный объект от:

Базовый объект для:

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

В интерфейсе версии Standard данный тип объектов недоступен. Вместо него следует использовать производный объект Система координат (TransformNodeReactor), являющийся производным от данного объекта, и, как следствие, имеющий все свойства, события и действия данного объекта.

Объект типа Группа (GroupNodeReactor) и его производные используются для группировки нескольких объектов Узел (NodeReactor), для одновременой работы с ними. Например, в группу и производные можно добавить несколько объектов для совместного скрытия и показа объектов:

../_images/transform_screen.png

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

../_images/transform_node_example_1_hierarchy.png

В примере выше изображены два объекта: «Кольцо» и «Мяч», оба расположены в одном объекте Система координат (TransformNodeReactor) - «Мяч и корзина». Объекты «Кольцо» и «Мяч» называются потомками, или дочерними объектами по отношению к «Молекуле воды», «Молекула воды» же является предком, или родительским объектом по отношению к его дочерним объектам.

Теперь изменение параметров «Мяч и корзина» будет менять поведение объектов-потомков:

Начальная ситуация

Объект «Мяч и корзина» был скрыт

Объект «Мяч и корзина» был перемещён

transform_node_example_1_base_image

transform_node_example_1_hidden_image
При скрытии объекта «Мяч и корзина» скрылись все его потомки
transform_node_example_1_translated_image
При перемещении объекта «Мяч и корзина» (см. Система координат.Перемещение (TransformNodeReactor.trans)) вместе с ним переместились все его потомки

Одним из важнейших производных типов объектов - Метка (MarkerReactor). Каждая метка является производной от Система координат (TransformNodeReactor), и перемещается в виртуальном пространстве сцены вместе с реальной меткой дополненной реальности. Таким образом, возникает один из основных паттернов использования меток - если в метку в качестве потомков поместить какие-либо объекты, то они будут перемещаться вместе с реальной меткой дополненной реальности (подробнее см. в Метка (MarkerReactor)).

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

Вводится в Группа (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()

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