lunedì, novembre 04, 2013

Linee di riferimento - Parametrizzare l'angolo di un solido



Nell'editor delle famiglie possiamo utilizzare le linee di riferimento per vincolare le linee che costituiscono il profilo di un solido di estrusione ad esempio per potere controllare l'angolo tra queste linee e dei piani di riferimento.
Il concetto chiave è che la rotazione viene controllata da un parametro angolo su un particolare oggetto, la linea di riferimento, che viene individuata dall'intersezione di due piani.
Le estremità delle linee di riferimento si possono vincolare alle intersezioni fra i piani utilizzando il comando allinea e successivamente bloccando il lucchetto che compare per stabilire il vincolo.
Per tracciare la linea di riferimento è meglio partire da un punto qualsiasi e terminare in corrispondenza dell'intersezione fra i piani di riferimento per favorire le quote automatiche (di default sono nascoste ma sono alla base della relazionalità geometrica di Revit).
Per posizionare la quota angolare invece è meglio partire dal piano di riferimento che resterà fisso e poi cliccare sulla linea di riferimento.
Quando si entra in modalità di tracciamento si deve fare attenzione a selezionare per ciascuna linea il piano di lavoro appropriato: aiutandosi con il tasto TAB e deselezionando dalla toolbar delle opzioni il concatena, si può realizzare il tipo di relazione desiderata.
Questo tipo di procedura si può seguire anche per i componenti di dettaglio.

giovedì, ottobre 31, 2013

Automatic Floor Sketch


Partendo da una selezione dei locali traccia i pavimenti di finitura corrispondenti. Considera solo gli elementi che delimitano il locale.

mercoledì, ottobre 23, 2013

AEC You and Me

Blog interesessantissimo di Julien Benoit, che ho avuto il piacere di conoscere al Revit Technology Conference di Delft.
Una persona squisita, intelligente e appassionata del proprio lavoro come si può facilmente capire dai primi post che sta pubblicando in questi giorni.
Julien è uno dei moderatori di Revitforum.org, collaboratora per uno dei maggiori general contractor in Francia, Bouygues Construction.
Sta cominciando a condividere i progressi che sta facendo nell'esplorazione delle potenzialità di Dynamo nel lavoro di tutti i giorni.
Da seguire.

martedì, ottobre 22, 2013

Text Type Replacement - Codice Sorgente

Visto l'interesse al post precedente pubblico il codice sorgente per la versione 2012




giovedì, ottobre 17, 2013

View Depth Override - 3D


Questa volta sto lavorando sulle viste 3D in prospettiva degli esterni, come si vede dal video l'algoritmo non è ancora perfetto a causa degli errori introdotti dall'angolo tra il punto di vista e il modello.
Ho trovato però un modo più elegante ed efficiente di eseguire i calcoli anche per la macro delle viste 2D.
La fase successiva interesserà le viste 3D degli interni, e quando finalmente sarò pronto per l'Addin si potrà pensare anche all'aggiornamento automatico delle viste dove viene applicato il comando.

Analytical Tracer - Codice Sorgente

Questo il codice sorgente per la versione 2014, funziona solo per elementi quali pilastri strutturali e travi lineari.
Nella versione 2012 purtroppo non sono riuscito a capire come mai non riuscisse a tracciare correttamente le aste analitiche dei pilastri.
Si potrebbero anche differenziare i tipi di linea per travi e pilastri ma occorre differenziarli poi anche nella tabella dell'esportazione in DWG.

Qui si può scaricare il file sorgente:




If you are happy with my code you can show me some gratitude paying what you want on PayPal:

puntorevit@gmail.com

martedì, ottobre 15, 2013

Analytical Tracer


Con questa macro si possono esportare dei modelli unifilari per elementi strutturali rettilinei che altrimenti risulterebbero divisi in 3 segmenti per ciascuna asta del modello analitico.
Ho fatto una prova veloce con la 2014 si accettano suggerimenti :)

lunedì, ottobre 14, 2013

View Depth Override 2014 - Codice Sorgente

A questo link potete trovare il codice per la versione 2014, in questo caso si possono sostituire graficamente anche i motivi di superficie degli oggetti ma non è possibile agire sulle ombre.



TextNote Type Replacement


Ho dovuto scrivere questa piccola macro per controllare che i testi con lo stesso contenuto inseriti su più tavole avessero il tipo associato corretto.
Morale: non usate i testi!
PLEASE DON'T USE TEXTNOTES!!!

mercoledì, ottobre 09, 2013

View Depth Override - Codice Sorgente


Ecco il codice sorgente per il View Depth Override. Per quelli che non conoscono le API ancora un po' di pazienza e pubblicherò l'add-in per il comando, quella sopra sarà l'icona che pensavo di utilizzare, rende l'idea?

Tanto per cominciare è scritto in C#, testato su Revit Architecture 2012, ecco gli using statements da inserire all'inizio:

using System;
using System.Collections.Generic;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Linq;

Ed ecco il codice vero e proprio, ho inserito dei commenti in inglese per renderlo comprensibile a più persone, nel caso non fosse chiaro chiedete e proverò a spiegarmi meglio:

