/* -*- C++ -*- ------------------------------------------------------------ Copyright (c) 2007 Jesse Anders and Demian Nave http://cmldev.net/ The Configurable Math Library (CML) is distributed under the terms of the Boost Software License, v1.0 (see cml/LICENSE for details). *-----------------------------------------------------------------------*/ /** @file * @brief */ #ifndef matrix_concat_h #define matrix_concat_h #include /* This will all most likely be abstracted away in a future version of the * CML. For now, this file provides support for functions that need to * concatenate transformation matrices in a basis-independent manner. * * @todo: The 2x2 and 3x3 versions of these functions are currently in * matrix_rotation.h. They should be moved here. */ namespace cml { namespace detail { /** A fixed-size temporary 4x4 matrix */ #define MAT_TEMP_4X4 matrix< \ typename et::ScalarPromote< \ typename MatT_1::value_type, \ typename MatT_2::value_type \ >::type, \ fixed<4,4>, \ typename MatT_1::basis_orient, \ typename MatT_1::layout \ > template < class MatT_1, class MatT_2 > MAT_TEMP_4X4 matrix_concat_transforms_4x4(const MatT_1& m1, const MatT_2& m2, row_basis) { return m1*m2; } /** Concatenate two 3D col-basis rotation matrices in the order m1->m2 */ template < class MatT_1, class MatT_2 > MAT_TEMP_4X4 matrix_concat_transforms_4x4(const MatT_1& m1, const MatT_2& m2, col_basis) { return m2*m1; } /** Concatenate two 3D rotation matrices in the order m1->m2 */ template < class MatT_1, class MatT_2 > MAT_TEMP_4X4 matrix_concat_transforms_4x4(const MatT_1& m1, const MatT_2& m2) { return matrix_concat_transforms_4x4(m1,m2,typename MatT_1::basis_orient()); } #undef MAT_TEMP_4x4 } // namespace detail } // namespace cml #endif