Export (0) Print
Expand All
This topic has not yet been rated - Rate this topic

Rotation3DAnimationUsingKeyFrames Class

Animates the value of a Rotation3D property along a set of KeyFrames.

Namespace: System.Windows.Media.Animation
Assembly: PresentationCore (in presentationcore.dll)
XML Namespace:  http://schemas.microsoft.com/winfx/2006/xaml/presentation

[ContentPropertyAttribute("KeyFrames")] 
public class Rotation3DAnimationUsingKeyFrames : Rotation3DAnimationBase, IKeyFrameAnimation, IAddChild
/** @attribute ContentPropertyAttribute("KeyFrames") */ 
public class Rotation3DAnimationUsingKeyFrames extends Rotation3DAnimationBase implements IKeyFrameAnimation, IAddChild
ContentPropertyAttribute("KeyFrames") 
public class Rotation3DAnimationUsingKeyFrames extends Rotation3DAnimationBase implements IKeyFrameAnimation, IAddChild
<Rotation3DAnimationUsingKeyFrames>
  KeyFrames
</Rotation3DAnimationUsingKeyFrames>

A key frame animation's target values are defined by its KeyFrames property, which contains a collection of Rotation3DKeyFrame objects. Each Rotation3DKeyFrame defines a segment of the animation with its own target Value and KeyTime. When the animation runs, it progresses from one key value to the next at the specified key times.

There are three types of Rotation3DKeyFrame classes, one for each supported interpolation method: LinearRotation3DKeyFrame, DiscreteRotation3DKeyFrame, and SplineRotation3DKeyFrame.

Unlike a Rotation3DAnimation, a Rotation3DAnimationUsingKeyFrames can have more than two of target values. You can also control the interpolation method of individual Rotation3DKeyFrame segments.

