Shapes updated to use new IValue interface

This commit is contained in:
Lukasz Baldyga committed 2020-11-28 18:24:29 +00:00
1 parent bd23d9e503
commit 52503b5872
7 files changed
+78 -86

No files matched your search

@@ -1,4 +1,6 @@
using System.Drawing; using Advanced_Software_Engineering.Verbs.Value.ValueObjects;
using System.Collections.Generic;
using System.Drawing;
namespace Advanced_Software_Engineering.Verbs.DrawingVerbs { namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
@@ -7,17 +9,14 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// </summary> /// </summary>
public class DrawLines : IVerb { public class DrawLines : IVerb {
private readonly Drawer drawer; private readonly Drawer drawer;
private readonly Point[] points; private readonly PointValue[] points;
private readonly bool descCreated = false;
private string desc;
/// <summary> /// <summary>
/// DrawLines constructor /// DrawLines constructor
/// </summary> /// </summary>
/// <param name="drawer">drawer</param> /// <param name="drawer">drawer</param>
/// <param name="points">All of the points to visit</param> /// <param name="points">All of the points to visit</param>
public DrawLines(Drawer drawer, Point[] points) { public DrawLines(Drawer drawer, PointValue[] points) {
this.drawer = drawer; this.drawer = drawer;
this.points = points; this.points = points;
} }
@@ -26,22 +25,17 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// Draws all the lines /// Draws all the lines
/// </summary> /// </summary>
public void ExecuteVerb() { public void ExecuteVerb() {
drawer.DrawLines(points); List<Point> pointList = new List<Point>();
foreach (PointValue pointValue in points) pointList.Add(pointValue.GetPoint());
drawer.DrawLines(pointList.ToArray());
} }
/// <summary> /// <summary>
/// Gets description of the command. /// Gets description of the command.
/// </summary> /// </summary>
/// <returns>What points will be drawn to in what order</returns> /// <returns>A generic description of the command</returns>
public string GetDescription() { public string GetDescription() {
if (!descCreated) { return "Draws a shape at specific points.";
desc = "Draws a shape at points: ";
foreach (Point point in points) {
desc += point.X + ", " + point.Y + "\n";
}
}
return desc;
} }
} }
} }
@@ -14,8 +14,7 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// Creates a MoveTo instance /// Creates a MoveTo instance
/// </summary> /// </summary>
/// <param name="drawer">drawer</param> /// <param name="drawer">drawer</param>
/// <param name="x">X position</param> /// <param name="point">Position to move to</param>
/// <param name="y">Y position</param>
public MoveTo(Drawer drawer, PointValue point) { public MoveTo(Drawer drawer, PointValue point) {
this.drawer = drawer; this.drawer = drawer;
moveToPoint = point; moveToPoint = point;
@@ -1,4 +1,6 @@
using System.Drawing; using Advanced_Software_Engineering.Verbs.Value;
using Advanced_Software_Engineering.Verbs.Value.ValueObjects;
using System.Drawing;
namespace Advanced_Software_Engineering.Verbs.DrawingVerbs { namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
@@ -16,8 +18,8 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// <param name="point2">second point</param> /// <param name="point2">second point</param>
/// <param name="point3">third point</param> /// <param name="point3">third point</param>
/// <param name="point4">fourth point</param> /// <param name="point4">fourth point</param>
public Quadrilateral(Drawer drawer, Point point1, Point point2, Point point3, Point point4) { public Quadrilateral(Drawer drawer, PointValue point1, PointValue point2, PointValue point3, PointValue point4) {
IVerb = new DrawLines(drawer, new Point[] { point1, point2, point3, point4 }); IVerb = new DrawLines(drawer, new PointValue[] { point1, point2, point3, point4 });
} }
/// <summary> /// <summary>
@@ -1,4 +1,6 @@
using System; using Advanced_Software_Engineering.Verbs.Value;
using Advanced_Software_Engineering.Verbs.Value.ValueObjects;
using Advanced_Software_Engineering.Verbs.Value.ValueTypes;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
@@ -11,11 +13,9 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// Correct /// Correct
/// </todo> /// </todo>
public class Rectangle : IVerb { public class Rectangle : IVerb {
private readonly Drawer drawer; private readonly PointValue[] points;
private readonly PointF[] points;
private readonly double width; private readonly IVerb verb;
private readonly double height;
/// <summary> /// <summary>
/// Create a rectangle instance. Makes sure that /// Create a rectangle instance. Makes sure that
@@ -23,21 +23,19 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// <param name="drawer">drawer</param> /// <param name="drawer">drawer</param>
/// <param name="width">rectangle width</param> /// <param name="width">rectangle width</param>
/// <param name="height">rectangle height</param> /// <param name="height">rectangle height</param>
public Rectangle(Drawer drawer, double width, double height) { public Rectangle(Drawer drawer, IValue width, IValue height) {
this.drawer = drawer; IValue negativeWidth = new ExpressionValue(drawer, new IntValue(0), width, ExpressionValue.SUBTRACT);
IValue negativeHeight = new ExpressionValue(drawer, new IntValue(0), height, ExpressionValue.SUBTRACT);
float root2 = (float)Math.Sqrt(2) / 2; points = new PointValue[]
points = new PointF[]
{ {
new PointF((float) -width * root2, (float) -height * root2), new PointValue(negativeWidth, negativeHeight),
new PointF((float) width * root2, (float) -height * root2), new PointValue(width, negativeHeight),
new PointF((float) width * root2, (float) height * root2), new PointValue(width, height),
new PointF((float) -width * root2, (float) height * root2) new PointValue(negativeWidth, negativeHeight)
}; };
this.width = width; verb = new DrawLines(drawer, points);
this.height = height;
} }
/// <summary> /// <summary>
@@ -45,23 +43,14 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// </summary> /// </summary>
/// <returns>Describes the rectangle</returns> /// <returns>Describes the rectangle</returns>
public string GetDescription() { public string GetDescription() {
return "Draws a rectangle with the width of" + width + " and the height of " + height + " with the pen in the center"; return "Draws a rectangle with the pen in the center";
} }
/// <summary> /// <summary>
/// Draws the rectangle /// Draws the rectangle
/// </summary> /// </summary>
public void ExecuteVerb() { public void ExecuteVerb() {
//adjust for current pen position verb.ExecuteVerb();
Point position = drawer.GetPenPosition();
List<Point> morePoints = new List<Point>();
foreach (PointF point in points) {
morePoints.Add(new Point((int)(point.X + position.X), (int)(point.Y + position.Y)));
}
drawer.DrawLines(morePoints.ToArray());
} }
} }
} }
@@ -1,4 +1,7 @@
using System; using Advanced_Software_Engineering.Verbs.Value;
using Advanced_Software_Engineering.Verbs.Value.ValueObjects;
using Advanced_Software_Engineering.Verbs.Value.ValueTypes;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
@@ -9,10 +12,10 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// </summary> /// </summary>
public class RegularPolygon : IVerb { public class RegularPolygon : IVerb {
private readonly Drawer drawer; private readonly Drawer drawer;
private readonly int sides; private readonly IValue sides;
private readonly double scale; private readonly IValue scale;
private readonly double offset; private readonly IValue offset;
private readonly List<Point> points; private readonly IValue degMode;
/// <summary> /// <summary>
/// Draws a regular polygon. /// Draws a regular polygon.
@@ -24,36 +27,35 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// <param name="scale">The scale of the regular polygon</param> /// <param name="scale">The scale of the regular polygon</param>
/// <param name="offset">Rotation offset of the regular polygon</param> /// <param name="offset">Rotation offset of the regular polygon</param>
/// <param name="degMode">Default is true. If true, offset is in degrees. If false, offset is in gradians.</param> /// <param name="degMode">Default is true. If true, offset is in degrees. If false, offset is in gradians.</param>
public RegularPolygon(Drawer drawer, int sides, double scale, double offset = 0, bool degMode = true) { public RegularPolygon(Drawer drawer, IValue sides, IValue scale, IValue offset, IValue degMode) {
points = new List<Point>();
//if in degMode, convert the offset to radians
if (degMode) offset = Math.PI * offset / 180;
double constantAngleDelta = 2 * Math.PI / sides;
for (int side = 0; side < sides; side++) {
double angle = (constantAngleDelta * side) + offset;
double dx = scale * Math.Sin(angle);
double dy = scale * Math.Cos(angle);
points.Add(new Point((int)Math.Round(dx), (int)Math.Round(dy)));
}
this.sides = sides; this.sides = sides;
this.scale = scale; this.scale = scale;
this.drawer = drawer; this.drawer = drawer;
this.offset = offset; this.offset = offset;
this.degMode = degMode;
} }
/// <summary> /// <summary>
/// Draws the regular polygons /// Draws the regular polygons
/// </summary> /// </summary>
public void ExecuteVerb() { public void ExecuteVerb() {
Point currentOrigin = drawer.GetPenPosition(); double offset = this.offset.ToDouble();
List<Point> originShiftedPoints = new List<Point>(); //if in degMode, convert the offset to radian
foreach (Point point in points) originShiftedPoints.Add(new Point(point.X + currentOrigin.X, point.Y + currentOrigin.Y)); if (degMode.ToBool()) offset = Math.PI * offset / 180;
drawer.DrawLines(originShiftedPoints.ToArray());
//Scale needs to be corercted to work correctly with Rectangle
double scale = this.scale.ToInt() * 2 / Math.Sqrt(2);
List<PointValue> points = new List<PointValue>();
double constantAngleDelta = 2 * Math.PI / sides.ToInt();
for (int side = 0; side < sides.ToInt(); side++) {
double angle = (constantAngleDelta * side) + offset;
double dx = scale * Math.Sin(angle);
double dy = scale * Math.Cos(angle);
points.Add(new PointValue(new IntValue((int)Math.Round(dx)), new IntValue((int)Math.Round(dy))));
}
new DrawLines(drawer, points.ToArray()).ExecuteVerb();
} }
/// <summary> /// <summary>
@@ -61,7 +63,7 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// </summary> /// </summary>
/// <returns>A description of how the polygon will be drawn</returns> /// <returns>A description of how the polygon will be drawn</returns>
public string GetDescription() { public string GetDescription() {
return "Draws a " + sides + " sided regular polygon, with rotation of " + offset + " radians, with inner radius of " + scale; return "Draws a regular polygon.";
} }
} }
} }
@@ -1,4 +1,7 @@
namespace Advanced_Software_Engineering.Verbs.DrawingVerbs { using Advanced_Software_Engineering.Verbs.Value;
using Advanced_Software_Engineering.Verbs.Value.ValueTypes;
namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// <summary> /// <summary>
/// The Square IVerb class /// The Square IVerb class
@@ -11,8 +14,8 @@
/// </summary> /// </summary>
/// <param name="drawer">drawer</param> /// <param name="drawer">drawer</param>
/// <param name="scale">size of the square</param> /// <param name="scale">size of the square</param>
public Square(Drawer drawer, double scale) { public Square(Drawer drawer, IValue scale) {
IVerb = new RegularPolygon(drawer, 4, scale); IVerb = new RegularPolygon(drawer, new IntValue(4), scale, new IntValue(0), new BoolValue(true));
} }
/// <summary> /// <summary>
@@ -21,8 +24,8 @@
/// <param name="drawer">drawer</param> /// <param name="drawer">drawer</param>
/// <param name="scale">size of the square</param> /// <param name="scale">size of the square</param>
/// <param name="offset">rotation offset in degrees</param> /// <param name="offset">rotation offset in degrees</param>
public Square(Drawer drawer, double scale, double offset) { public Square(Drawer drawer, IValue scale, IValue offset) {
IVerb = new RegularPolygon(drawer, 4, scale, offset); IVerb = new RegularPolygon(drawer, new IntValue(4), scale, offset, new BoolValue(true));
} }
/// <summary> /// <summary>
@@ -1,4 +1,7 @@
using System.Drawing; using Advanced_Software_Engineering.Verbs.Value;
using Advanced_Software_Engineering.Verbs.Value.ValueObjects;
using Advanced_Software_Engineering.Verbs.Value.ValueTypes;
using System.Drawing;
namespace Advanced_Software_Engineering.Verbs.DrawingVerbs { namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
@@ -13,8 +16,8 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// </summary> /// </summary>
/// <param name="drawer">drawer</param> /// <param name="drawer">drawer</param>
/// <param name="scale">the scale of the triangle</param> /// <param name="scale">the scale of the triangle</param>
public Triangle(Drawer drawer, double scale) { public Triangle(Drawer drawer, IValue scale) {
IVerb = new RegularPolygon(drawer, 3, scale); IVerb = new RegularPolygon(drawer, new IntValue(3), scale, new IntValue(0), new BoolValue(true));
} }
/// <summary> /// <summary>
@@ -23,8 +26,8 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// <param name="drawer">drawer</param> /// <param name="drawer">drawer</param>
/// <param name="scale">the scale of the triangle</param> /// <param name="scale">the scale of the triangle</param>
/// <param name="offset">the offset of the triangle in degrees</param> /// <param name="offset">the offset of the triangle in degrees</param>
public Triangle(Drawer drawer, double scale, double offset) { public Triangle(Drawer drawer, IValue scale, IValue offset) {
IVerb = new RegularPolygon(drawer, 3, scale, offset); IVerb = new RegularPolygon(drawer, new IntValue(3), scale, offset, new BoolValue(true));
} }
/// <summary> /// <summary>
@@ -34,8 +37,8 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// <param name="point1">first point</param> /// <param name="point1">first point</param>
/// <param name="point2">second point</param> /// <param name="point2">second point</param>
/// <param name="point3">third point</param> /// <param name="point3">third point</param>
public Triangle(Drawer drawer, Point point1, Point point2, Point point3) { public Triangle(Drawer drawer, PointValue point1, PointValue point2, PointValue point3) {
IVerb = new DrawLines(drawer, new Point[] { point1, point2, point3 }); IVerb = new DrawLines(drawer, new PointValue[] { point1, point2, point3 });
} }
/// <summary> /// <summary>