aboutsummaryrefslogtreecommitdiff
path: root/js/lib/geom/brush-stroke.js
diff options
context:
space:
mode:
authorPushkar Joshi2012-03-13 11:23:32 -0700
committerPushkar Joshi2012-03-13 11:23:32 -0700
commit76f2021618c0a6a99a1b855233e353e84ca99467 (patch)
tree494ee3268c80a79fae97ae39cd4c1e7e9ea4b7ef /js/lib/geom/brush-stroke.js
parent730c42e005b1ebd96448e3bc2dd700ffd8909cb5 (diff)
downloadninja-76f2021618c0a6a99a1b855233e353e84ca99467.tar.gz
Add a smoothing amount parameter, and hide options based on checkboxes
Diffstat (limited to 'js/lib/geom/brush-stroke.js')
-rwxr-xr-xjs/lib/geom/brush-stroke.js17
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++){