- From: Tavmjong Bah <tav.w3c@gmail.com>
- Date: Sat, 02 Nov 2013 21:26:35 +0100
- To: Regina Henschel <rb.henschel@t-online.de>
- Cc: www-svg@w3.org
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