====== 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.