FreeCAD Scripting Basics/es: Difference between revisions

From FreeCAD Documentation
(Created page with "Para crear un nuevo documento, teclea:")
(Updating to match new version of source page)
 
(88 intermediate revisions by 4 users not shown)
Line 1: Line 1:
<languages/>
== Archivos de guión de Python en FreeCAD ==


{{Docnav
FreeCAD está construido desde cero para que sea totalmente controlado por archivos de guión (scripts) de Python. Casi todas las partes de FreeCAD como la interfaz, el contenido de la escena, e incluso la representación de ese contenido en las vistas 3D, son accesibles desde el intérprete de Python incorporado, o desde sus propios archivos de guión. Como resultado, FreeCAD es, probablemente, una de las aplicaciones de diseño para ingeniería más personalizables de las disponibles en la actualidad.
|[[Python_scripting_tutorial|Python scripting tutorial]]
|[[Part_scripting|Part scripting]]
}}


{{TOCright}}
En su estado actual, sin embargo, FreeCAD tiene muy pocos comandos "nativos" para interactuar con los objetos 3D. Sobre todo porque se encuentra todavía en una fase temprana de desarrollo, pero también porque la filosofía que hay detrás es más la de proporcionar una plataforma para el desarrollo CAD que una aplicación para un uso específico. Pero la facilidad de usar archivos de guión de Python dentro de FreeCAD probablemente ayudará a que pronto veamos funcionalidades nuevas que desarrollen los "usuarios avanzados", o, como de costumbre, los usuarios que conocen un poco de programación en Python. Python es uno de los lenguajes interpretados más populares, y debido a que es generalmente considerado como sencillo de aprender, tu también puedes estar proto creando tus propias macros de "usuario avanzado" sobre FreeCAD.


==Guionización Python en FreeCAD ==
Si no estás familiarizado con Python, te recomendamos buscar tutoriales en Internet, y echar un rápido vistazo a su estructura. Python es un lenguaje muy fácil de aprender, sobre todo porque se puede ejecutar dentro de un intérprete, donde tanto comandos simples como programas completos pueden ejecutarse sobre la marcha, sin necesidad de compilar nada. FreeCAD ha incorporado un intérprete de Python. Si no ves la ventana denominada 'Consola de Python' como se muestra más abajo, puedes activarla en el menú Vista -> Vistas -> Consola de Python para mostrar el interprete.


FreeCAD está construido desde cero para ser totalmente controlado por guiónes de Python. Casi todas las partes de FreeCAD, como la interfaz, el contenido de la escena, e incluso la representación de este contenido en las vistas 3D, son accesibles desde el intérprete de Python incorporado o desde tus propios guiónes. Como resultado, FreeCAD es probablemente una de las aplicaciones de ingeniería más profundamente personalizables disponibles hoy en día.
=== El intérprete ===


Si no estás familiarizado con Python, te recomendamos que busques tutoriales en Internet y eches un vistazo rápido a su estructura. Python es un lenguaje muy fácil de aprender, especialmente porque puede ser ejecutado dentro de un intérprete, donde comandos simples, hasta programas completos, pueden ser ejecutados sobre la marcha sin necesidad de compilar nada. FreeCAD tiene un intérprete de Python incorporado. Si no ves la ventana etiquetada como '''Consola de Python''' como se muestra a continuación, puedes activarla en el {{MenuCommand|Ver → Paneles → Consola Python}}.
Desde el intérprete puedes acceder a todos los módulos de Python instalados en el sistema, así como a los módulos de FreeCAD incorporados, y a todos los módulos adicionales de FreeCAD que puedas instalar más tarde. La imagen siguiente muestra el intérprete de Python:

===El intérprete===

Desde el intérprete, puedes acceder a todos los módulos de Python instalados en el sistema, así como a los módulos incorporados de FreeCAD, y a todos los módulos adicionales de FreeCAD que hayas instalado posteriormente. La captura de pantalla de abajo muestra el intérprete de Python:


[[Image:screenshot_pythoninterpreter.jpg|The FreeCAD Python interpreter]]
[[Image:screenshot_pythoninterpreter.jpg|The FreeCAD Python interpreter]]


También, puedes ejecutar código Python y navegar a través de las clases y funciones disponibles. FreeCAD proporciona un navegador de clases muy útil para la exploración de su nuevo mundo FreeCAD. Cuando se escribe el nombre de una clase conocida seguido de un punto (.) (significando que quieres añadir algo de esa clase), se abre una ventana del navegador de clases, donde se puede navegar entre las subclases y métodos disponibles. Cuando se selecciona algo, se mostrará un texto de ayuda asociado (si existe):
Desde el intérprete, puedes ejecutar código Python y navegar a través de las clases y funciones disponibles. FreeCAD proporciona un navegador de clases muy práctico para explorar el mundo de FreeCAD: Cuando escribes el nombre de una clase conocida seguido de un punto (lo que significa que quieres añadir algo de esa clase), se abre una ventana del navegador de clases, donde puedes navegar entre las subclases y métodos disponibles. Cuando seleccionas algo, se muestra un texto de ayuda asociado (si existe):


