From 832289f7c33d7b74618a9350a039f6aa87b8c9e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 12 Oct 2016 14:12:49 +0200 Subject: [PATCH] SceneGraph: ability to access parent from AbstractObject. Didn't do any tests because there's nothing for AbstractObject anyway (it's on my TODO list, though). --- src/Magnum/SceneGraph/AbstractObject.h | 9 +++++++++ src/Magnum/SceneGraph/Object.h | 3 +++ src/Magnum/SceneGraph/Object.hpp | 8 ++++++++ 3 files changed, 20 insertions(+) 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 */