From c786aafb077f9f510c62bc51faa7a74a23ccda1c Mon Sep 17 00:00:00 2001 From: Pushkar Joshi Date: Wed, 11 Apr 2012 12:18:03 -0700 Subject: dragging anchor points in 3D (seems to work ok for existing paths --- the left and top change causes the rest of the points to move, which *may* be unavoidable), still has bugs with NEW points being placed at wrong position --- js/tools/PenTool.js | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) (limited to 'js/tools') diff --git a/js/tools/PenTool.js b/js/tools/PenTool.js index 8065e1a6..c21c1f24 100755 --- a/js/tools/PenTool.js +++ b/js/tools/PenTool.js @@ -327,6 +327,71 @@ exports.PenTool = Montage.create(ShapeTool, { //go through the drawing toolbase to get the position of the mouse var currMousePos = DrawingToolBase.getHitRecPos(DrawingToolBase.getUpdatedSnapPoint(point.x, point.y, false, this.mouseDownHitRec)); if (currMousePos && this._selectedSubpath && (this._selectedSubpath.getSelectedAnchorIndex() >= 0 && this._selectedSubpath.getSelectedAnchorIndex() < this._selectedSubpath.getNumAnchors())) { + + // BEGIN NEW LOCAL COORD BLOCK + //build the mouse position in local coordinates + var drawingCanvas = this._selectedSubpath.getCanvas(); + if (!drawingCanvas){ + drawingCanvas = ViewUtils.getStageElement(); + } + var globalMousePos = this._getUnsnappedScreenPosition(event.pageX, event.pageY); + var localMousePos = ViewUtils.globalToLocal(globalMousePos, drawingCanvas); + + //compute the translation from the selected anchor + var selAnchorLocalPos = this._selectedSubpath.getAnchorLocalCoord(this._selectedSubpath.getSelectedAnchorIndex()); + var localTranslation = VecUtils.vecSubtract(3, localMousePos, selAnchorLocalPos[1]); + var selAnchor = this._selectedSubpath.getAnchor(this._selectedSubpath.getSelectedAnchorIndex()); + + if (this._editMode & this.EDIT_ANCHOR) { + selAnchor.translateAll(localTranslation[0], localTranslation[1], localTranslation[2]); + } + else if (this._editMode & this.EDIT_PREV) { + localTranslation = VecUtils.vecSubtract(3, localMousePos, selAnchorLocalPos[0]); + selAnchor.translatePrev(localTranslation[0], localTranslation[1], localTranslation[2]); + + //move the next point if Alt key is down to ensure relative angle between prev and next + if (this._isAltDown) { + selAnchor.translateNextFromPrev(localTranslation[0], localTranslation[1], localTranslation[2]); + } + } + else if (this._editMode & this.EDIT_NEXT) { + localTranslation = VecUtils.vecSubtract(3, localMousePos, selAnchorLocalPos[2]); + selAnchor.translateNext(localTranslation[0], localTranslation[1], localTranslation[2]); + + //move the prev point if Alt key is down to ensure relative angle between prev and next + if (this._isAltDown) { + selAnchor.translatePrevFromNext(localTranslation[0], localTranslation[1], localTranslation[2]); + } + } + else if (this._editMode & this.EDIT_PREV_NEXT) { + localTranslation = VecUtils.vecSubtract(3, localMousePos, selAnchorLocalPos[2]); + selAnchor.translateNext(localTranslation[0], localTranslation[1], localTranslation[2]); + selAnchor.setPrevFromNext(); + } + + + //snapping...check if the new location of the anchor point is close to another anchor point + var selX = selAnchor.getPosX(); + var selY = selAnchor.getPosY(); + var selZ = selAnchor.getPosZ(); + this._snapTargetIndex = -1; + var numAnchors = this._selectedSubpath.getNumAnchors(); + for (var i = 0; i < numAnchors; i++) { + //check if the selected anchor is close to any other anchors + if (i === this._selectedSubpath.getSelectedAnchorIndex()) + continue; + var currAnchor = this._selectedSubpath.getAnchor(i); + var distSq = currAnchor.getDistanceSq(selX, selY, selZ); + if (distSq < this._PICK_POINT_RADIUS * this._PICK_POINT_RADIUS) { + //set the snap target to the location of the first close-enough anchor + this._snapTargetIndex = i; + break; + } + } + + // END NEW LOCAL COORD BLOCK + + /* BEGIN OLD GLOBAL COORD COMMENT BLOCK //var scoord = this._getScreenCoord(this._mouseUpHitRec); var selAnchor = this._selectedSubpath.getAnchor(this._selectedSubpath.getSelectedAnchorIndex()); var selX = selAnchor.getPosX(); @@ -362,6 +427,7 @@ exports.PenTool = Montage.create(ShapeTool, { selAnchor.setPrevFromNext(); } + //snapping...check if the new location of the anchor point is close to another anchor point this._snapTargetIndex = -1; var numAnchors = this._selectedSubpath.getNumAnchors(); @@ -378,6 +444,8 @@ exports.PenTool = Montage.create(ShapeTool, { } } + END OLD GLOBAL COORD COMMENT BLOCK */ + //make the subpath dirty so it will get re-drawn this._selectedSubpath.makeDirty(); this.DrawSubpathSVG(this._selectedSubpath); -- cgit v1.2.3