El poder de Python y Fusion 360 para la impresión 3D
Le mostraré cómo crear múltiples versiones de un modelo Fusion 360 CAD y exportarlos como archivos STL para la impresión 3D, utilizando un script de Python.
Luis Medina

Automatizar fácilmente las variaciones de archivo CAD utilizando la API de Fusion 360
¡Hola a todos!
Hoy quiero compartir cómo utilicé un script de Python para automatizar el proceso de crear múltiples variaciones de un archivo para la impresión 3D. Escribí un script que usa la API Autodesk Fusion 360 para cambiar las dimensiones de un modelo CAD, y luego exporta cada variación como un archivo STL que puede cortar para la impresión 3D.
Me sorprendió lo simple que era hacer esto, así que quería compartirlo contigo. Desglosaremos el código y explicando cada sección, para que pueda comprender cómo funciona y cómo puede usarlo para sus propios proyectos.
Si tiene alguna idea de producto físico que requeriría hacer cambios en su geometría basada en una serie de parámetros, ciertamente puede beneficiarse de hacer algo como esto. Este caso es realmente simple, ya que incluye solo dos parámetros, y puede ser útil para comprender lo que se necesita.
Ya sea que sea un fabricante joven que recién comienza con la impresión 3D o un diseñador experimentado que busca llevar sus habilidades al siguiente nivel a través de la automatización, esta publicación es para usted.

