Группа¶
Содержание
-
объект
Группа;
GroupNodeReactor
¶
Производный объект от:
Базовый объект для:
Объект типа Группа (GroupNodeReactor) является оберткой над osg.Group
библиотеки OpenSceneGraph, инкапсулируя методы этого класса.
Предупреждение
В интерфейсе данный тип объектов недоступен. Вместо него следует использовать производный объект Система координат (TransformNodeReactor), являющийся производным от данного объекта, и, как следствие, имеющий все свойства, события и действия данного объекта.
Объект типа Группа (GroupNodeReactor) и его производные используются для группировки нескольких объектов Узел (NodeReactor), для одновременной работы с ними. Например, в группу и производные можно добавить несколько объектов для совместного скрытия и показа объектов:

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

В примере выше изображены два объекта: «Кольцо» и «Мяч», оба расположены в одном объекте Система координат (TransformNodeReactor) - «Мяч и корзина». Объекты «Кольцо» и «Мяч» называются потомками, или дочерними объектами по отношению к «Мяч с корзиной», «Мяч с корзиной» же является предком, или родительским объектом по отношению к его дочерним объектам.
Теперь изменение параметров «Мяч и корзина» будет менять поведение объектов-потомков:
Начальная ситуация | Объект «Мяч и корзина» был скрыт | Объект «Мяч и корзина» был перемещён |
---|---|---|
![]() |
![]() При скрытии объекта «Мяч и корзина» скрылись все его потомки
|
![]() При перемещении объекта «Мяч и корзина» (см. Система координат.Перемещение (TransformNodeReactor.trans)) вместе с ним переместились все его потомки
|
Один из важнейших производных типов объектов - Метка (MarkerReactor). Каждая метка является производной от Система координат (TransformNodeReactor), и перемещается в виртуальном пространстве сцены вместе с реальной меткой дополненной реальности. Таким образом, возникает один из основных паттернов использования меток - если в метку в качестве потомков поместить какие-либо объекты, то они будут перемещаться вместе с реальной меткой дополненной реальности (подробнее см. в Метка (MarkerReactor)).
Advanced¶
Работа с потомками и иерархией¶
Вводится в Группа (GroupNodeReactor)
Каждый объект, производный от Группа (GroupNodeReactor) может иметь одного или нескольких потомков, производных от Узел (NodeReactor). Например, любая Модель (ModelReactor) может быть добавлена на метку - в Метка (MarkerReactor), или любой объект может быть добавлен в Сцена (SceneReactor).
Примечание
Вся система объектов, производных от Узел (NodeReactor) повторяет структуру библиотеки OpenSceneGraph . Соответственно, многие особенности библиотеки распространяются и на систему объектов EV Toolbox.
Иерархия объектов может быть изменена в списке объектов при помощи drag’n’drop или при помощи контекстного меню.
Параметр | Описание |
---|---|
Список потомков (children) | Список потомков данного объекта |
Действие | Описание |
---|---|
Группа - добавить узел (addChild) | Добавить потомка в конец списка потомков |
Группа - удалить узел (removeChild) | Убирает указанный объект из списка потомков. |
Группа - удалить все дочерние узлы (clearChildren) | Полностью очищает список потомков объекта. |
Группа - задать явно потомков (setChildren) | Явно задает список потомков. |
-
параметр
Список потомков;
children
¶ Список всех дочерних объектов. Имеет тип
table
, в котором находятся ссылки на все дочерние объекты.Примечание
В интерфейсе версии Standard данный параметр устанавливается неявно, путём переноса объектов в списке объектов
-
действие
Группа - добавить узел;
addChild
(child)¶ Добавить потомка в конец списка потомков
Параметры: Узел / child – Объект, производный от Узел (NodeReactor), который будет добавлен в качестве потомка Предупреждение
Метод не рекомендуется вызывать во время обхода графа, так как это может повлечь за собой аварийную остановку программы. Данное действие недоступно в версии Standard.
-
действие
Группа - удалить узел;
removeChild
(child)¶ Убирает указанный объект из списка потомков.
Если данного объекта не было в спике потомков, то ничего не происходит. Если в списке потомков данный объект встречался дважды, будет удалено только первое вхождение.
Параметры: Узел / child – Объект, который необходимо убрать из списка потомков Предупреждение
Метод не рекомендуется вызывать во время обхода графа, так как это может повлечь за собой аварийную остановку программы. Данное действие недоступно в версии Standard.
-
действие
Группа - удалить все дочерние узлы;
clearChildren
()¶ Полностью очищает список потомков объекта.
Предупреждение
Метод не рекомендуется вызывать во время обхода графа, так как это может повлечь за собой аварийную остановку программы. Данное действие недоступно в версии Standard.
-
действие
Группа - задать явно потомков;
setChildren
()¶ Задает явно потомков для группы. Старые потомки будут удалены из группы.
Параметры: Потомки / children – Таблица, содержащая ссылки на реакторы потомков
Пример кода:
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)
Еще пример:
local firstModel = reactorController:getReactorByName("Model1")
local secondModel = reactorController:getReactorByName("Model2")
local group = reactorController:getReactorByName("group") -- TransformNodeReactor
local children = {}
table.insert(children, firstModel)
table.insert(children, secondModel) -- добавляем модели в таблицу
group:setChildren(children) -- задаем таблицу потомков для группы