Pagina's op IkLeerBIM

zaterdag 30 september 2017

Tool om een Revit Project af te stemmen op de Nederlandse BIM standaarden

Today is another D-Day.

Na een lange tijd van nadenken, maken en aanscherpen stel ik vandaag, ook namens RoosRos architecten een eerste versie beschikbaar van een nieuwe tool. Deze tool heb ik gemaakt voor Revit modelleurs om sneller en beter aan meerdere BIM standaarden te kunnen voldoen. Het zijn veelgebruikte Nederlandse standaarden. De Basis ILS en de NL-RS Revit Standards. De tool lost natuurlijk niet alles op maar automatiseert wel die onderdelen die daarvoor geschikt zijn. Ook is de tool aanpasbaar voor de nodige flexibiliteit.

Dat de tool werkt, bleek wel toen ik de Revit Standard Template als proef gebruikte. Enerzijds zie je dan hoe ongelofelijk compleet en zorgvuldig deze in elkaar is gezet. Maar toch haalt de tool er nog steeds omissies uit. Mensen zijn nou eenmaal geen computers. En als een standaard die met zoveel aandacht gemaakt is al kleine foutjes bevat, hoe zit het dan met een normaal project…

Wat doet de tool wel en wat niet.

De tool helpt om de gecodeerde onderdelen in de naamgeving van bijna alle Revit Families en Types vast te stellen op basis van de Revit Standards afspraken. En kan die vervolgens weer wijzigen in Revit.
Dit geld niet voor de Materials en ook niet voor de Filled Regions omdat die "een afwijkende afspraak" hebben. Je zou kunnen zeggen dat je beter die onderdelen uit de Revit Standard Template kan gebruiken, dan dat de naamgeving in Revit worden aangepast. Overigens lijken het geen verplichte onderdelen te zijn.

De tool helpt bij het kiezen van een Assembly Code.
Het invullen van deze code is verplicht bij de Basis ILS. En daarnaast gebruik ik het eerste deel van deze 4-cijferige code voor in de naamgeving van het object. Sterker nog. Als je de 2-cijferige NL-Sfb code in de naamgeving wilt aanpassen zul je eerst de Assembly Code moeten aanpassen.
Ik maak gebruik van de UniformatClassifications_NL-SfB die de Revit Standards meesturen.  Als je deze niet gebruikt in Revit zal je niet optimaal gebruik kunnen maken van deze tool. Sterker nog, de tool zal proberen de Assembly Code aan te passen op basis van een verkeerde tabel - kijk uit dus.

Maar het invullen van de Assembly Code geeft ook een eerste aanzet voor een juiste IFC mapping. De tool nodigt uit echt meer te halen uit de IFC. Natuurlijk kan je daar heel veel meer woorden aan vuil maken: Niet alles is ondersteund, veel onderdelen zijn ‘hardcoded’ etc. Maar het is goed dat er beweging in blijft en dat het allemaal wat toegankelijker wordt.
De mapping tussen Assembly Code (NL-Sfb) en ifcEntiteit is nog niet compleet (ik ben nu gestopt bij 51 anders komt het nooit klaar). En ook inhoudelijk mag en kan, er best gediscussieerd worden over welke ifcEntiteit nu de juiste is. Ook is op enkele plekken de relatie niet 1 op 1 te maken en val je terug op de Revit Category Mapping. Dan blijft de mapping vooralsnog leeg. Eventueel maken we in de toekomst de mapping matrix een laag dieper door het aan te vullen met de Revit Category.
Het is ook goed te beseffen dat het een voorstel/principe mapping is. Je kan per object een betere ifcEntiteit kiezen uit een drop down list.
Waar nodig is de link naar de online Building-Smart documentatie ook aanwezig >>.

Wat betreft de Basis ILS. Veel afspraken hebben te maken met de opbouw van een project (0-punt, bestandnamen, lagenindeling, doublures, gebruik van een correct materiaal –wat dat ook is-). Daar helpt de tool natuurlijk niet bij. Loadbearing is in Revit een Instance Parameter en brandwerendheid wordt ook vaak op Instance niveau opgelost. Daar helpt de tool ook niet bij want de tool kijkt op Type niveau. In en Uitwendig kan in de volgende versie wel worden meegenomen. Ook deze heeft een relatie met de Assembly Code – NL-Sfb 4-cijferig.
De tool helpt vooral met benaming van elementen, ifcEntiteit. En dus ook met het mogelijk maken van de bijbehorende Common Property set. Maar als een trap met een Model-in-Place functie of als Generic Model wordt gemaakt … zul je toch echt met elkaar moeten gaan praten of dit juist een vreselijk goede of juist vreselijk slechte oplossing is. Eventueel kan de volgende site een 'oplossing' bieden 😊

