cgma
|
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