EOS 2  1.1.0
Einfache Objektbasierte Sprache
Plotter.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.geo;
2 
3 import java.util.Iterator;
4 import de.lathanda.eos.base.FillDescriptor;
5 import de.lathanda.eos.base.FillStyle;
6 import de.lathanda.eos.base.LineDescriptor;
7 import de.lathanda.eos.base.LineStyle;
8 import de.lathanda.eos.base.MutableColor;
9 import de.lathanda.eos.base.Picture;
10 import de.lathanda.eos.base.math.Point;
11 
17 public class Plotter extends Group {
18 
19  Pen pen;
20 
21  private boolean isPlotting = true;
22  private Polygon polygon;
23 
24  public Plotter() {
25  pen = new Pen();
26  addFigure(pen);
27  startPlot();
28  }
29 
30  @Override
31  protected void drawObject(Picture p) {
32  Iterator<Figure> fit = members.iterator();
33  fit.next(); //pen
34  while(fit.hasNext()) {
35  fit.next().draw(p);
36  }
37  pen.draw(p);
38  }
39 
40  public void turnLeft(double angle) {
41  pen.rotate(angle);
42  }
43 
44  public void turnRight(double angle) {
45  pen.rotate(-angle);
46  }
47 
48  public void turnTo(double angle) {
49  pen.setRotation(angle);
50  }
51 
52  private synchronized void appendPosition() {
53  if (isPlotting) {
54  polygon.addPoint(pen.getPoint());
55  }
56  }
57 
58  private void finishPlot() {
59  isPlotting = false;
60  if (!polygon.isValid()) {
61  this.removeFigure(polygon);
62  }
64  }
65 
66  private void startPlot() {
67  if (polygon == null) {
68  polygon = new Polygon();
69  polygon.setLineColor(MutableColor.BLACK);
70  polygon.setFillStyle(FillStyle.TRANSPARENT);
71  } else {
72  Polygon newPolygon = new Polygon();
73  newPolygon.fill = new FillDescriptor(polygon.fill);
74  newPolygon.line = new LineDescriptor(polygon.line);
75  if (!polygon.isValid()) {
76  //check if polygon is valid before switching to new one
77  this.removeFigure(polygon);
78  }
79  polygon = newPolygon;
80  }
81  addFigure(polygon);
82  isPlotting = true;
83  appendPosition();
84  }
85  public double getPenX() {
86  return pen.getAbsolutePosition().getX();
87  }
88  public double getPenY() {
89  return pen.getAbsolutePosition().getY();
90  }
91  public void setPenX(double x) {
92  Point loc = pen.getRelativePosition(new Point(x, pen.getAbsolutePosition().getY()));
93  pen.moveTo(loc.getX(), loc.getY());
94  appendPosition();
95  }
96  public void setPenY(double y) {
97  Point loc = pen.getRelativePosition(new Point(pen.getAbsolutePosition().getX(), y));
98  pen.moveTo(loc.getX(), loc.getY());
99  appendPosition();
100  }
101 
102  public void movePenTo(double x, double y) {
103  Point loc = pen.getRelativePosition(new Point(x, y));
104  pen.moveTo(loc.getX(), loc.getY());
105  appendPosition();
106  }
107 
108  public double getAngle() {
109  return pen.getRotation();
110  }
111 
112  public void setAngle(double angle) {
113  pen.setRotation(angle);
114  fireDataChanged();
115  }
116 
117  public void moveForward(double length) {
118  pen.move(Math.cos(pen.getRotationInternal()) * length, Math.sin(pen.getRotationInternal()) * length);
119  appendPosition();
120  }
121 
122  public void moveBackward(double length) {
123  moveForward(-length);
124  }
125 
126  public void startPlotting() {
127  if (!isPlotting) {
128  startPlot();
129  }
130  }
131 
132  public void stopPlotting() {
133  if (isPlotting) {
134  finishPlot();
135  }
136  }
137 
138  public void setPenVisible(boolean b) {
139  pen.setVisible(b);
140  fireDataChanged();
141  }
142 
143  public boolean getPenVisible() {
144  return pen.getVisible();
145  }
146 
147  public void setPenColor(MutableColor c) {
148  pen.setLineColor(c);
149  }
150  public boolean isPlotting() {
151  return isPlotting;
152  }
154  return polygon.getLineColor();
155  }
156  @Override
157  public Figure copy() {
158  Plotter g = (Plotter)super.copy();
159  g.polygon = (Polygon)polygon.copy();
160  g.pen = (Pen)pen.copy();
161  return g;
162  }
163  @Override
164  public void setLineColor(MutableColor color) {
165  startPlot();
166  polygon.setLineColor(color);
167  }
168 
170  return polygon.getLineColor();
171  }
172 
173  @Override
174  public void setLineStyle(LineStyle linestyle) {
175  startPlot();
176  polygon.setLineStyle(linestyle);
177  }
178 
179  @Override
180  public void setLineWidth(double linewidth) {
181  startPlot();
182  polygon.setLineWidth(linewidth);
183  }
184  public double getLineWidth() {
185  return polygon.getLineWidth();
186  }
187  @Override
188  public void setFillStyle(FillStyle fillstyle) {
189  startPlot();
190  polygon.setFillStyle(fillstyle);
191  }
192 
193  @Override
194  public void setFillColor(MutableColor color) {
195  startPlot();
196  polygon.setFillColor(color);
197  }
201  public void clearAll() {
202  super.removeAll();
203  pen = new Pen();
204  addFigure(pen);
205  startPlot();
206  }
207 }
void setRotation(double angle)
Definition: Figure.java:161
void draw(Picture g)
Definition: Figure.java:30
void moveTo(double x, double y)
Definition: Figure.java:133
void move(double dx, double dy)
Definition: Figure.java:128
void setVisible(boolean visible)
Definition: Figure.java:50
void rotate(double angle)
Definition: Figure.java:156
Point getRelativePosition(Point absolute)
Definition: Figure.java:224
void setFillStyle(FillStyle fillStyle)
void setFillColor(MutableColor color)
void addFigure(Figure figure)
Definition: Group.java:37
ConcurrentLinkedList< Figure > members
Definition: Group.java:23
void removeFigure(Figure go)
Definition: Group.java:61
void setLineWidth(double width)
Definition: LineFigure.java:49
void setLineStyle(LineStyle linestyle)
Definition: LineFigure.java:40
void setLineColor(MutableColor color)
Definition: LineFigure.java:31
MutableColor getLineColor()
Definition: Plotter.java:169
void setPenVisible(boolean b)
Definition: Plotter.java:138
void setPenX(double x)
Definition: Plotter.java:91
void setLineWidth(double linewidth)
Definition: Plotter.java:180
void turnTo(double angle)
Definition: Plotter.java:48
void setFillColor(MutableColor color)
Definition: Plotter.java:194
void setLineStyle(LineStyle linestyle)
Definition: Plotter.java:174
void setPenY(double y)
Definition: Plotter.java:96
void turnRight(double angle)
Definition: Plotter.java:44
void moveForward(double length)
Definition: Plotter.java:117
void setPenColor(MutableColor c)
Definition: Plotter.java:147
void setLineColor(MutableColor color)
Definition: Plotter.java:164
void turnLeft(double angle)
Definition: Plotter.java:40
void movePenTo(double x, double y)
Definition: Plotter.java:102
void setAngle(double angle)
Definition: Plotter.java:112
void moveBackward(double length)
Definition: Plotter.java:122
void setFillStyle(FillStyle fillstyle)
Definition: Plotter.java:188
void drawObject(Picture p)
Definition: Plotter.java:31
MutableColor getPenColor()
Definition: Plotter.java:153
void addPoint(Point p)
Definition: Polygon.java:68
Impressum