ArcObjects Library Reference

Create Animation by Interpolating Between Two Keyframes Snippet

Creates an animation by interpolating between two keyframes in the globe. The animation makes the Globe layer transparent by interpolating between the keyframes.

[C#]

///<summary>Creates an animation by interpolating between two keyframes in the globe. The animation makes the Globe layer transparent by interpolating between the keyframes.</summary>
/// 
///<param name="globe">An IGlobe interface</param>
///<param name="layer">An ILayer interface</param>
///  
///<remarks></remarks>
public void CreateAnimationByInterpolatingBetweenTwoKeyframes(ESRI.ArcGIS.GlobeCore.IGlobe globe, ESRI.ArcGIS.Carto.ILayer layer)
{
  ESRI.ArcGIS.GlobeCore.IGlobeDisplay globeDisplay = globe.GlobeDisplay;
  ESRI.ArcGIS.Analyst3D.IScene scene = globeDisplay.Scene;

  // Get a handle to the animation extension
  ESRI.ArcGIS.Analyst3D.IBasicScene2 basicScene2 = (ESRI.ArcGIS.Analyst3D.IBasicScene2)scene; // Explicit Cast
  ESRI.ArcGIS.Animation.IAnimationExtension animationExtension = basicScene2.AnimationExtension;

  // create an animation track
  ESRI.ArcGIS.Animation.IAGAnimationTrack agAnimationTrack = new ESRI.ArcGIS.Analyst3D.AnimationTrackClass();

  ESRI.ArcGIS.Animation.IAGAnimationTrackKeyframes agAnimationTrackKeyframes = (ESRI.ArcGIS.Animation.IAGAnimationTrackKeyframes)agAnimationTrack; //Explicit cast

  // set the type before adding keyframes
  ESRI.ArcGIS.Animation.IAGAnimationType agAnimationType = new ESRI.ArcGIS.GlobeCore.AnimationTypeGlobeLayerClass();
  agAnimationTrack.AnimationType = agAnimationType;

  // create four keyframes and add them to the track
  ESRI.ArcGIS.Animation.IAGKeyframe agKeyframe;

  System.Int32 nKeyframes = 4;
  System.Int32 numKeyframe;

  for (numKeyframe = 0; numKeyframe <= nKeyframes - 1; numKeyframe++)
  {
    agKeyframe = new ESRI.ArcGIS.GlobeCore.GlobeLayerKeyframeClass();
    agAnimationTrackKeyframes.InsertKeyframe(agKeyframe, -1);
    agKeyframe.TimeStamp = 1.0 * numKeyframe / (nKeyframes - 1); // set transparency values
    agKeyframe.set_PropertyValue(0, true); // set visibility
    agKeyframe.set_PropertyValue(1, 100 * numKeyframe / (nKeyframes - 1));   // set transparency
  }

  // set active properties in the track
  ESRI.ArcGIS.esriSystem.ILongArray longArray = new ESRI.ArcGIS.esriSystem.LongArrayClass();
  longArray.Add(0);
  longArray.Add(1);
  agAnimationTrackKeyframes.ActiveProperties = (ESRI.ArcGIS.esriSystem.ILongArray)longArray; // Explicit Cast

  // attach the track to the first layer in TOC
  agAnimationTrack.AttachObject(layer);

  // animation loop

  ESRI.ArcGIS.Animation.IAGAnimationContainer agAnimationContainer = animationExtension.AnimationTracks.AnimationObjectContainer;

  System.Double time;
  System.Double iteration;
  for (iteration = 0; iteration < 500; iteration++)
  {
    time = iteration / 500;
    // interpolate by using track
    agAnimationTrack.InterpolateObjectProperties(agAnimationContainer, time);
    globeDisplay.RefreshViewers();
  }
}
[Visual Basic .NET]

'''<summary>Creates an animation by interpolating between two keyframes in the globe. The animation makes the Globe layer transparent by interpolating between the keyframes.</summary>
''' 
'''<param name="globe">An IGlobe interface</param>
'''<param name="layer">An ILayer interface</param>
'''  
'''<remarks></remarks>
Public Sub CreateAnimationByInterpolatingBetweenTwoKeyframes(ByVal globe As ESRI.ArcGIS.GlobeCore.IGlobe, ByVal layer As ESRI.ArcGIS.Carto.ILayer)

  Dim globeDisplay As ESRI.ArcGIS.GlobeCore.IGlobeDisplay = globe.GlobeDisplay
  Dim scene As ESRI.ArcGIS.Analyst3D.IScene = globeDisplay.Scene

  ' Get a handle to the animation extension
  Dim basicScene2 As ESRI.ArcGIS.Analyst3D.IBasicScene2 = CType(scene, ESRI.ArcGIS.Analyst3D.IBasicScene2) '  Explicit Cast
  Dim animationExtension As ESRI.ArcGIS.Animation.IAnimationExtension = basicScene2.AnimationExtension

  ' create an animation track 
  Dim agAnimationTrack As ESRI.ArcGIS.Animation.IAGAnimationTrack = New ESRI.ArcGIS.Analyst3D.AnimationTrackClass

  Dim agAnimationTrackKeyframes As ESRI.ArcGIS.Animation.IAGAnimationTrackKeyframes = CType(agAnimationTrack, ESRI.ArcGIS.Animation.IAGAnimationTrackKeyframes) ' Explicit Cast

  ' set the type before adding keyframes
  Dim agAnimationType As ESRI.ArcGIS.Animation.IAGAnimationType = New ESRI.ArcGIS.GlobeCore.AnimationTypeGlobeLayerClass
  agAnimationTrack.AnimationType = agAnimationType

  ' create four keyframes and add them to the track
  Dim agKeyframe As ESRI.ArcGIS.Animation.IAGKeyframe

  Dim nKeyframes As System.Int32 = 4
  Dim numKeyframe As System.Int32

  For numKeyframe = 0 To nKeyframes - 1

    agKeyframe = New ESRI.ArcGIS.GlobeCore.GlobeLayerKeyframeClass
    agAnimationTrackKeyframes.InsertKeyframe(agKeyframe, -1)
    agKeyframe.TimeStamp = 1 * numKeyframe / (nKeyframes - 1) ' set transparency values
    agKeyframe.PropertyValue(0) = True ' set visibility
    agKeyframe.PropertyValue(1) = 100 * numKeyframe / (nKeyframes - 1) ' set transparency 

  Next numKeyframe

  ' set active properties in the track
  Dim longArray As ESRI.ArcGIS.esriSystem.ILongArray = New ESRI.ArcGIS.esriSystem.LongArrayClass
  longArray.Add(0)
  LongArray.Add(1)
  agAnimationTrackKeyframes.ActiveProperties = CType(LongArray, ESRI.ArcGIS.esriSystem.ILongArray) ' Explicit Cast

  ' attach the track to the first layer in TOC
  agAnimationTrack.AttachObject(layer)
  Dim agAnimationContainer As ESRI.ArcGIS.Animation.IAGAnimationContainer = animationExtension.AnimationTracks.AnimationObjectContainer

  ' animation loop
  Dim time As System.Double
  Dim iteration As System.Double

  For iteration = 0 To 500

    time = iteration / 500
    '  interpolate by using track
    agAnimationTrack.InterpolateObjectProperties(agAnimationContainer, time)
    globeDisplay.RefreshViewers()

  Next iteration

End Sub


Additional Requirements
  • The code in this document requires the following References added to the Visual Studio project:
  • ESRI.ArcGIS.3DAnalyst
  • ESRI.ArcGIS.Animation
  • ESRI.ArcGIS.Carto
  • ESRI.ArcGIS.GlobeCore
  • ESRI.ArcGIS.System