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.




mercoledì, luglio 18, 2012

Spostare i punti di un rilievo 2D alla quota indicata in AutoCAD

Oggi vado leggermente fuori argomento e parlo un po' di AutoCAD, strumento che rimane spesso presente nel mio flusso di lavoro, vuoi per comunicare con i consulenti, vuoi per alcune operazioni fondamentali  di preparazione dei file da importare in Revit.

Da questa discussione su Revit Forum


ho deciso di pubblicare  un piccolo LISP che ho scritto per velocizzare delle operazioni noiose in CAD.
Tutto nasce dall'esigenza di avere un file in formato .CSV da utilizzare in Revit per generare una superficie topografica.

Un file CSV (Comma Separeted Values, ossia valori separati da virgola) si può ottenere facilmente grazie all'indispensabile xSurvey rilasciato da Gjiom, rimando alle pagine del forum o del suo Revit Landia dove se ne parla ampiamente.

Lo scenario tipico in cui mi trovo ad operare è quello di avere da un consulente esterno un DWG con i punti battuti nel rilievo, disegnati come oggetti punto con coordinata Z uguale a zero, e a lato un testo che ne riporta la quota assoluta in metri sul livello del mare.

Quello che fa questo LISP è creare una copia dei punti battuti su un layer (A-3D-POINTS) posizionandoli alla terna di coordinate (X,Y,Z) desunta dal punto a quota zero e dal testo accanto.
per motivi di praticità i punti originali vengono spostati su un layer che verrà automaticamente spento (HIDDEN) quindi sarebbe bene fare queste operazioni partendo da una copia di lavoro del vostro file di rilievo.

Quindi per ciascun punto battuto si deve selezionare prima il punto e immediatamente dopo la quota, ciclicamente fino ad esaurimento dei punti.
Inizialmente viene richiesto di esprimere il valore di un metro in unità di disegno (purtroppo capita di avere una pianta in centimetri e le quote accanto in metri se il rilievo è piccolo); in ogni caso di default viene considerato un disegno in metri.

Ho notato che su alcuni file lavorando dall'alto il LISP non funziona correttamente: crea la copia del punto ma la lascia a quota zero, probabilmente ha a che vedere con una variabile di snap che dovrei disattivare, indagherò appena posso.
Questo per dire che non ho nessuna pretesa di aver fatto un lavoro scevro da errori, anzi, è aperto a chi volesse migliorarlo, sarebbe utile poterne condividere su queste pagine gli eventuali sviluppi.

Tuttavia in una vista assonometrica il LISP funziona correttamente.

Ribadisco che è pensato per funzionare con degli oggetti punto e dei testi in testo multilinea, in caso di blocchi con attributi, ad esempio, si dovrà procedere diversamente.
Quindi nel caso non fosse possibile richiedere a chi fornisce il rilievo di averlo in 3D si può utilizzare, con pazienza, questo piccolo strumento.

Per visualizzare meglio i punti scegliete il contrassegno che vi piace di più digitando alla riga di comando "._ddptype".

Per caricare il LISP occorre digitare alla riga di comando APPLOAD e richiamare il comando digitando 3DP.

Lo potete trovare a questo link.



domenica, marzo 11, 2012

Come partire con un team di lavoro di più persone #2

Ecco altre domande in una mail seguente che chiedevano altri chiarimenti sui workset e sui file collegati.

"1) abbiamo una conoscenza simile del programma
2) arriveremo ad un dettaglio al 200 con le sezioni in nero

3) quuanche dettaglio al 20

4) dei 21 piani abbiamo 6 tipologie

5) vorremmo utilizzare i workset


da qui la domanda.

1a) non mi e' chiaro come richiamare il file in locale

2a) come do ad un utente le autorizzazioni

3a) se lavoriamo su uno stesso piano utenti diversi possono lavorare inocntemporanea per esempioo sui muri?

4a) come poi risincronizzare....?

e' possibile simulare in locale

con 2 revit aperti uno con lo sfondo bianco e uno con lo sfondo nero cosi da aver ben chiaro i 2 utenti....

ti ringrazio.

ps sui link ho notato che non posso eseguire unisci geometrie quindi su di un edificio di 21 piani i link sono per piano?"

Ecco la mia risposta.

1a) il file locale si può chiamare come si vuole, l'importante è il percorso del file centrale che non deve cambiare; il mio consiglio è di mettere in appendice al nome del file, il nome dell'utente che ha generato la copia locale;

2a) un workset utente può essere di proprietà di un solo utente per volta l'importante è che a fine sessione di lavoro ogni workset venga "rilasciato". La proprietà di un workset implica che ogni modifica da parte degli altri utenti ad oggetti che insistono su quel determinato workset debba richiedere l'autorizzazione preventiva del proprietario. Se nessuno è proprietario di un workset si diventa temporaneamente "richiedenti" per determinati oggetti di quel workset fintanto che non si sincronizza nuovamente il proprio lavoro sul file centrale;

