| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 | 
							- import ArcType from "../Core/ArcType.js";
 
- import Cartesian3 from "../Core/Cartesian3.js";
 
- import Color from "../Core/Color.js";
 
- import defaultValue from "../Core/defaultValue.js";
 
- import defined from "../Core/defined.js";
 
- import destroyObject from "../Core/destroyObject.js";
 
- import GeometryInstance from "../Core/GeometryInstance.js";
 
- import Matrix4 from "../Core/Matrix4.js";
 
- import PolylineGeometry from "../Core/PolylineGeometry.js";
 
- import PolylineColorAppearance from "./PolylineColorAppearance.js";
 
- import Primitive from "./Primitive.js";
 
- /**
 
-  * Draws the axes of a reference frame defined by a matrix that transforms to world
 
-  * coordinates, i.e., Earth's WGS84 coordinates.  The most prominent example is
 
-  * a primitives <code>modelMatrix</code>.
 
-  * <p>
 
-  * The X axis is red; Y is green; and Z is blue.
 
-  * </p>
 
-  * <p>
 
-  * This is for debugging only; it is not optimized for production use.
 
-  * </p>
 
-  *
 
-  * @alias DebugModelMatrixPrimitive
 
-  * @constructor
 
-  *
 
-  * @param {Object} [options] Object with the following properties:
 
-  * @param {Number} [options.length=10000000.0] The length of the axes in meters.
 
-  * @param {Number} [options.width=2.0] The width of the axes in pixels.
 
-  * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 matrix that defines the reference frame, i.e., origin plus axes, to visualize.
 
-  * @param {Boolean} [options.show=true] Determines if this primitive will be shown.
 
-  * @param {Object} [options.id] A user-defined object to return when the instance is picked with {@link Scene#pick}
 
-  *
 
-  * @example
 
-  * primitives.add(new Cesium.DebugModelMatrixPrimitive({
 
-  *   modelMatrix : primitive.modelMatrix,  // primitive to debug
 
-  *   length : 100000.0,
 
-  *   width : 10.0
 
-  * }));
 
-  */
 
- function DebugModelMatrixPrimitive(options) {
 
-   options = defaultValue(options, defaultValue.EMPTY_OBJECT);
 
-   /**
 
-    * The length of the axes in meters.
 
-    *
 
-    * @type {Number}
 
-    * @default 10000000.0
 
-    */
 
-   this.length = defaultValue(options.length, 10000000.0);
 
-   this._length = undefined;
 
-   /**
 
-    * The width of the axes in pixels.
 
-    *
 
-    * @type {Number}
 
-    * @default 2.0
 
-    */
 
-   this.width = defaultValue(options.width, 2.0);
 
-   this._width = undefined;
 
-   /**
 
-    * Determines if this primitive will be shown.
 
-    *
 
-    * @type Boolean
 
-    * @default true
 
-    */
 
-   this.show = defaultValue(options.show, true);
 
-   /**
 
-    * The 4x4 matrix that defines the reference frame, i.e., origin plus axes, to visualize.
 
-    *
 
-    * @type {Matrix4}
 
-    * @default {@link Matrix4.IDENTITY}
 
-    */
 
-   this.modelMatrix = Matrix4.clone(
 
-     defaultValue(options.modelMatrix, Matrix4.IDENTITY)
 
-   );
 
-   this._modelMatrix = new Matrix4();
 
-   /**
 
-    * User-defined value returned when the primitive is picked.
 
-    *
 
-    * @type {*}
 
-    * @default undefined
 
-    *
 
-    * @see Scene#pick
 
-    */
 
-   this.id = options.id;
 
-   this._id = undefined;
 
-   this._primitive = undefined;
 
- }
 
- /**
 
-  * @private
 
-  */
 
