In questo post intendo mostrare come ho portato avanti il lavoro di parametrizzazione del parapetto rigato. Rispetto a post precedente (http://design.rootiers.it/node/566), ho apportato alcune modifiche, partendo dalla seconda delle due opzioni: innanzitutto sono stati inseriti dei montanti verticali, presenti in ogni intersezione in pianta tra la curva del corrimano e l'attacco lineare a terra. Inoltre, per ridurre lo spazio tra gli elementi verticali (per problemi normativi) senza restringere troppo la larghezza delle fasce ne ho cambiato il "pattern": adesso sia l'elemento superiore che l'elemento inferiore alternano attacchi lungo l'asse a attacchi ortogonali all'asse.le superfici partono da un attacco disposto in una direzione e arrivano a un attacco disposto nell'altra.
Il modello è finalizzato a produrre i disegni da inserire nella macchina a controllo numerico per effettuare un plastico in scala 1:5, quindi le fascie non si attaccano ad elementi metallici.
Il lavoro è stato portato avanti usando Grasshopper, un plugin gratuito di Rhinoceros. Per capire il funzionamento del programma mi è stato molto utile un libro digitale freeware di ZUBIN KHABAZI, GENERATIVE ALGORITMS using GRASSHOPPER, che tra l'altro tratta anche di applicazioni architettoniche.
La strada che ho seguito è indubbiamente lunga, sia perchè sicuramente ci sono modi molto piu rapidi di fare le stesse cose, ma anche perchè ho provato a fare un modello il più generico possibile, in modo da poter modificare i diversi parametri.
Grasshopper funziona un pò diversamente da Revit, la sua interfaccia è formata da uno spazio infinito al cui interno inserire dei componenti, che hanno l'aspetto di rettangoli grigi. I componenti possono essere legati a geometrie disegnate o meno, e possono essere dei più diversi tipi (trasformazioni, elementi matematici, curve, ecc); hanno tutti degli imput (i bottoncini a sinistra in cui arrivano i cavi) e degli output (i bottoncini a destra da cui partono); i tipi di imput e di output variano da componente a componente. Collegando tra di loro i componenti si trasforma la geometria finale.
Gli unici elementi disegnati manualmente in Rhino sono gli assi del corrimano e dell'atacco a terra. Ho incominciato disegnandoli entrambi sullo stesso piano. Da Grasshopper ho inserito due curve (params>geometry>curve) e gli ho detto di collegarle ognuna a una curva da me disegnata (tasto destro sul componente curva>set one curve). Adesso le curve fanno parte di Grasshopper, e posso cambiare modificarale dal programma a mio piacimento.
In ogni pezzo di parapetto tra montante e montante lo spazio tra le fasce varierà, lasciando invariata la lunghezza dell'attacco cambierà un pò la distanza tra attacco e attacco, assorbendo le diverse e casuali lunghezze della curva. E' quindi impotante dividere la curva in pezzi diversi in modo che in ogni pezzo venga trovata la distanza giusta.
Con il componente Curve/curve (intersect>Physical>Curve/curve) trovo le intersezioni tra le due curve, quindi sposto verticalmente la curve e i punti di intersezione trovati. Lo faccio con il comando move (XForm> Euclidean move), e usando come vettore il vettore z (vector>Unit z); l'intensità dello spostamento è regolata da uno slider, cioè un elemento che può essere regolato manualmente tra due valori numerici definiti dall'utente.
A questo punto devo trovare la "zona di influenza" dei montanti, cioè i punti a partire dai quali posso incominciare a lavorare sui singoli pezzi di parapetto. Lo faccio spostando i punti lungo la curva attravero il vettore tangente. In questo caso potrei anche spostarli tutti dando la stessa direzione, ma nella curva del corrimano no, questo modo e valido anche per la curva di sopra. Il vettore tangente nelle intersezioni lo trovo col componente Evaluate Curve (Curve>Analisis>Evaluate Curve), e moltiplicato per una distanza regolata da uno slider mi serve come vettore per lo spostamento (move) dei punti.Ho aggiunto uno slider con valore -1 in modo da spostare il secondo punto della stessa quantità ma in direzione opposta; infine ho unito i punti spostati collegandoli al componente point (Params>Geometry>Point)
A questo punto ho avuto problemi a suddividere la curva nei punti indicati; riesco a suddividere una curva solo rispetto ad altre curve. Quindi ho spostato di poco i punti da un lato e dall'altro e li ho uniti con il componente Line (Curve>primitive>line); poi ho intersecato la linea iniziale con le altre piccole linee. Adesso basterebbe dividere la curva nei parametri (tA) dell'intersezione. C'è però un problema di tipologia di dati, riguardante i cosidetti "data trees"; mentre le informazioni sulla curva sono contenute in un solo "pacchetto" di dati l'intersezione è divisa in diversi pacchetti, come si vede nei diagrammi circolari dell'immagine; per accedere ai diagrammi di un componente bisogna attaccarlo a Param Viewer(Params>Special>Param Viewer)
Grasshopper spesso deve avere gli input nello stesso numero di pacchetti per poter far funzionare i componenti. Uso quindi Flattern tree (Sets>Tree>Flatter Tree), che mi riporta a un solo pacchetto, o ramo, le informzioni dell'intersezione. A questo punto posso procedere con la divisione della curva (Curve>Division>Shatter)
Il risultato della divisione però comprende i pezzi tra i montanti ma anche i pezzi corrispondenti ai montanti stessi; per eliminarli uso come criterio quello della lunghezza, cioè di tutti i pezzi divisi ne seleziono solamente quelli più grandi di una quantità da me definita. Lo faccio usando il componente Cull Pattern (Sets>Sequence>Cull Pattern). Come lista di elementi da rimuovere uso i pezzi di linea suddivisi, e come pattern di selezione uso i pezzi piu grandi del doppio dello spostamento del punto piu 1(Larger Than(Math>Operators>Larger Than))
Procedo adesso a definire le linee parallele all'asse.
Devo dividere la curva in numero di elementi che mi permetta di avere almeno 19 cm tra elemento e elemento. Il numero di elementi è definito dall'equazione
=(lunghezza della curva /21) - 0.5 (affinchè il numero venga arrotondato al intero più piccolo). La lunghezza dei segmenti la ottengo con Lenght (Curve>Analisis>Lenght).
Adesso devo spostare i punti da una parte e dall'altra in modo da inquadrare i singoli attacchi che ho stabilito essere di 15 cm. trovo l'intensità dello spostamento con la seguente formula
=(Lunghezza delle curve/n° di volte che sono state divise - 15cm (lunghezza dell'attacco))/2.
La direzione è data dall'output T del componente Divide. Questa volta devo moltiplicare l'output T, che ha diverse ramificazioni col risultato dell'equazione, che ne ha soltanto una. Devo fare l'operazione opposta a quella di Flattern Tree, cioè Graft tree (Sets>Tree>Graft Tree), in modo da poter ramificare i risultati dell'equazione.
Ora devo ridividere i pezzi di curva in maniera da rimanere soltanto con gli attacchi; procedo in maniera simile alla prima divisione: sposto i punti in modo da creare piccole linee che interseco con i pezzi tra montante e montante, e uso per dividere i pezzi stessi; poi escludo i pezzi più piccoli indesiderati con una selezione in base alla lunghezza
Devo adesso disegnare gli attacchi perpendicolari alla curva. Riprendo quindi dal componente cull, ovvero da i pezzi tra montante e montante, che uso come curva base per un offset (Curve>Util>Offset). Uso la stessa formula usata in precedenza per dividere i due pezzi di curva, e unisco i punti della divisione tra di loro
A questo punto ripeto lo stesso procedimento sulla curva del corrimano con alcune accortezze, tra cui quella di dividere i pezzi di curva non secondo equazioni ma rispetto al numero di volte in cui è stata divisa la linea dell'attacco a terra e quella di rendere rettilinei gli attacchi lungo l'asse del corrimano. Abbiamo quindi pronte tutte le linee che useremo come base per le superfici rigate.
Quindi basterà creare superfici incrociando i gruppi di linee. Il tipo di superficie più idoneo è Edge surface(Surface>Freeform>Edge Surface), che a partire da sole 2 linee crea una superficie. Attribuendo le linee c'è però un problema: le linee di sopra si accoppiano male con le linee di sotto, cioè la prima di sopra si accoppia con l'ultima e viceversa; per risolvere il problema c'e bisogno del componente Reverse List (Sets>List>Reverse List) in grado di invertire l'ordine in cui si presentano gli elementi.
Infine ho fatto gli elementi rimanenti (corrimano, montanti, ecc) a partire da alcuni punti caratteristici, spostandoli per creare linee da estrudere successivamente
Adesso per fare un parapetto mi basta selezionare qualsiasi coppia di curve (dalle curve iniziali tasto destro>set one curve) e verranno calcolati automaticamente le posizioni dei montanti e la giusta distanza tra le fasce.
Nel prossimo post scriverò su come preparare i disegni da mandare alla macchina a controllo numerico, anche se a questo punto non credo che riuscirò ad avere il plastico pronto per l'esame