From 9dbc3e923333195fe1bcd68c653126c1e416f199 Mon Sep 17 00:00:00 2001
From: GHOMARI Ilyes <ilyes.ghomari@etu.univ-amu.fr>
Date: Thu, 12 Oct 2023 10:45:46 +0200
Subject: [PATCH] Fini TP3

---
 .idea/gradle.xml                         |  5 +----
 .idea/misc.xml                           |  2 +-
 src/main/java/shape/AbstractShape.java   |  6 ++---
 src/main/java/shape/App.java             | 11 +++++++++-
 src/main/java/shape/BorderDecorator.java |  8 -------
 src/main/java/shape/CenterDecorator.java | 28 ++++++++++++++++++++++++
 src/main/java/shape/Decorator.java       | 10 +++++++++
 src/main/java/shape/Polygon.java         |  2 ++
 src/main/java/shape/Rectangle.java       |  2 +-
 9 files changed, 55 insertions(+), 19 deletions(-)
 create mode 100644 src/main/java/shape/CenterDecorator.java

diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 6622921..622f299 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -4,11 +4,8 @@
   <component name="GradleSettings">
     <option name="linkedExternalProjectsSettings">
       <GradleProjectSettings>
-        <option name="delegatedBuild" value="true" />
-        <option name="testRunner" value="GRADLE" />
-        <option name="distributionType" value="DEFAULT_WRAPPED" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="gradleJvm" value="11" />
+        <option name="gradleJvm" value="openjdk-21" />
         <option name="modules">
           <set>
             <option value="$PROJECT_DIR$" />
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 480dc8a..5d98256 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,7 +4,7 @@
   <component name="FrameworkDetectionExcludesConfiguration">
     <file type="web" url="file://$PROJECT_DIR$" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" 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
index 81a833e..782e71f 100644
--- a/src/main/java/shape/AbstractShape.java
+++ b/src/main/java/shape/AbstractShape.java
@@ -3,6 +3,7 @@ package shape;
 import javafx.geometry.Point2D;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 
@@ -13,10 +14,7 @@ public abstract class AbstractShape implements Shape {
     }
 
     public void addPoints(Point2D... points){
-        for (Point2D point : points) {
-            points.add()
-            points[points.length] = point;
-        }
+        Collections.addAll(this.points, points);
 
     }
 }
diff --git a/src/main/java/shape/App.java b/src/main/java/shape/App.java
index 8952fff..3905038 100644
--- a/src/main/java/shape/App.java
+++ b/src/main/java/shape/App.java
@@ -26,8 +26,17 @@ public class App extends Application {
         ShapeContainer shapeContainer = new ShapeContainer();
         graphicsContext.setFill(Color.PAPAYAWHIP);
         graphicsContext.fillOval(10,10,10,10);
-        shapeContainer.addShape(new Rectangle(Color.BLUE,new Point2D(10,10), new Point2D(40,40)));
+        Rectangle rec = new Rectangle(Color.BLUE,new Point2D(10,10), new Point2D(40,40));
+        BorderDecorator borderDecorator = new BorderDecorator(rec,5) ;
+        shapeContainer.addShape(rec);
+        shapeContainer.addShape(borderDecorator);
+        Polygon polygon = new Polygon(Color.RED,new Point2D(40,40), new Point2D(60,60), new Point2D(80,40));
+        CenterDecorator centerDecorator = new CenterDecorator(polygon, 5);
+        shapeContainer.addShape(polygon);
+        shapeContainer.addShape(centerDecorator);
+
         shapeContainer.draw(graphicsContext);
+
         root.getChildren().add(canvas);
         primaryStage.setScene(new Scene(root));
         primaryStage.show();
diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java
index a8e924f..a4f898a 100644
--- a/src/main/java/shape/BorderDecorator.java
+++ b/src/main/java/shape/BorderDecorator.java
@@ -21,15 +21,7 @@ public class BorderDecorator extends Decorator {
         }
     }
 
-    @Override
-    public int pointsCount() {
-        return decoratedShape.pointsCount();
-    }
 
-    @Override
-    public Point2D point(int index) {
-        return decoratedShape.point(index);
-    }
 
 
 }
diff --git a/src/main/java/shape/CenterDecorator.java b/src/main/java/shape/CenterDecorator.java
new file mode 100644
index 0000000..e5729f5
--- /dev/null
+++ b/src/main/java/shape/CenterDecorator.java
@@ -0,0 +1,28 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+
+public class CenterDecorator extends Decorator{
+
+    private final double radius;
+
+    protected CenterDecorator(Shape decoratedShape, double radius) {
+        super(decoratedShape);
+        this.radius = radius;
+    }
+
+    @Override
+    protected void drawDecoration(GraphicsContext graphicsContext) {
+        double xAll = 0, yAll = 0;
+        for (int i = 0; i < decoratedShape.pointsCount(); i++) {
+            xAll += decoratedShape.point(i).getX();
+            yAll += decoratedShape.point(i).getY();
+        }
+
+        graphicsContext.fillOval((xAll/pointsCount())-radius,(yAll/pointsCount())-radius,radius*2,radius*2);
+
+    }
+
+
+}
diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java
index b22e003..a6e0aad 100644
--- a/src/main/java/shape/Decorator.java
+++ b/src/main/java/shape/Decorator.java
@@ -1,5 +1,6 @@
 package shape;
 
+import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 
 public abstract class Decorator implements Shape{
@@ -14,4 +15,13 @@ public abstract class Decorator implements Shape{
         drawDecoration(context);
     }
     abstract void drawDecoration(GraphicsContext graphicsContext);
+
+    public int pointsCount() {
+        return decoratedShape.pointsCount();
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return decoratedShape.point(index);
+    }
 }
diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java
index 6239892..2d0f5e2 100644
--- a/src/main/java/shape/Polygon.java
+++ b/src/main/java/shape/Polygon.java
@@ -36,5 +36,7 @@ public class Polygon implements Shape{
         }
 
         context.fillPolygon(xPoints, yPoints, points.length);
+        context.setFill(Color.BLACK);
+
     }
 }
diff --git a/src/main/java/shape/Rectangle.java b/src/main/java/shape/Rectangle.java
index d476131..b1f2048 100644
--- a/src/main/java/shape/Rectangle.java
+++ b/src/main/java/shape/Rectangle.java
@@ -32,6 +32,6 @@ public class Rectangle implements Shape{
         double h = points[1].getY() - y;
         context.setFill(color);
         context.fillRect(x,y,w,h);
-
+        context.setFill(Color.BLACK);
     }
 }
-- 
GitLab