From 332e4cdb713f3d31b6393c27005ea9e195a2eec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 15 Mar 2013 10:50:29 +0100 Subject: [PATCH] SceneGraph: added AbstractTransformation::resetTransformation(). It was doable in subclasses, but not via any interface, making some things impossible. --- src/SceneGraph/AbstractTransformation.h | 6 ++++++ src/SceneGraph/MatrixTransformation2D.h | 5 +++++ src/SceneGraph/MatrixTransformation3D.h | 5 +++++ src/SceneGraph/RigidMatrixTransformation2D.h | 14 +++++--------- src/SceneGraph/RigidMatrixTransformation3D.h | 14 +++++--------- src/SceneGraph/Test/MatrixTransformation2DTest.cpp | 10 ++++++++++ src/SceneGraph/Test/MatrixTransformation3DTest.cpp | 10 ++++++++++ .../Test/RigidMatrixTransformation2DTest.cpp | 10 ++++++++++ .../Test/RigidMatrixTransformation3DTest.cpp | 10 ++++++++++ 9 files changed, 66 insertions(+), 18 deletions(-) diff --git a/src/SceneGraph/AbstractTransformation.h b/src/SceneGraph/AbstractTransformation.h index 1e27b1682..1717d576f 100644 --- a/src/SceneGraph/AbstractTransformation.h +++ b/src/SceneGraph/AbstractTransformation.h @@ -137,6 +137,12 @@ class MAGNUM_SCENEGRAPH_EXPORT AbstractTransformation { /*@}*/ #endif + + /** + * @brief Reset object transformation + * @return Pointer to self (for method chaining) + */ + virtual AbstractTransformation* resetTransformation() = 0; }; /** @brief Transformation type */ diff --git a/src/SceneGraph/MatrixTransformation2D.h b/src/SceneGraph/MatrixTransformation2D.h index 04e6f1e1c..e7ad90e40 100644 --- a/src/SceneGraph/MatrixTransformation2D.h +++ b/src/SceneGraph/MatrixTransformation2D.h @@ -100,6 +100,11 @@ class MatrixTransformation2D: public AbstractTranslationRotationScaling2D { return this; } + inline MatrixTransformation2D* resetTransformation() override { + setTransformation({}); + return this; + } + /** * @copydoc AbstractTranslationRotationScaling2D::translate() * Same as calling transform() with Matrix3::translation(). diff --git a/src/SceneGraph/MatrixTransformation3D.h b/src/SceneGraph/MatrixTransformation3D.h index 86989a3f5..3cc8dd00f 100644 --- a/src/SceneGraph/MatrixTransformation3D.h +++ b/src/SceneGraph/MatrixTransformation3D.h @@ -88,6 +88,11 @@ class MatrixTransformation3D: public AbstractTranslationRotationScaling3D { return this; } + inline MatrixTransformation3D* resetTransformation() override { + setTransformation({}); + return this; + } + /** * @brief Multiply transformation * @param transformation Transformation diff --git a/src/SceneGraph/RigidMatrixTransformation2D.h b/src/SceneGraph/RigidMatrixTransformation2D.h index cb6e72f7a..c8ba75829 100644 --- a/src/SceneGraph/RigidMatrixTransformation2D.h +++ b/src/SceneGraph/RigidMatrixTransformation2D.h @@ -75,15 +75,6 @@ class RigidMatrixTransformation2D: public AbstractTranslationRotation2D { } #endif - /** - * @brief Reset transformation to default - * @return Pointer to self (for method chaining) - */ - inline RigidMatrixTransformation2D* resetTransformation() { - setTransformation({}); - return this; - } - /** * @brief Normalize rotation part * @return Pointer to self (for method chaining) @@ -98,6 +89,11 @@ class RigidMatrixTransformation2D: public AbstractTranslationRotation2D { return this; } + inline RigidMatrixTransformation2D* resetTransformation() override { + setTransformation({}); + return this; + } + /** @copydoc AbstractTranslationRotation2D::translate() */ inline RigidMatrixTransformation2D* translate(const Math::Vector2& vector, TransformationType type = TransformationType::Global) override { transform(Math::Matrix3::translation(vector), type); diff --git a/src/SceneGraph/RigidMatrixTransformation3D.h b/src/SceneGraph/RigidMatrixTransformation3D.h index 90248860a..f76cb1b23 100644 --- a/src/SceneGraph/RigidMatrixTransformation3D.h +++ b/src/SceneGraph/RigidMatrixTransformation3D.h @@ -75,15 +75,6 @@ class RigidMatrixTransformation3D: public AbstractTranslationRotation3D { } #endif - /** - * @brief Reset transformation to default - * @return Pointer to self (for method chaining) - */ - inline RigidMatrixTransformation3D* resetTransformation() { - setTransformation({}); - return this; - } - /** * @brief Normalize rotation part * @return Pointer to self (for method chaining) @@ -98,6 +89,11 @@ class RigidMatrixTransformation3D: public AbstractTranslationRotation3D { return this; } + inline RigidMatrixTransformation3D* resetTransformation() override { + setTransformation({}); + return this; + } + /** * @brief Translate object * @param vector Translation vector diff --git a/src/SceneGraph/Test/MatrixTransformation2DTest.cpp b/src/SceneGraph/Test/MatrixTransformation2DTest.cpp index 976fb46b2..91576e87f 100644 --- a/src/SceneGraph/Test/MatrixTransformation2DTest.cpp +++ b/src/SceneGraph/Test/MatrixTransformation2DTest.cpp @@ -42,6 +42,7 @@ class MatrixTransformation2DTest: public Corrade::TestSuite::Tester { void inverted(); void setTransformation(); + void resetTransformation(); void transform(); void translate(); void rotate(); @@ -56,6 +57,7 @@ MatrixTransformation2DTest::MatrixTransformation2DTest() { &MatrixTransformation2DTest::inverted, &MatrixTransformation2DTest::setTransformation, + &MatrixTransformation2DTest::resetTransformation, &MatrixTransformation2DTest::transform, &MatrixTransformation2DTest::translate, &MatrixTransformation2DTest::rotate, @@ -102,6 +104,14 @@ void MatrixTransformation2DTest::setTransformation() { CORRADE_COMPARE(s.transformationMatrix(), Matrix3()); } +void MatrixTransformation2DTest::resetTransformation() { + Object2D o; + o.rotate(Deg(17.0f)); + CORRADE_VERIFY(o.transformationMatrix() != Matrix3()); + o.resetTransformation(); + CORRADE_COMPARE(o.transformationMatrix(), Matrix3()); +} + void MatrixTransformation2DTest::transform() { { Object2D o; diff --git a/src/SceneGraph/Test/MatrixTransformation3DTest.cpp b/src/SceneGraph/Test/MatrixTransformation3DTest.cpp index ce624065f..651d8101d 100644 --- a/src/SceneGraph/Test/MatrixTransformation3DTest.cpp +++ b/src/SceneGraph/Test/MatrixTransformation3DTest.cpp @@ -42,6 +42,7 @@ class MatrixTransformation3DTest: public Corrade::TestSuite::Tester { void inverted(); void setTransformation(); + void resetTransformation(); void transform(); void translate(); void rotate(); @@ -56,6 +57,7 @@ MatrixTransformation3DTest::MatrixTransformation3DTest() { &MatrixTransformation3DTest::inverted, &MatrixTransformation3DTest::setTransformation, + &MatrixTransformation3DTest::resetTransformation, &MatrixTransformation3DTest::transform, &MatrixTransformation3DTest::translate, &MatrixTransformation3DTest::rotate, @@ -102,6 +104,14 @@ void MatrixTransformation3DTest::setTransformation() { CORRADE_COMPARE(s.transformationMatrix(), Matrix4()); } +void MatrixTransformation3DTest::resetTransformation() { + Object3D o; + o.rotateX(Deg(17.0f)); + CORRADE_VERIFY(o.transformationMatrix() != Matrix4()); + o.resetTransformation(); + CORRADE_COMPARE(o.transformationMatrix(), Matrix4()); +} + void MatrixTransformation3DTest::transform() { { Object3D o; diff --git a/src/SceneGraph/Test/RigidMatrixTransformation2DTest.cpp b/src/SceneGraph/Test/RigidMatrixTransformation2DTest.cpp index c254413da..229ee5b04 100644 --- a/src/SceneGraph/Test/RigidMatrixTransformation2DTest.cpp +++ b/src/SceneGraph/Test/RigidMatrixTransformation2DTest.cpp @@ -42,6 +42,7 @@ class RigidMatrixTransformation2DTest: public Corrade::TestSuite::Tester { void inverted(); void setTransformation(); + void resetTransformation(); void translate(); void rotate(); void reflect(); @@ -55,6 +56,7 @@ RigidMatrixTransformation2DTest::RigidMatrixTransformation2DTest() { &RigidMatrixTransformation2DTest::inverted, &RigidMatrixTransformation2DTest::setTransformation, + &RigidMatrixTransformation2DTest::resetTransformation, &RigidMatrixTransformation2DTest::translate, &RigidMatrixTransformation2DTest::rotate, &RigidMatrixTransformation2DTest::reflect, @@ -97,6 +99,14 @@ void RigidMatrixTransformation2DTest::setTransformation() { CORRADE_COMPARE(s.transformationMatrix(), Matrix3()); } +void RigidMatrixTransformation2DTest::resetTransformation() { + Object2D o; + o.rotate(Deg(17.0f)); + CORRADE_VERIFY(o.transformationMatrix() != Matrix3()); + o.resetTransformation(); + CORRADE_COMPARE(o.transformationMatrix(), Matrix3()); +} + void RigidMatrixTransformation2DTest::translate() { { Object2D o; diff --git a/src/SceneGraph/Test/RigidMatrixTransformation3DTest.cpp b/src/SceneGraph/Test/RigidMatrixTransformation3DTest.cpp index 424ee5a76..e392db2ed 100644 --- a/src/SceneGraph/Test/RigidMatrixTransformation3DTest.cpp +++ b/src/SceneGraph/Test/RigidMatrixTransformation3DTest.cpp @@ -42,6 +42,7 @@ class RigidMatrixTransformation3DTest: public Corrade::TestSuite::Tester { void inverted(); void setTransformation(); + void resetTransformation(); void translate(); void rotate(); void reflect(); @@ -55,6 +56,7 @@ RigidMatrixTransformation3DTest::RigidMatrixTransformation3DTest() { &RigidMatrixTransformation3DTest::inverted, &RigidMatrixTransformation3DTest::setTransformation, + &RigidMatrixTransformation3DTest::resetTransformation, &RigidMatrixTransformation3DTest::translate, &RigidMatrixTransformation3DTest::rotate, &RigidMatrixTransformation3DTest::reflect, @@ -97,6 +99,14 @@ void RigidMatrixTransformation3DTest::setTransformation() { CORRADE_COMPARE(s.transformationMatrix(), Matrix4()); } +void RigidMatrixTransformation3DTest::resetTransformation() { + Object3D o; + o.rotateX(Deg(17.0f)); + CORRADE_VERIFY(o.transformationMatrix() != Matrix4()); + o.resetTransformation(); + CORRADE_COMPARE(o.transformationMatrix(), Matrix4()); +} + void RigidMatrixTransformation3DTest::translate() { { Object3D o;