1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/affinematrix2dbase.h
3 // Purpose: Common interface for 2D transformation matrices.
4 // Author: Catalin Raceanu
6 // Copyright: (c) wxWidgets team
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
10 #ifndef _WX_AFFINEMATRIX2DBASE_H_
11 #define _WX_AFFINEMATRIX2DBASE_H_
17 #include "wx/geometry.h"
21 wxMatrix2D(wxDouble v11
= 1,
26 m_11
= v11
; m_12
= v12
;
27 m_21
= v21
; m_22
= v22
;
30 wxDouble m_11
, m_12
, m_21
, m_22
;
33 // A 2x3 matrix representing an affine 2D transformation.
35 // This is an abstract base class implemented by wxAffineMatrix2D only so far,
36 // but in the future we also plan to derive wxGraphicsMatrix from it (it should
37 // also be documented then as currently only wxAffineMatrix2D itself is).
38 class WXDLLIMPEXP_CORE wxAffineMatrix2DBase
41 wxAffineMatrix2DBase() {}
42 virtual ~wxAffineMatrix2DBase() {}
44 // sets the matrix to the respective values
45 virtual void Set(const wxMatrix2D
& mat2D
, const wxPoint2DDouble
& tr
) = 0;
47 // gets the component valuess of the matrix
48 virtual void Get(wxMatrix2D
* mat2D
, wxPoint2DDouble
* tr
) const = 0;
50 // concatenates the matrix
51 virtual void Concat(const wxAffineMatrix2DBase
& t
) = 0;
53 // makes this the inverse matrix
54 virtual bool Invert() = 0;
56 // return true if this is the identity matrix
57 virtual bool IsIdentity() const = 0;
59 // returns true if the elements of the transformation matrix are equal ?
60 virtual bool IsEqual(const wxAffineMatrix2DBase
& t
) const = 0;
61 bool operator==(const wxAffineMatrix2DBase
& t
) const { return IsEqual(t
); }
62 bool operator!=(const wxAffineMatrix2DBase
& t
) const { return !IsEqual(t
); }
69 // add the translation to this matrix
70 virtual void Translate(wxDouble dx
, wxDouble dy
) = 0;
72 // add the scale to this matrix
73 virtual void Scale(wxDouble xScale
, wxDouble yScale
) = 0;
75 // add the rotation to this matrix (counter clockwise, radians)
76 virtual void Rotate(wxDouble ccRadians
) = 0;
78 // add mirroring to this matrix
79 void Mirror(int direction
= wxHORIZONTAL
)
81 wxDouble x
= (direction
& wxHORIZONTAL
) ? -1 : 1;
82 wxDouble y
= (direction
& wxVERTICAL
) ? -1 : 1;
87 // applies that matrix to the point
88 wxPoint2DDouble
TransformPoint(const wxPoint2DDouble
& src
) const
90 return DoTransformPoint(src
);
93 void TransformPoint(wxDouble
* x
, wxDouble
* y
) const
95 wxCHECK_RET( x
&& y
, "Can't be NULL" );
97 const wxPoint2DDouble dst
= DoTransformPoint(wxPoint2DDouble(*x
, *y
));
102 // applies the matrix except for translations
103 wxPoint2DDouble
TransformDistance(const wxPoint2DDouble
& src
) const
105 return DoTransformDistance(src
);
108 void TransformDistance(wxDouble
* dx
, wxDouble
* dy
) const
110 wxCHECK_RET( dx
&& dy
, "Can't be NULL" );
112 const wxPoint2DDouble
113 dst
= DoTransformDistance(wxPoint2DDouble(*dx
, *dy
));
120 wxPoint2DDouble
DoTransformPoint(const wxPoint2DDouble
& p
) const = 0;
122 wxPoint2DDouble
DoTransformDistance(const wxPoint2DDouble
& p
) const = 0;
125 #endif // wxUSE_GEOMETRY
127 #endif // _WX_AFFINEMATRIX2DBASE_H_