Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        public IEnumerable <string> GetAvailableFigures()
        {
            FiguresFactory figuresFactory = new FiguresFactory();
            var            list           = figuresFactory.GetAvailableFigures();

            return(list);
        }
Ejemplo n.º 4
0
        private void Deserialize()
        {
            if (!System.IO.File.Exists("figures.txt"))
            {
                MessageBox.Show("Не был найден файл figures.txt", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                throw new NotImplementedException();
            }
            StreamReader f = new StreamReader("figures.txt");

            figures.list.Clear();
            while (!f.EndOfStream)
            {
                string   s    = f.ReadLine();
                string[] data = s.Split(new char[] { ',' });
                try
                {
                    float  x    = float.Parse(data[1], CultureInfo.InvariantCulture.NumberFormat);
                    float  y    = float.Parse(data[2], CultureInfo.InvariantCulture.NumberFormat);
                    float  w    = float.Parse(data[3], CultureInfo.InvariantCulture.NumberFormat);
                    float  h    = float.Parse(data[4], CultureInfo.InvariantCulture.NumberFormat);
                    Point  a    = new Point((int)x, (int)y);
                    Point  b    = new Point((int)w, (int)h);
                    String type = data[0];
                    switch (type)
                    {
                    case "Rect":
                        Factory = new CreateRect();
                        break;

                    /*case "Oval":
                     *  Factory = new CreateOval();
                     *  break;
                     * case "Line":
                     *  Factory = new CreateLine();
                     *  break;
                     * case "Triangle":
                     *  Factory = new CreateTriangle();
                     *  break;
                     * case "Rhombus":
                     *  Factory = new CreateRhombus();
                     *  break;
                     * case "Star":
                     *  Factory = new CreateStar();
                     *  break;*/
                    default:
                        Factory = null;
                        break;
                    }
                    AbstrFigure figure = Factory.FactoryMethod(a, b);//проверка на null
                    figures.list.Add(figure);
                }
                catch
                {
                }
            }
            f.Close();
        }
Ejemplo n.º 5
0
 public Paint(Canvas canvaToDraw)
 {
     pluginControl  = new PluginControl(this);
     CurrentFactory = new LineFactory();
     Canva          = canvaToDraw;
     PrevPos        = new Point()
     {
         X = -1, Y = -1
     };
     rewind = new RedoUndoClass(Canva);
 }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        private void WindowSizeChanged()
        {
            int width, height;

            SDL.SDL_GetWindowSize(_window, out width, out height);


            _rectangle = FiguresFactory.CreateRectangle(
                width / 2, height / 2, _defaultRotationAngle,
                _offsetFromBorders, width - _offsetFromBorders, _offsetFromBorders, height - _offsetFromBorders,
                width - 300, height - 300
                );
            _trapeze.SetMovementBorders(
                _offsetFromBorders, width - _offsetFromBorders, _offsetFromBorders, height - _offsetFromBorders
                );
            _ellipse.SetMovementBorders(
                _offsetFromBorders, width - _offsetFromBorders, _offsetFromBorders, height - _offsetFromBorders
                );
        }
Ejemplo n.º 10
0
        /// <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();
        }
Ejemplo n.º 11
0
        private void InitializeFigures()
        {
            int width, height;

            SDL.SDL_GetWindowSize(_window, out width, out height);

            _rectangle = FiguresFactory.CreateRectangle(
                width / 2, height / 2, _defaultRotationAngle,
                _offsetFromBorders, width - _offsetFromBorders, _offsetFromBorders, height - _offsetFromBorders,
                width - 300, height - 300
                );
            _trapeze = FiguresFactory.CreateTrapeze(
                115, height / 2 + 15, _defaultRotationAngle,
                _offsetFromBorders, width - _offsetFromBorders, _offsetFromBorders, height - _offsetFromBorders,
                200, 100
                );
            _ellipse = FiguresFactory.CreateEllipse(
                width - 100, height / 2, _defaultRotationAngle,
                _offsetFromBorders, width - _offsetFromBorders, _offsetFromBorders, height - _offsetFromBorders,
                100, 57
                );
            _currentFigure = _trapeze;
            PerformClipping();
        }
