|
@@ -4,7 +4,7 @@ import { VertexData } from "../mesh.vertexData";
|
|
|
import { Scene } from "../../scene";
|
|
|
import { Nullable } from "../../types";
|
|
|
|
|
|
-VertexData.CreateCylinder = function(options: { height?: number, diameterTop?: number, diameterBottom?: number, diameter?: number, tessellation?: number, subdivisions?: number, arc?: number, faceColors?: Color4[], faceUV?: Vector4[], hasRings?: boolean, enclose?: boolean, sideOrientation?: number, frontUVs?: Vector4, backUVs?: Vector4 }): VertexData {
|
|
|
+VertexData.CreateCylinder = function(options: { height?: number, diameterTop?: number, diameterBottom?: number, diameter?: number, tessellation?: number, subdivisions?: number, arc?: number, faceColors?: Color4[], faceUV?: Vector4[], hasRings?: boolean, enclose?: boolean, cap?: number, sideOrientation?: number, frontUVs?: Vector4, backUVs?: Vector4 }): VertexData {
|
|
|
var height: number = options.height || 2;
|
|
|
var diameterTop: number = (options.diameterTop === 0) ? 0 : options.diameterTop || options.diameter || 1;
|
|
|
var diameterBottom: number = (options.diameterBottom === 0) ? 0 : options.diameterBottom || options.diameter || 1;
|
|
@@ -12,6 +12,7 @@ VertexData.CreateCylinder = function(options: { height?: number, diameterTop?: n
|
|
|
var subdivisions: number = options.subdivisions || 1;
|
|
|
var hasRings: boolean = options.hasRings ? true : false;
|
|
|
var enclose: boolean = options.enclose ? true : false;
|
|
|
+ var cap = options.cap || Mesh.CAP_ALL;
|
|
|
var arc: number = options.arc && (options.arc <= 0 || options.arc > 1) ? 1.0 : options.arc || 1.0;
|
|
|
var sideOrientation: number = (options.sideOrientation === 0) ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;
|
|
|
var faceUV: Vector4[] = options.faceUV || new Array<Vector4>(3);
|
|
@@ -235,9 +236,13 @@ VertexData.CreateCylinder = function(options: { height?: number, diameterTop?: n
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- // add caps to geometry
|
|
|
- createCylinderCap(false);
|
|
|
- createCylinderCap(true);
|
|
|
+ // add caps to geometry based on cap parameter
|
|
|
+ if ((cap === Mesh.CAP_START)
|
|
|
+ || (cap === Mesh.CAP_ALL))
|
|
|
+ createCylinderCap(false);
|
|
|
+ if ((cap === Mesh.CAP_END)
|
|
|
+ || (cap === Mesh.CAP_ALL))
|
|
|
+ createCylinderCap(true);
|
|
|
|
|
|
// Sides
|
|
|
VertexData._ComputeSides(sideOrientation, positions, indices, normals, uvs, options.frontUVs, options.backUVs);
|
|
@@ -291,6 +296,7 @@ export class CylinderBuilder {
|
|
|
* * The parameter `subdivisions` sets the number of rings along the cylinder height (positive integer, default 1).
|
|
|
* * The parameter `hasRings` (boolean, default false) makes the subdivisions independent from each other, so they become different faces.
|
|
|
* * The parameter `enclose` (boolean, default false) adds two extra faces per subdivision to a sliced cylinder to close it around its height axis.
|
|
|
+ * * The parameter `cap` sets the way the cylinder is capped. Possible values : BABYLON.Mesh.NO_CAP, BABYLON.Mesh.CAP_START, BABYLON.Mesh.CAP_END, BABYLON.Mesh.CAP_ALL (default).
|
|
|
* * The parameter `arc` (float, default 1) is the ratio (max 1) to apply to the circumference to slice the cylinder.
|
|
|
* * You can set different colors and different images to each box side by using the parameters `faceColors` (an array of n Color3 elements) and `faceUV` (an array of n Vector4 elements).
|
|
|
* * The value of n is the number of cylinder faces. If the cylinder has only 1 subdivisions, n equals : top face + cylinder surface + bottom face = 3
|
|
@@ -309,7 +315,7 @@ export class CylinderBuilder {
|
|
|
* @returns the cylinder mesh
|
|
|
* @see https://doc.babylonjs.com/how_to/set_shapes#cylinder-or-cone
|
|
|
*/
|
|
|
- public static CreateCylinder(name: string, options: { height?: number, diameterTop?: number, diameterBottom?: number, diameter?: number, tessellation?: number, subdivisions?: number, arc?: number, faceColors?: Color4[], faceUV?: Vector4[], updatable?: boolean, hasRings?: boolean, enclose?: boolean, sideOrientation?: number, frontUVs?: Vector4, backUVs?: Vector4 }, scene: any): Mesh {
|
|
|
+ public static CreateCylinder(name: string, options: { height?: number, diameterTop?: number, diameterBottom?: number, diameter?: number, tessellation?: number, subdivisions?: number, arc?: number, faceColors?: Color4[], faceUV?: Vector4[], updatable?: boolean, hasRings?: boolean, enclose?: boolean, cap?: number, sideOrientation?: number, frontUVs?: Vector4, backUVs?: Vector4 }, scene: any): Mesh {
|
|
|
var cylinder = new Mesh(name, scene);
|
|
|
|
|
|
options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);
|
|
@@ -321,4 +327,4 @@ export class CylinderBuilder {
|
|
|
|
|
|
return cylinder;
|
|
|
}
|
|
|
-}
|
|
|
+}
|