Группа¶
Contents
-
объект
Группа;GroupNodeReactor¶
Производный объект от:
Базовый объект для:
Объект типа Группа (GroupNodeReactor) является оберткой над osg.Group библиотеки OpenSceneGraph, инкапсулируя методы этого класса.
Warning
В интерфейсе данный тип объектов недоступен. Вместо него следует использовать производный объект Система координат (TransformNodeReactor), являющийся производным от данного объекта, и, как следствие, имеющий все свойства, события и действия данного объекта.
Объект типа Группа (GroupNodeReactor) и его производные используются для группировки нескольких объектов Узел (NodeReactor), для одновременной работы с ними. Например, в группу и производные можно добавить несколько объектов для совместного скрытия и показа объектов:
Производные объекты могут также модифицировать внешний вид нижележащих объектов. Например, объекты Система координат (TransformNodeReactor) могут изменять преобразования (перемещение, вращение, масштаб) для всех объектов-потомков. Например, пусть имеет место следующая иерархия объектов:
В примере выше изображены два объекта: “Кольцо” и “Мяч”, оба расположены в одном объекте Система координат (TransformNodeReactor) - “Мяч и корзина”. Объекты “Кольцо” и “Мяч” называются потомками, или дочерними объектами по отношению к “Мяч с корзиной”, “Мяч с корзиной” же является предком, или родительским объектом по отношению к его дочерним объектам.
Теперь изменение параметров “Мяч и корзина” будет менять поведение объектов-потомков:
| Начальная ситуация | Объект “Мяч и корзина” был скрыт | Объект “Мяч и корзина” был перемещён |
|---|---|---|
![]() |
![]() При скрытии объекта “Мяч и корзина” скрылись все его потомки
|
![]() При перемещении объекта “Мяч и корзина” (см. Система координат.Перемещение (TransformNodeReactor.trans)) вместе с ним переместились все его потомки
|
Один из важнейших производных типов объектов - Метка (MarkerReactor). Каждая метка является производной от Система координат (TransformNodeReactor), и перемещается в виртуальном пространстве сцены вместе с реальной меткой дополненной реальности. Таким образом, возникает один из основных паттернов использования меток - если в метку в качестве потомков поместить какие-либо объекты, то они будут перемещаться вместе с реальной меткой дополненной реальности (подробнее см. в Метка (MarkerReactor)).
Advanced¶
Работа с потомками и иерархией¶
Вводится в Группа (GroupNodeReactor)
Каждый объект, производный от Группа (GroupNodeReactor) может иметь одного или нескольких потомков, производных от Узел (NodeReactor). Например, любая Модель (ModelReactor) может быть добавлена на метку - в Метка (MarkerReactor), или любой объект может быть добавлен в Сцена (SceneReactor).
Note
Вся система объектов, производных от Узел (NodeReactor) повторяет структуру библиотеки OpenSceneGraph . Соответственно, многие особенности библиотеки распространяются и на систему объектов EV Toolbox.
Иерархия объектов может быть изменена в списке объектов при помощи drag’n’drop или при помощи контекстного меню.
| Параметр | Описание |
|---|---|
| Список потомков (children) | Список потомков данного объекта |
| Действие | Описание |
|---|---|
| Группа - добавить узел (addChild) | Добавить потомка в конец списка потомков |
| Группа - удалить узел (removeChild) | Убирает указанный объект из списка потомков. |
| Группа - удалить все дочерние узлы (clearChildren) | Полностью очищает список потомков объекта. |
| Группа - задать явно потомков (setChildren) | Явно задает список потомков. |
-
параметр
Список потомков;children¶ Список всех дочерних объектов. Имеет тип
table, в котором находятся ссылки на все дочерние объекты.Note
В интерфейсе версии Standard данный параметр устанавливается неявно, путём переноса объектов в списке объектов
-
действие
Группа - добавить узел;addChild(child)¶ Добавить потомка в конец списка потомков
Parameters: Узел / child – Объект, производный от Узел (NodeReactor), который будет добавлен в качестве потомка Warning
Метод не рекомендуется вызывать во время обхода графа, так как это может повлечь за собой аварийную остановку программы. Данное действие недоступно в версии Standard.
-
действие
Группа - удалить узел;removeChild(child)¶ Убирает указанный объект из списка потомков.
Если данного объекта не было в спике потомков, то ничего не происходит. Если в списке потомков данный объект встречался дважды, будет удалено только первое вхождение.
Parameters: Узел / child – Объект, который необходимо убрать из списка потомков Warning
Метод не рекомендуется вызывать во время обхода графа, так как это может повлечь за собой аварийную остановку программы. Данное действие недоступно в версии Standard.
-
действие
Группа - удалить все дочерние узлы;clearChildren()¶ Полностью очищает список потомков объекта.
Warning
Метод не рекомендуется вызывать во время обхода графа, так как это может повлечь за собой аварийную остановку программы. Данное действие недоступно в версии Standard.
-
действие
Группа - задать явно потомков;setChildren()¶ Задает явно потомков для группы. Старые потомки будут удалены из группы.
Parameters: Потомки / 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) -- задаем таблицу потомков для группы


