Il linguaggio OpenSCAD
Questo linguaggio è basato solo su alcuni concetti base. Questi concetti sono abbastanza elementare, ma grazie alla loro combinazione è possibile generare qualsiasi struttura 3D.
Questo è articolo è direttamente connesso all’articolo OpenSCAD: come creare oggetti solidi 3D, dove viene fatta una breve presentazione del software di OpenSCAD e con quale propositi possiamo utilizzarlo.
In questo articolo vedremo i concetti chiave che stanno dietro alla creazione di un oggetto 3D. Questi concetti sono direttamente traducibili in un linguaggio di programmazione e con una sequenza veloce di piccoli esempi è possibile fare una panoramica su come sia possibile implementare i modelli in 3D.
Forme Base
- Cubo (in realtà un parallelepipedo, ma non so perchè tutti si riferiscono ad esso come cubo)
- Sfera
- Cilindro
- Poliedro (non trattato qui)
IL CUBO
Definire un cubo è assai semplice:
cube([width,heigth,depth]);
Crea un cubo nel quadrante positivo con un angolo a (0,0,0).
Se invece vogliamo disegnare un cubo con il centro nel punto d’origine del sistema di coordinate, è necessario aggiungere esplicitamente il parametro center e impostarlo su true (per default è false).
cube([width,heigth,depth], center = true);
LA SFERA
La creazione di una sfera è molto semplice:
sphere(r);
Disegna una sfera di raggio r centrata nel punto di origine del sistema di coordinate.
La sfera mostrata appare, a seconda delle sue dimensioni, con delle sfaccettature più o meno marcate. Se vogliamo incrementare la risoluzione allo scopo di ottenere una migliore superficie “curva”, è necessario aggiungere il parametro $fn.
IL CILINDRO
La creazione di coni e cilindri viene fatta usando la stessa funzione.
Definendo solamente un raggio otteniamo un cono:
cylinder(h,r,center=true,$fn = 100);
Definendo due raggi otteniamo un tronco di cono o un cilindro (se r1 = r2):
cylinder(h,r1,r2,center=true,$fn=100);
Trasformazioni
Una volta definita la figura 3D da disegnare, è necessiaro sottoporla ad una trasformazione. Se hai familiartià con la matematica di base (algebra matriciale) che sta dietro al modeling 3D, dovresti sapere che qualsiasi trasformazione a cui un oggetto è soggetta, può essere suddivisa in una serie di trasformazioni elementari.
- traslazione
- rotazione
- scalatura (meglio scaling)
- specularità
TRASLAZIONE
Per translazione si intende il muovere un oggetto di una certa distanza in una specifica direzione.
translate([x,y,z])
“an object”;
ROTAZIONE
Questa trasformazione ruota un oggetto rispetto all’origine del sistema di coordinate o attorno ad un asse arbitrario.
rotate([ax,ay,az])
“an object”;
dove ax, ay e az sono gli angoli di rotazione rispetto agli assi x, y e z rispettivamente.
SCALATURA
Con le trasformazioni in scala noi possiamo restringere o allungare un modello 3D lungo un asse. Spesso, questa trasformazione viene utilizzata per ottenere altre figure che non sarebbero altrimenti ottenibili con l’uso delle figure base. L’uso di una scalatura non uniforme, per esempio solo su uno specifico asse, deforma una figura base e nel fare ciò, abbiamo ottenuto una nuova forma più complessa. Un buon esempio può essere evidente quando applichiamo una scalatura non uniforme ad una sfera.
scale([x,y,z])
“an object”;
SPECULARITA’
Questa trasformazione crea l’immagine speculare di un oggetto rispetto ad un piano di simmetria passante per l’origine.
mirror([nx,ny,nz])
“an object”;
L’argomento passato alla funzione mirror() è il vettore normale al piano intersecante l’origine attraverso cui si forma l’immagine speculare dell’oggetto.
Le operazioni CSG
Una volta che abbiamo definito un insieme di oggetti 3D e avendo applicato loro una sequenza di trasformazioni, la terza operazione da fare è combinare insieme gli oggetti. La combinazione di oggetti diversi può essere fatta attraverso le operazioni CSG:
- unione
- differenza
- intersezione
UNIONE
La funzione union() genera un nuovo oggetto 3D definito dal volume occupato da tutti gli oggetti soggetti all’unione.
union(){
“object1”;
“object2”;
…
}
DIFFERENZA
La funzione difference() genera un nuovo oggetto 3D definito dal volume occupato dal primo oggetto meno quello occupato dal secondo.
difference(){
“object1”;
“object2”;
}
INTERSEZIONE
La funzione intersection() genera un nuovo oggetto 3D definito dal volume occupato da entrambe gli oggetti.
intersection(){
“object1”;
“object2”;
}
I CARATTERI MODIFICATORI
C’è un insieme di caratteri (‘%’ e ‘#’) che vengono utilizzati per modificare l’aspetto degli oggetti. Ciò è particolamente utile quando vogliamo evidenziare in qualche modo il volume escluso dalle precedenti operazioni CSG.
Il carattere ‘#’ il debug modifier e disegna l’oggetto corrispondete in rosa trasparente.
Il carattere ‘%’ è il background modifier e disegna l’oggetto corrispondente in un grigio trasparente.
In successivi articoli verranno proposti alcuni tutorial per realizzare strutture 3D più complesse. Verranno poi trattati nello specifico alcuni argomenti base qui non ancora trattati perchè un po’ più complessi: l’hull, la somma di Minkowski e l’estrusione da figure 2D.
PARTECIPA ANCHE TU
Se pensi di essere un esperto e desidereresti parlare tu stesso di questi o altri argomenti, sei il benvenuto!. Oppure hai appena messo in pratica quello qui descritto e hai sviluppato forme complesse che vorresti subito mettere in mostra… Fai il login e inviami subito un articolo/post tutorial. Presto lo vedrai pubblicato!
Arrivederci al prossimo articolo.