private XYZ MaxVertex2(XYZ a, XYZ b)
        {
            //Given two points determines the maximum of the Bounding Box that encloses them
            double X = a.X;
            double Y = a.Y;
            double Z = a.Z;
            if (Math.Round(b.X, 5) > X)
                X = b.X;
            if (Math.Round(b.Y, 5) > Y)
                Y = b.Y;
            if (Math.Round(b.Z, 5) > Z)
                Z = b.Z;
            XYZ max = new XYZ(X, Y, Z);
            return max;
        }
        private XYZ MinVertex2(XYZ a, XYZ b)
        {
            //Given two points determines the minimum of the Bounding Box that encloses them
            double X = a.X;
            double Y = a.Y;
            double Z = a.Z;
            if (Math.Round(b.X, 5) < X)
                X = b.X;
            if (Math.Round(b.Y, 5) < Y)
                Y = b.Y;
            if (Math.Round(b.Z, 5) < Z)
                Z = b.Z;
            XYZ min = new XYZ(X, Y, Z);
            return min;
        }
        private ICollection Integral(XYZ min1, XYZ max1, XYZ min2, XYZ max2)
        {
            //If the view is not parrallel to X or Y axis in Global Coordinates,
            //the selecting process is done using an integral approach
            //each segment is subdivided into a high number of subdivisions (200)
            //and smaller bounding boxes are used to filter the objects
            //that's the reason why with a non-parallel view the command is slower
            //This is the list of ElementId created and immediatly cleared
            ICollection ids = new FilteredElementCollector(this.ActiveUIDocument.Document)
            .WhereElementIsNotElementType()
            .ToElementIds();
            ids.Clear();
            foreach (Document doc in this.Application.Documents)
            {
                int subdivisions = 200;
                //Here determines the minimum and the maximum point for the segment based on the four vertices
                //that have been passed from the other function
                XYZ a = MinVertex2(min1, max1);
                XYZ a1 = a;
                XYZ b = MaxVertex2(min1, max1);
                XYZ c = MinVertex2(min2, max2);
                XYZ d = MaxVertex2(min2, max2);
                XYZ increment = (d - b) / subdivisions;
                for (int i = 0; i < subdivisions; i++)
                {
                    //This is tricky: sometimes if the view is perfectly parallel something
                    //about the vertices goes wrong (I guess there's a small tolerance)
                    //Anyway to reduce the amount of calculations if the coordinates are the same
                    //at the fifth decimal digit I assumed the coordinates to be equal
                    //I know it isn't perfect but it worked for me
                    if (Math.Round(a.X, 5) == Math.Round(b.X, 5) || Math.Round(a.Y, 5) == Math.Round(b.Y, 5))
                    {
                        i = subdivisions + 1;
                        a = MinVertex2(a1, d);
                        b = MaxVertex2(a1, d);
                    }
                    Outline ol = new Outline(a, b);
                    if (ol.IsEmpty == false)
                    {
                        //Here comes the filtering part where I tried to avoid all kinds of objects
                        //that are not useful for this task because they can't be overridden
                        //such as Element Types or Sketches of Floors/Roofs/ ceilings and so on
                        BoundingBoxIntersectsFilter BBIIF = new BoundingBoxIntersectsFilter(ol);
                        IEnumerable elems = new FilteredElementCollector(doc)
                        .WherePasses(BBIIF)
                        .WhereElementIsNotElementType()
                        .WhereElementIsViewIndependent()
                        .Cast()
                        .Where(q => q.Category != null && q.Category.HasMaterialQuantities);
                        if (elems.Count() > 0)
                        {
                            foreach (Element e in elems)
                            {
                                ids.Add(e.Id);
                            }
                        }
                    }
                    else
                    {
                        a = a + increment;
                        b = b + increment;
                    }
                    a = a + increment;
                    b = b + increment;
                }
            }
            return ids;
        }
        private ICollection IntegralCollection(View view, int i)
        {
            //Here is where the coordinates of the Bounding Box of the view are calculated
            //I don't like that this calculations are repeted each time this function is called (one for each segment)
            //it could be done more efficiently and for sure more clearly using the Transform...
            //but I didn't even know what that was when I recorded the video
            //the double scale is set to 1 because at first I started from the UV Bounding Box,
            //which contains also annotations and not just the model categories
            //I then used the Bounding BOX XYZ and reused the code I wrote before
            XYZ CurrentViewOrigin = view.Origin;
            double scale = 1;
            XYZ VRight = view.RightDirection;
            XYZ VUp = view.UpDirection;
            XYZ Vdir = view.ViewDirection;
            XYZ Vmin = view.CropBox.Min;
            XYZ Vmax = view.CropBox.Max;
            //I used letters for the Vertices of the main Bounding Box
            //rather then numbers for the inner box that defines the middle segment
            //I know this part looks messy but it was good to refresh some algebra concepts :)
            //here is were I should use the Transform
            XYZ Va = new XYZ(CurrentViewOrigin.X + scale * (Vmin.X * VRight.X + Vmin.Y * VUp.X) + Vmax.Z * Vdir.X, CurrentViewOrigin.Y + scale * (Vmin.X * VRight.Y + Vmin.Y * VUp.Y) + Vmax.Z * Vdir.Y, CurrentViewOrigin.Z + scale * (Vmin.X * VRight.Z + Vmin.Y * VUp.Z) + Vmax.Z * Vdir.Z);
            XYZ Vb = new XYZ(CurrentViewOrigin.X + scale * (Vmin.X * VRight.X + Vmax.Y * VUp.X) + Vmax.Z * Vdir.X, CurrentViewOrigin.Y + scale * (Vmin.X * VRight.Y + Vmax.Y * VUp.Y) + Vmax.Z * Vdir.Y, CurrentViewOrigin.Z + scale * (Vmin.X * VRight.Z + Vmax.Y * VUp.Z) + Vmax.Z * Vdir.Z);
            XYZ Vc = new XYZ(CurrentViewOrigin.X + scale * (Vmax.X * VRight.X + Vmax.Y * VUp.X) + Vmax.Z * Vdir.X, CurrentViewOrigin.Y + scale * (Vmax.X * VRight.Y + Vmax.Y * VUp.Y) + Vmax.Z * Vdir.Y, CurrentViewOrigin.Z + scale * (Vmax.X * VRight.Z + Vmax.Y * VUp.Z) + Vmax.Z * Vdir.Z);
            XYZ Vd = new XYZ(CurrentViewOrigin.X + scale * (Vmax.X * VRight.X + Vmin.Y * VUp.X) + Vmax.Z * Vdir.X, CurrentViewOrigin.Y + scale * (Vmax.X * VRight.Y + Vmin.Y * VUp.Y) + Vmax.Z * Vdir.Y, CurrentViewOrigin.Z + scale * (Vmax.X * VRight.Z + Vmin.Y * VUp.Z) + Vmax.Z * Vdir.Z);
            XYZ Ve = new XYZ(CurrentViewOrigin.X + scale * (Vmin.X * VRight.X + Vmin.Y * VUp.X) + Vmin.Z * Vdir.X, CurrentViewOrigin.Y + scale * (Vmin.X * VRight.Y + Vmin.Y * VUp.Y) + Vmin.Z * Vdir.Y, CurrentViewOrigin.Z + scale * (Vmin.X * VRight.Z + Vmin.Y * VUp.Z) + Vmin.Z * Vdir.Z);
            XYZ Vf = new XYZ(CurrentViewOrigin.X + scale * (Vmin.X * VRight.X + Vmax.Y * VUp.X) + Vmin.Z * Vdir.X, CurrentViewOrigin.Y + scale * (Vmin.X * VRight.Y + Vmax.Y * VUp.Y) + Vmin.Z * Vdir.Y, CurrentViewOrigin.Z + scale * (Vmin.X * VRight.Z + Vmax.Y * VUp.Z) + Vmin.Z * Vdir.Z);
            XYZ Vg = new XYZ(CurrentViewOrigin.X + scale * (Vmax.X * VRight.X + Vmax.Y * VUp.X) + Vmin.Z * Vdir.X, CurrentViewOrigin.Y + scale * (Vmax.X * VRight.Y + Vmax.Y * VUp.Y) + Vmin.Z * Vdir.Y, CurrentViewOrigin.Z + scale * (Vmax.X * VRight.Z + Vmax.Y * VUp.Z) + Vmin.Z * Vdir.Z);
            XYZ Vh = new XYZ(CurrentViewOrigin.X + scale * (Vmax.X * VRight.X + Vmin.Y * VUp.X) + Vmin.Z * Vdir.X, CurrentViewOrigin.Y + scale * (Vmax.X * VRight.Y + Vmin.Y * VUp.Y) + Vmin.Z * Vdir.Y, CurrentViewOrigin.Z + scale * (Vmax.X * VRight.Z + Vmin.Y * VUp.Z) + Vmin.Z * Vdir.Z);
            XYZ V1 = Ve + (Va - Ve) * 2 / 3;
            XYZ V2 = Vf + (Vb - Vf) * 2 / 3;
            XYZ V3 = Vg + (Vc - Vg) * 2 / 3;
            XYZ V4 = Vh + (Vd - Vh) * 2 / 3;
            XYZ V5 = Ve + (Va - Ve) / 3;
            XYZ V6 = Vf + (Vb - Vf) / 3;
            XYZ V7 = Vg + (Vc - Vg) / 3;
            XYZ V8 = Vh + (Vd - Vh) / 3;
            //This function returns a list of ElementId to be overridden depending on which one of
            //the three segments the objects fall in
            ICollection list = new FilteredElementCollector(ActiveUIDocument.Document)
            .WhereElementIsNotElementType()
            .ToElementIds();
            list.Clear();
            if (i == 0)
            {
                list = Integral(Va, V2, Vd, V3);
            }
            else
            {
                if (i == 1)
                {
                    list = Integral(V1, Vf, V4, Vg);
                }
                else
                {
                    list = Integral(V5, Vf, V8, Vg);
                }
            }

            return list;
        }
        public void ViewDepthOverride()
        {
            //known issues: doesn't work with linked files and 3D Views
            UIDocument uidoc = this.ActiveUIDocument;
            Document doc = uidoc.Document;
            //Creates the lists of ElementId to pass to the Projection Color Override by Element
            //those are just empty container at the moment
            ICollection ids0 = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).ToElementIds();
            ICollection ids1 = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).ToElementIds();
            ICollection ids2 = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).ToElementIds();
            ids0.Clear();
            ids1.Clear();
            ids2.Clear();
            View CurrentView = doc.ActiveView;
            //It works fine for 2D views, building sections and elevations for example
            //it should work also with floor plans and even tilted Detail Views
            //but it wasn't my goal when I started
            //won't work for a 3D View
            int clip = CurrentView.get_Parameter(BuiltInParameter.VIEWER_BOUND_FAR_CLIPPING).AsInteger();
            //If the far clipping is not active the default depth is 10 feet and won't work correctly
            if (clip == 0)
            {
                TaskDialog.Show("View Depth Override", "In order to use this macro far clipping must be activated.");
            }
            else
            {
                //If the far clipping is active then the view depth can be subdivided into 3 segments:
                //foreground (0)
                //middle (1)
                //background (2)
                ids0 = IntegralCollection(CurrentView, 0);
                ids1 = IntegralCollection(CurrentView, 1);
                ids2 = IntegralCollection(CurrentView, 2);
                //Just a check to handle some common errors, for instance not even one
                //ElementId was found in the foreground view interval
                if (ids0.Count == 0)
                {
                    TaskDialog.Show("View Depth Override", "Something went wrong in the closer segment.\n\nPlease adjust the view depth to include some objects.");
                    ElementId e = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls).FirstElement().Id;
                    ids0.Add(e);
                    ids1.Add(e);
                    ids2.Add(e);
                }
                else
                {
                    //Again just a check to handle some common errors, in this case not even one
                    //ElementId was found in the background view interval
                    //because the view depth is too much rather then just enough to enclos
                    //the objects in the model
                    if (ids2.Count == 0)
                    {
                        TaskDialog.Show("View Depth Override", "Something went wrong in the farther segment to be overridden in Grey 192.\n\nPlease check that the view depth in the current view is just enough to include the objects you need.");
                        ElementId e = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls).FirstElement().Id;
                        ids2.Add(e);
                        ids1.Add(e);
                    }
                }
            }
            //Begins the transaction to override the elements
            using (Transaction t = new Transaction(doc, "View Depth Override"))
            {
                t.Start();
                while (ids0.Count > 0)
                {
                    //Stores the color for the foreground
                    Color Color0 = CurrentView.get_ProjColorOverrideByElement(ids0);
                    if (ids1.Count != 0)
                    {
                        //Overrides the middle segment
                        CurrentView.set_ProjColorOverrideByElement(ids1, new Color((byte)128, (byte)128, (byte)128));
                    }
                    else
                    {
                        //Just a precaution, not sure it is really necessary
                        TaskDialog.Show("View Depth Override", "Something went wrong in the middle segment to be overridden in Grey 128.\n\nPlease check that the view depth in the current view is just enough to include the objects you need.");
                        break;
                    }
                    if (ids2.Count != 0)
                    {
                        CurrentView.set_ProjColorOverrideByElement(ids2, new Color((byte)192, (byte)192, (byte)192));
                    }
                    else
                    {
                        //Overrides the background segment
                        TaskDialog.Show("View Depth Override", "Something went wrong in the farther segment to be overridden in Grey 192.\n\nPlease check that the view depth in the current view is just enough to include the objects you need.");
                        break;
                    }
                    //Resets the foreground color in case of objects overlapping
                    //foreground and middle segment
                    CurrentView.set_ProjColorOverrideByElement(ids0, Color0);
                    break;
                }
                doc.Regenerate();
                uidoc.RefreshActiveView();
                t.Commit();
            }
        }  


