コード例 #1
0
        private void DrawLegends(SKCanvas canvas, int width, int height)
        {
            if (!LegendNames.Any())
            {
                return;
            }

            List <SKColor> colors = new List <SKColor> {
            };

            foreach (List <ChartEntry> l in MultiLineEntires)
            {
                colors.Add(l[0].Color);
            }

            int radius_size = 20;

            using (var paint = new SKPaint())
            {
                paint.TextSize    = this.LabelTextSize;
                paint.IsAntialias = true;
                paint.IsStroke    = false;

                float x = 200 + radius_size * 2;
                float y = 50;

                foreach (string legend in LegendNames)
                {
                    paint.Color = SKColor.Parse("#000000");
                    canvas.DrawText(legend, x + radius_size + 10, y, paint);

                    paint.Color = colors.ElementAt(LegendNames.IndexOf(legend));
                    canvas.DrawCircle(x, y - radius_size / 2 - radius_size / 4, radius_size, paint);

                    x += radius_size * 2 + this.LabelTextSize * (legend.Length / 2 + 2);
                }

                var minPoint = points.Min(p => p.Y);
                var maxPoint = points.Max(p => p.Y);

                paint.Color    = SKColor.Parse("#000000");
                paint.TextSize = 20;
                canvas.DrawCircle(12, minPoint, 5, paint);
                canvas.DrawText(NumbersTools.GetNember(multiLineMax), 0, minPoint - 20, paint);
                canvas.DrawCircle(12, maxPoint, 5, paint);
                canvas.DrawText(NumbersTools.GetNember(multiLineMin), 0, maxPoint - 20, paint);

                var step      = maxPoint / 8;
                var valueStep = multiLineMax / 6;
                for (int i = 1; i < 6; i++)
                {
                    var tt = (maxPoint - step * i);
                    if (minPoint < (maxPoint - step * i) && Math.Abs(minPoint - (maxPoint - step * i)) >= step)
                    {
                        canvas.DrawCircle(12, (maxPoint - step * i), 5, paint);
                        canvas.DrawText(NumbersTools.GetNember(valueStep * i), 0, (maxPoint - step * i) - 20, paint);
                    }
                }
            }
        }
コード例 #2
0
        void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)
        {
            SKImageInfo info    = args.Info;
            SKSurface   surface = args.Surface;
            SKCanvas    canvas  = surface.Canvas;

            canvas.Clear();

            using (SKPaint paint = new SKPaint())
            {
                int unit          = info.Width / 188;
                int circleCentreX = 6 * unit;
                for (uint i = 0; i < 9; i++)
                {
                    if (PIN.Length > i)
                    {
                        paint.Color       = new SKColor(0xff416aff);
                        paint.Style       = SKPaintStyle.StrokeAndFill;
                        paint.StrokeWidth = unit;
                        canvas.DrawCircle(circleCentreX, 6 * unit, 5 * unit, paint);
                    }
                    else
                    {
                        paint.Color       = new SKColor(0xffe4e6ed);
                        paint.Style       = SKPaintStyle.Stroke;
                        paint.StrokeWidth = unit;
                        canvas.DrawCircle(circleCentreX, 6 * unit, 5 * unit, paint);
                    }
                    circleCentreX += 22 * unit;
                }
            }
        }
コード例 #3
0
        public void Draw(SKCanvas canvas, float scale)
        {
            var screenDimensions = _drawingConfig.ScreenDimensions(scale);

            var sliderCenter = new SKPoint(_slider.Position.X * scale, _slider.Position.Y * scale);

            var radiusScale = !_slider.IsSelected ? 1f : 1.1f;
            var radius      = _slider.Radius * radiusScale * scale;

            canvas.DrawCircle(sliderCenter, radius + screenDimensions.BetweenCirclesMargin, new SKPaint()
            {
                Shader = SKShader.CreateColor(_drawingConfig.BackgroundColor), IsStroke = false, IsAntialias = true
            });
            canvas.DrawCircle(sliderCenter, radius, new SKPaint()
            {
                Shader = SKShader.CreateColor(_slider.Color), IsStroke = false, IsAntialias = true
            });
            if (_slider.IsSelected)
            {
                canvas.DrawCircle(sliderCenter, radius / 2f, new SKPaint()
                {
                    Shader = SKShader.CreateColor(_drawingConfig.BackgroundColor), IsStroke = false, IsAntialias = true
                });
            }
        }
コード例 #4
0
        /// <summary>
        /// draw grid lines in the canvas
        /// </summary>
        /// <param name="args"></param>
        void SetupCanvas(SKPaintSurfaceEventArgs args)
        {
            SKImageInfo info    = args.Info;
            SKSurface   surface = args.Surface;
            SKCanvas    canvas  = surface.Canvas;

            // gray color line paint
            SKPaint graphPaint = new SKPaint
            {
                Style       = SKPaintStyle.Stroke,
                Color       = SKColors.Gray,
                StrokeWidth = 1,
                StrokeCap   = SKStrokeCap.Square,
                StrokeJoin  = SKStrokeJoin.Round
            };

            // canvas is divived in to graph coordinates each coorinates size is respect to the screen width / height
            float widthDensity  = Convert.ToSingle(canvasView.CanvasSize.Width / rows);
            float heightDensity = Convert.ToSingle(canvasView.CanvasSize.Height / rows);

            canvas.Clear();
            int radious = 5;

            // draw grid lines vertically and horizontally
            for (int index = 0; index < rows + 1; index++)
            {
                canvas.DrawCircle(new SKPoint(index * widthDensity, 0), radious, graphPaint);
                canvas.DrawCircle(new SKPoint(index * widthDensity, canvasView.CanvasSize.Height), radious, graphPaint);
                canvas.DrawCircle(new SKPoint(0, index * heightDensity), radious, graphPaint);
                canvas.DrawCircle(new SKPoint(0, index * heightDensity), radious, graphPaint);
                canvas.DrawLine(index * widthDensity, 0, index * widthDensity, canvasView.CanvasSize.Height, graphPaint);
                canvas.DrawLine(0, index * heightDensity, canvasView.CanvasSize.Width, index * heightDensity, graphPaint);
            }
        }
