Tu sei qui

Revit, Python e Componente: uno strumento per la progettazione di elementi parametrici

Nonostante l'apparente pretenziosità del titolo di questo post, l'intenzione è proprio quella di focalizzare l'attenzione sull'incompiutezza del gesto compositivo, sul fatto che esista uno strumento che possa aiutare l'iterazione per la realizzazione di oggetti complessi: di fatto questi oggetti però non sono stati realizzati.

I rendering qui mostrati non sono nient'altro che un piccolo assaggio e una prova della bontà dello stumento e delle sue effettive applicazioni: a partire dal modulo così sudatamente perfezionato e ottimizzato durante i precedenti post si è arrivata alla produzione di un semplice programma il quale attraverso la plugin gratuita RevitPythonShell consente una varietà pressocchè infinita oltre che di un dato oggetto di design, architettonico (un po' alla maniera delle teiere di Greg Lynn) ha la potenzialità intrinseca di poter generare una gamma, non infinita, ma comunque vasta di oggetti.
Il tutto credo sia avvalorato dal fatto tutto ciò si fonda un'unità base costituita da 2 cerchi raccordati da due archi di circonferenza.

3 parametri variano il tutto come osservato nei precedenti post: raggio delle circonferenze, concavità/convessità inferiore e superiore.

Cos'è cambiato dall'ultimo post? Anzitutto il programma è stato portato ad una fase avanzata, non definitiva (in ambito informatico niente lo è) ma sicuramente utilizzabile come strumento (e non come utensile).

Cosa lo rende utilizzabile? A parte l'ostica interfaccia Python e il linguaggio stesso che non si presta a un facile utilizzo dagli utenti rispetto altri C-based o Java-based, l'intento principale è stato quello di fornire quanti più aiuti per la customizzazione del programma da terzi, un po' come accade per la filosofia dell'open-source. Quindi:

  1. pulizia nel codice
  2. commenti
  3. librerie di funzioni pronte all'uso
  4. messa in evidenza delle variabili modificabili nell'immediato dall'utente, in questo caso i parametri per stabilire le misure delle sezioni di cui gli arredi sono composti

Cosa fa? Dando un'occhiata al codice si osserverà nella prima parte la presenza di una serie di parametri. Bene questi sono proprio i parametri che stabiliscono la forma dell'oggetto finale. La seguente tabella aiuterà meglio la loro comprensione:

NB le variabili numeriche a causa di Revit che considera di base le misure in scala anglosassone sono moltiplicati per la variabile imposta nell'InitScript di cui si è già parlato negli altri post

parametri descrizione

widthValue
es. widthValue=2*cm

spessore delle sezioni e di conseguenza definisce lo spazio tra le stesse, nonchè degli spessori interposti
topH_range
es. topH_range=[10.0*cm,50.0*cm]
definisce l'array che stabilisce la varietà nella parametrizzazione dell'altezza della curvatura di raccordo superiore all'interno del range [minValore,maxValore]
bottomH_range=[10.0*cm,50.0*cm]
es. bottomH_range=[10.0*cm,50.0*cm]
analogamente offre l'array che stabilisce la varietà nella parametrizzazione della curvatura di raccordo inferiore del range [minValore,maxValore]
radius_range
es. radius_range=[10.0*cm,50.0*cm]
 
definisce l'array che stabilisce la varietà nella parametrizzazione del raggio delle circonferenze all'estremità all'interno del range [minValore,maxValore]

nPanels
es. nPanels=1

definisce la quantità di divisioni della "parete" (lo pongo tra virgolette perchè il programma semplicemente modificando ocultamente i paraemetri, come già detto prima, offre una vasta gamma di possibilità)
wallLenght
es. wallLenght=100*cm
 
