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.
617 lines
16 KiB
JavaScript
617 lines
16 KiB
JavaScript
import { ColorGeometryInstanceAttribute } from "../../Source/Cesium.js";
|
|
import { defaultValue } from "../../Source/Cesium.js";
|
|
import { defined } from "../../Source/Cesium.js";
|
|
import { GeometryInstance } from "../../Source/Cesium.js";
|
|
import { Rectangle } from "../../Source/Cesium.js";
|
|
import { RectangleGeometry } from "../../Source/Cesium.js";
|
|
import { HorizontalOrigin } from "../../Source/Cesium.js";
|
|
import { LabelCollection } from "../../Source/Cesium.js";
|
|
import { PerInstanceColorAppearance } from "../../Source/Cesium.js";
|
|
import { Primitive } from "../../Source/Cesium.js";
|
|
import { PrimitiveCollection } from "../../Source/Cesium.js";
|
|
import { VerticalOrigin } from "../../Source/Cesium.js";
|
|
import createScene from "../createScene.js";
|
|
|
|
describe(
|
|
"Scene/PrimitiveCollection",
|
|
function () {
|
|
var scene;
|
|
var context;
|
|
var rectangle;
|
|
var primitives;
|
|
|
|
beforeAll(function () {
|
|
scene = createScene();
|
|
scene.primitives.destroyPrimitives = false;
|
|
context = scene.context;
|
|
rectangle = Rectangle.fromDegrees(-80.0, 20.0, -70.0, 30.0);
|
|
});
|
|
|
|
afterAll(function () {
|
|
scene.destroyForSpecs();
|
|
});
|
|
|
|
beforeEach(function () {
|
|
primitives = new PrimitiveCollection();
|
|
});
|
|
|
|
afterEach(function () {
|
|
scene.primitives.removeAll();
|
|
primitives =
|
|
primitives && !primitives.isDestroyed() && primitives.destroy();
|
|
});
|
|
|
|
function createLabels(position) {
|
|
position = defaultValue(position, {
|
|
x: -1.0,
|
|
y: 0.0,
|
|
z: 0.0,
|
|
});
|
|
var labels = new LabelCollection();
|
|
labels.add({
|
|
position: position,
|
|
text: "x",
|
|
horizontalOrigin: HorizontalOrigin.CENTER,
|
|
verticalOrigin: VerticalOrigin.CENTER,
|
|
});
|
|
return labels;
|
|
}
|
|
|
|
function createRectangle() {
|
|
return new Primitive({
|
|
geometryInstances: new GeometryInstance({
|
|
geometry: new RectangleGeometry({
|
|
rectangle: rectangle,
|
|
}),
|
|
attributes: {
|
|
color: new ColorGeometryInstanceAttribute(1.0, 1.0, 0.0, 0.5),
|
|
},
|
|
}),
|
|
appearance: new PerInstanceColorAppearance(),
|
|
releaseGeometryInstances: true,
|
|
asynchronous: false,
|
|
});
|
|
}
|
|
|
|
function verifyPrimitivesRender(primitives, color) {
|
|
scene.primitives.removeAll();
|
|
scene.camera.setView({ destination: rectangle });
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(primitives);
|
|
|
|
if (defined(color)) {
|
|
expect(scene).toRender(color);
|
|
} else {
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
}
|
|
}
|
|
|
|
it("constructs with options", function () {
|
|
var collection = new PrimitiveCollection({
|
|
show: false,
|
|
destroyPrimitives: false,
|
|
});
|
|
expect(collection.show).toEqual(false);
|
|
expect(collection.destroyPrimitives).toEqual(false);
|
|
collection.destroy();
|
|
});
|
|
|
|
it("gets default show", function () {
|
|
expect(primitives.show).toEqual(true);
|
|
});
|
|
|
|
it("get throws if index is undefined", function () {
|
|
expect(function () {
|
|
primitives.get(undefined);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("has zero primitives when constructed", function () {
|
|
expect(primitives.length).toEqual(0);
|
|
});
|
|
|
|
it("adds a primitive with add()", function () {
|
|
var p = createLabels();
|
|
expect(primitives.add(p)).toBe(p);
|
|
expect(primitives.length).toEqual(1);
|
|
});
|
|
|
|
it("add works with an index", function () {
|
|
var p0 = createLabels();
|
|
var p1 = createLabels();
|
|
|
|
expect(function () {
|
|
primitives.add(p0, 1);
|
|
}).toThrowDeveloperError();
|
|
|
|
expect(function () {
|
|
primitives.add(p0, -1);
|
|
}).toThrowDeveloperError();
|
|
|
|
primitives.add(p0, 0);
|
|
expect(primitives.get(0)).toBe(p0);
|
|
|
|
expect(function () {
|
|
primitives.add(p1, -1);
|
|
}).toThrowDeveloperError();
|
|
|
|
expect(function () {
|
|
primitives.add(p1, 2);
|
|
}).toThrowDeveloperError();
|
|
|
|
primitives.add(p1, 0);
|
|
expect(primitives.get(0)).toBe(p1);
|
|
});
|
|
|
|
it("removes the first primitive", function () {
|
|
var p0 = createLabels();
|
|
var p1 = createLabels();
|
|
|
|
primitives.add(p0);
|
|
primitives.add(p1);
|
|
|
|
expect(primitives.length).toEqual(2);
|
|
|
|
expect(primitives.remove(p0)).toEqual(true);
|
|
expect(primitives.length).toEqual(1);
|
|
expect(primitives.get(0)).toBe(p1);
|
|
|
|
expect(primitives.remove(p1)).toEqual(true);
|
|
expect(primitives.length).toEqual(0);
|
|
});
|
|
|
|
it("removes the last primitive", function () {
|
|
var p0 = createLabels();
|
|
var p1 = createLabels();
|
|
|
|
primitives.add(p0);
|
|
primitives.add(p1);
|
|
|
|
expect(primitives.length).toEqual(2);
|
|
|
|
expect(primitives.remove(p1)).toEqual(true);
|
|
expect(primitives.length).toEqual(1);
|
|
expect(primitives.get(0)).toBe(p0);
|
|
|
|
expect(primitives.remove(p0)).toEqual(true);
|
|
expect(primitives.length).toEqual(0);
|
|
});
|
|
|
|
it("removes a primitive twice", function () {
|
|
var p0 = createLabels();
|
|
primitives.add(p0);
|
|
|
|
expect(primitives.remove(p0)).toEqual(true);
|
|
expect(primitives.remove(p0)).toEqual(false);
|
|
});
|
|
|
|
it("removes null", function () {
|
|
expect(primitives.remove()).toEqual(false);
|
|
});
|
|
|
|
it("removes all primitives", function () {
|
|
primitives.add(createLabels());
|
|
primitives.add(createLabels());
|
|
primitives.add(createLabels());
|
|
|
|
expect(primitives.length).toEqual(3);
|
|
|
|
primitives.removeAll();
|
|
expect(primitives.length).toEqual(0);
|
|
});
|
|
|
|
it("contains a primitive", function () {
|
|
var labels = createLabels();
|
|
primitives.add(labels);
|
|
|
|
expect(primitives.contains(labels)).toEqual(true);
|
|
});
|
|
|
|
it("does not contain a primitive", function () {
|
|
var labels0 = createLabels();
|
|
var labels1 = createLabels();
|
|
primitives.add(labels0);
|
|
|
|
expect(primitives.contains(labels1)).toEqual(false);
|
|
});
|
|
|
|
it("does not contain removed primitive", function () {
|
|
var labels0 = createLabels();
|
|
primitives.add(labels0);
|
|
primitives.remove(labels0);
|
|
|
|
expect(primitives.contains(labels0)).toEqual(false);
|
|
});
|
|
|
|
it("does not contain all removed primitives", function () {
|
|
var labels0 = createLabels();
|
|
primitives.add(labels0);
|
|
primitives.removeAll();
|
|
|
|
expect(primitives.contains(labels0)).toEqual(false);
|
|
});
|
|
|
|
it("does not contain undefined", function () {
|
|
expect(primitives.contains()).toEqual(false);
|
|
});
|
|
|
|
it("adds and removes a primitive in two composites", function () {
|
|
var p = createLabels();
|
|
|
|
primitives.add(p);
|
|
primitives.destroyPrimitives = false;
|
|
|
|
var otherPrimitives = new PrimitiveCollection();
|
|
otherPrimitives.add(p);
|
|
otherPrimitives.destroyPrimitives = false;
|
|
|
|
// In both composites
|
|
expect(primitives.contains(p)).toEqual(true);
|
|
expect(otherPrimitives.contains(p)).toEqual(true);
|
|
|
|
// In one composite
|
|
expect(primitives.remove(p)).toEqual(true);
|
|
expect(primitives.contains(p)).toEqual(false);
|
|
expect(otherPrimitives.contains(p)).toEqual(true);
|
|
|
|
// In neither composite
|
|
expect(otherPrimitives.remove(p)).toEqual(true);
|
|
expect(primitives.contains(p)).toEqual(false);
|
|
expect(otherPrimitives.contains(p)).toEqual(false);
|
|
expect(primitives.remove(p)).toEqual(false);
|
|
expect(otherPrimitives.remove(p)).toEqual(false);
|
|
|
|
p.destroy();
|
|
otherPrimitives.destroy();
|
|
});
|
|
|
|
it("does not remove from a second composite", function () {
|
|
var p = createLabels();
|
|
primitives.add(p);
|
|
|
|
var otherPrimitives = new PrimitiveCollection();
|
|
|
|
expect(otherPrimitives.contains(p)).toEqual(false);
|
|
expect(otherPrimitives.remove(p)).toEqual(false);
|
|
|
|
otherPrimitives.destroy();
|
|
});
|
|
|
|
it("gets default destroyPrimitives", function () {
|
|
expect(primitives.destroyPrimitives).toEqual(true);
|
|
});
|
|
|
|
it("renders a primitive added with add()", function () {
|
|
primitives.add(createLabels());
|
|
verifyPrimitivesRender(primitives);
|
|
});
|
|
|
|
it("does not render", function () {
|
|
primitives.show = false;
|
|
primitives.add(createLabels());
|
|
verifyPrimitivesRender(primitives, [0, 0, 0, 255]);
|
|
});
|
|
|
|
it("renders a primitive in more than one composite", function () {
|
|
var p = createLabels();
|
|
primitives.add(p);
|
|
|
|
var otherPrimitives = new PrimitiveCollection();
|
|
otherPrimitives.destroyPrimitives = false;
|
|
otherPrimitives.add(p);
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
verifyPrimitivesRender(otherPrimitives);
|
|
|
|
otherPrimitives.destroy();
|
|
});
|
|
|
|
it("renders child composites", function () {
|
|
var children = new PrimitiveCollection();
|
|
children.add(createLabels());
|
|
primitives.add(children);
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
});
|
|
|
|
it("picks a primitive added with add()", function () {
|
|
var labels = createLabels();
|
|
var l = labels.get(0);
|
|
primitives.add(labels);
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
|
|
expect(scene).toPickPrimitive(l);
|
|
});
|
|
|
|
it("does not pick", function () {
|
|
var labels = createLabels();
|
|
|
|
primitives.show = false;
|
|
primitives.add(labels);
|
|
|
|
verifyPrimitivesRender(primitives, [0, 0, 0, 255]);
|
|
|
|
expect(scene).notToPick();
|
|
});
|
|
|
|
it("picks child composites", function () {
|
|
var labels = createLabels();
|
|
var l = labels.get(0);
|
|
|
|
var children = new PrimitiveCollection();
|
|
children.add(labels);
|
|
primitives.add(children);
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
|
|
expect(scene).toPickPrimitive(l);
|
|
});
|
|
|
|
it("picks a primitive added with render order (0)", function () {
|
|
var p0 = createRectangle();
|
|
var p1 = createRectangle();
|
|
|
|
primitives.add(p0);
|
|
primitives.add(p1);
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
|
|
expect(scene).toPickPrimitive(p1);
|
|
});
|
|
|
|
it("picks a primitive added with render order (1)", function () {
|
|
var p0 = createRectangle();
|
|
var p1 = createRectangle();
|
|
|
|
primitives.add(p1);
|
|
primitives.add(p0);
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
|
|
expect(scene).toPickPrimitive(p0);
|
|
});
|
|
|
|
it("picks a primitive added with raise (0)", function () {
|
|
var p0 = createRectangle();
|
|
var p1 = createRectangle();
|
|
|
|
primitives.add(p0);
|
|
primitives.add(p1);
|
|
primitives.raise(p1); // Already on top
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
|
|
expect(scene).toPickPrimitive(p1);
|
|
});
|
|
|
|
it("picks a primitive added with raise (1)", function () {
|
|
var p0 = createRectangle();
|
|
var p1 = createRectangle();
|
|
|
|
primitives.add(p0);
|
|
primitives.add(p1);
|
|
primitives.raise(p0); // Moved to top
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
|
|
expect(scene).toPickPrimitive(p0);
|
|
});
|
|
|
|
it("picks a primitive added with raiseToTop (0)", function () {
|
|
var p0 = createRectangle();
|
|
var p1 = createRectangle();
|
|
|
|
primitives.add(p0);
|
|
primitives.add(p1);
|
|
primitives.raiseToTop(p1); // Already on top
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
|
|
expect(scene).toPickPrimitive(p1);
|
|
});
|
|
|
|
it("picks a primitive added with raiseToTop (1)", function () {
|
|
var p0 = createRectangle();
|
|
var p1 = createRectangle();
|
|
|
|
primitives.add(p0);
|
|
primitives.add(p1);
|
|
primitives.raiseToTop(p0); // Moved to top
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
|
|
expect(scene).toPickPrimitive(p0);
|
|
});
|
|
|
|
it("picks a primitive added with lower (0)", function () {
|
|
var p0 = createRectangle();
|
|
var p1 = createRectangle();
|
|
|
|
primitives.add(p0);
|
|
primitives.add(p1);
|
|
primitives.lower(p1); // Moved back
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
|
|
expect(scene).toPickPrimitive(p0);
|
|
});
|
|
|
|
it("picks a primitive added with lower (1)", function () {
|
|
var p0 = createRectangle();
|
|
var p1 = createRectangle();
|
|
|
|
primitives.add(p0);
|
|
primitives.add(p1);
|
|
primitives.lower(p0); // Already on bottom
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
|
|
expect(scene).toPickPrimitive(p1);
|
|
});
|
|
|
|
it("picks a primitive added with lowerToBottom (0)", function () {
|
|
var p0 = createRectangle();
|
|
var p1 = createRectangle();
|
|
|
|
primitives.add(p0);
|
|
primitives.add(p1);
|
|
primitives.lowerToBottom(p1); // Moved back
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
|
|
expect(scene).toPickPrimitive(p0);
|
|
});
|
|
|
|
it("picks a primitive added with lowerToBottom (1)", function () {
|
|
var p0 = createRectangle();
|
|
var p1 = createRectangle();
|
|
|
|
primitives.add(p0);
|
|
primitives.add(p1);
|
|
primitives.lowerToBottom(p0); // Already on bottom
|
|
|
|
verifyPrimitivesRender(primitives);
|
|
|
|
expect(scene).toPickPrimitive(p1);
|
|
});
|
|
|
|
it("is not destroyed when first constructed", function () {
|
|
expect(primitives.isDestroyed()).toEqual(false);
|
|
});
|
|
|
|
it("is destroyed after calling destroy()", function () {
|
|
primitives.destroy();
|
|
expect(primitives.isDestroyed()).toEqual(true);
|
|
});
|
|
|
|
it("destroys its primitives", function () {
|
|
var labels = new LabelCollection(context);
|
|
|
|
primitives.add(labels);
|
|
expect(labels.isDestroyed()).toEqual(false);
|
|
|
|
primitives.destroy();
|
|
expect(labels.isDestroyed()).toEqual(true);
|
|
});
|
|
|
|
it("destroys children", function () {
|
|
var labels = new LabelCollection(context);
|
|
|
|
var children = new PrimitiveCollection();
|
|
children.add(labels);
|
|
|
|
primitives.add(children);
|
|
expect(children.isDestroyed()).toEqual(false);
|
|
expect(labels.isDestroyed()).toEqual(false);
|
|
|
|
primitives.destroy();
|
|
expect(children.isDestroyed()).toEqual(true);
|
|
expect(labels.isDestroyed()).toEqual(true);
|
|
});
|
|
|
|
it("destroys primitive on remove", function () {
|
|
var labels = new LabelCollection(context);
|
|
|
|
primitives.add(labels);
|
|
expect(labels.isDestroyed()).toEqual(false);
|
|
|
|
primitives.remove(labels);
|
|
expect(labels.isDestroyed()).toEqual(true);
|
|
});
|
|
|
|
it("destroys primitive on removeAll", function () {
|
|
var labels = new LabelCollection(context);
|
|
|
|
primitives.add(labels);
|
|
expect(labels.isDestroyed()).toEqual(false);
|
|
|
|
primitives.removeAll();
|
|
expect(labels.isDestroyed()).toEqual(true);
|
|
});
|
|
|
|
it("does not destroy its primitives", function () {
|
|
var labels = new LabelCollection(context);
|
|
|
|
primitives.destroyPrimitives = false;
|
|
primitives.add(labels);
|
|
expect(labels.isDestroyed()).toEqual(false);
|
|
|
|
primitives.destroy();
|
|
expect(labels.isDestroyed()).toEqual(false);
|
|
|
|
labels.destroy();
|
|
expect(labels.isDestroyed()).toEqual(true);
|
|
});
|
|
|
|
it("does not destroy primitive on remove", function () {
|
|
var labels = new LabelCollection(context);
|
|
|
|
primitives.destroyPrimitives = false;
|
|
primitives.add(labels);
|
|
expect(labels.isDestroyed()).toEqual(false);
|
|
|
|
primitives.remove(labels);
|
|
expect(labels.isDestroyed()).toEqual(false);
|
|
|
|
labels.destroy();
|
|
expect(labels.isDestroyed()).toEqual(true);
|
|
});
|
|
|
|
it("does not destroy primitive on removeAll", function () {
|
|
var labels = new LabelCollection(context);
|
|
|
|
primitives.destroyPrimitives = false;
|
|
primitives.add(labels);
|
|
expect(labels.isDestroyed()).toEqual(false);
|
|
|
|
primitives.removeAll();
|
|
expect(labels.isDestroyed()).toEqual(false);
|
|
|
|
labels.destroy();
|
|
expect(labels.isDestroyed()).toEqual(true);
|
|
});
|
|
|
|
it("throws when add() without an primitive", function () {
|
|
expect(function () {
|
|
primitives.add();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("raise throws when primitive is not in composite", function () {
|
|
var p = createLabels();
|
|
|
|
expect(function () {
|
|
primitives.raise(p);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("raiseToTop throws when primitive is not in composite", function () {
|
|
var p = createLabels();
|
|
|
|
expect(function () {
|
|
primitives.raiseToTop(p);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("lower throws when primitive is not in composite", function () {
|
|
var p = createLabels();
|
|
|
|
expect(function () {
|
|
primitives.lower(p);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("lowerToBottom throws when primitive is not in composite", function () {
|
|
var p = createLabels();
|
|
|
|
expect(function () {
|
|
primitives.lowerToBottom(p);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
},
|
|
"WebGL"
|
|
);
|