Commit graph

207 commits

Author SHA1 Message Date
Jürg Lehni
857e27e3a8 Fix accidental variable leackage. 2015-09-16 18:15:26 +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
2026e5571e Some code cleanup and comments in isCrossing(). 2015-09-16 02:54:25 +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
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
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
e2d2c836e5 Some boolean code clean-up. 2015-09-13 14:19:56 +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
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
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
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
cdd0cee623 Activate resolving of self-intersections in boolean code.
Relates to #779
2015-09-12 10:24:19 +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
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
1c1e19614e Avoid matching connected start- and end points when self-intersecting curves.
Partial fix for #765.
2015-09-09 07:28:08 +02:00
Jürg Lehni
9d12a0a82c Rename Curve#isLinear() to #isStraight()
Relates to #652
2015-09-06 17:35:27 +02:00
Jürg Lehni
dd1f5ba3d1 Remove Path#isLinear() and use Path#getArea() instaed in boolean code. 2015-09-06 16:35:15 +02:00
Jürg Lehni
fa9eb8be99 Merge remote-tracking branch 'origin/develop' into boolean-fix
; Conflicts:
;	src/path/PathItem.Boolean.js
2015-09-06 15:36:40 +02:00
Jürg Lehni
8b67d8a1dc Remove #isStraight() in favor of #hasHandles() and implement #clearHandles()
Relates to #652
2015-09-06 12:47:35 +02:00
Jürg Lehni
0651eee0c2 No more need for special handling of 'subtract' overlaps.
This is now taken care of in the code that handles overlaps itself, and the additional code was causing additional issues.
2015-08-30 19:58:32 +02:00
Jürg Lehni
4379e0b0f0 Improve boolean debug code. 2015-08-30 19:56:17 +02:00
Jürg Lehni
31771aa01d Insert results of boolean operations above whichever of the two paths appear further up in the stack. 2015-08-30 14:47:46 +02:00
Jürg Lehni
b4755ea699 Deactivate debug logging code. 2015-08-30 14:38:18 +02:00
Jürg Lehni
e07d8f55ea Add debug logging for intersections again. 2015-08-28 16:18:14 +02:00
Jürg Lehni
4ccb53ac68 Remove note about overlapping paths not working.
: D
2015-08-26 18:03:22 +02:00
Jürg Lehni
3ad897c943 Remove all boolean debug code.
Keeping it on the boolean-fix branch for now.
2015-08-26 17:47:18 +02:00
Jürg Lehni
da0d01ee09 More work on main boolean code.
Start addressing self-intersecting paths, and remove resulting open paths for now.
2015-08-26 17:36:20 +02:00
Jürg Lehni
a099377ac6 Remove debug logging for CurveLocation. 2015-08-26 16:58:52 +02:00
Jürg Lehni
d85b4f0c80 Fix issues with wrong sorting of CurveLocation in Curve.filterIntersections() 2015-08-26 16:56:28 +02:00
Jürg Lehni
fd1f2e56f8 Optimize Item#intersects() by only checking to see if there are at least one intersection. 2015-08-25 11:45:28 +02:00
Jürg Lehni
7ca8ce3cbb Actually use selfOp argument for self operations.
Appears to be working fine.
2015-08-24 21:02:42 +02:00
Jürg Lehni
e242634011 Minor code clean-up. 2015-08-24 12:59:10 +02:00
Jürg Lehni
4be48cec16 A lot more work to correctly support overlapping edge cases in boolean operations: intersect(), exclude(), subtract() 2015-08-24 12:30:14 +02:00
Jürg Lehni
75f669d839 Implement proper method to determine which segment to choose when encountering overlaps. 2015-08-24 04:36:49 +02:00
Jürg Lehni
15bcf2a7aa More work on supporting overlaps in boolean operations other than unite(). 2015-08-23 22:42:57 +02:00
Jürg Lehni
68832e0690 Revert "Switch to using 0, 1 instead of tMin, tMax for tangents."
This reverts commit edfabcbbd8.

; Conflicts:
;	src/path/PathItem.Boolean.js
2015-08-23 21:48:16 +02:00
Jürg Lehni
92ec09f451 Some debug code fixes and improvements. 2015-08-23 21:34:41 +02:00
Jürg Lehni
85d21c84b8 Start implementing support for touching and overlapping shapes in boolean operations.
Relates to #449, #450, #648, #719
2015-08-23 21:19:19 +02:00
Jürg Lehni
edfabcbbd8 Switch to using 0, 1 instead of tMin, tMax for tangents.
getTangentAt() can handle that since a while now.
2015-08-23 09:43:28 +02:00
Jürg Lehni
9bd399b5b8 Introduce Curve#isStraight() and use it in splitPath() and divide() to keep the result of splitting straight curves straight.
Do not use Curve#isLinear(), as that would include curves with collinear handles, and we don't want to set these straight.
2015-08-22 22:06:42 +02:00
Jürg Lehni
bddff95fe3 Remove workarounds in splitPath() thanks to improved precision of Numerical.solveCubic(). 2015-08-22 14:24:31 +02:00