Hoe gebruik je de tool.

In de eerste plaats: op eigen verantwoordelijkheid. Begrijp me goed. Ik ga er zelf ook mee aan de gang en zou dat niet doen als ik er geen vertrouwen in had. Maar ik wil geen gezeur. 
Dus eerst Revit Synchroniseren of het Project opslaan. En dan pas aan de gang. Dit is sowieso een goede gewoonte als je met Dynamo aan de gang gaat. Houd altijd een backup achter de hand. Mocht het toch nodig zijn.

De tool is HIER te downloaden. Download dit en zet alles bij elkaar in 1 map naar keuze zodat de relatieve verwijzingen blijven werken. Eventueel kan je de .DYF bestanden verwijderen als je al over de bijbehorende Packages beschikt. De verwachting is wel, dat er in de loop van de tijd meerdere aanpassingen aan de bestanden in .ZIP file gedaan gaan worden. Ik zal dan de bronbestanden gewoon veranderen. Het plan is wel om dan het een en ander van een log met datum te gaan voorzien.

In de download ZIP zitten 2 Dynamo scripts: BIM_Standaard__Excel_naar_Revit.dyn en BIM_Standaard__Revit_naar_Excel.dyn.  De namen spreken voor zich. In de scripts zitten enkele Nodes uit Packages die ik nodig had. (Clockwork, Rhythm, Springs) Voor de zekerheid heb ik deze .DYF Nodes ook los in de ZIP file zitten.
Ook kan je het enigszins aangevulde NL-RS excel bestand 160222_NLRS2.5.2_Naamgeving componenten.xlsx vinden in het .ZIP bestand. Hierin staan de naamgevingsafspraken van de Revit Standards op de Sheets pos1 t/m pos7.
Over de kleine aanpassingen in dit Excel document, wellicht op een ander moment meer. Er zijn wel paar nieuwe Sheets aangemaakt. Dynamo maakt de Sheets Dynamo_Written en Dynamo_Error_Report aan. En overschrijft deze elke keer weer. Er zijn nog 2 instellingen Sheets: UniformatClassifications_NL-SfB en IFC Settings. De eerste Sheet spreekt voor zich. En de Sheet IFC Settings bevat alle benodigde lijsten met IFC benamingen.


De Sheet waar je daadwerkelijk mee aan de gang gaat is de groene Dynamo_Read. Als je het prettiger vindt zou je alle andere Sheets, op de door Dynamo beheerde na, kunnen verbergen.

Voor het gebruik van de Sheet heb ik mijn best gedaan om zo veel mogelijk visuele feedback te geven. Dus grijs betekend: ter info. Witte cellen kan je invullen. Rood bruin geeft de waarschuwing dat een onderdeel aandacht behoeft. En groen betekend dat een waarde veranderd gaat worden.
Wat ook opvalt zijn oranje Revit Categorieën. Deze onderdelen zijn oranje gemaakt omdat ze wel Families en Types zijn, maar dat deze Revit Categorie ontbreekt in de tabel voor positie 3. Dit kan later in overleg met RS foundation welicht worden recht getrokken. De oplossing voor veel onderdelen die missen liggen overigens redelijk voor de hand.
De koppen boven de kolommen spreken ook voor zich. En per eigenschap kunnen er meerdere kolommen zijn. Bijvoorbeeld, de Family Name bevat de kolom – OLD – en – NEW -, naast 3 kolommen die gezamenlijk de nieuwe Family Name gaan vormen. Als je niks invult bij Description dan veranderd de nieuwe naam niet.

Deze Sheet staat natuurlijk stampvol met formules en voorwaardelijke opmaak. Dat is heel handig voor tijdens het werken. Maar als je van project switched wil je natuurlijk niet dat alle handmatig ingevulde cellen het nieuwe project gaan vervuilen. Je moet tenslotte weer schoon beginnen. Daar kun je natuurlijk een Excel macro voor schrijven of desnoods opnemen.  Of je kopieert elke keer handmatig een schone regel over de hele lijst heen. Je zou rij 1958 daarvoor kunnen gebruiken. Dit stukje zorgvuldigheid is echt nodig om brokken te voorkomen. Verder kan er volgens mij niet echt veel stuk. Uiteindelijk is het "what you see is what you get".

