From ea318d1431c89e647598c510c4245c6571aa5f46 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Thu, 26 Jan 2012 23:32:43 -0600 Subject: Update to latest tqt3 automated conversion --- doc/html/ntqwmatrix.html | 449 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 449 insertions(+) create mode 100644 doc/html/ntqwmatrix.html (limited to 'doc/html/ntqwmatrix.html') diff --git a/doc/html/ntqwmatrix.html b/doc/html/ntqwmatrix.html new file mode 100644 index 000000000..ef053bd39 --- /dev/null +++ b/doc/html/ntqwmatrix.html @@ -0,0 +1,449 @@ + + + + + +TQWMatrix Class + + + + + + + +
+ +Home + | +All Classes + | +Main Classes + | +Annotated + | +Grouped Classes + | +Functions +

TQWMatrix Class Reference

+ +

The TQWMatrix class specifies 2D transformations of a +coordinate system. +More... +

#include <ntqwmatrix.h> +

List of all member functions. +

Public Members

+ +

Static Public Members

+ +

Related Functions

+ +

Detailed Description

+ + +The TQWMatrix class specifies 2D transformations of a +coordinate system. +

+ +

The standard coordinate system of a paint + device has the origin located at the top-left position. X +values increase to the right; Y values increase downward. +

This coordinate system is the default for the TQPainter, which +renders graphics in a paint device. A user-defined coordinate +system can be specified by setting a TQWMatrix for the painter. +

Example: +

+        MyWidget::paintEvent( TQPaintEvent * )
+        {
+            TQPainter p;                      // our painter
+            TQWMatrix m;                      // our transformation matrix
+            m.rotate( 22.5 );                // rotated coordinate system
+            p.begin( this );                 // start painting
+            p.setWorldMatrix( m );           // use rotated coordinate system
+            p.drawText( 30,20, "detator" );  // draw rotated text at 30,20
+            p.end();                         // painting done
+        }
+    
+ +

A matrix specifies how to translate, scale, shear or rotate the +graphics; the actual transformation is performed by the drawing +routines in TQPainter and by TQPixmap::xForm(). +

The TQWMatrix class contains a 3x3 matrix of the form: + + + + +
m11m12 0
m21m22 0
dx dy  1
+

A matrix transforms a point in the plane to another point: +

+        x' = m11*x + m21*y + dx
+        y' = m22*y + m12*x + dy
+    
+ +

The point (x, y) is the original point, and (x', y') is the +transformed point. (x', y') can be transformed back to (x, y) by performing the same operation on the inverted matrix. +

The elements dx and dy specify horizontal and vertical +translation. The elements m11 and m22 specify horizontal and +vertical scaling. The elements m12 and m21 specify +horizontal and vertical shearing. +

The identity matrix has m11 and m22 set to 1; all others are +set to 0. This matrix maps a point to itself. +

Translation is the simplest transformation. Setting dx and dy will move the coordinate system dx units along the X axis +and dy units along the Y axis. +

Scaling can be done by setting m11 and m22. For example, +setting m11 to 2 and m22 to 1.5 will double the height and +increase the width by 50%. +

Shearing is controlled by m12 and m21. Setting these +elements to values different from zero will twist the coordinate +system. +

Rotation is achieved by carefully setting both the shearing +factors and the scaling factors. The TQWMatrix also has a function +that sets rotation directly. +

TQWMatrix lets you combine transformations like this: +

+        TQWMatrix m;           // identity matrix
+        m.translate(10, -20); // first translate (10,-20)
+        m.rotate(25);         // then rotate 25 degrees
+        m.scale(1.2, 0.7);    // finally scale it
+    
+ +

Here's the same example using basic matrix operations: +

+        double a    = pi/180 * 25;         // convert 25 to radians
+        double sina = sin(a);
+        double cosa = cos(a);
+        TQWMatrix m1(1, 0, 0, 1, 10, -20);  // translation matrix
+        TQWMatrix m2( cosa, sina,           // rotation matrix
+                    -sina, cosa, 0, 0 );
+        TQWMatrix m3(1.2, 0, 0, 0.7, 0, 0); // scaling matrix
+        TQWMatrix m;
+        m = m3 * m2 * m1;                  // combine all transformations
+    
+ +

TQPainter has functions to translate, scale, shear and rotate the +coordinate system without using a TQWMatrix. Although these +functions are very convenient, it can be more efficient to build a +TQWMatrix and call TQPainter::setWorldMatrix() if you want to perform +more than a single transform operation. +

See also TQPainter::setWorldMatrix(), TQPixmap::xForm(), Graphics Classes, and Image Processing Classes. + +


Member Type Documentation

+

TQWMatrix::TransformationMode

+ +

+

