Jürg Lehni
6fb4b7e3c4
Change the way overlaps are detected in lines.
...
We don't really care weather they are actually fully collinear, we only really care about the distances from the beginnings- and end-points of one line from the other, since that proximity will affect results elsewhere.
2015-10-03 11:46:50 -05:00
Jürg Lehni
5d7a596026
Fix wrong upper bounds check in Line.intersect()
...
1 as a solution was accidentally excluded.
2015-10-03 11:44:43 -05:00
Jürg Lehni
61fc75ace3
Some code clean-up.
2015-10-03 10:40:33 -05: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
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
7496a7c9e2
Try linked up intersections first before switching to the other intersecetion.
2015-10-02 19:00:32 -05:00
Jürg Lehni
632eb25f19
Bring back code removed in 11611c8fe2
again.
...
But add a _visited check, to get best of both approaches.
2015-10-02 18:57:45 -05:00
Jürg Lehni
00f1d5089f
Clean up Numerical code a bit.
2015-10-02 18:56:41 -05:00
Jürg Lehni
f6f9d963eb
Shorten Numerical.solveQuadratic() a bit.
2015-10-02 15:46:15 -05:00
sapics
c6de2f7f23
Fix to minimize floating point noise
2015-10-02 15:39:51 -05:00
Jürg Lehni
11611c8fe2
Remove isValid() check for current segment before attempting the switch.
...
This properly fixes example 14 in #784 .
2015-10-02 01:06:36 -05:00
Jürg Lehni
7f7d35a38a
Clean-up epsilon definitions.
2015-10-02 01:05:45 -05:00
Jürg Lehni
8dfa721e5a
Adjust debug rendering.
2015-10-01 21:12:15 -05:00
Jürg Lehni
a808aaf0fa
Remove unnecessary check for other === start.
2015-10-01 21:11:51 -05:00
Jürg Lehni
de57a7fbc8
Simplify tracePaths() code.
2015-10-01 21:09:30 -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
4b4ccbac09
Make GEOMETRIC_EPSILON so that overlap edge-cases are correctly matched.
...
Relates to #784
2015-10-01 20:45:08 -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
8aca088bf6
Clean-up splitPath() code a bit.
2015-10-01 09:41:57 -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
0ca5a106de
Improve Line.intersect() comments.
2015-10-01 04:50:41 -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
d385d25a51
Include comment regarding CurveLocation#equals() modification.
2015-09-30 13:48:28 -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
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
4e9bac1ca5
Fix code brokean in commit a869add90d
2015-09-30 12:39:59 -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
a869add90d
Rename variables in Line.intersect()
2015-09-26 12:09:44 -05: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
fc0b5a8858
Give the intersection that brings us back to the beginning alwasy the priority.
2015-09-24 07:47:39 -04:00
Jürg Lehni
c79166a46f
Mark last segment as visited when done.
2015-09-23 14:31:12 -04:00
Jürg Lehni
cf5bf38c3b
Minor simplification.
2015-09-23 13:33:35 -04:00
Jürg Lehni
515d4ff93d
Make Line.isCollinear() / Point#isCollinear() more reliable.
2015-09-23 13:26:29 -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
6a29f200e3
Always use getIntersection(), even on the first segment.
...
Now that it works well.
2015-09-21 12:44:53 -04:00