コード例 #5
0
        //private void DrawBorder(SKCanvas canvas, int height, int width)
        //{
        //    using (var paint = new SKPaint { IsAntialias = true, Color = SKColors.Black, Style = SKPaintStyle.Stroke })
        //    {
        //        canvas.DrawRect(0, 0, width, height, paint);
        //    }
        //}

        private void DrawClearSky(SKCanvas canvas, int height, int width, float factor = 1, float xFactor = 1, float yFactor = 1)
        {
            using (var paint = new SKPaint {
                IsAntialias = true
            })
            {
                if (!Weather.IsNightTime)
                {
                    paint.Shader = SKShader.CreateLinearGradient(
                        new SKPoint(0f, 0f),
                        new SKPoint(0f, height),
                        new SKColor[] { SKColors.LightGoldenrodYellow, SKColors.Yellow, SKColors.Orange },
                        new float[] { 0, 0.4f, 1 },
                        SKShaderTileMode.Clamp);
                    canvas.DrawCircle((width / 2) * xFactor, (height / 2) * yFactor, width * 0.4f * factor, paint);
                }
                else
                {
                    //TODO:NIGHT
                    paint.Shader = SKShader.CreateLinearGradient(
                        new SKPoint(0f, 0f),
                        new SKPoint(0f, height),
                        new SKColor[] { SKColors.LightGoldenrodYellow, SKColors.Yellow, SKColors.Orange },
                        new float[] { 0, 0.4f, 1 },
                        SKShaderTileMode.Clamp);
                    canvas.DrawCircle((width / 2) * xFactor, (height / 2) * yFactor, width * 0.4f * factor, paint);
                }
            }
        }
コード例 #6
0
        public void Render(SKCanvas canvas, IGeometryVisual gemoetry, double scale)
        {
            var circle = gemoetry as ICircle;

            if (circle == null || !circle.IsValid)
            {
                return;
            }
            using (var paint = new SKPaint())
            {
                // Draw Circle
                paint.Color       = circle.Color.ToSkiaColor();
                paint.IsAntialias = true;
                paint.IsStroke    = true;
                paint.StrokeWidth = (float)(circle.Size * scale);
                canvas.DrawCircle((float)(circle.Start.X * scale), (float)(circle.Start.Y * scale), (float)(circle.Radius * scale), paint);
                // Fill Circle
                if (!circle.IsFilled)
                {
                    return;
                }
                paint.Color    = circle.Color.ToFillColor().ToSkiaColor();
                paint.IsStroke = false;
                canvas.DrawCircle((float)(circle.Start.X * scale), (float)(circle.Start.Y * scale), (float)(circle.Radius * scale), paint);
            }
        }
コード例 #7
0
        void draw_bird_head(SKCanvas canvas, SKColor pc, SKColor dc)
        {
            paint.Style = SKPaintStyle.StrokeAndFill;
            paint.Color = SKColors.White;
            canvas.DrawCircle(head_x, head_y, head_radius, paint);

            if (RandomUtility.CreateRandom() < arc_chance)
            {
                paint.Style = SKPaintStyle.Fill;
                paint.Color = pc;
                // arc(head_x, head_y, head_size, head_size, random(.7, 1)*PI, 1.8*PI, PIE);
                double startAngle = RandomUtility.CreateRandom(0.7, 1) * Math.PI;
                double sweepAngle = 1.8 * Math.PI;
                canvas.DrawArc(new SKRect(head_x, head_y, head_x + head_radius, head_y + head_radius), (float)startAngle, (float)sweepAngle, true, paint);
            }

            paint.Color = dc;
            if (RandomUtility.CreateRandom() < head_fill_chance)
            {
                paint.Style = SKPaintStyle.StrokeAndFill;
            }
            else
            {
                paint.Style = SKPaintStyle.Stroke;
            }
            canvas.DrawCircle(head_x, head_y, head_radius, paint);
        }
コード例 #8
0
        public static void Draw(SKCanvas c)
        {
            const int   count           = 10;           //number of digits in outer circle
            const float r               = 100f;         //outer circle radius
            const float f               = 40f;          //font size in points
            const float thicknessAdjust = 2 * f / 3;    //thickness adjust of the two circles
            const float θ               = 360f / count; //angle to rotate when drawing each digit
            var         painter         = new SkiaSharp.MathPainter();
            var         cx              = c.DeviceClipBounds.Width / 2;
            var         cy              = c.DeviceClipBounds.Height / 2;

            painter.FontSize = f; //{ GlyphBoxColor = (SKColors.Red, SKColors.Red) };
            //draw outer circle
            using (var black = new SKPaint {
                Color = SKColors.Black, IsAntialias = true
            })
                c.DrawCircle(cx, cy, r + thicknessAdjust, black);
            painter.TextColor = SKColors.White;
            for (int i = 0; i < count; i++)
            {
                painter.LaTeX = i.ToString();
                var m = painter.Measure() ?? throw new Structures.InvalidCodePathException("Invalid LaTeX");
                painter.Draw(c, cx - m.Width / 2, cy + m.Height / 2 - r);
                c.RotateDegrees(θ, cx, cy);
            }
            //draw inner circle
            using (var white = new SKPaint {
                Color = SKColors.White, IsAntialias = true
            })
                c.DrawCircle(cx, cy, r - thicknessAdjust, white);
            painter.TextColor = SKColors.Black;
            painter.LaTeX     = @"\ \raisebox{25mu}{\begin{gather}C\#\\Math\end{gather}}\ ";
            painter.Draw(c);
        }
コード例 #9
0
        public void Render(SKCanvas canvas)
        {
            // Animation finished. Nothing to see here.
            if (Size < 0)
            {
                return;
            }

            // SkiaSharp shapes doesn't support inner stroke. It causes a weird empty circle if the stroke
            // width is greater than the double of the size of a shape. This is noticeable only under certain
            // conditions like low speed and wider ripples. This operation will produce perfect ripples
            // from start to finish.
            Paint.StrokeWidth = Math.Min(Paint.StrokeWidth, Size * 2);

            if (Size > 0 && Paint != null)
            {
                canvas.DrawCircle(Position, Size, Paint);
            }

            // Draw the trail
            if (_brush.Properties.RippleTrail)
            {
                // Start from end of ripple circle and ensure radios is never 0
                canvas.DrawCircle(Position, Math.Max(0, Size - _brush.Properties.RippleWidth.CurrentValue / 2f), _trailPaint);
            }
        }
コード例 #10
0
        void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)
        {
            SKImageInfo info    = args.Info;
            SKSurface   surface = args.Surface;
            SKCanvas    canvas  = surface.Canvas;

            canvas.Clear();

            SKPaint paint = new SKPaint
            {
                Style       = SKPaintStyle.Stroke,
                Color       = Color.Red.ToSKColor(),
                StrokeWidth = 50
            };

            canvas.DrawCircle(info.Width / 2, info.Height / 2, 100, paint);

            if (showFill)
            {
                paint.Style = SKPaintStyle.Fill;
                paint.Color = SKColors.Blue;
                canvas.DrawCircle(info.Width / 2, info.Height / 2, 100, paint);
            }

            Form1_Paint(sender, args);
        }
コード例 #11
0
        public static void Draw(string mark, SKCanvas canvas, SKPoint center, SKPaint paint)
        {
            switch (mark)
            {
            case "x":
                paint.StrokeWidth = 3;
                paint.Style       = SKPaintStyle.StrokeAndFill;
                canvas.DrawLine(center.X - 3, center.Y - 3, center.X + 3, center.Y + 3, paint);
                canvas.DrawLine(center.X - 3, center.Y + 3, center.X + 3, center.Y - 3, paint);
                return;

            case "o":
                paint.StrokeWidth = 1;
                paint.Style       = SKPaintStyle.Stroke;
                canvas.DrawCircle(center.X, center.Y, 5, paint);
                return;

            case "*":
                paint.StrokeWidth = 1;
                paint.Style       = SKPaintStyle.StrokeAndFill;
                canvas.DrawCircle(center.X, center.Y, 5, paint);
                return;

            default:
                paint.StrokeWidth = 1;
                paint.Style       = SKPaintStyle.StrokeAndFill;
                canvas.DrawCircle(center.X, center.Y, 5, paint);
                return;
            }
        }
コード例 #12
0
ファイル: Monitor.cs プロジェクト: Ayman-Elfaki/XRobot
        private void DrawSocket(SKCanvas canvas, float radius)
        {
            canvas.Save();

            _paint.Style = SKPaintStyle.Fill;

            _paint.Color = BackgroundColor.ToBaseGradientColors(IsEnabled)[0];

            canvas.DrawCircle(0, 0, radius.Scale(0.70f), _paint);

            canvas.Save();

            canvas.Scale(1, -1);

            _textPaint.StrokeWidth = 2;

            _textPaint.Style = SKPaintStyle.StrokeAndFill;

            _textPaint.TextSize = radius.Scale(0.5f);

            _textPaint.Typeface = _typeface;

            _textPaint.Color = IndicatorsColor.ToSKColor();


            canvas.DrawText(Value.ToString("000."), new SKPoint(-radius.Scale(0.45f), radius.Scale(0.20f)), _textPaint);

            canvas.Restore();

            DrawStroke(radius);

            canvas.DrawCircle(0, 0, radius.Scale(0.70f), _paint);

            canvas.Restore();
        }
コード例 #13
0
        private static void DrawRanges(Field field, SKCanvas canvas)
        {
            Boid  boid   = field.Boids[field.Boids.Count() - 1];
            float vision = (float)field.Vision;
            float repel  = (float)field.VisionRepel;

            using (var paint = new SKPaint()
            {
                IsAntialias = true, StrokeWidth = 2, IsStroke = true
            })
            {
                canvas.Save();
                canvas.Translate((float)boid.Pos.X, (float)boid.Pos.Y);
                canvas.RotateDegrees((float)boid.Vel.GetAngle());

                paint.Color = SKColors.Yellow;
                canvas.DrawLine(-5, 0, 5, 0, paint);
                canvas.DrawLine(0, 0, 0, 10, paint);

                paint.Color = SKColors.Magenta;
                canvas.DrawCircle(0, 0, repel, paint);
                canvas.DrawLine(0, repel - 5, 0, repel + 5, paint);

                paint.Color = SKColors.LightGreen;
                canvas.DrawCircle(0, 0, vision, paint);
                canvas.DrawLine(0, vision - 10, 0, vision + 10, paint);

                canvas.Restore();
            }
        }
コード例 #14
0
        public bool Draw(SKCanvas canvas, IReadOnlyViewport viewport, ILayer layer, IFeature feature, IStyle style, ISymbolCache symbolCache)
        {
            if (!(feature.Geometry is global::Mapsui.Geometries.Point worldPoint))
            {
                return(false);
            }

            var screenPoint = viewport.WorldToScreen(worldPoint);
            var color       = new SKColor((byte)rnd.Next(0, 256), (byte)rnd.Next(0, 256), (byte)rnd.Next(0, 256), (byte)(256.0 * layer.Opacity * style.Opacity));
            var colored     = new SKPaint()
            {
                Color = color, IsAntialias = true
            };
            var black = new SKPaint()
            {
                Color = SKColors.Black, IsAntialias = true
            };

            canvas.Translate((float)screenPoint.X, (float)screenPoint.Y);
            canvas.DrawCircle(0, 0, 15, colored);
            canvas.DrawCircle(-8, -12, 8, colored);
            canvas.DrawCircle(8, -12, 8, colored);
            canvas.DrawCircle(8, -8, 2, black);
            canvas.DrawCircle(-8, -8, 2, black);
            using (var path = new SKPath())
            {
                path.ArcTo(new SKRect(-8, 2, 8, 10), 25, 135, true);
                canvas.DrawPath(path, new SKPaint()
                {
                    Style = SKPaintStyle.Stroke, Color = SKColors.Black, IsAntialias = true
                });
            }

            return(true);
        }
コード例 #15
0
        //Evento donde se realiza todo el dibujo. Puede llamarse varias veces, por lo que debe mantener toda la información necesaria para volver a mostrar los gráficos
        private void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)
        {
            SKImageInfo info    = args.Info;      //Estructura que contiene información sobre la superficie de dibujo (COMO EL ANCHO Y ALTO DE PIXELES)
            SKSurface   surface = args.Surface;   //OBjeto que representa la superficie de dibujo. Su propiedad mas importante es Canvas de tipo SKCanvas (linea abajo)
            SKCanvas    canvas  = surface.Canvas; //Contexto gráfico que usamos para realizar los dibujos. Encapsula un estado de gráficos, que incluye transformaciones y el recorte

            canvas.Clear();                       //Método usado para limpiar el canvas con un color Transparente. Podemos pasarle como parámetro un color que será con el que limpiará, y lo establecerá
            //como fondo: canvas.Clear(SKColors.Yellow);

            //Se crea el contorno (borde) rojo del circulo
            SKPaint paint = new SKPaint        //SKPaint es una colección de propiedades de debujo de gráficos.
            {
                Style = SKPaintStyle.Stroke,   //Trazo de linea. Podemos establecer Stroke, fill (POR DEFECTO), o StrokeandFill (contorno y relleno del mismo color)
                Color = Color.Red.ToSKColor(), //Color del trazo. A DISTINGUIR entre colores de SkiaSharp (SKColors.Blue) y colores de xamarin (Color.Red). Se puede convertir los colores
                //de Xamarin a SkiaSharp con la propiedad ToSKColor (como en este ejemplo)
                StrokeWidth = 25               //Pixeles del trazo
            };

            paint.IsAntialias = true;                                       //Antialiasing a true para suavizart los bordes
            canvas.DrawCircle(info.Width / 2, info.Height / 2, 100, paint); //Las coordenadas se toman como referencia desde la esquina superior izquierda.
            //Pintamos el borde círculo (coordenada X pantalla, coordenada Y pantalla, radio del círculo, objeto SkPain)

            //Pintamos el interior del circulo, creando otro circulo sobre el mismo punto del anterior. PINTA EL ANTERIOR, Y SOBRE EL SU RELLENO PARA QUE PUEDAN TENER 2 COLORES DISTINTOS
            if (showFill)//Togle que pinta y quita el relleno cuando hacemos tap (click) sobre el circulo
            {
                paint.Style = SKPaintStyle.Fill;
                paint.Color = SKColors.Blue;
                canvas.DrawCircle(info.Width / 2, info.Height / 2, 100, paint);
            }
        }
コード例 #16
0
        private void DrawFluidGlass(SKPaintSurfaceEventArgs e)
        {
            SKImageInfo info    = e.Info;
            SKSurface   surface = e.Surface;
            SKCanvas    canvas  = surface.Canvas;
            SKPoint     center  = new SKPoint(info.Width / 2, info.Height / 2);

            // fluid glass
            SKPoint bottomFluidGlassHullCenter = new SKPoint(info.Width / 2, info.Height + bottomFluidGlassCircleCenterY);

            SKPaint fluidGlassHullPaint = new SKPaint
            {
                IsAntialias = true,
                Style       = SKPaintStyle.Fill,
                Color       = GlassColor.ToSKColor(),
            };

            SKRect fluidTopGlass = new SKRect();

            fluidTopGlass.Left   = bottomFluidGlassHullCenter.X - topFluidGlassWidth / 2;
            fluidTopGlass.Top    = 0 + topFluidGlassCircleCenterY;
            fluidTopGlass.Right  = bottomFluidGlassHullCenter.X + topFluidGlassWidth / 2;
            fluidTopGlass.Bottom = bottomFluidGlassHullCenter.Y;

            var width = fluidTopGlass.Width / 2;

            // top fluid glass
            canvas.DrawRect(fluidTopGlass, fluidGlassHullPaint);
            canvas.DrawCircle(bottomFluidGlassHullCenter.X, fluidTopGlass.Top, fluidTopGlass.Width / 2, fluidGlassHullPaint);

            // bottom fluid glass
            canvas.DrawCircle(bottomFluidGlassHullCenter.X, bottomFluidGlassHullCenter.Y, bottomFluidGlassHullRadius, fluidGlassHullPaint);
        }
