From 0249c6f8a82496480dc5609e3ee46b6051845741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 4 May 2013 00:36:44 +0200 Subject: [PATCH] SceneGraph: make method chaining in Abstract* transformations usable. --- src/SceneGraph/AbstractTranslationRotation2D.h | 5 +++++ src/SceneGraph/AbstractTranslationRotation3D.h | 5 +++++ src/SceneGraph/AbstractTranslationRotationScaling2D.h | 7 +++++++ src/SceneGraph/AbstractTranslationRotationScaling3D.h | 10 ++++++++++ 4 files changed, 27 insertions(+) diff --git a/src/SceneGraph/AbstractTranslationRotation2D.h b/src/SceneGraph/AbstractTranslationRotation2D.h index 4186fee24..d301fb155 100644 --- a/src/SceneGraph/AbstractTranslationRotation2D.h +++ b/src/SceneGraph/AbstractTranslationRotation2D.h @@ -63,6 +63,11 @@ class AbstractTranslationRotation2D: public AbstractTransformation<2, T> { * @return Pointer to self (for method chaining) */ virtual AbstractTranslationRotation2D* rotate(Math::Rad angle, TransformationType type = TransformationType::Global) = 0; + + /* Overloads to remove WTF-factor from method chaining order */ + #ifndef DOXYGEN_GENERATING_OUTPUT + AbstractTranslationRotation2D* resetTransformation() override = 0; + #endif }; }} diff --git a/src/SceneGraph/AbstractTranslationRotation3D.h b/src/SceneGraph/AbstractTranslationRotation3D.h index 99f735d58..a8355eebd 100644 --- a/src/SceneGraph/AbstractTranslationRotation3D.h +++ b/src/SceneGraph/AbstractTranslationRotation3D.h @@ -107,6 +107,11 @@ class AbstractTranslationRotation3D: public AbstractTransformation<3, T> { virtual AbstractTranslationRotation3D* rotateZ(Math::Rad angle, TransformationType type = TransformationType::Global) { return rotate(angle, Math::Vector3::zAxis(), type); } + + /* Overloads to remove WTF-factor from method chaining order */ + #ifndef DOXYGEN_GENERATING_OUTPUT + AbstractTranslationRotation3D* resetTransformation() override = 0; + #endif }; }} diff --git a/src/SceneGraph/AbstractTranslationRotationScaling2D.h b/src/SceneGraph/AbstractTranslationRotationScaling2D.h index 4b9458631..448b4617f 100644 --- a/src/SceneGraph/AbstractTranslationRotationScaling2D.h +++ b/src/SceneGraph/AbstractTranslationRotationScaling2D.h @@ -55,6 +55,13 @@ class AbstractTranslationRotationScaling2D: public AbstractTranslationRotation2D * @see Vector2::xScale(), Vector2::yScale() */ virtual AbstractTranslationRotationScaling2D* scale(const Math::Vector2& vector, TransformationType type = TransformationType::Global) = 0; + + /* Overloads to remove WTF-factor from method chaining order */ + #ifndef DOXYGEN_GENERATING_OUTPUT + AbstractTranslationRotationScaling2D* resetTransformation() override = 0; + AbstractTranslationRotationScaling2D* translate(const Math::Vector2& vector, TransformationType type = TransformationType::Global) = 0; + AbstractTranslationRotationScaling2D* rotate(Math::Rad angle, TransformationType type = TransformationType::Global) = 0; + #endif }; }} diff --git a/src/SceneGraph/AbstractTranslationRotationScaling3D.h b/src/SceneGraph/AbstractTranslationRotationScaling3D.h index 60049e776..f201b40c2 100644 --- a/src/SceneGraph/AbstractTranslationRotationScaling3D.h +++ b/src/SceneGraph/AbstractTranslationRotationScaling3D.h @@ -55,6 +55,16 @@ class AbstractTranslationRotationScaling3D: public AbstractTranslationRotation3D * @see Vector3::xScale(), Vector3::yScale(), Vector3::zScale() */ virtual AbstractTranslationRotationScaling3D* scale(const Math::Vector3& vector, TransformationType type = TransformationType::Global) = 0; + + /* Overloads to remove WTF-factor from method chaining order */ + #ifndef DOXYGEN_GENERATING_OUTPUT + AbstractTranslationRotationScaling3D* resetTransformation() override = 0; + AbstractTranslationRotationScaling3D* translate(const Math::Vector3& vector, TransformationType type = TransformationType::Global) = 0; + AbstractTranslationRotationScaling3D* rotate(Math::Rad angle, const Math::Vector3& normalizedAxis, TransformationType type = TransformationType::Global) = 0; + AbstractTranslationRotationScaling3D* rotateX(Math::Rad angle, TransformationType type = TransformationType::Global) = 0; + AbstractTranslationRotationScaling3D* rotateY(Math::Rad angle, TransformationType type = TransformationType::Global) = 0; + AbstractTranslationRotationScaling3D* rotateZ(Math::Rad angle, TransformationType type = TransformationType::Global) override = 0; + #endif }; }}