void draw_wings(SKCanvas canvas, List <SKPoint> wing, bool upper_wing = false)
        {
            List <SKBlendMode> modes = new List <SKBlendMode>()
            {
                SKBlendMode.ColorBurn, SKBlendMode.Multiply, SKBlendMode.Difference, SKBlendMode.Darken
            };
            SKBlendMode style = RandomUtility.GetRandomElement <SKBlendMode>(modes);
            //canvas.ResetMatrix();
            int canvasCacheTag = canvas.Save();

            if (upper_wing)
            {
                canvas.Scale(1, -1);
            }

            paint.BlendMode = style;
            //draw_curve_filled( wing )
            SkiaSharpUtility.DrawSplineCurve(canvas, paint, wing, true, SKPathFillType.Winding);

            paint.BlendMode = SKBlendMode.Multiply;// BLEND
            canvas.Scale(-1, 1);

            paint.BlendMode = style;
            // draw_curve_filled(wing)
            SkiaSharpUtility.DrawSplineCurve(canvas, paint, wing, true, SKPathFillType.Winding);

            paint.BlendMode = SKBlendMode.Multiply;// BLEND
            //canvas.ResetMatrix();
            canvas.RestoreToCount(canvasCacheTag);
        }
        void draw(SKCanvas canvas)
        {
            int frameCount  = Utility.CreateRandom(1, 499);
            int random_seed = (int)(frameCount * 1000000 / (DateTime.Now.Second + 1));

            random_seed = getSeed(random_seed);
            //helper.set_seed(random_seed)

            //blendMode(BLEND)
            paint.BlendMode = SKBlendMode.Multiply;

            // translate(width / 2, height / 2)
            canvas.Translate(w / 2f, h / 2f);
            canvas.Save();
            int palette_idx = RandomUtility.CreateRandom(0, pal.Count);
            var palette     = pal[palette_idx];

            //range_upper_angles = [x for x in range( int( random( 0, 20 ) ), int( random( 50, 80 ) ), int( random( 7, 20 ) ) )]
            //range_lower_angles = [x for x in range( int( random( 0, 20 ) ), int( random( 50, 80 ) ), int( random( 7, 20 ) ) )]
            // class range(start, stop[, step])
            // 0: start/min, 1: end/max, 2: step
            int[] upperSettings = new int[3] {
                RandomUtility.CreateRandom(0, 20), RandomUtility.CreateRandom(50, 80), RandomUtility.CreateRandom(7, 20)
            };
            List <int> range_upper_angles = new List <int>();

            for (int i = upperSettings[0]; i < upperSettings[1]; i += upperSettings[2])
            {
                range_upper_angles.Add(i);
            }
            int[] lowerSettings = new int[3] {
                RandomUtility.CreateRandom(0, 20), RandomUtility.CreateRandom(50, 80), RandomUtility.CreateRandom(7, 20)
            };
            List <int> range_lower_angles = new List <int>();

            for (int i = lowerSettings[0]; i < lowerSettings[1]; i += lowerSettings[2])
            {
                range_lower_angles.Add(i);
            }

            //range_upper_radii = [width * 0.2, width * 0.45]
            //range_lower_radii = [width * 0.2, width * 0.3]
            //SKPoint range_upper_radii = new SKPoint( w * 0.2f, w * 0.45f );
            //SKPoint range_lower_radii = new SKPoint( w * 0.2f, w * 0.3f );

            int    num_layers = 10;
            string lines      = RandomUtility.GetRandomElement <string>(availableLines);

            // curveTightness(random(-2, 0.6))

            DrawUpperWings(canvas, palette, num_layers, lines, range_upper_angles);

            var lastPalette = DrawLowerWings(canvas, palette, lines, range_lower_angles);

            var lastUpperAngle = range_upper_angles[range_upper_angles.Count - 1];

            lastPalette = RandomUtility.GetRandomElement <SKColor>(palette);
            DrawAntennaeAndBody(canvas, lastUpperAngle, lastPalette);
        }
Example #3
0
        void draw(SKCanvas canvas)
        {
            float  current_x = w / 2.0f - grid_x_pixels / 2.0f + 10;
            float  current_y = h / 2.0f - grid_y_pixels / 2.0f + body_height - 10;
            var    pc        = RandomUtility.GetRandomElement <SKColor>(colors);
            double inc       = .2f * 255; // 255 * RandomUtility.CreateRandom( 0.2, 1 ); //
            var    dc        = SkiaSharpUtility.CreateRGBColor((byte)(pc.Red - inc), (byte)(pc.Green - inc), (byte)(pc.Blue - inc));


            drawBird(canvas, current_x, current_y, pc, bc, dc);
        }
