Commit graph

1535 commits

Author SHA1 Message Date
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
Jürg Lehni
7a6ee5d5f4 Do not implicitly close paths in SVG compound paths.
Closes #705
2015-06-16 14:49:54 +02:00
Jürg Lehni
2cf6cd7a14 Correctly clone all attributes in Shape#toPath() and Path#toShape()
Also write documentation for both methods.
Closes #622.
2015-06-16 14:30:40 +02:00
Jürg Lehni
e3f04478d9 Clean up Curve.getParameterOf() code. 2015-06-16 12:29:27 +02:00
Jürg Lehni
6ec34fbb60 Replace Lenna with Marilyn. 2015-05-31 10:50:04 +02:00
Jürg Lehni
27bb8a356f Implement unique ids, and fix issue with Base.deserialize()
Gradient and Symbol were overriding each other in the dictionary, and dictionary entries could not contain references to other dictionary entries.

Closes #690
2015-05-11 19:39:39 +02:00
Jürg Lehni
7749641e66 Handle out-of-bounds offsets/parameters correctly.
Closes #660
2015-04-04 17:05:39 +02:00
Jürg Lehni
563a26f112 Clean up PathFitter fix a bit. 2015-04-04 15:54:34 +02:00
Jürg Lehni
66fbb9ee2a Merge branch 'fix-simplify-bug' of https://github.com/calamitas/paper.js into fix-simplify-bug 2015-04-04 15:35:37 +02:00
Jürg Lehni
993a9df178 Simplify fix for #626 a bit.
Closes #626.
2015-02-28 19:20:48 +01:00
Jürg Lehni
8a625e0acd Merge pull request #627 from iam-TJ/issue_626
Issue 626: Don't try to iterate a null array
2015-02-28 19:18:50 +01:00
Jürg Lehni
15813107c0 Remove unused variables. 2015-02-26 13:44:09 +01:00
Peter Vanbroekhoven
d5c25dbc52 Change PathFitter to constrain newly found control points.
See https://github.com/paperjs/paper.js/issues/414 .
2015-02-22 20:05:06 +01:00
TJ
d3af8483a8
Don't try to iterate a null array
Signed-off-by: TJ <hacker@iam.tj>
2015-01-26 21:21:46 +00:00
Jürg Lehni
22be259167 Deal with edge cases in Curve.solveCubic() where small cubics are very close to lines.
Also reduce Numerical.EPSILON again, as required by some rare edge cases.

Relates to #541.
2015-01-10 22:05:42 +01:00
Jürg Lehni
efaae89dfc No need to add 0. 2015-01-05 21:47:15 +01:00
BrownBear2
4d36a2d6f4 fixed svg path parsing for arcs with more than one definition 2015-01-05 21:32:21 +01:00
Jürg Lehni
1c758a415a Switch to new and improved Line.getSignedDistance() in fat-line clipping code as well. 2015-01-05 16:20:33 +01:00
Jürg Lehni
1803cd216a Handle empty paths in Path#join()
Closes #516
2015-01-05 00:42:00 +01:00
Jürg Lehni
6562f861ab More code clean-up. 2015-01-05 00:13:30 +01:00
Jürg Lehni
9977b6ab68 Some code clean-up. 2015-01-05 00:09:34 +01:00
Jürg Lehni
72bd150a34 Fix the rest of the failing tests that 6c6ad76c94 had caused.
Also closes #610.
2015-01-04 23:59:25 +01:00
Jürg Lehni
5f3df1f5a1 Fix some failing tests with PathItem#contains(), introduced by commit 6c6ad76c94 2015-01-04 23:28:39 +01:00
Jürg Lehni
5d875f2d83 Clean up code formatting. 2015-01-04 22:37:27 +01:00
Jürg Lehni
8928eaffd0 Merge branch 'refs/heads/master' into boolean-operations 2015-01-04 22:00:55 +01:00
Jürg Lehni
7e80e19e32 Insert results of boolean operations above the first path. 2015-01-04 21:59:31 +01:00