- DebugModelMatrixPrimitive.prototype.update = function (frameState) {
 
-   if (!this.show) {
 
-     return;
 
-   }
 
-   if (
 
-     !defined(this._primitive) ||
 
-     !Matrix4.equals(this._modelMatrix, this.modelMatrix) ||
 
-     this._length !== this.length ||
 
-     this._width !== this.width ||
 
-     this._id !== this.id
 
-   ) {
 
-     this._modelMatrix = Matrix4.clone(this.modelMatrix, this._modelMatrix);
 
-     this._length = this.length;
 
-     this._width = this.width;
 
-     this._id = this.id;
 
-     if (defined(this._primitive)) {
 
-       this._primitive.destroy();
 
-     }
 
-     // Workaround projecting (0, 0, 0)
 
-     if (
 
-       this.modelMatrix[12] === 0.0 &&
 
-       this.modelMatrix[13] === 0.0 &&
 
-       this.modelMatrix[14] === 0.0
 
-     ) {
 
-       this.modelMatrix[14] = 0.01;
 
-     }
 
-     const x = new GeometryInstance({
 
-       geometry: new PolylineGeometry({
 
-         positions: [Cartesian3.ZERO, Cartesian3.UNIT_X],
 
-         width: this.width,
 
-         vertexFormat: PolylineColorAppearance.VERTEX_FORMAT,
 
-         colors: [Color.RED, Color.RED],
 
-         arcType: ArcType.NONE,
 
-       }),
 
-       modelMatrix: Matrix4.multiplyByUniformScale(
 
-         this.modelMatrix,
 
-         this.length,
 
-         new Matrix4()
 
-       ),
 
-       id: this.id,
 
-       pickPrimitive: this,
 
-     });
 
-     const y = new GeometryInstance({
 
-       geometry: new PolylineGeometry({
 
-         positions: [Cartesian3.ZERO, Cartesian3.UNIT_Y],
 
-         width: this.width,
 
-         vertexFormat: PolylineColorAppearance.VERTEX_FORMAT,
 
-         colors: [Color.GREEN, Color.GREEN],
 
-         arcType: ArcType.NONE,
 
-       }),
 
-       modelMatrix: Matrix4.multiplyByUniformScale(
 
-         this.modelMatrix,
 
-         this.length,
 
-         new Matrix4()
 
-       ),
 
-       id: this.id,
 
-       pickPrimitive: this,
 
-     });
 
-     const z = new GeometryInstance({
 
-       geometry: new PolylineGeometry({
 
-         positions: [Cartesian3.ZERO, Cartesian3.UNIT_Z],
 
-         width: this.width,
 
-         vertexFormat: PolylineColorAppearance.VERTEX_FORMAT,
 
-         colors: [Color.BLUE, Color.BLUE],
 
-         arcType: ArcType.NONE,
 
-       }),
 
-       modelMatrix: Matrix4.multiplyByUniformScale(
 
-         this.modelMatrix,
 
-         this.length,
 
-         new Matrix4()
 
-       ),
 
-       id: this.id,
 
-       pickPrimitive: this,
 
-     });
 
-     this._primitive = new Primitive({
 
-       geometryInstances: [x, y, z],
 
-       appearance: new PolylineColorAppearance(),
 
-       asynchronous: false,
 
-     });
 
-   }
 
-   this._primitive.update(frameState);
 
- };
 
- /**
 
-  * Returns true if this object was destroyed; otherwise, false.
 
-  * <p>
 
-  * If this object was destroyed, it should not be used; calling any function other than
 
-  * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.
 
-  * </p>
 
-  *
 
-  * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.
 
-  *
 
-  * @see DebugModelMatrixPrimitive#destroy
 
-  */
 
- DebugModelMatrixPrimitive.prototype.isDestroyed = function () {
 
-   return false;
 
- };
 
- /**
 
-  * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic
 
-  * release of WebGL resources, instead of relying on the garbage collector to destroy this object.
 
-  * <p>
 
-  * Once an object is destroyed, it should not be used; calling any function other than
 
-  * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,
 
-  * assign the return value (<code>undefined</code>) to the object as done in the example.
 
-  * </p>
 
-  *
 
-  * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
 
-  *
 
-  * @example
 
-  * p = p && p.destroy();
 
-  *
 
-  * @see DebugModelMatrixPrimitive#isDestroyed
 
-  */
 
- DebugModelMatrixPrimitive.prototype.destroy = function () {
 
-   this._primitive = this._primitive && this._primitive.destroy();
 
-   return destroyObject(this);
 
- };
 
- export default DebugModelMatrixPrimitive;
 
 
  |