diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java index 3de588645a103659916d26406f220443fdef1e37..4947ec004be002124b6dbc79286c1584483de6f2 100644 --- a/src/main/java/shape/AbstractShape.java +++ b/src/main/java/shape/AbstractShape.java @@ -5,23 +5,19 @@ import javafx.scene.canvas.GraphicsContext; import java.util.List; -public class AbstractShape implements Shape { +public abstract class AbstractShape implements Shape { private List<Point2D> points; public AbstractShape(List<Point2D> points) { this.points = points; } - public List<Point2D> addPoints(Point2D points){ - this.points.add(points); - return this.points; + public void addPoints(Point2D... points){ + for (Point2D point: points) + this.points.add(point); } @Override public int pointsCount() { - int count = 0; - for (Point2D point : points) { - count++; - } - return count; + return points.size(); } @Override @@ -31,8 +27,14 @@ public class AbstractShape implements Shape { @Override public void draw(GraphicsContext context) { - for (Point2D point : points) { - + if (pointsCount()>0){ + context.beginPath(); + context.moveTo(point(0).getX(), point(0).getY()); + for (int i = 1; i<pointsCount(); i++){ + context.lineTo(point(i).getX(),point(i).getY()); + } + context.closePath(); + context.stroke(); } } diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java index 05a6d6440ec5be918e4955bb36c018857efad67d..ff3c0d35ee02299d5eb4543504f0e5cbb5e6855f 100644 --- a/src/main/java/shape/BorderDecorator.java +++ b/src/main/java/shape/BorderDecorator.java @@ -1,6 +1,8 @@ package shape; +import javafx.geometry.Point2D; import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; public class BorderDecorator extends Decorator { @@ -10,7 +12,12 @@ public class BorderDecorator extends Decorator { super(decoratedShape); this.radius = radius; } - protected void drawDecoration(GraphicsContext context) { - + protected void drawDecoration(GraphicsContext context) { + context.setStroke(Color.BLACK); + context.setLineWidth(2); + for (int i=0; i<pointsCount(); i++){ + Point2D point = point(i); + context.strokeOval(point.getX() - radius, point.getY()- radius,radius*2,radius*2); + } } } diff --git a/src/main/java/shape/CenterDecorator.java b/src/main/java/shape/CenterDecorator.java index 0eece70968d81a4ae94863f3c15330a41ffcdccd..eb792b5ce01167369176654f661017d5046ecbc0 100644 --- a/src/main/java/shape/CenterDecorator.java +++ b/src/main/java/shape/CenterDecorator.java @@ -1,6 +1,8 @@ package shape; +import javafx.geometry.Point2D; import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; public class CenterDecorator extends Decorator{ private double radius; @@ -9,6 +11,17 @@ public class CenterDecorator extends Decorator{ this.radius = radius; } protected void drawDecoration(GraphicsContext context) { - + double centerX = 0; + double centerY = 0; + for (int i =0; i<pointsCount(); i++){ + Point2D point = point(i); + centerX += point.getX(); + centerY += point.getY(); + } + centerX /= pointsCount(); + centerY /= pointsCount(); + context.setStroke(Color.RED); + context.setLineWidth(2); + context.strokeOval(centerX-radius, centerY-radius, radius*2,radius*2); } } diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java index 2f085454682d579dca82a4717c155defb11974f7..69ee423b88f6b451de184081bc5b22169cffc625 100644 --- a/src/main/java/shape/Decorator.java +++ b/src/main/java/shape/Decorator.java @@ -15,12 +15,13 @@ public abstract class Decorator implements Shape { @Override public Point2D point(int index) { - return null; + return decoratedshape.point(index); } @Override public void draw(GraphicsContext context) { - + decoratedshape.draw(context); + drawDecoration(context); } protected void drawDecoration(GraphicsContext context) { diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java index d5501cb0ae57ea3163bba3ebfbecd7f0efe1ba03..a53b2f408ffb4b9452bd8f9ac5dfbb39c20e65e2 100644 --- a/src/main/java/shape/Polygon.java +++ b/src/main/java/shape/Polygon.java @@ -4,27 +4,32 @@ import javafx.geometry.Point2D; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; -public class Polygon implements Shape { +import java.util.List; + +public class Polygon extends AbstractShape { private Color color; public Polygon(Color color, Point2D... points) { + super(List.of(points)); this.color = color; } @Override public int pointsCount() { - return 0; + return super.pointsCount(); } @Override public Point2D point(int index) { - return point(index); + return super.point(index); } @Override public void draw(GraphicsContext context) { context.setFill(color); + super.draw(context); + context.fill(); } } diff --git a/src/main/java/shape/Rectangle.java b/src/main/java/shape/Rectangle.java index ff2fcc4834612c25b5911b202c1972fd3f8060c3..e0ee83f4a16e91780f1e755845fd19d6f9fffd3d 100644 --- a/src/main/java/shape/Rectangle.java +++ b/src/main/java/shape/Rectangle.java @@ -4,24 +4,30 @@ import javafx.geometry.Point2D; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; -public class Rectangle implements Shape{ +import java.util.List; + +public class Rectangle extends AbstractShape{ private Color color; Rectangle(Color color, Point2D point0, Point2D point1){ + super(List.of(point0, new Point2D(point1.getX(),point0.getY()), + point1,new Point2D(point0.getX(),point1.getY()))); this.color = color; } @Override public int pointsCount() { - return 2; + return super.pointsCount(); } @Override public Point2D point(int index) { - return point(index); + return super.point(index); } @Override public void draw(GraphicsContext context) { context.setFill(color); + super.draw(context); + context.fill(); } } diff --git a/src/main/java/shape/ShapeContainer.java b/src/main/java/shape/ShapeContainer.java index 91c7d2977ecd7352ceb7ffbe45f9c541bfd8d45f..aae70ed5e542047b60b0f7147f021811017bdbc7 100644 --- a/src/main/java/shape/ShapeContainer.java +++ b/src/main/java/shape/ShapeContainer.java @@ -9,7 +9,9 @@ public class ShapeContainer{ private List<Shape> shapes = new ArrayList<>(); - public void addShape(Shape shape){} + public void addShape(Shape shape){ + shapes.add(shape); + } public void draw(GraphicsContext context){ for(Shape shape : shapes)