public override void DrawEllipticArc(double cx, double cy, double aradius, double bradius, double tilt, double startangle, double sweepangle) { if (thinlinemode != ThinLineModeFlag.OwnThinLines) { base.DrawEllipticArc(cx, cy, aradius, bradius, tilt, startangle, sweepangle); return; } /* stipplebit = 0x8000; * * int px=0,py=0,nx,ny; * bool first = true; * * GeomUtil.FlattenEllipticArc(cx, cy, aradius, bradius, tilt, startangle, sweepangle, flattentol, true, (x, y,moveto) => * { * nx = GFXUtil.RealToInt(x); * ny = GFXUtil.RealToInt(y); * if (!first) * Line_Internal(px, py, nx, ny, true); //TODO: can we skip last pixel except on last segment? * else * first = false; * * * px = nx; * py = ny; * });*/ int px = 0, py = 0, nx, ny; int num = Clipper.ClipEllipticArc(cx, cy, aradius, bradius, tilt, startangle, sweepangle, clipbuffer, clipMinX, clipMinY, clipMaxX, clipMaxY); for (int l = 0; l < num; l += 2) { stipplebit = 0x8000; GeomUtil.FlattenEllipticArc(cx, cy, aradius, bradius, tilt, clipbuffer[l], clipbuffer[l + 1] - clipbuffer[l], flattentol, true, (x, y, moveto) => { nx = GFXUtil.FloatToInt(x); ny = GFXUtil.FloatToInt(y); if (!moveto) { Line_Internal(px, py, nx, ny, true); //TODO: can we skip last pixel except on last segment? } px = nx; py = ny; }); } }
public override void DrawEllipticArc(double cx, double cy, double aradius, double bradius, double tilt, double startangle, double sweepangle) { /* int prevx=0,prevy=0; * int nextx,nexty; * bool first=true; * * GeomUtil.FlattenEllipticArc(cx, cy, aradius, bradius, tilt, startangle, sweepangle, flattentol, true, (x, y,moveto) => * { * if (first) * { * prevx = GFXUtil.RealToInt(x); * prevy = GFXUtil.RealToInt(y); * first = false; * } * else * { * nextx = GFXUtil.RealToInt(x); * nexty = GFXUtil.RealToInt(y); * DrawLine(prevx,prevy,nextx,nexty); * //target.Add(prevx, prevy, nextx, nexty, currentobject); * prevx = nextx; * prevy = nexty; * } * });*/ int px = 0, py = 0, nx, ny; int num = Clipper.ClipEllipticArc(cx, cy, aradius, bradius, tilt, startangle, sweepangle, clipbuffer, Clip.XMin, Clip.YMin, Clip.XMax, Clip.YMax); for (int l = 0; l < num; l += 2) { GeomUtil.FlattenEllipticArc(cx, cy, aradius, bradius, tilt, clipbuffer[l], clipbuffer[l + 1] - clipbuffer[l], flattentol, true, (x, y, moveto) => { nx = GFXUtil.FloatToInt(x); ny = GFXUtil.FloatToInt(y); if (!moveto) { DrawLine(px, py, nx, ny); } px = nx; py = ny; }); } }