Code snippets/es

Introduction
Esta página contiene ejemplos, pedazos, trozos de código de Python en FreeCAD recogidos de experiencias de los usuarios y las discusiones en los foros. Lee y utilízala como punto de partida para tus propios archivos de guión ...

Un típico archivo InitGui.py
Cada módulo debe contener, además de tu archivo del módulo principal, un archivo InitGui.py, responsable de insertar el módulo en la interfaz GUI principal. Este es un ejemplo de uno sencillo:

Every module must contain, besides your main module file, an InitGui.py file, responsible for inserting the module in the main Gui. This is an example of a simple one.

top

Un típico archivo de módulo
Este es un ejemplo de un archivo de módulo principal, que contiene todo lo que tu módulo hace. Es el archivo Scripts.py invocado por el ejemplo anterior. Puedes tener en él todos tus comandos personalizados.

This is an example of a main module file, containing everything your module does. It is the Scripts.py file invoked by the previous example. You can have all your custom commands here.

top

Importar un nuevo tipo de archivo
Hacer un importador para un nuevo tipo de archivo en FreeCAD es fácil. FreeCAD no considera que importes datos de un documento abierto, sino que simplemente puede abrir directamente el nuevo tipo de archivo. Así que, lo qué tienes que hacer es añadir la nueva extensión de archivo a la lista de las extensiones conocidas de FreeCAD, y escribir el código que leerá el archivo, y crear los objetos de FreeCAD que desees.

Making an importer for a new filetype in FreeCAD is easy. FreeCAD doesn't consider that you import data in an opened document, but rather that you simply can directly open the new filetype. So what you need to do is to add the new file extension to FreeCAD's list of known extensions, and write the code that will read the file and create the FreeCAD objects you want:

Esta línea debe añadirse al archivo InitGui.py para agregar la nueva extensión de archivo a la lista:

Y despues en el archivo Import_Ext.py :

Para exportar tu documentno a algún nuevo tipo de archivo, se haría del mismo modo, salvo que usarías:

FreeCAD.addExportType("Your new File Type (*.ext)","Export_Ext")

top

Añadir una linea
Una línea simplemente tiene 2 puntos.

A line simply has 2 points.

top

Añadir un polígono
Un polígono es simplemente un conjunto de segmentos de línea concetados (una polilínea en AutoCAD). No tiene que ser necesariamente cerrado.

A polygon is simply a set of connected line segments (a polyline in AutoCAD). It doesn't need to be closed.

top

Añadiendo y quitando un objeto en un grupo
Nota: También puedes añadir grupos a otros grupos...

top

Añadir una malla
top

Añadiendo un arco o un círculo
top

Accediendo y cambiando la representación de un objeto
Cada objeto en un documento de FreeCAD tiene asociado un objeto de representación de la vista, que almacena todos los parámetros que definen la forma en que el objeto aparece, tales como el color, ancho de línea, etc ..

Each object in a FreeCAD document has an associated view representation object that stores all the parameters that define how that object appears: i.e. color, linewidth, etc... See also List the components of an object snippet below

top

Observación de Eventos del ratón en el visor 3D a través de Python
La estructura de Inventor permite añadir uno o más nodos de devolución de llamada al escenario gráfico del visor. De forma predeterminada en FreeCAD se instala un nodo de devolución de llamada por cada visor lo que permite añadir funciones C++ globales o estáticas. En el caso de la pasarela Python se han incluido algunos métodos para hacer uso de esta técnica dentro del código Python.

The Inventor framework allows to add one or more callback nodes to the scenegraph of the viewer. By default in FreeCAD one callback node is installed per viewer which allows to add global or static C++ functions. In the appropriate Python binding some methods are provided to make use of this technique from within Python code.

Ahora, pulsa en algún lugar en la zona del visor 3D y observa los mensajes en la ventana de resultados. Para finalizar la observación sólo llama

Se soportan los siguientes tipos de eventos:


 * SoEvent -- Todo tipo de eventos
 * SoButtonEvent -- Todos los eventos de los botones del ratón y del teclado
 * SoLocation2Event -- Eventos de movimiento 2D (normalmente movimientos del ratón)
 * SoMotion3Event -- Eventos de movimiento 3D (normalmente del spaceball)
 * SoKeyboardEvent -- Eventos de pulsar y soltar teclas
 * SoMouseButtonEvent -- Eventos de presionar y soltar los botones del ratón
 * SoSpaceballButtonEvent -- Eventos de presionar y soltar los botones del spaceball

La función de Python que se puede registrar con addEventCallback espera un diccionario. Dependiendo del evento observado, el diccionario puede contener diferentes claves.

En todos los eventos existen las siguientes claves:


 * Type -- El nombre del tipo de evento i.e. SoMouseEvent, SoLocation2Event, ...
 * Time -- La hora actual como una cadena de texto
 * Position -- Una dupla de dos enteros, con la posición del ratón
 * ShiftDown -- Un booleano, true si la tecla Shift estaba presionada y false en caso contrario
 * CtrlDown -- Un booleano, true si la tecla Ctrl estaba presionada y false en caso contrario
 * AltDown -- Un booleano, true si la tecla Alt estaba presionada y false en caso contrario

