Example #1
0
        static void Main(string[] args)
        {
            Mat img = new Mat(1000, 1000, MatType.CV_8UC3, new Scalar(0, 0, 0));

            const int NumberOfAnimationIterations = 10;
            const int NumberOfIterationsInAFrame  = 3;
            const int NumberOfFullRotations       = 50;
            var       topLeftControlPoint         = StrokeFactory.CreateInterpolatingStroke(
                new SPoint[] { new SPoint(100, 100, red), new SPoint(900, 100, yellow) }, NumberOfAnimationIterations);
            var topRightControlPoint = StrokeFactory.CreateInterpolatingStroke(
                new SPoint[] { new SPoint(900, 100, blue), new SPoint(900, 900, blue) }, NumberOfAnimationIterations);
            var bottomRightControlPoint = StrokeFactory.CreateInterpolatingStroke(
                new SPoint[] { new SPoint(900, 900, yellow), new SPoint(100, 900, red) }, NumberOfAnimationIterations);
            var bottomLeftControlPoint = StrokeFactory.CreateInterpolatingStroke(
                new SPoint[] { new SPoint(100, 900, blue), new SPoint(100, 100, blue) }, NumberOfAnimationIterations);

            var controlPointAnimation = new AnimationStroke();

            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(topLeftControlPoint);
            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(topRightControlPoint);
            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(bottomRightControlPoint);
            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(bottomLeftControlPoint);
            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(topLeftControlPoint);
            controlPointAnimation.NumberOfIterations = NumberOfIterationsInAFrame;
            var strokeToDraw = new RotatingStroke(
                new InterpolatingStroke(controlPointAnimation), 2.0, 50.0);

            var drawer = new Drawer();

            while (controlPointAnimation.NextFrame())
            {
                img.SetTo(new Scalar(0, 0, 0));
                strokeToDraw.AngularSpeed = CalculateAngularVelocity(strokeToDraw.Count(), NumberOfFullRotations);
                drawer.Draw(img, strokeToDraw, true);
                Cv2.ImShow("Spirograph", img.Clone());
                if (Cv2.WaitKey(20) == Key_Esc)
                {
                    break;
                }
            }
        }
        public void AnimateInterpolatingStroke()
        {
            SPoint StartPointInFrame0    = new SPoint(0, 0);
            SPoint StartPointInFrame10   = new SPoint(0, 10);
            SPoint EndPointInFrame0      = new SPoint(100, 0);
            SPoint EndPointInFrame10     = new SPoint(100, 10);
            var    controlPointAnimation = new AnimationStroke();
            var    s1 = StrokeFactory.CreateInterpolatingStroke(new SPoint[] { StartPointInFrame0, StartPointInFrame10 });

            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(s1);
            var s2 = StrokeFactory.CreateInterpolatingStroke(new SPoint[] { EndPointInFrame0, EndPointInFrame10 });

            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(s2);
            var s = new InterpolatingStroke(controlPointAnimation);

            for (int t = 0; t <= 10; t++)
            {
                Assert.IsTrue(controlPointAnimation.NextFrame());
                var currentPoints = s.ToArray();
                AssertAllPointsInHorizontalLine(currentPoints, t, 0, 100);
            }
            Assert.IsFalse(controlPointAnimation.NextFrame());
        }
        public void SimpleAnimation()
        {
            SPoint A1   = new SPoint(10, 10);
            SPoint A2   = new SPoint(20, 10);
            SPoint B1   = new SPoint(10, 50);
            SPoint B2   = new SPoint(20, 50);
            var    anim = new AnimationStroke();
            var    s1   = new PolyStroke(new SPoint[] { A1, A2 });

            anim.AddStrokeAsTimeDependentControlPoint(s1);
            var s2 = new PolyStroke(new SPoint[] { B1, B2 });

            anim.AddStrokeAsTimeDependentControlPoint(s2);
            var hadMore = anim.NextFrame();

            Assert.IsTrue(hadMore);
            PointListsHelper.AssertPointPresence(anim,
                                                 new SPoint[] { A1, B1 });
            hadMore = anim.NextFrame();
            Assert.IsTrue(hadMore);
            PointListsHelper.AssertPointPresence(anim,
                                                 new SPoint[] { A2, B2 });
            Assert.IsFalse(anim.NextFrame());
        }