Graphic Rendering System 1.0
A Java-based graphic rendering system implementing various design patterns
Loading...
Searching...
No Matches
Drawing.java
Go to the documentation of this file.
1package com.example.graphics;
2
3import com.example.graphics.command.AddShapeCommand;
4import com.example.graphics.command.CommandManager;
5import com.example.graphics.command.MoveShapeCommand;
6import com.example.graphics.command.RemoveShapeCommand;
7import com.example.graphics.model.Shape;
8import com.example.graphics.model.Triangle;
9import com.example.graphics.observer.ShapeObserver;
10import com.example.graphics.observer.ShapeSubject;
11import com.example.graphics.render.Renderer;
12import com.example.graphics.visitor.ShapeVisitor;
13
14import java.io.Serializable;
15import java.util.ArrayList;
16import java.util.List;
17
22public class Drawing implements Serializable {
23 private static final long serialVersionUID = 1L;
24
25 private final List<Shape> shapes;
28 private transient Renderer renderer;
29
35 this.shapes = new ArrayList<>();
36 this.commandManager = new CommandManager();
37 this.shapeSubject = new ShapeSubject();
38 this.renderer = renderer;
39 }
40
45 public void addShape(Shape shape) {
47 commandManager.executeCommand(command);
48 shapeSubject.notifyShapeAdded(shape);
49 }
50
55 public void removeShape(Shape shape) {
57 commandManager.executeCommand(command);
58 shapeSubject.notifyShapeRemoved(shape);
59 }
60
67 public void moveShape(Shape shape, int x, int y) {
68 MoveShapeCommand command = new MoveShapeCommand(shape, x, y);
69 commandManager.executeCommand(command);
70 shapeSubject.notifyShapeModified(shape);
71 }
72
77 public boolean undo() {
78 return commandManager.undo();
79 }
80
85 public boolean redo() {
86 return commandManager.redo();
87 }
88
94 shapeSubject.addObserver(observer);
95 }
96
102 shapeSubject.removeObserver(observer);
103 }
104
110 this.renderer = renderer;
111 }
112
118 return renderer;
119 }
120
125 public List<Shape> getShapes() {
126 return new ArrayList<>(shapes); // Return a copy to prevent direct modification
127 }
128
132 public void render() {
133 renderer.clear();
134
135 for (Shape shape : shapes) {
136 if (shape instanceof com.example.graphics.model.Circle) {
137 renderer.renderCircle((com.example.graphics.model.Circle) shape);
138 } else if (shape instanceof com.example.graphics.model.Rectangle) {
139 renderer.renderRectangle((com.example.graphics.model.Rectangle) shape);
140 } else if (shape instanceof com.example.graphics.model.Line) {
141 renderer.renderLine((com.example.graphics.model.Line) shape);
142 } else if (shape instanceof com.example.graphics.model.Triangle) {
143 renderer.renderTriangle((com.example.graphics.model.Triangle) shape);
144 }
145 }
146
147 renderer.display();
148 }
149
155 for (Shape shape : shapes) {
156 shape.accept(visitor);
157 }
158 }
159}
void setRenderer(Renderer renderer)
Definition Drawing.java:109
void removeObserver(ShapeObserver observer)
Definition Drawing.java:101
void moveShape(Shape shape, int x, int y)
Definition Drawing.java:67
List< Shape > getShapes()
Definition Drawing.java:125
final List< Shape > shapes
Definition Drawing.java:25
transient Renderer renderer
Definition Drawing.java:28
final CommandManager commandManager
Definition Drawing.java:26
void addShape(Shape shape)
Definition Drawing.java:45
void acceptVisitor(ShapeVisitor visitor)
Definition Drawing.java:154
final ShapeSubject shapeSubject
Definition Drawing.java:27
static final long serialVersionUID
Definition Drawing.java:23
void addObserver(ShapeObserver observer)
Definition Drawing.java:93
Drawing(Renderer renderer)
Definition Drawing.java:34
void removeShape(Shape shape)
Definition Drawing.java:55