Svg2Xaml.SvgMaskElement.GetClipGeometry C# (CSharp) Method

GetClipGeometry() public method

public GetClipGeometry ( ) : System.Windows.Media.Geometry
return System.Windows.Media.Geometry
        public Geometry GetClipGeometry()
        {
            GeometryGroup geometry_group = new GeometryGroup();

              foreach(SvgBaseElement child_element in Children)
              {
            SvgBaseElement element = child_element;
            if(element is SvgUseElement)
              element = (element as SvgUseElement).GetElement();

            if(element is SvgDrawableBaseElement)
            {
              Geometry geometry = (element as SvgDrawableBaseElement).GetBaseGeometry();
              if(geometry != null)
              {
            if((element as SvgDrawableBaseElement).Transform != null)
            {
              geometry.Transform = (element as SvgDrawableBaseElement).Transform.ToTransform();
            }
            geometry_group.Children.Add(geometry);
              }
            }
            else
              throw new NotImplementedException();
              }

              return geometry_group;
        }

Usage Example

        //==========================================================================
        public override Drawing Draw()
        {
            DrawingGroup drawing_group = new DrawingGroup();

            drawing_group.Opacity = Opacity.ToDouble();
            if (Transform != null)
            {
                drawing_group.Transform = Transform.ToTransform();
            }

            foreach (SvgBaseElement element in Children)
            {
                Drawing drawing = null;

                if (element is SvgDrawableBaseElement)
                {
                    drawing = (element as SvgDrawableBaseElement).Draw();
                }
                else if (element is SvgDrawableContainerBaseElement)
                {
                    drawing = (element as SvgDrawableContainerBaseElement).Draw();
                }

                if (drawing != null)
                {
                    drawing_group.Children.Add(drawing);
                }
            }

            if (Filter != null)
            {
                SvgFilterElement filter_element = Document.Elements[Filter.Id] as SvgFilterElement;
                if (filter_element != null)
                {
                    drawing_group.BitmapEffect = filter_element.ToBitmapEffect();
                }
            }

            if (ClipPath != null)
            {
                SvgClipPathElement clip_path_element = Document.Elements[ClipPath.Id] as SvgClipPathElement;
                if (clip_path_element != null)
                {
                    drawing_group.ClipGeometry = clip_path_element.GetClipGeometry();
                }
            }

            if (Mask != null)
            {
                SvgMaskElement mask_element = Document.Elements[Mask.Id] as SvgMaskElement;
                if (mask_element != null)
                {
                    drawing_group.OpacityMask = mask_element.GetOpacityMask();

                    GeometryGroup geometry_group = new GeometryGroup();

                    if (drawing_group.ClipGeometry != null)
                    {
                        geometry_group.Children.Add(drawing_group.ClipGeometry);
                    }

                    geometry_group.Children.Add(mask_element.GetClipGeometry());
                    drawing_group.ClipGeometry = geometry_group;
                }
            }

            return(drawing_group);
        }