private static void FiguresAdd(XElement xe, List <IFigure> figures, Material material) { double a, b, c; switch (xe.Element("form").Value) { case "Circle": a = int.Parse(xe.Element("radius").Value); figures.Add(factory.GetFigure(material, a)); break; case "Rectangle": a = int.Parse(xe.Element("sideA").Value); b = int.Parse(xe.Element("sideB").Value); figures.Add(factory.GetFigure(material, a, b)); break; case "Triangle": a = int.Parse(xe.Element("sideA").Value); b = int.Parse(xe.Element("sideB").Value); c = int.Parse(xe.Element("sideC").Value); figures.Add(factory.GetFigure(material, a, b, c)); break; } }
private static void FiguresAdd(XmlReader reader, List <IFigure> figures, Material material) { double a, b, c; reader.Read(); String value = reader.ReadInnerXml(); switch (value) { case "Circle": reader.Read(); a = int.Parse(reader.ReadInnerXml()); figures.Add(factory.GetFigure(material, a)); break; case "Rectangle": reader.Read(); a = int.Parse(reader.ReadInnerXml()); reader.Read(); b = int.Parse(reader.ReadInnerXml()); figures.Add(factory.GetFigure(material, a, b)); break; case "Triangle": reader.Read(); a = int.Parse(reader.ReadInnerXml()); reader.Read(); b = int.Parse(reader.ReadInnerXml()); reader.Read(); c = int.Parse(reader.ReadInnerXml()); figures.Add(factory.GetFigure(material, a, b, c)); break; } }
/// <summary> /// Get a colorless figure /// </summary> /// <param name="xmlElement"> XmlReader instance</param> /// <param name="shape"> Figure type</param> /// <returns></returns> private static Figure LoadFigure(XElement xmlElement, string shape) { Figure figure = null; float radius, width, height, a, b, c; FiguresFactory factory = new FiguresFactory(); Material material = (xmlElement.Attributes().Count() == 2) ? Material.Paper : Material.Film; switch (shape) { case "Circle": radius = float.Parse(xmlElement.Element("Radius").Value); figure = factory.GetFigure(material, radius); break; case "Rectangle": width = float.Parse(xmlElement.Element("Width").Value); height = float.Parse(xmlElement.Element("Height").Value); figure = factory.GetFigure(material, width, height); break; case "Triangle": a = float.Parse(xmlElement.Element("SideA").Value); b = float.Parse(xmlElement.Element("SideB").Value); c = float.Parse(xmlElement.Element("SideC").Value); figure = factory.GetFigure(material, a, b, c); break; } return(figure); }
/// <summary> /// Get a colorless figure /// </summary> /// <param name="reader"> XmlReader instance</param> /// <param name="shape"> Figure type</param> /// <returns></returns> private static Figure LoadFigure(XmlReader reader, string shape) { Figure figure = null; float radius, width, height, a, b, c; FiguresFactory factory = new FiguresFactory(); Material material = (reader.AttributeCount == 2)? Material.Paper : Material.Film; reader.Read(); reader.Read(); switch (shape) { case "Circle": radius = float.Parse(reader.ReadInnerXml()); figure = factory.GetFigure(material, radius); break; case "Rectangle": width = float.Parse(reader.ReadInnerXml()); reader.Read(); height = float.Parse(reader.ReadInnerXml()); figure = factory.GetFigure(material, width, height); break; case "Triangle": a = float.Parse(reader.ReadInnerXml()); reader.Read(); b = float.Parse(reader.ReadInnerXml()); reader.Read(); c = float.Parse(reader.ReadInnerXml()); figure = factory.GetFigure(material, a, b, c); break; } return(figure); }
public void DrawCurrentFigure(double thickness, Color fill, Color border, Point pos) { if (PrevPos.X >= 0 && PrevPos.Y >= 0) { if (ImFigure != null) { ImFigure.Remove(Canva); ImFigure = null; } ChosenFigure = CurrentFactory.GetFigure(thickness, fill, border, PrevPos, pos, ChosenFigure); ChosenFigure.NewPos = pos; PrevPos = ChosenFigure.Draw(Canva); rewind.AddToFigureList(ChosenFigure); } }
/// <summary> /// Initializes figuresFactory and figuresBox /// </summary> public TaskUnitTest() { figuresFactory = new FiguresFactory(); figuresBox = new Box(); Figure figure = null; // Create a paper circle figure = figuresFactory.GetFigure(Material.Paper, 5); Painter.Colorize(figure, Сoloring.Orange); figuresBox.Add(figure); totalArea += figure.GetArea(); totalPerimeter += figure.GetPerimeter(); // Create a film rectangle figure = figuresFactory.GetFigure(Material.Film, 2, 5); figuresBox.Add(figure); totalArea += figure.GetArea(); totalPerimeter += figure.GetPerimeter(); // Create a paper triangle figure = figuresFactory.GetFigure(Material.Paper, 2, 2, 2); Painter.Colorize(figure, Сoloring.Green); figuresBox.Add(figure); totalArea += figure.GetArea(); totalPerimeter += figure.GetPerimeter(); // Create a film triangle figure = figuresFactory.GetFigure(Material.Film, 3, 4, 5); figuresBox.Add(figure); totalArea += figure.GetArea(); totalPerimeter += figure.GetPerimeter(); // Create a film circle figure = figuresFactory.GetFigure(Material.Film, 4); figuresBox.Add(figure); totalArea += figure.GetArea(); totalPerimeter += figure.GetPerimeter(); }
public void TestTriangleValue() { FiguresFactory factory = new FiguresFactory(); IFigure figure = factory.GetFigure("triangle"); var jparams = JToken.Parse(@"{ 'a': 10, 'b': 10, 'c': 10 }"); figure.SetParamsFromJson(jparams); decimal expected = 43.30127018922193233818615854m; decimal area = figure.CalculateArea(); Assert.Equal(expected, area, 25); }
public void TestCircleValue() { FiguresFactory factory = new FiguresFactory(); IFigure figure = factory.GetFigure("circle"); var jparams = JToken.Parse(@"{ 'radius': 10 }"); figure.SetParamsFromJson(jparams); decimal expected = 314.15926535897900m; decimal area = figure.CalculateArea(); Assert.Equal(expected, area, 25); }
public void EmptyBoxTest() { TestDelegate func1 = delegate { Box box = new Box(); box.GetCircles(); }; TestDelegate func2 = delegate { Box box = new Box(); box.GetFigure(1); }; TestDelegate func3 = delegate { Box box = new Box(); box.ReplaceFigures(1, factory.GetFigure(Material.Paper, 1)); }; Assert.Catch <EmptyBoxException>(func1); Assert.Catch <EmptyBoxException>(func2); Assert.Catch <EmptyBoxException>(func3); }
public void CheckFiguresFactory() { Figure circle = null; Figure rectangle = null; Figure triangle = null; // Create factory FiguresFactory factory = new FiguresFactory(); // Film Circle circle = factory.GetFigure(Material.Film, 3); Figure expCircleF = new CircleFilm(3); Assert.AreEqual(expCircleF, circle); // Paper Circle circle = factory.GetFigure(Material.Paper, 3); Figure expCircleP = new CirclePaper(3); Assert.AreEqual(expCircleP, circle); // Film Rectangle rectangle = factory.GetFigure(Material.Film, 2, 2); Figure expRectangleF = new RectangleFilm(2, 2); Assert.AreEqual(expRectangleF, rectangle); // Paper Rectangle rectangle = factory.GetFigure(Material.Paper, 2, 2); Figure expRectangleP = new RectanglePaper(2, 2); Assert.AreEqual(expRectangleP, rectangle); // Film Triangle triangle = factory.GetFigure(Material.Film, 2, 2, 2); Figure expTriangleF = new TriangleFilm(2, 2, 2); Assert.AreEqual(expTriangleF, triangle); // Paper Triangle triangle = factory.GetFigure(Material.Paper, 3, 4, 5); Figure expTriangleP = new TrianglePaper(3, 4, 5); Assert.AreEqual(expTriangleP, triangle); }
static void Main(string[] args) { System.Console.WriteLine("Hello! It's batch calculator."); if (args.Length != 1) { System.Console.WriteLine("Usage: Program.exe <input json file>"); return; } decimal totalArea = 0m; FiguresFactory figuresFactory = new FiguresFactory(); using (StreamReader file = File.OpenText(args[0])) { JsonTextReader reader = new JsonTextReader(file); var jtoken = JToken.Load(reader); if (jtoken.Type != JTokenType.Array) { System.Console.WriteLine("Error! File must contain json array"); return; } var jarray = (JArray)jtoken; foreach (JToken jtokenFigure in jarray) { if (jtokenFigure.Type != JTokenType.Object) { System.Console.WriteLine("Error! Each element of array must contain object"); } var jfigure = (JObject)jtokenFigure; string figureName = jfigure.Value<string>("figure"); if (figureName == null) { System.Console.WriteLine("Error! Figure object must contain figure key"); return; } IFigure figure = figuresFactory.GetFigure(figureName); if (figure == null) { System.Console.WriteLine("Error! Unknown figure"); return; } var jtokenParams = jfigure["params"]; figure.SetParamsFromJson(jtokenParams); System.Console.WriteLine(figure.ToString()); decimal area = figure.CalculateArea(); System.Console.WriteLine("Area = " + area); System.Console.WriteLine(); totalArea += area; } } System.Console.WriteLine("TotalArea = " + totalArea); }
private Box InitializeFigures() { Box box = new Box(); box.AddFigure(factory.GetFigure(Material.Film, 1)); box.AddFigure(factory.GetFigure(Material.Film, 2, 3)); box.AddFigure(factory.GetFigure(Material.Film, 4, 5, 6)); box.AddFigure(factory.GetFigure(Material.Paper, 7)); PaintBrush.PaintFigure(box.GetFigure(box.GetFiguresCount()), Paints.Azure); box.AddFigure(factory.GetFigure(Material.Paper, 8, 9)); PaintBrush.PaintFigure(box.GetFigure(box.GetFiguresCount()), Paints.Orange); box.AddFigure(factory.GetFigure(Material.Paper, 10, 11, 12)); PaintBrush.PaintFigure(box.GetFigure(box.GetFiguresCount()), Paints.Pink); return(box); }
public IActionResult CalculateArea([FromBody] JToken jsonData) { if (jsonData.Type != JTokenType.Object) { return(BadRequest(new { error = "Figure must be object" })); } var jfigure = (JObject)jsonData; string figureName = jfigure.Value <string>("figure"); if (figureName == null) { return(BadRequest(new { error = "Figure object must contain figure key" })); } FiguresFactory figuresFactory = new FiguresFactory(); IFigure figure = figuresFactory.GetFigure(figureName); if (figure == null) { return(BadRequest(new { error = "Unknown figure type" })); } var jtokenParams = jfigure["params"]; try { figure.SetParamsFromJson(jtokenParams); } catch { return(BadRequest(new { error = "Invalid figure arguments" })); } decimal area = 0m; try { area = figure.CalculateArea(); } catch (System.ArgumentException) { return(BadRequest(new { error = "Invalid figure arguments" })); } catch (System.OverflowException) { return(BadRequest(new { error = "Overflow caused during calculation. Arguments is too big" })); } return(Ok(new { area = area })); }