[[Image:screenshot_classbrowser.jpg|The FreeCAD class browser]]
[[Image:screenshot_classbrowser.jpg|The FreeCAD class browser]]


Así que, comienza por esto escribiendo '''App. ''' o '''Gui. ''' y verás qué pasa. Otra forma más genérica de exploración del contenido de los módulos y las clases de Python es usar el comando print dir(). Por ejemplo, escribiendo '''print dir()''' listará todos los módulos cargados en FreeCAD. '''print Dir(App)''' te mostrará todo el interior del módulo App, etc.
Por lo tanto, comience aquí escribiendo {{incode|App.}} o {{incode|Gui.}} y vea lo que sucede. Otra forma más genérica de Python para explorar el contenido de los módulos y clases es utilizar el comando {{incode|print(dir())}}. Por ejemplo, escribiendo {{incode|print(dir())}} listará todos los módulos cargados actualmente en FreeCAD. {{incode|print(dir(App))}} te mostrará todo lo que hay dentro del módulo App, etc.


Otra característica útil del intérprete es la posibilidad de volver atrás en el historial de comandos y recuperar una línea de código que ya has escrito antes. Para navegar en el historial de comandos, sólo tienes que utilizar CTRL + flecha arriba o CTRL + flecha abajo.
Otra característica útil del intérprete es la posibilidad de retroceder en el historial de comandos y recuperar una línea de código que ya hayas escrito anteriormente. Para navegar por el historial de comandos, basta con utilizar {{KEY|Flecha arriba}} o {{KEY|Flecha abajo}}.


Al hacer clic derecho en la ventana del intérprete también tienes otras opciones, tales como copiar todo el historial (útil para experimentar con algo, y luego hacer un archivo de guión con todo ello), o insertar el nombre de un archivo con su ruta completa.
Al hacer clic derecho en la ventana del intérprete también tienes otras opciones, tales como copiar todo el historial (útil para experimentar con algo, y luego hacer un archivo de guión con todo ello), o insertar el nombre de un archivo con su ruta completa.
{{Top}}
===Ayuda de Python===


En el menú de FreeCAD {{MenuCommand|Ayuda}}, encontrarás una entrada etiquetada como {{MenuCommand|Documentación automática de los módulos de Python}}, que abrirá una ventana del navegador que contiene una documentación completa, generada en tiempo real, de todos los módulos de Python disponibles para el intérprete de FreeCAD, incluyendo los módulos incorporados de Python y FreeCAD, los módulos instalados en el sistema y los módulos adicionales de FreeCAD. La documentación disponible allí depende del esfuerzo que cada desarrollador de módulos ponga en documentar su código, pero los módulos de Python tienen la reputación de estar bastante bien documentados. Tu ventana de FreeCAD debe permanecer abierta para que este sistema de documentación funcione.
=== Ayuda de Python ===
La entrada {{MenuCommand|Documentación Guionización en Python}} te dará un enlace rápido a la sección wiki [[Power_users_hub/es|Centro usuarios avanzados]].
{{Top}}
==Módulos incorporados==


Dado que FreeCAD está diseñado para que también pueda ejecutarse sin una interfaz gráfica de usuario (GUI), casi toda su funcionalidad está separada en dos grupos: La funcionalidad del núcleo, llamada {{incode|App}}, y la funcionalidad de la GUI, llamada {{incode|Gui}}. A estos dos módulos también se puede acceder desde scripts fuera del intérprete, con los nombres {{incode|FreeCAD}} y {{incode|FreeCADGui}} respectivamente.
En el menú ''Ayuda'' de FreeCAD, encontrarás una entrada llamada "Módulos de Python", que abrirá una ventana que contiene una documentación completa, generada en tiempo real, de todos los módulos de Python a disposición del intérprete de FreeCAD, incluyendo Python y los módulos propios de FreeCAD, los módulos instalados por el sistema, y los módulos de FreeCAD adicionales. La documentación disponible depende del esfuerzo que cada desarrollador de los módulos puso en documentar su código pero, en general, los módulos de Python tienen la reputación de estar bastante bien documentados. Tu ventana de FreeCAD debe permanecer abierta para que este sistema de documentación funcione.


* En el módulo {{incode|App}} encontrarás todo lo relacionado con la propia aplicación, como los métodos para abrir o cerrar archivos, y con los documentos, como establecer el documento activo o listar su contenido.
== Módulos incorporados (Built-in) ==


