PyMeshLab - проекция MLS APSS - идентификатор текущей и прокси-сетки для цикла

Я пытаюсь обработать пакет файлов STL через pymeshlab. Я использую два фильтра, то есть «remeshing_isotropic_explicit_remeshing» и «mls_projection_apss». Проблема возникает с фильтром «mls_projection_apss», который по умолчанию использует идентификатор сетки = 0 как для управляющей, так и для прокси-сетки, в результате чего алгоритм всегда использует сетку с идентификатором 0 для всех будущих итераций.

Пожалуйста, помогите мне с тем, как определить, что идентификатор текущей сетки в наборе сеток используется в качестве контрольной и прокси-сетки вместо «0» по умолчанию.

Текущий код:

      for filename in os.listdir(inputdir):
    if filename.endswith(".stl"):
        ms.load_new_mesh (os.path.join(inputdir, filename))
        print(os.path.join(filename))
        ms.current_mesh_id()
        print(ms.current_mesh_id())
        ms.remeshing_isotropic_explicit_remeshing(targetlen=0.1, checksurfdist=True, maxsurfdist=0.1)
        ms.mls_projection_apss(controlmesh=, proxymesh=, filterscale=2)
        ms.save_current_mesh(os.path.join(outputdir_2, filename))

1 ответ

Это работает для меня, но я не уверен, что вы этого хотите. Одна проблема, которую я обнаружил, заключается в том, что ms.mls_projection_apss() похоже, меняет current_mesh на 0, поэтому ms.save_current_mesh() сохраняет исходную сетку, а не результат фильтра MLS.

      import pymeshlab as ml
ms = ml.MeshSet()

for filename in os.listdir(inputdir):
    if filename.endswith(".stl"):
        ms.load_new_mesh (os.path.join(inputdir, filename))
        m = ms.current_mesh()
        print(os.path.join(filename), ms.current_mesh_id(), m.vertex_number(), 'vertex', m.face_number(), 'faces' )

        ms.remeshing_isotropic_explicit_remeshing(targetlen=0.1, checksurfdist=True, maxsurfdist=0.1)

        #Get the id of the last mesh in the set
        last_id = ms.number_meshes()-1
        ms.mls_projection_apss(controlmesh=last_id, proxymesh=last_id, filterscale=2)

        #Ensure we select last mesh before saving result
        ms.set_current_mesh(ms.number_meshes()-1)
        m = ms.current_mesh()
        print("Saving", os.path.join(outputdir_2, filename), m.vertex_number(), 'vertex', m.face_number(), 'faces' )
        ms.save_current_mesh(os.path.join(outputdir_2, filename))
Другие вопросы по тегам