/// <summary>
        /// Method Write
        /// </summary>
        /// <param name="intoBox">Input List</param>
        public void Write(string output, List <IFigure> intoBox)
        {
            XmlWriter xmlWriter = XmlWriter.Create(output);

            xmlWriter.WriteStartDocument();
            xmlWriter.WriteStartElement("Boxs");
            foreach (var i in intoBox)
            {
                switch (i.GetType().Name)
                {
                case "CircleMadeByFilm":
                {
                    CircleMadeByFilm c1 = (CircleMadeByFilm)i;
                    xmlWriter.WriteStartElement("figure");
                    xmlWriter.WriteAttributeString("type", "Circle");
                    xmlWriter.WriteStartElement("material");
                    xmlWriter.WriteString("Film");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("color");
                    xmlWriter.WriteString("None");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("diameter");
                    xmlWriter.WriteString("" + c1.Diameter);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteEndElement();
                    break;
                }

                case "RectangleMadeByFilm":
                {
                    RectangleMadeByFilm r1 = (RectangleMadeByFilm)i;
                    xmlWriter.WriteStartElement("figure");
                    xmlWriter.WriteAttributeString("type", "Rectangle");
                    xmlWriter.WriteStartElement("material");
                    xmlWriter.WriteString("Film");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("color");
                    xmlWriter.WriteString("None");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("height");
                    xmlWriter.WriteString("" + r1.Height);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("width");
                    xmlWriter.WriteString("" + r1.Width);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteEndElement();
                    break;
                }

                case "SquareMadeByFilm":
                {
                    SquareMadeByFilm s1 = (SquareMadeByFilm)i;
                    xmlWriter.WriteStartElement("figure");
                    xmlWriter.WriteAttributeString("type", "Square");
                    xmlWriter.WriteStartElement("material");
                    xmlWriter.WriteString("Film");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("color");
                    xmlWriter.WriteString("None");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("height");
                    xmlWriter.WriteString("" + s1.A);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteEndElement();
                    break;
                }

                case "TriangleMadeByFilm":
                {
                    TriangleMadeByFilm t1 = (TriangleMadeByFilm)i;
                    xmlWriter.WriteStartElement("figure");
                    xmlWriter.WriteAttributeString("type", "Triangle");
                    xmlWriter.WriteStartElement("material");
                    xmlWriter.WriteString("Film");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("color");
                    xmlWriter.WriteString("None");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("side_a");
                    xmlWriter.WriteString("" + t1.A);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("side_b");
                    xmlWriter.WriteString("" + t1.B);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("side_c");
                    xmlWriter.WriteString("" + t1.C);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteEndElement();
                    break;
                }

                case "CircleMadeByPaper":
                {
                    CircleMadeByPaper c1 = (CircleMadeByPaper)i;
                    xmlWriter.WriteStartElement("figure");
                    xmlWriter.WriteAttributeString("type", "Circle");
                    xmlWriter.WriteStartElement("material");
                    xmlWriter.WriteString("Paper");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("color");
                    xmlWriter.WriteString("" + c1.Color);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("diameter");
                    xmlWriter.WriteString("" + c1.Diameter);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteEndElement();
                    break;
                }

                case "RectangleMadeByPaper":
                {
                    RectangleMadeByPaper r1 = (RectangleMadeByPaper)i;
                    xmlWriter.WriteStartElement("figure");
                    xmlWriter.WriteAttributeString("type", "Rectangle");
                    xmlWriter.WriteStartElement("material");
                    xmlWriter.WriteString("Paper");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("color");
                    xmlWriter.WriteString("" + r1.Color);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("height");
                    xmlWriter.WriteString("" + r1.Height);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("width");
                    xmlWriter.WriteString("" + r1.Width);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteEndElement();
                    break;
                }

                case "SquareMadeByPaper":
                {
                    SquareMadeByPaper s1 = (SquareMadeByPaper)i;
                    xmlWriter.WriteStartElement("figure");
                    xmlWriter.WriteAttributeString("type", "Square");
                    xmlWriter.WriteStartElement("material");
                    xmlWriter.WriteString("Paper");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("color");
                    xmlWriter.WriteString("" + s1.Color);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("height");
                    xmlWriter.WriteString("" + s1.A);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteEndElement();
                    break;
                }

                case "TriangleMadeByPaper":
                {
                    TriangleMadeByPaper t1 = (TriangleMadeByPaper)i;
                    xmlWriter.WriteStartElement("figure");
                    xmlWriter.WriteAttributeString("type", "Triangle");
                    xmlWriter.WriteStartElement("material");
                    xmlWriter.WriteString("Paper");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("color");
                    xmlWriter.WriteString("" + t1.Color);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("side_a");
                    xmlWriter.WriteString("" + t1.A);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("side_b");
                    xmlWriter.WriteString("" + t1.B);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("side_c");
                    xmlWriter.WriteString("" + t1.C);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteEndElement();
                    break;
                }
                }
            }
            xmlWriter.WriteEndDocument();
            xmlWriter.Close();
        }
        /// <summary>
        /// Create new figure
        /// </summary>
        /// <param name="material">Material of new figure</param>
        /// <param name="form">Form of new figure</param>
        /// <param name="ps">Array of other params</param>
        /// <returns>Figure</returns>
        public IFigure CreateFigure(Material material, Form form, params float[] ps)
        {
            IFigure figure;

            switch (material)
            {
            case Material.Film:
            {
                switch (form)
                {
                case Form.Circle:
                {
                    if (ps.Length == 1)
                    {
                        figure = new CircleMadeByFilm(ps[0]);
                        break;
                    }
                    else
                    {
                        throw new Exception("Wrong input parameters");
                    }
                }

                case Form.Rectangle:
                {
                    if (ps.Length == 2)
                    {
                        figure = new RectangleMadeByFilm(ps[0], ps[1]);
                        break;
                    }
                    else
                    {
                        throw new Exception("Wrong input parameters");
                    }
                }

                case Form.Square:
                {
                    if (ps.Length == 1)
                    {
                        figure = new SquareMadeByFilm(ps[0]);
                        break;
                    }
                    else
                    {
                        throw new Exception("Wrong input parameters");
                    }
                }

                case Form.Triangle:
                {
                    if (ps.Length == 3)
                    {
                        figure = new TriangleMadeByFilm(ps[0], ps[1], ps[2]);
                        break;
                    }
                    else
                    {
                        throw new Exception("Wrong input parameters");
                    }
                }

                default: throw new Exception("Wrong input Form");
                }
                break;
            }

            case Material.Paper:
            {
                switch (form)
                {
                case Form.Circle:
                {
                    if (ps.Length == 1)
                    {
                        figure = new CircleMadeByPaper(ps[0]);
                        break;
                    }
                    else
                    {
                        throw new Exception("Wrong input parameters");
                    }
                }

                case Form.Rectangle:
                {
                    if (ps.Length == 2)
                    {
                        figure = new RectangleMadeByPaper(ps[0], ps[1]);
                        break;
                    }
                    else
                    {
                        throw new Exception("Wrong input parameters");
                    }
                }

                case Form.Square:
                {
                    if (ps.Length == 1)
                    {
                        figure = new SquareMadeByPaper(ps[0]);
                        break;
                    }
                    else
                    {
                        throw new Exception("Wrong input parameters");
                    }
                }

                case Form.Triangle:
                {
                    if (ps.Length == 3)
                    {
                        figure = new TriangleMadeByPaper(ps[0], ps[1], ps[2]);
                        break;
                    }
                    else
                    {
                        throw new Exception("Wrong input parameters");
                    }
                }

                default: throw new Exception("Wrong input Form");
                }
                break;
            }

            default: throw new Exception("Wrong input Material");
            }
            return(figure);
        }