diff --git a/src/main/java/schule/ngb/zm/layers/TurtleLayer.java b/src/main/java/schule/ngb/zm/layers/TurtleLayer.java index 29d61a1..1eadffe 100644 --- a/src/main/java/schule/ngb/zm/layers/TurtleLayer.java +++ b/src/main/java/schule/ngb/zm/layers/TurtleLayer.java @@ -351,7 +351,7 @@ public class TurtleLayer extends Layer { } graphics.fill(shape); graphics.setColor(Color.BLACK.getJavaColor()); - graphics.setStroke(createStroke()); + graphics.setStroke(getStroke()); graphics.draw(shape); } @@ -367,7 +367,7 @@ public class TurtleLayer extends Layer { if( penDown && strokeColor != null ) { drawing.setColor(strokeColor.getJavaColor()); - drawing.setStroke(createStroke()); + drawing.setStroke(getStroke()); drawing.drawLine((int) positionStart.x, (int) positionStart.y, (int) position.x, (int) position.y); } } @@ -420,7 +420,7 @@ public class TurtleLayer extends Layer { if( penDown && strokeColor != null ) { drawing.setColor(strokeColor.getJavaColor()); - drawing.setStroke(createStroke()); + drawing.setStroke(getStroke()); drawing.drawLine((int) x, (int) y, (int) position.x, (int) position.y); } } diff --git a/src/main/java/schule/ngb/zm/shapes/FilledShape.java b/src/main/java/schule/ngb/zm/shapes/FilledShape.java index abbc103..39c3ea9 100644 --- a/src/main/java/schule/ngb/zm/shapes/FilledShape.java +++ b/src/main/java/schule/ngb/zm/shapes/FilledShape.java @@ -179,6 +179,17 @@ public abstract class FilledShape extends StrokedShape { fill = null; } + + public Paint getPaint() { + if( fill != null ) { + return fill; + } else if( fillColor != null && fillColor.getAlpha() > 0 ) { + return fillColor; + } else { + return null; + } + } + /** * Hilfsmethode für Unterklassen, um die angegebene Form mit der aktuellen * Füllung auf den Grafik-Kontext zu zeichnen. Die Methode verändert diff --git a/src/main/java/schule/ngb/zm/shapes/Shape.java b/src/main/java/schule/ngb/zm/shapes/Shape.java index 398d957..2e5b0a2 100644 --- a/src/main/java/schule/ngb/zm/shapes/Shape.java +++ b/src/main/java/schule/ngb/zm/shapes/Shape.java @@ -14,7 +14,7 @@ import java.awt.geom.Point2D; *
* Neben den abstrakten Methoden implementieren Unterklassen mindestens zwei * Konstruktoren. Einen Konstruktor, der die Form mit vom Nutzer gegebenen - * Parametern initialisiert und einen, der die Werten einer anderen Form + * Parametern initialisiert und einen, der die Werte einer anderen Form * desselben Typs übernimmt. In der Klasse {@link Circle} sind die Konstruktoren * beispielsweise so implementiert: * @@ -191,6 +191,7 @@ public abstract class Shape extends FilledShape { /** * Dreht die Form um den angegebenen Winkel um ihren Ankerpunkt. + * * @param angle Drehwinkel in Grad. */ public void rotate( double angle ) { @@ -227,6 +228,7 @@ public abstract class Shape extends FilledShape { public double getScale() { return scale; } + public void scale( double factor ) { scale = factor; } @@ -268,28 +270,25 @@ public abstract class Shape extends FilledShape { } /** - * Bestimmt die relativen Koordinaten des angegebenen Ankerpunkt basierend + * Bestimmt die relativen Koordinaten des angegebenen Ankerpunkts basierend * auf der angegebenen Breite und Höhe des umschließenden Rechtecks. *
- * Die Koordinaten des Ankerpunkt werden relativ zur oberen linken Ecke des - * Rechtecks mit der Breite {@code width} und der Höhe {@code height} + * Die Koordinaten des Ankerpunktes werden relativ zur oberen linken Ecke + * des Rechtecks mit der Breite {@code width} und der Höhe {@code height} * bestimmt. * - * @param width Breite des umschließdenden Rechtecks. - * @param height Höhe des umschließdenden Rechtecks. + * @param width Breite des umschließenden Rechtecks. + * @param height Höhe des umschließenden Rechtecks. * @param anchor Gesuchter Ankerpunkt. * @return Ein {@link Point2D} mit den relativen Koordinaten. */ - protected static Point2D.Double getAnchorPoint( double width, double height, Options.Direction anchor ) { + public static Point2D.Double getAnchorPoint( double width, double height, Options.Direction anchor ) { double wHalf = width * .5, hHalf = height * .5; - // anchor == CENTER - Point2D.Double anchorPoint = new Point2D.Double( + return new Point2D.Double( wHalf + wHalf * anchor.x, hHalf + hHalf * anchor.y ); - - return anchorPoint; } /** @@ -303,12 +302,10 @@ public abstract class Shape extends FilledShape { double wHalf = getWidth() * .5, hHalf = getHeight() * .5; // anchor == CENTER - Point2D.Double anchorPoint = new Point2D.Double( + return new Point2D.Double( wHalf * (anchor.x - this.anchor.x), hHalf * (anchor.y - this.anchor.y) ); - - return anchorPoint; } /** @@ -384,19 +381,10 @@ public abstract class Shape extends FilledShape { * zurück. Intern werden die AWT Shapes benutzt, um sie auf den * {@link Graphics2D Grafikkontext} zu zeichnen. *
- * Da die AWT-Shape bei jedem Zeichnen (also mindestens einmal pro Frame) - * benötigt wird, wird das aktuelle Shape-Objekt in {@link #awtShape} - * zwischengespeichert. Bei Änderungen der Objekteigenschaften muss daher - * intern {@link #invalidate()} aufgerufen werden, damit beim nächsten - * Aufruf von {@link #draw(Graphics2D)} die Shape mit einem Aufurf von - * {@code getShape()} neu erzeugt wird. Unterklassen können aber auch die - * zwischengespeicherte Shape direkt modifizieren, um eine Neugenerierung zu - * vermeiden. - *
- * Wenn diese Form nicht durch eine AWT-Shape dargstellt wird, kann die
+ * Wenn diese Form nicht durch eine AWT-Shape dargestellt wird, kann die
* Methode {@code null} zurückgeben.
*
- * @return Eine Java-AWT {@code Shape} die diess Form repräsentiert oder
+ * @return Eine Java-AWT {@code Shape} die diese Form repräsentiert oder
* {@code null}.
*/
public abstract java.awt.Shape getShape();
diff --git a/src/main/java/schule/ngb/zm/shapes/ShapeGroup.java b/src/main/java/schule/ngb/zm/shapes/ShapeGroup.java
index 88c635b..000b72d 100644
--- a/src/main/java/schule/ngb/zm/shapes/ShapeGroup.java
+++ b/src/main/java/schule/ngb/zm/shapes/ShapeGroup.java
@@ -7,6 +7,7 @@ import java.awt.geom.AffineTransform;
import java.awt.geom.Path2D;
import java.awt.geom.Point2D;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -35,7 +36,7 @@ import java.util.List;
* {@link #arrangeInGrid(int, Options.Direction, double, int)} und
* {@link #align(Options.Direction)} verwendet werden, die jeweils die Position
* der Formen in der Gruppe ändern und nicht die Position der Gruppe selbst (so
- * wie z.B. {@link #alignTo(Shape, Options.Direction)}.
+ * wie z.B. {@link #alignTo(Shape, Options.Direction)}).
*/
public class ShapeGroup extends Shape {
@@ -43,7 +44,7 @@ public class ShapeGroup extends Shape {
public static final int ARRANGE_COLS = 1;
- private List