123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- /*global define*/
- define([
- '../../Core/Cartesian3',
- '../../Core/defaultValue',
- '../../Core/defined',
- '../../Core/defineProperties',
- '../../Core/DeveloperError',
- '../../Core/Matrix4',
- '../../Core/Rectangle',
- '../../Scene/Camera',
- '../../Scene/SceneMode',
- '../../ThirdParty/knockout',
- '../createCommand'
- ], function(
- Cartesian3,
- defaultValue,
- defined,
- defineProperties,
- DeveloperError,
- Matrix4,
- Rectangle,
- Camera,
- SceneMode,
- knockout,
- createCommand) {
- "use strict";
- function viewHome(scene, duration) {
- var mode = scene.mode;
- if (defined(scene) && mode === SceneMode.MORPHING) {
- scene.completeMorph();
- }
- var direction;
- var right;
- var up;
- if (mode === SceneMode.SCENE2D) {
- scene.camera.flyToRectangle({
- destination : Rectangle.MAX_VALUE,
- duration : duration,
- endTransform : Matrix4.IDENTITY
- });
- } else if (mode === SceneMode.SCENE3D) {
- var destination = scene.camera.getRectangleCameraCoordinates(Camera.DEFAULT_VIEW_RECTANGLE);
- var mag = Cartesian3.magnitude(destination);
- mag += mag * Camera.DEFAULT_VIEW_FACTOR;
- Cartesian3.normalize(destination, destination);
- Cartesian3.multiplyByScalar(destination, mag, destination);
- direction = Cartesian3.normalize(destination, new Cartesian3());
- Cartesian3.negate(direction, direction);
- right = Cartesian3.cross(direction, Cartesian3.UNIT_Z, new Cartesian3());
- up = Cartesian3.cross(right, direction, new Cartesian3());
- scene.camera.flyTo({
- destination : destination,
- direction: direction,
- up : up,
- duration : duration,
- endTransform : Matrix4.IDENTITY
- });
- } else if (mode === SceneMode.COLUMBUS_VIEW) {
- var maxRadii = scene.globe.ellipsoid.maximumRadius;
- var position = new Cartesian3(0.0, -1.0, 1.0);
- position = Cartesian3.multiplyByScalar(Cartesian3.normalize(position, position), 5.0 * maxRadii, position);
- direction = new Cartesian3();
- direction = Cartesian3.normalize(Cartesian3.subtract(Cartesian3.ZERO, position, direction), direction);
- right = Cartesian3.cross(direction, Cartesian3.UNIT_Z, new Cartesian3());
- up = Cartesian3.cross(right, direction, new Cartesian3());
- scene.camera.flyTo({
- destination : position,
- duration : duration,
- up : up,
- direction : direction,
- endTransform : Matrix4.IDENTITY,
- convert : false
- });
- }
- }
- /**
- * The view model for {@link HomeButton}.
- * @alias HomeButtonViewModel
- * @constructor
- *
- * @param {Scene} scene The scene instance to use.
- * @param {Number} [duration=1.5] The duration of the camera flight in seconds.
- */
- var HomeButtonViewModel = function(scene, duration) {
- //>>includeStart('debug', pragmas.debug);
- if (!defined(scene)) {
- throw new DeveloperError('scene is required.');
- }
- //>>includeEnd('debug');
- duration = defaultValue(duration, 1.5);
- this._scene = scene;
- this._duration = duration;
- var that = this;
- this._command = createCommand(function() {
- viewHome(that._scene, that._duration);
- });
- /**
- * Gets or sets the tooltip. This property is observable.
- *
- * @type {String}
- */
- this.tooltip = 'View Home';
- knockout.track(this, ['tooltip']);
- };
- defineProperties(HomeButtonViewModel.prototype, {
- /**
- * Gets the scene to control.
- * @memberof HomeButtonViewModel.prototype
- *
- * @type {Scene}
- */
- scene : {
- get : function() {
- return this._scene;
- }
- },
- /**
- * Gets the Command that is executed when the button is clicked.
- * @memberof HomeButtonViewModel.prototype
- *
- * @type {Command}
- */
- command : {
- get : function() {
- return this._command;
- }
- },
- /**
- * Gets or sets the the duration of the camera flight in seconds.
- * A value of zero causes the camera to instantly switch to home view.
- * @memberof HomeButtonViewModel.prototype
- *
- * @type {Number}
- */
- duration : {
- get : function() {
- return this._duration;
- },
- set : function(value) {
- //>>includeStart('debug', pragmas.debug);
- if (value < 0) {
- throw new DeveloperError('value must be positive.');
- }
- //>>includeEnd('debug');
- this._duration = value;
- }
- }
- });
- return HomeButtonViewModel;
- });
|