`

关于ArcGIS的三维解决方案

J# 
阅读更多

用过ArcScene的朋友,应该是深有体会的了。。。当然我们也看到很多朋友在网上发布了很多三维处理效果图,真是让人兴奋不已呀。。。在这里我也把自己的所做的一些基于ArcGIS Engine的三维场景的动画轨迹的录制解决方法,跟大家共享!希望我的心血能为大家提供一点帮助!

在ArcGIS的接口里,提供了IAnimationTracks,通过它我们可以实现三维动画轨迹的创建,删除或在播放当前轨迹的三维场景效果,进而可以生成三维场景的录像输出处理方法(这个我在下一篇再给大家介绍),还是看看具体实现代码吧--

   /// <summary>
   /// 创建动画轨迹
   /// </summary>
   public void CreateAnimationTrack( string trackName )
   {
          IAnimationTrack pAnimationTrack = new AnimationTrackClass();
          IAnimationType pAnimationType = new AnimationTypeCameraClass();
          pAnimationTrack.AnimationType = pAnimationType;

          pAnimationTrack.Name = trackName;
          pAnimationTrack.AttachObject( pSceneGraph.ActiveViewer.Camera );
          pAnimationTrack.ApplyToAllViewers = true;
          pAnimationTrack.EvenTimeStamps = false;

          pAnimationTracks.AddTrack( pAnimationTrack );
   }

   /// <summary>
   /// 删除动画轨迹
   /// </summary>
   public void RemoveAnimationTrack( string trackName )
   {
          IAnimationTrack pAnimationTrack;
          pAnimationTracks.FindTrack( trackName, out pAnimationTrack );
          pAnimationTracks.RemoveTrack( pAnimationTrack );
   }

   /// <summary>
   /// 播放当前动画轨迹
   /// </summary>
   public void PlayAnimationTrack( string trackName )
   {
          Hashtable htKeyTime = null;

          bool[] TracksEnable = new Boolean[pAnimationTracks.TrackCount];
          IAnimationTrack pAnimationTrack;
          for( int index = 0; index < pAnimationTracks.TrackCount; index++ )
          {
                 pAnimationTrack = pAnimationTracks.Tracks.get_Element( index ) as IAnimationTrack;
                 TracksEnable[index] = pAnimationTrack.IsEnabled;
                 if( pAnimationTrack.Name == trackName )
                 {
                        pAnimationTrack.IsEnabled = true;
                        htKeyTime = ClsAnimationTracks.GetKeyTimeTable( pAnimationTrack.Name );
                 }
                 else
                        pAnimationTrack.IsEnabled = false;

          }

  
          int sumTime = 0;
          foreach( object obj in htKeyTime.Values )
          {
                 sumTime += Convert.ToInt32( obj );
          }

          double duration = (double)sumTime / 1000;

          TimeSpan timeSpan;
          double elapsedTime;

  
          DateTime startTime = DateTime.Now;
          int j = 0;
          do
          {
                 timeSpan = (DateTime.Now).Subtract(startTime);
                 elapsedTime = timeSpan.TotalSeconds;
                 if (elapsedTime > duration) elapsedTime = duration;
                 pAnimationTracks.ApplyTracks(pSceneGraph.ActiveViewer, elapsedTime, duration);
                 pSceneGraph.RefreshViewers();
                 j = j + 1;
         }

          for( int index = 0; index < pAnimationTracks.TrackCount; index++ )
          {
                 pAnimationTrack = pAnimationTracks.Tracks.get_Element( index ) as IAnimationTrack;
                 pAnimationTrack.IsEnabled = TracksEnable[index];
          }
   }

是不是很简单呢?记住哟,在播放轨迹的时候,有个时间的处理方法,具体在程序调试时,多试几次就知道是怎么回事了,我就不多说了。。。

当然,还有动画帧的处理方法,ArcGIS也提供了一个很方便的接口IKeyframe来实现的,再通过动画轨迹接口IAnimationTrack来实现动画帧的创建,删除等功能,代码实现如下:

   /// <summary>
   /// 创建动画帧
   /// </summary>
   public void CreateKeyFrame( IAnimationTrack pAnimationTrack, string keyName, int timeSpan )
   {
         IKeyframe pKeyframe = new Bookmark3DClass();
         pKeyframe.Name = keyName;
         pKeyframe.CaptureProperties( pScene, pSceneGraph.ActiveViewer.Camera );

         pAnimationTrack.InsertKeyframe( pKeyframe, pAnimationTrack.KeyframeCount );

         Hashtable htKeyTime = ClsAnimationTracks.GetKeyTimeTable( pAnimationTrack.Name );
         int sumTime = 0;
         foreach( object obj in htKeyTime.Values )
         {
               sumTime += Convert.ToInt32( obj );
          }

         double dblTime = 0;
         for( int index = 0; index < pAnimationTrack.KeyframeCount; index++ )
         {
               pKeyframe = pAnimationTrack.get_Keyframe( index );
               dblTime += Convert.ToDouble( htKeyTime[pKeyframe.Name] ) / sumTime;
               pKeyframe.TimeStamp = dblTime;
         }
   }

   /// <summary>
   /// 删除动画帧
   /// </summary>
   public void RemoveKeyFrame( IAnimationTrack pAnimationTrack, string keyName )
   {
         for( int index = 0; index < pAnimationTrack.KeyframeCount; index++ )
         {
               if( pAnimationTrack.get_Keyframe( index ).Name == keyName )
               {
                     pAnimationTrack.RemoveKeyframe( index );
                     break;
               }
         }  
   }

   /// <summary>
   /// 删除当前轨迹的所有帧
   /// </summary>
   public void RemoveAllKeyFrame( IAnimationTrack pAnimationTrack )
   {
         pAnimationTrack.RemoveAllKeyframes(); 
   }

不知道大家对这些实现方法了解得多少?多多提意见哟。。。

分享到:
评论

相关推荐

    ArcGIS三维解决方案

    ArcGIS三维解决方案是Esri公司提供的一个全面的三维地理信息系统(GIS)平台,它整合了数据存储、管理和分析,以及地图服务的发布和访问。这个系统的核心在于ArcSDE空间数据库引擎,它允许用户存储和管理大量的空间...

    ArcGIS三维应用集锦

    《ArcGIS三维应用集锦》一书由ESRI中国(北京)有限公司的行业技术部编撰,出版于2010年7月,共计180多页,是一本全面介绍ArcGIS三维技术及其在各个行业应用的专著。本书不仅涵盖了ArcGIS10的完整二三维一体化解决...

    arcgis三维动画开发实例

    基于给定的文件信息,以下是对“ArcGIS三维动画开发实例”的详细解析,重点在于ArcGIS Engine中的三维动画开发,包括动画轨迹、书签功能、沿路径飞行以及目标跟踪等核心知识点。 ### ArcGIS Engine三维动画开发概览...

    ArcGIS结合Sketchup创建三维虚拟城市解决方案

    ### ArcGIS结合Sketchup创建三维虚拟城市解决方案 #### 一、引言 随着地理信息系统(GIS)技术的发展,三维建模已经成为城市规划、建筑设计、景观设计等领域不可或缺的一部分。ArcGIS作为一款强大的GIS软件,提供了...

    ArcGIS三维从入门到精通

    ### ArcGIS三维从入门到精通 #### 一、三维场景简介 ...综上所述,ArcGIS三维技术不仅提供了丰富的工具和功能,还不断探索新的应用场景和技术前沿,为用户提供了一流的三维地理信息系统解决方案。

    ArcGIS三维入门学习资料

    ### ArcGIS三维入门学习资料知识点总结 #### 一、三维场景简介 - **三维简介**:ArcGIS三维技术提供了一种全新的方式来查看地理信息,它不仅能够展示地表形态,还能通过高度来表现地物特征,使得地理信息更加直观...

    ARCGIS三维应用

    这些内容展示了ArcGIS提供的二三维一体化集成解决方案如何帮助用户解决实际问题,创造价值。编辑这本应用集锦的目的是提供交流沟通的平台,帮助用户利用ArcGIS解决实质性问题,并希望读者能分享自己的经验和见解,...

    基于Sketchup和ArcGIS的城市三维可视化研究

    - **ArcGIS三维数据支持**:自ArcGIS 8.3版本起,ArcGIS开始支持MultiPatch(多片)类型的数据,这是一种专为描述三维实体表面设计的要素类。z值被用作高度坐标,从而实现了三维数据的存储和支持。 - **三维数据的...

    ArcGISDEM分析解决方案.pdf

    剖面显示是 ArcGIS DEM 分析解决方案中的一种功能,可以将 DEM 数据转换为剖面图形,以便更好地展示DEM数据的三维结构。在该功能中,用户可以沿着 DEM 数据的某一方向绘制剖面图形,并对其进行分析。 剖面显示的...

    借助于SketchUp 工具的ArcGIS三维建模

    ### 借助SketchUp工具的ArcGIS三维建模详解 #### 一、概述 本文主要介绍如何利用SketchUp工具配合ArcGIS进行三维建模。这种方法适用于地理信息系统(GIS)项目中需要创建精细三维场景的情况。通过ArcGIS与SketchUp...

    Arcgis 跨平台三维介绍

    无论是大企业还是小企业,ArcGIS都能提供适合所有企业级工作流的三维解决方案。例如,大型企业可以在本地安全地探索数据,而小型企业可以通过ArcGIS Online共享三维数据。此外,混合场景下,它还能支持连通和断开的...

Global site tag (gtag.js) - Google Analytics