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
Jürg Lehni
d522e4aec2
Merge remote-tracking branch 'origin/master' into boolean-operations
...
Conflicts:
src/path/PathItem.Boolean.js
2015-01-04 21:29:50 +01:00
Jürg Lehni
9f0a774fd0
Fix newly introduced error in clean-up.
2015-01-04 18:07:02 +01:00
Jürg Lehni
1239eb55ec
Minor clean up in Curve.filterIntersections().
2015-01-04 17:47:41 +01:00
Jürg Lehni
77193e1465
Clean-up new splitPath() code.
2015-01-04 17:37:15 +01:00
hkrish
718af4527f
Boolean: handle linear segments correctly.
...
Earlier implementation was unfinished and did not reset some handles to
linear, this caused the winding to be miscalculated.
Conflicts:
src/path/PathItem.Boolean.js
2015-01-04 17:30:19 +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
Jürg Lehni
cca6606f72
Reduce the amount of path reversing required.
...
We don't need paths at clockwise / counter-clockwise orientation. We simply need them oriented the same way, or the opposite way.
2015-01-04 01:51:27 +01:00
Jürg Lehni
390ef324f2
Find a better implementation for exclude() boolean operations, requiring only one pass instead of two.
2015-01-04 01:50:24 +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
5c184e381b
Merge remote-tracking branch 'origin/master' into boolean-operations
...
Conflicts:
src/path/PathItem.Boolean.js
2015-01-03 21:09:31 +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
46d7717812
Use standard values for tMin / tMax when calling getTangentAt() tracePaths()
2015-01-03 20:59:20 +01:00
Jürg Lehni
6bb6002d1a
No need to double tolerances here.
2015-01-03 20:35:51 +01:00
Jürg Lehni
68c53534d6
Use the same precision in PathItem#getIntersections() when handling curve time parameters as in the rest of the library.
...
TOLERANCE instead of EPSILON.
2015-01-03 20:25:57 +01:00
Jürg Lehni
3e67f72393
Some code clean-up.
2015-01-03 20:25:12 +01:00
Jürg Lehni
51ec3325e3
Remove the need to store winding samples in array and sort.
...
Calculating the average winding value instead yields the same results.
2015-01-03 11:25:10 +01:00
Jürg Lehni
26f209c835
Implement better strategy for handling edge cases in winding samples.
2015-01-03 11:24:27 +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
80e1a54171
Dirty temporary fix for new median winding code that struggles with circles.
2015-01-03 01:17:48 +01:00
Jürg Lehni
5da0ae5c3c
Better handle of edge values in Path#split().
...
Closes #515 & #538
2015-01-03 01:07:51 +01:00
Jürg Lehni
98686ef888
Fix endless recursion in CompoundPath#reduce()
2015-01-03 00:51:06 +01:00
Jürg Lehni
5e654ca64e
Reducing an empty CompoundPath should replace it with an empty Path.
2015-01-03 00:46:45 +01:00
Jürg Lehni
e195db2567
Handle empty paths in Path#reorient()
...
Closes #548
2015-01-03 00:46:24 +01:00
Jürg Lehni
001561decb
Remove the dependency of Math.random() from boolean operation code.
...
Closes #473
2015-01-03 00:32:06 +01:00
Jürg Lehni
bb2fece225
Restructure code that determines median winding contribution.
2015-01-03 00:26:13 +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
70e34ef705
Merge remote-tracking branch 'origin/master' into boolean-operations
...
Conflicts:
src/path/Curve.js
src/util/Numerical.js
2015-01-02 22:41:38 +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
a2208f218c
Merge branch 'refs/heads/master' into boolean-operations
...
Conflicts:
src/util/Numerical.js
2015-01-02 21:46:28 +01:00
Jürg Lehni
51739e6e27
Merge remote-tracking branch 'origin/master' into solve-cubic
...
Conflicts:
src/path/PathItem.Boolean.js
2015-01-02 21:26:04 +01:00
Jürg Lehni
8ad067ec6c
Use tolerance when comparing curve locations by parameter.
2015-01-02 21:20:28 +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
74844d8a2b
Use hullEpsilon in all comparisons of curve time values in fat-line clipping code.
...
Addresses first half of issue #568
2015-01-02 17:33:04 +01:00
Jürg Lehni
41c0584f35
Merge remote-tracking branch 'origin/master' into solve-cubic
2015-01-02 16:37:50 +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
91865be8a3
Merge remote-tracking branch 'origin/master' into solve-cubic
...
Conflicts:
src/basic/Line.js
src/path/Curve.js
src/path/PathItem.Boolean.js
src/util/Numerical.js
2015-01-02 16:21:18 +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
878be7962e
Merge branch 'refs/heads/master' into solve-cubic
...
Conflicts:
src/path/Curve.js
src/path/PathItem.Boolean.js
src/util/Numerical.js
2015-01-02 15:33:23 +01:00
Jürg Lehni
1de750bc77
Check for Path#closed in Path#equals()
2014-12-28 18:10:14 +01:00
Jürg Lehni
28538d8a43
Clean up code from #597 a bit.
2014-12-26 06:42:46 +01:00
louisremi
a9bf0b097e
Handle closed path in PathFitter
2014-12-15 14:56:25 +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
782bde238c
Find a more general implementation for Item#intersects(item).
2014-10-20 18:00:07 +02:00
Jürg Lehni
5ddbc5b07f
Implement Item#intersects(item)
2014-10-20 17:00:18 +02:00
Jürg Lehni
b3c7be67fc
Support optional hidden matrix argument in #getIntersections()
...
...in order to provide an alternative matrix for the passed path to check against.
2014-10-20 16:53:49 +02:00
Jürg Lehni
0894e625b0
Fix documentation issues with Path#get*At()
...
Closes #537 .
2014-10-15 13:00:50 +02: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
2dce6c4efa
Some code clean-up in Segment#_changed()
2014-09-27 22:09:25 +02:00
Jürg Lehni
cc8b23894c
Some clean up related to hidden _uncached parameter.
2014-09-27 22:03:54 +02:00
Jürg Lehni
b8530935a7
Streamline CurveLocation#getTangent/Normal/Curvature getter definitions to align with definitions in Curve, Path and PathIterator.
2014-09-27 22:03:20 +02:00
Jürg Lehni
dd99db8d2d
Allow 'false' as well as 'off' for hidpi attribute, since that's what's in use for other attributes as well.
2014-09-26 18:03:37 +02:00
Jürg Lehni
5046a6a64c
Fix naming of PathIterator#get*At functions.
2014-09-24 12:32:07 +02:00
Jürg Lehni
4adab91a18
Remove unused argument.
2014-09-23 17:51:29 +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
52dd24097f
Define PathIterator#getPoint(), #getTangent(), #getNormal() and #getCurvature().
2014-09-11 16:06:00 +02:00
Jürg Lehni
67d30f0042
Actually use maxRecursion and tolerance arguments in PathIterator, and increase precision in #flatten() a bit.
2014-09-11 15:20:04 +02:00
Jürg Lehni
73765e6654
Produce Path#getPointAt(), #getTangentAt(), #getNormalAt() & #getCurvature() in a loop, just like for Curve.
2014-09-10 11:21:06 +02:00
Jürg Lehni
50c5c6736c
Rename PathFlattener to PathIterator and include the class in exports.
2014-09-10 02:20:00 +02:00
Jürg Lehni
1db4fb4064
Refactor PathFlattener code and add maxRecursion and tolerance arguments to constructor.
2014-09-09 18:32:41 +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
a564480522
Forgotten in previous commit.
2014-08-25 12:53:13 +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
da22161d28
Correctly clear Curve length cache when segments change.
...
Closes #497
2014-07-31 17:00:52 +02:00
Jürg Lehni
652dbe1e86
Use loop to produce CurveLocation getters, and add CurveLocation#curvature.
2014-07-25 20:05:44 +02:00
Jürg Lehni
3093a8ec43
Introduce matrix.chain(mx) as a shortcut to Matrix.clone().concatenate(mx)
...
Simplifies quite a few lines of code.
2014-07-08 15:43:17 +02:00
hkrish
ccbf4579fd
Don't remove the only intersection.
...
The previous code wrongly compared an intersection with itself while checking for duplicates.
2014-06-21 10:31:07 +02:00
hkrish
6c6ad76c94
Handle overlapping intercepts in getIntersection,
...
In a more robust way. Restricting ranges in parameter is not a nice way
to handle endpoint intersections.
2014-05-17 13:43:46 +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
hkrish
e5e2a8d7d4
Revert "Correct boolean condition in getWinding."
...
This reverts commit fcc2e93daf
.
2014-05-13 20:41:48 +02:00
hkrish
fcc2e93daf
Correct boolean condition in getWinding.
...
Also clarify the condition using braces
2014-05-13 20:14:53 +02:00
Jürg Lehni
846c806034
Implement non-scaling strokes through Style#strokeScaling.
...
Closes #418 .
2014-05-13 13:38:51 +02:00
Jürg Lehni
4464950301
Correctly take Item#matrix into account in #getPathData().
2014-05-13 13:21:59 +02:00
Jürg Lehni
e1ed7f3294
Prevent drawing selected compound path children twice.
2014-05-12 18:57:09 +02:00
Jürg Lehni
ea8518c3a5
Use the correct change notification when reversing paths.
2014-05-12 16:44:48 +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
c64f177583
Simplify linearHandles code changes a bit.
2014-05-08 10:48:22 +01:00
hkrish
4cc2deb3f8
Remove the debug code in curve#solveCubic
...
The cubic and quadratic solver has been tested with > 2 million
equations as of now. We need more rigorous tests however.
2014-05-05 18:48:30 +02:00
hkrish
1c9d1de380
Boolean: handle linear segments correctly.
...
Earlier implementation was unfinished and did not reset some handles to
linear, this caused the winding to be miscalculated.
2014-05-05 18:46:39 +02:00
Jürg Lehni
8317aacc1b
Split Item#hitTest() into separate private function that does need to do arguments reading, for improved performance also when iterating over children.
2014-04-29 20:06:48 +02:00
Jürg Lehni
0168e41be0
Add old cubic solver code for comparison, and use console.log() in Curve.solveCubic() to log values with different results.
2014-04-29 00:11:13 +02:00
Jonathan Puckey
04e90ec3f4
Improve PathItem#getIntersections(path, sorted) docs.
2014-04-28 18:58:19 +02:00
Jonathan Puckey
2b712959f2
Path: Improve docs of the 'Positions on Paths and Curves' group.
2014-04-28 18:12:44 +02:00
Jürg Lehni
a9618b50f8
Small fix in Segment#linear.
2014-04-28 16:43:11 +02:00
Jürg Lehni
364c31b0f6
Remove TODOs for already implemented functions.
2014-04-28 14:25:15 +02:00
Jürg Lehni
42945825e8
Fix all argument assignment TODOs.
2014-04-28 14:22:50 +02:00
Jürg Lehni
19630d6229
Fix spelling mistakes.
2014-04-24 19:34:49 +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
397c81e060
Switch from options.type to options.class in Item#hitTest(), to reflect recent change in Item#getItems().
2014-04-13 16:43:20 +02:00
Jürg Lehni
a931a2530c
Implement options.curves
option for hit-testing curves regardless of stroke settings.
2014-04-11 14:57:58 +02:00
Jürg Lehni
d12607dd44
Use a Base object for PaperScope#settings and update straps.js to version that offers Base#set().
2014-04-11 13:32:06 +02:00
Jürg Lehni
86277f0578
Reversing path direction needs to trigger a GEOMETRY change.
2014-04-10 22:37:11 +02:00
Jürg Lehni
eea4e533a4
Support type: Class
filters in hit-testing code too.
2014-04-10 22:27:03 +02:00
Jürg Lehni
60f6eca6c4
Do not keep the view's matrix baked into _globalMatrix, since we might allow multiple views soon.
2014-04-07 17:35:17 +02:00