You are on page 1of 176

Manual de Freecad

Este es el manual FreeCAD. Incluye las partes esenciales de la wiki de documentación


FreeCAD. Está hecho principalmente para ser impresos en un solo documento grande, así que,
si usted está leyendo esto en línea, usted lo prefiere, puede dirigirse directamente a la ayuda
en línea la versión, que es más fácil de navegar.

Bienvenido a la ayuda FreeCAD en línea


Este documento ha sido creado de forma automática a partir del contenido de la wiki de
documentación oficial FreeCAD, que puede leerse en línea
en http://apps.sourceforge.net/mediawiki/free-cad/index.php?title=Main_Page . Desde que el
wiki es mantenido activamente y continuamente desarrollado por la comunidad FreeCAD de
desarrolladores y usuarios, es posible que la versión en línea contiene la información más
reciente o más de este documento. Pero no obstante, esperamos que usted encontrará aquí
toda la información que usted necesita. En caso de que tenga preguntas que usted no puede
encontrar respuestas en el presente documento, eche un vistazo en el foro FreeCAD, donde tal
vez se puede encontrar respuesta a su pregunta, o alguien que pueda ayudarte.
Cómo utilizar
Este documento se divide en varias secciones: introducción, uso de secuencias de comandos y
el desarrollo, la dirección de los tres últimos especialmente los tres grandes categorías de
usuarios de FreeCAD: usuarios finales, que simplemente quieren usar el programa, los
usuarios de energía, que se interesan por las capacidades de scripting de FreeCAD y me
gustaría personalizar algunos de sus aspectos, y los desarrolladores, que consideran FreeCAD
como base para desarrollar sus propias aplicaciones. Si eres nuevo en comletely FreeCAD, le
sugerimos que para empezar simplemente por la introducción.
Contribuir
Como usted puede haber experimentado en ocasiones, los programadores son realmente
ayudar a los escritores malos! Para ellos todo es del todo claro porque lo hizo de esa
manera. Por lo tanto es vital que los usuarios experimentados nos ayudan a escribir y revisar la
documentación. Sí, tenemos que decir! ¿Cómo, usted pregunta? Sólo tienes que ir a la Wiki
enhttp://apps.sourceforge.net/mediawiki/free-cad/index.php en la sección de usuario. Usted
necesitará una cuenta de sourceforgepara iniciar la sesión, entonces se puede empezar a
editar!
Introducción

la interfaz FreeCAD

FreeCAD es un propósito general 3D CAD modelador. El desarrollo es completamente de


código abierto (GPL y LGPL licencia). FreeCAD va destinado directamente a la ingeniería
mecánica y diseño de productos , pero también encaja en una gama más amplia de
aplicaciones en la ingeniería, tales como la arquitectura o la ingeniería de otras especialidades.
FreeCAD cuenta con herramientas similares a Catia, SolidWorks y Solid Edge, y por lo tanto
también cae en la categoría de MCAD, PLM, CAx y CAE. Será una película basada modelador
paramétrico con una arquitectura de software modular que hace fácil para proporcionar
funcionalidad adicional, sin modificar el núcleo del sistema.
Como ocurre con muchos modernos 3D CAD y modeladores que tendrá un componente 2D
para extraer los detalles del diseño del modelo 3D para crear dibujos en 2D de producción,
pero el dibujo 2D directa (como AutoCAD LT) no es el foco, no son orgánicos o formas de
animación ( como Maya, 3ds Max o Cinema 4D), aunque, gracias a su amplia adaptabilidad,
FreeCAD podría ser útil en una amplia área mucho más que su enfoque actual.
Otra de las principales preocupaciones de FreeCAD es hacer un uso intensivo de todos los de
código abierto grandes bibliotecas que existen por ahí en el campo de la computación
científica. Entre ellos se encuentran OpenCascade, un poderoso núcleo de CAD,Coin3D, una
encarnación de OpenInventor, Qt, la famosa interfaz de usuario marco del mundo, y Python,
uno de los mejores lenguajes de scripting disponibles. FreeCAD misma también se puede
utilizar como una biblioteca por otros programas.
FreeCAD está totalmente multiplataforma, y actualmente se ejecuta sin problemas en Windows
y Linux / Unix y Mac OS X sistemas, con el mismo aspecto y funcionalidad en todas las
plataformas.
¿Tienes curiosidad? Echa un vistazo a la lista de características o de la Introducción a los
artículos, o dirigirse directamente al centro de usuario!
Esta es una, por lo tanto no es completa, extensa lista de características FreeCAD
implementa. Si desea buscar en el futuro ver lahoja de ruta para el Desarrollo de una visión
general rápida de la Imagen es un buen lugar para ir.
Características generales
Base de la aplicación

 FreeCAD es multi-plataforma. Se ejecuta y se comporta exactamente de la misma


manera en Windows, Linux y OSX plataformas Mac.

 FreeCAD es una completa aplicación con interfaz gráfica. FreeCAD cuenta con una
completa interfaz gráfica de usuario basada en el famoso Qtmarco, con un visor 3D basado
en Open Inventor, permitiendo rápido renderizado de escenas 3D y una representación
gráfica de la escena muy accesible.

 FreeCAD también se ejecuta como una aplicación de línea de comandos, con la


huella de memoria baja. En modo de línea de comandos, FreeCAD se ejecuta sin su
interfaz, pero con todas las herramientas de la geometría. Puede ser, por ejemplo, utiliza
como servidor de producir contenidos para otras aplicaciones.

 FreeCAD se pueden importar como un módulo de Python, dentro de otras


aplicaciones que pueden ejecutar scripts de Python, o en una serpiente pitón de la
consola. Al igual que en modo consola, la parte de interfaz de FreeCAD no está disponible,
pero todas las herramientas de la geometría son accesibles.

 Plugin / marco del módulo para la carga tardía de características y tipos de


datos. FreeCAD se divide en una aplicación de base y los módulos, que se cargan sólo
cuando es necesario. Casi todas las herramientas y tipos de geometría se almacena en
módulos. Los módulos se comportan como plugins, y puede incluir o eliminar una
instalación existente de FreeCAD.

 Construido en secuencias de comandos marco: FreeCAD incorpora un


en Python intérprete, y una API que cubre casi cualquier parte de la aplicación, la interfaz,
la geometría y la representación de esta geometría en el visor 3D. El intérprete puede
ejecutar comandos individuales hasta las secuencias de comandos complejas, de hecho,
los módulos de todo, incluso se puede programar completamente en Python.
 un instalador MSI modular permite instalaciones flexibles en los sistemas
Windows. Los paquetes para los sistemas de Ubuntu también se mantienen.

Estructura de documento

 Deshacer / Rehacer marco: Todo es deshacer / rehacer, con acceso a la pila de


deshacer, varios pasos por lo que puede ser deshecho a la vez.

 gestión de transacciones: La deshacer / rehacer pila documento transacciones


tiendas y no las acciones individuales, permitiendo que cada herramienta para definir
exactamente lo que hay que deshacer o rehacer.

 asociativas documento objetos paramétricos: Todos los objetos en un documento


FreeCAD puede ser definido por los parámetros. Los parámetros se pueden modificar
sobre la marcha, y vuelven a calcular en cualquier momento. La relación entre los objetos
también se almacena, por lo que la modificación de un objeto también modifica sus objetos
dependientes.

 (ZIP base) del documento compuesto guardar formato: FreeCAD documentos


guardados con iconos fcstd. extensión puede contener diversos tipos de información, tales
como la geometría, las secuencias de comandos o en miniatura.

Interfaz de usuario

 Totalmente personalizable / scripts interfaz gráfica de usuario. El Qtbasado en la


interfaz de FreeCAD es totalmente accesible a través del intérprete de Python. Además de
las funciones simples que FreeCAD se dota a los bancos de trabajo, el marco de Qt está
adaptado demasiado, permitiendo que cualquier operación en la interfaz gráfica de usuario,
tales como crear, agregar, de acoplamiento, modificar o eliminar widgets y barras de
herramientas.

 concepto de banco de trabajo: En la interfaz de FreeCAD, las herramientas se


agrupan por mesas de trabajo. Esto permite mostrar sólo las herramientas utilizadas para
llevar a cabo una determinada tarea, manteniendo la ordenada y responsable, y la rápida
aplicación de espacio de trabajo para la carga.

 Incorporado en la consola de Python con resaltado de sintaxis, y la clase explorador


autocompletar: comandos de Python pueden ser introducidas directamente en FreeCAD y
devolvió de inmediato los resultados, lo que permite guionistas para probar la funcionalidad
sobre la marcha, explorar el contenido de los módulos y fácil aprender sobre FreeCAD
internos.

 reflejo de la interacción del usuario en la consola: Todo lo que el usuario hace en la


interfaz de FreeCAD ejecuta código python, que se puede imprimir en la consola y se
registran en las macros.

 macro de grabación y edición completa: La pitón órdenes emitidas cuando el


usuario manipula la interfaz puede ser grabado, editado, si es necesario, y salvo que se
reproduce más adelante.

 Thumbnailer (los sistemas Linux solamente en el momento): Los iconos de documento


FreeCAD mostrar el contenido del archivo en la mayoría de las aplicaciones de
administrador de archivos, como los nautilus de gnome.

Características específicas de la aplicación


La funcionalidad de FreeCAD está separado en módulos, cada uno tratando con tipos de datos
y aplicaciones especiales:
Mallas

 El acoplamiento del módulo se refiere a mallas 3D. Es esta destinada principalmente


para la importación, la curación y la conversión de parte de malla generada geometría de
sesiones en FreeCAD, y la exportación de la geometría FreeCAD en formato de
malla. Pero sí FreeCAD también cuenta mucho la geometría de los tipos más avanzados
de las mallas.

 la creación de primitivas (caja, esfera, etc cilindro), desplazamiento(triviales o


después de Jung / Shin / Choi) o las operaciones booleanas(añadir, cortar, se cruzan)

 Importación de los siguientes formatos: ASCII o binario STL (litografía formato


estéreo) (*. stl, *. ast), el formato OBJ (*. obj), limitadaNASTRAN apoyo (*. nas), Open
Inventor mallas (iv *.), y nativo del kernel de malla FreeCAD (*. BMS)

 Exportación de los siguientes formatos: ASCII o binario STL (Stereo formato


litografía) (*. stl, *. ast), el formato OBJ (*. obj), limitada NASTRAN apoyo (*. nas, *.
BRL), VRML mallas (*. wrl), nativa del núcleo de malla FreeCAD (*. BMS), de malla como
módulo de Python (*. py)

 Prueba y reparación de herramientas para mallas: prueba de sólidos, y dos colectores


de ensayo que no, intersección de autocomprobación, orificio de llenado y la orientación
uniforme.

 Amplia Python API de scripting.


2D de Redacción

 Gráfica de creación de la geometría plana simples como líneas, cables, rectángulos,


arcos o círculos en cualquier plano del espacio 3D

 Anotaciones como los textos o las dimensiones

 Gráfica de las operaciones de modificación como la traducción, rotación, escalado,


espejo, desplazamiento o la forma de conversión, en cualquier plano del espacio 3D

 Importación y exportación de los siguientes formatos: Autodesk Dibujo Exchange


Format (*. dxf), Open Cad Formato (*. oca, *. gcad) e SVG (*. svg)
CAD
 La pieza del módulo se ocupa de todo alrededor de modelado CAD y las estructuras de
datos CAD. La funcionalidad CAD está en fuerte desarrollo (véase
el PartDesign_project y Assembly_project en elDevelopment_roadmap). El módulo de la
parte trabaja con alto nivel Abrir CASCADE geometría.

 Paramétrico formas primitivas como la caja, la esfera, el cono del cilindro o un toro.

 Topológica componentes como vértices, bordes, cables y aviones (a través de


secuencias de comandos de Python).

 Modelado con rectas o revolución extrusiones, secciones y filetes.

 operaciones booleanas , como la unión, diferencia y la intersección.

 Amplia Python API de scripting.

 Importación y exportación de los siguientes formatos: PASO piezas y ensamblajes (*.


stp, *. paso), IGES modelos (*. igs, *. IGES) y BREP (*. BRP), el formato nativo de
nuestro Abrir CASCADE núcleo CAD .
Raytracing

 El módulo de trazado de rayos permite la exportación de la geometría FreeCAD


a renderizadores externos para la generación de imágenes de alta calidad. En la
actualidad, el motor de render compatible sólo es POV-Ray. El módulo permite actualmente
la creación de una hoja de representación, y la geometría de la adición a esa hoja de
representación para exportar a un archivo de POV-Ray.
Dibujo

 El módulo de dibujo permite exportar vistas proyectadas de la geometría 3D a


un documento SVG 2D. Permite la creación de una hoja en 2D con una plantilla de svg
existentes, y la inserción de puntos de vista de la geometría proyectada en esa hoja. A
continuación, la hoja se pueden guardar como un archivo SVG.
CAM

 El módulo CAM se dedica a trabajar a máquina mecánica, como la molienda. Este


módulo se encuentra en el principio y en el momento en su mayoría dedicados a la hoja
que forma incremental. Aunque hay algunos algoritmos de planificación trayectorias que no
son utilizables para el usuario final en el momento.

Instalación
Instalar en Windows
La forma más fácil de instalar FreeCAD en Windows es utilizar el instalador. Esta página
describe el uso y las características delinstalador de Microsoft para conocer las opciones de
instalación más.
Instalación sencilla
instalador FreeCAD se entrega en. MSI (Windows Installer) en formato.
Puede descargar la última versión. Msi de la FreeCAD página de descarga oficial. Después de
descargar el archivo, haga doble clic sobre él para iniciar el proceso de instalación.
Instalación de la línea de comandos
Con el msiexec.exe utilidad de línea de comandos, funciones adicionales están disponibles,
como no-instalación interactiva y la instalación administrativa.
Instalación no interactiva

Con la línea de comandos

msiexec / i FreeCAD <versión>. msi

instalación se puede iniciar mediante programación. Los parámetros adicionales se pueden


pasar al final de esta línea de comandos, como

msiexec / i FreeCAD-2.5.msi TARGETDIR = r: \ FreeCAD25

Limitada interfaz de usuario

El importe de la interfaz de usuario que el instalador muestra se puede controlar con / q


opciones, en particular:

 / Qn - No interfaz
 / Qb - Interfaz básica - sólo un pequeño diálogo de progreso
 / Qb! - Al igual que / qb, pero ocultar el botón Cancelar
 / Qr - Reducción de la interfaz - mostrar todos los cuadros de diálogo que no requieren
la interacción del usuario (saltar todos los cuadros de diálogo modales)
 / Qn + - Me gusta / qn, pero muestran "Completado" diálogo al final
 / Qb + - Me gusta / qb, pero muestran "Completado" diálogo al final
Objetivo de la guía

El TARGETDIR propiedad determina el directorio raíz de la instalación FreeCAD. Por ejemplo,


un disco de instalación diferente se puede especificar con

TARGETDIR = R: \ FreeCAD25

El TARGETDIR predeterminado es [WindowsVolume \ Programm Files \] FreeCAD <versión>.


Instalación para todos los usuarios

Agregar

ALLUSERS = 1

causa de una instalación a todos los usuarios. De forma predeterminada, la instalación no


interactiva instalar el paquete sólo para el usuario actual, y la instalación interactiva ofrece un
cuadro de diálogo que por defecto es "todos los usuarios" si el usuario es lo suficientemente
privilegiada.
Selección de características

Un número de propiedades permiten la selección de características para ser instalado,


reinstalado o eliminadas. El conjunto de características para el programa de instalación es
FreeCAD

 DefaultFeature - instalar el software adecuado, además de las bibliotecas del núcleo


 Documentación - instalar la documentación
 El código fuente - instalar las fuentes
 ... Cosas por hacer
Además, TODOS especifica todas las características. Todas las funciones dependen de
DefaultFeature, por lo que la instalación de cualquier característica instala automáticamente la
función de default. Las características siguientes propiedades de control para instalar o
desinstalar

 ADDLOCAL - lista de características para ser instalado en el equipo local


 REMOVER - lista de características para ser retirados
 ADDDEFAULT - lista de funciones adicionales en su configuración por defecto (que es
local para todas las características FreeCAD)
 REINSTALL - lista de características para volver a instalar / reparar
 PUBLICIDAD - lista de características para el que se realizará una instalación de
publicidad
Hay algunas características adicionales disponibles, consulte la documentación de MSDN para
obtener más detalles.
Con estas opciones, añadiendo
ADDLOCAL = Extensiones

instala el propio intérprete y los registros de las extensiones, pero no instalar nada más.
Desinstalación
Con

msiexec / x FreeCAD <versión>. msi

FreeCAD se puede desinstalar. No es necesario contar con el archivo MSI disponibles para la
desinstalación, como alternativa, el paquete o código de producto también puede ser
especificado. Usted puede encontrar el código de producto al observar las propiedades del
acceso directo Desinstalar FreeCAD que se instala en el menú de inicio.
instalación administrativa
Con

msiexec / a FreeCAD <versión>. msi

un "administrativo" (red) de instalación se puede iniciar. Los archivos se desempaquetado en el


directorio de destino (que debe ser un directorio de red), pero sin otra modificación que se haga
en el sistema local. Además, otro archivo (más pequeño) msi se genera en el directorio de
destino, que los clientes pueden entonces utilizar para realizar una instalación local (las
versiones futuras pueden ofrecer también para mantener algunas de las características de la
unidad de red en total).
Actualmente, no existe ninguna interfaz de usuario para las instalaciones administrativas, por lo
que el directorio de destino se debe pasar la línea de comandos.
No hay ninguna específica procedimiento de desinstalación de una administrativa de
instalación - simplemente borre el directorio de destino si no hay cliente que usa más.
Publicidad
Con

msiexec / jm FreeCAD <versión>. msi

sería posible, en principio, a "anunciar" FreeCAD a una máquina (con / ju a un usuario). Esto
haría que los iconos que aparecen en el menú de inicio, y las extensiones para ser registrada,
sin el software en realidad se está instalando. El primer uso de una característica haría que
cuentan para su instalación.
El instalador FreeCAD actualmente soporta sólo el anuncio de las entradas del menú de inicio,
pero no hay anuncio de accesos directos.
Instalación automática de un grupo de máquinas
Con la directiva de grupo de Windows, es posible instalar automáticamente FreeCAD un grupo
de una de las máquinas. Para ello, siga estos pasos:
1. Inicie sesión en el controlador de dominio
2. Copie el archivo MSI en una carpeta que se comparte con acceso permitido a todos los
equipos de destino.
3. Abra el complemento MMC de "usuarios de Active Directory y equipos"
4. Navegue hasta el grupo de equipos que necesitan FreeCAD
5. Abra Propiedades
6. Abrir directivas de grupo
7. Añadir una nueva política, y editarlo
8. En Configuración del equipo / Instalación de software, seleccione Nuevo / Paquete
9. Seleccione el archivo MSI a través de la ruta de red
10. Opcionalmente, seleccione la que desea la FreeCAD ser desinstalado si el equipo sale
del ámbito de aplicación de la política.
la propagación del Grupo de política general, toma algún tiempo - para implementar el paquete
de forma fiable, todos los equipos debe ser reiniciado.
Instalación en Linux usando Crossover Office
Puede instalar la versión para Windows de FreeCAD en un sistema Linux utilizando CXOffice
5.0.1. Ejecutar msiexec de la línea de comandos CXOffice, suponiendo que el paquete de
instalación se coloca en el "software" de la guía que se asigna a la unidad de letra "Y":

msiexec / i Y: \ \ software \ \ FreeCAD <versión> msi.

FreeCAD se está ejecutando, pero se ha informado de que la pantalla OpenGL no funciona, al


igual que con otros PROGRAMAS ejecuta en vino es decir, Google SketchUp.

Instalación en Unix / Linux


Por el momento, el equipo FreeCAD sólo proporciona a los instaladores de sistemas de 32 bits
de Debian y Ubuntu, pero algunos miembros de la comunidad de usuarios FreeCAD también
proporciona a los instaladores de encargo para otras versiones de Linux.Por favor, eche un
vistazo a la descarga página para ver lo que está actualmente availible.
Instalación en sistemas Debian / Ubuntu
Una vez descargado el. Deb correspondiente a su versión del sistema, si usted tiene
la gdebi paquete instalado (normalmente lo es), sólo tiene que desplazarse a donde ha
descargado el archivo, y haga doble clic en él. Las dependencias necesarias serán atendidos
de forma automática por el gestor de paquetes del sistema de tipos. Alternativamente se puede
instalar también de la terminal, navegar hasta donde hemos descargado el archivo, y:

sudo dpkg-i Name_of_your_FreeCAD_package.deb

cambiando Name_of_your_FreeCAD_package.deb por el nombre del archivo descargado.


Después de instalar FreeCAD, un icono de inicio se agregó en la "gráfica" de su Menú de Inicio.
Instalación en otros sistemas Linux / Unix
Unfortnately, por el momento, ningún paquete precompilado es availible para otros sistemas
Linux / Unix, por lo que tendrá quecompilar FreeCAD mismo.

Instalación en Mac
FreeCAD se puede instalar en Mac OS X en un solo paso utilizando el instalador. Esta página
describe el uso y características de la instalación FreeCAD. También incluye las instrucciones
de desinstalación.
Instalación sencilla
El instalador FreeCAD se ofrece como un paquete de Installer (. Mpkg) incluido en un archivo
de imagen de disco.
Puede descargar la última instalación de la descarga la página. Después de descargar el
archivo, simplemente montar la imagen de disco, a continuación, ejecute la instalación
FreeCAD paquete.

El instalador le presentará una instalación Personalizar la pantalla que lista los paquetes que
serán instalados. Si usted sabe que usted ya tiene alguno de estos paquetes, se puede anular
la selección utilizando las casillas de verificación. Si no está seguro, deje todos los elementos
seleccionados.

Desinstalación
En este momento no es un desinstalador de FreeCAD. Para eliminar completamente FreeCAD
y todos los componentes instalados, arrastre los siguientes archivos y carpetas a la Papelera:

 En / Aplicaciones:
 FreeCAD

 en / Library / Frameworks /
 SoQt.framework
 Inventor.framework
Entonces, desde el terminal, ejecute:

sudo / Developer / Herramientas / sudo rm-qt.py desinstalar-R / usr / local / lib / sudo rm
OCC-R / usr / local / include / OCC
Eso es todo. Finalmente, FreeCAD estará disponible como un paquete de aplicaciones de auto-
contenida para toda esta molestia desaparece.

Descubrir FreeCAD
Prefacio
FreeCAD es un sistema CAD / CAE de aplicaciones de modelado paramétrico. Todavía está en
fase inicial de desarrollo, así que no espere ser capaz de utilizarlo para producir un trabajo
ya. Pero, si eres curioso acerca de lo que FreeCAD Aspecto del producto y las características
que se están desarrollando, le invitamos a descargarlo y darle una oportunidad. Por el
momento, mucha funcionalidad ya está presente, pero no la interfaz de usuario mucho se ha
creado para él. Esto significa que si usted sabe un poco de python, que ya será capaz de
producir y modificar la geometría compleja con relativa facilidad. Si no, probablemente
encontrará que FreeCAD todavía tiene pocos para ofrecer a usted. Pero, sea paciente, se
espera que esto cambie pronto.
Y si después de la prueba tiene comentarios, ideas u opiniones, por favor, comparta con
nosotros en el foro de discusión FreeCAD!
Instalación
En primer lugar (si no se hace ya) descargar e instalar FreeCAD. Véase la descarga página
para obtener información acerca de las versiones y actualizaciones. Hay paquetes listos para
instalar Windows (. Msi), Ubuntu y Debian (. Deb) openSUSE (. Rpm) y Mac OSX.
Explorando FreeCAD
La interfaz FreeCAD al iniciarlo por primera vez. Ver más imágenes aquí.

FreeCAD es una aplicación de modelado 3D todos los fines generales, enfocada en la


ingeniería mecánica y otras áreas relacionadas, tales como otras especialidades de la
ingeniería o la arquitectura. Se concibe como una plataforma para el desarrollo de cualquier
tipo de aplicación 3D, sino también para hacer tareas específicas muy. A tal efecto, su interfaz
se divide en una serie de bancos de trabajo. Bancos de trabajo permiten cambiar el contenido
de interfaz para mostrar todos y sólo las herramientas necesarias para una tarea específica, o
un grupo de tareas.
La interfaz FreeCAD por lo tanto se puede describir como un contenedor muy simple, con una
barra de menús, un área de visualización 3D, y un par de paneles laterales para la
visualización de los contenidos escena o propiedades de los objetos. Todos los contenidos de
estos paneles puede haber cambios en función de la mesa de trabajo.
Al iniciar FreeCAD por primera vez, se le presentará un "general" banco de trabajo, que
llamamos "banco de trabajo completo". Esta mesa de trabajo, simplemente recoge las
herramientas más madura de otros bancos de trabajo. Desde FreeCAD es bastante joven y
aún no se utilizan para el trabajo muy especializado, este banco de trabajo es muy útil para
descubrir FreeCAD con mayor facilidad.Básicamente, todas las herramientas que son lo
suficientemente buenas para la producción de la geometría está aquí.
Navegando en el espacio 3D
FreeCAD tiene dos diferentes modos de navegación disponibles, que se pueden establecer en
la configuración de diálogo de preferencias. En el modo por defecto, el zoom se realiza con
la rueda del ratón, paneo con el botón central del ratón, y larotación con el botón izquierdo del
ratón y Botón central del ratón al mismo tiempo. Selección de un objeto se hace simplemente
haciendo clic sobre ella con el botón izquierdo del ratón, con CTRL presionado si desea
seleccionar varios objetos.
También tiene varios presets vista (vista superior, vista frontal, etc) disponibles en el menú Ver
y en la barra de herramientas Vista, y por atajos numéricos (1, 2, etc ..)
2D de Redacción
Herramientas de dibujo
Estas herramientas le permiten configurar su entorno de trabajo o producir operaciones
genéricas.

 plano de trabajo: Establece el plano de trabajo para las operaciones de al lado

 Coloque en la hoja: Escribe los objetos seleccionados a una hoja de dibujo SVG
Objetos de dibujo
Estas son herramientas para la creación de objetos.

 De 2 puntos la línea: Dibuja un segmento de línea de 2 puntos

 Hilos (punto de varias líneas): Dibuja una línea hecha de segmentos de varias
líneas

 Círculo: dibuja un círculo desde el centro y el radio

 Arco: Dibuja un segmento de arco desde el centro, radio, ángulo inicial y final del
ángulo

 Rectángulo: dibuja un rectángulo de 2 puntos opuestos

 Texto: Dibuja una línea de texto de la anotación-multi

 Dimensión: Dibuja una anotación dimensión


Modificación de objetos
Estas son las herramientas para modificar los objetos existentes. Trabajan en los objetos
seleccionados, pero si no hay ningún objeto seleccionado, se le invitará a seleccionar una.

 Mover: Mueve el objeto (s) de un lugar a otro

 Girar: Gira objeto (s) de un ángulo inicial a un ángulo final

 Offset: los segmentos de un objeto se mueve sobre una distancia determinada


 Actualización: se une a los objetos en un alto nivel de objeto

 Baja de Calificación: Se descompone en objetos de nivel inferior objetos


 Recortar / Extender (Trimex): Recorta o se extiende un objeto

 Aplicar el estilo: Aplica el color actual y el ancho de línea a los objetos

 Escala: escala objeto seleccionado (s) en torno a un punto base

 Editar: edita un objeto seleccionado

La creación de piezas en 3D
Primitivos
Estas son herramientas para la creación de objetos primitivos.

 Caja: Dibuja un cuadro especificando sus dimensiones

 Cono: Dibuja un cono mediante la especificación de sus dimensiones

 Cilindro: Dibuja un cilindro mediante la especificación de sus dimensiones

 Esfera: Dibuja una esfera mediante la especificación de sus dimensiones

 Toro: Dibuja un toro (anillo), especificando sus dimensiones


Modificación de objetos
Estas son las herramientas para modificar los objetos existentes. Que le permitirá elegir el
objeto a modificar.

 Booleanos: boolean Realiza operaciones en los objetos

 Fusible: Fusibles (sindicatos) dos objetos

 Común: extraer los comunes (intersección) parte de dos objetos

 Cortar: corta (resta) un objeto de otro

 Extrusión: Eleva caras planas de un objeto

 Solomillo: Filete (balas) bordes de un objeto

 Girar: Crea un objeto por otro objeto giratorio alrededor de un eje

 Sección: Crea una sección por la intersección de un objeto con un plano de


sección
Exportar a dibujos 2D
Estas son las herramientas para crear, configurar y exportación de hojas de dibujo 2D

 Nueva hoja de dibujo: Crea una nueva hoja de dibujo desde un archivo SVG
existentes

 A3 dibujo de paisaje Nueva: Crea una nueva hoja de dibujo de la plantilla por
defecto A3 FreeCAD

 Inserte un punto de vista: Inserta una vista del objeto seleccionado en la hoja de
dibujo activo

 hoja Guardar: Guarda la hoja actual como un archivo SVG

Exportar a renderizadores externos


Estas son herramientas para la exportación de su trabajo en 3D para renderizadores externos

 Crear un proyecto de Povray: Crea un POV-Ray nuevo proyecto

 Insertar información ver: Inserta el ver los datos (posición de la cámara, etc) a la
POV-Ray proyecto actual

 Insertar información parte: Inserta el objeto seleccionado al POV-Ray proyecto


actual

Secuencias de comandos
Y, por último, una de las características más potentes de FreeCAD es la secuencia de
comandos medio ambiente. Desde la pitón consola integrada (o de cualquier secuencia de
comandos Python externo), puede acceder a casi cualquier parte del FreeCAD, crear o
modificar la geometría, modificar la representación de los objetos en la escena 3D o acceder y
modificar la interfaz FreeCAD.secuencias de comandos de Python también pueden ser
utilizados en las macros, que proporcionan un método sencillo para crear comandos
personalizados.

<anterior: Instalación en Mac


siguiente: modelo de ratón>
Índice
Traducciones disponibles:

Trabajar con FreeCAD


de navegación en 3D
El modelo de ratón de FreeCAD es muy flexible e intuitiva y con algunas pistas se puede
utilizar después de sólo un minuto de la práctica.

Selección de objetos
Los objetos se pueden seleccionar con un clic con el botón izquierdo del ratón o haciendo clic
en el objeto en la vista 3D o mediante la selección en la vista de árbol. También hay
una preselección mecanismo que pone de relieve los objetos y muestra información acerca de
ellos antes de la selección con sólo pasar el mouse sobre él. Si no le gusta que la conducta o si
tiene una máquina lenta, puede cambiar de preselección en las preferencias.
Manipulación de objetos
La manipulación de objetos es común a todos los bancos de trabajo. Los gestos del ratón
siguientes se pueden utilizar para controlar la posición del objeto y el punto de vista.
Seleccione
Pulse el botón izquierdo del ratón sobre un objeto que desea seleccionar.
Zoom
Utilice el + o - las llaves de la rueda del ratón para acercar y alejar.
Pan
Haga clic en el botón central del ratón y mover el objeto.
Gire
Primero haga clic con el botón central del ratón, mantenga y haga clic en el botón
izquierdo del ratón en cualquier parte visible de un objeto y arrastrarlo en la dirección
deseada. Esto funciona como hacer girar una pelota que gira alrededor de su centro. Si
se suelta el botón antes de dejar su petición, el objeto sigue girando, si esta opción
está activada.
Centro de Marco de la rotación
Un doble clic con el botón central del ratón en cualquier parte de un objeto establece el
nuevo centro de rotación y zoom sobre este punto.
Manipulación de objetos
FreeCAD ofrece manipuladores que se pueden utilizar para modificar un objeto o su aspecto
visual. Un ejemplo sencillo es el plano de corte que se puede activar con el recorte → Ver
plano de menú. Después de la activación del objeto plano de corte aparece y muestra siete
manipuladores obvio como cajitas: Uno en cada extremo de sus tres ejes de coordenadas y
otra en el centro del plano eje normal. Hay otros cuatro que no son tan obvios: el propio avión y
la parte fina de los tres objetos eje.
Escala
Para escalar el objeto, haga clic con el botón izquierdo del ratón sobre los
manipuladores recuadro al final de los ejes y tire de ellos hacia atrás y
adelante. Dependiendo del objeto a los manipuladores trabajar independientemente o
de forma sincrónica.
Fuera del plano de desplazamiento
Para cambiar el objeto a lo largo de su vector normal, tire de la caja larga en el centro
de un eje con el botón izquierdo del ratón.Para el plano de corte no es sólo un
manipulador a lo largo del vector normal.
En el plano de cambio
Para mover el centro del plano de recorte, haga clic en el objeto de avión y tire de él
hasta la posición deseada.
Rotación
Al hacer clic en la parte fina de los ejes del manipulador pone en modo de rotación.
<Anterior: Primeros pasos
siguiente: Documento> estructura
Índice
Traducciones disponibles:

El documento FreeCAD
Un documento FreeCAD contiene todos los objetos de la escena. Puede contener grupos y
objetos elaborados con cualquier banco de trabajo. Por lo tanto, puede cambiar entre los
bancos de trabajo, y siguen trabajando en el mismo documento. El documento es lo que se
guarda en el disco al guardar su trabajo. También puede abrir varios documentos al mismo
tiempo en FreeCAD, y abrir varias vistas del mismo documento.

Dentro del documento, los objetos se pueden mover en grupos, y tener un nombre
único.Administración de grupos, objetos y nombres de objeto que se realiza principalmente
desde el punto de vista de árbol. También se puede hacer, por supuesto, como todo en
FreeCAD, desde el intérprete de Python. En la vista de árbol, se pueden crear grupos, los
objetos se mueven a los grupos, eliminar objetos o grupos, haciendo clic derecho en la vista en
árbol o en un objeto, los objetos de cambiar el nombre haciendo doble clic en sus nombres, o
posiblemente otras operaciones, en función de la mesa de trabajo actual.
Los objetos dentro de un documento FreeCAD puede ser de diferentes tipos. Cada mesa de
trabajo puede crear sus propios tipos de objetos, por ejemplo, el banco de trabajo de malla crea
objetos de malla, el Workbench Partecrear objetos de la parte, el Proyecto de
Workbench también crea objetos de la parte, etc

Si hay al menos un documento abierto en FreeCAD, siempre hay uno y sólo un documento
activo. Ese es el documento que aparece en la vista 3D actual, el documento que están
trabajando actualmente.

Aplicación y la interfaz de usuario


Como casi todo lo demás en FreeCAD, la parte de interfaz de usuario (GUI) se separa de la
parte de la aplicación de base (la aplicación). Esto también es válido para los documentos. Los
documentos también están hechas de dos partes: el documento de solicitud, que contiene los
objetos, y el documento de Vista, que contiene la representación en pantalla de nuestros
objetos.

Piense en ello como dos espacios, donde los objetos se definen. Sus parámetros constructivos
(es un cubo? Un cono? Qué tamaño?) Se almacenan en el documento de solicitud, mientras
que su representación gráfica (es dibujado con líneas negro? Con rostros azules?) Se
almacenan en el documento Ver. ¿Por qué es eso? Debido a FreeCAD también puede ser
utilizado sin interfaz gráfica, por ejemplo dentro de otros programas, y todavía deben ser
capaces de manipular nuestros objetos, incluso si no se dibuja en la pantalla.

Otra cosa que está contenida en el documento Ver puntos de vista en 3D. Un documento
puede tener varias vistas abiertas, para que pueda inspeccionar el documento desde varios
puntos de vista al mismo tiempo. Tal vez le gustaría ver una vista superior y una vista frontal de
su trabajo al mismo tiempo? A continuación, tendrá dos vistas del mismo documento, ambos
almacenados en el documento Ver. Crear nuevos puntos de vista u opiniones cerca se puede
hacer desde el menú Ver o haciendo clic derecho en una ficha de vista.

Secuencias de comandos
Los documentos pueden crearse fácilmente, acceder y modificar desde el intérprete de
Python. Por ejemplo:

FreeCAD.ActiveDocument

Devolverá el actual (activo) documento

FreeCAD.ActiveDocument.Blob

¿Podría acceder a un objeto llamado "Blob" dentro de su documento

FreeCADGui.ActiveDocument

Devolverá el documento vista asociada al documento actual

FreeCADGui.ActiveDocument.Blob

¿Podría acceder a la representación gráfica (ver) una parte de nuestro objeto Blob

FreeCADGui.ActiveDocument.ActiveView

Configuración de las preferencias del usuario


El sistema de preferencias de FreeCAD se encuentra en el menú Editar -> Preferencias.
funcionalidad FreeCAD está dividido en diferentes módulos, cada módulo está encargado de la
elaboración de un determinado banco de trabajo. FreeCAD también utiliza un concepto llamado
de carga tarde, lo que significa que los componentes se cargan sólo cuando es
necesario. Usted puede haber notado que cuando se selecciona una mesa de trabajo en la
barra de herramientas FreeCAD, que la mesa de trabajo y todos sus componentes se cargan
en ese momento. Esto incluye la configuración de las preferencias.

La configuración de las preferencias generales


Al iniciar FreeCAD sin mesa de trabajo abierta, se le tendrá entonces una ventana de
preferencias mínimo. A medida que la carga de módulos adicionales, nuevas secciones
aparecerán en la ventana de preferencias, lo que le permite configurar los detalles de cada
mesa de trabajo.
Sin ningún módulo cargado, usted tendrá acceso a dos secciones de configuración,
responsables de la configuración de aplicación general y para la configuración de la pantalla.
La configuración de la pantalla
FreeCAD está siempre en constante evolución, por lo que el contenido de las pantallas pueden
diferir de las capturas de pantalla de arriba. Los ajustes son por lo general explica por sí
mismo, lo que no debería enfrentarse a cualquier dificultad de configurar FreeCAD a sus
necesidades.

