Main Page   Class Hierarchy   Compound List   File List   Compound Members  

wxmatrix.h

00001 
00002 // Name:        matrix.h
00003 // Purpose:     wxTransformMatrix class. NOT YET USED
00005 // Modified by:  Klaas Holwerda
00006 // Created:     01/02/97
00007 // RCS-ID:      $Id: wxmatrix.h,v 1.7 2000/11/20 09:14:14 protools Exp $
00008 // Copyright:   (c) Julian Smart and Markus Holzem
00009 // Licence:     wxWindows licence
00011 
00012 #ifndef _WX_MATRIXH__
00013 #define _WX_MATRIXH__
00014 
00015 #ifdef __GNUG__
00016 #pragma interface "matrix.h"
00017 #endif
00018 
00019 #include "wx/object.h"
00020 
00021 
00023 
00033 class WXDLLEXPORT wxTransformMatrix: public wxObject
00034 {
00035 public:
00036         wxTransformMatrix(void);
00037         wxTransformMatrix(const wxTransformMatrix& mat);
00038 
00042         double GetValue(int col, int row) const;
00043 
00047         void SetValue(int col, int row, double value);
00048 
00049         void operator = (const wxTransformMatrix& mat);
00050         bool operator == (const wxTransformMatrix& mat);
00051         bool operator != (const wxTransformMatrix& mat);
00052 
00054     wxTransformMatrix&                  operator*=(const double& t);
00056     wxTransformMatrix&                  operator/=(const double& t);
00058     wxTransformMatrix&                  operator+=(const wxTransformMatrix& m);
00060     wxTransformMatrix&                  operator-=(const wxTransformMatrix& m);
00062     wxTransformMatrix&                  operator*=(const wxTransformMatrix& m);
00063 
00065 
00067     wxTransformMatrix                   operator*(const double& t) const;
00069     wxTransformMatrix                   operator/(const double& t) const;
00071     wxTransformMatrix                   operator+(const wxTransformMatrix& m) const;
00073     wxTransformMatrix                   operator-(const wxTransformMatrix& m) const;
00075     wxTransformMatrix                   operator*(const wxTransformMatrix& m) const;
00076     wxTransformMatrix                   operator-() const;
00077 
00080         double& operator()(int col, int row);
00081 
00084         double operator()(int col, int row) const;
00085 
00087         bool Invert(void);
00088 
00090         bool Identity(void);
00091 
00095         inline bool IsIdentity(void) const { return m_isIdentity; };
00096 
00098         inline bool IsIdentity1(void) const ;
00099 
00101 
00108         bool Scale(double scale);
00109 
00112 
00119         wxTransformMatrix&      Scale(const double &xs, const double &ys,const double &xc, const double &yc);
00120 
00122 
00130         wxTransformMatrix&      Mirror(bool x=true, bool y=false);
00131 
00133 
00141         bool Translate(double x, double y);
00142 
00144 
00151         bool Rotate(double angle);
00152 
00155 
00163         wxTransformMatrix&      Rotate(const double &r, const double &x, const double &y);
00164 
00166         inline double TransformX(double x) const;
00167 
00169         inline double TransformY(double y) const;
00170 
00172         bool TransformPoint(double x, double y, double& tx, double& ty) const;
00173 
00175 
00189         bool InverseTransformPoint(double x, double y, double& tx, double& ty) const;
00190 
00191         double Get_scaleX();
00192         double Get_scaleY();
00193     double GetRotation();
00194     void   SetRotation(double rotation);
00195 
00196 
00197 public:
00198     double      m_matrix[3][3];
00199         bool    m_isIdentity;
00200 };
00201 
00202 
00203 /*
00204 Chris Breeze reported, that
00205 some functions of wxTransformMatrix cannot work because it is not
00206 known if he matrix has been inverted. Be careful when using it.
00207 */
00208 
00215 inline double wxTransformMatrix::TransformX(double x) const
00216 {
00220         return (m_isIdentity ? x : (x * m_matrix[0][0] +  m_matrix[2][0]));
00221 }
00222 
00229 inline double wxTransformMatrix::TransformY(double y) const
00230 {
00234         return (m_isIdentity ? y : (y * m_matrix[1][1] + m_matrix[2][1]));
00235 }
00236 
00237 
00240 inline bool wxTransformMatrix::IsIdentity1(void) const
00241 {
00242         return
00243          (m_matrix[0][0] == 1.0 &&
00244           m_matrix[1][1] == 1.0 &&
00245           m_matrix[2][2] == 1.0 &&
00246           m_matrix[1][0] == 0.0 &&
00247           m_matrix[2][0] == 0.0 &&
00248           m_matrix[0][1] == 0.0 &&
00249           m_matrix[2][1] == 0.0 &&
00250           m_matrix[0][2] == 0.0 &&
00251           m_matrix[1][2] == 0.0) ;
00252 }
00253 
00255 inline double wxCalculateDet(double a11, double a21, double a12, double a22)
00256 {
00257         return a11 * a22 - a12 * a21;
00258 }
00259 
00260 #endif
00261 
wxmatrix.h Source File -- Thu Nov 28 21:24:56 2002 -- 28 Nov 2002 -- 1.2.18 -- -- . -- Main Page