In: Computer Science
Hi, Java Question and thanks in advance.
// TODO once BoundingBox and Draw are implemented, change Fixtures.simpleCircle // to Fixtures.complexGroup and test the app on an emulator or Android device @Override @SuppressLint("DrawAllocation") protected void onDraw(final Canvas canvas) { final Shape shape = Fixtures.simpleCircle; final Location b = shape.accept(new BoundingBox()); canvas.translate(-b.getX(), -b.getY()); b.accept(new Draw(canvas, paint)); shape.accept(new Draw(canvas, paint)); canvas.translate(b.getX(), b.getY()); }
public class BoundingBox implements Visitor { // TODO entirely your job (except onCircle) @Override public Location onCircle(final Circle c) { final int radius = c.getRadius(); return new Location(-radius, -radius, new Rectangle(2 * radius, 2 * radius)); } @Override public Location onFill(final Fill f) { return null; } @Override public Location onGroup(final Group g) { return null; } @Override public Location onLocation(final Location l) { return null; } @Override public Location onRectangle(final Rectangle r) { return null; } @Override public Location onStrokeColor(final StrokeColor c) { return null; } @Override public Location onOutline(final Outline o) { return null; } @Override public Location onPolygon(final Polygon s) { return null; } }
mport android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.Style; import edu.luc.etl.cs313.android.shapes.model.*; /** * A Visitor for drawing a shape to an Android canvas. */ public class Draw implements Visitor { // TODO entirely your job (except onCircle) private final Canvas canvas; private final Paint paint; public Draw(final Canvas canvas, final Paint paint) { this.canvas = null; // FIXME this.paint = null; // FIXME paint.setStyle(Style.STROKE); } @Override public Void onCircle(final Circle c) { canvas.drawCircle(0, 0, c.getRadius(), paint); return null; } @Override public Void onStrokeColor(final StrokeColor c) { return null; } @Override public Void onFill(final Fill f) { return null; } @Override public Void onGroup(final Group g) { return null; } @Override public Void onLocation(final Location l) { return null; } @Override public Void onRectangle(final Rectangle r) { return null; } @Override public Void onOutline(Outline o) { return null; } @Override public Void onPolygon(final Polygon s) { final float[] pts = null; canvas.drawLines(pts, paint); return null; } }
import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.Style; import edu.luc.etl.cs313.android.shapes.model.*; import java.util.*; /** * A Visitor for drawing a shape to an Android canvas. */ public class Draw implements Visitor<Void> { // TODO entirely your job (except onCircle) private final Canvas canvas; private final Paint paint; public Draw(final Canvas canvas, final Paint paint) { this.canvas = canvas; // FIXED this.paint = paint; // FIXED paint.setStyle(Style.STROKE); } @Override public Void onCircle(final Circle c) { canvas.drawCircle(0, 0, c.getRadius(), paint); return null; } @Override public Void onStrokeColor(final StrokeColor c) { final int x = paint.getColor(); paint.setColor(c.getColor()); c.getShape().accept(this); paint.setColor(x); return null; } @Override public Void onFill(final Fill f) { final Style a = paint.getStyle(); paint.setStyle(Style.FILL_AND_STROKE); f.getShape().accept(this); paint.setStyle(a); return null; } @Override public Void onGroup(final Group g) { final Iterator<? extends Shape > shape = g.getShapes().iterator(); while (shape.hasNext()) { shape.next().accept(this); } return null; } @Override public Void onLocation(final Location l) { canvas.translate(l.getX(), l.getY()); l.getShape().accept(this); canvas.translate(-l.getX(), -l.getY()); return null; } @Override public Void onRectangle(final Rectangle r) { canvas.drawRect(0, 0, r.getWidth(), r.getHeight(), paint); return null; } @Override public Void onOutline(Outline o) { final Style before = paint.getStyle(); paint.setStyle(Style.STROKE); o.getShape().accept(this); paint.setStyle(before); return null; } @Override public Void onPolygon(final Polygon s) { List<? extends Point> points = s.getPoints(); final float[] pts = { points.get(0).getX(), points.get(0).getY(), points.get(1).getX(), points.get(1).getY(), points.get(1).getX(), points.get(1).getY(), points.get(2).getX(), points.get(2).getY(), points.get(2).getX(), points.get(2).getY(), points.get(3).getX(), points.get(3).getY(), points.get(0).getX(), points.get(0).getY(), }; canvas.drawLines(pts, paint); return null; } }
* A shape visitor for calculating the bounding box, that is, the smallest * rectangle containing the shape. The resulting bounding box is returned as a * rectangle at a specific location. */ public class BoundingBox implements Visitor<Location> { // TODO entirely your job (except onCircle) @Override public Location onCircle(final Circle c) { final int radius = c.getRadius(); return new Location(-radius, -radius, new Rectangle(2 * radius, 2 * radius)); } @Override public Location onFill(final Fill f) { return null; } @Override public Location onGroup(final Group g) { return null; } @Override public Location onLocation(final Location l) { return null; } @Override public Location onRectangle(final Rectangle r) { return null; } @Override public Location onStrokeColor(final StrokeColor c) { return null; } @Override public Location onOutline(final Outline o) { return null; } @Override public Location onPolygon(final Polygon s) { return null; } }
@Override
@SuppressLint("DrawAllocation")
protected void onDraw(final Canvas canvas) {
final Shape shape = Fixtures.simpleCircle;
final Location b = shape.accept(new BoundingBox());
canvas.translate(-b.getX(), -b.getY());
b.accept(new Draw(canvas, paint));
shape.accept(new Draw(canvas, paint));
canvas.translate(b.getX(), b.getY());
}
public class BoundingBox implements Visitor {
// TODO entirely your job (except onCircle)
@Override
public Location onCircle(final Circle c) {
final int radius = c.getRadius();
return new Location(-radius, -radius, new Rectangle(2 * radius, 2 * radius));
}
@Override
public Location onFill(final Fill f) {
return null;
}
@Override
public Location onGroup(final Group g) {
return null;
}
@Override
public Location onLocation(final Location l) {
return null;
}
@Override
public Location onRectangle(final Rectangle r) {
return null;
}
@Override
public Location onStrokeColor(final StrokeColor c) {
return null;
}
@Override
public Location onOutline(final Outline o) {
return null;
}
@Override
public Location onPolygon(final Polygon s) {
return null;
}
}
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import edu.luc.etl.cs313.android.shapes.model.*;
/**
* A Visitor for drawing a shape to an Android canvas.
*/
public class Draw implements Visitor {
// TODO entirely your job (except onCircle)
private final Canvas canvas;
private final Paint paint;
public Draw(final Canvas canvas, final Paint paint) {
this.canvas = null; // FIXME
this.paint = null; // FIXME
paint.setStyle(Style.STROKE);
}
@Override
public Void onCircle(final Circle c) {
canvas.drawCircle(0, 0, c.getRadius(), paint);
return null;
}
@Override
public Void onStrokeColor(final StrokeColor c) {
return null;
}
@Override
public Void onFill(final Fill f) {
return null;
}
@Override
public Void onGroup(final Group g) {
return null;
}
@Override
public Void onLocation(final Location l) {
return null;
}
@Override
public Void onRectangle(final Rectangle r) {
return null;
}
@Override
public Void onOutline(Outline o) {
return null;
}
@Override
public Void onPolygon(final Polygon s) {
final float[] pts = null;
canvas.drawLines(pts, paint);
return null;
}
}
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import edu.luc.etl.cs313.android.shapes.model.*;
import java.util.*;
/**
* A Visitor for drawing a shape to an Android canvas.
*/
public class Draw implements Visitor<Void> {
// TODO entirely your job (except onCircle)
private final Canvas canvas;
private final Paint paint;
public Draw(final Canvas canvas, final Paint paint) {
this.canvas = canvas; // FIXED
this.paint = paint; // FIXED
paint.setStyle(Style.STROKE);
}
@Override
public Void onCircle(final Circle c) {
canvas.drawCircle(0, 0, c.getRadius(), paint);
return null;
}
@Override
public Void onStrokeColor(final StrokeColor c) {
final int x = paint.getColor();
paint.setColor(c.getColor());
c.getShape().accept(this);
paint.setColor(x);
return null;
}
@Override
public Void onFill(final Fill f) {
final Style a = paint.getStyle();
paint.setStyle(Style.FILL_AND_STROKE);
f.getShape().accept(this);
paint.setStyle(a);
return null;
}
@Override
public Void onGroup(final Group g) {
final Iterator<? extends Shape > shape = g.getShapes().iterator();
while (shape.hasNext()) {
shape.next().accept(this);
}
return null;
}
@Override
public Void onLocation(final Location l) {
canvas.translate(l.getX(), l.getY());
l.getShape().accept(this);
canvas.translate(-l.getX(), -l.getY());
return null;
}
@Override
public Void onRectangle(final Rectangle r) {
canvas.drawRect(0, 0, r.getWidth(), r.getHeight(), paint);
return null;
}
@Override
public Void onOutline(Outline o) {
final Style before = paint.getStyle();
paint.setStyle(Style.STROKE);
o.getShape().accept(this);
paint.setStyle(before);
return null;
}
@Override
public Void onPolygon(final Polygon s) {
List<? extends Point> points = s.getPoints();
final float[] pts =
{
points.get(0).getX(), points.get(0).getY(),
points.get(1).getX(), points.get(1).getY(),
points.get(1).getX(), points.get(1).getY(),
points.get(2).getX(), points.get(2).getY(),
points.get(2).getX(), points.get(2).getY(),
points.get(3).getX(), points.get(3).getY(),
points.get(0).getX(), points.get(0).getY(),
};
canvas.drawLines(pts, paint);
return null;
}
}
* A shape visitor for calculating the bounding box, that is, the smallest
* rectangle containing the shape. The resulting bounding box is returned as a
* rectangle at a specific location.
*/
public class BoundingBox implements Visitor<Location> {
// TODO entirely your job (except onCircle)
@Override
public Location onCircle(final Circle c) {
final int radius = c.getRadius();
return new Location(-radius, -radius, new Rectangle(2 * radius, 2 * radius));
}
@Override
public Location onFill(final Fill f) {
return null;
}
@Override
public Location onGroup(final Group g) {
return null;
}
@Override
public Location onLocation(final Location l) {
return null;
}
@Override
public Location onRectangle(final Rectangle r) {
return null;
}
@Override
public Location onStrokeColor(final StrokeColor c) {
return null;
}
@Override
public Location onOutline(final Outline o) {
return null;
}
@Override
public Location onPolygon(final Polygon s) {
return null;
}
}
hi you did a minor mistake while import graphic canvas you missed letter " i " of import and you have not send the complete code.