OpenSCAD/Primi passi
Cheatsheet Modifica
Pagina riassuntiva con i comandi disponibili per la modellazione [link].
Aprire un modello di esempio esistente Modifica
Aprire uno degli esempi della installazione OpenSCAD (File > Examples > example004.scad).
Oppure copia e incolla il codice seguente della finestra OpenSCAD.
Creare un modello Modifica
Cube, sphere, cylinder Modifica
Openscad ha tre funzioni per i solidi base: cube(), sphere(), cylinder() e una per solidi generici polyhedron().
In OpenSCAD, inserire le seguenti linee di programma:
Quindi premere F5 per ottenere la compilazione e la visualizzazione del modello.
Difference, union, intersection Modifica
Quindi premere F5 per ottenere la compilazione e la visualizzazione del modello.
Sono possibile tre tipi di azione con il mouse:
- Trascinare con il tasto sinistro per ruotare la vista. Il valore della rotazione in basso cambia.
- Trascinare con il tasto destro per spostare la vista (pan). Il valore della traslazione in basso cambia.
- Usare la rotella di scroll del mouse per lo zoom. Alternativamente si possono usare i tasti + e -, oppure trascinare con il tasto destro premendo il tasto SHIFT. Il valore dello zoom in basso cambia.
Posizionare un oggetto Modifica
Questo esempio mostra come usare il comando translate per posizionare un cuboide a fianco di un cuboide esistente.
Si noti che non occorre un punto e virgola dopo il commando translate. Questo perché il commando si riferisce agli oggetti che seguono, racchiusi nelle parentesi graffe. Il punto e virgola, quindi, avrebbe l'effetto di interrompere il comando di translazione, e il secondo cuboide verrebbe posizionato nella stessa posizione del primo.
Traslazione Modifica
Quindi premere F5 per ottenere la compilazione e la visualizzazione del modello.
Rotazione Modifica
Quindi premere F5 per ottenere la compilazione e la visualizzazione del modello.
Cambiare il colore di un oggetto Modifica
Possiamo cambiare il colore di un oggetto mediante i valori RGB (RossoVerdeBlu). Ma, invece dei valori RGB da 0 a 255, vengono inseriti valori da 0.0 a 1.0.
A partire dalla versione del 2011.12 si possono usare anche i nomi dei colori come specificato in Web colors. Ad esempio: color("red") cube();
Considerando un commando completo come una proposizione, allora color()
è un "aggettivo" che descrive l'"oggetto" della proposizione (cioè il "nome"). In questo caso, l'oggetto è il cuboide cube()
da creare. L'aggettivo deve essere prima del nome nella proposizione, come nel caso: color() cube();
. Allo stesso modo, translate()
può essere considerato un "verbo" che agisce sull'oggeto, ed è posizionato così: translate() color() cube();
. Il codice che segue produce lo stesso risultato:
// esempio 6 - cambiare il colore di un oggetto
translate([6,0,0])
{
color([0,0,1]) // SENZA punto e virgola perché non è un comando ma attributo del cubo
cube([2,3,4]); // punto e virgola alla fine dei comandi
}
translate([6,0,0]) // le parentesi graffe non servono se riguarda un solo solido
color([0,0,1]) cube([2,3,4]);
La modifica dei colori è attiva solo in Preview (F5). La modalità Render (F6) non la supporta ancora.
Moduli Modifica
I moduli possono essere utilizzati per costruire procedure complesse da aggiungere alle istruzioni proprie del linguaggio. I moduli accettano anche parametri in ingresso. Non restituiscono valori in uscita, per questo serve utilizzare function().
Una volta definiti i moduli vengono temporaneamente aggiunti al linguaggio di OpenSCAD.
module name ( parameters ) { actions }
// esempio 7 - modulo per la creazione di cilindri ruotati
module rotcy(rot, r, h) {
rotate(rot)
cylinder(r = r, h = h, center = true);
}
rotcy([0,45,0],10,30);
Iterazione: ciclo for() Modifica
Utilizza ogni valore dell'intervallo assegnato o del gruppo di valori (vettore) applicandolo all'azione che segue.
for(variable = [start : increment : end]) for(variable = [start : end]) for(variable = [vector])
Esempi
for (a =[3:5])echo(a); // 3 4 5 for (a =[3:0.5:5])echo(a); // 3 3.5 4 4.5 5 for (a =[0:2:5])echo(a); // 0 2 4 for (a =[3:-2:-1])echo(a); // 3 1 -1 for (a =[3,4,1,5])echo(a); // 3 4 1 5 il vettore si distingue per la presenza di la , (virgola) anziché : (due punti) for (a =[0.3,PI,1,99]){echo(a);} // 0.3 3.14159 1 99
x1=2; x2=8; x3=5.5; for (a =[x1,x2,x3]){ echo(a); } // 2 8 5.5
for (a =[[1,2],6,"s",[[3,4],[5,6]]])echo(a); // [1,2] 6 "s" [[3,4],[5,6]]
for (i=[0:3]) translate([i*10,0,0]) cube(i+1);
iterazione di rotazioni mediante vettore di valori for(i = [ [ 0, 0, 0], [ 10, 20, 300], [200, 40, 57], [ 20, 88, 57] ]) { rotate(i) cube([100, 20, 20], center = true); }
iterazione di traslazione mediante vettore di valori for(i = [ [ 0, 0, 0], [10, 12, 10], [20, 24, 20], [30, 36, 30], [20, 48, 40], [10, 60, 50] ]) { translate(i) cube([50, 15, 10], center = true); }
iterazione mediante uso di vettore di vettori for(i = [ [[ 0, 0, 0], 20], [[10, 12, 10], 50], [[20, 24, 20], 70], [[30, 36, 30], 10], [[20, 48, 40], 30], [[10, 60, 50], 40] ]) { translate([i[0][0], 2*i[0][1], 0]) cube([10, 15, i[1]]); }
If .... else Modifica
Esegue un test per determinare se l'azione che segue il test debba essere eseguita.
if (test) scope1 if (test){scope1} if (test) scope1 else scope2 if (test){scope1} else {scope2}
if (b==a) cube(4); if (b<a) {cube(4); cylinder(6);} if (b&&a) {cube(4); cylinder(6);} if (b!=a) cube(4); else cylinder(3); if (b) {cube(4); cylinder(6);} else {cylinder(10,5,5);} if (!true){cube(4); cylinder(6);} else cylinder(10,5,5); if (x>y) cube(1, center=false); else {cube(size = 2, center = true);} if (a==4) {} else echo("a is not 4"); if ((b<5)&&(a>8)) {cube(4); else cylinder(3);} if (b<5&&a>8) cube(4); else cylinder(3);
I cicli possono essere nidificati.
if (test1) { scope1 if (test2) {scope2.1} else {scope2.2} } else { scope2 if (test3) {scope3.1} else {scope3.2} }
Visualizzazione del modello Modifica