martedì, ottobre 08, 2013

View Depth Override

Da qualche tempo mi sto interessando più da vicino al mondo della personalizzazione di Revit attraverso l'implementazione delle API.
Una dei primi comandi su cui sto lavorando è il View Depth Override ossia la sostituzione automatica delle linee di proiezione degli oggetti in funzione della profondità di campo della vista.

Qui c'è un video dimostrativo:



Il concetto è semplice: per viste di sezione o prospetto, si imposta la profondità della vista e si esegue il comando. La profondità della vista viene divisa in tre settori (primo piano, intermedio e sfondo), vengono effettuate delle sostituzioni grafiche (grigio 128 per il settore intermedio e grigio 192 per quello di sfondo) per simulare la profondità della vista.
Il comando viene eseguito anche se non ci sono oggetti in primo piano, quindi la posizione della vista rispetto al modello ha effettivamente rilevanza per il risultato finale.
Al momento non funziona per i file collegati ed è un comando di tipo "fire and forget" ossia viene eseguito una volta e poi non si aggiorna automaticamente se intervengono cambiamenti nel modello, ma non escludo si possa intervenire per eliminare questi inconvenienti.
Se interessa posso pubblicare il comando ma devo prima testarlo sulle release successive, tenuto conto che lo faccio più per passione e non intendo diventare un programmatore :)

Update qui!

sabato, settembre 28, 2013

Revit Technology Conference 2013 - Giorno 2

