Diferencia entre revisiones de «Diseño de piezas con OpenScad II»

De WikiRobotics
Saltar a: navegación, buscar
(Mis cubos con curvas, por favor)
(Para las próximas temporadas de tutoriales ...)
 
(No se muestran 195 ediciones intermedias del mismo usuario)
Línea 12: Línea 12:
  
 
'''Nota''': Bueno, vale, en algunos vídeos me he pasado de tiempo. Intentaré estar por debajo de 5 minutos siempre  :-)
 
'''Nota''': Bueno, vale, en algunos vídeos me he pasado de tiempo. Intentaré estar por debajo de 5 minutos siempre  :-)
 +
 +
'''Nota 2''': ¡buaaahhhh! En el tutorial 21 me he ido a 10 minutos!
  
 
== Descargas ==
 
== Descargas ==
  
 
{| {{tablabonita}}
 
{| {{tablabonita}}
| Pendiente... de momento los ejemplos están accesibles desde el repositorio en [https://github.com/Obijuan/tutorial-openscad/tree/master/temporada-2 github]
+
| Todos los ejemplos están accesibles desde el repositorio en [https://github.com/Obijuan/tutorial-openscad/tree/master/temporada-2 github]
 
|  
 
|  
 
|}
 
|}
 +
 +
== PLAYLIST ==
 +
{|  style="border: 1px solid darkgray; width:100%"
 +
|- style="background: #cedff2;"
 +
! [https://www.youtube.com/playlist?list=PLmnz0JqIMEzXipVqksIcvWfskeEiWFw66 '''PLAYLIST CON TODOS LOS VIDEOS DE LA TEMPORADA 2 (28)''']
 +
|}
 +
 +
  
 
== Aprendiendo más opciones de Openscad ==
 
== Aprendiendo más opciones de Openscad ==
Línea 25: Línea 35:
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [http://www.youtube.com/watch?v=xLWdrG-pogY '''Video Tutorial 1''']
+
! [http://www.youtube.com/watch?v=xLWdrG-pogY '''Video Tutorial 1/28''']
 
|}
 
|}
  
Línea 48: Línea 58:
  
 
* Instalar kate (sudo apt-get install kate)
 
* Instalar kate (sudo apt-get install kate)
* Descargar el fichero [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T01/kate-cfg/openscad.xml openscad.xml]
+
* Descargar el fichero [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T01-editor/kate-cfg/openscad.xml openscad.xml]
 
* Copiar el fichero en ''/usr/share/kde4/apps/katepart/syntax/''
 
* Copiar el fichero en ''/usr/share/kde4/apps/katepart/syntax/''
 
  sudo cp $HOME/Downloads/openscad.xml /usr/share/kde4/apps/katepart/syntax/
 
  sudo cp $HOME/Downloads/openscad.xml /usr/share/kde4/apps/katepart/syntax/
 
* Dar permiso de lectura al fichero:
 
* Dar permiso de lectura al fichero:
 
  sudo chmod a+r  /usr/share/kde4/apps/katepart/syntax/openscad.xml
 
  sudo chmod a+r  /usr/share/kde4/apps/katepart/syntax/openscad.xml
 +
* Ejecutar kate
 +
* Ir a la opción tools > mode > Other > Openscad
  
 
==== Créditos ====
 
==== Créditos ====
Línea 62: Línea 74:
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [http://www.youtube.com/watch?v=dFvxW7ATolc '''Video Tutorial 2''']
+
! [http://www.youtube.com/watch?v=dFvxW7ATolc '''Video Tutorial 2/28''']
 
|}
 
|}
  
Línea 100: Línea 112:
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [http://www.youtube.com/watch?v=sQPa2cbGAwo '''Video Tutorial 3''']
+
! [http://www.youtube.com/watch?v=sQPa2cbGAwo '''Video Tutorial 3/28''']
 
|}
 
|}
  
Línea 143: Línea 155:
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [http://www.youtube.com/watch?v=DIs8MDCJfC0 '''Video Tutorial 4''']
+
! [http://www.youtube.com/watch?v=DIs8MDCJfC0 '''Video Tutorial 4/28''']
 
|}
 
|}
  
Línea 192: Línea 204:
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [http://www.youtube.com/watch?v=0v7RYabL4nM '''Video Tutorial 5''']
+
! [http://www.youtube.com/watch?v=0v7RYabL4nM '''Video Tutorial 5/28''']
 
|}
 
|}
  
Línea 242: Línea 254:
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [http://www.youtube.com/watch?v=vaW5LCskarE '''Video Tutorial 6''']
+
! [http://www.youtube.com/watch?v=vaW5LCskarE '''Video Tutorial 6/28''']
 
|}
 
|}
  
Línea 262: Línea 274:
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [http://www.youtube.com/watch?v=FQlKJZ3MznI '''Video Tutorial 7''']
+
! [http://www.youtube.com/watch?v=FQlKJZ3MznI '''Video Tutorial 7/28''']
 
|}
 
|}
  
Línea 300: Línea 312:
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [http://www.youtube.com/watch?v=GfoJzz-7wLM '''Video Tutorial 8''']
+
! [http://www.youtube.com/watch?v=GfoJzz-7wLM '''Video Tutorial 8/28''']
 
|}
 
|}
  
Línea 351: Línea 363:
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [http://www.youtube.com/watch?v=QOhAltQx8bc '''Video Tutorial 9''']
+
! [http://www.youtube.com/watch?v=QOhAltQx8bc '''Video Tutorial 9/28''']
 
|}
 
|}
  
Línea 400: Línea 412:
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [http://www.youtube.com/watch?v=sCfmxMPpuUI '''Video Tutorial 10''']
+
! [http://www.youtube.com/watch?v=sCfmxMPpuUI '''Video Tutorial 10/28''']
 
|}
 
|}
  
Línea 443: Línea 455:
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [http://www.youtube.com/watch?v=p_J44OXwjxs '''Video Tutorial 11''']
+
! [http://www.youtube.com/watch?v=p_J44OXwjxs '''Video Tutorial 11/28''']
 
|}
 
|}
  
Línea 496: Línea 508:
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [http://www.youtube.com/watch?v=IaIdKBlWRzo '''Video Tutorial 12''']
+
! [http://www.youtube.com/watch?v=IaIdKBlWRzo '''Video Tutorial 12/28''']
 
|}
 
|}
  
  
 
{|
 
{|
| [[Archivo:Cubo-redondeado-3d-1.png|thumb|300px| (''click para ampliar'')]]
+
| [[Archivo:Cubo-redondeado-3d-1.png|thumb|300px| El cubo redondeado en 3D (''click para ampliar'')]]
| [[Archivo:Cubo-redondeado-3d-2.png|thumb|300px| (''click para ampliar'')]]
+
| [[Archivo:Cubo-redondeado-3d-2.png|thumb|300px| Construido a partir de 8 esferas y aplicando el comando hull (''click para ampliar'')]]
 
|----
 
|----
| [[|thumb|300px| (''click para ampliar'')]]
+
| [[Archivo:Cubo-redondeado-3d-6.png|thumb|300px| Comparación entre el cubo redondeado y uno sin redondear (''click para ampliar'')]]
| [[|thumb|300px| (''click para ampliar'')]]
+
| [[Archivo:Cubo-redondeado-3d-7.png|thumb|300px| Obtener las coordenadas de las esferas de los vértices (''click para ampliar'')]]
 
|}
 
|}
  
 
==== Descripción ====
 
==== Descripción ====
un cubo a partir de esferas y hull.
+
Crear un cubo con todas las aristas redondeadas es muy fácil. Basta con colocar esferas en cada uno de los vertices y aplicar el comando hull. Para que el cubo tenga las mismas dimensiones que el equivalente sin redondear, hay que calcular las coordenadas de las 8 esferas.
  
 
==== Código ====
 
==== Código ====
 +
* Fichero: [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T12-cubo-redondeado-3D/cubo-redondeado-3d.scad cubo-redondeado-3d.scad]
 +
 +
//-- Constantes para acceder a las coordenadas X,Y,Z de los vectores
 +
X = 0;
 +
Y = 1;
 +
Z = 2;
 +
 +
//-- Parámetros del cubo redondeado
 +
r = 4; //-- Radio de las curvas
 +
A = [30, 30, 20]; //-- Dimensiones del cubo
 +
 +
//-- Calcular las coordenadas en funcion de los parametros del user
 +
a = (A - [2*r, 2*r, 2*r])/2;
 +
 +
//-- Obtener las coordenadas. Es un atajo para no escribir tanto
 +
x = a[X];
 +
y = a[Y];
 +
z = a[Z];
 +
 +
//-- Calcular los vertices del cubo
 +
vertice = [
 +
  [x, y, z],
 +
  [-x, y, z],
 +
  [-x, -y, z],
 +
  [x, -y, z],
 +
  [x, y, -z],
 +
  [-x, y, -z],
 +
  [-x, -y, -z],
 +
  [x, -y, -z],
 +
];
 +
 +
//-- Cubo de comprobacion. Mismas dimensiones pero sin
 +
//-- redondear. El redondeado debe tener las mismas dimensiones
 +
%cube(A, center = true);
 +
 +
//-- Dibujar el cubo redondeado. Se coloca en cada vertice una
 +
//-- esfera de radio r y se aplica el operador hull
 +
hull()
 +
  for (pos = vertice)
 +
    translate(pos)
 +
      sphere(r = r, $fn = 20);
  
 
=== Objetos condicionales: cilindros redondeados ===
 
=== Objetos condicionales: cilindros redondeados ===
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [ '''Video Tutorial x''']
+
! [http://www.youtube.com/watch?v=R573Dov1Tv0 '''Video Tutorial 13/28''']
 
|}
 
|}
  
 
{|
 
{|
| [[|thumb|300px|  (''click para ampliar'')]]
+
| [[Archivo:Rcilinder-1.png|thumb|300px|  (''click para ampliar'')]]
| [[|thumb|300px| (''click para ampliar'')]]
+
| [[Archivo:Rcilinder-3.png|thumb|300px| (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Rcilinder-5.png|thumb|300px|  (''click para ampliar'')]]
 +
|
 
|}
 
|}
  
 
==== Descripción ====
 
==== Descripción ====
Objeto rcylinder(): un cilindro redondeado por una o dos caras
+
Crearemos un objeto condicional denominado '''rcylinder'''. En función del parámetro ''both'', se dibuja bien un cilindro con ambas tampas redondeadas, o bien sólo con la superior. También la translación aplicada dependerá del valor del parámetro ''center''.
  
 
==== Código ====
 
==== Código ====
 +
* Fichero: [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T13-objetos-condicionales-cilindros-redondeados/cilindro-redondeado.scad cilindro-redondeado.scad]
 +
 +
//-- Cilindro redondeado en las tapas
 +
//-- Parametros:
 +
//-- r: radio del cilindro
 +
//-- h: Altura del cilindro
 +
//-- center : [true, false], centrar el cilindro
 +
//-- both: [true, false]
 +
//-- true: Redondear ambas tapas (superior e inferior)
 +
//-- false: solo se redondea la tapa superior
 +
module rcylinder(r = 4,
 +
                  h = 20,
 +
                  center = false,
 +
                  both = false, $fn = 30)
 +
{
 +
 +
  //-- Calcular la altura del cilindro interior
 +
  //-- Si redondeo por las dos tapas, vale h - 2*r
 +
  //-- si solo una tapa entonces h - r
 +
  hc = (both == true) ? h - 2 * r : h - r;
 +
 
 +
  //-- Calcular la traslacion para centrar el cilindro
 +
  posc = (center == true) ? 0 : h/2;
 +
 
 +
  //-- Aplicar traslaciopn para el centrado
 +
  translate([0, 0, posc])
 +
 
 +
    //-- Cilindro con ambas tapas redondeadas
 +
    //-- Se pone un cilindro de altura hc y una esfera
 +
    //-- en la parte superior y otra en la inferior
 +
    if (both == true) {
 +
      cylinder(r = r, h = hc, center = true, $fn = $fn);
 +
     
 +
      //-- Esferas superior e inferior
 +
      for (i = [-1, 1])
 +
        translate([0, 0, i * hc / 2])
 +
          sphere(r = r);
 +
         
 +
    }
 +
    //-- Cilindro con tapa superior redondeada
 +
    else
 +
      //-- Centrar la figura
 +
      translate([0, 0, -h/2]) {
 +
     
 +
        //-- Cilindro + esfera
 +
        cylinder(r = r, h = hc, $fn = $fn);
 +
          translate([0, 0, hc]) sphere(r = r, $fn = $fn);
 +
      }
 +
       
 +
}
 +
 +
//-- Parametros para los ejemplos
 +
r = 5;
 +
h = 30;
 +
center = false;
 +
$fn = 30;
 +
 +
//-- Cilindro normal
 +
translate([-3*r, 0, 0])
 +
  cylinder(r = r, h = h, center = center, $fn = $fn);
 +
 +
//-- Cilindro con tapa superior redondeada
 +
rcylinder(r = r, h = h, both = false, center = center, $fn = $fn);
 +
 +
//-- Cilindro con ambas tapas redondeadas
 +
translate([3*r, 0, 0])
 +
  rcylinder(r = r, h = h, both = true, center = center, $fn = $fn);
  
=== Cubos redondeados en 3D con hull (II) ===
+
=== Redondeados parciales con hull (II) ===
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [ '''Video Tutorial x''']
+
! [http://www.youtube.com/watch?v=ZWga3xpuZKE '''Video Tutorial 14/28''']
 
|}
 
|}
  
redondeo usando rcylinder: cubos con sólo la parte superior redondeada
+
{|
 +
| [[Archivo:Redondeo1-1.png|thumb|300px| Cubo con 2 aristas verticales afiladas, una en chaflán y otra redondeada (''click para ampliar'')]]
 +
| [[Archivo:Redondeo1-2.png|thumb|300px| Esquema de cómo se ha construido la figura (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Redondeo2-1.png|thumb|300px| Cubo con todas las aristas redondeadas (''click para ampliar'')]]
 +
| [[Archivo:Redondeo2-2.png|thumb|300px| Esquema (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Redondeo3-1.png|thumb|300px| Cubo con las aristas verticales y horizontales superiores redondeadas (''click para ampliar'')]]
 +
| [[Archivo:Redondeo3-2.png|thumb|300px| Esquema (''click para ampliar'')]]
 +
|----------
 +
|}
 +
 
 +
==== Descripción ====
 +
Ejemplo de cómo hacer figuras con diferentes terminaciones en las aristas. Según cómo combinemos los objetos con hull, conseguimos aristas en 90 grados, en chaflán o redondeadas
 +
 
 +
==== Código ====
 +
* Ficheros:
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T14-redondeos-parciales/redondeos_parciales.scad redondeos_parciales.scad]
 +
** Cylindros redondeados: [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T14-redondeos-parciales/rcylinder.scad rcylinder.scad]
 +
 
 +
use <rcylinder.scad>
 +
 +
X = 0;
 +
Y = 1;
 +
Z = 2;
 +
 +
//-- Parametros del cubo
 +
size = [20, 20, 10];
 +
r = 2;
 +
 +
//-- Calcular las coordenadas de la esquina del cuadrante 1
 +
xc = size[X]/2 - r;
 +
yc = size[Y]/2 - r;
 +
zc = size[Z]/2;
 +
 +
//-- Tamaño de las columnas cuadradas
 +
col_size = [2 * r, 2 * r, size[Z]];
 +
 +
//-- Posiciones de las columnas
 +
vertex = [
 +
  [xc, yc, 0],
 +
  [-xc, yc, 0],
 +
  [-xc, -yc, 0],
 +
  [xc, -yc, 0],
 +
];
 +
 +
//-- Ejemplo 1:  Modificacion de las aristas verticales
 +
module example1()
 +
{
 +
  hull() {
 +
    for (v = [0:1])
 +
      translate(vertex[v])
 +
      cube(col_size, center = true);
 +
        //cylinder(r = r, h = size[Z], center = true, $fn = 4);
 +
 +
    translate(vertex[2])
 +
      cylinder(r = r, h = size[Z], center = true, $fn = 50);   
 +
 +
    translate(vertex[3])
 +
      cylinder(r = r, h = size[Z], center = true, $fn = 4);
 +
  }
 +
}
 +
 +
//-- Ejemplo 2: Modificacion de las aristas horizontales y verticales
 +
module example2()
 +
{
 +
  hull() {
 +
  for (v = [0:3])
 +
    translate(vertex[v])
 +
        //cylinder(r = r, h = size[Z], center = true, $fn = 50);
 +
      rcylinder(r = r, h = size[Z], both = false, center = true, $fn = 40);
 +
      //rcylinder(r = r, h = size[Z], both = true, center = true, $fn = 40);
 +
  }
 +
}
 +
 +
//-- Ejemplos para probar
 +
 +
example1();
 +
//example2();
 +
 
 +
=== El operador Minkowski ===
 +
{|  style="border: 1px solid darkgray; width:100%"
 +
|- style="background: #cedff2;"
 +
! [http://www.youtube.com/watch?v=35Wtpk5kVaM '''Video Tutorial 15/28''']
 +
|}
 +
 
 +
{|
 +
| [[Archivo:Minkowski1-1.png|thumb|200px| Minkowski de la pieza con un cilindro (''click para ampliar'')]]
 +
| [[Archivo:Minkowski1-2.png|thumb|200px| Resultado final (''click para ampliar'')]]
 +
| [[Archivo:Minkowski1-3.png|thumb|200px| Piezas originales y resultado del minkowski(''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Minkowski2-1.png|thumb|200px| Minkowski de la pieza con una esfera (''click para ampliar'')]]
 +
| [[Archivo:Minkowski2-2.png|thumb|200px| Resultado final (''click para ampliar'')]]
 +
| [[Archivo:Minkowski2-3.png|thumb|200px| Piezas originales y resultado del minkowski (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Minkowski3-1.png|thumb|200px| Minkowski de la pieza con un cilindro redondeado (''click para ampliar'')]]
 +
| [[Archivo:Minkowski3-2.png|thumb|200px| Resultado final (''click para ampliar'')]]
 +
| [[Archivo:Minkowski3-3.png|thumb|200px| Piezas originales y resultado del minkowski (''click para ampliar'')]]
 +
|----------
 +
 
 +
|}
 +
 
 +
==== Descripción ====
 +
Utilización del operador Minkowski para redondear tanto las aristas verticales como horizontales de un objeto no convexo
 +
 
 +
==== Código ====
 +
* Ficheros:
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T15-Minkowski/minkowski.scad minkowski.scad]
 +
** Cylindro redondeado: [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T15-Minkowski/rcylinder.scad rcylinder.scad]
 +
 
 +
use <rcylinder.scad>
 +
 +
X = 0;
 +
Y = 1;
 +
Z = 2;
 +
 +
size = [20, 20, 10];
 +
r = 2;
 +
 +
//-- Pieza de ejemplo, a la que aplicar Minkowski
 +
module pieza()
 +
{
 +
  cube(size, center = true);
 +
   
 +
  translate([10,10,0])
 +
    cube(size, center = true);
 +
}
 +
 +
//-- Aplicar Minkowski a la pieza, usando diferentes objetos
 +
minkowski() {
 +
  pieza();
 +
 
 +
  cylinder(r = r, h = 1, center = true, $fn = 10);
 +
  //sphere(r = r, $fn = 10);
 +
  //rcylinder(r = r, h = 2 * r, both = false, center = true, $fn = 10);
 +
}
 +
 +
// Pieza original, para compararla con la conseguido con minkowski
 +
*pieza();
 +
 +
//-- La otra pieza utilizada con minkowski
 +
*color("red")
 +
translate([-size[X]/2, 0, size[Z]/2])
 +
cylinder(r = r, h = 1, center = true, $fn = 10);
 +
//sphere(r = r, $fn = 10);
 +
//rcylinder(r = r, h = 2 * r, both = false, center = true, $fn = 10);
  
=== Figuras redondeadas en 3D: Minkowski ===
+
=== Estudiando el código compartido por los demás ===
 
{|  style="border: 1px solid darkgray; width:100%"  
 
{|  style="border: 1px solid darkgray; width:100%"  
 
|- style="background: #cedff2;"
 
|- style="background: #cedff2;"
! [ '''Video Tutorial x''']
+
! [http://www.youtube.com/watch?v=sV3uKn3WEcw '''Video Tutorial 16/28''']
 
|}
 
|}
  
=== Resumen de openscad: cheatsheet! ===
+
{|
[http://www.openscad.org/cheatsheet/ http://www.openscad.org/cheatsheet/]
+
| [[Archivo:Openscad-2-T16-example-9.png|thumb|300px| Ejemplo 9 incluido en Openscad: Un ventilador (''click para ampliar'')]]
 +
| [[Archivo:Openscad-2-T16-example-10.png|thumb|300px| Ejemplo 10 incluido en Openscad: Una superficie (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Openscad-2-T16-MCAD-gear.png|thumb|300px| Engranaje de ejemplo. Incluido en el fichero involute_gears.scad de la librería MCAD (''click para ampliar'')]]
 +
| [[Archivo:Openscad-2-T16-MCAD-hardware.png|thumb|300px| Elementos del fichero hardware.scad de la librería MCAD  (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:R4i3.jpg|thumb|300px| Una Impresora 3D modelo Prusa i3. Las piezas están diseñadas con Openscad (''click para ampliar'')]]
 +
| [[Archivo:Openscad-2-T16-Prusa-i3-carro-x.png|thumb|300px| El carro del eje x de una Prusa i3 (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Openscad-PowerCode.jpg|thumb|300px| Impresora 3D modelo Powercode, derivada de la Prusa i3. Piezas en openscad (''click para ampliar'')]]
 +
| [[Archivo:Openscad-2-T16-PowerCode-carro-x.png|thumb|300px| El carro del eje x de una PowerCode (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Cyclone built v0.9.7.jpg|thumb|300px| La Cyclone PCB Factory, una fresadora imprimible para hacer Circuitos Impresos  (''click para ampliar'')]]
 +
| [[Archivo:Cyclone render v0.9.7.png|thumb|300px| Vista 3D de la Cyclone, hecha con Openscad (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Miniskybot-2-1.jpg|thumb|300px| El Miniskybot II, un robot imprimible (Printbot), diseñado con Openscad  (''click para ampliar'')]]
 +
| [[Archivo:Openscad-tutorial-2-miniskybot-1.png|thumb|300px| Vista 3D del Miniskybot II (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Repyz-20130530 121241.jpg|thumb|300px| Los módulos REPYZ, para hacer robots de tipo gusano-serpiente. Diseñados con Openscad (''click para ampliar'')]]
 +
| [[Archivo:Openscad-tutorial-2-REPYZ-1.png|thumb|300px| Una de las partes del módulo REPYZ (''click para ampliar'')]]
 +
|----------
 +
|}
 +
 
 +
 
 +
{|
 +
| [[Archivo:Openscad-tutorial-cheatsheet.jpg|thumb|600px| La chuleta de Openscad (''click para ampliar'')]]
 +
|}
 +
 
 +
==== Descripción ====
 +
 
 +
La mejora manera de aprender openscad es ver el código de las piezas creadas por otros. Esto es lo grande de los proyectos libres: se tiene acceso a "cómo están hechos", para poder aprender de ellos, modificarlos y mejorarlos.
 +
 
 +
Algunos proyectos interesantes diseñados con openscad son:
 +
 
 +
* [https://github.com/elmom/MCAD MCAD] : Biblioteca de compoentes: engranajes, motores, servos, tornillos, tuercas...
 +
* [https://github.com/josefprusa/Prusa3 Prusa i3]: Impresora 3D modelo Prusa i3
 +
* [https://github.com/Mecan0/Code PowerCode]: Impresora 3D, modelo PowerCode, derivada de la Prusa i3
 +
* [https://github.com/carlosgs/Cyclone-PCB-Factory Cyclone]: Fresadora imprimible, para hacer circuitos impresos
 +
* [https://github.com/Obijuan/Miniskybot Miniskybot Miniskybot]: Robot imprimible, para aprender robótica
 +
* [https://github.com/Obijuan/REPYZ REPYZ]: Módulos imprimibles para hacer robots de tipo gusano/serpiente
 +
* [http://www.openscad.org/cheatsheet/ http://www.openscad.org/cheatsheet/]: Chuleta con todos los comandos de openscad. ¡Imprescindible!
 +
 
 +
==== Código ====
 +
* Ficheros:
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T16-estudiando-codigo-de-otros/zip/01-MCAD.zip 01-MCAD.zip]. Biblioteca MCAD
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T16-estudiando-codigo-de-otros/zip/02-Prusa3.zip Prusa3.zip]. La Prusa i3
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T16-estudiando-codigo-de-otros/zip/03-Code.zip 03-Code.zip]. La Powercode
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T16-estudiando-codigo-de-otros/zip/04-cyclone.zip 04-cyclone.zip]. La Cyclone PCB factory
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T16-estudiando-codigo-de-otros/zip/05-miniskybot.zip 05-miniskybot.zip]. El printbot Miniskybot
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T16-estudiando-codigo-de-otros/zip/06-REPYZ.zip 06-REPYZ.zip]. Módulos imprimibles
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T16-estudiando-codigo-de-otros/07-openscad-cheatsheet/openscad-cheatsheet.pdf openscad-cheatsheet.pdf] (Chuleta para openscad)
 +
 
  
== POR HACER... ==
+
== Update: Actualizando a Openscad 2014.03 ==
 +
=== 17 Probando el nuevo Openscad 2014.03 ===
 +
{|  style="border: 1px solid darkgray; width:100%"
 +
|- style="background: #cedff2;"
 +
! [http://www.youtube.com/watch?v=GxbSo3Ijktw '''Video Tutorial 17/28''']
 +
|}
  
=== Operaciones: Escalar, simetrías ===
+
{|
 +
| [[Archivo:Openscad-2014-03-1.png|thumb|300px| La nueva web de Openscad (''click para ampliar'')]]
 +
| [[Archivo:Openscad-2014-03-2.png|thumb|300px| Una figura recursiva en Openscad 2014.03 (''click para ampliar'')]]
 +
|----------
 +
|}
  
== Creando tus propias transformaciones ==
+
==== Descripción ====
 +
Se acaba de liberar una nueva versión de openscad: la '''2014.03'''. A partir de ahora es la que se utilizará para los tutoriales. Algunas de las mejoras que incluyen son:
 +
* Editor con resaltado de sintáxis
 +
* Parámetro d para estableder el diámetro en cilindros, esferas y círculos
 +
* '''Recursividad'''
  
=== Cuadricula: grid ===
+
=== Código ===
 +
* Fichero: [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T17-openscad-2014-03/zigurat.scad zigurat.scad]
  
== Redondeando figuras ==
+
Ejemplo de una figura recursiva:
  
=== Figuras redondeadas en 3D ===
+
//-- Ejemplo de figura recursiva
* minkowski
+
//-- Piramide escalonada
 +
//-- Utilizar Openscad 2014.03 o superior
 +
 +
//-- Parametros
 +
step = 3; //-- Altura de cada nivel
 +
min = 5;  //-- Dimensiones de la parte superior (ultimo nivel)
 +
 +
//-- Modulo recursivo
 +
//-- n: Numero de niveles de la piramide
 +
module zigurat(n)
 +
{
 +
 +
  //-- Terminacion: en el nivel uno se situa el cubo superior (pequeño)
 +
  if (n <= 1) {
 +
    cube([min, min, step], center = true);
 +
  }
 +
  else {
 +
    //-- Dibujar el cubo del nivel n
 +
    cube([n * min, n * min, step], center = true);
 +
 +
    //-- Colocar encima una piramide de n-1 niveles (recursion)
 +
translate([0, 0, step])
 +
  zigurat(n - 1);
 +
  }
 +
}
 +
 +
//-- Piramide de 10 niveles
 +
zigurat(10);
  
 
== Objetos 3D a partir de objetos 2D ==
 
== Objetos 3D a partir de objetos 2D ==
=== 2 bis) Extruyendo objetos 2D ===
+
=== 18 Extruyendo polígonos ===
* 2d -> square, circle
+
{|  style="border: 1px solid darkgray; width:100%"
* Show: Linear extrusion, rotate extrusion, linear extrusion + twist!
+
|- style="background: #cedff2;"
=== 3) Polígonos 2D ===
+
! [https://www.youtube.com/watch?v=wCI-FbwGF3o '''Video Tutorial 18/28''']
* Ej. triangle
+
|}
  
=== 4) Ejercicio: Rueda del miniskybot ===
+
{|
 +
| [[Archivo:Lingote-3.png|thumb|300px| Un prisma de base trapezoidal (''click para ampliar'')]]
 +
| [[Archivo:Lingote-1.png|thumb|300px| Un trapecio (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Trapecio.png|thumb|300px| Coordenadas del trapecio (''click para ampliar'')]]
 +
|}
  
=== 5) Generación automática de polígonos con python ===
+
==== Descripción ====
 +
Otra forma de diseñar objetos 3D es mediante la creación de polígonos que se extruyen linealmente convirtiéndolos en objetos 3D
  
=== 6) Creando logos ===
+
==== Código ====
* draw lines
+
* Ficheros:
* move to origin
+
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T18-extruyendo-poligonos/extruyendo_poligonos.scad extruyendo_poligonos.scad]
* export to dxf
 
* import into openscad
 
  
=== 7) Creando logos (II) ===
+
//-- Parametros del trapecio
* The same but with bezier curves!!
+
B = 40; //-- Base larga
 +
b = 20; //-- Base corta
 +
h = 15; //-- Altura
 +
 
 +
//-- Rotar prisma para apoyarlo en plano xy
 +
rotate([90, 0, 0])
 +
 +
//-- Extrusion lineal del trapecio
 +
linear_extrude(height = 80, center = true)
 +
 +
//-- Trapecio
 +
polygon(points = [
 +
                  [-B/2, -h/2],
 +
                  [-b/2, h/2],
 +
                  [b/2, h/2],
 +
                  [B/2, -h/2]
 +
                  ]);
  
a) Draw curves
+
=== 19 Extrusión lineal con torsión ===
b) insert multiple points
+
{|  style="border: 1px solid darkgray; width:100%"
c) convert into lines
+
|- style="background: #cedff2;"
d) move orig
+
! [https://www.youtube.com/watch?v=l1acokZktdk '''Video Tutorial 19/28''']
e) export dxf
+
|}
f) import openscad
 
  
=== 8) Creating logos from images! ===
+
{|
Ej. Obijuan Academy!
+
| [[Archivo:Torsion-1.png|thumb|300px| 4 objetos extruidos linealmente con torsión (''click para ampliar'')]]
 +
| [[Archivo:Torsion-2.png|thumb|300px| Un prisa de base rectangular con una torsión de 90 grados (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Torsion-3.png|thumb|300px| Una hélice generada mediante la extrusión con torsión de un círculo transladado (''click para ampliar'')]]
 +
| [[Archivo:Torsion-4.png|thumb|300px| Vista superior de la hélice (''click para ampliar'')]]
 +
|}
  
 +
==== Descripción ====
 +
A la extrusión lineal se le puede añadir torsión con el parámetro twist. Esto permite crear figuras "retorcidas", así como hélices
  
=== 10) .... ===
+
==== Código ====
 +
* Ficheros:
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T19-extrusion-lineal-torsion/extrusion_lineal_torsion.scad extrusion_lineal_torsion.scad]
  
=== 11) Using libraries: write ===
+
//-- Extrusion lineal con torsion de un rectangulo
 +
translate([-50, 0, 0])
 +
  linear_extrude(height = 50, twist = 90, $fn = 100)
 +
    square([40,20], center = true);
 +
 +
//-- Extrusion lineal con torsion de un poligono
 +
 +
//-- Triangulo
 +
translate([0, 0, 0])
 +
  linear_extrude(height = 50, twist = 120, $fn = 100)
 +
    circle(d = 40, $fn = 3);
 +
 +
//-- Hexagono
 +
translate([50, 0, 0])
 +
  linear_extrude(height = 50, twist = 120, $fn = 100)
 +
    circle(d = 40, $fn = 6);
 +
 +
//-- Circulo
 +
translate([100, 0, 0])
 +
  linear_extrude(height = 50, twist = 2*360)
 +
    translate([15, 0, 0])
 +
      circle(d = 20, center = true);
  
=== 12) Obiscad: roudend cube ===
+
=== 20 Extrusión axial ===
 +
{|  style="border: 1px solid darkgray; width:100%"
 +
|- style="background: #cedff2;"
 +
! [https://www.youtube.com/watch?v=FQD8_zI-5Q4 '''Video Tutorial 20/28''']
 +
|}
  
=== 13) Obiscad: Vectors ===
+
{|
 +
| [[Archivo:Toroide-1.png|thumb|300px| Un toro  (''click para ampliar'')]]
 +
| [[Archivo:Toroide-2.png|thumb|300px| Parámetros del toro: radio interior y diámetro de la sección (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Toroide-3.png|thumb|300px| Generación de la sección mediante un círculo desplazado (''click para ampliar'')]]
 +
| [[Archivo:Toroide-4.png|thumb|300px| Toroide de sección triangular (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Toroide-5.png|thumb|300px| Toroide de sección hexagonal (''click para ampliar'')]]
 +
| [[Archivo:Toroide-6.png|thumb|300px| Toroide de sección compuesta por un círculo y un cuadrado (''click para ampliar'')]]
 +
|}
  
=== 14) Obiscad: beveling and reinforcements ===
+
==== Descripción ====
 +
Generación de superficies de revolución usando la extrusión axial. Ejemplos: toro y toroides
 +
 
 +
==== Código ====
 +
* Ficheros:
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T20-extrusion-axial/extrusion_axial.scad extrusion_axial.scad]
 +
 
 +
