Commit graph

455 commits

Author SHA1 Message Date
Jürg Lehni
2167e458ae Since we're using sorting now, we can add all start- / end-point intersections before finding the ones within the curves. 2015-10-03 10:38:45 -05:00
Jürg Lehni
c0bb6890bd Switch back to CURVETIME_EPSILON now that overlap edge-case appears to be handled. 2015-10-01 20:47:56 -05:00
Jürg Lehni
9b883e5fb6 Introduce new TRIGONOMETRIC_EPSILON with higher precision than GEOMETRIC_EPSILON. 2015-10-01 20:44:27 -05:00
Jürg Lehni
f5012a78e9 Reformat nested ternary operators again.
This got messed up in a recent refactoring.
2015-10-01 20:24:47 -05:00
Jürg Lehni
72f9705615 Fix overeager refactoring in c77165be3a 2015-10-01 08:49:26 -05:00
Jürg Lehni
fee3a90329 Fixed leaked globals. 2015-10-01 07:05:00 -05:00
Jürg Lehni
b8c6eb46ad Fix weirdness of Curve#divide() modifying the wrong Curve object. 2015-10-01 06:52:08 -05:00
Jürg Lehni
c77165be3a Fix issue in Curve#divide() that lead to intersection segments being linked up wrongly.
Relates to #784
2015-10-01 06:21:17 -05:00
Jürg Lehni
53dd726057 Rename ignoreStraight argument to _setHandles 2015-10-01 05:55:22 -05:00
Jürg Lehni
75a004187e Improve Line.intersect() to more reliably find interesctions at the beginnings / ends.
Relates to #784
2015-10-01 04:38:48 -05:00
Jürg Lehni
53ff973f06 Perform the faster check first. 2015-10-01 03:38:35 -05:00
Jürg Lehni
5f706a4a5d Use lower tolerance in bezier clipping code.
This really should be Numerical.CURVETIME_EPSILON, but I get better results using Numerical.GEOMETRIC_EPSILON. Perhaps Numerical.CURVETIME_EPSILON / 2 is the right value to use though.
2015-09-30 14:19:40 -05:00
Jürg Lehni
9bcf369e6a Ony split potentially self-intersecting curves if there are actual canditates. 2015-09-30 13:44:51 -05:00
Jürg Lehni
45040abc53 More clean-ups for #773
- Use local variables instead of array lookups for values used repeatetly, and merge with pre-existing variables.
- Add some more comments and reference to long explaining post in issue.
2015-09-30 13:40:01 -05:00
Jürg Lehni
1231153553 Start cleaning up code from #773
- Use Line object isntead of static methods
- Do not rely on Math.sign() as it's not supported on all browsers
- Wrap lines at 80 char width.
2015-09-30 13:07:55 -05:00
Jürg Lehni
07874034e9 Merge pull request #793 from iconexperience/Fix-for-#773
Fix for #773
2015-09-30 11:51:37 -05:00
Jan
ec70fa1806 Fix for #773
Indroduced more reliable method for finding self intersection on curves.
2015-09-30 12:19:09 +02:00
Jürg Lehni
317b809fee Only calculate non-parametric bezier curve if values are actually used. 2015-09-26 11:46:54 -05:00
Jürg Lehni
ea3cc63e2e Reformat code a bit. 2015-09-26 07:41:03 -04:00
Jan
3fa810a557 Bugfix for #791 and performance improvement
Prevent infinite loop for degenerate curve. Additionally only calculate sy if necessary and save one call to `Curve.solveCubic`
2015-09-26 07:36:12 -04: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
cc7e60e51a Revert db1ecdddd5 and fix issue properly this time.
Hopefully?
2015-09-23 12:44:00 -04:00
Jürg Lehni
20f950ac65 Implement #isFirst() / #isLast() tests on Segment and Curve. 2015-09-23 12:26:44 -04:00
Jürg Lehni
db1ecdddd5 Fix filtering of locations at ends of curves in addCurveLineIntersections()
Only occured when the line / curve had to be flipped.
2015-09-21 16:56:08 -04:00
Jürg Lehni
84bcc537e1 Simplify addCurveLineIntersections() and exclude end points. 2015-09-21 12:13:53 -04:00
Jürg Lehni
e36319b71a Give PathItem#getIntersections() a way to filter found intersections right away.
And use it in #getCrossings()
2015-09-21 10:41:59 -04:00
Jürg Lehni
b5af47a7b1 Implement a better approach to calculate Path#clockwise...
...merging code with Path#area.

Closes #788
2015-09-18 21:41:54 +02:00
Jürg Lehni
10eafccd1a Implement 0.75 * handle scaling in curve bounds checks. 2015-09-18 21:09:57 +02:00
Jürg Lehni
17dc5eb51a Allow gettings of unstyled bounds on curves without paths. 2015-09-18 20:15:18 +02:00
Jürg Lehni
ae93652b56 Clean up getIntersection() methods.
Now that they filter the results on the fly.
2015-09-18 17:31:23 +02:00
Jürg Lehni
9c812335e5 Curve._filterIntersections() is now without a job. 2015-09-17 09:39:22 +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
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
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
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
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
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
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
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
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
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
abf70378fe Some more code fixes.
One was breaking unit tests.
2015-09-09 08:15:43 +02:00