[Qt-interest] QTransform SRT order (bug?)

Joshua Grauman jnfo-c at grauman.com
Tue Jun 7 07:32:40 CEST 2011


Maybe someone can help clarify for me, but this seems like a bug to me. 
Here's a complete Qt program. I do a scale first, and then a rotate. I 
start with a square, and then scale it to a rectangle. After I rotate it 
though, the angles are clearly not at 90 degrees. I would have assumed 
that I was just rotating my rectangle. What's going on here? Is this a 
bug? Thanks!

Josh

#include <QImage>
#include <QPainter>
#include <QTransform>
#include <QRect>

int main(int argc, char *argv[])
{
   QRect org(0,0,100,100);
   org.moveCenter(QPoint(0,0));
   QTransform trans;
   trans.scale(.8,.4);
   trans.rotate(45.0);
   QPolygon gon=trans.mapToPolygon(org);
   QImage img(400,400,QImage::Format_ARGB32);
   QPainter p(&img);
   p.translate(200,200);
   p.drawPolygon(gon);
   img.save("test.png");
}


>> From qgraphicsitem_p.h
>
> QTransform computedFullTransform(QTransform *postmultiplyTransform = 0) const
>
>    {
>
>        if (onlyTransform) {
>
>            if (!postmultiplyTransform || postmultiplyTransform->isIdentity())
>
>                return transform;
>
>            if (transform.isIdentity())
>
>                return *postmultiplyTransform;
>
>            return transform * *postmultiplyTransform;
>
>        }
>
>        QTransform x(transform);
>
>        if (!graphicsTransforms.isEmpty()) {
>
>            QMatrix4x4 m;
>
>            for (int i = 0; i < graphicsTransforms.size(); ++i)
>
>                graphicsTransforms.at(i)->applyTo(&m);
>
>            x *= m.toTransform();
>
>        }
>
>        x.translate(xOrigin, yOrigin);
>
>        x.rotate(rotation);
>
>        x.scale(scale, scale);
>
>        x.translate(-xOrigin, -yOrigin);
>
>        if (postmultiplyTransform)
>
>            x *= *postmultiplyTransform;
>
>        return x;
>
>    }
>
>
> 2011/6/3 Malyushytsky, Alex <alex at wai.com>
>
>>>> doesn't matter what order the
>> QTransform::scale(), QTransform::rotate(), and QTransform::translate()
>> functions are called in, does it?
>>
>> Yes it does.
>> It uses matrix operation and stores transformation matrix.
>> http://doc.qt.nokia.com/latest/qtransform.html#basic-matrix-operations
>>
>> Think it this way if you move rectangle from the center of the origin along
>> x axis and rotate it
>> 45 degrees around origin will not be equal to rotating it first and then
>> moving.
>>
>>    Alex
>>
>>
>> -----Original Message-----
>> From: qt-interest-bounces+alex=wai.com at qt.nokia.com [mailto:
>> qt-interest-bounces+alex=wai.com at qt.nokia.com] On Behalf Of Joshua Grauman
>> Sent: Friday, June 03, 2011 10:13 AM
>> To: qt-interest at qt.nokia.com
>> Subject: [Qt-interest] QTransform SRT order
>>
>> Hello all,
>>
>> I am using QTransform to Scale, Rotate, and Translate an image. I was
>> wondering about the order of these operations. I'm assuming that
>> QTransform operates in the order of: Scale, then Rotate, then Translate.
>> Can anyone confirm this? It doesn't matter what order the
>> QTransform::scale(), QTransform::rotate(), and QTransform::translate()
>> functions are called in, does it? Thanks!
>>
>> Josh
>> _______________________________________________
>> Qt-interest mailing list
>> Qt-interest at qt.nokia.com
>> http://lists.qt.nokia.com/mailman/listinfo/qt-interest
>>
>>
>>
>> ---------------------------------------------------------------------------------------------------
>> Weidlinger Associates, Inc. made the following annotations.
>>
>> “This message and any attachments are solely for the intended recipient and
>> may contain confidential or privileged information. If you are not the
>> intended recipient, any disclosure, copying, use, or distribution of the
>> information included in this message and any attachments is prohibited. If
>> you have received this communication in error, please notify us by reply
>> e-mail and immediately and permanently delete this message and any
>> attachments. Thank you.”
>>
>> “Please consider our environment before printing this email.”
>> _______________________________________________
>> Qt-interest mailing list
>> Qt-interest at qt.nokia.com
>> http://lists.qt.nokia.com/mailman/listinfo/qt-interest
>>
>


More information about the Qt-interest-old mailing list