]> git.saurik.com Git - wxWidgets.git/blob - interface/wx/affinematrix2dbase.h
put both versions of wxGetMousePosition in one place so they can use one implementation
[wxWidgets.git] / interface / wx / affinematrix2dbase.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: affinematrix2dbase.h
3 // Purpose: wxMatrix2D documentation
4 // Author: wxWidgets team
5 // Licence: wxWindows licence
6 /////////////////////////////////////////////////////////////////////////////
7
8 /**
9 @class wxMatrix2D
10
11 A simple container for 2x2 matrix.
12
13 This simple structure is used with wxAffineMatrix2D.
14
15 @library{wxcore}
16 @category{misc}
17
18 @since 2.9.2
19 */
20 struct wxMatrix2D
21 {
22 /**
23 Default constructor.
24
25 Initializes the matrix elements to the identity.
26 */
27 wxMatrix2D(wxDouble v11 = 1,
28 wxDouble v12 = 0,
29 wxDouble v21 = 0,
30 wxDouble v22 = 1);
31
32 /// The matrix elements in the usual mathematical notation.
33 wxDouble m_11, m_12, m_21, m_22;
34 };
35
36
37 /**
38 @class wxAffineMatrix2DBase
39
40 A 2x3 matrix representing an affine 2D transformation.
41
42 This is an abstract base class implemented by wxAffineMatrix2D only so far,
43 but in the future we also plan to derive wxGraphicsMatrix from it.
44
45 @library{wxcore}
46 @category{misc}
47
48 @since 2.9.2
49 */
50 class wxAffineMatrix2DBase
51 {
52 public:
53 /**
54 Default constructor.
55
56 The matrix elements are initialize to the identity matrix.
57 */
58 wxAffineMatrix2DBase();
59 virtual ~wxAffineMatrix2DBase();
60
61 /**
62 Set all elements of this matrix.
63
64 @param mat2D
65 The rotational components of the matrix (upper 2 x 2).
66 @param tr
67 The translational components of the matrix.
68 */
69 virtual void Set(const wxMatrix2D& mat2D, const wxPoint2DDouble& tr) = 0;
70
71 /**
72 Get the component values of the matrix.
73
74 @param mat2D
75 The rotational components of the matrix (upper 2 x 2), must be
76 non-@NULL.
77 @param tr
78 The translational components of the matrix, may be @NULL.
79 */
80 virtual void Get(wxMatrix2D* mat2D, wxPoint2DDouble* tr) const = 0;
81
82 /**
83 Concatenate this matrix with another one.
84
85 The parameter matrix is the multiplicand.
86
87 @param t
88 The multiplicand.
89
90 @code
91 // | t.m_11 t.m_12 0 | | m_11 m_12 0 |
92 // matrix' = | t.m_21 t.m_22 0 | x | m_21 m_22 0 |
93 // | t.m_tx t.m_ty 1 | | m_tx m_ty 1 |
94 @endcode
95 */
96 virtual void Concat(const wxAffineMatrix2DBase& t) = 0;
97
98 /**
99 Invert this matrix.
100
101 If the matrix is not invertible, i.e. if its determinant is 0, returns
102 false and doesn't modify it.
103
104 @code
105 // | m_11 m_12 0 |
106 // Invert | m_21 m_22 0 |
107 // | m_tx m_ty 1 |
108 @endcode
109 */
110 virtual bool Invert() = 0;
111
112 /**
113 Check if this is the identity matrix.
114 */
115 virtual bool IsIdentity() const = 0;
116
117 //@{
118 /**
119 Check that this matrix is identical with @t.
120
121 @param t
122 The matrix compared with this.
123 */
124 virtual bool IsEqual(const wxAffineMatrix2DBase& t) const = 0;
125 bool operator==(const wxAffineMatrix2DBase& t) const;
126 //@}
127
128 /**
129 Check that this matrix differs from @t.
130
131 @param t
132 The matrix compared with this.
133 */
134 bool operator!=(const wxAffineMatrix2DBase& t) const;
135
136
137
138 /**
139 Add the translation to this matrix.
140
141 @param dx
142 The translation in x direction.
143 @param dy
144 The translation in y direction.
145 */
146 virtual void Translate(wxDouble dx, wxDouble dy) = 0;
147
148 /**
149 Add scaling to this matrix.
150
151 @param xScale
152 Scaling in x direction.
153 @param yScale
154 Scaling in y direction.
155 */
156 virtual void Scale(wxDouble xScale, wxDouble yScale) = 0;
157
158 /**
159 Add clockwise rotation to this matrix.
160
161 @param cRadians
162 Rotation angle in radians, clockwise.
163 */
164 virtual void Rotate(wxDouble cRadians) = 0;
165
166 /**
167 Add mirroring to this matrix.
168
169 @param direction
170 The direction(s) used for mirroring. One of wxHORIZONTAL,
171 wxVERTICAL or their combination wxBOTH.
172 */
173 void Mirror(int direction = wxHORIZONTAL);
174
175
176 /**
177 Applies this matrix to the point.
178
179 @param p
180 The point receiving the transformations.
181
182 @return The point with the transformations applied.
183 */
184 wxPoint2DDouble TransformPoint(const wxPoint2DDouble& src) const;
185 void TransformPoint(wxDouble* x, wxDouble* y) const;
186
187 /**
188 Applies the linear part of this matrix, i.e. without translation.
189
190 @param p
191 The source receiving the transformations.
192
193 @return The source with the transformations applied.
194 */
195 wxPoint2DDouble TransformDistance(const wxPoint2DDouble& src) const;
196 void TransformDistance(wxDouble* dx, wxDouble* dy) const;
197
198 };