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