| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 | import Cartesian3 from "../Core/Cartesian3.js";import Check from "../Core/Check.js";import defined from "../Core/defined.js";/** * A Plane in Hessian Normal form to be used with {@link ClippingPlaneCollection}. * Compatible with mathematics functions in {@link Plane} * * @alias ClippingPlane * @constructor * * @param {Cartesian3} normal The plane's normal (normalized). * @param {Number} distance The shortest distance from the origin to the plane.  The sign of * <code>distance</code> determines which side of the plane the origin * is on.  If <code>distance</code> is positive, the origin is in the half-space * in the direction of the normal; if negative, the origin is in the half-space * opposite to the normal; if zero, the plane passes through the origin. */function ClippingPlane(normal, distance) {  //>>includeStart('debug', pragmas.debug);  Check.typeOf.object("normal", normal);  Check.typeOf.number("distance", distance);  //>>includeEnd('debug');  this._distance = distance;  this._normal = new UpdateChangedCartesian3(normal, this);  this.onChangeCallback = undefined;  this.index = -1; // to be set by ClippingPlaneCollection}Object.defineProperties(ClippingPlane.prototype, {  /**   * The shortest distance from the origin to the plane.  The sign of   * <code>distance</code> determines which side of the plane the origin   * is on.  If <code>distance</code> is positive, the origin is in the half-space   * in the direction of the normal; if negative, the origin is in the half-space   * opposite to the normal; if zero, the plane passes through the origin.   *   * @type {Number}   * @memberof ClippingPlane.prototype   */  distance: {    get: function () {      return this._distance;    },    set: function (value) {      //>>includeStart('debug', pragmas.debug);      Check.typeOf.number("value", value);      //>>includeEnd('debug');      if (defined(this.onChangeCallback) && value !== this._distance) {        this.onChangeCallback(this.index);      }      this._distance = value;    },  },  /**   * The plane's normal.   *   * @type {Cartesian3}   * @memberof ClippingPlane.prototype   */  normal: {    get: function () {      return this._normal;    },    set: function (value) {      //>>includeStart('debug', pragmas.debug);      Check.typeOf.object("value", value);      //>>includeEnd('debug');      if (        defined(this.onChangeCallback) &&        !Cartesian3.equals(this._normal._cartesian3, value)      ) {        this.onChangeCallback(this.index);      }      // Set without firing callback again      Cartesian3.clone(value, this._normal._cartesian3);    },  },});/** * Create a ClippingPlane from a Plane object. * * @param {Plane} plane The plane containing parameters to copy * @param {ClippingPlane} [result] The object on which to store the result * @returns {ClippingPlane} The ClippingPlane generated from the plane's parameters. */ClippingPlane.fromPlane = function (plane, result) {  //>>includeStart('debug', pragmas.debug);  Check.typeOf.object("plane", plane);  //>>includeEnd('debug');  if (!defined(result)) {    result = new ClippingPlane(plane.normal, plane.distance);  } else {    result.normal = plane.normal;    result.distance = plane.distance;  }  return result;};/** * Clones the ClippingPlane without setting its ownership. * @param {ClippingPlane} clippingPlane The ClippingPlane to be cloned * @param {ClippingPlane} [result] The object on which to store the cloned parameters. * @returns {ClippingPlane} a clone of the input ClippingPlane */ClippingPlane.clone = function (clippingPlane, result) {  if (!defined(result)) {    return new ClippingPlane(clippingPlane.normal, clippingPlane.distance);  }  result.normal = clippingPlane.normal;  result.distance = clippingPlane.distance;  return result;};/** * Wrapper on Cartesian3 that allows detection of Plane changes from "members of members," for example: * * const clippingPlane = new ClippingPlane(...); * clippingPlane.normal.z = -1.0; * * @private */function UpdateChangedCartesian3(normal, clippingPlane) {  this._clippingPlane = clippingPlane;  this._cartesian3 = Cartesian3.clone(normal);}Object.defineProperties(UpdateChangedCartesian3.prototype, {  x: {    get: function () {      return this._cartesian3.x;    },    set: function (value) {      //>>includeStart('debug', pragmas.debug);      Check.typeOf.number("value", value);      //>>includeEnd('debug');      if (        defined(this._clippingPlane.onChangeCallback) &&        value !== this._cartesian3.x      ) {        this._clippingPlane.onChangeCallback(this._clippingPlane.index);      }      this._cartesian3.x = value;    },  },  y: {    get: function () {      return this._cartesian3.y;    },    set: function (value) {      //>>includeStart('debug', pragmas.debug);      Check.typeOf.number("value", value);      //>>includeEnd('debug');      if (        defined(this._clippingPlane.onChangeCallback) &&        value !== this._cartesian3.y      ) {        this._clippingPlane.onChangeCallback(this._clippingPlane.index);      }      this._cartesian3.y = value;    },  },  z: {    get: function () {      return this._cartesian3.z;    },    set: function (value) {      //>>includeStart('debug', pragmas.debug);      Check.typeOf.number("value", value);      //>>includeEnd('debug');      if (        defined(this._clippingPlane.onChangeCallback) &&        value !== this._cartesian3.z      ) {        this._clippingPlane.onChangeCallback(this._clippingPlane.index);      }      this._cartesian3.z = value;    },  },});export default ClippingPlane;
 |