public override SvgPathSegList VisitRectElement(SvgRectElement element)
        {
            var result = new SvgPathSegList();

            var x  = element.X?.Value ?? 0;
            var y  = element.Y?.Value ?? 0;
            var rx = element.RadiusX;
            var ry = element.RadiusY;
            var w  = element.Width?.Value ?? 0;
            var h  = element.Height?.Value ?? 0;

            result.Add(new SvgPathSegMovetoAbs(x + rx, y));
            result.Add(new SvgPathSegLinetoHorizontalAbs(x + w - rx));
            result.Add(new SvgPathSegArcAbs(rx, ry, 0, false, true, x + w, y + ry));

            result.Add(new SvgPathSegLinetoAbs(x + w, y + h - ry));
            result.Add(new SvgPathSegArcAbs(rx, ry, 0, false, true, x + w - rx, y + h));
            result.Add(new SvgPathSegLinetoAbs(x + rx, y + h));

            result.Add(new SvgPathSegArcAbs(rx, ry, 0, false, true, x, y + h - ry));
            result.Add(new SvgPathSegLinetoAbs(x, y + ry));
            result.Add(new SvgPathSegArcAbs(rx, ry, 0, false, true, x + rx, y));

            result.Add(new SvgPathSegClosePath());

            return(result);
        }
示例#2
0
        public void TestInternalReference()
        {
            SvgUseElement  elm  = Util.GetXmlElement("<use xlink:href='#foo' /><rect id='foo' width='100' height='100' />", "", "use") as SvgUseElement;
            SvgRectElement rect = elm.OwnerDocument.SelectSingleNode("//*[@id='foo']") as SvgRectElement;

            Assert.IsNotNull(elm.InstanceRoot);
            Assert.AreEqual(elm, elm.InstanceRoot.CorrespondingUseElement);
            Assert.AreEqual(rect, elm.InstanceRoot.CorrespondingElement);
        }
示例#3
0
 public void SetUp()
 {
     if (doc == null)
     {
         SvgWindow wnd = new SvgWindow(100, 100, null);
         doc = new SvgDocument(wnd);
         doc.Load("events_01.svg");
         rect = (SvgRectElement)doc.SelectSingleNode("//*[local-name()='rect']");
         g    = (SvgGElement)doc.SelectSingleNode("//*[local-name()='g']");
     }
     eventStatus = 0;
 }
示例#4
0
        protected override void RenderRect(CanvasDrawingSession session, SvgRectElement element)
        {
            var x      = this.LengthConverter.ConvertX(element.X);
            var y      = this.LengthConverter.ConvertY(element.Y);
            var width  = this.LengthConverter.ConvertX(element.Width);
            var height = this.LengthConverter.ConvertY(element.Height);
            var rx     = this.LengthConverter.ConvertX(element.RoundedX);
            var ry     = this.LengthConverter.ConvertX(element.RoundedY);

            using (var geometry = CanvasGeometry.CreateRoundedRectangle(this.ResourceCreator, x, y, width, height, rx, ry))
            {
                this.RenderGeometory(session, geometry, element.Transform.Result, element.Style);
            }
        }
示例#5
0
        public override void VisitRectElement(SvgRectElement element)
        {
            // rect render visitor here???
            base.VisitRectElement(element);
            var x      = element.X?.Value ?? 0;
            var y      = element.Y?.Value ?? 0;
            var width  = element.Width?.Value ?? 0;
            var height = element.Height?.Value ?? 0;
            var rx     = element.RadiusX;
            var ry     = element.RadiusY;

            var rect = new RoundedRect(x, y, width, height, rx, ry);

            this.RenderShapeToCanvas(element, rect);
        }
示例#6
0
        public void ChangeStyleAndRender()
        {
            string svgPath = Path.Combine(dirPath, "rectangleFillStroke.svg");

            doc.Load(svgPath);

            CompareUtil util = new CompareUtil();

            Assert.IsTrue(util.CompareImages(renderer.Render(doc), Path.Combine(dirPath, "rectangleFillStroke.svg.png")));

            SvgRectElement elm = doc.GetElementById("theRect") as SvgRectElement;

            elm.Style.SetProperty("fill", "yellow", "");

            Assert.IsTrue(util.CompareImages(renderer.Render(doc), Path.Combine(dirPath, "changeStyle.png")));
        }
