Python scripting tutorial/es: Difference between revisions

From FreeCAD Documentation
(Created page with "Cuando inicias FreeCAD, la consola de Python carga 2 módulos base: FreeCAD y FreeCADGui (que también son accesibles por sus diminutivos App y Gui). Ellos contienen toda clas...")
(Updating to match new version of source page)
(47 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<languages/>

{{Docnav
|[[Introduction_to_Python|Introduction to Python]]
|[[FreeCAD_Scripting_Basics|FreeCAD Scripting Basics]]
}}

{{TOCright}}

==Introduction==

<div class="mw-translate-fuzzy">
[http://es.wikipedia.org/wiki/Python Python] es un lenguaje de programación, muy simple de utilizar y muy rápido de aprender. Es de código libre, multi plataforma, y puede utilizarse para una gran variedad de cosas, desde la programación de archivos de guión simples a programas muy complejos. Pero uno de sus usos más extendidos es como lenguaje de archivos de guión, ya que es sencillo de embeber en otras aplicaciones. Así es exactamente como se utiliza dentro de FreeCAD. Desde la consola de Python, o desde tus archivos de guión personalizados, puedes pilotar FreeCAD, y hacer que ejecute acciones muy complejas para las cuales aún no exista herramientas en la interfaz gráfica de usuario.
[http://es.wikipedia.org/wiki/Python Python] es un lenguaje de programación, muy simple de utilizar y muy rápido de aprender. Es de código libre, multi plataforma, y puede utilizarse para una gran variedad de cosas, desde la programación de archivos de guión simples a programas muy complejos. Pero uno de sus usos más extendidos es como lenguaje de archivos de guión, ya que es sencillo de embeber en otras aplicaciones. Así es exactamente como se utiliza dentro de FreeCAD. Desde la consola de Python, o desde tus archivos de guión personalizados, puedes pilotar FreeCAD, y hacer que ejecute acciones muy complejas para las cuales aún no exista herramientas en la interfaz gráfica de usuario.
</div>


<div class="mw-translate-fuzzy">
Por ejemplo, desde un archivo de guión de Python, puedes:
Por ejemplo, desde un archivo de guión de Python, puedes:
* Crear nuevos objetos.
* Crear nuevos objetos.
Line 6: Line 20:
* Modificar la representación 3D de dichos objetos
* Modificar la representación 3D de dichos objetos
* Modificar la interfaz de FreeCAD
* Modificar la interfaz de FreeCAD
</div>


<div class="mw-translate-fuzzy">
También existen diversas formas de utilizar Python en FreeCAD:
También existen diversas formas de utilizar Python en FreeCAD:
* Desde el [[FreeCAD Scripting Basics/es|Interprete de Python de FreeCAD]], donde puedes dictar comandos como en una interfaz del tipo de línea de comandos
* Desde el [[FreeCAD Scripting Basics/es|Interprete de Python de FreeCAD]], donde puedes dictar comandos como en una interfaz del tipo de línea de comandos
* Desde [[macros/es|Macros]], que son una forma conveniente de añadir una herramienta que no exista a la interfaz de FreeCAD
* Desde [[macros/es|Macros]], que son una forma conveniente de añadir una herramienta que no exista a la interfaz de FreeCAD
* Desde archivos de guión externos, que pueden utilizarse para programar cosas mucho más complejas. Como [[Workbenches/es|Entornos]] completos.
* Desde archivos de guión externos, que pueden utilizarse para programar cosas mucho más complejas. Como [[Workbenches/es|Entornos]] completos.
</div>


<div class="mw-translate-fuzzy">
En este tutorial, trabajaremos en varios ejemplos simples para que puedas iniciarte, pero existe mucha más documentación sobre los [[Power users hub/es|archivos de guión de Python]] disponible en esta wiki. Si eres totalmente nuevo en Python y quieres comprender cómo funciona, también tenemos una básica [[introduction to Python/es|Introducción a Python]].
En este tutorial, trabajaremos en varios ejemplos simples para que puedas iniciarte, pero existe mucha más documentación sobre los [[Power users hub/es|archivos de guión de Python]] disponible en esta wiki. Si eres totalmente nuevo en Python y quieres comprender cómo funciona, también tenemos una básica [[introduction to Python/es|Introducción a Python]].
</div>


'''Important!''' Before proceeding with Python scripting, go to Edit->Prefences->General->Output window and check 2 boxes:
Before proceeding with Python scripting, go to {{MenuCommand|Edit → Preferences → GeneralOutput window}} and check two boxes:
* Redirect internal Python output to report view
* {{MenuCommand|Redirect internal Python output to report view}}.
* Redirect internal Python errors to report view
* {{MenuCommand|Redirect internal Python errors to report view}}.
Then go to View->Views and check:
Then go to {{MenuCommand|View → Panels}} and check:
* Report view
* {{MenuCommand|Report view}}.
This will save you a lot of aggravation!


<div class="mw-translate-fuzzy">
== Escribiendo código en Python ==
== Escribiendo código en Python ==


Existen dos modos sencillos de escribir código de Python en FreeCAD: Desde la consola de Python (disponible en el menú Vista -> Vistas -> Consola de Python) o desde el editor de macros (Herramientas -> Macros). En la consola, escribes comandos de Python uno a uno, que son ejecutados al presionar Enter, mientras que las macros pueden contener archivos de guión más completos formados por varias líneas, que se ejecutan sólo cuando la macro es ejecutada.
Existen dos modos sencillos de escribir código de Python en FreeCAD: Desde la consola de Python (disponible en el menú Vista -> Vistas -> Consola de Python) o desde el editor de macros (Herramientas -> Macros). En la consola, escribes comandos de Python uno a uno, que son ejecutados al presionar Enter, mientras que las macros pueden contener archivos de guión más completos formados por varias líneas, que se ejecutan sólo cuando la macro es ejecutada.
</div>


There are two ways to write Python code in FreeCAD. In the [[Python console|Python console]] (select {{MenuCommand|View → Panels → Python console}} from the menu) or in the [[Std_DlgMacroExecute|Macro editor]] (select {{MenuCommand|Macro → Macros...}} from the menu). In the console you write Python commands one by one, executing them by pressing {{KEY|Enter}}, while macros can contain more complex code made up of several lines, executed only when the macro is executed.

[[Image:Screenshot_pythoninterpreter.jpg]]
<div class="mw-translate-fuzzy">
[[Image:Screenshot_pythoninterpreter.jpg|center|frame|La consola de Python de FreeCAD]]
[[Image:Screenshot_pythoninterpreter.jpg|center|frame|La consola de Python de FreeCAD]]
</div>


<div class="mw-translate-fuzzy">
En este tutorial, serás capaz de utilizar ambos métodos, ya sea copiando y pegando cada línea una a una en la consola de Python y presionando {{KEY|Return}} después de cada línea, o copiando y pegando el código entero en una ventana de macro nueva.
En este tutorial, serás capaz de utilizar ambos métodos, ya sea copiando y pegando cada línea una a una en la consola de Python y presionando {{KEY|Return}} después de cada línea, o copiando y pegando el código entero en una ventana de macro nueva.
</div>


[[#top|top]]

<div class="mw-translate-fuzzy">
== Explorando FreeCAD ==
== Explorando FreeCAD ==


Vamos a empezar creando un nuevo documento vacío:
Vamos a empezar creando un nuevo documento vacío:
</div>

Let's start by creating a new empty document:


{{Code|code=
<syntaxhighlight>
doc = FreeCAD.newDocument()
doc = FreeCAD.newDocument()
}}
</syntaxhighlight>


<div class="mw-translate-fuzzy">
Si escribes esto en la consola de Python de FreeCAD, notaras que en cuanto escribas "FreeCAD.", una ventana aparece, permitiendo rápidamente autocompletar el resto de la línea. Aún mejor, cada entrada en la lista de autocompletar tiene una ayuda explicando lo que hace. Esto hace muy sencillo explorar las funcionalidades disponibles. Antes de seleccionar "newDocument", mira las otras opciones disponibles.
Si escribes esto en la consola de Python de FreeCAD, notaras que en cuanto escribas "FreeCAD.", una ventana aparece, permitiendo rápidamente autocompletar el resto de la línea. Aún mejor, cada entrada en la lista de autocompletar tiene una ayuda explicando lo que hace. Esto hace muy sencillo explorar las funcionalidades disponibles. Antes de seleccionar "newDocument", mira las otras opciones disponibles.
</div>


[[Image:Screenshot_classbrowser.jpg]]
<div class="mw-translate-fuzzy">
[[Image:Screenshot_classbrowser.jpg|center|frame|El mecanismo de autocompletar de la consola de Python de FreeCAD]]
[[Image:Screenshot_classbrowser.jpg|center|frame|El mecanismo de autocompletar de la consola de Python de FreeCAD]]
</div>


<div class="mw-translate-fuzzy">
Ahora nuestro nuevo documento se creará. Esto es similar a presionar el botón "Nuevo documento" en la barra de herramientas. En realidad, la mayoría de botones en FreeCAD no hacen nada más que ejecutar una línea o dos de código en Python. Aún mejor, puedes establecer una opción en Editar -> Preferencias -> General -> Macro para "mostrar los comandos de los archivos de guión en la consola de Python". Esto mostrará en la consola todo el código de Python ejecutado cuando presionas los botones. Muy útil para aprender como reproducir acciones en Python.
Ahora nuestro nuevo documento se creará. Esto es similar a presionar el botón "Nuevo documento" en la barra de herramientas. En realidad, la mayoría de botones en FreeCAD no hacen nada más que ejecutar una línea o dos de código en Python. Aún mejor, puedes establecer una opción en Editar -> Preferencias -> General -> Macro para "mostrar los comandos de los archivos de guión en la consola de Python". Esto mostrará en la consola todo el código de Python ejecutado cuando presionas los botones. Muy útil para aprender como reproducir acciones en Python.
</div>


<div class="mw-translate-fuzzy">
Volvamos ahora a nuestro documento. Vamos a ver que podemos hacer con él:
Volvamos ahora a nuestro documento. Vamos a ver que podemos hacer con él:
</div>


{{Code|code=
<syntaxhighlight>
doc.
doc.
}}
</syntaxhighlight>


<div class="mw-translate-fuzzy">
Explora las opciones disponibles. Normalmente los nombres que comienzan con una letra mayúscula son atributos, que contienen un valor, mientras que los nombres que empiezan con una letra minúscula son funciones (también llamados métodos), que hacen "algo". Los nombres que comienzan con un guión bajo están ahí normalmente para el funcionamiento interno del módulo, y no deberías preocuparte de ellos. Vamos a utilizar uno de los métodos para añadir un nuevo objeto a nuestro documento:
Explora las opciones disponibles. Normalmente los nombres que comienzan con una letra mayúscula son atributos, que contienen un valor, mientras que los nombres que empiezan con una letra minúscula son funciones (también llamados métodos), que hacen "algo". Los nombres que comienzan con un guión bajo están ahí normalmente para el funcionamiento interno del módulo, y no deberías preocuparte de ellos. Vamos a utilizar uno de los métodos para añadir un nuevo objeto a nuestro documento:
</div>


{{Code|code=
<syntaxhighlight>
box = doc.addObject("Part::Box","myBox")
box = doc.addObject("Part::Box", "myBox")
}}
</syntaxhighlight>


<div class="mw-translate-fuzzy">
No pasa nada. Por qué? Es debido a que FreeCAD está pensado para realizar trabajos complejos. Un día, trabajará con cientos de objetos complejos, todos dependiendo unos de otros. Hacer un pequeño cambio en cualquier parte podría tener un gran impacto,necesitaras recalcular el documento completo, que puede llevar bastante tiempo... Por ese motivo, casi ningún comando actualiza la escena automáticamente. Debes hacerlo manualmente:
No pasa nada. Por qué? Es debido a que FreeCAD está pensado para realizar trabajos complejos. Un día, trabajará con cientos de objetos complejos, todos dependiendo unos de otros. Hacer un pequeño cambio en cualquier parte podría tener un gran impacto,necesitaras recalcular el documento completo, que puede llevar bastante tiempo... Por ese motivo, casi ningún comando actualiza la escena automáticamente. Debes hacerlo manualmente:
</div>


{{Code|code=
<syntaxhighlight>
doc.recompute()
doc.recompute()
}}
</syntaxhighlight>


<div class="mw-translate-fuzzy">
Ves? Ahora aparece nuestro cubo! Muchos de los botones que añaden objetos en FreeCAD en realidad hacen dos cosas: Añadir el objeto, y recalcular. Si activas la opción "mostrar los comandos de los archivos de guión en la consola de Python", prueba a añadir una esfera con el botón de la interfaz, verás las dos líneas de código de Python siendo ejecutadas una tras la otra.
Ves? Ahora aparece nuestro cubo! Muchos de los botones que añaden objetos en FreeCAD en realidad hacen dos cosas: Añadir el objeto, y recalcular. Si activas la opción "mostrar los comandos de los archivos de guión en la consola de Python", prueba a añadir una esfera con el botón de la interfaz, verás las dos líneas de código de Python siendo ejecutadas una tras la otra.
</div>

Qué quieres saber sobre el "Part::Box"? Cómo puedo saber que otros tipos de objetos puedo añadir? Está todo aquí:

<syntaxhighlight>
doc.supportedTypes()
</syntaxhighlight>


Ahora vamos a explorar el contenido de nuestro cubo:
Ahora vamos a explorar el contenido de nuestro cubo:


{{Code|code=
<syntaxhighlight>
box.
box.
}}
</syntaxhighlight>


Verás automáticamente varias cosas interesantes como:
Verás automáticamente varias cosas interesantes como:


{{Code|code=
<syntaxhighlight>
box.Height
box.Height
}}
</syntaxhighlight>


Esto mostrará la altura actual de nuestro cubo. Ahora vamos a intentar cambiarla:
Esto mostrará la altura actual de nuestro cubo. Ahora vamos a intentar cambiarla:


{{Code|code=
<syntaxhighlight>
box.Height = 5
box.Height = 5
}}
</syntaxhighlight>


<div class="mw-translate-fuzzy">
Si seleccionas tu cubo con el ratón, verás que en el panel de propiedades, en la pestaña de "Datos", nuestra propiedad "Height" aparece. Todas las propiedades de un objeto de FreeCAD que aparecen aquí (y también en la pestaña "Vista", de la que hablaremos más adelante), son directamente accesibles también desde Python, por sus nombres, como hicimos con la propiedad "Height". Prueba cambiando las otras dimensiones del cubo.
Si seleccionas tu cubo con el ratón, verás que en el panel de propiedades, en la pestaña de "Datos", nuestra propiedad "Height" aparece. Todas las propiedades de un objeto de FreeCAD que aparecen aquí (y también en la pestaña "Vista", de la que hablaremos más adelante), son directamente accesibles también desde Python, por sus nombres, como hicimos con la propiedad "Height". Prueba cambiando las otras dimensiones del cubo.
</div>


[[#top|top]]

<div class="mw-translate-fuzzy">
== Vectores y ubicaciones ==
== Vectores y ubicaciones ==


Los [http://es.wikipedia.org/wiki/Vector vectores] son un concepto muy fundamental en cualquier aplicación 3D. Son una lista de 3 números (X, Y y Z), describiendo un punto o posición en el espacio 3D. Un montón de cosas se pueden hacer con los vectores, como sumas, restas, proyecciones y [http://es.wikipedia.org/wiki/Espacio_vectorial mucho más]. En FreeCAD los vectores funcionan así:
Los [http://es.wikipedia.org/wiki/Vector vectores] son un concepto muy fundamental en cualquier aplicación 3D. Son una lista de 3 números (X, Y y Z), describiendo un punto o posición en el espacio 3D. Un montón de cosas se pueden hacer con los vectores, como sumas, restas, proyecciones y [http://es.wikipedia.org/wiki/Espacio_vectorial mucho más]. En FreeCAD los vectores funcionan así:
</div>

[https://en.wikipedia.org/wiki/Euclidean_vector Vectors] are a very fundamental concept in any 3D application. A vector is a list of 3 numbers (x, y and z), describing a point or position in 3D space. Many things can be done with vectors, such as additions, subtractions, projections and [https://en.wikipedia.org/wiki/Vector_space much more]. In FreeCAD vectors work like this:


{{Code|code=
<syntaxhighlight>
myvec = FreeCAD.Vector(2,0,0)
myvec = FreeCAD.Vector(2, 0, 0)
myvec
myvec.x
myvec.x
myvec.y
myvec.y
othervec = FreeCAD.Vector(0,3,0)
othervec = FreeCAD.Vector(0, 3, 0)
sumvec = myvec.add(othervec)
sumvec = myvec.add(othervec)
}}
</syntaxhighlight>


<div class="mw-translate-fuzzy">
Otra característica de los objetos de FreeCAD es su ubicación. Cada objeto tiene atributos de Ubicación, que contienen la posición (Base) y orientación (Rotación) del objeto. Son sencillos de manejar, por ejemplo para mover nuestro objeto:
Otra característica de los objetos de FreeCAD es su ubicación. Cada objeto tiene atributos de Ubicación, que contienen la posición (Base) y orientación (Rotación) del objeto. Son sencillos de manejar, por ejemplo para mover nuestro objeto:
</div>


{{Code|code=
<syntaxhighlight>
box.Placement.
box.Placement
box.Placement.Base
box.Placement.Base
box.Placement.Base = sumvec
box.Placement.Base = sumvec
Line 111: Line 162:
otherpla = FreeCAD.Placement()
otherpla = FreeCAD.Placement()
box.Placement = otherpla
box.Placement = otherpla
}}
</syntaxhighlight>


Ahora deberías comprender varios conceptos importantes antes de continuar avanzando.
Ahora deberías comprender varios conceptos importantes antes de continuar avanzando.


[[#top|top]]

<div class="mw-translate-fuzzy">
== App y Gui ==
== App y Gui ==


FreeCAD está creado desde el principio para ser una aplicación de línea de comando, sin su interfaz de usuario. Como resultado, prácticamente todo está separado entre una componente "geométrica" y una componente "visual". Cuando trabajas en modo línea de comando, la parte geométrica está presente, pero todas las partes visuales están sencillamente desactivadas. Prácticamente cualquier objeto en FreeCAD por lo tanto está formado por dos partes, un Object y un ViewObject.
FreeCAD está creado desde el principio para ser una aplicación de línea de comando, sin su interfaz de usuario. Como resultado, prácticamente todo está separado entre una componente "geométrica" y una componente "visual". Cuando trabajas en modo línea de comando, la parte geométrica está presente, pero todas las partes visuales están sencillamente desactivadas. Prácticamente cualquier objeto en FreeCAD por lo tanto está formado por dos partes, un Object y un ViewObject.
</div>

FreeCAD has been designed so that it can also be used without its user interface, as a command-line application. Almost every object in FreeCAD therefore consists of two parts: an {{incode|Object}}, its "geometry" component, and a {{incode|ViewObject}}, its "visual" component. When you work in command-line mode, the geometry part is present, but the visual part is disabled.


<div class="mw-translate-fuzzy">
Para ilustrar el concepto, mira nuestro objeto cubo, las propiedades geométricas del cubo, como sus dimensiones, posición, etc. son almacenadas en el Objeto, mientras que sus propiedades visuales, como su color, espesor de línea, etc. se almacenan en el viewobject. Esto se corresponde con las pestañas "Datos" y "Vista" en la ventana de propiedades. El viewobject de un objeto es accesible así:
Para ilustrar el concepto, mira nuestro objeto cubo, las propiedades geométricas del cubo, como sus dimensiones, posición, etc. son almacenadas en el Objeto, mientras que sus propiedades visuales, como su color, espesor de línea, etc. se almacenan en el viewobject. Esto se corresponde con las pestañas "Datos" y "Vista" en la ventana de propiedades. El viewobject de un objeto es accesible así:
</div>


{{Code|code=
<syntaxhighlight>
vo = box.ViewObject
vo = box.ViewObject
}}
</syntaxhighlight>
<div class="mw-translate-fuzzy">
Ahora también puedes cambiar las propiedades de la pestaña "Vista":
Ahora también puedes cambiar las propiedades de la pestaña "Vista":
</div>


{{Code|code=
<syntaxhighlight>
vo.Transparency = 80
vo.Transparency = 80
vo.hide()
vo.hide()
vo.show()
vo.show()
}}
</syntaxhighlight>


<div class="mw-translate-fuzzy">
Cuando inicias FreeCAD, la consola de Python carga 2 módulos base: FreeCAD y FreeCADGui (que también son accesibles por sus diminutivos App y Gui). Ellos contienen toda clase de funcionalidades genéricas para trabajar con documentos y sus objetos. Para ilustrar nuestro concepto, observa que ambos FreeCAD y FreeCADGui contienen un atributo ActiveDocument, el cual es el documento abierto actualmente. FreeCAD.ActiveDocument y FreeCADGui.ActiveDocument no son el mismo objeto. Son los dos componentes de un documento de FreeCAD, y contienen diferentes atributos y métodos. Por ejemplo, FreeCADGui.ActiveDocument contiene ActiveView, que es la vista 3D abierta actualmente.
Cuando inicias FreeCAD, la consola de Python carga 2 módulos base: FreeCAD y FreeCADGui (que también son accesibles por sus diminutivos App y Gui). Ellos contienen toda clase de funcionalidades genéricas para trabajar con documentos y sus objetos. Para ilustrar nuestro concepto, observa que ambos FreeCAD y FreeCADGui contienen un atributo ActiveDocument, el cual es el documento abierto actualmente. FreeCAD.ActiveDocument y FreeCADGui.ActiveDocument no son el mismo objeto. Son los dos componentes de un documento de FreeCAD, y contienen diferentes atributos y métodos. Por ejemplo, FreeCADGui.ActiveDocument contiene ActiveView, que es la vista 3D abierta actualmente.
</div>


[[#top|top]]
== Modules ==
Now you must surely wonder, what else than "Part::Box" can I do? The FreeCAD base application is more or less an empty container. Without its modules, it can do little more than creating new, empty documents. The true power of FreeCAD is in its faithful modules. Each of them adds not only new workbenches to the interface, but also new python commands and new object types. As a result, several different or even totally incompatible object types can coexist in the same document. The most important modules in FreeCAD, that we'll look at in this tutorial, are [[Part Module|Part]], [[Mesh Module|Mesh]], [[Sketcher Workbench|Sketcher]] or [[Draft Module|Draft]].


<div class="mw-translate-fuzzy">
[[Sketcher Workbench|Sketcher]] and [[Draft Module|Draft]] both use the [[Part Module|Part]] module to create and handle their geometry, which are BRep while [[Mesh Module|Mesh]] is totally independent, and handles its own objects. More about that below.
== Módulos ==


Seguramente te debes estar preguntando, Qué más que puedo hacer además del "Part::Box"? La aplicación base de FreeCAD es más o menos un contenedor vacío. Sin sus módulos, puede hacer poco más que crear nuevos documentos vacíos. La verdadera potencia de FreeCAD está en sus fieles módulos. Cada uno de ellos añade no sólo nuevos entornos a su interfaz, sino también nuevos comandos de Python y nuevos tipos de objetos. Como resultado, varios tipos de objetos diferentes o incluso totalmente incompatibles pueden coexistir en el mismo documento. Los módulos más importantes en FreeCAD, que veremos en este tutorial, son [[Part Module/es|Piezas]], [[Mesh Module/es|Mallas]], [[Sketcher Workbench/es|Croquizador]] o [[Draft Module/es|Boceto]].
You can check all the available base object types for the current document like this:
</div>


The true power of FreeCAD lies in its faithful modules. The FreeCAD base application is more or less an empty container. Without its modules it can do little more than create new, empty documents. Each module not only adds new workbenches to the interface, but also new Python commands and new object types. As a result several different, and even totally incompatible, object types can coexist in the same document. The most important modules in FreeCAD that we'll look at in this tutorial are: [[Part_Module|Part]], [[Mesh_Module|Mesh]], [[Sketcher_Workbench|Sketcher]] and [[Draft_Module|Draft]].
<syntaxhighlight>

<div class="mw-translate-fuzzy">
Los módulos [[Sketcher Workbench/es|Croquizador]] y [[Draft Module/es|Boceto]] ambos utilizan el módulo [[Part Module/es|Piezas]] para crear y manejar sus geometrías, las cuales son mientras que el módulo [[Mesh Module/es|Mallas]] es totalmente independiente, y maneja sus propios objetos. Comentaremos algo más en adelante.
</div>

Puedes comprobar todos los tipos de objeto base disponibles para el documento actual así:

{{Code|code=
doc.supportedTypes()
doc.supportedTypes()
}}
</syntaxhighlight>


<div class="mw-translate-fuzzy">
The different FreeCAD modules, although they added their object types to FreeCAD, are not automatically loaded in the python console. This is to avoid having a very slow startup. Modules are loaded only when you need them. So, for example, to explore what's inside the Part module:
Los diferentes módulos de FreeCAD, aunque añaden sus propios tipos de objeto a FreeCAD, no se cargan automáticamente en la consola de Python. Esto se hace para evitar un inicio demasiado lento. Los módulos son cargados sólo cuando los necesitas. Así, por ejemplo, para explorar que es lo que hay en el módulo de Piezas:
</div>


{{Code|code=
<syntaxhighlight>
import Part
import Part
Part.
Part.
}}
</syntaxhighlight>

But we'll talk more about the Part module below.


Pero ya hablaremos más adelante del módulo de Piezas.
By now, you know a bit more about the different modules of FreeCAD: The core modules (FreeCAD, FreeCADGui), and the workbenches modules (Part, Mesh, Sketcher). The other important modules are the 3d scene module (pivy) and the interface module (pyqt), we'll talk about them too below.


[[#top|top]]
Now it's time to explore a bit deeper the important ones, which are the workbench modules.


<div class="mw-translate-fuzzy">
== Mesh ==
== Mallas ==
</div>


<div class="mw-translate-fuzzy">
[http://en.wikipedia.org/wiki/Polygon_mesh Meshes] are a very simple kind of 3D objects, used for example by [http://en.wikipedia.org/wiki/SketchUp Sketchup], [http://en.wikipedia.org/wiki/Blender_%28software%29 Blender] or [http://en.wikipedia.org/wiki/Autodesk_3ds_Max 3D studio Max]. They are composed of 3 elements: points (also called vertices), lines (also called edges) and faces. In many applications, FreeCAD included, faces can have only 3 vertices. But of course nothing prevents you from having a bigger plane face made of several coplanar triangles.
Las [http://es.wikipedia.org/wiki/Malla_poligonal Mallas] son un tipo de objeto 3D muy simple, utilizados por ejemplo por [http://es.wikipedia.org/wiki/Google_SketchUp Sketchup], [http://es.wikipedia.org/wiki/Blender Blender] o [http://es.wikipedia.org/wiki/Autodesk_3ds_Max 3D studio Max]. Están compuestos por 3 elementos: puntos (también denominados vértices), líneas (también denominadas aristas) y caras. En numerosas aplicaciones, FreeCAD incluida, las caras sólo pueden tener 3 vértices. Pero por supuesto nada impide que tengas una cara plana mayor formada por diversas caras triangulares coplanares.
</div>


<div class="mw-translate-fuzzy">
Meshes are simple, this can be a bad thing, but for many applications such as those above, it turns to be an advantage, because they are so simple that you can easily have millions of them in a single document. In FreeCAD, though, they have less use, and are mostly there so you can import objects in mesh formats (.stl, .obj) from other applications. It was also extensively used as the main test module in the first month of life of FreeCAD.
Las mallas son simple, esto puede ser un mal asunto, pero para muchas aplicaciones como las citadas antes, se vuelve en una ventaja, porque son tan simples que puedes fácilmente tener millones de ellas en un único documento. Aunque en FreeCAD tienen poca utilidad, y se utilizan principalmente para que puedas importar objetos en formato de malla (.stl, .obj) de otras aplicaciones. También fue utilizado extensamente como el módulo de test principal en el primer mes de vida de FreeCAD.
</div>


<div class="mw-translate-fuzzy">
Mesh objects and FreeCAD objects are different things. You can see the FreeCAD object as a container for a Mesh object (like, we'll see below, for Part objects too). So in order to add a mesh object to FreeCAD, we must first create a FreeCAD object and a Mesh object, then add the Mesh object to the FreeCAD object:
Los objetos de malla y los objetos de FreeCAD son cosas diferentes. Puedes ver el objeto de FreeCAD como un contenedor para un objeto de malla (como, veremos más adelante, también para objetos de pieza). Así que para añadir un objeto de malla a FreeCAD, debemos primero crear un objeto de FreeCAD y un objeto de malla, después añadir el objeto de malla al objeto de FreeCAD:
</div>


{{Code|code=
<syntaxhighlight>
import Mesh
import Mesh
mymesh = Mesh.createSphere()
mymesh = Mesh.createSphere()
mymesh.
mymesh.Facets
mymesh.Facets
mymesh.Points
mymesh.Points
meshobj = doc.addObject("Mesh::Feature","MyMesh")
meshobj = doc.addObject("Mesh::Feature", "MyMesh")
meshobj.Mesh = mymesh
meshobj.Mesh = mymesh
doc.recompute()
doc.recompute()
}}
</syntaxhighlight>


<div class="mw-translate-fuzzy">
This is a standard example, that uses the createSphere() method to automatically create a sphere, but you can very well create custom meshes from scratch, by defining their vertices and faces.
Este es un ejemplo estándar, que utiliza el método createSphere() para automáticamente crear una esfera, pero podrías perfectamente crear objetos de malla personalizados desde cero, definiendo sus vértices y caras.
</div>


[[Mesh Scripting|Read more about mesh scripting...]]
[[Mesh Scripting/es|Lee más sobre utilizar código con las mallas...]]


[[#top|top]]
== Part ==
The [[Part Module]] is the most powerful module of the whole FreeCAD. It allows to create and manipulate [http://en.wikipedia.org/wiki/Boundary_representation BRep] objects. This kind of object, unlike meshes, can have a wide variety of components. To resume a bit, Brep means Boundary Representation. which means that they are defined by their surfaces, which enclose and define an inner volume. These surface can be a variety of things, such as plane faces or very complex NURBS surfaces. They also carry the concept of volume.


<div class="mw-translate-fuzzy">
The Part module is based on the powerful [http://en.wikipedia.org/wiki/Open_CASCADE_Technology OpenCasCade] library, which allows a wide range of complex operations to be easily performed on those objects, such as boolean operations, filleting, lofts, etc...
== Piezas ==


El [[Part Module/es|Módulo de Piezas]] es el módulo más potente de todo FreeCAD. Permite crear y manejar objetos [http://en.wikipedia.org/wiki/Boundary_representation BRep]. Este tipo de objetos, a diferencia de las mallas, pueden tener una amplia variedad de componentes. Para resumir un poco, Brep significa Boundary Representation, que quiere decir que están definidos por sus superficies, que comprenden y definen un volumen interior. Dichas superficies pueden ser varias cosas, como caras planas o superficies NURBS complejas. También incorporan el concepto de volumen.
The Part module works the same way as the Mesh module: You create a FreeCAD object, a Part object, then add the Part object to the FreeCAD object:
</div>


The [[Part Module|Part Module]] is the most powerful module in the whole of FreeCAD. It allows you to create and manipulate [https://en.wikipedia.org/wiki/Boundary_representation BRep] objects. BRep stands for "Boundary Representation". A BRep object is defined by surfaces that enclose and define an inner volume. Unlike meshes, BRep objects can have a wide variety of components from planar faces to very complex NURBS surfaces.
<syntaxhighlight>

<div class="mw-translate-fuzzy">
El módulo de Piezas está basado en la potente tecnología de la librería [http://en.wikipedia.org/wiki/Open_CASCADE_Technology OpenCasCade], que permite que un amplio rango de operaciones complejas sean aplicadas de forma sencilla en dichos objetos, como las operaciones booleanas, redondeos, barridos...
</div>

El módulo de Piezas funciona del mismo modo que el módulo de mallas: Se crea un objeto de FreeCAD, un objeto de Pieza, luego añadir el objeto de pieza al objeto de FreeCAD:

{{Code|code=
import Part
import Part
myshape = Part.makeSphere(10)
myshape = Part.makeSphere(10)
myshape.
myshape.Volume
myshape.Volume
myshape.Area
myshape.Area


shapeobj = doc.addObject("Part::Feature","MyShape")
shapeobj = doc.addObject("Part::Feature", "MyShape")
shapeobj.Shape = myshape
shapeobj.Shape = myshape
doc.recompute()
doc.recompute()
}}
</syntaxhighlight>


<div class="mw-translate-fuzzy">
The Part module (like the Mesh module) also has a shortcut that automatically creates a FreeCAD object and add a shape to it, so you can skip the 3 last lines above:
El módulo de Piezas (como el módulo de mallas) también tiene un atajo que automáticamente crea un objeto de FreeCAD y le añade una forma, así puedes evitar las tres líneas anteriores:
</div>


{{Code|code=
<syntaxhighlight>
Part.show(myshape)
Part.show(myshape)
}}
</syntaxhighlight>


<div class="mw-translate-fuzzy">
By exploring the contents of myshape, you will notice many interesting available subcomponents such as Faces, Edges, Vertexes, Solids or Shells, and a wide range of geometry operations such as cut (subtraction), common (intersection) or fuse (union). The [[Topological data scripting]] page explains all that in detail.
Explorando el contenido de myshape, observarás que están disponibles varios subcomponentes interesantes como caras, aristas, vértices, sólidos o superficies, y un amplio rango de operaciones geométricas como cortes (sustracciones), común (intersecciones) o fusiones (unión). La página de [[Topological data scripting/es|Archivos de guión de topología de datos]] lo explica todo detalladamente.
</div>


<div class="mw-translate-fuzzy">
[[Topological data scripting|Read more about part scripting...]]
[[Topological data scripting/es|Lee más sobre utilizar código con las piezas...]]
</div>


[[#top|top]]
== Draft ==
FreeCAD features many more modules, such as [[Sketcher Workbench|Sketcher]] or [[Draft Module|Draft]], which also create Part objects, but add parameters to it, or even carry a whole new way to handle the Part geometry in them. Our box example above, is a perfect example of parametric object. All you need, to define the box, is to specify a couple of parameters, such as height, width and length. Based on those, the object will automatically calculate its Part shape. FreeCAD allows you to [[Scripted objects|create such objects in python]].


<div class="mw-translate-fuzzy">
The [[Draft Module]] adds a couple of 2D parametric objects types (which are all Part objects) such as lines and circles, and also provides some generic functions that work not only on Draft-made objects, but on any Part object. To explore what is available, simply do:
== Boceto ==


FreeCAD proporciona varios módulos, como el [[Sketcher Workbench/es|Croquizador]] o [[Draft Module/es|Boceto]], que también crean objetos de piezas, pero le añade parámetros, o incluso un nuevo modo de manejar la geometría de las piezas. Nuestro cubo de ejemplo de arriba, es un perfecto ejemplo de objeto paramétrico. Todo lo que necesitas, para definir el cubo, es especificar un conjunto de parámetros, como las altura, ancho y longitud. Basados en los cuales, el objeto calculará automáticamente su forma de Pieza. FreeCAD te permite [[Scripted objects/es|crear dichos objetos en Python]].
<syntaxhighlight>
</div>

FreeCAD features many more modules, such as [[Sketcher_Workbench|Sketcher]] and [[Draft_Module|Draft]], that also create Part objects. These modules add additional parameters to the objects created, or even implement a whole new way to handle the Part geometry in them. Our box example above is a perfect example of a parametric object. All you need to define the box is to specify the parameters height, width and length. Based on those, the object will automatically calculate its Part shape. FreeCAD allows you to [[Scripted_objects|create such objects in Python]].

<div class="mw-translate-fuzzy">
El [[Draft Module/es|Módulo de Boceto]] añade diversos tipos de objetos 2D paramétricos (que son todos objetos de Piezas) como líneas y circunferencias, y también proporciona algunas funciones genéricas que funcionan no sólo en objetos creados en el módulo de Boceto, sino en cualquier objeto de Pieza. Para explorar lo que está disponible, simplemente haz lo siguiente:
</div>

{{Code|code=
import Draft
import Draft
rec = Draft.makeRectangle(5, 2)
Draft.
mvec = FreeCAD.Vector(4, 4, 0)
rec = Draft.makeRectangle(5,2)
Draft.move(rec, mvec)
mvec = FreeCAD.Vector(4,4,0)
Draft.move(rec,mvec)
Draft.move(box, mvec)
}}
Draft.move(box,mvec)
</syntaxhighlight>


[[#top|top]]
== Interface ==
The FreeCAD user interface is made with [http://en.wikipedia.org/wiki/Qt_%28framework%29 Qt], a powerful graphical interface system, responsible for drawing and handling all the controls, menus, toolbars, buttons around the 3D view. Qt provides a module, called PyQt, which allows python to access and modify Qt interfaces, such as FreeCAD. Let's try to fiddle with the Qt interface and produce a simple dialog:


<div class="mw-translate-fuzzy">
<syntaxhighlight>
== Interfaz ==
from PyQt4 import QtGui
QtGui.QMessageBox.information(None,"Apollo program","Houston, we have a problem")
</syntaxhighlight>


La interfaz de usuario de FreeCAD está creada con [http://es.wikipedia.org/wiki/Qt_(biblioteca) Qt], un poderoso sistema de interfaces gráficas, responsable de dibujar y manejar todos los controles, menús, barras de herramientas y botones en toda la vista 3D. Qt proporciona un módulo, denominado PyQt, que permite a Python acceder y modificar interfaces Qt, como la de FreeCAD. Vamos a tratar de lidiar con la interfaz de Qt y producir un letrero de diálogo simple:
See that the dialog that appears has the FreeCAD icon in its toolbar, meaning that Qt knows that the order has been issued from inside the FreeCAD application. We can therefore easily directly manipulate any part of the FreeCAD interface.
</div>


The FreeCAD user interface is made with [https://en.wikipedia.org/wiki/Qt_(software) Qt], a powerful graphical interface system, responsible for drawing and handling all the controls, menus, toolbars and buttons around the [[3D_view|3D view]]. Qt provides a module, [[PySide]], which allows Python to access and modify Qt interfaces such as FreeCAD's. Let's try to fiddle with the Qt interface and produce a simple dialog:
Qt is a very powerful interface system, that allows you to do very complex things, but also has a couple of very easy-to use tools such as the Qt Designer with which you can design dialogs graphically and then add them to the FreeCAD interface with a couple of lines of python.


{{Code|code=
[[PyQt|Read more about pyqt here...]]
from PySide import QtGui
QtGui.QMessageBox.information(None, "Apollo program", "Houston, we have a problem")
}}


<div class="mw-translate-fuzzy">
Observa que el letrero de diálogo que aparece tiene el icono de FreeCAD en su barra de herramientas, lo que significa que Qt sabe que el comando ha sido ejecutado desde la aplicación FreeCAD. Podemos por lo tanto manipular directa y sencillamente cualquier parte de la interfaz de FreeCAD.
</div>

<div class="mw-translate-fuzzy">
Qt es un sistema de interfaces muy potente, que te permite hacer cosas muy complejas, pero también dispone de varias herramientas de uso muy sencillo como el Qt Designer con el cual puedes diseñar letreros de diálogo graficamente y después añadirlos a la interfaz de FreeCAD con un par de líneas en Python.
</div>

<div class="mw-translate-fuzzy">
[[PySide/es|Lee más sobre PyQt aquí...]]
</div>

[[#top|top]]

<div class="mw-translate-fuzzy">
== Macros ==
== Macros ==
Now that you have a good understanding of the basics, where are we going to keep our python scripts, and how are we going to launch them easily from FreeCAD? There is an easy mechanism for that, called [[Macros]]. A macro is simply a python script, that can then be added to a toolbar and be launched from a simple mouse click. FreeCAD provides you with a simple text editor (Macro -> Macros -> Create) where you can write or paste scripts. Once it is done, the Tools -> Customize -> Macros allow you to define a button for it, that can be added to toolbars.


Ahora que tienes una buena comprensión de los conceptos básicos, a dónde vamos para mantener nuestros archivos de guión en Python, y cómo vamos a ejecutarlos fácilmente desde FreeCAD? Existe un sencillo mecanismo para ello, denominado [[Macros/es|Macros]]. Una macro es simplemente un archivo de guión en Python, que puede ser añadida a una barra de herramientas y lanzada desde un simple clic de ratón. FreeCAD proporciona un simple editor de textos (Macro -> Macros -> Crear) donde puedes escribir o pegar archivos de guión. Una vez esté terminado, Herramientas -> Personalizar -> Macros te permite definir un botón para ella, que se puede añadir a las barras de herramientas.
Now you are ready for more in-depth FreeCAD scripting. Head on to the [[Power users hub]]!
</div>


Now that you have a good understanding of the basics, where are we going to keep our Python scripts, and how are we going to launch them inside FreeCAD? There is an easy mechanism for that, called [[Macros|Macros]]. A macro is a Python script that can be added to a toolbar and launched via a mouse click. FreeCAD provides you with a simple text editor ({{MenuCommand|Macro → Macros... → Create}}) where you can write or paste scripts. Once the script is done, use {{MenuCommand|Tools → Customize... → Macros}} to define a button for it that can be added to toolbars.
{{docnav|Introduction to Python|FreeCAD Scripting Basics}}


<div class="mw-translate-fuzzy">
[[Category:Tutorials]]
Ahora estas listo para ver más en profundidad los archivos de guión en FreeCAD. Dirígete al [[Power users hub/es|Centro de usuarios avanzados]]!
</div>


[[#top|top]]

<div class="mw-translate-fuzzy">
{{docnav/es|Introduction to Python/es|FreeCAD Scripting Basics/es}}
</div>

{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]
{{clear}}
{{clear}}
<languages/>

Revision as of 22:16, 5 June 2020

Introduction

Python es un lenguaje de programación, muy simple de utilizar y muy rápido de aprender. Es de código libre, multi plataforma, y puede utilizarse para una gran variedad de cosas, desde la programación de archivos de guión simples a programas muy complejos. Pero uno de sus usos más extendidos es como lenguaje de archivos de guión, ya que es sencillo de embeber en otras aplicaciones. Así es exactamente como se utiliza dentro de FreeCAD. Desde la consola de Python, o desde tus archivos de guión personalizados, puedes pilotar FreeCAD, y hacer que ejecute acciones muy complejas para las cuales aún no exista herramientas en la interfaz gráfica de usuario.

Por ejemplo, desde un archivo de guión de Python, puedes:

  • Crear nuevos objetos.
  • Modificar los objetos existentes.
  • Modificar la representación 3D de dichos objetos
  • Modificar la interfaz de FreeCAD

También existen diversas formas de utilizar Python en FreeCAD:

  • Desde el Interprete de Python de FreeCAD, donde puedes dictar comandos como en una interfaz del tipo de línea de comandos
  • Desde Macros, que son una forma conveniente de añadir una herramienta que no exista a la interfaz de FreeCAD
  • Desde archivos de guión externos, que pueden utilizarse para programar cosas mucho más complejas. Como Entornos completos.

En este tutorial, trabajaremos en varios ejemplos simples para que puedas iniciarte, pero existe mucha más documentación sobre los archivos de guión de Python disponible en esta wiki. Si eres totalmente nuevo en Python y quieres comprender cómo funciona, también tenemos una básica Introducción a Python.

Before proceeding with Python scripting, go to Edit → Preferences → General → Output window and check two boxes:

  • Redirect internal Python output to report view.
  • Redirect internal Python errors to report view.

Then go to View → Panels and check:

  • Report view.

Escribiendo código en Python

Existen dos modos sencillos de escribir código de Python en FreeCAD: Desde la consola de Python (disponible en el menú Vista -> Vistas -> Consola de Python) o desde el editor de macros (Herramientas -> Macros). En la consola, escribes comandos de Python uno a uno, que son ejecutados al presionar Enter, mientras que las macros pueden contener archivos de guión más completos formados por varias líneas, que se ejecutan sólo cuando la macro es ejecutada.

There are two ways to write Python code in FreeCAD. In the Python console (select View → Panels → Python console from the menu) or in the Macro editor (select Macro → Macros... from the menu). In the console you write Python commands one by one, executing them by pressing Enter, while macros can contain more complex code made up of several lines, executed only when the macro is executed.

La consola de Python de FreeCAD

En este tutorial, serás capaz de utilizar ambos métodos, ya sea copiando y pegando cada línea una a una en la consola de Python y presionando Return después de cada línea, o copiando y pegando el código entero en una ventana de macro nueva.

top

Explorando FreeCAD

Vamos a empezar creando un nuevo documento vacío:

Let's start by creating a new empty document:

doc = FreeCAD.newDocument()

Si escribes esto en la consola de Python de FreeCAD, notaras que en cuanto escribas "FreeCAD.", una ventana aparece, permitiendo rápidamente autocompletar el resto de la línea. Aún mejor, cada entrada en la lista de autocompletar tiene una ayuda explicando lo que hace. Esto hace muy sencillo explorar las funcionalidades disponibles. Antes de seleccionar "newDocument", mira las otras opciones disponibles.

El mecanismo de autocompletar de la consola de Python de FreeCAD

Ahora nuestro nuevo documento se creará. Esto es similar a presionar el botón "Nuevo documento" en la barra de herramientas. En realidad, la mayoría de botones en FreeCAD no hacen nada más que ejecutar una línea o dos de código en Python. Aún mejor, puedes establecer una opción en Editar -> Preferencias -> General -> Macro para "mostrar los comandos de los archivos de guión en la consola de Python". Esto mostrará en la consola todo el código de Python ejecutado cuando presionas los botones. Muy útil para aprender como reproducir acciones en Python.

Volvamos ahora a nuestro documento. Vamos a ver que podemos hacer con él:

doc.

Explora las opciones disponibles. Normalmente los nombres que comienzan con una letra mayúscula son atributos, que contienen un valor, mientras que los nombres que empiezan con una letra minúscula son funciones (también llamados métodos), que hacen "algo". Los nombres que comienzan con un guión bajo están ahí normalmente para el funcionamiento interno del módulo, y no deberías preocuparte de ellos. Vamos a utilizar uno de los métodos para añadir un nuevo objeto a nuestro documento:

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

No pasa nada. Por qué? Es debido a que FreeCAD está pensado para realizar trabajos complejos. Un día, trabajará con cientos de objetos complejos, todos dependiendo unos de otros. Hacer un pequeño cambio en cualquier parte podría tener un gran impacto,necesitaras recalcular el documento completo, que puede llevar bastante tiempo... Por ese motivo, casi ningún comando actualiza la escena automáticamente. Debes hacerlo manualmente:

doc.recompute()

Ves? Ahora aparece nuestro cubo! Muchos de los botones que añaden objetos en FreeCAD en realidad hacen dos cosas: Añadir el objeto, y recalcular. Si activas la opción "mostrar los comandos de los archivos de guión en la consola de Python", prueba a añadir una esfera con el botón de la interfaz, verás las dos líneas de código de Python siendo ejecutadas una tras la otra.

Ahora vamos a explorar el contenido de nuestro cubo:

box.

Verás automáticamente varias cosas interesantes como:

box.Height

Esto mostrará la altura actual de nuestro cubo. Ahora vamos a intentar cambiarla:

box.Height = 5

Si seleccionas tu cubo con el ratón, verás que en el panel de propiedades, en la pestaña de "Datos", nuestra propiedad "Height" aparece. Todas las propiedades de un objeto de FreeCAD que aparecen aquí (y también en la pestaña "Vista", de la que hablaremos más adelante), son directamente accesibles también desde Python, por sus nombres, como hicimos con la propiedad "Height". Prueba cambiando las otras dimensiones del cubo.

top

Vectores y ubicaciones

Los vectores son un concepto muy fundamental en cualquier aplicación 3D. Son una lista de 3 números (X, Y y Z), describiendo un punto o posición en el espacio 3D. Un montón de cosas se pueden hacer con los vectores, como sumas, restas, proyecciones y mucho más. En FreeCAD los vectores funcionan así:

Vectors are a very fundamental concept in any 3D application. A vector is a list of 3 numbers (x, y and z), describing a point or position in 3D space. Many things can be done with vectors, such as additions, subtractions, projections and much more. In FreeCAD vectors work like this:

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

Otra característica de los objetos de FreeCAD es su ubicación. Cada objeto tiene atributos de Ubicación, que contienen la posición (Base) y orientación (Rotación) del objeto. Son sencillos de manejar, por ejemplo para mover nuestro objeto:

box.Placement
box.Placement.Base
box.Placement.Base = sumvec
 
otherpla = FreeCAD.Placement()
box.Placement = otherpla

Ahora deberías comprender varios conceptos importantes antes de continuar avanzando.

top

App y Gui

FreeCAD está creado desde el principio para ser una aplicación de línea de comando, sin su interfaz de usuario. Como resultado, prácticamente todo está separado entre una componente "geométrica" y una componente "visual". Cuando trabajas en modo línea de comando, la parte geométrica está presente, pero todas las partes visuales están sencillamente desactivadas. Prácticamente cualquier objeto en FreeCAD por lo tanto está formado por dos partes, un Object y un ViewObject.

FreeCAD has been designed so that it can also be used without its user interface, as a command-line application. Almost every object in FreeCAD therefore consists of two parts: an Object, its "geometry" component, and a ViewObject, its "visual" component. When you work in command-line mode, the geometry part is present, but the visual part is disabled.

Para ilustrar el concepto, mira nuestro objeto cubo, las propiedades geométricas del cubo, como sus dimensiones, posición, etc. son almacenadas en el Objeto, mientras que sus propiedades visuales, como su color, espesor de línea, etc. se almacenan en el viewobject. Esto se corresponde con las pestañas "Datos" y "Vista" en la ventana de propiedades. El viewobject de un objeto es accesible así:

vo = box.ViewObject

Ahora también puedes cambiar las propiedades de la pestaña "Vista":

vo.Transparency = 80
vo.hide()
vo.show()

Cuando inicias FreeCAD, la consola de Python carga 2 módulos base: FreeCAD y FreeCADGui (que también son accesibles por sus diminutivos App y Gui). Ellos contienen toda clase de funcionalidades genéricas para trabajar con documentos y sus objetos. Para ilustrar nuestro concepto, observa que ambos FreeCAD y FreeCADGui contienen un atributo ActiveDocument, el cual es el documento abierto actualmente. FreeCAD.ActiveDocument y FreeCADGui.ActiveDocument no son el mismo objeto. Son los dos componentes de un documento de FreeCAD, y contienen diferentes atributos y métodos. Por ejemplo, FreeCADGui.ActiveDocument contiene ActiveView, que es la vista 3D abierta actualmente.

top

Módulos

Seguramente te debes estar preguntando, Qué más que puedo hacer además del "Part::Box"? La aplicación base de FreeCAD es más o menos un contenedor vacío. Sin sus módulos, puede hacer poco más que crear nuevos documentos vacíos. La verdadera potencia de FreeCAD está en sus fieles módulos. Cada uno de ellos añade no sólo nuevos entornos a su interfaz, sino también nuevos comandos de Python y nuevos tipos de objetos. Como resultado, varios tipos de objetos diferentes o incluso totalmente incompatibles pueden coexistir en el mismo documento. Los módulos más importantes en FreeCAD, que veremos en este tutorial, son Piezas, Mallas, Croquizador o Boceto.

The true power of FreeCAD lies in its faithful modules. The FreeCAD base application is more or less an empty container. Without its modules it can do little more than create new, empty documents. Each module not only adds new workbenches to the interface, but also new Python commands and new object types. As a result several different, and even totally incompatible, object types can coexist in the same document. The most important modules in FreeCAD that we'll look at in this tutorial are: Part, Mesh, Sketcher and Draft.

Los módulos Croquizador y Boceto ambos utilizan el módulo Piezas para crear y manejar sus geometrías, las cuales son mientras que el módulo Mallas es totalmente independiente, y maneja sus propios objetos. Comentaremos algo más en adelante.

Puedes comprobar todos los tipos de objeto base disponibles para el documento actual así:

doc.supportedTypes()

Los diferentes módulos de FreeCAD, aunque añaden sus propios tipos de objeto a FreeCAD, no se cargan automáticamente en la consola de Python. Esto se hace para evitar un inicio demasiado lento. Los módulos son cargados sólo cuando los necesitas. Así, por ejemplo, para explorar que es lo que hay en el módulo de Piezas:

import Part
Part.

Pero ya hablaremos más adelante del módulo de Piezas.

top

Mallas

Las Mallas son un tipo de objeto 3D muy simple, utilizados por ejemplo por Sketchup, Blender o 3D studio Max. Están compuestos por 3 elementos: puntos (también denominados vértices), líneas (también denominadas aristas) y caras. En numerosas aplicaciones, FreeCAD incluida, las caras sólo pueden tener 3 vértices. Pero por supuesto nada impide que tengas una cara plana mayor formada por diversas caras triangulares coplanares.

Las mallas son simple, esto puede ser un mal asunto, pero para muchas aplicaciones como las citadas antes, se vuelve en una ventaja, porque son tan simples que puedes fácilmente tener millones de ellas en un único documento. Aunque en FreeCAD tienen poca utilidad, y se utilizan principalmente para que puedas importar objetos en formato de malla (.stl, .obj) de otras aplicaciones. También fue utilizado extensamente como el módulo de test principal en el primer mes de vida de FreeCAD.

Los objetos de malla y los objetos de FreeCAD son cosas diferentes. Puedes ver el objeto de FreeCAD como un contenedor para un objeto de malla (como, veremos más adelante, también para objetos de pieza). Así que para añadir un objeto de malla a FreeCAD, debemos primero crear un objeto de FreeCAD y un objeto de malla, después añadir el objeto de malla al objeto de FreeCAD:

import Mesh
mymesh = Mesh.createSphere()
mymesh.Facets
mymesh.Points
 
meshobj = doc.addObject("Mesh::Feature", "MyMesh")
meshobj.Mesh = mymesh
doc.recompute()

Este es un ejemplo estándar, que utiliza el método createSphere() para automáticamente crear una esfera, pero podrías perfectamente crear objetos de malla personalizados desde cero, definiendo sus vértices y caras.

Lee más sobre utilizar código con las mallas...

top

Piezas

El Módulo de Piezas es el módulo más potente de todo FreeCAD. Permite crear y manejar objetos BRep. Este tipo de objetos, a diferencia de las mallas, pueden tener una amplia variedad de componentes. Para resumir un poco, Brep significa Boundary Representation, que quiere decir que están definidos por sus superficies, que comprenden y definen un volumen interior. Dichas superficies pueden ser varias cosas, como caras planas o superficies NURBS complejas. También incorporan el concepto de volumen.

The Part Module is the most powerful module in the whole of FreeCAD. It allows you to create and manipulate BRep objects. BRep stands for "Boundary Representation". A BRep object is defined by surfaces that enclose and define an inner volume. Unlike meshes, BRep objects can have a wide variety of components from planar faces to very complex NURBS surfaces.

El módulo de Piezas está basado en la potente tecnología de la librería OpenCasCade, que permite que un amplio rango de operaciones complejas sean aplicadas de forma sencilla en dichos objetos, como las operaciones booleanas, redondeos, barridos...

El módulo de Piezas funciona del mismo modo que el módulo de mallas: Se crea un objeto de FreeCAD, un objeto de Pieza, luego añadir el objeto de pieza al objeto de FreeCAD:

import Part
myshape = Part.makeSphere(10)
myshape.Volume
myshape.Area

shapeobj = doc.addObject("Part::Feature", "MyShape")
shapeobj.Shape = myshape
doc.recompute()

El módulo de Piezas (como el módulo de mallas) también tiene un atajo que automáticamente crea un objeto de FreeCAD y le añade una forma, así puedes evitar las tres líneas anteriores:

Part.show(myshape)

Explorando el contenido de myshape, observarás que están disponibles varios subcomponentes interesantes como caras, aristas, vértices, sólidos o superficies, y un amplio rango de operaciones geométricas como cortes (sustracciones), común (intersecciones) o fusiones (unión). La página de Archivos de guión de topología de datos lo explica todo detalladamente.

top

Boceto

FreeCAD proporciona varios módulos, como el Croquizador o Boceto, que también crean objetos de piezas, pero le añade parámetros, o incluso un nuevo modo de manejar la geometría de las piezas. Nuestro cubo de ejemplo de arriba, es un perfecto ejemplo de objeto paramétrico. Todo lo que necesitas, para definir el cubo, es especificar un conjunto de parámetros, como las altura, ancho y longitud. Basados en los cuales, el objeto calculará automáticamente su forma de Pieza. FreeCAD te permite crear dichos objetos en Python.

FreeCAD features many more modules, such as Sketcher and Draft, that also create Part objects. These modules add additional parameters to the objects created, or even implement a whole new way to handle the Part geometry in them. Our box example above is a perfect example of a parametric object. All you need to define the box is to specify the parameters height, width and length. Based on those, the object will automatically calculate its Part shape. FreeCAD allows you to create such objects in Python.

El Módulo de Boceto añade diversos tipos de objetos 2D paramétricos (que son todos objetos de Piezas) como líneas y circunferencias, y también proporciona algunas funciones genéricas que funcionan no sólo en objetos creados en el módulo de Boceto, sino en cualquier objeto de Pieza. Para explorar lo que está disponible, simplemente haz lo siguiente:

import Draft
rec = Draft.makeRectangle(5, 2)
mvec = FreeCAD.Vector(4, 4, 0)
Draft.move(rec, mvec)
Draft.move(box, mvec)

top

Interfaz

La interfaz de usuario de FreeCAD está creada con Qt, un poderoso sistema de interfaces gráficas, responsable de dibujar y manejar todos los controles, menús, barras de herramientas y botones en toda la vista 3D. Qt proporciona un módulo, denominado PyQt, que permite a Python acceder y modificar interfaces Qt, como la de FreeCAD. Vamos a tratar de lidiar con la interfaz de Qt y producir un letrero de diálogo simple:

The FreeCAD user interface is made with Qt, a powerful graphical interface system, responsible for drawing and handling all the controls, menus, toolbars and buttons around the 3D view. Qt provides a module, PySide, which allows Python to access and modify Qt interfaces such as FreeCAD's. Let's try to fiddle with the Qt interface and produce a simple dialog:

from PySide import QtGui
QtGui.QMessageBox.information(None, "Apollo program", "Houston, we have a problem")

Observa que el letrero de diálogo que aparece tiene el icono de FreeCAD en su barra de herramientas, lo que significa que Qt sabe que el comando ha sido ejecutado desde la aplicación FreeCAD. Podemos por lo tanto manipular directa y sencillamente cualquier parte de la interfaz de FreeCAD.

Qt es un sistema de interfaces muy potente, que te permite hacer cosas muy complejas, pero también dispone de varias herramientas de uso muy sencillo como el Qt Designer con el cual puedes diseñar letreros de diálogo graficamente y después añadirlos a la interfaz de FreeCAD con un par de líneas en Python.

top

Macros

Ahora que tienes una buena comprensión de los conceptos básicos, a dónde vamos para mantener nuestros archivos de guión en Python, y cómo vamos a ejecutarlos fácilmente desde FreeCAD? Existe un sencillo mecanismo para ello, denominado Macros. Una macro es simplemente un archivo de guión en Python, que puede ser añadida a una barra de herramientas y lanzada desde un simple clic de ratón. FreeCAD proporciona un simple editor de textos (Macro -> Macros -> Crear) donde puedes escribir o pegar archivos de guión. Una vez esté terminado, Herramientas -> Personalizar -> Macros te permite definir un botón para ella, que se puede añadir a las barras de herramientas.

Now that you have a good understanding of the basics, where are we going to keep our Python scripts, and how are we going to launch them inside FreeCAD? There is an easy mechanism for that, called Macros. A macro is a Python script that can be added to a toolbar and launched via a mouse click. FreeCAD provides you with a simple text editor (Macro → Macros... → Create) where you can write or paste scripts. Once the script is done, use Tools → Customize... → Macros to define a button for it that can be added to toolbars.

Ahora estas listo para ver más en profundidad los archivos de guión en FreeCAD. Dirígete al Centro de usuarios avanzados!

top

Introduction to Python/es
FreeCAD Scripting Basics/es