Jump to content

Manual:Una introducción suave

From FreeCAD Documentation
This page is a translated version of the page Manual:A gentle introduction and the translation is 100% complete.

Python es un lenguaje de programación de código abierto ampliamente utilizado, reconocido por su simplicidad, versatilidad y legibilidad. Suele integrarse en aplicaciones como lenguaje de scripting, y FreeCAD no es una excepción. Esta integración permite a los usuarios automatizar tareas, personalizar flujos de trabajo y ampliar la funcionalidad del software mucho más allá de su interfaz gráfica.

Python ofrece varias ventajas que lo hacen especialmente adecuado para los usuarios de FreeCAD. Es fácil de usar para principiantes, con una sintaxis clara e intuitiva que facilita el aprendizaje, incluso para personas sin experiencia previa en programación. Esta accesibilidad es especialmente valiosa en la comunidad de FreeCAD, donde muchos usuarios provienen de diversos ámbitos, como la ingeniería, la arquitectura y el diseño, y carecen de amplia experiencia en programación.

Además, la amplia adopción de Python en otras aplicaciones, como Blender para modelado 3D, Inkscape para gráficos vectoriales y GRASS GIS para análisis geoespacial, lo convierte en una característica esencial para quienes buscan ampliar sus capacidades de programación. Dominar Python en FreeCAD no solo mejora la capacidad de crear herramientas y macros personalizadas, sino que también proporciona habilidades transferibles que se pueden aplicar en diversas plataformas de software.

En FreeCAD, la programación en Python le permite:

  • Automatizar tareas repetitivas para ahorrar tiempo y reducir errores.
  • Crear objetos paramétricos personalizados que se adapten dinámicamente a los cambios.
  • Desarrollar macros y herramientas personalizadas adaptadas a flujos de trabajo específicos.
  • Interactuar con la interfaz de programación de aplicaciones (API) de FreeCAD para acceder y manipular geometría, escenas y elementos de la interfaz de usuario mediante programación.

Al aprovechar Python, los usuarios de FreeCAD pueden liberar todo el potencial del software, transformándolo en una herramienta potente y flexible adaptada a sus necesidades específicas.

FreeCAD incluye una consola Python avanzada, accesible a través de Ver → Paneles → Consola Python. Esta herramienta permite a los usuarios realizar operaciones más allá de la interfaz gráfica, como acceder a funciones avanzadas, solucionar problemas de geometría y automatizar tareas. También registra los comandos Python para las acciones de la interfaz gráfica si la opción Mostrar comandos de script en la consola Python está habilitada en Editar → Preferencias → Python → Macro). Al mantener la consola abierta, puede observar cómo se ejecuta el código Python mientras trabaja, lo que ofrece una forma intuitiva de aprender el lenguaje mientras explora las capacidades de FreeCAD. Por último, FreeCAD también cuenta con un sistema de macros system que permite grabar acciones para reproducirlas posteriormente. Este sistema también utiliza la consola Python, simplemente registrando todo lo que se hace en ella.


En este capítulo, descubriremos de forma general el lenguaje Python. Si le interesa aprender más, la wiki de documentación de FreeCAD tiene una sección extensa relacionada con la programación en Python (Programación en Python).

Escribiendo código Python

En FreeCAD, puede escribir código Python de dos maneras principales: a través de la consola de Python (View → Panels → Python Console) o usando el editor de macros (Macro → Macros → Create). La consola de Python te permite introducir comandos uno a uno, que se ejecutan inmediatamente al pulsar Intro, lo que la hace perfecta para pruebas rápidas o exploración interactiva. El editor de macros, por otro lado, se utiliza para escribir y guardar scripts más complejos que constan de varias líneas de código. Estas macros se pueden ejecutar completas posteriormente desde la ventana Macros, lo que proporciona una forma eficaz de automatizar tareas repetitivas y ampliar la funcionalidad de FreeCAD. En este capítulo, podrás usar ambos métodos, pero se recomienda encarecidamente usar la consola de Python, ya que te informará inmediatamente de cualquier error que cometas al escribir.

Si es la primera vez que usa Python, considere leer esta breve introducción a la programación en Python antes de continuar, ya que le ayudará a comprender mejor los conceptos básicos de Python.

Manipulación de objetos de FreeCAD

Comencemos creando un nuevo documento vacío:

doc = FreeCAD.newDocument()

