コード例 #1
0
        private static void AnimationFunction_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            Vector3DAnimation a = (Vector3DAnimation)d;

            a._isAnimationFunctionValid = false;
            a.PropertyChanged(e.Property);
        }
コード例 #2
0
        /// <summary>
        /// Animates the camera position and directions.
        /// </summary>
        /// <param name="camera">
        /// The camera to animate.
        /// </param>
        /// <param name="newPosition">
        /// The position to animate to.
        /// </param>
        /// <param name="newDirection">
        /// The direction to animate to.
        /// </param>
        /// <param name="newUpDirection">
        /// The up direction to animate to.
        /// </param>
        /// <param name="animationTime">
        /// Animation time in milliseconds.
        /// </param>
        public static void AnimateTo(
            this Camera camera,
            Point3D newPosition,
            Vector3D newDirection,
            Vector3D newUpDirection,
            double animationTime)
        {
            var projectionCamera = camera as ProjectionCamera;
            if (projectionCamera == null)
            {
                return;
            }

            var fromPosition = projectionCamera.Position;
            var fromDirection = projectionCamera.LookDirection;
            var fromUpDirection = projectionCamera.UpDirection;

            projectionCamera.Position = newPosition;
            projectionCamera.LookDirection = newDirection;
            projectionCamera.UpDirection = newUpDirection;

            if (animationTime > 0)
            {
                var a1 = new Point3DAnimation(
                    fromPosition, newPosition, new Duration(TimeSpan.FromMilliseconds(animationTime)))
                    {
                        AccelerationRatio = 0.3,
                        DecelerationRatio = 0.5,
                        FillBehavior = FillBehavior.Stop
                    };

                a1.Completed += (s, a) => { camera.BeginAnimation(ProjectionCamera.PositionProperty, null); };
                camera.BeginAnimation(ProjectionCamera.PositionProperty, a1);

                var a2 = new Vector3DAnimation(
                    fromDirection, newDirection, new Duration(TimeSpan.FromMilliseconds(animationTime)))
                    {
                        AccelerationRatio = 0.3,
                        DecelerationRatio = 0.5,
                        FillBehavior = FillBehavior.Stop
                    };
                a2.Completed += (s, a) => { camera.BeginAnimation(ProjectionCamera.LookDirectionProperty, null); };
                camera.BeginAnimation(ProjectionCamera.LookDirectionProperty, a2);

                var a3 = new Vector3DAnimation(
                    fromUpDirection, newUpDirection, new Duration(TimeSpan.FromMilliseconds(animationTime)))
                    {
                        AccelerationRatio = 0.3,
                        DecelerationRatio = 0.5,
                        FillBehavior = FillBehavior.Stop
                    };
                a3.Completed += (s, a) => { camera.BeginAnimation(ProjectionCamera.UpDirectionProperty, null); };
                camera.BeginAnimation(ProjectionCamera.UpDirectionProperty, a3);
            }
        }
