Code snippets/es

Introducción
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 forums foros. Lee y utilízala como punto de partida para tus propios archivos de guión ...

Fragmentos


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



Añadir una Malla


Añadir un arco o un círculo


Acceder y cambiar la representación de un objeto
Cada objeto en un documento de FreeCAD tiene un objeto de representación de vista asociado que almacena todos los parámetros que definen cómo aparece ese objeto: por ejemplo, color, ancho de línea, etc... Ver también Listar los componentes de un objeto snippet abajo



Sustituir la forma de ratón con una imagen


Sustituir la forma de ratón con una imagen (cruz) incluye
The image is created by Gimp exported in a .XPM file. Copy and use the code between the bracket "{" code to copy  "}"

Observe camera change in the 3D viewer via Python
This can be done adding a Node sensor to the camera:



Observar los 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



Mostrar teclas pulsadas y comando eventos
Esta macro muestra en la vista de informes las teclas pulsadas y todos los eventos comando



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:



Guardar el sceneGraph en 3 series de 36 archivos
View the code snippet by expanding this section

<span id="Add_custom_widgets_to_the_interface">

Añadir asistentes personalizados a la interfaz
Puedes crear asisstentes 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:

<span id="Add_a_Tab_to_the_Combo_View">

Añadir una pestaña a la vista combinada
El siguiente código te permite añadir una pestaña al Vista Combinada 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.

<span id="Enable_or_disable_a_window">

Habilitar o deshabilitar una ventana
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

<span id="Open_a_custom_webpage">

Abrir una página web personalizada
<span id="Get_the_HTML_contents_of_an_opened_webpage">

Obtener el contenido HTML de una página web abierta
<span id="Retrieve_the_coordinates_of_3_selected_points_or_objects">

Recuperar las coordenadas de 3 puntos u objetos seleccionados
<span id="List_all_objects">

Listar todos los objetos
<span id="List_the_dimensions_of_an_object,_given_its_name">

Listar las dimensiones de un objeto, dado su nombre
<span id="Function_resident_with_the_mouse_click_action">

Función residente con la acción del clic del ratón
Here with SelObserver on a object select

Other example with ViewObserver on a object select or view

<span id="Find/select_all_elements_below_the_cursor">

Buscar/seleccionar todos los elementos por debajo del cursor
<span id="List_the_components_of_an_object">

Listar los 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

<span id="List_the_PropertiesList">

Listar de PropiedadesLista
<span id="Add_a_single_Property_Comment">

Añadir un único comentario sobre la propiedad
<span id="Search_and_data_extraction">

Búsqueda y extracción de datos
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)

<span id="Manual_search_of_an_element_with_label">

Búsqueda manual de un elemento con etiqueta
Note: Usually the angles are given in Radian. To convert them:


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

<span id="Cartesian_coordinates">

Coordenadas cartesianas
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"

<span id="Select_all_objects_in_the_document">

Seleccionar todos los objetos del documento
<span id="Select_a_face_of_an_object_by_Name_object_and_Face_number">

Seleccionar un área de un objeto por Nombre objeto y Número área
<span id="Get_the_normal_vector_of_a_face_of_an_object_by_Name_object_and_number_Face_(r.Q)">

Obtener el vector normal de un área de un objeto por Nombre objeto y número área (r.Q)
<span id="Get_the_normal_vector_of_a_face_of_an_object_by_Name_object_and_number_of_Face">

Obtener el vector normal de un área de un objeto por Nombre del objeto y número de área
<span id="Get_the_normal_vector_of_an_object_selected_and_number_of_Face">

Obtener el vector normal de un objeto seleccionado y el número de área
<span id="Get_the_normal_vector_on_the_surface">

Obtener el vector normal en la superficie
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 the face and create a line at the point mouse clicked
<span id="Get_the_normal_vector_of_a_surface_from_a_STL_file">

Obtener el vector normal de una superficie desde un archivo STL
you are done then run for quit:

<span id="Create_one_object_to_the_position_of_the_Camera">

Crear un objeto a la posición de la Cámara
here same code simplified

<span id="Read_And_write_one_Expression">

Leer y escribir una expresión
<span id="Create_a_Sketch_on_a_Surface_in_PartDesign">

Crear un boceto en una superficie en DiseñoPieza
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.

<span id="How_to_Simulate_a_Mouse_Click_at_a_given_Coordinate">

Cómo simular un clic del ratón en una coordenada determinada
The position is relative to the GL widget. See forum thread.

If you have a 3d point and want to get the 2d point on the opengl widget then use this:

How to create a face with holes using Python API
This snippet demonstrates how to create a face with internal holes through the Python API. See forum thread.

Coin3D
See Coin3d snippets

Relacionados

 * Scripted objects
 * Macros
 * Topological_data_scripting