public void AddAlignmentLines()
        {
            SvgGroupElement alinmentLinesGroup = new SvgGroupElement("AlignmentLines");

            alinmentLinesGroup.Style = s_AlignmentLineStyle;

            SvgLineElement line1 = new SvgLineElement(
                GetSvgLength(this.Origin.X), GetSvgLength(0),
                GetSvgLength(this.Origin.X), GetSvgLength(this.Page.Width));

            alinmentLinesGroup.AddChild(line1);

            SvgLineElement line2 = new SvgLineElement(
                GetSvgLength(0), GetSvgLength(this.Origin.Y),
                GetSvgLength(this.Page.Width), GetSvgLength(this.Origin.Y));

            alinmentLinesGroup.AddChild(line2);

            float             radius       = 65;
            SvgEllipseElement cutOutCircle = new SvgEllipseElement(
                GetSvgLength(this.Origin.X), GetSvgLength(this.Origin.Y),
                GetSvgLength(radius), GetSvgLength(radius));

            alinmentLinesGroup.AddChild(cutOutCircle);

            this.Root.AddChild(alinmentLinesGroup);
        }
        public void AddCircles(float distance)
        {
            SvgGroupElement circlesGroup = new SvgGroupElement("Circles");

            InsertStyledElements(circlesGroup, GetCircles(distance));
            this.Root.AddChild(circlesGroup);
        }
        public void AddAngleLines(float deltaAngleDegree, float innerRadius)
        {
            SvgGroupElement angleLinesGroup = new SvgGroupElement("AngleLines");

            InsertStyledElements(angleLinesGroup, GetAngleLines(deltaAngleDegree, innerRadius));
            this.Root.AddChild(angleLinesGroup);
        }
        public void AddVerticalLines(float distance)
        {
            SvgGroupElement verticalLinesGroup = new SvgGroupElement("VerticalLines");

            InsertStyledElements(verticalLinesGroup, GetVerticalLines(distance));
            this.Root.AddChild(verticalLinesGroup);
        }
        public void AddHorizontalLines(float distance)
        {
            SvgGroupElement horizontalLinesGroup = new SvgGroupElement("HorizontalLines");

            InsertStyledElements(horizontalLinesGroup, GetHorizontalLines(distance));
            this.Root.AddChild(horizontalLinesGroup);
        }
        public string BuildSvg(Page page)
        {
            //this.Page = page;
            //this.Origin = new PointF(page.Width / 2, page.Height / 2);

            this.Root = new SvgSvgElement(
                page.SvgLengthWidth, page.SvgLengthHeight,
                new SvgNumList(new float[] { -page.Width / 2, -page.Height / 2, page.Width, page.Height }));

            SvgGroupElement mainGroup = new SvgGroupElement("Main");

            mainGroup.Style = s_MajorLineStyle;
            this.Root.AddChild(mainGroup);

            float outerRadius = 40f;

            AddCenteredCircle(mainGroup, outerRadius);
            AddCenteredCircle(mainGroup, 24.7f);
            AddCenteredCircle(mainGroup, 7.5f);
            AddGuideLines(mainGroup, outerRadius);

            float sideLength = 59f;
            float radius     = sideLength / 2f / (float)Math.Cos(30.0 / 180.0 * Math.PI);

            AddCenteredTriangle(mainGroup, sideLength, radius);
            AddCenteredCircle(mainGroup, radius);

            AddRays(mainGroup, outerRadius);

            return(this.Root.WriteSVGString(true, false));
        }
        private void InsertStyledElements(SvgGroupElement linesGroup, IEnumerable <SvgStyledTransformedElement> styledElements)
        {
            SvgGroupElement minorGroup = new SvgGroupElement("MinorLines");

            minorGroup.Style = s_MinorLineStyle;
            linesGroup.AddChild(minorGroup);

            SvgGroupElement normalGroup = new SvgGroupElement("NormalLines");

            normalGroup.Style = s_NormalLineStyle;
            linesGroup.AddChild(normalGroup);

            SvgGroupElement majorGroup = new SvgGroupElement("MajorLines");

            majorGroup.Style = s_MajorLineStyle;
            linesGroup.AddChild(majorGroup);

            int i = -1;

            foreach (SvgStyledTransformedElement styledElement in styledElements)
            {
                i++;
                if (i % 10 == 0)
                {
                    majorGroup.AddChild(styledElement);
                    continue;
                }
                if (i % 2 == 0)
                {
                    normalGroup.AddChild(styledElement);
                    continue;
                }
                minorGroup.AddChild(styledElement);
            }
        }
        private void AddCenteredCircle(SvgGroupElement group, float radius)
        {
            SvgEllipseElement circleElement = new SvgEllipseElement(
                0, 0,
                radius, radius);

            group.AddChild(circleElement);
        }
