]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wxAffineMatrix2DBase class.
authorRobin Dunn <robin@alldunn.com>
Wed, 4 Apr 2012 23:22:53 +0000 (23:22 +0000)
committerRobin Dunn <robin@alldunn.com>
Wed, 4 Apr 2012 23:22:53 +0000 (23:22 +0000)
If a class is used somewhere as parameter or return value types then it needs to be documented, at least for Phoenix.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71092 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

interface/wx/affinematrix2d.h
interface/wx/affinematrix2dbase.h

index 4c2c3ff5bfeab4f551a8a55f9b2e6c25ca6747b4..340051fa3bcfa6fc61e73b9b6cf7758ffcfa3f46 100644 (file)
@@ -15,7 +15,7 @@
 
     @since 2.9.2
 */
-class wxAffineMatrix2D
+class wxAffineMatrix2D : public wxAffineMatrix2DBase
 {
 public:
     /**
index 8845c965846b7777516378bde9c293aa5507c23a..630cbc87406c38eb3887390215b15b187f4bffcd 100644 (file)
@@ -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 @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 @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 counter clockwise rotation to this matrix.
+
+        @param ccRadians
+            Rotation angle in radians.
+    */    
+    virtual void Rotate(wxDouble ccRadians) = 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& src) 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& src) const;
+    void TransformDistance(wxDouble* dx, wxDouble* dy) const;
+
+};