Pagina's op IkLeerBIM

Posts tonen met het label Excel. Alle posts tonen
Posts tonen met het label Excel. Alle posts tonen

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.

vrijdag 6 februari 2015

A tool to build Revit's IFC mapping tables - part 1,5

A few weeks ago I released my beta tool to create IFC mapping tables for Revit. Since that time there have been a lot of people who have downloaded this spreadsheet. And I also gave a presentation at the RevitGG.

Meanwhile I made ​​some improvements. And I was wondering if there are still more more wishes. If there are such kind of questions, I would love to hear them. You can email me on Linkedin


maandag 24 november 2014

A tool to build Revit's IFC mapping tables

With this post I would like to share an Excel document, with which you can build the mapping tables that Revit can use when importing from, or exporting to IFC. It is still a bèta. You can use it or even change it, but at your own risk of course. And if you do so, I would love to know what your experiences are. The RevitGG is also using this tool to help build some parts for in the Dutch Revit Standard the DRS.


The Excel workbook is without macro's. But it does import the TXT files that Revit generates and later can reuse. You should overwrite the TXT files from the downloads with your own ones. Build new mapping tables in Excel and copy the cells you need and paste them in the specific TXT file. After saving these files you can use them and  import them back in Revit.

Why did I build something like this?
Well I really like working with Revit, but the way Revit wants us to map Categories and Parameters between Revit and IFC is just ... well ...  And in the end I'm pretty sure that these things will change in time. But for now, I wanted it to be fixed as good as I can. Besides starting a little conversation about a better way to facilitate these things. My Excel workbook can be a good starting point.

What does this Excel workbook do "better" than the native Revit way?
  • It has dropdown options to choose options that are relevant. I really want dropdown options with the IFC Parameters. And I don't want to look them up on the Building Smart site, or in a post on the sourceforge site for the IFC exporter for Revit.
  • It has direct links to the documentation on the site of Building Smart based on the chosen option. No. I'm not a native IFC speaker. I'm not even a native English speaker. (really) So I do need some help to know what I'm doing.
  • It has a few reference mapping tables, and also an option to fill in the blank subcategories just as the other subcategories So you can build your own 'standard' besides the one the Revit offers. Of course you can make every exception that you would like to make. This is possible because of the hierarchy in the formula as shown at the head of the Columns.
  • It is also possible to omit a group of categories
  • It has a building relation between the import table, the export table and the parameter mapping table. In a perfect world you want to import exactly what you exported.
  • It has a sheet where you are can do some research on the IFC structure. The purpose of this sheet is to find possible omissions in the IFC parameters that we use and those that we don't use, but perhaps should use. Just change cel K17 on the sheet IFC structure.
So overall it should be faster, gives more inside in IFC and the tables are related to each other.

So perfect!
Well almost. But it is a beta. And there are still some weird things.
  • This Workbook is based on IFC 4x0 make sure that it's supported or that you don't use IFC4x0 specific options or changed names.
  • The Parameter Mapping Sheet is a compleet list. So for the moment, you need to skip the rows in the TXT file that don't have a defined value. So you don't map to nothing or to zero. Furthermore, I build the Sheet as I think it should be. And based on the header of the example TXT file. But.. the only working files I have seen are much easier. It's more about adding specific Revit Parameters without adding them all, or using all the Schedules for export, rather than really mapping from Revit to real IFC specific parameters. A working parameter mapping TXT looks like: 
PropertySet:    GiveItAName    T    IfcBlaBlaType
RandomRevitParameter TextOrSomethingElse
etc.
  • Revit still has some hard coded mapping.
  • I made a drop down option with related IFC Types based on the chosen IFC Category, but the "Type" Column in the Revit's IFC Export options doesn't work when importing the TXT files. So the IfcExportType will be a better option if this one is important.
  • IFC has more categories and parameters than Revit uses right now. I'm not sure what to think of that. 
  • Some Families are still much better off by using the IFCExportAs parameter.
  • This workbook uses formulas instead of macro's. That's nice, but if you need more rows than the number of rows that i have build, you need to adjust the workbook. 
  • I also tried to use Named Ranges and indirect references for later adjustments, but there could be a slip of the pen somewhere.
But overall I'm quite happy with this beta tool. And I would like to share it with Revit users.
I also would try to start a little (open) conversation about making Revit even better.

Hope it helps and have fun.
Download

For Dutch speaking people there is a youtube movie of a RevitGG meeting where i demonstrate and explain this tool a little bit more. It's about 75min.



 


There will be updates in the text and the spreadsheet -it's a bèta remember-. So check out the latest version of the text or the spreadsheet if you have problems.
update / 26-11-2014