Personalización de la interfaz
Desde la interfaz FreeCAD se basa en la moderna Qt toolkit, que tiene un estado-de-la
organización de arte. Widgets, menús, barras de herramientas y otras herramientas se pueden
modificar, mover, compartida entre los bancos de trabajo, métodos abreviados de teclado se
puede establecer, modificar y macros se pueden grabar y reproducir. La ventana de
personalización se puede acceder desde Herramientas -> Personalizar menú:
Los comandos de la ficha le permite ver todos los comandos disponibles FreeCAD,
organizado por su categoría.
En el teclado, puedes ver las combinaciones de teclas asociadas a cada comando FreeCAD, y
si lo desea, modificar o asignar nuevo acceso directo a cualquier comando. Aquí es donde
puede venir si se utiliza una mesa de trabajo particular, a menudo, y me gustaría acelerar su
uso mediante el teclado.
Las barras de herramientas y barras de Herramientas etiquetas permiten modificar las
barras de herramientas existentes, o crear sus propias barras de herramientas personalizadas.
Las macros ficha le permite administrar su guarda macros.

Propiedades de los objetos


Una propiedad es una pieza de información como un número o una cadena de texto que se
adjunta a un documento FreeCAD o un objeto en un documento. Las propiedades se pueden
ver y - si lo permite - modificado con el editor de propiedades.

Propiedades juegan un papel muy importante en FreeCAD, ya que es desde el principio los
hizo trabajar con objetos paramétricos, que son objetos definidos sólo por sus propiedades.

Personalizada guión objetos en FreeCAD pueden tener propiedades de los siguientes tipos:
Boolean flotador FloatConstraint ángulo FloatList Distancia entero IntegerConstraint
Porcentaje Enumeración IntegerList cadena StringList Vincular LinkList matriz de vectores
VectorList colocación PlacementLink color colorlist Material Ruta del Archivo FileIncluded
Círculo FilletContour PartShape

Trabajar con bancos de trabajo


FreeCAD, al igual que muchas aplicaciones de diseño moderno, como Revit, se basa en el
concepto de banco de trabajo. Un banco de trabajo puede ser considerado como un conjunto
de herramientas especialmente agrupados para una determinada tarea. En un taller de
muebles tradicionales, usted tendría una mesa de trabajo para la persona que trabaja con
madera, otra para el que trabaja con piezas de metal, y quizás un tercero para el tipo que se
monta todas las piezas juntas.

En FreeCAD, el mismo concepto se aplica. Las herramientas se agrupan en bancos de trabajo


de acuerdo a las tareas que están relacionadas con.
Actualmente tenemos disponibles las mesas de trabajo siguientes:
Construido en bancos de trabajo

El Workbench de malla para trabajar con mallas trianguladas.

El Workbench parte para trabajar con piezas de CAD.

El banco de trabajo de imagen para trabajar con imágenes de mapa de bits.

El banco de trabajo trazado de rayos para trabajar con trazado de rayos (rendering).

El Proyecto de Workbench para hacer de base CAD 2D de redacción.

El banco de trabajo de dibujo para mostrar su trabajo en 3D en una hoja 2D.

Varios bancos de trabajo de pruebas. Usted encontrará en la lista de bancos de trabajo de


varios bancos de trabajo para las pruebas de las diferentes áreas y funcionalidades desde
FreeCAD se encuentra todavía en una fase temprana de desarrollo.
bancos de trabajo nuevos en el desarrollo, estad atentos!
Cuando se cambia de banco de trabajo a otro, las herramientas disponibles en el cambio de
interfaz. Barras de herramientas, barras de comandos y eventualmente otras partes del
interruptor de interfaz a la mesa de trabajo nuevos, pero el contenido de la escena no
cambia. Podría, por ejemplo, empezar a dibujar formas en 2D con el Workbench de Proyecto, a
continuación, seguir trabajando sobre ellos con el Workbench Parte.

El acoplamiento de banco de trabajo


El Workbench de malla maneja mallas de triángulos. Las mallas son un tipo especial de
objetos 3D, compuesto de triángulos conectados por los bordes y las esquinas (también
llamadosvértices).

Un ejemplo de un objeto de malla


