Dibujar logo /Ansible Tools/ en /3D/ usando /OpenSCAD/ y /Blender/

· osiux's blog

#+LINK_HOME:   index.html
#+INCLUDE:     header.org

# GraphViz, antes te admiraba!

Mi primer approuch para graficar suele ser GraphViz 1, pero esta vez se complicó un poco, de por si, siempre se resiste a seguir órdenes estrictas y solo acepta sugerencias que no siempre las toma en cuenta...

# 3D es la que vá!

Entonces decidí usar OpenSCAD 2 el cual ya había utilizado con anterioridad para graficar el isotipo de gcoop 3 y el de FACTTIC 4, y teniendo en cuenta la geometría del logo de Ansible Tools 5, no debería ser muy complejo...

Inicialmente fue fácil, dibujar la porción que se repite, elementos básicos, comencé con un \cylinder{=latex}\ de radio 1, y luego fue cuestión de agregar los otros 3 \cylinders{=latex}\ moviendo (translate) y rotando (rotate) a la posición correcta.

module circles() {
    $fn=32;
    translate([d1,0,0]) cylinder(r=r3, h);
    translate([d2,0,0]) cylinder(r=r3, h);    
    rotate([0,0,a1]) translate([d1,0,0]) cylinder(r=r3, h);
    rotate([0,0,a1]) translate([d2,0,0]) cylinder(r=r3, h);
}

Ahora bien, para agregar las líneas que unían los círculos, en principio fueron simples las exteriores, porque su origen y destino eran el centro de cada circulo dibujados con cylinders, pero las diagonales, no tenía el dato preciso (estoy oxidado con trigonometría), entonces fui probando ángulos por aproximación, queda pendiente mayor precisión.

module lines() {
    $fn=32;
    translate([d1,0,r3/2]) rotate([0,90,45]) cylinder(r=r3/2,(d2-d1)*1.2);
    translate([d2,0,r3/2]) rotate([0,90,145]) cylinder(r=r3/2,(d2-d1)*1.2);    
    translate([d1,0,r3/2]) rotate([0,90,0]) cylinder(r=r3/2,d2-d1);
    translate([d1,0,r3/2]) rotate([270,0,5]) cylinder(r=r3/2,l1);
    translate([d2,0,r3/2]) rotate([270,0,6]) cylinder(r=r3/2,l2);        
}

Y con estas 2 funciones (circles y lines) ya tenía el modulo que se repetía.

module modulo()
{
    union() {
        lines();
        circles();
    }
}

Capturando la secuencia construí un gif del paso a paso del modulo:

Bastó contar, cuántas veces se repetía, eran 32 veces, dividiendo los 360 grados, el ángulo de rotación daba 11.25 grados.

module border() {
    for ( i = [1 : 32] ) {
        rotate([0,0,i*a1]) modulo();
    }
}

# AAAA...

Ahora solo faltaban el círculo central con la A de Ansible, y si bien OpenSCAD permite importar un svg y extruirlo, no recordaba como hacerlo y mucho tiempo no tenía, entonces como no podía resolver la tarea, la delegué en herzet 6 que sabe bastante de Blender 7, solo tuve que exportar el modelo y a otra cosa mariposa...

En cuestión de minutos hertzet ya estaba solucionado mis bugs en Blender y un screenshot bastó para despreocuparme...

Un par de horas mas tarde, obtuve una secuencia de imágenes con la animación para convertir en video! Comparto un gif

# También podes leer

# ChangeLog