private void ApplyXmlModel(XmlModel xmlModel)
        {
            if (CircleDiagramModel == null ||
                !CircleDiagramModel.IsCorrect() ||
                xmlModel == null)
            {
                return;
            }

            var countLevels        = xmlModel.CountLevels;
            var mainBackground     = SerializeUtils.IntToBrush(xmlModel.MainBackgroundColor);
            var ringBackground     = SerializeUtils.IntToBrush(xmlModel.RingBackgroundColor);
            var intervalBackground = SerializeUtils.IntToBrush(xmlModel.IntervalBackgroundColor);
            var nodeBorder         = new Pen(SerializeUtils.IntToColor(xmlModel.NodeBorderColor),
                                             xmlModel.NodeBorderThickness);
            var ringBorder = new Pen(SerializeUtils.IntToColor(xmlModel.RingBorderColor),
                                     xmlModel.RingBorderThickness);
            var relationshipPen = new Pen(SerializeUtils.IntToColor(xmlModel.RelationshipPenColor),
                                          xmlModel.RelationshipPenThickness);
            var numerationBrush       = SerializeUtils.IntToBrush(xmlModel.NumerationColor);
            var numerationFont        = SerializeUtils.StringToFont(xmlModel.NumerationFont);
            var numerationBeginNumber = xmlModel.NumerationBeginNumber;
            var numerationIsInverted  = xmlModel.NumerationIsInverted;
            var nodes = xmlModel.Nodes
                        .Select(GetCircleDiagramNode)
                        .Where(g => g != null).ToList();
            var relationships = xmlModel.Relationships
                                .Select(g => GetCircleDiagramRelationship(g, nodes))
                                .Where(g => g != null).ToList();

            CircleDiagramModel.ChangeParametersValues(countLevels, mainBackground, ringBackground,
                                                      intervalBackground, nodeBorder, ringBorder, relationshipPen,
                                                      numerationBrush, numerationFont, numerationBeginNumber, numerationIsInverted,
                                                      nodes, relationships);
        }
        private XmlModel GetXmlModel()
        {
            if (CircleDiagramModel == null || !CircleDiagramModel.IsCorrect())
            {
                return(null);
            }
            var countLevels              = CircleDiagramModel.CountLevels;
            var mainBackgroundColor      = SerializeUtils.BrushToInt(CircleDiagramModel.MainBackground);
            var ringBackgroundColor      = SerializeUtils.BrushToInt(CircleDiagramModel.RingBackground);
            var intervalBackgroundColor  = SerializeUtils.BrushToInt(CircleDiagramModel.IntervalBackground);
            var nodeBorderColor          = SerializeUtils.ColorToInt(CircleDiagramModel.NodeBorder.Color);
            var nodeBorderThickness      = CircleDiagramModel.NodeBorder.Width;
            var ringBorderColor          = SerializeUtils.ColorToInt(CircleDiagramModel.RingBorder.Color);
            var ringBorderThickness      = CircleDiagramModel.RingBorder.Width;
            var relationshipPenColor     = SerializeUtils.ColorToInt(CircleDiagramModel.RelationshipPen.Color);
            var relationshipPenThickness = CircleDiagramModel.RelationshipPen.Width;
            var numerationColor          = SerializeUtils.BrushToInt(CircleDiagramModel.NumerationBrush);
            var numerationFont           = SerializeUtils.FontToString(CircleDiagramModel.NumerationFont);
            var numerationBeginNumber    = CircleDiagramModel.NumerationBeginNumber;
            var numerationIsInverted     = CircleDiagramModel.NumerationIsInverted;

            return(new XmlModel(countLevels, mainBackgroundColor, ringBackgroundColor,
                                intervalBackgroundColor, nodeBorderColor, nodeBorderThickness, ringBorderColor,
                                ringBorderThickness, relationshipPenColor, relationshipPenThickness,
                                numerationColor, numerationFont, numerationBeginNumber, numerationIsInverted,
                                CircleDiagramModel.Nodes.Select(GetXmlNode).ToList(),
                                CircleDiagramModel.Relationships.Select(GetXmlRelationship).ToList()));
        }
        private static CircleDiagramNode GetCircleDiagramNode(XmlNode node)
        {
            if (node == null)
            {
                return(null);
            }

            var name              = node.Name;
            var text              = node.Text;
            var startAngle        = node.StartAngle;
            var sweepAngle        = node.SweepAngle;
            var startCircleNumber = node.StartCircleNumber;
            var countCircles      = node.CountCircles;
            var background        = SerializeUtils.IntToBrush(node.BackgroundColor);
            var textBrush         = SerializeUtils.IntToBrush(node.TextColor);
            var textFont          = SerializeUtils.StringToFont(node.TextFont);

            return(new CircleDiagramNode(name, text, startAngle, sweepAngle,
                                         startCircleNumber, countCircles, background, textBrush, textFont));
        }
        private static XmlNode GetXmlNode(CircleDiagramNode node)
        {
            if (node == null)
            {
                return(null);
            }

            var name              = node.Name;
            var text              = node.Text;
            var startAngle        = node.StartAngle;
            var sweepAngle        = node.SweepAngle;
            var startCircleNumber = node.StartCircleNumber;
            var countCircles      = node.CountCircles;
            var backgroundColor   = SerializeUtils.BrushToInt(node.Background);
            var textColor         = SerializeUtils.BrushToInt(node.TextBrush);
            var textFont          = SerializeUtils.FontToString(node.TextFont);

            return(new XmlNode(name, text, startAngle, sweepAngle,
                               startCircleNumber, countCircles, backgroundColor, textColor, textFont));
        }