OpenSCAD/Primi passi
Cheatsheet
[modifica | modifica sorgente]Pagina riassuntiva con i comandi disponibili per la modellazione [link].

Aprire un modello di esempio esistente
[modifica | modifica sorgente]
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 | modifica sorgente]Cube, sphere, cylinder
[modifica | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]Quindi premere F5 per ottenere la compilazione e la visualizzazione del modello.
Rotazione
[modifica | modifica sorgente]Quindi premere F5 per ottenere la compilazione e la visualizzazione del modello.
Cambiare il colore di un oggetto
[modifica | modifica sorgente]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'oggetto, 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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]












