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.
224 lines
6.0 KiB
JavaScript
224 lines
6.0 KiB
JavaScript
import { Cartesian2 } from "../../Source/Cesium.js";
|
|
import { Cartesian3 } from "../../Source/Cesium.js";
|
|
import { CornerType } from "../../Source/Cesium.js";
|
|
import { Ellipsoid } from "../../Source/Cesium.js";
|
|
import { PolylineVolumeOutlineGeometry } from "../../Source/Cesium.js";
|
|
import createPackableSpecs from "../createPackableSpecs.js";
|
|
|
|
describe("Core/PolylineVolumeOutlineGeometry", function () {
|
|
var shape;
|
|
|
|
beforeAll(function () {
|
|
shape = [
|
|
new Cartesian2(-100, -100),
|
|
new Cartesian2(100, -100),
|
|
new Cartesian2(100, 100),
|
|
new Cartesian2(-100, 100),
|
|
];
|
|
});
|
|
|
|
it("throws without polyline positions", function () {
|
|
expect(function () {
|
|
return new PolylineVolumeOutlineGeometry({});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws without shape positions", function () {
|
|
expect(function () {
|
|
return new PolylineVolumeOutlineGeometry({
|
|
polylinePositions: [new Cartesian3()],
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("createGeometry returnes undefined without 2 unique polyline positions", function () {
|
|
var geometry = PolylineVolumeOutlineGeometry.createGeometry(
|
|
new PolylineVolumeOutlineGeometry({
|
|
polylinePositions: [new Cartesian3()],
|
|
shapePositions: shape,
|
|
})
|
|
);
|
|
expect(geometry).toBeUndefined();
|
|
});
|
|
|
|
it("createGeometry returnes undefined without 3 unique shape positions", function () {
|
|
var geometry = PolylineVolumeOutlineGeometry.createGeometry(
|
|
new PolylineVolumeOutlineGeometry({
|
|
polylinePositions: [Cartesian3.UNIT_X, Cartesian3.UNIT_Y],
|
|
shapePositions: [
|
|
Cartesian2.UNIT_X,
|
|
Cartesian2.UNIT_X,
|
|
Cartesian2.UNIT_X,
|
|
],
|
|
})
|
|
);
|
|
expect(geometry).toBeUndefined();
|
|
});
|
|
|
|
it("computes positions", function () {
|
|
var m = PolylineVolumeOutlineGeometry.createGeometry(
|
|
new PolylineVolumeOutlineGeometry({
|
|
polylinePositions: Cartesian3.fromDegreesArray([
|
|
90.0,
|
|
-30.0,
|
|
90.0,
|
|
-35.0,
|
|
]),
|
|
shapePositions: shape,
|
|
cornerType: CornerType.MITERED,
|
|
})
|
|
);
|
|
|
|
expect(m.attributes.position.values.length).toEqual(24 * 3); // 6 polyline positions * 4 box positions
|
|
expect(m.indices.length).toEqual(28 * 2); // 4 lines * 5 positions + 4 lines * 2 end caps
|
|
});
|
|
|
|
it("computes positions, clockwise shape", function () {
|
|
var m = PolylineVolumeOutlineGeometry.createGeometry(
|
|
new PolylineVolumeOutlineGeometry({
|
|
polylinePositions: Cartesian3.fromDegreesArray([
|
|
90.0,
|
|
-30.0,
|
|
90.0,
|
|
-35.0,
|
|
]),
|
|
shapePositions: shape.reverse(),
|
|
cornerType: CornerType.MITERED,
|
|
})
|
|
);
|
|
|
|
expect(m.attributes.position.values.length).toEqual(24 * 3);
|
|
expect(m.indices.length).toEqual(28 * 2);
|
|
});
|
|
|
|
it("computes right turn", function () {
|
|
var m = PolylineVolumeOutlineGeometry.createGeometry(
|
|
new PolylineVolumeOutlineGeometry({
|
|
polylinePositions: Cartesian3.fromDegreesArray([
|
|
90.0,
|
|
-30.0,
|
|
90.0,
|
|
-31.0,
|
|
91.0,
|
|
-31.0,
|
|
]),
|
|
cornerType: CornerType.MITERED,
|
|
shapePositions: shape,
|
|
})
|
|
);
|
|
|
|
expect(m.attributes.position.values.length).toEqual(20 * 3); // (2 ends + 3 corner positions) * 4 box positions
|
|
expect(m.indices.length).toEqual(24 * 2); // 4 lines * 4 positions + 4 lines * 2 end caps
|
|
});
|
|
|
|
it("computes left turn", function () {
|
|
var m = PolylineVolumeOutlineGeometry.createGeometry(
|
|
new PolylineVolumeOutlineGeometry({
|
|
polylinePositions: Cartesian3.fromDegreesArray([
|
|
90.0,
|
|
-30.0,
|
|
90.0,
|
|
-31.0,
|
|
89.0,
|
|
-31.0,
|
|
]),
|
|
cornerType: CornerType.MITERED,
|
|
shapePositions: shape,
|
|
})
|
|
);
|
|
|
|
expect(m.attributes.position.values.length).toEqual(20 * 3);
|
|
expect(m.indices.length).toEqual(24 * 2);
|
|
});
|
|
|
|
it("computes with rounded corners", function () {
|
|
var m = PolylineVolumeOutlineGeometry.createGeometry(
|
|
new PolylineVolumeOutlineGeometry({
|
|
polylinePositions: Cartesian3.fromDegreesArray([
|
|
90.0,
|
|
-30.0,
|
|
90.0,
|
|
-31.0,
|
|
89.0,
|
|
-31.0,
|
|
89.0,
|
|
-32.0,
|
|
]),
|
|
cornerType: CornerType.ROUNDED,
|
|
shapePositions: shape,
|
|
})
|
|
);
|
|
|
|
var corners = 36 * 4;
|
|
var numVertices = corners + 28; // corners + 7 positions * 4 for shape
|
|
var numLines = corners + 32; // corners + 6 segments * 4 lines per segment + 4 lines * 2 ends
|
|
expect(m.attributes.position.values.length).toEqual(numVertices * 3);
|
|
expect(m.indices.length).toEqual(numLines * 2);
|
|
});
|
|
|
|
it("computes with beveled corners", function () {
|
|
var m = PolylineVolumeOutlineGeometry.createGeometry(
|
|
new PolylineVolumeOutlineGeometry({
|
|
polylinePositions: Cartesian3.fromDegreesArray([
|
|
90.0,
|
|
-30.0,
|
|
90.0,
|
|
-31.0,
|
|
89.0,
|
|
-31.0,
|
|
89.0,
|
|
-32.0,
|
|
]),
|
|
cornerType: CornerType.BEVELED,
|
|
shapePositions: shape,
|
|
})
|
|
);
|
|
|
|
expect(m.attributes.position.values.length).toEqual(40 * 3); // 10 positions * 4 for shape
|
|
expect(m.indices.length).toEqual(44 * 2); // 9 segments * 4 lines per segment + 4 lines * 2 ends
|
|
});
|
|
|
|
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 volumeShape = [
|
|
new Cartesian2(0.0, 0.0),
|
|
new Cartesian2(1.0, 0.0),
|
|
new Cartesian2(0.0, 1.0),
|
|
];
|
|
var volume = new PolylineVolumeOutlineGeometry({
|
|
polylinePositions: positions,
|
|
cornerType: CornerType.BEVELED,
|
|
shapePositions: volumeShape,
|
|
ellipsoid: Ellipsoid.UNIT_SPHERE,
|
|
granularity: 0.1,
|
|
});
|
|
var packedInstance = [
|
|
3.0,
|
|
1.0,
|
|
0.0,
|
|
0.0,
|
|
0.0,
|
|
1.0,
|
|
0.0,
|
|
0.0,
|
|
0.0,
|
|
1.0,
|
|
3.0,
|
|
0.0,
|
|
0.0,
|
|
1.0,
|
|
0.0,
|
|
0.0,
|
|
1.0,
|
|
1.0,
|
|
1.0,
|
|
1.0,
|
|
2.0,
|
|
0.1,
|
|
];
|
|
createPackableSpecs(PolylineVolumeOutlineGeometry, volume, packedInstance);
|
|
});
|