diff options
Diffstat (limited to 'js/lib')
-rwxr-xr-x | js/lib/geom/brush-stroke.js | 42 |
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 | ||