* En el módulo {{incode|Gui}}, encontrarás herramientas para acceder y gestionar los elementos de la Gui, como los ambientes de trabajo y sus barras de herramientas, y, lo que es más interesante, la representación gráfica de todo el contenido de FreeCAD.
Como FreeCAD está diseñado para poder ser ejecutado sin interfaz gráfica de usuario, casi toda su funcionalidad se separa en dos grupos: las funciones principales, llamado App, y la funcionalidad de la interfaz gráfica de usuario, llamado Gui. Así, nuestros dos principales módulos incorporados en FreeCAD se llaman App y Gui. Estos dos módulos también son accesibles desde fuera de los archivos de guiones de comandos del intérprete, con los nombres respectivos de FreeCAD y FreeCADGui.


Listar el contenido de estos módulos no es muy útil porque crecen bastante rápido a medida que FreeCAD se desarrolla. Pero las dos herramientas de navegación proporcionadas (el navegador de clases y la ayuda de Python) deberían darte una documentación completa y actualizada en cualquier momento.
* En el módulo '''App''', encontrarás todo lo relacionado con la aplicación en sí, como los métodos para abrir o cerrar archivos, y lo relacionado con los documentos, como los ajustes del documento activo o listar su contenido.
{{Top}}
===Los objetos App y Gui===


Como ya se ha mencionado, en FreeCAD todo está separado en núcleo y representación. Esto incluye los objetos 3D. Puedes acceder a las propiedades que definen los objetos (llamados características en FreeCAD) a través del módulo {{incode|App}}, y cambiar la forma en que se representan en la pantalla a través del módulo {{incode|Gui}}. Por ejemplo, un cubo tiene propiedades que lo definen (como anchura, longitud, altura) que se almacenan en un objeto {{incode|App}}, y propiedades de representación (como color de las caras, modo de dibujo) que se almacenan en un objeto {{incode|Gui}} correspondiente.
* En el módulo '''Gui''', encontrarás herramientas para la gestión de la interfaz gráfica de usuario y el acceso a sus elementos, como los entornos (workbench) y sus barras de herramientas y, más interesante, la representación gráfica de todo el contenido de FreeCAD.


Esta forma de hacer las cosas permite una amplia gama de usos, como los algoritmos que sólo funcionan en la parte definitoria de características, sin la necesidad de ocuparse de ningun aspecto visual, o incluso redirigir el contenido del documento con la aplicación no-gráfica, como listas, hojas de cálculo o análisis de elementos.
Listar los contenidos de todos esos módulos es una tarea poco "productiva" ya que crecen muy rápido a lo largo del desarrollo de FreeCAD. Pero las dos herramientas de navegación (el navegador de clases y la ayuda de Python) te debería dar, en cualquier momento, una documentación actualizada y completa de estos módulos.


Para cada objeto {{incode|App}} en su documento, existe un objeto {{incode|Gui}} correspondiente. De hecho, el propio documento tiene tanto un objeto {{incode|App}} como un objeto {{incode|Gui}}. Esto, por supuesto, sólo se aplica cuando se ejecuta FreeCAD con su interfaz completa. En la versión de línea de comandos no existe la interfaz gráfica, por lo que sólo están disponibles los objetos {{incode|App}}. Ten en cuenta que la parte {{incode|Gui}} de los objetos se vuelve a generar cada vez que un objeto {{incode|App}} se marca como 'a recalcular' (por ejemplo cuando uno de sus parámetros cambia), por lo que cualquier cambio realizado directamente en el objeto {{incode|Gui}} puede perderse.
===Los objetos App y los objetos GUI===


Para acceder a la parte {{incode|App}} de algo, se teclea:
Como hemos dicho, en FreeCAD, todo esta repartido entre el núcleo y la representación. Esto incluye también los objetos en 3D. Puedes acceder a la definición de propiedades de los objetos (llamadas características de FreeCAD) a través del módulo de la aplicación, y cambiar la forma en que están representados en la pantalla a través del módulo GUI. Por ejemplo, un cubo tiene propiedades que lo definen, como anchura, longitud, altura, que se almacenan en un ''objeto App'', y las propiedades de la representación, como el color de las caras, modo de dibujo, que se almacenan en su correspondiente ''objeto GUI''.


{{Code|code=
Esta forma de hacer las cosas permite una amplia gama de usos, como los algoritmos que sólo funcionan en la parte definitoria de características, sin la necesidad de ocuparse de ningun aspecto visual, o incluso redirigir el contenido del documento con la aplicación no-gráfica, como listas, hojas de cálculo o análisis de elementos.
myObject = App.ActiveDocument.getObject("ObjectName")
}}


