Beispiel #1
0
        public void Draw(SKSurface surface, List <IGraphItem> graphItems)
        {
            SKCanvas canvas = surface.Canvas;

            foreach (var item in graphItems)
            {
                string type = item.GetType().ToString();
                int    pos  = type.LastIndexOf('.');
                type = type.Substring(pos + 1);
                switch (type)
                {
                case "GraphClear":
                    GraphClear graphClear = item as GraphClear;
                    canvas.Clear(graphClear.Color);
                    break;

                case "GraphLine":
                    GraphLine graphLine = item as GraphLine;
                    canvas.DrawLine(graphLine.XPosStart, graphLine.YPosStart, graphLine.XPosEnd, graphLine.YPosEnd, GetLineBrush(graphLine));
                    break;

                case "GraphRectangle":
                    GraphRectangle graphRectangle = item as GraphRectangle;
                    var            rect           = SKRect.Create(graphRectangle.XPos, graphRectangle.YPos, graphRectangle.Width, graphRectangle.Height);
                    canvas.DrawRect(rect, GetRectangleBrush(graphRectangle));
                    break;

                case "GraphText":
                    GraphText graphText = item as GraphText;
                    if (graphText.Rotation == 0)
                    {
                        canvas.DrawText(graphText.Text, graphText.XPos, graphText.YPos, GetTextBrush(graphText));
                    }
                    else
                    {
                        using (new SKAutoCanvasRestore(canvas))     // https://stackoverflow.com/questions/41908497/draw-rotated-text-in-skiasharp
                        {
                            // do any transformations
                            canvas.RotateDegrees(graphText.Rotation, graphText.XPos, graphText.YPos);
                            // do serious work
                            canvas.DrawText(graphText.Text, graphText.XPos, graphText.YPos, GetTextBrush(graphText));
                            // auto restore, even on exceptions or errors
                        }
                    }
                    break;

                case "GraphCircle":
                    GraphCircle graphCircle = item as GraphCircle;
                    canvas.DrawCircle(graphCircle.XPos, graphCircle.YPos, graphCircle.Radius, GetCircleBrush(graphCircle));
                    break;
                }
            }
        }
Beispiel #2
0
        SKPaint GetCircleBrush(GraphCircle graphCircle)
        {
            SKPaint brush;
            string  key = $"{graphCircle.Color}{graphCircle.StrokeWidth}{graphCircle.PaintStyle}";

            if (lineBrushes.ContainsKey(key))
            {
                brush = lineBrushes[key];
            }
            else
            {
                brush = new SKPaint
                {
                    Style       = graphCircle.PaintStyle,
                    Color       = graphCircle.Color,
                    StrokeWidth = graphCircle.StrokeWidth
                };
                lineBrushes[key] = brush;
            }
            return(brush);
        }