コード例 #3
0
ファイル: CalendarDay.xaml.cs プロジェクト: yjk282/Weather
        public void PlayAnimation(bool random = true)
        {
            if (!AllowAnimation)
                return;

            var storyboard = new Storyboard();

            var pa = new Point3DAnimation()
            {
                Duration = TimeSpan.FromMilliseconds(600),
                To = new Point3D(0, 0, 800)
            };

            Storyboard.SetTarget(pa, this);
            Storyboard.SetTargetProperty(pa, new PropertyPath(CameraPoint3DProperty));

            storyboard.Children.Add(pa);

            var aa = new Vector3DAnimation()
            {
                Duration = new Duration(TimeSpan.FromMilliseconds(1500)),
                To = AnimationHelper.GetNextVector3D()
            };

            Storyboard.SetTarget(aa, this);
            Storyboard.SetTargetProperty(aa, new PropertyPath(AxisProperty));

            storyboard.Children.Add(aa);

            angle += AnimationHelper.GetNextBool() ? 360d : -360d;
            //angle += AnimationHelper.GetNextAngle();
            var da = new DoubleAnimation
            {
                Duration = new Duration(TimeSpan.FromMilliseconds(3000)),
                To = angle
            };

            Storyboard.SetTarget(da, this);
            Storyboard.SetTargetProperty(da, new PropertyPath(AngleProperty));

            storyboard.Children.Add(da);

            var paEnd = new Point3DAnimation()
            {
                Duration = TimeSpan.FromMilliseconds(600),
                To = new Point3D(0, 0, 500),
                BeginTime = TimeSpan.FromMilliseconds(2400)
            };

            Storyboard.SetTarget(paEnd, this);
            Storyboard.SetTargetProperty(paEnd, new PropertyPath(CameraPoint3DProperty));

            storyboard.Children.Add(paEnd);

            var aaEnd = new Vector3DAnimation()
            {
                Duration = new Duration(TimeSpan.FromMilliseconds(1500)),
                To = new Vector3D(0, 1, 0),
                BeginTime = TimeSpan.FromMilliseconds(1500)
            };

            Storyboard.SetTarget(aaEnd, this);
            Storyboard.SetTargetProperty(aaEnd, new PropertyPath(AxisProperty));

            storyboard.Children.Add(aaEnd);

            if (random)
            {
                da.EasingFunction = AnimationHelper.GetEasingFunction();
                pa.EasingFunction = AnimationHelper.GetEasingFunction();
                paEnd.EasingFunction = AnimationHelper.GetEasingFunction();
                aa.EasingFunction = AnimationHelper.GetEasingFunction();
                aaEnd.EasingFunction = AnimationHelper.GetEasingFunction();
            }
            else
            {
                var easing = new BackEase() {EasingMode = EasingMode.EaseInOut, Amplitude = 0.8};
                da.EasingFunction = easing;
                pa.EasingFunction = easing;
                paEnd.EasingFunction = easing;
                aa.EasingFunction = easing;
                aaEnd.EasingFunction = easing;
            }

            storyboard.Begin(this);
        }