donde {{incode|"ObjectName"}} es el nombre de su objeto. También puede teclea:
Por cada objeto App de tu documento, existe su correspondiente objeto GUI. El documento en sí mismo, en realidad, también tiene objetos App y GUI. Esto, por supuesto, sólo es válido cuando se ejecuta FreeCAD con su interfaz completo. En la versión de línea de comandos, no existe interfaz gráfica de usuario, por lo que sólo habrá objetos App. Ten en cuenta que la parte de interfaz gráfica de usuario de los objetos se genera nuevamente cada vez que un objeto App se marca como "que se vuelven a calcular" (por ejemplo, cuando uno de sus parámetros ha cambiado), por lo que los cambios que podría haber hecho al objeto Gui directamente podrían perderse.


{{Code|code=
para acceder a la parte App de algo, escribe:
myObject = App.ActiveDocument.ObjectName
<syntaxhighlight>
}}
myObject = App.ActiveDocument.getObject("ObjectName")
</syntaxhighlight>
donde "ObjectName" es el nombre de tu objeto. Tambien puedes poner:
<syntaxhighlight>
myObject = App.ActiveDocument.ObjectName
</syntaxhighlight>
para acceder la la parte GUI del mismo objeto, escribe:
<syntaxhighlight>
myViewObject = Gui.ActiveDocument.getObject("ObjectName")
</syntaxhighlight>
donde "ObjectName" es el nombre de tu objeto. También puedes escribir:
<syntaxhighlight>
myViewObject = App.ActiveDocument.ObjectName.ViewObject
</syntaxhighlight>
Si no tenemos GUI (por ejemplo en el modo de línea de comandos), la última línea no devolverá nada.


Para acceder a la parte {{incode|Gui}} del mismo objeto, se teclea:
=== Los objetos de documento ===


{{Code|code=
En FreeCAD todo tu trabajo reside en el interior de los documentos. Un documento contiene la geometría y se pueden guardar en un archivo. Varios documentos se pueden abrir al mismo tiempo. El documento, al igual que la geometría contenidos en el interior, tiene objetos App y Gui. El objeto App contiene las definiciones de geometría real, mientras que el objeto Gui contiene los puntos de vista diferentes de tu documento. Puedes abrir varias ventanas, cada una mostrando tu trabajo con un factor de zoom diferente o un determinado punto de vista. Estas vistas forman parte del objeto Gui de tu documento.
myViewObject = Gui.ActiveDocument.getObject("ObjectName")
}}

donde {{incode|"ObjectName"}} es el nombre de su objeto. También puede teclea:

{{Code|code=
myViewObject = App.ActiveDocument.ObjectName.ViewObject
}}

Si está en modo de línea de comandos y no tiene GUI, la última línea devolverá {{incode|None}}.
{{Top}}
===Los objetos Documento===

En FreeCAD todo tu trabajo reside dentro de los documentos. Un documento contiene tu geometría y puede ser guardado en un archivo. Se pueden abrir varios documentos al mismo tiempo. El documento, al igual que la geometría que contiene, tiene objetos {{incode|App}} y {{incode|Gui}}. El objeto {{incode|App}} contiene las definiciones reales de la geometría, mientras que el objeto {{incode|Gui}} contiene las diferentes vistas del documento. Puedes abrir varias ventanas, cada una de ellas viendo tu trabajo con un factor de zoom diferente o desde una dirección diferente. Todas estas vistas forman parte del objeto {{incode|Gui}} de tu documento.

Para acceder a la parte {{incode|App}} del documento actualmente abierto (activo), se escribe:

{{Code|code=
myDocument = App.ActiveDocument
}}


Para acceder a la parte App del documento abierto actualmente (activo), teclea:
<syntaxhighlight>
myDocument = App.ActiveDocument
</syntaxhighlight>
Para crear un nuevo documento, teclea:
Para crear un nuevo documento, teclea:
<syntaxhighlight>
myDocument = App.newDocument("Document Name")
</syntaxhighlight>
To access the Gui part the currently open (active) document, you type:
<syntaxhighlight>
myGuiDocument = Gui.ActiveDocument
</syntaxhighlight>
To access the current view, you type:
<syntaxhighlight>
myView = Gui.ActiveDocument.ActiveView
</syntaxhighlight>
== Using additional modules ==
The FreeCAD and FreeCADGui modules are solely responsibles for creating and managing objects in the FreeCAD document. They don't actually do anything such as creating or modifying geometry. That is because that geometry can be of several types, and so it is managed by additional modules, each responsible for managing a certain geometry type. For example, the [[Part Module]] uses the OpenCascade kernel, and therefore is able to create and manipulate [http://en.wikipedia.org/wiki/Boundary_representation B-rep] type geometry, which is what OpenCascade is built for. The [[Mesh Module]] is able to build and modify mesh objects. That way, FreeCAD is able to handle a wide variety of object types, that can all coexist in the same document, and new types could be added easily in the future.


