# AnimationTool

#### new Cesium.AnimationTool(viewer, options)
MapGIS/Tools/AnimationTool.js 207

Name | Type | Description
--- | --- | ---
`viewer` | Object | 场景视图
`options` | Object | 附加选项
Name | Type | Default | Description
--- | --- | --- | ---
`toolType` | String | `'routes'` | optional 工具类型，routes：动画漫游，point：绕点旋转
`heading` | Number | `90` | optional 航向角（相机视角），绕Z轴旋转的弧度值。路径漫游时:跟随视角、第一视角、上帝视角下实时生效；绕视点旋转时:这个值是自增的，因此只有初始化时生效，不可实时修改
`pitch` | Number | `0` | optional 俯仰角（相机视角），绕Y轴旋转的弧度值。路径漫游时:跟随视角，第一视角实时生效；绕视点旋转时:这个值可实时修改。
`range` | Number | `0` | optional 相机距离，相机距离视点的距离，单位米。路径漫游时:跟随视角，上帝视角实时生效
`distance` | Number | `0` | optional 绕点旋转时，相机定位点的平移距离（沿着相机视角的相反方向），米。绕视点旋转时，这个值可实时修改。不能为空或者是0。
`duration` | Number | `8` | optional 绕点旋转时，动画持续时间
`moveToStop` | Number | `true` | optional 绕点旋转时，移动鼠标，停止旋转。true激活该特性，false，不激活该特性。
`animationType` | Number | `2` | optional 0：一般场景，不操作相机；1：跟随；2：锁定第一视角；3：上帝视角
`isLoop` | Boolean | `false` | optional 是否循环
`showPath` | Boolean | `false` | optional 是否显示路径 (默认不显示路径)
`positions` | Array |  | optional 漫游路径点 初始化可以不设置 但一定要在开始前设置好
`speed` | Number | `1` | optional 漫游速度或者绕点旋转速度，默认1m/s(1米/秒)或1度/秒 特别提醒（漫游场景范围很大的时候，这个一定要设置大，比如飞机可能就是真实的几千米每秒 如果不按真实设置，会导致内部时间点插值过密，造成卡顿）。
`speedupFactor` | Number | `1` | optional 加速因子(加速倍数) 默认为1
`exHeight` | Number | `2` | optional 附加高程
`showInfo` | Boolean | `false` | optional 是否显示提示信息
`modelUrl` | Object |  | optional 模型路径 默认为空不显示
`model` | Object |  | optional 动画漫游中的模型对象参数，详见`ModelGraphics`
`complete` | function |  | 完成回调 完成后的回调函数
`interpolationAlgorithm` | Object | `LagrangePolynomialApproximation` | optional 插值算法 默认拉格朗日 还有线性插值 Cesium.LinearApproximation(埃尔米特插值插值)Cesium.HermitePolynomialApproximation
`isProcessCorner` | Boolean | `false` | optional 是否需要将较大转弯点处理为圆弧
`maxAngle` | Number | `150.0` | optional 设置判断为转弯点的角度的最大值，不超过150的转角会被执行插值，处理为圆弧
`curveStep` | Number | `0.05` | optional 转弯处往圆弧曲线上插值点的步长，点个数=1/curveStep
`headingTargetPosition` | Number | `0.0` | optional 动态可视域目标点绕Z轴旋转，角度制
`pitchTargetPosition` | Number | `0.0` | optional 动态可视域目标点绕Y轴旋转，角度制
`rollTargetPosition` | Number | `0.0` | optional 动态可视域目标点绕X轴旋转，角度制
`rangeTargetPosition` | Number | `1.0` | optional 视点与目标点距离按照倍数增加
`isAddScanEffect` | Boolean | `false` | optional 是否挂载动态扫描特效
`scanEffect` | Object |  | optional 扫描特效实例，可以是动态圆，也可以是雷达扫描
`isGetRealHeight` | Boolean | `false` | optional 是否获取路径点的真实高程
`speedArray` | Array | `[this._speed]` | optional 速度不同时，各个路径点的对应速度
`timeArray` | Array | `[]` | optional 路径点与时间相对应
`accelerationArray` | Array | `[0]` | optional 加速度数组
`callback` | function |  | optional 运动过程中的回调函数
Name | Type | Description
--- | --- | ---
`result` | Object | optional 回调结果：对应的运动动画信息
Name | Type | Description
--- | --- | ---
`routePointIndex` | Number | optional 模型在路径点哪个分段，是当前分段的第一个点的索引
`currenPositionStatus` | Number | optional 当前点状态:0代表点在线上，1代表点在拐点处
`position` | Cartesian3 | optional 实时位置
`startTime` | JulianDate | optional 运动开始时间
`currentTime` | JulianDate | optional 当前时间
`stopTime` | JulianDate | optional 运动结束时间
`remainDistance` | Number | optional 剩余运动距离
`totalDistance` | Number | optional 运动总距离
`speed` | Number | optional 运动速度
`isSetModelPosture` | Boolean | `true` | optional 是否设置模型运动姿态，保持朝向与运动方向一致，默认为true，设置为false时，模型姿态不改变
`startTime` | Object |  | optional Date类型，用于设置漫游开始时间
`startPositionIndex` | Number | `0` | optional Number类型，默认是0，是开始路径漫游跳转点的上一个路径点的索引，和offestStartPositionDistance一起用于判断漫游的具体跳转点位
`offsetStartPositionDistance` | Number | `0` | optional Number类型，默认是0，是距离startPositionIndex索引点的距离，单位是meter
`modelHeading` | Number | `0` | optional Number类型,默认是0，模型的方位角
`modelPitch` | Number | `0` | optional Number类型,默认是0，模型的俯仰角
`modelRoll` | Number | `0` | optional Number类型,默认是0，模型的倾斜角
`firstPersonCameraFocusOffset` | Object | `{offsetX: 0,offsetY: 0,offsetZ: 0}` | optional 第一人称视角下，相机焦点的偏移值。向前：offsetX；向左：offsetY；向上:offsetZ
`modelOffset` | Object | `{offsetX: 0,offsetY: 0,offsetZ: 0}` | optional 模型相对自身的平移值，单位为米。向前：offsetX；向左：offsetY；向上:offsetZ

