Commit graph

4621 commits

Author SHA1 Message Date
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