Commit graph

196 commits

Author SHA1 Message Date
Jürg Lehni
231369fa01 Shorten code a bit, using loops. 2012-12-27 20:46:12 +01:00
Jürg Lehni
cb8f3291d3 Clean up some comments. 2012-12-27 20:19:23 +01:00
Jürg Lehni
5b9d33f32e Fix imprecision in intersection code by re-introducing tolerance parameter in Curve#isFlatEnough(). 2012-12-27 20:13:45 +01:00
Jürg Lehni
3c4978eb04 Rename Curve#getParameter(point) to Curve#getParameterOf(point), to better distinguish from Curve#getParameterAt(length). 2012-12-27 20:09:21 +01:00
Jürg Lehni
68ad4bb5ba Implement PathItem#getIntersections(path) and Curve#getIntersections(curve) using divide-and-conquer approach, and new Curve.getBounds(). 2012-12-27 19:23:03 +01:00
Jürg Lehni
75596e1d03 Move a part of Path.getBounds() code into Curve._addBounds(), and use it to also define Curve.getBounds(). 2012-12-27 18:38:55 +01:00
Jürg Lehni
57a9f4fc91 Use constant substitution for Numerical constants as well. 2012-12-27 18:36:59 +01:00
Jürg Lehni
8f093f6dd7 Remove all PORT comments, since we won't port back features to Scriptographer. 2012-12-25 16:07:48 +01:00
Jürg Lehni
734cc1cc61 Undo commit 4445376c0204cb5a2e408c64b77a5b6fa09305ba since it clashes with magnification. 2012-12-21 16:41:57 +01:00
Jürg Lehni
d43cc28aac Optimise Curve constructors that construct from 4 arguments (points) and 8 (coordinate values). 2012-12-20 18:03:11 +01:00
Jürg Lehni
29a2bc781b Implement the various bounds getter on Curve too, using caching and the new static Path.get*Bounds methods. 2012-12-18 14:35:21 +01:00
Jürg Lehni
b535d9f843 Implement new Bootstrap feature that allows hiding of getter parameters to make sure beans are produced, and use it across the library. 2012-12-15 19:51:31 +01:00
Jürg Lehni
09ee9a0689 Exclude 1 in parameter range for crossing counting, as segment points would be counted twice otherwise. 2012-12-15 02:27:36 -08:00
Jürg Lehni
16578e6b15 Clean up code. 2012-12-15 02:24:46 -08:00
Jürg Lehni
a36d244eb1 Handle impression in Curve#getCrossings(), causing wrong results when handling circles. 2012-12-15 01:52:23 -08:00
Ben Firshman
73d6c102a6 Fix k leaking into globals 2012-11-20 15:53:04 +00:00
Ben Firshman
dc1161b32a Fix fullLength leaking into globals 2012-11-20 15:53:03 +00:00
Jürg Lehni
400b454177 Introduce Numerical.isZero(), for comparisons against 0 with a tolerance. 2012-11-05 21:06:13 -08:00
Jürg Lehni
6ed1d67ada Modernize Bootstrap.js, introduce Base.create() and use it instead of the Constructor.dont hack for object creation without the calling of initialize. 2012-11-03 21:49:37 -07:00
Jürg Lehni
f73717a7e7 Fix issues in Numerical.solveQuadratic(), solveCubic() and Path#contains().
Closes #71.
2012-10-22 18:21:33 -04:00
Jürg Lehni
44ad4d885a Update link to Kaspar Fischer's PDF with new URL. 2012-10-15 15:48:38 -07:00
Jürg Lehni
9e61995282 Handle parameter matching of beginning and ends of curves separately. 2012-09-30 14:06:31 -07:00
Jürg Lehni
c30ff47930 Remove matrix argument from all hit-testing related methods.
We better inverse-transform the point and save the code!
2011-12-25 00:19:01 +01:00
Jürg Lehni
a326b189b4 Improve Curve#isFlatEnough() by finding the right threshold through testing, and remove other less precise solutions. 2011-11-12 01:23:41 +01:00
Jürg Lehni
d43b54a531 Shorten Curve.isFlatEnough() code. 2011-11-11 20:58:33 +01:00
Jürg Lehni
fdd4ee8d31 Switch back to Kaspar Fischer's version of Curve.isFlatEnough, as it produces the best results with dashed lines. 2011-11-11 20:55:31 +01:00
Jürg Lehni
3397931bb2 Be consistent in Numerical. EPSILON comparison rules. 2011-09-22 21:14:16 +02:00
Jürg Lehni
7f81184848 Only intersect lines if their lengths are not conflicting with Numerical.EPSILON comparison of the cross product in Line#intersect(). 2011-07-30 11:38:17 +01:00
Jürg Lehni
7d0db22b9b Use squared distances in nearest point algorithm. 2011-07-30 11:37:07 +01:00
Jürg Lehni
45c7f9c4fc Port back code to prevent tangents and normals of length 0 from Scriptographer. 2011-07-09 11:20:03 +02:00
Jürg Lehni
833d4968ce Change root solvers to not produce new arrays each time but fill a passed one that can be reused. Yields io impressive performance improvements. 2011-07-09 10:50:47 +02:00
Jürg Lehni
839107d341 Remove faulty code for calculation of tangents / normals. 2011-07-09 10:35:22 +02:00
Jürg Lehni
ec00150df2 Remove unused variable. 2011-07-09 10:34:18 +02:00
Jürg Lehni
4e1d613ed8 Fix Curve#getLength() again for straight lines. 2011-07-09 10:21:17 +02:00
Jürg Lehni
17b412ce6f Fix a newly introduced bug in #contains(). 2011-07-09 10:17:06 +02:00
Jürg Lehni
8a6d53766e Explain code a litter better. 2011-07-09 10:11:50 +02:00
Jürg Lehni
8928a7b057 Fix #getCrossings() where calling #getPoint() / #getTangent() was slow and also wrong when a matrix was used. 2011-07-09 10:09:41 +02:00
Jürg Lehni
8606f25542 Switch from using Function#apply() trick for passing curve values as function parameters to simply passing arrays and looking up the values on then. 2011-07-09 10:08:43 +02:00
Jürg Lehni
bb4e71da81 Clean up isFlatEnough() code. 2011-07-08 22:26:22 +02:00
Jürg Lehni
fe37ce6bcb Clean up comments. 2011-07-07 23:02:26 +02:00
Jürg Lehni
ca50461fd1 Implement new Curve.isFlatEnough(). 2011-07-07 23:00:16 +02:00
Jürg Lehni
5655981f6d Clean up white spaces. 2011-07-07 16:09:02 +02:00
Jürg Lehni
e573fe5dcd Do not pass prevSlope to Curve#getCrossings(), rely on #getPrevious() instead. 2011-07-07 16:08:10 +02:00
Jürg Lehni
4a53503130 Add support for optional matrix in Path#contains(), Path#getNearestLocation(), Curve#getValues(), Curve#getCrossings(), Curve#getNearestLocation() 2011-07-07 16:07:29 +02:00
Jürg Lehni
9d2148245a Implement Curve#getParameter(point), untested. 2011-07-06 23:15:32 +02:00
Jürg Lehni
b13c7622c8 Rename Curve#getParameter(length) -> Curve#getParameterAt(offset) 2011-07-06 23:13:38 +02:00
Jürg Lehni
778a161ba0 Rename Curve.solve() -> Curve.solveCubic() 2011-07-06 23:10:16 +02:00
Jürg Lehni
fadf6e98b5 Pass on minDistance to CurveLocation. 2011-07-06 22:21:49 +02:00
Jürg Lehni
17bdaf6fe4 Use CurveLocation for Curve#getNearest*() methods. 2011-07-06 22:08:10 +02:00
Jürg Lehni
8b6d9746ce Rename Curve#getCrossingsFor() -> #getCrossings() 2011-07-06 22:07:34 +02:00
Jürg Lehni
5c3a6f72b6 Fix comments. 2011-07-06 15:31:16 +02:00
Jürg Lehni
ccd4113ba3 Implement Nearest Point-on-Curve Problem. 2011-07-05 13:20:31 +02:00
Jürg Lehni
4630a1bd4a Fix documentation. 2011-07-05 13:17:34 +02:00
Jürg Lehni
c1f46977fa Rename Curve.isSufficientlyFlat() to shorter Curve.isFlatEnough() 2011-07-05 13:17:07 +02:00
Jürg Lehni
4110a56521 Improve comments. 2011-07-05 01:20:25 +02:00
Jürg Lehni
6cc7417201 Handle edge case in crossing number algorithm where the beam in right x-direction is touching a tip where the curves change y-direction but do not interesect with the shape, by checking for slope changes. 2011-07-05 01:15:45 +02:00
Jürg Lehni
4924d683e4 Simplify Curve.solve() and improve documentation. 2011-07-04 23:42:16 +02:00
Jürg Lehni
c5269ecbab Implement Path#contains(point) efficiently using the crossing number algorithm and our cubic polynomial solver. 2011-07-04 23:32:15 +02:00
Jürg Lehni
dad118cc20 Fix comments. 2011-07-04 23:30:25 +02:00
Jürg Lehni
79c0ad8cc5 Update copyright notices. 2011-07-01 12:17:45 +02:00
Richard D. Worth
ac39873693 Whitespace. Removed all trailing whitespace from .js files 2011-06-30 06:01:51 -04:00
Jürg Lehni
50c7649421 Improve Segment and Curve documentation. 2011-06-27 15:07:08 +02:00
Jürg Lehni
e35b171bec Improve Curve documentation. 2011-06-27 14:58:17 +02:00
Jürg Lehni
7cd749e63d Change all documentation to new convention of defining @class outside injection scope, fix some comments and a few errors with examples. 2011-06-22 23:56:05 +01:00
Jürg Lehni
3226147e00 Use a version of Bootstrap that always produces beans and remove all beans: true instructions. 2011-06-17 18:42:29 +01:00
Jürg Lehni
ffa79f4fd1 Clean up white spaces in comments. 2011-06-14 22:59:45 +01:00
Jürg Lehni
b3d771a870 Remove Curve#transform() which is currently broken anyhow. 2011-06-05 13:27:39 +01:00
Jürg Lehni
c296eb0883 Fix wrong direction of tangent evaluation at t = 1. 2011-06-05 13:09:53 +01:00
Jürg Lehni
c2c5955717 Rename Curve#getCurvesValues() -> #getValues(). 2011-06-05 12:40:07 +01:00
Jürg Lehni
cb3834f41c Expose the previously private evalutate() function through Curve.evaluate(), make it work with curve value arrays, and use it the for various evaluation methods (#getPoint/Tangent/Normal). 2011-06-05 12:37:43 +01:00
Jürg Lehni
14816a872e Define Curve constructor for 8 parameters and implement Curve#getPart() that returns a new sub curve. 2011-06-05 12:36:26 +01:00
Jürg Lehni
ef10c2797c Add Curve#getPart but hide for now as more work is required. 2011-06-05 11:34:24 +01:00
Jürg Lehni
b5a0979f58 Access internal Curve coordinate properties directly rather than through beans. 2011-06-05 11:33:55 +01:00
Jürg Lehni
fafb6d1d76 Convert CurveFlattener to PathFlattener, which can handle drawing of parts accross curve boundaries. 2011-06-04 18:25:41 +01:00
Jürg Lehni
45a04891ee Clean up. 2011-06-04 15:16:30 +01:00
Jürg Lehni
bff3e14155 Implement a first crude version of Curve.isSufficientlyFlat() 2011-06-04 12:40:36 +01:00
Jürg Lehni
5581eefd0c Define default value of t = 0.5 in Curve.subdivide(). 2011-06-04 12:40:07 +01:00
Jonathan Puckey
2b8f1b71ec Documentation: use inline code tags for boolean and number values, 2011-05-31 14:28:42 +02:00
Jonathan Puckey
17fcb923ff Documentation: rearrange @example tags, improve examples, rename boolean -> Boolean and misc smaller edits. 2011-05-30 19:42:17 +02:00
Jürg Lehni
9d00541987 Clean up PORT comments. 2011-05-29 19:20:10 +01:00
Jonathan Puckey
1520cad144 Documentation: capitalize basic types in @ tags. 2011-05-27 21:21:49 +02:00
Jonathan Puckey
8e84c79aa6 Documentation: capitalize 'string' and 'number' types. 2011-05-27 20:15:15 +02:00
Jonathan Puckey
4015b022ad Docs: use @true tag in boolean return descriptions and add Key.isDown param options. 2011-05-27 18:43:27 +02:00
Jürg Lehni
c67209f889 Optimize Curve#initialize for minifying. 2011-05-26 11:09:02 +01:00
Jonathan Puckey
0e63f11b72 Add Curve documentation. 2011-05-23 17:24:57 +02:00
Jürg Lehni
252a3635dc Replace {@true} tags in documentation ({@true ([^}]*)} -> true $1, false otherwise.) 2011-05-15 15:06:10 +01:00
Jürg Lehni
4e6e855461 Change '// TODO: Port' comments to '// PORT:'. 2011-05-07 14:18:27 +01:00
Jürg Lehni
c36db3a55c Introduce private faster Matrix#_transform* methods that lack arguments checks, and use them internally. 2011-05-06 13:28:35 +01:00
Jürg Lehni
a0e211c691 Big refactoring of how curves are kept in sync with segments (direct references rather than indices), along with various tests. 2011-05-03 00:25:23 +01:00
Jonathan Puckey
2ee7081c14 Merge remote branch 'origin/master' 2011-05-02 12:25:32 +02:00
Jonathan Puckey
41120cf4d9 Various small code cleanups. 2011-05-02 12:23:42 +02:00
Jürg Lehni
26b70309a8 Improve various #toString() functions. 2011-05-02 08:57:55 +01:00
Jürg Lehni
0a4150a5c9 Add beginning of value caching (_length, _bounds) and change tracking to invalidate cached values. 2011-05-02 00:17:21 +01:00
Jürg Lehni
b0282b9bd4 Change Segment to be aware of its index in the segment list and have the curves list update automatically on each change to segments. 2011-05-01 13:27:53 +01:00
Jürg Lehni
6cca355e20 Add Curve.create() as faster internal constructor. 2011-04-30 23:29:10 +01:00
Jürg Lehni
781b315808 Add getter/setter for Path#closed. 2011-04-30 23:22:29 +01:00
Jürg Lehni
ae3ec6f2d7 Remove comment about pending port that has been backported to Scriptographer. 2011-04-27 12:36:04 +01:00
Jürg Lehni
a251a24347 Add some TODOs to check. 2011-04-27 12:21:47 +01:00
Jürg Lehni
6204eef643 Remove comment about pending port that has been backported to Scriptographer. 2011-04-27 12:08:13 +01:00
Jürg Lehni
41eb09f15f Add forgotten brackets in Curve#isSelected() and remove comments about backporting as it is ported now. 2011-04-27 10:52:56 +01:00