From 6b3d915b94d1263252448bd5a4ebeef4534b9528 Mon Sep 17 00:00:00 2001 From: Pushkar Joshi Date: Fri, 6 Apr 2012 11:31:32 -0700 Subject: code cleanup and working version of selected path anchor point and overlay display for new paths --- js/tools/PenTool.js | 127 +++++++--------------------------------------------- 1 file changed, 17 insertions(+), 110 deletions(-) (limited to 'js') diff --git a/js/tools/PenTool.js b/js/tools/PenTool.js index 32902cea..f310208e 100755 --- a/js/tools/PenTool.js +++ b/js/tools/PenTool.js @@ -402,7 +402,7 @@ exports.PenTool = Montage.create(ShapeTool, { TranslateSelectedSubpathPerPenCanvas:{ value: function() { if (this._penCanvas!==null) { - this._selectedSubpath.translateSubpathPerCanvas(ElementMediator); + this._selectedSubpath.translateSubpathPerCanvas(ElementMediator); } } }, @@ -586,6 +586,8 @@ exports.PenTool = Montage.create(ShapeTool, { var drawData = this.getDrawingData(); if (drawData) { + //todo handle the case when the user does not click a point on the path canvas + // (we don't want to set the plane mat. to be set to some plane not on the canvas of the path) if (!this._penPlaneMat) { this._penPlaneMat = drawData.planeMat; } @@ -829,61 +831,18 @@ exports.PenTool = Montage.create(ShapeTool, { throw ("null drawing context in Pentool::DrawSubpathSVG"); ctx.save(); - /* - var horizontalOffset = this.application.ninja.stage.userContentLeft; - var verticalOffset = this.application.ninja.stage.userContentTop; - //display the subpath as a sequence of cubic beziers - ctx.lineWidth = 1;//TODO replace hardcoded stroke width with some programmatically set value (should not be same as stroke width) - ctx.strokeStyle = "green"; - var i=0; - ctx.beginPath(); - var p0x = subpath.getAnchor(0).getPosX()+ horizontalOffset; - var p0y = subpath.getAnchor(0).getPosY()+ verticalOffset; - ctx.moveTo(p0x, p0y); - for (i = 1; i < numAnchors; i++) { - var p1x = subpath.getAnchor(i - 1).getNextX()+ horizontalOffset; - var p1y = subpath.getAnchor(i - 1).getNextY()+ verticalOffset; - var p2x = subpath.getAnchor(i).getPrevX()+ horizontalOffset; - var p2y = subpath.getAnchor(i).getPrevY()+ verticalOffset; - var p3x = subpath.getAnchor(i).getPosX()+ horizontalOffset; - var p3y = subpath.getAnchor(i).getPosY()+ verticalOffset; - ctx.bezierCurveTo(p1x, p1y, p2x, p2y, p3x, p3y); + var drawingCanvas = subpath.getCanvas(); + if (!drawingCanvas){ + drawingCanvas = ViewUtils.getStageElement(); } - if (subpath.getIsClosed()) { - var i = numAnchors - 1; - var p1x = subpath.getAnchor(i).getNextX()+ horizontalOffset; - var p1y = subpath.getAnchor(i).getNextY()+ verticalOffset; - var p2x = subpath.getAnchor(0).getPrevX()+ horizontalOffset; - var p2y = subpath.getAnchor(0).getPrevY()+ verticalOffset; - var p3x = subpath.getAnchor(0).getPosX()+ horizontalOffset; - var p3y = subpath.getAnchor(0).getPosY()+ verticalOffset; - ctx.bezierCurveTo(p1x, p1y, p2x, p2y, p3x, p3y); - } - ctx.stroke();*/ - - //draw the stage world points by projecting them to screen space //get the screen coords of this anchor from its stage world coord ctx.lineWidth = 1;//TODO replace hardcoded stroke width with some programmatically set value (should not be same as stroke width) ctx.strokeStyle = "green"; - var localToGlobalMat = ViewUtils.getLocalToGlobalMatrix(subpath.getCanvas()); - - /*var currentLTWH = subpath.computeLeftTopWidthHeight(); - var deltaX = currentLTWH[0] - parseInt(ElementMediator.getProperty(subpath.getCanvas(), "left")); - var deltaY = currentLTWH[1] - parseInt(ElementMediator.getProperty(subpath.getCanvas(), "top"));*/ - - //var localCoord = subpath.getAnchorLocalCoord(0); - //var sp = MathUtils.transformAndDivideHomogeneousPoint(localCoord,localToGlobalMat); - //add the difference between the current left and top and the canvas left and top - //sp[0]+=deltaX; sp[1]+=deltaY; - //ctx.moveTo(sp[0], sp[1]); - + var localToGlobalMat = ViewUtils.getLocalToGlobalMatrix(drawingCanvas); var widthAdjustment = -snapManager.getStageWidth()*0.5; var heightAdjustment = -snapManager.getStageHeight()*0.5; - /*var stageWorldToGlobalMatrix = ViewUtils.getStageWorldToGlobalMatrix(); - var localToStageWorldMatrix = ViewUtils.getMatrixFromElement(subpath.getCanvas()); - glmat4.multiply(localToStageWorldMatrix, stageWorldToGlobalMatrix, stageWorldToGlobalMatrix);*/ - var localToStageWorldMat = ViewUtils.getLocalToStageWorldMatrix(subpath.getCanvas(), true, false); + var localToStageWorldMat = ViewUtils.getLocalToStageWorldMatrix(drawingCanvas, true, false); var stageWorldToLocalMat = glmat4.inverse(localToStageWorldMat, []); var c0=[0,0,0], c1=[0,0,0],c2=[0,0,0], c3=[0,0,0]; //screen coord of the bezier control points @@ -904,12 +863,6 @@ exports.PenTool = Montage.create(ShapeTool, { for (i = 1; i < numBezierCurves; i++) { currAnchor = subpath.getAnchor(i%numAnchors); - /*localCoord = subpath.getAnchorLocalCoord(i); - sp = MathUtils.transformAndDivideHomogeneousPoint(localCoord,localToGlobalMat); - //add the difference between the current left and top and the canvas left and top - sp[0]+=deltaX; sp[1]+=deltaY;*/ - - //ctx.lineTo(sp[0], sp[1]); c1 = MathUtils.transformAndDivideHomogeneousPoint( [prevAnchor.getNextX()+widthAdjustment, @@ -957,20 +910,15 @@ exports.PenTool = Montage.create(ShapeTool, { throw ("null drawing context in Pentool::DrawSelectedSubpathAnchors"); ctx.save(); - var horizontalOffset = this.application.ninja.stage.userContentLeft;//stageManagerModule.stageManager.userContentLeft; - var verticalOffset = this.application.ninja.stage.userContentTop;//stageManagerModule.stageManager.userContentTop; - var widthAdjustment = -snapManager.getStageWidth()*0.5; var heightAdjustment = -snapManager.getStageHeight()*0.5; - var localToGlobalMat = ViewUtils.getLocalToGlobalMatrix(subpath.getCanvas()); - - /*var currentLTWH = subpath.computeLeftTopWidthHeight(); - var deltaX = currentLTWH[0] - parseInt(ElementMediator.getProperty(subpath.getCanvas(), "left")); - var deltaY = currentLTWH[1] - parseInt(ElementMediator.getProperty(subpath.getCanvas(), "top")); - */ - - var localToStageWorldMat = ViewUtils.getLocalToStageWorldMatrix(subpath.getCanvas(), true, false); + var drawingCanvas = subpath.getCanvas(); + if (!drawingCanvas){ + drawingCanvas = ViewUtils.getStageElement(); + } + var localToGlobalMat = ViewUtils.getLocalToGlobalMatrix(drawingCanvas); + var localToStageWorldMat = ViewUtils.getLocalToStageWorldMatrix(drawingCanvas, true, false); var stageWorldToLocalMat = glmat4.inverse(localToStageWorldMat, []); @@ -986,19 +934,11 @@ exports.PenTool = Montage.create(ShapeTool, { var currAnchor = null; for (var i = 0; i < numAnchors; i++) { currAnchor = subpath.getAnchor(i); - //px = currAnchor.getPosX()+horizontalOffset; - //py = currAnchor.getPosY()+verticalOffset; - //var localCoordOld = subpath.getAnchorLocalCoord(i); localCoord = MathUtils.transformAndDivideHomogeneousPoint([currAnchor.getPosX()+widthAdjustment, currAnchor.getPosY()+heightAdjustment, currAnchor.getPosZ()], stageWorldToLocalMat); //convert from stage world to local coord - //localCoord[0]-=snapManager.getStageWidth()*0.5; - //localCoord[1]-=snapManager.getStageHeight()*0.5; - //sp = MathUtils.transformAndDivideHomogeneousPoint(localCoordOld,localToGlobalMat); //convert from local coord to global (screen) coord sp = MathUtils.transformAndDivideHomogeneousPoint(localCoord,localToGlobalMat); //convert from local coord to global (screen) coord - //sp[0]+=deltaX; sp[1]+=deltaY; px = sp[0]; py=sp[1]; ctx.beginPath(); - //ctx.arc(px + horizontalOffset, py + verticalOffset, this._DISPLAY_ANCHOR_RADIUS, 0, 2 * Math.PI, false); ctx.moveTo(px-anchorDelta, py-anchorDelta); ctx.lineTo(px+anchorDelta, py-anchorDelta); ctx.lineTo(px+anchorDelta, py+anchorDelta); @@ -1012,18 +952,11 @@ exports.PenTool = Montage.create(ShapeTool, { ctx.lineWidth = 2; if (this._hoveredAnchorIndex>=0 && this._hoveredAnchorIndex