function configureTool() { var curr_toolObj = fl.tools.activeTool; curr_toolObj.setIcon("arrow.png"); curr_toolObj.setMenuString("Arrow Tool"); curr_toolObj.setToolName("Arrow Tool"); curr_toolObj.setToolTip("Arrow Tool"); curr_toolObj.setOptionsFile("arrow.xml"); } function activate() { curr_toolObj = fl.tools.activeTool; shaftWidth = curr_toolObj.shaftWidth; shaftLength = curr_toolObj.shaftLength; } function notifySettingsChanged() { shaftWidth = curr_toolObj.shaftWidth; shaftLength = curr_toolObj.shaftLength; } function mouseDown() { startPoint = fl.tools.penDownLoc; transform(startPoint, fl.getDocumentDOM().viewMatrix); startPoint = fl.tools.snapPoint(startPoint); fl.drawingLayer.beginDraw(); } function mouseMove(){ if(fl.tools.mouseIsDown){ fl.drawingLayer.beginFrame(); var penPoint = fl.tools.penLoc; transform(penPoint, fl.getDocumentDOM().viewMatrix); penPoint = fl.tools.snapPoint(penPoint); constrain45(startPoint, penPoint); var w = penPoint.x - startPoint.x; var h = penPoint.y - startPoint.y; var points = new Array(); points[0] = {x:startPoint.x, y:startPoint.y - h * shaftWidth}; points[1] = {x:startPoint.x + w * shaftLength, y:startPoint.y - h * shaftWidth}; points[2] = {x:startPoint.x + w * shaftLength, y:startPoint.y - h}; points[3] = {x:penPoint.x, y:startPoint.y}; points[4] = {x:startPoint.x + w * shaftLength, y:penPoint.y}; points[5] = {x:startPoint.x + w * shaftLength, y:startPoint.y + h * shaftWidth}; points[6] = {x:startPoint.x, y:startPoint.y + h * shaftWidth}; arrow_path = fl.drawingLayer.newPath(); for (var i = 0; i < points.length; i++) { invert(points[i], fl.getDocumentDOM().viewMatrix); arrow_path.addPoint(points[i].x, points[i].y); } arrow_path.close(); fl.drawingLayer.drawPath(arrow_path); fl.drawingLayer.endFrame(); } } function mouseUp() { fl.drawingLayer.endDraw(); arrow_path.makeShape(); } function constrain45(p1, p2) { if (fl.tools.shiftIsDown) { var dx = Math.abs(p2.x - p1.x); var dy = Math.abs(p2.y - p1.y); var offset = Math.max(dx, dy); if (p2.y < p1.y) { p2.y = p1.y - offset; } else { p2.y = p1.y + offset; } if (p2.x > p1.x) { p2.x = p1.x + offset; } else { p2.x = p1.x - offset; } } } function transform( pt, mat ) { var x = pt.x*mat.a + pt.y*mat.c; var y = pt.x*mat.b + pt.y*mat.d; pt.x = x; pt.y = y; } function invert( pt, mat ) { var det = mat.a*mat.d-mat.b*mat.c; var x = pt.x * mat.d/det + pt.y * -mat.c/det; var y = pt.x * -mat.b/det + pt.y * mat.a/det; pt.x = x; pt.y = y; }