Commit graph

4817 commits

Author SHA1 Message Date
Jürg Lehni
a7a07fb6d5 Update JSDoc and do some documentation spring-cleaning.
- Convert from {@code ...} to shorter `...`
- Reformat some documentation comment blocks
- Update copyright notices
2015-12-30 21:55:19 +01:00
Jürg Lehni
7d25096de6 Fix new failing #isCrossing() test-case. 2015-12-30 21:55:19 +01:00
Jürg Lehni
a20b0469d6 Correctly keep track of all straight curves that need their handles cleared at the end.
Closes #838
2015-12-30 21:55:19 +01:00
Jürg Lehni
b724a59901 Handle non-reversible matrix in Item#hitTest()
Closes #617
2015-12-30 21:55:18 +01:00
Jürg Lehni
f2f34c3b75 Some minor fixes in new #getItems() code. 2015-12-30 21:55:18 +01:00
Jürg Lehni
f2a44a5832 Remove Base#class again as it's causing issues in lookup tables. 2015-12-30 21:55:18 +01:00
Jürg Lehni
de532aac2f Implement control over recursive iteration in #getItems()
Closes #853.
2015-12-30 21:55:18 +01:00
Jürg Lehni
f95d6ab310 Fix bug in Item#getItems(function() {})
Closes #751
2015-12-30 21:55:18 +01:00
Jürg Lehni
08d75a48ff Fix issue again with param.overlapping in #getItems()
This time, properly!
Closes #751
2015-12-30 21:55:18 +01:00
Jürg Lehni
93a5e2d18c Refine some code comments. 2015-12-30 21:55:18 +01:00
Jürg Lehni
aa316ffc8c Avoid applying item._matrix twice in Item#intersects()
As suggested by @sapics.
Closes #847
2015-12-30 21:55:18 +01:00
Jürg Lehni
7592895445 Big overhaul of CurveLocation#isCrossing()
Improved to better handle touching curves and edge cases involving straight curves.

Closes #865
2015-12-30 21:55:18 +01:00
Jürg Lehni
306d8bae86 Clean up the new Item#reduce() code a bit. 2015-12-30 21:55:18 +01:00
Jürg Lehni
fec67617e1 Merge pull request #846 from iconexperience/reduce-fix
Make sure reduced item has no parent if original item had no parent.
Fix for #835
2015-12-30 21:55:18 +01:00
Jürg Lehni
b987590c71 Define documentation for excludeMatrix parameter. 2015-12-30 21:55:18 +01:00
Jürg Lehni
83b53cb9e0 Fix a few edge cases in cloning and copying of attributes. 2015-12-30 21:55:17 +01:00
Jürg Lehni
2fea40f86f Introduce new Item#copyAttributes() & #copyContent(), and revamp #clone() handling. 2015-12-30 21:55:17 +01:00
Jürg Lehni
463f50a0c1 Adjust comment by @iconexperience.
As outlined here: https://github.com/paperjs/paper.js/issues/854#issuecomment-167334294
2015-12-30 21:55:17 +01:00
Jürg Lehni
386632b0be Implement new version of #reorient() and merge with #resolveCrossings()
As proposed by @iconexperience in #854
2015-12-30 21:55:17 +01:00
Jürg Lehni
48c0988546 Implement support for SVG fill-rule attribute.
Relates to #858
2015-12-30 21:55:17 +01:00
Jürg Lehni
a5f05c90f5 Rename #windingRule to #fillRule.
...keeping deprecated aliases on Style and Item around for now.

