Commit graph

5755 commits

Author SHA1 Message Date
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
Jürg Lehni
2026e5571e Some code cleanup and comments in isCrossing(). 2015-09-16 02:54:25 +02:00
Jürg Lehni
e548391276 Use the zero-epsilon when checking beginnings and ends of curves for overlaps.
Relates to #786 and #777
2015-09-16 02:33:56 +02:00
Jürg Lehni
1e5c1bafaf Increase geometric epsilon to better match collinear lines.
Needs more testing, but seems to perform well.

Relates to #786
2015-09-16 02:31:37 +02:00
Jürg Lehni
8f9549dd12 Fix non-breaking spaces. 2015-09-16 02:29:17 +02:00
Jürg Lehni
ad276ba46a More improvements in tracePaths()
- Use new isCrossing() check
- Correctly switch crossings in exclusion
2015-09-15 19:39:35 +02:00
Jürg Lehni
60a725b527 Implement correct CurveLocation#isCrossing() check.
And improve curve caching. Still needs work.
2015-09-15 19:38:28 +02:00
Jürg Lehni
3ce7d88347 Second attempt at simplifying boolean code.
This time without endless loops.
2015-09-15 16:31:05 +02:00
Jürg Lehni
089738478c Bring back boolean exclusion handling to reverted code. 2015-09-15 15:03:12 +02:00
Jürg Lehni
7b3f8598f4 Make sure all results of boolean operations are styled and inserted in the sample way. 2015-09-15 14:11:27 +02:00
Jürg Lehni
e4b4037721 Revert "Improve handling of exclude() operations."
This reverts commit e85586d0fe.
2015-09-15 13:01:52 +02:00
Jürg Lehni
5e327f7a48 Revert "Substantial simplifications in boolean code."
This reverts commit a665175a89.
2015-09-14 15:23:46 +02:00
Jürg Lehni
7aef20ae6b Compare intersection points instead of curve time when deciding to merge.
Use same precision indepenent of curve length.
2015-09-14 15:18:44 +02:00
Jürg Lehni
fec479167c Improve debug logging and drawing. 2015-09-14 15:16:52 +02:00
Jürg Lehni
a665175a89 Substantial simplifications in boolean code.
These were probably made possible thanks to increased precision elsewhere in the lib.
2015-09-14 01:20:03 +02:00
Jürg Lehni
e85586d0fe Improve handling of exclude() operations.
Determine wether to switch to other intersection or not based on tangents.

Closes #781 again.
2015-09-14 00:51:46 +02:00
Jürg Lehni
b532c9cce2 Handle boolean exclusion as a special case.
Switching each time an intersection is encountered.

Closes #781
2015-09-13 22:12:04 +02:00
Jürg Lehni
fbb0f3f37d Remove left-over debugging code. 2015-09-13 21:50:35 +02:00
Jürg Lehni
b231e9b2a8 Accept CompoundPath items as children of CompoundPath items.
Just add their children and remove the parent.

Closes #541
2015-09-13 16:06:24 +02:00
Jürg Lehni
e2d2c836e5 Some boolean code clean-up. 2015-09-13 14:19:56 +02:00
Jürg Lehni
ea2ff5ec28 Increase precision in Curve.getParameterOf()
Usually only requires 0-1 more iteration.
2015-09-13 13:45:20 +02:00
Jürg Lehni
56da70c030 No need to pass TOLERANCE.
We're comparing with a default tolerance of 1e-5.
2015-09-13 13:43:50 +02:00
Jürg Lehni
f029d5f9da Write docs for the new EPSILON values. 2015-09-13 13:41:53 +02:00