diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 66229213367b0b0a3d7068fb2c7013558ce98ced..622f299be73bda6bfa6d432bab94166b956ca21c 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,11 +4,8 @@ <component name="GradleSettings"> <option name="linkedExternalProjectsSettings"> <GradleProjectSettings> - <option name="delegatedBuild" value="true" /> - <option name="testRunner" value="GRADLE" /> - <option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="externalProjectPath" value="$PROJECT_DIR$" /> - <option name="gradleJvm" value="11" /> + <option name="gradleJvm" value="openjdk-21" /> <option name="modules"> <set> <option value="$PROJECT_DIR$" /> diff --git a/.idea/misc.xml b/.idea/misc.xml index 480dc8a7b94017006a3c6b6c36395e0fff6eaa41..5d9825616f6a0738b6c655b9418a4d1d99c32d55 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/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java index 81a833e8218611d89e4170771072c9fbd7d8efc1..782e71f494fc04e79afb470596bc3ab96842b063 100644 --- a/src/main/java/shape/AbstractShape.java +++ b/src/main/java/shape/AbstractShape.java @@ -3,6 +3,7 @@ package shape; import javafx.geometry.Point2D; import java.util.ArrayList; +import java.util.Collections; import java.util.List; @@ -13,10 +14,7 @@ public abstract class AbstractShape implements Shape { } public void addPoints(Point2D... points){ - for (Point2D point : points) { - points.add() - points[points.length] = point; - } + Collections.addAll(this.points, points); } } diff --git a/src/main/java/shape/App.java b/src/main/java/shape/App.java index 8952fff72bc3a64b7cdaba4edcd5955a5d0e5df2..39050386de3aee6c2a7669091bee3693dd74f903 100644 --- a/src/main/java/shape/App.java +++ b/src/main/java/shape/App.java @@ -26,8 +26,17 @@ public class App extends Application { ShapeContainer shapeContainer = new ShapeContainer(); graphicsContext.setFill(Color.PAPAYAWHIP); graphicsContext.fillOval(10,10,10,10); - shapeContainer.addShape(new Rectangle(Color.BLUE,new Point2D(10,10), new Point2D(40,40))); + Rectangle rec = new Rectangle(Color.BLUE,new Point2D(10,10), new Point2D(40,40)); + BorderDecorator borderDecorator = new BorderDecorator(rec,5) ; + shapeContainer.addShape(rec); + shapeContainer.addShape(borderDecorator); + Polygon polygon = new Polygon(Color.RED,new Point2D(40,40), new Point2D(60,60), new Point2D(80,40)); + CenterDecorator centerDecorator = new CenterDecorator(polygon, 5); + shapeContainer.addShape(polygon); + shapeContainer.addShape(centerDecorator); + shapeContainer.draw(graphicsContext); + root.getChildren().add(canvas); primaryStage.setScene(new Scene(root)); primaryStage.show(); diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java index a8e924f30f81b619cd15b8f58829600d7772903f..a4f898a3222260e72f60a55445a0a33d60b6bb62 100644 --- a/src/main/java/shape/BorderDecorator.java +++ b/src/main/java/shape/BorderDecorator.java @@ -21,15 +21,7 @@ public class BorderDecorator extends Decorator { } } - @Override - public int pointsCount() { - return decoratedShape.pointsCount(); - } - @Override - public Point2D point(int index) { - return decoratedShape.point(index); - } } diff --git a/src/main/java/shape/CenterDecorator.java b/src/main/java/shape/CenterDecorator.java new file mode 100644 index 0000000000000000000000000000000000000000..e5729f5873bff5cc8f4097419c4bd70fc3930aa4 --- /dev/null +++ b/src/main/java/shape/CenterDecorator.java @@ -0,0 +1,28 @@ +package shape; + +import javafx.geometry.Point2D; +import javafx.scene.canvas.GraphicsContext; + +public class CenterDecorator extends Decorator{ + + private final double radius; + + protected CenterDecorator(Shape decoratedShape, double radius) { + super(decoratedShape); + this.radius = radius; + } + + @Override + protected void drawDecoration(GraphicsContext graphicsContext) { + double xAll = 0, yAll = 0; + for (int i = 0; i < decoratedShape.pointsCount(); i++) { + xAll += decoratedShape.point(i).getX(); + yAll += decoratedShape.point(i).getY(); + } + + graphicsContext.fillOval((xAll/pointsCount())-radius,(yAll/pointsCount())-radius,radius*2,radius*2); + + } + + +} diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java index b22e0038da1dfcc855efad459a1bdfdbcccd1bca..a6e0aad8dc8f05b5019b1a5ddda4f24137b2e772 100644 --- a/src/main/java/shape/Decorator.java +++ b/src/main/java/shape/Decorator.java @@ -1,5 +1,6 @@ package shape; +import javafx.geometry.Point2D; import javafx.scene.canvas.GraphicsContext; public abstract class Decorator implements Shape{ @@ -14,4 +15,13 @@ public abstract class Decorator implements Shape{ drawDecoration(context); } abstract void drawDecoration(GraphicsContext graphicsContext); + + public int pointsCount() { + return decoratedShape.pointsCount(); + } + + @Override + public Point2D point(int index) { + return decoratedShape.point(index); + } } diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java index 6239892eab683a63e4d9f88863d436aa42400a8d..2d0f5e2d2cc73a9de6385b92d8c052b28d597309 100644 --- a/src/main/java/shape/Polygon.java +++ b/src/main/java/shape/Polygon.java @@ -36,5 +36,7 @@ public class Polygon implements Shape{ } context.fillPolygon(xPoints, yPoints, points.length); + context.setFill(Color.BLACK); + } } diff --git a/src/main/java/shape/Rectangle.java b/src/main/java/shape/Rectangle.java index d476131bf40ea4688fed9c625460c14c6f97d409..b1f2048121328bf88c95f55b703aab5affc6d41a 100644 --- a/src/main/java/shape/Rectangle.java +++ b/src/main/java/shape/Rectangle.java @@ -32,6 +32,6 @@ public class Rectangle implements Shape{ double h = points[1].getY() - y; context.setFill(color); context.fillRect(x,y,w,h); - + context.setFill(Color.BLACK); } }