public DrawableMulti ToMultiPolygon(bool disposePath = true)
        {
            DrawableMulti multi = new DrawableMulti();

            if (Path == null)
            {
                return(null);
            }

            using (GraphicsPathIterator iterator = new GraphicsPathIterator(Path)) {
                GraphicsPath subpath = new GraphicsPath();
                bool         closed;
                while (iterator.NextSubpath(subpath, out closed) != 0)
                {
                    DrawablePolygon shape = new DrawablePolygon {
                        Points    = subpath.PathPoints,
                        Brush     = Brush,
                        Pen       = Pen,
                        PenClosed = closed
                    };
                    multi.Shapes.Add(shape);
                }
                subpath.Dispose();
            }

            if (disposePath)
            {
                Path?.Dispose();
            }

            return(multi);
        }
        public DrawableMulti ToMulti(MultiGen cb, bool disposePath = true)
        {
            DrawableMulti multi = new DrawableMulti();

            if (Path == null)
            {
                return(null);
            }

            using (GraphicsPathIterator iterator = new GraphicsPathIterator(Path)) {
                GraphicsPath subpath = new GraphicsPath();
                bool         closed;
                int          i = 0;
                while (iterator.NextSubpath(subpath, out closed) != 0)
                {
                    Drawable shape = cb(i++, subpath, Brush, Pen, closed);
                    if (shape != null)
                    {
                        multi.Shapes.Add(shape);
                    }
                }
                subpath.Dispose();
            }

            if (disposePath)
            {
                Path?.Dispose();
            }

            return(multi);
        }
        public override object Clone()
        {
            DrawableMulti clone = new DrawableMulti();

            if (Shapes == null)
            {
                return(clone);
            }
            clone.Shapes = new List <Drawable>(Shapes.Count);
            for (int i = 0; i < Shapes.Count; i++)
            {
                clone.Shapes.Add(Shapes[i]?.Clone() as Drawable);
            }
            return(clone);
        }