Commit graph

120 commits

Author SHA1 Message Date
Jürg Lehni
2e552853fd Handle paths as circular lists in CurveLocation.insert() as well.
Relates to #805
2015-10-13 07:23:15 +02:00
Jürg Lehni
0553201de8 Add forgotten semi-colon. 2015-10-13 00:11:24 +02:00
Jürg Lehni
3d33bbdfa3 Clean-up CurveLocation#equals() 2015-10-13 00:10:21 +02:00
Jürg Lehni
f77579079e Improve CurveTime#equals() to handle locations that wrap around beginnings / ends of paths.
See https://github.com/paperjs/paper.js/issues/805#issuecomment-147470240 for details.
2015-10-13 00:06:34 +02:00
Jürg Lehni
bbc0029252 Go back to simple overlap handling.
It appears to produce less glitches.
2015-10-11 17:05:23 +02:00
Jürg Lehni
4500e520ea Minor code clean-up. 2015-10-11 17:00:23 +02:00
Jürg Lehni
7aed221801 Some refactoring in static methods of CurveLocation. 2015-10-11 09:18:50 +02:00
Jürg Lehni
939a9fe034 Improve overlap handling by actually storing overlap curves on intersections objects.
And properly comparing against them in tracePaths().
2015-10-08 23:54:00 +02:00
Jürg Lehni
3ac3df8d32 Rewrite method for linking and choosing multiple intersections in the same location.
The special handling of overlaps reduces the amount of remaining glitches substantially.

Relates to #784.
2015-10-06 21:09:35 +02:00
Jürg Lehni
05bc6afdbb Always give intersection segment priority over current segment if valid.
Fixes example 22 in #784, doesn't seem to introduce new issues, unlike last time I tried this approach.
2015-10-05 05:34:22 +02:00
Jürg Lehni
5601e21996 Make sure the two locations are actually part of the same path before comparing index / parameter values. 2015-10-04 10:14:04 +02:00
Jürg Lehni
ebc956353f Move code to adjust segments after split to CurveLocation. 2015-10-04 02:25:33 +02:00
Jürg Lehni
79cb216684 Define CurveLocation#isOverlap() and improve documentation of various related methods. 2015-10-03 17:15:45 -04:00
Jürg Lehni
50c7473337 Improve CurveLocation#add() and #equals() to better merge locations.
Before, very close locations over curve boundaries where not merged.
2015-10-03 10:40:13 -05:00
Jürg Lehni
53ff973f06 Perform the faster check first. 2015-10-01 03:38:35 -05:00
Jürg Lehni
d385d25a51 Include comment regarding CurveLocation#equals() modification. 2015-09-30 13:48:28 -05:00
Jürg Lehni
2a7d1c5728 Improve CurveLocation#equals()
Relates to #784, described in https://github.com/paperjs/paper.js/issues/784#issuecomment-143161586
2015-09-30 12:47:02 -05:00
Jürg Lehni
fd927cbe22 Properly solve issues with self-intersecting special case.
(e.g. shapes resembling the infinity sign)
2015-09-24 12:49:39 -04:00
Jürg Lehni
812ac63e60 Compare points instead of curve time paramters for better precision and reliability. 2015-09-21 10:53:53 -04:00
Jürg Lehni
1ad95c9020 Improve CurveLocation.add() to always merge duplicates.
We nee to check neighbors of the found location too.
2015-09-21 07:06:41 -04:00
Jürg Lehni
1302df0cb8 Fix variable leackage. 2015-09-20 23:22:31 +02:00
Jürg Lehni
a95ba12bc3 isCrossing() needs parameter checks on both curves. 2015-09-18 22:26:09 +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
17356637ac Clean up new CurveLocation code. 2015-09-17 10:18:45 +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
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
8f9549dd12 Fix non-breaking spaces. 2015-09-16 02:29:17 +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
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
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
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
8f13fa54fc Remove debugger statement. 2015-08-30 13:52:13 +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
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
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
84b202fd79 Expose and reuse Curve evaluation method names. 2015-08-19 17:26:52 +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
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
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
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
8ad067ec6c Use tolerance when comparing curve locations by parameter. 2015-01-02 21:20:28 +01:00