Ejemplo n.º 12
0
 private void LineButtonClicked(object sender, EventArgs e)
 {
     tool         = LineButton.Text;
     Factory      = new CreateLine();
     isToolChosen = true;
 }
Ejemplo n.º 13
0
        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);

        }
Ejemplo n.º 14
0
 public void SetFactory(FiguresFactory factory)
 {
     CurrentFactory = factory;
 }
Ejemplo n.º 15
0
 private void OvalButtonClicked(object sender, EventArgs e)
 {
     tool         = OvalButton.Text;
     Factory      = new CreateOval();
     isToolChosen = true;
 }
Ejemplo n.º 16
0
 private void StarButtonClicked(object sender, EventArgs e)
 {
     tool         = StarButton.Text;
     Factory      = new CreateStar();
     isToolChosen = true;
 }
Ejemplo n.º 17
0
 private void TriButtonClicked(object sender, EventArgs e)
 {
     tool         = TriButton.Text;
     Factory      = new CreateTriangle();
     isToolChosen = true;
 }
Ejemplo n.º 18
0
        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 }));
        }
Ejemplo n.º 19
0
        private void SetInitialBoardModel()
        {
            boardModel.Figures.Clear();


            //#region Fill all figures in the board model

            int   otherFiguresRowNumber = 1;
            int   pawnsRowNumber        = 2;
            Color color = Color.Black;

            for (int rowNumber = 1; rowNumber <= 2; rowNumber++)
            {
                if (rowNumber == 2)
                {
                    pawnsRowNumber        = 7;
                    otherFiguresRowNumber = 8;
                    color = Color.White;
                }

                for (int columnNumber = 1; columnNumber <= 8; columnNumber++)
                {
                    FiguresFactory figuresFactory = new FiguresFactory();
                    var            pawn           = figuresFactory.getPawn();
                    var            adjustedFigure = this.SetFigureInitialValues(pawn, columnNumber.ToString() + color + pawn.Type,
                                                                                columnNumber, pawnsRowNumber, color);
                    boardModel.Figures.Add(adjustedFigure);

                    Figure specialFigure = null;
                    switch (columnNumber)
                    {
                    case 1:
                        specialFigure = figuresFactory.getRook();
                        break;

                    case 2:
                        specialFigure = figuresFactory.getKnight();
                        break;

                    case 3:
                        specialFigure = figuresFactory.getBishop();
                        break;

                    case 4:
                        specialFigure = figuresFactory.getQueen();
                        break;

                    case 5:
                        specialFigure = figuresFactory.getKing();
                        break;

                    case 6:
                        specialFigure = figuresFactory.getBishop();
                        break;

                    case 7:
                        specialFigure = figuresFactory.getKnight();
                        break;

                    case 8:
                        specialFigure = figuresFactory.getRook();
                        break;
                    }

                    adjustedFigure = this.SetFigureInitialValues(specialFigure, columnNumber.ToString() + color + specialFigure.Type,
                                                                 columnNumber, otherFiguresRowNumber, color);

                    boardModel.Figures.Add(adjustedFigure);
                }
            }

            //#endregion

            //#region Calculate possible moves on all figures in the board

            for (int i = 0; i < boardModel.Figures.Count; i++)
            {
                switch (boardModel.Figures[i].Type)
                {
                case "pawn":
                    boardModel.Figures[i] = Pawn.CalculatePossibleMoves(boardModel, boardModel.Figures[i]);
                    break;
                }
            }

            //#endregion
        }
Ejemplo n.º 20
0
 private void RhombusButtonClicked(object sender, EventArgs e)
 {
     tool         = RhombusButton.Text;
     Factory      = new CreateRhombus();
     isToolChosen = true;
 }