diff --git a/src/Magnum/SceneGraph/AbstractObject.h b/src/Magnum/SceneGraph/AbstractObject.h index 4f0c60adf..bb752f4e3 100644 --- a/src/Magnum/SceneGraph/AbstractObject.h +++ b/src/Magnum/SceneGraph/AbstractObject.h @@ -170,6 +170,12 @@ template class AbstractObject /** @overload */ const AbstractObject* scene() const { return doScene(); } + /** @brief Parent object or `nullptr`, if this is root object */ + AbstractObject* parent() { return doParent(); } + + /** @overload */ + const AbstractObject* parent() const { return doParent(); } + /** @{ @name Object transformation */ /** @@ -269,6 +275,9 @@ template class AbstractObject virtual AbstractObject* doScene() = 0; virtual const AbstractObject* doScene() const = 0; + virtual AbstractObject* doParent() = 0; + virtual const AbstractObject* doParent() const = 0; + virtual MatrixType doTransformationMatrix() const = 0; virtual MatrixType doAbsoluteTransformationMatrix() const = 0; virtual std::vector doTransformationMatrices(const std::vector>>& objects, const MatrixType& initialTransformationMatrix) const = 0; diff --git a/src/Magnum/SceneGraph/Object.h b/src/Magnum/SceneGraph/Object.h index dbc4497ee..79fc084e2 100644 --- a/src/Magnum/SceneGraph/Object.h +++ b/src/Magnum/SceneGraph/Object.h @@ -363,6 +363,9 @@ template class Object: public AbstractObject* doScene() override final; const Object* doScene() const override final; + Object* doParent() override final; + const Object* doParent() const override final; + MatrixType MAGNUM_SCENEGRAPH_LOCAL doTransformationMatrix() const override final { return transformationMatrix(); } diff --git a/src/Magnum/SceneGraph/Object.hpp b/src/Magnum/SceneGraph/Object.hpp index e3ceaeaa4..8a2b0e5f9 100644 --- a/src/Magnum/SceneGraph/Object.hpp +++ b/src/Magnum/SceneGraph/Object.hpp @@ -69,6 +69,14 @@ template const Object* Object Object* Object::doParent() { + return parent(); +} + +template const Object* Object::doParent() const { + return parent(); +} + template Object& Object::setParent(Object* parent) { /* Skip if parent is already parent or this is scene (which cannot have parent) */ /** @todo Assert for setting parent to scene */