- From: Dirk Schulze <dschulze@adobe.com>
- Date: Sun, 22 Apr 2012 10:44:57 -0700
- To: "Dr. Olaf Hoffmann" <Dr.O.Hoffmann@gmx.de>
- CC: "www-style@w3.org" <www-style@w3.org>, "public-fx@w3.org" <public-fx@w3.org>
On Apr 22, 2012, at 9:14 AM, Dr. Olaf Hoffmann wrote: > Hello, > > this is about: > http://www.w3.org/TR/2012/WD-css3-transforms-20120403/#animation > > In the last paragraph of 15. it is mentioned: > [In some cases, an animation might cause a transformation matrix to be > singular or non-invertible. 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 rendered.] > > Because SVG tiny 1.2 has and maybe future versions of SVG will > have the property vector-effect="non-scaling-stroke", it is a real use > case to have objects, transformed to 1D or 0D objects, which remain > visible, for example with this one can create a simple presentation of > an 1D harmonic oscillator, using rotation, one direction transformed to > zero. > > Therefore I think, it is not a good idea to say that the object is not > rendered, because this will not be the effect intended by the author > and there is no simple workaround to get the same effect with > another method. SVG 2 will have the 'non-scaling-stroke' feature. And I am working on a possible issue with 'non-scaling-stroke' and 3D transforms [1]. Anyway. How do you want to draw a figure on a singular matrix? You can't draw the figure, so the value of 'vector-effect' doesn't matter at all: <svg xmlns="http://www.w3.org/2000/svg"> <rect width="100" height="100" vector-effect="non-scaling-stroke" transform="scale(0)" stroke-width="100" stroke="black" fill="none"/> </svg> In this example the transform of the rect has a singular matrix, caused by scaling by the factor of 0. Therefore the figure can't get painted at all. How can 'non-scaling-stroke' make a difference here? It doesn't even matter if the ancestor node had this transform: <svg xmlns="http://www.w3.org/2000/svg"> <g transform="scale(0)"> <rect width="100" height="100" vector-effect="non-scaling-stroke" stroke-width="100" stroke="black" fill="none"/> </g> </svg> You can verify it in all current browsers with 'non-sclaing-stroke support' (Opera, Safari, Chrome) and Batik. At least from an implementation point of view you want the local to root transform to be invertible. > > Indeed, because for animation there is no need to invert a matrix > at all - the problem with the inversions seem to be only an artifact > of 16.1., not related to the intended animation effect, I suggest to > skip this paragraph. For example, nothing specific happens at 0, > if one scales from 1 to -1 - there is no reason not to render the > object continuously for such an animation. Browsers use a different approach: quaternions [2]. I'll try to update this paragraph in the next days. But even so, what do you want to draw on scale(0)? > > Maybe this is already an indication, that 16.1 should be improved, > if it introduces problems, that have nothing to do with the intended > animation effect (it is a well known thing, that one should avoid > numerical matrix inversion, if possible; the inversion algorithm may > already cause trouble around the situation, where it becomes > non-invertable, resulting in funny numerical artifacts) ... > > > > Best wishes > > Olaf > > > Greetings, Dirk [1] http://lists.w3.org/Archives/Public/public-fx/2012JanMar/0173.html [2] https://www.w3.org/Bugs/Public/show_bug.cgi?id=15960
Received on Sunday, 22 April 2012 17:45:27 UTC