====== Funciones y módulos definidos por el usuario ====== ===== Funciones ===== Las funciones son operaciones con valores que se definen, que retornan otro valor.\\ Para definir una función: function name ( parameters ) = value ; Algunos ejemplos: //Ejemplo 1: function func0() = 5; function func1(x=3) = 2*x+1; function func2() = [1,2,3,4]; function func3(y=7) = (y==7) ? 5 : 2 ; function func4(p0,p1,p2,p3) = [p0,p1,p2,p3]; echo (func0()); // 5 a = func1(); // 7 b= func1(5); // 11 echo (func2()); // [1, 2, 3, 4] echo( func3(2),func3()); // 2, 5 z= func4(func0(),func1(),func2(),func3()); // [5, 7, [1, 2, 3, 4], 5] translate([0,-4*func0(),0])cube([func0(),2*func0(),func0()]); // same as translate([0,-20,0])cube([5,10,5]); function steps( start, no_steps, end) = [start:(end-start)/(no_steps-1):end]; echo( steps(10,3,5)); // [10 : -2.5 : 5] for( i=steps(10,3,5))echo(i); // 10 7.5 5 echo(steps(10,3,15)); //[10 : 2.5 : 15] for( i=steps(10,3,15))echo(i); // 10 12.5 15 echo(steps(0,5,5)); // [0 : 1.25 : 5] for( i=steps(0,5,5))echo(i); // 0 1.25 2.5 3.75 5 Las funciones pueden usarse de forma recursiva con el operador condicional ternario. Ejemplo: // recursion example: add all integers up to n function add_up_to(n) = ( n==0 ? 0 : n + add_up_to(n-1) ); ===== Módulos ===== Los módulos son agrupaciones de líneas de código que al ser ejecutados realizan acciones, pero no retornan ningún valor. module name ( parameters ) { actions } Cuando un objeto o figura se crea varias veces en una parte del código, por ejemplo mediante bucles, para que se muestre cada elemento creado en cada iteración, debe usarse childres(). \\ Ejemplo: color("red") make_ring_of(radius = 15, count = 6) cube(8, center = true); module make_ring_of(radius, count) { for (a = [0 : count - 1]) { angle = a * 360 / count; translate(radius * [sin(angle), -cos(angle), 0]) rotate([0, 0, angle]) children(); } } Los módulos pueden usarse como operadores, en función del contexto del programa.\\ Los módulos pueden usarse de forma recursiva llamándose a si mismos en su código.\\ Si se define un módulo con el nombre de otro que ya existe, éste es sobreescrito por el nuevo.