123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- import BoundingSphere from "../Core/BoundingSphere.js";
- import Check from "../Core/Check.js";
- import defined from "../Core/defined.js";
- import destroyObject from "../Core/destroyObject.js";
- import DeveloperError from "../Core/DeveloperError.js";
- import GroundPrimitive from "../Scene/GroundPrimitive.js";
- import MaterialAppearance from "../Scene/MaterialAppearance.js";
- import PerInstanceColorAppearance from "../Scene/PerInstanceColorAppearance.js";
- import Primitive from "../Scene/Primitive.js";
- import BoundingSphereState from "./BoundingSphereState.js";
- import ColorMaterialProperty from "./ColorMaterialProperty.js";
- import MaterialProperty from "./MaterialProperty.js";
- import Property from "./Property.js";
- function DynamicGeometryUpdater(
- geometryUpdater,
- primitives,
- orderedGroundPrimitives
- ) {
-
- Check.defined("geometryUpdater", geometryUpdater);
- Check.defined("primitives", primitives);
- Check.defined("orderedGroundPrimitives", orderedGroundPrimitives);
-
- this._primitives = primitives;
- this._orderedGroundPrimitives = orderedGroundPrimitives;
- this._primitive = undefined;
- this._outlinePrimitive = undefined;
- this._geometryUpdater = geometryUpdater;
- this._options = geometryUpdater._options;
- this._entity = geometryUpdater._entity;
- this._material = undefined;
- }
- DynamicGeometryUpdater.prototype._isHidden = function (entity, geometry, time) {
- return (
- !entity.isShowing ||
- !entity.isAvailable(time) ||
- !Property.getValueOrDefault(geometry.show, time, true)
- );
- };
- DynamicGeometryUpdater.prototype._setOptions =
- DeveloperError.throwInstantiationError;
- DynamicGeometryUpdater.prototype.update = function (time) {
-
- Check.defined("time", time);
-
- var geometryUpdater = this._geometryUpdater;
- var onTerrain = geometryUpdater._onTerrain;
- var primitives = this._primitives;
- var orderedGroundPrimitives = this._orderedGroundPrimitives;
- if (onTerrain) {
- orderedGroundPrimitives.remove(this._primitive);
- } else {
- primitives.removeAndDestroy(this._primitive);
- primitives.removeAndDestroy(this._outlinePrimitive);
- this._outlinePrimitive = undefined;
- }
- this._primitive = undefined;
- var entity = this._entity;
- var geometry = entity[this._geometryUpdater._geometryPropertyName];
- this._setOptions(entity, geometry, time);
- if (this._isHidden(entity, geometry, time)) {
- return;
- }
- var shadows = this._geometryUpdater.shadowsProperty.getValue(time);
- var options = this._options;
- if (!defined(geometry.fill) || geometry.fill.getValue(time)) {
- var fillMaterialProperty = geometryUpdater.fillMaterialProperty;
- var isColorAppearance =
- fillMaterialProperty instanceof ColorMaterialProperty;
- var appearance;
- var closed = geometryUpdater._getIsClosed(options);
- if (isColorAppearance) {
- appearance = new PerInstanceColorAppearance({
- closed: closed,
- flat:
- onTerrain && !geometryUpdater._supportsMaterialsforEntitiesOnTerrain,
- });
- } else {
- var material = MaterialProperty.getValue(
- time,
- fillMaterialProperty,
- this._material
- );
- this._material = material;
- appearance = new MaterialAppearance({
- material: material,
- translucent: material.isTranslucent(),
- closed: closed,
- });
- }
- if (onTerrain) {
- options.vertexFormat = PerInstanceColorAppearance.VERTEX_FORMAT;
- this._primitive = orderedGroundPrimitives.add(
- new GroundPrimitive({
- geometryInstances: this._geometryUpdater.createFillGeometryInstance(
- time
- ),
- appearance: appearance,
- asynchronous: false,
- shadows: shadows,
- classificationType: this._geometryUpdater.classificationTypeProperty.getValue(
- time
- ),
- }),
- Property.getValueOrUndefined(this._geometryUpdater.zIndex, time)
- );
- } else {
- options.vertexFormat = appearance.vertexFormat;
- var fillInstance = this._geometryUpdater.createFillGeometryInstance(time);
- if (isColorAppearance) {
- appearance.translucent = fillInstance.attributes.color.value[3] !== 255;
- }
- this._primitive = primitives.add(
- new Primitive({
- geometryInstances: fillInstance,
- appearance: appearance,
- asynchronous: false,
- shadows: shadows,
- })
- );
- }
- }
- if (
- !onTerrain &&
- defined(geometry.outline) &&
- geometry.outline.getValue(time)
- ) {
- var outlineInstance = this._geometryUpdater.createOutlineGeometryInstance(
- time
- );
- var outlineWidth = Property.getValueOrDefault(
- geometry.outlineWidth,
- time,
- 1.0
- );
- this._outlinePrimitive = primitives.add(
- new Primitive({
- geometryInstances: outlineInstance,
- appearance: new PerInstanceColorAppearance({
- flat: true,
- translucent: outlineInstance.attributes.color.value[3] !== 255,
- renderState: {
- lineWidth: geometryUpdater._scene.clampLineWidth(outlineWidth),
- },
- }),
- asynchronous: false,
- shadows: shadows,
- })
- );
- }
- };
- DynamicGeometryUpdater.prototype.getBoundingSphere = function (result) {
-
- if (!defined(result)) {
- throw new DeveloperError("result is required.");
- }
-
- var entity = this._entity;
- var primitive = this._primitive;
- var outlinePrimitive = this._outlinePrimitive;
- var attributes;
-
- if (defined(primitive) && primitive.show && primitive.ready) {
- attributes = primitive.getGeometryInstanceAttributes(entity);
- if (defined(attributes) && defined(attributes.boundingSphere)) {
- BoundingSphere.clone(attributes.boundingSphere, result);
- return BoundingSphereState.DONE;
- }
- }
- if (
- defined(outlinePrimitive) &&
- outlinePrimitive.show &&
- outlinePrimitive.ready
- ) {
- attributes = outlinePrimitive.getGeometryInstanceAttributes(entity);
- if (defined(attributes) && defined(attributes.boundingSphere)) {
- BoundingSphere.clone(attributes.boundingSphere, result);
- return BoundingSphereState.DONE;
- }
- }
- if (
- (defined(primitive) && !primitive.ready) ||
- (defined(outlinePrimitive) && !outlinePrimitive.ready)
- ) {
- return BoundingSphereState.PENDING;
- }
- return BoundingSphereState.FAILED;
- };
- DynamicGeometryUpdater.prototype.isDestroyed = function () {
- return false;
- };
- DynamicGeometryUpdater.prototype.destroy = function () {
- var primitives = this._primitives;
- var orderedGroundPrimitives = this._orderedGroundPrimitives;
- if (this._geometryUpdater._onTerrain) {
- orderedGroundPrimitives.remove(this._primitive);
- } else {
- primitives.removeAndDestroy(this._primitive);
- }
- primitives.removeAndDestroy(this._outlinePrimitive);
- destroyObject(this);
- };
- export default DynamicGeometryUpdater;
|