| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/affinematrix2dbase.h
- // Purpose: Common interface for 2D transformation matrices.
- // Author: Catalin Raceanu
- // Created: 2011-04-06
- // Copyright: (c) wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_AFFINEMATRIX2DBASE_H_
- #define _WX_AFFINEMATRIX2DBASE_H_
- #include "wx/defs.h"
- #if wxUSE_GEOMETRY
- #include "wx/geometry.h"
- struct wxMatrix2D
- {
- wxMatrix2D(wxDouble v11 = 1,
- wxDouble v12 = 0,
- wxDouble v21 = 0,
- wxDouble v22 = 1)
- {
- m_11 = v11; m_12 = v12;
- m_21 = v21; m_22 = v22;
- }
- wxDouble m_11, m_12, m_21, m_22;
- };
- // 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 (it should
- // also be documented then as currently only wxAffineMatrix2D itself is).
- class WXDLLIMPEXP_CORE wxAffineMatrix2DBase
- {
- public:
- wxAffineMatrix2DBase() {}
- virtual ~wxAffineMatrix2DBase() {}
- // sets the matrix to the respective values
- virtual void Set(const wxMatrix2D& mat2D, const wxPoint2DDouble& tr) = 0;
- // gets the component valuess of the matrix
- virtual void Get(wxMatrix2D* mat2D, wxPoint2DDouble* tr) const = 0;
- // concatenates the matrix
- virtual void Concat(const wxAffineMatrix2DBase& t) = 0;
- // makes this the inverse matrix
- virtual bool Invert() = 0;
- // return true if this is the identity matrix
- virtual bool IsIdentity() const = 0;
- // returns true if the elements of the transformation matrix are equal ?
- virtual bool IsEqual(const wxAffineMatrix2DBase& t) const = 0;
- bool operator==(const wxAffineMatrix2DBase& t) const { return IsEqual(t); }
- bool operator!=(const wxAffineMatrix2DBase& t) const { return !IsEqual(t); }
- //
- // transformations
- //
- // add the translation to this matrix
- virtual void Translate(wxDouble dx, wxDouble dy) = 0;
- // add the scale to this matrix
- virtual void Scale(wxDouble xScale, wxDouble yScale) = 0;
- // add the rotation to this matrix (counter clockwise, radians)
- virtual void Rotate(wxDouble ccRadians) = 0;
- // add mirroring to this matrix
- void Mirror(int direction = wxHORIZONTAL)
- {
- wxDouble x = (direction & wxHORIZONTAL) ? -1 : 1;
- wxDouble y = (direction & wxVERTICAL) ? -1 : 1;
- Scale(x, y);
- }
- // applies that matrix to the point
- wxPoint2DDouble TransformPoint(const wxPoint2DDouble& src) const
- {
- return DoTransformPoint(src);
- }
- void TransformPoint(wxDouble* x, wxDouble* y) const
- {
- wxCHECK_RET( x && y, "Can't be NULL" );
- const wxPoint2DDouble dst = DoTransformPoint(wxPoint2DDouble(*x, *y));
- *x = dst.m_x;
- *y = dst.m_y;
- }
- // applies the matrix except for translations
- wxPoint2DDouble TransformDistance(const wxPoint2DDouble& src) const
- {
- return DoTransformDistance(src);
- }
- void TransformDistance(wxDouble* dx, wxDouble* dy) const
- {
- wxCHECK_RET( dx && dy, "Can't be NULL" );
- const wxPoint2DDouble
- dst = DoTransformDistance(wxPoint2DDouble(*dx, *dy));
- *dx = dst.m_x;
- *dy = dst.m_y;
- }
- protected:
- virtual
- wxPoint2DDouble DoTransformPoint(const wxPoint2DDouble& p) const = 0;
- virtual
- wxPoint2DDouble DoTransformDistance(const wxPoint2DDouble& p) const = 0;
- };
- #endif // wxUSE_GEOMETRY
- #endif // _WX_AFFINEMATRIX2DBASE_H_
|