lunghezza della "parete"
pannelHeight
es. pannelHeight=100*cm
altezza della parete
percentage
es. percentage=0.8
questo valore è molto interessante ed è forse quello che rafforza ancora di più la parametrizzazione dell'oggetto. consente di aprire una percentuale di superficie (casuale) sul pannello eliminado listelli sostituendoli con spessori così da garantire la solidità del tutto. il valore proprio perchè percentuale varia tra 0-1
fullShim
fullShim=True oppure fullShim=false
questo parametro consente al programma di stabilire che lo spessore che copre gli spazi vuoti deve essere unico (fullShim=True) oppure formato da una serie di spessori di altezza uguale alle sezioni (fullShim=false)

beamHeight
es. beamHeight=30*cm

determina l'ipotesi di una trave di colmo al quale appendere il pannello. così facendo prolunga i cavi che tengono saldi i pezzi  di un offset che tiene conto della trave e la supera

Cosa fa variare il tutto? Anticipo una eventuale indagine nel programma (che per i più avvezzi alla programmazione può occupare al massimo 5min) puntando il dito sulla funzione (da me realizzata)  createComponenent, che rappresenta il core di questo piccolo applicativo.

In essa i 3 parametri di cui sopra, sono variati all'interno di un algoritmo che invia alle funzioni di una libreria di distribuzioni nel piano, anch'essa creata ad hoc, la percentuale del percorso svolto per arrivare dal punto più basso del componente fino a quello più alto. Essa per dirla in termini matematica rappresenta la variabile indipendente x, il valore di uscita chiaramente quella dipedente y. I valori che fanno capo a queste funzioni non daranno mai errore perchè studiati per rimanere all'interno degli intervalli definiti: tuttavia l'utilizzatore può cambiare a sua discrezione le formule per topH_value, bottomH_value e radius_value.

Come è avvenuta la scelta dei parametri?  La scelta è dipesa al 70% dal fatto che Python non elabori (o almeno io non ne sono stato in grado) parametri Type quindi alcuni di quelli che avrei preferito lasciare come tali sono stato costretto a convertirli.
Lascio comunque a discrezione della Conceptual Mass, che fa da genitore, il compito di gestire globalmente le misure relative al raggio del profilo di collegamento, fori e tolleranze ed infine il raggio degli spessori.

Tutto qui? Rimangono alcune considerazione sull'uso dei materiali. Mi sembra ovvio che non è possibile fare una casistica generale data l'enormità di variazione sul tema possibili; farò alcune osservazioni, quelle sulle quali ho riflettuto soprattutto come motivazione e sprono allo sviluppo di questo programma: l'iter processuale necessità di un rimando alla fattibilità altrimenti si rischia di compiere un gesto meramente astratto, privo di concretezza.
Sicuramente la scelta cade su materie plastiche leggere per superfici molto grandi per larghezza e lunghezza (come il tavolo in alto a sinistra) e queste possono essere ricavate per stampo o per ritaglio da lastra.
Scendendo di dimensione per arrivare a quella di listelli per ripiani o per brise-soleil i materiali utilizzabili potrebbero variare da nuovamente plastiche, fino pannelli tamburati (con la sagoma esterna offsett della particolare sezione). Era stato suggerito anche l'utilizzo di pannelli Ecomat© già utilizzato per la casa SolarDecathlon. Per la sue caratteristiche si può visitare la pagina http://www.ecoplan.it/ecomat02.html

Gli spessori per contrasto sono immaginati in bambù, materiale resistente ed ecologico.


L'iter progettuale (dell'applicativo) ha portato ad una comprensione dell'effettiva utilità della parametrizzazione non come puro gesto ma come utile strumento d'indagine geometrica e costruttiva. È emblematico, a mio avviso, il passaggio dalla scelta di progettare una seduta (per quanto parametrica) ad un qualcosa di totalmente generale e onni(quasi)comprensivo. La scelta è avvenuta anche traendo suggestioni dal progetto di SHoP Architects per il Virginia Atlantic Club House.
La consapevolezza di tale scelta, e quindi di procedere in una o l'altra direzione, deriva fondamentalmente dai vari ripensamenti nel realizzare tale programma: si è mirato abbandonando l'iniziale obiettivo per un processo programmatico, lineare e semplice.

Technology: 
AllegatoDimensione
Plain text icon functions.txt1.38 KB
Plain text icon programma.txt7.46 KB