Commit graph

5271 commits

Author SHA1 Message Date
Jürg Lehni
1c7d19bba0 Improve getWinding() reliability by clamping curve-time to tMin <= t <= tMax 2017-01-06 14:17:38 +01:00
Jürg Lehni
31aa68b2d1 Some further code cleanup for 3c2588fdec 2017-01-06 14:15:32 +01:00
Jürg Lehni
7583e6ed5f Merge branch 'improved-winding-2' into develop and clean up formatting. 2017-01-06 12:12:43 +01:00
Jürg Lehni
ed38634a80 Improve comments. 2017-01-03 13:41:26 +01:00
Jürg Lehni
4d81a292a2 Return correct values for #rotation and #scaling on items with #applyMatrix = true
While preserving caching for #applyMatrix = false

Relates to #1004, #1177
2017-01-03 13:39:35 +01:00
Jürg Lehni
aa75374406 Bring back caching of Item#rotation and #scaling
But only allow matrix decomposition based properties on items with #applyMatrix = false

Closes #1177, relates to #1004
2017-01-03 13:23:44 +01:00
Jürg Lehni
ede9ef2623 Revert 7dd0b852c8
Relates to https://github.com/paperjs/paper.js/issues/1233#issuecomment-269972157
2017-01-03 00:53:54 +01:00
Jürg Lehni
46fce16bff Fix handling of overlapping paths for subtract and exclude operations.
Closes #1139
2017-01-03 00:50:22 +01:00
Jürg Lehni
0018b69e4d Improve handling of locations with invalid curves in divideLocations() 2017-01-03 00:20:10 +01:00
Jürg Lehni
b743f456b3 Improve handling of changing curves in CurveLocation.
Relates to #1233
2017-01-03 00:08:28 +01:00
Jürg Lehni
468bb04919 Imrpove bi-directional curve-time rescaling in divideLocations()
Closes #1191
2017-01-02 00:32:21 +01:00
Jürg Lehni
e24402542a Improve handling of SymbolItem in#hitTestAll()
Closes #1199
2017-01-01 18:32:45 +01:00
Jürg Lehni
eceb99ea59 Clean up comments. 2016-12-31 13:32:59 +01:00
Jürg Lehni
7651f41c14 Some code cleanup. 2016-12-31 11:33:18 +01:00
Jürg Lehni
f995216f39 Fix handling of self-intersection in PathItem#getIntersections
Closes #1194
2016-12-31 11:30:38 +01:00
Jürg Lehni
928a58b79a Fix accidental global leackage. 2016-12-31 06:52:56 +01:00
Jürg Lehni
87fe0dd7cd Fix typo. 2016-12-31 06:50:08 +01:00
Jürg Lehni
c21e19b303 Fix overlap sequence handling in Path#compare()
Closes #1223
2016-12-31 06:49:57 +01:00
Jürg Lehni
88453914e5 Make sure overlaps are always returned in correct sequence.
Relates to #1223
2016-12-31 01:09:28 +01:00
Jürg Lehni
aa2e1d753b Implement Path#divideAt(), similar to Curve#divideAt() 2016-12-31 01:07:14 +01:00
Jürg Lehni
d405f45d38 Correctly handle offset in Curve#divideAt(offset)
Closes #1230
2016-12-31 00:34:37 +01:00
Jürg Lehni
771bb61038 Fix matrix cloning for groups with #applyMatrix = false
Closes #1225
2016-12-30 13:25:08 +01:00
Jürg Lehni
27a2757542 Merge pull request #1209 from iconexperience/patch-3
Fix length comparison in Path.compare()
2016-12-29 10:55:31 +01:00
Jürg Lehni
767a438286 Merge pull request #1210 from sapics/mini-patch
Replace nodejs version 5 to 6 in Travis
2016-12-29 09:34:05 +01:00
Jürg Lehni
b59baeb9aa Fix stroke hit-testing for rounded shape items.
Closes #1207
2016-12-23 23:11:17 +01:00
iconexperience
61df327bc2 Implement improved reorientation of paths, that can also be used by non-crossing boolean operations. 2016-12-17 18:43:48 +01:00
sapics
3f909da253 Fix example in jsdoc 2016-12-10 12:58:56 +09:00
sapics
523251a288 Use Math.SQRT2 instead of Math.sqrt(2) 2016-12-03 17:32:50 +09:00
sapics
8e5b804d6e Fix typo in comment 2016-12-03 17:31:27 +09:00
Jan
1700a326b1 Fix length comparison in compare()
Path.compare() returned a wrong result if one of the paths were empty. This little change fixes the behaviour.
2016-12-02 16:06:18 +01:00
Jürg Lehni
4281800585 Added missing apostrophe.
Closes https://github.com/paperjs/paperjs.org/pull/25
2016-12-01 21:45:38 -05:00
Jürg Lehni
1f822b1faa Merge pull request #1155 from iconexperience/propagateWinding-pythagoras-fix
Use correct value for y 45 degree tangent
2016-11-28 18:50:11 -05:00
Jürg Lehni
63cb7bd536 Merge pull request #1193 from iconexperience/patch-1
Fix two issues in PathItem.compare()
2016-11-22 19:05:06 -05:00
Jürg Lehni
d779789b6f PaperScript: Prevent invalid JavaScript in assignment operators.
Closes #1151
2016-11-20 21:12:02 -05:00
Jürg Lehni
3c43a78c53 Properly handle generated IDs in SVG export.
Closes #1138
2016-11-20 20:53:41 -05:00
Jürg Lehni
8946f44ed9 Fix curve-bounds check in getIntersections()
Closes #1197
2016-11-20 20:19:38 -05:00
Jan
eef2297935 Fix two issues in compare()
Variable `count` was never initialized, so incrementing resulted in a NaN.
Creating `paths2` failed if `path._children` was `undefined`.
2016-11-04 15:09:28 +01:00
Jürg Lehni
6dd7cc5b6a Fix imprecision in Numerical.findRoot()
Results can be slightly outside of the range.
Close #1149
2016-09-24 15:39:09 -04:00
Jürg Lehni
7dd0b852c8 Remove further unneeded GEOMETRIC_EPSILON curve-end checks. 2016-09-24 14:48:42 -04:00
Jürg Lehni
b37b8cc495 Improve reliability of Curve.getIntersection()
Reduce epsilon when checking against curve end points from GEOMETRIC_EPSILON to EPSILON.

