<div dir="auto">Jim,<div dir="auto"><br></div><div dir="auto">FYI I am working on a more general clipper for filled shapes (only non zero winding rule) that ignores useless segments on left / right sides but leaves the path closed for filling primitives.</div><div dir="auto"><br></div><div dir="auto">It is more tricky... to handle turning points (corners) but I think it could be applied later to the Stroker case to avoid opening the path (and require ClosedPathDetector).</div><div dir="auto"><br></div><div dir="auto">Should I look at the Area class that performs such clipping but is known to be extremely slow ? If you think it is useful, I could optimize it as I did in Marlin (array caching...). What is your opinion ? Is Area used in the java2d pipeline ? That would improve the overall performance.</div><div dir="auto"><br></div><div dir="auto">PS: I wonder if curves should be subdivided at inflexion / root points in this (too) basic fill pipeline to improve cubic / quad accuracy (as it is the case in Stroker) and have monotonic curves.</div><div dir="auto">I studied AFD accuracy (inc/dec thresholds) but did not try curve subdivision to guarantee the special point accuracy (cups...)</div><div dir="auto"><br></div>Hope you will have time soon to look at the webrev, your feedback may help a lot.<div dir="auto"><br></div><div dir="auto">Cheers,</div><div dir="auto">Laurent<br><div class="gmail_extra" dir="auto"><br><div class="gmail_quote">Le 29 août 2017 2:58 AM, "Jim Graham" <<a href="mailto:james.graham@oracle.com">james.graham@oracle.com</a>> a écrit :<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Laurent,<div class="quoted-text"><br>
<br>
On 8/28/17 2:09 PM, Laurent Bourgès wrote:<br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="quoted-text">
Hi Jim,<br>
<br>
Thanks for your comments, it helped refining the webrev.<br>
<br>
Here are my answers:<br>
<br></div>
2017-08-26 2:22 GMT+02:00 Jim Graham <<a href="mailto:james.graham@oracle.com" target="_blank">james.graham@oracle.com</a> <mailto:<a href="mailto:james.graham@oracle.com" target="_blank">james.graham@oracle.co<wbr>m</a>>>:<div class="quoted-text"><br>
<br>
    [D]Dasher.java - why the changes from (firstSegIdx > 0) to (firstSegIdx != 0)?<br>
<br></div>
As firstSegIdx is initialized to 0, I prefer testing (firstSegIdx!= 0) as it looks more obvious.<div class="quoted-text"><br>
For me, (firstSegIdx > 0) indicates that the sign has a particular meaning and that firstSegIdxmay be negative.<br>
</div></blockquote>
<br>
Interesting, I'm used to != 0 being only used in contexts where the value might have some specific reason for being negative, but I can see why you did that.<div class="quoted-text"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
    [D]Stroker.java, line 196ish - why are ROUND treated differently.  You have a question on that as well in a comment.<br>
<br>
I found the answer: C = 4/3 * (SQRT(2) - 1) is used to compute the control points (cubics) to approximate a circle. I fixed the constant estimation according to the math formula.<br>
</blockquote>
<br></div>
The control points don't control how far the path gets from the line, though - that measurement is arbitrary compared to the clipping operation.  The correct distance from the vertex to the edge of the drawn path is lw/2.<div class="quoted-text"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I agree your new rules.<br>
I fixed the (D)Stroker init() methods according the latter rules and tested again.<br>
</blockquote>
<br></div>
Looks good.<div class="quoted-text"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Probably I should write a new Clip test rendering Z shapes with all  (cap / join) combinations and their bounds aligned to the Stroker's outside clip rules.<br>
<br>
Here is an updated webrev (Marlin2D only):<br>
<a href="http://cr.openjdk.java.net/~lbourges/marlin/marlin-080.1/" rel="noreferrer" target="_blank">http://cr.openjdk.java.net/~lb<wbr>ourges/marlin/marlin-080.1/</a><br>
<br>
PS: I can send you an updated MarlinFX patch (when you need it).<br>
</blockquote>
<br></div>
Not yet until I've had a chance to review the guts of the algorithm.  So far I've only looked at a few boundary changes.  I'll get to that soon...<font color="#888888"><br>
<br>
                        ...jim<br>
<br>
</font></blockquote></div><br></div></div></div>