Programa de línea de comandos para realizar operaciones CSG/booleanas

Estoy buscando un programa de línea de comando que pueda realizar geometría sólida constructiva, también conocida como operaciones booleanas en mallas. Me gustaría usarlo así:

intersect a.stl b.stl result.stl

Blender puede hacer esta operación , pero no desde la línea de comandos.

MeshLab puede hacer esto desde la línea de comando, pero desafortunadamente vuelve a muestrear la malla, lo que aumenta el tamaño del archivo y hace que la malla se vea borrosa. Este no es el caso con la implementación en Blender.

¡Bienvenido! ¿Línea de comandos de qué sistema operativo?
Estoy en ventanas. Si hay una solución para Linux, también estaría interesado.

Respuestas (1)

Resulta que puedes ejecutar Blender desde la línea de comando:

blender -b -P intersect.py -- a.stl b.stl result.stl

Y ese es el script de Python intersect.py:

import bpy
import sys

index = sys.argv.index("--")
file_a = sys.argv[index + 1]
file_b = sys.argv[index + 2]
file_out = sys.argv[index + 3]

bpy.ops.object.select_all(action = 'SELECT')
bpy.ops.object.delete()

bpy.ops.import_mesh.stl(filepath = file_a)
obj_a = bpy.context.selected_objects[0]

bpy.ops.import_mesh.stl(filepath = file_b)
obj_b = bpy.context.selected_objects[0]

bpy.context.scene.objects.active = obj_a
bpy.ops.object.modifier_add(type = 'BOOLEAN')
bpy.context.object.modifiers[0].object = obj_b
bpy.ops.object.modifier_apply(modifier='Boolean')

bpy.context.scene.objects.active = obj_b
bpy.ops.object.delete()

bpy.context.scene.objects.active = obj_a
bpy.ops.export_mesh.stl(filepath = file_out)