Группа¶
- объект Группа; 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¶
Список всех дочерних объектов. Имеет тип
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) -- задаем таблицу потомков для группы