//-- Parametros del toroide
 +
ri = 10;
 +
ds = 10;
 +
 +
//-- Toroide, de seccion un hexagono
 +
*rotate_extrude($fn = 100)
 +
translate([ds/2 + ri, 0, 0])
 +
circle(d = ds, $fn = 6);
 +
 +
//-- Toroide, cuya seccion es la la union de
 +
//-- varios objetos 2D
 +
rotate_extrude($fn = 100)
 +
translate([ds/2 + ri, 0, 0]) {
 +
  translate([ds/2, 0, 0])
 +
  circle(d = ds);
 +
  square([ds,ds], center = true);
 +
}
 +
 
 +
=== 21 Rueda para printbot ===
 +
{|  style="border: 1px solid darkgray; width:100%"
 +
|- style="background: #cedff2;"
 +
! [https://www.youtube.com/watch?v=oc5JpcLPwN4 '''Video Tutorial 21/28''']
 +
|}
  
=== 15) attach? ===
+
{|
 +
| [[Archivo:Rueda-1.jpg|thumb|300px| (''click para ampliar'')]]
 +
| [[Archivo:Rueda-2.jpg|thumb|300px|  (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Rueda-3.jpg|thumb|300px|  (''click para ampliar'')]]
 +
| [[Archivo:Miniskybot-v1.0-red-r1.jpg|thumb|300px|  (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Rueda-4.png|thumb|300px|  (''click para ampliar'')]]
 +
| [[Archivo:Rueda-5.png|thumb|300px|  (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Rueda-seccion-circular.png|thumb|300px|  (''click para ampliar'')]]
 +
| [[Archivo:Rueda-seccion-triangular.png|thumb|300px|  (''click para ampliar'')]]
 +
|}
  
=== 16) MCAD library ===
+
==== Descripción ====
 +
Diseño de una rueda para un printbot (robot imprimible) utilizando extrusión axial
 +
 
 +
==== Código ====
 +
* Ficheros:
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T21-rueda-miniskybot/rueda.scad rueda.scad]
 +
 
 +
//-- Parametros de la rueda
 +
di = 50;  //-- Diametro interno de la junta torica
 +
ds = 3;  //-- Diametro de la junta torica
 +
h = ds + 2;  //-- Grosor de la rueda
 +
 +
//-- Parametros calculados
 +
d = di + 2 * ds;  //-- Diametro rueda
 +
r1 = d / 2; //-- Radio de la rueda
 +
r2 = ds / 2;  //-- Radio de la junta toria
 +
 +
//-- Seccion de la rueda
 +
module section()
 +
{
 +
 +
  difference() {
 +
    translate([r1 / 2, 0, 0])
 +
      square([r1, h], center = true);
 +
 +
    //-- Para alojamiento circular
 +
    *translate([r1, 0, 0])
 +
      circle(d = 3, $fn = 20);
 +
 +
    //-- Para alojamiento triangular
 +
      translate([r1 - r2, 0, 0])
 +
        polygon(points = [[0, 0],
 +
                        [r2 + 1, r2 + 1],
 +
                        [r2 + 1, -r2 - 1],
 +
                        ]);
 +
  }
 +
}
 +
 +
//-- Junta torica
 +
module junta()
 +
{
 +
  rotate_extrude($fn = 100)
 +
  translate([r1, 0, 0])
 +
    circle(d = ds);
 +
}
 +
 +
//-- Rueda
 +
difference() {
 +
  rotate_extrude(convexity = 10, $fn = 100)
 +
  section();
 +
 +
  //-- Eje de la rueda
 +
  cylinder(d = 3, h = h + 10, center = true, $fn = 20);
 +
}
 +
 +
color("grey")
 +
  junta();
 +
 
 +
=== 22  Extruyendo dibujos con líneas rectas ===
 +
{|  style="border: 1px solid darkgray; width:100%"
 +
|- style="background: #cedff2;"
 +
! [https://www.youtube.com/watch?v=kdFHX-C0c8w '''Video Tutorial 22/28''']
 +
|}
 +
 
 +
{|
 +
| [[Archivo:Extruyendo objetos-1-1.png|thumb|300px| Dibujando una flecha en Inkscape (''click para ampliar'')]]
 +
| [[Archivo:Extruyendo objetos-1-2.png|thumb|300px| Flecha terminada. Exportada a formato dxf (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Extruyendo objetos-1-3.png|thumb|300px| Flecha importada en openscad, como un objeto 2D (''click para ampliar'')]]
 +
| [[Archivo:Extruyendo objetos-1-4.png|thumb|300px| Flecha final en openscad, convertieda en objeto 3D mediante extrusión lineal (''click para ampliar'')]]
 +
|----------
 +
|
 +
|}
 +
 
 +
==== Descripción ====
 +
Openscad puede importar figuras almacenadas en '''archivos .dxf'''.  Pero estas figuras '''sólo pueden tener líneas rectas''' (dxf con curvas no se pueden importar). Para crear figuras usamos programas de diseño 2d, como por ejemplo el [http://www.inkscape.org/es/ Inkscape], que es software libre y multiplataforma. Estas figuras se exportan a formato .dxf y luego se importan en openscad usando el comando '''import'''.
 +
 
 +
==== Código ====
 +
* Ficheros:
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T22-extruyendo-dibujos-1/extruyendo_dxf_1.scad extruyendo_dxf_1.scad]. Ejemplo en openscad
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T22-extruyendo-dibujos-1/flecha.dxf flecha.dxf]. Fichero 2d con la flecha, en formato dxf
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T22-extruyendo-dibujos-1/flecha.svg flecha.svg]. Fichero 2d con el dibujo original, en formato vectorial SVG. Es el que se abre con inkscape
 +
 
 +
linear_extrude(height = 10)
 +
  import("flecha.dxf");
 +
 
 +
=== 23  Me gustan las curvas: Extruyendo dibujos con curvas (II) ===
 +
{|  style="border: 1px solid darkgray; width:100%"
 +
|- style="background: #cedff2;"
 +
! [https://www.youtube.com/watch?v=JD9AqKv1KIo '''Video Tutorial 23/28''']
 +
|}
 +
 
 +
{|
 +
| [[Archivo:Extruyendo-objetos-2-1.png|thumb|300px| Dibujando la flecha con curvas de bezier (''click para ampliar'')]]
 +
| [[Archivo:Extruyendo-objetos-2-2.png|thumb|300px| Flecha con curvas lista (''click para ampliar'')]]
 +
|----------
 +
| [[Archivo:Extruyendo-objetos-2-3.png|thumb|300px| Flecha importada en openscad, en 2D (''click para ampliar'')]]
 +
| [[Archivo:Extruyendo-objetos-2-4.png|thumb|300px| La convertimos en 3D mediante extrusión lineal (''click para ampliar'')]]
 +
|
 +
|}
 +
 
 +
==== Descripción ====
 +
También es posible '''extruir objetos en 2d con curvas''', pero primero es necesario '''convertirlos a segmentos rectos'''. Utilizaremos el inkscape para generar una flecha curva, con '''curvas de bezier'''. Al editarla y seleccionar todos los puntos, veremos dos tipos: los puntos normales y los que tienen 2 tiradores que nos permiten cambiar la curvatura:
 +
 
 +
{|
 +
| [[Archivo:Extruyendo-objetos-2-exp-2.png|thumb|300px| Flecha en inkscape. Puntos normales y los que tienen tiradores (''click para ampliar'')]]
 +
|}
 +
 
 +
El primer paso seŕa insertar más puntos, para "discretizar" las curvas en segmentos rectos. Con todos los puntos seleccionados (en azul), pulsaremos el botón "+".
 +
{|
 +
| [[Archivo:Extruyendo-objetos-2-exp-3.png|thumb|300px| ]]
 +
| Botón para añadir más puntos (''click para ampliar'')
 +
|}
 +
 
 +
Cada vez que se pulsa aparecerán nuevos puntos entre cada dos. Apretarlo 3 ó más veces, según la resolución que se quiera.
 +
 
 +
{|
 +
| [[Archivo:Extruyendo-objetos-2-exp-4.png|thumb|300px| Los puntos se han duplicado (''click para ampliar'')]]
 +
| [[Archivo:Extruyendo-objetos-2-exp-5.png|thumb|300px| Flecha con muchos más puntos (''click para ampliar'')]]
 +
|}
 +
 
 +
Ahora apretamos este botón para convertir todos los puntos en normales, y que las curvas sean segmentos en vez de curvas de bezier:
 +
 
 +
{|
 +
| [[Archivo:Extruyendo-objetos-2-exp-6.png|thumb|300px|]]
 +
|  botón para convertir todos los tramos en segmentos rectos (''click para ampliar'')
 +
|}
 +
 
 +
Y ya no deben aparecer tiradores en los puntos. El objeto está formado sólo por segmentos rectos. Está listo para importarlo en openscad y poder extruirlo!
 +
 
 +
{|
 +
| [[Archivo:Extruyendo-objetos-2-exp-7.png|thumb|300px| (''click para ampliar'')]]
 +
| [[Archivo:Extruyendo-objetos-2-exp-1.png|thumb|300px|  (''click para ampliar'')]]
 +
|----------
 +
|}
 +
 
 +
==== Código ====
 +
* Ficheros:
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T23-extruyendo-dibujos-2/extruyendo_objetos-2.scad extruyendo_objetos-2.scad]. Ejemplo en openscad
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T23-extruyendo-dibujos-2/flecha-curva.dxf flecha-curva.dxf]. Flecha curvada en DXF
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T23-extruyendo-dibujos-2/flecha-curva.svg flecha-curva.svg]. Flecha curvada en SVG, para editar con Inkscape
 +
 
 +
