private CommonGeometry[] GetShapeGeometry(IConvexHullEngine convexHullEngine) { AABB region = AABB.GetGeometryAABB(Geometry.VerticesPosition, this); Vertex3Index[] verticesIndex = new Vertex3Index[Geometry.VerticesPosition.Length]; for (int i = 0; i < Geometry.VerticesPosition.Length; i++) { verticesIndex[i] = new Vertex3Index(Geometry.VerticesPosition[i], Geometry.VerticesIdx[i].GetGlobalAdjacencyList(), i); } ConvexDecompositionEngine convexDecomposition = new ConvexDecompositionEngine(region, verticesIndex, 0.2); var convexShapes = convexDecomposition.Execute().GetConvexShapeList(true); var ConvexShapesGeometry = new CommonGeometry[convexShapes.Count]; for (int i = 0; i < convexShapes.Count; i++) { ConvexHullData convexHullData = convexHullEngine.GetConvexHull(convexShapes[i].Vertex3Idx.ToArray()); var verticesIdx = Array.ConvertAll(convexHullData.Vertices, x => x.ID); ConvexShapesGeometry[i] = new CommonGeometry(null, convexHullData.TriangleMeshes, verticesIdx); } return(ConvexShapesGeometry); }
void Update() { // Step 0: Contrive some points if (points == null) { points = new List <Vector3>(); for (int i = 0; i < 300; i++) { points.Add(UnityEngine.Random.insideUnitSphere); } } // Construct the convex hull if (convexHull.isCreated) { convexHull.Dispose(); } convexHull = new ConvexHullData(points); if (interactivePoint != null) { convexHull.GrowHull(interactivePoint.position); } // Copy the data into the Unity Mesh Representation convexHull.CopyToUnityMesh(ref hullMesh); if (filter == null || filter.sharedMesh == null) { filter = GetComponent <MeshFilter>(); filter.mesh = hullMesh; } }
public ShapeGeometry(Vector3d[] inputVertexPosition) { IConvexHullEngine convexHullEngine = new ConvexHullEngine(); ConvexHullData convexHullData = convexHullEngine.GetConvexHull(inputVertexPosition); TriangleMesh[] triangleMeshes = convexHullData.TriangleMeshes; Geometry = new CommonGeometry( Array.ConvertAll(convexHullData.Vertices, x => x.Vector3), triangleMeshes); }
public static ConvexHull ExtractConvexHull(double[][] vertex) { IConvexHullEngine convexHullEngine = new ConvexHullEngine(); var inputVertex = GeometryUtils.GetVector3ArrayFromMatrix(vertex); ConvexHullData convexHullData = convexHullEngine.GetConvexHull(inputVertex); var result = new ConvexHull() { Triangles = convexHullData.TriangleMeshes.Select(x => x.GetArray())?.ToArray(), Vertices = MathUtils.GetArrayFromVector3(Array.ConvertAll(convexHullData.Vertices, x => x.Vector3)) }; return(result); }