diff options
author | Pushkar Joshi | 2012-03-13 11:23:32 -0700 |
---|---|---|
committer | Pushkar Joshi | 2012-03-13 11:23:32 -0700 |
commit | 76f2021618c0a6a99a1b855233e353e84ca99467 (patch) | |
tree | 494ee3268c80a79fae97ae39cd4c1e7e9ea4b7ef /js/lib | |
parent | 730c42e005b1ebd96448e3bc2dd700ffd8909cb5 (diff) | |
download | ninja-76f2021618c0a6a99a1b855233e353e84ca99467.tar.gz |
Add a smoothing amount parameter, and hide options based on checkboxes
Diffstat (limited to 'js/lib')
-rwxr-xr-x | js/lib/geom/brush-stroke.js | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/js/lib/geom/brush-stroke.js b/js/lib/geom/brush-stroke.js index 4c42539a..52f81ffe 100755 --- a/js/lib/geom/brush-stroke.js +++ b/js/lib/geom/brush-stroke.js | |||
@@ -39,10 +39,7 @@ var BrushStroke = function GLBrushStroke() { | |||
39 | this._strokeDoSmoothing = false; | 39 | this._strokeDoSmoothing = false; |
40 | this._strokeUseCalligraphic = false; | 40 | this._strokeUseCalligraphic = false; |
41 | this._strokeAngle = 0; | 41 | this._strokeAngle = 0; |
42 | 42 | this._strokeAmountSmoothing = 0; | |
43 | //the wetness of the brush (currently this is multiplied to the square of the stroke width, but todo should be changed to not depend on stroke width entirely | ||
44 | //smaller value means more samples for the path | ||
45 | this._WETNESS_FACTOR = 0.25; | ||
46 | 43 | ||
47 | //threshold that tells us whether two samples are too far apart | 44 | //threshold that tells us whether two samples are too far apart |
48 | this._MAX_SAMPLE_DISTANCE_THRESHOLD = 5; | 45 | this._MAX_SAMPLE_DISTANCE_THRESHOLD = 5; |
@@ -125,7 +122,7 @@ var BrushStroke = function GLBrushStroke() { | |||
125 | //add the point only if it is some epsilon away from the previous point | 122 | //add the point only if it is some epsilon away from the previous point |
126 | var numPoints = this._Points.length; | 123 | var numPoints = this._Points.length; |
127 | if (numPoints>0) { | 124 | if (numPoints>0) { |
128 | var threshold = this._MIN_SAMPLE_DISTANCE_THRESHOLD;//this._WETNESS_FACTOR*this._strokeWidth; | 125 | var threshold = this._MIN_SAMPLE_DISTANCE_THRESHOLD; |
129 | var prevPt = this._Points[numPoints-1]; | 126 | var prevPt = this._Points[numPoints-1]; |
130 | var diffPt = [prevPt[0]-pt[0], prevPt[1]-pt[1]]; | 127 | var diffPt = [prevPt[0]-pt[0], prevPt[1]-pt[1]]; |
131 | var diffPtMag = Math.sqrt(diffPt[0]*diffPt[0] + diffPt[1]*diffPt[1]); | 128 | var diffPtMag = Math.sqrt(diffPt[0]*diffPt[0] + diffPt[1]*diffPt[1]); |
@@ -196,6 +193,10 @@ var BrushStroke = function GLBrushStroke() { | |||
196 | this._strokeDoSmoothing = s; | 193 | this._strokeDoSmoothing = s; |
197 | } | 194 | } |
198 | 195 | ||
196 | this.setSmoothingAmount = function(a){ | ||
197 | this._strokeAmountSmoothing = a; | ||
198 | } | ||
199 | |||
199 | this.setStrokeUseCalligraphic = function(c){ | 200 | this.setStrokeUseCalligraphic = function(c){ |
200 | this._strokeUseCalligraphic = c; | 201 | this._strokeUseCalligraphic = c; |
201 | } | 202 | } |
@@ -252,7 +253,7 @@ var BrushStroke = function GLBrushStroke() { | |||
252 | //**** add samples to the path if needed...linear interpolation for now | 253 | //**** add samples to the path if needed...linear interpolation for now |
253 | //if (numPoints>1) { | 254 | //if (numPoints>1) { |
254 | if (0){ | 255 | if (0){ |
255 | var threshold = this._WETNESS_FACTOR*this._strokeWidth; | 256 | var threshold = this._MAX_SAMPLE_DISTANCE_THRESHOLD; |
256 | var prevPt = this._Points[0]; | 257 | var prevPt = this._Points[0]; |
257 | var prevIndex = 0; | 258 | var prevIndex = 0; |
258 | for (var i=1;i<numPoints;i++){ | 259 | for (var i=1;i<numPoints;i++){ |
@@ -283,7 +284,7 @@ var BrushStroke = function GLBrushStroke() { | |||
283 | } | 284 | } |
284 | } | 285 | } |
285 | 286 | ||
286 | //todo 4-point subdivision iterations over continuous regions of 'long' segments | 287 | //instead of the following, may use 4-point subdivision iterations over continuous regions of 'long' segments |
287 | // look at http://www.gvu.gatech.edu/~jarek/Split&Tweak/ for formula | 288 | // look at http://www.gvu.gatech.edu/~jarek/Split&Tweak/ for formula |
288 | //**** add samples to the long sections of the path --- Catmull-Rom spline interpolation | 289 | //**** add samples to the long sections of the path --- Catmull-Rom spline interpolation |
289 | if (this._strokeDoSmoothing && numPoints>1) { | 290 | if (this._strokeDoSmoothing && numPoints>1) { |
@@ -330,7 +331,7 @@ var BrushStroke = function GLBrushStroke() { | |||
330 | console.log("Inserted "+numInsertedPoints+" additional CatmullRom points"); | 331 | console.log("Inserted "+numInsertedPoints+" additional CatmullRom points"); |
331 | 332 | ||
332 | //now do 3-4 iterations of Laplacian smoothing (setting the points to the average of their neighbors) | 333 | //now do 3-4 iterations of Laplacian smoothing (setting the points to the average of their neighbors) |
333 | var numLaplacianIterations = 3; //todo figure out the proper number of Laplacian iterations (perhaps as a function of stroke width) | 334 | var numLaplacianIterations = this._strokeAmountSmoothing; |
334 | for (var n=0;n<numLaplacianIterations;n++){ | 335 | for (var n=0;n<numLaplacianIterations;n++){ |
335 | newPoints = this._Points; | 336 | newPoints = this._Points; |
336 | for (var i=1;i<numPoints-1;i++){ | 337 | for (var i=1;i<numPoints-1;i++){ |