Transformacións

Translación

Para trasladar un obxecto encribimos translate([x,y,z]){}

// Trasladamos en Z a metade da altura

translate([0,0,2.5]){
  cube([10, 20, 5], center=true);
}
  • Traslada o obxecto por debaixo do plano XY

Se parametrizamos o obxecto, ao cambiar as dimensións, a translación cambia en función dos parámetros.

// parámetros

x = 10;
y = 20;
z = 5;

// Trasladamos en Z a metade da altura

translate([0,0,z/2]){
  cube([x, y, z], center=true);
}
  • Proba cambiar a dimensión z do obxecto e verás que sempre se mantén no eixe Z positivo.

Se parametrizamos o obxecto, ao cambiar as dimensións, a traslación cambia en función dos parámetros.

// parámetros:

altura=10;
radio=5;

// Trasladamos en Y

translate([0,radio*cos(30),0]){ 
    cylinder(r=radio, h=altura, $fn=6, center=false);
}
  • Proba trasladar esta figura pero de xeito que quede no lado negativo do eixe Y

Rotación

// parámetros: 

altura=10; 
radio=5; 
caras=6;

// Trasladamos en Y 

rotate([0,0,30]){ 
    cylinder(r=radio, h=altura, $fn=caras, center=false); 
}
  • Debuxa un prisma cube([x, y, z], center=true);  e fai rotacións no eixe X, no eixe Y e no eixe Z.

Escala

// parámetros

radio=10; 

// escalamos en Z

scale([1,1,2]){ 
    sphere(r=radio, $fn=36);
}
  • Fai un poliedro ou esfera (cambiando $fn) e escálao no eixe X e no eixe Y

Combinación de transformacións

Pódense poñer as instrucións de translación e rotación directamente, sen chaves.

Tamén podemos encadear instrucións. No seguinte caso primeiro rotamos un cubo 45º no eixe X e despois trasladámolo 10 mm no eixe Y.

// combinación

translate([0,10,0]) rotate([45,0,0]) cube(5, center=false);
  • Fai primeiro a translación e despois a rotación

Unión

Imos unir varias pezas entre si.

// unión de dúas pezas

union(){
  translate([0,0,5]) cube([10,30,10], center=true);
  translate([0,0,15]) cube([10,10,10], center=true);
}
  • Traslada e redimensiona o cubo de xeito que a peza forme un L
  • Une outro cubo de forma que quede unha peza en forma de U

Diferencia

Tamén podemos extraer unha figura dun sólido

//Diferencia entre dúas pezas

caras=6;
altura=5;
radio1=20;
grosor=2;

difference() {
    cylinder(r=radio1,  h=altura, center=false, $fn=caras);
    cylinder(r=radio1-grosor, h=altura, center=false, $fn=caras);
}
  • Debuxa unha semiesfera facendo a diferencia entre unha esfera e un prisma.
  • Debuxa un cubo e nunha das caras extrae un oco semiesférico.

Intersección

Cando facemos unha intersección obtemos o volume que é común entre dous sólidos.

//Intersección entre una esfera y un cubo 

intersection() {
    cube(8.5, center=true);
    sphere(r=5, $fn=180);
}
  • Traslada e redimensiona o cubo para facer outras interseccións coa esfera.

Cáscara (hull)

Establece un contorno que une varios sólidos

// hull

hull(){
    cylinder(r=5, h=2, $fn=360);
    translate([30,0,0]) cylinder(r=15, h=2, $fn=360);
}
  • Engade outro cilindro ou prisma noutra posición.

Propostas:

Lapiceiro

Fai unión de dous prismas con xiro. Un cara á esquerda e outro cara á dereita. Proba con outro nº de caras e ángulo. Utiliza o que vimos na páxina de extrusión:

linear_extrude(height=altura,twist=angulo, $fn=res){ 
    circle(r=radio, $fn=caras); 
}

No caso da imaxe: caras=15; angulo=60; res=30;

Busca outras combinacións: a) caras=24; angulo=30; res=48; b) caras=24; angulo=60; res=48;

Caixa

Utilizando operacións de unión, diferencia e translación debuxa unha caixa coma esta. Programa de forma que poidamos modificar os parámetros de radio, altura, grosor da parede, nº de caras.

Torre de hanoi

a) Constrúe o xogo da torre de hanoi. Redondea os cilindros. b) Parametriza para poder elixir as dimensións e o nº de aros.