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/build.gradle b/build.gradle index 20534b2a198109bf2e4f0efc3434f50b39d21bc8..2b3d703fd63a5bd31593d888cde38d3297f8f099 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 18e40103d9edef9220290bbf1b60c6aa230942b3..287711493aaf7508800dbf0ac3aadf49107e6d44 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 1a519e1401fe032f06aeee35967a27e48ca362fe..c1016a9f8b3211b847624fa9d400ad8151d9e03a 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 0000000000000000000000000000000000000000..a66dfe61b96bc7c8d834a7eb84c971e09fe77767 --- /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 0000000000000000000000000000000000000000..a57b9a0bb15d4ed1db56f76b452f672877ade489 --- /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 81d9175dc3977c5c95dec3693569c12ad12d8315..0000000000000000000000000000000000000000 --- 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 d08a3c3fd08a281ccb7b3d0404d3e2b071a762c7..43032b0763febf5b843aed2fbf6e4a18d8ac4860 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 0000000000000000000000000000000000000000..f568e6c715cb9ca4ddf0bc3b8410ba5919f78d24 --- /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 5894c35d444559a59b5c042c47dc012cc56df6ec..232057e0166eb34d3c4d82dae52fd25d3315c93b 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 91c7d2977ecd7352ceb7ffbe45f9c541bfd8d45f..aae70ed5e542047b60b0f7147f021811017bdbc7 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 67b9e1c37ec55c09b9965103ca38cab002b1d815..c6e5f278d50e2910a22e24478b246c9a9679dc87 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;