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