With the sheet "Fill in ParameterMapping" you can build:


 - "ParameterMappingTable.txt" wich should be placed in the folder where the export DLL is located. This will map the Common Pset between Revit and IFC
 - "DefaultUserDefinedParameterSets.txt" wich hasn't a specific location. You can select the file in Export Setting at the tab "Export property sets" This one will create your own User Defined Property Set - You can discus if this should be 'best practice'
You can read here some more on the SourceForge site:

The Sheet "Fill in ParameterMapping" is mainly based on the "ParameterMappingTable.txt". You can build a "DefaultUserDefinedParameterSets.txt" as shown in row 12: Choose a Revit Parameter and make sure that Column K is linked to the Columns M, N and O. See Cel K12 for an example formula.

You will see that this method will automatically create new rows in the spreadsheet.

vrijdag 28 februari 2014

Select alle ID's via een Revit HTML Report

Altijd al eens in Revit alle items in een Error Report, een Warning Report of een Clash Report tegelijkertijd willen selecteren? Nou ik wel. Een manier /omweg om dit te doen is via Excel. En anders is het wachten op een goede Addin of aanpassing van Autodesk. Onderstaande mogelijkheid is geen 100% score maar handig genoeg.
Ik wil af en toe alle elementen in deze lijst tegelijk kunnen selecteren.
Voordat we in Excel aan het bouwen slaan: Onderstaande functie werkt goed genoeg. Maar als de lengte / aantal karakters van de Element-ID te veel wisselt - wat ik niet helemaal kan overzien - zal de functie maar gedeeltelijk werken. Ik selecteer namelijk een ID met een vast aantal karakters. In mijn project kwamen er ID’s in de lijst voor met 6 en 7 karakters. Voor de onderstaande formules zou ik dan het beste 7 kunnen gebruiken aangezien de extra spatie niet relevant is. Een andere optie is om de lengte van de ID per stuk vast te stellen. Dit zal de eenvoud van de complexe formule niet ten goede komen al is het niet onmogelijk.


Sla een Report op als HTML. Link dit bestand in Excel. Bij de instellingen van het importeren kan je aangeven dat deze link steeds vernieuwd dient te worden. Op die manier kan je het HTML bestand elke keer weer overschrijven, met een nieuwe versie. Zorg dat je bij het importeren de exacte HTML tekst ziet zonder opmaak. Dit vereenvoudigd het geautomatiseerd zoeken naar de ID’s omdat er maar 1 kolom is.

