DSDSServer2024/build/build.20240805/static/js/Cesium-1.53/Specs/DataSources/GeometryVisualizerSpec.js

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');