Progettare con OpenScad, il tutorial

Openscad_PuntiUtilizzare in modo completo una stampante 3D e godere di tutta la sua potenza creativa significa anche essere autonomi quando si deve progettare oggetti. Disegnare in 3D non è complicato e per chi vuole iniziare esistono varie possibilità che dipendono dalle attitudini e predisposizione di chi inizia. È necessario partire con un programma semplice, che dia risultati immediati e che sia comprensibile al principiante. Una di queste possibilità è OpenSCAD, un programma per il disegno 3D disponibile per Windows, Mac e Linux. È un CAD opensource che può essere di aiuto per chi è alle prime armi e si trova spaesato con complessi programmi di modellazione e che può piacere a chi ha esperienza di programmazione: assomiglia molto a un “interprete”, cioè un programma che utilizzano a volte gli sviluppatori, che legge le istruzioni in formato comprensibile all’uomo e le trasforma in codici macchina. OpenSCAD non si concentra sugli aspetti artistici, la sua interfaccia è spartana: troverete solo tre pannelli e nessuna toolbar, come accade di solito nei programmi di modellazione. Ma potete controllare completamente il processo di creazione del modello e intervenire in ogni suo punto, perché il processo di modellazione lo scriverete voi. OpenSCAD è parametrico, il che significa che è possibile creare disegni che dipendono da alcune variabili su cui agire per modificare tutto il progetto. Potete disegnare un ingranaggio e impostare parametri come il diametro, il numero di denti, il foro, lo spessore: modificando uno di questi valori potete creare infiniti modelli. Può esportare file in formato STL pronti per essere stampati, ma anche file 2D (DXF, SVG).

Installazione di OpenScad e prime funzioni

Installate OpenSCAD e avviatelo: il programma presenta una finestra di benvenuto in cui è possibile creare un nuovo disegno (pulsante “New”) o aprirne uno recente (“Open”). La finestra del programma è semplice ed è divisa in tre sezioni:
- il pannello “Editor” per la scrittura del listato o sketch
- il pannello di “Preview”
- la console con i messaggi generati dal programma.
Nel pannello editor si scrivono le istruzioni per costruire gli oggetti. Recentemente è stata aggiunta una piccola toolbar che riporta le operazioni più comuni, come l’undo, il rendering o l’export in STL. Appena presa confidenza con il CAD, vi troverete più comodi a utilizzare le scorciatoie da tastiera che sono standard e intuitive: Undo si richiama con CTRL + Z (CMD + Z su Mac), per rigenerare il modello premete F5. Nel pannello Preview potete osservare lo spazio ridimensionale in cui apparirà il vostro disegno. La scena non si aggiorna fino a che non richiedete un “refresh” o “fast rendering”. Per facilitare l’orientamento nello spazio è possibile attivare una serie di aiuti, come gli assi cartesiani. Trovate le opzioni di visualizzazione nel menu “View”. Il mouse ha effetto solo su questo pannello: vedremo tra poco come utilizzarlo. Il terzo pannello è una console con i messaggi di servizio generati dal programma. Controllatela sempre dopo aver richiesto un aggiornamento della Preview, perché se ci sono degli errori, appariranno qui. Per prendere familiarità disegnate la forma primitiva più semplice possibile: un cubo con il lato lungo cinque (l’unità base è un millimetro). Nel pannello “editor” scrivete: cube(10); quindi premete il tasto F5 (o “Preview” sulla toolbar). Istantaneamente nel pannello “Preview” apparirà un cubo con il lato lungo dieci unità. Fate attenzione a terminare sempre i vostri comandi con un “punto e virgola”. Ora portate il cursore del vostro mouse sopra all’area di Preview. Come sempre con i programmi di disegno è consigliabile utilizzare un mouse dotato di due pulsanti e rotellina centrale cliccabile. Il mouse si usa solamente per modificare l’impostazione della “Preview”. Usate la rotellina per modificare l’ingrandimento della scena. Trascinando il mouse sull’area di Preview, con il tasto sinistro premuto, ruoterete la scena. Per spostare l’inquadratura della scena eseguite un “drag” con il tasto destro. Premete CTRL + 0 per re-impostare la visualizzazione della Preview. Utilizzando CTRL in combinazione con i tasti 5, 6, 7, 8, e 9 potrete impostare altre “viste rapide”. Il programma prevede due modalità di visualizzazione e costruzione della scena: “Preview mode” e “Rendering mode”. Il “Preview mode” compone la scena nel modo più rapido possibile, introducendo approssimazioni e semplificazioni. Il “Rendering mode” si utilizza prima di esportare l’oggetto disegnato e genera geometrie e mesh dettagliate e complete, per questo richiede tempi che possono arrivare anche a decine di minuti di attesa se il disegno è complesso. Potete richiamare il Rendering con il tasto F6.

