com.supermap.data

类 Animation



  • public class Animation
    extends com.supermap.data.InternalHandle
    动画信息类。

    动画模型效果是目前三维技术的一个热点技术。三维游戏中虚拟人物的奔跑,坦克炮塔的旋转,都是动画模型的实际应用。动画模型技术的重要意义在于使得三维场景中的模型对象运动起来,人们可以通过动画获取对象的动态视觉效果。动画模型技术应用在GIS产品中,使得地理信息系统的视觉体验更加趋向于真实。通过对动画模型的观察,使用者能够获取模型各个部位的动作信息,而不再只是静态的图像。

    SuperMap GIS 对动画模型技术的实现,主要体现在对第三方动画模型的支持上。通过将第三方的动画模型文件导入,用户可以控制动画的播放,从而实现在三维场景中展现出动态的对象。

    下图中活动的坦克和直升飞机便是动画模型的实际应用效果。

    示意图:

    实际效果:

    示范代码:
    以下代码示范如何在场景中显示模型动画,并对其进行设置。假设已经有一个 KML 文件(FireTruck.kml),并且由建模师制作好了一个模型 firetruck.SGM,同时获取了场景控件 sceneControl
     public void animationModel(SceneControl sceneControl)
     {
                // 从场景控件获取三维场景
                Scene scene = sceneControl.getScene();
    
                // 向三维场景中添加kml文件,返回kml图层对象kmlLayer
                String kmlPath = "../../Models/FireTruck.kml";
                Layer3D kmlLayer = scene.getLayers().add(kmlPath, Layer3DType.KML, true);
    
                // 新建GeoModel对象,并获得动画模型的路径
                GeoModel geoModel = new GeoModel();
                String modelPath = "../../Models/FireTruck/firetruck.SGM";
                Point3D point = new Point3D(116, 39, 5);
                Boolean isSuccess = geoModel.fromFile(modelPath, point);
    
                if (isSuccess)
                {
                    // 将模型添加进layer的features
                    kmlLayer.getFeatures().add(geoModel);
                    Feature3D feature = kmlLayer.getFeatures().findFeature(1, Feature3DSearchOption.ALLFEATURES);
                    GeoModel animationModel = (GeoModel)feature.getGeometry();
    
                    // 获取Animation 对象
                    Animation animation = animationModel.getAnimation();
    
                    // 设置模型动画是否可用及动画模式
                    animation.setEnabled(true);
                    animation.setPlayMode(PlayMode.ONCE);
    
                    // 设置动画是否自动更新,及其更新时间
                    animation.setAutoUpdated(true);
                    animation.update(50);
    
                    // 设置动画的开始时间和结束时间,查看效果
                    animation.setStartTime(5000);
                    animation.setEndTime(10000);
                }
    }
     
    • 方法详细资料

      • getCurrentTime

        public double getCurrentTime()
        返回当前动画所在的时间位置。单位为毫秒。
        返回:
        当前动画所在的位置。单位为毫秒。
      • setCurrentTime

        public void setCurrentTime(double currentTime)
        设置当前动画所在的时间位置。单位为毫秒。
        参数:
        currentTime - 当前动画所在的时间位置。单位为毫秒。
      • getStartTime

        public double getStartTime()
        返回动画的起始时间位置。单位为毫秒。
        返回:
        动画的起始时间位置。单位为毫秒。
      • setStartTime

        public void setStartTime(double startTime)
        设置动画的起始时间位置。单位为毫秒。
        参数:
        startTime - 动画的起始时间位置。单位为毫秒。
      • getEndTime

        public double getEndTime()
        返回动画的结束时间位置。单位为毫秒。
        返回:
        动画的结束时间位置。单位为毫秒。
      • setEndTime

        public void setEndTime(double endTime)
        设置动画的结束时间位置。单位为毫秒。
        参数:
        endTime - 动画的结束时间位置。单位为毫秒。
      • getLength

        public double getLength()
        返回动画的时间长度,单位为毫秒。
        返回:
        动画的时间长度,单位为毫秒。
      • setEnabled

        public void setEnabled(boolean enabled)
        设置当前动画是否可用。
        参数:
        enabled - 当前动画是否可用。
      • isEnabled

        public boolean isEnabled()
        返回当前动画是否可用。
        返回:
        当前动画是否可用。
      • setAutoUpdated

        public void setAutoUpdated(boolean autoUpdated)
        设置动画播放方式是否为自动更新时间。
        参数:
        autoUpdated - 一个布尔值,表示是否自动更新时间,true 表示自动更新,false 表示不自动更新。
      • isAutoUpdated

        public boolean isAutoUpdated()
        返回动画播放方式是否为自动更新时间。
        返回:
        一个布尔值,表示是否自动更新时间,true 表示自动更新,false 表示不自动更新。
      • getPlayMode

        public PlayMode getPlayMode()
        返回动画的播放模式。
        返回:
        动画的播放模式。
      • setPlayMode

        public void setPlayMode(PlayMode playMode)
        设置动画的播放模式。
        参数:
        playMode - 动画的播放模式。
      • update

        public void update(double offset)
        更新动画时间。
        参数:
        offset - 动画在当前的位置上向前或向后移动的秒数。单位为毫秒。

Copyright © 2021–2024 SuperMap. All rights reserved.