コード例 #17
0
        void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)
        {
            SKImageInfo info    = args.Info;
            SKSurface   surface = args.Surface;
            SKCanvas    canvas  = surface.Canvas;

            canvas.Clear();

            using (SKPaint paint = new SKPaint())
            {
                paint.Style       = SKPaintStyle.Stroke;
                paint.StrokeWidth = 2;
                if (drawStage > 0)
                {
                    paint.Color = new SKColor(0x66416aff);
                    canvas.DrawCircle(info.Width / 2, info.Height / 2, info.Height / 10 * 3, paint);
                }
                if (drawStage > 1)
                {
                    paint.Color = new SKColor(0x33416aff);
                    canvas.DrawCircle(info.Width / 2, info.Height / 2, info.Height / 10 * 4, paint);
                }
                if (drawStage > 2)
                {
                    paint.Color = new SKColor(0x22416aff);
                    canvas.DrawCircle(info.Width / 2, info.Height / 2, info.Height / 10 * 5, paint);
                }
            }
        }
コード例 #18
0
        private void OnCanvasViewPaintSurface(object sender, SkiaSharp.Views.Forms.SKPaintSurfaceEventArgs args)
        {
            SKImageInfo info    = args.Info;
            SKSurface   surface = args.Surface;
            SKCanvas    canvas  = surface.Canvas;

            canvas.Clear();

            SKPaint paint = new SKPaint()
            {
                Style       = SKPaintStyle.Stroke,
                Color       = Color.Red.ToSKColor(),
                StrokeWidth = 50,
                IsAntialias = true
            };

            canvas.DrawCircle(info.Width / 2, info.Height / 2, 100, paint);

            if (showFill)
            {
                paint.Style = SKPaintStyle.Fill;
                paint.Color = SKColors.Blue;
                canvas.DrawCircle(info.Width / 2, info.Height / 2, 100, paint);
            }
        }
コード例 #19
0
        public void PaintSurface(SkiaManager skiaManager, SKCanvas canvas)
        {
            (Vector2 Min, Vector2 Max) = RectTransform.Rect;
            float   radius = ((CircleArea)StartRegion).Radius;
            SKPoint pos    = ((CircleArea)StartRegion).Position.ToSKPoint();

            canvas.DrawCircle(skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(pos), skiaManager.SketchSpaceToCanvasSpaceMatrix.MapRadius(radius), IdlePaint);
            canvas.DrawCircle(skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(pos), skiaManager.SketchSpaceToCanvasSpaceMatrix.MapRadius(MaxLength), MaxLengthAreaPaint);
            if (Pressed)
            {
                var endPos = (((CircleArea)StartRegion).Position + Delta).ToSKPoint();
                canvas.DrawLine(skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(pos), skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(endPos), LinePaint);


                var           pointer      = OnSketchPointer;
                SKPoint       pointerPoint = skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(new SKPoint(pointer.Point.X, pointer.Point.Y));
                StringBuilder sb           = new StringBuilder();
                sb.AppendLine("POINTER INFO:");

                foreach (var area in AreaList.ToArray())
                {
                    if (area.Status == AreaStatus.Pressed)
                    {
                        sb.Append(area.AreaIdentifier + ", ");
                    }
                }

                canvas.DrawText(sb.ToString(), pointerPoint, _BoardFontPaint);
            }
        }
コード例 #20
0
        void SetupCanvas(SKPaintSurfaceEventArgs args)
        {
            SKImageInfo info    = args.Info;
            SKSurface   surface = args.Surface;
            SKCanvas    canvas  = surface.Canvas;


            SKPaint graphPaint = new SKPaint
            {
                Style       = SKPaintStyle.Stroke,
                Color       = SKColors.Gray,
                StrokeWidth = 1,
                StrokeCap   = SKStrokeCap.Square,
                StrokeJoin  = SKStrokeJoin.Round
            };


            float widthDensity  = Convert.ToSingle(canvasView.CanvasSize.Width / rows);
            float heightDensity = Convert.ToSingle(canvasView.CanvasSize.Height / rows);

            canvas.Clear();
            int radious = 5;

            for (int index = 0; index < rows + 1; index++)
            {
                canvas.DrawCircle(new SKPoint(index * widthDensity, 0), radious, graphPaint);
                canvas.DrawCircle(new SKPoint(index * widthDensity, canvasView.CanvasSize.Height), radious, graphPaint);
                canvas.DrawCircle(new SKPoint(0, index * heightDensity), radious, graphPaint);
                canvas.DrawCircle(new SKPoint(0, index * heightDensity), radious, graphPaint);
                canvas.DrawLine(index * widthDensity, 0, index * widthDensity, canvasView.CanvasSize.Height, graphPaint);
                canvas.DrawLine(0, index * heightDensity, canvasView.CanvasSize.Width, index * heightDensity, graphPaint);
            }
        }
