Skip to content
Snippets Groups Projects
Commit f6148c1d authored by NIRINA Andriantsoa's avatar NIRINA Andriantsoa
Browse files

tp3 exercice 1 et 2

parent 9cb5e898
No related branches found
No related tags found
No related merge requests found
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration">
......
package shape;
import java.awt.geom.Point2D;
import javafx.geometry.Point2D;
import java.util.ArrayList;
import java.util.List;
public abstract class AbstractShape implements Shape {
List<Point2D> point;
public AbstractShape(List<Point2D>point){
this.point=point;
protected List<Point2D> points;
public AbstractShape() {
this.points = new ArrayList<>();
}
public AbstractShape(List<Point2D> points) {
this.points = points;
}
public void addPoints(Point2D points){
point.add(points);
@Override
public int pointsCount() {
return points.size();
}
@Override
public Point2D point(int index) {
return points.get(index);
}
public void addPoint(Point2D point) {
points.add(point);
}
}
......@@ -7,11 +7,8 @@ import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.stage.Stage;
public class App extends Application {
public static void main(String[] args) {
......@@ -20,16 +17,35 @@ 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(400, 400);
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));
Shape borderDecoratedRectangle = new BorderDecorator(rectangle, 5);
Shape centerDecoratedRectangle = new CenterDecorator(borderDecoratedRectangle, 10);
shapeContainer.addShape(centerDecoratedRectangle);
Shape polygon = new Polygon(Color.GREEN,
new Point2D(200, 200),
new Point2D(300, 250),
new Point2D(250, 350));
Shape borderDecoratedPolygon = new BorderDecorator(polygon, 5);
shapeContainer.addShape(borderDecoratedPolygon);
shapeContainer.draw(graphicsContext);
root.getChildren().add(canvas);
primaryStage.setScene(new Scene(root));
primaryStage.setTitle("Shape Decorator Example with Polygon");
primaryStage.show();
}
}
package shape;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import java.awt.geom.Point2D;
public class BorderDecorator extends Decorator {
private double radius;
public BorderDecorator(Shape decoratedShape, double radius) {
super(decoratedShape);
this.radius = radius;
......@@ -15,21 +13,9 @@ public class BorderDecorator extends Decorator {
@Override
public void drawDecoration(GraphicsContext graphicsContext) {
}
@Override
public int pointsCount() {
return 0;
for (int i = 0; i < decoratedShape.pointsCount(); i++) {
Point2D point = decoratedShape.point(i);
graphicsContext.strokeOval(point.getX() - radius, point.getY() - radius, 2 * radius, 2 * radius);
}
@Override
public Point2D point(int index) {
return null;
}
@Override
public void draw(GraphicsContext context) {
}
}
package shape;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import java.awt.geom.Point2D;
public class CenterDecorator extends Decorator {
private double radius;
public CenterDecorator(Shape decoratedShape, double radius) {
super(decoratedShape);
this.radius = radius;
}
@Override
public void drawDecoration(GraphicsContext graphicsContext) {
}
@Override
public int pointsCount() {
return 0;
}
@Override
public Point2D point(int index) {
return null;
protected void drawDecoration(GraphicsContext graphicsContext) {
if (decoratedShape.pointsCount() >= 2) {
Point2D p1 = decoratedShape.point(0);
Point2D p2 = decoratedShape.point(1);
// Calculer le centre comme la moyenne des coordonnées des deux premiers points
double centerX = (p1.getX() + p2.getX()) / 2;
double centerY = (p1.getY() + p2.getY()) / 2;
// Dessiner un cercle autour du centre calculé
graphicsContext.strokeOval(centerX - radius, centerY - radius, 2 * radius, 2 * radius);
} else {
System.err.println("The decorated shape must have at least two points to calculate a center.");
}
@Override
public void draw(GraphicsContext context) {
}
}
......@@ -2,24 +2,27 @@ package shape;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
public class Circle implements Shape {
public class Circle extends AbstractShape {
private Color color;
private double radius;
public Circle(double x, double y, double sqrt) {
}
@Override
public int pointsCount() {
return 0;
}
@Override
public Point2D point(int index) {
return null;
public Circle(Color color, Point2D center, double radius) {
super();
this.color = color;
this.radius = radius;
addPoint(center);
}
@Override
public void draw(GraphicsContext context) {
Point2D center = point(0);
double x = center.getX() - radius;
double y = center.getY() - radius;
double diameter = 2 * radius;
context.setFill(color);
context.fillOval(x, y, diameter, diameter);
}
}
package shape;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import java.awt.geom.Point2D;
public abstract class Decorator implements Shape {
private Shape decoratedShape;
protected Shape decoratedShape;
public Decorator(Shape decoratedShape) {
this.decoratedShape = decoratedShape;
}
@Override
public int pointsCount() {
return decoratedShape.pointsCount();
}
@Override
public Point2D point(int index) {
return decoratedShape.point(index);
}
public abstract void drawDecoration(GraphicsContext graphicsContext);
@Override
public void draw(GraphicsContext graphicsContext) {
decoratedShape.draw(graphicsContext);
drawDecoration(graphicsContext);
}
protected abstract void drawDecoration(GraphicsContext graphicsContext);
}
package shape;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import java.awt.geom.Point2D;
import java.util.List;
import java.util.Arrays;
public class Polygon extends AbstractShape {
private Color color;
public Polygon(List<Point2D> point) {
super(point);
}
@Override
public void addPoints(Point2D points) {
super.point.add(points);
}
@Override
public int pointsCount() {
int result=0;
for(Point2D a:point){
result+=1;
}
return result;
}
@Override
public Point2D point(int index) {
return point.get( index);
public Polygon(Color color, Point2D... points) {
super(Arrays.asList(points));
this.color = color;
}
@Override
public void draw(GraphicsContext context) {
if (pointsCount() < 2) return;
double[] xPoints = points.stream().mapToDouble(Point2D::getX).toArray();
double[] yPoints = points.stream().mapToDouble(Point2D::getY).toArray();
context.setFill(color);
context.fillPolygon(xPoints, yPoints, pointsCount());
}
}
......@@ -4,24 +4,27 @@ import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
public class Rectangle implements Shape{
Color color;
Rectangle(Color color, Point2D point0, Point2D point1){
this.color = color;
}
import java.util.Arrays;
@Override
public int pointsCount() {
return 0;
}
public class Rectangle extends AbstractShape {
private Color color;
@Override
public Point2D point(int index) {
return null;
public Rectangle(Color color, Point2D point1, Point2D point2) {
super(Arrays.asList(point1, point2));
this.color = color;
}
@Override
public void draw(GraphicsContext context) {
Point2D p1 = point(0);
Point2D p2 = point(1);
double x = Math.min(p1.getX(), p2.getX());
double y = Math.min(p1.getY(), p2.getY());
double width = Math.abs(p1.getX() - p2.getX());
double height = Math.abs(p1.getY() - p2.getY());
context.setFill(color);
context.fillRect(x, y, width, height);
}
}
package shape;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import java.awt.geom.Point2D;
public interface Shape {
int pointsCount();
Point2D point(int index);
void draw(GraphicsContext context);
void draw(GraphicsContext graphicsContext);
}
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment