Группа

объект Группа; 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 или при помощи контекстного меню.

Параметр Описание
Список потомков (children) Список потомков данного объекта
Действие Описание
Группа - добавить узел (addChild) Добавить потомка в конец списка потомков
Группа - удалить узел (removeChild) Убирает указанный объект из списка потомков.
Группа - удалить все дочерние узлы (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), который будет добавлен в качестве потомка

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

Метод не рекомендуется вызывать во время обхода графа, так как может повлечь за собой аварийный останов программы. Данное действие недоступно в версии Standard.

действие Группа - удалить узел; removeChild(child)

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

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

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

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

Метод не рекомендуется вызывать во время обхода графа, так как может повлечь за собой аварийный останов программы. Данное действие недоступно в версии Standard.

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

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

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

Метод не рекомендуется вызывать во время обхода графа, так как может повлечь за собой аварийный останов программы. Данное действие недоступно в версии Standard.