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.
190 lines
5.8 KiB
JavaScript
190 lines
5.8 KiB
JavaScript
import { arrayFill } from "../../Source/Cesium.js";
|
|
import { CylinderGeometry } from "../../Source/Cesium.js";
|
|
import { GeometryOffsetAttribute } from "../../Source/Cesium.js";
|
|
import { VertexFormat } from "../../Source/Cesium.js";
|
|
import createPackableSpecs from "../createPackableSpecs.js";
|
|
|
|
describe("Core/CylinderGeometry", function () {
|
|
it("constructor throws with no length", function () {
|
|
expect(function () {
|
|
return new CylinderGeometry({});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("constructor throws with no topRadius", function () {
|
|
expect(function () {
|
|
return new CylinderGeometry({
|
|
length: 1,
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("constructor throws with no bottomRadius", function () {
|
|
expect(function () {
|
|
return new CylinderGeometry({
|
|
length: 1,
|
|
topRadius: 1,
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("constructor throws if slices is less than 3", function () {
|
|
expect(function () {
|
|
return new CylinderGeometry({
|
|
length: 1,
|
|
topRadius: 1,
|
|
bottomRadius: 1,
|
|
slices: 2,
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("computes positions", function () {
|
|
var m = CylinderGeometry.createGeometry(
|
|
new CylinderGeometry({
|
|
vertexFormat: VertexFormat.POSITION_ONLY,
|
|
length: 1,
|
|
topRadius: 1,
|
|
bottomRadius: 1,
|
|
slices: 3,
|
|
})
|
|
);
|
|
|
|
var numVertices = 12; // (3 top + 3 bottom) * 2 to duplicate for sides
|
|
var numTriangles = 8; // 1 top + 1 bottom + 2 triangles * 3 sides
|
|
expect(m.attributes.position.values.length).toEqual(numVertices * 3);
|
|
expect(m.indices.length).toEqual(numTriangles * 3);
|
|
});
|
|
|
|
it("computes offset attribute", function () {
|
|
var m = CylinderGeometry.createGeometry(
|
|
new CylinderGeometry({
|
|
vertexFormat: VertexFormat.POSITION_ONLY,
|
|
length: 1,
|
|
topRadius: 1,
|
|
bottomRadius: 1,
|
|
slices: 3,
|
|
offsetAttribute: GeometryOffsetAttribute.ALL,
|
|
})
|
|
);
|
|
|
|
var numVertices = 12;
|
|
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("compute all vertex attributes", function () {
|
|
var m = CylinderGeometry.createGeometry(
|
|
new CylinderGeometry({
|
|
vertexFormat: VertexFormat.ALL,
|
|
length: 1,
|
|
topRadius: 1,
|
|
bottomRadius: 1,
|
|
slices: 3,
|
|
})
|
|
);
|
|
|
|
var numVertices = 12;
|
|
var numTriangles = 8;
|
|
expect(m.attributes.position.values.length).toEqual(numVertices * 3);
|
|
expect(m.attributes.st.values.length).toEqual(numVertices * 2);
|
|
expect(m.attributes.normal.values.length).toEqual(numVertices * 3);
|
|
expect(m.attributes.tangent.values.length).toEqual(numVertices * 3);
|
|
expect(m.attributes.bitangent.values.length).toEqual(numVertices * 3);
|
|
expect(m.indices.length).toEqual(numTriangles * 3);
|
|
});
|
|
|
|
it("computes positions with topRadius equals 0", function () {
|
|
var m = CylinderGeometry.createGeometry(
|
|
new CylinderGeometry({
|
|
vertexFormat: VertexFormat.POSITION_ONLY,
|
|
length: 1,
|
|
topRadius: 0,
|
|
bottomRadius: 1,
|
|
slices: 3,
|
|
})
|
|
);
|
|
|
|
var numVertices = 12; //(3 top 3 bottom) duplicated
|
|
var numTriangles = 8; //1 top 1 bottom, 2 on each of 3 sides
|
|
expect(m.attributes.position.values.length).toEqual(numVertices * 3);
|
|
expect(m.indices.length).toEqual(numTriangles * 3);
|
|
});
|
|
|
|
it("computes positions with bottomRadius equals 0", function () {
|
|
var m = CylinderGeometry.createGeometry(
|
|
new CylinderGeometry({
|
|
vertexFormat: VertexFormat.POSITION_ONLY,
|
|
length: 1,
|
|
topRadius: 1,
|
|
bottomRadius: 0,
|
|
slices: 3,
|
|
})
|
|
);
|
|
|
|
var numVertices = 12; //(3 top 3 bottom) duplicated
|
|
var numTriangles = 8; //1 top 1 bottom, 2 on each of 3 sides
|
|
expect(m.attributes.position.values.length).toEqual(numVertices * 3);
|
|
expect(m.indices.length).toEqual(numTriangles * 3);
|
|
});
|
|
|
|
it(
|
|
"undefined is returned if the length is less than or equal to zero or if " +
|
|
"both radii are equal to zero or is either radii and less than zero",
|
|
function () {
|
|
var cylinder0 = new CylinderGeometry({
|
|
length: 0,
|
|
topRadius: 80000,
|
|
bottomRadius: 200000,
|
|
});
|
|
var cylinder1 = new CylinderGeometry({
|
|
length: 200000,
|
|
topRadius: 0,
|
|
bottomRadius: 0,
|
|
});
|
|
var cylinder2 = new CylinderGeometry({
|
|
length: 200000,
|
|
topRadius: -10,
|
|
bottomRadius: 4,
|
|
});
|
|
var cylinder3 = new CylinderGeometry({
|
|
length: -200000,
|
|
topRadius: 100,
|
|
bottomRadius: 100,
|
|
});
|
|
var cylinder4 = new CylinderGeometry({
|
|
length: 200000,
|
|
topRadius: 0,
|
|
bottomRadius: -34,
|
|
});
|
|
|
|
var geometry0 = CylinderGeometry.createGeometry(cylinder0);
|
|
var geometry1 = CylinderGeometry.createGeometry(cylinder1);
|
|
var geometry2 = CylinderGeometry.createGeometry(cylinder2);
|
|
var geometry3 = CylinderGeometry.createGeometry(cylinder3);
|
|
var geometry4 = CylinderGeometry.createGeometry(cylinder4);
|
|
|
|
expect(geometry0).toBeUndefined();
|
|
expect(geometry1).toBeUndefined();
|
|
expect(geometry2).toBeUndefined();
|
|
expect(geometry3).toBeUndefined();
|
|
expect(geometry4).toBeUndefined();
|
|
}
|
|
);
|
|
|
|
var cylinder = new CylinderGeometry({
|
|
vertexFormat: VertexFormat.POSITION_ONLY,
|
|
length: 1,
|
|
topRadius: 1,
|
|
bottomRadius: 0,
|
|
slices: 3,
|
|
});
|
|
var packedInstance = [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 3.0, -1.0];
|
|
createPackableSpecs(CylinderGeometry, cylinder, packedInstance);
|
|
});
|