Commit graph

1560 commits

Author SHA1 Message Date
Jürg Lehni
af355dc82c Fix false positives in Curve#isLinear() and Segment#isLinear(). 2015-09-03 09:01:07 +02:00
Jürg Lehni
041c31a88a Prevent variable leackage. 2015-09-02 15:54:14 +02:00
Jürg Lehni
b9a07ca538 Address code comments by @iconexperience in #762. 2015-08-31 22:01:18 +02:00
Jürg Lehni
20222be5c6 Minor clean-up in fat-line code. 2015-08-30 19:59:13 +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
bd61390f9d improve break-off condition in curve interesection code.
To prevent arbitrary incorrect solutions occuring when tDiff is very close to zero.
Closes #762.
2015-08-30 14:37:21 +02:00
Jürg Lehni
27aae8b261 Add support for values array and toString object format to Curve constructor. 2015-08-30 14:14:52 +02:00
Jürg Lehni
8f13fa54fc Remove debugger statement. 2015-08-30 13:52:13 +02:00
Jürg Lehni
0cbce044aa Define Curve#_serialize() 2015-08-28 16:18:28 +02:00
Jürg Lehni
e07d8f55ea Add debug logging for intersections again. 2015-08-28 16:18:14 +02:00
Jürg Lehni
0e26b53053 Improve CurveLocation.sort() to handle more edge cases.
Relates to #648
2015-08-28 16:17:54 +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
86fd33c7d5 User correct tolerance in CurveLocation sorting. 2015-08-26 17:06:02 +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
815991d556 Some minor adjustments and fixes. 2015-08-26 11:43:39 +02:00
Jürg Lehni
2c4dcb96c2 Streamline addOverlap() code a bit. 2015-08-26 11:26:55 +02:00
Jürg Lehni
69a2fcff46 Pass on correct matrix in CompoundPath#getPathData(). 2015-08-26 04:28:30 +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
3946bcb04e Remove unnecessary segments between two collinear curves in Path#reduce() 2015-08-24 12:49:33 +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
Jürg Lehni
716d21e369 Always use fat-line clipping since fallback doesn't behave the same way. 2015-08-21 16:39:41 +02:00
Jürg Lehni
0436b2749a Fix some comments. 2015-08-19 17:28:41 +02:00
Jürg Lehni
84b202fd79 Expose and reuse Curve evaluation method names. 2015-08-19 17:26:52 +02:00
Jürg Lehni
9fe93d1434 Move Curve evaluate() method to private scope. 2015-08-19 17:19:42 +02:00
Jürg Lehni
da82116501 Rework handling of weighted and normalized curve tangents and normals.
Relates to #563
2015-08-19 17:15:41 +02:00
Jürg Lehni
59eec1f27b Implement Curve#isLinear(), #isCollinear() & co without depending on the segments being part of a path. 2015-08-19 11:43:37 +02:00
Jürg Lehni
e476672748 Use better epsilon values in Numerical.solveQuadratic() and solveCubic()
To finally satisfy both #541 and #708.

With this change in place, https://github.com/paperjs/boolean-test is also finally back to run with 0 errors. Woop!
2015-08-18 23:47:28 +02:00
Jürg Lehni
08bdfe585b Fix issue in getWinding() where rays were counted twice.
Closes #736.
2015-08-18 22:36:10 +02:00
Jürg Lehni
4ee68e5782 Various changes to #isCollinear(), #isOrthogonal(), #isArc()
- Rename #isArc() - > #isOrthogonalArc()
- Implement versions for Curve
- Write proper documentation
2015-08-17 14:33:48 +02:00
Jürg Lehni
f8314f927e Various changes on #isLinear(), #hasHandles() & co
Relates to #652

- Implement #hasHandles() on Path, Segment and Curve
- Remove Path#isPolygon()
- Define #isLinear() consistently across Path, Segment and Curve.
- Introduce new Segment#isStraight()
2015-08-17 14:31:23 +02:00
Jürg Lehni
10fb616665 Fixed leaked globals.
Detected using QUnit's "Check for Globals" feature!
2015-07-27 12:36:45 +02:00
Jürg Lehni
19bcd19b49 Implement path versioning for segment changes.
And use it to keep CurveLocation objects up to date. Closes #682
2015-06-16 19:36:22 +02:00
Jürg Lehni
c1485e7068 Use < instead of <= when comparing against TOLERANCE 2015-06-16 19:33:21 +02:00
Jürg Lehni
26cdbb6805 Fix typo: #isColinear() -> #isCollinear()
Keeping misspelled version around for a while.
2015-06-16 18:39:52 +02:00
Jürg Lehni
dbac9c06de Bring back private UIDs for Color.
SVG Export for multiple gradients was broken.
2015-06-16 18:12:40 +02:00
Jürg Lehni
b541088c6f A whole lot of documentation clean-up. 2015-06-16 17:50:37 +02:00