ArcGlobe组件开发之动画5——播放动画

在动画开发中,录制的一个动画可能只有一个Track也可能有多个Track。前面的博文提到动画的实现方式有两种,这里采用基于Camera的动画。这里我做的比较简单,首先来看实现效果图:


下面,我们来看,如何在Globe下实现动画的播放。来看下面的OMD图,从这张图里我们可以看出,Globe包含多个Track(轨迹),Track包含多个KeyFrame(关键帧);动画类型主要有基于Camera的和基于Layer,再有就是前面提到的基于关键帧的三种类型。那么具体如何做呢?我们一步一步来看:


(1)AnimationExtension

The  AnimationExtension  object is the access point for other animation objects in ArcMap, Scene, and Globe. Typically, when you work with animation objects, the AnimationExtension object needs to be obtained as the first step before other actions are performed. The animation environment and animation track container objects can be accessed through the  IAnimationExtension  interface.
之前的博文提到了   IAnimationExtension  接口,这个地方说在操作动画对象前必须要首先获得AnimationExtension对象,通过该对象获得动画参数设置对象和动画轨迹容器对象。接口如下图所示:


代码如下:
IGlobe globe = globecontrol.Globe;
            IBasicScene2 basicscene = globe as IBasicScene2;
            IAnimationExtension animationEx = basicscene.AnimationExtension;
            agAnimationEnv = animationEx.AnimationEnvironment;
(2)获取AGAnimationEnvironment 对象后就可以设置播放的参数,比如播放模式,持续时间等参数
代码如下:
        //设置动画播放参数
        private void SetAnimationEnv ()
        {
            //获取AGAnimationEnvironment对象
            IGlobe globe = globecontrol.Globe;
            IBasicScene2 basicscene = globe as IBasicScene2;
            IAnimationExtension animationEx = basicscene.AnimationExtension;
            agAnimationEnv = animationEx.AnimationEnvironment;
            
            agAnimationEnv.AnimationDuration = Convert.ToDouble(textBox_AnimationDuration.Text);//持续时间
            agAnimationEnv.PlayType=esriAnimationPlayType.esriAnimationPlayTypeDuration; //播放模式
            Set_Animation_PlayMode();
            agAnimationEnv.PlayMode = animationPlayMode;
        }

        //设置播放模式
        private void Set_Animation_PlayMode ()
        {
            switch (comboBox_PlayMode.Text)
            {
                case "正向播放一次":
                animationPlayMode = esriAnimationPlayMode.esriAnimationPlayOnceForward;
            	break;
                case "反向播放一次":
                animationPlayMode = esriAnimationPlayMode.esriAnimationPlayOnceReverse;
                break;
                case "正向循环":
                animationPlayMode = esriAnimationPlayMode.esriAnimationPlayLoopForward;
                break;
                case "正反循环":
                animationPlayMode = esriAnimationPlayMode.esriAnimationPlayLoopReverse;
                break;
                default:
                break;
            }
            
        }

(3)设置完播放参数,下一步就应该是播放了,动画的播放主要用到IAGAnimationPlayer 接口,通过该接口可以播放,暂停,停止和录制动画。如下图所示:

 


代码如下:
IAGAnimationPlayer agAnimationPlayer new AGAnimationEnvironmentClass();
 agAnimationPlayer.PlayAnimation(agAnimationTracks,agAnimationEnv,null);

(4)PlayAnimation方法需要三个参数:
[C#]public void PlayAnimation (
    IAGAnimationTrackspTracks,
    IAGAnimationEnvironmentpEnvironment,
    IStatusBarpStatusBar);
第一个参数是Tracks,就是动画所包含的轨迹,这里动画可能包含多条轨迹,如果要播放其中的一条指定轨迹则需要对轨迹进行处理:
 //选中播放轨迹可见,其余不可见
        private void enableSelectedTrack ()
        {
            string selectedTrackName = agAnimationTrack.Name;
            IArray tracksArray = agAnimationTracks.AGTracks;
            int trackCount = tracksArray.Count;
            if (trackCount>0)
            {
                for(int i = 0;i < trackCount;i++)
                {
                    IAGAnimationTrack track_temp = tracksArray.get_Element(i) as IAGAnimationTrack;
                    if(track_temp.Name==selectedTrackName)
                    {
                        track_temp.IsEnabled = true;
                        
                    }
                    else if (track_temp.Name!=selectedTrackName)
                    {
                        IAGAnimationTrack track2Disabled;
                        agAnimationTracks.FindTrack(track_temp.Name,out track2Disabled);
                        track2Disabled.IsEnabled = false;
                    }
                    
                }
            
            }


        }

通过以上步骤就可以实现对动画的操作,至此,ArcGlobe组件开发之动画篇就结束了,希望对需要的童鞋有所帮助。










转载于:https://www.cnblogs.com/giser-whu/p/3707066.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值