La giornata è cominciata con una piccola dimostrazione di forza di Autodesk, in verità sotto l’evocativo titolo della lezione “quando le famiglie diventeranno coscienti” sono stati mostrati i risultati di un progetto di ricerca interno ad Autodesk (nome in codice Honeycomb, nido d'ape) che cerca di fondere insieme i benefici di un approccio tradizionale alla creazione di famiglie con quello più analitico attraverso script esterni o procedure più complesse (leggi varie implementazioni di Dynamo o più specifici linguaggi di programmazione).
Il concetto è che la maggior parte di questi comandi esterni implementati attraverso le API oppure attraverso la programmazione visuale di Dynamo, sono poco affidabili in quanto non vengono aggiornati costantemente, sono sotto questo aspetto contrari alla natura specifica di Revit. Inoltre quando il file del progetto viene fatto circolare al di fuori del proprio studio e finisce ad un consulente che non possiede questi particolari script, queste funzionalità aggiuntive cessano di esistere, non sono quindi replicabili. Il progetto Honeycomb vorrebbe quindi integrare la leggerezza di un semplice codice all’interno della tecnologia di un progetto o incorporare dei comportamenti all’interno dei diversi componenti, siano essi di sistema oppure no, per poter garantire la congruenza di comportamento attraverso il passaggio di file da uno studio ad un altro ad esempio.
Le implicazioni potrebbero essere molteplici: la prima applicazione utile che mi è venuta in mente potrebbe essere quella di compilare un abaco delle finiture per i locali e far in modo che il materiale di finitura dei muri possa cambiare automaticamente in accordo con quanto definito nell’abaco. Sono stati portati esempi di componenti autoadattanti che sono molto più performanti di una serie di vincoli che possiamo esplicitare in una famiglia ad esempio.
Non ho apprezzato molto l’intento di Autodesk in questo senso perché sono state mostrate delle caratteristiche che potrebbero non entrare mai a far parte del software, mentre invece ci sono problemi sanguinosi ancora aperti oppure strumenti da rifinire e completare nelle funzionalità che non si sono guadagnati ancora il diritto di entrare a far parte delle lista di cose da fare assolutamente ma che avrebbero un impatto molto pesante in senso positivo sul lavoro di tutti i giorni.
La seconda sessione del mattino che ho seguito è stata tenuta da Harry Mattison di Boost your BIM, un ex collaboratore di Charles River Soft che poi ha preso il nome di Revit Technology fino all’acquisizione da parte di Autodesk. Dal 1998 al 2012 ha lavorato nella stanza dei bottoni di Revit e lo conosce in modo profondo. Quello che ha cercato di dimostrare in pochi esempi è come sia possibile rendere i nostri progetti addirittura più intelligenti attraverso l’utilizzo delle API. Anche in Italia con Diego Minato e Renato Caenaro ho potuto vedere cose piuttosto complesse gestite con un’applicazione esterna realizzata appositamente per gestire dati di un modello BIM e produrre documentazione standard di layout di supermercati ad esempio. Questi sono strumenti che fanno risparmiare tempo senza dubbio ma quelli che ha mostrato Harry sono esempi in cui le applicazioni esterne aiutano a fare scelte progettuali mentre si lavora, ad esempio tenendo sotto controllo la lunghezza dei percorsi per raggiungere una particolare stanza e quindi riformulare la forma dell’edificio sulla scorta di un piano tipo ottimizzato, piuttosto che tenere sotto controllo la distanza dalle vie d’uscita ed intervenire su altri aspetti progettuali sempre prima nella concezione del progetto.
Si possono anche ridefinire dei comandi attraverso le API o attivarne di altri in funzione di determinati eventi di innesco come ad esempio l’apertura di una vista, il salvataggio o l’apertura di un documento ecc. ad esempio è possibile definire le proprie finestre di dialogo e impostare i valori di default di quando si collega un oggetto da "Auto: centro a centro" a "Auto: origine a origine".
La particolarità di Harry è la velocità con cui riesce a realizzare strumenti utili al volo: giusto il tempo di un panino ed è tornato con un video fatto per spiegare un comando che rispondeva ad una richiesta che un altro partecipante gli aveva posto per individuare quando un elemento attraversa, ad esempio, un controsoffitto o una parete che abbia una determinata resistenza al fuoco e che quindi deve essere monitorato per i fini della manutenzione con una frequenza particolare e che deve essere quantificato in un report esterno. Vedendolo lavorare sembra davvero tutto semplice, ed è un po’ questo ciò che meraviglia di una persona con un talento come il suo.
Chiacchierando un po' con lui gli ho chiesto se esistesse un modo per aggirare il problema delle annotazioni in Revit attraverso le API ma lì il suo disappunto sulla questione è venuto fuori e si è sfogato di quanto poco ancora sia stato fatto per risolvere questo tipo di problematiche (ad esempio le etichette della categoria dei montanti di facciata continua mancante, o l'inconsistenza delle viste collegate per quanto riguarda le quote che si riferiscono ad elementi collegati in un primo file come associati e poi ricollegati in un altro file... provate: dentro il file A collegate un file B nel quale è collegato un file C come associato, se in B tracciate delle quote che interessano gli elementi di C e successivamente collegate la vista  di B in A non riuscirete a vedere le quote sugli elementi di C).
Durante la tarda mattinata si è tenuta una prima parte della lezione dedicata allo sviluppo di standard di utilizzo Revit per l’Europa, in realtà doveva essere proprio il filo portante della conferenza, trovare dei punti in comune per avere del materiale valido da cui partire. C’era una vignetta esplicativa: due persone parlano e una fa all’altra “hey ci sono 14 tipi di standard concorrenti, dobbiamo fare qualcosa” e l’altro ribatte “si abbiamo bisogno di un solo standard” ed il risultato è che di lì a poco ci sarebbero stati 15 tipi di standard.
Ognuno sembra avere una specie di ricetta, molti dichiarano di utilizzare uno standard di riferimento ma non tutti sono veramente in grado di garantire la consistenza e la completa aderenza ad uno standard proprio per la natura collettiva del lavoro, altri sono partiti dalla codifica delle categorie e dei materiali, delle tipologie costruttive, della forme e hanno ottenuto un complessissimo codice parlante da utilizzare per dare un nome agli oggetti o ai parametri contenuti in essi. Usando una serie di strumenti automatizzati è possibile non essere inghiottiti da questa giungla di codici ma ovviamente una volta implementato e visto funzionare resta ancora qualche limite linguistico da superare, di localizzazione, perché a quanto pare quasi tutti riescono a vedere il valore di avere uno standard per la collaborazione con altri progettisti, ma non tutti per la verità condividono questo punto di vista. O meglio la questione non è tanto semplice da dirimere apparentemente perché purtroppo non è ben chiaro cosa sia uno standard e quando c’è confusione su una cosa fondamentale come questa difficilmente si può venire a capo di qualcosa di utile, soprattutto in un dibattito di un’oretta scarsa.
Dal mio punto di vista non si deve confondere lo standard di utilizzo di Revit con l’aderenza alla normativa di un determinato Paese, o, peggio ancora, con un protocollo di scambio dati come ad esempio l’IFC.
Quello che costituisce uno standard sono le pratiche da adottare nella realizzazione dei modelli per far si che si possano eseguire tutte le analisi possibili sul progetto partendo dall’insieme dei modelli interdisciplinari che lo costituiscono.
Ci sono regole da rispettare per ottemperare alle esigenze di ciascun tipo di analisi, da quelle energetiche che richiedono ad esempio che i muri siano un solo oggetto multi strato per poterne computare i correttamente i valori di trasmittanza con una certa affidabilità nei nodi per la modellazione dei ponti termici, a quelle strutturali dove ad esempio si devono modellare le giunzioni tra un muro e un solaio, quindi il muro non potrà essere unico dalla base alla sommità ma dovrà essere interrotto in corrispondenza dell’intersezione dei diaframmi orizzontali, ancora ci sono le analisi dei costi cui strumenti come le parti possono portare seri benefici a garanzia dell’attendibilità del modello e tutto questo quindi porta a definire quale livello di dettaglio e affidabilità si vuole avere nel modello.
In poche parole si deve codificare la prassi da seguire nel nostro lavoro per parlare effettivamente di collaborazione, partendo dal basso per i contenuti da includere e partendo dall’alto per stabilirne l’obbligatorietà all’interno di un progetto. Si tratta di un processo che va in due sensi e si spera trovi un punto di incontro a metà strada tra la fattibilità e l’utilità di una scelta simile per l’intera filiera delle costruzioni.
Si può obiettare che è un processo complicato e complesso, che dipende dalle abitudini locali o dagli standard interni ecc… forse perché sono in Olanda, mi è venuta in mente questa immagine esplicativa: quando si impara ad andare in bicicletta si stanno eseguendo una serie coordinata di movimenti, se dovessimo metterci a pensare a cosa dobbiamo fare ogni volta che saliamo su una bicicletta non ci sarebbe nemmeno il piacere di fare una passeggiata, mentre invece ci viene naturale, eseguiamo una serie complessa di operazioni in un ambiente in costante evoluzione, circondati da fonti di pericolo potenziali quando andiamo in strada, ma tuttavia sappiamo andare ugualmente spediti sia in Italia sia in Inghilterra dove hanno un codice della strada diverso dal nostro e guidano dal lato opposto della carreggiata: andare in bicicletta in modo corretto resta essenzialmente la stessa cosa ovunque. Perché non possiamo realizzare i nostri modelli BIM con la stessa naturalezza e grado di confidenza indipendentemente dal Paese in cui ci troviamo a lavorare?
Dai commenti che ho sentito e dagli interventi che altri partecipanti facevano sull’argomento sembra che Revit sia utilizzato come modellatore, non ci sono però informazioni nel modello, o semplicemente sono impostate male e rendono il modello inaffidabile. La sfida è quindi riuscire a realizzare modelli affidabili al 100% inserendo programmaticamente gli obiettivi da raggiungere e le metodologie da seguire in un contratto. Sembra che al di là dell’Atlantico questo tipo di approccio legale funzioni piuttosto bene e qualora ci siano consulenti che non siano in grado di fornire questo tipo di  prestazioni saranno costretti a dotarsi in breve tempo di una forma di outsourcing se vogliono rimanere competitivi sul mercato europeo e successivamente interiorizzarla nel proprio processo di lavoro.
Al termine di questa sessione ci sono state due lezioni di alleggerimento: la prima di “tips and tricks” per lo più cose arcinote, alcune molto banali, altre più sofisticate, ma nel complesso valevoli di essere menzionate e ricordate. La seconda è stata una carrellata di ultimi ritrovati tecnologici che avevano poco a che fare con Revit o il mondo delle costruzioni ad eccezioni di droni miniaturizzati per eseguire il laser scanning di un edificio. Non si sono toccati minimamente temi come sostenibilità tecnologica, servizi in cloud o nuove piattaforme di collaborazione  purtroppo.
A quanto pare questa prima edizione del Revit Technology Conference in Europa ha smosso un po’ gli animi su questioni più o meno spinose, ha portato allo scoperto i difetti di una cultura frammentaria ma che si sta a fatica mettendo a regime per dialogare con il resto del mondo.
La prossima edizione si terrà nel 2014 in agosto a Dublino, resterà con la formula a numero chiuso dei partecipanti per consentire l’interazione su una scala umana e avere uno scambio di idee in forma più sociale e proattiva.

Revit Technology Conference 2013 - Giorno 1

