1662 lines
45 KiB
JavaScript
1662 lines
45 KiB
JavaScript
defineSuite([
|
|
'Scene/PolylineCollection',
|
|
'Core/BoundingSphere',
|
|
'Core/Cartesian3',
|
|
'Core/Color',
|
|
'Core/DistanceDisplayCondition',
|
|
'Core/HeadingPitchRange',
|
|
'Core/Math',
|
|
'Core/Matrix4',
|
|
'Scene/Camera',
|
|
'Scene/Material',
|
|
'Scene/SceneMode',
|
|
'Specs/createScene'
|
|
], function(
|
|
PolylineCollection,
|
|
BoundingSphere,
|
|
Cartesian3,
|
|
Color,
|
|
DistanceDisplayCondition,
|
|
HeadingPitchRange,
|
|
CesiumMath,
|
|
Matrix4,
|
|
Camera,
|
|
Material,
|
|
SceneMode,
|
|
createScene) {
|
|
'use strict';
|
|
|
|
var scene;
|
|
var polylines;
|
|
|
|
beforeAll(function() {
|
|
scene = createScene();
|
|
scene.primitives.destroyPrimitives = false;
|
|
});
|
|
|
|
afterAll(function() {
|
|
scene.destroyForSpecs();
|
|
});
|
|
|
|
beforeEach(function() {
|
|
polylines = new PolylineCollection();
|
|
scene.mode = SceneMode.SCENE3D;
|
|
scene.camera = new Camera(scene);
|
|
});
|
|
|
|
afterEach(function() {
|
|
scene.primitives.removeAll();
|
|
if (!polylines.isDestroyed()) {
|
|
polylines.removeAll();
|
|
polylines.destroy();
|
|
}
|
|
});
|
|
|
|
it('default constructs a polyline', function() {
|
|
var p = polylines.add();
|
|
expect(p.show).toEqual(true);
|
|
expect(p.positions.length).toEqual(0);
|
|
expect(p.width).toEqual(1.0);
|
|
expect(p.material.uniforms.color).toEqual(new Color(1.0, 1.0, 1.0, 1.0));
|
|
expect(p.id).not.toBeDefined();
|
|
expect(p.loop).toEqual(false);
|
|
});
|
|
|
|
it('explicitly constructs a polyline', function() {
|
|
var material = Material.fromType(Material.PolylineOutlineType);
|
|
var p = polylines.add({
|
|
show : false,
|
|
positions : [new Cartesian3(1.0, 2.0, 3.0), new Cartesian3(4.0, 5.0, 6.0), new Cartesian3(7.0, 8.0, 9.0)],
|
|
loop : true,
|
|
width : 2,
|
|
material : material,
|
|
id : 'id'
|
|
});
|
|
|
|
expect(p.show).toEqual(false);
|
|
expect(p.positions[0]).toEqual(new Cartesian3(1.0, 2.0, 3.0));
|
|
expect(p.positions[1]).toEqual(new Cartesian3(4.0, 5.0, 6.0));
|
|
expect(p.positions[2]).toEqual(new Cartesian3(7.0, 8.0, 9.0));
|
|
expect(p.positions.length).toEqual(3);
|
|
expect(p.loop).toEqual(true);
|
|
expect(p.width).toEqual(2);
|
|
expect(p.material.uniforms.color).toEqual(material.uniforms.color);
|
|
expect(p.material.uniforms.outlineColor).toEqual(material.uniforms.outlineColor);
|
|
expect(p.material.uniforms.outlineWidth).toEqual(material.uniforms.outlineWidth);
|
|
expect(p.id).toEqual('id');
|
|
});
|
|
|
|
it('sets polyline properties', function() {
|
|
var material = Material.fromType(Material.PolylineOutlineType);
|
|
var p = polylines.add();
|
|
p.show = false;
|
|
p.positions = [new Cartesian3(1.0, 2.0, 3.0), new Cartesian3(4.0, 5.0, 6.0), new Cartesian3(7.0, 8.0, 9.0)];
|
|
p.loop = true;
|
|
p.width = 2;
|
|
p.material = material;
|
|
|
|
expect(p.show).toEqual(false);
|
|
expect(p.positions[0]).toEqual(new Cartesian3(1.0, 2.0, 3.0));
|
|
expect(p.positions[1]).toEqual(new Cartesian3(4.0, 5.0, 6.0));
|
|
expect(p.positions[2]).toEqual(new Cartesian3(7.0, 8.0, 9.0));
|
|
expect(p.positions.length).toEqual(3);
|
|
expect(p.loop).toEqual(true);
|
|
expect(p.width).toEqual(2);
|
|
expect(p.material.uniforms.color).toEqual(material.uniforms.color);
|
|
expect(p.material.uniforms.outlineColor).toEqual(material.uniforms.outlineColor);
|
|
expect(p.material.uniforms.outlineWidth).toEqual(material.uniforms.outlineWidth);
|
|
});
|
|
|
|
it('constructor sets loop only when number of positions is greater than 2', function() {
|
|
var p = polylines.add({
|
|
positions : [new Cartesian3(0.0, 1.0, 2.0), new Cartesian3(3.0, 4.0, 5.0)],
|
|
loop : true
|
|
});
|
|
|
|
expect(p.positions.length).toEqual(2);
|
|
});
|
|
|
|
it('sets loop only when number of positions is greater than 2', function() {
|
|
var p = polylines.add({
|
|
positions : [new Cartesian3(0.0, 1.0, 2.0), new Cartesian3(3.0, 4.0, 5.0)]
|
|
});
|
|
p.loop = true;
|
|
|
|
expect(p.positions.length).toEqual(2);
|
|
});
|
|
|
|
it('sets removed polyline properties', function() {
|
|
var p = polylines.add();
|
|
polylines.remove(p);
|
|
p.show = false;
|
|
expect(p.show).toEqual(false);
|
|
});
|
|
|
|
it('has zero polylines when constructed', function() {
|
|
expect(polylines.length).toEqual(0);
|
|
});
|
|
|
|
it('adds a polyline', function() {
|
|
var p = polylines.add({
|
|
positions : [{
|
|
x : 1.0,
|
|
y : 2.0,
|
|
z : 3.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
|
|
expect(polylines.length).toEqual(1);
|
|
expect(polylines.get(0) === p).toEqual(true);
|
|
});
|
|
|
|
it('removes the first polyline', function() {
|
|
var one = polylines.add({
|
|
positions : [{
|
|
x : 1.0,
|
|
y : 2.0,
|
|
z : 3.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
var two = polylines.add({
|
|
positions : [{
|
|
x : 4.0,
|
|
y : 5.0,
|
|
z : 6.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
|
|
expect(polylines.length).toEqual(2);
|
|
|
|
expect(polylines.remove(one)).toEqual(true);
|
|
|
|
expect(polylines.length).toEqual(1);
|
|
expect(polylines.get(0) === two).toEqual(true);
|
|
});
|
|
|
|
it('removes the last polyline', function() {
|
|
var one = polylines.add({
|
|
positions : [{
|
|
x : 1.0,
|
|
y : 2.0,
|
|
z : 3.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
var two = polylines.add({
|
|
positions : [{
|
|
x : 4.0,
|
|
y : 5.0,
|
|
z : 6.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
|
|
expect(polylines.length).toEqual(2);
|
|
|
|
expect(polylines.remove(two)).toEqual(true);
|
|
|
|
expect(polylines.length).toEqual(1);
|
|
expect(polylines.get(0) === one).toEqual(true);
|
|
});
|
|
|
|
it('removes the same polyline twice', function() {
|
|
var p = polylines.add({
|
|
positions : [{
|
|
x : 1.0,
|
|
y : 2.0,
|
|
z : 3.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
expect(polylines.length).toEqual(1);
|
|
|
|
expect(polylines.remove(p)).toEqual(true);
|
|
expect(polylines.length).toEqual(0);
|
|
|
|
expect(polylines.remove(p)).toEqual(false);
|
|
expect(polylines.length).toEqual(0);
|
|
});
|
|
|
|
it('returns false when removing undefined', function() {
|
|
polylines.add({
|
|
positions : [{
|
|
x : 1.0,
|
|
y : 2.0,
|
|
z : 3.0
|
|
}, {
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
expect(polylines.length).toEqual(1);
|
|
|
|
expect(polylines.remove(undefined)).toEqual(false);
|
|
expect(polylines.length).toEqual(1);
|
|
});
|
|
|
|
it('adds and removes polylines', function() {
|
|
var one = polylines.add({
|
|
positions : [{
|
|
x : 1.0,
|
|
y : 2.0,
|
|
z : 3.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
var two = polylines.add({
|
|
positions : [{
|
|
x : 4.0,
|
|
y : 5.0,
|
|
z : 6.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
expect(polylines.length).toEqual(2);
|
|
expect(polylines.get(0) === one).toEqual(true);
|
|
expect(polylines.get(1) === two).toEqual(true);
|
|
|
|
expect(polylines.remove(two)).toEqual(true);
|
|
var three = polylines.add({
|
|
positions : [{
|
|
x : 7.0,
|
|
y : 8.0,
|
|
z : 9.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
expect(polylines.length).toEqual(2);
|
|
expect(polylines.get(0) === one).toEqual(true);
|
|
expect(polylines.get(1) === three).toEqual(true);
|
|
});
|
|
|
|
it('removes all polylines', function() {
|
|
polylines.add({
|
|
positions : [{
|
|
x : 1.0,
|
|
y : 2.0,
|
|
z : 3.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
polylines.add({
|
|
positions : [{
|
|
x : 4.0,
|
|
y : 5.0,
|
|
z : 6.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
expect(polylines.length).toEqual(2);
|
|
|
|
polylines.removeAll();
|
|
expect(polylines.length).toEqual(0);
|
|
});
|
|
|
|
it('removes a polyline from the updated list when removed', function() {
|
|
var firstPolyline = polylines.add();
|
|
var secondPolyline = polylines.add();
|
|
|
|
firstPolyline.width = 4;
|
|
secondPolyline.width = 5;
|
|
|
|
expect(polylines._polylinesToUpdate.length).toEqual(2);
|
|
|
|
polylines.remove(secondPolyline);
|
|
|
|
expect(polylines._polylinesToUpdate.length).toEqual(1);
|
|
});
|
|
|
|
it('only adds polyline to the update list once', function() {
|
|
var firstPolyline = polylines.add();
|
|
var secondPolyline = polylines.add();
|
|
|
|
firstPolyline.width = 4;
|
|
secondPolyline.width = 5;
|
|
secondPolyline.width = 7;
|
|
|
|
expect(polylines._polylinesToUpdate.length).toEqual(2);
|
|
|
|
polylines.remove(secondPolyline);
|
|
|
|
expect(polylines._polylinesToUpdate.length).toEqual(1);
|
|
});
|
|
|
|
it('can check if it contains a polyline', function() {
|
|
var polyline = polylines.add();
|
|
|
|
expect(polylines.contains(polyline)).toEqual(true);
|
|
});
|
|
|
|
it('returns false when checking if it contains a polyline it does not contain', function() {
|
|
var polyline = polylines.add();
|
|
polylines.remove(polyline);
|
|
|
|
expect(polylines.contains(polyline)).toEqual(false);
|
|
});
|
|
|
|
it('does not contain undefined', function() {
|
|
expect(polylines.contains(undefined)).toEqual(false);
|
|
});
|
|
|
|
it('does not contain random other objects', function() {
|
|
expect(polylines.contains({})).toEqual(false);
|
|
expect(polylines.contains(new Cartesian3())).toEqual(false);
|
|
});
|
|
|
|
it('does not render when constructed', function() {
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders polylines. one polyline with no positions', function() {
|
|
var positions = [];
|
|
for (var i = 0; i < 100; ++i) {
|
|
positions.push({
|
|
x : 0,
|
|
y : -1000000,
|
|
z : 0
|
|
});
|
|
positions.push({
|
|
x : 0,
|
|
y : 1000000,
|
|
z : 0
|
|
});
|
|
}
|
|
|
|
polylines.add({
|
|
positions : positions
|
|
});
|
|
polylines.add();
|
|
polylines.add({
|
|
positions: positions
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('does not crash if polyline has one position', function() {
|
|
polylines.add({
|
|
positions : [{
|
|
x : 1647745.6656519484,
|
|
y : 4949018.87918947,
|
|
z : 3661524.164064342
|
|
}]
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders polylines with duplicate positions at construction', function() {
|
|
polylines.add({
|
|
positions : [
|
|
new Cartesian3(0.0, -1000000.0, 0.0),
|
|
new Cartesian3(0.0, 1000000.0, 0.0),
|
|
new Cartesian3(0.0, 1000000.0, 0.0),
|
|
new Cartesian3(0.0, 2000000.0, 0.0)
|
|
]
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders polylines with duplicate positions after setting positions', function() {
|
|
var p = polylines.add();
|
|
p.positions = [
|
|
new Cartesian3(0.0, -1000000.0, 0.0),
|
|
new Cartesian3(0.0, 1000000.0, 0.0),
|
|
new Cartesian3(0.0, 1000000.0, 0.0),
|
|
new Cartesian3(0.0, 2000000.0, 0.0)
|
|
];
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('A polyline that used to cross the IDL but now does not, triggers vertex creation (This code used to crash)', function() {
|
|
|
|
//Need to be in 2D or CV
|
|
scene.mode = SceneMode.SCENE2D;
|
|
|
|
//These positions cross the IDL
|
|
var positions = [];
|
|
positions.push({
|
|
x : 12163600,
|
|
y : -47362500,
|
|
z : 40812700
|
|
});
|
|
positions.push({
|
|
x : -50442500,
|
|
y : 83936900,
|
|
z : 37992500
|
|
});
|
|
|
|
//Create a line
|
|
var line = polylines.add({
|
|
positions : positions
|
|
});
|
|
|
|
//Render it
|
|
scene.primitives.add(polylines);
|
|
scene.render();
|
|
|
|
//We need to set positions and render it again
|
|
//in order for BufferUsage.STREAM_DRAW to be
|
|
//triggered, which ends up rebuilding vertex arrays.
|
|
line.positions = positions;
|
|
scene.render();
|
|
|
|
//Now set the second position which results in a line that does not cross the IDL
|
|
positions[1] = {
|
|
x : 19616100,
|
|
y : -46499100,
|
|
z : 38870500
|
|
};
|
|
line.positions = positions;
|
|
|
|
//Render the new line. The fact that the new position no longer crosses the IDL
|
|
//is what triggers the vertex array creation. If the vertex array were not
|
|
//recreaated, an exception would be thrown do to positions having less data then expected.
|
|
scene.render();
|
|
});
|
|
|
|
it('renders 64K vertices of same polyline', function() {
|
|
var positions = [];
|
|
for ( var i = 0; i < CesiumMath.SIXTY_FOUR_KILOBYTES / 2; ++i) {
|
|
positions.push({
|
|
x : 0,
|
|
y : -1000000,
|
|
z : 0
|
|
});
|
|
positions.push({
|
|
x : 0,
|
|
y : 1000000,
|
|
z : 0
|
|
});
|
|
}
|
|
|
|
polylines.add({
|
|
positions : positions
|
|
});
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('creates two vertex arrays and renders', function() {
|
|
var positions = [];
|
|
for ( var i = 0; i < CesiumMath.SIXTY_FOUR_KILOBYTES / 2; ++i) {
|
|
positions.push({
|
|
x : 0,
|
|
y : -1000000,
|
|
z : 0
|
|
});
|
|
positions.push({
|
|
x : 0,
|
|
y : 1000000,
|
|
z : 0
|
|
});
|
|
}
|
|
|
|
var p1 = polylines.add({
|
|
positions : positions
|
|
});
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
p1.show = false;
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
polylines.add({
|
|
positions : positions
|
|
});
|
|
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
});
|
|
|
|
it('renders more than 64K vertices of same polyline', function() {
|
|
var positions = [];
|
|
for ( var i = 0; i < CesiumMath.SIXTY_FOUR_KILOBYTES; ++i) {
|
|
positions.push({
|
|
x : 0,
|
|
y : -1000000,
|
|
z : 0
|
|
});
|
|
positions.push({
|
|
x : 0,
|
|
y : 1000000,
|
|
z : 0
|
|
});
|
|
}
|
|
positions.push({
|
|
x : 0,
|
|
y : -1000000,
|
|
z : 0
|
|
});
|
|
positions.push({
|
|
x : 0,
|
|
y : 1000000,
|
|
z : 0
|
|
});
|
|
|
|
polylines.add({
|
|
positions : positions
|
|
});
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders a polyline with no positions', function() {
|
|
var positions = [];
|
|
for ( var i = 0; i < 100; ++i) {
|
|
positions.push({
|
|
x : 0,
|
|
y : -1000000,
|
|
z : 0
|
|
});
|
|
positions.push({
|
|
x : 0,
|
|
y : 1000000,
|
|
z : 0
|
|
});
|
|
}
|
|
|
|
polylines.add({
|
|
positions : positions
|
|
});
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
polylines.add({
|
|
positions : []
|
|
});
|
|
|
|
scene.primitives.removeAll();
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders an updated polyline with no positions using set positions', function() {
|
|
var positions = [];
|
|
for ( var i = 0; i < 100; ++i) {
|
|
positions.push({
|
|
x : 0,
|
|
y : -1000000,
|
|
z : 0
|
|
});
|
|
positions.push({
|
|
x : 0,
|
|
y : 1000000,
|
|
z : 0
|
|
});
|
|
}
|
|
|
|
polylines.add({
|
|
positions : positions
|
|
});
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
var p2 = polylines.add({
|
|
positions : []
|
|
});
|
|
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
//recreates vertex array because buffer usage changed
|
|
p2.positions = [];
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
//should call PolylineCollection.writePositionsUpdate
|
|
p2.positions = [];
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders an updated polyline with no positions using show', function() {
|
|
var positions = [];
|
|
for ( var i = 0; i < 100; ++i) {
|
|
positions.push({
|
|
x : 0,
|
|
y : -1000000,
|
|
z : 0
|
|
});
|
|
positions.push({
|
|
x : 0,
|
|
y : 1000000,
|
|
z : 0
|
|
});
|
|
}
|
|
|
|
polylines.add({
|
|
positions : positions
|
|
});
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
var p2 = polylines.add({
|
|
positions : []
|
|
});
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
//recreates vertex array because buffer usage changed
|
|
p2.show = false;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
//should call PolylineCollection.writeMiscUpdate
|
|
p2.show = true;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders an updated polyline with no positions using material', function() {
|
|
var positions = [];
|
|
for ( var i = 0; i < 100; ++i) {
|
|
positions.push({
|
|
x : 0,
|
|
y : -1000000,
|
|
z : 0
|
|
});
|
|
positions.push({
|
|
x : 0,
|
|
y : 1000000,
|
|
z : 0
|
|
});
|
|
}
|
|
|
|
polylines.add({
|
|
positions : positions
|
|
});
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
var p2 = polylines.add({
|
|
positions : []
|
|
});
|
|
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
//recreates vertex array because buffer usage changed
|
|
p2.material = Material.fromType(Material.PolylineOutlineType);
|
|
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('changes buffer usage after 100 iterations of not changing', function() {
|
|
var positions = [];
|
|
for ( var i = 0; i < 100; ++i) {
|
|
positions.push({
|
|
x : 0,
|
|
y : -1000000,
|
|
z : 0
|
|
});
|
|
positions.push({
|
|
x : 0,
|
|
y : 1000000,
|
|
z : 0
|
|
});
|
|
}
|
|
|
|
var p = polylines.add({
|
|
positions : positions
|
|
});
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
// changes buffer usage, recreates vertex arrays
|
|
p.positions = positions;
|
|
for(var j = 0; j < 101; ++j){
|
|
scene.render();
|
|
}
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
});
|
|
|
|
it('renders more than 64K vertices of different polylines', function() {
|
|
var positions = [];
|
|
for ( var i = 0; i < CesiumMath.SIXTY_FOUR_KILOBYTES; ++i) {
|
|
positions.push({
|
|
x : -1000000,
|
|
y : -1000000,
|
|
z : 0
|
|
});
|
|
positions.push({
|
|
x : -1000000,
|
|
y : 1000000,
|
|
z : 0
|
|
});
|
|
}
|
|
|
|
polylines.add({
|
|
positions : positions
|
|
});
|
|
polylines.add({
|
|
positions : [{
|
|
x : 0,
|
|
y : -1000000,
|
|
z : 0
|
|
},{
|
|
x : 0,
|
|
y : 1000000,
|
|
z : 0
|
|
}]
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders bounding volume with debugShowBoundingVolume', function() {
|
|
polylines.debugShowBoundingVolume = true;
|
|
var material = Material.fromType('Color');
|
|
material.uniforms.color = new Color(1.0, 1.0, 1.0, 0.0);
|
|
var p = polylines.add({
|
|
positions : [{
|
|
x : 1.0,
|
|
y : -1000.0,
|
|
z : 1.0
|
|
},{
|
|
x : 1.0,
|
|
y : 1000.00,
|
|
z : 1.0
|
|
}],
|
|
material : material
|
|
});
|
|
var bounds = BoundingSphere.fromPoints(p.positions);
|
|
scene.camera.viewBoundingSphere(bounds);
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('does not render', function() {
|
|
var p = polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
p.show = false;
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('modifies and removes a polyline, then renders', function() {
|
|
var p = polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
polylines.remove(p);
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders a green polyline', function() {
|
|
polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('adds and renders a polyline', function() {
|
|
polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
polylines.add({
|
|
positions : [{
|
|
x : 500000.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 500000.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('removes and renders a polyline', function() {
|
|
polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
var bluePolyline = polylines.add({
|
|
positions : [{
|
|
x : 500000.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 500000.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
polylines.remove(bluePolyline);
|
|
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('removes all polylines and renders', function() {
|
|
polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
polylines.removeAll();
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('removes all polylines, adds a polyline, and renders', function() {
|
|
polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
polylines.removeAll();
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders using polyline positions property', function() {
|
|
var p = polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
p.positions = [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : -2000000.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : -2000000.0
|
|
}]; // Behind viewer
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
p.positions = [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]; // Back in front of viewer
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders and updates one polyline from many polylines using show property', function() {
|
|
var positions = [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : -2000000.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : -2000000.0
|
|
}];
|
|
polylines.add({
|
|
positions : positions,
|
|
width : 2
|
|
});
|
|
|
|
polylines.add({
|
|
positions : positions,
|
|
width : 2
|
|
});
|
|
|
|
polylines.add({
|
|
positions : positions,
|
|
width : 2
|
|
});
|
|
|
|
var p = polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}],
|
|
width : 2
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
p.show = false;
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
p.show = true;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders using polyline show property', function() {
|
|
var p = polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}],
|
|
show:true
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
p.show = false;
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
p.show = true;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders four polylines with different widths', function() {
|
|
var positions = [];
|
|
for(var i = 0; i < 200; ++i){
|
|
positions.push({
|
|
x : -1000000.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
},{
|
|
x : -1000000.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
});
|
|
}
|
|
polylines.add({
|
|
positions : positions,
|
|
width : 3
|
|
});
|
|
polylines.add({
|
|
positions : positions,
|
|
width : 1
|
|
});
|
|
polylines.add({
|
|
positions : positions,
|
|
width : 2
|
|
});
|
|
polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1.0,
|
|
z : 0.0
|
|
}],
|
|
width : 7
|
|
});
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders three polylines with different widths and updates one', function() {
|
|
var positions = [];
|
|
for(var i = 0; i < 200; ++i){
|
|
positions.push({
|
|
x : -1000000.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
},{
|
|
x : -1000000.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
});
|
|
}
|
|
polylines.add({
|
|
positions : positions,
|
|
width : 3
|
|
});
|
|
polylines.add({
|
|
positions : positions,
|
|
width : 4
|
|
});
|
|
var p2 = polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}],
|
|
width : 7
|
|
});
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
p2.material = Material.fromType(Material.PolylineOutlineType);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
p2.material = Material.fromType(Material.ColorType);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('does not render with width 0.0', function() {
|
|
var line = polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}],
|
|
width : 7
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
line.width = 0.0;
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders with a distance display condition', function() {
|
|
var near = 100.0;
|
|
var far = 10000.0;
|
|
|
|
var line = polylines.add({
|
|
positions : [{
|
|
x : 10.0,
|
|
y : -10.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 10.0,
|
|
y : 10.0,
|
|
z : 0.0
|
|
}],
|
|
width : 7,
|
|
distanceDisplayCondition : new DistanceDisplayCondition(near, far)
|
|
});
|
|
|
|
scene.primitives.add(polylines);
|
|
scene.renderForSpecs();
|
|
|
|
var boundingSphere = line._boundingVolumeWC;
|
|
var center = boundingSphere.center;
|
|
var radius = boundingSphere.radius;
|
|
|
|
scene.camera.lookAt(center, new HeadingPitchRange(0.0, -CesiumMath.PI_OVER_TWO, radius + near - 10.0));
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.camera.lookAt(center, new HeadingPitchRange(0.0, -CesiumMath.PI_OVER_TWO, radius + near + 1.0));
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
scene.camera.lookAt(center, new HeadingPitchRange(0.0, -CesiumMath.PI_OVER_TWO, radius + far + 10.0));
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders with a distance display condition after creation', function() {
|
|
var near = 100.0;
|
|
var far = 10000.0;
|
|
|
|
var line = polylines.add({
|
|
positions : [{
|
|
x : 10.0,
|
|
y : -10.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 10.0,
|
|
y : 10.0,
|
|
z : 0.0
|
|
}],
|
|
width : 7
|
|
});
|
|
|
|
scene.primitives.add(polylines);
|
|
scene.renderForSpecs();
|
|
|
|
line.distanceDisplayCondition = new DistanceDisplayCondition(near, far);
|
|
|
|
var boundingSphere = line._boundingVolumeWC;
|
|
var center = boundingSphere.center;
|
|
var radius = boundingSphere.radius;
|
|
|
|
scene.camera.lookAt(center, new HeadingPitchRange(0.0, -CesiumMath.PI_OVER_TWO, radius + near - 10.0));
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.camera.lookAt(center, new HeadingPitchRange(0.0, -CesiumMath.PI_OVER_TWO, radius + near + 1.0));
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
scene.camera.lookAt(center, new HeadingPitchRange(0.0, -CesiumMath.PI_OVER_TWO, radius + far + 10.0));
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('changes polyline position size recreates vertex arrays', function() {
|
|
var positions = [];
|
|
for(var i = 0; i < 20; ++i){
|
|
positions.push({
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
},{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
});
|
|
}
|
|
var p = polylines.add({
|
|
positions : positions
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
p.positions = positions;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
positions.push({
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
});
|
|
|
|
p.positions = positions;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('changes polyline width property', function() {
|
|
var p1 = polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
var p2 = polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
p1.width = 2;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
p2.width = 2;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
p1.width = 1;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
});
|
|
|
|
it('renders with model matrix', function() {
|
|
polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : 0.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
scene.primitives.add(polylines);
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
polylines.modelMatrix = Matrix4.fromUniformScale(1000000.0, polylines.modelMatrix);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('is picked', function() {
|
|
var p = polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}],
|
|
id : 'id'
|
|
});
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).toPickAndCall(function(result) {
|
|
expect(result.primitive).toEqual(p);
|
|
expect(result.id).toEqual('id');
|
|
});
|
|
});
|
|
|
|
it('can change pick id', function() {
|
|
var p = polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}],
|
|
id : 'id'
|
|
});
|
|
|
|
scene.primitives.add(polylines);
|
|
expect(scene).toPickAndCall(function(result) {
|
|
expect(result.primitive).toEqual(p);
|
|
expect(result.id).toEqual('id');
|
|
});
|
|
|
|
p.id = 'id2';
|
|
|
|
expect(scene).toPickAndCall(function(result) {
|
|
expect(result.primitive).toEqual(p);
|
|
expect(result.id).toEqual('id2');
|
|
});
|
|
});
|
|
|
|
it('is not picked (show === false)', function() {
|
|
polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}],
|
|
show : false
|
|
});
|
|
scene.primitives.add(polylines);
|
|
|
|
expect(scene).notToPick();
|
|
});
|
|
|
|
it('is not picked (alpha === 0.0)', function() {
|
|
var p = polylines.add({
|
|
positions : [{
|
|
x : 0.0,
|
|
y : -1000000.0,
|
|
z : 0.0
|
|
}, {
|
|
x : 0.0,
|
|
y : 1000000.0,
|
|
z : 0.0
|
|
}]
|
|
});
|
|
p.material.uniforms.color.alpha = 0.0;
|
|
scene.primitives.add(polylines);
|
|
|
|
expect(scene).notToPick();
|
|
});
|
|
|
|
it('does not equal undefined', function() {
|
|
var polyline = polylines.add();
|
|
expect(polyline).not.toEqual(undefined);
|
|
});
|
|
|
|
it('throws when accessing without an index', function() {
|
|
expect(function() {
|
|
polylines.get();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it('computes bounding sphere in 3D', function() {
|
|
var one = polylines.add({
|
|
positions : [{
|
|
x : 1.0,
|
|
y : 2.0,
|
|
z : 3.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
var two = polylines.add({
|
|
positions : [{
|
|
x : 4.0,
|
|
y : 5.0,
|
|
z : 6.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
var three = polylines.add({
|
|
positions : [{
|
|
x : 7.0,
|
|
y : 8.0,
|
|
z : 9.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
|
|
scene.primitives.add(polylines);
|
|
scene.render();
|
|
var boundingVolume = scene.frameState.commandList[0].boundingVolume;
|
|
|
|
expect(one._boundingVolume).toEqual(BoundingSphere.fromPoints(one.positions));
|
|
expect(two._boundingVolume).toEqual(BoundingSphere.fromPoints(two.positions));
|
|
expect(three._boundingVolume).toEqual(BoundingSphere.fromPoints(three.positions));
|
|
expect(boundingVolume).toEqual(BoundingSphere.union(BoundingSphere.union(one._boundingVolume, two._boundingVolume), three._boundingVolume));
|
|
});
|
|
|
|
function testBoundingSphere() {
|
|
var projection = scene.mapProjection;
|
|
var ellipsoid = projection.ellipsoid;
|
|
|
|
var one = polylines.add({
|
|
positions : Cartesian3.fromDegreesArray([
|
|
-50.0, -50.0,
|
|
50.0, -50.0
|
|
])
|
|
});
|
|
var two = polylines.add({
|
|
positions : Cartesian3.fromDegreesArray([
|
|
50.0, 50.0,
|
|
-50.0, 50.0
|
|
])
|
|
});
|
|
|
|
scene.primitives.add(polylines);
|
|
scene.render();
|
|
var boundingVolume = scene.frameState.commandList[0].boundingVolume;
|
|
|
|
var positions = one.positions;
|
|
var projectedPositions = [];
|
|
var i;
|
|
for (i = 0; i < positions.length; ++i) {
|
|
projectedPositions.push(projection.project(ellipsoid.cartesianToCartographic(positions[i])));
|
|
}
|
|
var bs = BoundingSphere.fromPoints(projectedPositions);
|
|
bs.center = new Cartesian3(bs.center.z, bs.center.x, bs.center.y);
|
|
expect(one._boundingVolume2D.center).toEqualEpsilon(bs.center, CesiumMath.EPSILON8);
|
|
expect(one._boundingVolume2D.radius).toEqualEpsilon(bs.radius, CesiumMath.EPSILON12);
|
|
|
|
positions = two.positions;
|
|
projectedPositions = [];
|
|
for (i = 0; i < positions.length; ++i) {
|
|
projectedPositions.push(projection.project(ellipsoid.cartesianToCartographic(positions[i])));
|
|
}
|
|
bs = BoundingSphere.fromPoints(projectedPositions);
|
|
bs.center = new Cartesian3(bs.center.z, bs.center.x, bs.center.y);
|
|
expect(two._boundingVolume2D.center).toEqualEpsilon(bs.center, CesiumMath.EPSILON8);
|
|
expect(two._boundingVolume2D.radius).toEqualEpsilon(bs.radius, CesiumMath.EPSILON12);
|
|
|
|
var expected = BoundingSphere.union(one._boundingVolume2D, two._boundingVolume2D);
|
|
expect(boundingVolume.center).toEqualEpsilon(expected.center, CesiumMath.EPSILON8);
|
|
expect(boundingVolume.radius).toEqualEpsilon(expected.radius, CesiumMath.EPSILON8);
|
|
}
|
|
|
|
it('computes bounding sphere in Columbus view', function() {
|
|
scene.mode = SceneMode.COLUMBUS_VIEW;
|
|
testBoundingSphere();
|
|
});
|
|
|
|
it('computes bounding sphere in 2D', function() {
|
|
scene.mode = SceneMode.SCENE2D;
|
|
testBoundingSphere();
|
|
});
|
|
|
|
it('computes optimized bounding volumes per material', function() {
|
|
var one = polylines.add({
|
|
positions : [{
|
|
x : 1.0,
|
|
y : 2.0,
|
|
z : 3.0
|
|
},{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
}]
|
|
});
|
|
one.material.uniforms.color = new Color(1.0, 0.0, 0.0, 1.0);
|
|
|
|
var two = polylines.add({
|
|
positions : [{
|
|
x : 2.0,
|
|
y : 3.0,
|
|
z : 4.0
|
|
},{
|
|
x : 4.0,
|
|
y : 5.0,
|
|
z : 6.0
|
|
}]
|
|
});
|
|
two.material.uniforms.color = new Color(0.0, 1.0, 0.0, 1.0);
|
|
|
|
scene.primitives.add(polylines);
|
|
scene.render();
|
|
|
|
expect(scene.frameState.commandList[0].boundingVolume).toEqual(one._boundingVolume);
|
|
expect(scene.frameState.commandList[1].boundingVolume).toEqual(two._boundingVolume);
|
|
});
|
|
|
|
it('isDestroyed', function() {
|
|
expect(polylines.isDestroyed()).toEqual(false);
|
|
polylines.destroy();
|
|
expect(polylines.isDestroyed()).toEqual(true);
|
|
});
|
|
}, 'WebGL');
|