Exemple #9
0
        private void InsertSlices(SvgGroupElement group)
        {
            double angularWidth = 360.0 / this.SlotCount / 2;
            double angleOffset  = angularWidth * this.PhaseAngle / 360.0;

            for (int i = 0; i < this.SlotCount; i++)
            {
                double angle = 360.0 * i / this.SlotCount + angleOffset;
                AddSlice(group, this.OuterRadius, angle, angularWidth);
            }
        }
Exemple #10
0
        public void InsertSvg(SvgSvgElement root, int index)
        {
            SvgGroupElement slicesGroup = new SvgGroupElement("Slices" + index.ToString());

            slicesGroup.Style = s_FilledWhite;
            root.AddChild(slicesGroup);

            InsertSlices(slicesGroup);
            // Add inner black disk
            root.AddChild(EncoderDisk.CreateCenteredCircle(this.OuterRadius - this.SlotLength, s_FilledBlack));
        }
Exemple #11
0
        internal void Build(Wheel wheel, SvgSvgElement root)
        {
            SvgGroupElement helperLinesGroup = new SvgGroupElement("HelperLines");

            helperLinesGroup.Style = Styles.HelperLineStyle;
            root.AddChild(helperLinesGroup);

            // Wheel pitch circle
            helperLinesGroup.AddChild(SvgHelper.CreateCircle(wheel.Center, wheel.PitchDiameter / 2.0));

            // Wheel addendum circle
            helperLinesGroup.AddChild(SvgHelper.CreateCircle(wheel.Center, wheel.PitchDiameter / 2.0 + wheel.Addendum));

            // Wheel dedendum circle
            helperLinesGroup.AddChild(SvgHelper.CreateCircle(wheel.Center, wheel.PitchDiameter / 2.0 - wheel.Dedendum));

            // wheel center
            double halfCrossLength = 10;

            helperLinesGroup.AddChild(new SvgLineElement(wheel.Center.X - halfCrossLength, wheel.Center.Y, wheel.Center.X + halfCrossLength, wheel.Center.Y));
            helperLinesGroup.AddChild(new SvgLineElement(wheel.Center.X, wheel.Center.Y - halfCrossLength, wheel.Center.X, wheel.Center.Y + halfCrossLength));


            SvgGroupElement mainGroup = new SvgGroupElement("Main");

            mainGroup.Style = Styles.MinorLineStyle;
            root.AddChild(mainGroup);


            WheelTooth[]  teeth       = wheel.GetTeeth(0);
            StringBuilder pathBuilder = new StringBuilder();

            pathBuilder.AppendFormat(CultureInfo.InvariantCulture, "M{0},{1}", (float)teeth[0].DedendumIntersectLeft.X, (float)teeth[0].DedendumIntersectLeft.Y);
            for (int i = 0; i < teeth.Length; i++)
            {
                WheelTooth tooth     = teeth[i];
                WheelTooth nextTooth = teeth[(i + 1) % teeth.Length];
                InsertWheelToothPath(wheel, tooth, nextTooth, pathBuilder);
            }
            pathBuilder.Append(" z");

            SvgPath        svgPath        = new SvgPath(pathBuilder.ToString());
            SvgPathElement svgPathElement = new SvgPathElement();

            svgPathElement.D = svgPath;

            mainGroup.AddChild(svgPathElement);

            if (wheel.CenterHoleDiameter > 0)
            {
                mainGroup.AddChild(SvgHelper.CreateCircle(wheel.Center, wheel.CenterHoleDiameter / 2.0));
            }
        }
        private void AddRays(SvgGroupElement group, float radius)
        {
            double[] angles = { 90, 150, 210, 270, 330, 30 };             //, 120, 180, 240, 300 };

            foreach (double angle in angles)
            {
                SvgLineElement rayElement = new SvgLineElement(
                    0, 0,
                    radius * (float)Math.Cos(angle * Math.PI / 180), radius * (float)Math.Sin(angle * Math.PI / 180));
                group.AddChild(rayElement);
            }
        }
Exemple #13
0
        private void AddGuideLines(SvgGroupElement group, float radius)
        {
            SvgLineElement verticalLineElement = new SvgLineElement(
                0, radius,
                0, -radius);

            group.AddChild(verticalLineElement);

            SvgLineElement horizontalLineElement = new SvgLineElement(
                -radius, 0,
                radius, 0);

            group.AddChild(horizontalLineElement);
        }
