W3C home > Mailing lists > Public > www-svg@w3.org > December 2012

Re: SVG2 - suggestion for a new path command to close a subpath smoothly

From: Dr. Olaf Hoffmann <Dr.O.Hoffmann@gmx.de>
Date: Mon, 3 Dec 2012 15:26:03 +0100
To: www-svg@w3.org
Message-Id: <201212031526.03063.Dr.O.Hoffmann@gmx.de>
Dirk Schulze:
...
>
> SVG paths already require a lot of storage of values, like for the control
> points of the previous segment for a shorthand like T. But it is indeed not
> required to cache more than that. The Z is done by the graphic library
> under the hood. Implementations mostly don't need to store the first point
> of a path and just have a look before of one segment at the moment.
>

To get markers at corners right, one has to determine both the 
direction before and after the corner to get it right - to get it right
can be more complex than just looking for control points in both
directions.
Even worse, if a cubic segment creates a corner within the segment.
To get the linejoin right here, one has to analyse the path to
find out, that there is a corner at all.
Compared to this already existing issues, it looks like a simple
task just to take points from the beginning of the subpath again -
this requires no deeper analysis of the path data.

And as Jasper van de Gronde already mentioned, with a
general option to close a path one can avoid problems due to
numerical accuracy limitations. And authors can avoid unintended 
effects of zero length Z on markers in most cases.

Therefore I think, there are a much more benefits than disadvantages.
And I think, the advantages are of much more practical relevance 
as for the new suggested path commands than arcTo, which are
quite nice for authors as well of course.
Because those will cause already major problems to view new SVG2
documents with old viewers, it is of some relevance now to add at
least all useful new commands and trying to avoid to add more in
maybe five or ten years in SVG3, because it turns out, that they are
really missing.
Such a major change of SVG path data has to be considered 
carefully. And it is only worth to change something at all in SVG2
path data, if the change covers at least such applications, which
are already known to be useful.

>
> The accepted new path segments are harmonizing Canvas and SVG more. We will
> support the arc and arcTo of Canvas in SVG. My concern is the increasing
> complexity of the path syntax. The authors of SVG 1 tried to limit
> everything to one letter. This is kind of a burden now, even if it still
> has benefits.
>

As already mentioned, we have the problem, that old viewers will not manage 
to interprete new syntax, but path data are a fundamental part of SVG.
Therefore only to introduce these two useful, but not essential commands
is not enough. But there will be new commands due to ACTION-3085
(requirement for smooth interpolation between points) - therefore to be 
able to close the path smoothly fits as well to this effort to get things 
easier to work for authors. It completes the already accepted task to 
improve path data.
These arc commands are only a small part of it.
And only if we get everything at once, it is worth to change the syntax
now in SVG2. 

If it is only intended to keep things simple for SVG-viewers, the path data
syntax should not be changed at all, no new commands from canvas,
no smooth interpolation between points etc. And better to skip features
like markers, stroke-dasharray etc, because viewers do not manage them
today - maybe an indication, that such programs are not clever enough
to present advanced vector graphics ;o)
And the problems with stroke-dasharray (there are previous discussions)
show already, that the results from graphic libraries are not reliable 
anyway - maybe they are not clever enough as well to interprete
advanced vector graphics - or the SVG viewers should not delegate
advanced tasks to libraries, which do not care about the concepts of SVG.

Olaf
Received on Monday, 3 December 2012 14:26:55 GMT

This archive was generated by hypermail 2.3.1 : Friday, 8 March 2013 15:54:53 GMT