![]() |
This document is archived and information here might be outdated. Recommended version. |
| ArcObjects Help for .NET developers > ESRI.ArcGIS.Snippets > Snippets > Create Animation from Keyframes Snippet (ArcObjects .NET 10.4 SDK) |
Creates an animation by changing and applying the keyframe in globe. The animation rotates the globe by changing the GlobeCamera keyframe and applying it in globe.
///<summary>Creates an animation by changing and applying the keyframe in globe. The animation rotates the globe by changing the GlobeCamera keyframe and applying it in globe.</summary>
///
///<param name="globe">An IGlobe interface</param>
///
///<remarks></remarks>
public void CreateAnimationFromKeyframes(ESRI.ArcGIS.GlobeCore.IGlobe globe)
{
// get Globe Camera in the globe display
ESRI.ArcGIS.GlobeCore.IGlobeDisplay globeDisplay=globe.GlobeDisplay;
ESRI.ArcGIS.Analyst3D.ISceneViewer sceneViewer=globeDisplay.ActiveViewer;
ESRI.ArcGIS.Analyst3D.ICamera camera=sceneViewer.Camera;
ESRI.ArcGIS.GlobeCore.IGlobeCamera globeCamera=(ESRI.ArcGIS.GlobeCore.IGlobeCamera)camera; // Explicit Cast
// create keyframe
ESRI.ArcGIS.Animation.IAGKeyframe agKeyframe=new ESRI.ArcGIS.GlobeCore.GlobeCameraKeyframeClass();
// set active properties
ESRI.ArcGIS.esriSystem.ILongArray longArray=new ESRI.ArcGIS.esriSystem.LongArrayClass();
longArray.Add(4); // Observer Lat.
longArray.Add(5); // Observer Lon.
longArray.Add(6); // Observer Alt.
agKeyframe.ActiveProperties=longArray;
ESRI.ArcGIS.Animation.IAGAnimationType agAnimationType=new ESRI.ArcGIS.GlobeCore.AnimationTypeGlobeCameraClass();
ESRI.ArcGIS.Animation.IAGAnimationTrack agAnimationTrack=new ESRI.ArcGIS.Animation.AGAnimationTrackClass();
agAnimationTrack.AnimationType=agAnimationType;
ESRI.ArcGIS.Animation.IAGAnimationContainer AGAnimationContainer=(ESRI.ArcGIS.Animation.IAGAnimationContainer)globe; // Explicit Cast
// animation loop
System.Double longitude;
for (longitude=0; longitude <= 360; longitude++)
{
agKeyframe.set_PropertyValue(4, 0.0); // set latitude
agKeyframe.set_PropertyValue(5, longitude); // set longitude
agKeyframe.set_PropertyValue(6, 20000.0); // set altitude
agKeyframe.Apply(agAnimationTrack, AGAnimationContainer, globeCamera); // apply it
globeDisplay.RefreshViewers();
}
}
'''<summary>Creates an animation by changing and applying the keyframe in globe. The animation rotates the globe by changing the GlobeCamera keyframe and applying it in globe.</summary>
'''
'''<param name="globe">An IGlobe interface</param>
'''
'''<remarks></remarks>
Public Sub CreateAnimationFromKeyframes(ByVal globe As ESRI.ArcGIS.GlobeCore.IGlobe)
' get Globe Camera in the globe display
Dim globeDisplay As ESRI.ArcGIS.GlobeCore.IGlobeDisplay=globe.GlobeDisplay
Dim sceneViewer As ESRI.ArcGIS.Analyst3D.ISceneViewer=globeDisplay.ActiveViewer
Dim camera As ESRI.ArcGIS.Analyst3D.ICamera=sceneViewer.Camera
Dim globeCamera As ESRI.ArcGIS.GlobeCore.IGlobeCamera=CType(camera, ESRI.ArcGIS.GlobeCore.IGlobeCamera) ' Explicit Cast
' create keyframe
Dim agKeyframe As ESRI.ArcGIS.Animation.IAGKeyframe=New ESRI.ArcGIS.GlobeCore.GlobeCameraKeyframeClass
' set active properties
Dim longArray As ESRI.ArcGIS.esriSystem.ILongArray=New ESRI.ArcGIS.esriSystem.LongArrayClass
LongArray.Add(4) ' Observer Lat.
LongArray.Add(5) ' Observer Lon.
LongArray.Add(6) ' Observer Alt.
agKeyframe.ActiveProperties=LongArray
Dim agAnimationType As ESRI.ArcGIS.Animation.IAGAnimationType=New ESRI.ArcGIS.GlobeCore.AnimationTypeGlobeCameraClass
Dim agAnimationTrack As ESRI.ArcGIS.Animation.IAGAnimationTrack=New ESRI.ArcGIS.Animation.AGAnimationTrackClass
agAnimationTrack.AnimationType=agAnimationType
Dim agAnimationContainer As ESRI.ArcGIS.Animation.IAGAnimationContainer=CType(globe, ESRI.ArcGIS.Animation.IAGAnimationContainer) ' Explict Cast
' animation loop
Dim longitude As System.Double
For longitude=0 To 360
agKeyframe.PropertyValue(4)=0 ' set latitude
agKeyframe.PropertyValue(5)=longitude ' set longitude
agKeyframe.PropertyValue(6)=20000 ' set altitude
agKeyframe.Apply(agAnimationTrack, agAnimationContainer, globeCamera) ' apply it
globeDisplay.RefreshViewers()
Next longitude
End Sub