From e4f14c4163ed399b4135e7519c20d97a9462a4a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 15 Mar 2013 11:09:39 +0100 Subject: [PATCH] SceneGraph: assert proper matrix type in RigidMatrixTransformation*D. --- src/SceneGraph/RigidMatrixTransformation2D.h | 4 +++- src/SceneGraph/RigidMatrixTransformation3D.h | 4 +++- src/SceneGraph/Test/CMakeLists.txt | 4 ++++ src/SceneGraph/Test/RigidMatrixTransformation2DTest.cpp | 6 ++++++ src/SceneGraph/Test/RigidMatrixTransformation3DTest.cpp | 6 ++++++ 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/SceneGraph/RigidMatrixTransformation2D.h b/src/SceneGraph/RigidMatrixTransformation2D.h index c8ba75829..20a79dd02 100644 --- a/src/SceneGraph/RigidMatrixTransformation2D.h +++ b/src/SceneGraph/RigidMatrixTransformation2D.h @@ -54,7 +54,9 @@ class RigidMatrixTransformation2D: public AbstractTranslationRotation2D { typedef typename DimensionTraits<2, T>::MatrixType DataType; #ifndef DOXYGEN_GENERATING_OUTPUT - inline constexpr static Math::Matrix3 fromMatrix(const Math::Matrix3& matrix) { + inline static Math::Matrix3 fromMatrix(const Math::Matrix3& matrix) { + CORRADE_ASSERT(matrix.isRigidTransformation(), + "SceneGraph::RigidMatrixTransformation2D::fromMatrix(): the matrix doesn't represent rigid transformation", {}); return matrix; } diff --git a/src/SceneGraph/RigidMatrixTransformation3D.h b/src/SceneGraph/RigidMatrixTransformation3D.h index f76cb1b23..e89ceb498 100644 --- a/src/SceneGraph/RigidMatrixTransformation3D.h +++ b/src/SceneGraph/RigidMatrixTransformation3D.h @@ -54,7 +54,9 @@ class RigidMatrixTransformation3D: public AbstractTranslationRotation3D { typedef typename DimensionTraits<3, T>::MatrixType DataType; #ifndef DOXYGEN_GENERATING_OUTPUT - inline constexpr static Math::Matrix4 fromMatrix(const Math::Matrix4& matrix) { + inline static Math::Matrix4 fromMatrix(const Math::Matrix4& matrix) { + CORRADE_ASSERT(matrix.isRigidTransformation(), + "SceneGraph::RigidMatrixTransformation3D::fromMatrix(): the matrix doesn't represent rigid transformation", {}); return matrix; } diff --git a/src/SceneGraph/Test/CMakeLists.txt b/src/SceneGraph/Test/CMakeLists.txt index 8396b2a54..8839941a1 100644 --- a/src/SceneGraph/Test/CMakeLists.txt +++ b/src/SceneGraph/Test/CMakeLists.txt @@ -30,3 +30,7 @@ corrade_add_test(SceneGraphObjectTest ObjectTest.cpp LIBRARIES MagnumSceneGraphT corrade_add_test(SceneGraphRigidMatrixTransfor___2DTest RigidMatrixTransformation2DTest.cpp LIBRARIES MagnumSceneGraph) corrade_add_test(SceneGraphRigidMatrixTransfor___3DTest RigidMatrixTransformation3DTest.cpp LIBRARIES MagnumSceneGraph) corrade_add_test(SceneGraphSceneTest SceneTest.cpp LIBRARIES MagnumSceneGraph) + +set_target_properties(SceneGraphRigidMatrixTransfor___2DTest + SceneGraphRigidMatrixTransfor___3DTest + PROPERTIES COMPILE_FLAGS "-DCORRADE_GRACEFUL_ASSERT") diff --git a/src/SceneGraph/Test/RigidMatrixTransformation2DTest.cpp b/src/SceneGraph/Test/RigidMatrixTransformation2DTest.cpp index 229ee5b04..2457b3ac9 100644 --- a/src/SceneGraph/Test/RigidMatrixTransformation2DTest.cpp +++ b/src/SceneGraph/Test/RigidMatrixTransformation2DTest.cpp @@ -22,6 +22,7 @@ DEALINGS IN THE SOFTWARE. */ +#include #include #include "SceneGraph/RigidMatrixTransformation2D.h" @@ -64,6 +65,11 @@ RigidMatrixTransformation2DTest::RigidMatrixTransformation2DTest() { } void RigidMatrixTransformation2DTest::fromMatrix() { + std::ostringstream o; + Error::setOutput(&o); + RigidMatrixTransformation2D<>::fromMatrix(Matrix3::scaling(Vector2(4.0f))); + CORRADE_COMPARE(o.str(), "SceneGraph::RigidMatrixTransformation2D::fromMatrix(): the matrix doesn't represent rigid transformation\n"); + Matrix3 m = Matrix3::rotation(Deg(17.0f))*Matrix3::translation({1.0f, -0.3f}); CORRADE_COMPARE(RigidMatrixTransformation2D<>::fromMatrix(m), m); } diff --git a/src/SceneGraph/Test/RigidMatrixTransformation3DTest.cpp b/src/SceneGraph/Test/RigidMatrixTransformation3DTest.cpp index e392db2ed..a154a487f 100644 --- a/src/SceneGraph/Test/RigidMatrixTransformation3DTest.cpp +++ b/src/SceneGraph/Test/RigidMatrixTransformation3DTest.cpp @@ -22,6 +22,7 @@ DEALINGS IN THE SOFTWARE. */ +#include #include #include "SceneGraph/RigidMatrixTransformation3D.h" @@ -64,6 +65,11 @@ RigidMatrixTransformation3DTest::RigidMatrixTransformation3DTest() { } void RigidMatrixTransformation3DTest::fromMatrix() { + std::ostringstream o; + Error::setOutput(&o); + RigidMatrixTransformation3D<>::fromMatrix(Matrix4::scaling(Vector3(4.0f))); + CORRADE_COMPARE(o.str(), "SceneGraph::RigidMatrixTransformation3D::fromMatrix(): the matrix doesn't represent rigid transformation\n"); + Matrix4 m = Matrix4::rotationX(Deg(17.0f))*Matrix4::translation({1.0f, -0.3f, 2.3f}); CORRADE_COMPARE(RigidMatrixTransformation3D<>::fromMatrix(m), m); }