123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- define([
- '../Core/Color',
- '../Core/defaultValue',
- '../Core/defined',
- '../Core/destroyObject',
- '../Core/DeveloperError',
- '../Core/Ellipsoid',
- '../Core/GeometryInstance',
- '../Core/Math',
- '../Core/Rectangle',
- '../Core/RectangleGeometry',
- './EllipsoidSurfaceAppearance',
- './Material',
- './Primitive'
- ], function(
- Color,
- defaultValue,
- defined,
- destroyObject,
- DeveloperError,
- Ellipsoid,
- GeometryInstance,
- CesiumMath,
- Rectangle,
- RectangleGeometry,
- EllipsoidSurfaceAppearance,
- Material,
- Primitive) {
- "use strict";
-
- var RectanglePrimitive = function(options) {
- options = defaultValue(options, defaultValue.EMPTY_OBJECT);
-
- this.ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);
- this._ellipsoid = undefined;
-
- this.rectangle = Rectangle.clone(options.rectangle);
- this._rectangle = undefined;
-
- this.granularity = defaultValue(options.granularity, CesiumMath.RADIANS_PER_DEGREE);
- this._granularity = undefined;
-
- this.height = defaultValue(options.height, 0.0);
- this._height = undefined;
-
- this.rotation = defaultValue(options.rotation, 0.0);
- this._rotation = undefined;
-
- this.textureRotationAngle = defaultValue(options.textureRotationAngle, 0.0);
- this._textureRotationAngle = undefined;
-
- this.show = defaultValue(options.show, true);
- var material = Material.fromType(Material.ColorType, {
- color : new Color(1.0, 1.0, 0.0, 0.5)
- });
-
- this.material = defaultValue(options.material, material);
-
- this.id = options.id;
- this._id = undefined;
-
- this.asynchronous = defaultValue(options.asynchronous, true);
-
- this.debugShowBoundingVolume = defaultValue(options.debugShowBoundingVolume, false);
- this._primitive = undefined;
- };
-
- RectanglePrimitive.prototype.update = function(context, frameState, commandList) {
-
- if (!defined(this.ellipsoid)) {
- throw new DeveloperError('this.ellipsoid must be defined.');
- }
- if (!defined(this.material)) {
- throw new DeveloperError('this.material must be defined.');
- }
- if (this.granularity < 0.0) {
- throw new DeveloperError('this.granularity must be greater than zero.');
- }
-
- if (!this.show || (!defined(this.rectangle))) {
- return;
- }
- if (!Rectangle.equals(this._rectangle, this.rectangle) ||
- (this._ellipsoid !== this.ellipsoid) ||
- (this._granularity !== this.granularity) ||
- (this._height !== this.height) ||
- (this._rotation !== this.rotation) ||
- (this._textureRotationAngle !== this.textureRotationAngle) ||
- (this._id !== this.id)) {
- this._rectangle = Rectangle.clone(this.rectangle, this._rectangle);
- this._ellipsoid = this.ellipsoid;
- this._granularity = this.granularity;
- this._height = this.height;
- this._rotation = this.rotation;
- this._textureRotationAngle = this.textureRotationAngle;
- this._id = this.id;
- var instance = new GeometryInstance({
- geometry : new RectangleGeometry({
- rectangle : this.rectangle,
- vertexFormat : EllipsoidSurfaceAppearance.VERTEX_FORMAT,
- ellipsoid : this.ellipsoid,
- granularity : this.granularity,
- height : this.height,
- rotation : this.rotation,
- stRotation : this.textureRotationAngle
- }),
- id : this.id,
- pickPrimitive : this
- });
- if (defined(this._primitive)) {
- this._primitive.destroy();
- }
- this._primitive = new Primitive({
- geometryInstances : instance,
- appearance : new EllipsoidSurfaceAppearance({
- aboveGround : (this.height > 0.0)
- }),
- asynchronous : this.asynchronous
- });
- }
- var primitive = this._primitive;
- primitive.appearance.material = this.material;
- primitive.debugShowBoundingVolume = this.debugShowBoundingVolume;
- primitive.update(context, frameState, commandList);
- };
-
- RectanglePrimitive.prototype.isDestroyed = function() {
- return false;
- };
-
- RectanglePrimitive.prototype.destroy = function() {
- this._primitive = this._primitive && this._primitive.destroy();
- return destroyObject(this);
- };
- return RectanglePrimitive;
- });
|