AW: Consider translation of transformation matrix of image rotation

Armin Le Grand Armin.LeGrand at
Fri Feb 23 15:39:23 UTC 2018

Hi Regina,

> It works in principle,
What does that mean ?!?

A: An empty constructed basegfx::B2DHomMatrix is on identity (no-op), so it is ideal to test if it is used. Will even work when usages add-up to identity matrix whant means 'no change'. Yes, use isIdentity() please.

B: You might calculate it, but it is not really needed. Since we rotate arouhd center (only) it is sufficient to extract rotation and set it - we know it's around center. The rest of the shape (svg:x/y/width/height) is the unrotated shape, so this is sufficient. It can be calculated to make error-checks if wanted. It will have to be calculated when someone will use more of the transformation later (or we do)

C: Not sure whant you mean here. Correcting the position means it's 'overdefined'. The (svg:x/y/width/height) and back-calculating from transformation with (-translate, rotate, translate) to rotate around center *should* always give the same center. If not, it is *not clear* which definition is the correct one. This is the reason the transformation should *not* contain positioning at all. The idea is: Apply (svg:x/y/width/height) first (pos and size), then apply transformation to it (rotate, shear, mirror (scale-1)).


-----Urspr√ľngliche Nachricht-----
Von: Regina Henschel [mailto:rb.henschel at] 
Gesendet: Friday, February 23, 2018 15:13
An: LO dev fdo <libreoffice at>
Cc: Armin Le Grand <Armin.LeGrand at>
Betreff: Consider translation of transformation matrix of image rotation

Hi Armin, hi all,

this is about
and my proposal

It works in principle, but I'm not sure about some details:

It has a construction
     basegfx::B2DHomMatrix aFullTransform;

     with later on
     if ( !aFullTransform.isIdentity() )

Should I use
     basegfx::B2DHomMatrix aFullTransform;
     bool bHasTransformation;

     if ( bHasTransformation )

It has
     if ( aTransformedCenterPosition != aCenterPosition ) Is this check useful, or should I calculate the correction always, although the result might be the original value?

Is this the correct place at all to correct the position?

Kind regards

More information about the LibreOffice mailing list