فهرست منبع

hemisphere mesh builder

Trevor Baron 6 سال پیش
والد
کامیت
76136621fe
3فایلهای تغییر یافته به همراه59 افزوده شده و 0 حذف شده
  1. 46 0
      src/Meshes/Builders/hemisphereBuilder.ts
  2. 1 0
      src/Meshes/Builders/index.ts
  3. 12 0
      src/Meshes/mesh.ts

+ 46 - 0
src/Meshes/Builders/hemisphereBuilder.ts

@@ -0,0 +1,46 @@
+import { Mesh, _CreationDataStorage } from "../mesh";
+import { Scene } from "../../scene";
+import { SphereBuilder } from '../Builders/sphereBuilder';
+
+/**
+ * 
+ */
+Mesh.CreateHemisphere = (name: string, segments: number, diameter: number, scene?: Scene): Mesh => {
+    var options = {
+        segments: segments,
+        diameter: diameter
+    };
+
+    return HemisphereBuilder.CreateHemisphere(name, options, scene);
+};
+
+/**
+ * Class containing static functions to help procedurally build meshes
+ */
+export class HemisphereBuilder {
+    /**
+     * Creates a hemisphere mesh
+     * @param name defines the name of the mesh
+     * @param options defines the options used to create the mesh
+     * @param scene defines the hosting scene
+     * @returns the hemisphere mesh
+     */
+    public static CreateHemisphere(name: string, options: { segments?: number, diameter?: number, sideOrientation?: number }, scene: any): Mesh {
+        if(!options.diameter){
+            options.diameter = 1;
+        }
+        if(!options.segments){
+            options.segments = 16;
+        }
+
+        var halfSphere = SphereBuilder.CreateSphere("", {slice: 0.5, diameter: options.diameter, segments: options.segments}, scene)
+        var disc = Mesh.CreateDisc("", options.diameter/2, (options.segments*3)+(4-options.segments), scene);
+        disc.rotation.x = -Math.PI/2;
+        disc.parent = halfSphere;
+
+        var merged = <Mesh>Mesh.MergeMeshes([disc, halfSphere], true)
+        merged.name = name;
+
+        return merged;
+    }
+}

+ 1 - 0
src/Meshes/Builders/index.ts

@@ -2,6 +2,7 @@ export * from "./boxBuilder";
 export * from "./discBuilder";
 export * from "./ribbonBuilder";
 export * from "./sphereBuilder";
+export * from "./hemisphereBuilder";
 export * from "./cylinderBuilder";
 export * from "./torusBuilder";
 export * from "./torusKnotBuilder";

+ 12 - 0
src/Meshes/mesh.ts

@@ -3232,6 +3232,18 @@ export class Mesh extends AbstractMesh implements IGetSetVerticesData {
     }
 
     /**
+      * Creates a hemisphere mesh. Please consider using the same method from the MeshBuilder class instead
+      * @param name defines the name of the mesh to create
+      * @param segments sets the sphere number of horizontal stripes (positive integer, default 32)
+      * @param diameter sets the diameter size (float) of the sphere (default 1)
+      * @param scene defines the hosting scene
+      * @returns a new Mesh
+      */
+    public static CreateHemisphere(name: string, segments: number, diameter: number, scene?: Scene): Mesh {
+        throw _DevTools.WarnImport("MeshBuilder");
+    }
+
+    /**
      * Creates a cylinder or a cone mesh. Please consider using the same method from the MeshBuilder class instead
      * @param name defines the name of the mesh to create
      * @param height sets the height size (float) of the cylinder/cone (float, default 2)