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 }); } ///