You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
276 lines
10 KiB
JavaScript
276 lines
10 KiB
JavaScript
import { BoundingSphere } from "../../Source/Cesium.js";
|
|
import { Cartesian3 } from "../../Source/Cesium.js";
|
|
import { defined } from "../../Source/Cesium.js";
|
|
import { JulianDate } from "../../Source/Cesium.js";
|
|
import { Matrix4 } from "../../Source/Cesium.js";
|
|
import { Resource } from "../../Source/Cesium.js";
|
|
import { BoundingSphereState } from "../../Source/Cesium.js";
|
|
import { ConstantPositionProperty } from "../../Source/Cesium.js";
|
|
import { ConstantProperty } from "../../Source/Cesium.js";
|
|
import { EntityCollection } from "../../Source/Cesium.js";
|
|
import { Cesium3DTilesetGraphics } from "../../Source/Cesium.js";
|
|
import { Cesium3DTilesetVisualizer } from "../../Source/Cesium.js";
|
|
import { Globe } from "../../Source/Cesium.js";
|
|
import createScene from "../createScene.js";
|
|
import pollToPromise from "../pollToPromise.js";
|
|
|
|
describe(
|
|
"DataSources/Cesium3DTilesetVisualizer",
|
|
function () {
|
|
var tilesetUrl = "./Data/Cesium3DTiles/Batched/BatchedColors/tileset.json";
|
|
|
|
var scene;
|
|
var visualizer;
|
|
|
|
beforeAll(function () {
|
|
scene = createScene();
|
|
scene.globe = new Globe();
|
|
});
|
|
|
|
afterAll(function () {
|
|
scene.destroyForSpecs();
|
|
});
|
|
|
|
afterEach(function () {
|
|
if (defined(visualizer)) {
|
|
visualizer = visualizer.destroy();
|
|
}
|
|
});
|
|
|
|
it("constructor throws if no scene is passed.", function () {
|
|
expect(function () {
|
|
return new Cesium3DTilesetVisualizer();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("update throws if no time specified.", function () {
|
|
var entityCollection = new EntityCollection();
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
expect(function () {
|
|
visualizer.update();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("isDestroy returns false until destroyed.", function () {
|
|
var entityCollection = new EntityCollection();
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
expect(visualizer.isDestroyed()).toEqual(false);
|
|
visualizer.destroy();
|
|
expect(visualizer.isDestroyed()).toEqual(true);
|
|
visualizer = undefined;
|
|
});
|
|
|
|
it("removes the listener from the entity collection when destroyed", function () {
|
|
var entityCollection = new EntityCollection();
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
expect(entityCollection.collectionChanged.numberOfListeners).toEqual(1);
|
|
visualizer.destroy();
|
|
expect(entityCollection.collectionChanged.numberOfListeners).toEqual(0);
|
|
visualizer = undefined;
|
|
});
|
|
|
|
it("object with no model does not create one.", function () {
|
|
var entityCollection = new EntityCollection();
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
|
|
var testObject = entityCollection.getOrCreateEntity("test");
|
|
testObject.position = new ConstantProperty(
|
|
new Cartesian3(1234, 5678, 9101112)
|
|
);
|
|
visualizer.update(JulianDate.now());
|
|
expect(scene.primitives.length).toEqual(0);
|
|
});
|
|
|
|
it("object with no position does not set modelMatrix.", function () {
|
|
var entityCollection = new EntityCollection();
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
|
|
var testObject = entityCollection.getOrCreateEntity("test");
|
|
var tileset = (testObject.tileset = new Cesium3DTilesetGraphics());
|
|
tileset.uri = new ConstantProperty(tilesetUrl);
|
|
|
|
visualizer.update(JulianDate.now());
|
|
|
|
var tilesetPrimitive = scene.primitives.get(0);
|
|
expect(tilesetPrimitive.modelMatrix).toEqual(Matrix4.IDENTITY);
|
|
});
|
|
|
|
it("A Cesium3DTilesetGraphics causes a primitive to be created and updated.", function () {
|
|
var time = JulianDate.now();
|
|
var entityCollection = new EntityCollection();
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
|
|
var tileset = new Cesium3DTilesetGraphics();
|
|
tileset.show = new ConstantProperty(true);
|
|
tileset.maximumScreenSpaceError = new ConstantProperty(24.0);
|
|
tileset.uri = new ConstantProperty(tilesetUrl);
|
|
|
|
var testObject = entityCollection.getOrCreateEntity("test");
|
|
testObject.position = new ConstantPositionProperty(
|
|
Cartesian3.fromDegrees(1, 2, 3)
|
|
);
|
|
testObject.tileset = tileset;
|
|
|
|
visualizer.update(time);
|
|
|
|
expect(scene.primitives.length).toEqual(1);
|
|
|
|
var primitive = scene.primitives.get(0);
|
|
visualizer.update(time);
|
|
expect(primitive.show).toEqual(true);
|
|
expect(primitive.maximumScreenSpaceError).toEqual(24.0);
|
|
});
|
|
|
|
it("A Cesium3DTilesetGraphics with a Resource causes a primitive to be created.", function () {
|
|
var time = JulianDate.now();
|
|
var entityCollection = new EntityCollection();
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
|
|
var tileset = new Cesium3DTilesetGraphics();
|
|
tileset.show = new ConstantProperty(true);
|
|
tileset.uri = new ConstantProperty(
|
|
new Resource({
|
|
url: tilesetUrl,
|
|
})
|
|
);
|
|
|
|
var testObject = entityCollection.getOrCreateEntity("test");
|
|
testObject.position = new ConstantPositionProperty(
|
|
Cartesian3.fromDegrees(1, 2, 3)
|
|
);
|
|
testObject.tileset = tileset;
|
|
|
|
visualizer.update(time);
|
|
|
|
expect(scene.primitives.length).toEqual(1);
|
|
});
|
|
|
|
it("removing removes primitives.", function () {
|
|
var entityCollection = new EntityCollection();
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
|
|
var tileset = new Cesium3DTilesetGraphics();
|
|
tileset.uri = new ConstantProperty(tilesetUrl);
|
|
|
|
var time = JulianDate.now();
|
|
var testObject = entityCollection.getOrCreateEntity("test");
|
|
testObject.position = new ConstantProperty(
|
|
new Cartesian3(5678, 1234, 1101112)
|
|
);
|
|
testObject.tileset = tileset;
|
|
visualizer.update(time);
|
|
|
|
expect(scene.primitives.length).toEqual(1);
|
|
visualizer.update(time);
|
|
entityCollection.removeAll();
|
|
visualizer.update(time);
|
|
expect(scene.primitives.length).toEqual(0);
|
|
});
|
|
|
|
it("Visualizer sets id property.", function () {
|
|
var entityCollection = new EntityCollection();
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
|
|
var time = JulianDate.now();
|
|
var testObject = entityCollection.getOrCreateEntity("test");
|
|
var tileset = new Cesium3DTilesetGraphics();
|
|
testObject.tileset = tileset;
|
|
|
|
testObject.position = new ConstantProperty(
|
|
new Cartesian3(5678, 1234, 1101112)
|
|
);
|
|
tileset.uri = new ConstantProperty(tilesetUrl);
|
|
visualizer.update(time);
|
|
|
|
var tilesetPrimitive = scene.primitives.get(0);
|
|
expect(tilesetPrimitive.id).toEqual(testObject);
|
|
});
|
|
|
|
it("Computes bounding sphere.", function () {
|
|
var entityCollection = new EntityCollection();
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
|
|
var time = JulianDate.now();
|
|
var testObject = entityCollection.getOrCreateEntity("test");
|
|
var tileset = new Cesium3DTilesetGraphics();
|
|
testObject.tileset = tileset;
|
|
|
|
testObject.position = new ConstantProperty(
|
|
new Cartesian3(5678, 1234, 1101112)
|
|
);
|
|
tileset.uri = new ConstantProperty(tilesetUrl);
|
|
visualizer.update(time);
|
|
|
|
var tilesetPrimitive = scene.primitives.get(0);
|
|
var result = new BoundingSphere();
|
|
var state = visualizer.getBoundingSphere(testObject, result);
|
|
expect(state).toBe(BoundingSphereState.PENDING);
|
|
|
|
return pollToPromise(function () {
|
|
scene.render();
|
|
state = visualizer.getBoundingSphere(testObject, result);
|
|
return state !== BoundingSphereState.PENDING;
|
|
}).then(function () {
|
|
expect(state).toBe(BoundingSphereState.DONE);
|
|
expect(result).toEqual(tilesetPrimitive.boundingSphere);
|
|
});
|
|
});
|
|
|
|
it("Fails bounding sphere for entity without tileset.", function () {
|
|
var entityCollection = new EntityCollection();
|
|
var testObject = entityCollection.getOrCreateEntity("test");
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
visualizer.update(JulianDate.now());
|
|
var result = new BoundingSphere();
|
|
var state = visualizer.getBoundingSphere(testObject, result);
|
|
expect(state).toBe(BoundingSphereState.FAILED);
|
|
});
|
|
|
|
it("Fails bounding sphere when model fails to load.", function () {
|
|
var entityCollection = new EntityCollection();
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
|
|
var time = JulianDate.now();
|
|
var testObject = entityCollection.getOrCreateEntity("test");
|
|
var tileset = new Cesium3DTilesetGraphics();
|
|
testObject.tileset = tileset;
|
|
|
|
testObject.position = new ConstantProperty(
|
|
new Cartesian3(5678, 1234, 1101112)
|
|
);
|
|
tileset.uri = new ConstantProperty("/path/to/incorrect/file");
|
|
visualizer.update(time);
|
|
|
|
var result = new BoundingSphere();
|
|
var state = visualizer.getBoundingSphere(testObject, result);
|
|
expect(state).toBe(BoundingSphereState.PENDING);
|
|
return pollToPromise(function () {
|
|
scene.render();
|
|
state = visualizer.getBoundingSphere(testObject, result);
|
|
return state !== BoundingSphereState.PENDING;
|
|
}).then(function () {
|
|
expect(state).toBe(BoundingSphereState.FAILED);
|
|
});
|
|
});
|
|
|
|
it("Compute bounding sphere throws without entity.", function () {
|
|
var entityCollection = new EntityCollection();
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
var result = new BoundingSphere();
|
|
expect(function () {
|
|
visualizer.getBoundingSphere(undefined, result);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("Compute bounding sphere throws without result.", function () {
|
|
var entityCollection = new EntityCollection();
|
|
var testObject = entityCollection.getOrCreateEntity("test");
|
|
visualizer = new Cesium3DTilesetVisualizer(scene, entityCollection);
|
|
expect(function () {
|
|
visualizer.getBoundingSphere(testObject, undefined);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
},
|
|
"WebGL"
|
|
);
|