- From: Dr. Olaf Hoffmann <Dr.O.Hoffmann@gmx.de>
- Date: Mon, 13 May 2013 11:59:23 +0100
- To: www-svg@w3.org
Brian Birtles:
a)
> stroke-widths-array: <position>: <width>, <position>: <width> etc.
Yes, this is better understandable.
Why not to say, that the value of stroke-widths-array is a list of
parameter lists.
A parameter list starts with a '(' and ends with a ')' .
(I think, there is no problem with parentheses , because we already have
them for the transform list values. And it provides a readable type of
grouping together everything for the same position.)
The list consists of a number for either the fraction (0 to 1 - you need no
%, therefore the better choice and we have already such fractions as for
all opacity related properties and for keySplines) of the pathLength along
the path or a point number or a length in user
coordinates as given by stroke-widths-position (instead of only
the keyword 'length' it might additionally or alternatively contain an
unit identifier, if it is assumed to be helpful to use other units than
user coordinates).
The following number represents the width at the position.
Another optional number is reserved for a later specification
of asymmetrical behaviour. Author may not add such an
additional number for SVG 2 documents.
Maybe later it could be defined, that if there are two numbers,
the first is for the 'left part', the second for the 'right part', if only
one number is provided, it is for both parts together. Doing it this way,
old SVG 2 documents will remain compatible with future versions.
If an SVG 2 viewer finds two numbers, but has not the capability
to present asymmetrical strokes, it simply adds both numbers
to one widths and does it symmetrically (this needs minor further
exploration, if negative widths to switch between left and right
are possible as well).
d) Interpolation:
Well, if you note something like
stroke-widths-position: fraction;
stroke-widths-array: (0, 20), (1, 50)
one has to define somehow the widths
for all fractions between 0 and 1 ;o)
Affine and discrete interpolations are mainly useful
to create an advanced pattern - comparable to
stroke-dasharray, but this can only provide binary
pattern, either 0 width or finite width.
Smooth interpolation is useful to get something
more 'organic', for example to draw grass or
caulis of plants, but can be useful for smooth pattern
as well, if you want to have no edges in the stroke
presentation - obviously if an author has already managed
to provide a path with no corners, typically there is some desire
to have no corners in the stroke as well.
Somehow one has to realise the smooth
interpolation. If you use Catmull-Rom, this can be still
have the effect of 'rounded corners', to be able to
apply a second order smoothness or a more general
behaviour, cubic interpolation is pretty useful, as for
path data already available.
With Catmull-Rom for stroke authors can be forced
to add much more points to the path d attribute to
get approximately the intended smooth behaviour
for the stroke, they already can realise for the path itself.
I think, what you had in mind is interpolation between
property values for animation or transition - of course one
has to take into account this as well. If we assume, that the
list is a repeatable pattern and we have a list of property
values with different list lengths, we simply repeat each
list until all cover the complete path. Between these extended
lists one can interpolate as usual, between each number of a
list item separately.
Because stroke-widths-array is considered to be a list of lists,
one needs some more description for animation interpolation,
but this is straight forward and less complex as for transform.
Because stroke-widths-position defines the meaning of
all positions in the list, it may only cause a surprise, if this
property is animated. But this is more fun for authors, not really
a problem for viewers.
The shorthand notation stroke-widths may cause additional
problems for animation, as a few other shorthand properties,
in SVG only available as properties and not as attributes.
Do we really need a shorthand notation causing such problems?
f) Structure of notations
>At the same time I prefer to avoid a
>list of numbers whose relationship is not obvious. (CSS box-shadow is
>absolutely horrible in this way!)
See suggestion above.
I see the advantage to put everything together to a list of lists, however
at some point, the complexity of the list becomes quite impressive.
For example if we want to add in this or a future version control points
for cubic interpolation, one gets something like:
stroke-widths-array is a list of parameter lists.
A parameter list starts with a '(' and ends with a ')' .
The list consists of a number (for either the fraction of the pathLength
along the path or a point number or a length as given by
stroke-widths-position.
More numbers can follow, at least one.
If only one number follows, it represents the width at the position
It at least two numbers follow, the second represents the width
to the left, the third to the right.
There can be four more optional numbers, representing the
control points for cubic interpolation ... (similar definition as
for keySplines list items).
At some points, one has to consider to provide even more
structure to such a list list item, maybe more parentheses or
markers to allow for example to skip the second width, but
to specify the control points etc.
g) See suggestion above, as long as authors are adviced not
to use additional numbers for SVG 2 documents, there should
be no problem for new viewers interpreting old documents.
And one can already indicate, that authors have to take into
account, that old SVG 2 viewers may only have a symmetrical
presentation.
Maybe we need a feature string switch or something like that,
to provide an option to switch between a tricky old or simple
stroke presentation for old SVG 2 viewers and future viewers.
Obviously one can avoid all this complications by specifying
everything at once, we already know, that it will be useful anyway.
If in SVG 2 only symmetrical strokes are allowed,
authors still can use masks and other advanced tricks or manually
calculated shapes, slowing down the rendering massively to get
the intended effect - once they can use different widths, there
will be the desire to have it asymmetrical, be sure ;o)
h) I have seen the interesting caps - looks like a lot of
interesting fun, miters can be another interesting field of adventure
here, already for continuous interpolation, and for discrete one
gets similar problems as for stroke-dasharray, if the discrete
change happens near to a corner of the path - depending
on the accuracy of the viewer, the nightmare for authors starts ;o)
Because already the caps can get quite big, even for continuous
interpolation accuracy problems at miters may result in interesting
differences - from the point of a tester, more annoying from the
point of an author maybe - one has to look, how sensitive the
interpolation methods are for critical cases.
Olaf
Received on Monday, 13 May 2013 10:59:54 UTC