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:

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.

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.

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")

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

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ñadiendo y quitando un objeto en un grupo
Nota: También puedes añadir grupos a otros grupos...

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 ..

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.

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

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

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.

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

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):

Para quitarlo, simplemente escribe:

Saves the sceneGraph with a rotation in a series of 36 files in the X Y Z axis
View the code snippet by expanding this section

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.

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:

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.

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

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

Other example with ViewObserver on a object select or view

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

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)

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)

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"

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

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

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

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.

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

Related

 * Scripted objects
 * Macros