Pagina's op IkLeerBIM

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.

maandag 24 februari 2014

IFC bestanden maken in Revit

IFC blijft lastige materie. Vandaar enkele links naar aanvullende documentatie...  
Tja leuker kunnen we het nog niet maken.
Een overzichtje van BuildingSmart (Australia) hoe je in native Revit een IFC maakt.
Tegenwoordig moet je daar zeker aan toevoegen dat er gebruik gemaakt dient te worden van de laatste IFC exporter. Ik noem dit omdat er met een behoorlijke regelmaat een nieuwe versie te downloaden is. Afgelopen donderdag is op dit moment de laatste versie. Daar kan je ook zien met welke onderdelen Autodesk bezig is.

Ook zijn er tools beschikbaar om eens op een andere manier naar een IFC te kijken dan alleen de geometrie.

dinsdag 4 februari 2014

Bestandsversie controle in Revit

Velen van ons kennen de situatie dat je nietsvermoedend op een Revit bestand klikt en dat vervolgens je Revit bestand zonder enige waarschuwing wordt omgezet naar een nieuwere versie. Vaak is dit niet de bedoeling en kost het bovendien een hoop tijd en frustraties.

Waar zit die cancel knop!
Er zijn een paar kleine en grote oplossingen voor dit ongemak. Je kan natuurlijk in de bestandsnaam de bestandsversie laten terugkomen. Maar dit is niet altijd de oplossing. Ook zijn er opstartprogramma's die 'automatisch'  de juiste Revit versie voor je kiezen.

Daarnaast, en dat gaat meer op een oplossing lijken, heeft Boost Your BIM een eenvoudige Addin gemaakt, die je eindelijk de cancel mogelijkheid geeft waar we allemaal op zitten te wachten. Deze tool had hij al een tijdje geleden gemaakt. Maar nu is deze gratis te gebruiken. Dat wil zeggen, via een "Pay what you want" constructie, want Harry heeft ook graag een belegde boterham. Er zit geen teller op die bijhoud hoeveel tijd deze tool je bespaart, maar ik ken zeker een paar mensen die hier erg blij mee zullen zijn. Harry goed werk.

Aha daar zit die cancel knop!

dinsdag 28 januari 2014

Slim tekenen - Afschotisolatie in Revit - deel 2

Vandaag een aanvulling op een oudere Post over afschotisolatie in Revit

Vaak zijn oplossingen simpel.
Soms zelfs zo simpel dat je jezelf afvraagt waarom je daar nog niet eerder opgekomen bent.

Afschotisolatie in Revit vind ik een drama, zie ook mijn eerder Post. Maar ik heb na lange tijd, eindelijk een eenvoudige en doeltreffende oplossing gevonden voor het type afschot zoals ik het vaak tegenkom. Meestal is de onderzijde van het dakvlak horizontaal en heeft de bovenzijde 1 of meerdere afschotrichtingen. Bovendien heeft het dakvlak vaak een onregelmatige contour. En zijn er meerdere doorbrekingen. Hierdoor werkt Modify Sub Elements slecht... Eigenlijk werkt het gewoon niet.
Je wilt graag per zijde een vaste afschot en afschotrichting kunnen aangeven. Net zoals je het hele dak eenvoudig schuin kan leggen. Helaas zit deze mogelijkheid nog niet in Revit.  Het blijift dus een beetje behelpen. De volgende werkmethodiek kan dan helpen.
  1. Maak een vereenvoudigde vorm van een dak of dekvloer.
  2. Modify Sub Elements.
  3. Geef de juiste hoogtematen, 
    • door 1 of meerdere lijnstuken een handmatig berekende hoogte mee te geven.
  4. Gebruik de Vertical Opening tool. 
    • om gaten in het dak 
    • en onregelmatigheden in de contour aan te passen.
Het werkt perfect. De opening cut maakt netjes gaten in 1 object zonder andere elementen aan te passen.
Waarom heb ik dat niet eerder bedacht? Toch blijf ik me afvragen af of deze methodiek in alle gevallen een doeltreffende oplossing is. Maar het is zeker een stap in de goede richting!

Hieronder de concrete case:

De bovenzijde van dit dakvlak moet onder afschot van boven naar beneden .
De onderzijde van het dakvlak blijft horizontaal.

De contouren van het dakvlak heb ik sterk vereenvoudigd.
Ze kloppen nu nog niet.

Met Modify Sub Elements krijgt de bovenzijde een vooraf berekende hoogte.
Kan dit ook slimmer? Ik houd me aanbevolen.
 
Met Vertical Opening selecteer ik het te bewerken dakvlak.
En geef vervolgens de contouren aan, van de weg te snijden stukken.

Het resultaat is perfect :-O
Nooit te beroerd om wat te leren.

zaterdag 18 januari 2014

Hoeveelheden in Revit

Ik ben geen calculator. Maar welke hoeveelheden zijn er nou in Revit uit een eenvoudig modelletje te halen. Vandaag wil ik een paar eenvoudige testjes doen. Met een Schedule, een Material Takeoff. En ook wat de mogelijkheden van Parts zouden kunnen zijn.