コード例 #21
0
ファイル: CircleRenderer.cs プロジェクト: xeterixon/Sketching
        public void Render(SKCanvas canvas, IGeometryVisual gemoetry, double scale)
        {
            var circle = gemoetry as ICircle;

            if (circle == null || !circle.IsValid)
            {
                return;
            }
            using (var paint = new SKPaint())
            {
                // Draw Circle
                paint.Color       = circle.ToolSettings.SelectedColor.ToSkiaColor();
                paint.IsAntialias = true;
                paint.IsStroke    = true;
                paint.StrokeWidth = (float)(circle.Size * scale);
                canvas.DrawCircle((float)(circle.Start.X * scale), (float)(circle.Start.Y * scale), (float)(circle.Radius * scale), paint);
                // Fill Circle
                paint.Color    = circle.ToolSettings.SelectedColor.ToFillColor().ToSkiaColor();
                paint.IsStroke = false;
                if (circle.IsFilled)
                {
                    canvas.DrawCircle((float)(circle.Start.X * scale), (float)(circle.Start.Y * scale), (float)(circle.Radius * scale), paint);
                }
                if (circle.IsStenciled)
                {
                    using (var shader = ShaderFactory.Line(circle.ToolSettings.SelectedColor.ToSkiaColor()))
                    {
                        paint.Shader = shader;
                    }
                    canvas.DrawCircle((float)(circle.Start.X * scale), (float)(circle.Start.Y * scale), (float)(circle.Radius * scale), paint);
                }
            }
        }
コード例 #22
0
        public void PaintSurface(SkiaManager skiaManager, SKCanvas canvas)
        {
            (Vector2 Min, Vector2 Max) = RectTransform.Rect;
            //SKRect rect = skiaManager.SketchSpaceToCanvasSpaceMatrix.MapRect(new SKRect(Min.X, Min.Y, Max.X, Max.Y));
            //canvas.DrawRect(rect, dragPaint);
            float   radius = ((CircleArea)StartRegion).Radius;
            SKPoint pos    = ((CircleArea)StartRegion).Position.ToSKPoint();

            canvas.DrawCircle(skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(pos), skiaManager.SketchSpaceToCanvasSpaceMatrix.MapRadius(radius), paint);
            if (Pressed)
            {
                float Direction = (float)(Math.Atan2(Delta.Y, Delta.X) * 180 / Math.PI);
                float factor    = 0;
                float Distance  = Delta.Length();
                if (Direction < 0)
                {
                    factor = (Direction + 360) / 360;
                }
                else
                {
                    factor = (Direction) / 360;
                }
                SKColor baseColor = new SKColor(255, (byte)(255 * factor), 0);
                dragPaint.Color = baseColor;
                canvas.DrawCircle(skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(((CircleArea)StartRegion).Position.ToSKPoint()), skiaManager.SketchSpaceToCanvasSpaceMatrix.MapRadius(Distance), dragPaint);
            }
        }
コード例 #23
0
        private void surface_PaintSurface(object sender, SkiaSharp.Views.Desktop.SKPaintSurfaceEventArgs e)
        {
            if (!enabled)
            {
                return;
            }
            SKCanvas canvas = e.Surface.Canvas;

            canvas.Clear();
            float width  = e.Info.Width;
            float height = e.Info.Height;

            // Draw axis
            canvas.DrawColor(SKColors.LightGray);
            canvas.DrawLine(0, 0, 0, height, black);
            canvas.DrawLine(0, height - 1.5f, width, height - 1.5f, black);
            canvas.DrawText("X2", 28.0f, 35.0f, black);
            canvas.DrawText("X1", width - 45.0f, height - 35.0f, black);


            // Draw dots
            foreach (SKPoint pt in red_points)
            {
                canvas.DrawCircle(pt, 5, red);
            }

            foreach (SKPoint pt in blue_points)
            {
                canvas.DrawCircle(pt, 5, blue);
            }
        }
コード例 #24
0
ファイル: Pulse.cs プロジェクト: kjmckenzie/perimeter
        protected override void OnPaintSurface(SKPaintSurfaceEventArgs args)
        {
            base.OnPaintSurface(args);
            SKImageInfo info    = args.Info;
            SKSurface   surface = args.Surface;
            SKCanvas    canvas  = surface.Canvas;
            byte        R       = (byte)(PulseColor.R * 255);
            byte        G       = (byte)(PulseColor.G * 255);
            byte        B       = (byte)(PulseColor.B * 255);

            canvas.Clear();
            if (IsRun)
            {
                SKPoint center     = new SKPoint(info.Width / 2, info.Height / 2);
                float   baseRadius = Math.Min(info.Width, info.Height) / 12;
                float   radius     = 0;
                Console.WriteLine(radius);
                for (int i = 0; i < t.Length; i++)
                {
                    radius      = info.Width / 2 * (t[i]);
                    paint.Color = new SKColor(R, G, B, (byte)(255 * (1 - t[i])));
                    paint.Style = SKPaintStyle.Fill;
                    canvas.DrawCircle(center.X, center.Y, radius, paint);
                }

                paint.Color = new SKColor(R, G, B);
                canvas.DrawCircle(center.X, center.Y, 100, paint);

                if (resourceBitmap != null)
                {
                    canvas.DrawBitmap(resourceBitmap, center.X - resourceBitmap.Width / 2, center.Y - resourceBitmap.Height / 2);
                }
            }
        }
コード例 #25
0
        protected override void OnPaintSurface(SKPaintSurfaceEventArgs args)
        {
            base.OnPaintSurface(args);

            SKImageInfo info    = args.Info;
            SKSurface   surface = args.Surface;
            SKCanvas    canvas  = surface.Canvas;
            SKPaint     paint   = new SKPaint
            {
                Style = SKPaintStyle.Stroke
            };

            byte R = (byte)(PulseColor.R * 255);
            byte G = (byte)(PulseColor.G * 255);
            byte B = (byte)(PulseColor.B * 255);

            canvas.Clear();

            SKPoint center = new SKPoint(info.Width / 2, info.Height / 2);
            float   radius = info.Width / 2 * _time;

            paint.Color = new SKColor(R, G, B, (byte)(255 * (1 - _time)));
            paint.Style = SKPaintStyle.Fill;
            canvas.DrawCircle(center.X, center.Y, radius, paint);

            paint.Color = new SKColor(R, G, B);
            canvas.DrawCircle(center.X, center.Y, 85, paint);

            if (_resourceBitmap != null)
            {
                canvas.DrawBitmap(_resourceBitmap, center.X - _resourceBitmap.Width / 2, center.Y - _resourceBitmap.Height / 2);
            }
        }