コード例 #4
0
ファイル: Calendar.xaml.cs プロジェクト: yjk282/Weather
        public void PlayAnimation(bool random = true)
        {
            var storyboard = new Storyboard();

            var temp = AnimationHelper.GetNextInterval(1, 4);
            angel += AnimationHelper.GetNextBool() ? temp*90d : -temp*90d;
            var da = new DoubleAnimation
            {
                Duration = new Duration(TimeSpan.FromMilliseconds(1000 + 800 * temp)),
                To = angel
            };

            storyboard.Children.Add(da);
            Storyboard.SetTarget(da, this);
            Storyboard.SetTargetProperty(da, new PropertyPath(AngleProperty));

            var paStart = new Point3DAnimation()
            {
                Duration = new Duration(TimeSpan.FromMilliseconds(1000)),
                To = new Point3D(0, 0, 1000)
            };

            storyboard.Children.Add(paStart);
            Storyboard.SetTarget(paStart, this);
            Storyboard.SetTargetProperty(paStart, new PropertyPath(CameraPoint3DProperty));

            var color = new ColorAnimation()
            {
                Duration = new Duration(TimeSpan.FromMilliseconds(1000)),
                To = Color.FromArgb(0x11, 0, 0 ,0)
            };

            storyboard.Children.Add(color);
            Storyboard.SetTarget(color, this);
            Storyboard.SetTargetProperty(color, new PropertyPath(MonthColorProperty));

            var axis = new Vector3DAnimation()
            {
                Duration = new Duration(TimeSpan.FromMilliseconds(500 + 400 * temp)),
                To = AnimationHelper.GetNextVector3D()
            };

            storyboard.Children.Add(axis);
            Storyboard.SetTarget(axis, this);
            Storyboard.SetTargetProperty(axis, new PropertyPath(AxisProperty));

            var paEnd = new Point3DAnimation
            {
                Duration = new Duration(TimeSpan.FromMilliseconds(1000)),
                To = new Point3D(0, 0, 560),
                BeginTime = TimeSpan.FromMilliseconds(800 * temp)
            };


            storyboard.Children.Add(paEnd);
            Storyboard.SetTarget(paEnd, this);
            Storyboard.SetTargetProperty(paEnd, new PropertyPath(CameraPoint3DProperty));

            var colorBack = new ColorAnimation
            {
                Duration = new Duration(TimeSpan.FromMilliseconds(1000)),
                To = Colors.Transparent,
                BeginTime = TimeSpan.FromMilliseconds(800 * temp)
            };


            storyboard.Children.Add(colorBack);
            Storyboard.SetTarget(colorBack, this);
            Storyboard.SetTargetProperty(colorBack, new PropertyPath(MonthColorProperty));


            var axisBack = new Vector3DAnimation()
            {
                Duration = new Duration(TimeSpan.FromMilliseconds(500 + 400 * temp)),
                To = new Vector3D(0, 1, 0),
                BeginTime = TimeSpan.FromMilliseconds(500 + 400 * temp)
            };

            storyboard.Children.Add(axisBack);
            Storyboard.SetTarget(axisBack, this);
            Storyboard.SetTargetProperty(axisBack, new PropertyPath(AxisProperty));

            if (random)
            {
                da.EasingFunction = AnimationHelper.GetEasingFunction();
                paStart.EasingFunction = AnimationHelper.GetEasingFunction();
                color.EasingFunction = paStart.EasingFunction;
                paEnd.EasingFunction = AnimationHelper.GetEasingFunction();
                colorBack.EasingFunction = paEnd.EasingFunction;
            }
            else
            {
                var e = new BackEase() { EasingMode = EasingMode.EaseInOut, Amplitude = 0.8 };
                da.EasingFunction = e;
                paStart.EasingFunction = e;
                paEnd.EasingFunction = e;
                color.EasingFunction = e;
                colorBack.EasingFunction = e;
            }

            storyboard.Begin();
        }
コード例 #5
0
        /// <summary>
        /// Animates the camera position and direction
        /// </summary>
        /// <param name="camera">Camera</param>
        /// <param name="newPosition">The position to animate to</param>
        /// <param name="newDirection">The direction to animate to</param>
        /// <param name="newUpDirection">The up direction to animate to</param>
        /// <param name="animationTime">Animation time in milliseconds</param>
        public static void AnimateTo(ProjectionCamera camera, Point3D newPosition, Vector3D newDirection, Vector3D newUpDirection, double animationTime)
        {
            var fromPosition = camera.Position;
            var fromDirection = camera.LookDirection;
            var fromUpDirection = camera.UpDirection;

            camera.Position = newPosition;
            camera.LookDirection = newDirection;
            camera.UpDirection = newUpDirection;

            if (animationTime > 0)
            {
                var a1 = new Point3DAnimation(fromPosition, newPosition,
                    new Duration(TimeSpan.FromMilliseconds(animationTime))) { AccelerationRatio = 0.3, DecelerationRatio = 0.5, FillBehavior = FillBehavior.Stop };
                camera.BeginAnimation(ProjectionCamera.PositionProperty, a1);

                var a2 = new Vector3DAnimation(fromDirection, newDirection,
                                               new Duration(TimeSpan.FromMilliseconds(animationTime))) { AccelerationRatio = 0.3, DecelerationRatio = 0.5, FillBehavior = FillBehavior.Stop };
                camera.BeginAnimation(ProjectionCamera.LookDirectionProperty, a2);

                var a3 = new Vector3DAnimation(fromUpDirection, newUpDirection,
                                               new Duration(TimeSpan.FromMilliseconds(animationTime))) { AccelerationRatio = 0.3, DecelerationRatio = 0.5, FillBehavior = FillBehavior.Stop };
                camera.BeginAnimation(ProjectionCamera.UpDirectionProperty, a3);

            }
        }