Coses #1174
2016-09-24 14:28:43 -04:00
Jürg Lehni
3eafd5256a Fix omission in recent renaming. 2016-09-24 14:17:20 -04:00
Jürg Lehni
fbb0c59598 Always use un-scaled curve-time in divideLocations()
Fixes #1169
2016-09-23 06:55:12 -04:00
Jürg Lehni
d3ac1b4c94 Prevent CurveLocation#toString() calls in bitwise xor comparison.
See https://twitter.com/juerglehni/status/778962612197453824
2016-09-22 10:44:23 -04:00
Jürg Lehni
dbe3aa42ec Fix typo in error message. 2016-09-22 10:42:47 -04:00
Jürg Lehni
3a49ac4015 Handle paths with only one segment in #resolveCrossings()
Closes #1167
2016-09-20 18:13:47 -04:00
Jürg Lehni
0af4c5c0f1 Introduce Curve#hasLength() as an optimized check for curve-length.
And use it where it make sense.

Relates to https://github.com/paperjs/paper.js/issues/1109#issuecomment-234352266
2016-09-20 17:59:56 -04:00
Jan
3b8d3cc47d Use Math..SQRT1_2 instead of 0.7071
Makes code easier to understand.
2016-08-31 23:29:35 +02:00
Jan
f160e74936 Use correct value for y 45 degree tangent
I got the pythagoras wrong when I wrote this. The length of the tangent vector is 1, therefore the y component is sqrt(0.5) for 45°. This will not make any difference, but still we should use the correct value.
2016-08-31 10:05:47 +02:00
Jürg Lehni
cecd95e039 SVG: Correctly handle multiple sequential move commands.
Closes #1134
2016-08-07 21:36:03 +02:00
Jürg Lehni
0396446c4c Boolean: Clean up previous fix. 2016-08-07 15:55:27 +02:00
sapics
31690cb6b6 Fix to remove named layer 2016-08-06 11:00:29 +09:00
Jürg Lehni
75a10fb246 Boolean: Clear branch so we start with a new one on the next contour. 2016-08-04 12:21:58 +02:00
Jürg Lehni
79661c35e6 Some code cleanup in View#setViewSize() 2016-08-03 13:33:58 +02:00
Jürg Lehni
91371c1b47 Keep view.bounds in sync during 'resize' events.
Closes #1127
2016-08-03 13:08:08 +02:00
Jürg Lehni
fa3456341c Fix view flickering during window resizes.
Closes #1126
2016-08-01 17:10:00 +02:00
Jürg Lehni
78c5c27bb3 Boolean: More work on new branching code.
It now checks all intersections when there are multiple options first.
2016-07-28 12:14:02 +02:00
Jürg Lehni
f4f4b3472f Minor code optimization. 2016-07-27 22:58:57 +02:00
Jürg Lehni
17cca2984b Boolean: Make sure we're actually comparing multiple intersections. 2016-07-27 22:57:08 +02:00
Jürg Lehni
4c12f1505c Clean up previous commit. 2016-07-27 21:48:55 +02:00
Jürg Lehni
445d8ae22f Boolean: Implement branch structure to be able to go back on traces and try different crossings.
Relates to #1073
2016-07-27 21:40:53 +02:00
Jürg Lehni
c80c13eb9e Remove _closed parameter from PathItem#isClockwise() again. 2016-07-27 19:41:23 +02:00
Jürg Lehni
14b2d76450 Boolean: Improve handling of visited segments in intersect() operations.
Closes #1123
2016-07-27 19:35:19 +02:00
Jürg Lehni
aee9a3190d Improve handling of straight closing curves in open path checks. 2016-07-27 19:09:42 +02:00
Jürg Lehni
e643338422 Add options object to boolean operations and improve handling of open paths.
This closes #1036, closes #1072, closes #1089 and closes #1121
2016-07-27 17:09:52 +02:00
Jürg Lehni
a29ada8f23 Rename PathIterator back to PathFlattener. 2016-07-27 14:18:01 +02:00
Jürg Lehni
753b27afe0 Minor code and comments cleanup. 2016-07-27 14:11:58 +02:00
Jürg Lehni
9a49c2141c Two minor fixes in Base. 2016-07-26 10:25:32 +02:00
Jürg Lehni
34c57a47fa Use faster loop to handle prioritize in Base.filter() 2016-07-26 10:20:30 +02:00
Jürg Lehni
3f76bd99ef Implement an efficient mechanism to prioritize key in Item#set()
Closes #1096
2016-07-25 23:17:45 +02:00
Jürg Lehni
4954f5d6ab Improve Style#equals() to correctly handle default values.
Closes #1084
2016-07-25 21:42:06 +02:00
Jürg Lehni
29768c8228 Take Color#alpha default into account in Color#equals()
Relates to #1084
2016-07-25 21:09:53 +02:00
Jürg Lehni
e2e024f8a5 Winding: Don't mix up onPath and onCurve. 2016-07-23 18:50:58 +02:00
Jürg Lehni
31732917c0 Winding: Improve handling of on-curve tangent checks. 2016-07-23 13:30:40 +02:00
Jürg Lehni
27af304414 Improve new getWinding() direction flipping code. 2016-07-22 23:30:36 +02:00
Jürg Lehni
eab0b9db5e Correctly handle path.replaceWith(path) calls.
Closes #1118
2016-07-22 23:29:33 +02:00
Jürg Lehni
0b11f9e2dc Allow getWinding() to flip direction when on the path.
Flipping will only occur when the encountered tangent is parallel to the ray. Relates to #1116
2016-07-22 16:50:39 +02:00
Jürg Lehni
cbe41c536e Boolean: Return the full winding object from _getWinding() and use it to improve PathItem#contains() with even-odd full-rule.
Also store the full winding object on the processed segments, to have more information available in boolean operations.
2016-07-22 15:46:42 +02:00
Jürg Lehni
23f3097f84 Facilitate code minification in PathIterator. 2016-07-22 14:21:35 +02:00
Jürg Lehni
becac4c921 Use shorter zero checks for array indices and length.
Keeping === 0 for mathematical algorithms seems clearer.
2016-07-22 13:46:24 +02:00
Jürg Lehni
a5d04ef97c Address minor omission in previous commit. 2016-07-22 00:05:21 +02:00
Jürg Lehni
a5a0e90bee Implement PathItem#compare() to support compound-paths.
Still needs testing.
2016-07-21 23:07:01 +02:00
Jürg Lehni
ccac7ec7c5 Implement Path#compare() to compare for geometric equality of shapes.
Use it in boolean operations when handling fully overlapping paths.

