PyMeshLab保存网格抛出无信息PyMeshLabException问题求助
解决pymeshlab保存STL抛出PyMeshLabException的思路
1. 显式指定STL保存参数
pymeshlab的save_current_mesh方法默认参数可能和网格属性不匹配,尝试显式指定STL的保存模式及颜色保存选项:
# 二进制模式保存,关闭面颜色保存 ms.save_current_mesh('Output.stl', save_face_color=False, binary=True) # 或尝试ASCII模式 ms.save_current_mesh('Output.stl', save_face_color=False, binary=False)
2. 检查并三角化非三角面
STL格式仅支持三角形面,若输入网格包含多边形面(即使MeshLab GUI能正常打开),API保存时会报错。先检查网格面类型:
# 输出三角面数量和总多边形数量 print("三角面数:", ms.current_mesh().face_number()) print("总多边形数:", ms.current_mesh().polygon_number())
如果总多边形数大于三角面数,先执行三角化处理:
ms.apply_filter('triangulate_all_faces') # 再执行保存 ms.save_current_mesh('Output.stl')
3. 使用绝对路径保存
相对路径可能因工作目录不匹配导致保存失败,改用绝对路径:
import os save_path = os.path.abspath('Output.stl') ms.save_current_mesh(save_path)
4. 更新pymeshlab到最新版本
旧版本可能存在STL保存的已知bug,执行升级:
pip install --upgrade pymeshlab
修改后的完整测试脚本示例
import pymeshlab import os ms = pymeshlab.MeshSet() ms.load_new_mesh('Model.stl') print(ms.current_mesh().vertex_number(), 'vertex') print(ms.current_mesh().face_number(), 'faces') print("总多边形数:", ms.current_mesh().polygon_number()) # 若存在非三角面则执行三角化 if ms.current_mesh().polygon_number() > ms.current_mesh().face_number(): ms.apply_filter('triangulate_all_faces') print("已完成三角化,当前三角面数:", ms.current_mesh().face_number()) with open("model.txt", "w") as f: print("Test file output", file=f) print(ms.current_mesh().vertex_number(), 'vertex', file=f) print(ms.current_mesh().face_number(), 'faces', file=f) # 用绝对路径+显式参数保存 save_path = os.path.abspath('Output.stl') ms.save_current_mesh(save_path, save_face_color=False, binary=True)
内容的提问来源于stack exchange,提问作者AeroSpelax
相关产品推荐
相关产品推荐

