Commit graph

278 commits

Author SHA1 Message Date
Jürg Lehni
0839dbe1f5 New overlap handling is producing new glitches.
Turn it off for now, until further analysis has been done.
2015-10-09 10:27:25 +02:00
Jürg Lehni
b2127a83ad Revert "Do not start with segments with multiple intersections."
This reverts commit 5129fb0050.
2015-10-09 10:22:54 +02:00
Jürg Lehni
514e6651e6 Revert "Avoid all intersections as starting points for boolean paths."
This reverts commit 9590578339.
2015-10-09 10:19:05 +02:00
Jürg Lehni
c45ae4b51a Revert "Never starting in intersections allows for further code simplifications."
This reverts commit 892154e8f8.
2015-10-09 10:18:45 +02:00
Jürg Lehni
892154e8f8 Never starting in intersections allows for further code simplifications. 2015-10-09 00:03:34 +02:00
Jürg Lehni
9590578339 Avoid all intersections as starting points for boolean paths. 2015-10-08 23:56:18 +02:00
Jürg Lehni
939a9fe034 Improve overlap handling by actually storing overlap curves on intersections objects.
And properly comparing against them in tracePaths().
2015-10-08 23:54:00 +02:00
Jürg Lehni
5129fb0050 Do not start with segments with multiple intersections.
Simplifies the required checks at the end, and generally reduces number edge cases.
2015-10-08 23:38:41 +02:00
Jürg Lehni
c9eba83cc7 Improve detection of start segments.
Segments with multiple intersections need to be checked thoroughly to avoid errors.
2015-10-08 23:13:37 +02:00
Jürg Lehni
5c70f47b6f Fix colors in reportWindings code. 2015-10-07 23:37:09 +02:00
Jürg Lehni
15d797ac55 Improve linkIntersections() to prevent endless recursions in linked intersections. 2015-10-07 17:20:08 +02:00
Jürg Lehni
3e9d7593cf Some smaller tweaks in tracePaths() 2015-10-07 10:58:29 +02:00
Jürg Lehni
4fac3ee6fc Rename getIntersection() -> getBestIntersection() 2015-10-07 10:57:43 +02:00
Jürg Lehni
bfa0459c52 Go back to using Group for divide() results.
As they may contain multiple CompoundPaths.
2015-10-07 10:57:09 +02:00
Jürg Lehni
1103c7036f Remove unnecessary isValid() check on segments without intersections.
It was only causing issues without solving anything.
2015-10-07 02:02:27 +02:00
Jürg Lehni
8c56a1a110 Include _visited checks in isValid() calls.
This magically reduces the remaining glitches in @iconexperience's test-suite to half.

Relates to #784.
2015-10-06 22:23:43 +02:00
Jürg Lehni
896b068266 Switch from recursion to a simple loop in getIntersection() 2015-10-06 21:30:51 +02:00
Jürg Lehni
8e4bef217a Change Curve.getParameterOf() to accept a point instead of x, y arguments. 2015-10-06 21:24:58 +02:00
Jürg Lehni
3ac3df8d32 Rewrite method for linking and choosing multiple intersections in the same location.
The special handling of overlaps reduces the amount of remaining glitches substantially.