¿Por qué exportar archivos STL automáticamente?
Como sabrán, Twothingies es un proyecto que comencé con URI el año pasado, y hemos estado compartiendo todo tipo de archivos útiles para la impresión 3D en línea. En este caso, fue un diseño para un titular de tapa de lente, que compartimos en imprimable.com , y recientemente incluidos en la tienda en el mercado de Vulkaza .
Desde que publicamos los archivos en línea el año pasado, regularmente hemos recibido solicitudes de personas que preguntaron muy bien si podíamos hacer una variación de diseño para adaptarse a un tamaño diferente de lente o correa de cámara.
Inicialmente, haría las modificaciones y exportaría los archivos manualmente, ya que el diseño se realizó en Fusion 360, y solo había dos parámetros para modificar para obtener una versión ajustada. Pero pronto comenzó a ser tedioso, y quería encontrar una manera de automatizar hacer varias versiones del modelo y exportarlas, ver que podríamos publicar todos los tamaños posibles a la vez.
Eso se hizo más importante cuando decidimos abrir nuestra tienda en Vulkaza e incluir al titular de la tapa del lente como uno de los diseños enumerados. Idealmente, cualquiera podría ir a la tienda y pedir un titular de tapa de lente de cualquier tamaño.
Hacer un modelo CAD paramétrico en Fusion 360
Cuando creé el archivo CAD para este diseño, sabía que habría un punto en el futuro cuando necesitaríamos hacer variaciones de él.
Así que lo diseñé, incluidos algunos parámetros y relaciones que podrían usarse para hacer cambios, primero modificando manualmente sus valores y más adelante a través de algún tipo de automatización.
En este caso, los dos parámetros que usaría para cambiar el tamaño del modelo eran el diámetro de la lente (lensdiam) y el ancho de la correa de la cámara (stapwidth). También hice un tercer parámetro, para el grosor de la correa, que terminé no usando.
Puede ver en la imagen debajo de los parámetros y algunas de las fórmulas que se hacen referencia a ellos dentro del boceto principal.
Al hacer algunas pruebas con el modelo y probar diferentes combinaciones de parámetros, tuve que recordarme la regla más importante para hacer modelos CAD paramétricos: no deje bocetos sin restricciones en su diseño .
Cuando cambia los valores de los parámetros, todo puede romperse con resultados feos si hay elementos de boceto (una línea, un punto, un arco) sin restricciones. Eso significa que cada entidad de boceto debe tener una dimensión asociada con ella o una relación (coincidente, paralela, perpendicular, etc.) a otra entidad de boceto.
La regla general corta, pero muy efectiva, es: no debe haber líneas azules en su boceto . En Fusion 360, las líneas azules representan elementos sin restricciones, que puede arrastrar con el mouse, ya que no están vinculados a nada, o al menos no están adecuadamente vinculados en todos los grados de libertad.
La regla más importante para hacer modelos CAD paramétricos: no deje bocetos sin restricciones en su diseño .
En este caso particular, todo está vinculado al diámetro de la lente y al ancho de la correa, que son las dimensiones que impulsarán los cambios a la geometría.
Los diferentes diámetros del soporte se definen proporcionalmente a Lensdiam, excepto por algunas compensaciones constantes que serán los mismos sin importar el tamaño de la lente, pero su diámetro se define de todos modos como un desplazamiento del diámetro de la lente.
Además, la longitud total del soporte cambiará según el diámetro, para evitar tener puntas demasiado cortas o largas para insertar la correa de la cámara. El ancho de los lados, en cambio, se calcula a partir del ancho de la correa.
Desbloqueo de la potencia de la automatización: usando la API Fusion 360
Sabía que había una API Fusion 360 que permitía hacer scripts de Python para este tipo de tareas, y esta fue la oportunidad perfecta para probarlo.
Sin saber por dónde empezar, mi primera suposición obvia fue investigar la documentación oficial . Eso me permitió comprender los conceptos básicos, especialmente sobre cómo comenzar a crear un nuevo script y comenzar a escribir algún código que Fusion 360 reconociera.
Un recurso especialmente útil fue la documentación del modelo de objeto API Fusion 360 . Incluye un gráfico útil que muestra cómo están relacionados los diferentes tipos de objetos utilizados por la API.
Al automatizar las cosas a través de la API, deberá pensar en términos de los pasos muy básicos necesarios para lograr cada tarea. Algo que realmente me ayudó a aclarar estos conceptos al principio fue esta serie de videos de YouTube al aprender todo sobre el diseño que explica cómo usar la API de Fusion 360, desde lo básico de la misma .
Cómo comenzar a crear un nuevo script de Python para Fusion 360
Los pasos para comenzar un nuevo script son en realidad muy simples:
- Haga clic en la Utilidades en la cinta superior de Fusion 360.
- Haga clic en complementos . Los scripts y la ventana de complementos aparecerán. Haga clic en el botón Crear.
- Se mostrará el nuevo script o la ventana complementaria. Podrá elegir su lenguaje de programación preferido (Python o C ++), agregar un nombre y una descripción para su script, nombre del autor, sistema operativo de destino y la carpeta donde se guardará.
- Una vez que llene esa información, puede hacer clic en Crear. Su nuevo script (por ahora, vacío) se agregará a la lista en la ventana de scripts y complementos.
- Ahora puede seleccionarlo y hacer clic en Editar y se abrirá una nueva instancia de Visual Studio Code, con un archivo precargado que contiene una plantilla para que comience a escribir su nuevo script. Le preguntará si confía en los autores de los archivos antes de poder acceder a ellos. Haga clic en Sí, y estará listo para comenzar.