Muchas de las aplicaciones 3D utilizar mallas como su principal tipo de objetos en 3D,
con sketchup, licuadora, Maya o 3D Studio Max. Puesto que las mallas son simples objetos
muy, contiene sólo vértices (puntos), los bordes y triangular) caras (, son muy fáciles de crear,
modificar, dividir, estirar, y fácilmente se puede pasar de una aplicación a otra sin ningún tipo
de pérdida.Además, ya que contienen datos muy sencilla, aplicaciones 3D por lo general
pueden manejar grandes cantidades de ellos sin ningún problema. Por estas razones, las
mallas son a menudo el tipo de objeto 3D de elección de las aplicaciones que tratan con las
películas, animación y creación de imágenes.

En el campo de la ingeniería, sin embargo, las mallas presentan una gran limitación: Son
objetos muy tonto, sólo compuesto de puntos, líneas y caras. Ellos sólo se hacen de las
superficies, y no tienen información de masas, por lo que no se comportan como sólidos. En
una malla no hay forma automática saber si un punto está dentro o fuera del objeto. Esto
significa que todas las operaciones sólida basada, como sumas o restas, son siempre un poco
difícil de realizar en las mallas, y los errores de regresar a menudo.

En FreeCAD, ya que es una aplicación de ingeniería, que, obviamente, prefieren trabajar con
tipos más inteligentes de los objetos 3D, que pueden transportar más información, como la
masa, el comportamiento de sólidos, o incluso parámetros personalizados. El módulo de
acoplamiento fue creada para servir como banco de pruebas, pero ser capaz de leer, manipular
y convertir mallas también es muy importante para FreeCAD. Muy a menudo, en su flujo de
trabajo, recibirá los datos 3D en formato de malla. Tendrá que manejar esos datos, analizarlos
para detectar los errores u otros problemas que les impiden convertir a objetos más inteligente,
y, por último, convertir a los objetos más inteligente, a cargo de la parte del módulo.

Con el módulo de acoplamiento


El módulo de malla tiene actualmente una interfaz muy sencilla, todas sus funciones se
agrupan en el acoplamiento de entrada del menú. Las operaciones más importantes que
actualmente se puede hacer con las mallas son:

mallas de importación en varios formatos de archivo

Exportación de mallas en varios formatos de archivo

Convertir Parte objetos en mallas

Analizar la curvatura, se enfrenta, y comprobar si hay una malla puede ser con seguridad
convertirse en un sólido

Flip mallas normales

Cerrar los agujeros en las mallas

Eliminar caras de las mallas


Herramientas GUI
Estas son herramientas para la exportación de su trabajo en 3D para
renderizadores externos

 Crear un proyecto de Povray : crea un nuevo proyecto de POV-Ray

 Insertar vista info : insertar la información de vista (posición de la


cámara, etc.) para el proyecto actual de POV-Ray

 Insertar parte info : inserta el objeto seleccionado para el proyecto actual


de POV-Ray

Una vista de exportación


Es la forma más sencilla exportar la vista 3D actual y todo su contenido a un
Povray archivo . En primer lugar, debe cargar o crear sus datos CAD y
posicionar la orientación de vista 3D como desee. , A continuación, elija
"Exportar... ver" en el menú de logicial.
Usted obtener pedir una ubicación para guardar el archivo resultante de la *.pov.
Después de que se puede abrir en Povray y de procesamiento:

Como es habitual en una rendererer se pueden hacer fotografías grandes y


agradables:
Secuencias de comandos
Aquí es cómo utilizar estas características de python:

import Raytracing,RaytracingGui
OutFile = open('C:/Documents and
Settings/jriegel/Desktop/test.pov','w')
OutFile.write(open(App.getResourceDir()+'Mod/Raytracing/Templates/Proj
ectStd.pov').read())
OutFile.write(RaytracingGui.povViewCamera())
OutFile.write(Raytracing.getPartAsPovray('Box',App.activeDocument().Bo
x.Shape,0.800000,0.800000,0.800000))
OutFile.close()
del OutFile

Links
About POV-Ray:

 http://www.spiritone.com/~english/cyclopedia/
 http://www.povray.org/
 http://en.wikipedia.org/wiki/POV-Ray
About other open-source renderers (for future implementation):
 http://www.yafaray.org/
 http://www.luxrender.net/

El Banco de imágenes
El módulo de imagen administra diferentes tipos de imágenes de mapa de bits
y le permite abrirlos en FreeCAD. En la actualidad, los módulos permite abrir
los formatos de archivo .bmp, .jpg, .png y .xpm en una ventana independiente
del visor. También es una herramienta que le permite capturar una imagen
desde una webcam.

El workbench de proyecto
El proyecto de módulo es un módulo de trabajo en progreso y bastante
experimental realizado para agregar la funcionalidad básica de dibujo 2d a
FreeCAD. Está escrito totalmente en python y también sirve para mostrar hasta
qué punto se puede extender FreeCAD totalmente en python, sin siquiera tocar
el código fuente.

Actualmente no es realmente útil para el trabajo de producción, pero ya


contiene un par de funciones básicas de trabajo. Siéntase libre de probar y nos
dan una retroalimentación sobre el página de discusión .

El workbench de proyecto está disponible en tu lista de workbenches. Cuando se


activa, aparecerán dos barras de herramientas; un clásico barra de herramientas que
contiene los comandos de proyecto estándar que se enumeran a continuación y un
especial de barra de comandos que no tiene ningún icono de herramienta en ella,
pero que es utilizado por las diferentes funciones para mostrar sus controles. De esa
barra de comandos, también puede cambiar las cosas generales como el color de la
línea actual y el ancho. Como una nota, la barra de comandos (y, IMHO, toda la
interfaz QT) se ve mucho mejor si se elige el estilo de "cleanlooks" en las preferencias
generales de FreeCAD...

Tutorial
Para obtener una explicación detallada, lea la Tutorial de proyecto (en curso), o
lee la sección quickstart para ponerse rápidamente en rieles.
Inicio rápido
No todos los comandos de dibujo funcionan bien en 3D en este momento. Por
lo tanto, la mejor cosa a hacer es poner a usted mismo en la vista 2D
ortográfica antes de empezar a dibujar. Para ello, abra o cree un nuevo
documento y, a continuación, pulse el O clave (o en la vista de menú - > vista
ortográfica) para cambiar al modo ortográfica. A continuación, pulse el 2 clave
(o en la vista de menú - > vistas estándar - > arriba) para ponerlo en vista
superior. Ahora, está listo para dibujar. También puede configurar freecad
(menú Editar - > Preferencias) para siempre iniciar en modo ortográfica.

Todos los comandos de proyecto más o menos siguen las mismas reglas:
herramientas de dibujo se le pedirá que elija puntos en la pantalla o introduzca
coordenadas numéricas, mientras que las herramientas de modificación le
pedirá que seleccione un objeto para trabajar en primer lugar, en caso de que
no hay ningún objeto seleccionado. En casi todos los comandos, presionando
el CTRL clave te permitirá ajustar a puntos existentes, Mayús limitará su
movimiento horizontalmente, verically o en relación con un segmento existente
y en algunas herramientas ALT le dará opciones adicionales tales como la
creación de un nuevo objeto en lugar de la transformación de uno ya existente.
La ESC clave siempre cancelará el comando activa.

Note
On some desktop systems (ex. Gnome, Kde), the ALT key is bound by
default to moving windows on the desktop.
You might need to change that shortcut key in your desktop
preferences.

Algunos comandos trabajan demasiado en los aviones no están en posición


horizontal, simplemente asegúrese de que la coordenada Z se desbloquea
cuando dibujo y sitúese en la vista adecuada. A continuación encontrará una
descripción más completa de todas las herramientas disponibles.
Importar & exportación
Estas son las funciones para abrir, importar o exportar a otros formatos de
archivo. Apertura abrirá un nuevo documento con el contenido del archivo,
mientras que la importación anexará el contenido del archivo al documento
actual. Exportar guardará los objetos seleccionados en un archivo. Si no se
selecciona nada, se exportarán todos los objetos. Tenga en cuenta que, puesto
que el propósito del proyecto módulo es trabajar con objetos 2d, los
importadores centran sólo en objetos 2d y, a pesar de que son compatibles con
formatos DXF y OCA objetos definiciones en el espacio 3D (objetos no son
necesariamente planos), ellos no importan objetos volumétricos como mallas,
caras 3D, etc., sino más bien las líneas, círculos, textos o formas planas.
Formatos de archivo admitidos actualmente son:

Autodesk .DXF : Las importaciones y exportaciones de los archivos DXF


creados con otras aplicaciones CAD
SVG (como geometría) : Las importaciones y exportaciones de los archivos
SVG creados con las aplicaciones de dibujo vectorial
Formato abierto de CAD .Oca : Las importaciones y exportaciones archivos
OCA/GCAD, un nuevo potencialmente Abrir el formato de archivo de CAD

Herramientas de redacción
Estas herramientas permiten configurar su entorno de trabajo o producir
genéricas de las operaciones.

 Plano de trabajo : define el plano de trabajo para las operaciones de la


próximas

 Poner en hoja de : escribe los objetos seleccionados en un svg hoja de


dibujo
Objetos de dibujo
Estas son herramientas para la creación de objetos.

 2-punto línea : dibuja un segmento de línea de puntos 2

 Cable (línea de múltiples puntos) : dibuja una línea compuesta de


múltiples segmentos de línea

 Círculo : dibuja un círculo desde el centro y el radio

 Arco : dibuja un segmento de arco desde el centro, radio, ángulo del


comienzo y ángulo final

 Rectángulo : dibuja un rectángulo de puntos opuestos 2


 Texto : dibuja una anotación de texto multilínea
 Dimensión: dibuja una anotación de dimensión
Modificación de objetos
Estas son herramientas para modificar los objetos existentes. Trabajan en los
objetos seleccionados, pero si no se ha seleccionado ningún objeto, será
invitados para seleccionar uno.

 Mover : mover objetos desde una ubicación a otra

 Rotate : permite girar objetos desde un ángulo de inicio a un ángulo de


final

 Offset : mover segmentos de un objeto acerca de una cierta distancia

 Actualizar : se une a los objetos en un objeto de nivel superior

 Downgrade : Explodes objetos en objetos de nivel inferior


 Trim/Extend (Trimex) : permite recortar o extender un objeto

 Aplicar estilo : se aplica el color actual y ancho a objetos

 Escala : escala seleccionado objetos alrededor de un punto de base

 Editar: editar un objeto seleccionado

Comportamientos comunes
El ajuste : Permite colocar puntos de nuevos en lugares especiales sobre los
objetos existentes
Restricción de : Permite colocar puntos de nuevos horizontal o verticalmente
en relación con los puntos anteriores
Trabajar con coordenadas manuales : Permite introducir las coordenadas
manuales en lugar de hacer clic en la pantalla
Copiar: todas herramientas de modificación pueden modificar los objetos
seleccionados o crear una copia modificada de ellos. Presionar ALT
mientras utiliza la herramienta hará una copia
Modo de construcción : Permite poner geometría aparte del resto, para
conmutador fácil encendido y apagado
Todos los objetos recién creados adoptar el proyecto actual color y ancho
El proyecto módulo también tiene su Preferencias pantalla
API
Ver la API de proyecto página para obtener una descripción completa de las
funciones de proyecto que se pueden utilizar en secuencias de comandos y
macros

Secuencias de comandos y macros


Macros
Las macros son una manera conveniente para crear acciones complejas en
FreeCAD. Simplemente, se registra las acciones como hacerlas, luego guardar
bajo un nombre y les reproducir siempre que lo desee. Dado que las macros
son en realidad una lista de comandos de python, también puede editarlos y
crear secuencias de comandos muy complejas.
Cómo funciona
Si habilita la salida de la consola (menú Editar - > Preferencias - > General - >
macros - > Mostrar los comandos de consola de python de secuencias de
comandos), verá que en FreeCAD, cada acción que haces, como presionar un
botón, salidas de un comando de python. Los comandos Thos son lo que
puede ser grabado en una macro. La herramienta principal para hacer macros

es la barra de herramientas de macros: En ella tienes 4


botones: record, parada de grabar, editar y reproducir la macro actual.

Es muy simple de usar: pulse el botón de grabación, le pedirá que asigne un


nombre a la macro y, a continuación, realizar algunas acciones. Cuando haya
terminado, haga clic en el botón de grabación de parada, y se guardarán sus
acciones. Ahora puede acceder al diálogo de macro con el botón de edición:
Se puede administrar sus macros, eliminar, editar o crear nuevas desde cero.
Si edita una macro, se abrirá en una ventana del editor de donde puede realizar
cambios en su código.
En el ejemplo se
Presione el botón de grabación, asigne un nombre a, digamos "cilindro 10 x
10", a continuación, en el Parte Workbench , crear un cilindro con radio = 10 y
altura = 10. A continuación, pulse el botón "detener la grabación". En el cuadro
de diálogo de edición de macros, puede ver el código de python que se ha
registrado y, si lo desea, hacer alteraciones a la misma. Para ejecutar la macro,
simplemente pulse el botón de ejecutar en la barra de herramientas mientras la
macro se encuentra en el editor. Macro siempre está guardado en el disco, así
que cualquier cambio que realice, o cualquier nueva macro se crea, estará
siempre disponible próxima vez que inicie FreeCAD.
Personalización de
Por supuesto, no resulta práctico cargar una macro en el editor en el fin de
utilizarlo. FreeCAD proporciona mucho mejores maneras de usar la macro,
como asignar un método abreviado de teclado a ella o poner una entrada en el
menú. Una vez creada la macro, todo esto puede hacerse a través de las
herramientas - > Personalizar menú:
Herramienta de FreeCAD de de esta manera puede hacer que la macro se
convierten en un verdadero instrumento, al igual que cualquier estándar. Esto,
añadido a la potencia de python de secuencias de comandos dentro de
FreeCAD, hace posible agregar fácilmente sus propias herramientas de la
interfaz. Siga leyendo para la secuencias de comandos página si desea saber
más acerca de los scripts de python...
Creación de macros sin grabación
Usted puede también directamente copiar y pegar código python en una macro,
sin acción de GUI de grabación. Simplemente crear una nueva macro, editarlo
y pegar el código. Usted puede, a continuación, guardar la macro del mismo
modo como se guarda un documento de FreeCAD. Próxima vez que inicie la
FreeCAD, la macro aparecerá bajo el tema "Instalado Macros" del menú macro.
Repositorio de macros
Visita el Recetas de las macros página para recoger algunas macros útiles para
agregar a su instalación de FreeCAD.

Introducción a Python
Este es un tutorial corto realizado para quién es totalmente nuevo para python.
Python es un código abierto, multiplataforma lenguaje de programación. Python
tiene varias características que lo hacen muy diferente de otros lenguajes de
programación común y muy accesible a los nuevos usuarios como usted:

Ha sido diseñado especialmente para ser fácil de leer por los seres humanos, y por
lo tanto es muy fácil de aprender y comprender.
Se interpreta, es decir, a diferencia de compilado de lenguajes como C, su
programa no es necesario ser compilado antes de que se ejecute. El código que
escriba puede ser inmediatamente ejecutado, línea por línea, si así lo desea. Esto
hace extremadamente fácil para aprender y para encontrar errores en el código,
porque usted ir despacio, paso a paso.
Puede incrustarse en otros programas que se utiliza como lenguaje de scripting.
FreeCAD tiene un intérprete de python incrustado, por lo que se puede escribir en
python código en FreeCAD, en la que se manipulan piezas de FreeCAD, por
ejemplo, para crear la geometría. Esto es extremadamente potente, porque en
lugar de simplemente hacer clic en un botón con la etiqueta "crear la esfera", que
un programador ha colocado allí para usted, usted tiene la libertad para crear
fácilmente su propia herramienta para crear exactamente la geometría desee.
Es extensible, fácilmente puede conectar nuevos módulos en su instalación de
python y ampliar su funcionalidad. Por ejemplo, tiene módulos que permiten python
leer y escribir imágenes jpg, para comunicarse con twitter, para planificar las tareas
que debe realizar su sistema operativo, etc.

Por lo tanto, las manos! Tenga en cuenta que lo que vendrá siguiente es una
introducción muy simple, de ninguna manera un tutorial completo. Pero mi
esperanza es que después de obtendrá suficiente fundamentos para explorar
más profunda en los mecanismos de FreeCAD.
El intérprete
Por lo general, al escribir programas informáticos, usted simplemente abra un
editor de texto o su entorno de programación especial que se encuentra en
caso de mayoría un editor de texto con varias herramientas alrededor de ella,
escribe su programa, a continuación, compilarlo y ejecútelo. La mayoría del
tiempo usted cometió errores al escribir, por lo que su programa no funcionará
y obtendrá un mensaje de error que indica lo que salió mal. A continuación, vas
a volver a su editor de texto, corregir los errores, ejecutar una vez más, y así
sucesivamente hasta que el programa funciona bien.

Que todo el proceso, en python, se puede hacer transparente dentro del


intérprete de python. El intérprete es una ventana de python con un símbolo del
sistema, donde simplemente se puede escribir código python. Si instala python
en el equipo (descargarlo desde el sitio Web de python si estás en Windows o
Mac, instálelo desde el repositorio de paquete si estás en linux), usted tendrá
un intérprete de python en su menú de inicio. Pero FreeCAD también tiene un
intérprete de python en su parte inferior:
El intérprete muestra la pitón versión, a continuación, un >>> símbolo, que es el
símbolo, es decir, donde introducir código python. Escribir código en el
intérprete es simple: una línea es una instrucción. Cuando se presiona Intro, su
línea de código se ejecutará (después de ser invisible y instantáneamente
compilado). Por ejemplo, intente escribir esto:

print "hello"

Imprimir es una palabra clave especial de python que significa, obviamente, para
imprimir algo en la pantalla. Cuando pulsa Intro, se ejecuta la operación, y se imprime
el mensaje "hello". Si comete un error, por ejemplo vamos escribir:

print hello

Python nos dirá que no sabe exactamente qué Hola es. Los "personajes
especificar que el contenido es una cadena, que es simplemente, en jerga de
programación, un fragmento de texto. sin el ", el comando de impresión creía
Hola no era un trozo de texto pero una palabra clave de python especiales. Lo
importante es que usted obtenga notificada inmediatamente que ha cometido
un error. Pulsando la flecha hacia arriba (o, en el intérprete de FreeCAD, CTRL
+ Flecha arriba), usted puede ir realizar copia de seguridad en el último
comando que usted escribió y corregirlo.

el intérprete de python también tiene un integrado ayuda a sistema. Intente


escribir:

help
o, por ejemplo, supongamos que no entendemos lo que salió mal con nuestro
comando de impresión Hola anterior, queremos información específica sobre el
comando "print":
Help("Print")

Usted obtendrá una descripción larga y completa de todo lo que puede hacer el
comando de impresión.

Ahora nos dominan totalmente nuestro intérprete, podemos empezar con cosas
graves.
Variables
Por supuesto, impresión "hello" no es muy interesante. Impresión de cosas que
no saber antes de, o dejar que python a encontrar para usted es más
interesante. Es donde entra en juego el concepto de variable. Una variable es
simplemente un valor que almacena bajo un nombre. Por ejemplo, escriba esto:

a = "hello"
imprimir una

Supongo que usted entiende lo que ha ocurrido, "salvó" la cadena "hello" bajo
el nombre de una. Ahora, una ya no es un nombre desconocido! Podemos
usarlo en cualquier lugar, por ejemplo en el comando de impresión. Podemos
utilizar cualquier nombre que queremos que sólo respetando las reglas simples,
como no usar espacios ni signos de puntuación. Por ejemplo, muy bien
podríamos escribir:
Hola = "mi propia versión de Hola"
Hola impresión

¿Ver? Ahora Hola ya no es una palabra no definida. ¿Qué pasa si, por el
terrible mala suerte, hemos escogido un nombre que ya existe en python?
Digamos que queremos almacenar nuestra cadena bajo el nombre de "print":
imprimir = "hello"

Python es muy inteligente y nos dirá que esto no es posible. Tiene algunas
palabras de clave "reservados" que no se puede modificar. Pero nuestras
propias variables pueden modificarse en cualquier momento, eso es,
exactamente, por qué se les llama variables, el contenido puede variar. Por
ejemplo:
myVariable = "hello"
imprimir myVariable
myVariable = "good bye"
imprimir myVariable

Hemos cambiado el valor de myVariable. También podemos copiar variables:


var1 = "hello"
var2 = var1
imprimir var2

Tenga en cuenta que es interesante para darle buenos nombres a sus


variables, "porque cuando te escribir programas de largos, después de un
tiempo no recuerdas lo que su variable denominada a" es para. Pero si llamó
por ejemplo myWelcomeMessage, que te recuerde fácilmente lo que se utiliza
para cuando lo verás.
Números
Por supuesto usted debe saber que la programación es útil para tratar a todo
tipo de datos y especialmente los números, no sólo las cadenas de texto. Una
cosa es importante, python debe saber qué tipo de datos que se trata. Vimos
en nuestro ejemplo de impresión Hola, que el comando print reconocido
nuestra cadena "hello". Eso es porque mediante el ", se dice específicamente el
comando de impresión que lo que vendría próximo es una cadena de texto.

siempre podemos comprobar de qué tipo de datos es el contenido de una


variable con el tipo de palabra clave de python especiales:
myVar = "hello"
Type(myVar)

Nos dirá el contenido de myVar es 'str', o una cadena en la jerga de python.


También tenemos otros tipos básicos de datos, tales como números enteros y
float:
firstNumber = 10
secondNumber = 20
imprimir firstNumber + secondNumber
Type(firstNumber)

Esto ya es mucho más interesante, ¿verdad? Ahora ya tenemos una potente


calculadora! Mirar bien en cómo funcionaba, python sabe que 10 y 20 son
números enteros. Por lo que están almacenados como "int" y python puede
hacer con ellos todo lo que puede hacer con números enteros. Mira los
resultados de esto:
firstNumber = "10"
secondNumber = "20"
imprimir firstNumber + secondNumber

¿Ver? Nos obligó a python a considerar la posibilidad de que nuestros dos


variables no son números sino meras fragmentos de texto. Python puede
sumar dos fragmentos de texto, pero no trate de averiguar cualquier suma.
Pero estábamos hablando de números enteros. También hay números de float.
La diferencia es que los números enteros no tienen parte decimal, mientras que
los números de foat pueden tener una parte decimal:
var1 = 13
var2 = 15,65
imprimir "var1 es de tipo", type(var1)
imprimir "var2 es de tipo", type(var2)

Int y floats pueden ser mezclados entre sí sin problema:


total = var1 + var2
imprimir total
impresión type(total)

¿Por supuesto, el total tiene decimales, derechos? Python automáticamente


decidió entonces que el resultado es un flotante. En varios casos como este,
python automáticamente decide qué tipo para hacer algo. En otros casos no es
así. Por ejemplo:
varA = "hello 123"
varB = 456
imprimir varA + varB

Esto nos dará un error, varA es una cadena y varB es un tipo int, y python no
sabe qué hacer. Pero podemos obligar a python para convertir entre los tipos:
varA = "hello"
varB = 123
imprimir varA + str(varB)

Ahora ambos son cadenas, funciona la operación! Tenga en cuenta que nos
"stringified" varB en el momento de la impresión, pero no cambiamos varB por
sí mismo. Si hemos querido convertir varB permanentemente en una cadena,
necesitamos hacer esto:
varB = str(varB)

También podemos usar int() y float() para convertir a int y float si queremos:
varA = "123"
impresión int(varA)
impresión float(varA)

Nota sobre los comandos de python

Usted debe haber notado que, en esta sección, hemos utilizado el comando de
impresión de varias maneras. Hemos impreso variables, sumas, varias cosas,
separadas por comas y incluso el resultado de otros comandos de python,
como type(). Tal vez usted también vio que haciendo estos dos comandos:
Type(varA)
impresión type(varA)

tienen exactamente el mismo resultado. Eso es porque estamos en el


intérprete, y todo se imprime automáticamente en la pantalla. Cuando te
escribimos más complejos de los programas que se ejecutan fuera del
intérprete, no imprimen automáticamente todo en pantalla, por lo que
necesitaremos utilizar el comando de impresión. Pero de ahora en adelante,
vamos dejar de usarlo aquí, va a ir más rápido. por lo que simplemente
podemos escribir:
myVar = "Hola amigos"
myVar

Usted debe también han visto que la mayoría de los comandos de python (o
palabras clave) ya sabemos tienen paréntesis solía decirles sobre qué
contenido debe trabajar el comando: type(), int(), str(). Única excepción es el
comando de impresión, que en realidad no es una excepción, también funciona
normalmente como esta: print("hello"), pero, ya que se utiliza a menudo, los
programadores de python hecho una versión simplificada.
Listas
Otro tipo de datos interesantes es listas. Una lista es simplemente una lista de
otros datos. La misma manera que definimos una cadena de texto mediante el
uso de "", definimos listas mediante el uso de []:
myList = [1,2,3]
Type(myList)
myOtherList = ["Bart", "Frank", "Bob"]
myMixedList = ["Hola", 345, 34.567]

Verá que puede contener cualquier tipo de datos. Las listas son muy útiles
porque se pueden agrupar las variables. A continuación, puede hacer todo tipo
de cosas en que los grupos, por ejemplo contarlos:
Len(myOtherList)

o recuperar un elemento de una lista:


myName = myOtherList [0]
myFriendsName = myOtherList [1]

Ves que mientras que el comando de len() devuelve el número total de


elementos de una lista, su "posición" en la lista comienza con 0. El primer
elemento de una lista es siempre en la posición 0, por lo que en nuestra
myOtherList, "Bob" será en la posición 2. Podemos hacer mucho más cosas
con listas, como se puede leer aquí tales como ordenar contenido, eliminar o
agregar elementos.
Una cosa divertida e interesante para usted: una cadena de texto es, en
realidad, una lista de caracteres! Intente hacer esto:
mi_var = "hello"
Len(myVar)
myVar [2]

Por lo general todo lo que puede hacer con listas también puede hacerse con
cadenas.

Fuera de cadenas, enteros, carrozas y listas, hay tipos de datos más


integrados, tales como dictionnaries , o incluso puede crear sus propios tipos de
datos con clases .
Sangría
Uno de los grande usos fresco de listas también es navegar a través de ellos y
hacer algo con cada elemento. Por ejemplo mirar esto:
alldaltons = ["Joe", "William", "Jack", "Averell"]
para dalton en alldaltons:
imprimir dalton + "Dalton"

Nos itera (programación jerga otra vez!) a través de nuestra lista con la "para...
en..." comando e hizo algo con cada uno de los elementos. Tenga en cuenta la
sintaxis especial: la de comando termina con: que indica que lo que viene
después va a ser un bloque de uno de los comandos más. Inmediatamente
después de introducir la línea de comandos que terminan con:, el símbolo
cambiará a... que significa python sabe que un: - línea terminó ha ocurrido y lo
que vendrá el próximo formarán parte de ella.

¿Cómo sabe cuántas de las siguientes líneas python voluntad será a


ejecutarse dentro del for.. en operación? Para ello, python utiliza sangría. Es
decir, las siguientes líneas no comienzan de forma inmediata. Les comenzará
con un espacio en blanco, o varios espacios en blanco, o una ficha o varias
fichas. Otros lenguajes de programación utilizan otros métodos, como poner
everythin dentro de paréntesis, etc.. Como escribe tus próximas líneas con la
sangría de la misma, se considerará parte del bloque para-en. Si comienza
una línea con 2 espacios y el siguiente con 4, será un error. Cuando usted haya
terminado, simplemente escribir otra línea sin sangría, o simplemente pulse
Intro para volver desde el bloque para-en

Sangría es cool porque si realiza grandes (por ejemplo utilizar fichas en lugar
de espacios, porque es más grande), cuando se escribe un gran programa
tendrá una visión clara de lo que se ejecuta dentro de lo que. Vamos a ver que
muchos otros comandos que para-en pueden haber sangría bloques de código
demasiado.

Para-en comandos pueden utilizarse para muchas cosas que hay que hacer
más de una vez. Por ejemplo, se puede combinar con el comando range():
serie = range(1,11)
total = 0
imprimir "suma"
número de serie:
imprimir el número
total = total + número
imprimir "----"
imprimir total

O cosas más complejas como este:


alldaltons = ["Joe", "William", "Jack", "Averell"]
para n en range(4):
imprimir alldaltons [n], "es el número de Dalton", n

Verá que el comando de range() también tiene esa extraña particularidad que
comienza con 0 (si no se especifica el número inicial) y que su último número
uno será menor que el número final que especifique. Es decir, por supuesto,
así que funciona bien con otros comandos de python. Por ejemplo:
alldaltons = ["Joe", "William", "Jack", "Averell"]
total = len(alldaltons)
para n en range(total):
imprimir alldaltons [n]

Otro uso interesante de bloques con sangría es con el si comando. Si un


bloque de código sólo se ejecuta si se cumple una determinada condición, por
ejemplo:
alldaltons = ["Joe", "William", "Jack", "Averell"]
Si "Joe" en alldaltons:
imprimir "We found que Dalton!!!!!!"

Por supuesto esto será siempre la primera frase de la impresión, pero intente
reemplazar la segunda línea por:
Si "Lucky" en alldaltons:

A continuación, se imprime nada. También podemos especificar una cosa:


declaración:
alldaltons = ["Joe", "William", "Jack", "Averell"]
Si "Lucky" en alldaltons:
imprimir "We found que Dalton!!!!!!"
otra cosa:
imprimir "Esa Dalton no existe!"
Funciones
El comandos estándar de python no son muchos. En la versión actual de
python hay alrededor de 30 años, y ya sabemos que varios de ellos. ¿Pero
Imagínese si podríamos inventar nuestros propios comandos? Pues bien,
podemos, y es sumamente fácil. De hecho, la mayoría de los módulos
adicionales que se pueden conectar en su instalación de python hacen justo
que, agregar comandos que puede utilizar. un comando personalizado en
python se llama a una función y se realiza como esta:
Def printsqm(myValue):
imprimir str(myValue) + "metros cuadrados"

printsqm(45)

Muy simple: el comando de def() define una nueva función. Asígnele un


nombre, y dentro de los paréntesis definir argumentos que vamos a usar en
nuestra función. Los argumentos son datos que se pasan a la función. Por
ejemplo, mirar el comando len(). Si escribes sólo len() por sí sola, python le dirá
que necesita un argumento. ¿Es decir, desea len() de algo, derecho? Por
ejemplo, a continuación, podrá escribir len(myList) y obtendrá la longitud de
myList. Pues bien, myList es un argumento que se pasa a la función len(). La
función de len() está definida de tal manera que sabe qué hacer con lo que se
pasa a la misma. Mismo como hicimos aquí.

El nombre de "myValue" puede ser cualquier cosa, y que se utilizará sólo


dentro de la función. Es más que un nombre que usted da al argumento de
manera que pueda hacer algo con ella, pero también sirve para que la función
sepa cuántos argumentos a esperar. Por ejemplo, si haces esto:
printsqm(45,34)

Habrá un error. Nuestra función fue programada para recibir sólo un


argumento, pero recibió dos, 45 y 34. En lugar de ello podríamos hacer algo
como esto:
Def sum(val1,val2):
total = val1 + val2
retorno total
Sum(45,34)
myTotal = sum(45,34)

Hicimos una función que recibe dos argumentos, les sumas y devuelve ese
valor. Volviendo algo es muy útil, porque podemos hacer algo con el resultado,
tal como se almacena en la variable myTotal. Por supuesto, ya que estamos en
el intérprete y todo se imprime, haciendo:
Sum(45,34)
se imprimirá el resultado en la pantalla, pero fuera del intérprete, ya que existe
el comando de impresión no más dentro de la función, nada que aparecen en la
pantalla. Tendría que hacer:
impresión sum(45,34)

de tener algo impreso. Obtenga más información acerca de las funciones aquí .
Módulos
Ahora que tenemos una buena idea de cómo funciona el Pitón, necesitaremos
una última cosa: cómo trabajar con archivos y módulos.

¿Hasta ahora, escribimos python instrucciones línea por línea en el intérprete,


derecho? ¿Qué sucede si podríamos escribir varias líneas juntos y tenerlos
ejecutado todos a la vez? Sin duda sería practico para hacer las cosas más
complejas. Y podríamos ahorrar nuestro trabajo demasiado. Pues bien,
también es extremadamente fácil. Simplemente abra un editor de texto (como
el Bloc de notas de windows) y escribir todos tus python líneas, del mismo
modo como escribirlos en el intérprete, con muescas, etc.. A continuación,
guarde ese archivo en algún lugar, preferiblemente con una extensión de .py.
Eso es todo, tiene un programa completo de python. Por supuesto, hay editores
mucho mejores que el Bloc de notas, pero es sólo para mostrarle que un
programa de python es nada más que un archivo de texto.

Para hacer python ejecuta ese programa, hay cientos de maneras. En


ventanas, simplemente pulse el botón derecho de su archivo, ábralo con python
y ejecutarlo. Pero también puede ejecutarla desde el intérprete de python por sí
mismo. Para ello, el intérprete debe saber donde está su programa .py. En
FreeCAD, la forma más sencilla es colocar su programa en un lugar que
intérprete de python de FreeCAD sabe de forma predeterminada, tales como la
carpeta bin del FreeCAD, o cualquiera de las carpetas mod. Supongamos que
escribimos un archivo como esta:
Def sum(a,b):
devolver un + b
imprimir "cargado de test.py correctamente"

y guardamos como test.py en nuestro directorio FreeCAD/bin. Ahora, veamos


iniciar FreeCAD y en la ventana de intérprete, escribir:
prueba de importación

sin la extensión .py. Esto simplemente ejecutará el contenido del archivo, línea
por línea, como si nos habíamos escrito en el intérprete. Se creará la función
suma, y el mensaje se imprimirá. Hay una gran diferencia: el comando de
importación se realiza no sólo para ejecutar programas escritos en los archivos,
como el nuestro, sino también para cargar las funciones en su interior, para que
estén disponibles en el intérprete. Archivos que contienen funciones, como la
nuestra, se denominan módulos.

Normalmente cuando escribimos una función sum() en el intérprete, ejecutarlo


simplemente como éste:
Sum(14,45)

Como se hizo anteriormente. Cuando importa un módulo que contiene nuestra


función sum(), la sintaxis es un poco diferente. Hacemos:
Test.Sum(14,45)

Es decir, el módulo se importa como un "contenedor", y todas sus funciones


están dentro. Esto es muy útil, porque podemos importar un montón de
módulos y mantenerlo todo bien organizado. Por lo tanto, básicamente, en todo
el mundo verá something.somethingElse, con un entre puntos, lo que significa
somethingElse está dentro de algo.

También podemos tirar de la parte de la prueba y importar nuestra función


sum() directamente en el espacio principal intérprete, como este:
de importación de prueba *
Sum(12,54)

Básicamente todos los módulos se comportan como ese. Importar un módulo y,


a continuación, puede utilizar sus funciones como éste:
module.function(argument). Casi todos los módulos de hacen: definir funciones,
tipos de datos nuevos y clases que se pueden utilizar en el intérprete o en sus
propios módulos de python, porque nada le impide que importar módulos
dentro de su módulo!

Una última cosa sumamente útil. ¿Cómo sabemos lo que tenemos los módulos,
¿cuáles son las funciones dentro de y cómo utilizarlas (es decir, qué tipo de
argumentos que necesitan)? Ya vimos python tiene una función de help().
Haciendo:
Help()
módulos

Nos dará una lista de todos los módulos disponibles. Ahora podemos escribir q
para salir de la ayuda interactiva y importar cualquiera de ellos. Incluso nos
podemos examinar su contenido con el comando dir()
matemáticas de importación
Dir(Math)

Vamos a ver todas las funciones contenidas en el módulo de matemáticas, así


como material extraño llamado __doc__, __file__, __name__. El __doc__ es
extremadamente útil, se trata de un texto de documentación. Cada función de
módulos (decolletée) tiene un __doc__ que explica cómo utilizarlo. Por ejemplo,
vemos que hay una función de pecado en lado el módulo de matemáticas.
¿Quieres saber cómo usarlo?
impresión math.sin.__doc__
Comenzando con FreeCAD
Bien, creo que usted debe saber tener una buena idea de cómo funciona la
Pitón, y puede comenzar a explorar lo que FreeCAD tiene que ofrecer. Las
funciones de python de FreeCAD son todos bien organizados en diferentes
módulos. Algunos de ellos ya se cargan (importado) al iniciar FreeCAD. Por lo
tanto, sólo hacer
Dir()

y leer a Conceptos básicos de secuencias de comandos de FreeCAD...


Por supuesto, vimos aquí sólo una parte muy pequeña del mundo python. Hay
muchos conceptos importantes que no mencionamos aquí. Hay dos python
muy importantes documentos de referencia en la red:
la referencia oficial de Python
el wikibook de buceo en Python

Secuencias de comandos en FreeCAD de Python


FreeCAD está construida desde cero para ser controlado totalmente por
secuencias de comandos de python. Casi todas las partes de FreeCAD como
la interfaz, el contenido de la escena, incluso la representación de este
contenido en las vistas 3d son accesibles desde el intérprete de python
incorporada o desde sus propios scripts. De resultas de ello, FreeCAD es
probablemente una de las más aplicaciones de ingeniería profundamente
personalizables disponible hoy en día.

En su estado actual, sin embargo, FreeCAD tiene muy pocos comandos


"nativos" para interactuar en los objetos 3D, principalmente porque es todavía
en fase temprana de desarrollo, sino también porque la filosofía detrás de ella
es más para proporcionar una plataforma para el desarrollo de CAD que una
aplicación diseñada por el usuario. Pero la facilidad de python interior FreeCAD
probablemente ayudará mucho para ver rápidamente nuevas funcionalidades,
siendo desarrollado por "usuarios de poder", o, por lo general, los usuarios que
saben un poco de programación de python, de secuencias de comandos,
esperamos, usted mismo.
Si no está familiarizado con python, recomendamos que usted busque para
tutoriales en internet y echar un vistazo rápido a su estructura. Python es un
lenguaje muy fácil para aprender, sobre todo porque se puede ejecutar dentro
de un intérprete, donde desde comandos simples para completar los
programas se pueden ejecutar sobre la marcha, sin la necesidad de compilar
nada. FreeCAD tiene un intérprete de python incorporada.
El intérprete
Desde el intérprete, puede acceder a todos los módulos de sus sistema
instalado python, así como los módulos integrados de FreeCAD y todos los
módulos adicionales de FreeCAD instaló posteriormente. La captura de
pantalla siguiente muestra la pitón intérprete:

Desde el intérprete, puede ejecutar código python y navegar a través de las clases
disponibles y la función. FreeCAD proporciona un explorador de clase muy útil para la
exploración de su nuevo mundo FreeCAD: cuando se escribe el nombre de una clase
conocida seguida por un punto (lo que significa que desea agregar algo de esa clase),
se clase navegador abre una ventana, donde puede navegar entre las subclases
disponibles y los métodos. Cuando se selecciona algo, se muestra un texto de ayuda
asociado (si existe
Por lo tanto, inicie aquí escribiendo aplics o Gui. a ver qué pasa. Otro modo
más genérico de python de explorar el contenido de los módulos y las clases es
utilizar el comando de impresión dir(). Por ejemplo, si escribe Imprimir dir()
enumerará todos los módulos cargados actualmente en FreeCAD. dir(App) de
impresión le mostrará todo dentro del módulo de la aplicación, 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 ya escrito anteriormente.
Para navegar en la historia de comando, utilice CTRL + arriba o CTRL + abajo.

Haciendo clic derecho en la ventana de intérprete, usted también tiene varias


otras opciones, tales como copia toda la historia (útil para experimentar algo
aquí y, a continuación, realizar una secuencia de comandos completa de la
misma) o inserta el nombre de archivo con la ruta de acceso completa.
Ayuda de Python
En el menú de ayuda de FreeCAD, usted encontrará una entrada con la
etiqueta "Python ayudar a", que se abrirá una ventana del explorador que
contiene una documentación completa, generado en tiempo real de todos los
módulos de python disponibles para el intérprete de FreeCAD, incluyendo
python y módulos integrados de FreeCAD, módulos de sistema instalado y
módulos adicionales de FreeCAD. La documentación disponible allí depende
de cuánto esfuerzo cada desarrollador de módulo poner en documentar su
código, pero generalmente módulo de python tienen la reputación de ser
bastante bien documentado. La ventana de FreeCAD debe permanecer abierta
para este sistema de documentación trabajar.

Módulos integrados
Dado que FreeCAD está diseñado para ejecutarse sin interfaz gráfica de
usuario, casi toda su funcionalidad está separada en dos grupos: funcionalidad
principal, llamado APP y funcionalidad de Gui, llamado Gui. Por lo tanto,
nuestros dos principales módulos integrados de FreeCAD se llaman APP y Gui.
Estos dos módulos también pueden accederse desde secuencias de comandos
de fuera del intérprete, por los respectivos nombres de FreeCAD y
FreeCADGui.

En el módulo de aplicación, usted encontrará todo lo relacionado a la aplicación


en sí, como métodos para la apertura o archivos de cierre y a los documentos,
como la configuración del documento activo o la lista de su contenido.
En el módulo de Gui, encontrará herramientas para acceso y gestión de elementos
de la Gui, como los workbenches y sus barras de herramientas y, más interesante,
la representación gráfica de todos los contenidos de FreeCAD.

Listado de todo el contenido de los módulos es tarea un poco


contraproducente, ya que crecen muy rápido a lo largo de desarrollo de
FreeCAD. Pero las dos exploración herramientas proporcionadas (el explorador
de clases y la ayuda de python) deberían proporcionarle, en cualquier
momento, una documentación completa y actualizada de estos módulos.
Los objetos de aplicación y Gui
Como dijimos, en FreeCAD, todo está separada entre el núcleo y la
representación. Esto incluye también los objetos 3D. Puede obtener acceso a
propiedades definitorias de objetos (llamados características en FreeCAD) a
través del módulo de aplicación y cambiar la forma en que están representados
en la pantalla a través del módulo de Gui. Por ejemplo, un cubo tiene
propiedades que lo definen, como anchura, longitud, altura, se almacenan en
un objeto de aplicación y representación, tales como el color de caras, modo de
dibujo, que se almacenan en un objeto de Gui correspondiente.

Esta forma de hacerlo permite una muy amplia gama de usos, como tener
algoritmos sólo funcionan en la parte definitoria de funciones, sin necesidad de
preocuparse por cualquier parte visual, o incluso redirigir el contenido del
documento a aplicaciones no gráficos, tales como listas, hojas de cálculo o
análisis de elementos.

Para cada objeto de la aplicación en el documento, existe un objeto


correspondiente de la Gui. El documento en sí, en realidad, también tiene
aplicación y una Gui objetos. Esto, por supuesto, sólo es válido cuando se
ejecuta FreeCAD con su interfaz completa. En la versión de línea de
comandos, no GUI existe, por lo que sólo los objetos de aplicación son sencillo.
Nota que la Gui es parte de los objetos genera de nuevo cada vez que un
objeto de aplicación está marcado como "a ser recalculadas" (por ejemplo,
cuando uno de sus parámetros cambiado), por lo que los cambios que podría
haber hecho directamente al objeto Gui podría perderse.

para acceder a la parte de aplicación de algo, escribe:


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

donde "ObjectName es el nombre del objeto. También puede escribir:


myObject = App.ActiveDocument.ObjectName

para acceder a la parte de Gui del mismo objeto, escriba:


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

donde "ObjectName es el nombre del objeto. También puede escribir:


myViewObject = App.ActiveDocument.ObjectName.ViewObject

Los objetos Document


En FreeCAD todo el trabajo se encuentra dentro de documentos. Un
documento contiene su geometría y puede guardarse en un archivo. Pueden
abrir varios documentos al mismo tiempo. El documento, como la geometría
contenido en su interior, tiene objetos de aplicación y Gui. Objeto de la
aplicación contiene las definiciones de la geometría real, mientras que el objeto
de Gui contiene las diferentes vistas del documento. Puede abrir varias
ventanas, cada uno ver su trabajo con un factor de zoom diferentes o un punto
de vista. Estas vistas son parte del objeto de Gui de su documento.

Para acceder a la parte de la aplicación del documento abierto actualmente


(activo), escriba:
myDocument = App.ActiveDocument

Para crear un nuevo documento, escriba:


myDocument = App.newDocument("Document Name")

Para acceder a la parte de Gui el documento abierto actualmente (activo),


escriba:
myGuiDocument = Gui.ActiveDocument

Para acceder a la vista actual, escriba:


myView = Gui.ActiveDocument.ActiveView

Introducción
En primer lugar tiene que importar el módulo de Mesh:
import Mesh

Después de usted tiene acceso al módulo de malla y la clase de malla que


facilitar las funciones de la versión C++ Mesh-núcleo de FreeCAD.
Creación y carga
Para crear un objeto de malla vacío sólo utilice el constructor estándar:
mesh = Mesh.Mesh()

También puede crear un objeto desde un archivo


mesh = Mesh.Mesh('D:/temp/Something.stl')
¿Qué formatos de archivo que se puede utilizar para crear una malla es notable
aquí .

O crearlo fuera de un conjunto de triángulos descrito por sus puntos de


esquina:
planarMesh = [
# triangle 1
[-0.5000,-0.5000,0.0000],[0.5000,0.5000,0.0000],[-
0.5000,0.5000,0.0000],
#triangle 2
[-0.5000,-0.5000,0.0000],[0.5000,-
0.5000,0.0000],[0.5000,0.5000,0.0000],
]
planarMeshObject = Mesh.Mesh(planarMesh)

El núcleo de la malla se encarga acerca de cómo crear una estructura de datos


correcto topológico por clasificación puntos coincidentes y bordes juntos.

Más adelante se verá cómo puede probar y examinar los datos de la malla.
Modelado
Para crear geometrías regulares que puede utilizar Python secuencia de
comandos BuildRegularGeoms.py.
import BuildRegularGeoms

Esta secuencia de comandos proporciona métodos para definir cuerpos de


rotación simple como elipsoides, esferas, cilindros, conos y toroides. Y también
tiene un método para crear un cubo simple. Para crear un toroide, por ejemplo,
puede hacer lo siguiente:
t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several
thousands triangles
m = Mesh.mesh(t)

Los dos primeros parámetros definen los radios del toroide y el tercer
parámetro es un factor de sub-sampling para cuántos triángulos se crean.
Cuanto mayor sea este valor la más suave y cuanto menor sea el más gruesa
el cuerpo es. La clase de malla proporciona un conjunto de funciones
booleanas que pueden utilizarse para fines de modelado. Proporciona la Unión,
la intersección y la diferencia de dos objetos de malla.
m1, m2 # are the input mesh objects
m3 = Mesh.mesh(m1) # create a copy of m1
m3.unite(m2) # union of m1 and m2, the result is stored in m3
m4 = Mesh.mesh(m1)
m4.intersect(m2) # intersection of m1 and m2
m5 = Mesh.mesh(m1)
m5.difference(m2) # the difference of m1 and m2
m6 = Mesh.mesh(m2)
m6.difference(m1) # the difference of m2 and m1, usually the result
is different to m5

Por último, un ejemplo completo que computa la intersección entre una esfera y
un cilindro que intersecta con la esfera.
import Mesh, BuildRegularGeoms
sphere = Mesh.mesh( BuildRegularGeoms.Sphere(5.0, 50) )
cylinder = Mesh.mesh( BuildRegularGeoms.Cylinder(2.0, 10.0, True, 1.0,
50) )
diff = sphere
diff.difference(cylinder)
d = FreeCAD.newDocument()
d.addObject("Mesh::Feature","Diff_Sphere_Cylinder").Mesh=diff
d.recompute()
Examinar y pruebas
Escribir sus propios algoritmos
Exportar
Incluso puede escribir la malla a un módulo de python:
m.write("D:/Develop/Projekte/FreeCAD/FreeCAD_0.7/Mod/Mesh/SavedMesh.py
")
import SavedMesh
m2 = Mesh.mesh(SavedMesh.faces)
Cosas relacionadas con la Gui
Probabilidades y extremos
Una extensa, debería relacionados difíciles de usar, fuente de malla con
secuencias de comandos son las secuencias de comandos de prueba de
unidad del módulo de malla. En esta unidad se llaman a métodos literalmente
todas las pruebas y todas las propiedades o atributos son ajustados. Así que si
eres lo suficientemente audaz, eche un vistazo el módulo de prueba de la
unidad .

Introducción
Nos aquí le explicará cómo controlar la Módulo de parte directamente desde el
intérprete de python FreeCAD, o desde cualquier secuencia de comandos
externo. Asegúrese de examinar el secuencias de comandos sección y la
Básico de secuencias de comandos de FreeCAD páginas si necesita obtener
más información acerca de cómo funciona el pitón de secuencias de comandos
en FreeCAD.
Primero para utilizar la funcionalidad de módulo de parte tiene que cargar el
módulo de parte en el intérprete: import Part
Diagrama de clase
Se trata de una visión UML acerca de las clases más importantes del módulo
de parte de:

Geometría
Los objetos geomtric son el bloque de creación de todos los objetos
topológicos:

GEOM Clase base de los objetos geométricos


LINE Una línea recta en 3D, definida por el punto de partida y y punto de
CIRCLE Círculo o segmento del círculo, definido por un punto central y el inicio y el
punto final
...... y pronto algunas más;-)
Topología
Los siguientes tipos de datos topológicos están disponibles:

Compuestos Un grupo de cualquier tipo de objeto topológico.


COMPSOLID A compuesto sólido es un conjunto de sólidos conectados por sus
caras. Se expande las nociones de WIRE y SHELL para sólidos.
SOLID Una parte del espacio limitado por proyectiles. Es tres dimensional.
SHELL A conjunto de caras conectadas por sus bordes. Un shell puede ser abierto
o cerrado.
FACE En 2D es parte de un plano; en 3D es parte de una superficie. Su geometría
se encuentra restringida (recorte) por contornos. Dos dimensiones es.
WIRE A conjunto de bordes conectados por sus vértices. Puede ser un contorno
abierto o cerrado dependiendo de si los bordes están vinculados o no.
EDGE A elemento topológico correspondiente a una curva sobrio. Un borde está
generalmente limitado por vértices. Tiene una dimensión.
VÉRTICE Un elemento topológico correspondiente a un punto. Tiene cero
dimensión.
SHAPE Un término genérico que abarca todo lo anterior.

Creación de tipos básicos


Breve descripción
Puede crear fácilmente objetos topológicos básicos con los métodos de
"make...()" desde el módulo de elemento:
b = Part.makeBox(100,100,100)
Part.show(b)

Un par de otros métodos de make...() disponibles:

makeBox(l,w,h,[p,d])--crear una casilla ubicada en p y apuntando en la dirección d


con las dimensiones (l, w, h). De forma predeterminada p es Vector(0,0,0) y d es
Vector(0,0,1)
makeCircle(radius,[p,d,angle1,angle2])--crear un círculo con un radio determinado.
Por p=Vector(0,0,0) de forma predeterminada, d=Vector(0,0,1), ángulo1 = 0 y
ángulo2 = 360
makeCompound(list)--crear un compuesto de una lista de las formas
makeCone(radius1,radius2,height,[p,d,angle])--crear un cono con un dado de radios
y altura. Por p=Vector(0,0,0) de forma predeterminada, el d=Vector(0,0,1) y el
ángulo = 360
makeCylinder(radius,height,[p,d,angle])--crear un cilindro con un radio determinado
y altura. Por p=Vector(0,0,0) de forma predeterminada, el d=Vector(0,0,1) y el
ángulo = 360
makeLine((x1,y1,z1),(x2,y2,z2))--crear una línea de dos puntos
makePlane(length,width,[p,d])--crear un plano con la longitud y anchura. Por defecto
p=Vector(0,0,0) y d=Vector(0,0,1)
makePolygon(list)--crear un polígono de una lista de puntos
makeSphere(radius,[p,d,angle1,angle2,angle3])--crear una esfera con un radio
determinado. Por defecto p=Vector(0,0,0), d=Vector(0,0,1), ángulo1 = 0, ángulo2 =
90 y ángulo3 = 360
makeTorus(radius1,radius2,[p,d,angle1,angle2,angle3])--crear un toro con un dado
de radios. Por defecto p=Vector(0,0,0), d=Vector(0,0,1), ángulo1 = 0, ángulo2 =
360 y ángulo3 = 360
Explicaciones detalladas
En primer lugar importar lo siguiente:
>>> import Part
>>> from FreeCAD import Base

¿Cómo crear un vértice?

>>> vertex = Part.Vertex((1,0,0))

vértice es un punto creado en x = 1, y = 0, z = 0 dado un objeto de vértice,


usted puede encontrar su ubicación como este:

>>> vertex.Point
Vector (1, 0, 0)

¿Cómo crear un borde?

Un borde es nada más que una línea con dos vértices:

>>> edge = Part.makeLine((0,0,0), (10,0,0))


>>> edge.Vertexes
[<Vertex object at 01877430>, <Vertex object at 014888E0>]

Nota: No se puede crear un borde, pasando dos vértices. Usted puede


encontrar la longitud y el centro de un borde como este:

>>> edge.Length
10.0
>>> edge.CenterOfMass
Vector (5, 0, 0)

¿Cómo crear un cable?

Un alambre puede crearse desde una lista de los bordes o incluso una lista de
hilos:

>>> edge1 = Part.makeLine((0,0,0), (10,0,0))


>>> edge2 = Part.makeLine((10,0,0), (10,10,0))
>>> wire1 = Part.Wire([edge1,edge2])
>>> edge3 = Part.makeLine((10,10,0), (0,10,0))
>>> edge4 = Part.makeLine((0,10,0), (0,0,0))
>>> wire2 = Part.Wire([edge3,edge4])
>>> wire3 = Part.Wire([wire1,wire2])
>>> wire3.Edges
[<Edge object at 016695F8>, <Edge object at 0197AED8>, <Edge object at
01828B20>,
<Edge object at 0190A788>]
>>> Part.show(wire3)

Part.Show(wire3) mostrará cuatro líneas como un cuadrado:

>>> wire3.Length
40.0
>>> wire3.CenterOfMass
Vector (5, 5, 0)
>>> wire3.isClosed()
True
>>> wire2.isClosed()
False

¿Cómo crear un rostro?

Sólo los rostros creados a partir de cables cerrados será válidos. En este
ejemplo, wire3 es un alambre cerrado pero wire2 no es un alambre cerrado
(véase más arriba)

>>> face = Part.Face(wire3)


>>> face.Area
99.999999999999972
>>> face.CenterOfMass
Vector (5, 5, 0)
>>> face.Length
40.0
>>> face.isValid()
True
>>> sface = Part.Face(wire2)
>>> face.isValid()
False

Sólo caras tendrá un área, no cables ni bordes.


¿Cómo crear un círculo?

círculo = Part.makeCircle(radius,[center,dir_normal,angle1,angle2])--crear un
círculo con un radio determinado

Por defecto, center=Vector(0,0,0), dir_normal=Vector(0,0,1), ángulo1 = 0 y


ángulo2 = 360. Se puede crear simplemente como un círculo como esto:

>>> circle = Part.makeCircle(10)


>>> circle.Curve
Circle (Radius : 10, Position : (0, 0, 0), Direction : (0, 0, 1))
Si desea crearla en cierta posición y con cierta dirección

>>> ccircle = Part.makeCircle(10, Base.Vector(10,0,0),


Base.Vector(1,0,0))
>>> ccircle.Curve
Circle (Radius : 10, Position : (10, 0, 0), Direction : (1, 0, 0))

ccircle se creará a distancia 10 de origen en x y estará mirando hacia el eje x.


Nota: makeCircle sólo acepta Base.Vector() de posición y normal, pero no de
tuplas. También puede crear parte del círculo dando el ángulo del comienzo y
ángulo de final como:

>>> from math import pi


>>> arc1 = Part.makeCircle(10, Base.Vector(0,0,0), Base.Vector(0,0,1),
0, 180)
>>> arc2 = Part.makeCircle(10, Base.Vector(0,0,0), Base.Vector(0,0,1),
180, 360)

Arc1 y arc2 conjuntamente harán un círculo. Deben ser los ángulos siempre en
grados, si tienes radianes simplemente conversión mediante la fórmula: grados
= radianes * 180/PI o utilizando el módulo de matemáticas de python (después
de hacer matemáticas de importación, por supuesto): grados =
math.degrees(radians)
¿Cómo crear un arco a lo largo de puntos?

Lamentablemente no existe ninguna función de makeArc, pero tenemos la


función Part.Arc para crear un arco a lo largo de tres puntos. Básicamente
puede suponerse como un arco uniéndose a punto de inicio y el punto final a lo
largo del punto medio. Part.Arc crea un objeto de arco en que .toShape() tiene
que ser llamado para obtener el objeto de borde, que generalmente es
producida por makeLine o makeCircle

>>> arc =
Part.Arc(Base.Vector(0,0,0),Base.Vector(0,5,0),Base.Vector(5,5,0))
>>> arc
<Arc object>
>>> arc_edge = arc.toShape()

Nota: Arco sólo acepta Base.Vector() de puntos pero no de tuplas. arc_edge es


lo que queremos que nos podemos mostrar utilizando Part.show(arc_edge). Si
desea que una pequeña porción de un círculo como un arco, es posible
también:
>>> from math import pi
>>> circle = Part.Circle(Base.Vector(0,0,0),Base.Vector(0,0,1),10)
>>> arc = Part.Arc(c,0,pi)

¿Cómo crear un polígono o una línea a lo largo de puntos?

Una línea a lo largo de múltiples puntos no es nada, pero la creación de un


alambre con múltiples aristas. función makePolygon toma una lista de puntos y
crea un alambre a lo largo de estos puntos:

>>> lshape_wire =
Part.makePolygon([Base.Vector(0,5,0),Base.Vector(0,0,0),Base.Vector(5,
0,0)])

¿Cómo crear un plano?

Plano es una superficie plana, lo que significa una cara en 2D


makePlane(length,width,[start_pnt,dir_normal])--crear un plano por defecto
start_pnt=Vector(0,0,0) y dir_normal=Vector(0,0,1). dir_normal=Vector(0,0,1),
se creará el eje z opuestas de plano. dir_normal=Vector(1,0,0) creará la cara
de plano eje x:

>>> plane = Part.makePlane(2,2)


>>> plane
<Face object at 028AF990>
>>> plane = Part.makePlane(2,2, Base.Vector(3,0,0),
Base.Vector(0,1,0))
>>> plane.BoundBox
BoundBox (3, 0, 0, 5, 0, 2)

BoundBox es un paralelepípedo que encierra el plano con una diagonal,


empezando en (3,0,0) y terminando en (5,0,2). Aquí el espesor de BoundBox
en el eje y es cero. Nota: makePlane sólo acepta Base.Vector() para start_pnt y
dir_normal pero no de tuplas
¿Cómo crear una elipse?

Para crear una elipse de allí son de varias maneras:


Part.Ellipse()

Crea una elipse con radio mayor 2 y radio menor 1 con el centro en (0,0,0)
Part.Ellipse(Ellipse)

Crear una copia de la elipse determinada


Part.Ellipse(S1,S2,Center)
Crea una elipse centrada en el centro de punto, donde el plano de la elipse se
define por el centro, S1 y S2, su eje principal se define por el centro y S1, su
radio mayor es la distancia entre el centro y S1 y su radio menor es la distancia
entre S2 y el eje principal.
Part.Ellipse(Center,MajorRadius,MinorRadius)

Crea una elipse con radios mayores y menores, MajorRadius y MinorRadius y


localizado en el plano definido por el centro y la normal (0,0,1)

>>> eli =
Part.Ellipse(Base.Vector(10,0,0),Base.Vector(0,5,0),Base.Vector(0,0,0)
)
>>> Part.show(eli.toShape())

En el código anterior hemos aprobado S1, S2 y centro. De forma similar a arco,


Ellipse también crea un objeto elipse pero no edge, así que necesitamos
convertirlo en arista a través de toShape() para mostrar

Nota: Arco sólo acepta Base.Vector() de puntos pero no de tuplas

>>> eli = Part.Ellipse(Base.Vector(0,0,0),10,5)


>>> Part.show(eli.toShape())

para el constructor de elipse anterior hemos aprobado Centro, MajorRadius y


MinorRadius
¿Cómo crear un aro?

makeTorus(radius1,radius2,[pnt,dir,angle1,angle2,angle])--crear un toro con un


dado de radios y ángulos. Por defecto puntos = vector (0,0,0), dir = vector
(0,0,1), ángulo1 = 0, ángulo1 = 360 y ángulo = 360

considere la posibilidad de un toro como pequeño círculo barrer a lo largo de un


gran círculo:

radius1 es el radio de cirlce grande, radius2 es el radio de un círculo pequeño,


puntos es el centro del Toro y dir es la dirección normal. ángulo1 y ángulo2 son
los ángulos en radianes para el pequeño círculo, para crear un arco que el
último ángulo de parámetro es hacer una sección de un toro:

>>> torus = Part.makeTorus(10, 2)

El código anterior creará un toro con 20(radius 10) de diámetro y espesor 4


(cirlce pequeño radio 2)
>>>
tor=Part.makeTorus(10,5,Base.Vector(0,0,0),Base.Vector(0,0,1),0,180)

El código anterior creará una división del Toro

>>>
tor=Part.makeTorus(10,5,Base.Vector(0,0,0),Base.Vector(0,0,1),0,360,18
0)

El código anterior, creará un toro de semi, sólo el último parámetro es


cambiado, es decir, el ángulo y ángulos restantes son valores predeterminados.

Dando el ángulo 180 creará un toro de 0 a 180, es decir, medio


¿Cómo hacer un cuadro o un paralelepípedo?

makeBox(length,width,height,[pnt,dir])--crear una casilla ubicada en puntos con


las dimensiones (longitud, anchura y altura)

Por defecto pnt=Vector(0,0,0) y dir=Vector(0,0,1)

>>> box = Part.makeBox(10,10,10)


>>> len(box.Vertexes)
8

¿Cómo hacer una esfera?

makeSphere (radio, [puntos, dir, ángulo1, ángulo2, ángulo3])--crear una esfera


con un radio determinado. Por defecto pnt=Vector(0,0,0), dir=Vector(0,0,1),
ángulo1 =-90, ángulo2 = 90 y ángulo3 = 360. ángulo1 y ángulo2 son la vertical
mínima y máxima de la esfera, ángulo3 es el diámetro de la esfera propia

>>> sphere = Part.makeSphere(10)


>>> hemisphere =
Part.makeSphere(10,Base.Vector(0,0,0),Base.Vector(0,0,1),-90,90,180)

¿Cómo hacer una bomba?

makeCylinder(radius,height,[pnt,dir,angle])--crear un cilindro con un radio


determinado y altura

Por defecto pnt=Vector(0,0,0),dir=Vector(0,0,1) y ángulo = 360

>>> cylinder = Part.makeCylinder(5,20)


>>> partCylinder =
Part.makeCylinder(5,20,Base.Vector(20,0,0),Base.Vector(0,0,1),180)
¿Cómo hacer un cono?

makeCone(radius1,radius2,height,[pnt,dir,angle])--crear un cono con dado


radios y altura

Por pnt=Vector(0,0,0) de forma predeterminada, el dir=Vector(0,0,1) y el ángulo


= 360

>>> cone = Part.makeCone(10,0,20)


>>> semicone =
Part.makeCone(10,0,20,Base.Vector(20,0,0),Base.Vector(0,0,1),180)

Operaciones booleanas
¿Cómo cortar una forma de otros?

Cut(...)
Difference of this and a given topo shape.

>>> cylinder =
Part.makeCylinder(3,10,Base.Vector(0,0,0),Base.Vector(1,0,0))
>>> sphere = Part.makeSphere(5,Base.Vector(5,0,0))
>>> diff = cylinder.cut(sphere)
>>> diff.Solids
[<Solid object at 018AB630>, <Solid object at 0D8CDE48>]
>>> diff.ShapeType
'Compound'

Patio de recreo: corte shapes.png Playground:cut.png


¿Cómo obtener común entre dos formas?

Common(...)
Intersection of this and a given topo shape.

>>> cylinder1 =
Part.makeCylinder(3,10,Base.Vector(0,0,0),Base.Vector(1,0,0))
>>> cylinder2 = Part.makeCylinder(3,10,Base.Vector(5,0,-
5),Base.Vector(0,0,1))
>>> common = cylinder1.common(cylinder2)

Cylinders.png de patio de recreo: común Playground:common.png


¿Cómo fusionar dos formas?

FUSE(...)
Union of this and a given topo shape.

>>> cylinder1 =
Part.makeCylinder(3,10,Base.Vector(0,0,0),Base.Vector(1,0,0))
>>> cylinder2 = Part.makeCylinder(3,10,Base.Vector(5,0,-
5),Base.Vector(0,0,1))
>>> fuse = cylinder1.fuse(cylinder2)
>>> fuse.Solids
[<Solid object at 0DA5B8A0>]

¿Cómo a la sección de un sólido con dar forma?

Section(...)
Section of this with a given topo shape.

devolverá una curva de intersección, un compuesto con bordes

>>> cylinder1 =
Part.makeCylinder(3,10,Base.Vector(0,0,0),Base.Vector(1,0,0))
>>> cylinder2 = Part.makeCylinder(3,10,Base.Vector(5,0,-
5),Base.Vector(0,0,1))
>>> section = cylinder1.section(cylinder2)
>>> section.Wires
[]
>>> section.Edges
[<Edge object at 0D87CFE8>, <Edge object at 019564F8>, <Edge object at
0D998458>,
<Edge object at 0D86DE18>, <Edge object at 0D9B8E80>, <Edge object
at 012A3640>,
<Edge object at 0D8F4BB0>]

Playground:Section.PNG

Explorando formas
Fácilmente puede explorar la estructura de datos topológicos:
import Part
b = Part.makeBox(100,100,100)
b.Wires
w = b.Wires[0]
w
w.Wires
w.Vertexes
Part.show(w)
w.Edges
e = w.Edges[0]
e.Vertexes
v = e.Vertexes[0]
v.Point

Escribiendo la línea de arriba en el intérprete de python, obtendrá una buena


comprensión de la estructura de los objetos de la parte. Aquí nuestro comando
makeBox() crea una forma sólida. Este sólido, como todos los de parte de
sólidos, contiene caras. Caras siempre contienen cables, que son listas de
aristas que bordean la cara. Cada cara tiene exactamente un alambre cerrado.
En el cable, podemos mirar cada arista por separado y dentro de cada arista,
podemos ver los vértices. Bordes rectos tienen sólo dos vértices, obviamente.
Parte vértices son formas OCC, pero tienen un atributo de punto que devuelve
un vector de FreeCAD agradable.
Explorar los bordes
En caso de una arista, que es una curva arbitraria, lo más probable es que
desee hacer un carácter. En FreeCAD los bordes son parametrizados por sus
longitudes. Eso significa que usted podrá caminar con una curva de borde por
su longitud:
import Part
anEdge = Part.makeBox(100,100,100).Edges[0] # make a box with 100mm
edge length and get the first edge
print anEdge.Length # get the length of the edge in mm (modeling unit)

Ahora puede acceder a muchas de las propiedades del borde mediante el uso
de la longitud como una posición. Esto significa que si el borde es 100 mm
durante mucho tiempo la posición de inicio es 0 y la posición final 100.
anEdge.tangentAt(0.0) # tangent direction at the beginning
anEdge.valueAt(0.0) # Point at the beginning
anEdge.valueAt(100.0) # Point at the end of the edge
anEdge.derivative1At(50.0) # first derivative of the curve in the
middle
anEdge.derivative2At(50.0) # second derivative of the curve in the
middle
anEdge.derivative3At(50.0) # third derivative of the curve in the
middle
anEdge.centerOfCurvatureAt(50) # center of the curvature for that
position
anEdge.curvatureAt(50.0) # the curvature
anEdge.normalAt(50) # normal vector at that position (if
defined)

Mediante la selección
Aquí vemos ahora cómo podemos utilizar la selección del usuario lo hizo en el
visor. En primer lugar creamos un cuadro y lo muestra en el Visor
import Part
Part.show(Part.makeBox(100,100,100))
Gui.SendMsgToActiveView("ViewFit")

Seleccione ahora algunas caras o bordes. Con esta secuencia de comandos


puede recorrer en iteración de todos los objetos seleccionados y sus elementos
de sub:
for o in Gui.Selection.getSelectionEx():
print o.ObjectName
for s in o.SubElementNames:
print "name: ",s
for s in o.SubObjects:
print "object: ",s

Seleccione algunas aristas y esta secuencia de comandos calcula la longitud:


length = 0.0
for o in Gui.Selection.getSelectionEx():
for s in o.SubObjects:
length += s.Length

print "Length of the selected edges:" ,length


Ejemplos
Creación de topología simple

Ahora crearemos una topología construyendo fuera de la geometría más


simple. Como un estudio de caso utilizamos una parte como se ve en la imagen
que consta de cuatro vértices, dos círculos y dos líneas.
Creación de geometría

En primer lugar tenemos que crear las distintas partes geométricas de este hilo.
Y tenemos que cuidar que los vértices de las piezas geométricas se encuentran
en el mismo posición. De lo contrario más tarde no podamos conectar las
piezas geométricas con una topología!

Por lo que creamos en primer lugar los puntos:


from FreeCAD import Base
V1 = Base.Vector(0,10,0)
V2 = Base.Vector(30,10,0)
V3 = Base.Vector(30,-10,0)
V4 = Base.Vector(0,-10,0)
Arco

Para crear un arco de círculo hacemos un ayudante punto y crear el arco de


círculo a través de tres puntos:
VC1 = Base.Vector(-10,0,0)
C1 = Part.Arc(V1,VC1,V4)
# and the second one
VC2 = Base.Vector(40,0,0)
C2 = Part.Arc(V2,VC2,V3)
Línea

Creó la línea puede ser muy simple fuera de los puntos:


L1 = Part.Line(V1,V2)
# and the second one
L2 = Part.Line(V4,V3)
Poniendo todos juntos

El último paso es colocar los elementos geométricos de base juntos y hornear


una forma topológica:
S1 = Part.Shape([C1,C2,L1,L2])
Hacer un prisma

Ahora el cable en una dirección de la extrusión y hacer una forma 3D real:


W = Part.Wire(S1.Edges)
P = W.extrude(Base.Vector(0,0,10))
La botella OCC
Un ejemplo típico se encuentra en la Página de inicio de OpenCasCade rápido
es cómo construir una botella. Este es un buen ejercicio para FreeCAD
demasiado. De hecho, usted puede seguir en nuestro siguiente ejemplo y la
página de la OCC, simultáneamente, entienda bien cómo se implementan las
estructuras de la OCC en FreeCAD.
La secuencia de comandos completa a continuación también se incluye en la
instalación de FreeCAD (dentro de la carpeta de mod/Part) y puede ser llamado
desde el intérprete de python escribiendo:
import Part
import MakeBottle
bottle = MakeBottle.makeBottle()
Part.show(bottle)
La secuencia de comandos completa

Aquí es la secuencia de comandos de MakeBottle completa:


import Part, FreeCAD, math
from FreeCAD import Base

def makeBottle(myWidth=50.0, myHeight=70.0, myThickness=30.0):


aPnt1=Base.Vector(-myWidth/2.,0,0)
aPnt2=Base.Vector(-myWidth/2.,-myThickness/4.,0)
aPnt3=Base.Vector(0,-myThickness/2.,0)
aPnt4=Base.Vector(myWidth/2.,-myThickness/4.,0)
aPnt5=Base.Vector(myWidth/2.,0,0)

aArcOfCircle = Part.Arc(aPnt2,aPnt3,aPnt4)
aSegment1=Part.Line(aPnt1,aPnt2)
aSegment2=Part.Line(aPnt4,aPnt5)
aEdge1=aSegment1.toShape()
aEdge2=aArcOfCircle.toShape()
aEdge3=aSegment2.toShape()
aWire=Part.Wire([aEdge1,aEdge2,aEdge3])

aTrsf=Base.Matrix()
aTrsf.rotateZ(math.pi) # rotate around the z-axis

aMirroredWire=aWire.transformGeometry(aTrsf)
myWireProfile=Part.Wire([aWire,aMirroredWire])
myFaceProfile=Part.Face(myWireProfile)
aPrismVec=Base.Vector(0,0,myHeight)
myBody=myFaceProfile.extrude(aPrismVec)
myBody=myBody.makeFillet(myThickness/12.0,myBody.Edges)
neckLocation=Base.Vector(0,0,myHeight)
neckNormal=Base.Vector(0,0,1)
myNeckRadius = myThickness / 4.
myNeckHeight = myHeight / 10
myNeck =
Part.makeCylinder(myNeckRadius,myNeckHeight,neckLocation,neckNormal)

myBody = myBody.fuse(myNeck)

faceToRemove = 0
zMax = -1.0

for xp in myBody.Faces:
try:
surf = xp.Surface
if type(surf) == Part.Plane:
z = surf.Position.z
if z > zMax:
zMax = z
faceToRemove = xp
except:
continue

myBody = myBody.makeThickness([faceToRemove],-myThickness/50 , 1.e-


3)

return myBody
Explicación detallada
import Part, FreeCAD, math
from FreeCAD import Base

Necesitamos, por supuesto, el módulo de parte, sino también el módulo de


FreeCAD.Base, que contiene estructuras básicas de FreeCAD como vectores y
matrices.
def makeBottle(myWidth=50.0, myHeight=70.0, myThickness=30.0):
aPnt1=Base.Vector(-myWidth/2.,0,0)
aPnt2=Base.Vector(-myWidth/2.,-myThickness/4.,0)
aPnt3=Base.Vector(0,-myThickness/2.,0)
aPnt4=Base.Vector(myWidth/2.,-myThickness/4.,0)
aPnt5=Base.Vector(myWidth/2.,0,0)

Aquí definimos nuestra función de makeBottle. Esta función puede ser llamada
sin argumentos, como lo hicimos anteriormente, en los valores que caso
predeterminado para anchura, altura, y se utilizará el espesor. A continuación,
definimos un par de puntos que se utilizará para la construcción de nuestro
perfil base.
aArcOfCircle = Part.Arc(aPnt2,aPnt3,aPnt4)
aSegment1=Part.Line(aPnt1,aPnt2)
aSegment2=Part.Line(aPnt4,aPnt5)

Aquí definimos realmente la geometría: un arco, hecho de 3 puntos y dos de


los segmentos de línea, hecha de 2 puntos.
aEdge1=aSegment1.toShape()
aEdge2=aArcOfCircle.toShape()
aEdge3=aSegment2.toShape()
aWire=Part.Wire([aEdge1,aEdge2,aEdge3])

¿Recuerde que la diferencia entre la geometría y las formas? Aquí construimos


las formas fuera de nuestra geometría de construcción. 3 los bordes (bordes
pueden ser rectos o curvos) y, a continuación, un cable hecho de esos tres
aristas.
aTrsf=Base.Matrix()
aTrsf.rotateZ(math.pi) # rotate around the z-axis
aMirroredWire=aWire.transformGeometry(aTrsf)
myWireProfile=Part.Wire([aWire,aMirroredWire])

Hasta ahora hemos construido un perfil de sólo la mitad. Es más fácil que
edificio todo el perfil del mismo modo, sólo podemos espejo de lo que hicimos y
pegue ambas partes juntos. Por lo que primero creamos una matriz. Una matriz
es una manera muy común para aplicar transformaciones a objetos en el
mundo 3D, ya que puede contener en una estructura de todas las
transformaciones básicas que pueden sufrir los objetos 3D (mover, rotar y
escalar). Aquí, después de que creamos la matriz, nos reflejarlo, y creamos una
copia de nuestro hilo con la matriz de transformación aplicada. Ahora tenemos
dos cables, y nos puede hacer un tercer cable fuera de ellos, ya que son de
cables realmente listas de aristas.
myFaceProfile=Part.Face(myWireProfile)
aPrismVec=Base.Vector(0,0,myHeight)
myBody=myFaceProfile.extrude(aPrismVec)
myBody=myBody.makeFillet(myThickness/12.0,myBody.Edges)

Ahora que tenemos un alambre cerrado, puede transformarse en una cara. Una
vez que tenemos una cara, nos podemos extrusión. Al hacerlo, realmente
hicimos un sólido. ¿A continuación, aplicamos un filete poco agradable a
nuestro objeto porque nos interesa un buen diseño, no nosotros?
neckLocation=Base.Vector(0,0,myHeight)
neckNormal=Base.Vector(0,0,1)
myNeckRadius = myThickness / 4.
myNeckHeight = myHeight / 10
myNeck =
Part.makeCylinder(myNeckRadius,myNeckHeight,neckLocation,neckNormal)

Entonces, el cuerpo de nuestra botella está fabricado, todavía tenemos que


crear un cuello. Por lo tanto, hacemos un nuevo sólido, con un cilindro.
myBody = myBody.fuse(myNeck)

La operación de fusibles, que, en otras aplicaciones, a veces se llama a la


Unión, es muy poderosa. Encargará de pegar lo que necesita para ser pegada
y quitar partes que deben eliminarse.
return myBody

A continuación, volvemos nuestra parte sólida como resultado de nuestra


función. Ese elemento sólido, como cualquier otra forma parte, puede ser
atribuido a un objeto en un documento de FreeCAD, con:
myObject =
FreeCAD.ActiveDocument.addObject("Part::Feature","myObject")
myObject.Shape = bottle

o, más simple:
Part.show(bottle)
Cargar y guardar
Hay varias maneras de guardar su trabajo en el módulo de parte. Por supuesto
puede guardar el documento de FreeCAD, pero también puede guardar objetos
de parte directamente a los formatos CAD comunes, tales como BREP, IGS,
STEP y STL.

Guardar una forma en un archivo es fácil. Hay disponibles de métodos


exportBrep(), exportIges(), exportStl() y exportStep() para todos los objetos de
forma. Por lo tanto, haciendo:
import Part
s = Part.makeBox(0,0,0,10,10,10)
s.exportStep("test.stp")

Esto ahorra nuestro cuadro en un archivo STEP. Para cargar un archivo BREP,
IGES o STEP, simplemente lo contrario:
import Part
s = Part.Shape()
s.read("test.stp")

Tenga en cuenta que importar o abrir archivos BREP, IGES o STEP también
puede hacerse directamente desde el archivo - > Abrir o archivo - > menú
Importar. En este momento exportar es todavía no es posible de esa manera,
pero debería estar ahí pronto.
< anterior: secuencias de comandos de malla

siguiente: malla a la parte >

Índice

Conversión de objetos de la parte a mallas


Convertir objetos de nivel superiores como Formas de parte en objetos más
simples, como mallas es una operación bastante simple, donde obtener
trianguladas todas las caras de un objeto Part. El resultado de esa triangulación
(mosaico), a continuación, se utiliza para construir una malla:
#let's assume our document contains one part object
import Mesh
faces = []
shape = FreeCAD.ActiveDocument.ActiveObject.Shape
triangles = shape.tessellate(1) # the number represents the precision
of the tessellation)
for tri in triangles[1]:
face = []
for i in range(3):
vindex = tri[i]
face.append(triangles[0][vindex])
faces.append(face)
m = Mesh.Mesh(faces)
Mesh.show(m)

A veces la triangulación de ciertas caras ofrecidas por OpenCascade es


bastante fea. Si la cara tiene un espacio rectangular de parámetro y no
contiene ningún agujeros o otras curvas de recorte también puede crear una
malla por cuenta propia:
import Mesh
def makeMeshFromFace(u,v,face):
(a,b,c,d)=face.ParameterRange
pts=[]
for j in range(v):
for i in range(u):
s=1.0/(u-1)*(i*b+(u-1-i)*a)
t=1.0/(v-1)*(j*d+(v-1-j)*c)
pts.append(face.valueAt(s,t))

mesh=Mesh.Mesh()
for j in range(v-1):
for i in range(u-1):

mesh.addFacet(pts[u*j+i],pts[u*j+i+1],pts[u*(j+1)+i])

mesh.addFacet(pts[u*(j+1)+i],pts[u*j+i+1],pts[u*(j+1)+i+1])

return mesh
Conversión de mallas a objetos de parte
Conversión de mallas a parte de objetos es una operación sumamente
importante en el trabajo de CAD, porque muy a menudo reciben datos 3D en
formato de malla de otras personas o van desde otras aplicaciones. Mallas son
muy prácticos representar la geometría de forma libre y grandes escenas
visuales, ya que es muy ligero, pero para CAD preferimos generalmente
objetos de nivel superiores que llevan mucha más información, tales como la
idea de sólido, o caras de curvas en lugar de triángulos.

Convertir mallas a esos objetos de nivel superiores (a cargo de la Módulo de


parte en FreeCAD) no es una operación fácil. Mallas pueden hacerse de miles
de triángulos (por ejemplo cuando generados por un escáner 3D), y habiendo
sólidos del mismo número de caras sería extremadamente pesado manipular.
Por lo que generalmente desea optimizar el objeto al convertir.
FreeCAD actualmente ofrece dos métodos para convertir mallas en objetos de
parte. El primer método es una conversión simple y directa, sin cualquier
optimización:
import Mesh,Part
mesh = Mesh.createTorus()
shape = Part.Shape()
shape.makeShapeFromMesh(mesh.Topology,0.05) # the second arg is the
tolerance for sewing
solid = Part.makeSolid(shape)
Part.show(solid)

El segundo método ofrece la posibilidad de considerar facetas de malla


coplanares cuando el ángulo entre ellas es en virtud de un determinado valor.
Esto permite construir mucho las formas más simples:
# let's assume our document contains one Mesh object
import Mesh,Part,MeshPart
faces = []
mesh = App.ActiveDocument.ActiveObject.Mesh
segments = mesh.getPlanes(0.00001) # use rather strict tolerance here

for i in segments:
if len(i) > 0:
# a segment can have inner holes
wires = MeshPart.wireFromSegment(mesh, i)
# we assume that the exterior boundary is that one with the
biggest bounding box
if len(wires) > 0:
ext=None
max_length=0
for i in wires:
if i.BoundBox.DiagonalLength > max_length:
max_length = i.BoundBox.DiagonalLength
ext = i

wires.remove(ext)
# all interior wires mark a hole and must reverse their
orientation, otherwise Part.Face fails
for i in wires:
i.reverse()

# make sure that the exterior wires comes as first in the lsit
wires.insert(0, ext)
faces.append(Part.Face(wires))

shell=Part.Compound(faces)
Part.show(shell)
#solid = Part.Solid(Part.Shell(faces))
#Part.show(solid)
FreeCAD es básicamente un collage de diferentes bibliotecas potentes, siendo
los más importantes openCascade , para la gestión y construcción de
geometría, Coin3d para mostrar la geometría, y Qt para poner todo esto en una
interfaz gráfica de usuario agradable.

La geometría que aparece en las vistas 3D de FreeCAD son prestados por la


biblioteca de Coin3D. Coin3D es una implementación de la OpenInventor
estándar. El software de openCascade también proporciona la misma
funcionalidad, pero se decidió, en los inicios de FreeCAD, no para utilizar el
Visor de openCascade integrada y más bien cambiar al más alto rendimiento
coin3D software.

OpenInventor es realmente un lenguaje de descripción de la escena 3D. La


escena que se describe en openInventor, a continuación, se procesa en
OpenGL en la pantalla. Coin3D se encarga de hacerlo, por lo que el
programador no es necesario hacer frente a llamadas de openGL complejas,
sólo tiene que le proporcione código válido de OpenInventor. La gran ventaja
es que openInventor es un estándar muy conocida y está bien documentado.

Uno de los grandes trabajos que FreeCAD se hace por usted es básicamente
traducir información de geometría de openCascade en lengua openInventor.

OpenInventor describe una escena 3D en forma de un scenegraph , como el


siguiente:
de imagen de Mentor de inventor

Un scenegraph openInventor describe todo lo que hace parte de una escena


3D, tales como la geometría, colores, materiales, luces, etc. y todo lo que
organiza los datos en una estructura clara y cómoda. Todo se puede agrupar
en subestructuras, lo que permite organizar el contenido de su escena bastante
la manera que desee. Aquí hay un ejemplo de un archivo openInventor

#Inventor V2.0 ascii

Separator {
RotationXYZ {
axis Z
angle 0
}
Transform {
translation 0 0 0.5
}
Separator {
Material {
diffuseColor 0.05 0.05 0.05
}
Transform {
rotation 1 0 0 1.5708
scaleFactor 0.2 0.5 0.2
}
Cylinder {
}
}
}

Como puede ver, la estructura es muy simple. Utilice separadores para


organizar los datos en bloques, un poco como sería organizar sus archivos en
carpetas. Cada instrucción afecta a lo que viene a continuación, por ejemplo los
dos primeros elementos de nuestro separador de raíz son una rotación y una
traducción, ambos afectará el elemento siguiente, que es un separador. En ese
separador, se define un material y transformación otro. Por lo tanto, nuestro
cilindro se verán afectado por ambas transformaciones, quien fue aplicada
directamente y uno de los que se aplicó a la separación de su padre.

También contamos con muchos otros tipos de elementos para organizar


nuestra escena, tales como grupos, switches o anotaciones. Podemos definir
materiales muy complejos para nuestros objetos, con colores, texturas, modos
de sombreado y transparencia. También podemos definir incluso de
movimiento, cámaras y luces. Incluso es posible incrustar piezas de secuencias
de comandos en archivos de openInventor, para definir comportamientos más
complejos.

Si estás interesado en aprender más sobre openInventor, la cabeza


directamente a su referencia más famoso, el Mentor de inventor .

En FreeCAD, normalmente, no necesitamos interactuar directamente con el


scenegraph de openInventor. Todos los objetos en un documento de FreeCAD,
siendo una malla, una forma de parte o cualquier otra cosa, obtiene
automáticamente convierte en código de openInventor y insertado en el
principal scenegraph que puede ver en una vista 3D. Ese scenegraph se
actualiza continuamente cuando usted hacer modificaciones, añadir o eliminar
objetos al documento. De hecho, cada objeto (en el espacio de la APP) tiene
un proveedor de vista (un objeto correspondiente en el espacio de Gui),
responsable de la emisión de código openInventor.
Pero hay muchas ventajas para poder acceder directamente a la scenegraph.
Por ejemplo, podemos cambiar temporalmente la aparición de un objeto, o
podemos añadir objetos a la escena que no tienen existencia real en el
documento FreeCAD, tales como la geometría de construcción, ayudantes,
sugerencias de gráficas o herramientas tales como manipuladores o en
pantalla información.

FreeCAD sí cuenta con varias herramientas para ver o modificar el código de


openInventor. Por ejemplo, el siguiente código python mostrará la
representación openInventor de un objeto seleccionado:
obj = FreeCAD.ActiveDocument.ActiveObject
viewprovider = obj.ViewObject
print viewprovider.toString()

, Pero también contamos con un módulo de python que permite el acceso


completo a cualquier cosa administrado por Coin3D, tales como nuestro
scenegraph FreeCAD. Por lo tanto, siga leyendo para Pivy .

Pivy es una biblioteca de enlace de python para Coin3d , usada por la


biblioteca de procesamiento de 3D de FreeCAD. Cuando se importan en un
intérprete de python ejecutándose, permite a diálogo directamente con
cualquier ejecución Coin3d scenegraphs , tales como las vistas 3D de
FreeCAD, o incluso crear otros nuevos. Pivy se incluye en la instalación
estándar de FreeCAD.

The coin library is divided into several pieces, coin itself, for manipulating
scenegraphs and bindings for several GUI systems, such as windows or, like in
our case, qt. Those modules are available to pivy too, depending if they are
present on the system. The coin module is always present, and it is what we will
use anyway, since we won't need to care about anchoring our 3D display in any
interface, it is already done by FreeCAD itself. All we need to do is this:
from pivy import coin
Accessing and modifying the scenegraph
We saw in the Scenegraph page how a typical Coin scene is organized.
Everything that appears in a FreeCAD 3D view is a coin scenegraph, organized
the same way. We have one root node, and all objects on the screen are its
children.

FreeCAD has an easy way to access the root node of a 3D view scenegraph:
sg = FreeCADGui.ActiveDocument.ActiveView.getScenegraph()
print sg

This will return the root node:


<pivy.coin.SoSelection; proxy of <Swig Object of type 'SoSelection *'
at 0x360cb60> >

We can inspect the immediate children of our scene:


for node in sg.getChilden()
print node

Some of those nodes, such as SoSeparators or SoGroups, can have children


themselves. The complete list of the available coin objects can be found in the
official coin documentation.

Probemos a añadir algo a nuestra scenegraph ahora. Agregaremos un cubo


rojo agradable:
col = coin.SoBaseColor()
col.rgb=(1,0,0)
cub = coin.SoCube()
myCustomNode = coin.SoSeparator()
myCustomNode.addChild(col)
myCustomNode.addChild(cub)
sg.addChild(myCustomNode)

y aquí está nuestro cubo rojo (nice). Ahora, probemos a esto:


col.rgb=(1,1,0)

¿Ver? todo es aún accesible y modificable sobre la marcha. Sin necesidad de


volver a calcular o repintado de nada, moneda se encarga de todo. Puede
añadir cosas a tu scenegraph, cambiar las propiedades, ocultar cosas, mostrar
objetos temporales, cualquier cosa. Por supuesto, esto solo afecta a la
visualización en la vista 3D. Esa pantalla obtiene recalculada por FreeCAD en
el archivo abierto, y cuando un objeto debe recálculo de al. Por lo tanto, si
cambia el aspecto de un objeto existente de FreeCAD, esos cambios se
perderán si el objeto se obtiene recalculado o cuando se vuelve a abrir el
archivo.

Es una clave para trabajar con scenegraphs en las secuencias de comandos


poder tener acceso a determinadas propiedades de los nodos que agregó
cuando sea necesario. Por ejemplo, si queríamos mover nuestro cubo, nos
habría añadido un nodo de SoTranslation a nuestro nodo personalizado, y
habría parecía como este:
col = coin.SoBaseColor()
col.rgb=(1,0,0)
trans = coin.SoTranslation()
trans.translation.setValue([0,0,0])
cub = coin.SoCube()
myCustomNode = coin.SoSeparator()
myCustomNode.addChild(col)
mtCustomNode.addChild(trans)
myCustomNode.addChild(cub)
sg.addChild(myCustomNode)

Recuerde que, en un scenegraph de openInventor, el orden es importante. Un


nodo afecta lo que viene a continuación, por lo que se puede decir algo como:
color rojo, cubo, color amarillo, esfera y obtendrá un cubo rojo y una esfera
amarilla. Si añadimos la traducción ahora a nuestro nodo personalizado
existente, sería venir después del cubo y no lo afectan. Si nos hubiéramos
insertado al crearlo, como aquí arriba, podemos ahora hacer:
trans.translation.setValue([2,0,0])

Y nuestro cubo saltaría 2 unidades a la derecha. Por último, eliminando algo se


hace con:
sg.removeChild(myCustomNode)
Utilizando los mecanismos de devolución de llamada
A mecanismo de devolución de llamada es un sistema que permita una
biblioteca que se esté utilizando, como nuestra biblioteca de moneda, para
llamar a realizar la seguridad, es decir, para llamar a una función de
determinados desde su objeto de python que se está ejecutando. Esto es muy
útil, porque de esa manera moneda puede notificarle si algún acontecimiento
específico se produce en la escena. Moneda puede ver cosas muy diferentes,
tales como la posición del ratón, clics de un botón del mouse, las teclas del
teclado que se presiona y muchas otras cosas.

FreeCAD ofrece una manera fácil de utilizar dichas devoluciones de llamada:


class ButtonTest:
def __init__(self):
self.view = FreeCADGui.ActiveDocument.ActiveView
self.callback =
self.view.addEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),sel
f.getMouseClick)
def getMouseClick(self,event_cb):
event = event_cb.getEvent()
if event.getState() == SoMouseButtonEvent.DOWN:
print "Alert!!! A mouse button has been improperly clicked!!!"

self.view.removeEventCallbackSWIG(SoMouseButtonEvent.getClassTypeId(),
self.callback)

ButtonTest()

La devolución de llamada debe iniciarse desde un objeto, porque ese objeto


todavía debe ejecutarse cuando se producirá la devolución de llamada. Véase
también una lista completa de posibles eventos y sus parámetros, o el
documentación de moneda oficial .

Documentación
Por desgracia pivy sí mismo todavía no tiene una documentación adecuada,
pero dado que es una traducción exacta de la moneda, con seguridad puede
utilizar la documentación de la moneda como referencia y utilizar el estilo de
python en lugar de c ++ estilo (por ejemplo SoFile::getClassTypeId() en pivy
sería SoFile.getClassId())

PyQt es un módulo de python que permite que las aplicaciones crear, acceder
y modificar python Qt aplicaciones de . Usted puede utilizarlo por ejemplo para
crear sus propios programas de Qt en python, o para obtener acceso y
modificar la interfaz de una aplicación que se ejecuta de qt, como FreeCAD.

Utilizando el módulo PyQt desde dentro de FreeCAD, usted tiene por lo tanto,
un control total sobre su interfaz. Se puede por ejemplo:

Agregar sus propios paneles, widgets y barras de herramientas


Agregar u ocultar elementos existentes de los paneles
Cambio, redirigir o agregar las conexiones entre todos esos elementos

PyQt tiene una extensa Documentación de la API , y hay muchos tutoriales en


la red que le enseñe cómo se obras.

Si desea trabajar en la interfaz de FreeCAD, la primera cosa a hacer es crear


una referencia a la ventana principal de FreeCAD:
import sys
from PyQt4 import QtGui
app = QtGui.qApp
mw = app.activeWindow()

A continuación, puede examinar por ejemplo a través de todos los widgets de la


interfaz:
for child in mw.children:
print 'widget name = ', child.getObjectName(), ', widget type = ',
child

Los widgets en una interfaz Qt generalmente están anidados en widgets del


"contenedores", por lo que los hijos de la ventana principal de nuestro propios
pueden contener a otros niños. Dependiendo del tipo de widget, hay un montón
de cosas que puede hacer. Compruebe la documentación de la API para ver lo
que es posible.
Agregar un nuevo widget, por ejemplo un dockWidget (que puede colocarse en
uno de los laterales del FreeCAD) es fácil:
myWidget = QtGui.QDockWidget()
mw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myWidget)

Podría agregar entonces cosas directamente a tu widget:


myWidget.setObjectName("my Nice New Widget")
myWidget.resize(QtCore.QSize(QtCore.QRect(0,0,300,100))) # sets size
of the widget
label = QtGui.QLabel(myWidget) # creates a label
label.setGeometry(QtCore.QRect(50,50,200,24)) # sets its size
label.setObjectName("myLabel") # sets its name, so it can be found
by name

, Pero es un método preferido crear un objeto de interfaz de usuario que hará


todo de la configuración de tu widget a la vez. La gran ventaja es que puede
ser un objeto de interfaz de usuario de tal creó gráficamente con el programa
de Qt Designer. Un objeto típico generado por el diseñador Qt es como esta:
class myWidget_Ui(object):
def setupUi(self, myWidget):
myWidget.setObjectName("my Nice New Widget")

myWidget.resize(QtCore.QSize(QtCore.QRect(0,0,300,100).size()).expande
dTo(myWidget.minimumSizeHint())) # sets size of the widget

self.label = QtGui.QLabel(myWidget) # creates a label


self.label.setGeometry(QtCore.QRect(50,50,200,24)) # sets its size
self.label.setObjectName("label") # sets its name, so it can be
found by name

def retranslateUi(self, draftToolbar): # built-in QT function that


manages translations of widgets
myWidget.setWindowTitle(QtGui.QApplication.translate("myWidget",
"My Widget", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("myWidget",
"Welcome to my new widget!", None, QtGui.QApplication.UnicodeUTF8))

Para usarlo, basta aplicarlo al widget recién creado como este:


myNewFreeCADWidget = QtGui.QDockWidget() # create a new dckwidget
myNewFreeCADWidget.ui = myWidget_Ui() # load the Ui script
myNewFreeCADWidget.ui.setupUi(myNewFreeCADWidget) # setup the ui
FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) #
add the widget to the main window

Además de los tipos de objeto estándar tales como anotaciones, mallas y


partes de objetos, FreeCAD también ofrece la posibilidad de sorprendente para
construir objetos 100% script python, llamados características de Python. Esos
objetos se comportan exactamente como cualquier otro objeto de FreeCAD,
puede ser guardados en un documento y abrió en cualquier otra instalación de
FreeCAD, ya que el código de python que define el objeto también se guarda
en el documento.

Características de Python siga la misma regla como todas las funciones de


FreeCAD: están separados en partes de la aplicación y GUI. La parte de app,
el objeto Document, define la geometría de nuestro objeto, mientras que su
parte de GUI, el objeto de proveedor de la vista, define cómo se dibujarán el
objeto en la pantalla. El objeto de proveedor de ver, como cualquier otra
característica de la FreeCAD, sólo está disponible cuando se ejecuta FreeCAD
en su propia interfaz gráfica. Hay varias propiedades y métodos disponibles
para construir su objeto. Las propiedades deben ser de cualquiera de los tipos
de propiedades predefinidos que ofrece el FreeCAD, y aparecerá en la ventana
de vista de la propiedad, por lo que pueden ser editados por el usuario. De esta
forma, los objetos FeaturePython son verdaderamente y totalmente
paramétricos. se pueden definir propiedades para el objeto y su ViewObject por
separado.

Ejemplo básico
En el siguiente ejemplo puede encontrarse en el
src/Mod/TemplatePyMod/FeaturePython.py archivo, junto con varios otros
ejemplos:
"Examples for a feature class and its view provider."

import FreeCAD, FreeCADGui


from pivy import coin

class Box:
def __init__(self, obj):
"Add some custom properties to our box feature"

