Commit graph

5734 commits

Author SHA1 Message Date
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
Jürg Lehni
52c0e3e225 Fix boolean test to adress shifted segment sequence.
We really need a circular check for closed path geometry.
2015-09-13 13:26:08 +02:00
Jürg Lehni
d84a84c67f Change the way winding contributions are propagated
The new approach preserves segment sequence.

Relates to #777
2015-09-13 13:06:01 +02:00
Jürg Lehni
19c9a0e722 Use the correct points on curve2 when checking intersections at beginnings and ends. 2015-09-13 11:52:17 +02:00
Jürg Lehni
d62caf6faa Introduce CURVETIME_EPSILON, to be used when handling curve time parameters.
Relates to #777
2015-09-12 22:55:58 +02:00
Jürg Lehni
4f04dae20f Use the correct GEOMETRIC_EPSILON when matching beginnings and ends of curve in Curve.getParameterOf()
Relates to #777
2015-09-12 22:26:16 +02:00
Jürg Lehni
8047f90ccf Switch to using GEOMETRIC_EPSILON in getWinding() code. 2015-09-12 22:20:31 +02:00
Jürg Lehni
ef45a5f62c Clean up tMin / tMax uses. 2015-09-12 22:14:04 +02:00
Jürg Lehni
a0730756c1 Use correct term for curve parameter renormalization. 2015-09-12 22:13:18 +02:00
Jürg Lehni
085cdd74a2 Use GEOMETRIC_EPSILON when comparing curve start / end points.
Relates to #777
2015-09-12 21:56:53 +02:00
Jürg Lehni
2fb203ddd1 Adjust notes since we now support boolean operations on self-intersecting Paths items 2015-09-12 11:58:17 +02:00
Jürg Lehni
3da921a0b0 Improve CompoundPath#reduce() to properly reduce suppaths.
Relates to #779
2015-09-12 11:43:41 +02:00
Jürg Lehni
fb5f8c0115 Introduce GEOMETRIC_EPSILON, for isOrthogonal(), isCollinear() and overlap checks.
Relates to #777
2015-09-12 10:35:47 +02:00
Jürg Lehni
cdd0cee623 Activate resolving of self-intersections in boolean code.
Relates to #779
2015-09-12 10:24:19 +02:00
Jürg Lehni
35f3ac87bf Change checks for startConnected / endConnected to support compound-paths.
Closes #778
2015-09-12 10:12:17 +02:00
Jürg Lehni
86f404123e Minor code tweaks. 2015-09-11 12:07:27 +02:00
Jürg Lehni
c69ea345da Correctly handle self-intersections when deciding to switch segments.
Closes #765
2015-09-10 05:21:47 +02:00
Jürg Lehni
4770cfe2f8 Minor intersection refactoring clean up. 2015-09-10 05:18:56 +02:00
Jürg Lehni
04452730dd Simplify CurveLocation data structures.
Directly creating and linking intersections simplifies things a lot.
2015-09-09 17:17:49 +02:00
Jürg Lehni
78e0bae6aa Activate code that handles self-intersection directly now.
Relates to #765, #761
2015-09-09 08:24:02 +02:00
Jürg Lehni
abf70378fe Some more code fixes.
One was breaking unit tests.
2015-09-09 08:15:43 +02:00
Jürg Lehni
155442e706 Increase readability of convex-hull check in self-intersection code. 2015-09-09 08:12:03 +02:00