Relates to #1109
2016-07-21 20:57:39 +02:00
Jürg Lehni
baf58fb021 Improve documentation of PathItem#getArea() and PathItem#isClockwise() 2016-07-21 15:30:31 +02:00
Jürg Lehni
a0417040f8 Improve handling of sub-path orientation in CompoundPath.
Remove automatic orientation on insertion, as it caused more troubles than solved problems, in favor of the new PathItem#reorient() method, or the even-odd fill-rule.

Closes #590, #1029
2016-07-21 15:21:45 +02:00
Jürg Lehni
fc72c05e69 Add sort parameter to PathItem#reorient()
And improve documentation. Relates to #590, WIP
2016-07-21 13:50:55 +02:00
Jürg Lehni
16e53cc1ad Minor reformatting and changes.
no need for paper namespace in unit test code
2016-07-20 17:58:47 +02:00
Jürg Lehni
58991a569e Merge pull request #1115 from iconexperience/addCurveIntersections-patch
Improve fat line clipping to fix #1088
2016-07-20 17:56:04 +02:00
Jürg Lehni
a683486ff5 Some code cleanup for previous commits, and shorten boolean tests a bit. 2016-07-20 16:32:21 +02:00
Jan
4c61153bd4 Improve fat line clipping to fix #1088
Only alternate curves in addCurveIntersections() if interval on other curve is not tight enough yet.
2016-07-20 16:32:20 +02:00
Jürg Lehni
f988445dad Boolean: Implement optimization for operands without crossings.
Closes #1113
2016-07-20 16:15:10 +02:00
Jan
3f893c9fb7 Change winding calculation for points on path
Add a winding if the point is on the path and windings canceled each other. See discussion at #1109
2016-07-20 10:47:01 +02:00
Jürg Lehni
1264c2764c Shorten code statement from #1111 2016-07-20 10:29:27 +02:00
Jan
08f633e7e6 Transfer handle when removing segment 2016-07-20 10:05:03 +02:00
Jürg Lehni
f874b927bf Reflect View#zoom through matrix decomposition, and implement additional decomposed properties.
Closes #1107
2016-07-20 00:04:24 +02:00
Jürg Lehni
4d9c0c9f05 Implement CompoundPath#getLength() 2016-07-19 19:09:23 +02:00
Jürg Lehni
08a23e3318 Boolean: Further improve segment sorting approach. 2016-07-19 16:14:46 +02:00
Jürg Lehni
2c8f4f9453 Boolean: Fix sort function to produce correct resutls on all browsers. 2016-07-19 14:55:57 +02:00
Jürg Lehni
0b672cfb62 Merge branch 'new-winding' into develop 2016-07-19 14:27:45 +02:00
Jürg Lehni
59d598f08e Some documentation improvements for previous commit. 2016-07-19 13:14:26 +02:00
Jürg Lehni
e539633852 Implement new and shorter segments array notation.
Supporting:

- Closing paths by including `true` as the last entry
- Nested segment arrays that can be passed to PathItem.create() and the CompoundPath constructor to create all sub-paths
2016-07-19 13:08:21 +02:00