Exemple #14
0
        private void AddSlice(SvgGroupElement group, double radius, double angle, double angularWidth)
        {
            PointF firstPointOnCircle  = GetPointOnCircle(radius, angle - angularWidth / 2.0);
            PointF secondPointOnCircle = GetPointOnCircle(radius, angle + angularWidth / 2.0);

            // for an explanation of the arc syntax see: http://www.codestore.net/store.nsf/unid/EPSD-5DTT4L
            string path = String.Format(
                CultureInfo.InvariantCulture,
                "M0,0 L{0},{1} A{2},{2} 0 0,1 {3},{4} z",
                firstPointOnCircle.X, firstPointOnCircle.Y, (float)radius, secondPointOnCircle.X, secondPointOnCircle.Y);

            SvgPath        svgPath        = new SvgPath(path);
            SvgPathElement svgPathElement = new SvgPathElement();

            svgPathElement.D = svgPath;
            group.AddChild(svgPathElement);
        }
        private string BuildSvg()
        {
            m_Root = new SvgSvgElement(
                m_Page.SvgLengthWidth, m_Page.SvgLengthHeight,
                new SvgNumList(new float[] { -m_Page.Width / 2, -m_Page.Height / 2, m_Page.Width, m_Page.Height }));

            SvgGroupElement mainGroup = new SvgGroupElement("Main");

            for (int xIndex = 0; xIndex < m_XCount; xIndex++)
            {
                for (int yIndex = 0; yIndex < m_YCount; yIndex++)
                {
                    InsertSquare(mainGroup, xIndex, yIndex);
                }
            }

            m_Root.AddChild(mainGroup);
            return(m_Root.WriteSVGString(true, false));
        }
Exemple #16
0
        public string BuildSvg(Page page)
        {
            SvgSvgElement root = new SvgSvgElement(
                page.SvgLengthWidth, page.SvgLengthHeight,
                new SvgNumList(new float[] { -page.Width / 2, -page.Height / 2, page.Width, page.Height }));

            root.AddChild(CreateCenteredCircle(this.OuterRadius, s_FilledBlack));

            // Add encoder rings
            AddEncoderRing(root, this.OuterEncoderRing, 1);
            AddEncoderRing(root, this.InnerEncoderRing, 2);

            root.AddChild(CreateCenteredCircle(this.CenterHoleRadius, s_FilledWhite));

            SvgGroupElement crossLinesGroup = new SvgGroupElement("CrossLines");

            crossLinesGroup.Style = s_NormalLineStyle;
            root.AddChild(crossLinesGroup);
            AddGuideLines(crossLinesGroup, (float)this.CenterHoleRadius);

            return(root.WriteSVGString(true, false));
        }
        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);
        }
        private void AddCenteredTriangle(SvgGroupElement group, float sideLength, float radius)
        {
            float middleLineLength = sideLength * (float)Math.Cos(30 / 180.0 * Math.PI);
            float centerToBase     = middleLineLength - radius;

            SvgLineElement sideLineElement1 = new SvgLineElement(
                -sideLength / 2f, -centerToBase,
                sideLength / 2f, -centerToBase);

            group.AddChild(sideLineElement1);

            SvgLineElement sideLineElement2 = new SvgLineElement(
                sideLength / 2f, -centerToBase,
                0, middleLineLength - centerToBase);

            group.AddChild(sideLineElement2);

            SvgLineElement sideLineElement3 = new SvgLineElement(
                0, middleLineLength - centerToBase,
                -sideLength / 2f, -centerToBase);

            group.AddChild(sideLineElement3);
        }
Exemple #20
0
        private void button2_Click(object sender, System.EventArgs e)
        {
            SvgSvgElement root = new SvgSvgElement("4in", "4in", "0,0 100,100");

            //adding multiple children

            root.AddChildren(
                new SvgRectElement(5, 5, 5, 5),
                new SvgEllipseElement(30, 10, 8, 12),
                new SvgTextElement("Textastic!", 3, 20)
                );

            //group and path

            SvgGroupElement grp = new SvgGroupElement("green_group")
            {
                Style = "fill:green;stroke:black;"
            };

            SvgEllipseElement ell = new SvgEllipseElement {
                CX = 50,
                CY = 50,
                RX = 10,
                RY = 20
            };

            SvgPathElement pathy = new SvgPathElement {
                D     = "M 20,80 C 20,90 30,80 70,100 C 70,100 40,60 50,60 z",
                Style = ell.Style
            };

            root.AddChild(grp);

            //cloning and style arithmetic

            grp.AddChildren(ell, pathy);

            grp.Style.Set("fill", "blue");

            SvgGroupElement grp2 = (SvgGroupElement)SvgFactory.CloneElement(grp);

            grp2.Id = "cloned_red_group";

            grp2.Style.Set("fill", "red");

            grp2.Style += "opacity:0.5";

            grp2.Transform = "scale (1.2, 1.2)  translate(10)";

            root.AddChild(grp2);

            //output

            string s = root.WriteSVGString(true);

            tbOut.Text = s;

            string tempFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "foo.svg");

            StreamWriter tw = new StreamWriter(tempFile, false);

            tw.Write(s);

            tw.Close();

            svgOut.Navigate(new Uri(tempFile));
            svgOut.Refresh(WebBrowserRefreshOption.Completely);
        }
