1080 lines
41 KiB
JavaScript
1080 lines
41 KiB
JavaScript
|
|
defineSuite([
|
||
|
|
'DataSources/GeometryVisualizer',
|
||
|
|
'Core/ApproximateTerrainHeights',
|
||
|
|
'Core/BoundingSphere',
|
||
|
|
'Core/Cartesian3',
|
||
|
|
'Core/Color',
|
||
|
|
'Core/ColorGeometryInstanceAttribute',
|
||
|
|
'Core/JulianDate',
|
||
|
|
'Core/ShowGeometryInstanceAttribute',
|
||
|
|
'DataSources/BoundingSphereState',
|
||
|
|
'DataSources/CallbackProperty',
|
||
|
|
'DataSources/ColorMaterialProperty',
|
||
|
|
'DataSources/ConstantPositionProperty',
|
||
|
|
'DataSources/ConstantProperty',
|
||
|
|
'DataSources/EllipseGeometryUpdater',
|
||
|
|
'DataSources/EllipseGraphics',
|
||
|
|
'DataSources/Entity',
|
||
|
|
'DataSources/EntityCollection',
|
||
|
|
'DataSources/GridMaterialProperty',
|
||
|
|
'DataSources/SampledProperty',
|
||
|
|
'DataSources/StaticGeometryColorBatch',
|
||
|
|
'DataSources/StaticGeometryPerMaterialBatch',
|
||
|
|
'DataSources/StaticOutlineGeometryBatch',
|
||
|
|
'Scene/ClassificationType',
|
||
|
|
'Scene/GroundPrimitive',
|
||
|
|
'Scene/MaterialAppearance',
|
||
|
|
'Scene/PerInstanceColorAppearance',
|
||
|
|
'Scene/ShadowMode',
|
||
|
|
'Specs/createDynamicProperty',
|
||
|
|
'Specs/createScene',
|
||
|
|
'Specs/pollToPromise'
|
||
|
|
], function(
|
||
|
|
GeometryVisualizer,
|
||
|
|
ApproximateTerrainHeights,
|
||
|
|
BoundingSphere,
|
||
|
|
Cartesian3,
|
||
|
|
Color,
|
||
|
|
ColorGeometryInstanceAttribute,
|
||
|
|
JulianDate,
|
||
|
|
ShowGeometryInstanceAttribute,
|
||
|
|
BoundingSphereState,
|
||
|
|
CallbackProperty,
|
||
|
|
ColorMaterialProperty,
|
||
|
|
ConstantPositionProperty,
|
||
|
|
ConstantProperty,
|
||
|
|
EllipseGeometryUpdater,
|
||
|
|
EllipseGraphics,
|
||
|
|
Entity,
|
||
|
|
EntityCollection,
|
||
|
|
GridMaterialProperty,
|
||
|
|
SampledProperty,
|
||
|
|
StaticGeometryColorBatch,
|
||
|
|
StaticGeometryPerMaterialBatch,
|
||
|
|
StaticOutlineGeometryBatch,
|
||
|
|
ClassificationType,
|
||
|
|
GroundPrimitive,
|
||
|
|
MaterialAppearance,
|
||
|
|
PerInstanceColorAppearance,
|
||
|
|
ShadowMode,
|
||
|
|
createDynamicProperty,
|
||
|
|
createScene,
|
||
|
|
pollToPromise) {
|
||
|
|
'use strict';
|
||
|
|
|
||
|
|
var time = JulianDate.now();
|
||
|
|
|
||
|
|
var scene;
|
||
|
|
beforeAll(function() {
|
||
|
|
scene = createScene();
|
||
|
|
|
||
|
|
return GroundPrimitive.initializeTerrainHeights();
|
||
|
|
});
|
||
|
|
|
||
|
|
afterAll(function() {
|
||
|
|
scene.destroyForSpecs();
|
||
|
|
|
||
|
|
// Leave ground primitive uninitialized
|
||
|
|
GroundPrimitive._initialized = false;
|
||
|
|
GroundPrimitive._initPromise = undefined;
|
||
|
|
ApproximateTerrainHeights._initPromise = undefined;
|
||
|
|
ApproximateTerrainHeights._terrainHeights = undefined;
|
||
|
|
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Can create and destroy', function() {
|
||
|
|
var objects = new EntityCollection();
|
||
|
|
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);
|
||
|
|
visualizer.destroy();
|
||
|
|
expect(visualizer.isDestroyed()).toBe(true);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Creates and removes static color open geometry', function() {
|
||
|
|
var objects = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var ellipse = new EllipseGraphics();
|
||
|
|
ellipse.semiMajorAxis = new ConstantProperty(2);
|
||
|
|
ellipse.semiMinorAxis = new ConstantProperty(1);
|
||
|
|
ellipse.material = new ColorMaterialProperty();
|
||
|
|
ellipse.height = new ConstantProperty(0);
|
||
|
|
|
||
|
|
var entity = new Entity();
|
||
|
|
entity.position = new ConstantPositionProperty(new Cartesian3(1234, 5678, 9101112));
|
||
|
|
entity.ellipse = ellipse;
|
||
|
|
objects.add(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(true));
|
||
|
|
expect(attributes.color).toEqual(ColorGeometryInstanceAttribute.toValue(Color.WHITE));
|
||
|
|
expect(primitive.appearance).toBeInstanceOf(PerInstanceColorAppearance);
|
||
|
|
expect(primitive.appearance.closed).toBe(true);
|
||
|
|
|
||
|
|
objects.remove(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
expect(visualizer.update(time)).toBe(true);
|
||
|
|
scene.render(time);
|
||
|
|
return scene.primitives.length === 0;
|
||
|
|
}).then(function(){
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Creates and removes static material open geometry', function() {
|
||
|
|
var objects = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var ellipse = new EllipseGraphics();
|
||
|
|
ellipse.semiMajorAxis = new ConstantProperty(2);
|
||
|
|
ellipse.semiMinorAxis = new ConstantProperty(1);
|
||
|
|
ellipse.material = new GridMaterialProperty();
|
||
|
|
ellipse.height = new ConstantProperty(1.0);
|
||
|
|
|
||
|
|
var entity = new Entity();
|
||
|
|
entity.position = new ConstantPositionProperty(new Cartesian3(1234, 5678, 9101112));
|
||
|
|
entity.ellipse = ellipse;
|
||
|
|
objects.add(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(true));
|
||
|
|
expect(attributes.color).toBeUndefined();
|
||
|
|
expect(primitive.appearance).toBeInstanceOf(MaterialAppearance);
|
||
|
|
expect(primitive.appearance.closed).toBe(false);
|
||
|
|
|
||
|
|
objects.remove(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
expect(visualizer.update(time)).toBe(true);
|
||
|
|
scene.render(time);
|
||
|
|
return scene.primitives.length === 0;
|
||
|
|
}).then(function(){
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Creates and removes static color closed geometry', function() {
|
||
|
|
var objects = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var ellipse = new EllipseGraphics();
|
||
|
|
ellipse.semiMajorAxis = new ConstantProperty(2);
|
||
|
|
ellipse.semiMinorAxis = new ConstantProperty(1);
|
||
|
|
ellipse.material = new ColorMaterialProperty();
|
||
|
|
ellipse.extrudedHeight = new ConstantProperty(1000);
|
||
|
|
|
||
|
|
var entity = new Entity();
|
||
|
|
entity.position = new ConstantPositionProperty(new Cartesian3(1234, 5678, 9101112));
|
||
|
|
entity.ellipse = ellipse;
|
||
|
|
objects.add(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(true));
|
||
|
|
expect(attributes.color).toEqual(ColorGeometryInstanceAttribute.toValue(Color.WHITE));
|
||
|
|
expect(primitive.appearance).toBeInstanceOf(PerInstanceColorAppearance);
|
||
|
|
expect(primitive.appearance.closed).toBe(true);
|
||
|
|
|
||
|
|
objects.remove(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
expect(visualizer.update(time)).toBe(true);
|
||
|
|
scene.render(time);
|
||
|
|
return scene.primitives.length === 0;
|
||
|
|
}).then(function(){
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Creates and removes static material closed geometry', function() {
|
||
|
|
var objects = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var ellipse = new EllipseGraphics();
|
||
|
|
ellipse.semiMajorAxis = new ConstantProperty(2);
|
||
|
|
ellipse.semiMinorAxis = new ConstantProperty(1);
|
||
|
|
ellipse.material = new GridMaterialProperty();
|
||
|
|
ellipse.extrudedHeight = new ConstantProperty(1000);
|
||
|
|
|
||
|
|
var entity = new Entity();
|
||
|
|
entity.position = new ConstantPositionProperty(new Cartesian3(1234, 5678, 9101112));
|
||
|
|
entity.ellipse = ellipse;
|
||
|
|
objects.add(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(true));
|
||
|
|
expect(attributes.color).toBeUndefined();
|
||
|
|
expect(primitive.appearance).toBeInstanceOf(MaterialAppearance);
|
||
|
|
expect(primitive.appearance.closed).toBe(true);
|
||
|
|
|
||
|
|
objects.remove(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
expect(visualizer.update(time)).toBe(true);
|
||
|
|
scene.render(time);
|
||
|
|
return scene.primitives.length === 0;
|
||
|
|
}).then(function(){
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Creates and removes static outline geometry', function() {
|
||
|
|
var objects = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var ellipse = new EllipseGraphics();
|
||
|
|
ellipse.semiMajorAxis = new ConstantProperty(2);
|
||
|
|
ellipse.semiMinorAxis = new ConstantProperty(1);
|
||
|
|
ellipse.outline = new ConstantProperty(true);
|
||
|
|
ellipse.outlineColor = new ConstantProperty(Color.BLUE);
|
||
|
|
ellipse.fill = new ConstantProperty(false);
|
||
|
|
|
||
|
|
var entity = new Entity();
|
||
|
|
entity.position = new ConstantPositionProperty(new Cartesian3(1234, 5678, 9101112));
|
||
|
|
entity.ellipse = ellipse;
|
||
|
|
objects.add(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(true));
|
||
|
|
expect(attributes.color).toEqual(ColorGeometryInstanceAttribute.toValue(Color.BLUE));
|
||
|
|
expect(primitive.appearance).toBeInstanceOf(PerInstanceColorAppearance);
|
||
|
|
|
||
|
|
objects.remove(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
expect(visualizer.update(time)).toBe(true);
|
||
|
|
scene.render(time);
|
||
|
|
return scene.primitives.length === 0;
|
||
|
|
}).then(function(){
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
function createAndRemoveGeometryWithShadows(shadows) {
|
||
|
|
var objects = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var ellipse = new EllipseGraphics();
|
||
|
|
ellipse.semiMajorAxis = new ConstantProperty(2);
|
||
|
|
ellipse.semiMinorAxis = new ConstantProperty(1);
|
||
|
|
ellipse.material = new ColorMaterialProperty();
|
||
|
|
ellipse.extrudedHeight = new ConstantProperty(1000);
|
||
|
|
ellipse.shadows = new ConstantProperty(shadows);
|
||
|
|
|
||
|
|
var entity = new Entity();
|
||
|
|
entity.position = new ConstantPositionProperty(new Cartesian3(1234, 5678, 9101112));
|
||
|
|
entity.ellipse = ellipse;
|
||
|
|
objects.add(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
expect(primitive.shadows).toBe(shadows);
|
||
|
|
|
||
|
|
objects.remove(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
expect(visualizer.update(time)).toBe(true);
|
||
|
|
scene.render(time);
|
||
|
|
return scene.primitives.length === 0;
|
||
|
|
}).then(function(){
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
it('Creates and removes geometry with shadows disabled', function() {
|
||
|
|
return createAndRemoveGeometryWithShadows(ShadowMode.DISABLED);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Creates and removes geometry with shadows enabled', function() {
|
||
|
|
return createAndRemoveGeometryWithShadows(ShadowMode.ENABLED);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Creates and removes geometry with shadow casting only', function() {
|
||
|
|
return createAndRemoveGeometryWithShadows(ShadowMode.CAST_ONLY);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Creates and removes geometry with shadow receiving only', function() {
|
||
|
|
return createAndRemoveGeometryWithShadows(ShadowMode.RECEIVE_ONLY);
|
||
|
|
});
|
||
|
|
|
||
|
|
function createAndRemoveGeometryWithClassificationType(type) {
|
||
|
|
var objects = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var ellipse = new EllipseGraphics();
|
||
|
|
ellipse.semiMajorAxis = new ConstantProperty(2);
|
||
|
|
ellipse.semiMinorAxis = new ConstantProperty(1);
|
||
|
|
ellipse.material = new ColorMaterialProperty();
|
||
|
|
ellipse.classificationType = new ConstantProperty(type);
|
||
|
|
|
||
|
|
var entity = new Entity();
|
||
|
|
entity.position = new ConstantPositionProperty(new Cartesian3(1234, 5678, 9101112));
|
||
|
|
entity.ellipse = ellipse;
|
||
|
|
objects.add(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.groundPrimitives.get(0);
|
||
|
|
expect(primitive.classificationType).toBe(type);
|
||
|
|
|
||
|
|
objects.remove(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
expect(visualizer.update(time)).toBe(true);
|
||
|
|
scene.render(time);
|
||
|
|
return scene.primitives.length === 0;
|
||
|
|
}).then(function(){
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
it('Creates and removes geometry classifying terrain', function() {
|
||
|
|
return createAndRemoveGeometryWithClassificationType(ClassificationType.TERRAIN);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Creates and removes geometry classifying 3D Tiles', function() {
|
||
|
|
return createAndRemoveGeometryWithClassificationType(ClassificationType.CESIUM_3D_TILE);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Creates and removes geometry classifying both terrain and 3D Tiles', function() {
|
||
|
|
return createAndRemoveGeometryWithClassificationType(ClassificationType.BOTH);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Correctly handles geometry changing batches', function() {
|
||
|
|
var objects = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var ellipse = new EllipseGraphics();
|
||
|
|
ellipse.semiMajorAxis = new ConstantProperty(2);
|
||
|
|
ellipse.semiMinorAxis = new ConstantProperty(1);
|
||
|
|
ellipse.material = new ColorMaterialProperty();
|
||
|
|
ellipse.height = new ConstantProperty(0);
|
||
|
|
|
||
|
|
var entity = new Entity();
|
||
|
|
entity.position = new ConstantPositionProperty(new Cartesian3(1234, 5678, 9101112));
|
||
|
|
entity.ellipse = ellipse;
|
||
|
|
objects.add(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(true));
|
||
|
|
expect(attributes.color).toEqual(ColorGeometryInstanceAttribute.toValue(Color.WHITE));
|
||
|
|
expect(primitive.appearance).toBeInstanceOf(PerInstanceColorAppearance);
|
||
|
|
|
||
|
|
ellipse.material = new GridMaterialProperty();
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
primitive = scene.primitives.get(0);
|
||
|
|
attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(true));
|
||
|
|
expect(attributes.color).toBeUndefined();
|
||
|
|
expect(primitive.appearance).toBeInstanceOf(MaterialAppearance);
|
||
|
|
|
||
|
|
objects.remove(entity);
|
||
|
|
scene.initializeFrame();
|
||
|
|
expect(visualizer.update(time)).toBe(true);
|
||
|
|
scene.render(time);
|
||
|
|
|
||
|
|
expect(scene.primitives.length).toBe(0);
|
||
|
|
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Correctly handles modifying translucent outline color', function() {
|
||
|
|
var entities = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, entities, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var color = Color.BLUE.withAlpha(0.5);
|
||
|
|
var entity = entities.add({
|
||
|
|
position : new Cartesian3(1234, 5678, 9101112),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
fill : false,
|
||
|
|
outline : true,
|
||
|
|
outlineColor : color
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.color).toEqual(ColorGeometryInstanceAttribute.toValue(color));
|
||
|
|
|
||
|
|
color = Color.RED.withAlpha(0.5);
|
||
|
|
entity.ellipse.outlineColor.setValue(color);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
});
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.color).toEqual(ColorGeometryInstanceAttribute.toValue(color));
|
||
|
|
|
||
|
|
entities.remove(entity);
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Creates and removes dynamic geometry', function() {
|
||
|
|
var objects = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var ellipse = new EllipseGraphics();
|
||
|
|
ellipse.semiMajorAxis = new SampledProperty(Number);
|
||
|
|
ellipse.semiMajorAxis.addSample(time, 2);
|
||
|
|
ellipse.semiMinorAxis = new ConstantProperty(1);
|
||
|
|
ellipse.extrudedHeight = new ConstantProperty(1000);
|
||
|
|
ellipse.material = new ColorMaterialProperty();
|
||
|
|
|
||
|
|
var entity = new Entity();
|
||
|
|
entity.position = new ConstantPositionProperty(new Cartesian3(1234, 5678, 9101112));
|
||
|
|
entity.ellipse = ellipse;
|
||
|
|
objects.add(entity);
|
||
|
|
|
||
|
|
scene.initializeFrame();
|
||
|
|
expect(visualizer.update(time)).toBe(true);
|
||
|
|
scene.render(time);
|
||
|
|
objects.remove(entity);
|
||
|
|
scene.initializeFrame();
|
||
|
|
expect(visualizer.update(time)).toBe(true);
|
||
|
|
scene.render(time);
|
||
|
|
expect(scene.primitives.length).toBe(0);
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Creates and removes dynamic geometry on terrain ', function() {
|
||
|
|
var objects = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, objects, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var ellipse = new EllipseGraphics();
|
||
|
|
ellipse.semiMajorAxis = new SampledProperty(Number);
|
||
|
|
ellipse.semiMajorAxis.addSample(time, 2);
|
||
|
|
ellipse.semiMinorAxis = new ConstantProperty(1);
|
||
|
|
ellipse.material = new ColorMaterialProperty();
|
||
|
|
|
||
|
|
var entity = new Entity();
|
||
|
|
entity.position = new ConstantPositionProperty(new Cartesian3(1234, 5678, 9101112));
|
||
|
|
entity.ellipse = ellipse;
|
||
|
|
objects.add(entity);
|
||
|
|
|
||
|
|
scene.initializeFrame();
|
||
|
|
expect(visualizer.update(time)).toBe(true);
|
||
|
|
scene.render(time);
|
||
|
|
objects.remove(entity);
|
||
|
|
scene.initializeFrame();
|
||
|
|
expect(visualizer.update(time)).toBe(true);
|
||
|
|
scene.render(time);
|
||
|
|
expect(scene.primitives.length).toBe(0);
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Constructor throws without scene', function() {
|
||
|
|
var objects = new EntityCollection();
|
||
|
|
expect(function() {
|
||
|
|
return new GeometryVisualizer(undefined, objects, scene.primitives, scene.groundPrimitives);
|
||
|
|
}).toThrowDeveloperError();
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Constructor throws without entityCollection', function() {
|
||
|
|
expect(function() {
|
||
|
|
return new GeometryVisualizer(scene, undefined, scene.primitives, scene.groundPrimitives);
|
||
|
|
}).toThrowDeveloperError();
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Update throws without time parameter', function() {
|
||
|
|
var visualizer = new GeometryVisualizer(scene, new EntityCollection(), scene.primitives, scene.groundPrimitives);
|
||
|
|
expect(function() {
|
||
|
|
visualizer.update(undefined);
|
||
|
|
}).toThrowDeveloperError();
|
||
|
|
});
|
||
|
|
|
||
|
|
it('removes the listener from the entity collection when destroyed', function() {
|
||
|
|
var entityCollection = new 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);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Computes dynamic geometry bounding sphere.', function() {
|
||
|
|
var entityCollection = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, entityCollection, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var ellipse = new EllipseGraphics();
|
||
|
|
ellipse.semiMajorAxis = new ConstantProperty(2);
|
||
|
|
ellipse.semiMinorAxis = new ConstantProperty(1);
|
||
|
|
ellipse.height = new ConstantProperty(0);
|
||
|
|
|
||
|
|
var entity = new Entity();
|
||
|
|
entity.position = Cartesian3.fromDegrees(0, 0, 0);
|
||
|
|
entity.ellipse = ellipse;
|
||
|
|
entityCollection.add(entity);
|
||
|
|
|
||
|
|
var state;
|
||
|
|
var result = new BoundingSphere();
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
scene.render();
|
||
|
|
visualizer.update(time);
|
||
|
|
state = visualizer.getBoundingSphere(entity, result);
|
||
|
|
return state !== BoundingSphereState.PENDING;
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
expect(state).toBe(BoundingSphereState.DONE);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(result).toEqual(BoundingSphere.transform(attributes.boundingSphere, primitive.modelMatrix, new BoundingSphere()));
|
||
|
|
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Compute dynamic geometry bounding sphere throws without entity.', function() {
|
||
|
|
var entityCollection = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, entityCollection, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var result = new BoundingSphere();
|
||
|
|
expect(function() {
|
||
|
|
visualizer.getBoundingSphere(undefined, result);
|
||
|
|
}).toThrowDeveloperError();
|
||
|
|
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Compute dynamic geometry bounding sphere throws without result.', function() {
|
||
|
|
var entityCollection = new EntityCollection();
|
||
|
|
var entity = new Entity();
|
||
|
|
entityCollection.add(entity);
|
||
|
|
var visualizer = new GeometryVisualizer(scene, entityCollection, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
expect(function() {
|
||
|
|
visualizer.getBoundingSphere(entity, undefined);
|
||
|
|
}).toThrowDeveloperError();
|
||
|
|
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
|
||
|
|
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, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var entity = new Entity({
|
||
|
|
id : 'test',
|
||
|
|
position : Cartesian3.fromDegrees(0, 0, 0),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : Color.ORANGE,
|
||
|
|
height : 0
|
||
|
|
}
|
||
|
|
});
|
||
|
|
objects.add(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
objects.remove(entity);
|
||
|
|
|
||
|
|
var entity2 = new Entity({
|
||
|
|
id : 'test',
|
||
|
|
position : Cartesian3.fromDegrees(0, 0, 0),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : Color.BLUE,
|
||
|
|
height : 0
|
||
|
|
}
|
||
|
|
});
|
||
|
|
objects.add(entity2);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity2);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(true));
|
||
|
|
expect(attributes.color).toEqual(ColorGeometryInstanceAttribute.toValue(Color.BLUE));
|
||
|
|
expect(primitive.appearance).toBeInstanceOf(PerInstanceColorAppearance);
|
||
|
|
|
||
|
|
objects.remove(entity);
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
expect(visualizer.update(time)).toBe(true);
|
||
|
|
scene.render(time);
|
||
|
|
return scene.primitives.length === 0;
|
||
|
|
}).then(function() {
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Sets static geometry primitive show attribute when using dynamic fill color', function() {
|
||
|
|
var entities = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, entities, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var entity = entities.add({
|
||
|
|
position : new Cartesian3(1234, 5678, 9101112),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : new ColorMaterialProperty(createDynamicProperty(Color.BLUE)),
|
||
|
|
height : 0
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(true));
|
||
|
|
|
||
|
|
entity.show = false;
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
});
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(false));
|
||
|
|
|
||
|
|
entities.remove(entity);
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Sets static geometry primitive show attribute when using dynamic outline color', function() {
|
||
|
|
var entities = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, entities, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var entity = entities.add({
|
||
|
|
position : new Cartesian3(1234, 5678, 9101112),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
fill : false,
|
||
|
|
outline : true,
|
||
|
|
outlineColor : createDynamicProperty(Color.BLUE)
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(true));
|
||
|
|
|
||
|
|
entity.show = false;
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
});
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(false));
|
||
|
|
|
||
|
|
entities.remove(entity);
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('Sets static geometry primitive show attribute when using dynamic fill material', function() {
|
||
|
|
var entities = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, entities, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var entity = entities.add({
|
||
|
|
position : new Cartesian3(1234, 5678, 9101112),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : new GridMaterialProperty({
|
||
|
|
color : createDynamicProperty(Color.BLUE)
|
||
|
|
}),
|
||
|
|
height : 0.0
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(true));
|
||
|
|
|
||
|
|
entity.show = false;
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
});
|
||
|
|
}).then(function() {
|
||
|
|
var primitive = scene.primitives.get(0);
|
||
|
|
var attributes = primitive.getGeometryInstanceAttributes(entity);
|
||
|
|
expect(attributes).toBeDefined();
|
||
|
|
expect(attributes.show).toEqual(ShowGeometryInstanceAttribute.toValue(false));
|
||
|
|
|
||
|
|
entities.remove(entity);
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('batches ground entities by identical color if ground entity materials are not supported', function() {
|
||
|
|
spyOn(GroundPrimitive, 'supportsMaterials').and.callFake(function() {
|
||
|
|
return false;
|
||
|
|
});
|
||
|
|
var entities = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, entities, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var blueColor = Color.BLUE.withAlpha(0.5);
|
||
|
|
entities.add({
|
||
|
|
position : new Cartesian3(1, 2, 3),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : blueColor
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
expect(scene.groundPrimitives.length).toEqual(1);
|
||
|
|
|
||
|
|
entities.add({
|
||
|
|
position : new Cartesian3(12, 34, 45),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : blueColor
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
});
|
||
|
|
}).then(function() {
|
||
|
|
expect(scene.groundPrimitives.length).toEqual(1);
|
||
|
|
|
||
|
|
entities.add({
|
||
|
|
position : new Cartesian3(123, 456, 789),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : Color.BLUE.withAlpha(0.6)
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
});
|
||
|
|
}).then(function() {
|
||
|
|
expect(scene.groundPrimitives.length).toEqual(2);
|
||
|
|
|
||
|
|
entities.removeAll();
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('batches ground entities by identical color if ClassificationType is not TERRAIN', function() {
|
||
|
|
var entities = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, entities, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var blueColor = Color.BLUE.withAlpha(0.5);
|
||
|
|
entities.add({
|
||
|
|
position : new Cartesian3(1, 2, 3),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : blueColor,
|
||
|
|
classificationType : ClassificationType.BOTH
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
expect(scene.groundPrimitives.length).toEqual(1);
|
||
|
|
|
||
|
|
entities.add({
|
||
|
|
position : new Cartesian3(12, 34, 45),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : blueColor,
|
||
|
|
classificationType : ClassificationType.BOTH
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
});
|
||
|
|
}).then(function() {
|
||
|
|
expect(scene.groundPrimitives.length).toEqual(1);
|
||
|
|
|
||
|
|
entities.add({
|
||
|
|
position : new Cartesian3(123, 456, 789),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : Color.BLUE.withAlpha(0.6),
|
||
|
|
classificationType : ClassificationType.BOTH
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
});
|
||
|
|
}).then(function() {
|
||
|
|
expect(scene.groundPrimitives.length).toEqual(2);
|
||
|
|
|
||
|
|
entities.removeAll();
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('batches ground entities classifying terrain by material if ground entity materials is supported', function() {
|
||
|
|
if (!GroundPrimitive.isSupported(scene) || !GroundPrimitive.supportsMaterials(scene)) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
var entities = new EntityCollection();
|
||
|
|
var visualizer = new GeometryVisualizer(scene, entities, scene.primitives, scene.groundPrimitives);
|
||
|
|
|
||
|
|
var blueColor = Color.BLUE.withAlpha(0.5);
|
||
|
|
entities.add({
|
||
|
|
position : Cartesian3.fromDegrees(1, 2),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : blueColor,
|
||
|
|
classificationType : ClassificationType.TERRAIN
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
}).then(function() {
|
||
|
|
expect(scene.groundPrimitives.length).toEqual(1);
|
||
|
|
|
||
|
|
entities.add({
|
||
|
|
position : Cartesian3.fromDegrees(12, 34),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : blueColor,
|
||
|
|
classificationType : ClassificationType.TERRAIN
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
});
|
||
|
|
}).then(function() {
|
||
|
|
expect(scene.groundPrimitives.length).toEqual(1);
|
||
|
|
|
||
|
|
entities.add({
|
||
|
|
position : Cartesian3.fromDegrees(45, 67),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : Color.BLUE.withAlpha(0.6),
|
||
|
|
classificationType : ClassificationType.TERRAIN
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
});
|
||
|
|
}).then(function() {
|
||
|
|
expect(scene.groundPrimitives.length).toEqual(1);
|
||
|
|
|
||
|
|
entities.add({
|
||
|
|
position : Cartesian3.fromDegrees(-1, -2),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : './Data/Images/White.png',
|
||
|
|
classificationType : ClassificationType.TERRAIN
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
entities.add({
|
||
|
|
position : Cartesian3.fromDegrees(-12, -34),
|
||
|
|
ellipse : {
|
||
|
|
semiMajorAxis : 2,
|
||
|
|
semiMinorAxis : 1,
|
||
|
|
material : './Data/Images/White.png',
|
||
|
|
classificationType : ClassificationType.BOTH // expect to render as ClassificationType.TERRAIN
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
return pollToPromise(function() {
|
||
|
|
scene.initializeFrame();
|
||
|
|
var isUpdated = visualizer.update(time);
|
||
|
|
scene.render(time);
|
||
|
|
return isUpdated;
|
||
|
|
});
|
||
|
|
}).then(function() {
|
||
|
|
expect(scene.groundPrimitives.length).toEqual(2);
|
||
|
|
|
||
|
|
entities.removeAll();
|
||
|
|
visualizer.destroy();
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
}, 'WebGL');
|