Пример #1
0
        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);
        }
Пример #2
0
    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;
        }
    }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }