//开始动画 public void PlayAnimation() { try { if (pAgAnimationUtils == null) { //InitAnimationParameters(); if (FlyPathPolyline == null) { MessageBox.Show("请先选择飞行路线按钮再点击播放。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (IsFlyByPolyline) { CreateAnimationFromPath(globe, FlyPathPolyline, FlySpeedRating, IsFlyLoop, IsFlyLookdown); } } if (animPlayer != null) { //if (pAnimationExtension.AnimationEnvironment.PlayTime == 0) //{ // pAnimationExtension.AnimationEnvironment.PlayTime = pAnimationExtension.AnimationEnvironment.AnimationDuration; //} animPlayer.PlayAnimation(pAnimationExtension.AnimationTracks, pAnimationExtension.AnimationEnvironment, null); } } catch { } }
///<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(string path, string SaveFilePath) { IGlobe pGlobe = axGlobeControl1.Globe; IGlobeDisplay globeDisplay = pGlobe.GlobeDisplay; IScene scene = globeDisplay.Scene; // 获取动画扩展 IBasicScene2 basicScene2 = scene as IBasicScene2; IAnimationExtension animationExtension = basicScene2.AnimationExtension; //获取路径 //读取shp文件 IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory(); string pFolder = System.IO.Path.GetDirectoryName(path); string pFileName = System.IO.Path.GetFileName(path); //2打开shapeFile工作空间 IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pFolder, 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; //3、打开要素类 IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(pFileName); //4、创建要素图层 IFeatureLayer pFLayer = new FeatureLayerClass(); //5、关联图层和要素类 pFLayer.FeatureClass = pFeatureClass; pFLayer.Name = pFeatureClass.AliasName; int b = pFeatureClass.ObjectClassID; ILayer pLayer = pFLayer; IFeatureLayer featureLayer = pLayer as IFeatureLayer; IFeatureClass featureClass = featureLayer.FeatureClass; //int pFeatureID = pFeatureClass.FeatureClassID; int pFeatureID = 0; 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); //播放 //获取AGAnimationEnvironment对象 IBasicScene2 basicscene = pGlobe as IBasicScene2; IAnimationExtension animationEx = basicscene.AnimationExtension; IAGAnimationEnvironment agAnimationEnv; agAnimationEnv = animationEx.AnimationEnvironment; agAnimationEnv.AnimationDuration = Convert.ToDouble("30"); //持续时间 agAnimationEnv.PlayType = esriAnimationPlayType.esriAnimationPlayTypeDuration; //播放模式 agAnimationEnv.PlayMode = esriAnimationPlayMode.esriAnimationPlayOnceForward; agAnimationEnv.PlayMode = esriAnimationPlayMode.esriAnimationPlayOnceReverse; //agAnimationEnv.PlayMode = esriAnimationPlayMode.esriAnimationPlayLoopForward; //agAnimationEnv.PlayMode = esriAnimationPlayMode.esriAnimationPlayLoopReverse; IAGAnimationPlayer agAnimationPlayer = agAnimationUtils as IAGAnimationPlayer; agAnimationPlayer.PlayAnimation(pGlobe as IAGAnimationTracks, agAnimationEnv, null); //保存 if (System.IO.File.Exists(SaveFilePath)) { System.IO.File.Delete(SaveFilePath); agAnimationUtils.SaveAnimationFile(AGAnimationContainer, SaveFilePath, esriArcGISVersion.esriArcGISVersion10); } }