obj.addProperty("App::PropertyLength","Length","Box","Length of the
box").Length=1.0

obj.addProperty("App::PropertyLength","Width","Box","Width of the
box").Width=1.0
obj.addProperty("App::PropertyLength","Height","Box",
"Height of the box").Height=1.0
obj.Proxy = self

def onChanged(self, fp, prop):


"Do something when a property has changed"
FreeCAD.Console.PrintMessage("Change property: " +
str(prop) + "\n")
def execute(self, fp):
"Do something when doing a recomputation, this method
is mandatory"
FreeCAD.Console.PrintMessage("Recompute Python Box
feature\n")

class ViewProviderBox:
def __init__(self, obj):
"Set this object to the proxy object of the actual view
provider"

obj.addProperty("App::PropertyColor","Color","Box","Color of the
box").Color=(1.0,0.0,0.0)
obj.Proxy = self

def attach(self, obj):


"Setup the scene sub-graph of the view provider, this
method is mandatory"
self.shaded = coin.SoGroup()
self.wireframe = coin.SoGroup()
self.scale = coin.SoScale()
self.color = coin.SoBaseColor()

data=coin.SoCube()
self.shaded.addChild(self.scale)
self.shaded.addChild(self.color)
self.shaded.addChild(data)
obj.addDisplayMode(self.shaded,"Shaded");
style=coin.SoDrawStyle()
style.style = coin.SoDrawStyle.LINES
self.wireframe.addChild(style)
self.wireframe.addChild(self.scale)
self.wireframe.addChild(self.color)
self.wireframe.addChild(data)
obj.addDisplayMode(self.wireframe,"Wireframe");
self.onChanged(obj,"Color")

def updateData(self, fp, prop):


"If a property of the handled feature has changed we
have the chance to handle this here"
# fp is the handled feature, prop is the name of the
property that has changed
l = fp.getPropertyByName("Length")
w = fp.getPropertyByName("Width")
h = fp.getPropertyByName("Height")
self.scale.scaleFactor.setValue(l,w,h)
pass

def getDisplayModes(self,obj):
"Return a list of display modes."
modes=[]
modes.append("Shaded")
modes.append("Wireframe")
return modes

def getDefaultDisplayMode(self):
"Return the name of the default display mode. It must
be defined in getDisplayModes."
return "Shaded"

def setDisplayMode(self,mode):
"Map the display mode defined in attach with those
defined in getDisplayModes.
Since they have the same names nothing needs to be
done. This method is optional"
return mode

def onChanged(self, vp, prop):


"Here we can do something when a single property got
changed"
FreeCAD.Console.PrintMessage("Change property: " +
str(prop) + "\n")
if prop == "Color":
c = vp.getPropertyByName("Color")
self.color.rgb.setValue(c[0],c[1],c[2])

def getIcon(self):
"Return the icon in XMP format which will appear in the
tree view. This method is
optional and if not defined a default icon is shown."
return """
/* XPM */
static const char * ViewProviderBox_xpm[] = {
"16 16 6 1",
" c None",
". c #141010",
"+ c #615BD2",
"@ c #C39D55",
"# c #000000",
"$ c #57C355",
" ........",
" ......++..+..",
" .@@@@.++..++.",
" .@@@@.++..++.",
" .@@ .++++++.",
" ..@@ .++..++.",
"###@@@@ .++..++.",
"##$.@@$#.++++++.",
"#$#$.$$$........",
"#$$####### ",
"#$$#$$$$$# ",
"#$$#$$$$$# ",
"#$$#$$$$$# ",
" #$#$$$$$# ",
" ##$$$$$# ",
" ####### "};
"""

def __getstate__(self):
"When saving the document this object gets stored using
Python's cPickle module.
Since we have some un-pickable here -- the Coin stuff
-- we must define this method
to return a tuple of all pickable objects or None."
return None

def __setstate__(self,state):
"When restoring the pickled object from document we
have the chance to set some internals here.
Since no data were pickled nothing needs to be done
here."
return None

def makeBox():
FreeCAD.newDocument()
a=FreeCAD.ActiveDocument.addObject("App::FeaturePython","Box")
Box(a)
ViewProviderBox(a.ViewObject)
Propiedades disponibles
Las propiedades son la verdadera creación de piedras de objetos
FeaturePython. A través de ellos, el usuario podrá interactuar y modificar su
objeto. Después de crear un nuevo objeto de FeaturePython en el documento
(a=FreeCAD.ActiveDocument.addObject("App::FeaturePython","Box")), puede
obtener una lista de las propiedades disponibles mediante la emisión de:
a.supportedProperties()

Obtendrá una lista de propiedades disponibles:


App::PropertyBool
App::PropertyFloat
App::PropertyFloatList
App::PropertyFloatConstraint
App::PropertyAngle
App::PropertyDistance
App::PropertyInteger
App::PropertyIntegerConstraint
App::PropertyPercent
App::PropertyEnumeration
App::PropertyIntegerList
App::PropertyString
App::PropertyStringList
App::PropertyLink
App::PropertyLinkList
App::PropertyMatrix
App::PropertyVector
App::PropertyVectorList
App::PropertyPlacement
App::PropertyPlacementLink
App::PropertyColor
App::PropertyColorList
App::PropertyMaterial
App::PropertyPath
App::PropertyFile
App::PropertyFileIncluded
Part::PropertyPartShape
Part::PropertyFilletContour
Part::PropertyCircle
Otro ejemplo más complejo
Este ejemplo hace uso de la Módulo de parte para crear un octaedro, a
continuación, crea su representación de moneda con pivy.

En primer lugar es el propio objeto de documento:


import FreeCAD, FreeCADGui, Part

class Octahedron:
def __init__(self, obj):
"Add some custom properties to our box feature"

obj.addProperty("App::PropertyLength","Length","Octahedron","Length of
the octahedron").Length=1.0

obj.addProperty("App::PropertyLength","Width","Octahedron","Width of
the octahedron").Width=1.0
obj.addProperty("App::PropertyLength","Height","Octahedron",
"Height of the octahedron").Height=1.0

obj.addProperty("Part::PropertyPartShape","Shape","Octahedron", "Shape
of the octahedron")
obj.Proxy = self

def execute(self, fp):


# Define six vetices for the shape
v1 = FreeCAD.Vector(0,0,0)
v2 = FreeCAD.Vector(fp.Length,0,0)
v3 = FreeCAD.Vector(0,fp.Width,0)
v4 = FreeCAD.Vector(fp.Length,fp.Width,0)
v5 = FreeCAD.Vector(fp.Length/2,fp.Width/2,fp.Height/2)
v6 = FreeCAD.Vector(fp.Length/2,fp.Width/2,-fp.Height/2)

# Make the wires/faces


f1 = self.make_face(v1,v2,v5)
f2 = self.make_face(v2,v4,v5)
f3 = self.make_face(v4,v3,v5)
f4 = self.make_face(v3,v1,v5)
f5 = self.make_face(v2,v1,v6)
f6 = self.make_face(v4,v2,v6)
f7 = self.make_face(v3,v4,v6)
f8 = self.make_face(v1,v3,v6)
shell=Part.makeShell([f1,f2,f3,f4,f5,f6,f7,f8])
solid=Part.makeSolid(shell)
fp.Shape = solid

# helper mehod to create the faces


def make_face(self,v1,v2,v3):
wire = Part.makePolygon([v1,v2,v3,v1])
face = Part.Face(wire)
return face

A continuación, contamos con el objeto de proveedor de vista, responsable


para mostrar el objeto en la escena 3D:
class ViewProviderOctahedron:
def __init__(self, obj):
"Set this object to the proxy object of the actual view
provider"

obj.addProperty("App::PropertyColor","Color","Octahedron","Color of
the octahedron").Color=(1.0,0.0,0.0)
obj.Proxy = self

def attach(self, obj):


"Setup the scene sub-graph of the view provider, this method
is mandatory"
self.shaded = coin.SoGroup()
self.wireframe = coin.SoGroup()
self.scale = coin.SoScale()
self.color = coin.SoBaseColor()

self.data=coin.SoCoordinate3()
self.face=coin.SoIndexedLineSet()

self.shaded.addChild(self.scale)
self.shaded.addChild(self.color)
self.shaded.addChild(self.data)
self.shaded.addChild(self.face)
obj.addDisplayMode(self.shaded,"Shaded");
style=coin.SoDrawStyle()
style.style = coin.SoDrawStyle.LINES
self.wireframe.addChild(style)
self.wireframe.addChild(self.scale)
self.wireframe.addChild(self.color)
self.wireframe.addChild(self.data)
self.wireframe.addChild(self.face)
obj.addDisplayMode(self.wireframe,"Wireframe");
self.onChanged(obj,"Color")

def updateData(self, fp, prop):


"If a property of the handled feature has changed we have the
chance to handle this here"
# fp is the handled feature, prop is the name of the property
that has changed
if prop == "Shape":
s = fp.getPropertyByName("Shape")
self.data.point.setNum(6)
cnt=0
for i in s.Vertexes:
self.data.point.set1Value(cnt,i.X,i.Y,i.Z)
cnt=cnt+1

self.face.coordIndex.set1Value(0,0)
self.face.coordIndex.set1Value(1,1)
self.face.coordIndex.set1Value(2,2)
self.face.coordIndex.set1Value(3,-1)

self.face.coordIndex.set1Value(4,1)
self.face.coordIndex.set1Value(5,3)
self.face.coordIndex.set1Value(6,2)
self.face.coordIndex.set1Value(7,-1)

self.face.coordIndex.set1Value(8,3)
self.face.coordIndex.set1Value(9,4)
self.face.coordIndex.set1Value(10,2)
self.face.coordIndex.set1Value(11,-1)

self.face.coordIndex.set1Value(12,4)
self.face.coordIndex.set1Value(13,0)
self.face.coordIndex.set1Value(14,2)
self.face.coordIndex.set1Value(15,-1)

self.face.coordIndex.set1Value(16,1)
self.face.coordIndex.set1Value(17,0)
self.face.coordIndex.set1Value(18,5)
self.face.coordIndex.set1Value(19,-1)

self.face.coordIndex.set1Value(20,3)
self.face.coordIndex.set1Value(21,1)
self.face.coordIndex.set1Value(22,5)
self.face.coordIndex.set1Value(23,-1)

self.face.coordIndex.set1Value(24,4)
self.face.coordIndex.set1Value(25,3)
self.face.coordIndex.set1Value(26,5)
self.face.coordIndex.set1Value(27,-1)

self.face.coordIndex.set1Value(28,0)
self.face.coordIndex.set1Value(29,4)
self.face.coordIndex.set1Value(30,5)
self.face.coordIndex.set1Value(31,-1)

def getDisplayModes(self,obj):
"Return a list of display modes."
modes=[]
modes.append("Shaded")
modes.append("Wireframe")
return modes

def getDefaultDisplayMode(self):
"Return the name of the default display mode. It must be
defined in getDisplayModes."
return "Shaded"

def setDisplayMode(self,mode):
return mode

def onChanged(self, vp, prop):


"Here we can do something when a single property got changed"
FreeCAD.Console.PrintMessage("Change property: " + str(prop)
+ "\n")
if prop == "Color":
c = vp.getPropertyByName("Color")
self.color.rgb.setValue(c[0],c[1],c[2])

def getIcon(self):
return """
/* XPM */
static const char * ViewProviderBox_xpm[] = {
"16 16 6 1",
" c None",
". c #141010",
"+ c #615BD2",
"@ c #C39D55",
"# c #000000",
"$ c #57C355",
" ........",
" ......++..+..",
" .@@@@.++..++.",
" .@@@@.++..++.",
" .@@ .++++++.",
" ..@@ .++..++.",
"###@@@@ .++..++.",
"##$.@@$#.++++++.",
"#$#$.$$$........",
"#$$####### ",
"#$$#$$$$$# ",
"#$$#$$$$$# ",
"#$$#$$$$$# ",
" #$#$$$$$# ",
" ##$$$$$# ",
" ####### "};
"""

def __getstate__(self):
return None
def __setstate__(self,state):
return None

Por último, una vez que nuestro objeto y su viewobject se definen, sólo
necesitamos a llamarlos:
FreeCAD.newDocument()

a=FreeCAD.ActiveDocument.addObject("App::FeaturePython","Octahedron")
Octahedron(a)
ViewProviderOctahedron(a.ViewObject)
Hacer los objetos seleccionables
Si desea realizar su objeto seleccionable, o al menos una parte del mismo,
haciendo clic en él en el área de visualización, debe incluir su geometría de
moneda dentro de un nodo de SoFCSelection. Si el objeto tiene una
representación compleja, con widgets, anotaciones, etc., puede incluir sólo una
parte del mismo en un SoFCSelection. Todo lo que es un SoFCSelection se
analiza constantemente por FreeCAD para detectar la selección y preselección,
así que tiene sentido tratar de no sobrecargar el con análisis innecesarios. Esto
es lo que haría para incluir un self.face en el ejemplo anterior:
selectionNode = coin.SoType.fromName("SoFCSelection").createInstance()
selectionNode.documentName.setValue(FreeCAD.ActiveDocument.Name)
selectionNode.objectName.setValue(obj.Object.Name) # here obj is the
ViewObject, we need its associated App Object
selectionNode.subElementName.setValue("Face")
selectNode.addChild(self.face)
...
self.shaded.addChild(selectionNode)
self.wireframe.addChild(selectionNode)

Simplemente, se crea un nodo de SoFCSelection, agregar los nodos de la


geometría a la misma, luego que lo agregue a su nodo principal, en lugar de
agregar los nodos de geometría directamente.

Trabajar con formas simples


Si su objeto paramétrico salidas simplemente una forma, no es necesario
utilizar un objeto de proveedor de vista. La forma se mostrará mediante
representación de forma estándar de FreeCAD:
class Line:
def __init__(self, obj):
"App two point properties"
obj.addProperty("App::PropertyVector","p1","Line","Start point")
obj.addProperty("App::PropertyVector","p2","Line","End
point").p2=FreeCAD.Vector(1,0,0)
obj.Proxy = self
def execute(self, fp):
"Print a short message when doing a recomputation, this method
is mandatory"
fp.Shape = Part.makeLine(fp.p1,fp.p2)

a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Line")
Line(a)
a.ViewObject.Proxy=0 # just set it to something different from None
(this assignment is needed to run an internal notification)

FreeCAD tiene la habilidad increíble para ser importables como un módulo de


python en otros programas o en una consola de python independiente, junto
con todos sus módulos y componentes. Incluso es posible importar la GUI de
FreeCAD como módulo de python--con algunas restricciones, sin embargo.
Utilizando FreeCAD sin interfaz gráfica de usuario
Una aplicación primera, directa, fácil y útil, que puede hacer que esto es
importar documentos de FreeCAD en su programa. En el ejemplo siguiente,
podrá importar la geometría de la pieza de un documento de FreeCAD en
licuadora. Aquí es la secuencia de comandos completa. Espero que usted se
va impresionado por su simplicidad:
FREECADPATH = '/opt/FreeCAD/lib' # path to your FreeCAD.so or
FreeCAD.dll file
import Blender, sys
sys.path.append(FREECADPATH)

def import_fcstd(filename):
try:
import FreeCAD
except ValueError:
Blender.Draw.PupMenu('Error%t|FreeCAD library not found. Please
check the FREECADPATH variable in the import script is correct')
else:
scene = Blender.Scene.GetCurrent()
import Part
doc = FreeCAD.open(filename)
objects = doc.Objects
for ob in objects:
if ob.Type[:4] == 'Part':
shape = ob.Shape
if shape.Faces:
mesh = Blender.Mesh.New()
rawdata = shape.tessellate(1)
for v in rawdata[0]:
mesh.verts.append((v.x,v.y,v.z))
for f in rawdata[1]:
mesh.faces.append.append(f)
scene.objects.new(mesh,ob.Name)
Blender.Redraw()

def main():
Blender.Window.FileSelector(import_fcstd, 'IMPORT FCSTD',
Blender.sys.makename(ext='.fcstd'))

# This lets you import the script without running it


if __name__=='__main__':
main()

La parte primera, importante es asegurarse de que python encontrará nuestra


biblioteca de FreeCAD. Una vez que lo encuentra, todos los módulos de
FreeCAD tales como elemento, que vamos a usar también estará disponibles
automáticamente. Por lo que simplemente tomamos la variable sys.path, que
es donde python busca módulos, y acompañamos a la ruta de acceso de lib
FreeCAD. Esta modificación es sólo temporal y se perderá cuando te cerramos
nuestro intérprete de python. Otra manera podría estar haciendo un vínculo a la
biblioteca de FreeCAD en uno de la pitón rutas de acceso de búsqueda.
Mantuvo la ruta de acceso en una constante (FREECADPATH), así que habrá
más fácil para que otro usuario de la secuencia de comandos configurarlo a su
propio sistema.

Una vez que estamos seguros de que se cargue la biblioteca (el bloque try /
excepto la secuencia), podemos ahora trabajar con FreeCAD, del mismo modo
como nos haría dentro intérprete de python del propio FreeCAD. Abrimos el
documento de FreeCAD que se pasa a nosotros por la función main(), y hacer
una lista de sus objetos. Entonces, como hemos escogido sólo a la atención
sobre la geometría de la pieza, verificamos si la propiedad Type de cada objeto
contiene "Parte", entonces nos tesselate se.

Los tesselation producen una lista de vértices y una lista de caras definido por
índices de vértices. Esto es perfecto, ya que es exactamente de la misma
manera como licuadora define mallas. Por lo tanto, nuestra tarea es
ridículamente simple, que solo añadimos el contenido de ambas listas a las
caras de una malla de blender y verts. Cuando todo está hecho, nosotros sólo
repintar la pantalla, y eso es todo!

Por supuesto, este script es muy simple (en realidad hice una más avanzada
aquí), puede que desee extender, por ejemplo importación de malla objetos
demasiado o importación de parte de la geometría que no tiene caras, o
importar otros formatos de archivo que se puede leer FreeCAD. También
puede exportar la geometría a un documento de FreeCAD, que puede hacerse
de la misma manera. También puede que desee crear un cuadro de diálogo,
por lo que el usuario puede elegir lo que debe importar, etc.... La belleza de
todo esto en realidad reside en el hecho de que permita que FreeCAD hacer el
suelo trabajar al presentar sus resultados en el programa de su elección.
Uso de FreeCAD con la interfaz gráfica de usuario
Desde la versión 4.2 sobre Qt tiene la capacidad de intrigante para incrustar
dependientes de la GUI de Qt plugins en las aplicaciones de host no Qt y
compartir el bucle de eventos del host.

Especialmente, para FreeCAD esto significa que pueden importarse desde


dentro de otra aplicación con su interfaz de usuario completa donde la
aplicación host tiene control total sobre FreeCAD, entonces.

El código de python todo para lograr que tiene sólo dos líneas
import FreeCADGui
FreeCADGui.showMainWindow()

Si la aplicación host se basa en Qt esta solución debe funcionar en todas las


plataformas que soporta Qt. No obstante, el host debe vincular la misma
versión de Qt que FreeCAD porque de lo contrario podría ejecutar en errores
de tiempo de ejecución inesperado.

Para las aplicaciones no Qt, sin embargo, existen algunas limitaciones que
debe tener en cuenta. Probablemente, esta solución no funciona junto con
todos los otros kits de herramientas. Para Windows funciona siempre y cuando
la aplicación host se basa directamente en Win32 o cualquier otro Kit de
herramientas que utiliza internamente la API de Win32, como wxWidgets, MFC
o WinForms. A fin de hacerlo funcionar bajo X 11 en el host de aplicación debe
vincular la biblioteca "Wittgenstein".

Tenga en cuenta, para cualquier aplicación de consola de que esta solución por
supuesto no funciona porque no hay ningún lazo de evento que se ejecuta.

Esta página contiene ejemplos, piezas, fragmentos de código de python


FreeCAD recogido de experiencias de los usuarios y los debates en los foros.
Leer y utilizarlo como un punto de partida para sus propias secuencias de
comandos...

Un archivo de InitGui.py típico


Cada módulo debe contener, además de su archivo de módulo principal, un
archivo de InitGui.py, responsable de insertar el módulo en el Gui principal.
Este es un ejemplo de una simple.
class ScriptWorkbench (Workbench):
MenuText = "Scripts"
def Initialize(self):
import Scripts # assuming Scripts.py is your module
list = ["Script_Cmd"] # That list must contain command names,
that can be defined in Scripts.py
self.appendToolbar("My Scripts",list)

Gui.addWorkbench(ScriptWorkbench())
Un archivo de módulo típico
Este es un ejemplo de un archivo de módulo principal, que contiene todo lo que
hace de su módulo. Es el archivo de Scripts.py invocado por el ejemplo
anterior. Aquí puede tener todos los comandos personalizados.
import FreeCAD, FreeCADGui

class ScriptCmd:
def Activated(self):
# Here your write what your ScriptCmd does...
FreeCAD.Console.PrintMessage('Hello, World!')
def GetResources(self):
return {'Pixmap' : 'path_to_an_icon/myicon.png', 'MenuText':
'Short text', 'ToolTip': 'More detailed text'}

FreeCADGui.addCommand('Script_Cmd', ScriptCmd())
Importar un nuevo tipo de fichero
Es fácil hacer un importador para un nuevo tipo de fichero en FreeCAD.
FreeCAD no considerar la posibilidad de que importar datos en un documento
abierto, sino que simplemente puede directamente abrir el nuevo tipo de
fichero. Por lo tanto lo que tienes que hacer es agregar la nueva extensión de
archivo a la lista de FreeCAD de extensiones conocidas y escribir el código que
leerá el archivo y crear los objetos FreeCAD que desea:

Esta línea se debe agregar al archivo InitGui.py para agregar la nueva


extensión de archivo a la lista:
# Assumes Import_Ext.py is the file that has the code for opening and
reading .ext files
FreeCAD.addImportType("Your new File Type (*.ext)","Import_Ext")

A continuación, en el archivo Import_Ext.py:


def open(filename):
doc=App.newDocument()
# here you do all what is needed with filename, read, classify
data, create corresponding FreeCAD objects
doc.recompute()

Para exportar el documento a algún tipo de fichero nuevo funciona del mismo
modo, salvo que utilice:
FreeCAD.addExportType("Your new File Type (*.ext)","Export_Ext")
Agregar una línea
Una línea simplemente tiene 2 puntos.
import Part,PartGui
doc=App.activeDocument()
# add a line element to the document and set its points
l=Part.Line()
l.StartPoint=(0.0,0.0,0.0)
l.EndPoint=(1.0,1.0,1.0)
doc.addObject("Part::Feature","Line").Shape=l.toShape()
doc.recompute()
Adición de un polígono
Un polígono es simplemente un conjunto de segmentos de línea conectados
(una polilínea en AutoCAD). No es necesario ser cerrado.
import Part,PartGui
doc=App.activeDocument()
n=list()
# create a 3D vector, set its coordinates and add it to the list
v=App.Vector(0,0,0)
n.append(v)
v=App.Vector(10,0,0)
n.append(v)
#... repeat for all nodes
# Create a polygon object and set its nodes
p=doc.addObject("Part::Polygon","Polygon")
p.Nodes=n

doc.recompute()
Adición y eliminación de un objeto a un grupo
doc=App.activeDocument()
grp=doc.addObject("App::DocumentObjectGroup", "Group")
lin=doc.addObject("Part::Feature", "Line")
grp.addObject(lin) # adds the lin object to the group grp
grp.removeObject(lin) # removes the lin object from the group grp

Nota: Incluso puede agregar otros grupos a un grupo...


Adición de una malla
import Mesh
doc=App.activeDocument()
# create a new empty mesh
m = Mesh.Mesh()
# build up box out of 12 facets
m.addFacet(0.0,0.0,0.0, 0.0,0.0,1.0, 0.0,1.0,1.0)
m.addFacet(0.0,0.0,0.0, 0.0,1.0,1.0, 0.0,1.0,0.0)
m.addFacet(0.0,0.0,0.0, 1.0,0.0,0.0, 1.0,0.0,1.0)
m.addFacet(0.0,0.0,0.0, 1.0,0.0,1.0, 0.0,0.0,1.0)
m.addFacet(0.0,0.0,0.0, 0.0,1.0,0.0, 1.0,1.0,0.0)
m.addFacet(0.0,0.0,0.0, 1.0,1.0,0.0, 1.0,0.0,0.0)
m.addFacet(0.0,1.0,0.0, 0.0,1.0,1.0, 1.0,1.0,1.0)
m.addFacet(0.0,1.0,0.0, 1.0,1.0,1.0, 1.0,1.0,0.0)
m.addFacet(0.0,1.0,1.0, 0.0,0.0,1.0, 1.0,0.0,1.0)
m.addFacet(0.0,1.0,1.0, 1.0,0.0,1.0, 1.0,1.0,1.0)
m.addFacet(1.0,1.0,0.0, 1.0,1.0,1.0, 1.0,0.0,1.0)
m.addFacet(1.0,1.0,0.0, 1.0,0.0,1.0, 1.0,0.0,0.0)
# scale to a edge langth of 100
m.scale(100.0)
# add the mesh to the active document
me=doc.addObject("Mesh::Feature","Cube")
me.Mesh=m
Adición de un arco o un círculo
import Part
doc = App.activeDocument()
c = Part.Circle()
c.Radius=10.0
f = doc.addObject("Part::Feature", "Circle") # create a document with
a circle feature
f.Shape = c.toShape() # Assign the circle shape to the shape property
doc.recompute()
Acceso y cambio de representación de un objeto
Cada objeto en un documento de FreeCAD tiene un objeto de representación
de vista asociados que almacena todos los parámetros que definen cómo
aparece el objeto, como color, ancho, etc....
gad=Gui.activeDocument() # access the active document containing all
# view representations of the features in
the
# corresponding App document

v=gad.getObject("Cube") # access the view representation to the


Mesh feature 'Cube'
v.ShapeColor # prints the color to the console
v.ShapeColor=(1.0,1.0,1.0) # sets the shape color to white
Observando los eventos de mouse (ratón) en el visor 3D a
través de Python
La estructura del inventor permite agregar uno o más nodos de devolución de
llamada para el scenegraph del visor. Un nodo de devolución de llamada se
instala de forma predeterminada en FreeCAD por el visor que permite añadir
funciones de C++ globales o estáticas. En Python adecuado vinculante algunos
métodos son proporcionados para hacer uso de esta técnica desde dentro de
código Python.
App.newDocument()
v=Gui.activeDocument().activeView()

#This class logs any mouse button events. As the registered callback
function fires twice for 'down' and
#'up' events we need a boolean flag to handle this.
class ViewObserver:
def logPosition(self, info):
down = (info["State"] == "DOWN")
pos = info["Position"]
if (down):
FreeCAD.Console.PrintMessage("Clicked on position:
("+str(pos[0])+", "+str(pos[0])+")\n")

o = ViewObserver()
c = v.addEventCallback("SoMouseButtonEvent",o.logPosition)

Ahora, escoja en algún lugar en el área en el visor 3D y observar los mensajes


en la ventana de salida. Para finalizar la llamada justa de observación
v.removeEventCallback("SoMouseButtonEvent",c)

Se admiten los siguientes tipos de eventos

SoEvent--todo tipo de eventos


SoButtonEvent--todos botón del ratón y eventos clave
SoLocation2Event--movimiento 2D eventos (normalmente los movimientos de
ratón)
SoMotion3Event--eventos de movimiento 3D (normalmente spaceball)
SoKeyboradEvent--clave hacia abajo y eventos
SoMouseButtonEvent--botón del ratón hacia abajo y eventos
SoSpaceballButtonEvent--spaceball botón hacia abajo y eventos

La función de Python que se puede registrar con addEventCallback() espera un


diccionario. Dependiendo del evento observado el diccionario puede contener
diferentes claves.

Para todos los eventos tiene las llaves:

Tipo--el nombre del tipo de evento, es decir, SoMouseEvent, SoLocation2Event...


Tiempo--la hora actual como cadena
Posición--una tupla de dos números enteros, la posición del mouse
ShiftDown--un valor booleano, true si Mayús en caso contrario se presionó false
CtrlDown--un valor booleano, true si Ctrl se presionó lo contrario es false
AltDown--un valor booleano, true si Alt se presionó lo contrario es false
Para todos los eventos de botón, es decir, teclado, ratón o spaceball eventos

Estado--A string 'UP' si el botón se fue arriba, 'Abajo' si era hacia abajo o
'Desconocido' para todos los demás casos

Para los eventos de teclado:

Clave--un carácter de la tecla presionada

Para el evento de botón del mouse

Botón--el botón presionado, podría ser BUTTON1,..., BUTTON5 o cualquier

Para eventos de spaceball:

Botón--el botón presionado, podría ser BUTTON1,..., BUTTON7 o cualquier

Y por último eventos de movimiento:

Traducción--una tupla de tres carrozas


Rotación--un cuaternión de la rotación, es decir, una tupla de cuatro carrozas

Manipular el scenegraph en Python


También es posible obtener y cambiar el scenegraph en Python, con el módulo
de 'pivy'--un enlace de Python para monedas.
from pivy.coin import * # load the pivy module
view = Gui.ActiveDocument.ActiveView # get the active viewer
root = view.getSceneGraph() # the root is an SoSeparator
node
root.addChild(SoCube())
view.fitAll()

La API de Python de pivy se crea mediante la herramienta SWIG. Como


utilizamos en FreeCAD algunos nodos escritos no puede crear directamente en
Python. Sin embargo, es posible crear un nodo por su nombre interno. Se
puede crear una instancia del tipo 'SoFCSelection' con
type = SoType.fromName("SoFCSelection")
node = type.createInstance()
Agregando y quitando objetos hacia/desde el scenegraph
Agregar nuevos nodos a la scenegraph puede hacer de esta manera. Tenga
cuidado de añadir siempre un SoSeparator para contener la geometría, las
coordenadas y información material de un mismo objeto. En el ejemplo
siguiente se agrega una línea roja de (0,0,0) a (10,0,0):
from pivy import coin
sg = Gui.ActiveDocument.ActiveView.getSceneGraph()
co = coin.SoCoordinate3()
pts = [[0,0,0],[10,0,0]]
co.point.setValues(0,len(pts),pts)
ma = coin.SoBaseColor()
ma.rgb = (1,0,0)
li = coin.SoLineSet()
li.numVertices.setValue(2)
no = coin.SoSeparator()
no.addChild(co)
no.addChild(ma)
no.addChild(li)
sg.addChild(no)

Para quitarlo, simplemente ejecute:

SG.removeChild(no)
Adición de widgets personalizados a la interfaz
Puede crear widgets personalizados con el diseñador de Qt, transformarlas en
una secuencia de comandos python y, a continuación, cargarlos en la interfaz
de FreeCAD con PyQt4.

El código de python producido por el compilador de python de Ui (es decir, la


herramienta que convierte archivos de qt-diseñador .ui en el código de python)
generalmente tiene el siguiente aspecto (es simple, también puede código
directamente en python):
class myWidget_Ui(object):
def setupUi(self, myWidget):
myWidget.setObjectName("my Nice New Widget")

myWidget.resize(QtCore.QSize(QtCore.QRect(0,0,300,100).size()).expande
dTo(myWidget.minimumSizeHint())) # sets size of the widget

self.label = QtGui.QLabel(myWidget) # creates a label


self.label.setGeometry(QtCore.QRect(50,50,200,24)) # sets its size
self.label.setObjectName("label") # sets its name, so it can be
found by name

def retranslateUi(self, draftToolbar): # built-in QT function that


manages translations of widgets
myWidget.setWindowTitle(QtGui.QApplication.translate("myWidget",
"My Widget", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("myWidget",
"Welcome to my new widget!", None,
QtGui.QApplication.UnicodeUTF8))

A continuación, todo lo que necesita hacer es crear una referencia a la ventana


de FreeCAD Qt, inserte un widget personalizado y "transformar" este widget en
la suya con el código de Ui acaba de hacer:
app = QtGui.qApp
FCmw = app.activeWindow() # the active qt window, = the freecad
window since we are inside it
myNewFreeCADWidget = QtGui.QDockWidget() # create a new dckwidget
myNewFreeCADWidget.ui = myWidget_Ui() # load the Ui script
myNewFreeCADWidget.ui.setupUi(myNewFreeCADWidget) # setup the ui
FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget)
# add the widget to the main window

Esta página muestra cómo avanzada funcionalidad fácilmente puede ser


construido en Python. En este ejercicio, construirá una nueva herramienta que
dibuja una línea. Esta herramienta, a continuación, puede vincularse a un
comando de FreeCAD, y ese comando puede ser invocado por cualquier
elemento de la interfaz, como un elemento de menú o un botón de la barra de
herramientas.

La secuencia de comandos principal


En primer lugar escribimos una secuencia de comandos que contiene toda la
funcionalidad de nuestra. A continuación, será esto guardar en un archivo y
importarlo en FreeCAD, por lo que todas las clases y funciones que escribimos
será sencillo a FreeCAD. Por lo tanto, lanzar su editor de texto favorito y
escriba las líneas siguientes:
import FreeCADGui, Part
from pivy.coin import *
class line:
"this class will create a line after the user clicked 2 points on the
screen"
def __init__(self):
self.view = FreeCADGui.ActiveDocument.ActiveView
self.stack = []
self.callback =
self.view.addEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),sel
f.getpoint)
def getpoint(self,event_cb):
event = event_cb.getEvent()
if event.getState() == SoMouseButtonEvent.DOWN:
pos = event.getPosition()
point = self.view.getPoint(pos[0],pos[1])
self.stack.append(point)
if len(self.stack) == 2:
l = Part.Line(self.stack[0],self.stack[1])
shape = l.toShape()
Part.show(shape)

self.view.removeEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),
self.callback)
Explicación detallada
import Part, FreeCADGui
from pivy.coin import *

En Python, cuando desea utilizar las funciones de otro módulo, necesita


importarlo. En nuestro caso, necesitaremos las funciones de la Módulo de parte
, para la creación de la línea y desde el módulo de Gui (FreeCADGui), para
acceder a la vista 3D. También necesitamos el contenido completo de la
biblioteca de la moneda, por lo que podemos utilizar directamente toda moneda
objetos como SoMouseButtonEvent, etc...
class line:

Aquí definimos nuestra clase principal. ¿Por qué usamos una clase y no una
función? La razón es que necesitamos que nuestra herramienta para
permanecer "alive" mientras que estamos esperando para que el usuario haga
clic en la pantalla. Una función termina cuando se ha hecho su tarea, pero un
objeto (una clase define un objeto) permanece vivo hasta que sea destruida.
"this class will create a line after the user clicked 2 points on the
screen"

En Python, cada clase o función puede tener una cadena de descripción. Esto
resulta especialmente útil en FreeCAD, porque cuando llamaremos esa clase
en el intérprete, la cadena de descripción se mostrará como una información
sobre herramientas.
def __init__(self):

Clases de Python siempre pueden contener una función __init__, que se


ejecuta cuando se llama a la clase para crear un objeto. Por lo tanto,
pondremos aquí todo lo que queremos que suceda cuando comienza a nuestra
herramienta de la línea.
self.view = FreeCADGui.ActiveDocument.ActiveView

En una clase, por lo general desea anexar self. antes de un nombre de


variable, por lo tanto será fácilmente accesible a todas las funciones dentro y
fuera de esa clase. Aquí, utilizaremos self.view para tener acceso y manipular
la vista 3D activa.
self.stack = []

Aquí creamos una lista vacía que va a contener los puntos 3D enviados por la
función getpoint.
self.callback =
self.view.addEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),sel
f.getpoint)
Esta es la parte importante: debido a que es en realidad un coin3D escena de , el
FreeCAD utiliza el mecanismo de devolución de llamada de moneda, que
permite a una función que se llamará cada vez que ocurre un determinado
evento de la escena. En nuestro caso, estamos creando una devolución de
llamada para SoMouseButtonEvent eventos y nos enlazarlo a la función
getpoint. Ahora, cada vez un botón del mouse está presionado o liberado, se
ejecutará la función de getpoint.

Tenga en cuenta que también es una alternativa a la addEventCallbackPivy()


llamado addEventCallback() que prescinde de la utilización de pivy. Pero dado
que pivy es una manera natural y muy eficiente para acceder a cualquier parte
de la escena de la moneda, es mucho mejor usarlo tanto como usted puede!
def getpoint(self,event_cb):

Ahora definimos la función getpoint, que se ejecutará cuando se presiona un


botón del mouse en una vista 3D. Esta función recibirá un argumento, que
llamamos event_cb. De este evento de devolución de llamada podemos
acceder el objeto de evento, que contiene varias piezas de información (info de
modo aquí ).
if event.getState() == SoMouseButtonEvent.DOWN:

La función getpoint se llamará cuando se presiona un botón del mouse o se


lanzó. Pero queremos elegir un punto 3D sólo cuando se presiona (de lo
contrario tendríamos dos puntos 3D muy cercano a cada uno de los otros). Por
lo tanto nos debemos comprobar aquí.
pos = event.getPosition()

Aquí tenemos las coordenadas de la pantalla del cursor del ratón


point = self.view.getPoint(pos[0],pos[1])

Esta función nos da un vector de FreeCAD (x, y, z) que contiene el punto 3D


que se encuentra en el plano focal, justo por debajo de nuestro cursor del
ratón. Si estás en la cámara vista, imaginar un rayo procedentes de la cámara,
pasando el cursor del ratón y golpear el plano focal. Es nuestro punto de 3D. Si
estamos en vista ortogonal, el rayo es paralelo a la dirección de la vista.
self.stack.append(point)

Agregamos a nuestro punto de nuevo a la pila


if len(self.stack) == 2:

¿Tenemos suficientes puntos ya? Si sí y, a continuación, vamos dibujar la


línea!
l = Part.Line(self.stack[0],self.stack[1])
Aquí utilizamos la función Line() de la Módulo de parte en la que crea una línea
de dos vectores de FreeCAD. Todo lo que crear y modificar dentro del módulo
de parte, permanece en el módulo de parte. Por lo tanto, hasta ahora, hemos
creado un elemento de línea. No está obligada a cualquier objeto de nuestro
documento activo, por lo que no aparece nada en la pantalla.
shape = l.toShape()

El documento de FreeCAD sólo puede aceptar formas desde el módulo de


parte. Las formas son el tipo más genérico del módulo parte. Por lo tanto,
debemos convertir nuestra línea a una forma antes de agregarlo al documento.
Part.show(shape)

El módulo de parte tiene una función muy útil show() que crea un nuevo objeto
en el documento y se enlaza una forma. Nos podríamos también han creado un
nuevo objeto en el documento de la primera, a continuación, enlazada la forma
manualmente.
self.view.removeEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),
self.callback)

Ya terminamos con nuestra línea, Let's quite el mecanismo de devolución de


llamada, que consume preciosos ciclos de CPU.

Pruebas & usando la secuencia de comandos


Ahora, vamos guardar nuestro script en algún lugar donde se encontrarán en el
intérprete de python de FreeCAD. Al importar módulos, el intérprete se verá en
los siguientes lugares: las rutas de acceso de instalación de python, el
directorio bin de FreeCAD y todos los directorios de los módulos de FreeCAD.
Por lo tanto, la mejor solución es crear un nuevo directorio en uno de los
FreeCAD mod directorios y para guardar la secuencia de comandos en ella.
Por ejemplo, vamos hacer un directorio "MyScripts" y guardar nuestra
secuencia de comandos como "exercise.py".

Ahora, todo se encuentra listo, vamos comenzar FreeCAD, cree un nuevo


documento y, en el intérprete de python, número:
import exercise

Si ningún mensaje de error aparece, significa que nuestro script de ejercicio se


ha cargado. Ahora nos podemos comprobar su contenido con:
dir(exercise)

El comando dir() es un comando de python incorporada que enumera el


contenido de un módulo. Podemos ver que nuestra clase line() está allí, a la
espera de nosotros. Ahora vamos a probarlo:
exercise.line()

A continuación, haga clic dos veces en la vista 3D, y bingo, aquí es nuestra
línea! Volver a hacerlo, sólo tiene que escribir exercise.line() una vez más y una
vez más y de nuevo... ¿Se siente gran, no?

Registrar la secuencia de comandos de la interfaz de


FreeCAD
Ahora, para que nuestra nueva herramienta en línea ser verdaderamente
interesante, debería tener un botón en la interfaz, por lo que no necesitamos
escribir todos cada vez de ese material. La manera más fácil es transformar
nuestro nuevo directorio de MyScripts en una estación de trabajo completa de
FreeCAD. Es fácil, todo lo que se necesita es colocar un archivo llamado
InitGui.py dentro de su directorio de MyScripts. El InitGui.py va a contener las
instrucciones para crear una nueva estación de trabajo y añadir nuestra nueva
herramienta a ella. Además de también necesitamos transformar un poco
nuestro código de ejercicio, por lo que la herramienta line() es reconocida como
un comando de FreeCAD oficial. Vamos comenzar haciendo un archivo
InitGui.py y escribir el siguiente código en ella:
class MyWorkbench (Workbench):
MenuText = "MyScripts"
def Initialize(self):
import exercise
commandslist = ["line"]
self.appendToolbar("My Scripts",commandslist)
Gui.addWorkbench(MyWorkbench())

Por ahora, debería ya entiendes el script anterior por usted mismo, creo que:
crea una nueva clase que llamamos MyWorkbench, le damos un título
(MenuText) y definimos una función Initialize() que se ejecutará cuando se
carga el workbench en FreeCAD. En esa función, cargar en el contenido de
nuestro archivo de ejercicio y anexar los comandos de FreeCAD que se
encuentra en el interior a una lista de comandos. A continuación, hacemos una
llamada "Mis Scripts" de la barra de herramientas y asignamos a nuestra lista
de comandos a ella. En la actualidad, por supuesto, tenemos sólo una
herramienta, por lo que nuestra lista de comandos contiene un único elemento.
A continuación, una vez que nuestro banco está listo, nos agregarlo a la
interfaz principal.

Pero esto todavía no funcionará, porque un comando de FreeCAD debe tener


el formato de una cierta manera para trabajar. Por lo tanto será necesario
transformar un poco nuestra herramienta de line(). Nuestro nuevo script
exercise.py tendrá ahora este aspecto:
import FreeCADGui, Part
from pivy.coin import *
class line:
"this class will create a line after the user clicked 2 points on the
screen"
def Activated(self):
self.view = FreeCADGui.ActiveDocument.ActiveView
self.stack = []
self.callback =
self.view.addEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),sel
f.getpoint)
def getpoint(self,event_cb):
event = event_cb.getEvent()
if event.getState() == SoMouseButtonEvent.DOWN:
pos = event.getPosition()
point = self.view.getPoint(pos[0],pos[1])
self.stack.append(point)
if len(self.stack) == 2:
l = Part.Line(self.stack[0],self.stack[1])
shape = l.toShape()
Part.show(shape)

self.view.removeEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),
self.callback)
def GetResources(self):
return {'Pixmap' : 'path_to_an_icon/line_icon.png', 'MenuText':
'Line', 'ToolTip': 'Creates a line by clicking 2 points on the
screen'}
FreeCADGui.addCommand('line', line())

Lo que hicimos aquí es transformar nuestra función de __init__() en una


función de Activated(), porque cuando se ejecutan los comandos FreeCAD,
ejecutar automáticamente la función de Activated(). También hemos añadido
una función de GetResources(), que informa a FreeCAD donde puede
encontrar un icono de la herramienta, y lo que será el nombre y la información
sobre herramientas de nuestra herramienta. Cualquier imagen jpg, png o svg
funcionará como un icono, puede ser de cualquier tamaño, pero es mejor
utilizar un tamaño de que está cerca el aspecto final, como 16 x 16, 24 x 24 o
32 x 32. A continuación, añadimos la clase de line() como un comando de
FreeCAD oficial con el método addCommand().

Eso es todo, ahora sólo necesitamos reiniciar FreeCAD y vamos a tener una
agradable workbench nuevo con nuestra nueva herramienta de la línea!
¿Así que quieres más?
Si te gustó este ejercicio, ¿por qué no intentar mejorar esta pequeña
herramienta? Hay muchas cosas que pueden hacer, como por ejemplo:

Agregar comentarios de los usuarios: hasta ahora hicimos una herramienta muy
desnuda, el usuario puede estar un poco perdido cuando lo utilice. Sowe podría
añadir algunos comentarios, diciéndole que lo que debe hacer a continuación. Por
ejemplo, podría emitir mensajes a la consola de FreeCAD. Echar un vistazo en el
módulo de FreeCAD.Console
Agregar una posibilidad para escribir el 3D puntos de coordenadas manualmente.
Mirar la función de input() de python, por ejemplo
Agregar la posibilidad de añadir más de 2 puntos
Agregar eventos para otras cosas: ahora comprobamos sólo para eventos de botón
del ratón, qué sucede si también haríamos algo cuando se mueve el ratón, como
mostrar coordenadas actuales?
Asigne un nombre al objeto creado

, No dude en escribir sus preguntas o ideas sobre el hablar de la página !

En esta página nos mostrará cómo crear un cuadro de diálogo de Qt simple


con Qt Designer , La herramienta oficial de qt para diseñar interfaces, a
continuación, convertirlo en el código de python, a continuación, utilizarlo
dentro de FreeCAD. Supongo en el ejemplo que usted sabe cómo editar y
ejecutar python scripts ya, y que se pueden hacer cosas sencillas en una
ventana de terminal, como navegar, etc.. También debe tener, por supuesto,
pyqt instalado.

Diseñar el cuadro de diálogo


En CAD, aplicaciones, diseñar una buena interfaz de usuario (User Interface)
es muy importantes. Sobre todo el usuario será a través de algún pedazo de
interfaz: lectura de cuadros de diálogo, pulsar botones, escogiendo entre
iconos, etc.. Por lo que es muy importante pensar cuidadosamente a lo que
desea hacer, cómo desea que el usuario se comportan, y cómo será el flujo de
trabajo de su acción.

Hay un par de conceptos para conocer al diseñar la interfaz:

Cuadros de diálogo modales, no-modal : Un cuadro de diálogo modal que aparece


delante de la pantalla, detener la acción de la ventana principal, forzando al
usuario a responder al cuadro de diálogo, mientras que un cuadro de diálogo no
modal no parar de trabajar en la ventana principal. En algunos casos, el primero es
mejor, en otros casos no.
Identificación de lo que se necesita y lo que es opcional: asegúrese de que el
usuario sabe lo que él debe do. Etiquetar todo con descripción adecuada, utilizar la
información sobre herramientas, etc.
Comandos de separating de de parámetros: esto se suele hace con botones y campos
de entrada de texto. El usuario sabe que si hace clic en un botón producirá una
acción mientras que cambiar un valor dentro de un campo de texto va a cambiar
un parámetro en algún lugar. Hoy en día, sin embargo, los usuarios generalmente
saben bien lo que es un botón, lo que es un campo de entrada, etc.. El toolkit de
interfaz que estamos utilizando, Qt, es un kit de herramientas de Estado-of-the-art,
y no tenemos que preocuparnos mucho acerca de hacer las cosas claras, ya que
ellos ya será muy claros por sí mismos.

Por lo tanto, ahora que hemos definido bien lo que haremos, es hora de abrir el
diseñador qt. Vamos diseñar un diálogo muy simple, como esto:

, A continuación, utilizaremos este cuadro de diálogo en FreeCAD para producir


un plano rectangular agradable. Puede que encuentre no muy útil para producir
aviones rectangulares agradables, pero va a ser fácil cambiar más tarde para
hacer las cosas más complejas. Cuando lo abre, Qt Designer se ve así:
Es muy simple de usar. En la barra izquierda tiene elementos que se pueden
arrastrar en el widget. En el lado derecho tiene paneles de propiedades
muestra todos los tipos de propiedades editables de elementos seleccionados.
Por lo tanto, comenzar con la creación de un nuevo widget. Seleccione
"Diálogo sin botones", ya que no queremos que los botones de aceptar y
cancelar de forma predeterminada. A continuación, arrastre en el widget 3
etiquetas, uno para el título, uno para la escritura de "Altura" y otro para
escribir "Ancho". Las etiquetas son simples los textos que aparecen en el
widget, sólo para informar al usuario. Si selecciona una etiqueta, en el lado
derecho aparecerán varias propiedades que se pueden cambiar si lo desea,
como estilo de fuente, altura, etc..

A continuación, agregue 2 LineEdits, que son campos de texto que el usuario


puede rellenar, uno para la altura y otro para el ancho. Aquí también podemos
editar propiedades. Por ejemplo, ¿por qué no establecer un valor
predeterminado? Por ejemplo 1.00 para cada uno. De esta forma, cuando el
usuario verá el cuadro de diálogo, ambos valores se rellenará ya y si él está
satisfecho él puede directamente pulse el botón, se ahorra tiempo valioso. A
continuación, agregue un PushButton, que es el botón que el usuario tendrá
que presionar después de que llenó los 2 campos.

Nota que he escogido aquí controles muy simples, pero Qt tiene muchas más
opciones, por ejemplo se podría utilizar Spinboxes en lugar de LineEdits, etc....
Eche un vistazo de lo que está disponible, seguramente tendrá otras ideas.

Es sobre todo lo que necesitamos hacer en el diseñador de Qt. Una última


cosa, sin embargo, Let's renombrar todos nuestros elementos con nombres
más fáciles, por lo que será más fácil identificarlos en nuestras secuencias de
comandos:

Convertir nuestro diálogo a python


Ahora, vamos guardar nuestro widget en algún lugar. Se guardará como un
archivo .ui, que nos convierta fácilmente a la secuencia de comandos python
con pyuic. En windows, el programa de pyuic está empaquetado con pyqt (a
ser verificado), sobre linux probablemente necesitará instalar por separado
desde el gestor de paquetes (en sistemas basados en debian, es parte del
paquete de herramientas de pyqt4-dev). Para hacer la conversión, necesitará
abrir una ventana de terminal (o una ventana de símbolo del sistema de
ventanas), desplácese hasta donde haya guardado su .ui archivo y la cuestión:
pyuic mywidget.ui > mywidget.py

En algunos sistemas, el programa se llama pyuic4 en lugar de pyuic.


Simplemente esto convertirá el archivo .ui en una secuencia de comandos
python. Si abrimos el archivo mywidget.py, sus contenidos son muy fáciles de
entender:
from PyQt4 import QtCore, QtGui

class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(187, 178)
self.title = QtGui.QLabel(Dialog)
self.title.setGeometry(QtCore.QRect(10, 10, 271, 16))
self.title.setObjectName("title")
self.label_width = QtGui.QLabel(Dialog)
...

self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)