Author:
  - 韩彦生 & zlf & 夏琨

##### Example:

    //绕点旋转
     var options = {
                        //类型指定为point
                        toolType: 'point',
                        //绕Z轴旋转角度，弧度值，初始化时有效。
                        heading: 0,
                        //绕Y轴旋转，弧度值，可通过纬度值转化，可实时更改。
                        pitch: 0,
                        //持续时间，秒。注意duration属性只有在isLoop为false时生效
                        duration: 20,
                        //旋转速度，度/秒。注意speed属性只有在isLoop为true时生效
                        speed: 10,
                        //是否循环动画，true：一直循环，false：到结束时间就停止动画
                        isLoop: true,
                        //旋转中心点，设置为球心
                        positions: new Cesium.Cartesian3(0, 0, 0),
                        //绕点旋转时，相机定位点的平移距离（沿着相机视角的相反方向）
                        distance: 41000000,
                        //绕点旋转动画完成事件
                        complete: function () {
                            alert('完毕');
                        },
                        //绕点旋转时，每一帧的回调函数，暂停同时暂停返回结果
                        callback: function (result) {
                            console.log('heading:' + result.heading + '，pitch：' + result.pitch);
                        },
                    }
     // 示例一：绕球心旋转
     options.positions = new Cesium.Cartesian3(0, 0, 0);
     var rotatePointTool = new Cesium.AnimationTool(viewer, options);
     // 示例二：绕某一点旋转
     options.positions = Cesium.Cartesian3.fromDegrees(108.96044700955785, 34.21796237686321, 60.99772929683282);
     var rotatePointTool = new Cesium.AnimationTool(viewer, options);
     // 示例三：持续旋转，不停止
     options.isLoop = true;
     // 请设置速度，否则就是默认值1度/秒
     options.speed = 10;
     var rotatePointTool = new Cesium.AnimationTool(viewer, options);
     //开始
     rotatePointTool.start();
     //暂停
     rotatePointTool.pause();
     //结束
     rotatePointTool.stop();
    //动画漫游
             var options = {
                //类型指定为routes
                toolType: 'routes',
                //航向角（相机视角），绕Z轴旋转,在第一人称视角，上帝视角下支持设置
                heading: 0,
                //俯仰角（相机视角），绕Y轴旋转。在第一人称视角支持设置
                pitch: 0,
                //距离：单位是米，在第一人称视角，上帝视角下支持设置
                range:100000,
                //漫游路径点，初始化可以不设置 但一定要在开始前设置好
                positions:[],
                // 视角类型 0：一般场景，不操作相机；1：跟随；2：锁定第一视角；3：上帝视角
                animationType:1,
                //回调函数传回一组动画信息
                callback: function (result) {
                            console.log('动画信息：' + result);
                            //需要在模型运动到点索引为1，和点索引为5的分段改变姿态
                            if (result.routePointIndex===1||result.routePointIndex===5 ) {
                                 animation.modelHeading = 45;
                                 animation.modelPitch = 45;
                                 animation.modelRoll = 45;
                             } else {
                                 //其他分段还原姿态默认值
                                 animation.modelHeading = 0;
                                 animation.modelPitch = 0;
                                 animation.modelRoll = 0;
                             }
                        },
                //是否设置模型运动姿态，保持朝向与运动方向一致，默认为true，设置为false时，模型姿态不改变
                //isSetModelPosture:true,
                //是否循环动画，true：一直循环，false：到结束时间就停止动画
                isLoop: false,
                //加速因子
                speedupFactor: 5,
                //模型路径 默认为空不显示
                modelUrl: '../../SampleData/models/CesiumMan/Cesium_Man.glb',
                model: {
                    //放大比例
                    scale: 10000,
                    //固定大小设为0
                    minimumPixelSize : 0
                },
                //开始路径漫游跳转点的上一个路径点的索引
                startPositionIndex:0,
                //距离索引点的距离，单位是meter
                offsetStartPositionDistance:0,
                //是否需要将较大转弯点处理为圆弧
                //isProcessCorner: false,

                //设置判断为转弯点的角度的最大值，不超过150的转角会被执行插值，处理为圆弧
                //maxAngle: 150.0,
                //转弯处往圆弧曲线上插值点的步长，点个数=1/curveStep
                //curveStep: 0.01,
                complete: function () {
                    alert('完毕');
                }
            }
     // 示例：路径漫游
     options.positions = Cesium.Cartesian3.fromDegreesArray([
                    117.213063, 31.812956, 117.213162, 31.812389, 117.212929, 31.812056, 117.213275, 31.811582,
                    117.21348, 31.811513, 117.214141, 31.811682, 117.21497, 31.811691, 117.216318, 31.811454
                ]);
     var animation = new Cesium.AnimationTool(viewer, options);
    //开始
     animation.start();
     //暂停
     //animation.pause();
     //结束
     //animation.stop();

