diff --git a/Apps/Sandcastle/gallery/DataSource Ordering.html b/Apps/Sandcastle/gallery/DataSource Ordering.html
new file mode 100644
index 000000000000..d659892a4635
--- /dev/null
+++ b/Apps/Sandcastle/gallery/DataSource Ordering.html
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+ Cesium Demo
+
+
+
+
+
+
+
+Loading...
+
+
+
+
diff --git a/Apps/Sandcastle/gallery/DataSource Ordering.jpg b/Apps/Sandcastle/gallery/DataSource Ordering.jpg
new file mode 100644
index 000000000000..4e6e791db414
Binary files /dev/null and b/Apps/Sandcastle/gallery/DataSource Ordering.jpg differ
diff --git a/CHANGES.md b/CHANGES.md
index 4dca69d8ef9c..dd0b0036e1cc 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -3,6 +3,9 @@ Change Log
### 1.44 - 2018-04-02
+##### Breaking Changes :mega:
+* `GeometryVisualizer` now requires `primitive` and `groundPrimitive` parameters. [#6316](https://github.com/AnalyticalGraphicsInc/cesium/pull/6316)
+
##### Deprecated :hourglass_flowing_sand:
* `ClippingPlaneCollection` is now supported in Internet Explorer, so `ClippingPlaneCollection.isSupported` has been deprecated and will be removed in Cesium 1.45.
* `ClippingPlaneCollection` should now be used with `ClippingPlane` objects instead of `Plane`. Use of `Plane` objects has been deprecated and will be removed in Cesium 1.45.
@@ -20,6 +23,9 @@ Change Log
* sourceType specifies the type of data source if the URL doesn't have a known file extension.
* flyTo=false optionally disables the automatic flyTo after loading the data source.
* Added a multi-part CZML example to Sandcastle. [#6320](https://github.com/AnalyticalGraphicsInc/cesium/pull/6320)
+* Added support for ordering in `DataSourceCollection` [#6316](https://github.com/AnalyticalGraphicsInc/cesium/pull/6316)
+ * All ground geometry from one `DataSource` will render in front of all ground geometry from another `DataSource` in the same collection with a lower index.
+ * Use `DataSourceCollection.raise`, `DataSourceCollection.lower`, `DataSourceCollection.raiseToTop` and `DataSourceCollection.lowerToBottom` functions to change the ordering of a `DataSource` in the collection.
##### Fixes :wrench:
* Fixed support of glTF-supplied tangent vectors. [#6302](https://github.com/AnalyticalGraphicsInc/cesium/pull/6302)
diff --git a/Source/DataSources/DataSourceCollection.js b/Source/DataSources/DataSourceCollection.js
index 3dc03d305cc7..6edc92de4d27 100644
--- a/Source/DataSources/DataSourceCollection.js
+++ b/Source/DataSources/DataSourceCollection.js
@@ -5,6 +5,7 @@ define([
'../Core/destroyObject',
'../Core/DeveloperError',
'../Core/Event',
+ '../Core/Math',
'../ThirdParty/when'
], function(
defaultValue,
@@ -13,6 +14,7 @@ define([
destroyObject,
DeveloperError,
Event,
+ CesiumMath,
when) {
'use strict';
@@ -25,6 +27,7 @@ define([
this._dataSources = [];
this._dataSourceAdded = new Event();
this._dataSourceRemoved = new Event();
+ this._dataSourceMoved = new Event();
}
defineProperties(DataSourceCollection.prototype, {
@@ -64,6 +67,19 @@ define([
get : function() {
return this._dataSourceRemoved;
}
+ },
+
+ /**
+ * An event that is raised when a data source changes position in the collection. Event handlers are passed the data source
+ * that was moved, its new index after the move, and its old index prior to the move.
+ * @memberof DataSourceCollection.prototype
+ * @type {Event}
+ * @readonly
+ */
+ dataSourceMoved : {
+ get : function() {
+ return this._dataSourceMoved;
+ }
}
});
@@ -177,6 +193,105 @@ define([
return this._dataSources[index];
};
+ function getIndex(dataSources, dataSource) {
+ //>>includeStart('debug', pragmas.debug);
+ if (!defined(dataSource)) {
+ throw new DeveloperError('dataSource is required.');
+ }
+ //>>includeEnd('debug');
+
+ var index = dataSources.indexOf(dataSource);
+
+ //>>includeStart('debug', pragmas.debug);
+ if (index === -1) {
+ throw new DeveloperError('dataSource is not in this collection.');
+ }
+ //>>includeEnd('debug');
+
+ return index;
+ }
+
+ function swapDataSources(collection, i, j) {
+ var arr = collection._dataSources;
+ var length = arr.length - 1;
+ i = CesiumMath.clamp(i, 0, length);
+ j = CesiumMath.clamp(j, 0, length);
+
+ if (i === j) {
+ return;
+ }
+
+ var temp = arr[i];
+ arr[i] = arr[j];
+ arr[j] = temp;
+
+ collection.dataSourceMoved.raiseEvent(temp, j, i);
+ }
+
+ /**
+ * Raises a data source up one position in the collection.
+ *
+ * @param {DataSource} dataSource The data source to move.
+ *
+ * @exception {DeveloperError} dataSource is not in this collection.
+ * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
+ */
+ DataSourceCollection.prototype.raise = function(dataSource) {
+ var index = getIndex(this._dataSources, dataSource);
+ swapDataSources(this, index, index + 1);
+ };
+
+ /**
+ * Lowers a data source down one position in the collection.
+ *
+ * @param {DataSource} dataSource The data source to move.
+ *
+ * @exception {DeveloperError} dataSource is not in this collection.
+ * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
+ */
+ DataSourceCollection.prototype.lower = function(dataSource) {
+ var index = getIndex(this._dataSources, dataSource);
+ swapDataSources(this, index, index - 1);
+ };
+
+ /**
+ * Raises a data source to the top of the collection.
+ *
+ * @param {DataSource} dataSource The data source to move.
+ *
+ * @exception {DeveloperError} dataSource is not in this collection.
+ * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
+ */
+ DataSourceCollection.prototype.raiseToTop = function(dataSource) {
+ var index = getIndex(this._dataSources, dataSource);
+ if (index === this._dataSources.length - 1) {
+ return;
+ }
+ this._dataSources.splice(index, 1);
+ this._dataSources.push(dataSource);
+
+ this.dataSourceMoved.raiseEvent(dataSource, this._dataSources.length - 1, index);
+ };
+
+ /**
+ * Lowers a data source to the bottom of the collection.
+ *
+ * @param {DataSource} dataSource The data source to move.
+ *
+ * @exception {DeveloperError} dataSource is not in this collection.
+ * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
+ */
+ DataSourceCollection.prototype.lowerToBottom = function(dataSource) {
+ var index = getIndex(this._dataSources, dataSource);
+ if (index === 0) {
+ return;
+ }
+ this._dataSources.splice(index, 1);
+ this._dataSources.splice(0, 0, dataSource);
+
+ this.dataSourceMoved.raiseEvent(dataSource, 0, index);
+ };
+
/**
* Returns true if this object was destroyed; otherwise, false.
* If this object was destroyed, it should not be used; calling any function other than
diff --git a/Source/DataSources/DataSourceDisplay.js b/Source/DataSources/DataSourceDisplay.js
index 9fc1c0d125bd..ba4d35735f06 100644
--- a/Source/DataSources/DataSourceDisplay.js
+++ b/Source/DataSources/DataSourceDisplay.js
@@ -8,6 +8,7 @@ define([
'../Core/DeveloperError',
'../Core/EventHelper',
'../Scene/GroundPrimitive',
+ '../Scene/PrimitiveCollection',
'./BillboardVisualizer',
'./BoundingSphereState',
'./CustomDataSource',
@@ -27,6 +28,7 @@ define([
DeveloperError,
EventHelper,
GroundPrimitive,
+ PrimitiveCollection,
BillboardVisualizer,
BoundingSphereState,
CustomDataSource,
@@ -65,11 +67,25 @@ define([
this._eventHelper = new EventHelper();
this._eventHelper.add(dataSourceCollection.dataSourceAdded, this._onDataSourceAdded, this);
this._eventHelper.add(dataSourceCollection.dataSourceRemoved, this._onDataSourceRemoved, this);
+ this._eventHelper.add(dataSourceCollection.dataSourceMoved, this._onDataSourceMoved, this);
this._dataSourceCollection = dataSourceCollection;
this._scene = scene;
this._visualizersCallback = defaultValue(options.visualizersCallback, DataSourceDisplay.defaultVisualizersCallback);
+ var primitivesAdded = false;
+ var primitives = new PrimitiveCollection();
+ var groundPrimitives = new PrimitiveCollection();
+
+ if (dataSourceCollection.length > 0) {
+ scene.primitives.add(primitives);
+ scene.groundPrimitives.add(groundPrimitives);
+ primitivesAdded = true;
+ }
+
+ this._primitives = primitives;
+ this._groundPrimitives = groundPrimitives;
+
for (var i = 0, len = dataSourceCollection.length; i < len; i++) {
this._onDataSourceAdded(dataSourceCollection, dataSourceCollection.get(i));
}
@@ -78,6 +94,25 @@ define([
this._onDataSourceAdded(undefined, defaultDataSource);
this._defaultDataSource = defaultDataSource;
+ var removeDefaultDataSoureListener;
+ var removeDataSourceCollectionListener;
+ if (!primitivesAdded) {
+ var that = this;
+ var addPrimitives = function() {
+ scene.primitives.add(primitives);
+ scene.groundPrimitives.add(groundPrimitives);
+ removeDefaultDataSoureListener();
+ removeDataSourceCollectionListener();
+ that._removeDefaultDataSoureListener = undefined;
+ that._removeDataSourceCollectionListener = undefined;
+ };
+ removeDefaultDataSoureListener = defaultDataSource.entities.collectionChanged.addEventListener(addPrimitives);
+ removeDataSourceCollectionListener = dataSourceCollection.dataSourceAdded.addEventListener(addPrimitives);
+ }
+
+ this._removeDefaultDataSoureListener = removeDefaultDataSoureListener;
+ this._removeDataSourceCollectionListener = removeDataSourceCollectionListener;
+
this._ready = false;
}
@@ -90,7 +125,7 @@ define([
DataSourceDisplay.defaultVisualizersCallback = function(scene, entityCluster, dataSource) {
var entities = dataSource.entities;
return [new BillboardVisualizer(entityCluster, entities),
- new GeometryVisualizer(scene, entities),
+ new GeometryVisualizer(scene, entities, dataSource._primitives, dataSource._groundPrimitives),
new LabelVisualizer(entityCluster, entities),
new ModelVisualizer(scene, entities),
new PointVisualizer(entityCluster, entities),
@@ -185,6 +220,14 @@ define([
}
this._onDataSourceRemoved(undefined, this._defaultDataSource);
+ if (defined(this._removeDefaultDataSoureListener)) {
+ this._removeDefaultDataSoureListener();
+ this._removeDataSourceCollectionListener();
+ } else {
+ this._scene.primitives.remove(this._primitives);
+ this._scene.groundPrimitives.remove(this._groundPrimitives);
+ }
+
return destroyObject(this);
};
@@ -317,18 +360,32 @@ define([
DataSourceDisplay.prototype._onDataSourceAdded = function(dataSourceCollection, dataSource) {
var scene = this._scene;
+ var displayPrimitives = this._primitives;
+ var displayGroundPrimitives = this._groundPrimitives;
+
+ var primitives = displayPrimitives.add(new PrimitiveCollection());
+ var groundPrimitives = displayGroundPrimitives.add(new PrimitiveCollection());
+
+ dataSource._primitives = primitives;
+ dataSource._groundPrimitives = groundPrimitives;
+
var entityCluster = dataSource.clustering;
entityCluster._initialize(scene);
- scene.primitives.add(entityCluster);
+ primitives.add(entityCluster);
dataSource._visualizers = this._visualizersCallback(scene, entityCluster, dataSource);
};
DataSourceDisplay.prototype._onDataSourceRemoved = function(dataSourceCollection, dataSource) {
- var scene = this._scene;
+ var displayPrimitives = this._primitives;
+ var displayGroundPrimitives = this._groundPrimitives;
+
+ var primitives = dataSource._primitives;
+ var groundPrimitives = dataSource._groundPrimitives;
+
var entityCluster = dataSource.clustering;
- scene.primitives.remove(entityCluster);
+ primitives.remove(entityCluster);
var visualizers = dataSource._visualizers;
var length = visualizers.length;
@@ -336,9 +393,36 @@ define([
visualizers[i].destroy();
}
+ displayPrimitives.remove(primitives);
+ displayGroundPrimitives.remove(groundPrimitives);
+
dataSource._visualizers = undefined;
};
+ DataSourceDisplay.prototype._onDataSourceMoved = function(dataSource, newIndex, oldIndex) {
+ var displayPrimitives = this._primitives;
+ var displayGroundPrimitives = this._groundPrimitives;
+
+ var primitives = dataSource._primitives;
+ var groundPrimitives = dataSource._groundPrimitives;
+
+ if (newIndex === oldIndex + 1) {
+ displayPrimitives.raise(primitives);
+ displayGroundPrimitives.raise(groundPrimitives);
+ } else if (newIndex === oldIndex - 1) {
+ displayPrimitives.lower(primitives);
+ displayGroundPrimitives.lower(groundPrimitives);
+ } else if (newIndex === 0) {
+ displayPrimitives.lowerToBottom(primitives);
+ displayGroundPrimitives.lowerToBottom(groundPrimitives);
+ displayPrimitives.raise(primitives); // keep defaultDataSource primitives at index 0 since it's not in the collection
+ displayGroundPrimitives.raise(groundPrimitives);
+ } else {
+ displayPrimitives.raiseToTop(primitives);
+ displayGroundPrimitives.raiseToTop(groundPrimitives);
+ }
+ };
+
/**
* A function which creates an array of visualizers used for visualization.
* @callback DataSourceDisplay~VisualizersCallback
diff --git a/Source/DataSources/GeometryVisualizer.js b/Source/DataSources/GeometryVisualizer.js
index 706d46ce814f..72ed71a89100 100644
--- a/Source/DataSources/GeometryVisualizer.js
+++ b/Source/DataSources/GeometryVisualizer.js
@@ -2,6 +2,7 @@ define([
'../Core/AssociativeArray',
'../Core/BoundingSphere',
'../Core/Check',
+ '../Core/defaultValue',
'../Core/defined',
'../Core/destroyObject',
'../Core/DeveloperError',
@@ -32,6 +33,7 @@ define([
AssociativeArray,
BoundingSphere,
Check,
+ defaultValue,
defined,
destroyObject,
DeveloperError,
@@ -117,15 +119,18 @@ define([
*
* @param {Scene} scene The scene the primitives will be rendered in.
* @param {EntityCollection} entityCollection The entityCollection to visualize.
+ * @param {PrimitiveCollection} [primitives=scene.primitives] A collection to add primitives related to the entities
+ * @param {PrimitiveCollection} [groundPrimitives=scene.groundPrimitives] A collection to add ground primitives related to the entities
*/
- function GeometryVisualizer(scene, entityCollection) {
+ function GeometryVisualizer(scene, entityCollection, primitives, groundPrimitives) {
//>>includeStart('debug', pragmas.debug);
Check.defined('scene', scene);
Check.defined('entityCollection', entityCollection);
//>>includeEnd('debug');
- var primitives = scene.primitives;
- var groundPrimitives = scene.groundPrimitives;
+ primitives = defaultValue(primitives, scene.primitives);
+ groundPrimitives = defaultValue(groundPrimitives, scene.groundPrimitives);
+
this._scene = scene;
this._primitives = primitives;
this._groundPrimitives = groundPrimitives;
diff --git a/Specs/DataSources/DataSourceCollectionSpec.js b/Specs/DataSources/DataSourceCollectionSpec.js
index 874aed160f69..43a30aecd973 100644
--- a/Specs/DataSources/DataSourceCollectionSpec.js
+++ b/Specs/DataSources/DataSourceCollectionSpec.js
@@ -53,6 +53,37 @@ defineSuite([
expect(removeSpy).toHaveBeenCalledWith(collection, source);
});
+ it('move event works', function() {
+ var source = new MockDataSource();
+ var collection = new DataSourceCollection();
+ collection.add(source);
+
+ var moveSpy = jasmine.createSpy('dataSourceMoved');
+ collection.dataSourceMoved.addEventListener(moveSpy);
+
+ collection.raise(source);
+ collection.lower(source);
+ collection.raiseToTop(source);
+ collection.lowerToBottom(source);
+
+ expect(moveSpy).not.toHaveBeenCalled();
+
+ collection.add(new MockDataSource());
+ collection.add(new MockDataSource());
+
+ collection.raise(source);
+ expect(moveSpy).toHaveBeenCalledWith(source, 1, 0);
+
+ collection.lower(source);
+ expect(moveSpy).toHaveBeenCalledWith(source, 0, 1);
+
+ collection.raiseToTop(source);
+ expect(moveSpy).toHaveBeenCalledWith(source, 2, 0);
+
+ collection.lowerToBottom(source);
+ expect(moveSpy).toHaveBeenCalledWith(source, 0, 2);
+ });
+
it('add works with promise', function() {
var promise = when.defer();
var source = new MockDataSource();
diff --git a/Specs/DataSources/DataSourceDisplaySpec.js b/Specs/DataSources/DataSourceDisplaySpec.js
index 6c243b072063..ed0199b589ac 100644
--- a/Specs/DataSources/DataSourceDisplaySpec.js
+++ b/Specs/DataSources/DataSourceDisplaySpec.js
@@ -45,6 +45,7 @@ defineSuite([
if (!display.isDestroyed()) {
display.destroy();
}
+ dataSourceCollection.removeAll();
});
function MockVisualizer() {
@@ -377,4 +378,172 @@ defineSuite([
expect(display.ready).toBe(true);
});
});
+
+ it('sets dataSource primitives on add', function() {
+ var source = new MockDataSource();
+
+ display = new DataSourceDisplay({
+ scene : scene,
+ dataSourceCollection : dataSourceCollection,
+ visualizersCallback : visualizersCallback
+ });
+
+ dataSourceCollection.add(source);
+
+ expect(source._primitives).toBeDefined();
+ expect(source._groundPrimitives).toBeDefined();
+
+ expect(display._primitives.contains(source._primitives)).toBe(true);
+ expect(display._groundPrimitives.contains(source._groundPrimitives)).toBe(true);
+ });
+
+ it('cleans up primitives on dataSource removed', function() {
+ var source = new MockDataSource();
+
+ display = new DataSourceDisplay({
+ scene : scene,
+ dataSourceCollection : dataSourceCollection,
+ visualizersCallback : visualizersCallback
+ });
+
+ dataSourceCollection.add(source);
+
+ expect(display._primitives.contains(source._primitives)).toBe(true);
+ expect(display._groundPrimitives.contains(source._groundPrimitives)).toBe(true);
+
+ dataSourceCollection.remove(source);
+
+ expect(display._primitives.length).toBe(1);
+ expect(display._groundPrimitives.length).toBe(1);
+ });
+
+ it('raises primitives on dataSource raise', function() {
+ var source1 = new MockDataSource();
+ var source2 = new MockDataSource();
+ var source3 = new MockDataSource();
+
+ display = new DataSourceDisplay({
+ scene : scene,
+ dataSourceCollection : dataSourceCollection,
+ visualizersCallback : visualizersCallback
+ });
+
+ dataSourceCollection.add(source1);
+ dataSourceCollection.add(source2);
+ dataSourceCollection.add(source3);
+
+ dataSourceCollection.raise(source1);
+
+ expect(display._primitives.get(1)).toBe(source2._primitives);
+ expect(display._primitives.get(2)).toBe(source1._primitives);
+ expect(display._primitives.get(3)).toBe(source3._primitives);
+ });
+
+ it('lowers primitives on dataSource lower', function() {
+ var source1 = new MockDataSource();
+ var source2 = new MockDataSource();
+ var source3 = new MockDataSource();
+
+ display = new DataSourceDisplay({
+ scene : scene,
+ dataSourceCollection : dataSourceCollection,
+ visualizersCallback : visualizersCallback
+ });
+
+ dataSourceCollection.add(source1);
+ dataSourceCollection.add(source2);
+ dataSourceCollection.add(source3);
+
+ dataSourceCollection.lower(source3);
+
+ expect(display._primitives.get(1)).toBe(source1._primitives);
+ expect(display._primitives.get(2)).toBe(source3._primitives);
+ expect(display._primitives.get(3)).toBe(source2._primitives);
+ });
+
+ it('raises primitives to top on dataSource raiseToTop', function() {
+ var source1 = new MockDataSource();
+ var source2 = new MockDataSource();
+ var source3 = new MockDataSource();
+
+ display = new DataSourceDisplay({
+ scene : scene,
+ dataSourceCollection : dataSourceCollection,
+ visualizersCallback : visualizersCallback
+ });
+
+ dataSourceCollection.add(source1);
+ dataSourceCollection.add(source2);
+ dataSourceCollection.add(source3);
+
+ dataSourceCollection.raiseToTop(source1);
+
+ expect(display._primitives.get(1)).toBe(source2._primitives);
+ expect(display._primitives.get(2)).toBe(source3._primitives);
+ expect(display._primitives.get(3)).toBe(source1._primitives);
+ });
+
+ it('lowers primitives to bottom on dataSource lowerToBottom', function() {
+ var source1 = new MockDataSource();
+ var source2 = new MockDataSource();
+ var source3 = new MockDataSource();
+
+ display = new DataSourceDisplay({
+ scene : scene,
+ dataSourceCollection : dataSourceCollection,
+ visualizersCallback : visualizersCallback
+ });
+
+ dataSourceCollection.add(source1);
+ dataSourceCollection.add(source2);
+ dataSourceCollection.add(source3);
+
+ dataSourceCollection.lowerToBottom(source3);
+
+ expect(display._primitives.get(1)).toBe(source3._primitives);
+ expect(display._primitives.get(2)).toBe(source1._primitives);
+ expect(display._primitives.get(3)).toBe(source2._primitives);
+ });
+
+ it('adds primitives to scene when dataSource is added to the collection', function() {
+ display = new DataSourceDisplay({
+ scene : scene,
+ dataSourceCollection : dataSourceCollection,
+ visualizersCallback : visualizersCallback
+ });
+ expect(scene.primitives.contains(display._primitives)).toBe(false);
+ expect(scene.groundPrimitives.contains(display._groundPrimitives)).toBe(false);
+
+ dataSourceCollection.add(new MockDataSource());
+
+ expect(scene.primitives.contains(display._primitives)).toBe(true);
+ expect(scene.groundPrimitives.contains(display._groundPrimitives)).toBe(true);
+ });
+
+ it('adds primitives to scene if dataSourceCollection is not empty', function() {
+ dataSourceCollection.add(new MockDataSource());
+ display = new DataSourceDisplay({
+ scene : scene,
+ dataSourceCollection : dataSourceCollection,
+ visualizersCallback : visualizersCallback
+ });
+
+ expect(scene.primitives.contains(display._primitives)).toBe(true);
+ expect(scene.groundPrimitives.contains(display._groundPrimitives)).toBe(true);
+ });
+
+ it('adds primitives to the scene when entities are added to the default dataSource', function() {
+ display = new DataSourceDisplay({
+ scene : scene,
+ dataSourceCollection : dataSourceCollection,
+ visualizersCallback : visualizersCallback
+ });
+ expect(scene.primitives.contains(display._primitives)).toBe(false);
+ expect(scene.groundPrimitives.contains(display._groundPrimitives)).toBe(false);
+
+ display.defaultDataSource.entities.add(new Entity());
+
+ expect(scene.primitives.contains(display._primitives)).toBe(true);
+ expect(scene.groundPrimitives.contains(display._groundPrimitives)).toBe(true);
+ });
}, 'WebGL');
diff --git a/Specs/DataSources/GeometryVisualizerSpec.js b/Specs/DataSources/GeometryVisualizerSpec.js
index 6ed873b66239..689ea3df8aa8 100644
--- a/Specs/DataSources/GeometryVisualizerSpec.js
+++ b/Specs/DataSources/GeometryVisualizerSpec.js
@@ -82,7 +82,7 @@ defineSuite([
it('Can create and destroy', function() {
var objects = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, objects);
+ var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
expect(visualizer.update(time)).toBe(true);
expect(scene.primitives.length).toBe(0);
expect(visualizer.isDestroyed()).toBe(false);
@@ -92,7 +92,7 @@ defineSuite([
it('Creates and removes static color open geometry', function() {
var objects = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, objects);
+ var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
var ellipse = new EllipseGraphics();
ellipse.semiMajorAxis = new ConstantProperty(2);
@@ -134,7 +134,7 @@ defineSuite([
it('Creates and removes static material open geometry', function() {
var objects = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, objects);
+ var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
var ellipse = new EllipseGraphics();
ellipse.semiMajorAxis = new ConstantProperty(2);
@@ -175,7 +175,7 @@ defineSuite([
it('Creates and removes static color closed geometry', function() {
var objects = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, objects);
+ var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
var ellipse = new EllipseGraphics();
ellipse.semiMajorAxis = new ConstantProperty(2);
@@ -217,7 +217,7 @@ defineSuite([
it('Creates and removes static material closed geometry', function() {
var objects = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, objects);
+ var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
var ellipse = new EllipseGraphics();
ellipse.semiMajorAxis = new ConstantProperty(2);
@@ -259,7 +259,7 @@ defineSuite([
it('Creates and removes static outline geometry', function() {
var objects = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, objects);
+ var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
var ellipse = new EllipseGraphics();
ellipse.semiMajorAxis = new ConstantProperty(2);
@@ -301,7 +301,7 @@ defineSuite([
function createAndRemoveGeometryWithShadows(shadows) {
var objects = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, objects);
+ var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
var ellipse = new EllipseGraphics();
ellipse.semiMajorAxis = new ConstantProperty(2);
@@ -355,7 +355,7 @@ defineSuite([
function createAndRemoveGeometryWithClassificationType(type) {
var objects = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, objects);
+ var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
var ellipse = new EllipseGraphics();
ellipse.semiMajorAxis = new ConstantProperty(2);
@@ -404,7 +404,7 @@ defineSuite([
it('Correctly handles geometry changing batches', function() {
var objects = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, objects);
+ var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
var ellipse = new EllipseGraphics();
ellipse.semiMajorAxis = new ConstantProperty(2);
@@ -459,7 +459,7 @@ defineSuite([
it('Correctly handles modifying translucent outline color', function() {
var entities = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, entities);
+ var visualizer = new GeometryVisualizer(scene, entities, scene.primitives, scene.groundPrimitives);
var color = Color.BLUE.withAlpha(0.5);
var entity = entities.add({
@@ -506,7 +506,7 @@ defineSuite([
it('Creates and removes dynamic geometry', function() {
var objects = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, objects);
+ var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
var ellipse = new EllipseGraphics();
ellipse.semiMajorAxis = new SampledProperty(Number);
@@ -533,7 +533,7 @@ defineSuite([
it('Creates and removes dynamic geometry on terrain ', function() {
var objects = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, objects);
+ var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
var ellipse = new EllipseGraphics();
ellipse.semiMajorAxis = new SampledProperty(Number);
@@ -557,22 +557,21 @@ defineSuite([
visualizer.destroy();
});
- it('Constructor throws without type', function() {
+ it('Constructor throws without scene', function() {
var objects = new EntityCollection();
expect(function() {
- return new GeometryVisualizer(undefined, scene, objects);
+ return new GeometryVisualizer(undefined, objects, scene.primitives, scene.groundPrimitives);
}).toThrowDeveloperError();
});
- it('Constructor throws without scene', function() {
- var objects = new EntityCollection();
+ it('Constructor throws without entityCollection', function() {
expect(function() {
- return new GeometryVisualizer(undefined, objects);
+ return new GeometryVisualizer(scene, undefined, scene.primitives, scene.groundPrimitives);
}).toThrowDeveloperError();
});
it('Update throws without time parameter', function() {
- var visualizer = new GeometryVisualizer(scene, new EntityCollection());
+ var visualizer = new GeometryVisualizer(scene, new EntityCollection(), scene.primitives, scene.groundPrimitives);
expect(function() {
visualizer.update(undefined);
}).toThrowDeveloperError();
@@ -580,7 +579,7 @@ defineSuite([
it('removes the listener from the entity collection when destroyed', function() {
var entityCollection = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, entityCollection);
+ var visualizer = new GeometryVisualizer(scene, entityCollection, scene.primitives, scene.groundPrimitives);
expect(entityCollection.collectionChanged.numberOfListeners).toEqual(1);
visualizer.destroy();
expect(entityCollection.collectionChanged.numberOfListeners).toEqual(0);
@@ -588,7 +587,7 @@ defineSuite([
it('Computes dynamic geometry bounding sphere.', function() {
var entityCollection = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, entityCollection);
+ var visualizer = new GeometryVisualizer(scene, entityCollection, scene.primitives, scene.groundPrimitives);
var ellipse = new EllipseGraphics();
ellipse.semiMajorAxis = new ConstantProperty(2);
@@ -621,7 +620,7 @@ defineSuite([
it('Compute dynamic geometry bounding sphere throws without entity.', function() {
var entityCollection = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, entityCollection);
+ var visualizer = new GeometryVisualizer(scene, entityCollection, scene.primitives, scene.groundPrimitives);
var result = new BoundingSphere();
expect(function() {
@@ -635,7 +634,7 @@ defineSuite([
var entityCollection = new EntityCollection();
var entity = new Entity();
entityCollection.add(entity);
- var visualizer = new GeometryVisualizer(scene, entityCollection);
+ var visualizer = new GeometryVisualizer(scene, entityCollection, scene.primitives, scene.groundPrimitives);
expect(function() {
visualizer.getBoundingSphere(entity, undefined);
@@ -646,7 +645,7 @@ defineSuite([
it('Can remove and entity and then add a new new instance with the same id.', function() {
var objects = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, objects);
+ var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
var entity = new Entity({
id : 'test',
@@ -710,7 +709,7 @@ defineSuite([
it('Sets static geometry primitive show attribute when using dynamic fill color', function() {
var entities = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, entities);
+ var visualizer = new GeometryVisualizer(scene, entities, scene.primitives, scene.groundPrimitives);
var entity = entities.add({
position : new Cartesian3(1234, 5678, 9101112),
@@ -754,7 +753,7 @@ defineSuite([
it('Sets static geometry primitive show attribute when using dynamic outline color', function() {
var entities = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, entities);
+ var visualizer = new GeometryVisualizer(scene, entities, scene.primitives, scene.groundPrimitives);
var entity = entities.add({
position : new Cartesian3(1234, 5678, 9101112),
@@ -799,7 +798,7 @@ defineSuite([
it('Sets static geometry primitive show attribute when using dynamic fill material', function() {
var entities = new EntityCollection();
- var visualizer = new GeometryVisualizer(scene, entities);
+ var visualizer = new GeometryVisualizer(scene, entities, scene.primitives, scene.groundPrimitives);
var entity = entities.add({
position : new Cartesian3(1234, 5678, 9101112),