{{Code|code=
=== Creating objects ===
myDocument = App.newDocument("Document Name")
Each module has its own way to treat its geometry, but one thing they usually all can do is create objects in the document. But the FreeCAD document is also aware of the available object types provided by the modules:
}}
<syntaxhighlight>
FreeCAD.ActiveDocument.supportedTypes()
</syntaxhighlight>
will list you all the possible objects you can create. For example, let's create a mesh (treated by the mesh module) and a part (treated by the part module):
<syntaxhighlight>
myMesh = FreeCAD.ActiveDocument.addObject("Mesh::Feature","myMeshName")
myPart = FreeCAD.ActiveDocument.addObject("Part::Feature","myPartName")
</syntaxhighlight>
The first argument is the object type, the second the name of the object. Our two objects look almost the same: They don't contain any geometry yet, and most of their properties are the same when you inspect them with dir(myMesh) and dir(myPart). Except for one, myMesh has a "Mesh" property and "Part" has a "Shape" property. That is where the Mesh and Part data are stored. For example, let's create a Part cube and store it in our myPart object:
<syntaxhighlight>
import Part
cube = Part.makeBox(2,2,2)
myPart.Shape = cube
</syntaxhighlight>
You could try storing the cube inside the Mesh property of the myMesh object, it will return an error complaining of the wrong type. That is because those properties are made to store only a certain type. In the myMesh's Mesh property, you can only save stuff created with the Mesh module. Note that most modules also have a shortcut to add their geometry to the document:
<syntaxhighlight>
import Part
cube = Part.makeBox(2,2,2)
Part.show(cube)
</syntaxhighlight>
=== Modifying objects ===
Modifying an object is done the same way:
<syntaxhighlight>
import Part
cube = Part.makeBox(2,2,2)
myPart.Shape = cube
</syntaxhighlight>
Now let's change the shape by a bigger one:
<syntaxhighlight>
biggercube = Part.makeBox(5,5,5)
myPart.Shape = biggercube
</syntaxhighlight>
=== Querying objects ===
You can always look at the type of an object like this:
<syntaxhighlight>
myObj = FreeCAD.ActiveDocument.getObject("myObjectName")
print myObj.Type
</syntaxhighlight>
or know if an object is derived from one of the basic ones (Part Feature, Mesh Feature, etc):
<syntaxhighlight>
print myObj.isDerivedFrom("Part::Feature")
</syntaxhighlight>
Now you can really start playing with FreeCAD! To look at what you can do with the [[Part Module]], read the [[Topological data scripting|Part scripting]] page, or the [[Mesh Scripting]] page for working with the [[Mesh Module]]. Note that, although the Part and Mesh modules are the most complete and widely used, other modules such as the [[Draft Module]] also have [[Draft API|scripting]] APIs that can be useful to you. For a complete list of each modules and their available tools, visit the [[:Category:API]] section.


Para acceder a la parte {{incode|Gui}} del documento abierto actualmente (active), teclea:
{{docnav|Python scripting tutorial|Mesh Scripting}}


{{Code|code=
[[Category:Poweruser Documentation]]
myGuiDocument = Gui.ActiveDocument
}}


Para acceder a la vista actual, teclea:
{{clear}}

<languages/>
{{Code|code=
myView = Gui.ActiveDocument.ActiveView
}}
{{Top}}
==Utilizando módulos adicionales==

