void INCustomSeriesCallback.Paint2D(NChartRenderingContext2D context, NGraphics graphics) { NVector3DF vecView = new NVector3DF(); NVector3DF vecModel = new NVector3DF(); NScaleRuler rulerX = m_Chart.Axis(m_Series.HorizontalAxes[0]).Scale.Ruler; NScaleRuler rulerY = m_Chart.Axis(m_Series.VerticalAxes[0]).Scale.Ruler; // current number of accumulated Bezier points int bpCount = 0; // accumulated Bezier points PointF[] bezierPoints = new PointF[4]; for (int i = 0; i < Points.Length; i++) { // Transform values to chart model coorinates vecModel.X = rulerX.LogicalToScale(Points[i].X); vecModel.Y = rulerY.LogicalToScale(Points[i].Y); // Transform model coordinates to view coordinates m_Chart.TransformModelToClient(vecModel, ref vecView); // Draw the current point bool isControlPoint = (i % 3) != 0; if (isControlPoint) { NRectangleF rect = new NRectangleF(vecView.X - 3, vecView.Y - 3, 6, 6); graphics.PaintEllipse(ControlPointFill, null, rect); } else { NRectangleF rect = new NRectangleF(vecView.X - 5, vecView.Y - 5, 10, 10); graphics.PaintEllipse(PointFill, null, rect); } // Accumulate Bezier point bezierPoints[bpCount] = new PointF(vecView.X, vecView.Y); bpCount++; if (bpCount == 4) { // Draw tangents graphics.DrawLine(TangentStroke, new NPointF(bezierPoints[0]), new NPointF(bezierPoints[1])); graphics.DrawLine(TangentStroke, new NPointF(bezierPoints[2]), new NPointF(bezierPoints[3])); // Draw Bezier line GraphicsPath path = new GraphicsPath(); path.AddBezier(bezierPoints[0], bezierPoints[1], bezierPoints[2], bezierPoints[3]); graphics.PaintPath(null, BezierStroke, path); path.Dispose(); // Update accumultaed points bezierPoints[0] = bezierPoints[3]; bpCount = 1; } } }
/// <summary> /// Draw the specified canvas. /// </summary> /// <param name="canvas">Canvas.</param> /// <param name="rect">Rect.</param> public override void Draw(NGraphics.ICanvas canvas, NGraphics.Rect rect) { base.Draw(canvas, rect); canvas.DrawLine(0, rect.Height-0.5, rect.Width, rect.Height-0.5, NGraphics.Colors.Gray, 0.5); canvas.DrawEllipse(new Rect(-50, -50,250, 250), null, Brushes.Red); }