import { BoundingRectangle } from "../../Source/Cesium.js";
|
import { BoundingSphere } from "../../Source/Cesium.js";
|
import { Cartesian2 } from "../../Source/Cesium.js";
|
import { Cartesian3 } from "../../Source/Cesium.js";
|
import { Color } from "../../Source/Cesium.js";
|
import { DistanceDisplayCondition } from "../../Source/Cesium.js";
|
import { Math as CesiumMath } from "../../Source/Cesium.js";
|
import { NearFarScalar } from "../../Source/Cesium.js";
|
import { Rectangle } from "../../Source/Cesium.js";
|
import { BlendOption } from "../../Source/Cesium.js";
|
import { PointPrimitive } from "../../Source/Cesium.js";
|
import { PointPrimitiveCollection } from "../../Source/Cesium.js";
|
import createScene from "../createScene.js";
|
|
describe(
|
"Scene/PointPrimitiveCollection",
|
function () {
|
var scene;
|
var camera;
|
var pointPrimitives;
|
|
beforeAll(function () {
|
scene = createScene();
|
camera = scene.camera;
|
});
|
|
afterAll(function () {
|
scene.destroyForSpecs();
|
});
|
|
beforeEach(function () {
|
scene.morphTo3D(0);
|
camera.position = new Cartesian3(10.0, 0.0, 0.0);
|
camera.direction = Cartesian3.negate(Cartesian3.UNIT_X, new Cartesian3());
|
camera.up = Cartesian3.clone(Cartesian3.UNIT_Z);
|
pointPrimitives = new PointPrimitiveCollection();
|
scene.primitives.add(pointPrimitives);
|
});
|
|
afterEach(function () {
|
// pointPrimitives are destroyed by removeAll().
|
scene.primitives.removeAll();
|
});
|
|
it("constructs a default pointPrimitive", function () {
|
var p = pointPrimitives.add();
|
expect(p.show).toEqual(true);
|
expect(p.position).toEqual(Cartesian3.ZERO);
|
expect(p.pixelSize).toEqual(10.0);
|
expect(p.color.red).toEqual(1.0);
|
expect(p.color.green).toEqual(1.0);
|
expect(p.color.blue).toEqual(1.0);
|
expect(p.color.alpha).toEqual(1.0);
|
expect(p.outlineColor.red).toEqual(0.0);
|
expect(p.outlineColor.green).toEqual(0.0);
|
expect(p.outlineColor.blue).toEqual(0.0);
|
expect(p.outlineColor.alpha).toEqual(0.0);
|
expect(p.outlineWidth).toEqual(0.0);
|
expect(p.scaleByDistance).not.toBeDefined();
|
expect(p.translucencyByDistance).not.toBeDefined();
|
expect(p.distanceDisplayCondition).not.toBeDefined();
|
expect(p.disableDepthTestDistance).toEqual(0.0);
|
expect(p.id).not.toBeDefined();
|
});
|
|
it("can add and remove before first render.", function () {
|
var p = pointPrimitives.add();
|
pointPrimitives.remove(p);
|
scene.renderForSpecs();
|
});
|
|
it("explicitly constructs a pointPrimitive", function () {
|
var p = pointPrimitives.add({
|
show: false,
|
position: new Cartesian3(1.0, 2.0, 3.0),
|
pixelSize: 2.0,
|
color: {
|
red: 0.1,
|
green: 0.2,
|
blue: 0.3,
|
alpha: 0.4,
|
},
|
outlineColor: {
|
red: 0.5,
|
green: 0.6,
|
blue: 0.7,
|
alpha: 0.8,
|
},
|
outlineWidth: 4.0,
|
scaleByDistance: new NearFarScalar(1.0, 3.0, 1.0e6, 0.0),
|
translucencyByDistance: new NearFarScalar(1.0, 1.0, 1.0e6, 0.0),
|
distanceDisplayCondition: new DistanceDisplayCondition(10.0, 100.0),
|
disableDepthTestDistance: 10.0,
|
id: "id",
|
});
|
|
expect(p.show).toEqual(false);
|
expect(p.position).toEqual(new Cartesian3(1.0, 2.0, 3.0));
|
expect(p.pixelSize).toEqual(2.0);
|
expect(p.color.red).toEqual(0.1);
|
expect(p.color.green).toEqual(0.2);
|
expect(p.color.blue).toEqual(0.3);
|
expect(p.color.alpha).toEqual(0.4);
|
expect(p.outlineColor.red).toEqual(0.5);
|
expect(p.outlineColor.green).toEqual(0.6);
|
expect(p.outlineColor.blue).toEqual(0.7);
|
expect(p.outlineColor.alpha).toEqual(0.8);
|
expect(p.outlineWidth).toEqual(4.0);
|
expect(p.scaleByDistance).toEqual(
|
new NearFarScalar(1.0, 3.0, 1.0e6, 0.0)
|
);
|
expect(p.translucencyByDistance).toEqual(
|
new NearFarScalar(1.0, 1.0, 1.0e6, 0.0)
|
);
|
expect(p.distanceDisplayCondition).toEqual(
|
new DistanceDisplayCondition(10.0, 100.0)
|
);
|
expect(p.disableDepthTestDistance).toEqual(10.0);
|
expect(p.id).toEqual("id");
|
});
|
|
it("sets pointPrimitive properties", function () {
|
var p = pointPrimitives.add();
|
p.show = false;
|
p.position = new Cartesian3(1.0, 2.0, 3.0);
|
p.pixelSize = 2.0;
|
p.color = new Color(0.1, 0.2, 0.3, 0.4);
|
p.outlineColor = new Color(0.5, 0.6, 0.7, 0.8);
|
p.outlineWidth = 4.0;
|
p.scaleByDistance = new NearFarScalar(1.0e6, 3.0, 1.0e8, 0.0);
|
p.translucencyByDistance = new NearFarScalar(1.0e6, 1.0, 1.0e8, 0.0);
|
p.distanceDisplayCondition = new DistanceDisplayCondition(10.0, 100.0);
|
p.disableDepthTestDistance = 10.0;
|
|
expect(p.show).toEqual(false);
|
expect(p.position).toEqual(new Cartesian3(1.0, 2.0, 3.0));
|
expect(p.pixelSize).toEqual(2.0);
|
expect(p.color.red).toEqual(0.1);
|
expect(p.color.green).toEqual(0.2);
|
expect(p.color.blue).toEqual(0.3);
|
expect(p.color.alpha).toEqual(0.4);
|
expect(p.outlineColor.red).toEqual(0.5);
|
expect(p.outlineColor.green).toEqual(0.6);
|
expect(p.outlineColor.blue).toEqual(0.7);
|
expect(p.outlineColor.alpha).toEqual(0.8);
|
expect(p.outlineWidth).toEqual(4.0);
|
expect(p.scaleByDistance).toEqual(
|
new NearFarScalar(1.0e6, 3.0, 1.0e8, 0.0)
|
);
|
expect(p.translucencyByDistance).toEqual(
|
new NearFarScalar(1.0e6, 1.0, 1.0e8, 0.0)
|
);
|
expect(p.distanceDisplayCondition).toEqual(
|
new DistanceDisplayCondition(10.0, 100.0)
|
);
|
expect(p.disableDepthTestDistance).toEqual(10.0);
|
});
|
|
it("is not destroyed", function () {
|
expect(pointPrimitives.isDestroyed()).toEqual(false);
|
});
|
|
it("renders pointPrimitive in multiple passes", function () {
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.LIME,
|
});
|
camera.position = new Cartesian3(2.0, 0.0, 0.0);
|
|
var frameState = scene.frameState;
|
frameState.commandList.length = 0;
|
pointPrimitives.blendOption = BlendOption.OPAQUE_AND_TRANSLUCENT;
|
pointPrimitives.update(frameState);
|
expect(frameState.commandList.length).toEqual(2);
|
|
frameState.commandList.length = 0;
|
pointPrimitives.blendOption = BlendOption.OPAQUE;
|
pointPrimitives.update(frameState);
|
expect(frameState.commandList.length).toEqual(1);
|
|
frameState.commandList.length = 0;
|
pointPrimitives.blendOption = BlendOption.TRANSLUCENT;
|
pointPrimitives.update(frameState);
|
expect(frameState.commandList.length).toEqual(1);
|
});
|
|
it("disables pointPrimitive scaleByDistance", function () {
|
var p = pointPrimitives.add({
|
scaleByDistance: new NearFarScalar(1.0, 3.0, 1.0e6, 0.0),
|
});
|
p.scaleByDistance = undefined;
|
expect(p.scaleByDistance).not.toBeDefined();
|
});
|
|
it("disables pointPrimitive translucencyByDistance", function () {
|
var p = pointPrimitives.add({
|
translucencyByDistance: new NearFarScalar(1.0, 1.0, 1.0e6, 0.0),
|
});
|
p.translucencyByDistance = undefined;
|
expect(p.translucencyByDistance).not.toBeDefined();
|
});
|
|
it("renders pointPrimitive with scaleByDistance", function () {
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
scaleByDistance: new NearFarScalar(2.0, 1.0, 4.0, 0.0),
|
color: Color.LIME,
|
});
|
|
camera.position = new Cartesian3(2.0, 0.0, 0.0);
|
expect(scene).toRender([0, 255, 0, 255]);
|
|
camera.position = new Cartesian3(4.0, 0.0, 0.0);
|
expect(scene).toRender([0, 0, 0, 255]);
|
});
|
|
it("renders pointPrimitive with translucencyByDistance", function () {
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
translucencyByDistance: new NearFarScalar(2.0, 1.0, 4.0, 0.0),
|
color: Color.LIME,
|
});
|
|
camera.position = new Cartesian3(2.0, 0.0, 0.0);
|
expect(scene).toRender([0, 255, 0, 255]);
|
|
camera.position = new Cartesian3(4.0, 0.0, 0.0);
|
expect(scene).toRender([0, 0, 0, 255]);
|
});
|
|
it("does not render pointPrimitive if show is false", function () {
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
translucencyByDistance: new NearFarScalar(2.0, 1.0, 4.0, 0.0),
|
color: Color.LIME,
|
});
|
|
camera.position = new Cartesian3(2.0, 0.0, 0.0);
|
expect(scene).toRender([0, 255, 0, 255]);
|
|
pointPrimitives.show = false;
|
expect(scene).toRender([0, 0, 0, 255]);
|
});
|
|
it("throws scaleByDistance with nearDistance === farDistance", function () {
|
var p = pointPrimitives.add();
|
var scale = new NearFarScalar(2.0e5, 1.0, 2.0e5, 0.0);
|
expect(function () {
|
p.scaleByDistance = scale;
|
}).toThrowDeveloperError();
|
});
|
|
it("throws new pointPrimitive with invalid scaleByDistance (nearDistance === farDistance)", function () {
|
var scale = new NearFarScalar(2.0e5, 1.0, 2.0e5, 0.0);
|
expect(function () {
|
pointPrimitives.add({
|
scaleByDistance: scale,
|
});
|
}).toThrowDeveloperError();
|
});
|
|
it("throws scaleByDistance with nearDistance > farDistance", function () {
|
var p = pointPrimitives.add();
|
var scale = new NearFarScalar(1.0e9, 1.0, 1.0e5, 1.0);
|
expect(function () {
|
p.scaleByDistance = scale;
|
}).toThrowDeveloperError();
|
});
|
|
it("throws translucencyByDistance with nearDistance === farDistance", function () {
|
var p = pointPrimitives.add();
|
var translucency = new NearFarScalar(2.0e5, 1.0, 2.0e5, 0.0);
|
expect(function () {
|
p.translucencyByDistance = translucency;
|
}).toThrowDeveloperError();
|
});
|
|
it("throws new pointPrimitive with invalid translucencyByDistance (nearDistance === farDistance)", function () {
|
var translucency = new NearFarScalar(2.0e5, 1.0, 2.0e5, 0.0);
|
expect(function () {
|
pointPrimitives.add({
|
translucencyByDistance: translucency,
|
});
|
}).toThrowDeveloperError();
|
});
|
|
it("throws translucencyByDistance with nearDistance > farDistance", function () {
|
var p = pointPrimitives.add();
|
var translucency = new NearFarScalar(1.0e9, 1.0, 1.0e5, 1.0);
|
expect(function () {
|
p.translucencyByDistance = translucency;
|
}).toThrowDeveloperError();
|
});
|
|
it("renders pointPrimitive with distanceDisplayCondition", function () {
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.LIME,
|
distanceDisplayCondition: new DistanceDisplayCondition(10.0, 100.0),
|
});
|
|
camera.position = new Cartesian3(200.0, 0.0, 0.0);
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
camera.position = new Cartesian3(50.0, 0.0, 0.0);
|
expect(scene).toRender([0, 255, 0, 255]);
|
|
camera.position = new Cartesian3(5.0, 0.0, 0.0);
|
expect(scene).toRender([0, 0, 0, 255]);
|
});
|
|
it("throws new pointPrimitive with invalid distanceDisplayCondition (near >= far)", function () {
|
var dc = new DistanceDisplayCondition(100.0, 10.0);
|
expect(function () {
|
pointPrimitives.add({
|
distanceDisplayCondition: dc,
|
});
|
}).toThrowDeveloperError();
|
});
|
|
it("throws distanceDisplayCondition with near >= far", function () {
|
var p = pointPrimitives.add();
|
var dc = new DistanceDisplayCondition(100.0, 10.0);
|
expect(function () {
|
p.distanceDisplayCondition = dc;
|
}).toThrowDeveloperError();
|
});
|
|
it("renders with disableDepthTestDistance", function () {
|
var p = pointPrimitives.add({
|
position: new Cartesian3(-1.0, 0.0, 0.0),
|
pixelSize: 10.0,
|
color: Color.LIME,
|
});
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
pixelSize: 10.0,
|
color: Color.BLUE,
|
});
|
|
expect(scene).toRender([0, 0, 255, 255]);
|
|
p.disableDepthTestDistance = Number.POSITIVE_INFINITY;
|
expect(scene).toRender([0, 255, 0, 255]);
|
});
|
|
it("throws with new point primitive with invalid disableDepthTestDistance (< 0.0)", function () {
|
expect(function () {
|
pointPrimitives.add({
|
disableDepthTestDistance: -1.0,
|
});
|
}).toThrowDeveloperError();
|
});
|
|
it("throws with disableDepthTestDistance set less than 0.0", function () {
|
var p = pointPrimitives.add();
|
expect(function () {
|
p.disableDepthTestDistance = -1.0;
|
}).toThrowDeveloperError();
|
});
|
|
it("set a removed pointPrimitive property", function () {
|
var p = pointPrimitives.add();
|
pointPrimitives.remove(p);
|
p.show = false;
|
expect(p.show).toEqual(false);
|
});
|
|
it("has zero pointPrimitives when constructed", function () {
|
expect(pointPrimitives.length).toEqual(0);
|
});
|
|
it("adds a pointPrimitive", function () {
|
var p = pointPrimitives.add({
|
position: new Cartesian3(1.0, 2.0, 3.0),
|
});
|
|
expect(pointPrimitives.length).toEqual(1);
|
expect(pointPrimitives.get(0)).toEqual(p);
|
});
|
|
it("removes the first pointPrimitive", function () {
|
var one = pointPrimitives.add({
|
position: new Cartesian3(1.0, 2.0, 3.0),
|
});
|
var two = pointPrimitives.add({
|
position: new Cartesian3(4.0, 5.0, 6.0),
|
});
|
|
expect(pointPrimitives.length).toEqual(2);
|
|
expect(pointPrimitives.remove(one)).toEqual(true);
|
|
expect(pointPrimitives.length).toEqual(1);
|
expect(pointPrimitives.get(0)).toEqual(two);
|
});
|
|
it("removes the last pointPrimitive", function () {
|
var one = pointPrimitives.add({
|
position: new Cartesian3(1.0, 2.0, 3.0),
|
});
|
var two = pointPrimitives.add({
|
position: new Cartesian3(4.0, 5.0, 6.0),
|
});
|
|
expect(pointPrimitives.length).toEqual(2);
|
|
expect(pointPrimitives.remove(two)).toEqual(true);
|
|
expect(pointPrimitives.length).toEqual(1);
|
expect(pointPrimitives.get(0)).toEqual(one);
|
});
|
|
it("removes the same pointPrimitive twice", function () {
|
var p = pointPrimitives.add({
|
position: new Cartesian3(1.0, 2.0, 3.0),
|
});
|
expect(pointPrimitives.length).toEqual(1);
|
|
expect(pointPrimitives.remove(p)).toEqual(true);
|
expect(pointPrimitives.length).toEqual(0);
|
|
expect(pointPrimitives.remove(p)).toEqual(false);
|
expect(pointPrimitives.length).toEqual(0);
|
});
|
|
it("returns false when removing undefined", function () {
|
pointPrimitives.add({
|
position: new Cartesian3(1.0, 2.0, 3.0),
|
});
|
expect(pointPrimitives.length).toEqual(1);
|
|
expect(pointPrimitives.remove(undefined)).toEqual(false);
|
expect(pointPrimitives.length).toEqual(1);
|
});
|
|
it("adds and removes pointPrimitives", function () {
|
var one = pointPrimitives.add({
|
position: new Cartesian3(1.0, 2.0, 3.0),
|
});
|
var two = pointPrimitives.add({
|
position: new Cartesian3(4.0, 5.0, 6.0),
|
});
|
expect(pointPrimitives.length).toEqual(2);
|
expect(pointPrimitives.get(0)).toEqual(one);
|
expect(pointPrimitives.get(1)).toEqual(two);
|
|
expect(pointPrimitives.remove(two)).toEqual(true);
|
var three = pointPrimitives.add({
|
position: new Cartesian3(7.0, 8.0, 9.0),
|
});
|
expect(pointPrimitives.length).toEqual(2);
|
expect(pointPrimitives.get(0)).toEqual(one);
|
expect(pointPrimitives.get(1)).toEqual(three);
|
});
|
|
it("removes all pointPrimitives", function () {
|
pointPrimitives.add({
|
position: new Cartesian3(1.0, 2.0, 3.0),
|
});
|
pointPrimitives.add({
|
position: new Cartesian3(4.0, 5.0, 6.0),
|
});
|
expect(pointPrimitives.length).toEqual(2);
|
|
pointPrimitives.removeAll();
|
expect(pointPrimitives.length).toEqual(0);
|
});
|
|
it("can check if it contains a pointPrimitive", function () {
|
var pointPrimitive = pointPrimitives.add();
|
|
expect(pointPrimitives.contains(pointPrimitive)).toEqual(true);
|
});
|
|
it("returns false when checking if it contains a pointPrimitive it does not contain", function () {
|
var pointPrimitive = pointPrimitives.add();
|
pointPrimitives.remove(pointPrimitive);
|
|
expect(pointPrimitives.contains(pointPrimitive)).toEqual(false);
|
});
|
|
it("does not contain undefined", function () {
|
expect(pointPrimitives.contains(undefined)).toEqual(false);
|
});
|
|
it("does not contain random other objects", function () {
|
expect(pointPrimitives.contains({})).toEqual(false);
|
expect(pointPrimitives.contains(new Cartesian2())).toEqual(false);
|
});
|
|
it("does not render when constructed", function () {
|
expect(scene).toRender([0, 0, 0, 255]);
|
});
|
|
it("modifies and removes a pointPrimitive, then renders", function () {
|
var p1 = pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.LIME,
|
});
|
pointPrimitives.add({
|
position: new Cartesian3(-1.0, 0.0, 0.0),
|
color: Color.BLUE,
|
});
|
|
expect(scene).toRender([0, 255, 0, 255]);
|
|
p1.pixelSize = 2.0;
|
pointPrimitives.remove(p1);
|
expect(scene).toRender([0, 0, 255, 255]);
|
});
|
|
it("renders a green pointPrimitive", function () {
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.LIME,
|
});
|
|
expect(scene).toRender([0, 255, 0, 255]);
|
});
|
|
it("adds and renders a pointPrimitive", function () {
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.LIME,
|
});
|
|
expect(scene).toRender([0, 255, 0, 255]);
|
|
pointPrimitives.add({
|
position: new Cartesian3(1.0, 0.0, 0.0), // Closer to camera
|
color: Color.BLUE,
|
});
|
|
expect(scene).toRender([0, 0, 255, 255]);
|
});
|
|
it("removes and renders a pointPrimitive", function () {
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.LIME,
|
});
|
var bluePointPrimitive = pointPrimitives.add({
|
position: new Cartesian3(1.0, 0.0, 0.0), // Closer to camera
|
color: Color.BLUE,
|
});
|
|
expect(scene).toRender([0, 0, 255, 255]);
|
|
pointPrimitives.remove(bluePointPrimitive);
|
expect(scene).toRender([0, 255, 0, 255]);
|
});
|
|
it("removes all pointPrimitives and renders", function () {
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.LIME,
|
});
|
|
expect(scene).toRender([0, 255, 0, 255]);
|
|
pointPrimitives.removeAll();
|
expect(scene).toRender([0, 0, 0, 255]);
|
});
|
|
it("removes all pointPrimitives, adds a pointPrimitive, and renders", function () {
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.LIME,
|
});
|
|
expect(scene).toRender([0, 255, 0, 255]);
|
|
pointPrimitives.removeAll();
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.BLUE,
|
});
|
|
expect(scene).toRender([0, 0, 255, 255]);
|
});
|
|
it("renders using pointPrimitive show property", function () {
|
var greenPointPrimitive = pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.LIME,
|
});
|
var bluePointPrimitive = pointPrimitives.add({
|
show: false,
|
position: Cartesian3.ZERO,
|
color: Color.BLUE,
|
});
|
|
expect(scene).toRender([0, 255, 0, 255]);
|
|
greenPointPrimitive.show = false;
|
bluePointPrimitive.show = true;
|
|
expect(scene).toRender([0, 0, 255, 255]);
|
});
|
|
it("renders using pointPrimitive position property", function () {
|
var p = pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.LIME,
|
});
|
|
expect(scene).toRender([0, 255, 0, 255]);
|
|
p.position = new Cartesian3(20.0, 0.0, 0.0); // Behind camera
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
p.position = new Cartesian3(1.0, 0.0, 0.0); // Back in front of camera
|
expect(scene).toRender([0, 255, 0, 255]);
|
});
|
|
it("renders using pointPrimitive color property", function () {
|
var p = pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.WHITE,
|
});
|
|
expect(scene).toRender([255, 255, 255, 255]);
|
|
p.color = new Color(1.0, 0.0, 1.0, 1.0);
|
expect(scene).toRender([255, 0, 255, 255]);
|
|
// Update a second time since it goes through a different vertex array update path
|
p.color = new Color(0.0, 1.0, 0.0, 1.0);
|
expect(scene).toRender([0, 255, 0, 255]);
|
});
|
|
it("renders bounding volume with debugShowBoundingVolume", function () {
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.LIME,
|
pixelSize: 0.5, // bring bounding volume in view
|
});
|
pointPrimitives.debugShowBoundingVolume = true;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
});
|
|
it("updates 10% of pointPrimitives", function () {
|
for (var i = 0; i < 10; ++i) {
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.WHITE,
|
show: i === 3,
|
});
|
}
|
|
// First render - default pointPrimitive color is white.
|
expect(scene).toRender([255, 255, 255, 255]);
|
|
pointPrimitives.get(3).color = new Color(0.0, 1.0, 0.0, 1.0);
|
|
// Second render - pointPrimitive is green
|
expect(scene).toRender([0, 255, 0, 255]);
|
|
pointPrimitives.get(3).color = new Color(1.0, 0.0, 0.0, 1.0);
|
|
// Third render - update goes through a different vertex array update path
|
expect(scene).toRender([255, 0, 0, 255]);
|
});
|
|
it("renders more than 64K pointPrimitives", function () {
|
for (var i = 0; i < 64 * 1024; ++i) {
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.TRANSPARENT,
|
});
|
}
|
|
pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.WHITE,
|
});
|
|
expect(scene).toRender([255, 255, 255, 255]);
|
});
|
|
it("is picked", function () {
|
var p = pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.WHITE,
|
id: "id",
|
});
|
|
expect(scene).toPickAndCall(function (result) {
|
expect(result.primitive).toEqual(p);
|
expect(result.id).toEqual("id");
|
});
|
});
|
|
it("can change pick id", function () {
|
var p = pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.WHITE,
|
id: "id",
|
});
|
|
expect(scene).toPickAndCall(function (result) {
|
expect(result.primitive).toEqual(p);
|
expect(result.id).toEqual("id");
|
});
|
|
p.id = "id2";
|
|
expect(scene).toPickAndCall(function (result) {
|
expect(result.primitive).toEqual(p);
|
expect(result.id).toEqual("id2");
|
});
|
});
|
|
it("is not picked", function () {
|
pointPrimitives.add({
|
show: false,
|
position: Cartesian3.ZERO,
|
color: Color.WHITE,
|
});
|
|
expect(scene).notToPick();
|
});
|
|
it("picks a pointPrimitive using scaleByDistance", function () {
|
var p = pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.WHITE,
|
});
|
|
var scaleByDistance = new NearFarScalar(1.0, 4.0, 3.0e9, 2.0);
|
p.scaleByDistance = scaleByDistance;
|
|
expect(scene).toPickPrimitive(p);
|
|
scaleByDistance.nearValue = 0.0;
|
scaleByDistance.farValue = 0.0;
|
p.scaleByDistance = scaleByDistance;
|
|
expect(scene).notToPick();
|
});
|
|
it("picks a pointPrimitive using translucencyByDistance", function () {
|
var p = pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
color: Color.WHITE,
|
});
|
|
var translucency = new NearFarScalar(1.0, 0.9, 3.0e9, 0.8);
|
p.translucencyByDistance = translucency;
|
|
expect(scene).toPickPrimitive(p);
|
|
translucency.nearValue = 0.0;
|
translucency.farValue = 0.0;
|
p.translucencyByDistance = translucency;
|
|
expect(scene).notToPick();
|
});
|
|
it("computes screen space position", function () {
|
var p = pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
});
|
scene.renderForSpecs();
|
expect(p.computeScreenSpacePosition(scene)).toEqualEpsilon(
|
new Cartesian2(0.5, 0.5),
|
CesiumMath.EPSILON1
|
);
|
});
|
|
it("stores screen space position in a result", function () {
|
var p = pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
});
|
var result = new Cartesian2();
|
scene.renderForSpecs();
|
var actual = p.computeScreenSpacePosition(scene, result);
|
expect(actual).toEqual(result);
|
expect(result).toEqualEpsilon(
|
new Cartesian2(0.5, 0.5),
|
CesiumMath.EPSILON1
|
);
|
});
|
|
it("throws when computing screen space position when not in a collection", function () {
|
var p = pointPrimitives.add({
|
position: Cartesian3.ZERO,
|
});
|
pointPrimitives.remove(p);
|
expect(function () {
|
p.computeScreenSpacePosition(scene);
|
}).toThrowDeveloperError();
|
});
|
|
it("throws when computing screen space position without scene", function () {
|
var p = pointPrimitives.add();
|
|
expect(function () {
|
p.computeScreenSpacePosition();
|
}).toThrowDeveloperError();
|
});
|
|
it("computes screen space bounding box", function () {
|
var size = 10;
|
|
var p = pointPrimitives.add({
|
size: size,
|
});
|
|
var halfWidth = size * 0.5;
|
var halfHeight = halfWidth;
|
|
var bbox = PointPrimitive.getScreenSpaceBoundingBox(p, Cartesian2.ZERO);
|
expect(bbox.x).toEqual(-halfWidth);
|
expect(bbox.y).toEqual(-halfHeight);
|
expect(bbox.width).toEqual(size);
|
expect(bbox.height).toEqual(size);
|
});
|
|
it("computes screen space bounding box with result", function () {
|
var size = 10;
|
|
var p = pointPrimitives.add({
|
size: size,
|
});
|
|
var halfWidth = size * 0.5;
|
var halfHeight = halfWidth;
|
|
var result = new BoundingRectangle();
|
var bbox = PointPrimitive.getScreenSpaceBoundingBox(
|
p,
|
Cartesian2.ZERO,
|
result
|
);
|
expect(bbox.x).toEqual(-halfWidth);
|
expect(bbox.y).toEqual(-halfHeight);
|
expect(bbox.width).toEqual(size);
|
expect(bbox.height).toEqual(size);
|
expect(bbox).toBe(result);
|
});
|
|
it("equals another pointPrimitive", function () {
|
var p = pointPrimitives.add({
|
position: new Cartesian3(1.0, 2.0, 3.0),
|
color: {
|
red: 1.0,
|
green: 0.0,
|
blue: 0.0,
|
alpha: 1.0,
|
},
|
});
|
var p2 = pointPrimitives.add({
|
position: new Cartesian3(1.0, 2.0, 3.0),
|
color: {
|
red: 1.0,
|
green: 0.0,
|
blue: 0.0,
|
alpha: 1.0,
|
},
|
});
|
|
// This tests the `PointPrimitiveCollection.equals` function itself, not simple equality.
|
expect(p.equals(p2)).toEqual(true);
|
});
|
|
it("does not equal another pointPrimitive", function () {
|
var p = pointPrimitives.add({
|
position: new Cartesian3(1.0, 2.0, 3.0),
|
});
|
var p2 = pointPrimitives.add({
|
position: new Cartesian3(4.0, 5.0, 6.0),
|
});
|
|
// This tests the `PointPrimitiveCollection.equals` function itself, not simple equality.
|
expect(p.equals(p2)).toEqual(false);
|
});
|
|
it("does not equal undefined", function () {
|
// This tests the `PointPrimitiveCollection.equals` function itself, not simple equality.
|
var pointPrimitive = pointPrimitives.add();
|
expect(pointPrimitive.equals(undefined)).toEqual(false);
|
});
|
|
it("throws when accessing without an index", function () {
|
expect(function () {
|
pointPrimitives.get();
|
}).toThrowDeveloperError();
|
});
|
|
it("computes bounding sphere in 3D", function () {
|
var one = pointPrimitives.add({
|
position: Cartesian3.fromDegrees(-50.0, -50.0),
|
});
|
var two = pointPrimitives.add({
|
position: Cartesian3.fromDegrees(-50.0, 50.0),
|
});
|
|
scene.renderForSpecs();
|
var actual = scene.frameState.commandList[0].boundingVolume;
|
|
var positions = [one.position, two.position];
|
var expected = BoundingSphere.fromPoints(positions);
|
expect(actual.center).toEqual(expected.center);
|
expect(actual.radius).toEqual(expected.radius);
|
});
|
|
it("computes bounding sphere in Columbus view", function () {
|
var projection = scene.mapProjection;
|
var ellipsoid = projection.ellipsoid;
|
|
var one = pointPrimitives.add({
|
position: Cartesian3.fromDegrees(-50.0, -50.0),
|
});
|
var two = pointPrimitives.add({
|
position: Cartesian3.fromDegrees(-50.0, 50.0),
|
});
|
|
// Update scene state
|
scene.morphToColumbusView(0);
|
scene.renderForSpecs();
|
var actual = scene.frameState.commandList[0].boundingVolume;
|
|
var projectedPositions = [
|
projection.project(ellipsoid.cartesianToCartographic(one.position)),
|
projection.project(ellipsoid.cartesianToCartographic(two.position)),
|
];
|
var expected = BoundingSphere.fromPoints(projectedPositions);
|
expected.center = new Cartesian3(
|
0.0,
|
expected.center.x,
|
expected.center.y
|
);
|
expect(actual.center).toEqualEpsilon(
|
expected.center,
|
CesiumMath.EPSILON8
|
);
|
expect(actual.radius).toBeGreaterThanOrEqualTo(expected.radius);
|
});
|
|
it("computes bounding sphere in 2D", function () {
|
var projection = scene.mapProjection;
|
var ellipsoid = projection.ellipsoid;
|
|
var one = pointPrimitives.add({
|
color: Color.LIME,
|
position: Cartesian3.fromDegrees(-50.0, -50.0),
|
});
|
var two = pointPrimitives.add({
|
color: Color.LIME,
|
position: Cartesian3.fromDegrees(-50.0, 50.0),
|
});
|
|
camera.setView({
|
destination: Rectangle.fromDegrees(-60.0, -60.0, -40.0, 60.0),
|
});
|
|
scene.morphTo2D(0);
|
scene.renderForSpecs();
|
|
scene.renderForSpecs();
|
var actual = scene.frameState.commandList[0].boundingVolume;
|
|
var projectedPositions = [
|
projection.project(ellipsoid.cartesianToCartographic(one.position)),
|
projection.project(ellipsoid.cartesianToCartographic(two.position)),
|
];
|
var expected = BoundingSphere.fromPoints(projectedPositions);
|
expected.center = new Cartesian3(
|
0.0,
|
expected.center.x,
|
expected.center.y
|
);
|
expect(actual.center).toEqualEpsilon(
|
expected.center,
|
CesiumMath.EPSILON8
|
);
|
expect(actual.radius).toBeGreaterThan(expected.radius);
|
});
|
},
|
"WebGL"
|
);
|