上一篇博文主要介绍了根据路径实现飞行动画的接口,本篇博文则讲解其实现过程。这里我封装了一个生成动画的类,用于动画的操作,目前只是实现了动画的生成,动画的保存以及动画的加载,后面的博文再陆续探讨动画的播放控制等功能。创建动画类代码如下:
/// <summary> /// 根据路径创建飞行动画 /// </summary> class AnimationCreator { public IGlobe pGlobe //Globe对象 { get; set; } public ILayer pLayer //包含路径的线要素图层 { get; set; } public int pFeatureID //路径ID { get; set; } public string SaveFilePath //动画文件保存路径 { get; set; } public AnimationCreator () { } #region"Create Animation from Path" ///<summary> 由路径来创建一个Camera动画.这条路径有图层提供一条三维线要素</summary> /// ///<param name="globe">IGlobe接口</param> ///<param name="layer">一个包含PolyLine的ILayer接口</param> ///<param name="featureID">包含路径的要素ID.Example: 123</param> /// ///<remarks></remarks> public void CreateAnimationFromPath () { IGlobeDisplay globeDisplay = pGlobe.GlobeDisplay; IScene scene = globeDisplay.Scene; // 获取动画扩展 IBasicScene2 basicScene2 = scene as IBasicScene2; IAnimationExtension animationExtension = basicScene2.AnimationExtension; //获取路径 IFeatureLayer featureLayer = pLayer as IFeatureLayer; IFeatureClass featureClass = featureLayer.FeatureClass; IFeature feature = featureClass.GetFeature(pFeatureID); IGeometry geometry = feature.Shape; //创建AGAnimationUtils和AGImportPathOptions对象 ESRI.ArcGIS.Animation.IAGAnimationUtils agAnimationUtils = new AGAnimationUtilsClass(); ESRI.ArcGIS.Animation.IAGImportPathOptions agImportPathOptions = new AGImportPathOptionsClass(); // 设置AGImportPathOptions的属性 agImportPathOptions.BasicMap = (IBasicMap)pGlobe; agImportPathOptions.AnimationTracks = (IAGAnimationTracks)pGlobe; agImportPathOptions.AnimationType = new AnimationTypeGlobeCameraClass(); agImportPathOptions.AnimatedObject = pGlobe.GlobeDisplay.ActiveViewer.Camera; //动画对象 agImportPathOptions.PathGeometry = geometry; //动画轨迹 agImportPathOptions.ConversionType = ESRI.ArcGIS.Animation.esriFlyFromPathType.esriFlyFromPathObsAndTarget; agImportPathOptions.LookaheadFactor = 0.05; agImportPathOptions.RollFactor = 0; agImportPathOptions.AnimationEnvironment = animationExtension.AnimationEnvironment; IAGAnimationContainer AGAnimationContainer = animationExtension.AnimationTracks.AnimationObjectContainer; //创建并保存动画 agAnimationUtils.CreateFlybyFromPath(AGAnimationContainer,agImportPathOptions); if (System.IO.File.Exists(SaveFilePath)) { System.IO.File.Delete(SaveFilePath); agAnimationUtils.SaveAnimationFile(AGAnimationContainer,SaveFilePath,esriArcGISVersion.esriArcGISVersion10); } } #endregion }把生成的.aga文件导入即可播放。效果图如下: