"CAD para todos, gratis, y no dejes que nadie vaya ..." o los primeros pasos en la programación de FreeCAD en Python

Quizás ya haya encontrado mis notas sobre los primeros pasos en la programación CAD utilizando el ejemplo de NanoCAD.

Cabe señalar que para una persona que no sabe programar y conoce CAD a nivel de "culman electrónico", fue una aventura increíble. Sin embargo, NanoCAD sigue siendo principalmente un producto comercial. Su versión gratuita no se ha actualizado, durante unos seis años y se ha quedado obsoleta en términos de oportunidades de desarrollo.

Pero realmente quería, como en una maravillosa historia: "¡Felicidad para todos, en vano, y que nadie se ofenda!" . Por lo tanto, se decidió prestar atención al consejo de un compañero de combate DrZugrik e instalar FreeCAD para usted.

Por lo tanto, en una búsqueda ardua, estoy escribiendo material para usted, en solo un día aprendí cómo hacer que este software CAD sea amigo de Anaconda, escribí un script simple en Python que dibuja un pequeño cuadrado con texto y lo probé para trabajar en Windows y Linux. ¿Qué estoy realmente listo para decirte en pasos y mostrar, para que tú también puedas hacer esto?

¿Quieres conocer una encantadora pareja de Python y FreeCAD? Entonces eres bienvenido bajo cat.




Contenido:

Parte I: Introducción.
Parte II: Instalación estándar y primera muestra
Parte III: ahora hazte amigo de FreeCad con Anaconda
Parte IV: Escribir una biblioteca simple
Parte V: Conclusión

Parte I: Introducción


Por extraño que parezca, en Habré hay muy pocas publicaciones dedicadas a FreeCAD, un buen artículo fue publicado por Eddy_Em "Meet: FreeCAD" , y algunos trabajos más en los que se menciona al héroe de nuestro artículo de pasada.

Para empezar, solo dos palabras sobre el programa. No duplicaré la información del sitio oficial, sino que simplemente describiré a grandes rasgos por qué dirigí mi atención a este CAD.

Entonces, FreeCAD es un sistema de diseño asistido por computadora de código abierto, enfocado principalmente en el modelado paramétrico tridimensional. Al momento de escribir, la última versión del programa es 0.18.3. No se confunda que el valor del número de versión está lejos de ser uno. FreeCAD es largo y desarrollado activamente y actualmente es bastante funcional. Además, como lo entiendo desde hace mucho tiempo, tiene una cierta popularidad entre las personas involucradas en el modelado e impresión 3D, especialmente entre las personas ideológicas hechas a sí mismas que están interesadas en el código abierto / hardware abierto y todo tipo de bricolaje.

Pero si de repente no comprende el modelado 3D en absoluto, entonces esta no es una razón para evitar FreeCAD. La funcionalidad CAD se divide en módulos específicos: Workbench, entre los cuales se encuentra el dibujo 2D habitual, que incluye un banco de trabajo para decorar marcos de hojas e incluso un banco de trabajo para implementar el concepto BIM.

En realidad, el programa tiene un "carro y un carrito pequeño", pero hoy trataremos de hacer algo completamente primitivo, solo para "abrir el apetito".


Parte II: Instalación estándar y primera muestra


FreeCAD está disponible para los tres sistemas operativos comunes, pero como estoy privado de la técnica "Apple", solo consideraremos las opciones para Windows 10 y Linux Mint.

La forma más fácil de comenzar a programar para FreeCAD es descargar el paquete de distribución e instalarlo de manera estándar para el sistema operativo. En este caso, tendremos a nuestra disposición un intérprete de Python preinstalado con el programa (al momento de escribir el artículo de Python versión 3.6.6).

Para comenzar a programar para FreeCAD, tal vez incluso más fácil que para NanoCAD o AutoCAD, simplemente abra la pestaña Ver -> Panel -> y encienda la consola Python. En realidad, eso es todo, puedes programar de forma segura.

Pero primero, intentemos dibujar algo usando medios regulares. Por ejemplo, un círculo.
Presta atención a la salida de la consola.

Gui.activateWorkbench("DraftWorkbench") >>> App.newDocument("") >>> App.setActiveDocument("____________________") >>> App.ActiveDocument=App.getDocument("____________________") >>> Gui.ActiveDocument=Gui.getDocument("____________________") >>> Gui.activeDocument().activeView().viewDefaultOrientation() >>> import Draft >>> pl=FreeCAD.Placement() >>> pl.Rotation.Q=(0.0,0.0,1.5308084989341915e-17,1.0) >>> pl.Base=FreeCAD.Vector(-1.0610677003860474,-0.31207874417305,0.0) >>> circle = Draft.makeCircle(radius=0.8633861373365326,placement=pl,face=False,support=None) >>> Draft.autogroup(circle 



FreeCAD no oculta nada debajo del capó, todas las operaciones clave para dibujar un círculo se muestran en la consola. Incluso ahora puede copiar el código y dibujar un segundo círculo, un poco a la derecha.
Intentemos ingresar una variable y dibujar otro círculo, para el cual copiamos la salida de la consola e la insertamos línea por línea haciendo una pequeña modificación.

 x=-1.0610677003860474 pl=FreeCAD.Placement() pl.Rotation.Q=(0.0,0.0,1.5308084989341915e-17,1.0) pl.Base=FreeCAD.Vector(x*5,-0.31207874417305,0.0) circle = Draft.makeCircle(radius=0.8633861373365326,placement=pl,face=False,support=None) 

Como puede ver ahora, hay dos círculos y, según lo planeado, uno a la derecha de la coordenada x del punto base del primer círculo multiplicado por 5.




Parte III: ahora hazte amigo de FreeCad con Anaconda


Pero las capacidades de CAD no se limitan al uso estándar como "culman". Usando la API, FreeCAD puede integrarse en su propio programa y usarse con o sin una interfaz gráfica, pero veremos este problema en otro momento.

Mientras tanto, imagine esta situación, supongamos que le gusta el aprendizaje automático y el análisis de datos en Python y ya ha instalado el kit de distribución Anaconda , entonces probablemente estará muy contento de saber que gracias a los chicos de conda-forge puede combinar todas las características de este kit de distribución y FreeCAD.

El enlace proporciona orientación sobre cómo instalarlo si utiliza mini-conda, y lo instalaremos en la "Anaconda" completa a través de su navegador.

Entonces, abra Anaconda-Navigator, vaya a la pestaña Entornos y cree un nuevo entorno haciendo clic en el botón Crear . El nombre del entorno, puede dar cualquiera, lo llamé - "freecad". Seleccionamos la versión necesaria de Python y creamos un nuevo entorno.



Pero esto no es suficiente, debe agregar el canal conda-forge, simplemente escriba el campo que aparece después de hacer clic en el botón Agregar "conda-forge" y deje que el sistema actualice la lista de paquetes.



Casi listo ahora queda instalar el propio FreeCAD

Haga clic en LMB en el nombre del paquete y seleccione la versión que queremos instalar, como en la imagen a continuación (ya lo he instalado)



Después de una tediosa espera, tendrá el kit de distribución FreeCad completamente instalado, la versión deseada solo tendrá que ser lanzada.

En el caso más simple, sin parámetros de inicio, debe iniciar la consola conda con nuestro entorno e iniciar CAD con el comando FreeCAD del mismo nombre.



Se abrirá una ventana vacía de FreeCAD en la que seleccionaremos un banco de trabajo para el dibujo bidimensional.



Como puede ver, ahora la versión de Python no es para nada lo que era con una instalación estándar.


Creemos un nuevo documento (Control + N). Será útil para probar nuestra mini biblioteca.


Parte IV: Escribir una biblioteca simple


Nuestra biblioteca será primitiva. En esencia, crearemos un comando que dibujará un rectángulo en el que se ingresará el texto arbitrario especificado por el usuario.

Crea un archivo (llamé al mío "drawhabr.py") y escribe el siguiente código en él:

 #Simple lib for test Python API in FreeCad #Tested on Python 3.7. and FreeCad 0.18.3 #Designed for article - https://habr.com/ru/post/464113/ import FreeCAD, FreeCADGui, Part, Draft class stamp: "This class creates a rectangle with text. Coordinates are set by entering into the console." def __init__(self): self.view = FreeCADGui.ActiveDocument.ActiveView x=float(input("set x point ")) y=float(input("set y point ")) mtext=str(input("input text ")) self.drawstamp(mtext, x , y ) FreeCAD.Console.PrintMessage("\r\n Your object was successfully created") def drawstamp(self, mtext,x=0,y=0 ): "Method for placing a figure in model space." if (mtext==""): mtext="Hello Habr!" point=FreeCAD.Placement(FreeCAD.Vector(x,y,0), FreeCAD.Rotation(0,0,0), FreeCAD.Vector(0,0,0)) text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) fontsize = 1.0 textwidth=(len(mtext)*fontsize*0.6)+0.35 textheight=fontsize+0.5 text.ViewObject.FontSize = fontsize text.ViewObject.FontName = "Courier" rec = Draft.makeRectangle(length=textwidth,height=textheight,placement=point,face=False,support=None) 

O simplemente puede copiar el archivo desde GitHub

El código es muy simple, pero creo que vale la pena explicar algunos puntos.

 import FreeCAD, FreeCADGui, Part, Draft 

Importamos las bibliotecas necesarias y luego creamos la clase.
Como todavía no he aprendido cómo manejar la entrada del mouse, ingresaremos las coordenadas para el objeto y el texto directamente en la consola desde el teclado. Esto se implementa mediante métodos estándar de Python. Luego, en el constructor de la clase, llamamos a nuestra función (método), que lo dibujará todo.

De las características de FreeCAD en el constructor de clases, se pueden distinguir dos comandos:

 self.view = FreeCADGui.ActiveDocument.ActiveView FreeCAD.Console.PrintMessage("\r\n Your object was successfully created") 

El primero selecciona el espacio del espacio de trabajo activo para nosotros, y el segundo, después de instalar el objeto, nos escribe un mensaje en la parte inferior de la ventana del programa (en una barra gris, que no debe confundirse con la consola de Python)

El código del método también es intuitivo, pero explicaré la fiabilidad.

  def drawstamp(self, mtext,x=0,y=0 ): "Method for placing a figure in model space." if (mtext==""): mtext="Hello Habr!" 

Requerido en caso de que el usuario ingrese una cadena vacía. Sin esto, la palabra Etiqueta se ingresará en el texto y el rectángulo tendrá una longitud incorrecta.
 point=FreeCAD.Placement(FreeCAD.Vector(x,y,0), FreeCAD.Rotation(0,0,0), FreeCAD.Vector(0,0,0)) 


Defina las coordenadas del punto base del día de nuestro marco que rodea el texto.
Permítame recordarle que los datos se toman de la entrada a la consola.

Tenga en cuenta que estamos trabajando con una coordenada tridimensional de la forma FreeCAD.Vector (x, y, z), pero en este ejemplo podemos descuidar la coordenada Z. Otros parámetros relacionados con la rotación del marco no se tocan.

 text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) 