Eerst maar een eenvoudige model opgezet. Een wand van 2m1 en een wand van 1m1. Beide met een hoogte van 1m1. Zie hieronder. Ik gebruik hier samengestelde wanden. Het is namelijk om veel redenen wenselijk om te modelleren met samengestelde elementen (wanden, vloeren, daken etc.) in plaats van met allemaal losse elementen.  Maar wat zijn de consequenties voor een calculatie?
Dan mijn keuze voor Parts. En wat zijn het eigenlijk. Parts is een redelijk nieuwe functie binnen Revit. Parts lijken redelijk onbekend en weinig gebruikt. Het grote voordeel van Parts is de relatie tot zijn Origineel. Parts wijzigen namelijk gewoon mee met het origineel, maar zijn dus wel afzonderlijk te rapporteren.  Een calculator kan met een paar eenvoudige handelingen, op basis van samengestelde elementen, Parts maken zonder een Revit Model echt te veranderen.
Selecteer een samengesteld element / rechtermuis knop / Select All Instances / In Entire Project / Create Parts (naast de knop Create Similar)

Voor de hoeveelheden heb ik 3 Schedules gemaakt.
Een Wall Schedule, een Wall Material Takeoff (of een Multi-Category material Takeoff waarbij de Parts zijn uitgefilterd) En ten slotte een Part Schedule.
 

Op het eerste gezicht zien we al meerdere verschillen.
Per soort Schedule zijn er andere parameters te rapporteren. En de manier van meten is ook verschillend.

De Wall Schedule:
Meet zijn lengte over de Wall Center Line. Dat is het hart van de wand: 2000-0.5x260=1870mm. Daarom is deze lengte niet betrouwbaar. Bij het aanpassen van de Wall Location Line naar een andere plek werd gaf de Schedule overigens geen andere maten.
De oppervlakte lijkt nog vreemder. De lange wand krijgt het buitenoppervlak en de korte wand het binnen oppervlak toebedeeld. De hoek is daardoor niet dubbel geteld.
De hoogte kan niet gerapporteerd worden. Ook Levels kon ik niet laten rapporteren.
Al met al, is een Wall Schedule niet handig om onderdelen in een samengestelde wand te berekenen. Als je deze afzonderlijke onderdelen niet los nodig hebt, maar de wand als geheel wil bekijken, is het natuurlijk wel handig.

De Multi-Category Material Takeoff / Wall material Takeoff:
Deze lijkt wel beter, maar als je naar de getallen kijkt, kloppen getallen nog steeds niet. Het is een Wall Schedule waarbij de inhoud is opgesplitst per materiaal. De Width en de Length zijn die van de samengestelde Wall en die is niet correct. Opvallend is trouwens dat de inhoud van de materialen ook niet klopt. Het lijkt de (foute) oppervlakte maal de materiaaldikte te zijn.
Al met al nog steeds niet wat we zoeken.
Wel is de parameter Material: As Paint er een om te onthouden. Want het is in Revit mogelijk om oppervlaktes van "Paint" te voorzien. Hierdoor veranderd het oorspronkelijke materiaal en alleen op die plek. Dit heeft dus consequenties als je daar niet op bedacht bent. Dat geld zowel voor de Calculator als voor de Modelleur. Wellicht zinvol om een vreemd project via een Multi-Category Takeoff en Material: As Paint te controleren!. Via de Schedule kan je ook direct naar de plek waar Paint is toegepast.

Part Schedule:
Now we are talking! Eindelijk goede maten. Een afzonderlijke lengte per onderdeel, een dikte per onderdeel, een hoogte! En oppervlaktes en inhouden die kloppen.
De Part Schedule bevat nog meer Parameters die van pas kunnen komen als er actief met Parts gemodelleerd wordt. De parameter Excluded vindt ik persoonlijk dan wel een vreemde eend in de bijt. Maar ook dat is te rapporteren

Let op dat de totale inhouden van de verschillende Schedules onderling met elkaar overeenkomen.
De gewone Schedules zijn dus wel als controle te gebruiken.


Een paar andere zaken om uit te proberen:
  • Wall Wrap 
    • Geen enkele Schedule reageert hier goed op
  • Aansluitingen met andere wanden worden netjes meegenomen bij de Parts 
    • Mits deze wand ook Parts heeft. Anders loopt de Part gewoon door terwijl het origineel op basis van de "Function volgorde" wel een nette aansluiting laat zien.
de Part Isolatie loopt door en reageert niet op de andere wand zoals de Original wel doet
pas als de aansluitende wand ook Parts heeft gaat de aansluiting helemaal goed

  • Openingen, Edit Profile,  Attach Top, Wall by Face  etc. worden netjes meegenomen, voor zover ik dat snel kan zien. 
    • De Parts Schedule geeft voor de hoogte de maximale maat aan.
  • Voids die door delen van de constructie gaan (beetje pesten mag wel) Worden door de Part Schedule net iets stabieler opgelost dan bij de Material Takeoff. De Wall Schedule was al niet helemaal correct. Maar een volledig gat in de wand wordt in verhouding wel netjes meegenomen
  • Nog meer pesten, doe je met een Model in Place met de Wall Category. Je kan hier gewoon Parts van maken. Wat nu opvalt is, dat de Material Takeoff completer is dan de Parts Schedule. Deze laatste heeft namelijk geen oppervlakte. Bij de Material Takeoff zijn alle zijden van mijn kubus meegenomen.

Populaire berichten

Zoeken in deze blog