BIM_Standaard__Revit_naar_Excel.dyn
Met het eerste Dynamo Script schrijf je alle Types in het Project weg naar de Sheet Dynamo_Written. Misschien duurt het even, als er veel weggeschreven moet worden. Ook kan je het gevoel hebben dat Excel zijn scherm niet goed ververst. Maar als Dynamo klaar is klik je op Excel en ga je naar de Sheet Dynamo_Read en wijzigt alles wat wilt wijzigen. Gewijzigde onderdelen worden groen aangegeven. Ga dan weer terug naar Dynamo en start het script BIM_Standaard__Excel_naar_Revit.dyn. Dynamo leest vervolgens de Sheet Dynamo_Read. Alle kolommen die – NEW – heten gebruikt Dynamo als input voor mogelijke wijzigingen in Revit. Ook dit kan even duren afhankelijk van hoeveel wijzigingen het betreft. Als Dynamo klaar is, schrijft Dynamo in de Sheet Dynamo_Error_Report welke onderdelen mislukt zijn. Misschien dat in toekomstige versie hier ook de gelukte onderdelen moeten komen, maar nu dus nog niet.

BIM_Standaard__Excel_naar_Revit.dyn
Dat is het voor nu even. Wellicht binnenkort meer berichten over de technische werking voor wie daarin geïnteresseerd is. En collega’s vroegen al naar een filmpje waarin de tool daadwerkelijk gebruikt wordt en de werking wordt uitgelegd. Lijkt me een goed idee. Maar nu eerst maar eens plaatsen.

Ik zou zeggen probeer het gewoon eens uit. The taste is in the eating.
Veel succes. Vergeet niet eerst op te slaan voordat je Dynamo start.

En als er vragen of opmerkingen zijn hoor ik het wel.

dinsdag 26 september 2017

Enkele 'tips and trics' voor het maken van op 3D gebaseerde details in Revit

Zo maar enkele 'tips and tricks' voor het maken van op 3D gebaseerde details in Revit.

Voor degene die dacht dat hij het altijd al deed:
Zet je Display Model eens op 'Do not display'. Hoe hangt alles wat je nu ziet aan elkaar?

Voor degene die dacht dat dat niet kan "omdat het er niet uitziet".
Of omdat het niet "correct en efficiënt" kan.
Lees onderstaande eens door en probeer het eens uit.

Display Model - Normal en Do not Display

vrijdag 30 juni 2017

Automatiseren met Dynamo

De laatste tijd zijn we ons bij RoosRos architecten meer en meer in Dynamo aan het verdiepen.
Behalve dat het gewoon erg leuk is, kan Dynamo ook erg behulpzaam zijn om arbeidsintensieve en eenvoudige taken in Revit te automatiseren. Hoe dommer hoe beter zou je kunnen zeggen.

Hieronder een voorbeeld van hoe ik en mijn collega Pieter Schipper onderdelen uit het proces om tot verkooptekeningen te komen, hebben geautomatiseerd. Natuurlijk zijn er altijd de laatste puntjes die je even na moet lopen, maar een groot deel automatiseren geeft een goed gevoel.

 

Zonder alle 5 scripts helemaal uit te spitten per script toch een paar "wistjedatjes".

01 Area from Room
Het koste best wat moeite om de Rooms samen te voegen tot 1 contour en de binnenste lijnen te verwijderen. Ik was prettig verrast dat native Dynamo Nodes in staat waren uit zichzelf Room Boundaries op basis van de Wall Centre Line aan te leveren. En deze lijnen ook nog op te splitsen als er een andere wand op aan sloot. Daarnaast bleek het opschonen van de inwendige lijnen het meest soepel te lopen door van alle Curves een String te maken en deze met elkaar te vergelijken. Ik had niet gedacht dat Dynamo sneller met een String om kon gaan dan met harde geometrie. Maar het werkt.
Wensen voor verbetering zijn er natuurlijk ook. Want de contour van het gebouw klopt natuurlijk om meerdere redenen niet. En ik heb ook weinig moeite gedaan voor een mooie plaatsing van de Area zelf. Uiteindelijk was een correcte Area voor dit proces niet het belangrijkste aangezien ik het vooral wil gebruiken om per woning een View Crop met offset te maken.

