Crearemos un objeto condicional denominado rcylinder. En función del parámetro both, se dibuja bien un cilindro con ambas tapas redondeadas, o bien sólo con la superior. También la traslación aplicada dependerá del valor del parámetro center.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
//-- 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); |
Este contenido ha sido publicado por ObiJuan en su página web bajo licencia Creative Commons Attribution-ShareAlike 2.5 Spain License.