Ga op een ander tabblad in Excel een mooie formule bouwen. Doe dit in verschillende stappen. En kopieer de formule vervolgens door naar beneden. Op zo'n manier, dat er naar elke regel in de HTML een verwijzing is in de formules op het andere blad.
  1. We beginnen met bouwen in de Cel A2. De formule moet zoeken in de inhoud van cel A2 op het andere blad naar de benaming ": id ". Doe dit met de functie VIND.ALLES. (FIND) In de eerste regel van het Report zal natuurlijk geen ID voorkomen aangezien het een kop is. Maar verderop komen ze wel voor.
  2. Rapporteer de ID op basis van bovenstaand startpunt in de regel. Doe dit met de functie DEEL (MID). De ID is bij mij 6 of 7 karakters lang Dus je kan 7 gebruiken want de eventuele extra spatie is niet relevant. Het startpunt voor de functie is 5 karakters verder dan de waarde gevonden bij punt 1. (": id " = 4 karakters). Als je het nu al moeilijk vind kan je overigens beter afhaken. Want we zijn er nog niet.
  3. Aangezien niet elke regel een ID herbergt is het goed om de foutmeldingen #WAARDE te ondervangen. Dit doe je met de functie ALS.FOUT (IFERROR). Laat de functie de ID rapporteren als die er is. En niks rapporteren als er geen ID is. Dit kan je doen met "".
  4. Voeg de ID’s van alle regels samen, door de inhoud van elke Cel te koppelen met de inhoud van bovenstaande Cel. Dit doe je met de functie TEKST.SAMENVOEGEN (CONCATENATE). Voeg tussen de ID’s een semicolon toe.
  5. Vanzelfsprekend moeten we deze samenvoegingen gaan voorzien van enkele voorwaarden. Als de gevonden ID al in bovenstaande Cel voorkomt, hoeft de ID immers niet meer te worden toegevoegd. Hiervoor gebruiken we een combinatie van bovenstaande functies. De totale formule wordt wat minder overzichtelijk. We gaan nu ook gebruik maken van de functie ALS (IF). Met woorden: Voeg de inhoud van de vorige cel samen met ";" en met het gevonden ID nummer, mits deze niet al voorkomt in bovenstaande Cel.
  6. Als de Cel erboven leeg is, moet er ook niks worden toegevoegd. Dit doen we met de functie ALS (IF). De meest logische plek voor deze voorwaardes is de plek waar uiteindelijk de ID wordt toegevoegd. We gaan dit stuk opzoeken en moeten deze aanpassen. De ALS.FOUT (IFERROR) functie gaan we aanpassen. Want er is geen foutmelding meer als de functie hier eenmaal aankomt. De controle is namenlijk al eerder gebeurt. Er hoeft alleen een semicolon en de ID worden samengevoegd. De semicolon uit punt 5 verplaatst dan naar deze nieuwe plek.
  7. Als we het nog iets netter willen maken, kunnen we zorgen dat de hele tekst niet begint met een semicolon. Hiervoor moeten we de semicolon nog van een voorwaarde voorzien. Namelijk dat wanneer de bovenstaande Cel leeg is, er ook geen semicolon moet worden toegevoegd.
  8. We lijken nu klaar te zijn, maar er zijn nog 2 aandachtspunten.
    Wanneer de HTML veranderd, zijn de verwijzingen stuk. Daarvoor moeten we de directe verwijzingen vervangen door een indirecte verwijzing. De indirecte verwijzing gaan we eerst op een andere plek maken, voordat we deze vervangen op plek van alle directe verwijzingen in de grote formule. We gebruiken de functies ADRES (ADDRESS), RIJ (ROW) en INDIRECT (INDIRECT). ADRES (ADRESS) levert de verwijzing op in de vorm van een tekst. Met RIJ() rapporteren we het rijnummer van de Cel die deze formule bevat. En met INDIRECT kunnen we de inhoud van de indirecte verwijzing inlezen en rapporteren. In dit geval als tekst.
  9. Nu gaan we in de grote formule de directe verwijzingen (Blad1!A2) vervangen voor de indirecte verwijzing INDIRECT(ADRES(RIJ();1;4;1;"Blad1")). De Formule is nu officieel onleesbaar geworden. Maar het gaat goed! We hebben nu alle unieke ID’s te pakken. En de formules zijn bestand tegen het overschrijven van het HTML bestand. Maar we willen ook nog op een eenvoudige manier deze ID’s kunnen selecteren en kopiëren naar Revit. Om dit te kunnen doen moeten we weten hoeveel rijen er in de HTML Report zitten. Je kan dat handmatig doen maar ook dit willen we automatiseren.
  10. Eerst moet de net gemaakte formule omlaag doorgekopieerd worden. het aantal formules moet minstens zo veel zijn als er regels in de HTML zitten. Je kan natuurlijk ook aan de veilige kant gaan zitten.
  11. Wanneer we de kolom A, van het blad waar het HTML bestand op staat, een Naam (Named Range) geven, bijvoorbeeld HTML. Dan kunnen we met behulp van de functie AANTAL.ALS (COUNTIF) de hoeveelheid niet lege cellen tellen. De formule is dan =AANTAL.ALS(HTML; "<>"). Met "<>" geven we aan dat het niet lege cellen zijn.
  12. Dit rijnummer gebruiken we in een indirecte verwijzing naar de Cel waar alle ID’s staan. De formule is dan in mijn geval =INDIRECT(ADRES(AANTAL.ALS(HTML;"<>");1;4;1;"Blad4");1)
  13. Voor de veiligheid kan je een controle maken die de aantal gekopieerde formulecellen vergelijkt met het geïmporteerde HTML bestand. Als er meer regels in het HTML bestand zitten dan gekopieerde formulecellen, kan deze een waarschuwing geven dat niet alle ID’s kunnen worden weergegeven. Dit is eigen verantwoordelijkheid.
Aaah. Eindelijk vruchten van het harde werk. Selecteer de Cel die alle ID’s heeft verzameld. Copy en Paste deze in de Select by ID functie van Revit. (de laatste spaties zijn niet relevant ) Et Voila!


Sommige elementen zullen om verschillende redenen niet zichtbaar / selecteerbaar zijn. Bijvoorbeeld omdat het Sketch lijnen zijn. Ook de 2e ID op een regel zal niet in de lijst verschijnen. Daarvoor moet je alle formules nog een keer bouwen maar dan niet gaan zoeken vanaf het begin maar vanaf (na) de eerste ID. Deze formule is dus een stuk langer.

 

Wat kan je hier nu mee doen?
  • Selecteer alles in een 3D view en gebruik de Isolate Element functie
  • Gebruik het Filter of Add-ins om de selectie specifieker te maken.
    • View specifieke zaken bijvoorbeeld Dimensions kan je een afwijkend Type meegeven ten teken dat ze aangepast moeten worden
  • Geef alle Model categorieën een aangepaste eigenschap (bijvoorbeeld Comments) en gebruik de Filters van de Visibility Graphics om deze elementen op te laten lichten
  • etc.

Als iemand meer weet hoe de ID’s door Revit worden vastgesteld en met name de lengte van de ID houd ik me aanbevolen.

Populaire berichten

Zoeken in deze blog