Diferencia entre revisiones de «Diseño de piezas con OpenScad II»
(→Estudiando el código compartido por los demás) |
(→Estudiando el código compartido por los demás) |
||
Línea 814: | Línea 814: | ||
| [[Archivo:Openscad-2-T16-PowerCode-carro-x.png|thumb|300px| El carro del eje x de una PowerCode (''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| (''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'')]] |
− | | [[|thumb|300px| (''click para ampliar'')]] | + | | [[Archivo:Cyclone render v0.9.7.png|thumb|300px| Vista 3D de la Cyclone, hecha con Openscad (''click para ampliar'')]] |
|---------- | |---------- | ||
| [[|thumb|300px| (''click para ampliar'')]] | | [[|thumb|300px| (''click para ampliar'')]] |
Revisión del 09:29 9 mar 2014
Contenido
- 1 Ficha
- 2 Introducción
- 3 Descargas
- 4 Aprendiendo más opciones de Openscad
- 4.1 1) Usando un editor mejorado
- 4.2 2) ¡¡¡Las pirámides son cilindros!!!
- 4.3 3) Mis objetos en una cuadrícula, por favor
- 4.4 4) Esferita, esferita, dime donde está la cuadrícula
- 4.5 5) Organiza tus canicas
- 4.6 6) ¡Comparte tus diseños!
- 4.7 7) Tirando tangentes con el operador hull
- 4.8 8) Figuras redondeadas en el plano xy
- 4.9 9) Automatizando con vectores
- 4.10 Apilando 2 objetos
- 4.11 Apilando varios objetos
- 4.12 Mis cubos con curvas, por favor
- 4.13 Objetos condicionales: cilindros redondeados
- 4.14 Redondeados parciales con hull (II)
- 4.15 El operador Minkowski
- 4.16 Descripción
- 4.17 Estudiando el código compartido por los demás
- 5 Objetos 3D a partir de objetos 2D
- 6 POR HACER...
- 7 Repositorio
- 8 Licencia
- 9 Sobre este tutorial
- 10 Enlaces
- 11 Noticias
Ficha
- Título: Diseño de piezas con OpenScad II
- Contexto: Continuación del tutorial Diseño de piezas con OpenScad
- Autor: Juan González (Obijuan)
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 :-)
Descargas
Pendiente... de momento los ejemplos están accesibles desde el repositorio en github |
Aprendiendo más opciones de Openscad
1) Usando un editor mejorado
Video Tutorial 1 |
---|
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 |
---|
Descripción
Se muestra cómo con el comando "cylinder" de openscad se pueden crear conos, pirámides y tetraedros
Código
- Fichero: cylindros-2.scad
//-- 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 |
---|
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
- Fichero: cuadricula-1.scad
//-- 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 |
---|
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 |
---|
Descripción
Ejemplo de diseño de una pieza paramétrica para organizar las canicas
Código
- Fichero: porta-canicas.scad
//-- 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 |
---|
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:
- En mi wiki personal
- El código lo subo a github. Es un repositorio y permite que otros aporten sus modificaciones fácilmente
- También lo he publicado en Fabfabbers
- y en Youmagine
- El repositorio más antiguo es Thingiverse, aunque yo lo he dejado de usar.
7) Tirando tangentes con el operador hull
Video Tutorial 7 |
---|
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
- Fichero: tirando-tangentes.scad
//-------- 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 |
---|
Descripción
Ejemplo de cómo se pueden hacer objetos con las aristas verticales redondeadas, usando el comando hull
Código
- Fichero: cubo-redondeado.scad
//-- 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 |
---|
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
- Fichero: poligonos-redondeados.scad
//-- 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 |
---|
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
- Fichero: apilando-2-cajas.scad
//-- 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 |
---|
Descripción
Se propone como ejercicio modificar el ejemplo del tutorial anterior para apilar 4 objetos
Código
- Fichero: apilando-varias-cajas.scad
//-- 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 |
---|
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
- Fichero: 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
Video Tutorial 13 |
---|
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
- Fichero: 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);
Redondeados parciales con hull (II)
Video Tutorial 14 |
---|
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:
- redondeos_parciales.scad
- Cylindros redondeados: 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
Video Tutorial 15 |
---|
Descripción
Utilización del operador Minkowski para redondear tanto las aristas verticales como horizontales de un objeto no convexo
Código
- Ficheros:
- minkowski.scad
- Cylindro redondeado: 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);
Estudiando el código compartido por los demás
Video Tutorial 16 |
---|
[[|thumb|300px| (click para ampliar)]] | [[|thumb|300px| (click para ampliar)]] |
[[|thumb|300px| (click para ampliar)]] | [[|thumb|300px| (click para ampliar)]] |
[[|thumb|300px| (click para ampliar)]] | [[|thumb|300px| (click para ampliar)]] |
Descripción
- Ejemplos incluidos con openscad
- MCAD
- Prusa i3
- PowerCode
- Cyclone
- Miniskybot
- REPYZ
- http://www.openscad.org/cheatsheet/
Código
- Ficheros: []
Objetos 3D a partir de objetos 2D
17 bis) Extruyendo objetos 2D
- 2d -> square, circle
- Show: Linear extrusion, rotate extrusion, linear extrusion + twist!
18 Polígonos 2D
- Ej. triangle
4) Ejercicio: Rueda del miniskybot
5) Generación automática de polígonos con python
6) Creando logos
- draw lines
- move to origin
- export to dxf
- import into openscad
7) Creando logos (II)
- The same but with bezier curves!!
a) Draw curves b) insert multiple points c) convert into lines d) move orig e) export dxf f) import openscad
8) Creating logos from images!
Ej. Obijuan Academy!
POR HACER...
Operaciones: Escalar, simetrías
Creando tus propias transformaciones
Cuadricula: grid
11) Using libraries: write
12) Obiscad: roudend cube
13) Obiscad: Vectors
14) Obiscad: beveling and reinforcements
15) attach?
16) MCAD library
Repositorio
Los ficheros fuentes están en este repositorio:
Licencia
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.
|
Enlaces
- http://www.thingiverse.com/thing:29505: Resaltado de sintaxis en kate para Openscad
Noticias
- 25/Dic/2013: Tutorial 1) Usando un editor externo
- 24/Dic/2013: Comenzada la página
|
Proyecto Clone wars: Construye tu impresora 3D opensource! |
|
Proyecto RepRap: Impresoras 3D auto-replicantes. El origen de la revolución de las impresoras 3D opensource |
|
Obijuan Academy, Tu academia rebelde! ;-) |