Example #4
0
        SKPoint draw_bird_body(SKCanvas canvas, float x, float y, SKColor pc, SKColor bc, SKColor dc)
        {
            // stroke(*dc)
            float body_bottom = y - feet_length / 2.0f;

            SKPoint body_one   = new SKPoint(x - feet_length * 2.0f, body_bottom);
            SKPoint body_two   = new SKPoint(x + feet_length * 1.5f, body_bottom);
            SKPoint body_three = new SKPoint(x + feet_length * 2.1f, body_bottom - body_height);
            SKPoint body_four  = new SKPoint(x, body_bottom - body_height * 1.3f);

            SKPoint left_midpoint   = new SKPoint((body_four.X + body_one.X) / 2, (body_four.Y + body_one.Y) / 2);
            SKPoint top_midpoint    = new SKPoint((body_four.X + body_three.X) / 2, (body_four.Y + body_three.Y) / 2);
            SKPoint right_midpoint  = new SKPoint((body_two.X + body_three.X) / 2, (body_two.Y + body_three.Y) / 2);
            SKPoint bottom_midpoint = new SKPoint((body_one.X + body_two.X) / 2, (body_one.Y + body_two.Y) / 2);

            //SKPoint true_midpoint = new SKPoint( ( left_midpoint.X + right_midpoint.X ) / 2, ( left_midpoint.Y + right_midpoint.Y ) / 2 );

            List <SKPoint> body_points = new List <SKPoint>()
            {
                body_one, body_three, body_four, left_midpoint, top_midpoint, bottom_midpoint
            };
            //fill( *bc )
            //beginShape()

            var pathBody = new SKPath {
                FillType = SKPathFillType.EvenOdd
            };

            pathBody.MoveTo(body_one);
            pathBody.LineTo(body_two);
            pathBody.LineTo(body_three);
            pathBody.LineTo(body_four);
            pathBody.Close();

            SkiaSharpUtility.PathStroke(canvas, paint, dc, pathBody);
            SkiaSharpUtility.PathFill(canvas, paint, bc, pathBody);
            //endShape(CLOSE)

            int range = RandomUtility.CreateRandom(1, 4);

            for (int i = 0; i < range; i++)
            {
                var point_one   = RandomUtility.GetRandomElement(body_points);
                var point_two   = RandomUtility.GetRandomElement(body_points);
                var point_three = RandomUtility.GetRandomElement(body_points);
                //var point_four = RandomUtility.GetRandomElement( body_points );

                // fill(pc[0], pc[1], pc[2])
                //beginShape()
                var path = new SKPath {
                    FillType = SKPathFillType.EvenOdd
                };
                path.MoveTo(point_one);
                path.LineTo(point_two);
                path.LineTo(point_three);
                path.Close();

                SkiaSharpUtility.PathStroke(canvas, paint, dc, path);
                SkiaSharpUtility.PathFill(canvas, paint, pc, path);
                //endShape(CLOSE)

                if (RandomUtility.CreateRandom() < 0.5)
                {
                    draw_lines(canvas, body_points, dc);
                }
            } // for
            head_x = x + feet_length;
            head_y = body_bottom - body_height * 1.1f;

            return(body_one);
        }
        SKColor DrawLowerWings(SKCanvas canvas, List <SKColor> palette, string lines, List <int> range_lower_angles)
        {
            SKPoint     origin       = new SKPoint(0, 0);
            List <byte> random2Bytes = new List <byte>()
            {
                0, 60
            };
            SKColor p = SKColors.Transparent;

            for (int i = 0; i < 11; i++)
            {
                switch (lines)
                {
                case "none":
                    // noStroke()
                    ProcessingSkiaSharp.noStroke(paint);
                    break;

                case "all":
                    // stroke(0, 0, 0, 60)
                    ProcessingSkiaSharp.stroke(paint, 0, 0, 0, 60);
                    break;

                case "outer":
                    // stroke(0, 0, 0, 60)
                    ProcessingSkiaSharp.stroke(paint, 0, 0, 0, 60);
                    break;

                case "some":
                    // stroke(0, 0, 0, helper.random_list_value([0, 60]))
                    byte randomByte = RandomUtility.GetRandomElement(random2Bytes);
                    ProcessingSkiaSharp.stroke(paint, 0, 0, 0, randomByte);
                    break;
                }
                //p = palette[int(random(0, len(palette)))]
                p = RandomUtility.GetRandomElement <SKColor>(palette);
                if (i == 3 || i == 6)
                {
                    // fill(0, 0, 100, 100)
                    ProcessingSkiaSharp.fill(paint, 0, 0, 100, 100);
                }
                else
                {
                    //fill(p[0], p[1], p[2], 20)
                    ProcessingSkiaSharp.fill(paint, p.Red, p.Green, p.Blue, 20);
                }

                List <SKPoint> wing = new List <SKPoint>()
                {
                    origin
                };
                foreach (int angle in range_lower_angles)
                {
                    // circle_points_list(random(0, width * 0.01), random(0, height * 0.01), random( width * 0.15, width * 0.3 ), radians( random( angle - 7, angle ) )))
                    float randomAngle = RandomUtility.CreateRandom(angle - 7, angle);
                    var   cp          = circle_points_list(RandomUtility.CreateRandom(0, w * 0.01f),
                                                           RandomUtility.CreateRandom(0, h * 0.01f),
                                                           RandomUtility.CreateRandom(w * 0.15f, w * 0.3f),
                                                           (float)ProcessingSkiaSharp.radians(randomAngle));
                    wing.Add(cp);
                }
                float tmpRangle = RandomUtility.CreateRandom(73, 87);
                var   tmpCp     = circle_points_list(RandomUtility.CreateRandom(0, w * 0.01f),
                                                     RandomUtility.CreateRandom(0, h * 0.01f),
                                                     RandomUtility.CreateRandom(w * 0.15f, w * 0.3f),
                                                     (float)ProcessingSkiaSharp.radians(tmpRangle));
                wing.Add(tmpCp);

                draw_wings(canvas, wing);
            } // for (int i = 0; i< 11

            for (int i = 0; i < 11; i++)
            {
                switch (lines)
                {
                case "none":
                    // noStroke()
                    ProcessingSkiaSharp.noStroke(paint);
                    break;

                case "all":
                    // stroke(0, 0, 0, 60)
                    ProcessingSkiaSharp.stroke(paint, 0, 0, 0, 60);
                    break;

                case "outer":
                    // noStroke()
                    ProcessingSkiaSharp.noStroke(paint);
                    break;

                case "some":
                    // stroke(0, 0, 0, helper.random_list_value([0, 60]))
                    byte randomByte = RandomUtility.GetRandomElement(random2Bytes);
                    ProcessingSkiaSharp.stroke(paint, 0, 0, 0, randomByte);
                    break;
                }
                //p = palette[int(random(0, len(palette)))]
                p = RandomUtility.GetRandomElement <SKColor>(palette);
                if (i == 3 || i == 6)
                {
                    // fill(0, 0, 100, 100)
                    ProcessingSkiaSharp.fill(paint, 0, 0, 100, 100);
                }
                else
                {
                    //fill(p[0], p[1], p[2], 20)
                    ProcessingSkiaSharp.fill(paint, p.Red, p.Green, p.Blue, 20);
                }

                List <SKPoint> wing = new List <SKPoint>()
                {
                    origin
                };
                foreach (int angle in range_lower_angles)
                {
                    // circle_points_list(random(0, width * 0.01), random(0, height * 0.01), random( width * 0.05, width * 0.2 ), radians( random( angle - 7, angle ) )))
                    float randomAngle = RandomUtility.CreateRandom(angle - 7, angle);
                    var   cp          = circle_points_list(RandomUtility.CreateRandom(0, w * 0.01f),
                                                           RandomUtility.CreateRandom(0, h * 0.01f),
                                                           RandomUtility.CreateRandom(w * 0.05f, w * 0.2f),
                                                           (float)ProcessingSkiaSharp.radians(randomAngle));
                    wing.Add(cp);
                }
                float tmpRangle = RandomUtility.CreateRandom(73, 87);
                var   tmpCp     = circle_points_list(RandomUtility.CreateRandom(0, w * 0.01f),
                                                     RandomUtility.CreateRandom(0, h * 0.01f),
                                                     RandomUtility.CreateRandom(w * 0.05f, w * 0.2f),
                                                     (float)ProcessingSkiaSharp.radians(tmpRangle));
                wing.Add(tmpCp);

                draw_wings(canvas, wing);
            } // for (int i = 0; i< 11

            return(p);
        }
        void DrawUpperWings(SKCanvas canvas, List <SKColor> palette, int num_layers, string lines, List <int> range_upper_angles)
        {
            SKPoint     origin       = new SKPoint(0, 0);
            List <byte> random2Bytes = new List <byte>()
            {
                0, 60
            };

            //List<List<SKPoint>> upper_wing = new List<List<SKPoint>>();
            //for (int i = 0; i < num_layers; i++) {
            //  //List<SKPoint> points
            //  //upper_wing.Add
            //} // for (int i = 0; i < num_layers

            for (int i = 0; i < 7; i++)
            {
                switch (lines)
                {
                case "none":
                    // noStroke()
                    ProcessingSkiaSharp.noStroke(paint);
                    break;

                case "all":
                    // stroke(0, 0, 0, 60)
                    ProcessingSkiaSharp.stroke(paint, 0, 0, 0, 60);
                    break;

                case "outer":
                    // stroke(0, 0, 0, 60)
                    ProcessingSkiaSharp.stroke(paint, 0, 0, 0, 60);
                    break;

                case "some":
                    // stroke(0, 0, 0, helper.random_list_value([0, 60]))
                    byte randomByte = RandomUtility.GetRandomElement(random2Bytes);
                    ProcessingSkiaSharp.stroke(paint, 0, 0, 0, randomByte);
                    break;
                }
                //p = palette[int(random(0, len(palette)))]
                if (i == 3 || i == 6)
                {
                    // fill(0, 0, 100, 100)
                    ProcessingSkiaSharp.fill(paint, 0, 0, 100, 100);
                }
                else
                {
                    var p = RandomUtility.GetRandomElement <SKColor>(palette);
                    //fill(p[0], p[1], p[2], 20)
                    ProcessingSkiaSharp.fill(paint, p.Red, p.Green, p.Blue, 20);
                }

                List <SKPoint> wing = new List <SKPoint>()
                {
                    origin
                };
                foreach (int angle in range_upper_angles)
                {
                    // circle_points_list(random(0, width * 0.01), random(0, height * 0.01), random( width * 0.2, width * 0.4 ), radians( random( angle - 7, angle ) )
                    float randomAngle = RandomUtility.CreateRandom(angle - 7, angle);
                    var   cp          = circle_points_list(RandomUtility.CreateRandom(0, w * 0.01f),
                                                           RandomUtility.CreateRandom(0, h * 0.01f),
                                                           RandomUtility.CreateRandom(w * 0.2f, w * 0.4f),
                                                           (float)ProcessingSkiaSharp.radians(randomAngle));
                    wing.Add(cp);
                }
                draw_wings(canvas, wing, true);
            } // for (int i = 0; i< 7

            for (int i = 0; i < 7; i++)
            {
                switch (lines)
                {
                case "none":
                    // noStroke()
                    ProcessingSkiaSharp.noStroke(paint);
                    break;

                case "all":
                    // stroke(0, 0, 0, 60)
                    ProcessingSkiaSharp.stroke(paint, 0, 0, 0, 60);
                    break;

                case "outer":
                    // noStroke()
                    ProcessingSkiaSharp.noStroke(paint);
                    break;

                case "some":
                    // stroke(0, 0, 0, helper.random_list_value([0, 60]))
                    byte randomByte = RandomUtility.GetRandomElement(random2Bytes);
                    ProcessingSkiaSharp.stroke(paint, 0, 0, 0, randomByte);
                    break;
                }
                //p = palette[int(random(0, len(palette)))]
                if (i == 3 || i == 6)
                {
                    // fill(0, 0, 100, 100)
                    ProcessingSkiaSharp.fill(paint, 0, 0, 100, 100);
                }
                else
                {
                    var p = RandomUtility.GetRandomElement <SKColor>(palette);
                    //fill(p[0], p[1], p[2], 20)
                    ProcessingSkiaSharp.fill(paint, p.Red, p.Green, p.Blue, 20);
                }

                List <SKPoint> wing = new List <SKPoint>()
                {
                    origin
                };
                foreach (int angle in range_upper_angles)
                {
                    // circle_points_list(random(0, width * 0.01), random(0, height * 0.01), random( width * 0.2, width * 0.4 ), radians( random( angle - 7, angle ) )
                    float randomAngle = RandomUtility.CreateRandom(angle - 7, angle);
                    var   cp          = circle_points_list(RandomUtility.CreateRandom(0, w * 0.01f),
                                                           RandomUtility.CreateRandom(0, h * 0.01f),
                                                           RandomUtility.CreateRandom(w * 0.1f, w * 0.2f),
                                                           (float)ProcessingSkiaSharp.radians(randomAngle));
                    wing.Add(cp);
                }
                draw_wings(canvas, wing, true);
            } // for (int i = 0; i< 7
        }