Para los eventos de botones, (tanto del teclado, como del ratón o de un spaceball): Para eventos de teclado: Para eventos de botón de ratón Para eventos de spaceball: Y por último, eventos de movimiento:
 * State -- Una cadena de texto 'UP' si el botón no estaba presionado, 'DOWN' si estaba presionado o 'UNKNOWN' para cualquier otro caso
 * Key -- Un carácter de la tecla presionada
 * Button -- El botón presionado, podría ser BUTTON1, ..., BUTTON5 o ANY
 * Button -- El botón presionado, podría ser BUTTON1, ..., BUTTON7 o ANY
 * Translation -- Una tripla de tres números de coma flotante
 * Rotation -- Una cuádrupla para la rotación, i.e. a tupla de cuatro números de coma flotante

top

Display keys pressed and Events command
This macro displays in the report view the keys pressed and all events command

top

Manipular escenario gráfico en Python
También es posible obtener y cambiar el escenario gráfico en Python, con el módulo 'Pivy' - una pasarela de Python para Coin.

It is also possible to get and change the scenegraph in Python, with the 'pivy' module -- a Python binding for Coin.

La API en Python de Pivy está creada utilizando la herramienta de SWIG. En FreeCAD se usan algunos nodos auto-escritos, que no pueden crearse directamente en Python. Sin embargo, es posible crear un nodo por su nombre interno. Se puede crear una instancia del tipo "SoFCSelection" con

top

Añadir y eliminar objetos al/del escenario gráfico
La adición de nuevos nodos al escenario gráfico se puede hacer de esta manera. Ten cuidado de añadir siempre un SoSeparator para contener la geometría, las coordenadas y la información de materiales de un mismo objeto. En el ejemplo siguiente se agrega una línea roja desde (0,0,0) a (10,0,0):

Adding new nodes to the scenegraph can be done this way. Take care of always adding a SoSeparator to contain the geometry, coordinates and material info of a same object. The following example adds a red line from (0,0,0) to (10,0,0):

Para quitarlo, simplemente escribe:

top

Save the sceneGraph in 3 series of 36 files
View the code snippet by expanding this section

top

Añadiendo widgets o complementos personalizados a la interfaz
Puedes crear widgets personalizados con Qt designer, transformarlos es archivos de guión en Python, y luego cargarlos en la interfaz de FreeCAD con PyQt4.

You can create custom widgets with Qt designer, transform them into a python script, and then load them into the FreeCAD interface with PySide.

El código de Python producido por el compilador-UI de python (la herramienta que convierte archivos .UI de Qt-designer en código de Python) tiene, en general, este aspecto (es simple, también puedes escribir el código directamente en Python):

Despues, todo lo que necesitas hacer es crear una referencia a la ventana Qt de FreeCAD, insertar un widget personalizado en ella, y "transformar" ese widget en el tuyo con el código UI que acabas de hacer:

top

Añadiendo una pestaña al Combo View
El siguiente código te permite añadir una pestaña al ComboView de FreeCAD, además de las pestañas "Proyecto" y "Tareas". Utiliza también el módulo UIC para cargar un archivo UI directamente en esa pestaña.

The following code allows you to add a tab to the Combo view, separate from the preexisting "Model" and "Tasks" tabs. It also uses the module to load an UI file directly in that tab.

top

Enable or disable a window
This script give the ability to manipulate the UI from the Python console to show/hide different components in the FreeCAD interface such as:
 * Report view
 * Tree view
 * Property view
 * Selection view
 * Combo View
 * Python console
 * draftToolbar

top

Abrir una página web personalizada
top

Obtener el contenido HTML de una página web abierta
top

Retrieve the coordinates of 3 selected points or objects
top

List all objects
top

List the dimensions of an object, given its name
top

Function resident with the mouse click action
Here with SelObserver on a object select

Other example with ViewObserver on a object select or view

top

Find/select all elements below the cursor
top

Lista de componentes de un objeto
This function list the components of an object and extracts:
 * this object its XYZ coordinates,
 * its edges and their lengths center of mass and coordinates
 * its faces and their center of mass
 * its faces and their surfaces and coordinates

top

List the PropertiesList
top

Add a single Property Comment
top

Search and data extraction
Examples of research and decoding information on an object.

Each section is independently and is separated by "############" can be copied directly into the Python console, or in a macro or use this macro. The description of the macro in the commentary.

Displaying it in the "Report View" window (View > Views > Report view)

top

Manual search of an element with label
PS: Usually the angles are given in Radian to convert :


 * 1) angle in Degrees to Radians :
 * 2) *Angle in radian = pi * (angle in degree) / 180
 * 3) *Angle in radian = math.radians(angle in degree)
 * 4) angle in Radians to Degrees :
 * 5) *Angle in degree = 180 * (angle in radian) / pi
 * 6) *Angle in degree = math.degrees(angle in radian)

top

Cartesian coordinates
This code displays the Cartesian coordinates of the selected item.

Change the value of "numberOfPoints" if you want a different number of points (precision)

Other method display on "Int" and "Float"

top

Select all objects in the document
top

Select a face of an object
top

Create one object to the position of the Camera
here same code simplified

top

Find normal vector on the surface
This example show how to find normal vector on the surface by find the u,v parameters of one point on the surface and use u,v parameters to find normal vector

top

Read And write one Expression
top

Get the normal vector of a surface from a STL file
you are done then run for quit:

top

Create a Sketch on a Surface in PartDesign
This snippet can be useful, if you want to create a sketch on a surface in PartDesign from inside a macro. Note, that body might be None, if no active body is selected and that the Selection might be empty.

top

How to Simulate a Mouse Click at a given Coordinate
The position is relative to the GL widget. See forum thread.

top

Related

 * Scripted objects
 * Macros

top