X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e5d4c38a3881ac290689af3ddf2a96623d97683..92c0fc34c104c8d7c12d6a3b78ea232690fc23f4:/interface/wx/affinematrix2dbase.h diff --git a/interface/wx/affinematrix2dbase.h b/interface/wx/affinematrix2dbase.h index 8845c96584..e7d0a6df11 100644 --- a/interface/wx/affinematrix2dbase.h +++ b/interface/wx/affinematrix2dbase.h @@ -32,3 +32,167 @@ struct wxMatrix2D /// The matrix elements in the usual mathematical notation. wxDouble m_11, m_12, m_21, m_22; }; + + +/** + @class wxAffineMatrix2DBase + + A 2x3 matrix representing an affine 2D transformation. + + This is an abstract base class implemented by wxAffineMatrix2D only so far, + but in the future we also plan to derive wxGraphicsMatrix from it. + + @library{wxcore} + @category{misc} + + @since 2.9.2 +*/ +class wxAffineMatrix2DBase +{ +public: + /** + Default constructor. + + The matrix elements are initialize to the identity matrix. + */ + wxAffineMatrix2DBase(); + virtual ~wxAffineMatrix2DBase(); + + /** + Set all elements of this matrix. + + @param mat2D + The rotational components of the matrix (upper 2 x 2). + @param tr + The translational components of the matrix. + */ + virtual void Set(const wxMatrix2D& mat2D, const wxPoint2DDouble& tr) = 0; + + /** + Get the component values of the matrix. + + @param mat2D + The rotational components of the matrix (upper 2 x 2), must be + non-@NULL. + @param tr + The translational components of the matrix, may be @NULL. + */ + virtual void Get(wxMatrix2D* mat2D, wxPoint2DDouble* tr) const = 0; + + /** + Concatenate this matrix with another one. + + The parameter matrix is the multiplicand. + + @param t + The multiplicand. + + @code + // | t.m_11 t.m_12 0 | | m_11 m_12 0 | + // matrix' = | t.m_21 t.m_22 0 | x | m_21 m_22 0 | + // | t.m_tx t.m_ty 1 | | m_tx m_ty 1 | + @endcode + */ + virtual void Concat(const wxAffineMatrix2DBase& t) = 0; + + /** + Invert this matrix. + + If the matrix is not invertible, i.e. if its determinant is 0, returns + false and doesn't modify it. + + @code + // | m_11 m_12 0 | + // Invert | m_21 m_22 0 | + // | m_tx m_ty 1 | + @endcode + */ + virtual bool Invert() = 0; + + /** + Check if this is the identity matrix. + */ + virtual bool IsIdentity() const = 0; + + //@{ + /** + Check that this matrix is identical with @a t. + + @param t + The matrix compared with this. + */ + virtual bool IsEqual(const wxAffineMatrix2DBase& t) const = 0; + bool operator==(const wxAffineMatrix2DBase& t) const; + //@} + + /** + Check that this matrix differs from @a t. + + @param t + The matrix compared with this. + */ + bool operator!=(const wxAffineMatrix2DBase& t) const; + + + + /** + Add the translation to this matrix. + + @param dx + The translation in x direction. + @param dy + The translation in y direction. + */ + virtual void Translate(wxDouble dx, wxDouble dy) = 0; + + /** + Add scaling to this matrix. + + @param xScale + Scaling in x direction. + @param yScale + Scaling in y direction. + */ + virtual void Scale(wxDouble xScale, wxDouble yScale) = 0; + + /** + Add clockwise rotation to this matrix. + + @param cRadians + Rotation angle in radians, clockwise. + */ + virtual void Rotate(wxDouble cRadians) = 0; + + /** + Add mirroring to this matrix. + + @param direction + The direction(s) used for mirroring. One of wxHORIZONTAL, + wxVERTICAL or their combination wxBOTH. + */ + void Mirror(int direction = wxHORIZONTAL); + + + /** + Applies this matrix to the point. + + @param p + The point receiving the transformations. + + @return The point with the transformations applied. + */ + wxPoint2DDouble TransformPoint(const wxPoint2DDouble& p) const; + void TransformPoint(wxDouble* x, wxDouble* y) const; + + /** + Applies the linear part of this matrix, i.e.\ without translation. + + @param p + The source receiving the transformations. + + @return The source with the transformations applied. + */ + wxPoint2DDouble TransformDistance(const wxPoint2DDouble& p) const; + void TransformDistance(wxDouble* dx, wxDouble* dy) const; + +};