Commit graph

5981 commits

Author SHA1 Message Date
Jürg Lehni
51c34444db Some more debugging code clean-up. 2015-09-21 12:18:57 -04:00
Jürg Lehni
84bcc537e1 Simplify addCurveLineIntersections() and exclude end points. 2015-09-21 12:13:53 -04:00
Jürg Lehni
0f61ce896a Some code clean-up. 2015-09-21 10:54:33 -04:00
Jürg Lehni
ce95043e99 Lower geometric epsilon.
Differences slightly above 1e-8 where observed.
2015-09-21 10:54:17 -04:00
Jürg Lehni
812ac63e60 Compare points instead of curve time paramters for better precision and reliability. 2015-09-21 10:53:53 -04:00
Jürg Lehni
e36319b71a Give PathItem#getIntersections() a way to filter found intersections right away.
And use it in #getCrossings()
2015-09-21 10:41:59 -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
Jürg Lehni
1ad95c9020 Improve CurveLocation.add() to always merge duplicates.
We nee to check neighbors of the found location too.
2015-09-21 07:06:41 -04:00
Jürg Lehni
f47af12b0d Shorten code statement. 2015-09-20 23:22:41 +02:00
Jürg Lehni
1302df0cb8 Fix variable leackage. 2015-09-20 23:22:31 +02:00
Jürg Lehni
b68be09c87 Fix all accidental non-breaking spaces. 2015-09-20 22:39:28 +02:00
Jürg Lehni
530b8b7bc8 Handle adjusted overlap winding contribution and operator calls through new isValid() function. 2015-09-20 15:50:26 +02:00
Jürg Lehni
738cc4c214 Yet another improvement in multiple interseections boolean code.
This appears to be the one. The only remaining failing cases seem to be linked to getting the same intersection twice now!

Relates to #787
2015-09-20 15:29:54 +02:00
Jürg Lehni
946157f1b1 Add note about usage of _originalWinding. 2015-09-20 14:19:14 +02:00
Jürg Lehni
20ed1e007c More fixes in handling of multiple intersection locations. 2015-09-20 14:17:23 +02:00
Jürg Lehni
5db9703aff No more need to check for crossings since every intersection is now either an overlap or a crossing. 2015-09-20 14:16:47 +02:00
Jürg Lehni
53862233e5 Improve debug logging of new multiple intersections code. 2015-09-19 22:47:57 +02:00
Jürg Lehni
4df65c1809 Various improvements to code that handles multiple intersections in same location.
Relates to #787
2015-09-19 19:07:44 +02:00
Jürg Lehni
1d6f552212 Prevent endless loop through circular references. 2015-09-19 13:42:48 +02:00
Jürg Lehni
2c8634793c First attempt at implementing handling of multiple intersections in the same location.
Relates to #787, works pretty well already for many situations.
2015-09-19 13:21:29 +02:00
Jürg Lehni
18c5a06f45 Fix colors in animated boolean operations demo. 2015-09-18 23:00:47 +02:00
Jürg Lehni
081de1d12a 'exclude' operation needs overlap handling too. 2015-09-18 22:29:29 +02:00
Jürg Lehni
a95ba12bc3 isCrossing() needs parameter checks on both curves. 2015-09-18 22:26:09 +02:00
Jürg Lehni
b5af47a7b1 Implement a better approach to calculate Path#clockwise...
...merging code with Path#area.

Closes #788
2015-09-18 21:41:54 +02:00
Jürg Lehni
8cf562c57b Revert "Remove special handling of winding contribution on overlaps"
This reverts commit c6a38589e9.
The special handling seems to be still necessary in some edge cases, e.g. in BooleanOperations.html
2015-09-18 21:10:58 +02:00
Jürg Lehni
10eafccd1a Implement 0.75 * handle scaling in curve bounds checks. 2015-09-18 21:09:57 +02:00
Jürg Lehni
17dc5eb51a Allow gettings of unstyled bounds on curves without paths. 2015-09-18 20:15:18 +02:00
Jürg Lehni
c6a38589e9 Remove special handling of winding contribution on overlaps
Looks like the new code handles this correclty now!
2015-09-18 18:06:15 +02:00
Jürg Lehni
5af391d333 Fix errors in Boolean Operations example. 2015-09-18 17:52:14 +02:00
Jürg Lehni
23443dc8f4 Clean up boolean code. 2015-09-18 17:51:57 +02:00
Jürg Lehni
66b01973f0 Simplify exclusion handling for new boolean code. 2015-09-18 17:51:43 +02:00
Jürg Lehni
87687d816b Implement PathItem#resolveCrossings() based on the new #getCrossings() method. 2015-09-18 17:51:03 +02:00
Jürg Lehni
c70f8cb3cc Simplify overlap calculations by keeping the original winding value. 2015-09-18 17:46:46 +02:00
Jürg Lehni
59a23fdd3f Improve debug logging. 2015-09-18 17:33:42 +02:00
Jürg Lehni
73a9989261 Fix CurveLocation#isCrossing() for locations in the middle of curves. 2015-09-18 17:32:19 +02:00
Jürg Lehni
ae93652b56 Clean up getIntersection() methods.
Now that they filter the results on the fly.
2015-09-18 17:31:23 +02:00
Jürg Lehni
85311cfb29 Improve Path#getArea() and #isClockwise() 2015-09-18 17:27:29 +02:00
Jürg Lehni
17356637ac Clean up new CurveLocation code. 2015-09-17 10:18:45 +02:00
Jürg Lehni
9c812335e5 Curve._filterIntersections() is now without a job. 2015-09-17 09:39:22 +02:00
Jürg Lehni
1508b8fc75 Improve debug logging. 2015-09-17 01:15:41 +02:00
Jürg Lehni
2750c34090 Improve the way intersections are sorted and merged.
Use a binary search to determine insertion index and compare with neighbours to eliminate doubles.
2015-09-17 01:03:13 +02:00
Jürg Lehni
30f1441c26 Various boolean code clean-ups. 2015-09-16 18:34:35 +02:00
Jürg Lehni
d0332f843f Renamed Curve#reverse() and Segment#reverse() to #reversed()
Since they don't modify the object. Also introduce new Segment#reverse(), which does.
2015-09-16 18:16:48 +02:00
Jürg Lehni
857e27e3a8 Fix accidental variable leackage. 2015-09-16 18:15:26 +02:00
Jürg Lehni
7061bc0e0a Simplify CurveLocation.sort() code
Relates to #787
2015-09-16 10:52:51 +02:00
Jürg Lehni
0980ad3fe9 Fix remaining issues with curve location sorting.
Relates to #787
2015-09-16 10:44:41 +02:00
Jürg Lehni
f8bd7a2005 Improve debug logging and drawing.
And add more descriptive comments to tracePath().
2015-09-16 09:52:41 +02:00
Jürg Lehni
197aa4b4cf No need to wrap angles as they're always -PI < a < PI. 2015-09-16 02:56:24 +02:00