TQWMatrix offers two transformation modes. Calculations can either +be done in terms of points (Points mode, the default), or in +terms of area (Area mode). +

In Points mode the transformation is applied to the points that +mark out the shape's bounding line. In Areas mode the +transformation is applied in such a way that the area of the +contained region is correctly transformed under the matrix. +

Example: +

Suppose we have a rectangle, +TQRect( 10, 20, 30, 40 ) and a transformation matrix +TQWMatrix( 2, 0, 0, 2, 0, 0 ) to double the rectangle's size. +

In Points mode, the matrix will transform the top-left (10,20) and +the bottom-right (39,59) points producing a rectangle with its +top-left point at (20,40) and its bottom-right point at (78,118), +i.e. with a width of 59 and a height of 79. +

In Areas mode, the matrix will transform the top-left point in +the same way as in Points mode to (20/40), and double the width +and height, so the bottom-right will become (69,99), i.e. a width +of 60 and a height of 80. +

Because integer arithmetic is used (for speed), rounding +differences mean that the modes will produce slightly different +results given the same shape and the same transformation, +especially when scaling up. This also means that some operations +are not commutative. +

Under Points mode, matrix * ( region1 | region2 ) is not equal to +matrix * region1 | matrix * region2. Under Area mode, matrix * (pointarray[i]) is not neccesarily equal to +(matrix * pointarry)[i]. +

Comparison of Points and Areas TransformationModes
+

Member Function Documentation

+

TQWMatrix::TQWMatrix () +

+Constructs an identity matrix. All elements are set to zero except +m11 and m22 (scaling), which are set to 1. + +

TQWMatrix::TQWMatrix ( double m11, double m12, double m21, double m22, double dx, double dy ) +

+Constructs a matrix with the elements, m11, m12, m21, m22, dx and dy. + +

double TQWMatrix::det () const +

+ +

Returns the matrix's determinant. + +

double TQWMatrix::dx () const +

+ +

Returns the horizontal translation. + +

double TQWMatrix::dy () const +

+ +

Returns the vertical translation. + +

TQWMatrix TQWMatrix::invert ( bool * invertible = 0 ) const +

+Returns the inverted matrix. +

If the matrix is singular (not invertible), the identity matrix is +returned. +

If invertible is not 0: the value of *invertible is set +to TRUE if the matrix is invertible; otherwise *invertible is +set to FALSE. +

See also isInvertible(). + +

Example: t14/cannon.cpp. +

bool TQWMatrix::isIdentity () const +

+Returns TRUE if the matrix is the identity matrix; otherwise returns FALSE. +

See also reset(). + +

bool TQWMatrix::isInvertible () const +

+ +

Returns TRUE if the matrix is invertible; otherwise returns FALSE. +

See also invert(). + +

double TQWMatrix::m11 () const +

+ +

Returns the X scaling factor. + +

double TQWMatrix::m12 () const +

+ +

Returns the vertical shearing factor. + +

double TQWMatrix::m21 () const +

+ +

Returns the horizontal shearing factor. + +

double TQWMatrix::m22 () const +

+ +

Returns the Y scaling factor. + +

void TQWMatrix::map ( int x, int y, int * tx, int * ty ) const +

+Transforms ( x, y ) to ( *tx, *ty ) using the formulae: +

+        *tx = m11*x + m21*y + dx  (rounded to the nearest integer)
+        *ty = m22*y + m12*x + dy  (rounded to the nearest integer)
+    
+ + +

Examples: t14/cannon.cpp and xform/xform.cpp. +

void TQWMatrix::map ( double x, double y, double * tx, double * ty ) const +

+This is an overloaded member function, provided for convenience. It behaves essentially like the above function. +

Transforms ( x, y ) to ( *tx, *ty ) using the +following formulae: +

+        *tx = m11*x + m21*y + dx
+        *ty = m22*y + m12*x + dy
+    
+ + +

TQPoint TQWMatrix::map ( const TQPoint & p ) const +

+ +

This is an overloaded member function, provided for convenience. It behaves essentially like the above function. +

Transforms p to using the formulae: +

+        retx = m11*px + m21*py + dx  (rounded to the nearest integer)
+        rety = m22*py + m12*px + dy  (rounded to the nearest integer)
+    
+ + +

TQRect TQWMatrix::map ( const TQRect & r ) const +

+ +

This function is obsolete. It is provided to keep old source working. We strongly advise against using it in new code. +

Please use TQWMatrix::mapRect() instead. +

Note that this method does return the bounding rectangle of the r, when +shearing or rotations are used. + +

TQPointArray TQWMatrix::map ( const TQPointArray & a ) const +

+ +

This is an overloaded member function, provided for convenience. It behaves essentially like the above function. +

Returns the point array a transformed by calling map for each point. + +