linear_extrude(height = 10)
 +
  import ("flecha-curva.dxf");
 +
 
 +
=== 24  ¡Pon un smiley en tu vida! (III) ===
 +
{|  style="border: 1px solid darkgray; width:100%"
 +
|- style="background: #cedff2;"
 +
! [https://www.youtube.com/watch?v=GXpwOZ_K_QM '''Video Tutorial 24/28''']
 +
|}
 +
 
 +
{|
 +
| [[Archivo:Openscad-smiley-1.png|thumb|600px| Dibujando el smiley en inkscape (''click para ampliar'')]]
 +
|}
 +
 
 +
{|
 +
| [[Archivo:Openscad-smiley-2.png|thumb|300px| Smiley importado en 2d en openscad (''click para ampliar'')]]
 +
| [[Archivo:Openscad-smiley-3.png|thumb|300px| El smiley en 3d (''click para ampliar'')]]
 +
|----------
 +
|
 +
|}
 +
 
 +
==== Descripción ====
 +
El smiley está compuesto de 3 círculos y un polígono con curvas de bezier (la sonrisa). Una vez hecho se combinan todos los ejemplos en uno único utilizando la opción '''path/combine'''
 +
 
 +
{|
 +
| [[Archivo:Openscad-smiley-exp-1.png|thumb|600px| Combinando los cuatro objetos de la cara en uno único (''click para ampliar'')]]
 +
|}
 +
 
 +
Se convierte en un objeto hecho sólo con curvas de bezier y rectas.
 +
 
 +
{|
 +
| [[Archivo:Openscad-smiley-exp-2.png|thumb|300px| Objeto único (''click para ampliar'')]]
 +
| [[Archivo:Openscad-smiley-exp-3.png|thumb|300px| Los puntos del nuevo objetos (''click para ampliar'')]]
 +
|}
 +
 
 +
A continuación hacemos lo mismo que en los tutoriales anteriores: seleccionar todos los puntos para añadir más y convertirlos en líneas rectas
 +
 
 +
{|
 +
| [[Archivo:Openscad-smiley-exp-4.png|thumb|300px|  (''click para ampliar'')]]
 +
| [[Archivo:Openscad-smiley-exp-5.png|thumb|300px|  (''click para ampliar'')]]
 +
|}
 +
 
 +
El objeto final formado sólo por puntos normales y líneas rectas
 +
 
 +
{|
 +
| [[Archivo:Openscad-smiley-exp-6.png|thumb|300px|  (''click para ampliar'')]]
 +
|}
 +
 
 +
==== Código ====
 +
* Ficheros:
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T24-smiley/smiley.scad smiley.scad]. Ejemplo en openscad
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T24-smiley/smiley.dxf smiley.dxf]. Smiley en dxf
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T24-smiley/smiley.svg smiley.svg]. Smiley en SVG
 +
 
 +
