package edu.byu.cs.roots.opg.chart.cmds; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.geom.Ellipse2D; import edu.byu.cs.roots.opg.chart.ChartConversion; public class DrawCmdFilledCircle extends DrawCommand { private static final long serialVersionUID = 5680929513099969019L; private double radius, lineWidth; private Color lineColor, fillColor; private Point coords; public DrawCmdFilledCircle( double radius, double lineWidth, Color lineColor, Color fillColor) { super(); this.radius = radius; this.lineWidth = lineWidth; this.lineColor = lineColor; this.fillColor = fillColor; coords = new Point(DrawCommand.curPos); } public void execute(Graphics2D g, DrawState state) { double x = state.pos.x; double y = state.pos.y; g.setStroke(new BasicStroke((float) lineWidth)); g.setColor(fillColor); Ellipse2D.Double oval = new Ellipse2D.Double(x-radius, y-radius, 2.0*radius, 2.0*radius); //g.fillOval((int) (x-radius), (int) (y-radius), (int) (2*radius), (int) ( 2*radius)); g.fill(oval); g.setColor(lineColor); //g.drawOval((int) (x-radius), (int) (y-radius), (int) (2*radius), (int)(2*radius)); g.draw(oval); } @Override public void execute(Graphics2D g, DrawState state, int viewWidth, int viewHeight, double zoom, Point multiChartOffset) { double x = state.pos.x; double y = state.pos.y; // The radius of the circle converted to screen size double screenRadius = ChartConversion.convertToScreenSize(radius, zoom); Point curPos = ChartConversion.convertToScreenCoord(new Point((int)x,(int)y), zoom, state); Rectangle objectBox = new Rectangle((int)(curPos.x - screenRadius), (int)(curPos.y - screenRadius), (int)(screenRadius * 2), (int)(screenRadius * 2)); if (!viewable(getScreenArray(viewWidth, viewHeight), objectBox, multiChartOffset)) return; execute(g, state); } @Override public Rectangle getShapeBox() { return new Rectangle((int)(coords.x-radius),(int)(coords.y-radius), (int)(radius*2),(int)(radius*2)); } @Override public void executeAbsolute(Graphics2D g, DrawState state, int width, int height, double zoom) { double x = coords.x; double y = coords.y; g.setStroke(new BasicStroke((float) lineWidth)); g.setColor(fillColor); g.fillOval((int) (x-radius), (int) (y-radius), (int) (2*radius), (int) ( 2*radius)); g.setColor(lineColor); g.drawOval((int) (x-radius), (int) (y-radius), (int) (2*radius), (int)(2*radius)); } }