From 4e6386e6e0c0b765ac5bc91b94baff2fbb1e197f Mon Sep 17 00:00:00 2001
From: s22029480 <nahlane-ghina.SAYEH@etu.univ-amu.fr>
Date: Fri, 4 Oct 2024 11:38:09 +0200
Subject: [PATCH] modification de ShapeContainer

---
 src/main/java/shape/BorderDecorator.java | 23 ++++++++++++++++
 src/main/java/shape/CenterDecorator.java | 34 ++++++++++++++++++++++++
 src/main/java/shape/Decorator.java       | 30 +++++++++++++++++++++
 src/main/java/shape/ShapeContainer.java  | 12 ++++-----
 4 files changed, 93 insertions(+), 6 deletions(-)
 create mode 100644 src/main/java/shape/BorderDecorator.java
 create mode 100644 src/main/java/shape/CenterDecorator.java
 create mode 100644 src/main/java/shape/Decorator.java

diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java
new file mode 100644
index 0000000..9428624
--- /dev/null
+++ b/src/main/java/shape/BorderDecorator.java
@@ -0,0 +1,23 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
+
+public class BorderDecorator extends Decorator {
+    private double radius;
+
+    public BorderDecorator(Shape decoratedShape, double radius) {
+        super(decoratedShape);
+        this.radius = radius;
+    }
+
+    @Override
+    protected void drawDecoration(GraphicsContext context) {
+        context.setStroke(Color.RED);  // Couleur de la bordure
+        for (int i = 0; i < decoratedShape.pointsCount(); i++) {
+            Point2D point = decoratedShape.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
new file mode 100644
index 0000000..04f43fe
--- /dev/null
+++ b/src/main/java/shape/CenterDecorator.java
@@ -0,0 +1,34 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
+
+public class CenterDecorator extends Decorator {
+    private double radius;
+
+    public CenterDecorator(Shape decoratedShape, double radius) {
+        super(decoratedShape);
+        this.radius = radius;
+    }
+
+    @Override
+    protected void drawDecoration(GraphicsContext context) {
+        context.setStroke(Color.BLUE);  // Couleur du cercle du centre
+        // Calculer le centre de la forme
+        Point2D center = calculateCenter();
+        context.strokeOval(center.getX() - radius, center.getY() - radius, radius * 2, radius * 2);
+    }
+
+    // Méthode pour calculer le centre d'une forme
+    private Point2D calculateCenter() {
+        double sumX = 0, sumY = 0;
+        for (int i = 0; i < decoratedShape.pointsCount(); i++) {
+            Point2D point = decoratedShape.point(i);
+            sumX += point.getX();
+            sumY += point.getY();
+        }
+        return new Point2D(sumX / decoratedShape.pointsCount(), sumY / decoratedShape.pointsCount());
+    }
+}
+
diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java
new file mode 100644
index 0000000..ebae770
--- /dev/null
+++ b/src/main/java/shape/Decorator.java
@@ -0,0 +1,30 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+
+public abstract class Decorator implements Shape {
+    protected Shape decoratedShape;
+
+    public Decorator(Shape decoratedShape) {
+        this.decoratedShape = decoratedShape;
+    }
+
+    @Override
+    public int pointsCount() {
+        return decoratedShape.pointsCount();
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return decoratedShape.point(index);
+    }
+
+    @Override
+    public void draw(GraphicsContext context) {
+        decoratedShape.draw(context);
+        drawDecoration(context);  // Ajoute la décoration
+    }
+
+    protected abstract void drawDecoration(GraphicsContext context);  // Méthode abstraite pour la décoration
+}
diff --git a/src/main/java/shape/ShapeContainer.java b/src/main/java/shape/ShapeContainer.java
index ffafdf8..124534f 100644
--- a/src/main/java/shape/ShapeContainer.java
+++ b/src/main/java/shape/ShapeContainer.java
@@ -5,18 +5,18 @@ import java.util.ArrayList;
 import java.util.List;
 
 public class ShapeContainer {
-    private List<Shape> shapes = new ArrayList<>();  // Liste des formes
+    // Liste pour stocker les formes
+    private List<Shape> shapes = new ArrayList<>();
 
-    // Méthode pour ajouter une forme au conteneur
+    // Méthode pour ajouter une forme dans le conteneur
     public void add(Shape shape) {
-        shapes.add(shape);
+        shapes.add(shape);  // Ajoute la forme à la liste
     }
 
-    // Méthode pour dessiner toutes les formes sur le canvas
+    // Méthode pour dessiner toutes les formes
     public void draw(GraphicsContext context) {
         for (Shape shape : shapes) {
-            shape.draw(context);
+            shape.draw(context);  // Appelle la méthode draw de chaque forme
         }
     }
 }
-
-- 
GitLab