Relates to #784.
2015-10-06 21:09:35 +02:00
Jürg Lehni
fcdf916863 Some tweaks to debugging code.
Leave open path artifacts clearly visible for now, so they can be more easily detected.
2015-10-05 17:42:01 +02:00
Jürg Lehni
93cacffd06 Improve comments describing isValid() calls. 2015-10-05 10:56:29 +02:00
Jürg Lehni
7494f880f8 Revert previous commit, due to wrong assumption. 2015-10-05 10:44:34 +02:00
Jürg Lehni
90b4cf7292 No need to check for overlap when determining value for unadjusted
Since setting only changes behavior if there actually is an overlap.
2015-10-05 05:52:35 +02:00
Jürg Lehni
05bc6afdbb Always give intersection segment priority over current segment if valid.
Fixes example 22 in #784, doesn't seem to introduce new issues, unlike last time I tried this approach.
2015-10-05 05:34:22 +02:00
Jürg Lehni
bd4874d73e Improve debug logging of windings. 2015-10-05 04:57:12 +02:00
Jürg Lehni
ba76ed8671 Consider the winding contribution at the intersection of the next segment as well.
Fixes both example 20 and example 21 in #784
2015-10-05 04:24:04 +02:00
Jürg Lehni
035a3a1b8c Remove unnecessary _visited check. 2015-10-04 02:27:56 +02:00
Jürg Lehni
ebc956353f Move code to adjust segments after split to CurveLocation. 2015-10-04 02:25:33 +02:00
Jürg Lehni
8073183010 Use getIntersections() with right filter instead of getCrossings() for boolean operations. 2015-10-03 17:17:12 -04:00
Jürg Lehni
5af8515d1a Commit some useful debug code, deactivated for now. 2015-10-03 16:18:00 -04:00
Jürg Lehni
61fc75ace3 Some code clean-up. 2015-10-03 10:40:33 -05:00
Jürg Lehni
7496a7c9e2 Try linked up intersections first before switching to the other intersecetion. 2015-10-02 19:00:32 -05:00
Jürg Lehni
632eb25f19 Bring back code removed in 11611c8fe2 again.
But add a _visited check, to get best of both approaches.
2015-10-02 18:57:45 -05:00
Jürg Lehni
11611c8fe2 Remove isValid() check for current segment before attempting the switch.
This properly fixes example 14 in #784.
2015-10-02 01:06:36 -05:00
Jürg Lehni
8dfa721e5a Adjust debug rendering. 2015-10-01 21:12:15 -05:00
Jürg Lehni
a808aaf0fa Remove unnecessary check for other === start. 2015-10-01 21:11:51 -05:00
Jürg Lehni
de57a7fbc8 Simplify tracePaths() code. 2015-10-01 21:09:30 -05:00
Jürg Lehni
8aca088bf6 Clean-up splitPath() code a bit. 2015-10-01 09:41:57 -05:00
Jürg Lehni
b8c6eb46ad Fix weirdness of Curve#divide() modifying the wrong Curve object. 2015-10-01 06:52:08 -05:00
Jürg Lehni
c77165be3a Fix issue in Curve#divide() that lead to intersection segments being linked up wrongly.
Relates to #784
2015-10-01 06:21:17 -05:00
Jürg Lehni
53dd726057 Rename ignoreStraight argument to _setHandles 2015-10-01 05:55:22 -05:00
Jürg Lehni
fd927cbe22 Properly solve issues with self-intersecting special case.
(e.g. shapes resembling the infinity sign)
2015-09-24 12:49:39 -04:00
Jürg Lehni
fc0b5a8858 Give the intersection that brings us back to the beginning alwasy the priority. 2015-09-24 07:47:39 -04:00
Jürg Lehni
c79166a46f Mark last segment as visited when done. 2015-09-23 14:31:12 -04:00
Jürg Lehni
6a29f200e3 Always use getIntersection(), even on the first segment.
Now that it works well.
2015-09-21 12:44:53 -04:00
Jürg Lehni
51c34444db Some more debugging code clean-up. 2015-09-21 12:18:57 -04:00
Jürg Lehni
0f61ce896a Some code clean-up. 2015-09-21 10:54:33 -04:00
Jürg Lehni
f6f42fe09b Improve handling of overlap ambiguity in getIntersection()
Two passes are needed, first strict, then non-strict, to prevent 'better' next candiates over 'worse' ones.
2015-09-21 09:44:17 -04:00
Jürg Lehni
19a17b2918 Prevent infinite loops through circular references of multiple intersections. 2015-09-21 09:43:19 -04:00
Jürg Lehni
40570b3e59 Furher improve boolean debug logging and drawing. 2015-09-21 09:42:47 -04:00