private void DoTest(TestCase test) { if (animation.IsStarted) animation.Stop(); Graphics g = ctResults.Panel1.CreateGraphics(); //this.CreateGraphics(); g.Clear(Color.White); var bmp = new Bitmap((int) g.VisibleClipBounds.Width, (int) g.VisibleClipBounds.Height); Graphics tmp = Graphics.FromImage(bmp); var ctx = new CanvasRenderingContext2D(tmp, bmp, new Pen(Color.Black, 1), new Fill(Color.Black), false); string url = test(ctx); g.DrawImage(bmp, 0, 0); var di = new DirectoryInfo(Application.StartupPath); url = di.Parent.Parent.Parent.FullName + "\\SharpCanvas.Tests\\" + url; if (File.Exists(url)) { pctOriginal.Load(url); pctOriginal.Show(); } else { pctOriginal.Hide(); } }
private void branch(CanvasRenderingContext2D ctx, double r, double d, double t, double a) { ctx.save(); ctx.rotate(t*a); ctx.translate(0, -r*(1 + d)); wing(ctx, r*d, a); ctx.restore(); }
private void feather(CanvasRenderingContext2D ctx, double r) { if (r < 3) return; double d = 0.85; ctx.rotate(-0.03*Math.PI); ctx.translate(0, -r*(1 + d)); fillCircle(ctx, r); feather(ctx, r*d); }
public FlyingDragon(Graphics g, int width, int height, Pen stroke, Fill fill, int interval) { _g = g; GraphicManager = BufferedGraphicsManager.Current; GraphicManager.MaximumBuffer = new Size(width + 1, height + 1); ManagedBackBuffer = GraphicManager.Allocate(_g, new Rectangle(0, 0, width, height)); _ctx = new CanvasRenderingContext2D(ManagedBackBuffer.Graphics, null, stroke, fill, false); this.interval = interval; }
private void ExecuteTest(int testIndex) { Graphics g = CreateGraphics(); g.Clear(Color.White); var ctx = new CanvasRenderingContext2D(g, null, new Pen(Color.Black, 1), new Fill(Color.Black), false); tests[testIndex](ctx); Text = "Test #" + (testIndex + 1); }
private void fly(CanvasRenderingContext2D ctx, double i, ToolStripStatusLabel label) { ElapsedEventHandler inner = delegate { bool isLocked = !Monitor.TryEnter(sync); if (!isLocked) { i++; ctx.fillStyle = "white"; ctx.fillRect(-1500, -1500, 3000, 3000); ctx.save(); ctx.translate(0, Math.Cos(i*0.1)*40); double a = Math.Sin(i*0.1); // right wing ctx.save(); ctx.rotate(Math.PI*0.4); wing(ctx, 18, a); ctx.restore(); // left wing ctx.save(); ctx.scale(-1, 1); ctx.rotate(Math.PI*0.4); wing(ctx, 18, a); ctx.restore(); // tail ctx.save(); tail(ctx, 20, Math.Sin(i*0.05)); ctx.restore(); // head neck(ctx, 22); ctx.restore(); ManagedBackBuffer.Render(_g); _g.Flush(FlushIntention.Sync); framesCount++; Monitor.Exit(sync); } }; timer = new Timer(); timer.Interval = interval; timer.Elapsed += inner; timer.Enabled = true; var counter = new Timer(); counter.Interval = 1000; counter.Elapsed += delegate { label.Text = "fps: " + framesCount + " / " + 1000/interval; lock (sync) { framesCount = 0; } }; counter.Enabled = true; }
private void fillCircle(CanvasRenderingContext2D ctx, double r) { ctx.beginPath(); ctx.moveTo(r, 0); ctx.fillStyle = "rgb(245,50,50)"; ctx.arc(0, 0, r, 0, Math.PI*2, true); ctx.fill(); }
private void wing(CanvasRenderingContext2D ctx, double r, double a) { if (r < 2.9) return; fillCircle(ctx, r); branch(ctx, r, 0.9561, 0.03*Math.PI, a); ctx.save(); ctx.rotate(0.55*Math.PI); feather(ctx, 0.8*r); ctx.restore(); }
private void tail(CanvasRenderingContext2D ctx, double s, double a) { if (s < 0.5) return; double d = 0.98; // decay fillCircle(ctx, s); ctx.rotate(-0.15*a); ctx.translate(0, s*(1 + d)); tail(ctx, s*d, a); }
private void neck(CanvasRenderingContext2D ctx, double s) { if (s < 10) { head(ctx); return; } double d = 0.85; fillCircle(ctx, s); ctx.save(); ctx.rotate(-Math.PI/2); ctx.translate(0, s); fillCircle(ctx, s/2); ctx.restore(); ctx.rotate(-0.15); ctx.translate(0, -s*(1 + d)); neck(ctx, s*d); }
private void head(CanvasRenderingContext2D ctx) { fillCircle(ctx, 22); // mouth ctx.save(); ctx.translate(-15, -3); ctx.beginPath(); ctx.fillStyle = "white"; ctx.arc(0, 0, 10, 0, Math.PI*2, true); ctx.fill(); ctx.restore(); // eye ctx.translate(9, -4); ctx.beginPath(); ctx.fillStyle = "black"; ctx.arc(0, 0, 5, 0, Math.PI*2, true); ctx.fill(); // horn ctx.translate(6, -8); ctx.rotate(0.6*Math.PI); wing(ctx, 5.5, 1.8); }