Closes #858
2015-12-30 21:55:17 +01:00
Jürg Lehni
086485dc95 Minor code clean-up. 2015-12-30 21:55:17 +01:00
Jürg Lehni
401877c6dc Fix the correct bubbling of doubleclick events.
Fixes #834.
2015-12-30 21:55:17 +01:00
Jürg Lehni
e3a27da7b2 Fix alt key combos on Chrome.
Relates to #860
2015-12-30 21:55:17 +01:00
Jürg Lehni
0badb3b3f4 A bunch of code clean-ups. 2015-12-30 21:55:16 +01:00
Jürg Lehni
248364aebc Fix @param description. 2015-12-30 21:55:16 +01:00
Jürg Lehni
4ee3a76a74 Improve handling of special characters and control sequences. 2015-12-30 21:55:16 +01:00
Jürg Lehni
0346552bc6 Minor simplification. 2015-12-30 21:55:16 +01:00
Jürg Lehni
52edd72efb Refactor Key handling
- Rely on event.key / event.keyIdnetifier instead of event.keyCode
- Handle command key better on Chrome across all platforms (fixes #860)
- Improve documentation
2015-12-30 21:55:16 +01:00
iconexperience
b19bc5aaf4 Smaller improvements in addCurveIntersections() 2015-12-30 21:55:16 +01:00
sapics
81a4d142f0 Fix shape.strokeBounds with strokeScaling is false 2015-12-30 21:52:34 +01:00
iconexperience
0e3ac9d7f4 Handle cases when point y is equal to y of horizontal curve in path 2015-12-30 21:52:34 +01:00
sapics
9c1c00c11e Minor minification 2015-12-30 21:52:34 +01:00
sapics
0050984d83 Remove unnecessary calculation 2015-12-30 21:52:34 +01:00
iconexperience
c0a5739254 Change addCurveIntersections() to handle cases when tDiff == 0 2015-12-19 10:48:31 +01:00
Jürg Lehni
1e72447a7d Minor comment change. 2015-11-12 10:12:46 +01:00
Jürg Lehni
8149fa830b Only rasterize an item's content if the resulting raster is not empty.
closes #828
2015-11-12 10:11:31 +01:00
Jürg Lehni
deafacdad0 Treat overlaps as crossings as well.
This solves https://github.com/paperjs/paper.js/issues/784#issuecomment-153085486 , simplifies code quite a bit, and does not cause any new issues.
2015-11-04 01:19:20 +01:00
Jürg Lehni
f32a1def6e Only complain about open paths in boolean ops when they are long enough. 2015-11-02 18:21:19 +01:00
Jürg Lehni
9a772678a8 Clean up #816 a bit.
Closes #815 also.
2015-10-28 22:17:44 +01:00
Tomas Junnonen
09d4de6a1b Issue 815: Cannot add segment to Path after removing last segment
Fixed an issue where after removing the last segment of a path,
new segments cannot be re-added.

Added new Path Curve test cases to test the difference between
a path with one and no segments (zero curves in both cases), which
catches the bug.
2015-10-28 12:15:07 -04:00
Jürg Lehni
6c0faaf010 Use Base.pick() instead of null check. 2015-10-27 23:43:14 +01:00
Jürg Lehni
60c64ab25c Merge pull request #814 from johan/precision-0
Handle exportSVG({ precision: 0 }) correctly
2015-10-27 23:41:55 +01:00
Jürg Lehni
8eb0dcc87d Fix various JS linting problems. 2015-10-27 23:35:30 +01:00
Johan Sundström
1b129feebf Handle exportSVG({ precision: 0 }) correctly 2015-10-27 15:33:09 -07:00
Jürg Lehni
ac7c272401 Clean up link references about kappa. 2015-10-26 21:43:38 +01:00
Jürg Lehni
a1e4b9fa3c Release version v0.9.25 2015-10-25 11:24:42 +01:00
Jürg Lehni
238801e485 Improve docs for boolean operations. 2015-10-25 09:41:43 +01:00
Jürg Lehni
e9d54a05f0 Minor change in the way #reorient() is called. 2015-10-24 23:13:13 +02:00
Jürg Lehni
c61cb804cb Implement boolean operations intersect() and subtract() for open path with closed paths.
Closes #757
2015-10-24 22:41:51 +02:00
Jürg Lehni
648985fcd2 Fix yet another issue with Path#curves and Path#_add()
Including a unit test to prevent regression.
2015-10-24 18:11:30 +02:00
Jürg Lehni
19e3136892 Address small issue in Path#getLocationAt() when paths are empty. 2015-10-24 17:46:20 +02:00
Jürg Lehni
fcd4fe824c Pass Item.NO_INSERT to internally created paths and do not rely on insertAbove() to always return a result.
If `this` itself is not in the DOM, insertAbove() will fail.
2015-10-24 17:45:22 +02:00
Jürg Lehni
1fc17766fb Address remaining issue with curves being wrongly linked up after adding new segments. 2015-10-24 17:43:22 +02:00
Jürg Lehni
ae2bed9cf0 Fix issue of faulty curves list after inserting segments at the end of open paths. 2015-10-24 17:00:37 +02:00
Jürg Lehni
39731808b8 Switch from imprecise trigonometric method to Curve.getParameterOf()
And from !hasHandles() to isStraight(), as we can now handle all straight curves.
2015-10-24 12:23:25 +02:00
Jürg Lehni
780b999220 Fix typo. 2015-10-24 11:55:59 +02:00
Jürg Lehni
b9a0f5f659 Further simplify code. 2015-10-24 11:29:15 +02:00
Jürg Lehni
4678697638 Some refactoring and added comments to @sapics code in Curve.getNearestParameter() 2015-10-24 11:14:08 +02:00
sapics
89a45a6682 Use cubic equation solution for faster calculation 2015-10-24 14:54:57 +09:00
sapics
294904eac7 Faster curve.getNearestParameter when curve has no handles 2015-10-24 11:39:50 +09:00
Jürg Lehni
c8cc653004 Merge Path#_getOffset() with CurveLocation#getOffset() 2015-10-23 19:57:25 +02:00
sapics
502558a321 Fix variable leaks 2015-10-23 09:45:39 +09:00
Jürg Lehni
5be9e1dde5 Remove unused variable. 2015-10-22 15:30:29 +02:00
Jürg Lehni
813ea48932 Remove unused local reference. 2015-10-22 14:46:17 +02:00
Jürg Lehni
85f7134fe6 Reduce curve-time epsilon, and improve comments about other epsilon values. 2015-10-22 10:34:49 +02:00
Jürg Lehni
bafb6794a6 Introduce separate epsilon for fat-line clipping code, and reduce curve-time epsilon. 2015-10-21 23:44:24 +02:00
Jürg Lehni
e9c3e72f60 Simplify handling of winding overlap-adjustment in isValid() 2015-10-21 15:02:53 +02:00
Jürg Lehni
a79212b920 Make handling of points on infinite lines in Line.getSide() more clear. 2015-10-21 10:00:11 +02:00
Jürg Lehni
a9710cf7c0 Fix Line.getSide() call. 2015-10-21 09:35:55 +02:00
Jürg Lehni
0cb792de93 Reverse sign of Line.getSignedDistance()
Closes #789
2015-10-21 09:35:40 +02:00
Jürg Lehni
7c37a4a4d2 Revert "No need for special length handling in propagateWinding()"
This reverts commit 8c702ce5b4.
2015-10-21 09:35:17 +02:00
Jürg Lehni
f8595e93c6 Improve some comments. 2015-10-21 02:45:57 +02:00
Jürg Lehni
169f18617c Address more pending TODOs. 2015-10-21 02:40:12 +02:00
Jürg Lehni
7a95625a13 Remove debug code and TODO from CurveLocation#isCrossing() 2015-10-21 02:36:43 +02:00
Jürg Lehni
8c702ce5b4 No need for special length handling in propagateWinding() 2015-10-21 02:32:56 +02:00
Jürg Lehni
3daa7f78b4 Some comment clean-ups. 2015-10-21 02:24:54 +02:00
Jürg Lehni
341fe1ab4e Remove all boolean debugging and streamline code. 2015-10-21 02:16:17 +02:00
Jürg Lehni
2cf637d13b Merge remote-tracking branch 'origin/boolean-fix' into develop 2015-10-21 01:44:15 +02:00
Jürg Lehni
43cf20096a Implement Curve.getNearestParameter() 2015-10-21 01:43:14 +02:00
Jürg Lehni
8c3d9df06c Further fine-tune the various EPSILON values based on edge-case tests. 2015-10-21 01:42:26 +02:00
Jürg Lehni
5d6b761d3a Introduce separate WINDING_EPSILON and improve GEOMETRIC_EPSILON.
New values are based on a lot of testing.
2015-10-21 01:16:52 +02:00
Jürg Lehni
eb62530958 Improve CurveLocation#equals(). 2015-10-21 01:15:46 +02:00
Jürg Lehni
1f476c2107 Improve CurveLocation#isTouching() to better handle straight lines. 2015-10-21 01:10:24 +02:00
Jürg Lehni
1073340eeb Do not use GEOMETRIC_EPSILON in Curve.getParameterAt()
This caused issues in some rare edge-cases.
2015-10-21 01:09:03 +02:00
Jürg Lehni
d543658c43 Remove old version of Curve#getParameterOf() 2015-10-21 00:17:05 +02:00
Jürg Lehni
140fba56cc Fix Line#isCollinear() and #isOrthogonal() 2015-10-20 23:37:37 +02:00
Jürg Lehni
bcd6520e66 Merge handling of self-intersection crossings with normal crossings.
Shorter code and no additional glitches.
2015-10-20 23:03:40 +02:00
Jürg Lehni
08122131dc Use isOverlap() instead of _overlap everywhere. 2015-10-20 23:02:50 +02:00
Jürg Lehni
6ccd78e8af Go back to simpler code to handle visited segments.
It appears that the imprecisions addressed in 6cdead0e8c have since disappeared.
2015-10-20 23:02:19 +02:00
Jürg Lehni
7422e0710f Some changes to boolean debug logging. 2015-10-20 22:04:30 +02:00
Jürg Lehni
3aa7507ce1 Avoid issues with imprecision in CurveLocation#getCurve() / trySegment() 2015-10-20 22:04:04 +02:00
Jürg Lehni
447feea1da Improve Curve#getParameterOf() to first check curve points with zero epsilon. 2015-10-20 22:03:45 +02:00
Jürg Lehni
60109e897a Use 'preserve' to protect #getPoint() against overriding. 2015-10-20 19:22:33 +02:00
Jürg Lehni
3ae0ca6c94 Remove dependency on curve-time comparisons when comparing locations.
Locations on consecutive short curves (< 1e-7) where unable to merge due to diff > 1.

Relates to #805
2015-10-20 17:53:40 +02:00
Jürg Lehni
7cea3488c0 Remove dependency on curve-time parameter when figuring out which locations to merge. 2015-10-20 17:17:31 +02:00
Jürg Lehni
5dac7e9d29 Reduce maximum recursion again in addCurveIntersections()
32 has lead to many deadlocks.
2015-10-20 16:35:30 +02:00
Jürg Lehni
da43953828 For curves with only one segment, pick the smaller diff between the two locations.
Addresses point 1. in https://github.com/paperjs/paper.js/issues/805#issuecomment-147770300
2015-10-20 16:34:40 +02:00
Jürg Lehni
93e9e54ae5 Make sure we cannot find two intersections between two lines.
Adresses point 2. in https://github.com/paperjs/paper.js/issues/805#issuecomment-148503018
2015-10-20 15:34:09 +02:00
Jürg Lehni
f2cce4c84d Rename variable to be less ambiguous. 2015-10-20 15:21:03 +02:00
Jürg Lehni
63303a59f4 Change PathItem#getIntersections() so that the simply circularity checks in addLocations() work.
This should address the concerns outlined in https://github.com/paperjs/paper.js/issues/805#issuecomment-147850806
2015-10-20 15:18:09 +02:00
Jürg Lehni
e0c31e4a50 Make static getIntersections() methods 'private'. 2015-10-20 10:02:33 +02:00
Jürg Lehni
f1debf401b Streamline overlap handling code. 2015-10-20 10:02:00 +02:00
Jürg Lehni
eb2f7e293a Streamline mouse event handling between View and Item.
Consolidating code and making View#onMouseDown/Up/Move/... events work.
2015-10-17 18:13:00 +02:00
sapics
8dfb5191fa Fix curve evaluate function to finite 2015-10-17 14:38:27 +09:00
Jürg Lehni
3314668a0c Streamline mouse event handling between View and Item.
Consolidating code and making View#onMouseDown/Up/Move/... events work.
2015-10-14 16:25:36 +02:00
Jürg Lehni
9762d2c9e6 Revert "Simplify circular neighbor checks."
This reverts commit 2bb3df3314.
2015-10-13 09:35:13 +02:00
Jürg Lehni
b5c59c881c Revert "One more simplification."
This reverts commit 0ce825f8c9.
2015-10-13 09:35:08 +02:00
Jürg Lehni
0ce825f8c9 One more simplification. 2015-10-13 08:34:48 +02:00
Jürg Lehni
2bb3df3314 Simplify circular neighbor checks.
Relates to #805.
2015-10-13 08:32:05 +02:00
Jürg Lehni
9de6aa97f2 Third attempt at correctly handling paths as circular lists.
Relates to #805.
2015-10-13 07:59:19 +02:00
Jürg Lehni
f6f6a58fe6 Improve handling of paths as circular lists. 2015-10-13 07:27:25 +02:00
Jürg Lehni
2e552853fd Handle paths as circular lists in CurveLocation.insert() as well.
Relates to #805
2015-10-13 07:23:15 +02:00
Jürg Lehni
0553201de8 Add forgotten semi-colon. 2015-10-13 00:11:24 +02:00
Jürg Lehni
3d33bbdfa3 Clean-up CurveLocation#equals() 2015-10-13 00:10:21 +02:00
Jürg Lehni
f77579079e Improve CurveTime#equals() to handle locations that wrap around beginnings / ends of paths.
See https://github.com/paperjs/paper.js/issues/805#issuecomment-147470240 for details.
2015-10-13 00:06:34 +02:00
iconexperience
f8edf5d8a7 Small refactoring in getConvexHull()
Make calculations of distances more concise.
2015-10-12 08:42:36 +02:00
Jürg Lehni
588ddbe011 Add comments to Curve#getParameterOf() 2015-10-11 17:09:04 +02:00
Jürg Lehni
bbc0029252 Go back to simple overlap handling.
It appears to produce less glitches.
2015-10-11 17:05:23 +02:00
Jürg Lehni
4500e520ea Minor code clean-up. 2015-10-11 17:00:23 +02:00
Jürg Lehni
c9f5c02ee4 Decrease GEOMETRIC_EPSILON
This appears to be better aligned with the new Curve#getParameterOf() behavior.
2015-10-11 17:00:01 +02:00
Jürg Lehni
c1d0bd21b8 Improve Curve#getParameterOf() to better handle very small curves.
See #799
2015-10-11 16:59:03 +02:00
Jürg Lehni
61db3d9d01 Improve handling of boolean debug options. 2015-10-11 16:57:43 +02:00
Jürg Lehni
6cdead0e8c Add fallback strategy when ending up in a dead-end in tracePaths().
This simple fix appears to be able to catch quite a few glitches with very small curves.
2015-10-11 16:56:41 +02:00
Jürg Lehni
247e80f569 Update to latest prepro.js with proper support for strings and scientific numbers. 2015-10-11 15:50:25 +02:00
Jürg Lehni
841381f520 Reactivate new overlap handling.
It appears to work better with the new Curve.getParameterOf()
2015-10-11 10:17:03 +02:00
Jürg Lehni
d20cdf5b73 There can only be one self-intersection per curve. 2015-10-11 09:48:55 +02:00
Jürg Lehni
8a122e19d8 Split self-intersection handling into separate method.
Increasing readability of both methods.
2015-10-11 09:26:04 +02:00
Jürg Lehni
7aed221801 Some refactoring in static methods of CurveLocation. 2015-10-11 09:18:50 +02:00
Jürg Lehni
99909953a8 Use colors to distinguish faulty boolean paths. 2015-10-09 11:07:43 +02:00
Jürg Lehni
688f580b95 Switch to new Curve.getParameterOf()
Simpler code, but improved precision means more glitches to analyze.
2015-10-09 10:34:46 +02:00
Jürg Lehni
48bb0a1be4 Address old TODO in getWinding() 2015-10-09 10:33:43 +02:00
Jürg Lehni
0839dbe1f5 New overlap handling is producing new glitches.
Turn it off for now, until further analysis has been done.
2015-10-09 10:27:25 +02:00
Jürg Lehni
b2127a83ad Revert "Do not start with segments with multiple intersections."
This reverts commit 5129fb0050.
2015-10-09 10:22:54 +02:00
Jürg Lehni
514e6651e6 Revert "Avoid all intersections as starting points for boolean paths."
This reverts commit 9590578339.
2015-10-09 10:19:05 +02:00
Jürg Lehni
c45ae4b51a Revert "Never starting in intersections allows for further code simplifications."
This reverts commit 892154e8f8.
2015-10-09 10:18:45 +02:00
Jürg Lehni
892154e8f8 Never starting in intersections allows for further code simplifications. 2015-10-09 00:03:34 +02:00
Jürg Lehni
9590578339 Avoid all intersections as starting points for boolean paths. 2015-10-08 23:56:18 +02:00
Jürg Lehni
939a9fe034 Improve overlap handling by actually storing overlap curves on intersections objects.
And properly comparing against them in tracePaths().
2015-10-08 23:54:00 +02:00
Jürg Lehni
5129fb0050 Do not start with segments with multiple intersections.
Simplifies the required checks at the end, and generally reduces number edge cases.
2015-10-08 23:38:41 +02:00
Jürg Lehni
c9eba83cc7 Improve detection of start segments.
Segments with multiple intersections need to be checked thoroughly to avoid errors.
2015-10-08 23:13:37 +02:00
Jürg Lehni
e92a71e8c7 Switch to improved version of Line. getSignedDistance()
Based on the error analysis by @iconexperience outlined in #799
2015-10-08 22:56:05 +02:00
Jürg Lehni
5c70f47b6f Fix colors in reportWindings code. 2015-10-07 23:37:09 +02:00
Jürg Lehni
15d797ac55 Improve linkIntersections() to prevent endless recursions in linked intersections. 2015-10-07 17:20:08 +02:00
Jürg Lehni
3e9d7593cf Some smaller tweaks in tracePaths() 2015-10-07 10:58:29 +02:00
Jürg Lehni
4fac3ee6fc Rename getIntersection() -> getBestIntersection() 2015-10-07 10:57:43 +02:00
Jürg Lehni
bfa0459c52 Go back to using Group for divide() results.
As they may contain multiple CompoundPaths.
2015-10-07 10:57:09 +02:00
Jürg Lehni
1103c7036f Remove unnecessary isValid() check on segments without intersections.
It was only causing issues without solving anything.
2015-10-07 02:02:27 +02:00
Jürg Lehni
8c56a1a110 Include _visited checks in isValid() calls.
This magically reduces the remaining glitches in @iconexperience's test-suite to half.

Relates to #784.
2015-10-06 22:23:43 +02:00
Jürg Lehni
896b068266 Switch from recursion to a simple loop in getIntersection() 2015-10-06 21:30:51 +02:00
Jürg Lehni
8e4bef217a Change Curve.getParameterOf() to accept a point instead of x, y arguments. 2015-10-06 21:24:58 +02:00
Jürg Lehni
525e35518d No need to default to 0 anymore.
See 1b343d5347 (commitcomment-13622714)
2015-10-06 21:16:49 +02:00
Jürg Lehni
bc736f439f Have Numerical.CURVETIME_EPSILON / 10 evaluated at preprocess time. 2015-10-06 21:14:43 +02:00
Jürg Lehni
7f4d8d54f0 Reduce epsilon in addCurveIntersections()
1/10 of CURVETIME_EPSILON appears to produce good results. It's probably wise to keep it linked.
2015-10-06 21:14:04 +02:00
Jürg Lehni
3ac3df8d32 Rewrite method for linking and choosing multiple intersections in the same location.
The special handling of overlaps reduces the amount of remaining glitches substantially.

Relates to #784.
2015-10-06 21:09:35 +02:00
Jürg Lehni
adabe9126a Simplify calculation of tMinNew and tMaxNew.
As suggested by @iconexperience in https://github.com/paperjs/paper.js/issues/795#issuecomment-145918347
2015-10-06 20:15:15 +02:00
Jürg Lehni
1b343d5347 Rewrite 04cab797db to only use one return statement. 2015-10-06 16:31:30 +02:00
Jürg Lehni
99d969e962 Merge pull request #798 from iconexperience/Improve-clipConvexHullPart
Improve clipConvexHullPart()
2015-10-06 16:21:41 +02:00
Jürg Lehni
3a65c87843 Some code formatting and a fix for a typo in new getConvexHull() 2015-10-06 16:09:35 +02:00
Jan
04cab797db Improve clipConvexHullPart()
Separately handle special cases
2015-10-06 15:25:40 +02:00
Jan
ea035bd9e4 New getConvexHull() 2015-10-06 15:19:33 +02:00
Jürg Lehni
b3d45b6624 Some code clean-up in addCurveIntersections() 2015-10-05 19:32:13 +02:00
Jürg Lehni
c8132584b9 Pass on original curves to addLocation(), to correctly determine p1 and p2.
This fixes one glitch in @iconexperience's test suite.
2015-10-05 19:31:38 +02:00
Jürg Lehni
fcdf916863 Some tweaks to debugging code.
Leave open path artifacts clearly visible for now, so they can be more easily detected.
2015-10-05 17:42:01 +02:00
Jürg Lehni
1f03b00f99 Remove handling of converged fat-line, as it causes issues.
Example 23 in #784 was caused by this, and the code's removal has not produced any new issues, while it solved 6 issues in @iconexperience's test suite.

Closes #795
2015-10-05 17:20:56 +02:00
Jürg Lehni
93cacffd06 Improve comments describing isValid() calls. 2015-10-05 10:56:29 +02:00
Jürg Lehni
7494f880f8 Revert previous commit, due to wrong assumption. 2015-10-05 10:44:34 +02:00
Jürg Lehni
90b4cf7292 No need to check for overlap when determining value for unadjusted
Since setting only changes behavior if there actually is an overlap.
2015-10-05 05:52:35 +02:00
Jürg Lehni
05bc6afdbb Always give intersection segment priority over current segment if valid.
Fixes example 22 in #784, doesn't seem to introduce new issues, unlike last time I tried this approach.
2015-10-05 05:34:22 +02:00
Jürg Lehni
bd4874d73e Improve debug logging of windings. 2015-10-05 04:57:12 +02:00
Jürg Lehni
ba76ed8671 Consider the winding contribution at the intersection of the next segment as well.
Fixes both example 20 and example 21 in #784
2015-10-05 04:24:04 +02:00
Jürg Lehni
d2c762997f Address improvements mentioned by @hkrish in #794 2015-10-04 18:36:18 +02:00
Jürg Lehni
5601e21996 Make sure the two locations are actually part of the same path before comparing index / parameter values. 2015-10-04 10:14:04 +02:00
Jürg Lehni
035a3a1b8c Remove unnecessary _visited check. 2015-10-04 02:27:56 +02:00
Jürg Lehni
ebc956353f Move code to adjust segments after split to CurveLocation. 2015-10-04 02:25:33 +02:00
Jürg Lehni
be2f98d91a Optimize various isCollinear() and isOrthogonal() methods. 2015-10-03 17:42:52 -04:00
Jürg Lehni
8073183010 Use getIntersections() with right filter instead of getCrossings() for boolean operations. 2015-10-03 17:17:12 -04:00
Jürg Lehni
79cb216684 Define CurveLocation#isOverlap() and improve documentation of various related methods. 2015-10-03 17:15:45 -04:00
Jürg Lehni
5af8515d1a Commit some useful debug code, deactivated for now. 2015-10-03 16:18:00 -04:00
Jürg Lehni
86b1b74869 Prevent detection of tiny overlaps and streamline addOverlap() code. 2015-10-03 12:55:32 -05:00
Jürg Lehni
2bed611648 Improve Curve#getPart() to directly handle reversed curves and write docs for it. 2015-10-03 12:55:05 -05:00
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
Jürg Lehni
51c34444db Some more debugging code clean-up. 2015-09-21 12:18:57 -04:00
Jürg Lehni
84bcc537e1 Simplify addCurveLineIntersections() and exclude end points. 2015-09-21 12:13:53 -04:00
Jürg Lehni
0f61ce896a Some code clean-up. 2015-09-21 10:54:33 -04:00
Jürg Lehni
ce95043e99 Lower geometric epsilon.
Differences slightly above 1e-8 where observed.
2015-09-21 10:54:17 -04:00
Jürg Lehni
812ac63e60 Compare points instead of curve time paramters for better precision and reliability. 2015-09-21 10:53:53 -04:00
Jürg Lehni
e36319b71a Give PathItem#getIntersections() a way to filter found intersections right away.
And use it in #getCrossings()
2015-09-21 10:41:59 -04:00
Jürg Lehni
f6f42fe09b Improve handling of overlap ambiguity in getIntersection()
Two passes are needed, first strict, then non-strict, to prevent 'better' next candiates over 'worse' ones.
2015-09-21 09:44:17 -04:00
Jürg Lehni
19a17b2918 Prevent infinite loops through circular references of multiple intersections. 2015-09-21 09:43:19 -04:00
Jürg Lehni
40570b3e59 Furher improve boolean debug logging and drawing. 2015-09-21 09:42:47 -04:00
Jürg Lehni
1ad95c9020 Improve CurveLocation.add() to always merge duplicates.
We nee to check neighbors of the found location too.
2015-09-21 07:06:41 -04:00
Jürg Lehni
f47af12b0d Shorten code statement. 2015-09-20 23:22:41 +02:00
Jürg Lehni
1302df0cb8 Fix variable leackage. 2015-09-20 23:22:31 +02:00
Jürg Lehni
b68be09c87 Fix all accidental non-breaking spaces. 2015-09-20 22:39:28 +02:00
Jürg Lehni
530b8b7bc8 Handle adjusted overlap winding contribution and operator calls through new isValid() function. 2015-09-20 15:50:26 +02:00
Jürg Lehni
738cc4c214 Yet another improvement in multiple interseections boolean code.
This appears to be the one. The only remaining failing cases seem to be linked to getting the same intersection twice now!

Relates to #787
2015-09-20 15:29:54 +02:00
Jürg Lehni
946157f1b1 Add note about usage of _originalWinding. 2015-09-20 14:19:14 +02:00
Jürg Lehni
20ed1e007c More fixes in handling of multiple intersection locations. 2015-09-20 14:17:23 +02:00
Jürg Lehni
5db9703aff No more need to check for crossings since every intersection is now either an overlap or a crossing. 2015-09-20 14:16:47 +02:00
Jürg Lehni
53862233e5 Improve debug logging of new multiple intersections code. 2015-09-19 22:47:57 +02:00