Example #1
0
            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;
                    }
                }
            }
Example #2
0
 /// <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);
 }