02 Area to View on Sheet
Bij het maken kwam ik erachter dat de onzichtbare binding van door Dynamo gemaakte Revit elementen erg lastig is als je er niet op verdacht bent. Dynamo verwijderd doodleuk zaken die bij de vorige keer gemaakt zijn. Gelukkig zijn er oplossingen: Custom Nodes die niet binden, Dynamo afsluiten zonder op te slaan, Dynamo Primer gebruiken, of de Bake Node van Beaker.
Het uitlijnen van een View op een Sheet vraagt wat rekenwerk maar het kan.
En ik weet nu ook dat als je een Revit Boolean Parameter wilt wijzigen je een 0 of een 1 gebruikt.
Mijn collega Pieter Schipper heeft zelf een mooi stukje Python script samengesteld om de Annotation Crop in te regelen.
Verder zat er een rare bug in die Views hoger dan de Sheet hoogte niet wilde plaatsen. Dan de Sheet eerst maar hoger maken en later weer terug. Als het niet kan zoals het moet, dan moet het maar zoals het kan!
Wensen voor verbetering zijn er ook. Ik heb niet heel veel extra energie gestopt in de naamgeving van de nieuw aangemaakte Views en Sheets. Maar het is allemaal uniek en je kan het in Revit zo recht zetten waar nodig.

03 Ruimtemaatvoering plaatsen
Dit was best een zoektocht om een acceptabele oplossing te vinden. Maatvoering voor verkooptekeningen zijn doorgaans iets kleiner dan wat de aannemer gaat maken. Dat is met reden, want in de bouw kunnen afwijkingen optreden en iedereen krijgt liever meer dan minder huis. Toch?
Het punt is alleen dat alle tekenpakketten exact zijn en voor zover ik weet, is Revit niet in staat om Dimensions naar beneden af te ronden op een zelfgekozen manier. Ook zijn onderdelen in een Multi Segment Dimension slecht aan te roepen in Dynamo. En tenslotte is het uiterlijk van een Dimension ook niet helemaal zoals wij dat graag zagen. Een Detail Item bleek hier de oplossing.
Voor de plaatsing hebben mijn collega Pieter Schipper en ik enkele getrapte mogelijkheden ingebouwd. Op die manier ontstaat er een mooi leesbaar resultaat.
Verbeteringen zijn ook hier. De laatste update van de Package Data-Shapes (die de UI Nodes heeft gemaakt) heeft de mogelijkheid om voorkeur keuzes aan een lijst toe te voegen. En eigenlijk zou je ook nog moeten kunnen filteren op ruimtegrootte.

04 Ruimtemaatvoering update
Hier wordt ik pas echt enthousiast! Geweldig hoe Dynamo in staat is om een RayBounce te maken. Ook hier was de Data-Shapes Package onmisbaar. Hierdoor konden we de RayBounce ook laten reageren op Linked Models, wat natuurlijk standaard is.
Het doorgeven van waardes aan gedraaide en gespiegelde Detail Items was even puzzelen (vector nachtmerrie ;-) Maar het is gelukt.
Verbeteringen hier: Tja. Als een RayBounce tegen een Window aankomt, kunnen we die gevonden waarde dan niet corrigeren naar de Wall waar de Window in zit? Gaat wel erg ver denk ik... En je moet toch ook blijven nadenken.

05 Print PDF
Yes. Eindelijk een betere manier om te kunnen printen. Niet alleen het selecteren van de te printen Sheets, maar ook het printen zonder elke keer het formaat op te moeten geven als die wijzigt. Door het formaat van de Sheet te koppelen aan een Printersetting loopt het allemaal heel soepel. En naamgeving van PDF bestanden kan op veel manieren en leek niet ons grootste probleem.
We hebben hier ook echt gebruik moeten maken van de Archi-Lab_Grimshaw package. Helaas moesten we nog wel flink op internet op zoek, om de laatste aanscherpingen aan zijn Python script te doen, om het echt werkend te krijgen. Maar het is gelukt.
Ook hier heeft mijn collega Pieter Schipper intensief meegeholpen om met name het selectie gedeelte en de UI in te regelen.
Verbeteringen hier: We zouden meer werk kunnen maken om de pdf bestanden op de juiste plek en met de juiste naam op te slaan. En in elk project zitten wel een paar uitzonderingen die op een bijzondere manier geprint moeten worden. Daarom zouden we graag alle printersettings die in een project zitten in 1 lijst te kunnen inlezen, om deze te kunnen gebruiken in Dynamo.

vrijdag 24 februari 2017