linear_extrude(height = 10)
 +
  import("smiley.dxf");
 +
 
 +
=== 25  Extruyendo logos a partir de imágenes ===
 +
{|  style="border: 1px solid darkgray; width:100%"
 +
|- style="background: #cedff2;"
 +
! [https://www.youtube.com/watch?v=XNeONsqFwmw '''Video Tutorial 25/28''']
 +
|}
 +
 
 +
{|
 +
| [[Archivo:Openscad-rebel-1.png|thumb|300px| Imagen original (''click para ampliar'')]]
 +
| [[Archivo:Openscad-rebel-3.png|thumb|300px| Logo final en 3D (''click para ampliar'')]]
 +
|}
 +
 
 +
{|
 +
| [[Archivo:Openscad-rebel-2.png|thumb|600px| Logo vectorizado con inkscape, calcándolo (''click para ampliar'')]]
 +
|}
 +
 
 +
==== Descripción ====
 +
Generar un logo 3D a partir de una imagen. Utilizamos la técnica de "calcar" una imagen. Primero la importamos en la capa inferior y en la superior la vamos calcando usando curvas de bezier con el inkscape. Luego desde openscad importamos el dxf, lo extruimos y lo escalamos
 +
 
 +
==== Código ====
 +
* Ficheros:
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T25-logos-imagenes/rebel.scad rebel.scad]. Ejemplo en openscad
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T25-logos-imagenes/rebel.dxf rebel.dxf]. Logo en dxf
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T25-logos-imagenes/images/rebel.svg rebel.svg]. Logo en SVG
 +
 
 +
