From 237f718e02d211edfd7e430d7230cf6c07d97101 Mon Sep 17 00:00:00 2001
From: Anthony Viola <anthony.viola34@gmail.com>
Date: Thu, 19 Oct 2023 19:53:09 +0200
Subject: [PATCH] =?UTF-8?q?TP3=20d=C3=A9corateur=20formes?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .idea/misc.xml                           |  2 +-
 build.gradle                             |  1 +
 src/main/java/shape/AbstractShape.java   | 22 +++++++++++++++++++
 src/main/java/shape/App.java             |  3 +++
 src/main/java/shape/BorderDecorator.java | 22 +++++++++++++++++++
 src/main/java/shape/CenterDecorator.java | 18 +++++++++++++++
 src/main/java/shape/Circle.java          | 25 ---------------------
 src/main/java/shape/Decorator.java       |  7 +++---
 src/main/java/shape/Polygon.java         | 28 ++++++++++++++++++++++++
 src/main/java/shape/Rectangle.java       | 20 ++++++++---------
 src/main/java/shape/ShapeContainer.java  |  4 +++-
 src/main/java/state/Drawer.java          |  1 -
 12 files changed, 111 insertions(+), 42 deletions(-)
 create mode 100644 src/main/java/shape/BorderDecorator.java
 create mode 100644 src/main/java/shape/CenterDecorator.java
 delete mode 100644 src/main/java/shape/Circle.java
 create mode 100644 src/main/java/shape/Polygon.java

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/build.gradle b/build.gradle
index 20534b2..2b3d703 100644
--- a/build.gradle
+++ b/build.gradle
@@ -16,6 +16,7 @@ repositories {
     mavenCentral()
 }
 dependencies {
+    implementation 'org.junit.jupiter:junit-jupiter:5.8.1'
     testImplementation group: 'junit', name: 'junit', version: '4.12'
     testImplementation 'org.hamcrest:hamcrest-library:1.3'
 }
diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java
index 18e4010..2877114 100644
--- a/src/main/java/shape/AbstractShape.java
+++ b/src/main/java/shape/AbstractShape.java
@@ -1,6 +1,28 @@
 package shape;
 
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+
+import java.util.ArrayList;
+import java.util.List;
+
 abstract public class AbstractShape implements Shape {
 
+    private List<Point2D> points = new ArrayList<>();
+
+    public void addPoints(List<Point2D> lpoints){
+        for (Point2D point : lpoints) {
+            points.add(point);
+        }
+    }
+    public int pointsCount() {
+        return points.size();
+    }
+
+    public Point2D point(int index) {
+        return points.get(index);
+    }
+
+    public abstract void draw(GraphicsContext graphicsContext);
 
 }
diff --git a/src/main/java/shape/App.java b/src/main/java/shape/App.java
index 1a519e1..c1016a9 100644
--- a/src/main/java/shape/App.java
+++ b/src/main/java/shape/App.java
@@ -1,6 +1,7 @@
 package shape;
 
 import javafx.application.Application;
+import javafx.beans.binding.BooleanExpression;
 import javafx.geometry.Point2D;
 import javafx.scene.Group;
 import javafx.scene.Scene;