En la consola de Python de FreeCAD, al escribir FreeCAD. (la palabra "FreeCAD" seguida de un punto), aparece una ventana de autocompletado. Esta función no solo agiliza tu flujo de trabajo, al sugerir los comandos disponibles, sino que también te ayuda a descubrir nuevas funciones y características de FreeCAD. Cada entrada de la lista incluye una información sobre herramientas explicando su propósito, lo que facilita la comprensión y exploración de la funcionalidad disponible. Esta función de autocompletado es especialmente útil para quienes se inician en la programación con Python y para usuarios avanzados que navegan con eficiencia por la extensa API de FreeCAD. Tómate un momento para explorar las opciones en la ventana de autocompletado: podrías descubrir comandos que simplifiquen tu flujo de trabajo o te abran nuevas posibilidades.

Al escribir FreeCAD.newDocument() se crea un documento nuevo y vacío en FreeCAD, al igual que al hacer clic en el botón Nuevo documento de la barra de herramientas. Al ejecutar doc = FreeCAD.newDocument(), el nuevo objeto del documento se asigna a la variable doc, lo que permite manipularlo mediante programación. Con doc, puede añadir objetos, cambiar propiedades o guardar el documento.

En Python, el punto (.) se utiliza para indicar que un elemento está contenido dentro de otro. Por ejemplo, newDocument es una función dentro del módulo FreeCAD, por lo que escribimos FreeCAD.newDocument. La ventana de autocompletado que aparece muestra todo lo disponible dentro del módulo FreeCAD. Si escribieras un punto después de newDocument (sin añadir los paréntesis), se mostraría todo lo que pertenece a la función newDocument. Esto describe cómo Python organiza y accede a los objetos y sus componentes. Es importante tener en cuenta que los paréntesis son obligatorios al llamar a una función de Python, ya que indican la ejecución de la función.

Ahora volvamos a nuestro documento. Veamos qué podemos hacer con él. Teclea lo siguiente y explora las opciones disponibles:

doc.

En FreeCAD, las convenciones de nomenclatura para los comandos de Python pueden ayudarte a comprender su propósito:

  • Los nombres que comienzan con mayúscula suelen ser atributos, que almacenan valores o datos, como las propiedades de un objeto.
  • Los nombres que comienzan con minúscula suelen ser funciones (también llamadas métodos), que realizan acciones u operaciones, como crear o modificar objetos.
  • Los nombres que comienzan con un guion bajo (_) generalmente se utilizan internamente dentro del módulo y suelen ignorarse.

Esta distinción te ayuda a navegar por la API de FreeCAD y seleccionar el comando adecuado para tus necesidades. Por ejemplo, podrías usar un método para agregar un nuevo objeto a un documento. El método realiza la acción de crear y agregar el objeto, mientras que los atributos almacenan las propiedades del objeto. Comprender esta estructura facilita la exploración de la funcionalidad disponible, especialmente al usar la función de autocompletar o leer las sugerencias de herramientas. Agreguemos un cuadro.

box = doc.addObject("Part::Box", "myBox")

El comando box = doc.addObject("Part::Box", "myBox") agrega un nuevo objeto de caja 3D al documento. Aquí hay una explicación sencilla:

  • doc.addObject: Indica a FreeCAD que añada un nuevo objeto al documento.
  • Part::Box: Especifica el tipo de objeto a crear; en este caso, una caja 3D.
  • myBox: Asigna un nombre al nuevo objeto, facilitando su identificación y referencia posterior.

El resultado de este comando es que aparece un cuadro en el documento activo, y la variable `box` almacena una referencia al mismo para que puedas modificarlo o interactuar con él posteriormente. Nuestro cuadro se añade a la vista de árbol, pero aún no ocurre nada en la vista 3D, ya que al trabajar con Python, el documento nunca se recalcula automáticamente. Debemos hacerlo manualmente cuando sea necesario.

doc.recompute()

Ahora nuestra caja ha aparecido en la vista 3D. Muchos de los botones de la barra de herramientas para añadir objetos en FreeCAD realizan dos acciones: añadir el objeto y recalcular. Intente ahora añadir una esfera con el botón correspondiente en el Entorno de trabajo (Part Workbench) de piezas y verá cómo se ejecutan las dos líneas de código Python una tras otra.

Puede obtener una lista de todos los tipos de objetos posibles como Part::Box:

doc.supportedTypes()

Ahora vamos a explorar el contenido de nuestra caja:

box.

Enseguida verá un par de cosas muy interesantes, como por ejemplo:

box.Height

Esto imprimirá la altura actual de nuestra caja. Ahora intentemos cambiarla:

box.Height = 5

Si selecciona el cuadro con el ratón, verá que en el panel de propiedades, en la pestaña Datos, aparece nuestra propiedad Altura con el nuevo valor. Todas las propiedades de un objeto FreeCAD que aparecen en las pestañas Datos y Vista también son directamente accesibles desde Python, por sus nombres, como hicimos con la propiedad Altura. Se accede a las propiedades de datos directamente desde el propio objeto, por ejemplo:

