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

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"
);