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.
201 lines
5.9 KiB
JavaScript
201 lines
5.9 KiB
JavaScript
import { Cartesian3 } from "../../Source/Cesium.js";
|
|
import { defined } from "../../Source/Cesium.js";
|
|
import { Matrix4 } from "../../Source/Cesium.js";
|
|
import { EllipsoidPrimitive } from "../../Source/Cesium.js";
|
|
import { Material } from "../../Source/Cesium.js";
|
|
import createScene from "../createScene.js";
|
|
|
|
describe(
|
|
"Scene/EllipsoidPrimitive",
|
|
function () {
|
|
var scene;
|
|
var ellipsoid;
|
|
|
|
beforeAll(function () {
|
|
scene = createScene();
|
|
scene.primitives.destroyPrimitives = false;
|
|
scene.frameState.scene3DOnly = false;
|
|
});
|
|
|
|
afterAll(function () {
|
|
scene.destroyForSpecs();
|
|
});
|
|
|
|
beforeEach(function () {
|
|
ellipsoid = new EllipsoidPrimitive();
|
|
var offset = new Cartesian3(1.02, 0.0, 0.0);
|
|
scene.camera.lookAtTransform(Matrix4.IDENTITY, offset);
|
|
});
|
|
|
|
afterEach(function () {
|
|
scene.primitives.removeAll();
|
|
if (defined(ellipsoid) && !ellipsoid.isDestroyed()) {
|
|
ellipsoid = ellipsoid.destroy();
|
|
}
|
|
});
|
|
|
|
it("gets the default properties", function () {
|
|
expect(ellipsoid.show).toEqual(true);
|
|
expect(ellipsoid.center).toEqual(Cartesian3.ZERO);
|
|
expect(ellipsoid.radii).toBeUndefined();
|
|
expect(ellipsoid.modelMatrix).toEqual(Matrix4.IDENTITY);
|
|
expect(ellipsoid.material.type).toEqual(Material.ColorType);
|
|
expect(ellipsoid.debugShowBoundingVolume).toEqual(false);
|
|
});
|
|
|
|
it("Constructs with options", function () {
|
|
var material = Material.fromType(Material.StripeType);
|
|
var e = new EllipsoidPrimitive({
|
|
center: new Cartesian3(1.0, 2.0, 3.0),
|
|
radii: new Cartesian3(4.0, 5.0, 6.0),
|
|
modelMatrix: Matrix4.fromUniformScale(2.0),
|
|
show: false,
|
|
material: material,
|
|
id: "id",
|
|
debugShowBoundingVolume: true,
|
|
});
|
|
|
|
expect(e.center).toEqual(new Cartesian3(1.0, 2.0, 3.0));
|
|
expect(e.radii).toEqual(new Cartesian3(4.0, 5.0, 6.0));
|
|
expect(e.modelMatrix).toEqual(Matrix4.fromUniformScale(2.0));
|
|
expect(e.show).toEqual(false);
|
|
expect(e.material).toBe(material);
|
|
expect(e.id).toEqual("id");
|
|
expect(e.debugShowBoundingVolume).toEqual(true);
|
|
|
|
e.destroy();
|
|
});
|
|
|
|
it("renders with the default material", function () {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it("renders with a custom modelMatrix", function () {
|
|
ellipsoid.radii = new Cartesian3(0.1, 0.1, 0.1);
|
|
ellipsoid.modelMatrix = Matrix4.fromScale(
|
|
new Cartesian3(10.0, 10.0, 10.0)
|
|
);
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it("renders two with a vertex array cache hit", function () {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
var ellipsoid2 = new EllipsoidPrimitive();
|
|
ellipsoid2.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
var result;
|
|
expect(scene).toRenderAndCall(function (rgba) {
|
|
result = rgba;
|
|
expect(rgba).not.toEqual([0, 0, 0, 255]);
|
|
});
|
|
|
|
expect(scene).toRender(result);
|
|
|
|
scene.primitives.add(ellipsoid2);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
expect(scene).notToRender(result);
|
|
|
|
ellipsoid2.destroy();
|
|
});
|
|
|
|
it("renders bounding volume with debugShowBoundingVolume", function () {
|
|
var scene = createScene();
|
|
scene.primitives.add(
|
|
new EllipsoidPrimitive({
|
|
radii: new Cartesian3(1.0, 1.0, 1.0),
|
|
debugShowBoundingVolume: true,
|
|
})
|
|
);
|
|
|
|
var camera = scene.camera;
|
|
camera.position = new Cartesian3(1.02, 0.0, 0.0);
|
|
camera.direction = Cartesian3.negate(Cartesian3.UNIT_X, new Cartesian3());
|
|
camera.up = Cartesian3.clone(Cartesian3.UNIT_Z);
|
|
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
scene.destroyForSpecs();
|
|
});
|
|
|
|
it("does not render when show is false", function () {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
ellipsoid.show = false;
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it("does not render without radii", function () {
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it("does not render when not in view due to center", function () {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
ellipsoid.center = new Cartesian3(10.0, 0.0, 0.0);
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it("is picked", function () {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
ellipsoid.id = "id";
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
|
|
expect(scene).toPickAndCall(function (result) {
|
|
expect(result.primitive).toEqual(ellipsoid);
|
|
expect(result.id).toEqual("id");
|
|
});
|
|
});
|
|
|
|
it("is not picked (show === false)", function () {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
ellipsoid.show = false;
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
|
|
expect(scene).notToPick();
|
|
});
|
|
|
|
it("is not picked (alpha === 0.0)", function () {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
ellipsoid.material.uniforms.color.alpha = 0.0;
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
|
|
expect(scene).notToPick();
|
|
});
|
|
|
|
it("isDestroyed", function () {
|
|
expect(ellipsoid.isDestroyed()).toEqual(false);
|
|
ellipsoid.destroy();
|
|
expect(ellipsoid.isDestroyed()).toEqual(true);
|
|
});
|
|
|
|
it("throws when rendered without a material", function () {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
ellipsoid.material = undefined;
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
|
|
expect(function () {
|
|
scene.renderForSpecs();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
},
|
|
"WebGL"
|
|
);
|