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.
Cesium-Prequel/Specs/createDynamicGeometryUpdate...

167 lines
5.3 KiB
JavaScript

import { BoundingSphere } from "../Source/Cesium.js";
import { JulianDate } from "../Source/Cesium.js";
import { Math as CesiumMath } from "../Source/Cesium.js";
import { BoundingSphereState } from "../Source/Cesium.js";
import { EllipsoidGeometryUpdater } from "../Source/Cesium.js";
import { PrimitiveCollection } from "../Source/Cesium.js";
import createDynamicProperty from "./createDynamicProperty.js";
import pollToPromise from "./pollToPromise.js";
function createDynamicGeometryUpdaterSpecs(
Updater,
geometryPropertyName,
createDynamicEntity,
getScene
) {
var time = JulianDate.now();
it("dynamic updater sets properties", function () {
if (Updater === EllipsoidGeometryUpdater) {
// Dynamic ellipsoids create primitives a little differently
// This is covered in EllipsoidGeometryUpdaterSpecs instead
return;
}
var entity = createDynamicEntity();
var geometry = entity[geometryPropertyName];
geometry.show = createDynamicProperty(true);
geometry.outline = createDynamicProperty(true);
geometry.fill = createDynamicProperty(true);
var updater = new Updater(entity, getScene());
var primitives = new PrimitiveCollection();
var groundPrimitives = new PrimitiveCollection();
var dynamicUpdater = updater.createDynamicUpdater(
primitives,
groundPrimitives
);
expect(primitives.length).toBe(0);
expect(groundPrimitives.length).toBe(0);
dynamicUpdater.update(JulianDate.now());
expect(primitives.length).toBe(2);
expect(groundPrimitives.length).toBe(0);
expect(dynamicUpdater.isDestroyed()).toBe(false);
expect(dynamicUpdater._options.id).toBe(entity);
entity.show = false;
updater._onEntityPropertyChanged(entity, "show");
dynamicUpdater.update(JulianDate.now());
expect(primitives.length).toBe(0);
entity.show = true;
updater._onEntityPropertyChanged(entity, "show");
geometry.show.setValue(false);
updater._onEntityPropertyChanged(entity, "box");
dynamicUpdater.update(JulianDate.now());
expect(primitives.length).toBe(0);
geometry.show.setValue(true);
geometry.fill.setValue(false);
updater._onEntityPropertyChanged(entity, "box");
dynamicUpdater.update(JulianDate.now());
expect(primitives.length).toBe(1);
geometry.fill.setValue(true);
geometry.outline.setValue(false);
updater._onEntityPropertyChanged(entity, "box");
dynamicUpdater.update(JulianDate.now());
expect(primitives.length).toBe(1);
dynamicUpdater.destroy();
expect(primitives.length).toBe(0);
updater.destroy();
});
it("Computes dynamic geometry bounding sphere for fill.", function () {
var scene = getScene();
var entity = createDynamicEntity();
var geometry = entity[geometryPropertyName];
var updater = new Updater(entity, scene);
geometry.fill = true;
geometry.outline = false;
updater._onEntityPropertyChanged(entity, updater._geometryPropertyName);
var dynamicUpdater = updater.createDynamicUpdater(
scene.primitives,
scene.groundPrimitives
);
dynamicUpdater.update(time);
var state;
var result = new BoundingSphere();
return pollToPromise(function () {
scene.initializeFrame();
scene.render();
state = dynamicUpdater.getBoundingSphere(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).toEqualEpsilon(
attributes.boundingSphere,
CesiumMath.EPSILON6
);
updater.destroy();
scene.primitives.removeAll();
});
});
it("Computes dynamic geometry bounding sphere for outline.", function () {
var scene = getScene();
var entity = createDynamicEntity();
var geometry = entity[geometryPropertyName];
var updater = new Updater(entity, scene);
geometry.fill = false;
geometry.outline = true;
updater._onEntityPropertyChanged(entity, updater._geometryPropertyName);
var dynamicUpdater = updater.createDynamicUpdater(
scene.primitives,
scene.groundPrimitives
);
dynamicUpdater.update(time);
var state;
var result = new BoundingSphere();
return pollToPromise(function () {
scene.initializeFrame();
scene.render();
state = dynamicUpdater.getBoundingSphere(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).toEqualEpsilon(
attributes.boundingSphere,
CesiumMath.EPSILON6
);
updater.destroy();
scene.primitives.removeAll();
});
});
it("Compute dynamic geometry bounding sphere throws without result.", function () {
var scene = getScene();
var entity = createDynamicEntity();
var updater = new Updater(entity, scene);
var dynamicUpdater = updater.createDynamicUpdater(
scene.primitives,
scene.groundPrimitives
);
expect(function () {
dynamicUpdater.getBoundingSphere(undefined);
}).toThrowDeveloperError();
updater.destroy();
scene.primitives.removeAll();
});
}
export default createDynamicGeometryUpdaterSpecs;