Beispiel #1
0
        private void MoveOutOfSvgElement(SvgSvgElement svgElm)
        {
            while (svgElm.ChildNodes.Count > 0)
            {
                oldParent.AppendChild(svgElm.ChildNodes[0]);
            }

            _patternElement.RemoveChild(svgElm);
        }
Beispiel #2
0
        private DrawingGroup GetImage(WpfDrawingContext context, Rect bounds)
        {
            PrepareTargetPattern();

            _renderedElement.PatternBounds = new SvgRect(bounds.X, bounds.Y, bounds.Width, bounds.Height);

            WpfDrawingRenderer renderer = new WpfDrawingRenderer();

            renderer.Window = _renderedElement.OwnerDocument.Window as SvgWindow;

//            WpfDrawingSettings settings = context.Settings.Clone();
            WpfDrawingSettings settings = context.Settings;
            bool isTextAsGeometry       = settings.TextAsGeometry;

            settings.TextAsGeometry = true;
            WpfDrawingContext patternContext = new WpfDrawingContext(true, settings);

            patternContext.Name = "Pattern";

            patternContext.Initialize(null, context.FontFamilyVisitor, null);

            if (_renderedElement.PatternContentUnits.AnimVal.Equals((ushort)SvgUnitType.ObjectBoundingBox))
            {
                //                svgElm.SetAttribute("viewBox", "0 0 1 1");
            }
            else
            {
                _isUserSpace = true;
            }

            //SvgSvgElement elm = MoveIntoSvgElement();
            //renderer.Render(elm, patternContext);

            //SvgPatternElement patternElement = _patternElement.ReferencedElement;
            //if (patternElement != null)
            //{
            //    if (patternElement.ReferencedElement != null)
            //    {
            //        _renderedElement = patternElement.ReferencedElement;
            //        renderer.RenderAs(patternElement.ReferencedElement, patternContext);
            //    }
            //    else
            //    {
            //        _renderedElement = patternElement;
            //        renderer.RenderAs(patternElement, patternContext);
            //    }
            //}
            //else
            //{
            //    _renderedElement = _patternElement;
            //    renderer.RenderAs(_patternElement, patternContext);
            //}
            renderer.RenderAs(_renderedElement, patternContext);
            DrawingGroup rootGroup = renderer.Drawing;

            //MoveOutOfSvgElement(elm);

            if (_renderedElement != null && _renderedElement != _patternElement)
            {
                _patternElement.RemoveChild(_renderedElement);
            }

            settings.TextAsGeometry = isTextAsGeometry;

            if (rootGroup.Children.Count == 1)
            {
                var childGroup = rootGroup.Children[0] as DrawingGroup;
                if (childGroup != null)
                {
                    return(childGroup);
                }
            }

            return(rootGroup);
        }