anchura_cm = 10;
 +
 +
color("red")
 +
  scale([anchura_cm, anchura_cm, 1])
 +
    linear_extrude(height = 5)
 +
      import("rebel.dxf");
 +
 
 +
=== 26  Extrusión de dibujos por capas ===
 +
{|  style="border: 1px solid darkgray; width:100%"
 +
|- style="background: #cedff2;"
 +
! [https://www.youtube.com/watch?v=6EyhYoEQ1ww '''Video Tutorial 26/28''']
 +
|}
 +
 
 +
{|
 +
| [[Archivo:Openscad-obijuan-academy-1.png|thumb|300px| (''click para ampliar'')]]
 +
| [[Archivo:Openscad-obijuan-academy-2.png|thumb|300px|  (''click para ampliar'')]]
 +
|}
 +
 
 +
{|
 +
| [[Archivo:Openscad-obijuan-academy-3.png|thumb|600px|  (''click para ampliar'')]]
 +
|}
 +
 
 +
==== Descripción ====
 +
Se pueden hacer logos más complejos en 3D mediante la extrusión de capas. Al extruir un fichero dxf se puede seleccionar la capa donde realizar la operación. De esta forma, se pueden dar diferentes alturas a cada capa.
 +
 
 +
==== Código ====
 +
* Ficheros:
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T26-extrusion-capas/logo.scad logo.scad]. Ejemplo en openscad
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T26-extrusion-capas/logo.dxf logo.dxf]. Logo en dxf
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T26-extrusion-capas/images/obijuan-academy-logo1.svg obijuan-academy-logo1.svg]. Logo en SVG
 +
 
 +
h1 = 3;
 +
h2 = 6;
 +
 +
linear_extrude(height = h1)
 +
  import(file = "logo.dxf", layer = "capa1");
 +
 +
  color("red")
 +
    linear_extrude(height = h2)
 +
      import(file = "logo.dxf", layer = "capa2");
 +
 
 +
=== 27  Texto en 3D ===
 +
{|  style="border: 1px solid darkgray; width:100%"
 +
|- style="background: #cedff2;"
 +
! [https://www.youtube.com/watch?v=Tu_ZF__17_k '''Video Tutorial 27/28''']
 +
|}
 +
 
 +
{|
 +
| [[Archivo:Openscad-write-1.png|thumb|600px| Texto escrito con la biblioteca write (''click para ampliar'')]]
 +
|}
 +
 
 +
==== Descripción ====
 +
Se puede generar texto en 3D muy fácilmente usando la [http://www.thingiverse.com/thing:16193 librería Write.scad] de '''HarlanDMii'''. La generación de las letras se basa en la extrusión a partir de un fichero dxf. Con sólo invocar el '''módulo write''' podemos escribir cualquier cadena en 3D.
 +
 
 +
Crear una '''carpeta''' que se llame '''write''' en el directorio donde esté nuestro fichero openscad. En ella situar los ficheros '''writes.scad''' y '''letters.dxf'''.
 +
 
 +
==== Código ====
 +
* Ficheros:
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T27-letras-3D/texto-3D.scad texto-3D.scad]. Ejemplo de uso de la librería write
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T27-letras-3D/write/write.scad write.scad]. Librería write. Usar junto al fichero Letters.dxf
 +
** [https://github.com/Obijuan/tutorial-openscad/raw/master/temporada-2/T27-letras-3D/write/Letters.dxf Letters.dxf]. Fichero con las letras
 +
 
 +
use <write/write.scad>
 +
 +
grosor = 10;
 +
size = 20;
 +
 +
translate([0, size*1.5, 0])
 +
write("OBIJUAN",t=grosor,h=size,center=true);
 +
 +
color("red")
 +
write("ACADEMY", t = grosor, h = size, center = true);
 +
 +
color("gray")
 +
translate([0, -size * 2, 0])
 +
write ("GRACIAS :-)", t = grosor, h = size, center = true);
 +
 
 +
=== 28 Keep calm and ¡Haz Tutoriales! ===
 +
{|  style="border: 1px solid darkgray; width:100%"
 +
|- style="background: #cedff2;"
 +
! [https://www.youtube.com/watch?v=uao99yq49ok '''Video Tutorial 28/28''']
 +
|}
 +
 
 +
{|
 +
| [[Archivo:Keep-calm-and-haz-tutoriales.png|thumb|600px| Texto escrito con la biblioteca write (''click para ampliar'')]]
 +
|}
 +
 
 +
== Para las próximas temporadas de tutoriales ... ==
 +
 
 +
* Creando tus propias transformaciones
 +
* Cuadricula: grid
 +
* Obiscad: roudend cube
 +
* Obiscad: Vectors
 +
* Obiscad: beveling and reinforcements
 +
* attach
 +
* MCAD library
 +
* Generando polígonos con python
 +
* Engranajes
 +
* Recursividad
  
 
== Repositorio ==
 
== Repositorio ==
Línea 613: Línea 1396:
 
{|{{tablabonita}}
 
{|{{tablabonita}}
 
| [[Imagen:Cc logo.png]] This work is licensed under a [http://creativecommons.org/licenses/by-sa/2.5/es/ Creative Commons Attribution-ShareAlike 2.5 Spain License].
 
| [[Imagen:Cc logo.png]] This work is licensed under a [http://creativecommons.org/licenses/by-sa/2.5/es/ Creative Commons Attribution-ShareAlike 2.5 Spain License].
 +
|}
 +
 +
== Sobre este tutorial ==
 +
 +
Este tutorial está realizado '''exclusivamente usando herramientas libres'''.
 +
 +
{|{{tablabonita}}
 +
|
 +
* '''Sistema Operativo''': [http://www.ubuntu.com/ Ubuntu Linux] 13.10 y 14.04
 +
* '''Openscad''': [http://www.openscad.org/ Openscad] 2013.05.28. Actualizacion a: 2014.03
 +
* '''Retoque de imágenes''': [http://www.gimp.org/ Gimp] 2.8.6
 +
* '''Dibujos''': [http://inkscape.org/ Inkscape] 0.48.4
 +
* '''Grabación del escritorio''': [http://www.twm-kd.com/category/linux/kazam/ kazam] 1.4.3
 
|}
 
|}
  
Línea 619: Línea 1415:
  
 
== Noticias ==
 
== Noticias ==
 +
* '''30/Marzo/2014''': Fin de la temporada 2. ¡Que el patrimonio tecnológico de la humanidad os acompañe!
 +
* '''11/Marzo/2014''': Actualización a Openscad 2014.03. Todos los tutoriales a partir de ahora se harán con esta versión
 +
* '''8/Marzo/2014''': Tutorial 16: Aprendiendo del código compartido por los demás. Fin de la primera sección
 
* '''25/Dic/2013''': Tutorial 1) Usando un editor externo
 
* '''25/Dic/2013''': Tutorial 1) Usando un editor externo
 
* '''24/Dic/2013''': Comenzada la página
 
* '''24/Dic/2013''': Comenzada la página

Revisión actual del 08:26 30 mar 2014

Logo-temp-2.png

Contenido

Ficha

Introducción

Segunda temporada de tutoriales de Openscad. La filosofía es la misma que con los primeros: Intentar que NO SOBREPASEN LOS 3 MINUTOS, de manera que si uno no te gusta, sólo habrás perdido 3 minutos de tu vida.

Nota: Bueno, vale, en algunos vídeos me he pasado de tiempo. Intentaré estar por debajo de 5 minutos siempre  :-)

Nota 2: ¡buaaahhhh! En el tutorial 21 me he ido a 10 minutos!

Descargas

Todos los ejemplos están accesibles desde el repositorio en github

PLAYLIST

PLAYLIST CON TODOS LOS VIDEOS DE LA TEMPORADA 2 (28)


Aprendiendo más opciones de Openscad

1) Usando un editor mejorado

Video Tutorial 1/28
Código openscad en el editor externo kate (click para ampliar)

Descripción

El editor de textos que incorpora openscad es muy básico. Vamos a ver cómo podemos utilizar un editor externo

Pasos

Los pasos a realizar son los siguientes:

  • Abrir openscad
  • Ir a la opción view/hide editor. Con esto dejamos de ver el editor de openscad
  • Ir a la opción design/automatic reload and compile
  • Salir de openscad. Se quedarán grabadas las estas opciones de manera que la siguiente vez que arranque openscad no hace falta volverlas a activar

Ahora, para editar cualquier programa sólo hay que abrirlo con openscad y luego con el editor de texto que queramos. Cada vez que se graben los cambios, openscad cargará automaticamente ese fichero y lo visualizará.

Configuración del editor kate en Linux

  • Instalar kate (sudo apt-get install kate)
  • Descargar el fichero openscad.xml
  • Copiar el fichero en /usr/share/kde4/apps/katepart/syntax/
sudo cp $HOME/Downloads/openscad.xml /usr/share/kde4/apps/katepart/syntax/
  • Dar permiso de lectura al fichero:
sudo chmod a+r  /usr/share/kde4/apps/katepart/syntax/openscad.xml
  • Ejecutar kate
  • Ir a la opción tools > mode > Other > Openscad

Créditos

  • El primero que me enseñó esta opción de openscad fue Sergio Vilches
  • El fichero con resaltado de sintaxis de kate es obra de Kevin Weekly

2) ¡¡¡Las pirámides son cilindros!!!

Video Tutorial 2/28
Cono truncado (click para ampliar)
Piramide (click para ampliar)

Descripción

Se muestra cómo con el comando "cylinder" de openscad se pueden crear conos, pirámides y tetraedros

Código

//-- Cilindro normal. r es el radio, h es la altura
*cylinder (r = 20, h = 20, $fn = 100);

//-- Cono truncado. r1 radio base inferior, r2 radio de la base superior
*cylinder (r1 = 20, r2 = 10, h = 20, $fn = 100);

//-- Cono
*cylinder (r1 = 20, r2 = 0, h = 20, $fn = 100);

//-- Piramide de base hexagonal
*cylinder (r1 = 20, r2 = 10, h = 20, $fn = 6);

//-- Piramide
*cylinder (r1 = 20, r2 = 0, h = 20, $fn = 4);

//-- Tetraedro
cylinder (r1 = 20, r2 = 0, h = 20, $fn = 3);

3) Mis objetos en una cuadrícula, por favor

Video Tutorial 3/28
Objetos en la cuadrícula virtual (click para ampliar)

Descripción

Ejemplo de organización de 6 objetos en una cuadrícula virtual paramétrica. Más adelante esta idea se desarrollará y refinará

Código

//-- Dimensiones de los cuadros de la cuadricula
d = 60;

//-- Centrar la cuadricula (opcional)
translate([-2*d / 2, -d / 2, 0]) {

  //-- Punto: 0, 0
  translate([0, 0, 0]) cylinder (r = 20, h = 20, $fn = 100);
  
  //-- Punto: 1, 0
  translate([d, 0, 0]) cylinder (r1 = 20, r2 = 10, h = 20, $fn = 100);

  //-- Punto: 2, 0
  translate([2*d, 0, 0]) cylinder (r1 = 20, r2 = 0, h = 20, $fn = 100);

  //-- Punto: 0, 1
  translate([0, d, 0])  cylinder (r1 = 20, r2 = 10, h = 20, $fn = 6);

  //-- Punto: 1, 1
  translate([d, d, 0])  cylinder (r1 = 20, r2 = 0, h = 20, $fn = 4);

  //-- Punto: 2, 1
  translate([2*d, d, 0]) cylinder (r1 = 20, r2 = 0, h = 20, $fn = 3);

}

4) Esferita, esferita, dime donde está la cuadrícula

Video Tutorial 4/28
Una esfera y un cube dentro de la cuadrícula (click para ampliar)

Descripción

Aprender a crear esferas. Ejemplo de cómo visualizar una cuadrícula.

Código

Fichero: esfera-cuadricula.scad

//-- Ejemplo de uso de esferas para visualizar una cuadrícula
//-- de N x N cuadros

//-- Tamaño de cada cuadro
d = 30; 

//-- Radio de las esferas en la cuadrícula
r = 2;

//-- Número de cuadros (N x N)
N = 10;

//-- Tamaño total de la cuadrícula
size = N * d;

//-- Dibujar la cuadricula
translate([-size / 2, -size / 2, 0]) //-- Centrar cuadricula
for (ix = [0:N]) //-- Esferas en eje x
  for (iy = [0:N]) //-- Esferas en eje y
    //-- Posicionar la esfera en punto (ix, iy)
    translate([ix * d, iy * d, 0])
      sphere(r = r, $fn=20);

//-- Objeto ejemplo en punto (2, 2): una esfera roja
translate([2 * d, 2 * d, 0])
  color("red")
    sphere(r = 15, $fn = 20);

//-- Objeto ejemplo en punto (-3, -4): un cubo azul
color("blue")
  translate([-3 * d, -4 * d, 0])
   cube([20, 20, 20], center = true);

5) Organiza tus canicas

Video Tutorial 5/28
(click para ampliar)
(click para ampliar)

Descripción

Ejemplo de diseño de una pieza paramétrica para organizar las canicas

Código

//-- Organizador de canicas paramétrico

//-- Número de canicas
N = 3;

//-- Diametro de las canicas
dc = 16;

//-- Tamaño de cada cuadro
d = dc + 3;

//-- Tamaño total de la cuadrícula
size = (N-1) * d;

//-- Tamaño de la caja donde están las canicas
size_box = N * d;
h_box = dc / 2 + 1;

difference() {
  //-- Caja de las canicas
  translate([0, 0, -h_box / 2])
  cube([size_box, size_box, h_box], center = true);

  //-- Canicas
  translate([-size / 2, -size / 2, 0]) //-- Centrar canicas
  for (ix = [0:N-1])
    for (iy = [0:N-1])
      //-- Posicionar la canica en punto (ix, iy)
      translate([ix * d, iy * d, 0])
        sphere(r = dc/2, $fn=20);
}

6) ¡Comparte tus diseños!