示例#7
0
        public static GraphicsPath CreatePath(SvgRectElement element)
        {
            GraphicsPath gp = new GraphicsPath();

            RectangleF rect = new RectangleF((float)element.X.AnimVal.Value,
                                             (float)element.Y.AnimVal.Value, (float)element.Width.AnimVal.Value,
                                             (float)element.Height.AnimVal.Value);

            float rx = (float)element.Rx.AnimVal.Value;
            float ry = (float)element.Ry.AnimVal.Value;

            if (rx == 0F && ry == 0F)
            {
                gp.AddRectangle(rect);
            }
            else
            {
                AddRoundedRect(gp, rect, rx, ry);
            }

            return(gp);
        }
        private void InsertSquare(SvgGroupElement group, int xIndex, int yIndex)
        {
            bool isBlack = ((xIndex + yIndex) % 2 == 0);

            if (!isBlack)
            {
                // nothing to draw in case of a white square
                return;
            }

            float x = m_UpperLeft.X + xIndex * m_SquareLength;
            float y = m_UpperLeft.Y + yIndex * m_SquareLength;

            SvgRectElement rectangle = new SvgRectElement(
                x, y,
                m_SquareLength, m_SquareLength
                );

            rectangle.Style = s_FilledBlack;

            group.AddChild(rectangle);
        }
        public void AddSquares(float yOffset, float xOffset, float sideLength, int xCount, int yCount)
        {
            SvgGroupElement squaresGroup = new SvgGroupElement("Squares");

            squaresGroup.Style = s_NormalLineStyle;

            float xStart = this.Origin.X + xOffset - xCount / 2.0F * sideLength;
            float yStart = this.Origin.Y + yOffset;

            for (int i = 0; i < xCount; i++)
            {
                for (int j = 0; j < yCount; j++)
                {
                    SvgRectElement rectElement = new SvgRectElement(
                        GetSvgLength(xStart + i * sideLength), GetSvgLength(yStart + j * sideLength),
                        GetSvgLength(sideLength), GetSvgLength(sideLength));

                    squaresGroup.AddChild(rectElement);
                }
            }

            this.Root.AddChild(squaresGroup);
        }
        public static GraphicsPath CreatePath(SvgRectElement element)
        {
            float dx     = (float)Math.Round(element.X.AnimVal.Value, 4);
            float dy     = (float)Math.Round(element.Y.AnimVal.Value, 4);
            float width  = (float)Math.Round(element.Width.AnimVal.Value, 4);
            float height = (float)Math.Round(element.Height.AnimVal.Value, 4);
            float rx     = (float)Math.Round(element.Rx.AnimVal.Value, 4);
            float ry     = (float)Math.Round(element.Ry.AnimVal.Value, 4);

            if (width <= 0 || height <= 0)
            {
                return(null);
            }
            if (rx <= 0 && ry > 0)
            {
                rx = ry;
            }
            else if (rx > 0 && ry <= 0)
            {
                ry = rx;
            }

            GraphicsPath gp = new GraphicsPath();

            RectangleF rect = new RectangleF(dx, dy, width, height);

            if (rx.Equals(0F) && ry.Equals(0F))
            {
                gp.AddRectangle(rect);
            }
            else
            {
                AddRoundedRect(gp, rect, rx, ry);
            }

            return(gp);
        }
示例#11
0
        public Geometry CreateGeometry(SvgRectElement element)
        {
            double dx     = Math.Round(element.X.AnimVal.Value, 4);
            double dy     = Math.Round(element.Y.AnimVal.Value, 4);
            double width  = Math.Round(element.Width.AnimVal.Value, 4);
            double height = Math.Round(element.Height.AnimVal.Value, 4);
            double rx     = Math.Round(element.Rx.AnimVal.Value, 4);
            double ry     = Math.Round(element.Ry.AnimVal.Value, 4);

            if (width <= 0 || height <= 0)
            {
                return(null);
            }
            if (rx <= 0 && ry > 0)
            {
                rx = ry;
            }
            else if (rx > 0 && ry <= 0)
            {
                ry = rx;
            }

            return(new RectangleGeometry(new Rect(dx, dy, width, height), rx, ry));
        }
示例#12
0
 public virtual void VisitRectElement(SvgRectElement element)
 => DefaultVisit(element);
 public override void VisitRectElement(SvgRectElement element)
 => VisitPathSegList(element, element.ConvertToPathSegList());
示例#14
0
 protected abstract void RenderRect(TSession session, SvgRectElement element);