package open.dolphin.impl.scheam.schemastate; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.geom.Ellipse2D; import java.awt.geom.GeneralPath; import open.dolphin.impl.scheam.SchemaEditorImpl; /** * * @author pns */ public class PencilState extends PolygonState { public PencilState(SchemaEditorImpl context) { super(context); } @Override public void mouseDown(Point p) { // drag の時は fill しない properties.setIsFill(false); start = p; end = null; first = true; shape = new GeneralPath(); } @Override public void mouseUp(Point p) { if (shape.getBounds().width != 0 || shape.getBounds().height != 0) { undoMgr.storeDraw(); addPathShape((GeneralPath)shape); } shape = null; } /** * クリックならドット,ALT が押されていたらランダムに6ドット * @param e */ @Override public void mouseClicked(MouseEvent e) { undoMgr.storeDraw(); // ドットの時は fill する properties.setIsFill(true); float r = properties.getLineWidth()/2 + 1; //ドットの半径 if (e.isAltDown()) { //ランダムドット産生 GeneralPath gp = new GeneralPath(); java.util.Random rnd = new java.util.Random(); gp.moveTo(start.x, start.y); gp.lineTo(start.x, start.y); for (int i=0; i<5; i++) { double t = (rnd.nextFloat()+(double)i) * Math.PI*2/5; gp.moveTo(start.x + (float) (2.5*r*Math.sin(t)), start.y + (float) (2.5*r*Math.cos(t))); gp.lineTo(start.x + (float) (2.5*r*Math.sin(t)), start.y + (float) (2.5*r*Math.cos(t))); } addPathShape(gp); } else { //普通にドット Ellipse2D dot = new Ellipse2D.Double(); dot.setFrameFromCenter(start.x, start.y, start.x + r, start.y + r); addAreaShape(dot); } canvas.repaint(); } }