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.
242 lines
7.9 KiB
JavaScript
242 lines
7.9 KiB
JavaScript
import { arrayFill } from "../../Source/Cesium.js";
|
|
import { Cartesian3 } from "../../Source/Cesium.js";
|
|
import { EllipsoidOutlineGeometry } from "../../Source/Cesium.js";
|
|
import { GeometryOffsetAttribute } from "../../Source/Cesium.js";
|
|
import { Math as CesiumMath } from "../../Source/Cesium.js";
|
|
import createPackableSpecs from "../createPackableSpecs.js";
|
|
|
|
describe("Core/EllipsoidOutlineGeometry", function () {
|
|
it("constructor throws if stackPartitions less than 1", function () {
|
|
expect(function () {
|
|
return new EllipsoidOutlineGeometry({
|
|
stackPartitions: 0,
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("constructor throws if slicePartitions less than 0", function () {
|
|
expect(function () {
|
|
return new EllipsoidOutlineGeometry({
|
|
slicePartitions: -1,
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("constructor throws if subdivisions less than 0", function () {
|
|
expect(function () {
|
|
return new EllipsoidOutlineGeometry({
|
|
subdivisions: -2,
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("constructor throws if offset attribute is equal to GeometryOffsetAttribute.TOP", function () {
|
|
expect(function () {
|
|
return new EllipsoidOutlineGeometry({
|
|
offsetAttribute: GeometryOffsetAttribute.TOP,
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("constructor rounds floating-point slicePartitions", function () {
|
|
var m = new EllipsoidOutlineGeometry({
|
|
slicePartitions: 3.5,
|
|
stackPartitions: 3,
|
|
subdivisions: 3,
|
|
});
|
|
expect(m._slicePartitions).toEqual(4);
|
|
});
|
|
|
|
it("constructor rounds floating-point stackPartitions", function () {
|
|
var m = new EllipsoidOutlineGeometry({
|
|
slicePartitions: 3,
|
|
stackPartitions: 3.5,
|
|
subdivisions: 3,
|
|
});
|
|
expect(m._stackPartitions).toEqual(4);
|
|
});
|
|
|
|
it("constructor rounds floating-point subdivisions", function () {
|
|
var m = new EllipsoidOutlineGeometry({
|
|
slicePartitions: 3,
|
|
stackPartitions: 3,
|
|
subdivisions: 3.5,
|
|
});
|
|
expect(m._subdivisions).toEqual(4);
|
|
});
|
|
|
|
it("computes positions", function () {
|
|
var m = EllipsoidOutlineGeometry.createGeometry(
|
|
new EllipsoidOutlineGeometry({
|
|
stackPartitions: 3,
|
|
slicePartitions: 3,
|
|
subdivisions: 3,
|
|
})
|
|
);
|
|
|
|
expect(m.attributes.position.values.length).toEqual(24 * 3);
|
|
expect(m.indices.length).toEqual(16 * 2);
|
|
expect(m.boundingSphere.radius).toEqual(1);
|
|
});
|
|
|
|
it("computes positions for partial ellipsoid", function () {
|
|
var m = EllipsoidOutlineGeometry.createGeometry(
|
|
new EllipsoidOutlineGeometry({
|
|
innerRadii: new Cartesian3(0.5, 0.5, 0.5),
|
|
minimumClock: CesiumMath.toRadians(90.0),
|
|
maximumClock: CesiumMath.toRadians(270.0),
|
|
minimumCone: CesiumMath.toRadians(30.0),
|
|
maximumCone: CesiumMath.toRadians(120.0),
|
|
stackPartitions: 3,
|
|
slicePartitions: 3,
|
|
subdivisions: 3,
|
|
})
|
|
);
|
|
|
|
expect(m.attributes.position.values.length).toEqual(24 * 3);
|
|
expect(m.indices.length).toEqual(20 * 2);
|
|
expect(m.boundingSphere.radius).toEqual(1);
|
|
});
|
|
|
|
it("computes offset attribute", function () {
|
|
var m = EllipsoidOutlineGeometry.createGeometry(
|
|
new EllipsoidOutlineGeometry({
|
|
stackPartitions: 3,
|
|
slicePartitions: 3,
|
|
subdivisions: 3,
|
|
offsetAttribute: GeometryOffsetAttribute.ALL,
|
|
})
|
|
);
|
|
|
|
var numVertices = 24;
|
|
expect(m.attributes.position.values.length).toEqual(numVertices * 3);
|
|
|
|
var offset = m.attributes.applyOffset.values;
|
|
expect(offset.length).toEqual(numVertices);
|
|
var expected = new Array(offset.length);
|
|
expected = arrayFill(expected, 1);
|
|
expect(offset).toEqual(expected);
|
|
});
|
|
|
|
it("computes partitions to default to 2 if less than 2", function () {
|
|
var geometry = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(0.5, 0.5, 0.5),
|
|
});
|
|
|
|
geometry._slicePartitions = 0;
|
|
geometry._stackPartitions = 0;
|
|
|
|
var m = EllipsoidOutlineGeometry.createGeometry(geometry);
|
|
|
|
expect(m.indices.length).toEqual(1016);
|
|
});
|
|
|
|
it("undefined is returned if the x, y, or z radii are equal or less than zero", function () {
|
|
var ellipsoidOutline0 = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(0.0, 500000.0, 500000.0),
|
|
});
|
|
var ellipsoidOutline1 = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(1000000.0, 0.0, 500000.0),
|
|
});
|
|
var ellipsoidOutline2 = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(1000000.0, 500000.0, 0.0),
|
|
});
|
|
var ellipsoidOutline3 = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(-10.0, 500000.0, 500000.0),
|
|
});
|
|
var ellipsoidOutline4 = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(1000000.0, -10.0, 500000.0),
|
|
});
|
|
var ellipsoidOutline5 = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(1000000.0, 500000.0, -10.0),
|
|
});
|
|
var ellipsoidOutline6 = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(500000.0, 500000.0, 500000.0),
|
|
innerRadii: new Cartesian3(0.0, 100000.0, 100000.0),
|
|
});
|
|
var ellipsoidOutline7 = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(500000.0, 500000.0, 500000.0),
|
|
innerRadii: new Cartesian3(100000.0, 0.0, 100000.0),
|
|
});
|
|
var ellipsoidOutline8 = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(500000.0, 500000.0, 500000.0),
|
|
innerRadii: new Cartesian3(100000.0, 100000.0, 0.0),
|
|
});
|
|
var ellipsoidOutline9 = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(500000.0, 500000.0, 500000.0),
|
|
innerRadii: new Cartesian3(-10.0, 100000.0, 100000.0),
|
|
});
|
|
var ellipsoidOutline10 = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(500000.0, 500000.0, 500000.0),
|
|
innerRadii: new Cartesian3(100000.0, -10.0, 100000.0),
|
|
});
|
|
var ellipsoidOutline11 = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(500000.0, 500000.0, 500000.0),
|
|
innerRadii: new Cartesian3(100000.0, 100000.0, -10.0),
|
|
});
|
|
|
|
var geometry0 = EllipsoidOutlineGeometry.createGeometry(ellipsoidOutline0);
|
|
var geometry1 = EllipsoidOutlineGeometry.createGeometry(ellipsoidOutline1);
|
|
var geometry2 = EllipsoidOutlineGeometry.createGeometry(ellipsoidOutline2);
|
|
var geometry3 = EllipsoidOutlineGeometry.createGeometry(ellipsoidOutline3);
|
|
var geometry4 = EllipsoidOutlineGeometry.createGeometry(ellipsoidOutline4);
|
|
var geometry5 = EllipsoidOutlineGeometry.createGeometry(ellipsoidOutline5);
|
|
var geometry6 = EllipsoidOutlineGeometry.createGeometry(ellipsoidOutline6);
|
|
var geometry7 = EllipsoidOutlineGeometry.createGeometry(ellipsoidOutline7);
|
|
var geometry8 = EllipsoidOutlineGeometry.createGeometry(ellipsoidOutline8);
|
|
var geometry9 = EllipsoidOutlineGeometry.createGeometry(ellipsoidOutline9);
|
|
var geometry10 = EllipsoidOutlineGeometry.createGeometry(
|
|
ellipsoidOutline10
|
|
);
|
|
var geometry11 = EllipsoidOutlineGeometry.createGeometry(
|
|
ellipsoidOutline11
|
|
);
|
|
|
|
expect(geometry0).toBeUndefined();
|
|
expect(geometry1).toBeUndefined();
|
|
expect(geometry2).toBeUndefined();
|
|
expect(geometry3).toBeUndefined();
|
|
expect(geometry4).toBeUndefined();
|
|
expect(geometry5).toBeUndefined();
|
|
expect(geometry6).toBeUndefined();
|
|
expect(geometry7).toBeUndefined();
|
|
expect(geometry8).toBeUndefined();
|
|
expect(geometry9).toBeUndefined();
|
|
expect(geometry10).toBeUndefined();
|
|
expect(geometry11).toBeUndefined();
|
|
});
|
|
|
|
var ellipsoidgeometry = new EllipsoidOutlineGeometry({
|
|
radii: new Cartesian3(1.0, 2.0, 3.0),
|
|
innerRadii: new Cartesian3(0.5, 0.6, 0.7),
|
|
minimumClock: 0.1,
|
|
maximumClock: 0.2,
|
|
minimumCone: 0.3,
|
|
maximumCone: 0.4,
|
|
slicePartitions: 3,
|
|
stackPartitions: 3,
|
|
subdivisions: 3,
|
|
});
|
|
var packedInstance = [
|
|
1.0,
|
|
2.0,
|
|
3.0,
|
|
0.5,
|
|
0.6,
|
|
0.7,
|
|
0.1,
|
|
0.2,
|
|
0.3,
|
|
0.4,
|
|
3.0,
|
|
3.0,
|
|
3.0,
|
|
-1,
|
|
];
|
|
createPackableSpecs(
|
|
EllipsoidOutlineGeometry,
|
|
ellipsoidgeometry,
|
|
packedInstance
|
|
);
|
|
});
|