cree el texto usando el comando Draft.makeText, pasándole el texto que ingresó en la consola.

Tome coordenadas con un ligero desplazamiento desde el punto base del marco.

En el buen sentido, era necesario aprender cómo procesar el marco (borde) del texto utilizando los parámetros de la API, después de lo cual, en base a ello, calcular el ancho y la altura de nuestro marco de encuadre. Pero como yo mismo me familiaricé con el programa, resolví el problema con el método de los campesinos que trabajan. Arreglaremos la altura de la fuente, le asignaremos el estilo de la fuente monoespaciada (Courier) y, dependiendo de esto, determinaremos la longitud y el ancho del marco que dibujamos alrededor del texto.

  text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) fontsize = 1.0 textwidth=(len(mtext)*fontsize*0.6)+0.35 textheight=fontsize+0.5 text.ViewObject.FontSize = fontsize text.ViewObject.FontName = "Courier" 

Solo queda sustituir nuestros parámetros en la función de dibujo del rectángulo

 rec = Draft.makeRectangle(length=textwidth,height=textheight,placement=point,face=False,support=None) 

eso, de hecho, es todo.

Solo queda conectar nuestra biblioteca. Para hacer esto, simplemente puede copiarlo a la carpeta en la que se encuentran el resto de las bibliotecas de Python para el entorno seleccionado.

Por ejemplo, para Windows 10, la ruta puede ser la siguiente (importante desde la ubicación de instalación de Anaconda):

C: \ Users \ YourUsernameName \ Anaconda3 \ envs \ freecad \ Lib

Para Linux, la ruta sería algo como esto:

/home/ourUserName/anaconda3/envs/freecad/lib/python3.7

Todo queda para cargar nuestra biblioteca.
Para hacer esto, primero ingrese el nombre de nuestro módulo en la consola (sin extensión de archivo)

 import drawhabr 

Y luego llama al constructor de la clase

 drawhabr.stamp() 

Eso es todo lo que hay para liderar, parámetros de funciones y disfrutar el resultado.



Por si acaso, aquí hay una captura de pantalla que confirma que todo funciona también en Linux.




Parte V: Conclusión


Hoy, solo hemos dado un pequeño paso en el camino para comprender la API de FreeCAD.
A pesar del hecho de que, en mi opinión, para el dibujo bidimensional y el desarrollo de proyectos, FreeCAD no es tan familiar como AutoCAD (NanoCAD) u otros sistemas CAD comunes, pero es mucho más fácil programarlo.

Incluso a pesar de la falta de documentación y la necesidad de actualizar algunos artículos con ejemplos en Wiki FreeCAD, aún para averiguar su API y ejecutar el primer programa resultó ser una persona bastante inexperta con un conocimiento mínimo para escribir código Python.

Y dado que los desarrolladores no son codiciosos y, si es necesario, incluso permiten el desarrollo comercial utilizando FreeCAD bajo la licencia LGPL y en combinación con toda la potencia de las bibliotecas de complementos de Python (por ejemplo, del mismo kit de distribución de Anaconda), el desarrollo del programa con FreeCAD parece interesante. tarea
Si entiendo que está interesado en este tema, intentaré hacer un mini ciclo de notas por analogía con Nanocad

Source: https://habr.com/ru/post/464113/


All Articles