| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: affinematrix2dbase.h
- // Purpose: wxMatrix2D documentation
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxMatrix2D
- A simple container for 2x2 matrix.
- This simple structure is used with wxAffineMatrix2D.
- @library{wxcore}
- @category{misc}
- @since 2.9.2
- */
- struct wxMatrix2D
- {
- /**
- Default constructor.
- Initializes the matrix elements to the identity.
- */
- wxMatrix2D(wxDouble v11 = 1,
- wxDouble v12 = 0,
- wxDouble v21 = 0,
- wxDouble v22 = 1);
- /// 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;
- };
|