Finalmente si comincia a fare sul serio.
Dopo una doverosa introduzione da parte di Wesley Benn (colui che ha fondato uno dei primi Revit User Group in Australia e a cui va attribuita la paternità dei Revit Technology Conference in tutto il mondo) in cui sono state ricordate le origini di questo tipo di eventi aggregativi, le finalità e i canali di comunicazione attraverso cui mantenere vivo l'interesse dei partecipanti, e dalle cui parole grondava una totale dedizione alla causa, si è passati ad una piccola ma simpatica introduzione di un rappresentante degli sponsor, Graphisoft (notoriamente produttori di ArchiCAD) che ha saputo cogliere l'occasione di un RTC per poter tentare di parlare ad un vasto gruppo di utenti di una softwarehouse concorrente di come loro declinano il concetto di Building Information Modeling.
Successivamente c'è stata una lunga presentazione  di un architetto facente parte del gruppo di lavoro del senatore Renzo Piano nel suo ufficio di Parigi, Bart Akkerhuis, che ha dimostrato come sia possibile utilizzare Revit con profitto anche all'interno di uno studio dove i processo creativo passa attraverso lo studio dei modelli fisici, riducendo il nostro beneamato modellatore parametrico alla strega di un utensile in più a disposizione dell'artigiano-architetto che ragiona per dettagli costruttivi, "pezzo per pezzo". Alla fine della giornata, in modi diversi e per i motivi più diversi, Renzo Piano è stato il protagonista assente di questa prima tornata di lezioni.
Quello per cui vale davvero la pena partecipare ad eventi simili è l'opportunità di avere a che fare con persone che hanno delle idee e delle esperienze da condividere.
Avendo questo in mente si capisce come mai spesso le "lezioni" di oggi si siano concluse con degli interrogativi che non hanno una vera risposta certa ma dipendono da una moltitudine di fattori esterni alla progettazione.
Ad esempio, David Conant ha spiegato come sia possibile ottenere un abaco "generico", nel senso di non legato a nessuna particolare categoria, con gli strumenti che possediamo oggi con la versione 2014. Basterebbe infatti filtrare una categoria qualsiasi per un contrassegno del tipo "XXXXXXXXXX" che difficilmente sarà usato per avere un abaco vuoto e successivamente creare una tabella personalizzando la barra del titolo. Si è soffermato poi sulle potenzialità delle API relative all'uso specifico degli abachi che ora possono essere controllati automaticamente, facendo risparmiare tantissimo tempo per la loro impostazione e in questo senso ridurre gli errori umani di inserimento dati nella tabella "generica" importando il contenuto di un foglio di calcolo Excel direttamente dentro Revit mantenendo addirittura la formattazione delle singole celle.
 Così sarebbe finalmente possibile "ruotare" una tabella con i parametri messi nelle righe e le istanze in colonna; oppure creare un abaco di abachi per fare un quadro riassuntivo del progetto dal punto di vista delle informazioni del progetto e delle dimensioni e quantità contenuti nel modello.
