Exemplo n.º 1
0
        /// <summary>
        /// Creates a style from a GDI+ pen object.  Most properties of the pen are implemented, but GDI+ allows fine control over line-capping which 
        /// has no equivalent in SVG.
        /// </summary>
        /// <param name="pen"></param>
        public SvgStyle(Pen pen)
        {
            SvgColor strokeCol = new SvgColor(((SolidBrush)pen.Brush).Color);
            Set("stroke", strokeCol);
            Set("stroke-width", pen.Width);
            Set("fill", "none");

            switch(pen.EndCap)
            {
                case LineCap.Round:
                    Set("stroke-linecap", "round");break;
                case LineCap.Square:
                    Set("stroke-linecap", "square");break;
                case LineCap.Flat:
                    Set("stroke-linecap", "butt");break;
            }

            switch(pen.LineJoin)
            {
                case LineJoin.Bevel:
                    Set("stroke-linejoin", "bevel");break;
                case LineJoin.Miter:
                    Set("stroke-linejoin", "miter");break;
                case LineJoin.Round:
                    Set("stroke-linejoin", "round");break;
            }

            //converting between adobe and ms miter limits is very hard because adobe have never explained what the value means.
            Set("stroke-miterlimit", pen.MiterLimit/2 + 4f);

            float[] dashes = null;

            switch(pen.DashStyle)
            {
                case DashStyle.Dash:
                    dashes = new float[]{3,1}; break;
                case DashStyle.DashDot:
                    dashes = new float[]{3,1,1,1}; break;
                case DashStyle.DashDotDot:
                    dashes = new float[]{3,1,1,1,1}; break;
                case DashStyle.Dot:
                    dashes = new float[]{1,1}; break;
                case DashStyle.Custom:
                    dashes = pen.DashPattern; break;
            }

            if (dashes != null)
            {
                //MS GDI changes dash pattern to match width of line; svg does not.
                for(int i=0; i < dashes.Length; ++i)
                {
                    dashes[i] *= pen.Width;
                }

                Set("stroke-dasharray", new SvgNumList(dashes));
            }

            Set("opacity", pen.Color.A/255f);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Creates a style based on a GDI brush object.  Only works for solid brushes; pattern brushes are not yet emulated.
        /// </summary>
        /// <param name="brush"></param>
        public SvgStyle(SolidBrush brush)
        {
            SvgColor col = new SvgColor(((SolidBrush)brush).Color);

            Set("fill", col);
            Set("stroke", "none");
            Set("opacity", ((SolidBrush)brush).Color.A / 255f);
        }
Exemplo n.º 3
0
        public SvgStyle(SolidBrush brush)
        {
            SvgColor val = new SvgColor(brush.Color);

            this.Set("fill", val);
            this.Set("stroke", "none");
            this.Set("opacity", (float)brush.Color.A / 255f);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Creates a style from a GDI+ pen object.  Most properties of the pen are implemented, but GDI+ allows fine control over line-capping which
        /// has no equivalent in SVG.
        /// </summary>
        /// <param name="pen"></param>
        public SvgStyle(Pen pen)
        {
            SvgColor strokeCol = new SvgColor(((SolidBrush)pen.Brush).Color);

            Set("stroke", strokeCol);
            Set("stroke-width", pen.Width);
            Set("fill", "none");

            switch (pen.EndCap)
            {
            case LineCap.Round:
                Set("stroke-linecap", "round");
                break;

            case LineCap.Square:
                Set("stroke-linecap", "square");
                break;

            case LineCap.Flat:
                Set("stroke-linecap", "butt");
                break;
            }

            switch (pen.LineJoin)
            {
            case LineJoin.Bevel:
                Set("stroke-linejoin", "bevel");
                break;

            case LineJoin.Miter:
                Set("stroke-linejoin", "miter");
                break;

            case LineJoin.Round:
                Set("stroke-linejoin", "round");
                break;
            }

            //converting between adobe and ms miter limits is very hard because adobe have never explained what the value means.
            Set("stroke-miterlimit", pen.MiterLimit / 2 + 4f);

            float[] dashes = null;

            switch (pen.DashStyle)
            {
            case DashStyle.Dash:
                dashes = new float[] { 3, 1 };
                break;

            case DashStyle.DashDot:
                dashes = new float[] { 3, 1, 1, 1 };
                break;

            case DashStyle.DashDotDot:
                dashes = new float[] { 3, 1, 1, 1, 1 };
                break;

            case DashStyle.Dot:
                dashes = new float[] { 1, 1 };
                break;

            case DashStyle.Custom:
                dashes = pen.DashPattern;
                break;
            }

            if (dashes != null)
            {
                //MS GDI changes dash pattern to match width of line; svg does not.
                for (int i = 0; i < dashes.Length; ++i)
                {
                    dashes[i] *= pen.Width;
                }

                Set("stroke-dasharray", new SvgNumList(dashes));
            }

            Set("opacity", pen.Color.A / 255f);
        }
Exemplo n.º 5
0
        public SvgStopElement(SvgLength num, SvgColor col)
        {
            Offset=num;

            Style.Set("stop-color", col);
        }
Exemplo n.º 6
0
 /// <summary>
 /// Creates a style based on a GDI brush object.  Only works for solid brushes; pattern brushes are not yet emulated.
 /// </summary>
 /// <param name="brush"></param>
 public SvgStyle(SolidBrush brush)
 {
     SvgColor col = new SvgColor(((SolidBrush)brush).Color);
     Set("fill", col);
     Set("stroke", "none");
     Set("opacity", ((SolidBrush)brush).Color.A/255f);
 }
Exemplo n.º 7
0
        private void AddHatchBrushDetails(SvgPatternElement patty, SvgColor col, HatchStyle hs)
        {
            SvgStyledTransformedElement l1=null;
            SvgStyledTransformedElement l2 = null;
            SvgStyledTransformedElement l3 = null;
            SvgStyledTransformedElement l4 = null;

            switch(hs)
            {
                case HatchStyle.Cross:
                    l1 = new SvgLineElement(4,0,4,8);
                    l2 = new SvgLineElement(0,4,8,4);
                    break;

                case HatchStyle.BackwardDiagonal:
                    l1 = new SvgLineElement(8,0,0,8);
                    break;

                case HatchStyle.LightDownwardDiagonal:
                case HatchStyle.DarkDownwardDiagonal:
                    l1 = new SvgLineElement(4,0,8,4);
                    l2 = new SvgLineElement(0,4,4,8);
                    l3 = new SvgLineElement(0,0,8,8);
                    break;
                case HatchStyle.LightHorizontal:
                case HatchStyle.DarkHorizontal:
                    l1 = new SvgLineElement(0,2,8,2);
                    l2 = new SvgLineElement(0,6,8,6);
                    break;
                case HatchStyle.LightUpwardDiagonal:
                case HatchStyle.DarkUpwardDiagonal:
                    l1 = new SvgLineElement(0,4,4,0);
                    l2 = new SvgLineElement(4,8,8,4);
                    l3 = new SvgLineElement(0,8,8,0);
                    break;
                case HatchStyle.LightVertical:
                case HatchStyle.DarkVertical:
                    l1 = new SvgLineElement(2,0,2,8);
                    l2 = new SvgLineElement(6,0,6,8);
                    break;
                case HatchStyle.DashedDownwardDiagonal:
                    l1 = new SvgLineElement(0,0,4,4);
                    l2 = new SvgLineElement(4,0,8,4);
                    break;
                case HatchStyle.DashedHorizontal:
                    l1 = new SvgLineElement(0,2,4,2);
                    l2 = new SvgLineElement(4,6,8,6);
                    break;
                case HatchStyle.DashedUpwardDiagonal:
                    l1 = new SvgLineElement(4,0,0,4);
                    l2 = new SvgLineElement(8,0,4,4);
                    break;
                case HatchStyle.DashedVertical:
                    l1 = new SvgLineElement(2,0,2,4);
                    l2 = new SvgLineElement(6,4,6,8);
                    break;
                case HatchStyle.DiagonalBrick:
                    l1 = new SvgLineElement(0,8,8,0);
                    l2 = new SvgLineElement(0,0,4,4);
                    break;
                case HatchStyle.DiagonalCross:
                    l1 = new SvgLineElement(0,0,8,8);
                    l2 = new SvgLineElement(8,0,0,8);
                    break;
                case HatchStyle.Divot:
                    l1 = new SvgLineElement(2,2,4,4);
                    l2 = new SvgLineElement(4,4,2,6);
                    break;
                case HatchStyle.DottedDiamond:
                    l1 = new SvgLineElement(0,0,8,8);
                    l2 = new SvgLineElement(0,8,8,0);
                    break;
                case HatchStyle.DottedGrid:
                    l1 = new SvgLineElement(4,0,4,8);
                    l2 = new SvgLineElement(0,4,8,4);
                    break;
                case HatchStyle.ForwardDiagonal:
                    l1 = new SvgLineElement(0,0,8,8);
                    break;
                case HatchStyle.Horizontal:
                    l1 = new SvgLineElement(0,4,8,4);
                    break;
                case HatchStyle.HorizontalBrick:
                    l1 = new SvgLineElement(0,3,8,3);
                    l2 = new SvgLineElement(3,0,3,3);
                    l3 = new SvgLineElement(0,3,0,7);
                    l4 = new SvgLineElement(0,7,7,7);
                    break;
                case HatchStyle.LargeCheckerBoard:
                    l1 = new SvgRectElement(0,0,3f,3f);
                    l2 = new SvgRectElement(4,4,4,4f);
                    break;
                case HatchStyle.LargeConfetti:
                    l1 = new SvgRectElement(0,0,1,1);
                    l2 = new SvgRectElement(2,3,1,1);
                    l3 = new SvgRectElement(5,2,1,1);
                    l4 = new SvgRectElement(6,6,1,1);
                    break;
                case HatchStyle.NarrowHorizontal:
                    l1 = new SvgLineElement(0,1,8,1);
                    l2 = new SvgLineElement(0,3,8,3);
                    l3 = new SvgLineElement(0,5,8,5);
                    l4 = new SvgLineElement(0,7,8,7);
                    break;
                case HatchStyle.NarrowVertical:
                    l1 = new SvgLineElement(1,0,1,8);
                    l2 = new SvgLineElement(3,0,3,8);
                    l3 = new SvgLineElement(5,0,5,8);
                    l4 = new SvgLineElement(7,0,7,8);
                    break;
                case HatchStyle.OutlinedDiamond:
                    l1 = new SvgLineElement(0,0,8,8);
                    l2 = new SvgLineElement(8,0,0,8);
                    break;
                case HatchStyle.Plaid:
                    l1 = new SvgLineElement(0,0,8,0);
                    l2 = new SvgLineElement(0,3,8,3);
                    l3 = new SvgRectElement(0,4,3,3);
                    break;
                case HatchStyle.Shingle:
                    l1 = new SvgLineElement(0,2,2,0);
                    l2 = new SvgLineElement(2,0,7,5);
                    l3 = new SvgLineElement(0,3,3,7);
                    break;
                case HatchStyle.SmallCheckerBoard:
                    l1 = new SvgRectElement(0,0,1,1);
                    l2 = new SvgRectElement(4,4,1,1);
                    l3 = new SvgRectElement(4,0,1,1);
                    l4 = new SvgRectElement(0,4,1,1);
                    break;
                case HatchStyle.SmallConfetti:
                    l1 = new SvgLineElement(0,0,2,2);
                    l2 = new SvgLineElement(7,3,5,5);
                    l3 = new SvgLineElement(2,6,4,4);
                    break;
                case HatchStyle.SmallGrid:
                    l1 = new SvgLineElement(0,2,8,2);
                    l2 = new SvgLineElement(0,6,8,6);
                    l3 = new SvgLineElement(2,0,2,8);
                    l4 = new SvgLineElement(6,0,6,8);
                    break;
                case HatchStyle.SolidDiamond:
                    l1 = new SvgPolygonElement("3 0 6 3 3 6 0 3");
                    break;
                case HatchStyle.Sphere:
                    l1 = new SvgEllipseElement(3,3,2,2);
                    break;
                case HatchStyle.Trellis:
                    l1 = new SvgLineElement(0,1,8,1);
                    l2 = new SvgLineElement(0,3,8,3);
                    l3 = new SvgLineElement(0,5,8,5);
                    l4 = new SvgLineElement(0,7,8,7);
                    break;
                case HatchStyle.Vertical:
                    l4 = new SvgLineElement(0,0,0,8);
                    break;
                case HatchStyle.Wave:
                    l3 = new SvgLineElement(0,4,3,2);
                    l4 = new SvgLineElement(3,2,8,4);
                    break;
                case HatchStyle.Weave:
                    l1 = new SvgLineElement(0,4,4,0);
                    l2 = new SvgLineElement(8,4,4,8);
                    l3 = new SvgLineElement(0,0,0,4);
                    l4 = new SvgLineElement(0,4,4,8);
                    break;
                case HatchStyle.WideDownwardDiagonal:
                    l1 = new SvgLineElement(0,0,8,8);
                    l2 = new SvgLineElement(0,1,8,9);
                    l3 = new SvgLineElement(7,0,8,1);
                    break;
                case HatchStyle.WideUpwardDiagonal:
                    l1 = new SvgLineElement(8,0,0,8);
                    l2 = new SvgLineElement(8,1,0,9);
                    l3 = new SvgLineElement(0,1,-1,0);
                    break;
                case HatchStyle.ZigZag:
                    l1 = new SvgLineElement(0,4,4,0);
                    l2 = new SvgLineElement(4,0,8,4);
                    break;

                case HatchStyle.Percent05:
                    l1 = new SvgLineElement(0,0,1,0);
                    l2 = new SvgLineElement(4,4,5,4);
                    break;
                case HatchStyle.Percent10:
                    l1 = new SvgLineElement(0,0,1,0);
                    l2 = new SvgLineElement(4,2,5,2);
                    l3 = new SvgLineElement(2,4,3,4);
                    l4 = new SvgLineElement(6,6,7,6);
                    break;
                case HatchStyle.Percent20:
                    l1 = new SvgLineElement(0,0,2,0);
                    l2 = new SvgLineElement(4,2,6,2);
                    l3 = new SvgLineElement(2,4,4,4);
                    l4 = new SvgLineElement(5,6,7,6);
                    break;
                case HatchStyle.Percent25:
                    l1 = new SvgLineElement(0,0,3,0);
                    l2 = new SvgLineElement(4,2,6,2);
                    l3 = new SvgLineElement(2,4,5,4);
                    l4 = new SvgLineElement(5,6,7,6);
                    break;
                case HatchStyle.Percent30:
                    l1 = new SvgRectElement(0,0,3,1);
                    l2 = new SvgLineElement(4,2,6,2);
                    l3 = new SvgRectElement(2,4,3,1);
                    l4 = new SvgLineElement(5,6,7,6);
                    break;
                case HatchStyle.Percent40:
                    l1 = new SvgRectElement(0,0,3,1);
                    l2 = new SvgRectElement(4,2,3,1);
                    l3 = new SvgRectElement(2,4,3,1);
                    l4 = new SvgRectElement(5,6,3,1);
                    break;
                case HatchStyle.Percent50:
                    l1 = new SvgRectElement(0,0,3,3);
                    l2 = new SvgRectElement(4,4,4,4f);
                    break;
                case HatchStyle.Percent60:
                    l1 = new SvgRectElement(0,0,4,3);
                    l2 = new SvgRectElement(4,4,4,4f);
                    break;
                case HatchStyle.Percent70:
                    l1 = new SvgRectElement(0,0,4,5);
                    l2 = new SvgRectElement(4,4,4,4f);
                    break;
                case HatchStyle.Percent75:
                    l1 = new SvgRectElement(0,0,7,3);
                    l2 = new SvgRectElement(0,2,3,7);
                    break;
                case HatchStyle.Percent80:
                    l1 = new SvgRectElement(0,0,7,4);
                    l2 = new SvgRectElement(0,2,4,7);
                    break;
                case HatchStyle.Percent90:
                    l1 = new SvgRectElement(0,0,7,5);
                    l2 = new SvgRectElement(0,2,5,7);
                    break;

                default:

                    break;
            }

            if (l1 != null)
            {
                l1.Style.Set("stroke", col);
                l1.Style.Set("fill", col);
                patty.AddChild(l1);
            }
            if (l2 != null)
            {
                l2.Style.Set("stroke", col);
                l2.Style.Set("fill", col);
                patty.AddChild(l2);
            }
            if (l3 != null)
            {
                l3.Style.Set("stroke", col);
                l3.Style.Set("fill", col);
                patty.AddChild(l3);
            }
            if (l4 != null)
            {
                l4.Style.Set("stroke", col);
                l4.Style.Set("fill", col);
                patty.AddChild(l4);
            }
        }
Exemplo n.º 8
0
        public SvgStyle(Pen pen)
        {
            SvgColor val = new SvgColor(((SolidBrush)pen.Brush).Color);

            this.Set("stroke", val);
            this.Set("stroke-width", pen.Width);
            this.Set("fill", "none");
            switch (pen.EndCap)
            {
            case LineCap.Flat:
                this.Set("stroke-linecap", "butt");
                break;

            case LineCap.Square:
                this.Set("stroke-linecap", "square");
                break;

            case LineCap.Round:
                this.Set("stroke-linecap", "round");
                break;
            }
            switch (pen.LineJoin)
            {
            case LineJoin.Miter:
                this.Set("stroke-linejoin", "miter");
                break;

            case LineJoin.Bevel:
                this.Set("stroke-linejoin", "bevel");
                break;

            case LineJoin.Round:
                this.Set("stroke-linejoin", "round");
                break;
            }
            this.Set("stroke-miterlimit", pen.MiterLimit / 2f + 4f);
            float[] array = null;
            switch (pen.DashStyle)
            {
            case DashStyle.Dash:
                array = new float[]
                {
                    3f,
                    1f
                };
                break;

            case DashStyle.Dot:
                array = new float[]
                {
                    1f,
                    1f
                };
                break;

            case DashStyle.DashDot:
                array = new float[]
                {
                    3f,
                    1f,
                    1f,
                    1f
                };
                break;

            case DashStyle.DashDotDot:
                array = new float[]
                {
                    3f,
                    1f,
                    1f,
                    1f,
                    1f
                };
                break;

            case DashStyle.Custom:
                array = pen.DashPattern;
                break;
            }
            if (array != null)
            {
                for (int i = 0; i < array.Length; i++)
                {
                    array[i] *= pen.Width;
                }
                this.Set("stroke-dasharray", new SvgNumList(array));
            }
            this.Set("opacity", (float)pen.Color.A / 255f);
        }