def retranslateUi(self, Dialog):


Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog",
"Dialog", None, QtGui.QApplication.UnicodeUTF8))
self.title.setText(QtGui.QApplication.translate("Dialog",
"Plane-O-Matic", None, QtGui.QApplication.UnicodeUTF8))
...

Como ves tiene una estructura muy simple: se crea una clase denominada
Ui_Dialog, que almacena los elementos de la interfaz de nuestro widget. Que la
clase tiene dos métodos, uno para la configuración del widget y uno para la
traducción de su contenido, es parte del mecanismo general de Qt para traducir
los elementos de la interfaz. El método de instalación simplemente crea, uno
por uno, los widgets como hemos definido en el diseñador de Qt y establece
sus opciones como hemos decidido anteriormente. A continuación, toda la
interfaz obtiene traducida, y por último, conéctese a las ranuras (hablaremos
acerca de que más tarde).

Ahora podemos crear un nuevo widget y utilizar esta clase para crear su
interfaz. Ya podemos ver nuestro widget en acción, poniendo nuestro archivo
de mywidget.py en un lugar donde FreeCAD se encuentran (en el directorio bin
de FreeCAD, o en cualquiera de los subdirectorios MOD) y, en el intérprete de
python FreeCAD, número de:
from PyQt4 import QtGui
import mywidget
d = QtGui.QWidget()
d.ui = mywidget.Ui_Dialog()
d.ui.setupUi(d)
d.show()

Y nuestro diálogo aparecerá! Tenga en cuenta que todavía está trabajando


nuestro intérprete de python, contamos con un cuadro de diálogo no modal. Por
lo tanto, para cerrarlo, podemos (aparte de hacer clic en su icono de cerrar, por
supuesto) tema:
d.hide()
Hacer nuestro diálogo hacer algo
Ahora que podemos mostrar y ocultar nuestro diálogo, sólo tenemos que añadir
una última parte: para hacer algo! Si juegas un poco con el diseñador de Qt,
rápidamente descubrirá una sección entera llamada "señales y ranuras".
Básicamente, funciona como este: los elementos de tus widgets (en la
terminología de Qt, dichos elementos son propios widgets) puede enviar
señales. Esas señales difieren según el tipo de widget. Por ejemplo, un botón
puede enviar una señal cuando se está presionado y cuando se publique. Esas
señales pueden estar conectadas a las ranuras, que pueden ser una
funcionalidad especial de otros widgets (por ejemplo un cuadro de diálogo tiene
una ranura "Cerrar" a los que puede conectar la señal desde un botón de
cierre), o pueden ser funciones personalizadas. La Documentación de
referencia de PyQt enumera todos los widgets qt, lo que pueden hacer, lo que
las señales pueden enviar, etc...

Lo que haremos aquí, es crear una nueva función que creará un plano basado
en altura y anchura y conectar esa función a la señal presionada emitida por
nuestro botón de "Crear!". Por lo tanto, comencemos con la importación de
nuestros módulos de FreeCAD, poniendo la siguiente línea en la parte superior
de la secuencia de comandos, donde importamos ya QtCore y QtGui:
import FreeCAD, Part

A continuación, vamos a agregar una nueva función a nuestra clase Ui_Dialog:


def createPlane(self):
try:
# first we check if valid numbers have been entered
w = float(self.width.text())
h = float(self.height.text())
except ValueError:
print "Error! Width and Height values must be valid numbers!"
else:
# create a face from 4 points
p1 = FreeCAD.Vector(0,0,0)
p2 = FreeCAD.Vector(w,0,0)
p3 = FreeCAD.Vector(w,h,0)
p4 = FreeCAD.Vector(0,h,0)
pointslist = [p1,p2,p3,p4,p1]
mywire = Part.makePolygon(pointslist)
myface = Part.Face(mywire)
Part.show(myface)
self.hide()

A continuación, tenemos que informar a Qt para conectar el botón con la


función, colocando la siguiente línea justo antes de
QtCore.QMetaObject.connectSlotsByName(Dialog):
QtCore.QObject.connect(self.create,QtCore.SIGNAL("pressed()"),self.cre
atePlane)

Esto, como ves, conecta la señal de pressed() de nuestro objeto de crear (el
botón de "Crear!"), con una ranura llamada createPlane, que acaba de definir.
Eso es todo! Ahora bien, como un toque final, podemos añadir una pequeña
función para crear el cuadro de diálogo, será más fácil llamar. Fuera de la clase
Ui_Dialog, vamos a agregar este código:
class plane():
d = QtGui.QWidget()
d.ui = Ui_Dialog()
d.ui.setupUi(d)
d.show()

A continuación, desde FreeCAD, sólo tenemos que hacer:


import mywidget
mywidget.plane()

Que es Folks todos... Ahora puede probar todo tipo de cosas, como por
ejemplo insertar tu widget en la FreeCAD interfaz (véase la fragmentos de
código página), o haciendo mucho más avanzadas herramientas
personalizadas, mediante el uso de otros elementos en el widget de.

La secuencia de comandos completa


Esta es la secuencia de comandos completa, para referencia:
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'mywidget.ui'


#
# Created: Mon Jun 1 19:09:10 2009
# by: PyQt4 UI code generator 4.4.4
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui


import FreeCAD, Part

class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(187, 178)
self.title = QtGui.QLabel(Dialog)
self.title.setGeometry(QtCore.QRect(10, 10, 271, 16))
self.title.setObjectName("title")
self.label_width = QtGui.QLabel(Dialog)
self.label_width.setGeometry(QtCore.QRect(10, 50, 57, 16))
self.label_width.setObjectName("label_width")
self.label_height = QtGui.QLabel(Dialog)
self.label_height.setGeometry(QtCore.QRect(10, 90, 57, 16))
self.label_height.setObjectName("label_height")
self.width = QtGui.QLineEdit(Dialog)
self.width.setGeometry(QtCore.QRect(60, 40, 111, 26))
self.width.setObjectName("width")
self.height = QtGui.QLineEdit(Dialog)
self.height.setGeometry(QtCore.QRect(60, 80, 111, 26))
self.height.setObjectName("height")
self.create = QtGui.QPushButton(Dialog)
self.create.setGeometry(QtCore.QRect(50, 140, 83, 26))
self.create.setObjectName("create")

self.retranslateUi(Dialog)

QtCore.QObject.connect(self.create,QtCore.SIGNAL("pressed()"),self.cre
atePlane)
QtCore.QMetaObject.connectSlotsByName(Dialog)

def retranslateUi(self, Dialog):


Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog",
"Dialog", None, QtGui.QApplication.UnicodeUTF8))
self.title.setText(QtGui.QApplication.translate("Dialog",
"Plane-O-Matic", None, QtGui.QApplication.UnicodeUTF8))
self.label_width.setText(QtGui.QApplication.translate("Dialog",
"Width", None, QtGui.QApplication.UnicodeUTF8))

self.label_height.setText(QtGui.QApplication.translate("Dialog",
"Height", None, QtGui.QApplication.UnicodeUTF8))
self.create.setText(QtGui.QApplication.translate("Dialog",
"Create!", None, QtGui.QApplication.UnicodeUTF8))

def createPlane(self):
try:
# first we check if valid numbers have been entered
w = float(self.width.text())
h = float(self.height.text())
except ValueError:
print "Error! Width and Height values must be valid
numbers!"
else:
# create a face from 4 points
p1 = FreeCAD.Vector(0,0,0)
p2 = FreeCAD.Vector(w,0,0)
p3 = FreeCAD.Vector(w,h,0)
p4 = FreeCAD.Vector(0,h,0)
pointslist = [p1,p2,p3,p4,p1]
mywire = Part.makePolygon(pointslist)
myface = Part.Face(mywire)
Part.show(myface)

class plane():
d = QtGui.QWidget()
d.ui = Ui_Dialog()
d.ui.setupUi(d)
d.show()
Traducciones disponibles:

Desarrollo de aplicaciones para


FreeCAD
Declaración del responsable del
Sé que la discusión sobre la "derecho" licencia de código abierto ocuparon una
parte significativa de ancho de banda de internet y por lo tanto es aquí la razón
por qué, en mi opinión, FreeCAD debe tener este uno.

opté por la LGPL y el GPL para el proyecto y yo sabemos los pro y contras
sobre la LGPL y la voluntad de dan algunas de las razones de esa decisión.

FreeCAD es una mezcla de una biblioteca y una aplicación, por lo que la GPL
sería un poco fuerte para ello. Impediría escribir módulos comerciales para
FreeCAD porque impediría la vinculación con los libs base de FreeCAD.
¿Usted puede solicitar por ello comercial módulos en absoluto? Por lo tanto,
Linux es buen ejemplo. ¿Linux sería tan exitoso cuando la biblioteca de C de
GNU sería GPL y por lo tanto, evitar la vinculación contra aplicaciones no GPL?
Y aunque me encanta la libertad de Linux, también quiero ser capaz de utilizar
el controlador de gráfico 3D NVIDIA muy bueno. Comprendo y aceptar la razón
que NVIDIA no va a regalar el código del controlador. Todos trabajamos para
las empresas y la necesidad de pago o al menos de alimentos. Por lo que para
mí, una coexistencia de código abierto y el software de código cerrado no es
malo, cuando obedece las reglas de la LGPL. Me gustaría ver a alguien que
escribe un procesador de importación y exportación de Catia para FreeCAD y
distribuirlo gratuitamente o por algún dinero. No me gusta para obligarle a
regalar más de lo que quiere. No sería bueno ni para él ni para FreeCAD.

Sin embargo, esta decisión es hecha sólo para el núcleo del sistema de
FreeCAD. Cada escritor de un módulo de aplicación podrá hacer su propia
decisión.
Licencias usadas
Aquí los tres licencias en virtud del cual se publica FreeCAD:
Licencia pública general (GPL2 +)
Para las secuencias de comandos de Python construir los archivos binarios,
como se afirma en los archivos .py en src/herramientas
Menor General Public Licence (LGPL2 +)
Para los núcleo libs como se indica en los ficheros .h y .cpp en src/APP src/Gui
src/base y la mayoría módulos en src/mod y para el ejecutable como se indica en los
ficheros .h y .cpp en src/principal
Licencia de publicación abierta
Para la documentación sobre http://Free-CAD.sourceforge.NET/ como no marcado de
forma diferente por el autor

Intentamos utilizar solo LGPL tipo de licencias para las bibliotecas del sistema
vinculado de núcleo (vea Bibliotecas de terceros ) con una excepción:

la licencia de Coin3D ( www.coin3d.org ).

Ver del FreeCAD archivo copyright Debian para obtener más detalles acerca de
las licencias utilizadas en FreeCAD
Impacto de las licencias
Usuarios privados

Los usuarios privados pueden utilizar FreeCAD de forma gratuita y puede hacer
básicamente todo lo que quieren hacer con ella....
Usuarios profesionales

Puede utilizar FreeCAD libremente, para cualquier tipo de trabajo privado o


profesional. Pueden personalizar la aplicación que lo deseen. Pueden escribir
extensiones de código fuente abierto o cerrado en FreeCAD. Siempre son
maestros de sus datos, no se ven obligados a actualizar FreeCAD, cambiar su
uso de FreeCAD. Utilizando FreeCAD no ligarlos a cualquier tipo de contrato u
obligación.
Desarrolladores de código fuente abiertos

Puede utilizar FreeCAD como las bases para los módulos de extensión propia
para propósitos especiales. Pueden elegir la GPL o la LGPL para permitir el
uso de su trabajo en software propietario o no.
Desarrolladores profesionales

Los desarrolladores profesionales pueden utilizar FreeCAD como las bases


para sus propios módulos de extensión para fines especiales y no están
obligados a hacer sus módulos open source. Pueden usar todos los módulos
que utilizan la LGPL. Se les permite distribuir FreeCAD junto con su software
propietario. Recibirán el apoyo de los autores como es no una una forma calle.
Si desea vender su módulo necesita una licencia de Coin3D, de lo contrario se
ve obligado por esta biblioteca para que sea open source.

Informar de fallos
Recientemente la plataforma de sourceforge hizo el mantis bug tracker
aplicación disponible para proyectos y FreeCAD es ahora utilizando
activamente, en lugar del antiguo incorporada bug tracker. La dirección de
nuestro bug tracker es:

http://sourceforge.NET/Apps/mantisbt/Free-CAD/main_page.php

Si usted piensa que usted podría ha encontrado un bug, eres Bienvenido a


informar de ello. Pero antes de informar sobre un bug, por favor, compruebe los
siguientes elementos:

Make asegúrese de que el fallo es realmente un error, es decir, algo que debería
estar trabajando y que no está funcionando. Si no está seguro, dont dude en
explicar su problema en el foro y pregunta qué do.
Antes de presentar cualquier cosa, leer el preguntas más frecuentes , hace una
búsqueda en el foro y asegúrese de que el mismo error no ha reportado antes,
realizando una búsqueda en el bug tracker.
Describe como claramente como sea posible el problema, y cómo pueden
reproducirse. Si no podemos verificar el fallo, no podríamos ser capaces de fijar
ella.
Unirse a la siguiente información: el sistema operativo, si es de 32 o 64 bits y la
versión de FreeCAD está en ejecución.
Por favor presentar un informe por separado para cada error.
Si estás en un sistema linux y su fallo provoca un accidente en FreeCAD, puede
intentar ejecutar un backtrace de depuración: desde una terminal ejecutar gdb
freecad (suponiendo que está instalado el paquete gdb), a continuación, dentro de
gdb, escriba Ejecutar . FreeCAD, a continuación, se ejecutará. Después de que el
accidente ocurre, escriba bt , para obtener el backtrace completo. Incluir ese
backtrace en su informe de fallo.
Solicitar funciones
Si desea algo que aparecen en FreeCAD que aún no se ha implementado, no
es un error sino una solicitud de función. También puede enviar en el mismo
tracker (archivo, como característica solicitar en lugar de errores), pero tenga
en cuenta que no son garantiza que su deseo será cumplida.

Envío de parches
En caso de que usted ha programado una corrección de errores, una extensión
o algo que puede ser de uso público en FreeCAD, crear un parche utilizando la
herramienta diff de Subversion y lo presentará en el mismo tracker (archivo
como parche).

El "viejo" rastreador de sourceforge (obsoleto)


Nota : Utilice el nuevo mantis bug tracker para enviar bugs, esta un poco ahora
es obsoleto...
¿Dónde se encuentran?
FreeCAD el proyecto tiene su propio página de resumen de Tracker .
Encontrarás la información general sobre las distintas secciones del
Rastreador.
¿Cuándo se debe utilizar?

El Rastreador de FreeCAD Bug

Bugs
Si usted piensa que usted podría ha encontrado un bug, vaya a la Sección de
bugs del tracker y elija "cualquiera" para Estado de ver todos los de solicitud de
error jamás presentada. La búsqueda por palabra clave le permite encontrar
bug tracker entradas para un problema similar. Si no puede encontrar una
entrada mayor acerca de su problema, usted debe presentar una nueva
entrada en la misma página.
Solicitudes de función
Si se echa en falta una característica en FreeCAD que usted piense como
bombardeos absolutamente necesario para convertirse en el mundos mejores
software de CAD, usted podría encontrar el Solicitud de función helpfull de la
sección.
Solicitudes de asistencia
Si no obtiene alrededor de compilación de FreeCAD y el Compilar en Windows
o Compile On Unix sección no le otorga una sugerencia, o intentarlo de puerto
a un nuevo entorno o están programando nuevos módulos o extensiones para
FreeCAD y necesita alguna asistencia a continuación, la Las solicitudes de
asistencia sección es el lugar que desee ir a.
Parches de nuevos
En caso de que usted ha programado una corrección de errores, una extensión
o algo que puede ser de uso público en FreeCAD, crear un parche utilizando
Subversion y de archivo en el sección de parches .

En este artículo se explica paso a paso cómo compilar FreeCAD en


Windows.
Requisitos previos
Lo que necesita es principalmente el compilador. En Windows, usamos el
compilador de 8 M de $ VisualStudio con el service pack más alto. Aunque es
probablemente posible utilizar gcc Cygwin o MingW no ha probado ni portado
hasta ahora. Nosotros también hemos portado a utilizar VC8 Express Edition.
Necesita descargar el SDK de la plataforma de Windows para obtener, por
ejemplo, la Windows.h. También necesita todos los Bibliotecas de terceros para
compilar correctamente FreeCAD.

Si utiliza los compiladores de $ M que desea más probable es que descargar el


LibPack de FreeCAD que le proporciona todos los libs necesarios para
construir FreeCAD en Windows.
Edificio con aenderezar
En primer lugar, tienes que Descargar aenderezar e instálelo en el equipo de
generación.
El conmutador de aenderezar

Desde la versión 0.9 utilizamos el sistema de compilación de aenderezar para


generar los archivos de compilación y ganar para varios compiladores. Ya no
entregamos .vcproj archivos. Si quieres ex versiones de generación de
FreeCAD (0,8 y anterior) ver "Building versiones anteriores" más adelante en
este artículo.

Nos cambiaron porque se convirtió en más y más dolorosa mantener archivos


de proyecto para 30 + construcción metas y compiladores de x. aenderezar nos
da la posibilidad de apoyar IDEs alternativos, como Code:: Blocks, Qt Creator y
Eclipse CDT el compilador principal que usamos es todavía Express de M $
VC9, sin embargo. Pero tenemos planes para el futuro de un proceso de
generación de Windows sin el software propietario del compilador.
Configurar el proceso de generación

El primer paso para construir FreeCAD con aenderezar es para configurar el


entorno. Básicamente hay dos formas para ir:

Utilizando el LibPack
Instalar todos necesita libs y dejar que aenderezar encontrarlos

En el primer caso sólo necesita dar a aenderezar la ruta de acceso a la LibPack


y el resto debe hacerse de forma automática y verá una
pantalla de tal

Verá la ruta de LibPack que se inserta en el FREECAD_LIBPACK_DIR


variable. A partir de que todos incluye y rutas de acceso se establecen. Sólo
necesita presionar la generar obtener generados el botón y los archivos del
proyecto.

Si cambia la FREECAD_LIBPACK_USE opciones de desactivar la


configuración intenta encontrar cada biblioteca necesaria en su sistema.
Dependiendo de las libs que funciona más o menos. Así que tienes a menudo
definir algunos trazados a mano. aenderezar le mostrará lo que no se
encuentra y deben especificarse.
Opciones para el proceso de creación de

El sistema de compilación de aenderezar nos da mucha más flexibilidad


durante el proceso de generación. Eso significa que podemos encender y
apagar algunas características o módulos. Es de una manera como la
compilación del kernel de Linux. Tienes mucho switches para determinar el
proceso de generación.

Aquí es la descripción de estos modificadores. Más probable es que cambiará


mucho en el futuro porque queremos aumentar la flexibilidad de generación
mucho más.
Tabla de vínculos

De forma
Nombre de la variable Descripción
predeterminada

El uso de la LibPack de FreeCAD o En Win32 sobre


FREECAD_LIBPACK_USE
encenderlos y apagarlos otherwishe off

Directorio donde se encuentra el Dir de fuente de


FREECAD_LIBPACK_DIR
LibPack FreeCAD

Construir FreeCAD con todos los


FREECAD_BUILD_GUI SOBRE
módulos relacionados con la Gui

Construir el módulo de CAM,


FREECAD_BUILD_CAM APAGADO
experimental!

Crear los archivos de proyecto para


FREECAD_BUILD_INSTALLER APAGADO
el instalador de Windows.

Crear los archivos de proyecto para


FREECAD_BUILD_DOXYGEN_DOCU APAGADO
la documentación de código fuente.

El encendido de cosas necesitan sólo


FREECAD_MAINTAINERS_BUILD cuando haces una compilación de APAGADO
versión.

generación de línea de comandos

Aquí un ejemplo cómo construir FreeCAD desde la línea de comandos:


rem @echo off
rem Build script, uses vcbuild to completetly build FreeCAD

rem update trunc


d:
cd "D:\_Projekte\FreeCAD\FreeCAD_0.9"
"C:\Program Files (x86)\Subversion\bin\svn.exe" update

rem set the aprobiated Variables here or outside in the system

set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
set INCLUDE=
set LIB=

rem Register VS Build programms


call "C:\Program Files (x86)\Microsoft Visual Studio
9.0\VC\vcvarsall.bat"

rem Set Standard include paths


set INCLUDE=%INCLUDE%;%FrameworkSDKDir%\include
set INCLUDE=%INCLUDE%;C:\Program Files\Microsoft
SDKs\Windows\v6.0A\Include

rem Set lib Pathes


set LIB=%LIB%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib
set LIB=%LIB%;%PROGRAMFILES%\Microsoft Visual Studio\VC98\Lib

rem Start the Visuall Studio build process


"C:\Program Files (x86)\Microsoft Visual Studio
9.0\VC\vcpackages\vcbuild.exe" "D:\_Projekte\FreeCAD
FreeCAD_0.9_build\FreeCAD_trunk.sln" /useenv
Versiones más antiguas de fomento de la
Utilizando LibPack

Para hacerlo más fácil obtener FreeCAD compilado, proporcionamos una


colección de todas las bibliotecas necesarias. Se llama la LibPack . Usted
puede encontrar en el página de descarga de en sourceforge.

Es necesario establecer las siguientes variables de entorno:

FREECADLIB = "D:\Wherever\LIBPACK"
QTDIR = "% FREECADLIB %"

Añadir "% FREECADLIB%\bin" y "% FREECADLIB%\dll" para el


sistema PATH variable. Tenga en cuenta que tienes que sustituir "%
FREECADLIB %" con el nombre de ruta de acceso, ya que Windows
hace variables de entorno de reemplazar a no recursivamente.
Directorio de instalación de Visual Studio
Algunos ruta de búsqueda de Visual Studio que deba establecerse.
Para cambiarlos, utilice el menú Tools→Options→Directory

Incluye

Añadir la siguiente ruta de búsqueda a la lista de búsqueda de rutas


incluyen:

%FREECADLIB%\include
%FREECADLIB%\include\Python
%FREECADLIB%\include\boost
%FREECADLIB%\include\xercesc
%FREECADLIB%\include\OpenCascade
%FREECADLIB%\include\OpenCV
%FREECADLIB%\include\Coin
%FREECADLIB%\include\SoQt
%FREECADLIB%\include\QT
%FREECADLIB%\include\QT\Qt3Support
%FREECADLIB%\include\QT\QtCore
%FREECADLIB%\include\QT\QtGui
%FREECADLIB%\include\QT\QtNetwork
%FREECADLIB%\include\QT\QtOpenGL
%FREECADLIB%\include\QT\QtSvg
%FREECADLIB%\include\QT\QtUiTools
%FREECADLIB%\include\QT\QtXml
%FREECADLIB%\include\Gts
%FREECADLIB%\include\zlib
Libs

Añadir la siguiente ruta de búsqueda a la lista de búsqueda de rutas


de lib:

%FREECADLIB%\lib
Ejecutables

Añadir la siguiente ruta de búsqueda a la lista de búsqueda de la ruta


del ejecutable:

%FREECADLIB%\bin
Directorio de instalación binario de TortoiseSVN, generalmente
"C:\Programm Files\TortoiseSVN\bin", esto es necesario para una
distribución construir cuando SubWVRev.exe se utiliza para extraer el
número de versión de Subversion.
Python es necesario
Durante la compilación se ejecutan algunas secuencias de comandos
de Python. Así que el intérprete de Python tiene que funcionar en el
sistema operativo. Utilice un cuadro de mando para comprobarlo. Si
no está instalada correctamente la biblioteca de Python obtendrá un
mensaje de error como no se puede encontrar en python.exe. Si utiliza
la LibPack también puede utilizar el python.exe en el directorio bin.
Especial para VC8
Al generar el proyecto con VC8, usted tiene que cambiar la
información de enlace para la biblioteca de WildMagic, puesto que
necesita una versión diferente para VC6 y VC8. Ambas versiones se
suministran en LIBPACK/dll. En las propiedades del proyecto para
AppMesh cambiar el nombre de la biblioteca de la wm.dll a la versión
VC8. Tenga cuidado de cambiarlo en Debug y configuración de
Release.
Compilar

Después de que cumplen todos los requisitos previos la compilación -


Ojalá - es sólo un clic de ratón en VC;-)
Después de compilar

Para obtener FreeCAD activo y funcionando desde el entorno de


compilador necesita copiar algunos archivos de la LibPack a la bin
carpeta donde está instalado el FreeCAD.exe después de una
generación correcta:

Python.exe y python_d.exe de LIBPACK/bin


python25.dll y python25_d.dll de LIBPACK/bin
python25.ZIP de LIBPACK/bin
hacer una copia de Python25.zip y cambiarle el nombre a Python25_d.zip
QtCore4.dll de LIBPACK/bin
QtGui4.dll de LIBPACK/bin
boost_signals-vc80-mt-1_34_1.dll de LIBPACK/bin
boost_program_options-vc80-mt-1_34_1.dll de LIBPACK/bin
Xerces-c_2_8.dll de LIBPACK/bin
zlib1.dll de LIBPACK/bin
coin2.dll de LIBPACK/bin
soqt1.dll de LIBPACK/bin
QtOpenGL4.dll de LIBPACK/bin
QtNetwork4.dll de LIBPACK/bin
QtSvg4.dll de LIBPACK/bin
QtXml4.dll de LIBPACK/bin

Cuando se utiliza un LibPack con una versión de Python mayor de 2.5


tiene que copiar los archivos de más de dos:
zlib.PYD y zlib_d.pyd de LIBPACK/bin/lib. Esto es necesario por python
para abrir la biblioteca de python comprimidos.
_sre.PYD y _sre_d.pyd de LIBPACK/bin/lib. Esto es necesario por python
para la construcción en ayudar a sistema.

Si no lo consigues ejecutarlo debido a un error de Python es muy


probable que uno de los zlib*.pyd faltan los archivos.
Material adicional

Si encuentro para construir la fuente código documentación que


necesita DoxyGen .

Para crear un paquete de intstaller necesita WIX .

Durante la compilación se ejecutan algunas secuencias de comandos


de Python. Por lo tanto, el intérprete de Python tiene para que
funcione correctamente.
Para obtener más detalles también echar un vistazo a README.Linux
en sus fuentes.

En primer lugar debe construir el plugin de Qt que proporciona todos


los widgets personalizados de FreeCAD que necesitamos para el
diseñador Qt. Las fuentes se encuentran bajo
//src/Tools/plugins/widget//.

Hasta el momento no proporcionamos un archivo makefile--pero


llamada
qmake plugin.pro

lo crea. Una vez hecho esto, llamando a hacer creará la biblioteca


//libFreeCAD_widgets.so//.

Dar a conocer esta biblioteca a tu Qt Designer tiene que copiar el


archivo a
//$QTDIR/plugin/designer//.

En recientes distribuciones de linux, FreeCAD es generalmente más fáciles de


construir, ya que todas las dependencias son prestadas normalmente por el
administrador de paquetes. Básicamente, sólo tiene que necesita obtener el
código fuente de FreeCAD y, a continuación, instale las dependencias que se
enumeran a continuación, y emitir:
./autogen.sh && ./configure && make
o
./cmake . && make

para obtener FreeCAD construido, dependiendo de lo que construir el sistema


que prefiere utilizar ( autotools o aenderezar ). A continuación, encontrará
explicaciones detalladas del todo el proceso y particularidades que puedan
surgir. Antes de que usted demasiado empantanarse en detalles, también hay
un shellscript que puede utilizar para seguir a lo largo. Si encuentras algo malo
o aquí abajo, por favor, nos ayudan a corregir ella.
Obtención de la fuente
Antes de que se puede compilar FreeCAD, debe obtener el código fuente.
Instalar primero subversión . A continuación, desde el directorio de su elección
(por ejemplo, su directorio de usuario), do:
svn co https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk
freecad

This will perform an anonymous checkout of the current development version in


a new directory called "freecad". Alternatively you can download a source
tarball but they could be already quite old so it's probably better to always get
the latest sources via subversion. Note, though, that the subversion version is
the FreeCAD version currently being worked on, and it might contain bugs or
even fail to compile.
Prerequisites
To compile FreeCAD under Linux you have to install all libraries mentioned in
Third Party Libraries first. You also need the GNU gcc compiler version equal or
above 3.0.0. g++ is also needed because FreeCAD is completely written in
C++. Both gcc and g++ are included in the build-essential package listed below.
During the compilation some Python scripts get executed. So the Python
interpreter has to work properly.

Para evitar cualquier problema de vinculador durante el proceso de compilación


que sería una buena idea que las rutas de acceso de la biblioteca ya sea en su
LD_LIBRARY_PATH variable o, en su ld.so.conf archivo. Esto ocurre
normalmente ya en recientes distribuciones.
Para obtener más detalles, tienen también un vistazo a README.Linux en sus
fuentes.
Distribuciones Debian/Ubuntu y más recientes

En los sistemas basados en Debian es bastante fácil obtener todas necesarias


las dependencias instaladas. La mayoría de las bibliotecas están disponibles a
través del administrador de paquetes apt-get o sináptica. A continuación figuran
todos los packgages que necesita instalar. Sobre otras distribuciones, los
nombres del paquete pueden variar, pero normalmente usted podrá encontrar
todos ellos demasiado:
build-essential
python
libcoin60-dev
libsoqt4-dev
libxerces-c2-dev (or libxerces28-dev depending on your system)
libboost-dev
libboost-date-time-dev
libboost-filesystem-dev
libboost-graph-dev
libboost-iostreams-dev
libboost-program-options-dev
libboost-serialization-dev
libboost-signals-dev
libboost-regex-dev
libqt4-dev
qt4-dev-tools
python2.5-dev (or higher version if available)
libopencascade-dev

Para instalar simplemente todas estas bibliotecas en un solo paso, solo copiar
y pegar el texto siguiente en una terminal (sólo para sistemas basados en
debian/ubuntu) como root:
aptitude install build-essential python libcoin60-dev libsoqt4-dev
libxerces-c2-dev
libboost-dev libboost-date-time-dev libboost-filesystem-dev libboost-
graph-dev libboost-iostreams-dev
libboost-program-options-dev libboost-serialization-dev libboost-
signals-dev libboost-regex-dev
libqt4-dev qt4-dev-tools python2.5-dev libopencascade-dev

Opcionalmente, también puede instalar


libsimage-dev (to make Coin to support additinal image file formats)
checkinstall (to register your installed files into your system's
package manager, so yo can easily uninstall later)
python-pivy (needed for the 2D Drafting module)
python-qt4 (needed for the 2D Drafting module)
Fedora

Para construir & instalar FreeCADon Fedora 13, se necesitan unas cuantas
sugerencias y trucos:

Instalar un montón de paquetes necesarios, más están disponibles desde los


repositorios de Fedora 13
Descargar y generar xerces
Descargar y generar OpenCascade. Necesario señalar a xmu:. /configure--con-
xmu-include = / usr/incluyen/X 11/Xmu--biblioteca con xmu = / usr/lib
Descargar y generar Pivy. Tienen que quitar las 2 referencias a inexistentes
"SoQtSpaceball.h" de pivy/interfaces/soqt.i comentarios fuera de esas dos líneas
permiten la generación & instalar al trabajo.
Configurar Freecad. Necesario señalar a unas pocas cosas:. /configure--con-Qt-
include = / usr/include--con-Qt-bin = / usr/lib/qt/bin--con-occ-lib = / usr/local/lib--con-
occ-include = / usr/local/inc--con-xercesc-lib = / usr/local/lib
make - golpea un problema donde la generación es romper porque las ldflags para
soqt se establece en "-LNONE" que hizo libtool barf. Mi solución alguien fue
modificar /usr/lib/Coin2/conf/soqt-default.cfg para que el ldflags son ""en lugar de"-
LNONE". Después de esto - > éxito!
make install
Distribuciones más antiguas y no convencionales

Distribuciones antiguas, sin embargo puede que no encuentre las siguientes


bibliotecas:
OpenCASCADE

No todas las distribuciones de Linux tienen un paquete de OpenCASCADE


oficial en sus repositorios. Usted tiene que comprobar usted mismo para su
distribución, si hay alguno disponible. Por lo menos desde Debian Lenny y
Ubuntu Intrepid sobre un .deb oficial paquete se ofrece. Para mayores Debian o
Ubuntu paquetes de versiones obtendrá no oficial de aquí . Para construir su
propio .deb privada paquetes siguen estos pasos:
wget
http://lyre.mit.edu/~powell/opencascade/opencascade_6.2.0.orig.tar.gz
wget http://lyre.mit.edu/~powell/opencascade/opencascade_6.2.0-7.dsc
wget http://lyre.mit.edu/~powell/opencascade/opencascade_6.2.0-
7.diff.gz
dpkg-source -x opencascade_6.2.0-7.dsc
# Install OCC build-deps
sudo apt-get install build-essential devscripts debhelper autoconf
automake libtool bison libx11-dev tcl8.4-dev tk8.4-dev libgl1-mesa-dev
libglu1-mesa-dev java-gcj-compat-dev libxmu-dev
#Build Opencascade packages. This takes hours and requires
# at least 8 GB of free disk space
cd opencascade-6.2.0 ; debuild
# Install the resulting library debs
sudo dpkg -i libopencascade6.2-0_6.2.0-7_i386.deb
libopencascade6.2-dev_6.2.0-7_i386.deb

De forma alternativa, puede descargar y compilar la versión más reciente de


opencascade.org :
Instalar el paquete normalmente, tenga en cuenta que el instalador es un
programa de java que requiere la edición de tiempo de ejecución de java oficial
de Sun (nombre de paquete: Sol-java6-jre), no el open-source java (gij) que se
incluye con Ubuntu. Instalarlo si es necesario:
sudo apt-get remove gij
sudo apt-get install sun-java6-jre

Tenga cuidado, si utiliza java gij con otras cosas como un complemento del
navegador, no funcionará ya. Si el instalador no funciona, intente:
java -cp path_to_file_setup.jar <-Dtemp.dir=path_to_tmp_directory> run

Una vez que está instalado el paquete, vaya al directorio "ros" dentro del dir
opencascade y hacer
./configure --with-tcl=/usr/lib/tcl8.4 --with-tk=/usr/lib/tk8.4

Ahora puede compilar. Volver a la carpeta de ros y hacer:


make

Tardará mucho tiempo, tal vez varias horas.

Cuando haya terminado, sólo tiene que instalar haciendo


sudo make install

Los archivos de biblioteca se copiarán en /usr/local/lib que está muy bien,


porque allí se va encontrar automáticamente por cualquier programa. Si lo
prefiere, también puede hacer
sudo checkinstall

que hagan lo mismo como hacer instalar pero cree una entrada en su sistema
de gestión de paquetes, por lo que fácilmente puede desinstalar más tarde.
Ahora limpiar los archivos de compilación temporal enorme haciendo
make clean

Posible error 1: si está utilizando la versión 6.2 de OCC, es probable que el


