首页 > 解决方案 > PyMeshLab - MLS 投影 APSS - 循环的当前和代理网格 ID

问题描述

我正在尝试通过 pymeshlab 处理一批 STL 文件。我正在使用两个过滤器,即“remeshing_isotropic_explicit_remeshing”和“mls_projection_apss”。过滤器“mls_projection_apss”出现问题,默认情况下,控制和代理网格都使用网格 id = 0,导致算法始终使用 id 为 0 的网格进行所有未来迭代。

请帮助我如何定义网格集中当前网格的 ID 用作控制和代理网格,而不是默认的“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))

标签: meshlabpymeshlab

解决方案


这对我有用,但我不确定它是否是你想要的。我检测到的一个问题是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))

推荐阅读