learning_cesium/css/ProjectionPicker/ProjectionPickerViewModel.js

203 lines
5.9 KiB
JavaScript
Raw Permalink Normal View History

2024-03-19 18:06:25 +08:00
define([
'../../Core/defined',
'../../Core/defineProperties',
'../../Core/destroyObject',
'../../Core/DeveloperError',
'../../Core/EventHelper',
'../../Core/OrthographicFrustum',
'../../Scene/SceneMode',
'../../ThirdParty/knockout',
'../createCommand'
], function(
defined,
defineProperties,
destroyObject,
DeveloperError,
EventHelper,
OrthographicFrustum,
SceneMode,
knockout,
createCommand) {
'use strict';
/**
* The view model for {@link ProjectionPicker}.
* @alias ProjectionPickerViewModel
* @constructor
*
* @param {Scene} scene The Scene to switch projections.
*/
function ProjectionPickerViewModel(scene) {
//>>includeStart('debug', pragmas.debug);
if (!defined(scene)) {
throw new DeveloperError('scene is required.');
}
//>>includeEnd('debug');
this._scene = scene;
this._orthographic = scene.camera.frustum instanceof OrthographicFrustum;
this._flightInProgress = false;
/**
* Gets or sets whether the button drop-down is currently visible. This property is observable.
* @type {Boolean}
* @default false
*/
this.dropDownVisible = false;
/**
* Gets or sets the perspective projection tooltip. This property is observable.
* @type {String}
* @default 'Perspective Projection'
*/
this.tooltipPerspective = 'Perspective Projection';
/**
* Gets or sets the orthographic projection tooltip. This property is observable.
* @type {String}
* @default 'Orthographic Projection'
*/
this.tooltipOrthographic = 'Orthographic Projection';
/**
* Gets the currently active tooltip. This property is observable.
* @type {String}
*/
this.selectedTooltip = undefined;
/**
* Gets or sets the current SceneMode. This property is observable.
* @type {SceneMode}
*/
this.sceneMode = scene.mode;
knockout.track(this, ['_orthographic', '_flightInProgress', 'sceneMode', 'dropDownVisible', 'tooltipPerspective', 'tooltipOrthographic']);
var that = this;
knockout.defineProperty(this, 'selectedTooltip', function() {
if (that._orthographic) {
return that.tooltipOrthographic;
}
return that.tooltipPerspective;
});
this._toggleDropDown = createCommand(function() {
if (that.sceneMode === SceneMode.SCENE2D || that._flightInProgress) {
return;
}
that.dropDownVisible = !that.dropDownVisible;
});
this._eventHelper = new EventHelper();
this._eventHelper.add(scene.morphComplete, function(transitioner, oldMode, newMode, isMorphing) {
that.sceneMode = newMode;
that._orthographic = newMode === SceneMode.SCENE2D || that._scene.camera.frustum instanceof OrthographicFrustum;
});
this._eventHelper.add(scene.preRender, function() {
that._flightInProgress = defined(scene.camera._currentFlight);
});
this._switchToPerspective = createCommand(function() {
if (that.sceneMode === SceneMode.SCENE2D) {
return;
}
that._scene.camera.switchToPerspectiveFrustum();
that._orthographic = false;
that.dropDownVisible = false;
});
this._switchToOrthographic = createCommand(function() {
if (that.sceneMode === SceneMode.SCENE2D) {
return;
}
that._scene.camera.switchToOrthographicFrustum();
that._orthographic = true;
that.dropDownVisible = false;
});
//Used by knockout
this._sceneMode = SceneMode;
}
defineProperties(ProjectionPickerViewModel.prototype, {
/**
* Gets the scene
* @memberof ProjectionPickerViewModel.prototype
* @type {Scene}
*/
scene : {
get : function() {
return this._scene;
}
},
/**
* Gets the command to toggle the drop down box.
* @memberof ProjectionPickerViewModel.prototype
*
* @type {Command}
*/
toggleDropDown : {
get : function() {
return this._toggleDropDown;
}
},
/**
* Gets the command to switch to a perspective projection.
* @memberof ProjectionPickerViewModel.prototype
*
* @type {Command}
*/
switchToPerspective : {
get : function() {
return this._switchToPerspective;
}
},
/**
* Gets the command to switch to orthographic projection.
* @memberof ProjectionPickerViewModel.prototype
*
* @type {Command}
*/
switchToOrthographic : {
get : function() {
return this._switchToOrthographic;
}
},
/**
* Gets whether the scene is currently using an orthographic projection.
* @memberof ProjectionPickerViewModel.prototype
*
* @type {Command}
*/
isOrthographicProjection : {
get : function() {
return this._orthographic;
}
}
});
/**
* @returns {Boolean} true if the object has been destroyed, false otherwise.
*/
ProjectionPickerViewModel.prototype.isDestroyed = function() {
return false;
};
/**
* Destroys the view model.
*/
ProjectionPickerViewModel.prototype.destroy = function() {
this._eventHelper.removeAll();
destroyObject(this);
};
return ProjectionPickerViewModel;
});