コード例 #26
0
        /// <summary>
        ///  CanvasView PaintSurface maiking a panel
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void SKCanvasView_PaintSurface(object sender, SkiaSharp.Views.Forms.SKPaintSurfaceEventArgs args)
        {
            SKImageInfo info    = args.Info;
            SKSurface   surface = args.Surface;
            SKCanvas    canvas  = surface.Canvas;

            canvas.Clear();

            // paint object for circles
            SKPaint circlePaint = new SKPaint
            {
                Style       = SKPaintStyle.Stroke,
                Color       = Color.FromHex("#75D59F").ToSKColor(),
                StrokeWidth = 3,
                IsAntialias = true
            };

            SKPaint filledCirclePaint = new SKPaint
            {
                Style       = SKPaintStyle.StrokeAndFill,
                Color       = Color.FromHex("#75D59F").ToSKColor(),
                StrokeWidth = 3,
                IsAntialias = true
            };

            SKPaint dottendLinePaint = new SKPaint
            {
                Style       = SKPaintStyle.Stroke,
                Color       = Color.FromHex("#75D59F").ToSKColor(),
                StrokeWidth = 3,
                IsAntialias = true,
                PathEffect  = SKPathEffect.CreateDash(new float[] { 20, 15 }, 0)
            };

            float margin      = 40;
            float radius      = 15;
            float linePadding = 100;

            canvas.DrawCircle(new SKPoint(margin, info.Height / 2), radius, filledCirclePaint);
            canvas.DrawCircle(new SKPoint(margin, info.Height / 2), radius * 2, circlePaint);

            canvas.DrawLine(
                new SKPoint(linePadding, info.Height / 2),
                new SKPoint(info.Width / 2 - linePadding, +info.Height / 2),
                circlePaint
                );

            canvas.DrawCircle(new SKPoint(info.Width / 2, info.Height / 2), radius, circlePaint);

            canvas.DrawLine(
                new SKPoint(info.Width / 2 + linePadding, info.Height / 2),
                new SKPoint(info.Width - linePadding, info.Height / 2),
                dottendLinePaint
                );

            canvas.DrawCircle(new SKPoint(info.Width - margin, info.Height / 2), radius, circlePaint);
        }
コード例 #27
0
        void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)
        {
            SKImageInfo info    = args.Info;
            SKSurface   surface = args.Surface;
            SKCanvas    canvas  = surface.Canvas;

            canvas.Clear();

            // Translate to center
            canvas.Translate(info.Width / 2, info.Height / 2);

            // Draw the circle
            float radius = Math.Min(info.Width, info.Height) / 3;

            canvas.DrawCircle(0, 0, radius, blackStroke);

            // Get the value of the Slider
            float angle = (float)angleSlider.Value;

            // Calculate length of control point line
            float length = radius * 4 * (float)Math.Tan(Math.PI * angle / 180 / 4) / 3;

            // Calculate sin and cosine for half that angle
            float sin = (float)Math.Sin(Math.PI * angle / 180 / 2);
            float cos = (float)Math.Cos(Math.PI * angle / 180 / 2);

            // Find the end points
            SKPoint point0 = new SKPoint(-radius * sin, radius * cos);
            SKPoint point3 = new SKPoint(radius * sin, radius * cos);

            // Find the control points
            SKPoint point0Normalized = Normalize(point0);
            SKPoint point1           = point0 + new SKPoint(length * point0Normalized.Y,
                                                            -length * point0Normalized.X);

            SKPoint point3Normalized = Normalize(point3);
            SKPoint point2           = point3 + new SKPoint(-length * point3Normalized.Y,
                                                            length * point3Normalized.X);

            // Draw the points
            canvas.DrawCircle(point0.X, point0.Y, 10, blackFill);
            canvas.DrawCircle(point1.X, point1.Y, 10, blackFill);
            canvas.DrawCircle(point2.X, point2.Y, 10, blackFill);
            canvas.DrawCircle(point3.X, point3.Y, 10, blackFill);

            // Draw the tangent lines
            canvas.DrawLine(point0.X, point0.Y, point1.X, point1.Y, dottedStroke);
            canvas.DrawLine(point3.X, point3.Y, point2.X, point2.Y, dottedStroke);

            // Draw the Bezier curve
            using (SKPath path = new SKPath())
            {
                path.MoveTo(point0);
                path.CubicTo(point1, point2, point3);
                canvas.DrawPath(path, redStroke);
            }
        }
