/// <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); }
/// <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); }
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); }
/// <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); }
public SvgStopElement(SvgLength num, SvgColor col) { Offset=num; Style.Set("stop-color", col); }
/// <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); }
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); } }
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); }