diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Actions/DrawLines.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Actions/DrawLines.cs
index efe4059..65276b9 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Actions/DrawLines.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Actions/DrawLines.cs
@@ -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 {
@@ -7,17 +9,14 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
///
public class DrawLines : IVerb {
private readonly Drawer drawer;
- private readonly Point[] points;
-
- private readonly bool descCreated = false;
- private string desc;
+ private readonly PointValue[] points;
///
/// DrawLines constructor
///
/// drawer
/// All of the points to visit
- public DrawLines(Drawer drawer, Point[] points) {
+ public DrawLines(Drawer drawer, PointValue[] points) {
this.drawer = drawer;
this.points = points;
}
@@ -26,22 +25,17 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// Draws all the lines
///
public void ExecuteVerb() {
- drawer.DrawLines(points);
+ List pointList = new List();
+ foreach (PointValue pointValue in points) pointList.Add(pointValue.GetPoint());
+ drawer.DrawLines(pointList.ToArray());
}
///
/// Gets description of the command.
///
- /// What points will be drawn to in what order
- public string GetDescription() {
- if (!descCreated) {
- desc = "Draws a shape at points: ";
-
- foreach (Point point in points) {
- desc += point.X + ", " + point.Y + "\n";
- }
- }
- return desc;
+ /// A generic description of the command
+ public string GetDescription() {
+ return "Draws a shape at specific points.";
}
}
}
\ No newline at end of file
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/MoveTo.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/MoveTo.cs
index aa1aa31..064ca0c 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/MoveTo.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/MoveTo.cs
@@ -14,8 +14,7 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// Creates a MoveTo instance
///
/// drawer
- /// X position
- /// Y position
+ /// Position to move to
public MoveTo(Drawer drawer, PointValue point) {
this.drawer = drawer;
moveToPoint = point;
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Quadrilateral.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Quadrilateral.cs
index d37aa87..9e6704c 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Quadrilateral.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Quadrilateral.cs
@@ -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 {
@@ -16,8 +18,8 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// second point
/// third point
/// fourth point
- public Quadrilateral(Drawer drawer, Point point1, Point point2, Point point3, Point point4) {
- IVerb = new DrawLines(drawer, new Point[] { point1, point2, point3, point4 });
+ public Quadrilateral(Drawer drawer, PointValue point1, PointValue point2, PointValue point3, PointValue point4) {
+ IVerb = new DrawLines(drawer, new PointValue[] { point1, point2, point3, point4 });
}
///
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Rectangle.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Rectangle.cs
index 9d9ed5e..ce855df 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Rectangle.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Rectangle.cs
@@ -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.Drawing;
@@ -11,11 +13,9 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// Correct
///
public class Rectangle : IVerb {
- private readonly Drawer drawer;
- private readonly PointF[] points;
+ private readonly PointValue[] points;
- private readonly double width;
- private readonly double height;
+ private readonly IVerb verb;
///
/// Create a rectangle instance. Makes sure that
@@ -23,21 +23,19 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// drawer
/// rectangle width
/// rectangle height
- public Rectangle(Drawer drawer, double width, double height) {
- this.drawer = drawer;
+ public Rectangle(Drawer drawer, IValue width, IValue height) {
+ 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 PointF[]
+ points = new PointValue[]
{
- new PointF((float) -width * root2, (float) -height * root2),
- new PointF((float) width * root2, (float) -height * root2),
- new PointF((float) width * root2, (float) height * root2),
- new PointF((float) -width * root2, (float) height * root2)
+ new PointValue(negativeWidth, negativeHeight),
+ new PointValue(width, negativeHeight),
+ new PointValue(width, height),
+ new PointValue(negativeWidth, negativeHeight)
};
- this.width = width;
- this.height = height;
+ verb = new DrawLines(drawer, points);
}
///
@@ -45,23 +43,14 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
///
/// Describes the rectangle
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";
}
///
/// Draws the rectangle
///
public void ExecuteVerb() {
- //adjust for current pen position
- Point position = drawer.GetPenPosition();
-
- List morePoints = new List();
-
- foreach (PointF point in points) {
- morePoints.Add(new Point((int)(point.X + position.X), (int)(point.Y + position.Y)));
- }
-
- drawer.DrawLines(morePoints.ToArray());
+ verb.ExecuteVerb();
}
}
}
\ No newline at end of file
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/RegularPolygon.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/RegularPolygon.cs
index 974b6e5..5a5b509 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/RegularPolygon.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/RegularPolygon.cs
@@ -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.Drawing;
@@ -9,10 +12,10 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
///
public class RegularPolygon : IVerb {
private readonly Drawer drawer;
- private readonly int sides;
- private readonly double scale;
- private readonly double offset;
- private readonly List points;
+ private readonly IValue sides;
+ private readonly IValue scale;
+ private readonly IValue offset;
+ private readonly IValue degMode;
///
/// Draws a regular polygon.
@@ -24,36 +27,35 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// The scale of the regular polygon
/// Rotation offset of the regular polygon
/// Default is true. If true, offset is in degrees. If false, offset is in gradians.
- public RegularPolygon(Drawer drawer, int sides, double scale, double offset = 0, bool degMode = true) {
- points = new List();
-
- //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)));
- }
-
+ public RegularPolygon(Drawer drawer, IValue sides, IValue scale, IValue offset, IValue degMode) {
this.sides = sides;
this.scale = scale;
this.drawer = drawer;
this.offset = offset;
+ this.degMode = degMode;
}
///
/// Draws the regular polygons
///
public void ExecuteVerb() {
- Point currentOrigin = drawer.GetPenPosition();
- List originShiftedPoints = new List();
- foreach (Point point in points) originShiftedPoints.Add(new Point(point.X + currentOrigin.X, point.Y + currentOrigin.Y));
- drawer.DrawLines(originShiftedPoints.ToArray());
+ double offset = this.offset.ToDouble();
+ //if in degMode, convert the offset to radian
+ if (degMode.ToBool()) offset = Math.PI * offset / 180;
+
+ //Scale needs to be corercted to work correctly with Rectangle
+ double scale = this.scale.ToInt() * 2 / Math.Sqrt(2);
+ List points = new List();
+ 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();
}
///
@@ -61,7 +63,7 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
///
/// A description of how the polygon will be drawn
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.";
}
}
}
\ No newline at end of file
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Square.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Square.cs
index f72c9b4..9652d0f 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Square.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Square.cs
@@ -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 {
///
/// The Square IVerb class
@@ -11,8 +14,8 @@
///
/// drawer
/// size of the square
- public Square(Drawer drawer, double scale) {
- IVerb = new RegularPolygon(drawer, 4, scale);
+ public Square(Drawer drawer, IValue scale) {
+ IVerb = new RegularPolygon(drawer, new IntValue(4), scale, new IntValue(0), new BoolValue(true));
}
///
@@ -21,8 +24,8 @@
/// drawer
/// size of the square
/// rotation offset in degrees
- public Square(Drawer drawer, double scale, double offset) {
- IVerb = new RegularPolygon(drawer, 4, scale, offset);
+ public Square(Drawer drawer, IValue scale, IValue offset) {
+ IVerb = new RegularPolygon(drawer, new IntValue(4), scale, offset, new BoolValue(true));
}
///
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Triangle.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Triangle.cs
index 31cdb18..ebca14d 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Triangle.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/Shape/Triangle.cs
@@ -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 {
@@ -13,8 +16,8 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
///
/// drawer
/// the scale of the triangle
- public Triangle(Drawer drawer, double scale) {
- IVerb = new RegularPolygon(drawer, 3, scale);
+ public Triangle(Drawer drawer, IValue scale) {
+ IVerb = new RegularPolygon(drawer, new IntValue(3), scale, new IntValue(0), new BoolValue(true));
}
///
@@ -23,8 +26,8 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// drawer
/// the scale of the triangle
/// the offset of the triangle in degrees
- public Triangle(Drawer drawer, double scale, double offset) {
- IVerb = new RegularPolygon(drawer, 3, scale, offset);
+ public Triangle(Drawer drawer, IValue scale, IValue offset) {
+ IVerb = new RegularPolygon(drawer, new IntValue(3), scale, offset, new BoolValue(true));
}
///
@@ -34,8 +37,8 @@ namespace Advanced_Software_Engineering.Verbs.DrawingVerbs {
/// first point
/// second point
/// third point
- public Triangle(Drawer drawer, Point point1, Point point2, Point point3) {
- IVerb = new DrawLines(drawer, new Point[] { point1, point2, point3 });
+ public Triangle(Drawer drawer, PointValue point1, PointValue point2, PointValue point3) {
+ IVerb = new DrawLines(drawer, new PointValue[] { point1, point2, point3 });
}
///