void WriteClusterRectBoundary(RectangularClusterBoundary recClBnd) {
            if (recClBnd == null) return;
            WriteStartElement(GeometryToken.RectangularClusterBoundary);

            WriteAttribute(GeometryToken.LeftMargin, recClBnd.LeftMargin);
            WriteAttribute(GeometryToken.RightMargin, recClBnd.RightMargin);
            WriteAttribute(GeometryToken.TopMargin, recClBnd.TopMargin);
            WriteAttribute(GeometryToken.BottomMargin, recClBnd.BottomMargin);
            if (recClBnd.DefaultMarginIsSet) {
                WriteAttribute(GeometryToken.DefaultLeftMargin, recClBnd.DefaultLeftMargin);
                WriteAttribute(GeometryToken.DefaultRightMargin, recClBnd.DefaultRightMargin);
                WriteAttribute(GeometryToken.DefaultTopMargin, recClBnd.DefaultTopMargin);
                WriteAttribute(GeometryToken.DefaultBottomMargin, recClBnd.DefaultBottomMargin);
            }
            WriteAttribute(GeometryToken.GenerateFixedConstraints, recClBnd.GenerateFixedConstraints);
            WriteAttribute(GeometryToken.GenerateFixedConstraintsDefault, 
                recClBnd.GenerateFixedConstraintsDefault);
            WriteAttribute(GeometryToken.MinNodeHeight, recClBnd.MinHeight);
            WriteAttribute(GeometryToken.MinNodeWidth, recClBnd.MinWidth);
            WriteRect(recClBnd.Rect.Left, recClBnd.Rect.Bottom, recClBnd.Rect.Width, recClBnd.Rect.Height, recClBnd.RadiusX, recClBnd.RadiusY);
            WriteBorderInfo(GeometryToken.RightBorderInfo, recClBnd.RightBorderInfo);
            WriteBorderInfo(GeometryToken.LeftBorderInfo, recClBnd.LeftBorderInfo);
            WriteBorderInfo(GeometryToken.TopBorderInfo, recClBnd.TopBorderInfo);
            WriteBorderInfo(GeometryToken.BottomBorderInfo, recClBnd.BottomBorderInfo);
            WriteEndElement();
        }
        RectangularClusterBoundary ReadClusterRectBoundary() {
            RectangularClusterBoundary recClBnd = new RectangularClusterBoundary {
                LeftMargin = GetDoubleAttribute(GeometryToken.LeftMargin),
                RightMargin = GetDoubleAttribute(GeometryToken.RightMargin),
                TopMargin = GetDoubleAttribute(GeometryToken.TopMargin),
                BottomMargin = GetDoubleAttribute(GeometryToken.BottomMargin)
            };

            if (GetAttribute(GeometryToken.DefaultLeftMargin) != null) {
                var defaultLeftMargin = GetDoubleAttribute(GeometryToken.DefaultLeftMargin);
                var defaultRightMargin = GetDoubleAttribute(GeometryToken.DefaultRightMargin);
                var defaultTopMargin = GetDoubleAttribute(GeometryToken.DefaultBottomMargin);
                var defaultBottomMargin = GetDoubleAttribute(GeometryToken.DefaultBottomMargin);
                recClBnd.StoreDefaultMargin(defaultLeftMargin, defaultRightMargin, defaultBottomMargin, defaultTopMargin);
            }

            recClBnd.GenerateFixedConstraints = GetBoolAttributeOrDefault(GeometryToken.GenerateFixedConstraints, false);
            recClBnd.GenerateFixedConstraintsDefault =
                GetBoolAttributeOrDefault(GeometryToken.GenerateFixedConstraintsDefault, false);

            recClBnd.MinHeight = GetDoubleAttribute(GeometryToken.MinNodeHeight);
            recClBnd.MinWidth = GetDoubleAttribute(GeometryToken.MinNodeWidth);

            double ry;
            double left;
            double bottom;
            double w;
            double h;
            double rx;

            XmlRead();
            ReadRectParams(out left, out bottom, out w, out h, out rx, out ry);
            recClBnd.Rect = new Rectangle(left, bottom, new Point(w, h));
            recClBnd.RadiusX = rx;
            recClBnd.RadiusY = ry;


            recClBnd.RightBorderInfo = ReadBorderInfo(GeometryToken.RightBorderInfo);
            recClBnd.LeftBorderInfo = ReadBorderInfo(GeometryToken.LeftBorderInfo);
            recClBnd.TopBorderInfo = ReadBorderInfo(GeometryToken.TopBorderInfo);
            recClBnd.BottomBorderInfo = ReadBorderInfo(GeometryToken.BottomBorderInfo);
            XmlRead();
            ReadEndElement();
            return recClBnd;
        }