From 891d8e82dec9aa3e84b3d6f7a12dd736572e1bee Mon Sep 17 00:00:00 2001 From: m19023837 <chadi.mansour@etu.univ-amu.fr> Date: Fri, 27 Sep 2024 11:21:30 +0200 Subject: [PATCH] correcting the code --- src/main/java/shape/AbstractShape.java | 30 +++++++++--------------- src/main/java/shape/App.java | 16 +++++++++---- src/main/java/shape/BorderDecorator.java | 15 ++++++++---- src/main/java/shape/CenterDecorator.java | 23 +++++++++--------- src/main/java/shape/Decorator.java | 6 ++--- src/main/java/shape/Polygon.java | 24 ++++++++----------- src/main/java/shape/Rectangle.java | 30 +++++++++++------------- 7 files changed, 71 insertions(+), 73 deletions(-) diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java index 4947ec0..db97dad 100644 --- a/src/main/java/shape/AbstractShape.java +++ b/src/main/java/shape/AbstractShape.java @@ -3,17 +3,16 @@ package shape; import javafx.geometry.Point2D; import javafx.scene.canvas.GraphicsContext; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public abstract class AbstractShape implements Shape { - private List<Point2D> points; - public AbstractShape(List<Point2D> points) { - this.points = points; - } + protected List<Point2D> points = new ArrayList<>(); + public void addPoints(Point2D... points){ - for (Point2D point: points) - this.points.add(point); + this.points.addAll(Arrays.asList(points)); } @Override public int pointsCount() { @@ -22,20 +21,13 @@ public abstract class AbstractShape implements Shape { @Override public Point2D point(int index) { - return index < points.size() ? points.get(index) : null; + if( index >= 0 && index < points.size()){ + return points.get(index); + }else { + throw new IndexOutOfBoundsException("Index out of bounds"); + } } @Override - public void draw(GraphicsContext context) { - if (pointsCount()>0){ - context.beginPath(); - context.moveTo(point(0).getX(), point(0).getY()); - for (int i = 1; i<pointsCount(); i++){ - context.lineTo(point(i).getX(),point(i).getY()); - } - context.closePath(); - context.stroke(); - } - - } + public abstract void draw(GraphicsContext context) ; } diff --git a/src/main/java/shape/App.java b/src/main/java/shape/App.java index 1a519e1..c9a1063 100644 --- a/src/main/java/shape/App.java +++ b/src/main/java/shape/App.java @@ -21,12 +21,20 @@ public class App extends Application { @Override public void start(Stage primaryStage) { Group root = new Group(); - Canvas canvas = new Canvas(130, 110); + Canvas canvas = new Canvas(300, 300); GraphicsContext graphicsContext = canvas.getGraphicsContext2D(); ShapeContainer shapeContainer = new ShapeContainer(); - graphicsContext.setFill(Color.AQUAMARINE); - graphicsContext.fillOval(10,10,10,10); - shapeContainer.addShape(new Rectangle(Color.BLUE,new Point2D(10,10), new Point2D(40,40))); + + Shape rectangle = new Rectangle(Color.BLUE, new Point2D(50, 50), new Point2D(150, 100)); + rectangle = new BorderDecorator(rectangle, 10); + rectangle = new CenterDecorator(rectangle, 5); + shapeContainer.addShape(rectangle); + + Shape polygone = new Polygon(Color.YELLOW, new Point2D(210,100),new Point2D(250,100),new Point2D(150,160), new Point2D(90,100)); + polygone = new BorderDecorator(polygone, 15); + polygone = new CenterDecorator(polygone, 5); + shapeContainer.addShape(polygone); + shapeContainer.draw(graphicsContext); root.getChildren().add(canvas); primaryStage.setScene(new Scene(root)); diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java index ff3c0d3..bb08656 100644 --- a/src/main/java/shape/BorderDecorator.java +++ b/src/main/java/shape/BorderDecorator.java @@ -6,7 +6,7 @@ import javafx.scene.paint.Color; public class BorderDecorator extends Decorator { - private double radius; + private final double radius; public BorderDecorator(Shape decoratedShape ,double radius) { super(decoratedShape); @@ -15,9 +15,16 @@ public class BorderDecorator extends Decorator { protected void drawDecoration(GraphicsContext context) { context.setStroke(Color.BLACK); context.setLineWidth(2); - for (int i=0; i<pointsCount(); i++){ - Point2D point = point(i); - context.strokeOval(point.getX() - radius, point.getY()- radius,radius*2,radius*2); + + if (decoratedshape.pointsCount() >= 2){ + Point2D point0 = decoratedshape.point(0); + Point2D point1 = decoratedshape.point(1); + + double x = Math.min(point0.getX(), point1.getX()); + double y = Math.min(point0.getY(), point1.getY()); + double width = Math.abs(point1.getX() - point0.getX()); + double height = Math.abs(point1.getY() - point0.getY()); + context.strokeRoundRect(x,y, width,height,radius, radius); } } } diff --git a/src/main/java/shape/CenterDecorator.java b/src/main/java/shape/CenterDecorator.java index eb792b5..8a7c68a 100644 --- a/src/main/java/shape/CenterDecorator.java +++ b/src/main/java/shape/CenterDecorator.java @@ -5,23 +5,22 @@ import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; public class CenterDecorator extends Decorator{ - private double radius; + private final double radius; public CenterDecorator(Shape decoratedShape, double radius) { super(decoratedShape); this.radius = radius; } protected void drawDecoration(GraphicsContext context) { - double centerX = 0; - double centerY = 0; - for (int i =0; i<pointsCount(); i++){ - Point2D point = point(i); - centerX += point.getX(); - centerY += point.getY(); + + if (decoratedshape.pointsCount() >= 2) { + Point2D point0 = decoratedshape.point(0); + Point2D point1 = decoratedshape.point(1); + + double centerX = point0.getX() + point1.getX() / 2; + double centerY = point0.getY() + point1.getY() / 2; + + context.setFill(Color.RED); + context.strokeOval(centerX - radius, centerY - radius, radius * 2, radius * 2); } - centerX /= pointsCount(); - centerY /= pointsCount(); - context.setStroke(Color.RED); - context.setLineWidth(2); - context.strokeOval(centerX-radius, centerY-radius, radius*2,radius*2); } } diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java index 69ee423..08bed2e 100644 --- a/src/main/java/shape/Decorator.java +++ b/src/main/java/shape/Decorator.java @@ -4,7 +4,7 @@ import javafx.geometry.Point2D; import javafx.scene.canvas.GraphicsContext; public abstract class Decorator implements Shape { - protected Shape decoratedshape; + protected final Shape decoratedshape; public Decorator(Shape decoratedShape) { this.decoratedshape = decoratedShape; } @@ -23,7 +23,5 @@ public abstract class Decorator implements Shape { decoratedshape.draw(context); drawDecoration(context); } - protected void drawDecoration(GraphicsContext context) { - - } + protected abstract void drawDecoration(GraphicsContext context) ; } diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java index a53b2f4..7f417cc 100644 --- a/src/main/java/shape/Polygon.java +++ b/src/main/java/shape/Polygon.java @@ -8,28 +8,24 @@ import java.util.List; public class Polygon extends AbstractShape { - private Color color; + private final Color color; public Polygon(Color color, Point2D... points) { - super(List.of(points)); this.color = color; + addPoints(points); } - @Override - public int pointsCount() { - return super.pointsCount(); - } - - @Override - public Point2D point(int index) { - return super.point(index); - } @Override public void draw(GraphicsContext context) { - context.setFill(color); - super.draw(context); - context.fill(); + context.setStroke(color); + context.beginPath(); + context.moveTo(points.get(0).getX(), points.get(0).getY()); + for (int i = 1; i < pointsCount() ; i++) { + context.lineTo(points.get(i).getX(), points.get(i).getY()); + } + context.closePath(); + context.stroke(); } } diff --git a/src/main/java/shape/Rectangle.java b/src/main/java/shape/Rectangle.java index e0ee83f..c3b2724 100644 --- a/src/main/java/shape/Rectangle.java +++ b/src/main/java/shape/Rectangle.java @@ -7,27 +7,25 @@ import javafx.scene.paint.Color; import java.util.List; public class Rectangle extends AbstractShape{ - private Color color; - Rectangle(Color color, Point2D point0, Point2D point1){ - super(List.of(point0, new Point2D(point1.getX(),point0.getY()), - point1,new Point2D(point0.getX(),point1.getY()))); + private final Color color; + + public Rectangle(Color color, Point2D point0, Point2D point1){ this.color = color; + addPoints(point0, point1); } @Override - public int pointsCount() { - return super.pointsCount(); - } + public void draw(GraphicsContext context) { + context.setStroke(color); - @Override - public Point2D point(int index) { - return super.point(index); - } + Point2D point0 = points.get(0); + Point2D point1 = points.get(1); - @Override - public void draw(GraphicsContext context) { - context.setFill(color); - super.draw(context); - context.fill(); + double x = Math.min(point0.getX(), point1.getX()); + double y = Math.min(point0.getY(), point1.getY()); + double width = Math.abs(point1.getX() - point0.getX()); + double height = Math.abs(point1.getY() - point0.getY()); + + context.strokeRect(x,y,width,height); } } -- GitLab