コード例 #28
0
        private void canvasView_PaintSurface(object sender, SKPaintSurfaceEventArgs e)
        {
            SKImageInfo info     = e.Info;
            SKCanvas    sKCanvas = e.Surface.Canvas;

            sKCanvas.Clear();

            SKPaint sKPaint = new SKPaint
            {
                Style       = SKPaintStyle.Stroke,
                Color       = Color.Red.ToSKColor(),
                StrokeWidth = 25
            };

            sKPaint.Style = SKPaintStyle.Fill;
            sKPaint.Color = SKColors.Blue;

            sKCanvas.DrawCircle((info.Width / 2) + (accX * -500), (info.Height / 2) + (accY * 500), 100, sKPaint);

            //네이버로 이동하는 원
            sKPaint.Style = SKPaintStyle.Stroke;
            sKPaint.Color = SKColors.Green;

            sKCanvas.DrawCircle((info.Width / 2) - 200, info.Height / 2, 100, sKPaint);

            //종료하는 원
            sKPaint.Style = SKPaintStyle.Stroke;
            sKPaint.Color = SKColors.Black;

            sKCanvas.DrawCircle((info.Width / 2) + 200, info.Height / 2, 100, sKPaint);

            if ((info.Width / 2) + (accX * -500) < (info.Width / 2) - 200 && (info.Height / 2) + (accY * 500) > info.Height / 2)
            {
                if (open == 0)
                {
                    Open();
                    open = 1;
                }
                Device.StartTimer(TimeSpan.FromSeconds(3), () =>
                {
                    if (open == 1)
                    {
                        Open();
                        open = 0;

                        return(true);
                    }

                    return(false);
                });
            }

            if ((info.Width / 2 + accX * -500) > (info.Width / 2) + 200 && (info.Height / 2 + accY * 500) > info.Height / 2)
            {
                OnDestroy();
            }
        }
コード例 #29
0
        private void CanvasView_PaintSurface(object sender, SkiaSharp.Views.Forms.SKPaintSurfaceEventArgs e)
        {
            SKImageInfo info   = e.Info;
            SKCanvas    canvas = e.Surface.Canvas;

            SKPaint strokePaint = GetPaintColor(SKPaintStyle.Stroke, null, 10, SKStrokeCap.Square);
            SKPaint dotPaint    = GetPaintColor(SKPaintStyle.Fill, "#DE0469");

            canvas.Clear();

            SKRect arcRect = new SKRect(10, 10, info.Width - 10, info.Height - 10);

            canvas.DrawOval(new SKRect(25, 25, info.Width - 25, info.Height - 25), GetPaintColor(SKPaintStyle.Fill, "#FFFFFF"));

            strokePaint.Shader = SKShader.CreateLinearGradient(
                new SKPoint(arcRect.Left, arcRect.Top),
                new SKPoint(arcRect.Right, arcRect.Bottom),
                new SKColor[] { SKColor.Parse("#DE0469"), SKColors.Transparent },
                new float[] { 0, 1 },
                SKShaderTileMode.Repeat);

            Path.ArcTo(arcRect, 45, 105, true);
            canvas.DrawPath(Path, strokePaint);

            canvas.Translate(info.Width / 2, info.Height / 2);
            canvas.Scale(info.Width / 200f);

            canvas.Save();
            canvas.RotateDegrees(240);
            canvas.DrawCircle(0, -75, 2, dotPaint);
            canvas.Restore();

            DateTime dateTime = DateTime.Now;

            //Draw hour hand
            canvas.Save();
            canvas.RotateDegrees(30 * dateTime.Hour + dateTime.Minute / 2f);
            canvas.DrawLine(0, 5, 0, -60, GetPaintColor(SKPaintStyle.Stroke, "#262626", 4, SKStrokeCap.Square));
            canvas.Restore();

            //Draw minute hand
            canvas.Save();
            canvas.RotateDegrees(6 * dateTime.Minute + dateTime.Second / 10f);
            canvas.DrawLine(0, 10, 0, -90, GetPaintColor(SKPaintStyle.Stroke, "#DE0469", 2, SKStrokeCap.Square));
            canvas.Restore();

            canvas.DrawCircle(0, 0, 5, dotPaint);

            SecondsTxt.Text = dateTime.Second.ToString("00");
            TimeTxt.Text    = dateTime.ToString("hh:mm");
            PeriodTxt.Text  = dateTime.Hour >= 12 ? "PM" : "AM";

            var alarmDiff = GetNextAlarm() - dateTime;

            AlarmTxt.Text = $"{alarmDiff.Hours}h {alarmDiff.Minutes}m until next alarm";
        }
コード例 #30
0
        /// <summary>
        /// Fills the cache with bitmaps for the given dataset.
        /// </summary>
        protected void Fill(DataSetImageCache cache, ILineDataSet set, bool drawCircleHole, bool drawTransparentCircleHole)
        {
            int   colorCount       = set.CircleColorCount;
            float circleRadius     = set.CircleRadius;
            float circleHoleRadius = set.CircleHoleRadius;
            var   circleBitmaps    = cache.CircleBitmaps;
            var   circlePath       = cache.CirclePathBuffer;

            for (int i = 0; i < colorCount; i++)
            {
                var circleBitmap = new SKBitmap((int)(circleRadius * 2.1), (int)(circleRadius * 2.1));

                var canvas = new SKCanvas(circleBitmap);
                circleBitmaps[i]  = circleBitmap;
                RenderPaint.Color = set.GetCircleColor(i);

                if (drawTransparentCircleHole)
                {
                    // Begin path for circle with hole
                    circlePath.Reset();

                    circlePath.AddCircle(
                        circleRadius,
                        circleRadius,
                        circleRadius,
                        SKPathDirection.Clockwise);

                    // Cut hole in path
                    circlePath.AddCircle(
                        circleRadius,
                        circleRadius,
                        circleHoleRadius,
                        SKPathDirection.CounterClockwise);

                    // Fill in-between
                    canvas.DrawPath(circlePath, RenderPaint);
                }
                else
                {
                    canvas.DrawCircle(
                        circleRadius,
                        circleRadius,
                        circleRadius,
                        RenderPaint);

                    if (drawCircleHole)
                    {
                        canvas.DrawCircle(
                            circleRadius,
                            circleRadius,
                            circleHoleRadius,
                            CirclePaintInner);
                    }
                }
            }
        }