Problems with item "RotationCenter" in item "Extrusion" in the property "CustomShapeGeometry"

Regina Henschel rb.henschel at t-online.de
Sun Nov 21 21:15:05 UTC 2021


Hi all,

The current implementation of "RotationCenter" uses the three XYZ values 
as if they are in 1/100 Millimeter (Hmm). That is, if the values in ODF 
file are in Hmm, then the shape behaves as expected. But that does not 
fit the specifications.

The "RotationCenter" appears in the specifications as:
c3DRotationCenterX, c3DRotationCenterY, c3DRotationCenterZ in binary 
MSOffice and Rich Text Format (RTF),
rotationcenter in VML,
draw:extrusion-rotation-center in ODF,
RotationCenter in API.

The descriptions are:

binary MS Office:
c3DRotationCenterX (4 bytes): A value of type FixedPoint, as specified 
in [MS-OSHARED] section 2.2.1.6, that specifies a fraction of the 
geometry’s scaled width and height. The default value for this property 
is 0x00000000.
c3DRotationCenterY (4 bytes): A value of type FixedPoint, as specified 
in [MS-OSHARED] section 2.2.1.6, that specifies a fraction of the 
geometry’s scaled width and height. The default value for this property 
is 0x00000000.
c3DRotationCenterZ (4 bytes): A value of type FixedPoint, as specified 
in [MS-OSHARED] section 2.2.1.6, that specifies a fraction of the 
geometry’s scaled width and height. The default value for this property 
is 0x00000000.

Another document has
Property            Type  Default Description
c3DRotationCenterX  LONG  0       rotation center x (16.16 or g-units)
c3DRotationCenterY  LONG  0       rotation center y (16.16 or g-units)
c3DRotationCenterZ  LONG  0       rotation center z (absolute (emus))

RTF:
Properties: c3DRotationCenterX, c3DRotationCenterY, c3DRotationCenterZ
Meaning: The X and Y values are a 16.16 fraction of the geometry width 
and height, with (0,0) being at the center of the geometry. The Z value 
must be in absolute units (EMUs).

VML: Specifies the center of rotation for a shape. Read/write. Vector3D. 
Defines the offset of the rotation in terms of fractions of the shape's 
size. The default value is 0,0,0.

ODF: The draw:extrusion-rotation-center attribute specifies the position 
of a rotation center in shape-size fractions.

API: This attribute specifies the position of the rotate center in terms 
of shape size fractions.

The rotation center has no tool in the user interface.

All of the descriptions use fractions for X-component and Y-component.
For Z-component only RTF and binary MS Office have explicit EMU as unit. 
The other refer to shape size or to shape width and height, which I 
think is not meaningful for the Z-component.

So what to do?
For X- and Y-component I can imagine:
Change implementation so, that X-component and Y-component are fractions 
in CustomShapeGeometry. That requires changes in msdffimp.cxx#1812, in 
escherex.cxx#2852, in EnhancedCustomShape3d.cxx#816. Others?

How to solve Z-component?

Kind regards,
Regina


More information about the LibreOffice mailing list