DSDSWeb/static/js/Cesium-1.53/Specs/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspectorViewM...

317 lines
12 KiB
JavaScript
Raw Normal View History

2024-07-11 18:02:47 +08:00
defineSuite([
'Widgets/Cesium3DTilesInspector/Cesium3DTilesInspectorViewModel',
'Scene/Cesium3DTileset',
'Scene/Cesium3DTileStyle',
'Scene/Globe',
'Specs/createScene',
'ThirdParty/when'
], function(
Cesium3DTilesInspectorViewModel,
Cesium3DTileset,
Cesium3DTileStyle,
Globe,
createScene,
when) {
'use strict';
// Parent tile with content and four child tiles with content
var tilesetUrl = './Data/Cesium3DTiles/Tilesets/Tileset/tileset.json';
var scene;
var viewModel;
var performanceContainer = document.createElement('div');
beforeAll(function() {
scene = createScene();
});
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 Cesium3DTilesInspectorViewModel(scene, performanceContainer);
expect(viewModel._scene).toBe(scene);
expect(viewModel.isDestroyed()).toEqual(false);
viewModel.destroy();
expect(viewModel.isDestroyed()).toEqual(true);
});
it('throws if scene is undefined', function() {
expect(function() {
return new Cesium3DTilesInspectorViewModel();
}).toThrowDeveloperError();
});
it('throws if performanceContainer is undefined', function() {
expect(function() {
return new Cesium3DTilesInspectorViewModel(scene);
}).toThrowDeveloperError();
});
describe('tileset options', function() {
it('show properties', function() {
viewModel = new Cesium3DTilesInspectorViewModel(scene, performanceContainer);
var tileset = new Cesium3DTileset({
url : tilesetUrl
});
viewModel.tileset = tileset;
var done = when.defer();
tileset.readyPromise.then(function() {
expect(viewModel.properties.indexOf('id') !== -1).toBe(true);
expect(viewModel.properties.indexOf('Longitude') !== -1).toBe(true);
expect(viewModel.properties.indexOf('Latitude') !== -1).toBe(true);
expect(viewModel.properties.indexOf('Height') !== -1).toBe(true);
viewModel.destroy();
done.resolve();
});
return done;
});
});
describe('display options', function() {
beforeAll(function() {
viewModel = new Cesium3DTilesInspectorViewModel(scene, performanceContainer);
var tileset = new Cesium3DTileset({
url : tilesetUrl
});
viewModel.tileset = tileset;
return tileset.readyPromise;
});
afterAll(function() {
viewModel.destroy();
});
it('colorize', function() {
viewModel.colorize = true;
expect(viewModel.tileset.debugColorizeTiles).toBe(true);
viewModel.colorize = false;
expect(viewModel.tileset.debugColorizeTiles).toBe(false);
});
it('wireframe', function() {
viewModel.wireframe = true;
expect(viewModel.tileset.debugWireframe).toBe(true);
viewModel.wireframe = false;
expect(viewModel.tileset.debugWireframe).toBe(false);
});
it('showBoundingVolumes', function() {
viewModel.showBoundingVolumes = true;
expect(viewModel.tileset.debugShowBoundingVolume).toBe(true);
viewModel.showBoundingVolumes = false;
expect(viewModel.tileset.debugShowBoundingVolume).toBe(false);
});
it('showContentVolumes', function() {
viewModel.showContentBoundingVolumes = true;
expect(viewModel.tileset.debugShowContentBoundingVolume).toBe(true);
viewModel.showContentBoundingVolumes = false;
expect(viewModel.tileset.debugShowContentBoundingVolume).toBe(false);
});
it('showRequestVolumes', function() {
viewModel.showRequestVolumes = true;
expect(viewModel.tileset.debugShowViewerRequestVolume).toBe(true);
viewModel.showRequestVolumes = false;
expect(viewModel.tileset.debugShowViewerRequestVolume).toBe(false);
});
it('showOnlyPickedTileDebugLabel', function() {
viewModel.showOnlyPickedTileDebugLabel = true;
expect(viewModel.tileset.debugPickedTileLabelOnly).toBe(true);
viewModel.showOnlyPickedTileDebugLabel = false;
expect(viewModel.tileset.debugPickedTileLabelOnly).toBe(false);
});
it('showGeometricError', function() {
viewModel.showGeometricError = true;
expect(viewModel.tileset.debugShowGeometricError).toBe(true);
viewModel.showGeometricError = false;
expect(viewModel.tileset.debugShowGeometricError).toBe(false);
});
it('showRenderingStatistics', function() {
viewModel.showRenderingStatistics = true;
expect(viewModel.tileset.debugShowRenderingStatistics).toBe(true);
viewModel.showRenderingStatistics = false;
expect(viewModel.tileset.debugShowRenderingStatistics).toBe(false);
});
it('showMemoryUsage', function() {
viewModel.showMemoryUsage = true;
expect(viewModel.tileset.debugShowMemoryUsage).toBe(true);
viewModel.showMemoryUsage = false;
expect(viewModel.tileset.debugShowMemoryUsage).toBe(false);
});
it('showUrl', function() {
viewModel.showUrl = true;
expect(viewModel.tileset.debugShowUrl).toBe(true);
viewModel.showUrl = false;
expect(viewModel.tileset.debugShowUrl).toBe(false);
});
it('pointCloudShading', function() {
viewModel.pointCloudShading = true;
expect(viewModel.tileset.pointCloudShading.attenuation).toBe(true);
viewModel.pointCloudShading = false;
expect(viewModel.tileset.pointCloudShading.attenuation).toBe(false);
});
it('geometricErrorScale', function() {
viewModel.geometricErrorScale = 1.0;
expect(viewModel.tileset.pointCloudShading.geometricErrorScale).toBe(1.0);
viewModel.geometricErrorScale = 0.0;
expect(viewModel.tileset.pointCloudShading.geometricErrorScale).toBe(0.0);
});
it('maximumAttenuation', function() {
viewModel.maximumAttenuation = 1.0;
expect(viewModel.tileset.pointCloudShading.maximumAttenuation).toBe(1.0);
viewModel.maximumAttenuation = 0.0;
expect(viewModel.tileset.pointCloudShading.maximumAttenuation).not.toBeDefined();
});
it('baseResolution', function() {
viewModel.baseResolution = 1.0;
expect(viewModel.tileset.pointCloudShading.baseResolution).toBe(1.0);
viewModel.baseResolution = 0.0;
expect(viewModel.tileset.pointCloudShading.baseResolution).not.toBeDefined();
});
it('eyeDomeLighting', function() {
viewModel.eyeDomeLighting = true;
expect(viewModel.tileset.pointCloudShading.eyeDomeLighting).toBe(true);
viewModel.eyeDomeLighting = false;
expect(viewModel.tileset.pointCloudShading.eyeDomeLighting).toBe(false);
});
it('eyeDomeLightingStrength', function() {
viewModel.eyeDomeLightingStrength = 1.0;
expect(viewModel.tileset.pointCloudShading.eyeDomeLightingStrength).toBe(1.0);
viewModel.eyeDomeLightingStrength = 0.0;
expect(viewModel.tileset.pointCloudShading.eyeDomeLightingStrength).toBe(0.0);
});
it('eyeDomeLightingRadius', function() {
viewModel.eyeDomeLightingRadius = 1.0;
expect(viewModel.tileset.pointCloudShading.eyeDomeLightingRadius).toBe(1.0);
viewModel.eyeDomeLightingRadius = 0.0;
expect(viewModel.tileset.pointCloudShading.eyeDomeLightingRadius).toBe(0.0);
});
});
describe('update options', function() {
beforeAll(function() {
viewModel = new Cesium3DTilesInspectorViewModel(scene, performanceContainer);
viewModel.tileset = new Cesium3DTileset({
url : tilesetUrl
});
return viewModel.tileset.readyPromise;
});
afterAll(function() {
viewModel.destroy();
});
it('freeze frame', function() {
viewModel.freezeFrame = false;
expect(viewModel.tileset.debugFreezeFrame).toBe(false);
viewModel.freezeFrame = true;
expect(viewModel.tileset.debugFreezeFrame).toBe(true);
});
it('maximum screen space error', function() {
viewModel.dynamicScreenSpaceError = false;
viewModel.maximumScreenSpaceError = 10;
expect(viewModel.tileset.dynamicScreenSpaceError).toBe(false);
expect(viewModel.tileset.maximumScreenSpaceError).toBe(10);
});
it('dynamic screen space error', function() {
viewModel.dynamicScreenSpaceError = true;
viewModel.dynamicScreenSpaceErrorFactor = 2;
viewModel.dynamicScreenSpaceErrorDensity = 0.1;
expect(viewModel.tileset.dynamicScreenSpaceError).toBe(true);
expect(viewModel.tileset.dynamicScreenSpaceErrorFactor).toBe(2);
expect(viewModel.tileset.dynamicScreenSpaceErrorDensity).toBe(0.1);
});
});
describe('style options', function() {
var style;
beforeAll(function() {
style = new Cesium3DTileStyle({
color : {
conditions : [
['${Height} >= 83', "color('purple', 0.5)"],
['${Height} >= 80', "color('red')"],
['${Height} >= 70', "color('orange')"],
['${Height} >= 12', "color('yellow')"],
['${Height} >= 7', "color('lime')"],
['${Height} >= 1', "color('cyan')"],
['true', "color('blue')"]
]
},
meta : {
description : "'Building id ${id} has height ${Height}.'"
}
});
viewModel = new Cesium3DTilesInspectorViewModel(scene, performanceContainer);
viewModel.tileset = new Cesium3DTileset({
url : tilesetUrl
});
return viewModel.tileset.readyPromise;
});
afterAll(function() {
viewModel.destroy();
});
it('loads tileset style', function() {
viewModel.tileset.style = style;
viewModel._update();
expect(JSON.stringify(style.style)).toBe(JSON.stringify(JSON.parse(viewModel.styleString)));
});
it('does not throw on invalid syntax', function() {
expect(function() {
viewModel.styleString = 'invalid';
}).not.toThrowError();
});
it('recompiles style', function() {
viewModel._style = undefined;
viewModel.tileset.style = style;
viewModel._update();
var s = JSON.parse(viewModel.styleString);
s.color = "color('red')";
viewModel.styleString = JSON.stringify(s);
viewModel.compileStyle();
viewModel._update();
expect(viewModel.tileset.style.style.color).toBe("color('red')");
expect(viewModel.tileset.style.style.meta.description).toBe("'Building id ${id} has height ${Height}.'");
});
it('does not throw on invalid value', function() {
expect(function() {
viewModel.styleString = '{ "color": "color(1)" }';
}).not.toThrowError();
});
});
}, 'WebGL');