aboutsummaryrefslogtreecommitdiff
path: root/js/lib
diff options
context:
space:
mode:
Diffstat (limited to 'js/lib')
-rwxr-xr-xjs/lib/geom/brush-stroke.js42
1 files changed, 34 insertions, 8 deletions
diff --git a/js/lib/geom/brush-stroke.js b/js/lib/geom/brush-stroke.js
index a3a5ed9a..f0925ba5 100755
--- a/js/lib/geom/brush-stroke.js
+++ b/js/lib/geom/brush-stroke.js
@@ -486,13 +486,23 @@ var BrushStroke = function GLBrushStroke() {
486 this._doSmoothing(); 486 this._doSmoothing();
487 487
488 // **** recompute the bounding box **** 488 // **** recompute the bounding box ****
489 this._updateBoundingBox(); 489 var deltaWH = this._updateBoundingBox();
490
491 // **** offset the local coords to account for the change in bbox ****
492 this._offsetLocalCoord(deltaWH[0]*0.5, deltaWH[1]*0.5);
490 493
491 // **** turn off the dirty flag **** 494 // **** turn off the dirty flag ****
492 this._isDirty = false; 495 this._isDirty = false;
493 } 496 }
494 }; 497 };
495 498
499 this._offsetLocalCoord = function(deltaW, deltaH){
500 var numPoints = this._LocalPoints.length;
501 for (var i=0;i<numPoints;i++) {
502 this._LocalPoints[i][0]+= deltaW;
503 this._LocalPoints[i][1]+= deltaH;
504 }
505 };
496 this._doSmoothing = function() { 506 this._doSmoothing = function() {
497 var numPoints = this._LocalPoints.length; 507 var numPoints = this._LocalPoints.length;
498 if (this._strokeDoSmoothing && numPoints>1) { 508 if (this._strokeDoSmoothing && numPoints>1) {
@@ -516,6 +526,9 @@ var BrushStroke = function GLBrushStroke() {
516 // *** compute the bounding box ********* 526 // *** compute the bounding box *********
517 var points = this._LocalPoints; 527 var points = this._LocalPoints;
518 var numPoints = points.length; 528 var numPoints = points.length;
529 var oldWidth = this._BBoxMax[0]-this._BBoxMin[0];
530 var oldHeight = this._BBoxMax[1]-this._BBoxMin[1];
531
519 this._BBoxMin = [Infinity, Infinity, Infinity]; 532 this._BBoxMin = [Infinity, Infinity, Infinity];
520 this._BBoxMax = [-Infinity, -Infinity, -Infinity]; 533 this._BBoxMax = [-Infinity, -Infinity, -Infinity];
521 if (numPoints === 0) { 534 if (numPoints === 0) {
@@ -553,6 +566,11 @@ var BrushStroke = function GLBrushStroke() {
553 this._BBoxMax[d]+= bboxPadding; 566 this._BBoxMax[d]+= bboxPadding;
554 }//for every dimension d from 0 to 2 567 }//for every dimension d from 0 to 2
555 } 568 }
569
570 //return the difference between the current and old bbox width and height
571 var newWidth = this._BBoxMax[0]-this._BBoxMin[0];
572 var newHeight = this._BBoxMax[1]-this._BBoxMin[1];
573 return [(newWidth-oldWidth), (newHeight-oldHeight)];
556 }; 574 };
557 575
558 this.buildBuffers = function () { 576 this.buildBuffers = function () {
@@ -584,19 +602,27 @@ var BrushStroke = function GLBrushStroke() {
584 if (this._canvas) { 602 if (this._canvas) {
585 // this seems to produce drift as the stroke size is changed smoothly...bug due to floating point round off? 603 // this seems to produce drift as the stroke size is changed smoothly...bug due to floating point round off?
586 //get the old left, top, width, and height 604 //get the old left, top, width, and height
587 var oldLeft = parseInt(CanvasController.getProperty(this._canvas, "left")); 605 /*var oldLeft = parseInt(CanvasController.getProperty(this._canvas, "left"));
588 var oldTop = parseInt(CanvasController.getProperty(this._canvas, "top")); 606 var oldTop = parseInt(CanvasController.getProperty(this._canvas, "top"));
589 var oldWidth = parseInt(CanvasController.getProperty(this._canvas, "width")); 607 var oldWidth = parseInt(CanvasController.getProperty(this._canvas, "width"));
590 var oldHeight = parseInt(CanvasController.getProperty(this._canvas, "height")); 608 var oldHeight = parseInt(CanvasController.getProperty(this._canvas, "height"));
591 var newLeft = oldLeft - ((bboxWidth-oldWidth)*0.5); 609 var newLeft = oldLeft - ((bboxWidth-oldWidth)*0.5);
592 var newTop = oldTop - ((bboxHeight-oldHeight)*0.5); 610 var newTop = oldTop - ((bboxHeight-oldHeight)*0.5);*/
593 611
612 //update the stageWorldCenter as a function of the new bounding box in plane space
613 var bboxMid = [0.5 * (bboxMax[0] + bboxMin[0]), 0.5 * (bboxMax[1] + bboxMin[1]), 0.5 * (bboxMax[2] + bboxMin[2])];
614 var newStageWorldCenter = MathUtils.transformPoint(bboxMid, this._planeMat);
615 var wh = ViewUtils.getStageDimension();
616 newStageWorldCenter[0]+= wh[0]*0.5; newStageWorldCenter[1]+= wh[1]*0.5;
617
618 var newLeft = Math.round(this._stageWorldCenter[0] - 0.5 * bboxWidth);
619 var newTop = Math.round(this._stageWorldCenter[1] - 0.5 * bboxHeight);
594 //assign the new width and height as the canvas dimensions through the canvas controller 620 //assign the new width and height as the canvas dimensions through the canvas controller
595 //CanvasController.setProperty(this._canvas, "left", newLeft+"px"); 621 CanvasController.setProperty(this._canvas, "left", newLeft+"px");
596 //CanvasController.setProperty(this._canvas, "top", newTop+"px"); 622 CanvasController.setProperty(this._canvas, "top", newTop+"px");
597 623
598 //CanvasController.setProperty(this._canvas, "width", bboxWidth+"px"); 624 CanvasController.setProperty(this._canvas, "width", bboxWidth+"px");
599 //CanvasController.setProperty(this._canvas, "height", bboxHeight+"px"); 625 CanvasController.setProperty(this._canvas, "height", bboxHeight+"px");
600 this._canvas.elementModel.shapeModel.GLWorld.setViewportFromCanvas(this._canvas); 626 this._canvas.elementModel.shapeModel.GLWorld.setViewportFromCanvas(this._canvas);
601 } 627 }
602 628