Commit graph

445 commits

Author SHA1 Message Date
Jürg Lehni
b52d343527 Use same notation for all injection scopes. 2015-09-06 16:48:23 +02:00
Jürg Lehni
cf813faa75 Remove all mention of points and square points as units.
And some other doc clean-ups.
2015-09-06 16:37:10 +02:00
Jürg Lehni
3d89cd71bd Some clean-up work on documentation. 2015-09-06 15:54:11 +02:00
Jürg Lehni
66717868cd Address failing #isLinear() tests. 2015-09-06 14:10:15 +02:00
Jürg Lehni
26e35322a4 Some reworking of code and comments. 2015-09-06 13:20:57 +02:00
Jürg Lehni
8b67d8a1dc Remove #isStraight() in favor of #hasHandles() and implement #clearHandles()
Relates to #652
2015-09-06 12:47:35 +02:00
Jürg Lehni
3fa385ac7c Fix typo in previous commit. 2015-09-05 09:56:37 +02:00
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
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
0cbce044aa Define Curve#_serialize() 2015-08-28 16:18:28 +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
3946bcb04e Remove unnecessary segments between two collinear curves in Path#reduce() 2015-08-24 12:49:33 +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
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
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
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
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
b541088c6f A whole lot of documentation clean-up. 2015-06-16 17:50:37 +02:00
Jürg Lehni
e3f04478d9 Clean up Curve.getParameterOf() code. 2015-06-16 12:29:27 +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
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
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
1239eb55ec Minor clean up in Curve.filterIntersections(). 2015-01-04 17:47:41 +01:00
Jürg Lehni
afc14b9634 Reduce Numerical.TOLERANCE to 1e-6, and use the same value across the boolean code.
Yields very good results now, across all tests.
2015-01-04 15:54:50 +01:00
Jürg Lehni
3564dafa93 Do not keep iterating if the curve was reduced to a point. 2015-01-04 13:23:59 +01:00
Jürg Lehni
d33d65fcc2 Revert change in recursion threshold as the new code reaches the desired precision earlier. 2015-01-04 13:21:12 +01:00
hkrish
3781aedb22 Small but critical fix on getSignedDistance method
when the line is perfectly vertical, return the difference between x values depending on the side. The earlier "l1y" is a silly mistake.
2015-01-03 23:41:47 +01:00
Jürg Lehni
b6a4815d03 Remove Curve#isHorizontal() as its implementation and precision is specific to boolean operations. 2015-01-03 21:02:12 +01:00
Jürg Lehni
a854c55914 Split off code from Path.Clockwise() into Curve.getEdgeSum() 2015-01-03 01:46:22 +01:00
Jürg Lehni
538eac6dc7 Use smaller tolerances in winding code, to address edge cases.
Closes #559
2015-01-02 23:47:26 +01:00
Jürg Lehni
477527f8ec Implement more intuitive version of clipConvexHull(), outlined in #570 by @iconexperience
Code further shortened using a sub-routine.
2015-01-02 22:36:04 +01:00
Jürg Lehni
232739fae9 Add comments to fat-line clipping code linking to issues #568 and #571. 2015-01-02 22:34:09 +01:00
Jürg Lehni
4ed9ef54f2 Fix bug in Curve.filterIntersections() and clean up code a bit. 2015-01-02 21:19:18 +01:00
Jürg Lehni
b2261fd512 Introduce Curve.filterIntersections() and use it both in PathItems#getIntersections() and Curve#getIntersections() 2015-01-02 21:00:05 +01:00
Jürg Lehni
3302a7dff5 Increase recursion threshold to 4 when checking for fatline convergence. 2015-01-02 20:49:09 +01:00
Jürg Lehni
fbd026ea0d Bring back code removed by @hkrish in commit 5fb75593c2
Relates to issue #570, still required to figure out why it is still needed.
2015-01-02 20:02:45 +01:00
Jürg Lehni
e3e3d13fa5 Add comment regarding issue #565 2015-01-02 16:33:15 +01:00
Jürg Lehni
b75def3f3a Implement optimal values in fat line clipping code for maximum recursion and curve time difference, as determined by @iconexperience.
Closes #565
2015-01-02 16:29:12 +01:00
Jürg Lehni
45c86a3035 Switch to suggested new implementation of Line.getSignedDistance() by @iconexperience
Closes #554
2015-01-02 16:17:19 +01:00
Jürg Lehni
318209e9e9 Replace compareNumbers() with equals() and improve numerical tolerance handling in test helpers. 2014-11-30 11:27:14 -08:00
Jürg Lehni
ebdc63fbfa Use correct formula in Curve#getTangentAt() for end-points when there is no handle.
Closes #553.
2014-11-08 17:16:22 -08:00
Jürg Lehni
e5714584ff Fix return type of #getCurvatureAt() methods.
Closes #535 properly this time.
2014-10-15 12:02:21 +02:00
Jürg Lehni
b71e2c69d6 Fix documentation of Curve#getCurvatureAt(), as well as Path#getCurvatureAt() & co.
Closes #535
2014-10-14 13:52:57 +02:00
Jürg Lehni
6a11532322 Clean up and simplify code a bit further. 2014-09-28 11:49:46 +02:00
Jürg Lehni
7462fe0b70 Fix Curve.getParameterAt() for negative values of offset, and implement unit test.
Closes #524.
2014-09-28 11:44:38 +02:00
Jürg Lehni
ee27fe820f Check for valid parameter range in Curve#getLocationAt() and delegate to it in #getLocationOf() 2014-09-20 11:09:09 +02:00
Jürg Lehni
c94fb3038f Use valid parameter range [0,1] in calls to Curve.solveCubic(). 2014-09-20 11:08:20 +02:00
Jürg Lehni
c2465b60fa Transform the correct amount of points in Curve.getValues() when a matrix is provided. 2014-09-20 11:06:25 +02:00
Jürg Lehni
7d69ef1864 Fix documentation of bean properties that are not read-only.
@bean can only be used when the property is read-only or both getters and setters are present in the scope.
2014-08-26 10:01:30 +02:00
Jürg Lehni
797a393c9a Remove various double white-spaces. 2014-08-25 12:49:14 +02:00
Jürg Lehni
48cb05a181 Replace tabs with 4 white-spaces. 2014-08-16 19:24:54 +02:00
Jürg Lehni
4d4a39c752 Implement Curve#getOffsetOf(point) / Path#getOffsetOf(point)
Closes #463.
2014-07-31 19:01:37 +02:00
Jürg Lehni
9d7ec13724 Update prepro.js to version that can evaluate whole expressions, and fix a newly introduced issue with it. 2014-05-14 15:14:03 +02:00
Jürg Lehni
8560a71312 Remove srcOffset and dstOffset parameters from Matrix#_transformCoordinates(). 2014-05-08 13:54:05 +01:00
Jürg Lehni
a9618b50f8 Small fix in Segment#linear. 2014-04-28 16:43:11 +02:00
Jürg Lehni
42945825e8 Fix all argument assignment TODOs. 2014-04-28 14:22:50 +02:00
Jürg Lehni
9ccba17fbe Clean up white-space, comments and jshint errors. 2014-04-14 18:29:26 +02:00
Jürg Lehni
4d52867b4a Fix spelling mistakes and white-spaces. 2014-04-02 20:52:13 +02:00
Jürg Lehni
737466d15c Fix all faulty {@true} doc statements. 2014-02-26 15:39:00 +01:00
Jürg Lehni
4c048dbc94 Rename fatline option to more explicit fatlineClipping. 2014-02-24 21:54:47 +01:00
Jürg Lehni
2fb1522c76 Minor code cleanup. 2014-02-24 21:33:35 +01:00
Jürg Lehni
f4baf690f8 Fix issue introduced in 0ce89fa47c 2014-02-24 21:30:12 +01:00
Jürg Lehni
c6329e89bb Implement Curve#isHorizontal() 2014-02-20 18:44:23 +01:00
Jürg Lehni
0ce89fa47c Simplify self-intersecting code in PathItem#getIntersections() by passing on tMin, tMax, uMin & uMax to Curve#getIntersections(). 2014-02-20 17:02:32 +01:00
Jürg Lehni
86e4d2a6b9 Implement Curve#remove() and Path#reduce().
Also have Item#reduce() recursively call #reduce() on reduced children.
2014-02-20 02:50:39 +01:00
Jürg Lehni
e6b7e9b2eb Remove unused Curve#_getWinding() and commented out CompoundPath#_getWinding() code. 2014-02-19 23:51:21 +01:00
Jürg Lehni
cc0f088a11 Improve evaluation of tangents and normals at t == 0 and 1. 2014-02-19 23:49:34 +01:00
hkrish
a62a54d7c1 Simplify the horizontal curve case in _getWinding method 2014-02-16 18:46:31 +01:00
hkrish
16ecbbafad Remove debug notes and helpers 2014-02-15 23:19:27 +01:00
hkrish
87ded4dcff Merge master 2014-02-15 00:02:02 +01:00
hkrish
cf9aec9233 Remove addLocation helper. We have to remove duplicates once we have all the intersections. 2014-01-25 23:50:29 +01:00
Jürg Lehni
cd6bfa0b77 Move Curve#getLength(from, to) to Curve#getPartLength(from, to).
Clears up the Curve#getLength() getter and removes the need for accessing arguments[]
2014-01-05 18:06:45 +01:00
Jürg Lehni
e3f3a9c9d2 Merge branch 'refs/heads/master' into v8-optimizations 2014-01-05 17:42:59 +01:00
Jürg Lehni
1ee5b2c126 Fix references to Bootstrap.js in comments. 2014-01-05 17:41:38 +01:00
Jürg Lehni
ea63d4c288 Merge branch 'refs/heads/master' into v8-optimizations
Conflicts:
	src/core/Base.js
	src/style/Color.js
