[Freecad][Pyooml] Piezas paramétricas en python desde Freecad con pyooml

543 views
Skip to first unread message

obijuan

unread,
Mar 21, 2015, 10:24:05 AM3/21/15
to asrob-uc3m-i...@googlegroups.com
Hola,

  Ya hemos hablado alguna vez por aquí de las piezas paramétricas. Openscad es una herramienta fabulosa para hacer diseños paramétricos, y sobre todo, para que se te abra la mente.

  La potencia de Freecad siempre se la he visto en la API que tiene, que te permite crear piezas desde python. Hasta ahora no había trasteado mucho con ella, pero me he puesto a explorar y ... es alucinante.

  He implementando una mini-api similar a la de openscad para que la programación de piezas paramétricas sea muy sencilla. A diferencia de openscad, con python se pueden crear clases, los objetos pueden heredar, etc. Es lo que se conoce como mecánica orientada a objetos, que todavía no está muy explorada (Object Oriented Mechanics).  La biblioteca que estoy haciendo se llama pyooml. Todavíes está en pañales. Apenas tiene nada. Pero se vislumbra el potencial

  Hoy he grabado un video enseñando un poco la manera de trabajar:

  https://www.youtube.com/watch?v=hQoisXgZCuo&list=PLmnz0JqIMEzVo7w2pv6Q04QgRaBTkqR30&index=4

  De cada vídeo, siempre dejo en la wiki información escrita:

http://www.iearobotics.com/wiki/index.php?title=Videoblog#4_Demo_de_objetos_param.C3.A9tricos_en_Python_desde_Freecad

  Para que os hagáis una idea, este script crea la imagen que os adjunto:

#-- Definir los parametros
v = FreeCAD.Vector(5, 5, 5)
A = 10
N = 10
k = 1
z0 = 5
phi_ini = math.pi / 2

#-- Definir las alturas, mediante una funcion sinusoidal
z = [A * math.sin(2 * math.pi * i / N - phi_ini) + A + z0 for i in range(k * N)]

#-- Crear una lista de cajas, con la altura sinusoidal
l = [cube(v.x, v.y, zx + zy).translate(v.x * i, v.y * j, 0) for i, zx in enumerate(z) for j, zy in enumerate(z)]

#-- Unir todos los objetos
union(l)






sin2D.png

lluvi

unread,
Mar 21, 2015, 12:16:37 PM3/21/15
to asrob-uc3m-i...@googlegroups.com
Impresionante Obi

Diego Trapero

unread,
Mar 21, 2015, 7:35:16 PM3/21/15
to asrob-uc3m-i...@googlegroups.com
Una pregunta, ¿pyooml no es como OOML de Alberto Valero, que genera código de Openscad?

Si es así me surgen dos dudas, la primera es cómo interpreta FreeCAD el código de OpenSCAD que le estás mandando, la segunda es si se podrán usar métodos propios de FreeCAD, como por ejemplo programar que le haga un chaflán a una arista.

Gracias!

Juan Gonzalez Gomez

unread,
Mar 22, 2015, 3:29:58 AM3/22/15
to asrob-uc3m-i...@googlegroups.com
Hola Diego,

  OOML es un proyecto que comenzamos Alberto y yo. Inicialmente programé el core en C++ y más adelante lo porté a python (llamándolo pyooml).

  OOML es un concepto independiente de openscad, con la idea de generar piezas mecánicas a partir de código. Por aquél entonces, para hacer las pruebas lo implementamos sobre openscad, pero la idea es que fuera independiente.

  Ahora yo lo estoy re-implementando en python para usar la API de freecad en vez de la de openscad.

A freecad NO le estoy mandando código openscad, sino que estoy haciendo una API nativa en python con la misma apariencia que openscad. Pero en realidad estoy llamando a funciones de Freecad :-)

Esto tiene varias ventajas:

1) Los scripts para hacer las piezas son nativos de python (se puede usar toda la potencia de python)

2) Tienes acceso a TODA la api de Freecad. Por supuesto que puedes  hacer chaflanes y redondeos. Yo de momento no lo tengo implementado en pyooml, pero es muy fácil. Para cualquier objeto que crees, puedes acceder al objeto de Freecad subyacente con la propiedad .obj

    c = cube(10,10,10)
    c.obj ---->  es un objeto Part de freecad. Tienes acceso a toda la api de freecad [1]

[1] http://www.freecadweb.org/wiki/index.php?title=Topological_data_scripting

Saludos, Juan

--

---
Has recibido este mensaje porque estás suscrito al grupo "Clone Wars: Imprimiendo impresoras 3D" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a asrob-uc3m-impreso...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a asrob-uc3m-i...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Jrcrespo

unread,
Mar 22, 2015, 4:40:16 AM3/22/15
to asrob-uc3m-i...@googlegroups.com
NO paras de sorprendernos, siento que no me voy a poner al día nunca, voy años luz en OpenSCAD y FreeCAD, ahora Python, eres un genio!

P.D. mi pequeña antes de decir papa o mama, dirá: "Hola a todos, soy Obijuan..."

Saludos desde Vigo!
Jordi Rodriguez

Juan Gonzalez Gomez

unread,
Mar 22, 2015, 5:29:11 AM3/22/15
to asrob-uc3m-i...@googlegroups.com
Materialización completada...

Código python ---->  pieza digital ----> pieza real

Ahora sí que podemos decir que "estamos programando el mundo"  :-D

pyooml-test-1.jpg

Juan Gonzalez Gomez

unread,
Mar 22, 2015, 6:08:32 AM3/22/15
to asrob-uc3m-i...@googlegroups.com
Lol!!  Pues entonces te doy el pésame por tu hija jajjajaja

El 22 de marzo de 2015, 9:40, Jrcrespo <jrcr...@gmail.com> escribió:

Juan Gonzalez Gomez

unread,
Mar 22, 2015, 7:08:21 AM3/22/15
to asrob-uc3m-i...@googlegroups.com
Programming the world
programming-the-world.png

Diego Trapero

unread,
Mar 22, 2015, 7:53:57 AM3/22/15
to asrob-uc3m-i...@googlegroups.com
OK, ahora ya me ha quedado claro! =)

--

---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Clone Wars: Imprimiendo impresoras 3D" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/asrob-uc3m-impresoras-3d/QARBNzTGcgE/unsubscribe.
Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a asrob-uc3m-impreso...@googlegroups.com.

CheewRafa (Rafa Torres)

unread,
Mar 22, 2015, 3:14:26 PM3/22/15
to asrob-uc3m-i...@googlegroups.com
¿Hay alguna razón por la que no usar el api de freecad directamente?
Parece que estas reimplementando un api que ya está en python.
¿Persigues algo que no se puede hacer con el api de freecad? ¿o que sería más complejo hacerlo directamente?

Son solo unas dudas que me han surgido al ver el api... no lo entiendas como una critica. Es que no acabo de entender la razon de implementar un api para un api...

Saludos
Rafa
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a asrob-uc3m-impresoras-3d+unsub...@googlegroups.com.

Juan Gonzalez Gomez

unread,
Mar 24, 2015, 3:59:51 AM3/24/15
to asrob-uc3m-i...@googlegroups.com
Hola @Cheewrafa!

  jajjaj por supuesto que no lo tomo como una crítica! faltaría mas!

  pyooml es una capa por encima de la API de Freecad para poder añadir funcionalidades nuevas.

La que más me gusta es la de poder definir objetos mediante expresiones:


Ej.   pieza1  =   cube(40, 40, 3, center = True) - cube(3,3,10, center = True).translate(-10, 0, 0) -cube(4,10,10, center = True).translate(10, 0, 0)

Esto te crea la figura que adjunto. Una base con dos vaciados rectangulares

Se puede hacer directamente con la API de Freecad, por supuesto, pero serían muchas más líneas de código

El mismo código se puede hacer usando variables para mejorar la legibilidad:

base = cube(40, 40, 3, center = True)
vaciado1 = cube(3, 3,10, center = True).translate(-10,0,0)
vaciado2 = cube(4,10,10, center = True).translate(10,0,0)

pieza1 = base - vaciado1 - vaciado2

Ahora podemos cambiar las dimensiones de uno de los vaciados directamente
vaciado1.lx = 10
y se modificará automáticamente la pieza final

