Hi Dennis (and others),

On 01.08.2012 20:38, Dennis E. Hamilton wrote:
Hi Armin,

Thanks for your valuable comment.

I had thought that the description using "clockwise" was in reference to the page 
appearance and not the abstract treatment (with "right-hand rule").  Perhaps I 
misunderstand where the origin is understood in the projection onto the page.

I do not think that you misunderstand. The X-Axis points to the right, the Y-Axis down, the origin is top-left (pretty standard, expected by everyone). Thus, mathematically, the positive orientation of angles goes clockwise.

Unfortunately someone did define it 'mirrored' in the cores for StarOffice (maybe more than 15 years ago), is used in the UI and this was copied to the UNO API and the ODF format for all angles (independent from usage for gradients or objects). This is not based on using the 2nd possible coordinate system with Y-Axis pointing up, but simply by using the 'wrong' (mirrored) values for angles throughout the office consequently.

MORE IMPORTANT CONCERN

I think you raise a more important question concerning changing for ODF 1.3 and 
understanding a transformation between ODF 1.0/1.1/1.2/IS 26300 and ODF 1.3.

I recommend that there be no breaking change of draw:angle between ODF 
versions.  It is probably best to deprecate it while clarifying the orientation 
of the angle-opening rotation and the units of the angle.  I think preventing 
down-level breakage is impossible without that and the support explanations 
will be a nightmare otherwise.  It seems to me that the ODF 1.2 description is 
best corrected in an Errata and the problem made immediately known in an OIC 
Advisory.

My first idea was to define the orientation (is not really defined now) for ODF1.2 and older, and to define it mirrored for ODF1.3, applying a xslt transformation to manage that.

You are right that for all products not immediately applying to this change rotations would break. This would speak for adding a new property.

To correct the geometry for transformations, I suggest that another, 
rigorously-defined gradient element be introduced, preferably one from SVG.

Transformations are okay and need no change, they contain the angle corresponding to the coordinate system.

As Michael Stahl wrote, svg:linearGradient and svg:radialGradient are already part of ODF1.2.

These are no replacement for draw:gradient, thus are no candidates for deprecating the draw:gradient (and draw:opacity, the transparence gradients) for ODF1.3. It is another kind of gradient with the pros and cons described by Michael Stahl.

(BTW: What to do if an object has draw:gradient AND svg:linearGradient defined at the same time (or even more, add svg:radialGradient)...?).

We should not mix up varios themes here (maybe I started doing so, I apologize). We have two things here:

(a) Non-SVG Gradient definitions (old ones)
(b) Angle definitions in various places

There is no general problem with (a), except the contained angle and it's orientation. Thus I talk more about (b) where (b) is about the old gradients with use <draw:angle> currently, but also start/end angles in circle/ellipse shapes.

The Object rotation does not have a direct and single rotation attribute (AFAIK, there is svg:x, svg:y, svg:width/height, but no svg:angle), but has to use (and does use) a transformation when rotation is needed (which uses angles correctly, no problem there).

Using a 2nd 'rigorously-defined' angle would be sufficient here. As mentioned in earlier mails, SVG has <angle> as basic data type (see SVG 4.2). It is already listed in ODF 1.2, see 18.3.1 of ODF spec (Does this mean it could already be used?). It is even referenced as data type in draw:angle, draw:start-angle and draw:end-angle (!), see e.g. 19.112 draw:angle in ODF1.2 which says: 'The draw:angle attribute has the data type angle 18.3.1'. When this would be true, draw:angle would not even be needed since it's identical to svg:angle already (which it is not, another error?).

Thus I suggest allowing both in <draw:gradient> and <draw:opacity>, with

---

<draw:angle> is the inverted rotation in 10th of a degree as integer value (no longer reference 18.3.1 and say it's equal).

<svg:angle> is the rotation as defined by SVG (including being float and supporting deg, rad and grad).

If <svg:angle> is present, it has precedence over <draw:angle>. For compatibility, please support both when creating ODF documents.

---

Other candidates wit this problem are (not sure when marked with '?'):

19.140 draw:end-angle
19.213 draw:start-angle

19.226 draw:text-rotate-angle (?)
20.95 draw:caption-angle (?)
20.339 style:rotation-angle (?)
20.375 style:text-rotation-angle (?)

If there is a down-level concern, I would define the new element such that, when it and 
<draw:gradient> are both present, the new element pre-empts <draw:gradient> in ODF 
1.3 and beyond.  This way, a down-level implementation will presumably process the 
<draw:gradient> and ignore the element introduced in ODF 1.3, since it is not defined 
down-level.

We can use the SVG <angle> basic data type, no need for an own, new definition.

Would that break the knot better?

Yes, I think so.

  - Dennis

-----Original Message-----
From: Armin Le Grand [mailto:[email protected]]
Sent: Wednesday, August 01, 2012 02:21
To: [email protected]
Subject: Re: Definition of draw:angle in ODF1.2 does not fit to implementation

        Hi Dennis,

On 30.07.2012 22:21, Dennis E. Hamilton wrote:
[ ... ]
(This is anti-clockwise in the standard geometric orientation.  When projected 
onto the page, this appears to be clockwise because the origin tends to be in 
the upper left corner and the positive-Y direction is downward, the positve-X 
direction is rightward.)

It is consistent throughout all AOO/LO/OOo versions. Unfortunately, it
is mathematically wrong oriented (thus, projected on the page,
anti-clockwise).

Thus, when just want to stay compatible and extend/correct the
definitions, defining it as integer, 0.1 degrees and mathematically
(non-projected to page) clockwise rotation would describe the current
behaviour.

Unfortunately this 'wrong' orientation is problematic. As long as it is
only locally used it can simply be mirrored. The problem comes up when
working with transformations; when receiving the transformation of an
graphic object and decomposing it to extract rotation, that rotation
will be mathematically correctly oriented. It has to be since else
linear combination of transformations would not work.

This is not in the environment of gradients, but in general all angles
in ODF have this problem (probably for historical reasons, the UIs use
the same wrong orientation). Our competitor does not have that error.

Isn't this correctable for all angles e.g. for ODF1.3 and can be handled
by a XML transformation ODF1.2 <-> ODF1.3 by mirroring all angle values
easily? If yes, Shouldn't we take the chance to clean this up in ODF1.3?

[ ... ]





Reply via email to