@@ -26,6 +27,8 @@ public class App extends Application {
         ShapeContainer shapeContainer = new ShapeContainer();
         graphicsContext.setFill(Color.AQUAMARINE);
         graphicsContext.fillOval(10,10,10,10);
+        Rectangle rect  = new Rectangle(Color.BLUE,new Point2D(10,10), new Point2D(40,40));
+        System.out.println(rect.pointsCount());
         shapeContainer.addShape(new Rectangle(Color.BLUE,new Point2D(10,10), new Point2D(40,40)));
         shapeContainer.draw(graphicsContext);
         root.getChildren().add(canvas);
diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java
new file mode 100644
index 0000000..a66dfe6
--- /dev/null
+++ b/src/main/java/shape/BorderDecorator.java
@@ -0,0 +1,22 @@
+package shape;
+
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
+
+public class BorderDecorator extends Decorator {
+
+    private double radius;
+
+    BorderDecorator(Shape decoratedShape, double radius){
+        super(decoratedShape);
+        this.radius = radius;
+    }
+
+    @Override
+    void drawDecoration(GraphicsContext graphicsContext) {
+        graphicsContext.setFill(Color.BLUE);
+        for(int i = 0; i< decoratedShape.pointsCount(); i++){
+            graphicsContext.fillOval(decoratedShape.point(i).getX(),decoratedShape.point(i).getY(),5,5);
+        }
+    }
+}
diff --git a/src/main/java/shape/CenterDecorator.java b/src/main/java/shape/CenterDecorator.java
new file mode 100644
index 0000000..a57b9a0
--- /dev/null
+++ b/src/main/java/shape/CenterDecorator.java
@@ -0,0 +1,18 @@
+package shape;
+
+import javafx.scene.canvas.GraphicsContext;
+
+public class CenterDecorator extends Decorator{
+
+    private double radius;
+
+    CenterDecorator(Shape decoratedShape, double radius){
+        super(decoratedShape);
+        this.radius = radius;
+    }
+
+    @Override
+    void drawDecoration(GraphicsContext graphicsContext) {
+
+    }
+}
diff --git a/src/main/java/shape/Circle.java b/src/main/java/shape/Circle.java
deleted file mode 100644
index 81d9175..0000000
--- a/src/main/java/shape/Circle.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package shape;
-
-import javafx.geometry.Point2D;
-import javafx.scene.canvas.GraphicsContext;
-
-public class Circle implements Shape {
-
-    public Circle(double x, double y, double sqrt) {
-    }
-
-    @Override
-    public int pointsCount() {
-        return 0;
-    }
-
-    @Override
-    public Point2D point(int index) {
-        return null;
-    }
-
-    @Override
-    public void draw(GraphicsContext context) {
-
-    }
-}
diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java
index d08a3c3..43032b0 100644
--- a/src/main/java/shape/Decorator.java
+++ b/src/main/java/shape/Decorator.java
@@ -4,9 +4,11 @@ import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 
 abstract public class Decorator implements Shape{
-    private Shape decoratedShape;
-
+    protected Shape decoratedShape;
 
+    Decorator(Shape decoratedShape){
+        this.decoratedShape = decoratedShape;
+    }
     public int pointsCount() {
         return decoratedShape.pointsCount();
     }
@@ -15,7 +17,6 @@ abstract public class Decorator implements Shape{
         return decoratedShape.point(index);
     }
 
-    @Override
     public void draw(GraphicsContext context) {
         decoratedShape.draw(context);
     }
diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java
new file mode 100644
index 0000000..f568e6c
--- /dev/null
+++ b/src/main/java/shape/Polygon.java
@@ -0,0 +1,28 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
+
+import java.util.List;
+
+public class Polygon extends AbstractShape{
+
+    Color color;
+    Polygon(Color color, List<Point2D> points){
+        this.color = color;
+        addPoints(points);
+    }
+
+    @Override
+    public void draw(GraphicsContext context) {
+        context.setFill(color);
+        double[] xPoints = new double[pointsCount()];
+        double[] yPoints = new double[pointsCount()];
+        for (int i = 0; i < pointsCount(); i++){
+            xPoints[i] = point(i).getX();
+            yPoints[i] = point(i).getY();
+        }
+        context.fillPolygon(xPoints, yPoints, pointsCount());
+    }
+}
diff --git a/src/main/java/shape/Rectangle.java b/src/main/java/shape/Rectangle.java
index 5894c35..232057e 100644
--- a/src/main/java/shape/Rectangle.java
+++ b/src/main/java/shape/Rectangle.java
@@ -4,24 +4,22 @@ import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.paint.Color;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class Rectangle extends AbstractShape{
     Color color;
     Rectangle(Color color, Point2D point0, Point2D point1){
         this.color = color;
-    }
-
-    @Override
-    public int pointsCount() {
-        return 0;
-    }
-
-    @Override
-    public Point2D point(int index) {
-        return null;
+        List<Point2D> points = new ArrayList<>();
+        points.add(point0);
+        points.add(point1);
+        addPoints(points);
     }
 
     @Override
     public void draw(GraphicsContext context) {
-
+        context.setFill(color);
+        context.fillRect(point(0).getX(), point(0).getY(), point(1).getX() - point(0).getX(), point(1).getY() - point(0).getY());
     }
 }
diff --git a/src/main/java/shape/ShapeContainer.java b/src/main/java/shape/ShapeContainer.java
index 91c7d29..aae70ed 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)
diff --git a/src/main/java/state/Drawer.java b/src/main/java/state/Drawer.java
index 67b9e1c..c6e5f27 100644
--- a/src/main/java/state/Drawer.java
+++ b/src/main/java/state/Drawer.java
@@ -1,7 +1,6 @@
 package state;
 
 import javafx.scene.canvas.Canvas;
-import shape.Circle;
 import shape.Shape;
 
 import java.util.ArrayList;
-- 
GitLab