La idea es que se vayan creando piezas heredadas de esta clase original, de forma que todas tienen los métodos de traslación, rotación, sobrecarga de operadores, etc.

  Estoy explorando las posiblidades. Y si facilita o no el diseño de piezas. Yo apuesto a que si

Saludos, Juan







Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a asrob-uc3m-impreso...@googlegroups.com.
pyooml-ej-1.png

Litris

unread,
Mar 24, 2015, 7:13:03 AM3/24/15
to asrob-uc3m-i...@googlegroups.com
Sigo el hilo ;-)

breiko

unread,
Mar 24, 2015, 7:44:49 AM3/24/15
to asrob-uc3m-i...@googlegroups.com
Interesante post, me lo apunto.

obijuan

unread,
Apr 1, 2015, 1:14:52 PM4/1/15
to asrob-uc3m-i...@googlegroups.com

Unos comanditos en pyooml desde Freecad y obtenemos estos preciosos vectores 3D :-)


frame()

cube(10, 10, 10).ice(80)

v1 = Vector(10, 10, 10)

v2 = Vector(10, 10, 0)

v3 = Vector(0, 0, 10)

svector(v1).color("yellow")

svector(v2)

svector(v3).translate(v2)



El sábado, 21 de marzo de 2015, 15:24:05 (UTC+1), obijuan escribió:
pyooml-vectors1.png

Atancito

unread,
Apr 1, 2015, 1:55:47 PM4/1/15
to asrob-uc3m-i...@googlegroups.com
La verdad que estoy impresionado de todas las posibilidades que ofrece FreeCAD, yo que lo único que conocía era lo que nos enseño @Obijuan en sus tutoriales y ya me creía Dios... xD

Ahora me descubres esto... Quien tuviera 15 años menos, cuando mi cerebro aun no estaba reseco :D

Muchas gracias Obi, me has enseñado un camino muy interesante dentro de FreeCAD ^^

Juan Gonzalez Gomez

unread,
Apr 12, 2015, 2:04:13 PM4/12/15
to asrob-uc3m-i...@googlegroups.com
En la biblioteca de pyooml he incluido vectores y sistemas de referencia. Ahora es muy fácil usar vectores en 3D para aprender o generar documentación:

Parte 1:

Videoblog-10-exp-0.png
Video-tut-9-imagen-1.png

Juan Pinto

unread,
Apr 14, 2015, 1:00:11 PM4/14/15
to asrob-uc3m-i...@googlegroups.com
Una aportacion excelente! Gracias como siempre
 
Salu2

El sábado, 21 de marzo de 2015, 15:24:05 (UTC+1), obijuan escribió:

Juan Gonzalez Gomez

unread,
Apr 14, 2015, 1:05:13 PM4/14/15
to asrob-uc3m-i...@googlegroups.com
Y aquí tengo lista una tapa de queso, obtenida con el cheese-generator :-) . Cada trozo es único. Los radios y las posiciones de los agujeros son aleatorias.

  El script de python se puede ejecutar directamente desde la consola, sin abrir freecad. Al ejecutarlo se genera un trozo de queso aleatorio.

https://github.com/Obijuan/friki/blob/master/cheese-generator.py



cheese-generator-2.png

obijuan

unread,
Apr 15, 2015, 3:05:03 PM4/15/15
to asrob-uc3m-i...@googlegroups.com
Vamos a definir la cinemática directa de un robot de 2 GDL, utilizando matrices de transformación homogeneas:

https://www.youtube.com/watch?v=2kPvyDbLMts&list=PLmnz0JqIMEzVo7w2pv6Q04QgRaBTkqR30&index=11

Esto cada vez se pone más interesante :-)


El sábado, 21 de marzo de 2015, 15:24:05 (UTC+1), obijuan escribió:
Videoblog-11-exp-0.png

moises...@gmail.com

unread,
Sep 20, 2017, 2:56:37 PM9/20/17
to Clone Wars: Imprimiendo impresoras 3D
como puedo instalar la libreria en python desde un windows 7? he intentado descargarlos desde el PIP pero no funciona la verdad es que estoy recien en esto
friki-master.zip
Reply all
Reply to author
Forward
0 new messages