Re: Number of vertices unclear, when using closepath command

On Sat, 2013-11-02 at 21:06 +0100, Regina Henschel wrote:
> Hi Jasper, hi all,
> 
> Jasper van de Gronde schrieb:
> > On 2013-10-30 11:27, Regina Henschel wrote:
> >> Hi all,
> >>
> >> while implementing an SVG import for Apache OpenOffice, we come across
> >> this problems:
> >>
> >> Take this path definitions
> >> (A) d="m40,20 -20,10 30,10 z l10,-10"
> >> and
> >> (B) d="m40,20 -20,10 30,10 z m0 0 l10,-10"
> >>
> >> Which vertices exists? How many markers are created and what
> >> directions have these markers?
> > The spec states (section 8.3.3): "If a "closepath" is followed
> > immediately by a "moveto", then the "moveto" identifies the start point
> > of the next subpath. If a "closepath" is followed immediately by any
> > other command, then the next subpath starts at the same initial point as
> > the current subpath." So from that point of view both of these paths
> > consist of two subpaths with 3 and 1 segments, respectively, with the
> > same vertices.
> 
> It is clear, that there are three line segments for the first subpath 
> and one line segment for the second subpath. But see it from the view of 
> a point. All agree, that the point (20|30) has one incoming line segment 
> and one outgoing line segment. But the point (40|20)?
> 
> >
> > Now, the spec says (section 11.6.3) that marker-start "defines the
> > arrowhead or polymarker that shall be drawn at the first vertex of the
> > given ‘path’ element or basic shape". A little further in that same
> > paragraph it seems to be implied that "first" and "last" should be
> > considered to apply to subpaths (rather than the entire path), and that
> > in the event of a closed subpath the first and last vertex should be
> > considered the same (and that one might thus have to draw two markers at
> > the same position, depending on the values of marker-start and
> > marker-mid). It would thus seem that for both paths you should have the
> > following sequence of markers: start mid mid end start end.
> 
> It was already cleared, that there is no marker-end or marker-start in 
> between, but only at the start and end of the whole path, see thread 
> http://lists.w3.org/Archives/Public/www-svg/2013Sep/0041.html
> 
> >
> > Markers are a little tricky though. When it comes to the orientation the
> > spec seems to imply (section 11.6.2, explanation of the orient
> > attribute) that if a closepath is followed by an explicit moveto, the
> > orientation of the end marker corresponding to the closepath should be
> > the same as the orientation for the starting point of the subpath closed
> > by the closepath, and that the orientation can be found by considering
> > the last and first segments of that subpath (the one that is closed by
> > the closepath), or alternatively that this just holds for the start
> > marker, and that the end marker just acts like that path ends completely
> > at that point (but that seems weird). However, when a closepath is /not/
> > followed by a moveto, you should take the the last segment of the
> > subpath closed by the closepath (so the line segment drawn by the
> > closepath) and the first segment of the /subsequent/ path. (Confusingly,
> > in the latter case the orientation of the marker corresponding to the
> > start of the second subpath does not appear to be altered...)
> 
> It seems to be not clear. For example, test the files contained in the 
> .zip file in https://issues.apache.org/ooo/attachment.cgi?id=81841
> 
> Internet Explorer has marker-start and two marker-mid on point (40|20) 
> in case B, but only marker-start and one marker-mid in case A. It might 
> paint the marker of the second subpath identical to the end of the first 
> subpath, on top of each other; not able to rule it out only from view.
> 
> Seamonkey too has 1+2 markers in case B and 1+1 markers in case A. But 
> it draws the marker-start different from Internet Explorer.
> 
> Inkscape shows 1+2 markers in both cases with identical orientations, 
> which I think is wrong because of the explicit rule in section 11.6.2.
> 
> Chrome has 1+2 markers in both cases, but orientations are different 
> from the other implementations. That both cases are identical, seem 
> wrong to me, same as for Inkscape.
> 
> >
> > In summary: (as far as I can tell) both paths have the exact same
> > vertices and /types/ of markers, the orientations do differ though. In
> > the first case the orientation of the marker corresponding to the
> > closepath will be determined by the line segment corresponding to the
> > close path (from [30,10] to [40,20]) and the final line segment (from
> > [40,20] to [10,-10]), the orientation of the marker corresponding to the
> > first point of the second subpath would be solely determined by the
> > final line segment (from [40,20] to [10,-10]). In the second case the
> > two subpaths are essentially handled separately.
> >> Is stroke-linejoin or stroke-linecap used in point (40|20)?
> >> For example B
> >> stroke-linejoin between lines (40|20)(20|30) and (50|40)(40|20)
> >> and on top of it
> >> stroke-linecap from line (40|20)(50|10)
> > Not sure about linecaps/-joins, but I hope the above will at least
> > provide a bit more insight. I would follow the references given above
> > and have a careful look yourself, there are quite a few corner cases and
> > exceptions. (Be sure to also have a look at the 'path' element
> > implementation notes: section F.5.)
> >
> 
> If reading the spec gave an unambiguous solution, there would not be so 
> many different implementations.

The SVG 2 spec will be clearer, but I don't think it has been updated
yet to reflect the Working Group discussions. We can also add new tests
to the W3C test suite. I don't have time to look into this at the moment
but if you think the WG discussions don't resolve all the issues then
you should send an email to www-svg@w3.org (see:
http://lists.w3.org/Archives/Public/www-svg/ )

Tav

> Kind regards
> Regina
> 

Received on Saturday, 2 November 2013 20:27:04 UTC