Example #1
0
        private void RenderLeft(SKCanvas canvas, Axes axes)
        {
            SKPaint paintTick = new SKPaint()
            {
                IsAntialias = true,
                TextSize    = 12,
                TextAlign   = SKTextAlign.Right,
                Color       = SKColor.Parse("#FF000000")
            };

            SKPaint paintGrid = new SKPaint()
            {
                IsAntialias = true,
                Color       = SKColor.Parse("#33000000")
            };

            SKRect dataRect = axes.GetDataRect();

            foreach (Tick tick in ticks)
            {
                if ((tick.value >= axes.y.low) && (tick.value <= axes.y.high))
                {
                    float   yPixel    = axes.GetPixel(0, tick.value).Y;
                    SKPoint dataLeft  = new SKPoint(dataRect.Left, yPixel);
                    SKPoint dataRight = new SKPoint(dataRect.Right, yPixel);
                    SKPoint tickLeft  = new SKPoint(dataRect.Left - length, yPixel);
                    canvas.DrawLine(tickLeft, dataLeft, paintTick);
                    canvas.DrawText(tick.label, tickLeft.X - 3, yPixel + paintTick.TextSize * 0.35f, paintTick);
                    canvas.DrawLine(dataLeft, dataRight, paintGrid);
                }
            }
        }
Example #2
0
        private void RenderLeft(SKCanvas canvas, Axes axes)
        {
            var yTickPaint = new SKPaint()
            {
                IsAntialias = true,
                TextSize    = 12,
                TextAlign   = SKTextAlign.Right,
                Color       = yTickColor
            };

            var gridPaint = new SKPaint()
            {
                IsAntialias = true,
                Color       = gridColor
            };

            SKRect dataRect = axes.GetDataRect();

            foreach (Tick tick in ticks)
            {
                if ((tick.value >= axes.y.low) && (tick.value <= axes.y.high))
                {
                    float   yPixel    = axes.GetPixel(0, tick.value).Y;
                    SKPoint dataLeft  = new SKPoint(dataRect.Left, yPixel);
                    SKPoint dataRight = new SKPoint(dataRect.Right, yPixel);
                    SKPoint tickLeft  = new SKPoint(dataRect.Left - length, yPixel);
                    canvas.DrawLine(tickLeft, dataLeft, yTickPaint);
                    canvas.DrawText(tick.label, tickLeft.X - 3, yPixel + yTickPaint.TextSize * 0.35f, yTickPaint);
                    canvas.DrawLine(dataLeft, dataRight, gridPaint);
                }
            }
        }
Example #3
0
        private void RenderBottom(SKCanvas canvas, Axes axes)
        {
            SKPaint paintTick = new SKPaint()
            {
                IsAntialias = true,
                TextSize    = 12,
                TextAlign   = SKTextAlign.Center,
                Color       = SKColor.Parse("#FF000000")
            };

            SKPaint paintGrid = new SKPaint()
            {
                IsAntialias = true,
                Color       = SKColor.Parse("#33000000")
            };

            SKRect dataRect = axes.GetDataRect();

            foreach (Tick tick in ticks)
            {
                if ((tick.value >= axes.x.low) && (tick.value <= axes.x.high))
                {
                    float   xPixel  = axes.GetPixel(tick.value, 0).X;
                    SKPoint dataTop = new SKPoint(xPixel, dataRect.Top);
                    SKPoint dataBot = new SKPoint(xPixel, dataRect.Bottom);
                    SKPoint tickBot = new SKPoint(xPixel, dataRect.Bottom + length);
                    canvas.DrawLine(dataBot, tickBot, paintTick);
                    canvas.DrawText(tick.label, xPixel, tickBot.Y + paintTick.TextSize, paintTick);
                    canvas.DrawLine(dataBot, dataTop, paintGrid);
                }
            }
        }
Example #4
0
        private void RenderBottom(SKCanvas canvas, Axes axes)
        {
            var xTickPaint = new SKPaint()
            {
                IsAntialias = true,
                TextSize    = 12,
                TextAlign   = SKTextAlign.Center,
                Color       = xTickColor
            };

            var gridPaint = new SKPaint()
            {
                IsAntialias = true,
                Color       = gridColor
            };

            SKRect dataRect = axes.GetDataRect();

            foreach (Tick tick in ticks)
            {
                if ((tick.value >= axes.x.low) && (tick.value <= axes.x.high))
                {
                    float   xPixel  = axes.GetPixel(tick.value, 0).X;
                    SKPoint dataTop = new SKPoint(xPixel, dataRect.Top);
                    SKPoint dataBot = new SKPoint(xPixel, dataRect.Bottom);
                    SKPoint tickBot = new SKPoint(xPixel, dataRect.Bottom + length);
                    canvas.DrawLine(dataBot, tickBot, xTickPaint);
                    canvas.DrawText(tick.label, xPixel, tickBot.Y + xTickPaint.TextSize, xTickPaint);
                    canvas.DrawLine(dataBot, dataTop, gridPaint);
                }
            }
        }
