|
@@ -1399,7 +1399,7 @@
|
|
}
|
|
}
|
|
|
|
|
|
public static CreateSphere(name: string, segments: number, diameter: number, scene?: Scene, updatable?: boolean, sideOrientation?: number): Mesh;
|
|
public static CreateSphere(name: string, segments: number, diameter: number, scene?: Scene, updatable?: boolean, sideOrientation?: number): Mesh;
|
|
- public static CreateSphere(name: string, options: { segments?: number, diameter?: number, diameterX?: number, diameterY?: number, diameterZ?: number, sideOrientation?: number, updatable?: boolean }, scene: any): Mesh;
|
|
|
|
|
|
+ public static CreateSphere(name: string, options: { segments?: number, diameter?: number, diameterX?: number, diameterY?: number, diameterZ?: number, arc?: number, slice?: number, sideOrientation?: number, updatable?: boolean }, scene: any): Mesh;
|
|
public static CreateSphere(name: string, options: any, diameterOrScene: any, scene?: Scene, updatable?: boolean, sideOrientation: number = Mesh.DEFAULTSIDE): Mesh {
|
|
public static CreateSphere(name: string, options: any, diameterOrScene: any, scene?: Scene, updatable?: boolean, sideOrientation: number = Mesh.DEFAULTSIDE): Mesh {
|
|
if (diameterOrScene instanceof Scene) {
|
|
if (diameterOrScene instanceof Scene) {
|
|
scene = diameterOrScene;
|
|
scene = diameterOrScene;
|
|
@@ -1426,7 +1426,7 @@
|
|
|
|
|
|
// Cylinder and cone
|
|
// Cylinder and cone
|
|
public static CreateCylinder(name: string, height: number, diameterTop: number, diameterBottom: number, tessellation: number, subdivisions: any, scene: Scene, updatable?: any, sideOrientation?: number): Mesh;
|
|
public static CreateCylinder(name: string, height: number, diameterTop: number, diameterBottom: number, tessellation: number, subdivisions: any, scene: Scene, updatable?: any, sideOrientation?: number): Mesh;
|
|
- public static CreateCylinder(name: string, options: { height?: number, diameterTop?: number, diameterBottom?: number, tessellation?: number, subdivisions?: number, faceColors?: Color4[], faceUV?: Vector4[], updatable?: boolean, sideOrientation?: number }, scene: any): Mesh;
|
|
|
|
|
|
+ public static CreateCylinder(name: string, options: { height?: number, diameterTop?: number, diameterBottom?: number, tessellation?: number, subdivisions?: number, arc: number, faceColors?: Color4[], faceUV?: Vector4[], updatable?: boolean, sideOrientation?: number }, scene: any): Mesh;
|
|
public static CreateCylinder(name: string, options: any, diameterTopOrScene: any, diameterBottom?: number, tessellation?: number, subdivisions?: any, scene?: Scene, updatable?: any, sideOrientation: number = Mesh.DEFAULTSIDE): Mesh {
|
|
public static CreateCylinder(name: string, options: any, diameterTopOrScene: any, diameterBottom?: number, tessellation?: number, subdivisions?: any, scene?: Scene, updatable?: any, sideOrientation: number = Mesh.DEFAULTSIDE): Mesh {
|
|
|
|
|
|
if (diameterTopOrScene instanceof Scene) {
|
|
if (diameterTopOrScene instanceof Scene) {
|
|
@@ -1775,10 +1775,13 @@
|
|
|
|
|
|
// Lathe
|
|
// Lathe
|
|
public static CreateLathe(name: string, shape: Vector3[], radius: number, tessellation: number, scene: Scene, updatable?: boolean, sideOrientation?: number): Mesh;
|
|
public static CreateLathe(name: string, shape: Vector3[], radius: number, tessellation: number, scene: Scene, updatable?: boolean, sideOrientation?: number): Mesh;
|
|
- public static CreateLathe(name: string, options: { shape: Vector3[], radius?: number, tessellation?: number, updatable?: boolean, sideOrientation?: number }, scene: Scene): Mesh;
|
|
|
|
|
|
+ public static CreateLathe(name: string, options: { shape: Vector3[], radius?: number, tessellation?: number, arc?: number, closed: boolean, updatable?: boolean, sideOrientation?: number }, scene: Scene): Mesh;
|
|
public static CreateLathe(name: string, options: any, radiusOrScene: any, tessellation?: number, scene?: Scene, updatable?: boolean, sideOrientation: number = Mesh.DEFAULTSIDE): Mesh {
|
|
public static CreateLathe(name: string, options: any, radiusOrScene: any, tessellation?: number, scene?: Scene, updatable?: boolean, sideOrientation: number = Mesh.DEFAULTSIDE): Mesh {
|
|
var shape: Vector3[];
|
|
var shape: Vector3[];
|
|
var radius: number;
|
|
var radius: number;
|
|
|
|
+ var arc: number = (options.arc <= 0) ? 1.0 : options.arc || 1.0;
|
|
|
|
+ var closed: boolean = (options.closed === undefined) ? true : options.closed;
|
|
|
|
+
|
|
if (Array.isArray(options)) {
|
|
if (Array.isArray(options)) {
|
|
shape = options;
|
|
shape = options;
|
|
radius = radiusOrScene || 1;
|
|
radius = radiusOrScene || 1;
|
|
@@ -1806,19 +1809,21 @@
|
|
}
|
|
}
|
|
|
|
|
|
// circle path
|
|
// circle path
|
|
- var step = pi2 / tessellation;
|
|
|
|
|
|
+ var step = pi2 / tessellation * arc;
|
|
var rotated;
|
|
var rotated;
|
|
var path = new Array<Vector3>();;
|
|
var path = new Array<Vector3>();;
|
|
- for (i = 0; i < tessellation; i++) {
|
|
|
|
|
|
+ for (i = 0; i <= tessellation; i++) {
|
|
rotated = new Vector3(Math.cos(i * step) * radius, 0, Math.sin(i * step) * radius);
|
|
rotated = new Vector3(Math.cos(i * step) * radius, 0, Math.sin(i * step) * radius);
|
|
path.push(rotated);
|
|
path.push(rotated);
|
|
}
|
|
}
|
|
- path.push(path[0]);
|
|
|
|
|
|
+ if (closed) {
|
|
|
|
+ path.push(path[0]);
|
|
|
|
+ }
|
|
|
|
|
|
// extrusion
|
|
// extrusion
|
|
var scaleFunction = () => { return 1; };
|
|
var scaleFunction = () => { return 1; };
|
|
var rotateFunction = () => { return 0; };
|
|
var rotateFunction = () => { return 0; };
|
|
- var lathe = Mesh.ExtrudeShapeCustom(name, shapeLathe, path, scaleFunction, rotateFunction, true, false, Mesh.NO_CAP, scene, updatable, sideOrientation);
|
|
|
|
|
|
+ var lathe = Mesh.ExtrudeShapeCustom(name, shapeLathe, path, scaleFunction, rotateFunction, closed, false, Mesh.NO_CAP, scene, updatable, sideOrientation);
|
|
return lathe;
|
|
return lathe;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1965,10 +1970,11 @@
|
|
}
|
|
}
|
|
|
|
|
|
public static CreateTube(name: string, path: Vector3[], radius: number, tessellation: number, radiusFunction: { (i: number, distance: number): number; }, cap: number, scene: Scene, updatable?: boolean, sideOrientation?: number, instance?: Mesh): Mesh;
|
|
public static CreateTube(name: string, path: Vector3[], radius: number, tessellation: number, radiusFunction: { (i: number, distance: number): number; }, cap: number, scene: Scene, updatable?: boolean, sideOrientation?: number, instance?: Mesh): Mesh;
|
|
- public static CreateTube(name: string, options: { path: Vector3[], radius?: number, tessellation?: number, radiusFunction?: { (i: number, distance: number): number; }, cap?: number, updatable?: boolean, sideOrientation?: number, instance?: Mesh }, scene: Scene): Mesh;
|
|
|
|
|
|
+ public static CreateTube(name: string, options: { path: Vector3[], radius?: number, tessellation?: number, radiusFunction?: { (i: number, distance: number): number; }, cap?: number, arc?: number, updatable?: boolean, sideOrientation?: number, instance?: Mesh }, scene: Scene): Mesh;
|
|
public static CreateTube(name: string, options: any, radiusOrScene: any, tessellation?: number, radiusFunction?: { (i: number, distance: number): number; }, cap?: number, scene?: Scene, updatable?: boolean, sideOrientation: number = Mesh.DEFAULTSIDE, instance: Mesh = null): Mesh {
|
|
public static CreateTube(name: string, options: any, radiusOrScene: any, tessellation?: number, radiusFunction?: { (i: number, distance: number): number; }, cap?: number, scene?: Scene, updatable?: boolean, sideOrientation: number = Mesh.DEFAULTSIDE, instance: Mesh = null): Mesh {
|
|
var path: Vector3[];
|
|
var path: Vector3[];
|
|
var radius: number;
|
|
var radius: number;
|
|
|
|
+ var arc: number = (options.arc <= 0) ? 1.0 : options.arc || 1.0;;
|
|
if (Array.isArray(options)) {
|
|
if (Array.isArray(options)) {
|
|
path = options;
|
|
path = options;
|
|
radius = radiusOrScene;
|
|
radius = radiusOrScene;
|
|
@@ -1984,12 +1990,12 @@
|
|
instance = options.instance;
|
|
instance = options.instance;
|
|
}
|
|
}
|
|
// tube geometry
|
|
// tube geometry
|
|
- var tubePathArray = (path, path3D, circlePaths, radius, tessellation, radiusFunction, cap) => {
|
|
|
|
|
|
+ var tubePathArray = (path, path3D, circlePaths, radius, tessellation, radiusFunction, cap, arc) => {
|
|
var tangents = path3D.getTangents();
|
|
var tangents = path3D.getTangents();
|
|
var normals = path3D.getNormals();
|
|
var normals = path3D.getNormals();
|
|
var distances = path3D.getDistances();
|
|
var distances = path3D.getDistances();
|
|
var pi2 = Math.PI * 2;
|
|
var pi2 = Math.PI * 2;
|
|
- var step = pi2 / tessellation;
|
|
|
|
|
|
+ var step = pi2 / tessellation * arc;
|
|
var returnRadius: { (i: number, distance: number): number; } = (i, distance) => radius;
|
|
var returnRadius: { (i: number, distance: number): number; } = (i, distance) => radius;
|
|
var radiusFunctionFinal: { (i: number, distance: number): number; } = radiusFunction || returnRadius;
|
|
var radiusFunctionFinal: { (i: number, distance: number): number; } = radiusFunction || returnRadius;
|
|
|
|
|
|
@@ -2044,11 +2050,13 @@
|
|
var path3D;
|
|
var path3D;
|
|
var pathArray;
|
|
var pathArray;
|
|
if (instance) { // tube update
|
|
if (instance) { // tube update
|
|
|
|
+ arc = arc || (<any>instance).arc;
|
|
path3D = ((<any>instance).path3D).update(path);
|
|
path3D = ((<any>instance).path3D).update(path);
|
|
- pathArray = tubePathArray(path, path3D, (<any>instance).pathArray, radius, (<any>instance).tessellation, radiusFunction, (<any>instance).cap);
|
|
|
|
|
|
+ pathArray = tubePathArray(path, path3D, (<any>instance).pathArray, radius, (<any>instance).tessellation, radiusFunction, (<any>instance).cap, arc);
|
|
instance = Mesh.CreateRibbon(null, { pathArray: pathArray, instance: instance });
|
|
instance = Mesh.CreateRibbon(null, { pathArray: pathArray, instance: instance });
|
|
(<any>instance).path3D = path3D;
|
|
(<any>instance).path3D = path3D;
|
|
(<any>instance).pathArray = pathArray;
|
|
(<any>instance).pathArray = pathArray;
|
|
|
|
+ (<any>instance).arc = arc;
|
|
|
|
|
|
return instance;
|
|
return instance;
|
|
|
|
|
|
@@ -2057,12 +2065,13 @@
|
|
path3D = <any>new Path3D(path);
|
|
path3D = <any>new Path3D(path);
|
|
var newPathArray = new Array<Array<Vector3>>();
|
|
var newPathArray = new Array<Array<Vector3>>();
|
|
cap = (cap < 0 || cap > 3) ? 0 : cap;
|
|
cap = (cap < 0 || cap > 3) ? 0 : cap;
|
|
- pathArray = tubePathArray(path, path3D, newPathArray, radius, tessellation, radiusFunction, cap);
|
|
|
|
|
|
+ pathArray = tubePathArray(path, path3D, newPathArray, radius, tessellation, radiusFunction, cap, arc);
|
|
var tube = Mesh.CreateRibbon(name, { pathArray: pathArray, closePath: true, closeArray: false, updatable: updatable, sideOrientation: sideOrientation }, scene);
|
|
var tube = Mesh.CreateRibbon(name, { pathArray: pathArray, closePath: true, closeArray: false, updatable: updatable, sideOrientation: sideOrientation }, scene);
|
|
(<any>tube).pathArray = pathArray;
|
|
(<any>tube).pathArray = pathArray;
|
|
(<any>tube).path3D = path3D;
|
|
(<any>tube).path3D = path3D;
|
|
(<any>tube).tessellation = tessellation;
|
|
(<any>tube).tessellation = tessellation;
|
|
(<any>tube).cap = cap;
|
|
(<any>tube).cap = cap;
|
|
|
|
+ (<any>tube).arc = arc;
|
|
|
|
|
|
return tube;
|
|
return tube;
|
|
}
|
|
}
|