### Members

#### readonly animationModel : Number
MapGIS/Tools/AnimationTool.js 587

动画模型

#### animationType : Number
MapGIS/Tools/AnimationTool.js 521

动画漫游的类型

#### callback : function
MapGIS/Tools/AnimationTool.js 450

回调函数，返回一组动画信息

##### Example:

    callback: function (result) {
         console.log('到达站点' + result.index + '，站点坐标：' + result.position);
         console.log('当前点状态' + result.currenPositionStatus);
         console.log('实时位置' + result.position);
         console.log('运动开始时间' + result.startTime);
         console.log('当前时间' + result.currentTime);
         console.log('剩余运动距离' + result.remainDistance);
         console.log('运动总距离' + result.totalDistance);
         console.log('运动速度' + result.speed);
     }

#### deprecated disFactor : Number
MapGIS/Tools/AnimationTool.js 345

用于判断当前点是否到达路径点

Deprecated: 在16.7.2版本中移除, 请使用`AnimationTool#callback`替代

#### distance : Number
MapGIS/Tools/AnimationTool.js 655

偏移距离 （单位米）

#### exHeight : Number
MapGIS/Tools/AnimationTool.js 597

附加高程

#### firstPersonCameraFocusOffset : Object
MapGIS/Tools/AnimationTool.js 684

第一人称视角下，相机焦点的偏移值。向前：offsetX；向左：offsetX；向上:offsetZ

#### deprecated followSwitchMouseEvent : Boolean
MapGIS/Tools/AnimationTool.js 359

布尔类型，默认为false，切换跟随视角下的鼠标点击事件

