45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
import open3d as o3d
|
|
import os
|
|
|
|
def load_ply(file_path):
|
|
"""Carrega um arquivo PLY usando open3d."""
|
|
mesh = o3d.io.read_triangle_mesh(file_path)
|
|
return mesh
|
|
|
|
def simplify_mesh(mesh, reduction_factor=0.5):
|
|
"""Reduz o número de triângulos da malha."""
|
|
target_number_of_triangles = int(len(mesh.triangles) * reduction_factor)
|
|
simplified_mesh = mesh.simplify_quadric_decimation(target_number_of_triangles)
|
|
return simplified_mesh
|
|
|
|
def save_obj_with_mtl(mesh, obj_path, mtl_path):
|
|
"""Salva a malha em formato OBJ com MTL."""
|
|
# Salvar o arquivo OBJ
|
|
o3d.io.write_triangle_mesh(obj_path, mesh)
|
|
|
|
# Gerar o arquivo MTL
|
|
with open(mtl_path, 'w') as mtl_file:
|
|
mtl_file.write("newmtl material_0\n")
|
|
mtl_file.write("Ka 1.000 1.000 1.000\n")
|
|
mtl_file.write("Kd 0.800 0.800 0.800\n")
|
|
mtl_file.write("Ks 0.000 0.000 0.000\n")
|
|
mtl_file.write("d 1.0\n")
|
|
mtl_file.write("illum 2\n")
|
|
|
|
def convert_ply_to_obj(ply_path, obj_path, reduction_factor=0.5):
|
|
"""Converte PLY para OBJ com redução de triângulos e gera arquivo MTL."""
|
|
mesh = load_ply(ply_path)
|
|
simplified_mesh = simplify_mesh(mesh, reduction_factor)
|
|
|
|
# Definir o caminho do arquivo MTL
|
|
mtl_path = os.path.splitext(obj_path)[0] + ".mtl"
|
|
|
|
# Salvar o OBJ e o MTL
|
|
save_obj_with_mtl(simplified_mesh, obj_path, mtl_path)
|
|
|
|
# Caminhos dos arquivos
|
|
ply_file = 'montagem_pulverizador.ply'
|
|
obj_file = 'montagem_pulverizador_0.03.obj'
|
|
|
|
# Converter e simplificar
|
|
convert_ply_to_obj(ply_file, obj_file, reduction_factor=0.03) |