2014-01-05 05:01:13 +01:00
Jürg Lehni
e22fa3a664 Update copyright notice. 2014-01-04 01:47:16 +01:00
Jürg Lehni
6a11547942 Fix issue in Curve.getLength() for linear curves with sub-ranges.
Closes #376.
2013-12-30 14:20:05 +01:00
Jürg Lehni
8395541298 Clean up docs and fix spelling mistakes. 2013-12-29 15:44:26 +01:00
hkrish
0b4da28c1e Optimize handling of horizontal curves in Curve#_getWinding 2013-12-29 12:38:59 +01:00
hkrish
39c52f326e New _getWinding method in Curve. This method return the winding contribution of this curve w.r.t. the resulting PathItem 2013-12-25 20:41:19 +01:00
hkrish
b4c7bcae5e Indent with Tabs like rest of paperjs code. 2013-12-25 20:33:51 +01:00
hkrish
3b013c0720 Add an optional ignoreLinear parameter to Curve#divide, so that new segments on linear curves will keep their correct bezier handles. 2013-12-23 23:38:12 +01:00
hkrish
20b6d699db Consistently return curve parameter on Line intersections as well, so that sorting intersections wouldn't fail. 2013-12-23 23:34:26 +01:00
hkrish
20fbdcffda Subdivide only if tDiff on both curves have failed to converge more than 80% 2013-12-23 23:27:23 +01:00