Deprecated: 在16.7.2版本中移除, 用户需要自定义鼠标控制逻辑，可在应用层参考`screenSpaceCameraController`鼠标事件设置

#### readonly followViewCameraHPR : Object
MapGIS/Tools/AnimationTool.js 711

跟随视角下，相机的初始heading，pitch，range

#### heading : Number
MapGIS/Tools/AnimationTool.js 623

航向角 （单位弧度）

#### headingTargetPosition : Number
MapGIS/Tools/AnimationTool.js 795

根据Z轴旋转

#### isAddViewshedAnalysis : Boolean
MapGIS/Tools/AnimationTool.js 743

是否挂载动态可视域

#### deprecated isGetPositionNow : Boolean
MapGIS/Tools/AnimationTool.js 317

是否获取当前点坐标，默认为false，为true时，需配合返回当前点坐标的回调函数一起使用

Deprecated: 在16.7.2版本中移除, 请使用`AnimationTool#callback`替代

#### isLoop : Boolean
MapGIS/Tools/AnimationTool.js 534

是否循环

#### isSetModelPosture : Boolean
MapGIS/Tools/AnimationTool.js 860

是否设置模型运动姿态，保持朝向与运动方向一致

#### deprecated isShowPath : Boolean
MapGIS/Tools/AnimationTool.js 554

是否显示漫游路径，计划废弃，请使用 `AnimationTool#showPath` 来控制漫游路径的显隐

Deprecated: true

#### modelHeading : Number
MapGIS/Tools/AnimationTool.js 426

模型的方位角

#### modelOffset : Object
MapGIS/Tools/AnimationTool.js 697

模型相对自身的平移值，单位为米。向前：offsetX；向左：offsetY；向上:offsetZ

#### modelPitch : Number
MapGIS/Tools/AnimationTool.js 464

模型的俯仰角

#### modelRoll : Number
MapGIS/Tools/AnimationTool.js 478

模型的倾斜角

#### offsetStartPositionDistance : Number
MapGIS/Tools/AnimationTool.js 914

距离startPositionIndex索引点在当前分段线上的距离,单位是meter

#### deprecated onPositionTag : Boolean
MapGIS/Tools/AnimationTool.js 331

是否执行回调函数的功能，默认为false不执行

Deprecated: 在16.7.2版本中移除, 请使用`AnimationTool#callback`替代

#### pause : Boolean
MapGIS/Tools/AnimationTool.js 873

控制动画的暂停

#### pitch : Number
MapGIS/Tools/AnimationTool.js 639

俯仰角 （单位弧度）

#### pitchTargetPosition : Number
MapGIS/Tools/AnimationTool.js 782

根据Y轴旋转

#### positions : Array
MapGIS/Tools/AnimationTool.js 372

坐标点

#### range : Number
MapGIS/Tools/AnimationTool.js 668

距离 (单位米)

#### rangeTargetPosition : Number
MapGIS/Tools/AnimationTool.js 808

可视域视点到目标点视距增加倍数

#### rollTargetPosition : Number
MapGIS/Tools/AnimationTool.js 769

根据X轴旋转

#### scanEffect : Object
MapGIS/Tools/AnimationTool.js 821

扫描特效实例

#### showInfo : Boolean
MapGIS/Tools/AnimationTool.js 610

是否显示提示信息

#### showPath : Boolean
MapGIS/Tools/AnimationTool.js 570

是否显示漫游路径

#### speed : Number
MapGIS/Tools/AnimationTool.js 492

漫游速度

#### speedArray : Array
MapGIS/Tools/AnimationTool.js 834

用于变速漫游中，设定各个点的速度

#### speedupFactor : Number
MapGIS/Tools/AnimationTool.js 507

快进（设置倍数）

#### startPositionIndex : Number
MapGIS/Tools/AnimationTool.js 900

用于记录开始路径漫游跳转点的上一个路径点的索引

#### timeArray : Array
MapGIS/Tools/AnimationTool.js 847

用于变速漫游中，设定各个点通过的时间数组，时间使用Date()对象

#### viewshedAnalysis : Object
MapGIS/Tools/AnimationTool.js 756

可视域实例

### Methods

#### start() → Boolean
MapGIS/Tools/AnimationTool.js 1510

开始

##### Returns:

True

#### stop()
MapGIS/Tools/AnimationTool.js 2020

结束