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.
278 lines
7.9 KiB
JavaScript
278 lines
7.9 KiB
JavaScript
import { arrayFill } from "../../Source/Cesium.js";
|
|
import { Cartesian3 } from "../../Source/Cesium.js";
|
|
import { EllipseOutlineGeometry } from "../../Source/Cesium.js";
|
|
import { Ellipsoid } from "../../Source/Cesium.js";
|
|
import { GeometryOffsetAttribute } from "../../Source/Cesium.js";
|
|
import createPackableSpecs from "../createPackableSpecs.js";
|
|
|
|
describe("Core/EllipseOutlineGeometry", function () {
|
|
it("throws without a center", function () {
|
|
expect(function () {
|
|
return new EllipseOutlineGeometry({
|
|
semiMajorAxis: 1.0,
|
|
semiMinorAxis: 1.0,
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws without a semiMajorAxis", function () {
|
|
expect(function () {
|
|
return new EllipseOutlineGeometry({
|
|
center: Cartesian3.fromDegrees(0, 0),
|
|
semiMinorAxis: 1.0,
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws without a semiMinorAxis", function () {
|
|
expect(function () {
|
|
return new EllipseOutlineGeometry({
|
|
center: Cartesian3.fromDegrees(0, 0),
|
|
semiMajorAxis: 1.0,
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws with a negative granularity", function () {
|
|
expect(function () {
|
|
return new EllipseOutlineGeometry({
|
|
center: Cartesian3.fromDegrees(0, 0),
|
|
semiMajorAxis: 1.0,
|
|
semiMinorAxis: 1.0,
|
|
granularity: -1.0,
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws when semiMajorAxis is less than the semiMajorAxis", function () {
|
|
expect(function () {
|
|
return new EllipseOutlineGeometry({
|
|
center: Cartesian3.fromDegrees(0, 0),
|
|
semiMajorAxis: 1.0,
|
|
semiMinorAxis: 2.0,
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("computes positions", function () {
|
|
var m = EllipseOutlineGeometry.createGeometry(
|
|
new EllipseOutlineGeometry({
|
|
ellipsoid: Ellipsoid.WGS84,
|
|
center: Cartesian3.fromDegrees(0, 0),
|
|
granularity: 0.1,
|
|
semiMajorAxis: 1.0,
|
|
semiMinorAxis: 1.0,
|
|
})
|
|
);
|
|
|
|
expect(m.attributes.position.values.length).toEqual(8 * 3);
|
|
expect(m.indices.length).toEqual(8 * 2);
|
|
expect(m.boundingSphere.radius).toEqual(1);
|
|
});
|
|
|
|
it("computes positions extruded", function () {
|
|
var m = EllipseOutlineGeometry.createGeometry(
|
|
new EllipseOutlineGeometry({
|
|
ellipsoid: Ellipsoid.WGS84,
|
|
center: Cartesian3.fromDegrees(0, 0),
|
|
granularity: 0.1,
|
|
semiMajorAxis: 1.0,
|
|
semiMinorAxis: 1.0,
|
|
extrudedHeight: 5.0,
|
|
})
|
|
);
|
|
|
|
expect(m.attributes.position.values.length).toEqual(16 * 3); // 8 top + 8 bottom
|
|
expect(m.indices.length).toEqual(24 * 2); // 8 top + 8 bottom + 8 sides
|
|
});
|
|
|
|
it("computes offset attribute", function () {
|
|
var m = EllipseOutlineGeometry.createGeometry(
|
|
new EllipseOutlineGeometry({
|
|
ellipsoid: Ellipsoid.WGS84,
|
|
center: Cartesian3.fromDegrees(0, 0),
|
|
granularity: 0.1,
|
|
semiMajorAxis: 1.0,
|
|
semiMinorAxis: 1.0,
|
|
offsetAttribute: GeometryOffsetAttribute.TOP,
|
|
})
|
|
);
|
|
|
|
var numVertices = 8;
|
|
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 offset attribute extruded for top vertices", function () {
|
|
var m = EllipseOutlineGeometry.createGeometry(
|
|
new EllipseOutlineGeometry({
|
|
ellipsoid: Ellipsoid.WGS84,
|
|
center: Cartesian3.fromDegrees(0, 0),
|
|
granularity: 0.1,
|
|
semiMajorAxis: 1.0,
|
|
semiMinorAxis: 1.0,
|
|
extrudedHeight: 5.0,
|
|
offsetAttribute: GeometryOffsetAttribute.TOP,
|
|
})
|
|
);
|
|
|
|
var numVertices = 16;
|
|
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, 0);
|
|
expected = arrayFill(expected, 1, 0, 8);
|
|
expect(offset).toEqual(expected);
|
|
});
|
|
|
|
it("computes offset attribute extruded for all vertices", function () {
|
|
var m = EllipseOutlineGeometry.createGeometry(
|
|
new EllipseOutlineGeometry({
|
|
ellipsoid: Ellipsoid.WGS84,
|
|
center: Cartesian3.fromDegrees(0, 0),
|
|
granularity: 0.1,
|
|
semiMajorAxis: 1.0,
|
|
semiMinorAxis: 1.0,
|
|
extrudedHeight: 5.0,
|
|
offsetAttribute: GeometryOffsetAttribute.ALL,
|
|
})
|
|
);
|
|
|
|
var numVertices = 16;
|
|
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 positions extruded, no lines drawn between top and bottom", function () {
|
|
var m = EllipseOutlineGeometry.createGeometry(
|
|
new EllipseOutlineGeometry({
|
|
ellipsoid: Ellipsoid.WGS84,
|
|
center: Cartesian3.fromDegrees(0, 0),
|
|
granularity: 0.1,
|
|
semiMajorAxis: 1.0,
|
|
semiMinorAxis: 1.0,
|
|
extrudedHeight: 5.0,
|
|
numberOfVerticalLines: 0,
|
|
})
|
|
);
|
|
|
|
expect(m.attributes.position.values.length).toEqual(16 * 3);
|
|
expect(m.indices.length).toEqual(16 * 2);
|
|
});
|
|
|
|
it("undefined is returned if the minor axis is equal to or less than zero", function () {
|
|
var ellipseOutline0 = new EllipseOutlineGeometry({
|
|
center: Cartesian3.fromDegrees(-75.59777, 40.03883),
|
|
semiMajorAxis: 300000.0,
|
|
semiMinorAxis: 0.0,
|
|
});
|
|
var ellipseOutline1 = new EllipseOutlineGeometry({
|
|
center: Cartesian3.fromDegrees(-75.59777, 40.03883),
|
|
semiMajorAxis: 0.0,
|
|
semiMinorAxis: -1.0,
|
|
});
|
|
var ellipseOutline2 = new EllipseOutlineGeometry({
|
|
center: Cartesian3.fromDegrees(-75.59777, 40.03883),
|
|
semiMajorAxis: 300000.0,
|
|
semiMinorAxis: -10.0,
|
|
});
|
|
var ellipseOutline3 = new EllipseOutlineGeometry({
|
|
center: Cartesian3.fromDegrees(-75.59777, 40.03883),
|
|
semiMajorAxis: -1.0,
|
|
semiMinorAxis: -2.0,
|
|
});
|
|
|
|
var geometry0 = EllipseOutlineGeometry.createGeometry(ellipseOutline0);
|
|
var geometry1 = EllipseOutlineGeometry.createGeometry(ellipseOutline1);
|
|
var geometry2 = EllipseOutlineGeometry.createGeometry(ellipseOutline2);
|
|
var geometry3 = EllipseOutlineGeometry.createGeometry(ellipseOutline3);
|
|
|
|
expect(geometry0).toBeUndefined();
|
|
expect(geometry1).toBeUndefined();
|
|
expect(geometry2).toBeUndefined();
|
|
expect(geometry3).toBeUndefined();
|
|
});
|
|
|
|
var center = new Cartesian3(8, 9, 10);
|
|
var ellipsoid = new Ellipsoid(11, 12, 13);
|
|
var packableInstance = new EllipseOutlineGeometry({
|
|
ellipsoid: ellipsoid,
|
|
center: center,
|
|
granularity: 1,
|
|
semiMinorAxis: 2,
|
|
semiMajorAxis: 3,
|
|
numberOfVerticalLines: 4,
|
|
height: 5,
|
|
rotation: 6,
|
|
extrudedHeight: 7,
|
|
});
|
|
var packedInstance = [
|
|
center.x,
|
|
center.y,
|
|
center.z,
|
|
ellipsoid.radii.x,
|
|
ellipsoid.radii.y,
|
|
ellipsoid.radii.z,
|
|
3,
|
|
2,
|
|
6,
|
|
7,
|
|
1,
|
|
5,
|
|
4,
|
|
-1,
|
|
];
|
|
createPackableSpecs(
|
|
EllipseOutlineGeometry,
|
|
packableInstance,
|
|
packedInstance,
|
|
"extruded"
|
|
);
|
|
|
|
//Because extrudedHeight is optional and has to be taken into account when packing, we have a second test without it.
|
|
packableInstance = new EllipseOutlineGeometry({
|
|
ellipsoid: ellipsoid,
|
|
center: center,
|
|
granularity: 1,
|
|
semiMinorAxis: 2,
|
|
semiMajorAxis: 3,
|
|
numberOfVerticalLines: 4,
|
|
height: 5,
|
|
rotation: 6,
|
|
});
|
|
packedInstance = [
|
|
center.x,
|
|
center.y,
|
|
center.z,
|
|
ellipsoid.radii.x,
|
|
ellipsoid.radii.y,
|
|
ellipsoid.radii.z,
|
|
3,
|
|
2,
|
|
6,
|
|
5,
|
|
1,
|
|
5,
|
|
4,
|
|
-1,
|
|
];
|
|
createPackableSpecs(
|
|
EllipseOutlineGeometry,
|
|
packableInstance,
|
|
packedInstance,
|
|
"at height"
|
|
);
|
|
});
|