245 lines
8.6 KiB
JavaScript
245 lines
8.6 KiB
JavaScript
|
|
defineSuite([
|
||
|
|
'Widgets/CesiumInspector/CesiumInspectorViewModel',
|
||
|
|
'Core/defined',
|
||
|
|
'Core/GeometryInstance',
|
||
|
|
'Core/Math',
|
||
|
|
'Core/Rectangle',
|
||
|
|
'Core/RectangleGeometry',
|
||
|
|
'Core/WebMercatorTilingScheme',
|
||
|
|
'Scene/EllipsoidSurfaceAppearance',
|
||
|
|
'Scene/Globe',
|
||
|
|
'Scene/GlobeSurfaceTile',
|
||
|
|
'Scene/Primitive',
|
||
|
|
'Scene/QuadtreeTile',
|
||
|
|
'Specs/createScene'
|
||
|
|
], function(
|
||
|
|
CesiumInspectorViewModel,
|
||
|
|
defined,
|
||
|
|
GeometryInstance,
|
||
|
|
CesiumMath,
|
||
|
|
Rectangle,
|
||
|
|
RectangleGeometry,
|
||
|
|
WebMercatorTilingScheme,
|
||
|
|
EllipsoidSurfaceAppearance,
|
||
|
|
Globe,
|
||
|
|
GlobeSurfaceTile,
|
||
|
|
Primitive,
|
||
|
|
QuadtreeTile,
|
||
|
|
createScene) {
|
||
|
|
'use strict';
|
||
|
|
|
||
|
|
var scene;
|
||
|
|
var performanceContainer;
|
||
|
|
|
||
|
|
function createRectangle(rectangle, rotation) {
|
||
|
|
return new Primitive({
|
||
|
|
geometryInstances: new GeometryInstance({
|
||
|
|
geometry: new RectangleGeometry({
|
||
|
|
rectangle: rectangle,
|
||
|
|
vertexFormat: EllipsoidSurfaceAppearance.VERTEX_FORMAT,
|
||
|
|
rotation: rotation
|
||
|
|
})
|
||
|
|
}),
|
||
|
|
appearance: new EllipsoidSurfaceAppearance({
|
||
|
|
aboveGround: false
|
||
|
|
})
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
beforeAll(function() {
|
||
|
|
scene = createScene();
|
||
|
|
performanceContainer = document.createElement('div');
|
||
|
|
});
|
||
|
|
|
||
|
|
afterAll(function() {
|
||
|
|
scene.destroyForSpecs();
|
||
|
|
});
|
||
|
|
|
||
|
|
beforeEach(function() {
|
||
|
|
scene.globe = new Globe();
|
||
|
|
scene.initializeFrame();
|
||
|
|
});
|
||
|
|
|
||
|
|
afterEach(function() {
|
||
|
|
scene.primitives.removeAll();
|
||
|
|
});
|
||
|
|
|
||
|
|
it('can create and destroy', function() {
|
||
|
|
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
|
||
|
|
expect(viewModel.scene).toBe(scene);
|
||
|
|
expect(viewModel.performanceContainer).toBe(performanceContainer);
|
||
|
|
expect(viewModel.isDestroyed()).toEqual(false);
|
||
|
|
viewModel.destroy();
|
||
|
|
expect(viewModel.isDestroyed()).toEqual(true);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('throws if scene is undefined', function() {
|
||
|
|
expect(function() {
|
||
|
|
return new CesiumInspectorViewModel();
|
||
|
|
}).toThrowDeveloperError();
|
||
|
|
});
|
||
|
|
|
||
|
|
it('throws if performanceContainer is undefined', function() {
|
||
|
|
expect(function() {
|
||
|
|
return new CesiumInspectorViewModel(scene);
|
||
|
|
}).toThrowDeveloperError();
|
||
|
|
});
|
||
|
|
|
||
|
|
it('show frustums', function() {
|
||
|
|
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
|
||
|
|
viewModel.frustums = true;
|
||
|
|
expect(viewModel.scene.debugShowFrustums).toBe(true);
|
||
|
|
|
||
|
|
scene.render();
|
||
|
|
|
||
|
|
viewModel.frustums = false;
|
||
|
|
expect(viewModel.scene.debugShowFrustums).toBe(false);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('show performance', function() {
|
||
|
|
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
|
||
|
|
viewModel.performance = true;
|
||
|
|
scene.render();
|
||
|
|
expect(performanceContainer.innerHTML).not.toEqual('');
|
||
|
|
|
||
|
|
viewModel.performance = false;
|
||
|
|
scene.render();
|
||
|
|
expect(performanceContainer.innerHTML).toEqual('');
|
||
|
|
});
|
||
|
|
|
||
|
|
it ('primitive bounding sphere', function() {
|
||
|
|
var p = scene.primitives.add(createRectangle(new Rectangle(
|
||
|
|
CesiumMath.toRadians(-110.0),
|
||
|
|
CesiumMath.toRadians(0.0),
|
||
|
|
CesiumMath.toRadians(-90.0),
|
||
|
|
CesiumMath.toRadians(20.0)),
|
||
|
|
CesiumMath.toRadians(45)));
|
||
|
|
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
|
||
|
|
scene.render();
|
||
|
|
viewModel.primitive = p;
|
||
|
|
viewModel.primitiveBoundingSphere = true;
|
||
|
|
expect(p.debugShowBoundingVolume).toEqual(true);
|
||
|
|
|
||
|
|
viewModel.primitiveBoundingSphere = false;
|
||
|
|
scene.render();
|
||
|
|
expect(p.debugShowBoundingVolume).toEqual(false);
|
||
|
|
});
|
||
|
|
|
||
|
|
it ('primitive filter', function() {
|
||
|
|
var p = scene.primitives.add(createRectangle(new Rectangle(
|
||
|
|
CesiumMath.toRadians(-110.0),
|
||
|
|
CesiumMath.toRadians(0.0),
|
||
|
|
CesiumMath.toRadians(-90.0),
|
||
|
|
CesiumMath.toRadians(20.0)),
|
||
|
|
CesiumMath.toRadians(45)));
|
||
|
|
|
||
|
|
var q = scene.primitives.add(createRectangle(new Rectangle(
|
||
|
|
CesiumMath.toRadians(-10.0),
|
||
|
|
CesiumMath.toRadians(0.0),
|
||
|
|
CesiumMath.toRadians(-9.0),
|
||
|
|
CesiumMath.toRadians(20.0))));
|
||
|
|
|
||
|
|
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
|
||
|
|
scene.render();
|
||
|
|
viewModel.primitive = p;
|
||
|
|
viewModel.filterPrimitive = true;
|
||
|
|
expect(defined(scene.debugCommandFilter)).toEqual(true);
|
||
|
|
expect(scene.debugCommandFilter({owner: p})).toEqual(true);
|
||
|
|
expect(scene.debugCommandFilter({owner: q})).toEqual(false);
|
||
|
|
|
||
|
|
viewModel.filterPrimitive = false;
|
||
|
|
expect(defined(scene.debugCommandFilter)).toEqual(false);
|
||
|
|
});
|
||
|
|
|
||
|
|
it ('primitive reference frame', function() {
|
||
|
|
var p = scene.primitives.add(createRectangle(new Rectangle(
|
||
|
|
CesiumMath.toRadians(-110.0),
|
||
|
|
CesiumMath.toRadians(0.0),
|
||
|
|
CesiumMath.toRadians(-90.0),
|
||
|
|
CesiumMath.toRadians(20.0)),
|
||
|
|
CesiumMath.toRadians(45)));
|
||
|
|
|
||
|
|
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
|
||
|
|
scene.render();
|
||
|
|
viewModel.primitive = p;
|
||
|
|
viewModel.primitiveReferenceFrame = true;
|
||
|
|
expect(scene.primitives.length).toEqual(2);
|
||
|
|
|
||
|
|
viewModel.primitiveReferenceFrame = false;
|
||
|
|
scene.render();
|
||
|
|
expect(scene.primitives.length).toEqual(1);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('show wireframe', function() {
|
||
|
|
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
|
||
|
|
viewModel.wireframe = true;
|
||
|
|
expect(viewModel.scene.globe._surface.tileProvider._debug.wireframe).toBe(true);
|
||
|
|
|
||
|
|
viewModel.wireframe = false;
|
||
|
|
expect(viewModel.scene.globe._surface.tileProvider._debug.wireframe).toBe(false);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('suspend updates', function() {
|
||
|
|
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
|
||
|
|
viewModel.suspendUpdates = true;
|
||
|
|
expect(viewModel.scene.globe._surface._debug.suspendLodUpdate).toBe(true);
|
||
|
|
|
||
|
|
viewModel.suspendUpdates = false;
|
||
|
|
expect(viewModel.scene.globe._surface._debug.suspendLodUpdate).toBe(false);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('show tile coords', function() {
|
||
|
|
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
|
||
|
|
expect(viewModel.scene.imageryLayers.length).toBe(0);
|
||
|
|
|
||
|
|
viewModel.tileCoordinates = true;
|
||
|
|
expect(viewModel.scene.imageryLayers.length).toBe(1);
|
||
|
|
|
||
|
|
viewModel.tileCoordinates = false;
|
||
|
|
expect(viewModel.scene.imageryLayers.length).toBe(0);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('show tile bounding sphere', function() {
|
||
|
|
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
|
||
|
|
var tile = new QuadtreeTile({tilingScheme : new WebMercatorTilingScheme(), x : 0, y : 0, level : 0});
|
||
|
|
tile.data = new GlobeSurfaceTile();
|
||
|
|
viewModel.tile = tile;
|
||
|
|
|
||
|
|
viewModel.tileBoundingSphere = true;
|
||
|
|
expect(viewModel.scene.globe._surface.tileProvider._debug.boundingSphereTile).toBe(tile);
|
||
|
|
|
||
|
|
viewModel.tileBoundingSphere = false;
|
||
|
|
expect(viewModel.scene.globe._surface.tileProvider._debug.boundingSphereTile).toBe(undefined);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('filter tile', function() {
|
||
|
|
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
|
||
|
|
var tile = new QuadtreeTile({tilingScheme : new WebMercatorTilingScheme(), x : 0, y : 0, level : 0});
|
||
|
|
tile.data = new GlobeSurfaceTile();
|
||
|
|
tile.renderable = true;
|
||
|
|
viewModel.tile = tile;
|
||
|
|
|
||
|
|
viewModel.filterTile = true;
|
||
|
|
expect(viewModel.scene.globe._surface._tilesToRender[0]).toBe(tile);
|
||
|
|
expect(viewModel.suspendUpdates).toBe(true);
|
||
|
|
|
||
|
|
viewModel.filterTile = false;
|
||
|
|
expect(viewModel.suspendUpdates).toBe(false);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('does not try to render a non-renderable tile', function() {
|
||
|
|
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
|
||
|
|
var tile = new QuadtreeTile({tilingScheme : new WebMercatorTilingScheme(), x : 0, y : 0, level : 0});
|
||
|
|
tile.data = new GlobeSurfaceTile();
|
||
|
|
viewModel.tile = tile;
|
||
|
|
|
||
|
|
viewModel.filterTile = true;
|
||
|
|
expect(viewModel.scene.globe._surface._tilesToRender.length).toBe(0);
|
||
|
|
expect(viewModel.suspendUpdates).toBe(true);
|
||
|
|
|
||
|
|
viewModel.filterTile = false;
|
||
|
|
expect(viewModel.suspendUpdates).toBe(false);
|
||
|
|
});
|
||
|
|
|
||
|
|
}, 'WebGL');
|