Escribir un script de Python para actualizar los parámetros del modelo CAD
Esto es cuando comienza la parte divertida.
Como puede ver, el script de plantilla ya le indica algunas bibliotecas que necesitará: 'adsk.core', 'adsk.fusion' y 'adsk.cam'. Estos módulos proporcionan acceso a la API Fusion 360 y permiten que el script interactúe con el diseño activo. El resto se trata solo de usar las clases de objetos correctas y los métodos correctos para interactuar con Fusion 360, para cada pequeña tarea que debe hacer para completar una tarea más grande.
En mi caso, necesitaba tener acceso a los parámetros definidos por el usuario, modificarlos, esperar a que se actualice el diseño y exportarlo como un archivo STL. Tendría que hacer esto de manera recursiva, para diferentes combinaciones de Lensdiam y Strapwidth.
Sabía que ya habría algún código para hacer algo similar a lo que quería lograr, así que una vez que entendí más claramente lo que tenía que hacer, comencé a buscar algunos ejemplos para comenzar. Afortunadamente, encontré este código de Brian Ekins, respondiendo una pregunta en el Fusion 360 Community Forum , de hace unos 6 años.
Solo necesitaba modificarlo ligeramente, y se me ocurrió el siguiente:
#Luis Medina -
# Update the diameter of Lens Cap Holder and save each version as STL
import adsk.core, adsk.fusion, adsk.cam, traceback
def run(context):
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
design = adsk.fusion.Design.cast(app.activeProduct)
defaultInputMinDiam = '35'
minLensDiam_Input = ui.inputBox('Input diameter in mm: ',
'Define minimum diameter', defaultInputMinDiam)
defaultInputMaxDiam = '80'
maxLensDiam_Input = ui.inputBox('Input diameter in mm: ',
'Define maximum diameter', defaultInputMaxDiam)
defaultInputWidth = '35'
StrapWidth_Input = ui.inputBox('Input width in mm: ',
'Define strap width', defaultInputWidth)
ui.messageBox(f'Input is = {StrapWidth_Input[0]}')
defaultInputFolder = r'C:\\\\'
folderInput = ui.inputBox('Input path to save folder: ',
'Define Save Folder', defaultInputFolder)
folder = folderInput[0]
diameters = list(range(int(minLensDiam_Input[0])-1,int(maxLensDiam_Input[0])+1,1))
# Get the root component of the active design
rootComp = design.rootComponent
# Get the parameters named "Length" and "Width" to change.
LensDiam_par = design.allParameters.itemByName('LensDiam')
StrapWidth_par = design.allParameters.itemByName('StrapWidth')
for dim in diameters:
Diam_set = dim
Width_set = StrapWidth_Input[0]
LensDiam_par.expression = str(Diam_set)
StrapWidth_par.expression = str(Width_set)
# Let the view have a chance to paint just so you can watch the progress.
adsk.doEvents()
# Construct the output filename.
filename = f'{folder}\\LensCapHolder_D{Diam_set}mm_Strap_{Width_set}mm.stl'
# Save the file as STL.
exportMgr = adsk.fusion.ExportManager.cast(design.exportManager)
stlOptions = exportMgr.createSTLExportOptions(rootComp)
stlOptions.meshRefinement = adsk.fusion.MeshRefinementSettings.MeshRefinementMedium
stlOptions.filename = filename
exportMgr.execute(stlOptions)
ui.messageBox('Finished.')
except:
if ui:
ui.messageBox('Failed:\\n{}'.format(traceback.format_exc()))
El script de Python que creé para automatizar las variaciones del modelo CAD y exportar a archivos STLVamos a desglosar en lo que está haciendo cada sección del código.
El código de Python, explicó
El script comienza importando los módulos necesarios para acceder a la API Fusion 360, así como a la itertools
Módulo, que utilizaremos más tarde para generar una lista de combinaciones de diámetro.
import adsk.core, adsk.fusion, adsk.cam, traceback
Entonces, definimos un run
función, que se ejecutará cuando se ejecute el script. La función
comienza inicializando la API Fusion 360 y obteniendo una referencia al
diseño activo.
def run(context): ui = None try: app = adsk.core.Application.get() ui = app.userInterface design = adsk.fusion.Design.cast(app.activeProduct)
A continuación, el script
solicita al usuario que ingrese el diámetro mínimo y máximo del soporte
de tapa de la lente, y el ancho de la correa, utilizando el inputBox
Método de la interfaz de usuario. Esto se utiliza para hacer todos los
valores posibles entre el diámetro mínimo y el máximo, con la abertura
para el ancho de correa de la cámara proporcionado.
Quería tener esta posibilidad, para evitar codificar todas las reglas para evitar resultados incorrectos debido a combinaciones incompatibles de diámetros de lente y ancho de correa. El modelo CAD solo funciona para anchos de correa iguales o más grandes que el diámetro de la lente, pero no codifiqué errores y excepciones para dar cuenta de eso. Tal vez más tarde.
El script también solicita al usuario que ingrese la ruta a la carpeta donde se guardarán los archivos STL.defaultInputMinDiam = '35' minLensDiam_Input = ui.inputBox('Input diameter in mm: ', 'Define minimum diameter', defaultInputMinDiam) defaultInputMaxDiam = '80' maxLensDiam_Input = ui.inputBox('Input diameter in mm: ', 'Define maximum diameter', defaultInputMaxDiam) defaultInputWidth = '35' StrapWidth_Input = ui.inputBox('Input width in mm: ', 'Define strap width', defaultInputWidth)
defaultInputFolder = r'C:\\\\'
folderInput = ui.inputBox('Input path to save folder: ',
'Define Save Folder', defaultInputFolder)
folder = folderInput[0]
Luego, creamos una lista de
diámetros para iterar, en función de los valores mínimos y máximos
proporcionados por el usuario. Yo usé range
y dio un desplazamiento de 1 mm a los valores, para incluir la lista de diámetros.
diameters = list(range(int(minLensDiam_Input[0])-1,int(maxLensDiam_Input[0])+1,1))
A continuación, obtenemos una referencia al componente raíz del diseño activo y los parámetros que queremos cambiar, en este caso, el diámetro de la lente y el ancho de la correa.
rootComp = design.rootComponent
LensDiam_par = design.allParameters.itemByName
StrapWidth_par = design.allParameters.itemByName('StrapWidth')
Finalmente, podemos iterar sobre la lista de diámetros para cambiar los parámetros y exportar la geometría como archivos STL:
for dim in diameters:
Diam_set = dim
Width_set = StrapWidth_Input[0]
LensDiam_par.expression = str(Diam_set)
StrapWidth_par.expression = str(Width_set)
# Let the view have a chance to paint just so you can watch the progress.
adsk.doEvents()
# Construct the output filename.
filename = f'{folder}\\LensCapHolder_D{Diam_set}mm_Strap_{Width_set}mm.stl'
# Save the file as STL.
exportMgr = adsk.fusion.ExportManager.cast(design.exportManager)
stlOptions = exportMgr.createSTLExportOptions(rootComp)
stlOptions.meshRefinement = adsk.fusion.MeshRefinementSettings.MeshRefinementMedium
stlOptions.filename = filename
exportMgr.execute(stlOptions)
Ejecuté el guión varias veces, para anchos de correa de cámara de 35, 38, 40, 45 y 50 mm. Cada vez que el diámetro mínimo era igual o más grande que el ancho de la correa. Así es como obtuve los 200 archivos que publicamos en imprimable.com .
Conclusión
En conclusión, utilizando la API Fusion 360, podemos realizar scripts relativamente simples para automatizar la creación de diferentes versiones de un archivo y exportar cada uno en formato STL, listo para cortar y imprimir 3D.
Al usar este tipo de scripts, puede ahorrar tiempo y esfuerzo generando un lote de modelos similares con diferentes dimensiones, todo a la vez, por supuesto, primero debe hacer que un modelo CAD paramétrico sea compatible con este tipo de automatización.
Espero que esta publicación haya sido útil para explicar cómo funciona el guión que hice y cómo puede usarla para automatizar sus propios proyectos de impresión 3D. El script y el archivo Fusion 360 están disponibles en mi github , y puede bifurcarlos y usarlos para crear sus propios proyectos.
Uri y yo también trabajaremos en una versión del soporte de tapa de lente que permitirá ajustar dos diámetros diferentes en lugar de uno, así que estén atentos para eso, lo publicaremos, como de costumbre en la cuenta de Instagram de Twothingies .
Como un recordatorio amistoso, ¡siempre verifique las dimensiones de las tapas y la correa de su cámara para garantizar la compatibilidad antes de imprimir 3D cualquiera de los archivos que compartimos!
¡Feliz automatización e impresión!
No hay comentarios:
Publicar un comentario