Re: 2D Transforms Update


some questions/comments about the current draft from today

a) from previous discussions I got the impression, that the properties
defined here are almost independent from the transform attribute
used currently in SVG (1.1, 1.2), however the samples in the draft
seem to indicate, that these properties - at least the transform -
are availlable too as (presentation) attributes in SVG - what applies
and how to care about backwards incompatibilties?
For example the different syntax for rotate and the most problematic
initial value of transform-origin?

The section 'How to read this document and give feedback' suggests
the use of a switch for backwards compatibility. But how to use it, if
old attributes and new and incompatible presentation attributes
are not distinguishable by syntax?
My suggestion: Provide an example in the draft how to do this.

Obviously further questions/problems on how to use these new properties
especially in SVG depends mainly on this question, therefore currently
I have no idea, how to note these properties or how they interact, if
the property is applied to an element, that has already an old
transform attribute. And it seems to be still a secret, if  the property
transform-origin has any influence on the appearence of the old
transform attribute, what would be very confusing for many SVG
applications and destructive for existing content.

b) Related are questions about animation -
priorities and interactions between CSS transitions and animations
and SMIL animations and whether the new properties are animatable
in the SMIL sense and whether there is a relation between the animation
of a transform attribute and the property - all this seems to be an open
question in the draft.

c) Does an animated transformation (or animation of the content of
a property transformed element) have any influence on the 
transform-origin 50% 50% - could be very funny and frustrating for
authors to get wild moves of the initial value due to changes of the 
bounding box ;o)
What happens, if the element (sometimes) has not boundingBox,
for example a rotating line or another object, scaled one dimension
to zero?
To say that the intial value becomes 0 is not necessarily useful for
one dimensional objects, for them there is a need now to define 
a boundingBox for transform-origin's initial value.

d) Some transformation functions (section 'Transformation Functions')
have values like <angle> or <translation-value>.
Does it imply additional unit identifiers in SVG or in CSS?
For example for CSS angle is currently (CSS2.0 or CSS3 draft, 
not available at all in the referenced CSS2.1) only available
for aural style sheets and requires a unit - I assume that the transform
property will be applicable not just for aural style sheets in the future
and hopefully the angles will not be normalised if applied to rotations,
as currently required in CSS.
In SVG currently the values are always defined as numbers without 
The samples seem to be mixed, for SVG the number variant seems
to be used, for CSS the unit variant preferred, but not in example X.
What applies?

It seems to be useful to mention/define exactly what the
values are for CSS (not aural style sheet) and SVG - at
least as a note for CSS until the CSS3 draft becomes a
recommendation or a reference to current or applicable
definitions in SVG.

e) Due to the incompatibilies between the properties and the 
the current transform attribute and the completely different
behaviour for animation, I think, the best approach would be to
define the transform property effect as an additional transformation
applied before or after the effect of the transform attribute is
applied. To avoid as much confusion as possible it should be
specified as well, that the properties are not animatable in the
SMIL sense (because the decomposition model is anyway
incompatible with SMIL animation and is only applicable for
CSS animations and transitions). Authors can still use the
SMIL animation for the attribute and the CSS animation/transition
for the property.
Would be even better to give it a different name, like transform2D
(or already transform3D to prepare for that draft).

f) Because there are advanced applications especially in SVG, I think
authors should have the choice to define the interpolation method
between matrices. Decomposition is useful sometimes for a rough
approach, however to interpolate between the values as in SMIL
provides a simpler understanding, is more predicable and is therefore
much more simple for authors how generate values lists with programs
to ensure the required accuracy for there desired effect. I think, with
decomposition practically authors always have to provide about
10-30 values per second animation to ensure, that the decomposition
has no surprising effects - and there will still be problems left due to
the requirement to determine the inverse of a matrix numerically
for this approach. The inverse does not always exist and the numerical
process to invert numerically can implicate major incaccuraries and
will be a typical problematic area to stress the implementation about
the SVG requirement of a precision of better than one device pixel.
Several applications require a more stable and effective/faster method 
to interpolate.

Note that different from typical CSS decorated content, especially
SVG tiny 1.2 has features, that can result still in visible graphics, even
if the inverse of a matrix does not exist. This has use cases and
applications and can appear intentionally or unintentionally with or
without animation. Every method, that requires the determination
of the inverse matrix must cause problems either for the implementation
or for the author of the document due to useless behaviour of viewers
in such cases.
For example it is mentioned in 'Transitions and animations between transform 
values':  'For example, an animation in which scale moves from 1 to -1. At 
the time when the matrix is in such a state, the transformed element is not 
Using specific features from SVG tiny 1.2 it is surely not the intention of
the author, that just for this interpolation step the object is not rendered,
if it is visible else all the time due to a remaining stroke (vector effect) 
or a constrained transformation. 

By the way, what does it mean, that in 'Matrix decomposition for animation'
it is mentioned: 'When interpolating between 2 matrices, each is decomposed 
into the corresponding translation, rotation, scale, skew, and perspective 
values. Not all matrices can be accurately described by these values.
Those that can't are decomposed into the most accurate representation 
possible, using the technique below.'
I do not understand this sentence. Is it incomplete? 
How can they be decomposed, if they cannot be accuately descirbed
by these values? Are there known examples of matrices, that cannot
be described as a group of  translation, rotation, scale and skew?
I think, any matrix can be represented with a combination of those
specific transformation. It is just not always possible to use the
pseudo-C-code from the draft to determine such a representation,
because it requires unfortunately an inversion - this is more a
problem of the used pseudo-code, not of the idea of decomposition
(however I did not prove this assumption yet - but at least if someone
provides examples, I think, I will always be able to find such
a representation or even more than one :o).
What happens to 'those' if thy cannot be decomposed with the 
given pseudo-code? 
What happens with the animation, if one value is one of 'those'?
What happens with the author intended applications and use cases for
Does it mean, that authors have to blow up the file size dramatically 
as currently for matrix in SVG with frame based discrete animations in 
'those' cases?
Typically those will be the problematic cases from above, that would be 
no problem at all with interpolation between values ;o)
Therefore authors should at least have a choice to avoid inversion
problems for more advanced applications, that will appear at least in SVG

Best wishes 


Received on Friday, 1 October 2010 12:45:18 UTC