Video Tutorial 6/28
Una esfera y un cube dentro de la cuadrícula (click para ampliar)


Descripción

Una vez terminado un diseño... ¡Compártelo! Es la manera de que el conocimiento esté disponible para todos y que podamos mejorar.

Como ejemplo, esto son los sitios donde he compartido el organizador de canicas:

7) Tirando tangentes con el operador hull

Video Tutorial 7/28
Pieza que queremos diseñar (click para ampliar)
Esquema de los elementos geométricos que componen la pieza (click para ampliar)

Descripción

El comando hull crea el objeto convexo mínimo que incluye otros objetos indicados. Se muestra su uso para construir una pieza en la que es necesario crear las tangentes entre dos cilindros.

Código

//-------- Parametros de la pieza
r1 = 25; //-- Radio cilindro 1
r2 = 10; //-- Radio cilindro 2
th = 5; //-- Grosor

//-- Distancia entre los centros de los cilincros
d = r1 + r2 + 10;

//-- Crear el objetco convexo minimo que contiene ls dos
//-- cilindros
hull() {

  //-- Cilindro 1
  translate([-d/2, 0, 0])
    cylinder(r = r1, h = th, center = true, $fn = 50);
    
  //-- Cilincro 2
  translate([d/2, 0, 0])
    cylinder(r = r2, h = th, center = true, $fn = 50);
}

8) Figuras redondeadas en el plano xy

Video Tutorial 8/28
Caja redondeada (click para ampliar)
Esquema de cómo hacer la caja redondeada (click para ampliar)

Descripción

Ejemplo de cómo se pueden hacer objetos con las aristas verticales redondeadas, usando el comando hull

Código

//-- Parametros de la caja
lx = 50; //-- Longitud en eje x
ly = 40; //-- Longitud en eje y
r = 5; //-- Radio del redondeo de las esquinas
h = 10; //-- Altura

//-- Coordenadas del cilindro del primer cuadrante
cx = lx/2 - r;
cy = ly/2 - r;

//-- Posicion de los 4 cilindros de las esquinas
P1 = [cx, cy, 0];
P2 = [-cx, cy, 0];
P3 = [-cx, -cy, 0];
P4 = [cx, -cy, 0];
 

//-- Obtener el menor objeto convexo que contiene
//-- los 4 cilindros
hull() {
  translate(P1)
    cylinder(r = r, h = h, center = true, $fn = 20);
   
  translate(P2)
    cylinder(r = r, h = h, center = true, $fn = 20);
   
  translate(P3)
    cylinder(r = r, h = h, center = true, $fn = 20);
   
  translate(P4)
    cylinder(r = r, h = h, center = true, $fn = 20);
}

9) Automatizando con vectores

Video Tutorial 9/28
Figura convexa redondeada formada mediante 7 cilindros y el comando hull (click para ampliar)
Detalles de la figura y los cilindros (click para ampliar)

Descripción

Creación de objetos redondeados a partir de un número genérico de cilindros. Las posiciones de los cilincros se guardan en un vector (array). Usando un bucle for se recorren y se colocan automáticamente los cilindros. Luego se aplica hull para generar el objeto convexo mínimo que contiene todos los cilindros.

Código

//-- Parametros
r = 5; //-- Radio del redondeo de las esquinas
h = 10; //-- Altura

//-- Coordenadas del cilindro del primer cuadrante
cx = 20;
cy = 15;

//-- Vector de puntos, con las posiciones de los cilindros
POINT = [
  [cx, cy, 0], //-- Punto 0
  [-cx, cy, 0], //-- Punto 1
  [-cx, -cy, 0], //-- Punto 2
  [cx, -cy, 0], //-- Punto 3
  [2*cx, 0, 0], //-- Punto 4
  [0, 1.5*cy, 0], //-- Punto 5
  [0,0,h], //-- Punto 6
];
 

//-- Obtener el menor objeto convexo que contiene
//-- los cilindros situados en los puntos indicados en
//-- el vector POINT

hull() { 

  //-- Dibujar cada cilindro en su posicion correspondiente
  for (pos = POINT)
    translate(pos)
      cylinder(r = r, h = h, center = true, $fn = 20);
}

Apilando 2 objetos

Video Tutorial 10/28
Dos cubos apilados (click para ampliar)
Dos cubos apilados (click para ampliar)


Descripción

Apilar 2 objetos es fácil... pero usando vectores es mucho más fácil aún y el código se mantiene mejor

Código

//-- Definiciones para acceder a las componentes X,Y,Z
//-- Aunque las definimos todas, en este ejemplo solo
//-- accedemos a la componente Z de los cubos
X = 0;
Y = 1;
Z = 2;

//-- Dimensiones de los cubos. Se pueden cambiar por el usuario
//-- Todo se recalculara para que B esté siempre encima de A
A = [30, 30, 10];
B = [10, 10, 30];

//-- Calcular la posicion de B para que este encima de A
posB = [0, 0, B[Z]/2 + A[Z]/2];

//---- Construccion de la figura a partir de los datos calculados!
//-- Poner el cubo B encima del A

//-- Poner el cubo A (es la base)
cube(A, center = true);

//-- Cubo B, encima de A
translate(posB)
  cube(B, center = true);

Apilando varios objetos

Video Tutorial 11/28
(click para ampliar)


Descripción

Se propone como ejercicio modificar el ejemplo del tutorial anterior para apilar 4 objetos

Código

//-- Definiciones para acceder a las componentes X,Y,Z
//-- Aunque las definimos todas, en este ejemplo solo
//-- accedemos a la componente Z de los cubos
X = 0;
Y = 1;
Z = 2;

//-- Dimensiones de los cubos. Se pueden cambiar por el usuario
//-- Todo se recalculara para que todos los cubos esten apilados
A = [30, 30, 10];
B = [10, 10, 30];
C = [6, 6, 10];
D = [3, 3, 3];

//-- Calcular las posicion de los cubos para que esten apilados
posB = [0, 0, B[Z]/2 + A[Z]/2];
posC = posB + [0, 0, C[Z]/2 + B[Z]/2];
posD = posC + [0, 0, D[Z]/2 + C[Z]/2]; 

//---- Construccion de la figura a partir de los datos calculados! 

//-- Poner el cubo A (es la base)
cube(A, center = true);

//-- Cubo B, encima de A
translate(posB)
  cube(B, center = true);
  
//-- Poner el cubo C encima del B
translate(posC)
  cube(C, center = true);

//-- Poner el cubo D encima del C   
translate(posD)
  cube(D, center = true);

Mis cubos con curvas, por favor

Video Tutorial 12/28


El cubo redondeado en 3D (click para ampliar)
Construido a partir de 8 esferas y aplicando el comando hull (click para ampliar)
Comparación entre el cubo redondeado y uno sin redondear (click para ampliar)
Obtener las coordenadas de las esferas de los vértices (click para ampliar)

Descripción

Crear un cubo con todas las aristas redondeadas es muy fácil. Basta con colocar esferas en cada uno de los vertices y aplicar el comando hull. Para que el cubo tenga las mismas dimensiones que el equivalente sin redondear, hay que calcular las coordenadas de las 8 esferas.

Código

//-- Constantes para acceder a las coordenadas X,Y,Z de los vectores
X = 0;
Y = 1;
Z = 2;

//-- Parámetros del cubo redondeado
r = 4; //-- Radio de las curvas
A = [30, 30, 20]; //-- Dimensiones del cubo 