Certo, non era stato previsto un utilizzo simile inizialmente, ma sta di fato che queste possibilità esistono e sono alla portata di sa coglierle. Si possono utilizzare delle add-in per importare informazioni da un foglio Excel per popolare una miriade di parametri nel modello in modo semiautomatico ( a meno di non implementare un updater che innesca una rigenerazione dei contenuti collegati  dal foglio di calcolo esterno al verificarsi di una specifica azione, come ad esempio l'apertura della vista o la stampa, piuttosto che il salvataggio del file).
E alla fine è arrivato anche l'incredibile: lo snake in Revit. Basato su questo concetto di personalizzazione delle celle del titolo dell'abaco e di rigenerazione dei contenuti, un programmatore si è divertito a realizzare una copia del celeberrimo videogame.
La cosa più stupefacente è stata l'abilità di David in qualità di oratore di essere sempre un passo avanti alle domande che mi venivano in mente, era come se sapesse sempre a cosa stavo pensando in quel momento e un paio di frasi dopo sarebbe arrivata la risposta.
Nel pomeriggio ho assistito ad una lezione su come creare dettagli intelligenti in Revit da quello che definirei per il modo di fare, di parlare, di risolvere i problemi come consulente, il Diego Minato del Colorado, uno dei migliori speaker degli ultimi RTC in nord America messo in ombra solamente da quel gigante di Marcello Sgambelluri, sto parlando di Brian Mackey, con moglie e figlioletta di 3 mesi al seguito. Ero un po' scettico inizialmente sui contenuti della lezione, ma fortunatamente il livello di confidenza sull'argomento e la sua organizzazione dei template, sia di progetto sia delle famiglie (si esatto template delle famiglie personalizzate, basta rinominare l'estensione di una famiglia da .rfa a .rft e il gioco è fatto) mi hanno decisamente fatto cambiare in meglio la mia opinione. Anche perché era davvero uguale a Diego quando si mette all'opera. Difficile non dare ragione a tipi come loro ;)
Il suo intento è quello di fornire ai suoi clienti una libreria di componenti bidimensionali etichettabili (non avere nemmeno una singola linea tracciata ma solo componenti), efficienti (evitare le matrici di oggetti come la peste, meglio i dettagli ripetuti), nidificare e riutilizzare le famiglie di componenti il più possibile per avere consistenza di documentazione, popolare il template con delle viste base da duplicare come prima cosa (una per ciascun tipo di vista) che contengano delle note esplicative su come utilizzare questo tipo di componenti per avvisare gli utenti della loro esistenza e di attenersi a poche semplici regole per raggiungere gli obiettivi facendo il minimo sforzo.
Successivamente Julien Benoit ha spiegato come nella sua azienda si faccia ricorso quotidianamente all'utilizzo delle parti per poter ottenere computi precisi (uno su tutti negli abachi delle parti c'è la possibilità di computare correttamente l'altezza massima di un muro anche se associato), avere un unico modello per più analisi, collaborare in modo più proficuo nelle fasi iniziali con i consulenti anche agendo sulle parti negli elementi dei file collegati, mantenere gli oggetti multistrato come un solo elemento a beneficio delle simulazioni energetiche del modello. In questo modo sono in grado di prendere decisioni importanti prima di andare in cantiere e di monitorare ciò che accade ed eventualmente cambiare direzione per rispettare i tempi di consegna, adempiendo agli obblighi di legge  creando tavole dedicate per spiegare alle maestranze cosa andranno a fare e come durante la giornata di lavoro ricorrendo a viste assonometriche per garantire un'ampia leggibilità e una migliore conoscenza per tutti dell'ambiente di lavoro in cui operano nelle migliori condizioni di sicurezza. Decisamente notevole il progetto di dismissione e rimozione di una centrale nucleare con la divisione in parti di un edificio in calcestruzzo armato piuttosto complesso anche per via delle diverse densità di calcestruzzo da 25 a 35 kg/dm^3 con conseguente problema di determinazione del massimo carico possibile per le gru di cantiere, posizionamento degli ancoraggi in funzione del baricentro del blocco per evitare che questi si ribaltassero durante la movimentazione (alcuni blocchi contengono fori e passaggi per diversi tipi di canalizzazione e quindi determinare il loro baricentro non è stato così semplice, per avere tutte queste informazioni e interagire con il loro standard dei fogli di calcolo si avvalgono di apposite API).L'importante in questo tipo di workflow non è sapere come si fanno determinati passaggi ma il perché si debbono fare. Julien ha mostrato bene come ci si possa ingegnare per sfruttare al massimo gli strumenti di cui disponiamo già per ottenere lo stesso grado di controllo sul progetto che potevano avere quando utilizzavano il CAD, senza modificare il modo di lavorare delle maestranze ma anzi fornendogli materiale più semplice da capire a beneficio di tutti per rispettare le scadenze.
E poi ecco che ritorna, Renzo Piano, l'estensione del Kimbell art museum in Texas. Una Case history raccontata da Kelly Cone, che ha speso due anni sul progetto per coordinare le diverse discipline, con tutte le problematiche di un progetto in continua evoluzione, tenere sotto controllo i costi, realizzarlo e controllarlo nella fasi di cantiere. Cruciale l'esame di alcuni passi del contratto che ha avuto una storia molto particolare: dalla stipula all'effettivo via alla cantierizzazione sono passati 3 anni, nel frattempo molte cose erano cambiate e alcuni dei loro consulenti non erano in grado di soddisfare le richieste contrattuali. Un esempio di revisione del contratto ha dimezzato la dimensione minima nel
i modelli passando a due pollici a un pollice (25.4mm). Fortunatamente grazie a questo tipo di accortezza sono riusciti a d intervenire in tempo sul posizionamento di alcuni impianti di sicurezza antincendio all'interno del controsoffitto di progetto senza doverlo abbassare; estremamente interessante anche dal punto di vista architettonico avere il controllo di tutti i dettagli dei getti in calcestruzzo (il cui costo andava dai normali 69$/yard^3 a oltre 400$/yard^3 vi faccio fare le equivalenze) che richiedevano un'elevatissima organizzazione delle casseforme per le quali erano consentite deflessioni massime di 1/4 di pollice su lunghezze di 40' senza tasselli intermedi: il risultato casseforme spesse 6' (circa 1,80m). Ho trovato il tutto molto istruttivo e ben esposto, e alla fine della giornata il bilancio è molto positivo, domani un altro ciclo di lezioni da cui spero di trarre nuovi stimoli e qualche consiglio utile da poter condividere.

giovedì, settembre 26, 2013

Revit Technology Conference 2013 - Giorno 0


 
È  un evento  che attendevo da parecchio, si tratta della prima conferenza europea di Revit Technology, a Delft, Olanda. Le mie aspettative sono molto alte perché sono anni che seguo forum e blog che riportano i contenuti trattati durante le manifestazioni sorelle negli Stati Uniti d’America e in Australia.
Ci sono molti personaggi “famosi” nell’ambiente Revit, professionisti accreditati a livello internazionale e che hanno visto nascere il cambiamento di quello che è il Building Information Modeling.
Il primo che incontro è David Conant, un’istituzione, “quello con i capelli” scherza lui,  per contrapporsi a Matt Jezyk che invece i capelli li porta cortissimi. Sono due persone normalissime simpatiche e alla mano, scopro in poche battute che purtroppo Autodesk ha deciso di fare a meno della consulenza di Conant (per capirci, Conant rappresenta per Revit quello che per Pinocchio può essere, se non Geppetto, almeno la fata madrina), “la vita va avanti ugualmente, prendo ogni occasione nuova come un’opportunità” chiude lui con un’inattaccabile ottimismo. Mi preannuncia che durante il suo intervento farà vedere qualche chicca su cosa si può fare con gli abachi attraverso le API (tema a cui mi sono avvicinato solo ultimamente che però mi ha subito intrigato facendomi scoprire un panorama vastissimo di potenzialità), mi ha messo ancora più curiosità quando ha fatto riferimento ad un video game basato sul motore di Revit e poi ha concluso dicendo: ”finalmente ora che sono fuori dall’azienda potrò dire tutte le cose che non vanno”. In effetti io sono qui per questo.
Jezyk è un architetto, gioviale e pratico, dentro alla questione commerciale di diffusione del prodotto, mi è sembrato sinceramente interessato a capire le dinamiche del mercato nel nostro Paese, se esistono imprese che si occupano di costruzioni che hanno necessità di avere un modello BIM: “ da un lato dell’equazione ci sono le imprese di costruzioni che spingono per avere un modello BIM funzionante da interrogare; dall’altro lato di questa equazione si trovano gli architetti che invece devono convincere e tirare dalla loro parte i consulenti, la committenza...è stato faticoso anche da noi otto anni fa quando abbiamo cominciato, ma da quando hanno provato il BIM non tornerebbero mai indietro al 2D, ora con una decina di progetti alle spalle fatti dalla concezione alla realizzazione in Revit la strada è stata segnata”. Insomma potrebbe esserci speranza anche per noi a suo dire.
In un angolino della sala trovo Harry Mattison di Boost your BIM accompagnato da sua moglie (che dai lineamenti si sarebbe potuta scambiare per un architetto olandese), ho comprato il suo ottimo video corso di 5 ore sulle API in Revit qualche tempo fa, gli ho fatto volentieri una buona recensione e lui ha colto l’occasione per ringraziarmi. Si dà molto da fare per la divulgazione e ci terrebbe a realizzare un prodotto con i piedi per terra, “sporco di realtà” e non qualcosa di accademico e fine a se stesso. In cantiere ha altre 5 ore di video per un livello più avanzato e accetta volentieri consigli e suggerimenti su come e quali tematiche  sia meglio affrontare per spiegare le potenzialità delle API per risolvere problemi di complessità crescente. In effetti il suo scopo apertamente dichiarato era proprio far  fare della ginnastica alla mente, per me è così, è la spinta che mi ci voleva per continuare ad imparare cose nuove e applicarle subito nel mio lavoro.
Incontro fugace con David Light, ex HOK, ora  in Case (come ricompensa per quanto ha patito nel suo lavoro precedente a suo dire) da poco meno di un anno, porta la sua esperienza in una delle aziende più effervescenti nel campo dello sviluppo di add-in per Revit. Mi chiede se sono stato a qualche altro RTC prima di ora e all’Autodesk University, perché purtroppo i RTC sono più delle manifestazioni commerciali, mentre all’AU ci sono le stesse persone che soffrono insieme a te di quello che non va nel software o nel lavoro di tutti i giorni. Onestamente essendo la prima volta che partecipo a un evento di questa natura non so come prendere la sua opinione, mi riservo di farmi un’idea più chiara quando tutto sarà terminato.
Intravedo Steve Stafford accompagnato da suo figlio ma non trovo modo di parlargli, si stanno dirigendo tutti verso il ristorante per la cena dedicata agli oratori della conferenza.
Riesco a fare due chiacchiere con Julien Benoit, ingegnere civile francese e Factotum per l’azienda con cui collabora. Si occupa da sempre di cantierizzazione e strutture, dice di conoscermi dopo aver letto il mio nome sul badge, ma non si ricorda dove. La conversazione prende una piega surreale quando mi rendo conto che potrebbe essere l’inizio di una barzelletta: “ci sono un italiano e un francese in Olanda che parlano tra loro in inglese….”. Mi racconta di un suo collega italiano, Alessio Maggi, che fa il suo stesso lavoro e che gli ha amaramente confidato che vorrebbe molto tornare a lavorare in Italia, ma in questo momento non ci sarebbe posto per le sue competenze sul nostro mercato del lavoro. Purtroppo ho dovuto confermarglielo, la realtà di piccole imprese di costruzioni o di piccoli studi che riescono a stare a galla oggi non riescono a dotarsi di tecnologia e software all’avanguardia, non riescono ad affacciarsi sul mercato facendosi propulsori dell’innovazione di metodo. Si lamenta del fatto che in Francia ci siano fior di studi che comprano moltissime licenze Revit ma che alla fine non vengano utilizzate perché vengono a mancare i soldi per la formazione e di questo sembra ritenere un po’ colpevole Autodesk, la quale punta a vendere il maggior numero di licenze lasciando poi soli gli utenti ad occuparsi dell’effettiva adozione della tecnologia BIM. Dato che conosco Emmanuel Di Giacomo di Autodesk Francia e so quanto invece sia una persona che ha prima di tutto passione per ciò che fa, ad ogni livello, mi viene difficile credere che sia davvero così come mi racconta. Forse la verità sta nel mezzo, forse, è semplicemente la pura conseguenza dell’immobilismo della crisi che non fa investire nei corsi di formazione quando invece sarebbe il momento migliore perché c’è meno lavoro e ci si potrebbe concentrare senza frenesia ad imparare meglio le metodologie nuove, i nuovi software e sviluppare gli standard per il proprio lavoro. Lo so è utopistico, ma l’utopia è come l’orizzonte: se ti sposti di un passo, si sposta di un passo, se ti sposti di tre passi si sposta di tre passi, a cosa serve l’utopia? A farci camminare.
 
Tanto per la cronaca sono il primo e unico italiano che partecipa alla conferenza, domani ci saranno i primi incontri e ho dovuto fare una scelta perché purtroppo sono sempre tre lezioni diverse in contemporanea ma cercherò di captare più informazioni che posso.

martedì, luglio 09, 2013

BIM Manager, pensieri ad alta voce

Riporto il contenuto di una serie di domande che mi sono state rivolte da un professionista sul tema del BIM e in particolare sul ruolo del BIM Manager. Vorrei condividere il mio pensiero, anche se qualcuno mi critica, mi considera un incapace e che, essendo il BIM un arte, non sono abbastanza artista per esser degno del ruolo che ricopro.

In che cosa consiste il ruolo del BIM manager in uno studio di architettura?

Ha un ruolo decisionale per ciò che concerne la strategia da adottare per concepire e organizzare i modelli del progetto durante tutto l'iter progettuale, o da un punto particolare del processo di progettazione.
Ogni progetto dovrebbe avere un suo BIM Manager come figura cui fare riferimento per quegli aspetti tecnici che coinvolgono anche i collaboratori al di fuori dello studio di progettazione architettonica (strutturisti, impiantisti, paesaggisti, illuminotecnici, ecc...). Quando si ha un quadro delle esigenze completo, dalla committenza in giù, al BIM manager tocca il compito di progettare il flusso di lavoro per il suo team interno e stabilire l'interazione con i team di lavoro esterni.
Questo si declina in diverse attività, da quelle meramente tecnico-informatiche a quelle di tipo gestionale/contrattuale. Quello che viene prodotto è un modello di informazioni, ciò che viene scambiato è ancora  un modello di informazioni, tutto ciò che esce da questa logica (le stampe cartacee o in formato digitale e i relativi file CAD vettoriali, le viste foto-realistiche, ecc...) va a perdere in tutto o in parte l'intelligenza del modello, ciononostante il BIM Manager deve assicurare l'integrità delle informazioni che derivano dal modello.
A livello aziendale è necessario stabilire delle linee guida robuste e assicurare la consistenza dei materiali prodotti, risolvere le non conformità, migliorare programmaticamente i processi di lavoro. Questo significa sviluppare le risorse da inserire nei processi dal punto di vista delle procedure, dei contenuti e più in generale delle conoscenze per comprendere quali siano gli obiettivi da raggiungere, affiancate dal "saper fare" di un artigiano, quello che fa la differenza tra un professionista serio ed un mestierante.
In uno studio di architettura italiano è necessario tenere presente il livello atteso di qualità della rappresentazione finale, questo oltre alla correttezza del modello e alla consistenza documentale. 
Purtroppo manca un riferimento legislativo comunitario, la base culturale all'approccio BIM nell'accezione europea è ben radicata nei paesi scandinavi dove sono state adottate piattaforme di controllo della progettazione virtuale come passaggio standard delle procedure edilizie. In Inghilterra il passaggio al BIM è stato programmato per quel che concerne i lavori pubblici, ci si attende in questo senso un rinverdimento tempestivo della normativa di settore anche nel nostro Paese, con l'auspicio di semplificare le procedure burocratiche e aumentare la soddisfazione di tutti i protagonisti della filiera edilizia.

Quali sono le competenze tecniche e le esperienze personali necessarie per svolgere tale ruolo? la conoscenza completa e approfondita di programmi BIM è sufficiente?

Sono un laureato in Ingegneria Edile/Architettura dell'Università degli Studi di Pavia, ho cominciato a cambiare il mio modo di progettare avvicinandomi al BIM sin dal 2006, da autodidatta, e da allora ho sempre proseguito su questa strada. La mia formazione si è rivelata più efficace di quanto avessi creduto quando ero ancora studente, la forma mentale con cui mi approccio ai problemi si è rivelata poi un'arma vincente: non si deve temere di avere dei dubbi, dobbiamo porci le domande giuste. Utilizzare un approccio BIM  alla progettazione significa avere un approccio olistico alla stessa, generale e specifico insieme, sapendo però gestire il livello di dettaglio delle informazioni su cui concentrarsi di volta in volta e risolvere prima molti dei problemi che si possono verificare in un normale iter progettuale.
Esperienza, questa è la chiave di tutto, è ciò che siamo eticamente obbligati ad acquisire e a passare a chi verrà dopo di noi, per impedire che si ripetano gli errori del passato e per poterne fare di nuovi, poiché questi in fondo possono rivelarsi una spinta all'innovazione creativa.
Quindi no, non basta conoscere solo lo strumento, il BIM è una metodologia, non è un pacchetto di software, e tanto più si è addentro nella comprensione del processo edilizio e dell'oggetto edilizio che si sta progettando, tanto più redditizio sarà il passaggio a questa metodologia.

E' stato assunto con la carica di BIM manager o è un ruolo che ha acquisito con il tempo all'interno dello studio?

Sono stato contattato proprio in qualità di BIM Manager e più nello specifico di esperto Revit. All'inverso di quanto chiede, nel tempo ho assunto un ruolo poliedrico che va dalla progettazione alla gestione degli standard interni sia CAD sia BIM.

Avete riscontrato miglioramenti significativi nell'organizzazione del lavoro e del processo edilizio (ideazione-progettazione-realizzazione-gestione)?

Per la natura dei progetti che seguo in questo studio, l'approccio BIM viene utilizzato con successo nella fase esecutiva e poi quella successiva di controllo della realizzazione affiancando i fornitori. Per economie di scala e per la composizione variegata dei collaboratori dello studio ci si è trovati ad utilizzare marginalmente il BIM e i suoi benefici in fase di ideazione, sta progressivamente diventando prassi ricorrere al BIM per la coordinazione della progettazione nelle fasi preliminari o di concorso perché si riduce drasticamente il tempo e le risorse necessarie a produrre documenti coerenti, si può badare alla sostanza e valutare opzioni multiple, in poche parole, si progetta di più e ci si rende meglio conto delle eventuali problematiche.

E' stato necessario svolgere formazione nei confronti dei suoi colleghi e soprattutto nei confronti degli altri attori del processo (ingegneri-impiantisti ecc..). Se si, quali difficoltà ha riscontrato?

Per quanto riguarda i colleghi è stato fatto un corso di formazione sulla piattaforma Revit che però ha dato i maggiori risultati per coloro i quali sono passati a tempo pieno su progetti basati su questo software. I collaboratori esterni sono rimasti spesso a tecnologie CAD e quindi abbiamo sviluppato una metodologia di lavoro che ci consente comunque di integrare la loro progettazione nella nostra. Quando i nostri partner esterni utilizzano Revit, il lavoro diventa molto più semplice e automaticamente strutturato: si stabiliscono standard di nomenclatura, si definiscono i requisiti dei modelli (il livello di affidabilità, il livello di dettaglio in funzione della fase di progettazione e della qualità di rappresentazione), i punti di interscambio, la matrice delle responsabilità per i modelli e la codifica di riferimento per le specifiche di prodotto e materiale.
Nella mia esperienza non ho mai, purtroppo, potuto confrontarmi con altre piattaforme BIM all'infuori di Revit.
L'unica nota dolente è che nel momento i cui si condivide un modello ci si rende conto di far circolare anche tutto il valore aggiunto che costituisce la risorsa caratteristica di uno studio di progettazione, ciò che per qualità ed efficienza lo differenzia da tutti gli altri. Un problema non indifferente se si pensa al lavoro che si profonde per affinare questi strumenti, non esiste ad oggi un modo per tutelare il diritto d'autore di queste metodologie e contenuti; potemmo assistere per il BIM a ciò che è avvenuto con la rivoluzione CAD, ossia una diffusione capillare a discapito però della qualità e della comprensione degli obiettivi, l'affermazione di uno standard tra i formati sul mercato (in realtà esiste già l'IFC ma siamo lontani dal poter dire che permette una descrizione identica a quella dei formati nativi). Diventa a mio parere necessaria una normativa snella che definisca i parametri per un processo di qualità minima: in questo modo si eviterebbe il temuto impoverimento della progettazione BIM, ci sarebbe un progressivo abbandono della tecnologia CAD in favore di piattaforme più evolute.
In ogni caso questo tipo di piattaforme hanno un grado di complessità tale da essere quasi autoimmuni ad approcci superficiali, col progredire dell'interrelazione delle discipline e dell'approccio olistico al tema edilizio sarà sempre più necessario partire prima con la formazione di professionisti orientati al BIM, posso affermare per conoscenza diretta che sono lodevoli in questo senso i corsi del Politecnico di Torino e di tutti gli altri Atenei che si avvicinano in modo scientifico a questo modo di operare.
C'è una richiesta crescente di professionalità legate al mondo BIM che, a differenza di quanto è stato per il CAD, comporta una rivoluzione di concetto e non strumentale:l'approccio dal tecnigrafo al computer per il disegno CAD è stato di tipo strumentale, per il BIM si richiede un salto di qualità che scende nell'essenza della progettazione, nella prefigurazione del comportamento reale attraverso un modello, misurandone le prestazioni, i costi, l'efficienza.

