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]