//-- Calcular las coordenadas en funcion de los parametros del user
a = (A - [2*r, 2*r, 2*r])/2;

//-- Obtener las coordenadas. Es un atajo para no escribir tanto
x = a[X];
y = a[Y];
z = a[Z]; 

//-- Calcular los vertices del cubo
vertice = [
  [x, y, z],
  [-x, y, z],
  [-x, -y, z],
  [x, -y, z],
  [x, y, -z],
  [-x, y, -z],
  [-x, -y, -z],
  [x, -y, -z],
]; 

//-- Cubo de comprobacion. Mismas dimensiones pero sin
//-- redondear. El redondeado debe tener las mismas dimensiones
%cube(A, center = true);

//-- Dibujar el cubo redondeado. Se coloca en cada vertice una
//-- esfera de radio r y se aplica el operador hull
hull()
  for (pos = vertice)
    translate(pos)
      sphere(r = r, $fn = 20);

Objetos condicionales: cilindros redondeados

Video Tutorial 13/28
(click para ampliar)
(click para ampliar)
(click para ampliar)

Descripción

Crearemos un objeto condicional denominado rcylinder. En función del parámetro both, se dibuja bien un cilindro con ambas tampas redondeadas, o bien sólo con la superior. También la translación aplicada dependerá del valor del parámetro center.

Código

//-- Cilindro redondeado en las tapas
//-- Parametros:
//-- r: radio del cilindro
//-- h: Altura del cilindro
//-- center : [true, false], centrar el cilindro
//-- both: [true, false]
//-- true: Redondear ambas tapas (superior e inferior)
//-- false: solo se redondea la tapa superior
module rcylinder(r = 4,
                 h = 20,
                 center = false,
                 both = false, $fn = 30)
{ 

  //-- Calcular la altura del cilindro interior
  //-- Si redondeo por las dos tapas, vale h - 2*r
  //-- si solo una tapa entonces h - r
  hc = (both == true) ? h - 2 * r : h - r;
  
  //-- Calcular la traslacion para centrar el cilindro
  posc = (center == true) ? 0 : h/2;
  
  //-- Aplicar traslaciopn para el centrado
  translate([0, 0, posc])
  
    //-- Cilindro con ambas tapas redondeadas
    //-- Se pone un cilindro de altura hc y una esfera
    //-- en la parte superior y otra en la inferior
    if (both == true) {
      cylinder(r = r, h = hc, center = true, $fn = $fn);
      
      //-- Esferas superior e inferior
      for (i = [-1, 1])
        translate([0, 0, i * hc / 2])
          sphere(r = r);
          
    }
    //-- Cilindro con tapa superior redondeada
    else
      //-- Centrar la figura
      translate([0, 0, -h/2]) {
     
        //-- Cilindro + esfera
        cylinder(r = r, h = hc, $fn = $fn);
          translate([0, 0, hc]) sphere(r = r, $fn = $fn);
      }
       
}

//-- Parametros para los ejemplos
r = 5;
h = 30;
center = false;
$fn = 30;

//-- Cilindro normal
translate([-3*r, 0, 0])
  cylinder(r = r, h = h, center = center, $fn = $fn);

//-- Cilindro con tapa superior redondeada
rcylinder(r = r, h = h, both = false, center = center, $fn = $fn);

//-- Cilindro con ambas tapas redondeadas
translate([3*r, 0, 0])
  rcylinder(r = r, h = h, both = true, center = center, $fn = $fn);

Redondeados parciales con hull (II)

Video Tutorial 14/28
Cubo con 2 aristas verticales afiladas, una en chaflán y otra redondeada (click para ampliar)
Esquema de cómo se ha construido la figura (click para ampliar)
Cubo con todas las aristas redondeadas (click para ampliar)
Esquema (click para ampliar)
Cubo con las aristas verticales y horizontales superiores redondeadas (click para ampliar)
Esquema (click para ampliar)

Descripción

Ejemplo de cómo hacer figuras con diferentes terminaciones en las aristas. Según cómo combinemos los objetos con hull, conseguimos aristas en 90 grados, en chaflán o redondeadas

Código

use <rcylinder.scad>

X = 0;
Y = 1;
Z = 2;

//-- Parametros del cubo
size = [20, 20, 10];
r = 2;

//-- Calcular las coordenadas de la esquina del cuadrante 1
xc = size[X]/2 - r;
yc = size[Y]/2 - r;
zc = size[Z]/2;

//-- Tamaño de las columnas cuadradas
col_size = [2 * r, 2 * r, size[Z]];

//-- Posiciones de las columnas
vertex = [
  [xc, yc, 0],
  [-xc, yc, 0],
  [-xc, -yc, 0],
  [xc, -yc, 0],
];

//-- Ejemplo 1:  Modificacion de las aristas verticales
module example1() 
{
  hull() {
    for (v = [0:1]) 
      translate(vertex[v]) 
      	 cube(col_size, center = true);
        //cylinder(r = r, h = size[Z], center = true, $fn = 4);

    translate(vertex[2])
      cylinder(r = r, h = size[Z], center = true, $fn = 50);    
	
    translate(vertex[3])
      cylinder(r = r, h = size[Z], center = true, $fn = 4);
  }
}

//-- Ejemplo 2: Modificacion de las aristas horizontales y verticales
module example2()
{
  hull() {
  for (v = [0:3]) 
    translate(vertex[v])
       //cylinder(r = r, h = size[Z], center = true, $fn = 50);
      rcylinder(r = r, h = size[Z], both = false, center = true, $fn = 40);
      //rcylinder(r = r, h = size[Z], both = true, center = true, $fn = 40);
  }
}

//-- Ejemplos para probar

example1();
//example2();

El operador Minkowski

Video Tutorial 15/28
Minkowski de la pieza con un cilindro (click para ampliar)
Resultado final (click para ampliar)
Piezas originales y resultado del minkowski(click para ampliar)
Minkowski de la pieza con una esfera (click para ampliar)
Resultado final (click para ampliar)
Piezas originales y resultado del minkowski (click para ampliar)
Minkowski de la pieza con un cilindro redondeado (click para ampliar)
Resultado final (click para ampliar)
Piezas originales y resultado del minkowski (click para ampliar)

Descripción

Utilización del operador Minkowski para redondear tanto las aristas verticales como horizontales de un objeto no convexo

Código

use <rcylinder.scad>

X = 0;
Y = 1;
Z = 2;

size = [20, 20, 10];
r = 2;

//-- Pieza de ejemplo, a la que aplicar Minkowski
module pieza()
{
  cube(size, center = true);
    
  translate([10,10,0])
    cube(size, center = true);
}

//-- Aplicar Minkowski a la pieza, usando diferentes objetos 
minkowski() {
  pieza();
  
  cylinder(r = r, h = 1, center = true, $fn = 10);
  //sphere(r = r, $fn = 10);
  //rcylinder(r = r, h = 2 * r, both = false, center = true, $fn = 10);
}

// Pieza original, para compararla con la conseguido con minkowski
*pieza();

//-- La otra pieza utilizada con minkowski
*color("red")
translate([-size[X]/2, 0, size[Z]/2])
cylinder(r = r, h = 1, center = true, $fn = 10);
//sphere(r = r, $fn = 10);
//rcylinder(r = r, h = 2 * r, both = false, center = true, $fn = 10);

Estudiando el código compartido por los demás

Video Tutorial 16/28
Ejemplo 9 incluido en Openscad: Un ventilador (click para ampliar)
Ejemplo 10 incluido en Openscad: Una superficie (click para ampliar)
Engranaje de ejemplo. Incluido en el fichero involute_gears.scad de la librería MCAD (click para ampliar)
Elementos del fichero hardware.scad de la librería MCAD (click para ampliar)
Una Impresora 3D modelo Prusa i3. Las piezas están diseñadas con Openscad (click para ampliar)
El carro del eje x de una Prusa i3 (click para ampliar)
Impresora 3D modelo Powercode, derivada de la Prusa i3. Piezas en openscad (click para ampliar)
El carro del eje x de una PowerCode (click para ampliar)
La Cyclone PCB Factory, una fresadora imprimible para hacer Circuitos Impresos (click para ampliar)
Vista 3D de la Cyclone, hecha con Openscad (click para ampliar)
El Miniskybot II, un robot imprimible (Printbot), diseñado con Openscad (click para ampliar)
Vista 3D del Miniskybot II (click para ampliar)
Los módulos REPYZ, para hacer robots de tipo gusano-serpiente. Diseñados con Openscad (click para ampliar)
Una de las partes del módulo REPYZ (click para ampliar)


La chuleta de Openscad (click para ampliar)

Descripción

La mejora manera de aprender openscad es ver el código de las piezas creadas por otros. Esto es lo grande de los proyectos libres: se tiene acceso a "cómo están hechos", para poder aprender de ellos, modificarlos y mejorarlos.

Algunos proyectos interesantes diseñados con openscad son:

  • MCAD : Biblioteca de compoentes: engranajes, motores, servos, tornillos, tuercas...
  • Prusa i3: Impresora 3D modelo Prusa i3
  • PowerCode: Impresora 3D, modelo PowerCode, derivada de la Prusa i3
  • Cyclone: Fresadora imprimible, para hacer circuitos impresos
  • Miniskybot Miniskybot: Robot imprimible, para aprender robótica
  • REPYZ: Módulos imprimibles para hacer robots de tipo gusano/serpiente
  • http://www.openscad.org/cheatsheet/: Chuleta con todos los comandos de openscad. ¡Imprescindible!

Código


Update: Actualizando a Openscad 2014.03

17 Probando el nuevo Openscad 2014.03

Video Tutorial 17/28
La nueva web de Openscad (click para ampliar)
Una figura recursiva en Openscad 2014.03 (click para ampliar)

Descripción

Se acaba de liberar una nueva versión de openscad: la 2014.03. A partir de ahora es la que se utilizará para los tutoriales. Algunas de las mejoras que incluyen son:

  • Editor con resaltado de sintáxis
  • Parámetro d para estableder el diámetro en cilindros, esferas y círculos
  • Recursividad

Código

Ejemplo de una figura recursiva:

//-- Ejemplo de figura recursiva
//-- Piramide escalonada
//-- Utilizar Openscad 2014.03 o superior

//-- Parametros
step = 3; //-- Altura de cada nivel
min = 5;  //-- Dimensiones de la parte superior (ultimo nivel)

//-- Modulo recursivo
//-- n: Numero de niveles de la piramide 
module zigurat(n)
{

  //-- Terminacion: en el nivel uno se situa el cubo superior (pequeño)
  if (n <= 1) {
    cube([min, min, step], center = true);
  }
  else {
    //-- Dibujar el cubo del nivel n
    cube([n * min, n * min, step], center = true);

    //-- Colocar encima una piramide de n-1 niveles (recursion)
	translate([0, 0, step])
	  zigurat(n - 1);
  }
}	

//-- Piramide de 10 niveles
zigurat(10);

Objetos 3D a partir de objetos 2D

18 Extruyendo polígonos

Video Tutorial 18/28
Un prisma de base trapezoidal (click para ampliar)
Un trapecio (click para ampliar)
Coordenadas del trapecio (click para ampliar)

Descripción

Otra forma de diseñar objetos 3D es mediante la creación de polígonos que se extruyen linealmente convirtiéndolos en objetos 3D

Código

//-- Parametros del trapecio
B = 40; //-- Base larga
b = 20; //-- Base corta
h = 15; //-- Altura
 
//-- Rotar prisma para apoyarlo en plano xy
rotate([90, 0, 0])

//-- Extrusion lineal del trapecio
linear_extrude(height = 80, center = true)