box.Length

En FreeCAD, las propiedades visuales se gestionan mediante un objeto de vista (ViewObject). Cada objeto de FreeCAD tiene un ViewObject asociado, que almacena información sobre cómo se muestra el objeto en la interfaz gráfica, como el color, la transparencia o la visibilidad. Sin embargo, el ViewObject solo es accesible cuando FreeCAD se ejecuta con su interfaz gráfica. Si FreeCAD se inicia en modo no gráfico, por ejemplo, desde una terminal con la opción de línea de comandos -c o cuando se utiliza como biblioteca de Python en un script externo, el ViewObject no está disponible. Esto se debe a que en estos modos no hay una representación visual del objeto, ya que la interfaz gráfica no está cargada.

Pruebe el siguiente ejemplo para acceder al color de la línea de nuestra caja:

box.ViewObject.LineColor

Vectores y ubicaciones

Los vectores son un concepto fundamental en cualquier aplicación 3D. Un vector es, esencialmente, una lista de tres números (x, y, z) que describen un punto, una posición o una dirección en el espacio tridimensional. Los vectores son esenciales para definir la geometría, las transformaciones y las interacciones en el entorno 3D. Sirven como elementos básicos para operaciones como traslaciones, rotaciones y escalados.

En FreeCAD, los vectores se utilizan ampliamente para crear y manipular objetos. Permiten realizar una amplia gama de operaciones matemáticas, como suma, resta, producto vectorial, producto escalar y proyecciones. Estas operaciones permiten calcular distancias, ángulos y direcciones, así como definir relaciones entre objetos en el espacio.

Comprender los vectores y su funcionamiento es fundamental para la creación de scripts y la eficaz personalización en FreeCAD. Por ejemplo, los vectores se utilizan para referenciar y ubicar objetos, definir su orientación o incluso calcular las trayectorias para operaciones complejas como barridos o superficies de transición.

En FreeCAD, los vectores se representan mediante la clase Vector, que proporciona diversos métodos y propiedades para realizar operaciones y acceder a sus componentes. Dominar estas capacidades mejorará significativamente su habilidad para interactuar de manera programada con el entorno 3D de FreeCAD. En FreeCAD, los vectores funcionan de la siguiente manera:

myvec = FreeCAD.Vector(2, 0, 0)
print(myvec)
print(myvec.x)
print(myvec.y)
othervec = FreeCAD.Vector(0, 3, 0)
sumvec = myvec.add(othervec)

Aquí tiene un breve resumen de los comandos anteriores:

  • myvec = FreeCAD.Vector(2,0,0): Crea un vector myvec con las siguientes componentes: X = 2, Y = 0, Z = 0.
  • print(myvec): Imprime el vector myvec con sus componentes (X, Y, Z).
  • print(myvec.x): Imprime la componente X de myvec.
  • print(myvec.y): Imprime la componente Y de myvec.
  • othervec = FreeCAD.Vector(0,3,0): Crea un segundo vector othervec de componentes: X = 0, Y = 3, Z = 0.
  • sumvec = myvec.add(othervec): Suma myvec y othervec para crear un nuevo vector sumvec que contiene la suma de sus componentes.

Otra característica común de los objetos de FreeCAD es su Posicionamiento. Como vimos en capítulos anteriores, cada objeto tiene una propiedad de Posicionamiento, que contiene la posición (Base) y la orientación (Rotación) del objeto. Estas propiedades son fáciles de manipular desde Python, por ejemplo, para mover nuestro objeto:

print(box.Placement)
print(box.Placement.Base)
box.Placement.Base = sumvec
otherpla = FreeCAD.Placement()
otherpla.Base = FreeCAD.Vector(5, 5, 0)
box.Placement = otherpla

Aquí tiene un breve desglose de los comandos anteriores:

  • print(box.Placement): Imprime la ubicación de la caja, incluyendo su posición, rotación y orientación en el espacio 3D.
  • print(box.Placement.Base): Imprime la posición (Base) de la caja, que es un vector que representa su ubicación en el espacio 3D.
  • box.Placement.Base = sumvec: Establece la posición base (ubicación) de la caja al vector sumvec, moviendo la caja a esta nueva posición.
  • otherpla = FreeCAD.Placement(): Crea un nuevo objeto de ubicación llamado otherpla.
  • otherpla.Base = FreeCAD.Vector(5,5,0): Establece la posición base de otherpla a un vector en las coordenadas (5, 5, 0).
  • box.Placement = otherpla: Aplica otherpla a la caja, actualizando su ubicación a la nueva posición y orientación definidas por otherpla.

Leer más