3a) Si è possibile, dipende anche da come si è deciso di organizzare i workset, potrebbe essere noioso continuare a dover chiedere delle autorizzazioni al collega proprietario o al collega che possiede il controllo di un workset adiacente alla lunga. Ma se le richieste non sono troppo frequenti da continuare a bloccare il lavoro non c'è problema.

4a) Per sincronizzare c'è un apposito tasto sia sulla Quick Access Toolbar sia nella scheda dedicata ai workset

La simulazione può essere fatta ma si deve avere cura di specificare in ognuna delle sessioni parallele un nome utente differente R>Opzioni>utente... se poi volete cambiare i colori di sfondo fate pure, ma non è affatto necessario perché non si vedono le modifiche apportate dagli altri in tempo reale; può servire per capire la funzione della sincronizzazione e come si utilizzano i privilegi di proprietario per bloccare/consentire le modifiche da parte di un richiedente ecc...

Per quanto riguarda i file collegati, si è vero che non si possono unire le geometrie ma sono dei ritocchi grafici che possono essere sistemati in 2D nelle viste che si deciderà andranno in tavola: è un piccolo prezzo da pagare di fronte a tutti i benefici che comporta in termini di gestione delle risorse macchina e organizzative del lavoro.

Come partire con un team di lavoro di più persone

Scrivo questo post a seguito della richiesta di aiuto che mi è pervenuta da uno studente del Politecnico di Milano. Il tema di progettazione è un edificio di dimensioni considerevoli e con una ventina di piani. A seguire un estratto della sua mail di richiesta.

"....la prof ci ha dato un progetto da elaborare in 4 ed ero intenzionato ad usare i workset.

ho letto questa tua discussione:

http://www.revitforum.com/forum/showthread.php?t=2566&highlight=workset

e la guida in linea ma non ho capito molto, forse mi mancano delle basi nel comprendere i workset.
Volevo chiederti se hai un piccolo ritaglio del tuo tempo di indicarmi come impostare in maniera base il lavoro.
Noi abbiamo una rete dove abbiamo accesso e vediamo tutti i file, io partirò da un mio template- file vuoto- questo e' il file di partenza dove la prima settimana lavorerò solo io, poi lo dovremo condividere per lavorarci in 4 contemporaneamente.
Il progetto e' un edificio di 60x60m di base su 21 piani.
Non ho capito come creare il file centrale , come lo richiamo su di un sistema locale e come poi dal locale aggiono il centrale...

come poi definire i workset e chi ci ha accesso...

diciamo i primi step per iniziare....."

Ed ecco la mia risposta:

Veniamo al tuo problema, forse ti sorprenderà, ma come prima cosa ti consiglierei di valutare strade diverse da quella della condivisione del lavoro (workset) per diversi motivi.
Innanzitutto perché è controproducente iniziare da subito un progetto con i workset attivi (a meno di avere padronanza degli stessi o particolari esigenze di coordinazione fra i colleghi della squadra di lavoro). In secondo luogo le dimensioni del progetto che devi sviluppare richiederanno, presto o tardi, l'utilizzo di file collegati per poter alleggerire la gestione di tutto l'insieme. In fine, per esperienza, se non c'è un livello medio equivalente di conoscenza del programma, si rischia di avere maggiori problemi a dirimere questioni di tipo tecnico legate all'organizzazione dei file piuttosto che problemi di progettazione.
La condivisione del lavoro diventa fondamentale quando si devono produrre le viste da mettere in tavola per cui è necessario che più persone collaborino in un tempo molto ridotto sullo stesso file per mettere quote, dimensioni, etichette, componenti di dettaglio, campiture, testi, ecc... (fondamentalmente elementi 2D).
Resta vero il fatto che è possibile suddividere il modello in workset e delegare ad ogni elemento della squadra di lavoro un particolare ambito progettuale, ma è, come dire, un benefico effetto collaterale.
Devi sapere che prima che introducessero i file collegati l'unico modo per poter lavorare in squadra su uno stesso file erano i workset, quindi questi ultimi sono una soluzione datata al problema.

L'importante nella nostra professione è sapersi fare le domande giuste, ed è lì che sta la genialità, le risposte che diamo sono solo il frutto delle conoscenze che possediamo in un determinato momento. Provo ad aiutarti in questo senso...

  • A che livello di dettaglio di progettazione si deve arrivare? (per sapere quanta modellazione e quante tavole occorrerà produrre, meglio avere un elenco tavole cone specificato cosa andrà finirà su di ognuna)
  • Con quale stile grafico si deve presentare il progetto? (questo può avere ricadute importanti in termini di preparazione ottimale del/dei template iniziali... in ogni caso si può sempre cambiare in corsa)
  • E' possibile individuare degli elementi di ripetitivi nel progetto? (ad esempio ci sono 21 piani, sono tutti diversi tra loro o sono variazioni di un piano tipico? all'interno di un piano ci sono strutture che distributive che si ripetono? - stanze di albergo o di ospedale, appartamenti ecc... questo aiuta ad individuare una possibile scomposizione del progetto in file collegati, ricorda il motto: "dividi e conquista")
  • Da quante persone è composto il team di lavoro? quali sono i punti di forza di ognuno? (ok sono 4 persone, ma con quale conoscenza del programma? chi possiede la migliore attitudine progettuale specifica sui layout interni oppure sui prospetti o sulle strutture ecc?...è importante per stabilire i ruoli organizzativi e per sapere a chi assegnare i compiti di progettazione sia nel caso si ricorra ai file collegati sia nel caso dei workset)