Una delle grandi potenzialità del BIM è l'organizzazione del lavoro tramite workgroup on line. Un modello può essere frammentato in base al ruolo dei diversi attori all'interno della filiera realizzativa ( architettonico, strutturale, impiantistico ecc.. ). Qualora applicaste tale metodologia di lavoro, qual'è il suo ruolo? è lei che gestisce e controlla attraverso il modello i diversi contributi tecnici?

Spingendo il concetto che esprime al limite questo rappresenta sicuramente la nuova frontiera: la collaborazione in tempo reale di figure diverse ognuno per la propria competenza, rilevando il più presto possibile le interferenze, rielaborando il progetto quando costa meno  prendere decisioni più o meno drastiche per ottimizzare il risultato nel rispetto della molteplicità degli obiettivi da raggiungere.
Partendo da una schematizzazione astratta per ruoli (Project Manager, BIM Coordinator, BIM Manager,collaboratore progettista, ecc...) è piuttosto normale trovarsi a coprirne diversi e contemporaneamente nella realtà. Direi che quella della coordinazione disciplinare sia più una vocazione del project manager del progetto, il BIM Manager sarà responsabile della correttezza e dell'integrità delle informazioni contenute nel modello, della loro reperibilità nel punto di scambio con le altre figure coinvolte nel processo edilizio. 

