From 05c59e56c1fbc93471c00366d782b3b63677740b Mon Sep 17 00:00:00 2001 From: BAGHDADI Wassim <wassim.baghdadi@etu.univ-amu.fr> Date: Thu, 28 Sep 2023 12:16:17 +0200 Subject: [PATCH] TD --- .idea/misc.xml | 3 +- src/main/java/shape/AbstractShape.java | 22 +++++++++++++ src/main/java/shape/App.java | 2 +- src/main/java/shape/BorderDecorator.java | 35 +++++++++++++++++++++ src/main/java/shape/Circle.java | 15 ++++++--- src/main/java/shape/Decorator.java | 17 ++++++++++ src/main/java/shape/Polygon.java | 40 ++++++++++++++++++++++++ src/main/java/shape/Rectangle.java | 14 +++++++-- src/main/java/shape/ShapeContainer.java | 4 ++- 9 files changed, 143 insertions(+), 9 deletions(-) create mode 100644 src/main/java/shape/AbstractShape.java create mode 100644 src/main/java/shape/BorderDecorator.java create mode 100644 src/main/java/shape/Decorator.java create mode 100644 src/main/java/shape/Polygon.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 6624aa5..480dc8a 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 0000000..81a833e --- /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 1a519e1..8952fff 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 0000000..a8e924f --- /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 81d9175..d0ba74c 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 0000000..b22e003 --- /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 0000000..6239892 --- /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 b0e9062..d476131 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 91c7d29..5633594 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) -- GitLab