Browse Source

Math: debug operator for Bezier.

pull/175/merge
Vladimír Vondruš 10 years ago
parent
commit
719aff99b2
  1. 24
      src/Magnum/Math/Bezier.h
  2. 13
      src/Magnum/Math/Test/BezierTest.cpp
  3. 10
      src/Magnum/Math/instantiation.cpp

24
src/Magnum/Math/Bezier.h

@ -198,6 +198,30 @@ and @ref Bezier for more information.
template<class T> using CubicBezier3D = CubicBezier<3, T>;
#endif
/** @debugoperator{Magnum::Math::Bezier} */
template<UnsignedInt order, UnsignedInt dimensions, class T> Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug& debug, const Bezier<order, dimensions, T>& value) {
debug << "Bezier(" << Corrade::Utility::Debug::nospace;
for(UnsignedInt o = 0; o != order + 1; ++o) {
debug << (o ? ", {" : "{") << Corrade::Utility::Debug::nospace << value[o][0] << Corrade::Utility::Debug::nospace;
for(UnsignedInt i = 1; i != dimensions; ++i)
debug << "," << value[o][i] << Corrade::Utility::Debug::nospace;
debug << "}" << Corrade::Utility::Debug::nospace;
}
return debug << ")";
}
/* Explicit instantiation for types used in OpenGL */
#ifndef DOXYGEN_GENERATING_OUTPUT
extern template MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<2, 2, Float>&);
extern template MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<2, 3, Float>&);
extern template MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<3, 2, Float>&);
extern template MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<3, 3, Float>&);
extern template MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<2, 2, Double>&);
extern template MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<2, 3, Double>&);
extern template MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<3, 2, Double>&);
extern template MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<3, 3, Double>&);
#endif
}}
#endif

13
src/Magnum/Math/Test/BezierTest.cpp

@ -24,6 +24,7 @@
DEALINGS IN THE SOFTWARE.
*/
#include <sstream>
#include <Corrade/TestSuite/Tester.h>
#include "Magnum/Math/Bezier.h"
@ -43,13 +44,17 @@ struct BezierTest : Corrade::TestSuite::Tester {
void lerpQuadratic();
void lerpCubic();
void debug();
};
BezierTest::BezierTest() {
addTests({&BezierTest::implicitConstructor,
&BezierTest::lerpQuadratic,
&BezierTest::lerpCubic});
&BezierTest::lerpCubic,
&BezierTest::debug});
}
void BezierTest::implicitConstructor() {
@ -80,6 +85,12 @@ void BezierTest::lerpCubic() {
}
}
void BezierTest::debug() {
std::ostringstream out;
Debug(&out) << CubicBezier2D{Vector2{0.0f, 1.0f}, Vector2{1.5f, -0.3f}, Vector2{2.1f, 0.5f}, Vector2{0.0f, 2.0f}};
CORRADE_COMPARE(out.str(), "Bezier({0, 1}, {1.5, -0.3}, {2.1, 0.5}, {0, 2})\n");
}
}}}
CORRADE_TEST_MAIN(Magnum::Math::Test::BezierTest)

10
src/Magnum/Math/instantiation.cpp

@ -23,6 +23,7 @@
DEALINGS IN THE SOFTWARE.
*/
#include "Magnum/Math/Bezier.h"
#include "Magnum/Math/DualComplex.h"
#include "Magnum/Math/DualQuaternion.h"
#include "Magnum/Math/Range.h"
@ -76,6 +77,15 @@ template struct ConfigurationValue<Magnum::Math::Range<3, Magnum::Double>>;
namespace Magnum { namespace Math {
#ifndef DOXYGEN_GENERATING_OUTPUT
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<2, 2, Float>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<2, 3, Float>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<3, 2, Float>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<3, 3, Float>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<2, 2, Double>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<2, 3, Double>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<3, 2, Double>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Bezier<3, 3, Double>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Complex<Float>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Complex<Double>&);

Loading…
Cancel
Save