Il problema dell'interoperabilità tra i diversi software provoca disagi nel trasferimento delle informazioni o è un problema circoscritto a determinati programmi?

Porrei l'attenzione su questo tema in termini di perdita o meno dell'intelligenza del modello: quando posso avere uno scambio tra software in modo biunivoco, cioè quando le modifiche in un software che è concepito e ottimizzato per compiere un determinato compito (ad esempio analisi strutturale) si riflettono nel software che ha generato il modello da analizzare e che contiene tutte le informazioni necessarie per descriverlo allora l'interoperabilità è completa, si deve lavorare sull'istantaneità di questo passaggio.
Quando la biunivocità non è garantita e quindi si richiede l'intervento umano per allineare il modello nativo ai risultati di un altro software specifico, si ha un'interoperabilità parziale perché l'intelligenza non è del tutto persa per le finalità che si propongono nello scambio tra software ma le modifiche in uno non si riflettono nell'altro. Questo dipende anche dalle variabili che si vogliono ottimizzare, ad esempio la percentuale di aperture in una parete per massimizzare l'apporto dell'illuminazione diretta bilanciandola però per evitare il surriscaldamento interno nella stagione calda. Le modifiche necessarie comporterebbero un'alterazione del disegno delle aperture, delle loro proporzioni, del loro ombreggiamento, dei layout interni. Il compito del software che esegue queste simulazioni è quello di fornire delle indicazioni utili al progettista, poi spetta a questi trovare la soluzione migliore.
Quando si esce dalla logica BIM, ad esempio nella produzione di un'immagine fotorealistica, allora l'interoperabilità non serve: è giusto e necessario investire in flussi di lavoro che ottimizzino anche questo tipo di passaggi, ma sarebbe a mio avviso fuorviante considerare il BIM qualcosa di statico.

martedì, giugno 04, 2013

Visualizzazione tridimensionale dei locali


Ho scoperto per caso che è possibile ottenere da Revit in modo automatico la visualizzazione tridimensionale di qualsiasi locale, utile quando si debba procedere alla dimostrazione analitica dei volumi.
Certamente si può sempre ricorrere alle masse, in alcuni casi è anche più corretto e già messo in conto proprio con queste finalità, rimanendo ancora di più in un approccio BIM.
Tra qualche anno queste verifiche non saranno quasi più necessarie, almeno questo mi auguro, perché ci si scambierà direttamente un pacchetto di modelli e si otterranno le necessarie autorizzazioni in un processo di progettazione-costruzione virtuale.
Nel frattempo è possibile ricorrere all'esportazione in formato IFC.
Questo formato estrae da Revit le geometrie degli oggetti e le informazioni associate e le restituisce sotto forma di elenco ordinato per classi.
Per questa applicazione a noi interessa la classe IfcSpace che corrisponde alla categoria dei Locali in Revit.
Ho realizzato un piccolo esempio per verificare le potenzialità di questo metodo con un locale con tre lati rettilinei e uno curvo, dei pilastri con delimitazione del locale disposti in modo casuale, un tetto da estrusione curvo. Ho impostato il calcolo dei volumi nella apposita scheda dei locali e ho proceduto come segue, tenendo conto che in realtà il mio obiettivo è la visualizzazione dei locali.


Ho esportato il file in formato IFC, badando di selezionare la versione 2x3 oppure la GSA 2010 (per gli altri formati questo metodo sembra non funzionare).



 Successivamente ho aperto il file IFC in Revit; esiste un template di riferimento che mappa le classi con le categorie di Revit, purtroppo la classe IFC nella versione che sto utilizzando (RAC 2012) non è mappabile, per cui viene importata automaticamente come Modello Generico.



Quello che si ottiene è una famiglia in-place con le sue proprietà tra cui il suo volume (che purtroppo non ha nulla a che vedere con il volume calcolato da Revit), editando la famiglia si scopre che l'oggetto in questione è una specie di simbolo importato, l'equivalente di un solido CAD importato.
Disponendo di un Modello Generico si possono ricreare muri e tetti da superficie, nel caso di forme complesse però può risultare macchinoso.


Apparentemente questo metodo funziona solo per volumi che hanno un certo grado di complessità, in pratica se si segue la stessa procedura per un locale che ha la basi inferiore e superiore orizzontali e piane, la classe IfcSpace viene correttamente tradotta in un locale di Revit, e meno male!

sabato, maggio 11, 2013

Volta a vela irregolare parametrica



Prossimamente...

mercoledì, aprile 10, 2013

Tracciare campiture in tavola

Sarà capitato a tutti di avere la necessità di dover tracciare una campitura in una tavola di disegno, il problema è che questo non è ancora possibile in modo "diretto".
Esiste però un piccolo trucchetto per ovviare a questa limitazione, infatti si può ricorrere ai gruppi di dettaglio che come sapete si possono inserire in tavola e possono raccogliere una quantità di elementi 2D, sia componenti di dettaglio sia annotazioni.
Di seguito i passi da seguire:
  1. Creare un gruppo di dettaglio in tavola, ad esempio partendo da delle semplici linee (gruppo A)
  2. Creare un gruppo di dettaglio con una campitura in una vista di legenda ad esempio (gruppo B)
  3. Sostituire il tipo di gruppo di dettaglio in tavola (A) con quello che contiene la campitura (B) usando il selettore del tipo
  4. Escludere la campitura dal gruppo di dettaglio B
La campitura contenuta nel gruppo di dettaglio sarà ora modificabile come se l'avessimo tracciata in  prima istanza, purtroppo però non si possono usare le geometrie delle viste in tavola come snap per il contorno della campitura ma solo gli oggetti presenti nella vista di tavola (i bordi di taglio delle viste e le linee del cartiglio ad esempio).
Altra pecca è che i riempimenti solidi trasparenti risultano comunque coprenti con gli oggetti all'interno delle viste, ma è sicuramente un buon punto di partenza.