diff --git a/.idea/misc.xml b/.idea/misc.xml index 6624aa5239bd87293312b297feabe77375fc86df..480dc8a7b94017006a3c6b6c36395e0fff6eaa41 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,9 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="FrameworkDetectionExcludesConfiguration"> <file type="web" url="file://$PROJECT_DIR$" /> </component> - <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="corretto-16" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/out" /> </component> </project> \ No newline at end of file diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java new file mode 100644 index 0000000000000000000000000000000000000000..81a833e8218611d89e4170771072c9fbd7d8efc1 --- /dev/null +++ b/src/main/java/shape/AbstractShape.java @@ -0,0 +1,22 @@ +package shape; + +import javafx.geometry.Point2D; + +import java.util.ArrayList; +import java.util.List; + + +public abstract class AbstractShape implements Shape { + private ArrayList<Point2D> points ; + public AbstractShape(){ + points = new ArrayList<>(); + } + + public void addPoints(Point2D... points){ + for (Point2D point : points) { + points.add() + points[points.length] = point; + } + + } +} diff --git a/src/main/java/shape/App.java b/src/main/java/shape/App.java index 1a519e1401fe032f06aeee35967a27e48ca362fe..8952fff72bc3a64b7cdaba4edcd5955a5d0e5df2 100644 --- a/src/main/java/shape/App.java +++ b/src/main/java/shape/App.java @@ -24,7 +24,7 @@ public class App extends Application { Canvas canvas = new Canvas(130, 110); GraphicsContext graphicsContext = canvas.getGraphicsContext2D(); ShapeContainer shapeContainer = new ShapeContainer(); - graphicsContext.setFill(Color.AQUAMARINE); + graphicsContext.setFill(Color.PAPAYAWHIP); graphicsContext.fillOval(10,10,10,10); shapeContainer.addShape(new Rectangle(Color.BLUE,new Point2D(10,10), new Point2D(40,40))); shapeContainer.draw(graphicsContext); diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java new file mode 100644 index 0000000000000000000000000000000000000000..a8e924f30f81b619cd15b8f58829600d7772903f --- /dev/null +++ b/src/main/java/shape/BorderDecorator.java @@ -0,0 +1,35 @@ +package shape; + +import javafx.geometry.Point2D; +import javafx.scene.canvas.GraphicsContext; + +public class BorderDecorator extends Decorator { + private final double radius; + + protected BorderDecorator(Shape decoratedShape, double radius) { + super(decoratedShape); + this.radius = radius; + } + + @Override + protected void drawDecoration(GraphicsContext graphicsContext) { + for (int i = 0; i < decoratedShape.pointsCount(); i++) { + double x = decoratedShape.point(i).getX(); + double y = decoratedShape.point(i).getY(); + graphicsContext.fillOval(x-radius,y-radius,radius*2,radius*2); + + } + } + + @Override + public int pointsCount() { + return decoratedShape.pointsCount(); + } + + @Override + public Point2D point(int index) { + return decoratedShape.point(index); + } + + +} diff --git a/src/main/java/shape/Circle.java b/src/main/java/shape/Circle.java index 81d9175dc3977c5c95dec3693569c12ad12d8315..d0ba74cedc8ff01ba9b4c1e14603e27093259b6f 100644 --- a/src/main/java/shape/Circle.java +++ b/src/main/java/shape/Circle.java @@ -5,21 +5,28 @@ import javafx.scene.canvas.GraphicsContext; public class Circle implements Shape { - public Circle(double x, double y, double sqrt) { + private final double centerX; + private final double centerY; + private final double radius; + + public Circle(double centerX, double centerY, double radius) { + this.centerX = centerX; + this.centerY = centerY; + this.radius = radius; } @Override public int pointsCount() { - return 0; + return 1; } @Override public Point2D point(int index) { - return null; + return new Point2D(centerX, centerY); } @Override public void draw(GraphicsContext context) { - + context.fillOval(centerX-radius,centerY-radius,radius*2,radius*2); } } diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java new file mode 100644 index 0000000000000000000000000000000000000000..b22e0038da1dfcc855efad459a1bdfdbcccd1bca --- /dev/null +++ b/src/main/java/shape/Decorator.java @@ -0,0 +1,17 @@ +package shape; + +import javafx.scene.canvas.GraphicsContext; + +public abstract class Decorator implements Shape{ + protected Shape decoratedShape; + + protected Decorator(Shape decoratedShape){ + this.decoratedShape = decoratedShape; + } + + @Override + public void draw(GraphicsContext context) { + drawDecoration(context); + } + abstract void drawDecoration(GraphicsContext graphicsContext); +} diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java new file mode 100644 index 0000000000000000000000000000000000000000..6239892eab683a63e4d9f88863d436aa42400a8d --- /dev/null +++ b/src/main/java/shape/Polygon.java @@ -0,0 +1,40 @@ +package shape; + +import javafx.geometry.Point2D; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; + +public class Polygon implements Shape{ + private final Point2D[] points; + private final Color color; + + Polygon(Color color, Point2D... points){ + this.color = color; + this.points = points; + } + + @Override + public int pointsCount() { + return points.length; + } + + @Override + public Point2D point(int index) { + return points[index]; + } + + @Override + public void draw(GraphicsContext context) { + + context.setFill(color); + double[] xPoints = new double[points.length]; + double[] yPoints = new double[points.length]; + + for (int i = 0; i < points.length; i++) { + xPoints[i] = points[i].getX(); + yPoints[i] = points[i].getY(); + } + + context.fillPolygon(xPoints, yPoints, points.length); + } +} diff --git a/src/main/java/shape/Rectangle.java b/src/main/java/shape/Rectangle.java index b0e90627b6345f22ac31ab8bf5fb40f81e4d4f66..d476131bf40ea4688fed9c625460c14c6f97d409 100644 --- a/src/main/java/shape/Rectangle.java +++ b/src/main/java/shape/Rectangle.java @@ -6,22 +6,32 @@ import javafx.scene.paint.Color; public class Rectangle implements Shape{ Color color; + private final Point2D[] points = new Point2D[2]; + Rectangle(Color color, Point2D point0, Point2D point1){ this.color = color; + this.points[0] = point0; + this.points[1] = point1; } @Override public int pointsCount() { - return 0; + return 2; } @Override public Point2D point(int index) { - return null; + return points[index]; } @Override public void draw(GraphicsContext context) { + double x = points[0].getX(); + double y = points[0].getY(); + double w = points[1].getX() - x; + double h = points[1].getY() - y; + context.setFill(color); + context.fillRect(x,y,w,h); } } diff --git a/src/main/java/shape/ShapeContainer.java b/src/main/java/shape/ShapeContainer.java index 91c7d2977ecd7352ceb7ffbe45f9c541bfd8d45f..5633594fda2bca658c4dead0cadc23d3f137c706 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)