A tool to build Revit's IFC mapping tables - feedback and revision




Based on some questions I received lately I would like to explain some things about the spreadsheet.


First of all I did update the excel spreadsheet recently to fix a translation bug in the formula (Ctrl H . the Dutch CEL("inhoud" for CEL("contents" in the whole model 6131found) It works as good as it needs to be for now. And the waiting is still on Autodesk to really change the way to interact with IFC. The spreadsheet is nice for a + user. But most people can do their job real nice without it.

The spreadsheet consist of 4 sheets (in green) for making an import, export and parameter mapping table. The 4th green sheet is the one I like the most, because I learnt the most about IFC with that sheet. All the other sheets are mostly used for reference. The first 3 green sheets have a grey part. This is the actual mapping text. You should select the cells that you need, copy those to clipboard and paste them in a new .txt file. Or simply change an existing table. The grey part will change if you change orange cells beside it. The formula in the grey cell will report and look first at the column with >>1 (in Row 1), and then to the column with >>2 and so on. It’s like a filter. The first rows will contain some + options. Just read and try, or simply leave it as is – it’s not that important.

The spreadsheet links .txt files while opening the file. You should check that all the files are (re)loaded by excel correctly.  Later you can change every file differently if you want to. Just check the Data Tab \ Connections group \ Connections.
Most of the .txt files will appear in the ‘reference’ sheets I mentioned earlier. If you are not familiar with data connections in Excel, just google a bit. I found some English explanations here. tutorialspoint.com - External Data Connection
When actively using this spreadsheet with different projects, you can change the export.txt, import.txt with every new project. Or reload these connections with new project specific .txt files. You can make those .txt files in Revit in the IFC option menu – Save As.. Exporting from a project will make sure that you got every subcategory covered.

You can later on also change the standard DRS / standard AIA settings for your own standards. You can do this if you feel more comfortable with the spreadsheet. By doing so you will able make your own referencing standard.


Then the most important part...


Fill in Revit Export 
This export table suggest that you can actually map every single revit subcategory to a different IFC entity. But it mostly works as an do or don’t export table in Revit. Using the IFCExport parameter is still necessary.

Fill in Revit Import
Is nice, but importing an IFC works already fine, by just linking everything and use Revit’s native settings. If you want to do more with the import part, you should also look into this guy.
http://geometrygym.blogspot.nl/ and
Ifc Import Class Category Mapping

Fill in ParameterMapping
Is nice for a + user who wants to know all the options that native IFC has to offer, and wants to use it. But there are also other ways to add parameters to an IFC entity and they also work fine.
If you want to map IFC common properties to your own / specific Revit Shared Parameters. Override or change the link for the file RevitGG_IFC Shared Parameters_20121102.txt to your own Shared Parameter File. This will be loaded in 1 of the last Sheets called “Shared Param DRS”. The whole Column C in that Sheet is an Excel Named Range with the Name “Shared_Param_DRS”. This will be the content of the drop down menu in the Sheet “Fill in ParameterMapping”, Column M so you can use it.
With the Sheet “Fill in ParameterMapping” you need to copy only parts of the grey cells that you really want to map. Skip in the .txt editor the PropertySets or Properties that you don’t want to use. Check the Data Type of the properties to make sure it will work. I didn’t build a check for that. And everything will be “Text” at the moment. Some Properties are hardcoded in the IFC exporter. So if it doesn’t work as expected, do ask on the Sourceforge side. This is not all documented at the moment. There is something more info over here:
Mapping of Revit parameters to IFC values 
Custom parameter mapping
Revit IFC Support for Extended FMHandOverView Definition (used for COBie)

IFStructure 
I like this one a lot. It gave me a lot of inside in the IFC structure / missing entities / new types / new parameters that I didn’t know off. And the direct link to the building smart site is very convenient. Because of the last 3 remarks I did stop working on this spreadsheet. And It’s good enough for now. I did had 1 request to add the IFC layers but didn’t build it. And don’t know if I will add it in the future. What I did do, is follow the conversation on the Sourceforge site. And I will add a few links. Perhaps these conversations with Autodesk will clearify some IFC related question that you also have, just as it did for me.
Inherited propety sets
IFC export mapping table

Have fun with this spreadsheet. Hope it helps a little, to tweak IFC and Revit.
Or that it at least will give more clarity on IFC.

Kind regards,
Teun de Vries.

Also thanks to Rene Pellicer Garcia for your feedback.