private void Form1_Load(object sender, EventArgs e) { // Create graphics g_demo = panel1.CreateGraphics(); g_curve = panel2.CreateGraphics(); // Bezier points points[0] = new Point(10, 221); points[1] = new Point(40, 31); points[2] = new Point(310, 201); points[3] = new Point(340, 11); // Ease points easePoints[0] = new Point(10, 221); easePoints[1] = new Point(40, 31); easePoints[2] = new Point(310, 201); easePoints[3] = new Point(340, 11); // Route bezier initialization bezierRoute = new BezierRoute(points, 2000, 1, UniformBezierRouteCallBack); bezierRoute.Tag = 1; // Ease bezier demo points parameters orignPoints[0] = new Point(0, panel1.Height / 2); orignPoints[1] = new Point(-8, panel1.Height / 2); orignPoints[2] = new Point(-16, panel1.Height / 2); distance = panel1.Width; pE[0] = new Point(orignPoints[0].X, orignPoints[0].Y); pE[1] = new Point(orignPoints[1].X, orignPoints[1].Y); pE[2] = new Point(orignPoints[2].X, orignPoints[2].Y); brush[0] = new SolidBrush(Color.White); brush[1] = new SolidBrush(Color.White); brush[2] = new SolidBrush(Color.White); bitmap = new Bitmap(panel1.Width, panel1.Height); g_bitmap = Graphics.FromImage(bitmap); // Ease bezier demo points initialization bezierEase[0] = new BezierEase(easePoints, 2000, 1, UniformBezierEaseDemoCallBack); bezierEase[0].Tag = 0; bezierEase[1] = new BezierEase(easePoints, 2000, 1, UniformBezierEaseDemoCallBack); bezierEase[1].Tag = 1; bezierEase[2] = new BezierEase(easePoints, 2000, 1, UniformBezierEaseDemoCallBack); bezierEase[2].Tag = 2; }
private void UniformBezierEaseDemoCallBack(BezierEase bezierEase, double realRate, BezierEase.BezierStatus status) { // Draw demo panel if (status == BezierEase.BezierStatus.Finished) { realRate = 1; } switch (status) { case BezierEase.BezierStatus.None: break; case BezierEase.BezierStatus.Motioning: lock (this) { pE[bezierEase.Tag].X = (int)(orignPoints[bezierEase.Tag].X + distance * realRate); } break; case BezierEase.BezierStatus.Finished: DrawBezierCurve(); curvePointI = 0; this.bezierEase[bezierEase.Tag].Start = true; Console.WriteLine("Finished"); break; default: break; } // Update curve panel if (0 == ++curvePointI % curvePointInterval) { UpdateCurvePanel(bezierEase.RealPoint); } }