[PyKDE] QWMatrix bugs ( was Undocumented shortcommings )
    myrkraverk at users.sourceforge.net 
    myrkraverk at users.sourceforge.net
       
    Tue Sep  2 16:58:01 BST 2003
    
    
  
Hi,
Torsten Marek writes:
 > myrkraverk at users.sourceforge.net schrieb:
 > > Before I go any further, I'm going to state that my version of
 > > python is 2.3, PyQt is 3.8 and Qt is 3.2.1.
And my GCC is 3.3.1.
 > > It is not possible to use the new mapRect() method of QWMatrix,
 > > but map() works for QRect, but is obsolete, this should at least
 > > be documented.
 > That's right. This should be changed. Small patch for the sip files
 > included.
Thanks.
 > > Other shortcommings of QWMatrix is the lack of the * operator, a
 > > very commonly used operator when dealing with matrices, I did not
 > > try + but it should be working.  Again, these shortcommings are
 > > only semi-documented as it's only meantioned that the ==, != and
 > > *= operators work.
 > There is no such thing in the Qt class, but if you provide sip code,
 > Phil may put it into PyQt.
Your right -- and wrong.  There is a * operator in the Qt class, it is
just not documented very well, the only reference to it in the docs is
in the following example from qwmatrix.html:
  double a    = pi/180 * 25;         // convert 25 to radians
  double sina = sin(a);
  double cosa = cos(a);
  QWMatrix m1(0, 0, 0, 0, 10, -20);  // translation matrix
  QWMatrix m2( cosa, sina,           // rotation matrix
              -sina, cosa, 0, 0 );
  QWMatrix m3(1.2, 0, 0, 0.7, 0, 0); // scaling matrix
  QWMatrix m;
  m = m3 * m2 * m1;                  // combine all transformations
Unfortunately, the * doesn't seem to work, after running the above
code (with enaugh mods to make it compile), m is the zero matrix ;(
I've yet to determine whether it's a bug in Qt, my compiler or what.
After looking at the Qt code, I discovered that the following
operators are definded, and though I've not tested them myself they
seem to Do The Right Thing(tm):
QWMatrix * QPoint
QWMatrix * QRect
QWMatrix * QRegion
QWMatrix * QPointArray
I'd like to see them as well in PyQt.  I'll consider applying sip code
when I know why * doesn't work for matrices and/or have a fix.  It may
be in the copy constructors or even my compiler -- as I've said, I've
yet to take a look.
 > > Another mis-feature of QWMatrix is that the invert() method does
 > > not work as one would expect.  It is impossible to use an
 > > inverted matrix again with Qt as it's a tuple, which to me, is
 > > useless.  I recommend that this will be fixed, at least with a
 > > constructor that can create a QWMatrix from that tuple.
 > Yes, but the Qt version of the invert function takes a pointer to a
 > boolean to show whether the inverted matrix is the identity matrix.
 > QWMatrix.invert()[0] is the inverted matrix and [1] the boolean
 > value.
Writing this, I've yet to test it, but if I can do
  m = m.invert()[0]
I'm happy ;)
 > > I went mathematical and worked around this shortcommings when
 > > doing part 14 of the tutorial.  If anyone is interested I could
 > > publish the code, and even translate the entire tutorial into
 > > python.  I already have most of the chapters in more or less line
 > > by line compatible code with the text of the tutorial.
This offer still stands.
Best,
Johann
-- 
Emacs is not a text editor -- it's a way of life
    
    
More information about the PyQt
mailing list