diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java new file mode 100644 index 0000000000000000000000000000000000000000..94286243e692e15a84eac006252ee7baefb5b6af --- /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 0000000000000000000000000000000000000000..04f43fe4773e4168f61b8daf1d2aa8aaa5656c06 --- /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 0000000000000000000000000000000000000000..ebae7709700da8409f866dd79d5b96b6ca7c91cb --- /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 ffafdf89335cb2d3ede584ab8a1255d4abb0b057..124534f31be9a9a22b40d9067dbed82826aba3f5 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 } } } -