cgma
CubitTransformMatrix.hpp
Go to the documentation of this file.
00001 //       Class: CubitTransformMatrix
00002 //
00003 // Description: A 4-Dimensional Matrix.  Essentially the same as
00004 //              a generic CubitMatrix, except that it has some
00005 //              extra 3D transformation functions.
00006 //
00007 //              All transformations are pre-multiplications,
00008 //              meaning that M*V will transform a point V
00009 //              in the same order transformations are applied to M.
00010 //
00011 //      Owner: Darryl Melander
00012 
00013 #ifndef CUBIT_MATRIX_4D_HPP
00014 #define CUBIT_MATRIX_4D_HPP
00015 
00016 #include "CubitMatrix.hpp"
00017 #include "CubitVector.hpp"
00018 #include "CGMUtilConfigure.h"
00019 
00020 class CUBIT_UTIL_EXPORT CubitTransformMatrix : public CubitMatrix
00021 {
00022 public:
00023   CubitTransformMatrix();
00024   CubitTransformMatrix(const CubitTransformMatrix& from);
00025   ~CubitTransformMatrix();
00026   
00027   CubitTransformMatrix& translate(const CubitVector& v);
00028   CubitTransformMatrix& translate (double x, double y, double z);
00029   
00030   CubitTransformMatrix& rotate(double degrees, const CubitVector& vector);
00031   CubitTransformMatrix& rotate(double degrees, char axis);
00032   CubitTransformMatrix& rotate(double degrees, const CubitVector& axis_from,
00033                         const CubitVector& axis_to);
00034 
00035   void get_rotation_axis_and_angle(CubitVector &rotation_axis, double &angle);
00036   
00037   CubitTransformMatrix& reflect(const CubitVector& vector);
00038 
00039   CubitTransformMatrix& scale_about_origin (const CubitVector& scale);
00040   CubitTransformMatrix& scale_about_origin (double x, double y, double z);
00041   CubitTransformMatrix& scale_about_origin (double scale);
00042   CubitTransformMatrix& inverse();
00043   
00044   CubitVector operator* (const CubitVector& point) const;
00045   friend CUBIT_UTIL_EXPORT CubitVector operator* (const CubitVector& point,
00046                                 const CubitTransformMatrix& matrix);
00047   
00048   CubitTransformMatrix operator*(const CubitTransformMatrix& matrix) const;
00049   CubitMatrix operator*(const CubitMatrix& matrix) const;
00050   CubitTransformMatrix operator*(double val) const;
00051     
00053   CubitVector origin() const;
00055   CubitVector x_axis() const;
00057   CubitVector y_axis() const;
00059   CubitVector z_axis() const;
00060   
00061   // convenience helper for making transform matrices
00062   static CubitTransformMatrix construct_matrix(const CubitVector& origin,
00063                                                const CubitVector& x_axis,
00064                                                const CubitVector& y_axis);
00065 
00066   void print_me() const;
00067 };
00068 
00069 #endif
00070 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines