Commit graph

419 commits

Author SHA1 Message Date
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 
2016-07-20 10:47:01 +02:00
Jürg Lehni
1264c2764c Shorten code statement from 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
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
32d8c969fb Clean up handling of #_set(), #set() and #initialize()
Convention:

- #_set() is for actually setting properties, e.g. on Point, Size, so that derived classes can reuse other parts (e.g. SegmentPoint)
- #set() is a shortcut to #initialize() on all basic types, to offer the same amount of flexibility when setting values.
2016-07-18 20:11:01 +02:00
Jürg Lehni
3f058e6471 Split #resolveCrossings() into #resolveCrossings() and #reorient()
Closes 
2016-07-18 14:04:51 +02:00
Jürg Lehni
7acb5bee45 Boolean: More refactoring and code simplifications. 2016-07-18 14:02:20 +02:00
Jürg Lehni
e94e872cda Move #getInteriorPoint() to PathItem, and refactor it a bit more. 2016-07-17 23:04:42 +02:00
Jürg Lehni
9b6fdb8952 Optimize #getInteriorPoint() further.
No need for two separate loops as it can all be done in one pass.
2016-07-17 21:08:22 +02:00
Jürg Lehni
fc18f821b1 Implement simplification of #getInteriorPoint()
As suggested by @iconexperience in https://github.com/paperjs/paper.js/issues/1075#issuecomment-233196940
2016-07-17 20:51:53 +02:00
Jürg Lehni
4bb2f7a8fc Revert a row of recent changes that break example in 2016-07-17 20:35:36 +02:00
Jürg Lehni
c9100a2b61 Merge remote-tracking branch 'origin/develop' into new-winding
; Conflicts:
;	src/path/PathItem.Boolean.js
2016-07-17 19:52:20 +02:00
Jürg Lehni
09785a504b Boolean: Further tweak epsilons values.
Thanks to improved winding code, we can now reduce them to the point where the #_validOverlapsOnly hack can be removed altogether without introducing new issues.
2016-07-17 19:38:10 +02:00
Jürg Lehni
fe9acae985 Winding: More code refactoring and documentation. 2016-07-17 19:36:13 +02:00
Jürg Lehni
064cee1629 Boolean: Sort segments to give non-ambiguous segments preference when tracing.
Relates to 
2016-07-16 23:55:16 +02:00
Jürg Lehni
91e67887da Winding: Some improvements to comments and documentation. 2016-07-16 20:17:20 +02:00
Jürg Lehni
b1037f89f1 Winding: Add back support for open paths.
Includes refactoring of some related code.
2016-07-16 20:01:36 +02:00
Jürg Lehni
7d675dab13 Some minor cleanups. 2016-07-14 18:58:12 +02:00
Jürg Lehni
7da70181cc Move addWinding() into getWinding()
Allowing the reuse of a whole lot of shared variables and leading to some nice simplifications.
2016-07-14 18:53:23 +02:00
Jürg Lehni
cad2858070 Use same naming for prev* variables as elsewhere in boolean code. 2016-07-14 18:02:42 +02:00
Jürg Lehni
acfe6cddeb Boolean: Improve handling of open paths.
Relates to 
2016-07-14 10:49:12 +02:00
Jürg Lehni
083a2c6e0d Boolean: Prevent rare exception where an encountered segment is not part of a valid path anymore.
Relates to 
2016-07-14 09:14:11 +02:00
iconexperience
46ea9da423 Small cleanup in getWinding() 2016-07-13 11:07:12 +02:00
iconexperience
916a712737 Improved and simplified addWinding and getWinding 2016-06-23 07:54:27 +02:00
Jürg Lehni
827abd21b8 More refactoring for a328f5b04b 2016-06-16 12:07:38 +02:00
Jürg Lehni
e80b2ff043 Some code-cleanup for a328f5b04b 2016-06-16 11:48:29 +02:00
Jürg Lehni
85c680820e No more need for #_getCurves() since it now does the same as #getCurves()
#getCurves() works both on Path and CompoundPath. Relates to , 
2016-06-16 11:16:56 +02:00
Jürg Lehni
1a392bb5db Rename monoCurves -> curves where full curves are dealt with now.
For better clarity. Relates to , 
2016-06-16 11:15:27 +02:00
iconexperience
a328f5b04b Revamp winding calculation so it can determine the winding in horizontal and vertical direction. Monotonic curves are new only created on demand. 2016-06-16 10:13:10 +02:00
sapics
c5b4828ace Fix to cover the case when Numerical.solveQuadratic return -1 in path._getMonoCurves culculation 2016-06-16 13:51:44 +09:00
Jürg Lehni
28543deaf5 Boolean: Handle situations where seg.getNext() can be null.
Closes 
2016-06-13 14:17:47 +02:00
Jürg Lehni
693898a5b1 No more need for two passes of findBestIntersection()
Goodbye strict-mode :)
2016-06-13 12:49:57 +02:00
Jürg Lehni
8da82fed19 Mark all segments as visited when processing intersection and subtraction, not just overlaps. 2016-06-13 12:09:17 +02:00
Jürg Lehni
af5a5b5f2d Make findBestIntersection() more strict and improve comments. 2016-06-13 12:08:44 +02:00
Jürg Lehni
94853669f6 Do not complain about open paths if they would not contain an area when closed. 2016-06-13 12:08:04 +02:00
Jürg Lehni
7241edd98a Implement a more refined strategy to handle 'contour' segment in unite boolean operations.
Improvement for the fix in 648beb33e9 for , solves the issues described in https://github.com/paperjs/paper.js/issues/1054#issuecomment-225356983
2016-06-13 11:58:18 +02:00
Jürg Lehni
34c35e26bd Switch to sampling only one location for winding contribution.
Closes 
2016-06-13 11:26:02 +02:00
Jürg Lehni
ed3e283802 Fix Item#importJSON() to preserve #parent on existing, already inserted items.
Closes 
2016-06-10 17:45:02 +02:00
Jürg Lehni
e7f7d7c5d1 Fix jshint error caused by 2016-06-10 17:28:46 +02:00
Jürg Lehni
648beb33e9 Take type of boolean operation into account in getWinding()
Relates to 
2016-06-10 13:04:57 +02:00
Jürg Lehni
1f4e4f2f60 Implement boolean simplification suggested by @iconexperiene
See https://github.com/paperjs/paper.js/issues/1054#issuecomment-222517963
2016-06-10 12:06:08 +02:00
Jürg Lehni
719392dd2c Merge pull request from iconexperience/patch-3
Check for prevTime >= tMin and prevTime <= tMax
2016-06-10 12:00:23 +02:00
Jan
e564955501 Correclty implement sorting of intercepts
`Array.sort()` without comparison function does not sort by numeric value, but by unicode characters (103 comes before 93 by this sorting), therefore a simple comparison function is required.
2016-06-07 16:44:42 +02:00
Jan
b735a3ec95 Fix getInteriorPoint()
getInteriorPoint() could return a point outside the path as explained in 
This fix excludes curve's start points from intercept detection to prevent double counting, it ensures that all intercepts are collected and the intercepts are sorted by x-value.
2016-06-07 16:11:37 +02:00
Jan
9f93f6ee78 Check for prevTime >= tMin and prevTime <= tMax
Parameter scaling should only be done if the curve was actually split previously. This only happened if prevTime greater tMin and less tMax.
2016-06-01 14:38:44 +02:00
Jürg Lehni
8d5c922c50 Simplify code from and activate unit test for it again. 2016-02-14 22:15:55 +01:00
Jan
406e6c95b9 Adjust comments to match new implementation 2016-02-14 21:44:34 +01:00
iconexperience
e2eaf87fcb Improve handling of points on paths in getWinding() 2016-02-14 20:57:24 +01:00