【问题标题】:How to remove list of faces and it's vertices from a mesh如何从网格中删除面列表及其顶点
【发布时间】:2018-01-02 00:43:28
【问题描述】:

我正在尝试从网格中删除面列表以及它们各自的顶点(如果不再引用它们),但到目前为止,我只能成功删除面列表。这个想法是,对于每个删除的索引,所有大于删除的索引都应该减 1。

网格仅由顶点列表和索引列表(以及可选的三角形列表)表示。

目前只删除三角形的代码是这样的:

    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
    }

【问题讨论】:

    标签: c# c++ algorithm geometry mesh


    【解决方案1】:

    我最终想出的解决方案:

        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...
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      • 2011-06-06
      • 2019-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多