In the following example, Rotation3DAnimationUsingKeyFrames is used to make a 3D object rotate while its axis of rotation animates resulting in a "wobble". This animation uses the following key frames:

  1. LinearRotation3DKeyFrame is used to create a smooth, linear interpolation between values.

  2. DiscreteRotation3DKeyFrame is used to create sudden "jumps" between values (no interpolation).

  3. SplineRotation3DKeyFrame is used to create a variable transition between values depending on the KeySpline property. In the example below, this part of the animation starts off slow but toward the end of the time segment, speeds up exponentially.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
  <DockPanel>
    <Viewbox>
      <Canvas Width="321" Height="201">

        <!-- The Viewport3D provides a rendering surface for 3-D visual content. -->
        <Viewport3D Name="MyAnimatedObject"
          ClipToBounds="True" Width="150" Height="150"
          Canvas.Left="0" Canvas.Top="10">

          <!-- Defines the camera used to view the 3D object. -->
          <Viewport3D.Camera>
            <PerspectiveCamera Position="0,0,2" LookDirection="0,0,-1" FieldOfView="60" />
          </Viewport3D.Camera>

          <!-- The ModelVisual3D children contain the 3D models -->
          <Viewport3D.Children>

            <!-- Two ModelVisual3D define the lights cast in the scene. Without light, the
                 3D object cannot be seen. Also, the direction of the lights affect shadowing. -->
            <ModelVisual3D>
              <ModelVisual3D.Content>
                <DirectionalLight Color="#FFFFFF" Direction="-0.612372,-0.5,-0.612372" />
              </ModelVisual3D.Content>
            </ModelVisual3D>
            <ModelVisual3D>
              <ModelVisual3D.Content>
                <DirectionalLight Color="#FFFFFF" Direction="0.612372,-0.5,-0.612372" />
              </ModelVisual3D.Content>
            </ModelVisual3D>
            <ModelVisual3D>
              <ModelVisual3D.Content>
                <GeometryModel3D>

                  <!-- The geometry specifes the shape of the 3D plane. In this case, a flat sheet is created. -->
                  <GeometryModel3D.Geometry>
                    <MeshGeometry3D
                     TriangleIndices="0,1,2 3,4,5 "
                     Normals="0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 "
                     TextureCoordinates="0,0 1,0 1,1 1,1 0,1 0,0 "
                     Positions="-0.5,-0.5,0.5 0.5,-0.5,0.5 0.5,0.5,0.5 0.5,0.5,0.5 -0.5,0.5,0.5 -0.5,-0.5,0.5 " />
                  </GeometryModel3D.Geometry>

                  <!-- The material specifies the material applied to the plane. In this case it is a linear gradient.-->
                  <GeometryModel3D.Material>
                    <MaterialGroup>
                      <DiffuseMaterial>
                        <DiffuseMaterial.Brush>
                          <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
                            <LinearGradientBrush.GradientStops>
                              <GradientStop Color="Yellow" Offset="0" />
                              <GradientStop Color="Red" Offset="0.25" />
                              <GradientStop Color="Blue" Offset="0.75" />
                              <GradientStop Color="LimeGreen" Offset="1" />
                            </LinearGradientBrush.GradientStops>
                          </LinearGradientBrush>
                        </DiffuseMaterial.Brush>
                      </DiffuseMaterial>
                    </MaterialGroup>
                  </GeometryModel3D.Material>

                  <!-- The Transform specifies how to transform the 3D object. The properties of the
                        Rotation object are animated causing the 3D object to rotate and "wobble" (see Storyboard below).-->
                  <GeometryModel3D.Transform>
                    <RotateTransform3D x:Name="myRotateTransform3D" >
                      <RotateTransform3D.Rotation>
                        <AxisAngleRotation3D Axis="0,3,0" Angle="40" />
                      </RotateTransform3D.Rotation>
                    </RotateTransform3D>
                  </GeometryModel3D.Transform>
                </GeometryModel3D>
              </ModelVisual3D.Content>
            </ModelVisual3D>
          </Viewport3D.Children>

          <!-- Trigger the rotation animation when the 3D object loads. -->
          <Viewport3D.Triggers>
            <EventTrigger RoutedEvent="Viewport3D.Loaded">
              <BeginStoryboard>
                <Storyboard>

                  <!-- This animation animates the Rotation property of the RotateTransform
                       causing the 3D shape to rotate and wobble as the rotation angle and 
                       axis are animated. -->
                  <Rotation3DAnimationUsingKeyFrames
                   Storyboard.TargetName="myRotateTransform3D" 
                   Storyboard.TargetProperty="Rotation" >
                    <Rotation3DAnimationUsingKeyFrames.KeyFrames>

                      <!-- Using a LinearRotation3DKeyFrame, the object gradually rotates to an angle 
                           of -60 degrees while the axis of rotation shifts (animates) to a new value. -->
                      <LinearRotation3DKeyFrame KeyTime="0:0:1">
                        <LinearRotation3DKeyFrame.Value>
                          <AxisAngleRotation3D Axis="1,0,1" Angle="-60" />
                        </LinearRotation3DKeyFrame.Value>
                      </LinearRotation3DKeyFrame>

                      <!-- Using a DiscreteRotation3DKeyFrame, the object suddenly rotates to the an angle 
                           of 80 degrees on a new axis. This happens immdeiately after the first 1 and 
                           a half seconds of the animation. -->
                      <DiscreteRotation3DKeyFrame KeyTime="0:0:1.5">
                        <DiscreteRotation3DKeyFrame.Value>
                          <AxisAngleRotation3D Axis="0,0,1" Angle="80" />
                        </DiscreteRotation3DKeyFrame.Value>
                      </DiscreteRotation3DKeyFrame>

                      <!-- Using a SplineRotation3DKeyFrame, the object rotates back to its starting position. 
                           The animation starts out slowly at first and then speeds up. This KeyFrame ends 
                           after the fourth second. -->
                      <SplineRotation3DKeyFrame KeySpline="0.6,0.0 0.9,0.00" KeyTime="0:0:4">
                        <SplineRotation3DKeyFrame.Value>
                          <AxisAngleRotation3D Axis="0,3,0" Angle="40" />
                        </SplineRotation3DKeyFrame.Value>
                      </SplineRotation3DKeyFrame>

                    </Rotation3DAnimationUsingKeyFrames.KeyFrames>
                  </Rotation3DAnimationUsingKeyFrames>

                </Storyboard>
              </BeginStoryboard>
            </EventTrigger>
          </Viewport3D.Triggers>
        </Viewport3D>
      </Canvas>

    </Viewbox>
  </DockPanel>
</Page>

System.Object
   System.Windows.Threading.DispatcherObject
     System.Windows.DependencyObject
       System.Windows.Freezable
         System.Windows.Media.Animation.Animatable
           System.Windows.Media.Animation.Timeline
             System.Windows.Media.Animation.AnimationTimeline
               System.Windows.Media.Animation.Rotation3DAnimationBase
                System.Windows.Media.Animation.Rotation3DAnimationUsingKeyFrames
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0
Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft. All rights reserved.