private void AddCenteredCircle(SvgGroupElement group, float radius) { SvgEllipseElement circleElement = new SvgEllipseElement( 0, 0, radius, radius); group.AddChild(circleElement); }
public static SvgEllipseElement CreateCircle(Point center, double radius, SvgStyle style) { SvgEllipseElement circleElement = new SvgEllipseElement( center.X, center.Y, radius, radius); if (style != null) { circleElement.Style = style; } return circleElement; }
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); }
internal static SvgEllipseElement CreateCenteredCircle(double radius, SvgStyle style) { SvgEllipseElement circleElement = new SvgEllipseElement( 0, 0, (float)radius, (float)radius); circleElement.Style = style; return circleElement; }
/// <summary> /// Implemented /// </summary> public void DrawEllipse(Pen pen, Single x, Single y, Single width, Single height) { SvgEllipseElement el = new SvgEllipseElement(x + width/2,y + height/2,width/2,height/2); el.Style = new SvgStyle(pen); if (!_transforms.Result.IsIdentity) el.Transform = new SvgTransformList(_transforms.Result.Clone()); _cur.AddChild(el); }
private void DrawEndAnchor(LineCap lc, CustomLineCap clc, Color col, float w, PointF pt, float angle) { SvgStyledTransformedElement anchor=null; PointF[] points = null; switch(lc) { case LineCap.ArrowAnchor: points = new PointF[3]; points[0] = new PointF(0, -w/2f); points[1] = new PointF(-w, w); points[2] = new PointF(w, w); anchor = new SvgPolygonElement(points); break; case LineCap.DiamondAnchor: points = new PointF[4]; points[0] = new PointF(0, -w); points[1] = new PointF(w, 0); points[2] = new PointF(0, w); points[3] = new PointF(-w, 0); anchor = new SvgPolygonElement(points); break; case LineCap.RoundAnchor: anchor = new SvgEllipseElement(0, 0, w, w); break; case LineCap.SquareAnchor: float ww = (w/3)*2; anchor = new SvgRectElement(0 - ww, 0 - ww, ww*2, ww*2); break; case LineCap.Custom: //not implemented! return; default: return; } anchor.Id += "_line_anchor"; anchor.Style.Set("fill", new SvgColor(col)); anchor.Style.Set("stroke", "none"); Matrix rotation = new Matrix(); rotation.Rotate((angle/(float)Math.PI)*180); Matrix translation = new Matrix(); translation.Translate(pt.X, pt.Y); anchor.Transform = new SvgTransformList(_transforms.Result.Clone()); anchor.Transform.Add(translation); anchor.Transform.Add(rotation); _cur.AddChild(anchor); }
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); } }
/// <summary> /// Implemented /// </summary> public void FillEllipse(Brush brush, Single x, Single y, Single width, Single height) { SvgEllipseElement el = new SvgEllipseElement(x + width/2,y + height/2,width/2,height/2); el.Style = HandleBrush(brush); if (!_transforms.Result.IsIdentity) el.Transform = new SvgTransformList(_transforms.Result.Clone()); _cur.AddChild(el); }
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"; }
private IEnumerable<SvgStyledTransformedElement> GetCircles(float distance) { float maxRadius = (float)Math.Sqrt(this.Page.Width * this.Page.Width / 4 + (this.Page.Height - this.Origin.Y) * (this.Page.Height - this.Origin.Y)); int count = (int)(maxRadius / distance); for (int i = 0; i <= count; i++) { float radius = i * distance; SvgEllipseElement circleElement = new SvgEllipseElement( GetSvgLength(this.Origin.X), GetSvgLength(this.Origin.Y), GetSvgLength(radius), GetSvgLength(radius)); yield return circleElement; } }
private void DrawEndAnchor(LineCap lc, CustomLineCap clc, Color col, float w, PointF pt, float angle, bool ignoreUnsupportedLineCaps) { SvgStyledTransformedElement anchor = null; PointF[] points = null; switch (lc) { case LineCap.NoAnchor: break; case LineCap.Flat: // TODO: what is the correct look? break; case LineCap.ArrowAnchor: points = new PointF[3]; points[0] = new PointF(0, -w / 2f); points[1] = new PointF(-w, w); points[2] = new PointF(w, w); anchor = new SvgPolygonElement(points); break; case LineCap.DiamondAnchor: points = new PointF[4]; points[0] = new PointF(0, -w); points[1] = new PointF(w, 0); points[2] = new PointF(0, w); points[3] = new PointF(-w, 0); anchor = new SvgPolygonElement(points); break; case LineCap.RoundAnchor: anchor = new SvgEllipseElement(0, 0, w, w); break; case LineCap.SquareAnchor: float ww = (w / 3) * 2; anchor = new SvgRectElement(0 - ww, 0 - ww, ww * 2, ww * 2); break; case LineCap.Custom: if (clc != null) { if (!ignoreUnsupportedLineCaps) throw new SvgGdiNotImpl("DrawEndAnchor custom"); } break; default: if (!ignoreUnsupportedLineCaps) throw new SvgGdiNotImpl("DrawEndAnchor " + lc.ToString()); break; } if (anchor == null) return; anchor.Id += "_line_anchor"; anchor.Style.Set("fill", new SvgColor(col)); anchor.Style.Set("stroke", "none"); Matrix rotation = new Matrix(); rotation.Rotate((angle / (float)Math.PI) * 180); Matrix translation = new Matrix(); translation.Translate(pt.X, pt.Y); anchor.Transform = new SvgTransformList(_transforms.Result.Clone()); anchor.Transform.Add(translation); anchor.Transform.Add(rotation); _cur.AddChild(anchor); }