//-- Trapecio
polygon(points = [
                  [-B/2, -h/2],
                  [-b/2, h/2],
                  [b/2, h/2],
                  [B/2, -h/2]
                 ]);

19 Extrusión lineal con torsión

Video Tutorial 19/28
4 objetos extruidos linealmente con torsión (click para ampliar)
Un prisa de base rectangular con una torsión de 90 grados (click para ampliar)
Una hélice generada mediante la extrusión con torsión de un círculo transladado (click para ampliar)
Vista superior de la hélice (click para ampliar)

Descripción

A la extrusión lineal se le puede añadir torsión con el parámetro twist. Esto permite crear figuras "retorcidas", así como hélices

Código

//-- Extrusion lineal con torsion de un rectangulo
translate([-50, 0, 0])
  linear_extrude(height = 50, twist = 90, $fn = 100)
    square([40,20], center = true);

//-- Extrusion lineal con torsion de un poligono

//-- Triangulo
translate([0, 0, 0])
  linear_extrude(height = 50, twist = 120, $fn = 100)
    circle(d = 40, $fn = 3);

//-- Hexagono
translate([50, 0, 0])
  linear_extrude(height = 50, twist = 120, $fn = 100)
    circle(d = 40, $fn = 6);

//-- Circulo
translate([100, 0, 0])
  linear_extrude(height = 50, twist = 2*360)
    translate([15, 0, 0])
      circle(d = 20, center = true);

20 Extrusión axial

Video Tutorial 20/28
Un toro (click para ampliar)
Parámetros del toro: radio interior y diámetro de la sección (click para ampliar)
Generación de la sección mediante un círculo desplazado (click para ampliar)
Toroide de sección triangular (click para ampliar)
Toroide de sección hexagonal (click para ampliar)
Toroide de sección compuesta por un círculo y un cuadrado (click para ampliar)

Descripción

Generación de superficies de revolución usando la extrusión axial. Ejemplos: toro y toroides

Código

//-- Parametros del toroide
ri = 10;
ds = 10;

//-- Toroide, de seccion un hexagono
*rotate_extrude($fn = 100)
translate([ds/2 + ri, 0, 0])
circle(d = ds, $fn = 6);

//-- Toroide, cuya seccion es la la union de
//-- varios objetos 2D
rotate_extrude($fn = 100)
translate([ds/2 + ri, 0, 0]) {
  translate([ds/2, 0, 0])
  circle(d = ds);
  square([ds,ds], center = true);
}

21 Rueda para printbot

Video Tutorial 21/28
(click para ampliar)
(click para ampliar)
(click para ampliar)
(click para ampliar)
(click para ampliar)
(click para ampliar)
(click para ampliar)
(click para ampliar)

Descripción

Diseño de una rueda para un printbot (robot imprimible) utilizando extrusión axial

Código

//-- Parametros de la rueda
di = 50;  //-- Diametro interno de la junta torica
ds = 3;  //-- Diametro de la junta torica
h = ds + 2;   //-- Grosor de la rueda

//-- Parametros calculados
d = di + 2 * ds;  //-- Diametro rueda
r1 = d / 2; //-- Radio de la rueda
r2 = ds / 2;  //-- Radio de la junta toria

//-- Seccion de la rueda
module section()
{

  difference() {
    translate([r1 / 2, 0, 0])
      square([r1, h], center = true);

    //-- Para alojamiento circular
    *translate([r1, 0, 0])
      circle(d = 3, $fn = 20);

    //-- Para alojamiento triangular
     translate([r1 - r2, 0, 0])
       polygon(points = [[0, 0], 
                        [r2 + 1, r2 + 1],
                        [r2 + 1, -r2 - 1],
                        ]);
  }
}

//-- Junta torica
module junta()
{
  rotate_extrude($fn = 100)
  translate([r1, 0, 0])
    circle(d = ds);
}

//-- Rueda
difference() {
  rotate_extrude(convexity = 10, $fn = 100)
  section();

  //-- Eje de la rueda
  cylinder(d = 3, h = h + 10, center = true, $fn = 20);
}

color("grey")
  junta();

22 Extruyendo dibujos con líneas rectas

Video Tutorial 22/28
Dibujando una flecha en Inkscape (click para ampliar)
Flecha terminada. Exportada a formato dxf (click para ampliar)
Flecha importada en openscad, como un objeto 2D (click para ampliar)
Flecha final en openscad, convertieda en objeto 3D mediante extrusión lineal (click para ampliar)

Descripción

Openscad puede importar figuras almacenadas en archivos .dxf. Pero estas figuras sólo pueden tener líneas rectas (dxf con curvas no se pueden importar). Para crear figuras usamos programas de diseño 2d, como por ejemplo el Inkscape, que es software libre y multiplataforma. Estas figuras se exportan a formato .dxf y luego se importan en openscad usando el comando import.

Código

  • Ficheros:
linear_extrude(height = 10)
  import("flecha.dxf");

23 Me gustan las curvas: Extruyendo dibujos con curvas (II)

Video Tutorial 23/28
Dibujando la flecha con curvas de bezier (click para ampliar)
Flecha con curvas lista (click para ampliar)
Flecha importada en openscad, en 2D (click para ampliar)
La convertimos en 3D mediante extrusión lineal (click para ampliar)

Descripción

También es posible extruir objetos en 2d con curvas, pero primero es necesario convertirlos a segmentos rectos. Utilizaremos el inkscape para generar una flecha curva, con curvas de bezier. Al editarla y seleccionar todos los puntos, veremos dos tipos: los puntos normales y los que tienen 2 tiradores que nos permiten cambiar la curvatura:

Flecha en inkscape. Puntos normales y los que tienen tiradores (click para ampliar)

El primer paso seŕa insertar más puntos, para "discretizar" las curvas en segmentos rectos. Con todos los puntos seleccionados (en azul), pulsaremos el botón "+".

Extruyendo-objetos-2-exp-3.png
Botón para añadir más puntos (click para ampliar)

Cada vez que se pulsa aparecerán nuevos puntos entre cada dos. Apretarlo 3 ó más veces, según la resolución que se quiera.

Los puntos se han duplicado (click para ampliar)
Flecha con muchos más puntos (click para ampliar)

Ahora apretamos este botón para convertir todos los puntos en normales, y que las curvas sean segmentos en vez de curvas de bezier:

Extruyendo-objetos-2-exp-6.png
botón para convertir todos los tramos en segmentos rectos (click para ampliar)

Y ya no deben aparecer tiradores en los puntos. El objeto está formado sólo por segmentos rectos. Está listo para importarlo en openscad y poder extruirlo!

(click para ampliar)
(click para ampliar)

Código

linear_extrude(height = 10)
  import ("flecha-curva.dxf");

24 ¡Pon un smiley en tu vida! (III)

Video Tutorial 24/28
Dibujando el smiley en inkscape (click para ampliar)
Smiley importado en 2d en openscad (click para ampliar)
El smiley en 3d (click para ampliar)

Descripción

El smiley está compuesto de 3 círculos y un polígono con curvas de bezier (la sonrisa). Una vez hecho se combinan todos los ejemplos en uno único utilizando la opción path/combine

Combinando los cuatro objetos de la cara en uno único (click para ampliar)

Se convierte en un objeto hecho sólo con curvas de bezier y rectas.

Objeto único (click para ampliar)
Los puntos del nuevo objetos (click para ampliar)

A continuación hacemos lo mismo que en los tutoriales anteriores: seleccionar todos los puntos para añadir más y convertirlos en líneas rectas

(click para ampliar)
(click para ampliar)

El objeto final formado sólo por puntos normales y líneas rectas

(click para ampliar)

Código

linear_extrude(height = 10)
  import("smiley.dxf");

25 Extruyendo logos a partir de imágenes

Video Tutorial 25/28
Imagen original (click para ampliar)
Logo final en 3D (click para ampliar)
Logo vectorizado con inkscape, calcándolo (click para ampliar)

Descripción

Generar un logo 3D a partir de una imagen. Utilizamos la técnica de "calcar" una imagen. Primero la importamos en la capa inferior y en la superior la vamos calcando usando curvas de bezier con el inkscape. Luego desde openscad importamos el dxf, lo extruimos y lo escalamos

Código

anchura_cm = 10;

color("red")
  scale([anchura_cm, anchura_cm, 1])
    linear_extrude(height = 5)
      import("rebel.dxf");

26 Extrusión de dibujos por capas

Video Tutorial 26/28
(click para ampliar)
(click para ampliar)
(click para ampliar)

Descripción

Se pueden hacer logos más complejos en 3D mediante la extrusión de capas. Al extruir un fichero dxf se puede seleccionar la capa donde realizar la operación. De esta forma, se pueden dar diferentes alturas a cada capa.

Código

h1 = 3;
h2 = 6;

linear_extrude(height = h1)
  import(file = "logo.dxf", layer = "capa1");

 color("red")
   linear_extrude(height = h2)
     import(file = "logo.dxf", layer = "capa2");

27 Texto en 3D

Video Tutorial 27/28
Texto escrito con la biblioteca write (click para ampliar)

Descripción

Se puede generar texto en 3D muy fácilmente usando la librería Write.scad de HarlanDMii. La generación de las letras se basa en la extrusión a partir de un fichero dxf. Con sólo invocar el módulo write podemos escribir cualquier cadena en 3D.

Crear una carpeta que se llame write en el directorio donde esté nuestro fichero openscad. En ella situar los ficheros writes.scad y letters.dxf.

Código

use <write/write.scad>

grosor = 10;
size = 20;

translate([0, size*1.5, 0])
write("OBIJUAN",t=grosor,h=size,center=true);

color("red")
write("ACADEMY", t = grosor, h = size, center = true);

color("gray")
translate([0, -size * 2, 0])
write ("GRACIAS :-)", t = grosor, h = size, center = true);

28 Keep calm and ¡Haz Tutoriales!

Video Tutorial 28/28
Texto escrito con la biblioteca write (click para ampliar)

Para las próximas temporadas de tutoriales ...

  • Creando tus propias transformaciones
  • Cuadricula: grid
  • Obiscad: roudend cube
  • Obiscad: Vectors
  • Obiscad: beveling and reinforcements
  • attach
  • MCAD library
  • Generando polígonos con python
  • Engranajes
  • Recursividad

Repositorio

Los ficheros fuentes están en este repositorio:

Licencia

Cc logo.png This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 Spain License.

Sobre este tutorial

Este tutorial está realizado exclusivamente usando herramientas libres.

  • Sistema Operativo: Ubuntu Linux 13.10 y 14.04
  • Openscad: Openscad 2013.05.28. Actualizacion a: 2014.03
  • Retoque de imágenes: Gimp 2.8.6
  • Dibujos: Inkscape 0.48.4
  • Grabación del escritorio: kazam 1.4.3

Enlaces

Noticias

  • 30/Marzo/2014: Fin de la temporada 2. ¡Que el patrimonio tecnológico de la humanidad os acompañe!
  • 11/Marzo/2014: Actualización a Openscad 2014.03. Todos los tutoriales a partir de ahora se harán con esta versión
  • 8/Marzo/2014: Tutorial 16: Aprendiendo del código compartido por los demás. Fin de la primera sección
  • 25/Dic/2013: Tutorial 1) Usando un editor externo
  • 24/Dic/2013: Comenzada la página

Proyecto Clone wars

Proyecto Clone wars: Construye tu impresora 3D opensource!
Proyecto Reprap
Proyecto RepRap: Impresoras 3D auto-replicantes. El origen de la revolución de las impresoras 3D opensource
Obijuan Academy
Obijuan Academy, Tu academia rebelde! ;-)