TQRegion TQWMatrix::map ( const TQRegion & r ) const +

+ +

This is an overloaded member function, provided for convenience. It behaves essentially like the above function. +

Transforms the region r. +

Calling this method can be rather expensive, if rotations or +shearing are used. + +

TQRect TQWMatrix::mapRect ( const TQRect & rect ) const +

+Returns the transformed rectangle rect. +

The bounding rectangle is returned if rotation or shearing has +been specified. +

If you need to know the exact region rect maps to use operator*(). +

See also operator*(). + +

Example: xform/xform.cpp. +

TQPointArray TQWMatrix::mapToPolygon ( const TQRect & rect ) const +

+Returns the transformed rectangle rect as a polygon. +

Polygons and rectangles behave slightly differently +when transformed (due to integer rounding), so +matrix.map( TQPointArray( rect ) ) is not always the same as +matrix.mapToPolygon( rect ). + +

TQRegion TQWMatrix::mapToRegion ( const TQRect & rect ) const +

+ +

Returns the transformed rectangle rect. +

A rectangle which has been rotated or sheared may result in a +non-rectangular region being returned. +

Calling this method can be expensive, if rotations or shearing are +used. If you just need to know the bounding rectangle of the +returned region, use mapRect() which is a lot faster than this +function. +

See also TQWMatrix::mapRect(). + +

bool TQWMatrix::operator!= ( const TQWMatrix & m ) const +

+Returns TRUE if this matrix is not equal to m; otherwise returns FALSE. + +

TQWMatrix & TQWMatrix::operator*= ( const TQWMatrix & m ) +

+Returns the result of multiplying this matrix by matrix m. + +

bool TQWMatrix::operator== ( const TQWMatrix & m ) const +

+Returns TRUE if this matrix is equal to m; otherwise returns FALSE. + +

void TQWMatrix::reset () +

+Resets the matrix to an identity matrix. +

All elements are set to zero, except m11 and m22 (scaling) +which are set to 1. +

See also isIdentity(). + +

TQWMatrix & TQWMatrix::rotate ( double a ) +

+Rotates the coordinate system a degrees counterclockwise. +

Returns a reference to the matrix. +

See also translate(), scale(), and shear(). + +

Examples: canvas/canvas.cpp, desktop/desktop.cpp, drawdemo/drawdemo.cpp, t14/cannon.cpp, and xform/xform.cpp. +

TQWMatrix & TQWMatrix::scale ( double sx, double sy ) +

+Scales the coordinate system unit by sx horizontally and sy +vertically. +

Returns a reference to the matrix. +

See also translate(), shear(), and rotate(). + +

Examples: canvas/canvas.cpp, fileiconview/qfileiconview.cpp, movies/main.cpp, qmag/qmag.cpp, showimg/showimg.cpp, and xform/xform.cpp. +

void TQWMatrix::setMatrix ( double m11, double m12, double m21, double m22, double dx, double dy ) +

+Sets the matrix elements to the specified values, m11, m12, +m21, m22, dx and dy. + +

void TQWMatrix::setTransformationMode ( TQWMatrix::TransformationMode m ) [static] +

+Sets the transformation mode that TQWMatrix and painter +transformations use to m. +

See also TQWMatrix::TransformationMode. + +

TQWMatrix & TQWMatrix::shear ( double sh, double sv ) +

+Shears the coordinate system by sh horizontally and sv +vertically. +

Returns a reference to the matrix. +

See also translate(), scale(), and rotate(). + +

Examples: drawdemo/drawdemo.cpp and xform/xform.cpp. +

TransformationMode TQWMatrix::transformationMode () [static] +

+Returns the current transformation mode. +

See also TQWMatrix::TransformationMode. + +

TQWMatrix & TQWMatrix::translate ( double dx, double dy ) +

+Moves the coordinate system dx along the X-axis and dy along +the Y-axis. +

Returns a reference to the matrix. +

See also scale(), shear(), and rotate(). + +

Examples: canvas/canvas.cpp, drawdemo/drawdemo.cpp, t14/cannon.cpp, and xform/xform.cpp. +


Related Functions

+

TQDataStream & operator<< ( TQDataStream & s, const TQWMatrix & m ) +

+ +

Writes the matrix m to the stream s and returns a reference +to the stream. +

See also Format of the TQDataStream operators. + +

TQDataStream & operator>> ( TQDataStream & s, TQWMatrix & m ) +

+ +

Reads the matrix m from the stream s and returns a reference +to the stream. +

See also Format of the TQDataStream operators. + + +


+This file is part of the TQt toolkit. +Copyright © 1995-2007 +Trolltech. All Rights Reserved.


+ +
Copyright © 2007 +TrolltechTrademarks +
TQt 3.3.8
+
+ -- cgit v1.2.3