L'organizzazione tipica dei file collegati è la seguente: c'è un solo file "Master" che conterrà le tavole del progetto complete di cartiglio e le relative viste; all'interno del file master vengono collegati tutti i file che contribuiscono alla realizzazione del modello. La scomposizione del modello in sotto-parti dipende moltissimo dalle caratteristiche geometriche e funzionali del progetto, quindi non c'è una regola precisa da seguire.
Un gruppo di file sarà dedicato alla modellazione del contesto e delle sistemazioni esterne. Un altro gruppo di file definirà l'organismo edilizio che state progettando.
Banalmente dopo aver raccolto ciò che si "vede" architettonicamente in un edificio, si può separare la struttura con gli assi strutturali da tutto il resto, raccogliere insieme tutto ciò che riguarda la parte impiantistica (canalizzazioni dell'aria, adduzioni, scarichi, ventilazioni, aerazione dei vani scala, macchinari impianto meccanico e quadri elettrici, ecc...), eventualmente separare i presidi antincendio (estintori, naspi, sprinkler, allarmi sonori e visivi, segnaletica ecc...) e così via per quel che riguarda la scomposizione secondo il sistema tecnologico e funzionale.
Geometricamente invece potresti separare l'edificio per piani, per settori in pianta, per volumi unitari ecc... dipende dalla morfologia del progetto, dall'altezza dei livelli di progetto e dal contesto, ecc...
Queste suddivisioni hanno lo scopo di definire gli ambiti progettuali sposandosi bene con la caratteristica fondamentale di un processo di progettazione, che è per sua natura iterativo e ciclico, ma che altresì impone, con violenza concettuale, dei salti di scala passando gradualmente dal generale al particolare, dal tutto alle parti.
Verosimilmente quindi si potrà partire da un unico grande file che andrà sempre più definendosi nelle sue parti, poi a tuo giudizio potrà cominciare ad essere suddiviso per essere gestito anche dai tuoi colleghi di lavoro (che potranno avere a loro volta collegati all'interno i file che non competono loro per avere un aggiornamento semiautomatico di quello che gli altri stanno facendo ogni volta che li ricaricano manualmente o riaprono il file su cui stanno lavorando).
Tutti i file vengono collegati nel Master e in questo caso ci si potrebbe avvalere dei workset per chiudere la documentazione delle tavole.

Per come si utilizzano tecnicamente i collegati ti rimando alla guida in linea e a numerosi discussioni sul forum se non li hai mai utilizzati prima.

Velocemente sui workset, per poterli utilizzare si devono abilitare una prima volta andando nell'apposita scheda e cliccando sul tasto dei workset.
Da quel momento il file in cui stai lavorando diventa il file centrale, per questo motivo sarebbe bene che si trovasse già al momento della creazione dei workset nella posizione accessibile a tutti dove risiederà per tutto il tempo del progetto. Infatti basta rinominare una cartella del percorso o semplicemente copiarlo o spostarlo per farlo diventare una copia locale. Dalla stessa scheda si possono creare quanti workset si vogliono, è necessario poi avere cura di spostare gli elementi del modello sui workset corrispondenti.
Il file centrale è il vero file di lavoro con copie di backup che permettono di riportare il file ad un salvataggio precedente, quello che Revit consente è fare lavorare più persone sullo stesso file attraverso una copia locale del file centrale, una copia cioè specifica per ciascun utente.
Per questo è utile, ma non fondamentale, avere un numero di workset (leggi collezioni di oggetti) minimo superiore o uguale al numero di persone che compongono il team di lavoro.
Se si usano i file collegati e i workset si potrebbe creare un workset per ciascun file collegato o per gruppi di file collegati che abbiamo una caratteristica importante che li accomuni.
Quando si lavora in una copia locale del file centrale si deve avere cura di sincronizzare le proprie modifiche con il file centrale in modo da:
  • recepire le modifiche dei colleghi
  • rendere pubbliche le modifiche apportate al modello
E' buona norma sincronizzare frequentemente la propria copia locale con il centrale per ridurre al minimo l'eventuale insorgere di conflitti o la malaugurata perdita di dati del file centrale per cause esterne al programma (danneggiamenti del server di condivisione ecc...). Infatti è possibile trasformare una copia locale in file centrale quando la si salva con nome e si specifica con apposito segno di spunta nelle opzioni di salvataggio.
In caso di incoerenze o interferenze Revit interviene automaticamente segnalando un errore o un avviso che specifica quali elementi sono coinvolti e gli utenti che stanno generando il conflitto.
L'assegnazione dei workset deve rispecchiare possibilmente le attitudini progettuali emerse dall'indagine preliminare, serve nel caso di progetto in fase di sviluppo per stabilire le dovute gerarchie all'interno del team di progettazione su tematiche specifiche.