Los módulos {{incode|FreeCAD}} y {{incode|FreeCADGui}} sólo se encargan de crear y gestionar objetos en el documento de FreeCAD. En realidad no hacen nada más como crear o modificar la geometría. Esto se debe a que la geometría puede ser de varios tipos, y por lo tanto requiere módulos adicionales, cada uno responsable de la gestión de un determinado tipo de geometría. Por ejemplo, el [[Part_Workbench|Part Workbench]], usando el kernel de OpenCascade, es capaz de crear y manipular geometría del tipo [http://en.wikipedia.org/wiki/Boundary_representation BRep]. Mientras que el [[Mesh_Workbench|Mesh Workbench]] es capaz de construir y modificar objetos de malla. De esta manera FreeCAD es capaz de manejar una amplia variedad de tipos de objetos, que pueden coexistir en el mismo documento, y nuevos tipos pueden ser fácilmente añadidos en el futuro.
{{Top}}
===Creación objetos===

Cada módulo tiene su propia manera de tratar la geometría, pero una cosa que normalmente todos pueden hacer es crear objetos en el documento. Pero el documento de FreeCAD también es consciente de los tipos de objetos disponibles proporcionados por los módulos:

{{Code|code=
FreeCAD.ActiveDocument.supportedTypes()
}}

listará todos los objetos posibles que puedes crear. Por ejemplo, vamos a crear una malla (manejada por el módulo {{incode|Mesh}}) y una pieza (manejada por el módulo {{incode|Part}}):

{{Code|code=
myMesh = FreeCAD.ActiveDocument.addObject("Mesh::Feature", "myMeshName")
myPart = FreeCAD.ActiveDocument.addObject("Part::Feature", "myPartName")
}}

El primer argumento es el tipo de objeto, el segundo el nombre del objeto. Nuestros dos objetos parecen casi iguales: no contienen ninguna geometría todavía, y la mayoría de sus propiedades son las mismas cuando los inspeccionas con {{incode|dir(myMesh)}} y {{incode|dir(myPart)}}. Excepto por una cosa, {{incode|myMesh}} tiene una propiedad {{incode|Mesh}} y {{incode|myPart}} tiene una propiedad {{incode|Shape}}. Ahí es donde se almacenan los datos de la Malla y de la Pieza. Por ejemplo, vamos a crear un cubo {{incode|Part}} y almacenarlo en nuestro objeto {{incode|myPart}}:

{{Code|code=
import Part
cube = Part.makeBox(2, 2, 2)
myPart.Shape = cube
}}

Podrías intentar almacenar el cubo dentro de la propiedad {{incode|Mesh}} del objeto {{incode|myMesh}}, pero devolverá un error. Esto se debe a que cada propiedad está hecha para almacenar sólo un tipo determinado. En una propiedad {{incode|Mesh}}, sólo puedes guardar cosas creadas con el módulo {{incode|Mesh}}. Tenga en cuenta que la mayoría de los módulos también tienen un acceso directo para añadir su geometría al documento:

{{Code|code=
import Part
cube = Part.makeBox(2, 2, 2)
Part.show(cube)
}}
{{Top}}
===Modificando objetos===

Modificación de un objeto se hace de la misma manera:

{{Code|code=
import Part
cube = Part.makeBox(2, 2, 2)
myPart.Shape = cube
}}

Ahora vamos a cambiar la forma por una mayor:

{{Code|code=
biggercube = Part.makeBox(5, 5, 5)
myPart.Shape = biggercube
}}
{{Top}}
===Consultar objetos===

Siempre se puede mirar el tipo de un objeto así:

{{Code|code=
myObj = FreeCAD.ActiveDocument.getObject("myObjectName")
print(myObj.TypeId)
}}

o comprobar si un objeto deriva de uno de los básicos (Característica Pieza, Característica Malla, etc):

{{Code|code=
print(myObj.isDerivedFrom("Part::Feature"))
}}

¡Ahora puedes empezar a jugar de verdad con FreeCAD! Para una lista completa de los módulos disponibles y sus herramientas, visite la sección [[:Category:API/es|Categoría:API]].
{{Top}}

<div class="mw-translate-fuzzy">
{{docnav/es|Python scripting tutorial/es|Mesh Scripting/es}}
</div>

{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]

Latest revision as of 13:46, 22 October 2021

Guionización Python en FreeCAD

FreeCAD está construido desde cero para ser totalmente controlado por guiónes de Python. Casi todas las partes de FreeCAD, como la interfaz, el contenido de la escena, e incluso la representación de este contenido en las vistas 3D, son accesibles desde el intérprete de Python incorporado o desde tus propios guiónes. Como resultado, FreeCAD es probablemente una de las aplicaciones de ingeniería más profundamente personalizables disponibles hoy en día.

Si no estás familiarizado con Python, te recomendamos que busques tutoriales en Internet y eches un vistazo rápido a su estructura. Python es un lenguaje muy fácil de aprender, especialmente porque puede ser ejecutado dentro de un intérprete, donde comandos simples, hasta programas completos, pueden ser ejecutados sobre la marcha sin necesidad de compilar nada. FreeCAD tiene un intérprete de Python incorporado. Si no ves la ventana etiquetada como Consola de Python como se muestra a continuación, puedes activarla en el Ver → Paneles → Consola Python.

El intérprete

Desde el intérprete, puedes acceder a todos los módulos de Python instalados en el sistema, así como a los módulos incorporados de FreeCAD, y a todos los módulos adicionales de FreeCAD que hayas instalado posteriormente. La captura de pantalla de abajo muestra el intérprete de Python:

The FreeCAD Python interpreter

Desde el intérprete, puedes ejecutar código Python y navegar a través de las clases y funciones disponibles. FreeCAD proporciona un navegador de clases muy práctico para explorar el mundo de FreeCAD: Cuando escribes el nombre de una clase conocida seguido de un punto (lo que significa que quieres añadir algo de esa clase), se abre una ventana del navegador de clases, donde puedes navegar entre las subclases y métodos disponibles. Cuando seleccionas algo, se muestra un texto de ayuda asociado (si existe):

The FreeCAD class browser

Por lo tanto, comience aquí escribiendo App. o Gui. y vea lo que sucede. Otra forma más genérica de Python para explorar el contenido de los módulos y clases es utilizar el comando print(dir()). Por ejemplo, escribiendo print(dir()) listará todos los módulos cargados actualmente en FreeCAD. print(dir(App)) te mostrará todo lo que hay dentro del módulo App, etc.

Otra característica útil del intérprete es la posibilidad de retroceder en el historial de comandos y recuperar una línea de código que ya hayas escrito anteriormente. Para navegar por el historial de comandos, basta con utilizar Flecha arriba o Flecha abajo.

Al hacer clic derecho en la ventana del intérprete también tienes otras opciones, tales como copiar todo el historial (útil para experimentar con algo, y luego hacer un archivo de guión con todo ello), o insertar el nombre de un archivo con su ruta completa.

Inicio

Ayuda de Python

En el menú de FreeCAD Ayuda, encontrarás una entrada etiquetada como Documentación automática de los módulos de Python, que abrirá una ventana del navegador que contiene una documentación completa, generada en tiempo real, de todos los módulos de Python disponibles para el intérprete de FreeCAD, incluyendo los módulos incorporados de Python y FreeCAD, los módulos instalados en el sistema y los módulos adicionales de FreeCAD. La documentación disponible allí depende del esfuerzo que cada desarrollador de módulos ponga en documentar su código, pero los módulos de Python tienen la reputación de estar bastante bien documentados. Tu ventana de FreeCAD debe permanecer abierta para que este sistema de documentación funcione. La entrada Documentación Guionización en Python te dará un enlace rápido a la sección wiki Centro usuarios avanzados.

Inicio

Módulos incorporados

Dado que FreeCAD está diseñado para que también pueda ejecutarse sin una interfaz gráfica de usuario (GUI), casi toda su funcionalidad está separada en dos grupos: La funcionalidad del núcleo, llamada App, y la funcionalidad de la GUI, llamada Gui. A estos dos módulos también se puede acceder desde scripts fuera del intérprete, con los nombres FreeCAD y FreeCADGui respectivamente.

  • En el módulo App encontrarás todo lo relacionado con la propia aplicación, como los métodos para abrir o cerrar archivos, y con los documentos, como establecer el documento activo o listar su contenido.
  • En el módulo Gui, encontrarás herramientas para acceder y gestionar los elementos de la Gui, como los ambientes de trabajo y sus barras de herramientas, y, lo que es más interesante, la representación gráfica de todo el contenido de FreeCAD.

Listar el contenido de estos módulos no es muy útil porque crecen bastante rápido a medida que FreeCAD se desarrolla. Pero las dos herramientas de navegación proporcionadas (el navegador de clases y la ayuda de Python) deberían darte una documentación completa y actualizada en cualquier momento.

Inicio

Los objetos App y Gui

Como ya se ha mencionado, en FreeCAD todo está separado en núcleo y representación. Esto incluye los objetos 3D. Puedes acceder a las propiedades que definen los objetos (llamados características en FreeCAD) a través del módulo App, y cambiar la forma en que se representan en la pantalla a través del módulo Gui. Por ejemplo, un cubo tiene propiedades que lo definen (como anchura, longitud, altura) que se almacenan en un objeto App, y propiedades de representación (como color de las caras, modo de dibujo) que se almacenan en un objeto Gui correspondiente.

Esta forma de hacer las cosas permite una amplia gama de usos, como los algoritmos que sólo funcionan en la parte definitoria de características, sin la necesidad de ocuparse de ningun aspecto visual, o incluso redirigir el contenido del documento con la aplicación no-gráfica, como listas, hojas de cálculo o análisis de elementos.

Para cada objeto App en su documento, existe un objeto Gui correspondiente. De hecho, el propio documento tiene tanto un objeto App como un objeto Gui. Esto, por supuesto, sólo se aplica cuando se ejecuta FreeCAD con su interfaz completa. En la versión de línea de comandos no existe la interfaz gráfica, por lo que sólo están disponibles los objetos App. Ten en cuenta que la parte Gui de los objetos se vuelve a generar cada vez que un objeto App se marca como 'a recalcular' (por ejemplo cuando uno de sus parámetros cambia), por lo que cualquier cambio realizado directamente en el objeto Gui puede perderse.

Para acceder a la parte App de algo, se teclea:

myObject = App.ActiveDocument.getObject("ObjectName")

donde "ObjectName" es el nombre de su objeto. También puede teclea:

myObject = App.ActiveDocument.ObjectName

Para acceder a la parte Gui del mismo objeto, se teclea:

myViewObject = Gui.ActiveDocument.getObject("ObjectName")

donde "ObjectName" es el nombre de su objeto. También puede teclea:

myViewObject = App.ActiveDocument.ObjectName.ViewObject

Si está en modo de línea de comandos y no tiene GUI, la última línea devolverá None.

Inicio

Los objetos Documento

En FreeCAD todo tu trabajo reside dentro de los documentos. Un documento contiene tu geometría y puede ser guardado en un archivo. Se pueden abrir varios documentos al mismo tiempo. El documento, al igual que la geometría que contiene, tiene objetos App y Gui. El objeto App contiene las definiciones reales de la geometría, mientras que el objeto Gui contiene las diferentes vistas del documento. Puedes abrir varias ventanas, cada una de ellas viendo tu trabajo con un factor de zoom diferente o desde una dirección diferente. Todas estas vistas forman parte del objeto Gui de tu documento.

Para acceder a la parte App del documento actualmente abierto (activo), se escribe:

myDocument = App.ActiveDocument

Para crear un nuevo documento, teclea:

myDocument = App.newDocument("Document Name")

Para acceder a la parte Gui del documento abierto actualmente (active), teclea:

myGuiDocument = Gui.ActiveDocument

Para acceder a la vista actual, teclea:

myView = Gui.ActiveDocument.ActiveView

Inicio

Utilizando módulos adicionales

Los módulos FreeCAD y FreeCADGui sólo se encargan de crear y gestionar objetos en el documento de FreeCAD. En realidad no hacen nada más como crear o modificar la geometría. Esto se debe a que la geometría puede ser de varios tipos, y por lo tanto requiere módulos adicionales, cada uno responsable de la gestión de un determinado tipo de geometría. Por ejemplo, el Part Workbench, usando el kernel de OpenCascade, es capaz de crear y manipular geometría del tipo BRep. Mientras que el Mesh Workbench es capaz de construir y modificar objetos de malla. De esta manera FreeCAD es capaz de manejar una amplia variedad de tipos de objetos, que pueden coexistir en el mismo documento, y nuevos tipos pueden ser fácilmente añadidos en el futuro.

Inicio

Creación objetos

Cada módulo tiene su propia manera de tratar la geometría, pero una cosa que normalmente todos pueden hacer es crear objetos en el documento. Pero el documento de FreeCAD también es consciente de los tipos de objetos disponibles proporcionados por los módulos:

FreeCAD.ActiveDocument.supportedTypes()

listará todos los objetos posibles que puedes crear. Por ejemplo, vamos a crear una malla (manejada por el módulo Mesh) y una pieza (manejada por el módulo Part):

myMesh = FreeCAD.ActiveDocument.addObject("Mesh::Feature", "myMeshName")
myPart = FreeCAD.ActiveDocument.addObject("Part::Feature", "myPartName")

El primer argumento es el tipo de objeto, el segundo el nombre del objeto. Nuestros dos objetos parecen casi iguales: no contienen ninguna geometría todavía, y la mayoría de sus propiedades son las mismas cuando los inspeccionas con dir(myMesh) y dir(myPart). Excepto por una cosa, myMesh tiene una propiedad Mesh y myPart tiene una propiedad Shape. Ahí es donde se almacenan los datos de la Malla y de la Pieza. Por ejemplo, vamos a crear un cubo Part y almacenarlo en nuestro objeto myPart:

import Part
cube = Part.makeBox(2, 2, 2)
myPart.Shape = cube

Podrías intentar almacenar el cubo dentro de la propiedad Mesh del objeto myMesh, pero devolverá un error. Esto se debe a que cada propiedad está hecha para almacenar sólo un tipo determinado. En una propiedad Mesh, sólo puedes guardar cosas creadas con el módulo Mesh. Tenga en cuenta que la mayoría de los módulos también tienen un acceso directo para añadir su geometría al documento:

import Part
cube = Part.makeBox(2, 2, 2)
Part.show(cube)

Inicio

Modificando objetos

Modificación de un objeto se hace de la misma manera:

import Part
cube = Part.makeBox(2, 2, 2)
myPart.Shape = cube

Ahora vamos a cambiar la forma por una mayor:

biggercube = Part.makeBox(5, 5, 5)
myPart.Shape = biggercube

Inicio

Consultar objetos

Siempre se puede mirar el tipo de un objeto así:

myObj = FreeCAD.ActiveDocument.getObject("myObjectName")
print(myObj.TypeId)

o comprobar si un objeto deriva de uno de los básicos (Característica Pieza, Característica Malla, etc):

print(myObj.isDerivedFrom("Part::Feature"))

¡Ahora puedes empezar a jugar de verdad con FreeCAD! Para una lista completa de los módulos disponibles y sus herramientas, visite la sección Categoría:API.

Inicio

Python scripting tutorial/es
Mesh Scripting/es