function configureTool(){ var curr_toolObj = fl.tools.activeTool; curr_toolObj.setIcon("grid.png"); curr_toolObj.setMenuString("Grid Tool"); curr_toolObj.setToolName("Grid Tool"); curr_toolObj.setToolTip("Grid Tool"); curr_toolObj.setOptionsFile("grid.xml"); } function activate(){ curr_toolObj = fl.tools.activeTool; rows = curr_toolObj.rows; cols = curr_toolObj.cols; } function notifySettingsChanged(){ rows = curr_toolObj.rows; cols = curr_toolObj.cols; } function setCursor(){ fl.tools.setCursor(0); } function mouseDown(){ startPoint = fl.tools.penDownLoc; transformPoint(startPoint, fl.getDocumentDOM().viewMatrix); startPoint = fl.tools.snapPoint(startPoint); fl.drawingLayer.beginDraw(); } function mouseUp(){ fl.drawingLayer.endDraw(); var endPoint = fl.tools.penLoc; transformPoint(endPoint, fl.getDocumentDOM().viewMatrix); endPoint = fl.tools.snapPoint(endPoint); constrain45(startPoint, endPoint); var curr_doc = fl.getDocumentDOM(); var gridHeight = endPoint.y - startPoint.y; for(var r = 0; r<=rows; r++){ var offset = gridHeight/rows*r; var lineStart = {x:startPoint.x, y:startPoint.y + offset}; var lineEnd = {x:endPoint.x, y:startPoint.y + offset}; curr_doc.addNewLine(lineStart, lineEnd); } var gridWidth = endPoint.x - startPoint.x; for(var c = 0; c<=cols; c++){ offset = gridWidth/cols*c; var lineStart = {x:startPoint.x + offset, y:startPoint.y}; var lineEnd = {x:startPoint.x + offset, y:endPoint.y}; curr_doc.addNewLine(lineStart, lineEnd); } } function mouseMove(){ if(fl.tools.mouseIsDown){ fl.drawingLayer.beginFrame(); var penPoint = fl.tools.penLoc; transformPoint(penPoint, fl.getDocumentDOM().viewMatrix); penPoint = fl.tools.snapPoint(penPoint); constrain45(startPoint, penPoint); var gridHeight = penPoint.y - startPoint.y; for(var r = 0; r<=rows; r++){ var offset = gridHeight/rows*r; fl.drawingLayer.moveTo(startPoint.x, startPoint.y + offset); fl.drawingLayer.lineTo(penPoint.x, startPoint.y + offset); } var gridWidth = penPoint.x - startPoint.x; for(var c = 0; c<=cols; c++){ offset = gridWidth/cols*c; fl.drawingLayer.moveTo(startPoint.x + offset, startPoint.y); fl.drawingLayer.lineTo(startPoint.x + offset, penPoint.y); } fl.drawingLayer.endFrame(); } } 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 transformPoint(aPoint, matrix){ var x = aPoint.x * matrix.a + aPoint.y * matrix.c + matrix.tx; var y = aPoint.x * matrix.b + aPoint.y * matrix.d + matrix.ty; aPoint.x = x; aPoint.y = y; }