Category: история

Category was added automatically. Read all entries about "история".

eye

SoAction

SoAction - базовый класс для всех классов, выполняющих обход граф-сцены, выполняя различные действия (рендеринг, поиск узлов, поиск пересечений и прочее).

Использование классов-действий является основным механизмом для выполнения различных действий над граф-сценой.
В отличии от узлов граф-сцены, объекты-действия могут создаваться в стеке и будут автоматически уничтожаться при выходе из области видимости (они не имеют счётчика ссылок и их не обязательно создавать в куче).
Перед использованием, необходимо создать и настроить объект-действие. Затем вызывается метод apply, в который передаётся корень граф-сцены (это не обязательно должен быть корень всей граф-сцены, но переданный узел будет считаться корнем граф-сцены и поиск будет вестись именно от этого узла), над которой и выполняется заданное действие.
Обход графа выполняется в глубину слева-направо, как изображено на рисунке:

depth-first
Следует учесть, что при передаче узла в объект-действие, счётчик ссылок узла увеличивается на единицу, а по завершении действия счётчик уменьшается. Это делается для того, чтобы граф-сцена не была удалена в то время, пока над ней выполняется действие. Поэтому, чтобы избежать удаления графа после выполнения действия (если удаление не желательно), следует самостоятельно увеличить счётчик на единицу (метод ref). Когда объект граф-сцены будет не нужен, так же вручную потребуется вызвать метод unref.

Библиотека Coin3D содержит множество различных классов-действий, некоторые из которых будут подробно рассмотрены в последующих статьях.