示例#1
0
        private void OnLoaded()
        {
            ConfigurePlane();

            var group  = new VisualObjectRenderer();
            var syncp1 = new SynchronizedProgress(0);
            var syncp2 = new SynchronizedProgress(1);

            plane.Grid.Stroke          = null;
            plane.Grid.SecondaryStroke = null;
            plane.Axes.Style(null, null);
            plane.AxesNumbers.Style(null, null);

            var curveExp = Geometry.Parse("M0,0 c0-73.08,133.23-21.34,133.23,0");
            var curve    = Geometry.Parse("M0,0 c0-140.72,255.69-140.33,255.69,0");

            var xyz        = Tex(@"xyz", new Point(-10, 6)).Color(0, -1, FlatBrushes.Alizarin, null);
            var zfgyufdzu  = Tex(@"\frac{df}{dx}?", new Point(5, 12.5)).Color(0, -1, FlatBrushes.Clouds, null).Color(0, 2, FlatBrushes.PeterRiver, null).Color(3, 2, FlatBrushes.SunFlower, null);
            var xzfgyufdzu = new MorphingVisualObject(zfgyufdzu.GetTransformedCharacters(true), xyz.GetTransformedCharacters(true)).Style(FlatBrushes.Alizarin);

            zfgyufdzu.Color(0, -1, null, null);
            //xzfgyufdzu.Correspondances = new CorrespondanceDictionary { { 2, 2 } };
            var text  = Tex("(a+b)(a-b)=a^2-b^2", new Point(-25, 12.5), 130).Brace(0, 0, 4, 4, syncp2);
            var step1 = Tex("(a+b)(a-b)=aa+-bb^2", new Point(-25, 12.5), 130);

            var eq = Characters(text, 10, 1, false);

            var a1 = Characters(text, 1, 1, false).Insert(0, -1, step1, 11, 1, 0, syncp1).TranslateAlongPath(0, -1, curve, Translations.Y, 0, syncp1);
            var a2 = Characters(text, 6, 1, false).Insert(0, -1, step1, 12, 1, 0, syncp1).TranslateAlongPath(0, -1, curve, Translations.Y, 0, syncp1);

            var b1 = Characters(text, 3, 1, false).Insert(0, -1, step1, 15, 1, 0, syncp1).TranslateAlongPath(0, -1, curve, Translations.MinusY, 0, syncp1);
            var b2 = Characters(text, 8, 1, false).Insert(0, -1, step1, 16, 1, 0, syncp1).TranslateAlongPath(0, -1, curve, Translations.MinusY, 0, syncp1);

            var p  = Characters(text, 2, 1, false).Insert(0, -1, step1, 13, 1, 0, syncp1);
            var m  = Characters(text, 7, 1, false).Insert(0, -1, step1, 14, 1, 0, syncp1);
            var m2 = Characters(text, 13, 1, false).Insert(0, -1, p, 0, -1, 1, true, false, default);

            var asq = Characters(text, 11, 2, false);
            var bsq = Characters(text, 14, 2, false);

            var elc = new ELC {
                PointsRadius = 7, Center = plane.Origin, Rank = 5
            };

            group.Children.Add(zfgyufdzu);
            group.Children.Add(xzfgyufdzu);
            group.Children.Add(text);
            group.Children.Add(eq);
            group.Children.Add(a1);
            group.Children.Add(a2);
            group.Children.Add(b1);
            group.Children.Add(b2);
            group.Children.Add(p);
            group.Children.Add(m);
            group.Children.Add(m2);
            group.Children.Add(asq);
            group.Children.Add(bsq);

            plane.VisualObjects.Add(group);
            plane.VisualObjects.Add(elc);

            async Task Animate()
            {
                await Animate <double>(null, value => xzfgyufdzu.Progress = value, 0, 1, TimeSpan.FromSeconds(0.7), new RepeatBehavior(4), true, false, new CubicEase { EasingMode = EasingMode.EaseInOut }, 60);

                elc.Stroke       = new Pen(FlatBrushes.Alizarin, 3);
                elc.PointsFill   = FlatBrushes.SunFlower;
                elc.PointsStroke = new Pen(FlatBrushes.SunFlower.EditFreezable(brush => brush.Opacity = 0.6), 0);
                await elc.Animate(true, TimeSpan.FromSeconds(2), null, new ELCWriteCharacterEffect(0, -1, new Progress(0, ProgressMode.LaggedStart)));

                await elc.Animate(false, TimeSpan.FromSeconds(0.5), null, new ELCFocusCharacterEffect(0, -1, i => i == 3, 0.1, 0)).AtLeast(200);

                plane.Grid.Stroke          = new Pen(Brushes.DeepSkyBlue, 1);
                plane.Grid.SecondaryStroke = new Pen(Brushes.DeepSkyBlue.EditFreezable(fill => fill.Opacity = 0.3), 1);
                await plane.Grid.Animate(true, TimeSpan.FromSeconds(4), null, new StrokeCharacterEffect(0, -1, new Progress(0, ProgressMode.LaggedStart)) { EasingFunction = new CubicEase {
                                                                                                                                                                EasingMode = EasingMode.EaseOut
                                                                                                                                                            } });

                plane.Axes.Style(null, new Pen(FlatBrushes.Clouds, 2));
                await plane.Axes.Animate(true, TimeSpan.FromSeconds(1), null, new StrokeCharacterEffect(0, -1, 0) { EasingFunction = new CubicEase {
                                                                                                                        EasingMode = EasingMode.EaseOut
                                                                                                                    } });

                plane.AxesNumbers.Style(FlatBrushes.Clouds, null);
                await plane.AxesNumbers.Write(false);

                await zfgyufdzu.Color(0, -1, FlatBrushes.Clouds, null).Color(0, 2, FlatBrushes.PeterRiver, null).Color(3, 2, FlatBrushes.SunFlower, null).Write().AtLeast(120);

                await zfgyufdzu.ReColor(0, -1, null, null).AtMost(15);

                await text.ReColor(0, 10, FlatBrushes.Clouds, null);

                await syncp2.Animate(0.8, new CubicEase { EasingMode = EasingMode.EaseInOut }, 1, 0);

                await eq.Color(0, -1, FlatBrushes.Clouds, null).Write();

                a1.Color(0, -1, FlatBrushes.Clouds, null);
                a2.Color(0, -1, FlatBrushes.Clouds, null);
                b1.Color(0, -1, FlatBrushes.Clouds, null);
                b2.Color(0, -1, FlatBrushes.Clouds, null);
                p.Color(0, -1, FlatBrushes.Clouds, null);
                m.Color(0, -1, FlatBrushes.Clouds, null);

                await syncp1.Animate(1.5, new CubicEase { EasingMode = EasingMode.EaseInOut });

                await Task.WhenAll(asq.Color(0, -1, FlatBrushes.Clouds, null).PowerFrom(a1, a2), bsq.Color(0, -1, FlatBrushes.Clouds, null).PowerFrom(Characters(text, 14, 1), b1, b2), Group(true, false, Characters(text, 13, 1), p, m)).AtMost(35);

                m2.Color(0, -1, FlatBrushes.Clouds, null);
                await p.Animate(false, TimeSpan.FromSeconds(0.9), new CubicEase { EasingMode = EasingMode.EaseOut }, new SizeCharacterEffect(0, -1, new Size(text.Size("-").Width, 0), new RectPoint(0.5, 0.5), 0)).AtMost(20);

                m2.Destroy();
                await Timing.FramesDelay(65);
            }

            this.Animate = Animate;
        }