| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 | import Check from "../Core/Check.js";import defined from "../Core/defined.js";import DeveloperError from "../Core/DeveloperError.js";import NearFarScalar from "../Core/NearFarScalar.js";import Rectangle from "../Core/Rectangle.js";/** * Properties for controlling globe translucency. * * @alias GlobeTranslucency * @constructor */function GlobeTranslucency() {  this._enabled = false;  this._frontFaceAlpha = 1.0;  this._frontFaceAlphaByDistance = undefined;  this._backFaceAlpha = 1.0;  this._backFaceAlphaByDistance = undefined;  this._rectangle = Rectangle.clone(Rectangle.MAX_VALUE);}Object.defineProperties(GlobeTranslucency.prototype, {  /**   * When true, the globe is rendered as a translucent surface.   * <br /><br />   * The alpha is computed by blending {@link Globe#material}, {@link Globe#imageryLayers},   * and {@link Globe#baseColor}, all of which may contain translucency, and then multiplying by   * {@link GlobeTranslucency#frontFaceAlpha} and {@link GlobeTranslucency#frontFaceAlphaByDistance} for front faces and   * {@link GlobeTranslucency#backFaceAlpha} and {@link GlobeTranslucency#backFaceAlphaByDistance} for back faces.   * When the camera is underground back faces and front faces are swapped, i.e. back-facing geometry   * is considered front facing.   * <br /><br />   * Translucency is disabled by default.   *   * @memberof GlobeTranslucency.prototype   *   * @type {Boolean}   * @default false   *   * @see GlobeTranslucency#frontFaceAlpha   * @see GlobeTranslucency#frontFaceAlphaByDistance   * @see GlobeTranslucency#backFaceAlpha   * @see GlobeTranslucency#backFaceAlphaByDistance   */  enabled: {    get: function () {      return this._enabled;    },    set: function (value) {      //>>includeStart('debug', pragmas.debug);      Check.typeOf.bool("enabled", value);      //>>includeEnd('debug');      this._enabled = value;    },  },  /**   * A constant translucency to apply to front faces of the globe.   * <br /><br />   * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.   *   * @memberof GlobeTranslucency.prototype   *   * @type {Number}   * @default 1.0   *   * @see GlobeTranslucency#enabled   * @see GlobeTranslucency#frontFaceAlphaByDistance   *   * @example   * // Set front face translucency to 0.5.   * globe.translucency.frontFaceAlpha = 0.5;   * globe.translucency.enabled = true;   */  frontFaceAlpha: {    get: function () {      return this._frontFaceAlpha;    },    set: function (value) {      //>>includeStart('debug', pragmas.debug);      Check.typeOf.number.greaterThanOrEquals("frontFaceAlpha", value, 0.0);      Check.typeOf.number.lessThanOrEquals("frontFaceAlpha", value, 1.0);      //>>includeEnd('debug');      this._frontFaceAlpha = value;    },  },  /**   * Gets or sets near and far translucency properties of front faces of the globe based on the distance to the camera.   * The translucency will interpolate between the {@link NearFarScalar#nearValue} and   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.   * Outside of these ranges the translucency remains clamped to the nearest bound.  If undefined,   * frontFaceAlphaByDistance will be disabled.   * <br /><br />   * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.   *   * @memberof GlobeTranslucency.prototype   *   * @type {NearFarScalar}   * @default undefined   *   * @see GlobeTranslucency#enabled   * @see GlobeTranslucency#frontFaceAlpha   *   * @example   * // Example 1.   * // Set front face translucency to 0.5 when the   * // camera is 1500 meters from the surface and 1.0   * // as the camera distance approaches 8.0e6 meters.   * globe.translucency.frontFaceAlphaByDistance = new Cesium.NearFarScalar(1.5e2, 0.5, 8.0e6, 1.0);   * globe.translucency.enabled = true;   *   * @example   * // Example 2.   * // Disable front face translucency by distance   * globe.translucency.frontFaceAlphaByDistance = undefined;   */  frontFaceAlphaByDistance: {    get: function () {      return this._frontFaceAlphaByDistance;    },    set: function (value) {      //>>includeStart('debug', pragmas.debug);      if (defined(value) && value.far < value.near) {        throw new DeveloperError(          "far distance must be greater than near distance."        );      }      //>>includeEnd('debug');      this._frontFaceAlphaByDistance = NearFarScalar.clone(        value,        this._frontFaceAlphaByDistance      );    },  },  /**   * A constant translucency to apply to back faces of the globe.   * <br /><br />   * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.   *   * @memberof GlobeTranslucency.prototype   *   * @type {Number}   * @default 1.0   *   * @see GlobeTranslucency#enabled   * @see GlobeTranslucency#backFaceAlphaByDistance   *   * @example   * // Set back face translucency to 0.5.   * globe.translucency.backFaceAlpha = 0.5;   * globe.translucency.enabled = true;   */  backFaceAlpha: {    get: function () {      return this._backFaceAlpha;    },    set: function (value) {      //>>includeStart('debug', pragmas.debug);      Check.typeOf.number.greaterThanOrEquals("backFaceAlpha", value, 0.0);      Check.typeOf.number.lessThanOrEquals("backFaceAlpha", value, 1.0);      //>>includeEnd('debug');      this._backFaceAlpha = value;    },  },  /**   * Gets or sets near and far translucency properties of back faces of the globe based on the distance to the camera.   * The translucency will interpolate between the {@link NearFarScalar#nearValue} and   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.   * Outside of these ranges the translucency remains clamped to the nearest bound.  If undefined,   * backFaceAlphaByDistance will be disabled.   * <br /><br />   * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.   *   * @memberof GlobeTranslucency.prototype   *   * @type {NearFarScalar}   * @default undefined   *   * @see GlobeTranslucency#enabled   * @see GlobeTranslucency#backFaceAlpha   *   * @example   * // Example 1.   * // Set back face translucency to 0.5 when the   * // camera is 1500 meters from the surface and 1.0   * // as the camera distance approaches 8.0e6 meters.   * globe.translucency.backFaceAlphaByDistance = new Cesium.NearFarScalar(1.5e2, 0.5, 8.0e6, 1.0);   * globe.translucency.enabled = true;   *   * @example   * // Example 2.   * // Disable back face translucency by distance   * globe.translucency.backFaceAlphaByDistance = undefined;   */  backFaceAlphaByDistance: {    get: function () {      return this._backFaceAlphaByDistance;    },    set: function (value) {      //>>includeStart('debug', pragmas.debug);      if (defined(value) && value.far < value.near) {        throw new DeveloperError(          "far distance must be greater than near distance."        );      }      //>>includeEnd('debug');      this._backFaceAlphaByDistance = NearFarScalar.clone(        value,        this._backFaceAlphaByDistance      );    },  },  /**   * A property specifying a {@link Rectangle} used to limit translucency to a cartographic area.   * Defaults to the maximum extent of cartographic coordinates.   *   * @memberof GlobeTranslucency.prototype   *   * @type {Rectangle}   * @default {@link Rectangle.MAX_VALUE}   */  rectangle: {    get: function () {      return this._rectangle;    },    set: function (value) {      if (!defined(value)) {        value = Rectangle.clone(Rectangle.MAX_VALUE);      }      Rectangle.clone(value, this._rectangle);    },  },});export default GlobeTranslucency;
 |