Example #5
0
        public void Render(SKCanvas canvas, SKRect plotRect)
        {
            // update plot-level layout with the latest plot dimensions
            layout.Update(plotRect);

            if (!axes.x.isValid || !axes.y.isValid)
            {
                AutoAxis();
            }

            axes.SetDataRect(layout.dataRect);
            axes2.SetDataRect(layout.dataRect);

            // draw the graphics
            yTicks.Generate(axes.y.low, axes.y.high, layout.dataRect);
            y2Ticks.Generate(axes2.y.low, axes2.y.high, layout.dataRect);
            xTicks.Generate(axes.x.low, axes.x.high, layout.dataRect);
            if (yTicks.biggestTickLabelSize.Width > layout.yScaleWidth)
            {
                Debug.WriteLine("increasing Y scale width to prevent overlapping with label Y label");
                layout.yScaleWidth = yTicks.biggestTickLabelSize.Width;
                layout.Update(plotRect);
            }

            var fillPaint = new SKPaint();

            fillPaint.Color = SKColor.Parse("#FFFFFF");
            //fillPaint.Color = Tools.RandomColor(); // useful for assessing when plots are redrawn
            canvas.DrawRect(layout.dataRect, fillPaint);

            yTicks.Render(canvas, axes);
            y2Ticks.Render(canvas, axes2);
            xTicks.Render(canvas, axes);

            canvas.Save();
            canvas.ClipRect(axes.GetDataRect());

            foreach (var primaryPlottable in GetPlottableList(false))
            {
                primaryPlottable.Render(canvas, axes);
            }
            foreach (var secondaryPlottable in GetPlottableList(true))
            {
                secondaryPlottable.Render(canvas, axes2);
            }

            canvas.Restore();

            //RenderLayoutDebug(canvas);
            RenderLabels(canvas);
        }
Example #6
0
 private void DrawPlottables(SKCanvas canvas)
 {
     canvas.Save();
     canvas.ClipRect(axes.GetDataRect());
     foreach (var primaryPlottable in GetPlottablesByAxis(false))
     {
         primaryPlottable.Render(canvas, axes);
     }
     foreach (var secondaryPlottable in GetPlottablesByAxis(true))
     {
         secondaryPlottable.Render(canvas, axes2);
     }
     canvas.Restore();
 }
Example #7
0
        private void RenderLeft(Graphics gfx, Axes axes)
        {
            RectangleF   dataRect = axes.GetDataRect();
            StringFormat sf       = Tools.StringFormat(Tools.AlignHoriz.right, Tools.AlignVert.center);

            foreach (Tick tick in ticks)
            {
                if ((tick.value >= axes.y.low) && (tick.value <= axes.y.high))
                {
                    float yPixel = axes.GetPixel(0, tick.value).Y;
                    gfx.DrawLine(Pens.LightGray, dataRect.Left, yPixel, dataRect.Right, yPixel);
                    gfx.DrawLine(Pens.Black, dataRect.Left, yPixel, dataRect.Left - length, yPixel);
                    gfx.DrawString(tick.label, font, brush, new PointF(dataRect.Left - length, yPixel), sf);
                }
            }
        }
Example #8
0
        private void RenderBottom(Graphics gfx, Axes axes)
        {
            RectangleF   dataRect = axes.GetDataRect();
            StringFormat sf       = Tools.StringFormat(Tools.AlignHoriz.center, Tools.AlignVert.top);

            foreach (Tick tick in ticks)
            {
                if ((tick.value >= axes.x.low) && (tick.value <= axes.x.high))
                {
                    float xPixel = axes.GetPixel(tick.value, 0).X;
                    gfx.DrawLine(Pens.LightGray, xPixel, dataRect.Bottom, xPixel, dataRect.Top);
                    gfx.DrawLine(Pens.Black, xPixel, dataRect.Bottom, xPixel, dataRect.Bottom + length);
                    gfx.DrawString(tick.label, font, brush, new PointF(xPixel, dataRect.Bottom + length), sf);
                }
            }
        }