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.
323 lines
8.5 KiB
JavaScript
323 lines
8.5 KiB
JavaScript
import { ArcType } from "../../Source/Cesium.js";
|
|
import { BoundingSphere } from "../../Source/Cesium.js";
|
|
import { Cartesian3 } from "../../Source/Cesium.js";
|
|
import { Color } from "../../Source/Cesium.js";
|
|
import { Ellipsoid } from "../../Source/Cesium.js";
|
|
import { Math as CesiumMath } from "../../Source/Cesium.js";
|
|
import { PrimitiveType } from "../../Source/Cesium.js";
|
|
import { SimplePolylineGeometry } from "../../Source/Cesium.js";
|
|
import createPackableSpecs from "../createPackableSpecs.js";
|
|
|
|
describe("Core/SimplePolylineGeometry", function () {
|
|
it("constructor throws with no positions", function () {
|
|
expect(function () {
|
|
return new SimplePolylineGeometry();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("constructor throws with less than two positions", function () {
|
|
expect(function () {
|
|
return new SimplePolylineGeometry({
|
|
positions: [Cartesian3.ZERO],
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("constructor throws with invalid number of colors", function () {
|
|
expect(function () {
|
|
return new SimplePolylineGeometry({
|
|
positions: [Cartesian3.ZERO, Cartesian3.UNIT_X, Cartesian3.UNIT_Y],
|
|
colors: [],
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("constructor computes all vertex attributes", function () {
|
|
var positions = [
|
|
new Cartesian3(1.0, 0.0, 0.0),
|
|
new Cartesian3(0.0, 1.0, 0.0),
|
|
new Cartesian3(0.0, 0.0, 1.0),
|
|
];
|
|
var line = SimplePolylineGeometry.createGeometry(
|
|
new SimplePolylineGeometry({
|
|
positions: positions,
|
|
granularity: Math.PI,
|
|
ellipsoid: Ellipsoid.UNIT_SPHERE,
|
|
})
|
|
);
|
|
|
|
expect(line.attributes.position.values).toEqualEpsilon(
|
|
[1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0],
|
|
CesiumMath.EPSILON10
|
|
);
|
|
expect(line.indices).toEqual([0, 1, 1, 2]);
|
|
expect(line.primitiveType).toEqual(PrimitiveType.LINES);
|
|
expect(line.boundingSphere).toEqual(BoundingSphere.fromPoints(positions));
|
|
});
|
|
|
|
it("constructor computes all vertex attributes for rhumb lines", function () {
|
|
var positions = Cartesian3.fromDegreesArray([30, 30, 30, 60, 60, 60]);
|
|
var line = SimplePolylineGeometry.createGeometry(
|
|
new SimplePolylineGeometry({
|
|
positions: positions,
|
|
granularity: Math.PI,
|
|
ellipsoid: Ellipsoid.UNIT_SPHERE,
|
|
arcType: ArcType.RHUMB,
|
|
})
|
|
);
|
|
|
|
var cartesian3Array = [];
|
|
Cartesian3.packArray(positions, cartesian3Array);
|
|
|
|
expect(line.attributes.position.values).toEqualEpsilon(
|
|
cartesian3Array,
|
|
CesiumMath.EPSILON8
|
|
);
|
|
expect(line.indices).toEqual([0, 1, 1, 2]);
|
|
expect(line.primitiveType).toEqual(PrimitiveType.LINES);
|
|
expect(line.boundingSphere).toEqual(BoundingSphere.fromPoints(positions));
|
|
});
|
|
|
|
it("constructor computes per segment colors", function () {
|
|
var positions = [
|
|
new Cartesian3(1.0, 0.0, 0.0),
|
|
new Cartesian3(0.0, 1.0, 0.0),
|
|
new Cartesian3(0.0, 0.0, 1.0),
|
|
];
|
|
var colors = [
|
|
new Color(1.0, 0.0, 0.0, 1.0),
|
|
new Color(0.0, 1.0, 0.0, 1.0),
|
|
new Color(0.0, 0.0, 1.0, 1.0),
|
|
];
|
|
var line = SimplePolylineGeometry.createGeometry(
|
|
new SimplePolylineGeometry({
|
|
positions: positions,
|
|
colors: colors,
|
|
granularity: Math.PI,
|
|
ellipsoid: Ellipsoid.UNIT_SPHERE,
|
|
})
|
|
);
|
|
|
|
expect(line.attributes.color).toBeDefined();
|
|
|
|
var numVertices = positions.length * 2 - 2;
|
|
expect(line.attributes.color.values.length).toEqual(numVertices * 4);
|
|
});
|
|
|
|
it("constructor computes per vertex colors", function () {
|
|
var positions = [
|
|
new Cartesian3(1.0, 0.0, 0.0),
|
|
new Cartesian3(0.0, 1.0, 0.0),
|
|
new Cartesian3(0.0, 0.0, 1.0),
|
|
];
|
|
var colors = [
|
|
new Color(1.0, 0.0, 0.0, 1.0),
|
|
new Color(0.0, 1.0, 0.0, 1.0),
|
|
new Color(0.0, 0.0, 1.0, 1.0),
|
|
];
|
|
var line = SimplePolylineGeometry.createGeometry(
|
|
new SimplePolylineGeometry({
|
|
positions: positions,
|
|
colors: colors,
|
|
colorsPerVertex: true,
|
|
granularity: Math.PI,
|
|
ellipsoid: Ellipsoid.UNIT_SPHERE,
|
|
})
|
|
);
|
|
|
|
expect(line.attributes.color).toBeDefined();
|
|
|
|
var numVertices = positions.length;
|
|
expect(line.attributes.color.values.length).toEqual(numVertices * 4);
|
|
});
|
|
|
|
it("constructor computes all vertex attributes, no subdivision", function () {
|
|
var positions = [
|
|
new Cartesian3(),
|
|
new Cartesian3(1.0, 0.0, 0.0),
|
|
new Cartesian3(2.0, 0.0, 0.0),
|
|
];
|
|
var line = SimplePolylineGeometry.createGeometry(
|
|
new SimplePolylineGeometry({
|
|
positions: positions,
|
|
arcType: ArcType.NONE,
|
|
})
|
|
);
|
|
|
|
expect(line.attributes.position.values).toEqual([
|
|
0.0,
|
|
0.0,
|
|
0.0,
|
|
1.0,
|
|
0.0,
|
|
0.0,
|
|
2.0,
|
|
0.0,
|
|
0.0,
|
|
]);
|
|
expect(line.indices).toEqual([0, 1, 1, 2]);
|
|
expect(line.primitiveType).toEqual(PrimitiveType.LINES);
|
|
expect(line.boundingSphere).toEqual(BoundingSphere.fromPoints(positions));
|
|
});
|
|
|
|
it("constructor computes per segment colors, no subdivision", function () {
|
|
var positions = [
|
|
new Cartesian3(),
|
|
new Cartesian3(1.0, 0.0, 0.0),
|
|
new Cartesian3(2.0, 0.0, 0.0),
|
|
];
|
|
var colors = [
|
|
new Color(1.0, 0.0, 0.0, 1.0),
|
|
new Color(0.0, 1.0, 0.0, 1.0),
|
|
new Color(0.0, 0.0, 1.0, 1.0),
|
|
];
|
|
var line = SimplePolylineGeometry.createGeometry(
|
|
new SimplePolylineGeometry({
|
|
positions: positions,
|
|
colors: colors,
|
|
arcType: ArcType.NONE,
|
|
})
|
|
);
|
|
|
|
expect(line.attributes.color).toBeDefined();
|
|
|
|
var numVertices = positions.length * 2 - 2;
|
|
expect(line.attributes.color.values.length).toEqual(numVertices * 4);
|
|
});
|
|
|
|
it("constructor computes per vertex colors, no subdivision", function () {
|
|
var positions = [
|
|
new Cartesian3(),
|
|
new Cartesian3(1.0, 0.0, 0.0),
|
|
new Cartesian3(2.0, 0.0, 0.0),
|
|
];
|
|
var colors = [
|
|
new Color(1.0, 0.0, 0.0, 1.0),
|
|
new Color(0.0, 1.0, 0.0, 1.0),
|
|
new Color(0.0, 0.0, 1.0, 1.0),
|
|
];
|
|
var line = SimplePolylineGeometry.createGeometry(
|
|
new SimplePolylineGeometry({
|
|
positions: positions,
|
|
colors: colors,
|
|
colorsPerVertex: true,
|
|
arcType: ArcType.NONE,
|
|
})
|
|
);
|
|
|
|
expect(line.attributes.color).toBeDefined();
|
|
|
|
var numVertices = positions.length;
|
|
expect(line.attributes.color.values.length).toEqual(numVertices * 4);
|
|
});
|
|
|
|
var positions = [
|
|
new Cartesian3(1, 2, 3),
|
|
new Cartesian3(4, 5, 6),
|
|
new Cartesian3(7, 8, 9),
|
|
];
|
|
var line = new SimplePolylineGeometry({
|
|
positions: positions,
|
|
colors: [Color.RED, Color.LIME, Color.BLUE],
|
|
colorsPerVertex: true,
|
|
arcType: ArcType.NONE,
|
|
granularity: 11,
|
|
ellipsoid: new Ellipsoid(12, 13, 14),
|
|
});
|
|
var packedInstance = [
|
|
3,
|
|
1,
|
|
2,
|
|
3,
|
|
4,
|
|
5,
|
|
6,
|
|
7,
|
|
8,
|
|
9,
|
|
3,
|
|
1,
|
|
0,
|
|
0,
|
|
1,
|
|
0,
|
|
1,
|
|
0,
|
|
1,
|
|
0,
|
|
0,
|
|
1,
|
|
1,
|
|
12,
|
|
13,
|
|
14,
|
|
1,
|
|
0,
|
|
11,
|
|
];
|
|
createPackableSpecs(
|
|
SimplePolylineGeometry,
|
|
line,
|
|
packedInstance,
|
|
"per vertex colors"
|
|
);
|
|
|
|
line = new SimplePolylineGeometry({
|
|
positions: positions,
|
|
colorsPerVertex: false,
|
|
arcType: ArcType.NONE,
|
|
granularity: 11,
|
|
ellipsoid: new Ellipsoid(12, 13, 14),
|
|
});
|
|
packedInstance = [3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 12, 13, 14, 0, 0, 11];
|
|
createPackableSpecs(SimplePolylineGeometry, line, packedInstance);
|
|
|
|
line = new SimplePolylineGeometry({
|
|
positions: positions,
|
|
width: 10.0,
|
|
colorsPerVertex: false,
|
|
arcType: ArcType.GEODESIC,
|
|
granularity: 11,
|
|
ellipsoid: new Ellipsoid(12, 13, 14),
|
|
});
|
|
packedInstance = [3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 12, 13, 14, 0, 1, 11];
|
|
createPackableSpecs(
|
|
SimplePolylineGeometry,
|
|
line,
|
|
packedInstance,
|
|
"geodesic line"
|
|
);
|
|
|
|
line = new SimplePolylineGeometry({
|
|
positions: positions,
|
|
width: 10.0,
|
|
colorsPerVertex: false,
|
|
arcType: ArcType.RHUMB,
|
|
granularity: 11,
|
|
ellipsoid: new Ellipsoid(12, 13, 14),
|
|
});
|
|
packedInstance = [3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 12, 13, 14, 0, 2, 11];
|
|
createPackableSpecs(
|
|
SimplePolylineGeometry,
|
|
line,
|
|
packedInstance,
|
|
"rhumb line"
|
|
);
|
|
|
|
line = new SimplePolylineGeometry({
|
|
positions: positions,
|
|
width: 10.0,
|
|
colorsPerVertex: false,
|
|
arcType: ArcType.NONE,
|
|
granularity: 11,
|
|
ellipsoid: new Ellipsoid(12, 13, 14),
|
|
});
|
|
packedInstance = [3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 12, 13, 14, 0, 0, 11];
|
|
createPackableSpecs(
|
|
SimplePolylineGeometry,
|
|
line,
|
|
packedInstance,
|
|
"straight line"
|
|
);
|
|
});
|