Exemplo n.º 1
0
    public static Mesh CreateConvexHull(Mesh mesh)
    {
        List <MIConvexHull.DefaultVertex> vertices = new List <DefaultVertex>();

        foreach (Vector3 vertex in mesh.vertices)
        {
            MIConvexHull.DefaultVertex mi_vertex = new MIConvexHull.DefaultVertex();
            mi_vertex.Position = new double[3] {
                vertex.x, vertex.y, vertex.z
            };
            vertices.Add(mi_vertex);
        }

        MIConvexHull.ConvexHull <
            MIConvexHull.DefaultVertex,
            MIConvexHull.DefaultConvexFace <MIConvexHull.DefaultVertex> > mi_hull =
            MIConvexHull.ConvexHull.Create(vertices);

        List <Vector3> hull_vertices = new List <Vector3>();

        foreach (MIConvexHull.DefaultVertex vertex in mi_hull.Points)
        {
            hull_vertices.Add(new Vector3((float)vertex.Position[0], (float)vertex.Position[1], (float)vertex.Position[2]));
        }

        IList <MIConvexHull.DefaultVertex> mi_hull_vertices = new List <MIConvexHull.DefaultVertex>(mi_hull.Points);
        List <int> triangles = new List <int>();

        foreach (MIConvexHull.DefaultConvexFace <MIConvexHull.DefaultVertex> face in mi_hull.Faces)
        {
            triangles.Add(mi_hull_vertices.IndexOf(face.Vertices[0]));
            triangles.Add(mi_hull_vertices.IndexOf(face.Vertices[1]));
            triangles.Add(mi_hull_vertices.IndexOf(face.Vertices[2]));
        }

        Mesh hull = new Mesh();

        hull.vertices  = hull_vertices.ToArray();
        hull.triangles = triangles.ToArray();
        hull.RecalculateNormals();

        return(hull);
    }
Exemplo n.º 2
0
 /// <summary>
 /// Creates a convex hull of the input data.
 /// </summary>
 /// <typeparam name="TVertex"></typeparam>
 /// <typeparam name="TFace"></typeparam>
 /// <param name="data"></param>
 /// <param name="config">If null, default ConvexHullComputationConfig is used.</param>
 /// <returns></returns>
 public static ConvexHull <TVertex, TFace> Create <TVertex, TFace>(IList <TVertex> data, ConvexHullComputationConfig config = null)
     where TVertex : IVertex
     where TFace : ConvexFace <TVertex, TFace>, new()
 {
     return(ConvexHull <TVertex, TFace> .Create(data, config));
 }
Exemplo n.º 3
0
 /// <summary>
 /// Creates a convex hull of the input data.
 /// </summary>
 /// <typeparam name="TVertex"></typeparam>
 /// <param name="data"></param>
 /// <param name="config">If null, default ConvexHullComputationConfig is used.</param>
 /// <returns></returns>
 public static ConvexHull <TVertex, DefaultConvexFace <TVertex> > Create <TVertex>(IList <TVertex> data, ConvexHullComputationConfig config = null)
     where TVertex : IVertex
 {
     return(ConvexHull <TVertex, DefaultConvexFace <TVertex> > .Create(data, config));
 }
Exemplo n.º 4
0
 /// <summary>
 /// Creates a convex hull of the input data.
 /// </summary>
 /// <typeparam name="TVertex">The type of the t vertex.</typeparam>
 /// <param name="data">The data.</param>
 /// <param name="PlaneDistanceTolerance">The plane distance tolerance (default is 1e-10). If too high, points
 /// will be missed. If too low, the algorithm may break. Only adjust if you notice problems.</param>
 /// <returns>
 /// ConvexHull&lt;TVertex, DefaultConvexFace&lt;TVertex&gt;&gt;.
 /// </returns>
 public static ConvexHull <TVertex, DefaultConvexFace <TVertex> > Create <TVertex>(IList <TVertex> data,
                                                                                   double PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance)
     where TVertex : IVertex
 {
     return(ConvexHull <TVertex, DefaultConvexFace <TVertex> > .Create(data, PlaneDistanceTolerance));
 }