Exemple #21
0
        private void button2_Click(object sender, System.EventArgs e)
        {
            var root = new SvgSvgElement("4in", "4in", "-10,-10 250,250");

            //adding multiple children

            root.AddChildren(
                new SvgRectElement(5, 5, 5, 5),
                new SvgEllipseElement(20, 20, 8, 12)
            {
                Style = "fill:yellow;stroke:red"
            },

                new SvgAElement("https://github.com/managed-commons/SvgNet").AddChildren(
                    new SvgTextElement("Textastic!", 30, 20)
            {
                Style = "fill:midnightblue;stroke:navy;stroke-width:1px;font-size:30px;font-family:Calibri"
            })
                );

            //group and path

            var grp = new SvgGroupElement("green_group")
            {
                Style = "fill:green;stroke:black;"
            };

            grp.AddChild(new SvgRectElement(30, 30, 5, 20));

            var ell = new SvgEllipseElement
            {
                CX = 50,
                CY = 50,
                RX = 10,
                RY = 20
            };

            var pathy = new SvgPathElement
            {
                D     = "M 20,80 C 20,90 30,80 70,100 C 70,100 40,60 50,60 z",
                Style = ell.Style
            };

            root.AddChild(grp);

            //cloning and style arithmetic

            grp.AddChildren(ell, pathy);

            grp.Style.Set("fill", "blue");

            var grp2 = (SvgGroupElement)SvgFactory.CloneElement(grp);

            grp2.Id = "cloned_red_group";

            grp2.Style.Set("fill", "red");

            grp2.Style += "opacity:0.5";

            grp2.Transform = "scale (1.2, 1.2)  translate(10)";

            root.AddChild(grp2);

            //output

            string s = root.WriteSVGString(true);

            tbOut.Text = s;

            string tempFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "foo.svg");

            using (var tw = new StreamWriter(tempFile, false))
                tw.Write(s);

            svgOut.Navigate(new Uri(tempFile));
            svgOut.Refresh(WebBrowserRefreshOption.Completely);
        }
Exemple #22
0
        private void button2_Click(object sender, System.EventArgs e)
        {
            SvgSvgElement root = new SvgSvgElement("4in", "4in", "0,0 100,100");


            //adding multiple children

            root.AddChildren(
                new SvgRectElement(5, 5, 5, 5),
                new SvgEllipseElement(30, 10, 8, 12),
                new SvgTextElement("Textastic!", 3, 20)
                );


            //group and path

            SvgGroupElement grp = new SvgGroupElement("green_group");

            grp.Style = "fill:green;stroke:black;";

            SvgEllipseElement ell = new SvgEllipseElement();

            ell.CX = 50;
            ell.CY = 50;
            ell.RX = 10;
            ell.RY = 20;

            SvgPathElement pathy = new SvgPathElement();

            pathy.D     = "M 20,80 C 20,90 30,80 70,100 C 70,100 40,60 50,60 z";
            pathy.Style = ell.Style;

            root.AddChild(grp);


            //cloning and style arithmetic

            grp.AddChildren(ell, pathy);

            grp.Style.Set("fill", "blue");

            SvgGroupElement grp2 = (SvgGroupElement)SvgFactory.CloneElement(grp);

            grp2.Id = "cloned_red_group";

            grp2.Style.Set("fill", "red");

            grp2.Style += "opacity:0.5";

            grp2.Transform = "scale (1.2, 1.2)  translate(10)";

            root.AddChild(grp2);


            //output

            string s = root.WriteSVGString(true);

            tbOut.Text = s;

            StreamWriter tw = new StreamWriter("c:\\temp\\foo.svg", false);

            tw.Write(s);

            tw.Close();

            svgOut.SRC = "c:\\temp\\foo.svg";
        }