コード例 #1
0
        private void FunctionPrinter_Paint(object sender, PaintEventArgs e)
        {
            if (Function == null)
            {
                return;
            }

            var g = new ClientSpaceGraphics(e.Graphics, UserRange, ClientSize);

            // Draw axes
            using (var penOverride = new ClientSpaceGraphics.PenOverride(g, new Pen(Brushes.DeepSkyBlue)))
            {
                // X
                {
                    var pi = (float)Math.PI;
                    g.PrintText(-pi, 0, "-pi  ", SystemFonts.DefaultFont);
                    g.PrintText(-pi / 2, 0, "-pi/2", SystemFonts.DefaultFont);
                    g.PrintText(pi / 2, 0, "pi/2", SystemFonts.DefaultFont);
                    g.PrintText(pi, 0, "pi  ", SystemFonts.DefaultFont);
                    g.DrawLine(UserRange.Left, 0.0f, UserRange.Right, 0.0f);
                }

                // Y
                {
                    float dy = 0.5f;
                    float y  = ((int)UserRange.Y) - 1;
                    while (y < UserRange.Y + UserRange.Height)
                    {
                        g.PrintText(0, y, y.ToString(), SystemFonts.DefaultFont);
                        y += dy;
                    }
                    g.DrawLine(0, UserRange.Bottom, 0.0f, UserRange.Top);
                }
            }

            // Draw function curve
            using (var penOverride = new ClientSpaceGraphics.PenOverride(g, new Pen(Color.FromArgb(127, Color.Black))))
            {
                var   cachedArgsArray = new object[1];
                float dx = 1.0f / SegmentsCount;
                g.DrawFunctionLine(dx, x => Function(x));
            }
        }
コード例 #2
0
 public PenOverride(ClientSpaceGraphics g, Pen pen)
 {
     Graphics = g;
     PrevPen  = g.Pen;
     g.Pen    = pen;
 }