Le forme base

 

Openscad_FormeOpenSCAD ha due modalità di lavoro: Constructive Solid Geometry (CSG); estrusione di tracciati piani. La modellazione CSG o modellazione per geometria solida costruttiva, crea forme complesse utilizzando modelli 3D semplici, chiamati “primitive”. Le primitive più comuni sono il parallelepipedo, il cilindro, la sfera, il cono, il tronco di cono. I volumi elementari si possono combinare utilizzando operazioni di somma, sottrazione o intersezione che sono chiamate operazioni “booleane”. Solitamente le operazioni che portano alla creazione di un modello complesso si possono organizzare in una struttura ad albero, dove si parte da una forma base cui si applicano “in cascata” delle sequenze di trasformazioni che lo coinvolgono tutto o in parte.
Iniziate un nuovo disegno richiamando la voce di menù File -> New oppure con CTRL + N. Nell’area dell’editor scrivete: cube([5,5,5]); Premete il tasto F5: OpenSCAD leggerà il listato e creerà la Preview della scena. Apparirà un cubo con il lato pari a cinque unità. La scrittura può sembrare ostica perché richiede l’uso delle parentesi quadre. In OpenSCAD una sequenza di numeri racchiusi tra due parentesi quadre si definisce un “vettore”, un semplice contenitore per una sequenza. Il comando “cube” quando riceve questi tre numeri così “impacchettati” sa che dovrà utilizzarli per impostare la lunghezza delle tre dimensioni del cubo. Nel primo esempio avete utilizzato un semplice numero che è utilizzato per tutti e tre i lati del solido. Utilizzando il vettore potete indicare tre dimensioni differenti e disegnare non solo cubi, ma ogni tipo di parallelepipedo. Quando gli script si complicano è utile aggiungere note o dei commenti a ciò che si è scritto. I commenti sono sempre preceduti da una doppia barra inclinata (//) e OpenSCAD non considera tutto quello che è scritto dopo. I commenti possono essere disposti anche su più righe, in questo caso per non dover ripetere all’inizio di ogni riga “//”, si preferisce usare la coppia di simboli /* */. Tutto quello compreso tra i due segni sarà ignorato. L’oggetto cube è disegnato con uno dei suoi vertici corrispondente all’origine dagli assi. Per ottenere un cubo centrato nell’origine, dovrete passare un secondo parametro: cube([1,2,3], center=true);
Un’altra primitiva è la sfera. Potete disegnarne una indicando la misura del suo raggio o del suo diametro. Ecco alcuni esempi: //una sfera di raggio pari a tre unità sphere(r=3); //una sfera con diametro pari a tre unità sphere(d=3); Si nota che la sfera tracciata è molto spigolosa, tanto da sembrare una specie di prisma. Potete migliorare il suo aspetto impostando la risoluzione da utilizzare per il disegno. La risoluzione si specifica con il parametro $fn. Provate quindi a disegnare una nuova sfera specificando la risoluzione: sphere(d=3, $fn=100); Per la sfera è possibile specificare la risoluzione in altri due modi, con i parametri $fa e $fs. Il primo specifica la dimensione minima dei segmenti con un valore in gradi, il secondo con una misura in millimetri. Disegnate un cilindro con: cylinder(r=5, h=10, $fn=100); l’oggetto avrà un raggio pari a cinque millimetri e sarà alto dieci unità. Anche l’aspetto del cilindro può essere migliorato specificando la risoluzione ($fn=100). Con questa funzione è possibile disegnare anche coni e tronco di coni indicando la misura del raggio inferiore (r1) e superiore (r2). Ecco il comando per tracciare un cono: cylinder(r1=5, r2=0, h=10, $fn=100); Se il parametro r2, il raggio superiore, non è nullo, otterrete un tronco di cono: cylinder(r1=5, r2=2, h=10, $fn=100); L’ultima primitiva tridimensionale è poliedro con cui potete comporre degli oggetti complessi formati da vertici e triangoli. Avete la libertà di comporre un oggetto con una forma arbitraria, ma non è semplice disporre in modo corretto un insieme di vertici e triangoli nello spazio. L’esempio seguente traccia una piramide: polyhedron (points=[[10,10,0],[10,-10,0],[-10,-10,0],[-10,10,0], [0,0,10]], faces=[[0,1,4],[1,2,4],[2,3,4],[3,0,4], [1,0,3],[2,1,3]]); Dovrete fornire al poliedro due vettori: il primo contiene le coordinate dei punti che compongono la vostra figura, il secondo definisce la composizione dei triangoli. Nell’esempio trovate cinque punti così disposti: quattro alla base e un quinto per il vertice. Numerate i punti partendo da zero. Il numero assegnato al punto corrisponde alla sua posizione nel vettore. Per specificare i triangoli dovete indicare tre punti per volta: [0,1,4] è il triangolo formato dai punti 0, 1 e 4. Prestate attenzione anche a come definite i triangoli, altrimenti potreste ottenere delle figure non stampabili. Come sapete i triangoli di una mesh devono essere tutti orientati nello stesso modo. Per assicurarvi di questo cercate di elencare i punti di ogni triangolo utilizzando sempre lo stesso verso. OpenSCAD può tracciare primitive bidimensionali per comporre disegni piani che potete in seguito esportare oppure utilizzare per generare delle forme piene. Queste forme non hanno uno spessore, ma nella preview le vedrete disegnate con l’altezza pari a un’unità. Generando il rendering, invece, noterete che il loro spessore è nullo.
Openscad_Forme_2
Le forme sono: square - per tracciare un rettangolo o un quadrato. Potete usare un solo parametro numerico per disegnare un quadrato, oppure un vettore con le dimensioni dei due lati. Per disegnare un quadrato: square(5); Per disegnare un rettangolo: square([5,10]); Circle - traccia un cerchio impostando il raggio o il diametro e indicando la risoluzione. Questa funzione è simile a quella sphere: circle(r=5, $fn=100); Polygon - traccia un poligono arbitrario utilizzando un elenco di punti: polygon(points=[[0,0],[100,0],[130,50],[30,50]]); Text - traccia dei testi utilizzando la scritta fornita come parametro.

Traslazioni e rotazioni

Tutto quello che disegnate in OpenSCAD è centrato nell’origine. Potete spostare qualsiasi oggetto applicando una trasformazione con l’operatore translate. Translate riceve come argomento il punto in cui spostare l’oggetto cui è applicato e deve sempre precedere la definizione dell’oggetto che si desidera spostare. Per spostare un cubo di dieci unità lungo l’asse x, scrivete: translate([10,0,0]) cube(5); L’operatore “translate” richiede tre coordinate, che vanno scritte racchiuse tra delle parentesi graffe, che corrispondono agli spostamenti lungo la direzione X, Y e Z. “translate” si può applicare anche a più oggetti utilizzando una coppia di parentesi graffe (per aprire una parentesi graffa usate i tasti: ALT Gr + SHIFT + [Per chiudere una parentesi graffa usate i tasti: ALT Gr + SHIFT + ]). Per migliorare la “leggibilità” del codice è bene usare una formattazione, cioè inserire spaziature per fare ordine “visivo”. Per spostare due oggetti contemporaneamente usate le parentesi graffe. Dopo la parentesigraffa di chiusura non serve mettere il segno di “punto e virgola”. translate([10,10,0]) {cube(5); cylinder(r1=5, r2=0, h=7);}
Openscad_Forme_3Il comando “rotate” serve per ruotare l’oggetto a cui è applicato, attorno all’origine o a un asse a vostra scelta. La rotazione si specifica utilizzando un vettore con tre valori che corrispondono alle rotazioni attorno ai tre assi principali. Inizialmente, per non fare confusione, è consigliabile applicare una rotazione per volta. Questa istruzione ruota il cubo attorno all’asse Z: rotate([0,0,45]) cube(5);
Con l’operatore “resize” potete modificare in modo uniforme o non uniforme le dimensioni dell’oggetto cui è applicato. Applicandolo a una sfera potete ottenere un ellissoide: scale([2,1,1]) sphere(5, $fn=100); Il comando “color” modifica il colore di un oggetto. Sembrerebbe una cosa poco utile, in realtà quando i vostri disegni si complicheranno, farà comodo distinguere le diverse parti utilizzando colori differenti. Per definire un colore potete usare una stringa con dei nomi standard (in inglese: “red”, “blue”, “green”), oppure indicare le componenti RGB che compongono la tonalità utilizzando un vettore con tre numeri compresi tra 0 e 1. color(“red”) cube(5); color([0.3, 0.9, 0.7]) cube(5);
Per applicare il colore a gruppi di oggetti utilizzate le parentesi graffe: color(“blue”) {cube(5); translate((10,10,0]) cube(2);}

Booleane ed estrusioni

Potete generare nuove forme combinando le primitive con gli operatori booleani di unione, differenza, intersezione. Per “fondere” un cubo e una sfera utilizzate union() in questo modo: union() {cube(10); sphere(d=10, $fn=100);} union() fonderà le due primitive che gli saranno fornite come argomenti (cioè elencate tra le due parentesi graffe). Usate difference() per sottrarre una primitiva all’altra. Quando utilizzate quest’operatore, l’ordine in cui elencate gli oggetti è importante, infatti sarà sempre il secondo oggetto ad essere sottratto al primo.
difference() {cube(10); sphere(d=10, $fn=100);}
L’intersezione si realizza con intersection() e lascia intatte solo le parti comuni ai due oggetti.
intersection() {cube(10); sphere(d=10, $fn=100);}
Un altro sistema potente per creare nuovi “volumi” è offerto dagli operatori di estrusione. Potete tracciare una forma piana e poi estruderla lungo una qualsiasi direzione, per la lunghezza che desiderate, anche applicando rotazioni. L’estrusione più semplice che potete applicare è di tipo lineare e richiede solo la lughezza di estrusione (height): linear_extrude(height = 10) square(r = 1);
In questo modo produrrete un parallelepipedo. Ed ecco per esempio come potete generare un’elica: linear_extrude(height = 10, center = true, convexity = 10, twist = -500) translate([2, 0, 0]) circle(r = 1);

Le variabili

Openscad_Forme_4Iniziate un nuovo disegno oppure ripulite il pannello dell’editor e ricopiate le seguenti istruzioni:lato = 5; cube([lato,lato,lato]); Scrivete ogni istruzione su una riga e non dimenticatevi di aggiungere sempre il “punto e virgola” finale. Premete F5 per aggiornare la Preview a far apparire un semplice cubo. Non sembra che ci sia nulla di speciale, anche se c’è una differenza fondamentale: questa volta avete reso parametrico il disegno, utilizzando una variabile che avete chiamato “lato”. Una variabile è una specie di cassettino nella memoria del vostro computer in cui è memorizzato un dato. Per i “programmi” di OpenSCAD le variabili contengono dei numeri con o senza virgola. Ogni variabile ha un nome proprio, che sceglierete voi, per poterla riconoscere. Per i nomi di solito si usano dei brevi testi, senza spazi. Il nome di una variabile può essere scritto in minuscolo, maiuscolo, può contenere anche numeri e alcuni caratteri speciali (esclusi gli operatori matematici +, -, *, /...). Nomi validi per delle variabili sono: “lato”, “altez za”, “diag1”, “diamet r o _12”. Create una variabile semplicemente scrivendo il suo nome seguito dal simbolo “=”, dal valore che volete assegnare e dal punto e virgola. OpenSCAD semplifica molto l’uso delle variabili perché non controlla che tipo di dato utilizzerete: potete usare indifferentemente numeri interi, con la virgola, ma anche vettori o intervalli. Esaminando il semplice programma che avete scritto: nella prima riga avete definito una vari di nome “lato” che contiene il numero “5”. Nella riga successiva l’istruzione “cube” utilizza “lato” per impostare la dimensione del cubo. Quando OpenSCAD deve tracciare la primitiva “cube”, si accorge che deve recuperare il valore contenuto nel “cassettino” chiamato “lato” e quindi effettua la sostituzione. Quest’approccio è potente perché potete definire un disegno anche molto complesso sulla base di pochi parametri. Modificando i parametri otterrete un disegno su misura, per ogni occasione, nel giro di pochi istanti. Potete modificare le variabili combinandole tra di loro, moltiplicando, sommando o dividendo il loro valore. Aggiungendo dei “moltiplicatori” alle dimensioni fornite a “cube” traccerete un parallelepipedo (Per moltiplicare un numero si utilizza “*”): lato = 2; cube([lato,lato*2,lato*3]); Potete ripetere con semplicità delle azioni. Per disegnare cinque cubi in fila, potete scrivere cinque righe con i cubi e la loro posizione (con translate), oppure farvi furbi e usare un ciclo, cioè un meccanismo per ripetere un insieme di operazioni per un certo numero di volte. Ecco come fare: for(x=[0:5:50]) translate([x,0,0]) cube(2); Utilizzate “for” per creare un ciclo. L’operatore “for” utilizza un “range”, cioè un intervallo di numeri da cui pescherà i valori per la variabile x. Nell’esempio “for” assegnerà alla variabile “x” i valori presi nell’intervallo che va da 0 a 50, utilizzando un passo pari a 5. La “x” sarà poi applicata alla translate che creerà le copie del cubo. Se ricopiate il seguente script potrete generare una forma 3D multicolore con poche istruzioni: for(i=[0:36]) {for(j=[0:36]) {color( [0.5+sin(10*i)/2, 0.5+sin(10*j)/2, 0.5+sin(10*(i+j))/2] ) translate( [i, j, 0] ) cube( size = [1, 1, 11+10*cos(10*i)*sin(10*j)]);}}
Come potete osservare in questo script ci sono due cicli for che assegnano i valori. Le variabili fungono da memoria operativa di OpenScad e consentono di rendere parametrico il disegno alle variabili i e j. Per applicare l’effetto di un ciclo “for” a più istruzioni è necessario utilizzare una coppia di parentesi graffe. Nei range utilizzati per questo pittoresco esempio sono stati utilizzati solo due valori: i=[0:36] con questa scrittura si crea un intervallo di valori che va da 0 a 36 con passo unitario. Infatti la scrittura è equivalente a: i=[0:1:3 6 ]
Potete utilizzare un’ampia gamma di funzioni matematiche per generare combinazioni ed effetti complessi che in un CAD comune potrebbe essere difficile ottenere. Potete utilizzare funzioni trigonometriche come sin(), cos(), tan(), logaritmi o valori casuali. Oltre alle ripetizioni potete anche utilizzare delle condizioni così da disegnare delle parti solo in determinate condizioni.
Provate a inserire il seguente esempio: for(x=[0:5:50]) {translate ([x,0,0]) {if (x > 25) color(“blue”) cube(4); else cube(3);}}
Per controllare una condizione si utilizza “if”. Nello script un ciclo for disegna un cubo ogni 5 millimetri. Abbiamo introdotto una condizione per cui se il valore di x è maggiore di 25 (if (x > 25)), allora il cubo avrà il lato lungo quattro unità e sarà colorato di blu, altrimenti (else) il suo lato sarà pari a tre.

Creazione di funzioni

Quando i vostri progetti cresceranno in complessità, avrete sicuramente delle parti ripetute. In questi casi è buona norma creare moduli ripetibili che semplifichino la scrittura degli script. Immaginate di avere un particolare come una maniglia ripetuta in più parti di un progetto.
Per disegnare la maniglia potrebbero servire una decina d’istruzioni che saranno ovviamente ripetute in più punti del vostro lungo listato. Quando desidererete modificare la forma dovrete scorrere tutte le istruzioni cercando quelle relative alla maniglia per poi apportare le modifiche. Non è molto pratico. OpenSCAD offre due metodi per affrontare questo tipo di situazioni: funzioni e moduli. Per il caso della maniglia servirà un modulo, cioè un sistema per raggruppare delle istruzioni in un solo punto del listato. Il modulo ha un nome e può ricevere dei parametri.
La funzione è simile al modulo, ma può solo restituire dei valori numerici senza disegnare nulla: è una specie di operatore in grado di eseguire solo dei calcoli.
function raddoppia(x=1) = 2*x; cube(raddoppia(5));
Una funzione si riconosce perché inizia sempre con la parola “function” seguita dal nome con cui desiderate chiamarla, dai parametri racchiusi tra parentesi e da un segno di uguale con la formula che elaborerà il valore. Un modulo invece è definito dalla parola “module”, ha un nome, un elenco di parametri e un corpo delimitato da delle parentesi graffe in cui è possibile inserire nel suo “corpo”, delle operazioni di disegno.
module cubo(x=1) {cube(x);}; cubo(10);
Una volta definito un modulo o una funzione li potrete invocare come se fossero degli operatori o delle primitive di OpenSCAD.

Importazione, rendering ed esportazione dei file

Openscad_Forme_5Come ogni altro CAD il programma permette di importare file esterni da integrare nel proprio disegno. Potete quindi inserire oggetti in formato STL, OFF e DXF che sono formati aperti o di interscambio. A seconda del formato di file è necessario utilizzare differenti comandi: STL, OFF e DXF si importano con il comando import; CSG si possono importare con include oppure come un file nativo OpenSCAD; PNG si importano con surface; SVG e AMF sarà possibile importarli nelle prossime versioni. La cosa più semplice da fare, soprattutto lavorando nel campo della stampa 3D è di importare dei file in formato STL. È sufficiente utilizzare il comando import specificando il percorso del file. Per evitare problemi, indicate il percorso completo del file. Import richiede un secondo parametro, chiamato convexity che è utilizzato solo per realizzare la preview del modello importato. Oltre ai formati provenienti dai CAD è possibile importare anche file “raster”, cioè immagini piane con il comando surface che interpreterà il file come una specie di mappa, dove il valore di intensità è trasformato in “altezza”. Quando avrete ultimato il vostro disegno, prima di esportarlo sarà necessario lanciare un rendering premendo F6 o utilizzando la voce di menu. Il rendering provvederà a generare un modello dettagliato e se il vostro disegno è molto complesso, sarà necessario attendere parecchi minuti. Al termine dell’operazione potrete esportare il progetto in formato STL per poter stamparlo in 3D.

Se vuoi rimanere sempre informato sulle novità della stampa 3D iscriviti alla newsletter gratuita.
CONDIVIDI

LASCIA UN COMMENTO

Please enter your comment!
Please enter your name here