aboutsummaryrefslogtreecommitdiff
path: root/js/tools/PenTool.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/tools/PenTool.js')
-rwxr-xr-xjs/tools/PenTool.js28
1 files changed, 24 insertions, 4 deletions
diff --git a/js/tools/PenTool.js b/js/tools/PenTool.js
index 8abb41ef..0e3bd15c 100755
--- a/js/tools/PenTool.js
+++ b/js/tools/PenTool.js
@@ -726,17 +726,23 @@ exports.PenTool = Montage.create(ShapeTool, {
726 }, 726 },
727 727
728 //prepare the selected subpath 728 //prepare the selected subpath
729 // convert the anchor points to stage world space (assume that's already the case if there is no subpath canvas)
730 // compute the center of the future canvas of this subpath in stage world space 729 // compute the center of the future canvas of this subpath in stage world space
731 // convert the anchor points from stage world to local space of the canvas 730 // compute local coordinates for the subpath (in case it does not have a canvas)
732 PrepareSelectedSubpathForRendering: { 731 PrepareSelectedSubpathForRendering: {
733 value: function(){ 732 value: function(){
734 var i=0,d=0; 733 var i=0,d=0;
735 var currAnchor = null; 734 var currAnchor = null;
736 var xAdjustment = snapManager.getStageWidth()*0.5; 735 var xAdjustment = snapManager.getStageWidth()*0.5;
737 var yAdjustment = snapManager.getStageHeight()*0.5; 736 var yAdjustment = snapManager.getStageHeight()*0.5;
737 var swPos=null, swPrev=null, swNext=null;
738 var localPos=null, localPrev=null, localNext=null;
738 739
739 var numAnchors = this._selectedSubpath.getNumAnchors(); 740 var numAnchors = this._selectedSubpath.getNumAnchors();
741 if (numAnchors<2){
742 return;//nothing to do
743 }
744 this._selectedSubpath.makeDirty();
745
740 var bboxMin=null, bboxMax=null; 746 var bboxMin=null, bboxMax=null;
741 if (this._selectedSubpathCanvas) { 747 if (this._selectedSubpathCanvas) {
742 //if there already is a subpath canvas, it means the anchor points are in local space 748 //if there already is a subpath canvas, it means the anchor points are in local space
@@ -779,10 +785,24 @@ exports.PenTool = Montage.create(ShapeTool, {
779 bboxMax = this._selectedSubpath.getBBoxMax(); 785 bboxMax = this._selectedSubpath.getBBoxMax();
780 this._selectedSubpathCanvasCenter = VecUtils.vecInterpolate(3, bboxMin, bboxMax, 0.5); 786 this._selectedSubpathCanvasCenter = VecUtils.vecInterpolate(3, bboxMin, bboxMax, 0.5);
781 787
782 //todo convert the path points into local coordinates 788 //convert the path points into local coordinates by multiplying by the inverse of the plane mat
783 789 for (i=0;i<numAnchors;i++){
790 currAnchor = this._selectedSubpath.getAnchor(i);
791 swPos = [currAnchor.getPosX()-xAdjustment,currAnchor.getPosY()-yAdjustment,currAnchor.getPosZ()];
792 swPrev = [currAnchor.getPrevX()-xAdjustment,currAnchor.getPrevY()-yAdjustment,currAnchor.getPrevZ()];
793 swNext = [currAnchor.getNextX()-xAdjustment,currAnchor.getNextY()-yAdjustment,currAnchor.getNextZ()];
794 var planeMatInv = glmat4.inverse(this._selectedSubpathPlaneMat, []);
795 localPos = MathUtils.transformAndDivideHomogeneousPoint(swPos, planeMatInv);
796 localPrev = MathUtils.transformAndDivideHomogeneousPoint(swPrev, planeMatInv);
797 localNext = MathUtils.transformAndDivideHomogeneousPoint(swNext, planeMatInv);
798 currAnchor.setPos(localPos[0],localPos[1],localPos[2]);
799 currAnchor.setPrevPos(localPrev[0],localPrev[1],localPrev[2]);
800 currAnchor.setNextPos(localNext[0],localNext[1],localNext[2]);
801 }
784 } 802 }
785 803
804 //todo MISSING: sandwich the planeMat between with the translation to the previous center of the canvas in local space and its inverse
805
786 this._selectedSubpath.makeDirty(); 806 this._selectedSubpath.makeDirty();
787 this._selectedSubpath.createSamples(false); 807 this._selectedSubpath.createSamples(false);
788 this._selectedSubpath.offsetPerBBoxMin(); 808 this._selectedSubpath.offsetPerBBoxMin();