Progettiamo i nostri oggetti con OpenSCAD
Se siete insegnanti e state pensando ad un corso di coding a scuola consiglio di prendere in considerazione anche l’utilizzo di OpenSCAD un CAD per la creazione di oggetti 3D opensource multipiattaforma che ha differenza di altri modellatori 3D ricorda più un IDE di programmazione in cui ogni primitiva (cubi, sfere, coni, ecc…) può essere usata se codificata con specifici codici di programmazione… non spaventatevi questa caratteristica è un pregio, soprattutto dal punto di vista didattico in quanto sarete in grado di dare ancor di più senso “fisico” a qualsiasi costrutto informatico: cicli, condizioni, chiamate di funzioni, ecc…
Anche per queste esercitazioni andrò passo passo, sarò schematico e vi indicherò le principali funzioni, intervallerò questi passi con qualche esercitazione, consiglio quindi per ogni passo di copiare ed incollare gli esempi all’interno di OpenSCAD.
Si parte!
- Modellatore 3D gratuito
- disponibile per Linux, MacOS e Windows
- La modellazione è basata sulla “codifica” come un linguaggio di programmazione, è molto semplice modificare le misure di un oggetto
Sito di riferimento: www.openscad.org
Seguite il link per prelevare OpenSCAD.
Manuali e tutorial disponibili on-line
AVVERTENZA: Non fatevi spaventare!
Non dovete memorizzare la sintassi!
Anatomia dell’interfaccia grafica
- Text Editor – Dove inseriamo le istruzioni (“code”)
- Area di visualizzazione – La tua opera! Dove viene renderizzato il tuo modello.
- Console – Informazioni tecniche su quello che sta succedendo (avanzamento del rendering, eventuali messaggi di errore)
Comandi dell’editor
- nuovo file
- apertura file
- salvare
- undo
- redo
- unindent
- ident
- preview
- render
- esportazione in STL
Per visualizzare il proprio lavoro ricordate le tre funzioni fondamentali F4, F5, F6:
- F4: ricarica e visualizzazione del lavoro nell’area di visualizzazione (2)
- F5: visualizzazione del lavoro nell’area di visualizzazione (2)
- F6: render del proprio lavoro. Ricordate che per esportare in STL è necessario prima effettuare il render del proprio lavoro
Nell’area di visualizzazione è possibile effettuare il preview ed il render del proprio lavoro, zoom in e out, cambiare punto di vista, visualizzare la scala graduata e molto altro, provate ogni funzione per prendere dimestichezza con l’interfaccia.
Mouse e area di visualizzazione
- Click sinistro mouse e trascina permette di ruotare la vista
- Click destro mouse e trascina permette di effettuare un pan
- Rotazione rotella mouse consente di fare uno zoom in o zoom out
Rotazione
Pan
Zoom in e zoom out
Sintassi dei comandi
- ; la fine di una istruzione (ad es. make a cube;)
- // Un commento o una label – ignorato dall’area di visualizzazione
- { } Raggruppare i comandi
- [x,y,z] “Vectors” (Coordinate, dimensioni 3D)
Le primitive del linguaggio
2D Shapes
E’ possibile realizzare forme 2D provate con:
- circle(4);
- square(3);
Nell’area di editing scrivete circle(4); otterrete una circonferenza di raggio 4
Nell’area di editing scrivete square(3); otterrete quadrato di lato 3
Per centrare una figura rispetto all’origine è sufficiente aggiungere il parametro center = true
square(3, center = true);
realizzerà un quadrato di lato 3 centrato nell’origine:
Attenzione che la funzione square non definisce solamente un quadrato possiamo definire anche un rettangolo specificando base ed altezza:
square([4,2], center = true);
realizza un rettangolo di base 4 e altezza 2 centrato nell’origine:
Disegnare poligoni
Per disegnare un generico poligono si utilizza la funzione polygon a cui sono associati come parametri l’elenco dei punti che lo descrivono
polygon([[0,0],[3,0],[5,4],[0,2]]);
Per rendere più agevole il disegno di un poligono vi suggerisco di utilizzare l’applicazione on-line che trovate a questo indirizzo:
con essa potrete disegnare per punti il poligono e automaticamente verrà generate la funzione polygon con l’elenco dei vertici:
Copiate ed incollate all’interno di OpenSCAD:
Commenti
Come per qualsiasi linguaggio di programmazione:
- i commenti rendono leggibile il codice da qualsiasi essere umano
- i commenti servono solo agli esseri umani
- i commenti in fase di compilazione (nel nostro caso renderizzazione) non vengono considerati dal sistema
I commenti possono essere su più linee o su una linea sola così come accade ad esempio quando scriviamo i nostri sketch per Arduino:
3D Shapes
sphere
creare una sfera
3 modi per creare una sfera:
- sphere (6);
- sphere(r=6);
- sphere(d=12);
quindi è possibile utilizzare una qualsiasi delle precedenti notazioni per creare una sfera di raggio 6:
cube
creare un cubo
cube(4); genera un cubo avente lati di lunghezza 4
cube([6,4,2]); genera un parallelepipedo a base rettangolare
nel caso si desidera centrare rispetto all’origine: cube([6,4,2], center=true);
cylinder
creare un cilindro
cylinder(h=5, r=2);
crea un cilindro avente alto 5 e circonferenze di base con raggio 2
per creare un cilindro con circonferenze di base aventi raggio differente:
cylinder(h=5, r1=3, r2=1);
Trasformazioni
traslate([x,y,z])
Per traslare un oggetto rispetto all’origine degli assi lungo un determinato asse si utilizza la funzione traslate([x,y,z])
esempio:
sphere(4); translate([0,6,0]) { cube(4, center=true); }
Il codice realizzerà una sfera di raggio 4 ed un cubo di lato 4 traslato di 6 sull’asse y e centrato su di esso:
rotate([x,y,z])
Ruotare un solido di una certa quantità di gradi rispetto agli assi.
rotate([90,0,0]) { cylinder(r=2, h=5, center=true); }
Il codice realizzerà un cilindro con circonferenza di base di raggio 2, altezza 5 e ruotato di 90 gradi rispetto all’asse x:
scale([x,y,z])
(1 = 100%, 2=200%, etc…)
Scala un oggetto di dimensioni fissate secondo la percentuale per ogni asse indicata in parentesi quadre.
scale([1,2,1}) { cube(2); }
Il codice realizza, partendo da un cubo di lato 2, un aumento di scala al 200% lungo l’asse y:
color
permette di assegnare un colore agli oggetti, ciò permetterà di distinguere le varie parti del progetto.
Esistono due modi per assegnare un colore ad un oggetto:
color([red, green, blue, alpha]);
dove red, green, blue sono i codici RGB da 0 a 255 e alpha è la trasparenza che assume un valore compreso tra 0 e 1
color(“nome del colore”);
nome del colore in lingua inglese: Red, Aqua, Yellow, ecc…
per maggiori informazioni si consulti il manuale di riferimento.
color("orange") sphere(4); rotate([0,90,0]) { color("blue") cylinder(r=2, h=12,center= true); }
Il codice permette di disegnare una sfera di raggio 4 di colore arancione ed un cilindro di colore blu centrato rispetto all’origine degli assi ruotato di 90° rispetto all’asse y:
mirror([x,y,z])
Rispecchiare un oggetto rispetto all’origine degli assi. Impostando x, y e z 1 oppure 0 si stabilisce il piano in cui si desidera effettuare il mirroring.
Per maggiori informazioni sul mirroring si consulti il manuale di riferimento.
color("orange") cube([2,4,1]); mirror([1,0,0]) { color("blue") cube([2,4,1]); }
Il codice permette di disegnare un parallelepipedo di lati 2,4,1 di colore rosso ed un secondo parallelepipedo di colore blu avente stesse dimensioni di cui viene fatto il mirroring rispetto al piano yz, quindi ribaltamento rispetto all’asse x:
Nota sull’uso delle parentesi graffe
- usare le parentesi graffe {} se il comando si applica a più di un oggetto/linea
- identity il codice per renderlo più leggibile
Esempio di codice poco comprensibile:
color("white") sphere(r=100); color("white") translate([0,0,150]) sphere(r=70); color("white") translate([0,0,265]) sphere(r=50);
Il codice realizza la traslazione di tre sfere bianche di raggio decrescente lungo lasse z:
Esempio di codice comprensibile:
color("white") { sphere(r=100); translate([0,0,150]) sphere(r=70); translate([0,0,265]) sphere(r=50); }
Esercizio 1
Sfera centrata nell’origine degli assi e 6 cubi aventi stessa dimensione e distanza dall’origine degli assi:
Esercizio 2
Tre cilindri centrati nell’origine degli assi e su ogni cilindro posizionare una sfera avente stesso diametro della base dei cilindro. Inserire una sfera centrale più grande.
Esercizio 3
Con le istruzioni spiegate in questa lezione realizzare il modellino dell’automobile rappresentato nelle immagini che seguono.
Suggerimento
Nell’immagine il corpo è centrato rispetto all’origine degli assi e la struttura e composta dai seguenti solidi traslati:
– 3 parallelepipedi
– 7 cilindri
Buona sperimentazione a tutti 🙂