コード例 #6
0
        private void DrawSomeModels()
        {
            myViewport.Name = "myViewport";
            ModelVisual3D myModelVisual = new ModelVisual3D();

            //Define lights and cameras
            myPCamera.FarPlaneDistance = 20;
            myPCamera.NearPlaneDistance = 0;
            myPCamera.FieldOfView = 50;
            myPCamera.Position = new Point3D(-5, 2, 3);
            myPCamera.LookDirection = new Vector3D(5, -2, -3);
            myPCamera.UpDirection = new Vector3D(0, 1, 0);

            myDLight.Color = Colors.White;
            myDLight.Direction = new Vector3D(-3, -4, -5);

            myAmbLight.Color = Colors.White;

            //set Geometry property of MeshGeometry3D
            side2.Geometry = side2Plane;
            side6.Geometry = side6Plane;
            side1.Geometry = side1Plane;
            side3.Geometry = side3Plane;
            side4.Geometry = side4Plane;
            side5.Geometry = side5Plane;

            //create translations
            TranslateTransform3D cube2Translation = new TranslateTransform3D(new Vector3D(2, 0, 0));
            TranslateTransform3D cube3Translation = new TranslateTransform3D(new Vector3D(4, 0, 0));
            //Define a rotation
            RotateTransform3D myRotateTransform = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), 1));
            //Define an animation for the rotation
            DoubleAnimation myAnimation = new DoubleAnimation();
            myAnimation.From = 1;
            myAnimation.To = 361;
            myAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(5000));
            myAnimation.RepeatBehavior = RepeatBehavior.Forever;

            //Define another animation
            Vector3DAnimation myVectorAnimation = new Vector3DAnimation(new Vector3D(-1, -1, -1), new Duration(TimeSpan.FromMilliseconds(5000)));
            myVectorAnimation.RepeatBehavior = RepeatBehavior.Forever;

            myRotateTransform.Rotation.BeginAnimation(AxisAngleRotation3D.AngleProperty, myAnimation);
            myRotateTransform.Rotation.BeginAnimation(AxisAngleRotation3D.AxisProperty, myVectorAnimation);
            //Add transformation to the model
            cube1TransformGroup.Children.Add(myRotateTransform);

            cube2TransformGroup.Children.Add(myRotateTransform);
            cube2TransformGroup.Children.Add(cube2Translation);

            cube3TransformGroup.Children.Add(myRotateTransform);
            cube3TransformGroup.Children.Add(cube3Translation);

            allModelsTransformGroup.Children.Add(myRotateTransform);

            cubeModel_1.Children.Add(side1);
            cubeModel_1.Children.Add(side2);
            cubeModel_1.Children.Add(side3);
            cubeModel_1.Children.Add(side4);
            cubeModel_1.Children.Add(side5);
            cubeModel_1.Children.Add(side6);
            cubeModel_1.Transform = cube1TransformGroup;

            cubeModel_2.Children.Add(side1);
            cubeModel_2.Children.Add(side2);
            cubeModel_2.Children.Add(side3);
            cubeModel_2.Children.Add(side4);
            cubeModel_2.Children.Add(side5);
            cubeModel_2.Children.Add(side6);
            cubeModel_2.Transform = cube2TransformGroup;

            cubeModel_3.Children.Add(side1);
            cubeModel_3.Children.Add(side2);
            cubeModel_3.Children.Add(side3);
            cubeModel_3.Children.Add(side4);
            cubeModel_3.Children.Add(side5);
            cubeModel_3.Children.Add(side6);
            cubeModel_3.Transform = cube3TransformGroup;

            allModels.Transform = allModelsTransformGroup;
            allModels.Children.Add(cubeModel_3);
            allModels.Children.Add(cubeModel_2);
            allModels.Children.Add(cubeModel_1);

            allModels.Children.Add(myAmbLight);

            myViewport.Camera = myPCamera;
            myModelVisual.Content = allModels;
            myViewport.Children.Add(myModelVisual);

            mainWindow.Content = myViewport;
        }