2017-07-26 4 views
-4

メッシュから面のリストとそれぞれの頂点(参照されていない場合)のリストを削除しようとしていますが、顔のリストを正常に削除します。考えられるのは、削除された各インデックスに対して、削除されたインデックスより大きいすべてのインデックスが1だけ減るべきであるということです。0123三角形)。私が最後に思い付いたメッシュから面とその頂点のリストを削除する方法

private IMesh DeleteTriangles(IMesh input, IEnumerable<int> indices_to_delete) 
    { 
     var triangles_to_delete = new HashSet<int>(indices_to_delete); 

     _triangles_to_keep = _mesh.Triangles.Where((t, count) => 
      !triangles_to_delete.Contains(t.A) && 
      !triangles_to_delete.Contains(t.B) && 
      !triangles_to_delete.Contains(t.C)).ToList(); 

     // return new mesh 
    } 

答えて

0

ソリューション:

現在、ちょうど三角形を除去するためのコードは、これを行い

public IMesh DeleteVertices(IMesh mesh, IImmutableList<int> indices_to_remove) 
    { 
     var indices_to_remove_set = new HashSet<int>(indices_to_remove); 
     var new_vertices = new List<Vector>(); 
     var map = new int[mesh.Vertices.Count]; 

     for (var i = 0; i < mesh.Vertices.Count; i++) 
     { 
      if (indices_to_remove_set.Contains(i)) 
      { 
       map[i] = -1; 
      } 
      else 
      { 
       new_vertices.Add(mesh.Vertices[i]); 
       map[i] = new_vertices.Count - 1; 
      } 
     } 

     var new_triangle_list = from triangle in mesh.Triangles 
           where map[triangle.A] != -1 && 
             map[triangle.B] != -1 && 
             map[triangle.C] != -1 
           select new IndexTriangle(
            map[triangle.A], 
            map[triangle.B], 
            map[triangle.C]); 

     //build new mesh... 
    } 
関連する問題