compilador se detendrá justo después del comienzo de la operación de "hacer".
Si sucede, edite el script "configure", busque el CXXFLAGS = "$ CXXFLAGS"
Declaración y reemplazarlo por CXXFLAGS = "$ CXXFLAGS - ffriend -
inyección - fpermissive". A continuación, siga el paso de configuración una vez
más.

Posible error 2: posiblemente varios módulos (WOKSH, WOKLibs, TKWOKTcl,


TKViewerTest y TKDraw) se quejarán de que ellos no pudieron encontrar los
encabezados de tcl/tk. En ese caso, ya que la opción no está disponible en el
script de configuración, tendrá que editar manualmente el archivo makefile de
cada uno de estos módulos: go en adm y ganar y en cada una de las carpetas
de módulos de mala. Editar el fichero Makefile y localice las líneas
CSF_TclLibs_INCLUDES = - I/usr/include y CSF_TclTkLibs_INCLUDES = -
I/usr/include y agregue /tcl8.4 y /tk8.4 a él, por lo que leen:
CSF_TclLibs_INCLUDES =-I/usr/include/tcl8.4 and CSF_TclTkLibs_INCLUDES
=-I/usr/include/tk8.4
SoQt

La biblioteca de SoQt debe compilarse contra Qt4, que es el caso de las


distribuciones más recientes. Pero en el momento de escribir este artículo hubo
sólo paquetes de SoQt4 para Debian propia disponible pero no para todas las
versiones de Ubuntu. Para obtener los paquetes construidos realice los pasos
siguientes:
wget
http://ftp.de.debian.org/debian/pool/main/s/soqt/soqt_1.4.1.orig.tar.g
z
wget http://ftp.de.debian.org/debian/pool/main/s/soqt/soqt_1.4.1-6.dsc
wget http://ftp.de.debian.org/debian/pool/main/s/soqt/soqt_1.4.1-
6.diff.gz
dpkg-source -x soqt_1.4.1-6.dsc
sudo apt-get install doxygen devscripts fakeroot debhelper libqt3-mt-
dev qt3-dev-tools libqt4-opengl-dev
cd soqt-1.4.1
debuild
sudo dpkg -i libsoqt4-20_1.4.1-6_i386.deb libsoqt4-dev_1.4.1-
6_i386.deb libsoqt-dev-common_1.4.1-6_i386.deb

Si estás en un sistema de 64 bits, probablemente necesitará cambiar i386,


amd64.
Pivy

Pivy no es necesaria para construir FreeCAD o para ejecutarlo, pero es


necesario para que el módulo de redacción 2D trabajar. Si no vas a usar ese
módulo, no necesita pivy. En el momento de redactar este informe, Pivy es muy
nuevo y no podría haber hecho su camino a su repositorio de la distribución. Si
no puede encontrar Pivy en el repositorio de paquetes de su distribución, puede
capturar paquetes de debian/ubuntu en la página de descarga de FreeCAD:

http://sourceforge.NET/Projects/Free-CAD/Files/FreeCAD%20Linux/

o compilar pivy:

Instrucciones de compilación de Pivy


Compilar FreeCAD
SourceForge bug tracker: errores de compilación de búsqueda

La forma de autotools

Debe disponer de automake y libtool instalado en su sistema; en


Debian/Ubuntu:
aptitude install automake libtool

Si tienes las fuentes con la subversión, a continuación, debe ser el primer paso
./autogen.sh

crea el script de configuración y mucho más. Para el proceso de generación


propia proporcionamos un script de configuración. Sólo tiene que escribir
./configure

Para obtener todo configurado. Si desea que una visión general de todas las
opciones que puede especificar, puede escribir
./configure --help.

Normalmente necesita ninguno de ellos - a menos que tenga uno de sus


bibliotecas instalados en un directorio realmente raro. Después de que haya
finalizado la configuración, es tan simple como la compilación FreeCAD
make

Si por favor cualquier error se produce durante la construcción de fuentes,


compruebe esta página y el archivo README.Linux, entonces usted podría
saltar a la Bug Tracker en SourceForge, elija los para el Estado y haga clic en
el examinar botón para ver informes anteriores sobre problemas de
compilación. Después de haber construido FreeCAD correctamente, hacer
make install

para instalarlo en su máquina. El directorio de instalación por defecto es


~/FreeCAD

Se instalará en una carpeta de FreeCAD en la carpeta de inicio, así que no


necesita privilegios de root. En lugar de make install, que también puede hacer
checkinstall
De esta manera que se instalará FreeCAD por su sistema de gestión de
paquetes, por lo tanto puede desinstalarlo fácilmente más tarde. Pero dado que
todos de instalación de FreeCAD se encuentran en un único directorio,
simplemente quitando el directorio de FreeCAD es una forma válida para
desinstalar demasiado.
El aenderezar forma

aenderezar es un sistema de compilación más reciente que tiene la gran


ventaja de ser común para los sistemas de destino diferentes (Linux, Windows,
MacOSX, etc.). FreeCAD está cambiando progresivamente al sistema de
aenderezar, y ya puede generar FreeCAD de esa manera. Suponiendo que
aenderezar está instalado en su sistema, cambie a su carpeta de origen
FreeCAD y la cuestión:
cmake .

Tener el origen configurado, a continuación


make

Para tener FreeCAD construido. Una instalación adecuada de todo el sistema


de FreeCAD todavía no puede hacerse con aenderezar, pero puede ejecutar
FreeCAD mediante la emisión de
,/bin/FreeCAD
Partes opcionales

Si desea desarrollar Qt cosas para FreeCAD, necesitará el plugin de Qt


Designer que proporciona todos los widgets personalizados de FreeCAD. Vete
a
freecad/src/Tools/plugins/widget

Hasta el momento no proporcionamos un archivo makefile--pero llamada


qmake plugin.pro

lo crea. Una vez hecho esto, llamar a


make

se creará la libFreeCAD_widgets.so de la biblioteca. Dar a conocer esta


biblioteca a Qt Designer tiene que copiar el archivo a
$QTDIR/plugin/designer
Solución de problemas
Nota para los sistemas de 64 bits

Al crear FreeCAD para 64 bits allí es un problema conocido con el paquete


OpenCASCADE de 64 bits. Para obtener FreeCAD que se está ejecutando
correctamente, puede que tenga que ejecutar el. / configure secuencias de
comandos con el adicional definir conjunto de _OCC64:
./configure CXXFLAGS="-D_OCC64"

Para sistemas basados en Debian esta solución no es necesaria cuando se


utiliza el paquete precompilado porque allí está fabricado para establecer
internamente este define que el paquete de OpenCASCADE. Ahora sólo
necesita compilar FreeCAD de la misma manera como se describió
anteriormente.
Macros de automake

El script de configuración de FreeCAD hace uso de varias macros de automake


que a veces no se instalan con sus paquetes: bnv_have_qt.m4, coin.m4 y
gts.m4. Si es necesario (error mientras configura), google para ellos y le será
encontrarlas fácilmente. Son sólo simples secuencias de comandos que
necesita para colocar en la carpeta /usr/share/aclocal.
Haciendo un paquete debian
Si va a construir un paquete Debian fuera de las fuentes que necesita instalar
estos paquetes en primer lugar:
dh-make
devscripts
lintian (optional, used for checking if packages are standard-
compliant)

Para crear un paquete abierto una consola, simplemente vaya al directorio


FreeCAD y llamada
debuild

Una vez que el paquete se construye, usted puede utilizar lintian para
comprobar si el paquete contiene errores
lintian your-fresh-new-freecad-package.deb (replace by the name of the
package you just created)
Secuencias de comandos de generación automática
Aquí es todo lo que usted necesita para una generación completa de FreeCAD.
Es un enfoque de una secuencia de comandos y funciona en una fresca distro
instalada. Los comandos le pedirá la contraseña de root (para la instalación de
paquetes) y en algún momento a reconocer una huella digital de un repositorio
de servidor o https-subversión de repositorio externo. Este secuencias de
comandos deben ejecutarse en versiones de 32 y 64 bits. Están escritas para
versión distinta, pero también es probables que se ejecutan en una versión
posterior, con o sin cambios de menor importancia.
Si tiene una secuencia de comandos para su distro preferida, por favor,
mándelo! Incorporará en este artículo.
Ubuntu 9.10 - Karmic Koala / Ubuntu 10.04 LTS - Lucid Lynx
sudo apt-get install build-essential python libcoin60-dev libsoqt4-dev
\
libxerces-c2-dev libboost-dev libboost-date-time-dev libboost-
filesystem-dev \
libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev
\
libboost-serialization-dev libboost-signals-dev libboost-regex-dev \
libqt4-dev qt4-dev-tools python2.6-dev libopencascade-dev libsoqt4-dev
\
libode-dev subversion cmake libeigen2-dev libsimage-dev python-qt4 \
libtool autotools-dev automake bison flex

# checkout the latest source


svn co https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk
freecad

# go to source dir
cd freecad

# build configuration
cmake .

# build FreeCAD
make

# test FreeCAD
cd bin
./FreeCAD -t 0
Ubuntu 9.04 - Jaunty Jackalope
# get the needed tools and libs
sudo apt-get install build-essential python libcoin40-dev libsoqt4-dev
\
libxerces-c2-dev libboost-dev libboost-date-time-dev libboost-
filesystem-dev \
libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev
\
libboost-serialization-dev libboost-signals-dev libboost-regex-dev \
libqt4-dev qt4-dev-tools python2.6-dev \
libsimage-dev libopencascade-dev \
libsoqt4-dev libode0-dev subversion cmake libeigen2-dev python-pivy \
libtool autotools-dev automake

# checkout the latest source


svn co https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk
freecad

# go to source dir
cd freecad

# build configuration
cmake .

# build FreeCAD
make

# test FreeCAD
cd bin
./FreeCAD -t 0
11.2 De OpenSuse

Este script es no funciona en este momento porque:

libXerces-c-devel costuras a ser desaparecido....

# install needed packages for development


sudo zypper install gcc cmake subversion OpenCASCADE-devel \
libXerces-c-devel python-devel libqt4-devel python-qt4 \
Coin-devel SoQt-devel boost-devel libode-devel libQtWebKit-devel \
libeigen2-devel

# get the source


svn co https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk
freecad

# go to source dir
cd freecad

# build configuration
cmake .

# build FreeCAD
nice make

# test FreeCAD
cd bin
./FreeCAD -t 0
OpenSuse 11.1
# additional repository (for OpenCascade)
sudo zypper -p http://packman.unixheads.com/suse/11.1/

# install needed packages for development


sudo zypper install gcc cmake subversion OpenCASCADE-devel \
libXerces-c-devel python-devel libqt4-devel python-qt4 \
Coin-devel SoQt-devel boost-devel libode-devel libQtWebKit-devel \
libeigen2-devel

# get the source


svn co https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk
freecad

# go to source dir
cd freecad

# build configuration
cmake .

# build FreeCAD
nice make

# test FreeCAD
cd bin
./FreeCAD -t 0
Squeeze Debian
# get the needed tools and libs
sudo apt-get install build-essential python libcoin60-dev libsoqt4-dev
\
libxerces-c2-dev libboost-dev libboost-date-time-dev libboost-
filesystem-dev \
libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev
\
libboost-serialization-dev libboost-signals-dev libboost-regex-dev \
libqt4-dev qt4-dev-tools python2.5-dev \
libsimage-dev libopencascade-dev \
libsoqt4-dev libode-dev subversion cmake libeigen2-dev python-pivy \
libtool autotools-dev automake

# checkout the latest source


svn co https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk
freecad

# go to source dir
cd freecad

# build configuration
cmake .

# build FreeCAD
make

# test FreeCAD
cd bin
./FreeCAD -t 0

FreeCAD de compilar en un Mac no es muy diferente de los pasos en Linux u


otras variantes de UNIX. El mayor reto es conseguir realmente todas las
dependencias instaladas. En las secciones siguientes, me (lhagan) se detalla
los pasos exactos que tuve que ir a través de conseguir esta aplicación para
compilar en Leopard y Snow Leopard utilizando un Mac Intel (PowerPC debe
ser factible, pero requiere volver a compilar algunas bibliotecas binarios que
todavía no he llegado a). Por lo que yo sé, soy el único para construir con éxito
el FreeCAD en un Mac recientemente, por favor, puesto en el foro de discusión
si estos pasos funcionan para usted, por el ayudar a Foro si no es así, o editar
esta página si encuentra errores.
Descargar las fuentes de FreeCAD
En primer lugar que necesita obtener una copia del árbol de código fuente de
FreeCAD. Sólo retirar la revisión más reciente desde el repositorio de
subversion de SourceForge mediante este comando en el terminal:
svn co http://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk
freecad

Esto pondrá el origen de la FreeCAD y los archivos relacionados en su carpeta


de inicio (~/freecad/). Ubicación no es importante que si sería más bien
colocarlo en otro lugar, sólo necesita acceso completo a los archivos.
Instalación MacPorts y las dependencias de la biblioteca
A continuación, si ya no tienes, instalar MacPorts. MacPorts es un sistema que
permite descargar, compilar e instalar muchas aplicaciones comunes de código
abierto con un solo comando. Aplicaciones similares desde el mundo de
UNIX/Linux son PKGSRC y APT. Para instalar, simplemente Descargar la
imagen de disco desde el sitio de MacPorts y siga las instrucciones:

http://www.MacPorts.org/Install.php

Si o no acaba de instalar MacPorts, probablemente querrá asegurarse de


que está actualizado. Ejecutar:
sudo port selfupdate

Ahora que MacPorts está instalado y actualizado, puede iniciar la


instalación de algunos de los paquetes requeridos de FreeCAD:

Oda
xercesc
impulso
GTS
OpenCV
El siguiente comando será compilación e instalación todas las bibliotecas
necesarias. Si MacPorts produce errores, puede que desee intente instalar
de uno en uno.
sudo port install ode xercesc boost gts opencv

El leopardo de nieve, opencv no construir actualmente. Usted puede,


sin embargo, continuar sin opencv.

Instalación de marcos y OpenCASCADE


FreeCAD tiene otras dependencias (véase CompileOnUnix), pero el resto o
bien se incluyen de forma predeterminada en OS X Leopard o puede
instalarse usando paquetes del instalador. Descargue e instale los
siguientes elementos:

Qt http://qt.nokia.com/downloads
Obtenga la versión de "Marco sólo" a menos que se planea desarrollar usando
Qt (es mucho más pequeño). FreeCAD compila en OS X Leopard con Qt 4.5.
Se instala en /Library/Frameworks y/usr/bin.
Http://www.coin3d.org/lib/coin/releases/ de la moneda
Instale Coin.pkg Y CoinTools.pkg. FreeCAD compila en OS X Leopard con
moneda 3.1.0. Se instala en /Library/Frameworks.
SoQt http://dl.getdropbox.com/u/103808/FreeCAD/SoQt-1.4.1.dmg
Instale SoQt.pkg Y SoQtTools.pkg. Por alguna razón, no se proporciona el
marco de la SoQt como un binario oficial. Para su comodidad, yo estoy
proporcionando la anterior versión compilada. Si desea compilar su propio,
descargue la última fuente de http://www.coin3d.org/lib/soqt/releases y siga las
instrucciones en README.MACOSX. FreeCAD compila en OS X Leopard con
SoQt 1.4.1. Se instala en /Library/Frameworks.
OpenCASCADE
http://dl.getdropbox.com/u/103808/FreeCAD/OpenCASCADE_i
386_6.3.0_20091128.dmg
La por encima de la OCC 6.3.0 distribución binaria es una versión modificada
de la proporcionada por los mantenedores de PythonOCC
http://www.pythonocc.org/. Puede utilizar la versión de PythonOCC, sin
embargo, se necesitan cambios a los archivos de .la en orden para el FreeCAD
proceso para vincular adecuadamente a ella de construcción y tendrás que
descargar el origen de la OCC por separado. He no todavía correctamente
construido OpenCASCADE yo mismo, pero sería igual que eventualmente--
esto sería clave para brindar una distribución de PowerPC (si es incluso
posible). Si te OpenCASCADE para construir en OS X, déjeme saber cómo. Se
instala en /usr/local/lib/OCC y /usr/local/include/OCC.
ACTUALIZADA de 2009-11-28 con correcciones para Snow Leopard. Si ha
instalado OCC anteriores a esta fecha, se recomienda que usted elimina
los archivos antiguos e instala manualmente el nuevo paquete.
sudo rm -r /usr/local/lib/OCC
sudo rm -r /usr/local/include/OCC
Descargar y 'instalar' a la plantilla de
FreeCAD.app
El archivo siguiente contiene la plantilla de una
paquete de aplicación para FreeCAD. Esto no es
estrictamente necesario, pero hace que trabajar con
FreeCAD más conveniente que la configuración
predeterminada de la instalación. Mina se encuentra
en la carpeta /aplicaciones, pero usted debe poder
ponerlo en cualquier lugar que desee--sólo recuerda
que el paquete no se puede mover, después de que
FreeCAD está cumplido y instalado (sin algunas
modificaciones adicionales). Running hacer usando
la configuración por debajo de la voluntad de la
instalación instalar en este paquete.

http://DL.getdropbox.com/u/103808/FreeCAD/FreeCAD_bundle_template_2009
1128.tar.gz
ACTUALIZADA de 2009-11-28 con el nuevo icono de la aplicación de FreeCAD
Compilar
Ahora configurar, compilar e instalar
utilizando los siguientes comandos desde
dentro de la carpeta raíz del FreeCAD de
FreeCAD. Si pone su paquete de
FreeCAD.app en algún lugar distinto de
/aplicaciones (o no está usando el
paquete), cambie la línea 'PREFIX' en
consecuencia.
./autogen.sh

PREFIX=/Applications/FreeCAD.app/Contents
./configure --with-xercesc-lib=/opt/local/lib --with-xercesc-
include=/opt/local/include --with-boost-lib=/opt/local/lib \
--with-boost-include=/opt/local/include --with-qt4-bin=/usr/bin --
with-qt4-framework=/Library/Frameworks \
--with-occ-lib=/usr/local/lib/OCC --with-occ-
include=/usr/local/include/OCC --with-coin=/Library/Frameworks \
--with-soqt=/Library/Frameworks --prefix=$PREFIX --
bindir=$PREFIX/MacOS --libdir=$PREFIX/Frameworks/FreeCAD \
--includedir=$PREFIX/Resources/include --
datarootdir=$PREFIX/Resources/share

make LDFLAGS=-Wl,-headerpad_max_install_names

make install

Dependiendo de su máquina, la hacen paso puede tomar bastante tiempo.


Ejecutar
Si todo ha ido correctamente, haga doble clic en el paquete de .app debe iniciar
FreeCAD. Si tienes cualquier problema, los detalles del post sobre la ayudar a
Foro .

Visión general
Estas son las bibliotecas que no cambian en el proyecto de FreeCAD. Se
utilizan básicamente sin cambios como una biblioteca de vínculos dinámicos
(*.so o *.dll). Si hay un cambio necesario o se necesita una clase contenedora,
a continuación, el código de la envoltura o el código de la Biblioteca ha
cambiado necesario mover para el paquete de base de FreeCAD. Las
bibliotecas utilizadas son:

Tener en cuenta usando LibPack en lugar de descarga e instalación de todas


las cosas en su propia.
Enlaces
Tabla de vínculos

Nombre de lib Versión necesaria Vínculo para obtenerlo

Python > = 2.5. x http://www.Python.org/

OpenCasCade > = 5.2 http://www.opencascade.org

Qt > = 4.1. x http://www.qtsoftware.com

Coin3D > = 2.x http://www.coin3d.org


ODA > = 0.10 http://www.ode.org

SoQt > = 1.2 http://www.coin3d.org

Xerces-C++ > = 2.7 < 3.0 http://XML.Apache.org/Xerces-c/

GTS > = 0.7 http://GTS.sourceforge.NET/

Zlib > = 1.x.x http://www.zlib.NET/

Impulso > = 1.33.x http://www.boost.org/

Eigen2 > = 2.0.5 http://eigen.tuxfamily.org/index.php?title=Main_Page

Detalles
Python

Versión: 2.5 o superior

Licencia: Licencia de Python 2.5

Puede utilizar la fuente o binario de http://www.Python.org/ o utilizar alternetivly


ActiveState Python desde http://www.activestate.com/ aunque es un poco difícil
obtener los libs de depuración de ActiveState.
Descripción
Python es el lenguaje principal de secuencias de comandos y se utiliza en toda
la aplicación. Por ejemplo:

Implementar scripts de prueba para realizar pruebas en:


pérdidas de memoria
garantizar presenta funcionalidad después de los cambios
Contabilizar cheques de generación
pruebas de cobertura de la prueba
Grabación de macros y macro
Implementar lógica de la aplicación para los paquetes estándar
Aplicación de workbenches todo
Dinámico de carga de los paquetes
Aplicación de normas para el diseño (ingeniería de conocimiento)
Haciendo algunas cosas de Internet fancy como grupos de trabajo y PDM.
Y así sucesivamente...

Especialmente la carga de paquete dinámico de Python se utiliza para cargar


en la funcionalidad adicional de tiempo de ejecución y workbenches necesarios
para las tareas reales. Para un vistazo a Python vea: www.python.org por qué
Python puede pedir. Hay algunas razones: hasta ahora he utilizado diferentes
lenguajes de scripting en mi vida profesional:

Perl
Tcl/Tk
VB
Java

Python es más OO a continuación, Perl y Tcl, el código no es un desastre como


en Perl y VB. Java no es un lenguaje de secuencia de comandos en el primer
lugar y disco duro (o imposible) para incrustar. Python está bien documentada y
fáciles de integrar y extender. Es también bien probado y tiene un fuerte
respaldo a celebrar en la comunidad de código abierto.
Créditos
Va a Guido van Rossum y un montón de gente hizo Python sea un éxito!
OpenCasCade

Versión: 5.2 o superior

Licencia: OCTPL

OCC es un núcleo de CAD completo. Originalmente, está desarrollado por


Datavision de Matra en Francia para el Strim (Styler) y aplicaciones de
Quantum de Euclides y más tarde hizo Open Source. Es una biblioteca
realmente enorme y hace que sea una aplicación de CAD libre posible en
primer lugar, proporcionando algunos paquetes que serían difícil o imposible de
aplicar en un proyecto de código abierto:

Un núcleo de geometría compatible con completado de STEP


Un modelo de datos topológicos y las funciones todos necesarias para trabajar en
(cortar, fusible, extruir y así sucesivamente...)
Import estándar- / exportación de procesadores como STEP, IGES, VRML
Visor 3D y 2D con el apoyo de la selección
Una estructura de datos de proyecto de documento y con soporte para guardar y
restore, externo de vinculación de documentos, el nuevo cálculo de la historia de
diseño (modelado paramétrico) y una instalación para cargar dinámicamente de
nuevos tipos de datos como un paquete de extensión

Para aprender más acerca de OpenCasCade eche un vistazo a la página de


OpenCasCade o http://www.opencascade.org .
Qt

Versión: 4.1. x o superior

Licencia: V2.0/v3.0 de la GPL o comercial (desde la versión 4.5 en también


LPGL v2.1)

No creo que necesario que diga mucho acerca de Qt. Es uno de los kits de
herramientas de GUI más utilizadas en proyectos de código abierto. Para mí, el
punto más importante para usar Qt es el diseñador de Qt y la posibilidad de
cargar los cuadros de diálogo todo como un recurso (XML) e incorporar widgets
especializados. En una aplicación de CAX la interacción con el usuario y
cuadros de diálogo son por lejos la mayor parte del código y un diseñador de
buen diálogo es muy importante para ampliar fácilmente FreeCAD con nueva
funcionalidad. Más información y una muy buena documentación en línea que
encontrará en http://www.qtsoftware.com .
Coin3D

Versión: 2.0 o mayor

Licencia: V2.0 GPL o comercial

Moneda es una biblioteca de gráficos 3D de alto nivel con una interfaz de


programación de aplicaciones de C++. Moneda utiliza estructuras de datos de
scenegraph para representar gráficos en tiempo real adecuado para la mayoría
todo tipo de aplicaciones de visualización científica y de ingeniería.

Moneda es portátil en una amplia gama de plataformas: cualquier UNIX / Linux


/ * BSD plataforma, todos de Microsoft de Windows, sistema operativo y Mac
OS X.

Moneda se basa en la biblioteca estándar de la industria de procesamiento del


modo inmediato de OpenGL y agrega abstracciones para nivel superiores
primitivas, proporciona interactividad 3D, inmensamente aumenta la
productividad y comodidad de programador y contiene muchas características
de optimización del complejo para el procesamiento rápido que son
transparentes para el programador de la aplicación.

Moneda se basa en la API abierta de inventor de SGI. Inventor abierto, para


quienes no están familiarizados con ella, desde hace mucho tiempo se ha
convertido en la biblioteca de gráficos estándar de facto para la visualización en
3D y software de simulación visual en la comunidad científica y de ingeniería.
Se ha demostrado que vale durante un período de más de 10 años, su
madurez que contribuyen a su éxito como un gran bloque de creación en miles
de aplicaciones de ingeniería a gran escala alrededor del mundo.

Vamos a utilizar OpenInventor como visor 3D en FreeCAD debido a que el


Visor de OpenCasCade (AIS y Graphics3D) tiene las limitaciones de serios y
los cuellos de botella de rendimiento, especialmente cuando va en
representación de ingeniería a gran escala. Otras cosas como texturas o
procesamiento volumétrica no son realmente compatibles y así
sucesivamente....

Desde la versión 2.0 Coin utiliza un modelo de licencia diferente. No es más


largo LGPL. Utilizan GPL para una licencia comercial para código cerrado y de
código abierto. Esto significa que si desea vender su trabajo basado en
FreeCAD (módulos de extensión), deberá adquirir una licencia de monedas!
ODE (Open motor dinámico)

Versión: 0.10.0 o superior

Licencia: LGPL v2.1 o posterior o BSD

ODE es de código abierto, biblioteca de alto rendimiento para simular dinámica


de cuerpo rígido. Aparece completamente, estable, maduro y plataforma
independiente con una API de C y C++ fácil de usar. Se ha avanzado tipos
conjuntos y integrado de detección de colisiones con la fricción. ODE es útil
para la simulación de vehículos, objetos en entornos de realidad virtual y
criaturas virtuales. Actualmente se utiliza en muchos juegos de ordenador, 3D,
herramientas de simulación y herramientas de autoría.
Créditos
Russell Smith es el principal autor de ODE.

SoQt

Versión: 1.2.0 o superior

Licencia: V2.0 GPL o comercial

SoQt es el inventor vinculante para el Kit de herramientas de Gui de Qt. Por


desgracia, no es más largo LGPL por lo que tenemos que quitarlo de la base
de código de FreeCAD y vincularlo como una biblioteca. Tiene el mismo
modelo de licencia como moneda. Y tienes que compilarlo con su versión de
Qt.
Xerces-C++

Versión: 2.7.0 o superior

Licencia: Versión de licencia de software de Apache 2.0

Xerces-C++ es un analizador XML validar escrito en un subconjunto portátil de


C++. Xerces-C++ facilita la tarea de dar a su aplicación la capacidad para leer y
escribir datos XML. Se proporciona una biblioteca compartida para analizar,
generando, manipular y validar documentos XML.

Xerces-C++ es fiel a la recomendación XML 1.0 y muchos de los estándares


asociados (véase características más abajo).

El analizador proporciona alto rendimiento, modularidad y escalabilidad. Código


fuente, muestras y documentación de la API se proporcionan con el analizador.
Para la portabilidad, ha tenido cuidado para hacer un uso mínimo de plantillas,
no RTTI y uso mínimo de #ifdefs.

El analizador se utiliza para guardar y restaurar parámetros en FreeCAD.


GTS

Versión: 0.7

Licencia: V2.0 LGPL o posterior

GTS las siglas de la biblioteca de superficies trianguladas de GNU. Es un Open


Source Free Software Library pretende proporcionar un conjunto de funciones
útiles para hacer frente a las superficies 3D con la de triángulos
interconectadas. El código fuente está disponible de forma gratuita bajo la
licencia LGPL de software libre.

Realmente no es necesario compilar FreeCAD. Puede cambiar en el uso con


un interruptor proprocessor en FCConfig.h.
Zlib

Versión: 1.x.x

Licencia: zlib License

zlib está diseñado para ser una libre, para fines generales, legalmente no
comprometido--es decir, no cubiertos por ninguna patente--biblioteca de
compresión sin pérdida de datos para su uso en prácticamente cualquier
equipo hardware y sistema operativo. El formato de datos de zlib es en sí
mismo portátil a través de plataformas. A diferencia del método de compresión
LZW utilizado en Unix Compress (1) y en el formato de imagen GIF, el método
de compresión que se utiliza actualmente en zlib esencialmente nunca expande
los datos. (LZW puede duplicar o triplicar el tamaño del archivo en casos
extremos). la huella de la memoria de zlib también es independiente de los
datos de entrada y puede ser reducida, si es necesario, algunos sin costo en
compresión.

Impulso

Versión: 1.33.x

Licencia: Licencia de software de impulso - versión 1.0

Las bibliotecas de C++ de Boost son una colección de las bibliotecas de peer-
reviewed y de código abierto que amplían la funcionalidad de C++. Las
bibliotecas tienen licencia bajo la licencia de software de Boost, diseñado para
permitir a Boost ser usado con ambos proyectos de código abierto y cerrado.
Muchos de los fundadores del Boost están en el Comité de estándar de C++ y
varias bibliotecas de Boost han sido aceptadas para su incorporación a la
técnica 1 informe de C ++ 0 x.

Las bibliotecas están encaminadas a una amplia gama de usuarios de C++ y


dominios de aplicación. Van desde bibliotecas de propósito generales como
SmartPtr, para OS abstracciones como sistema de archivos, bibliotecas,
principalmente dirigidas a otros desarrolladores de biblioteca y avanzadas de
C++ los usuarios, como la MPL.

A fin de garantizar la eficacia y la flexibilidad, Boost hace un amplio uso de


plantillas. Impulso ha sido una fuente de trabajo extenso e investigación en
programación genérica y metaprogramación en C++.

Ver: http://www.boost.org/ para detalles.


LibPack
LibPack es un conveniente paquete con todas las bibliotecas anteriores
empaquetados juntos. Está actualmente disponible para la plataforma de
Windows en el Descargar página! Si está trabajando bajo Linux no necesita un
LibPack, en lugar de debe hacer uso de los repositorios de paquetes de tu
distribución de Linux.
FreeCADLibs7.x Changelog

Utilizando QT 4.5. x y 3.1.x de monedas


Eigen plantilla lib para robot añadido
SMESH experimental
Página de herramienta
Para el desarrollo de cada software graves necesita herramientas. Aquí hay
una lista de herramientas que utilizamos para desarrollar FreeCAD:
Herramientas de independend de plataforma
Kit de herramientas de Qt

Las Qt es un Estado de la técnica, la herramienta de diseño de interfaz de


usuario de plataforma independend. Está contenido en el LibPack de FreeCAD,
pero también puede descargarse en www.trolltech.com .
InkScape

Programa de dibujo de vector de gran . Adhers para el estándar SVG y se utiliza


para dibujar iconos e imágenes. Obtenerlo en www.inkscape.org .
Doxygen

Una herramienta muy buena y estable para generar documentación de origen


de los archivos .h y .cpp.
The Gimp

No mucho que decir sobre el programa de manipulación de imagen de GNU.


Además puede manejar archivos .xpm que es una forma muy conveniente para
manejar iconos en programas de QT. XPM interes es C-código que puede ser
compilado en un programa.

Obtener el GIMP aquí: www.gimp.org


Herramientas de Windows
Express Visual Studio 8

A pesar de que VC8 para el desarrollo de C++ no es realmente un paso


adelante desde el 6 de VisualStudio (OMI un gran paso atrás), su un sistema
libre desarrollo en Windows. Para aplicaciones Win32 nativas que necesita
descargar el PlatformSDK de M $.

Por lo que la edición Express es difícil de encontrar. Pero se puede intentar


este enlace
CamStudio

Es una herramienta de código abierto para grabar podcasts (Webcasts). Su


una muy buena herramienta para crear tutoriales por grabarlas. Su medida no
tan aburrido como escribir documentación.
Ver CamStudio.org para detalles.
Tortuga SVN

Esta es una herramienta muy grande. Hace uso de Subversion (nuestro


sistema de control de versión en sf.net) un verdadero placer. Usted puede a
través de la integración del explorador, administrar revisiones, compruebe en
Diffs, resolver fácilmente Confilcts, hacer ramas y así sucesivamente.... El
cuadro de diálogo de confirmación en sí mismo es una obra de arte. Se le da
una visión general sobre los archivos cambiados y permite colocarlos en la
confirmación o no. Facilita la Junte los cambios a las unidades lógicas y darles
un mensaje de confirmación clara.

Encontrar ToroiseSVN en TortoiseSVN.Tigris.org .


StarUML

Un completo programa de Open Source de UML. Tiene un montón de


características de las grandes, incluyendo el código fuente de C++ engeniering
inversa....

Descargar aquí: staruml.sourceforge.net

Herramientas en Linux
TODO

Esta página muestra las diferentes maneras para iniciar FreeCAD y las
características más importantes de configuración.

Iniciar FreeCAD desde la línea de comandos


FreeCAD puede iniciarse normalmente, haga doble clic en su icono en el
escritorio o seleccionándolo en el menú de inicio, pero también se puede iniciar
directamente desde la línea de comandos. Esto le permite cambiar soem de las
opciones de inicio predeterminada.
Opciones de línea de comandos
Las opciones de línea de comandos son objeto de frecuentes cambios, por lo
tanto, es una buena idea para comprobar las opciones actuales escribiendo:
FreeCAD --help

De la respuesta puede leer los posibles parámetros:


Usage:
FreeCAD [options] File1 File2 .....
Allowed options:
Generic options:
-v [ --version ] print version string
-h [ --help ] print help message
-c [ --console ] start in console mode

Configuration:
-l [ --write-log ] arg write a log file
-t [ --run-test ] arg test level
-M [ --module-path ] arg additional module paths
-P [ --python-path ] arg additional python paths
--response-file arg can be specified with '@name', too
Archivos de respuesta y config
FreeCAD algunas de estas opciones puede leer un archivo de configuración.
Este archivo debe estar en la ruta de acceso de bin y debe tener el nombre
FreeCAD.cfg. Tenga en cuenta que las opciones especificadas en la línea de
comandos reemplazan el archivo config!

Algunos sistemas operativos tienen un límite muy bajo de la longitud de la línea


de comandos. La forma común para solucionar estas limitaciones es usar
archivos de respuesta. Un archivo de respuesta es simplemente un archivo de
configuración que utiliza la misma sintaxis que la línea de comandos. Si la línea
de comando especifica un nombre de archivo de respuesta para utilizar, se ha
cargado y analiza además de la línea de comandos:
FreeCAD @ResponseFile.txt

o:
FreeCAD --response-file=ResponseFile.txt
Opciones ocultas
Hay un par de opciones no visible para el usuario. Estas opciones son, por
ejemplo, los parámetros de X-Window analizados por el sistema de Windows:

-Mostrar la pantalla, define la visualización de X (el valor predeterminado es $


DISPLAY).
-geometría geometría, establece la geometría de cliente de la primera ventana que
se muestra.
fuente de -fn o - de la fuente, define la fuente de la aplicación. La fuente debe
especificarse mediante una descripción de fuente lógica de X.
-bg o - fondo de color, establece el color de fondo por defecto y una paleta de
aplicación (se calculan los tonos claros y oscuros).
-establece el color de fg o - primer plano, el color de primer plano predeterminado.
-establece el color btn o - botón, el color de botón predeterminado.
- name nombre, establece el nombre de la aplicación.
-título título, establece el título de la aplicación.
-visual TrueColor, las fuerzas de la aplicación para que utilice un visual TrueColor
sobre una pantalla de 8 bits.
Conde de -ncols, limita el número de colores asignados en el cubo de color en una
pantalla de 8 bits, si la aplicación es mediante la especificación de color de
QApplication::ManyColor. Si el recuento es 216 entonces un 6 x 6 x 6 color cubo
se utiliza (es decir, 6 niveles de rojo, 6 de color verde y 6 de azul); para otros
valores, un cubo aproximadamente proporcional a un 2 x 3 x 1 cubo se utiliza.
-cmap, hace que la aplicación instalar un mapa de colores privada en una pantalla
de 8 bits.

Ejecutando FreeCAD sin interfaz de usuario


FreeCAD normalmente se inicia en modo de interfaz gráfica, pero también
puede obligar a que se inicie en modo consola escribiendo:
FreeCAD -c

desde la línea de comandos. En modo de la consola, no se mostrará ninguna


interfaz de usuario y, a continuación, se le presentará un prompt del intérprete
de python. Desde ese indicador de python, que tiene la misma funcionalidad
como el intérprete de python que se ejecuta dentro de la interfaz gráfica de
usuario de FreeCAD y el acceso normal a todos los módulos y plugins de
FreeCAD, salvo el módulo de FreeCADGui. Tenga en cuenta que los módulos
que dependen de la FreeCADGui también pueden no estar disponibles.

Ejecutando FreeCAD como un módulo de python


FreeCAD también puede utilizarse para que se ejecute como un módulo de
python dentro de otras aplicaciones que usan python o desde un shell de
python externos. Para ello, la aplicación de python de host debe saber donde
residen sus libs FreeCAD. La mejor manera de obtener es anexar
temporalmente ruta de lib del FreeCAD a la variable sys.path. El siguiente
código escrito desde cualquier shell de python será importar FreeCAD y le
permiten ejecutarlo en la misma forma como en el modo de consola:

import sys sys.path.append("path/to/FreeCAD/lib") # change this by


your own FreeCAD lib path import FreeCAD
Una vez cargada la FreeCAD, corresponde a usted para hacerla a interactuar
con la aplicación host de ninguna manera que se pueda imaginar!

El conjunto de configuración
En cada FreeCAD de inicio examina sus alrededores y los parámetros de línea
de comandos. Acumula un conjunto de configuración que mantiene la
esencia de la información de tiempo de ejecución. Más tarde, esta información
se utiliza para determinar el lugar dónde guardar los datos de usuario o los
archivos de registro. También es muy importante para post postmortem analiza.
Por lo tanto, está guardado en el archivo de registro.
Información relacionada con el usuario

Entradas de configuración de usuario

Nombre de var
Sinopsis Ejemplo M $ Ejemplo Posix (Linux)
config

Ruta de
acceso
donde
FreeCAD
C:\Documents and
almacena
UserAppData Settings\nombre /Home/username/.FreeCAD
los datos
Data\FreeCAD
relacionado
s de usuario
de la
aplicación.

Archivo
donde
FreeCAD
almacena C:\Documents and
UserParameter los datos Settings\nombre /Home/username/.FreeCAD/User.cfg
relacionado Data\FreeCAD\user.cfg
s de usuario
de la
aplicación.
Archivo
donde
FreeCAD C:\Documents and
SystemParamet almacena Settings\nombre /Home/username/.FreeCAD/System.
er los datos Data\FreeCAD\system.c cfg
relacionado fg
s de
aplicación.

Ruta de
C:\Documents and
inicio del
UserHomePath Settings\username\My / home/nombre de usuario
usuario
documentos
actual

Argumentos de línea de comandos

Entradas de configuración de usuario

Nombre de var config Sinopsis En el ejemplo se

LoggingFile 1 si el registro está encendido 1

C:\Documents and
Nombre del archivo donde se coloca
LoggingFileName Settings\nombre
el registro
Data\FreeCAD\FreeCAD.log

Esto indica cómo funcionará el bucle


principal. "Script" significa que se
llama a la secuencia de comandos
determinado y, a continuación, salir.
"Cmd" ejecuta el intérprete de línea
RunMode "Cmd"
de comandos. "Interno" se ejecuta
una secuencia de comandos interno.
"Gui" entra en el bucle de eventos de
Gui. "Módulo" carga un módulo de
python determinado.
FileName Significado depende de la RunMode

ScriptFileName Significado depende de la RunMode

Detallado Nivel de prolijo de FreeCAD "" o "estricto"

Contiene el número de archivos


OpenFileCount abiertos a través de argumentos de "12"
línea de comandos

Contiene las rutas de acceso de


AdditionalModulePaths módulo adicionales dadas en la línea "extraModules /"
de cmd

Sistema relacionados con

Entradas de configuración de usuario

Nombre de var
Sinopsis Ejemplo M $ Ejemplo Posix (Linux)
config

Ruta donde está c:/archivos/FreeCAD_0.7


AppHomePath /User/local/FreeCAD_0.7
instalado FreeCAD de programa

Contiene una lista


de rutas de acceso
que python busca
PythonSearchPath los módulos. Esto es
al inicio puede
cambiar durante la
ejecución

Algunas bibliotecas necesitan llamar a sistema de variables de entorno. A


veces, cuando hay un problema con una instalación de FreeCAD, es porque
algunos variable de entorno está ausente o establecer erróneamente. Por lo
tanto, algunas variables importantes obtener duplicados en la configuración y
guardados en el archivo de registro.

Python relacionados con las variables de entorno:

PYTHONPATH
PYTHONHOME
TCL_LIBRARY
TCLLIBPATH

OpenCascade relacionados con las variables de entorno:

CSF_MDTVFontDirectory
CSF_MDTVTexturesDirectory
CSF_UnitsDefinition
CSF_UnitsLexicon
CSF_StandardDefaults
CSF_PluginDefaults
CSF_LANGUAGE
CSF_SHMessage
CSF_XCAFDefaults
CSF_GraphicShr
CSF_IGESDefaults
CSF_STEPDefaults

Sistema relacionadas con las variables de entorno:

PATH
Generar información relacionada
La siguiente tabla muestra las tetera informaciones acerca de la versión de
compilación. La mayoría de ella proviene desde el repositorio de Subversion.
Esto es necesario para reconstruir exactamente una versión!

Entradas de configuración de usuario

Nombre de var
Sinopsis En el ejemplo se
config

BuildVersionMajor Mayor número de versión 0


de la compilación. Definidas
en src/Build/Version.h.in

Menor número de versión


BuildVersionMinor de la compilación. Definidas 7
en src/Build/Version.h.in

Número de revisión de
repositorio SVN de la src en
BuildRevision 356
la construcción. Generados
por SVN

Intervalo de cambios de
BuildRevisionRange 123-356
diferentes

https://Free-
Dirección URL del
BuildRepositoryURL CAD.SVN.sourceforge.NET/svnroot/Free-
repositorio
CAD/trunk/src

Fecha de la revisión de
BuildRevisionDate 2007/02/03 22:21:18
arriba

Indica si la fuente fue


BuildScrClean retirada de ager ha Origen modificado
cambiado

BuildScrMixed Origen no mezclada

Relacionados con la marca


Configuración de estas entradas están relacionadas con el mecanismo de
creación de marca de FreeCAD. Consulte Marca para más detalles.

Entradas de configuración de usuario

Sinopsis En el ejemplo se
Nombre de var
config

Nombre del archivo ejecutable de generación.


/EXENAME Puede buzo de FreeCAD si se utiliza un main.cpp FreeCAD.exe
diferentes.

En todos los conciertos de versión hasta a la hora


ExeVersion V0.7
de inicio

Icono que se utiliza para el ejecutable, se muestra


AppIcon "FCIcon"
en aplicaciones MainWindow.

ConsoleBanner Banner que se solicita en modo consola

Nombre del icono utilizado para la pantalla de


SplashPicture "FreeCADSplasher"
bienvenida

Alineación del texto en el cuadro de diálogo de


SplashAlignment Izquierda"
bienvenida

SplashTextColor Color de splasher el texto "#000000"

Nombre de la Workbech que empezar programó


StartWorkbench "Diseño de la parte"
después de inicio

Lista de dockwindows (separados por un punto y "Editor de


HiddenDockWindow
coma) que estará deshabilitado propiedad"

Construir herramientas de soporte técnico

El FreeCAD crear la herramienta o fcbt es un script de python ubicado en


trunc/src/Tools/fcbt.py
Se puede utilizar para simplificar algunas tareas frecuentes en la construcción,
la distribución y la extensión FreeCAD.

Uso
Con Python correctamente instalado, fcbt puede ser invocado por el comando
python fbct.py

Muestra un menú, donde puede seleccionar la tarea que desea utilizar para:
FreeCAD Build Tool
Usage:
fcbt <command name> [command parameter]
possible commands are:
- DistSrc (DS) Build a source Distr. of the current source
tree
- DistBin (DB) Build a binary Distr. of the current source
tree
- DistSetup (DI) Build a Setup Distr. of the current source
tree
- DistSetup (DUI) Build a User Setup Distr. of the current
source tree
- DistAll (DA) Run all three above modules
- BuildDoc (BD) Create the documentation (source docs)
- NextBuildNumber (NBN) Increase the Build Number of this Version
- CreateModule (CM) Insert a new FreeCAD Module in the module
directory

For help on the modules type:


fcbt <command name> ?

En la entrada promt escriba el comando abreviado que desea llamar. Por


ejemplo, escriba "CM" para creación de un módulo .
DistSrc
El comando "DS" crea una distribución de código fuente del árbol de código
fuente actual.
DistBin
El comando "DB" crea una distribución binaria del árbol de código fuente actual.
DistSetup
El comando "DI" crea una distribución de configuración del árbol de código
fuente actual.
DistSetup
El comando "DUI" crea una distribución de configuración de usuario del árbol
de código fuente actual.
DistAll
El comando "DA" ejecuta "DS", "DB" y "DI" en la secuencia.
BuildDoc
El comando "BD" crea la documentación del software mediante la ejecución de
Doxygen que debe estar instalado.
NextBuildNumber
El comando "NBN" incrementa el número de compilación para crear una nueva
versión de lanzamiento de FreeCAD.
CreateModule
El comando "CM" crea un nuevo módulo de aplicación .

Creación de un nuevo módulo de aplicación en FreeCAD es bastante


simple. En la FreeCAD árbol de desarrollo existe la Herramienta de generación
de FreeCAD ( fcbt ) que hace las cosas más importantes para usted. Es un
Python secuencia de comandos se encuentra bajo
trunk/src/Tools/fcbt.py

Cuando se instalan correctamente su intérprete de python puede ejecutar la


secuencia de comandos desde la línea de comandos
python fcbt.py

Se mostrará el siguiente menú:


FreeCAD Build Tool
Usage:
fcbt <command name> [command parameter]
possible commands are:
- DistSrc (DS) Build a source Distr. of the current source
tree
- DistBin (DB) Build a binary Distr. of the current source
tree
- DistSetup (DI) Build a Setup Distr. of the current source
tree
- DistSetup (DUI) Build a User Setup Distr. of the current
source tree
- DistAll (DA) Run all three above modules
- BuildDoc (BD) Create the documentation (source docs)
- NextBuildNumber (NBN) Increase the Build Number of this Version
- CreateModule (CM) Insert a new FreeCAD Module in the module
directory

For help on the modules type:


fcbt <command name> ?
En el símbolo del sistema escriba CM para iniciar la creación de un módulo:
Insert command: CM

Ahora se pide para especificar un nombre para su nuevo módulo. Permite


llamarlo TestMod por ejemplo:
Please enter a name for your application: TestMod

Después de presionar entrar en fcbt comienza a copiar todos los archivos


necesarios para el módulo en una nueva carpeta en
trunk/src/Mod/TestMod/

A continuación, todos los archivos se modifican con su nuevo nombre del


módulo. Ahora lo único que necesita hacer es agregar los dos nuevos
proyectos de "appTestMod" y "appTestModGui" a su espacio de trabajo (en
Windows) o a sus objetivos de archivo make (unix). Thats se!

Probar primero
Antes de ir a través del dolor fuera de depuración del uso del marco de prueba
para comprobar si las pruebas estándar funcionen correctamente. Si no quizá
es una instalación rota.

línea de comandos
El de depuración de FreeCAD es apoyado por unos pocos mecanismos
internos. La versión de línea de comandos de FreeCAD proporciona opciones
para la depuración de soporte:
-v
Con la "v" opción FreeCAD da un resultado más detallado.
-l
Con la "l" opción FreeCAD escribe información adicional en un archivo de
registro.

Introducción
FreeCAD viene con un amplio marco de prueba. Las bases de la
pruebas en un conjunto de secuencias de comandos de Python que
se encuentran en el módulo de prueba.

Este artículo se describe el Marca de FreeCAD. La marca significa


para iniciar su propia aplicación en base de FreeCAD. Puede ser sólo
su propio ejecutable o salpicadura pantalla hasta un completo
programa refundido. Sobre la base de la arquitectura flexible de
FreeCAD es fácil de utilizar como base para su propio programa de
propósito especial.
General
La mayor parte de la marca se realiza en el MainCmd.cpp o
MainGui.cpp . Estos proyectos de generan los archivos ejecutables
de FreeCAD. Para hacer su propia marca simplemente copie el projets
principal o MainGui y dar el ejecutable de un nombre propio, por
ejemplo, FooApp.exe. Los ajustes más importantes para un nuevo
aspecto pueden hacerse en un lugar en la función main(). Aquí es la
sección de código que controla la marca:
int main( int argc, char ** argv )
{
// Name and Version of the Application
App::Application::Config()["ExeName"] = "FooApp.exe";
App::Application::Config()["ExeVersion"] = "0.7";

// set the banner (for loging and console)


App::Application::Config()["ConsoleBanner"] = sBanner;
App::Application::Config()["AppIcon"] = "FCIcon";
App::Application::Config()["SplashPicture"] = "FooAppSplasher";
App::Application::Config()["StartWorkbench"] = "Part design";
App::Application::Config()["HiddenDockWindow"] = "Property editor";
App::Application::Config()["SplashAlignment" ] = "Bottom|Left";
App::Application::Config()["SplashTextColor" ] = "#000000"; // black

// Inits the Application


App::Application::Config()["RunMode"] = "Gui";
App::Application::init(argc,argv);

Gui::BitmapFactory().addXPM("FooAppSplasher", ( const char** )


splash_screen);

Gui::Application::initApplication();
Gui::Application::runApplication();
App::Application::destruct();

return 0;
}

La primera entrada de configuración define el nombre del programa.


Esto es, no el nombre del archivo ejecutable, que se puede cambiar
por cambiar el nombre o por la configuración del compilador, pero el
nombre que se muestra en la barra de tareas de windows o en la lista
de programas de sistemas Unix.
Líneas de la siguiente definen las entradas de configuración de su
aplicación de FooApp. Una descripción de la configuración y sus
entradas que encontrará en Start up y configuración .
Imágenes
Todos los recursos de imagen se compilan en FreeCAD. Esto reduce
la carga retrasada y mantiene la instalación compacta. Las imágenes
se incluyen en formato XPM que es básicamente un formato de texto
que utiliza la sintaxis de C. Puede dibujar básicamente este imágenes
con un editor de texto, pero es más cómodo crear las imágenes con
su programa de gráficos favorito y convertirlo posteriormente en
formato XPM.

Programa de imagen de la GNU Gimp puede guardar archivo XPM.


Para la conversión, puede utilizar el ImageConv herramienta de que se
incluye con freecad. Lo puede encontrar en
/trunk/src/Tools/ImageTools/ImageConv

Se puede no sólo convertir imágenes pero también automáticamente


se actualizarán la BmpFactoryIcons.cpp archivo, donde se registran
las imágenes. El uso típico es tan simple como el siguiente ejemplo:
ImageConv -i InputImage.png -o OutputImage.xpm

Esto convierte el archivo InputImage.png en formato XPM y escribe el


resultado en el archivo OutputImage.xpm .

La línea:
Gui::BitmapFactory().addXPM("FooAppSplasher", ( const char** )
splash_screen);

en el main(), a continuación, se incluyen la imagen en la


BitmapFactory de FreeCAD.
Iconos

El icono de la aplicación principal FCIcon que aparece en la ventana


de títulos y otros lugares se define en
/trunk/src/Gui/Icons/images.cpp

y comienza con la línea


static const char *FCIcon[]={

Reemplazarlo con su icono de favorito, vuelva a compilar freecad y se


lleva a cabo el siguiente paso para crear su propia marca. Hay
muchos otros iconos en este archivo que podría cambiar a su gusto.
Si usted necesita agregar nuevos iconos, tienes que registrarlo en
/trunk/src/Gui/Icons/BmpFactoryIcons.cpp

por lo que se puede acceder desde FreeCAD.


Imagen de fondo

Que aparece la imagen de fondo, cuando no hay ninguna ventana de


documento está abierta. Como la pantalla de bienvenida que se ha
definido en developers.h en la sección comenzando con:
static const char* const background[]={

Debe elegir una imagen de bajo contraste para el fondo. De lo


contrario podría irritar al usuario.

Localización es, en general, el proceso de proporcionar un software


con una interfaz de usuario de lengua múltiples. En FreeCAD se
puede establecer el idioma de la interfaz de usuario bajo
Edit→Preferences→Application . Utiliza FreeCAD Qt para habilitar el
soporte de múltiples idiomas. En sistemas Unix/Linux, FreeCAD utiliza
los ajustes actuales de la configuración regional del sistema por
defecto.

Ayudar a traducir FreeCAD


Una de las cosas muy importantes que puede hacer para FreeCAD si
no eres un programador, es ayudar a traducir el programa en su
idioma. Para hacerlo es ahora más fácil que nunca, con el uso de la
Crowdin sistema de colaboración de traducción en línea.
Cómo traducir
Ir a la Página del proyecto de traducción de FreeCAD en Crowdin ;
Inicio de sesión mediante la creación de un nuevo perfil, o mediante una
cuenta de terceros, como su dirección de GMail;
Haga clic en el idioma que desee trabajar en;
Inicio traducir haciendo clic en el botón traducir junto a uno de los
archivos. Por ejemplo, FreeCAD.ts contiene las cadenas de texto para la
GUI principal FreeCAD.
Se puede votar por las traducciones existentes, o crear los suyos propios.
Note: If you are actively taking part in translating FreeCAD and want
to be
informed before next release is ready to be launched,
so there is time to review your translation, please subscribe
to this issue: http://sourceforge.net/apps/mantisbt/free-
cad/view.php?id=137
Traducir con Qt-lingüista (antigua usanza)
La siguiente información no tiene que utilizarse ya y es probable que
se convertirá en obsoleta. Se mantiene aquí para que los
programadores pueden familiarizarse con su funcionamiento.

Abra todas las carpetas de idioma de FreeCAD que se muestra a


continuación
Comprobar que un .ts de archivo con el código de idioma no existe ("fr"
para francés, "de" para alemán, etc...)
Si es que existe, puede descargar ese archivo, si desea modificar,
revisión/mejor la traducción (haga clic en el archivo, a continuación,
Descargar)
Si no existe, descargue el archivo de .ts sin código de idioma (o cualquier
otros .ts disponible, que funciona demasiado)
Cambiar el nombre de ese archivo con el código de idioma
Abrirlo con el programa de Qt-lingüista
Empezar a traducir (lingüista de Qt es muy fácil de usar)
Una vez que se realiza completamente, guarde el archivo
enviar los archivos para nosotros por lo que nos podemos incluirlas en el
código fuente de freecad por lo que éstas beneficien otros usuarios
demasiado.
Archivos de traducción disponibles

GUI principal de FreeCAD


Workbench completa
Dibujo Workbench
Proyecto Workbench
Invertir la ingeniería Workbench
FEM Workbench
Robot Workbench
Imagen Workbench
El programa de esbozo Workbench
Workbench de malla
Prueba Workbench
Los puntos de Workbench
Logicial Workbench
Parte Workbench
PartDesign Workbench
Ensamblado Workbench
MeshPart Workbench

Preparar sus propias aplicaciones de módulos para la


traducción
Requisitos previos
Para localizar a su módulo de aplicación de su necesidad de
ayudantes que vienen con Qt . Puede descargarlos desde la Trolltech-
sitio Web , pero también están incluidos en el LibPack :
qmake
Genera archivos de proyecto
lupdate
Extractos o actualiza los textos originales en el proyecto mediante el análisis de
código fuente
Qt-lingüista
El Qt-lingüista es muy fácil de usar y lo ayuda a traducir con características
interesantes como un libro de la frase común de las sentencias.
Configuración de proyecto
Para iniciar la localización de su proyecto de ir a la GUI-
parte del módulo de usted y tipo sobre la línea de
comandos:
qmake -project

Esto analiza el directorio de proyecto para los archivos


que contienen cadenas de texto y crea un archivo de
proyecto como en el siguiente ejemplo:
######################################################################
# Automatically generated by qmake (1.06c) Do 2. Nov 14:44:21 2006
######################################################################

TEMPLATE = app
DEPENDPATH += .\Icons
INCLUDEPATH += .

# Input
HEADERS += ViewProvider.h Workbench.h
SOURCES += AppMyModGui.cpp \
Command.cpp \
ViewProvider.cpp \
Workbench.cpp
TRANSLATIONS += MyMod_de.ts
Puede agregar manualmente archivos aquí. La sección traducciones contiene
una lista de archivos con la traducción para cada idioma. En el ejemplo anterior
MyMod_de.ts es la traducción alemana.

Ahora que necesita para ejecutar lupdate para extraer todos los literales de
cadena en su GUI. Ejecutando lupdate después de que los cambios en el
código fuente es siempre segura ya que nunca elimina cadenas de los archivos
de las traducciones. Sólo agrega nuevas cadenas.
Ahora necesita agregar el .ts -archivos al proyecto VisualStudio. Especifique la
costumbre siguiente construir un método para ellos:
python ..\..\..\Tools\qembed.py "$(InputDir)\$(InputName).ts"
"$(InputDir)\$(InputName).h" "$(InputName)"

Nota: Escriba esto en una línea de comandos, el salto de línea es sólo para
propósitos de diseño.
Mediante la compilación de la .ts -archivo del ejemplo anterior, un archivo de
encabezado MyMod_de.h se crea. El mejor lugar para incluir esta es en app
<Modul> Gui.cpp. En nuestro ejemplo sería AppMyModGui.cpp . Hay que
agregar la línea
new Gui::LanguageProducer("Deutsch", <Modul>_de_h_data,
<Modul>_de_h_len);

para publicar su traducción en la aplicación.


Creación de archivos de python para la traducción
Para facilitar la localización de los archivos de py puede utilizar la herramienta
"pylupdate4", que acepta uno o más archivos de py. Con la opción -ts usted
puede preparar o actualizar uno o más archivos de .ts. Por ejemplo a preparar
un archivo .ts francés simplemente entrar en la línea de comandos:
pylupdate4 *.py -ts YourModule_fr.ts

la herramienta de pylupdate será analizar los archivos .py para funciones


translate() o tr() y crear un archivo de YourModule_fr.ts. Ese archivo puede el
ser traducidos con QLinguist y un archivo de YourModule_fr.qm producidos a
partir de QLinguist o con el comando
lrelease YourModule_fr.ts

Cuidado con el que la herramienta de pylupdate4 no es muy buena en


reconociendo las funciones de translate(), que necesitan para ser formateado
muy específicamente (véase los archivos del módulo de proyecto para obtener
ejemplos). Dentro de su archivo, a continuación, puede configurar un traductor
como este (después de cargar su QApplication pero antes de crear cualquier
widget de qt):
translator = QtCore.QTranslator()
translator.load("YourModule_"+languages[ln])
QtGui.QApplication.installTranslator(translator)

Opcionalmente, también puede crear el archivo XML Draft.qrc con este


contenido:
<RCC>
<qresource prefix="/translations" >
<file>Draft_fr.qm</file>
</qresource>
</RCC>

y la ejecución de pyrcc4 Draft.qrc -o qrc_Draft.py crea un gran Python que


contiene todos los recursos. BTW este enfoque también trabaja para poner los
archivos de icono en el archivo de un recurso

Traducir la wiki
Este wiki es hosting mucho del contenido. Material más actualizado e
interesante se reunieron en el manual . Así que el primer paso es comprobar si
ya se ha iniciado la traducción manual para su idioma (busque en la barra
lateral izquierda, bajo "manual"). Si no, la cabeza para el foro y decir que desea
iniciar una nueva traducción, vamos a crear la configuración básica para el
idioma que desee trabajar en.

Usted debe, a continuación obtener permiso de edición wiki .


Si su idioma ya está en la lista, consulte las páginas que faltan todavía una
traducción (que se mostrarán en rojo). La técnica es simple: entrar en una
página de Roja y copiar y pegar el contenido de la página correspondiente de
inglés y empezar a traducir. No olvide incluir todas las etiquetas y las plantillas
de la página original de inglés. Algunas de esas plantillas tendrá un equivalente
en el idioma (por ejemplo, existe una plantilla de Docnav francés llamada
Docnav/fr). Mirar otras páginas ya traducidas para ver cómo lo hicieron.

A continuación, una vez que usted traduce una página, debe agregar a la
página original inglés un vínculo para su traducción, para que los lectores
sepan que existe una versión traducida, utilizando la plantilla {{idiomas}}.
Vistazo de cómo otros traductores lo hizo para hacer lo mismo.

Y si no está seguro, la cabeza a los foros y pedir a personas que compruebe lo


que hiciste y te indicará si es justo o no.
Tres plantillas se utilizan comúnmente en las páginas del manual. Estas 3
plantillas han versiones localizadas (plantilla: Docnav / fr, plantilla: fr, etc....)

Plantilla: Docnav : es la barra de navegación en la parte inferior de las páginas, que


muestra anterior y siguientes páginas
Plantilla: idiomas : esta plantilla se colocarán en las páginas originales, para indicar
al lector que existe una traducción. La versión localizada a cambio debe colocarse en
la página traducida, un vínculo a la página original de inglés.
Plantilla: en : hay uno de ellos para cada idioma. Deben colocarse dentro de la
plantilla de la lengua.
Página de Convención de nomenclatura
Ten en cuenta que, debido a limitaciones en la aplicación de SourceForge del
motor MediaWiki, requerimos que las páginas todos mantengan de nombre su
original del homólogo inglés, anexando una barra diagonal y su código de
idioma. Por ejemplo, la página traducida para acerca de FreeCAD debe ser
acerca de Freecad/es para español, acerca de FreeCAD/pl para pulir, etc.. La
razón es simple: para que si traductores está a punto de desaparecer, los
administradores del wiki, que no hablan todos los idiomas, sabrá cuáles son
estas páginas. Esto facilitará el mantenimiento y evitar páginas perdidas.

Si desea que la plantilla de Docnav para mostrar las páginas vinculadas en su


idioma, puede utilizar redirigir las páginas . Son básicamente los vínculos de
acceso directo a la página real. Aquí hay un ejemplo con la página de francés
para acerca de FreeCAD.

La página sobre FreeCAD/fr es la página con contenido


La página À propos de FreeCAD contiene este código:
#REDIRECT [[About FreeCAD/fr]]
Página en the acerca de FreeCAD/fr, el código de Docnav tendrá este aspecto:
{{docnav/fr|Bienvenue sur l'aide en ligne|Fonctionnalités}}

La página "Bienvenue sur Aide en ligne" redirige a la página inicial de la ayuda


en línea/fr y en la página "Fonctionnalités" se redirige a la función de lista/fr.

Si no está seguro de cómo proceder, no dude en pedir ayuda en el foro .

El intérprete de python dentro de FreeCAD se puede extender fácilmente


mediante la adición de nuevos módulos para la instalación de su sistema de
python. Esos módulos se detecta automáticamente y se utilizarán por
FreeCAD.
Todos los módulos de pyhton pueden utilizarse desde dentro de FreeCAD, pero
varios de ellos, enumerados a continuación, tienen una importancia especial
porque permiten python acceso de programas completo a la funcionalidad
central de FreeCAD. Ejemplos de utilización de los módulos de pueden
encontrarse también en la fragmentos de código página.

Nota : de los siguientes módulos, Pivy es ahora plenamente integrados en


cualquier paquete de instalación de FreeCAD, y PyQt4 también está integrada
en el paquete de instalación de Windows.

PyQt4
página Web: http://www.riverbankcomputing.co.uk/pyqt

PyQt (versión 4) es una biblioteca de enlaces de python que permiten acceder,


crear o modificar los programas Qt interfaces. Desde la interfaz de FreeCAD
está construida con Qt, instalación de PyQt4 en el sistema permiten python
programas dentro de FreeCAD para acceder a toda la interfaz, modificar sus
partes, crear nuevos widgets o recopilar información de partes de la interfaz.

PyQt está liberado bajo un sistema de licencias múltiples, el mismo sistema


que utilizado por Qt . Para reanudar, es una versión comercial y una versión
gratuita de la GPL. Si desea utilizarlo para hacer programas comerciales
(código cerrado), deberá adquirir la licencia comercial, de lo contrario,
simplemente se puede instalar y utilizar libremente la versión de la GPL.
Instalación
Antes de instalar PyQt4, obviamente necesita un entorno de python instalado y
funcionando.

Linux

La forma más sencilla de instalar PyQt4 es a través de gestor de paquetes de


su distribución. En los sistemas de Debian/Ubuntu, el nombre del paquete es
generalmente python-Qt mientras que en sistemas basados en RPM se
denomina pyqt4 . Las dependencias necesarias (Qt y SIP) va ser atendidas de
forma automática.

Windows

El programa puede descargarse de aquí . Necesitará instalar las bibliotecas QT


y SIP antes de instalar pyqt4 (a ser documentados).
Uso
Una vez que está instalado, puede comprobar que todo funciona escribiendo
en la consola de python de FreeCAD:
import PyQt4

Para acceder a la interfaz de FreeCAD, escriba:


from PyQt4 import QtCore,QtGui
app = QtGui.qApp
FreeCADWindow = app.activeWindow()

Ahora puede empezar a explorar la interfaz con el comando dir(). Puede


agregar nuevos elementos, como un widget personalizado, con comandos
como:
FreeCADWindow.addDockWidget(QtCore.Qt.RghtDockWidgetArea,my_custom_wid
get)
Documentación
Más tutoriales de pyQt4 (incluyendo cómo construir interfaces con Qt Designer
para utilizar con python):

http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/HTML/Classes.html -la
referencia de la API de PyQt4 oficial

http://www.rkblog.RK.edu.pl/w/p/Introduction-pyqt4/ -una introducción sencilla

http://www.zetcode.com/tutorials/pyqt4/ - tutorial muy completo de fondo

Pivy
página Web: http://pivy.coin3d.org/

Pivy es un moneda enlaces de biblioteca para python, oficialmente apoyado por


moneda. Moneda de sí mismo es un kit de herramientas para la construcción
de aplicaciones 3D en OpenGL. Es el Kit de herramientas que FreeCAD se
utiliza para dibujar su escena 3d en la pantalla. Instalación de Pivy en el
sistema permitirá python programas para acceder a la scenegraph FreeCAD,
dibujar objetos nuevos en la escena y utilizar la amplia gama de herramientas
de monedas disponibles para las operaciones de dibujo. Moneda se basa en el
lenguaje de descripción de escena abierto de inventor. Pivy es utilizado por el
módulo de redacción 2D de FreeCAD (y también por el módulo completo), por
lo que es necesario si desea utilizar cualquier herramienta de esos módulos.

Es importante saber que FreeCAD sólo utiliza moneda para la representación


de objetos en la pantalla, que está separada de la definición de objetos. Esto
significa pivy no será capaz de modificar los objetos existentes, ni para crear
objetos de FreeCAD válidos. Pero puede ser utilizado para dibujar todo tipo de
cosas temporales en pantalla, tales como eje, cuadrículas, manipuladores,
geometría de construcción, etc....

Pivy, así como monedas, es liberado bajo una licencia GPL.


Instalación
Ubuntu & de Debian

Iniciar con Debian Squeeze y Ubuntu Lucid, pivy estará disponible directamente
desde los repositorios oficiales, ahorrándonos muy complicado. En el ínterin,
puede o bien disponibles de descarga uno de los paquetes que hicimos (para
debian y ubuntu karmic) en el Descargar las páginas, o compilarlo usted
mismo.

La mejor manera para compilar pivy fácilmente es agarrar el paquete de fuente


de debian para pivy y hacer un paquete con debuild. Es el mismo código fuente
desde el sitio oficial de pivy, pero la gente de debian hizo varias adiciones de
fijación de errores. También compila fino sobre ubuntu karmic:
http://packages.debian.org/squeeze/python-pivy (Descargar la. orig.gz y el.
diff.gz de archivo, a continuación, descomprima ambos y, a continuación,
aplicar la .diff al origen: vaya a la carpeta de origen pivy sin comprimir y aplique
el parche .diff:
patch -p1 < ../pivy_0.5.0~svn765-2.diff

a continuación
debuild

para que pivy correctamente integrado en un paquete instalable oficial. A


continuación, sólo tiene que instalar el paquete con gdebi.
Otras distribuciones de linux

Primero hay que obtener las fuentes más recientes desde el repositorio del
proyecto:
svn co https://svn.coin3d.org/repos/Pivy/trunk Pivy

a continuación, necesita una herramienta llamada SWIG para generar el código


de C++ para los enlaces de Python. Se recomienda utilizar la versión 1.3.25 de
SWIG, no es la versión más reciente, porque en este momento pivy sólo
funcionará correctamente con 1.3.25. Descargar un 1.3.25 tarball fuente de
http://www.swig.org . A continuación, desembalarlo y desde una línea de
comandos do (como root):
./configure
make
make install (or checkinstall if you use it)

Tarda unos pocos segundos para construir.

Después de vaya a las fuentes de pivy y la llamada


python setup.py build

que crea los archivos de origen. Se puede ejecutar en un error del compilador
donde un 'const char *' no puede convertirse en un 'char *'. Para corregir que
sólo necesita escribir un 'const' antes en las líneas adecuadas. Hay seis líneas
para corregir. Después de eso, instalar mediante la emisión de (como root):
python setup.py install (or checkinstall python setup.py install)

Eso es todo, pivy está instalado.


Windows

Suponiendo que estás utilizando Visual Studio 2005 o posterior debe abrir un
símbolo del sistema con ' Visual Studio 2005 símbolo ' en el menú
Herramientas. Si el intérprete de Python todavía no está en la ruta del sistema
set PATH=path_to_python_2.5;%PATH%

Para obtener trabajo de pivy debe obtener las fuentes más recientes desde el
repositorio del proyecto:
svn co https://svn.coin3d.org/repos/Pivy/trunk Pivy

a continuación, necesita una herramienta llamada SWIG para generar el código


de C++ para los enlaces de Python. Se recomienda utilizar la versión 1.3.25 de
SWIG, no es la versión más reciente, porque en este momento pivy sólo
funcionará correctamente con 1.3.25. Descargar los archivos binarios para
1.3.25 de http://www.swig.org . A continuación, desembalarlo y desde la línea
de comandos agregarlo a la ruta del sistema
set PATH=path_to_swig_1.3.25;%PATH%

y COINDIR a la ruta apropiada


set COINDIR=path_to_coin

En Windows, el archivo de configuración de pivy espera SoWin en lugar de


SoQt como predeterminado. No encuentro una forma obvia para construir con
SoQt, por lo que he modificado el archivo setup.py directamente. En la línea
200 simplemente elimine la parte ' sowin': ('gui._sowin', 'sowin-config',
'pivy.gui'.) (no retire el paréntesis de cierre).

Después de vaya a las fuentes de pivy y la llamada


python setup.py build
que crea los archivos de origen. Se puede ejecutar en varios archivos de
encabezado no se encontró un error de compilación. En este caso ajustar la
variable INCLUDE.
set INCLUDE=%INCLUDE%;path_to_coin_include_dir

y si los encabezados de SoQt no están en el mismo lugar que los encabezados


de monedas también
set INCLUDE=%INCLUDE%;path_to_soqt_include_dir

y por último los encabezados de Qt


set INCLUDE=%INCLUDE%;path_to_qt4\include\Qt

Si está utilizando el Express Edition de Visual Studio puede obtener un pitón


excepción de keyerror. En este caso, usted tiene que modificar algunas cosas
en msvccompiler.py situado en su instalación de python.

Ir a la línea 122 y reemplace la línea


vsbase = r"Software\Microsoft\VisualStudio\%0.1f" % version

con
vsbase = r"Software\Microsoft\VCExpress\%0.1f" % version

A continuación, vuelva a intentarlo una vez más. Si obtiene un segundo error


como
error: Python was built with Visual Studio 2003;...

También debe reemplazar línea 128


self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv1.1")

con
self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv2.0")

Vuelva a intentarlo una vez más. Si vuelve a obtener un error como


error: Python was built with Visual Studio version 8.0, and extensions
need to be built with the same version of the compiler, but it isn't
installed.

a continuación, debe comprobar las variables de entorno


DISTUTILS_USE_SDK y MSSDK con
echo %DISTUTILS_USE_SDK%
echo %MSSDK%

Si no aún definida, entonces, a sólo, por ejemplo, a establecer a 1


set DISTUTILS_USE_SDK=1
set MSSDK=1
Ahora, se puede ejecutar en un error del compilador donde un 'const char *' no
puede convertirse en un 'char *'. Para corregir que sólo necesita escribir un
'const' antes en las líneas adecuadas. Hay seis líneas para corregir. Después
de que copiar el directorio de pivy generado a un lugar donde se encontrará en
el intérprete de python en FreeCAD.
Uso
Tener Pivy acceder a la FreeCAD scenegraph haga lo siguiente:
from pivy import coin
App.newDocument() # Open a document and a view
view = Gui.ActiveDocument.ActiveView
FCSceneGraph = view.getSceneGraph() # returns a pivy Python object
that holds a SoSeparator, the main "container" of the Coin scenegraph
FCSceneGraph.addChild(coin.SoCube()) # add a box to scene

Ahora puede explorar la FCSceneGraph con el comando dir().


Documentación
Lamentablemente la documentación acerca de pivy está todavía casi inexistant
en la red. Pero puede encontrar documentación de Coin útiles, ya que pivy
simplemente traducir las funciones de la moneda, los nodos y los métodos en
python, todo lo mantiene el mismo nombre y las propiedades, teniendo en
cuenta la diferencia de sintaxis entre C y python:

http://doc.coin3d.org/Coin/Classes.html - Coin3D referencia de la API

http://www-
Evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html - El
Inventor Mentor - la "Biblia" de lenguaje de descripción de escena de inventor.

También puede buscar en el archivo Draft.py en la carpeta FreeCAD


Mod/proyecto, ya que hace gran uso de pivy.

Créditos
Aquí una visión general que las personas o las empresas contribuyen a
FreeCAD. Los créditos para las bibliotecas utilizadas ver Bibliotecas de terceros
.
Desarrollador
Desarrollador principal

Sólo los desarrolladores de plomo son capaces de cometer el código en el


repositorio SVN. Actualmente son:

Jürgen Riegel
Werner Mayer

Más tarde allí pueden ser responsabilidades sobre la base del módulo.
Desarrolladores

Personas que han contribuido a una notable cantidad de código:

Havre de van de Yorik


Graeme van der Vlugt
Berthold Grupp
Georg Wiora
Empresas
Empresas que donó el código o Developer:

Imetric 3D

You might also like