onsdag 20. august 2014

torsdag 14. august 2014

Detail numbering, callouts and dynamo. (And changing to english..)

Ok, so I am not perfectly fluent in english, but I will try the best I can from here on.

The reason for changing to english is of course enabling others to read my blog as well as the norwegian vikings.
So here goes..

I don't know the best workflow for giving names and numbers to callouts in Revit. It has been up for discussion over the years and we've landed a sort of "manual labor" way of doing it.

Something like this:

1. Create callout
2. Name the callout manually with a prefix and a serial number. For instance "HD 1", (Horizontal Detail number 1)
3. Put callout on sheet. Callout gets a detail number (which is sheet specific)
4. Manually update the detail number to match the view name...
5. Tada.. View name and detail number now match.


However, this is tedious and uncomfortably timeconsuming, especially on larger projects.

so without changing to much of the workflow, what can we use to automate a little bit?..

Well, dynamo of course:

Here's step 2 in the workflow automated to change all views containing "Callout" (Which is default naming convention i Revit) One problem I haven't figured out yet is how to run this multiple times when adding callouts and get the definitions to start from the last generated number. Let me know if you have suggestions!


For various reasons I have chosen to split step 2 and 4, but I think they could be in the same definition without problem.

So step 4: Here I have a definition that use many of the same nodes as the one in step nr 2(I tried making it a custom node, but then it crashed dynamo hard..), but this one gets all the view names and writes it to the detail number parameter. Keep in mind that you must place the callouts on sheet before doing this.


So now we've at least automated it a bit.

However I got this feeling that others out there have better workflows even without dynamo, so don't be shy and share if you care! :)



List.Filter og List.Map

Har drevet litt videre med listebehandling i Dynamo og selv om det er laaaangt igjen til zen iht. denne tabellen Six phases of Revit  så er jeg kanskje på nivå 2-3.

Har tenkt til å forklare to funksjoner idag som har med listebehandling å gjøre.

1. List.Map

List.Map er en funksjon som lar deg "mappe" en funksjon over en liste og bevare listestrukturen din.
Under har jeg laget en enkel liste med stringinputs. Jeg vil finne ut om noen av listeverdiene inneholder stringverdien "xyz".

Map funksjonen lar meg altså bruke String.Contains noden uten å ha en string input i selve String.Contains noden. Ikke helt enkelt, men lettere å se på bildet tror jeg.



Jeg sitter altså igjen med en liste med true/false-verdier og de er ikke så mye verdt i seg selv.
(dette er et eksempel, men for String.Contains noden kan man kjøre listen rett i noden og få samme resultat som ved å mappe den)

Men, vi kan bruke..

2. List.FilterByBooleanMask

Som lar oss bruke true/false-listen vi akkurat har laget til å filtrere den originale listen. 


Kan hende andre har bruksområder jeg ikke kommer på, men kan feks brukes til å filtrere ut punkt verdier som har en gitt x verdi, sjekke om punktverdier er innenfor en gitt verdi osv

Snakkes.


mandag 11. august 2014

CSV import fra web

I Dynamo finnes det bare en node for å lese fra en .csv fil (comma seperated values). Hvis man har lyst til å lese inn en csv fil fra en webside får man kun en lang string fil å forholde seg til. Dynamo har riktignok gode muligheter for å behandle strings, men det hadde vært bedre å få csv til en tabell/list direkte. 

Si vi skal ha tak i folkemengde pr år i rådata fra ssb under


















Ved import via vanlige noder må man benytte mange stringbehandlinger for å få det man vil ha:





















Synes da denne under er enklere.

















customnoden her er ikke lagt ut enda, men den ser slik ut, med stor takk til Maciej Wypych for hjelp med Python programmeringen! Her importerer vi altså en csv-reader som ligger i Ironpython mappa og skriver data til en liste. Har ikke programmeringsbakgrunn whatsoever, men med litt lesing om Python, god hjelp og noe å kopiere fra er man langt på vei!
































Og til sist begge samlet hvor man ser at vi har fått tak i folketall pr år på to forskjellige måter. Jeg foretrekker den øverste.























Snakkas..

fredag 8. august 2014

String, Integer eller Float?


Inputs/Outputs i Dynamo og Python er for den enkle ikke-programmerer i hovedsak følgende:

String= tekst.

Integer= Hele tall 0, 1,2,3,4 osv.

Float= desimaltall 1,345677

Fra codeblock ser det da slik ut:
Outputs fra Code block
I tillegg har vi Boolean in/output og det er ja/nei eller 1/0.


I 0.7.1-versjonen av Dynamo står det hva de ulike nodene bruker av inputs ved å hovere over de med musepekeren i utforskeren på venstre siden.

Nedenfor ser du en point by coordinates node og vi ser at det står "(x: double=0, y: double = 0, z: double = 0)"
Alt som er innenfor en parentes og adskilt med komma er en input.
- Dvs. at her er x,y og z verdier input
- "double" betyr at dynamo aksepterer både Integer og Floats som input
- var[]..[] betyr at output være både et punkt eller en liste.




Under er tilsvarende for en annen funksjon:
- input 1=string
- input 2=integer
- input 3=integer
- output= string



Belysende?




God læring, men ubrukelig resultat. Eller?

Har brukt noen kvelder nå på å sette meg inn i listebehandling og string behandling i Dynamo. Men jeg liker å få ihvertfall et eller annet resultat ut av selv tørre databehandliger.

Vet ikke hvor jeg fikk det fra, men jeg mener Zach Kron sa et eller annet om hva som kan benyttes som input i dynamo. Og det var.. Alt..  Ihvertfall nesten.

Så Lo and Behold: et Revit tak hvis form følger befolkningsutviklingen fra 1951 til 2014...


Snakkas!

"Hello World"

Halloooo bloggen!

Eller nei.. Dette er en blogg mest for meg selv for å holde track på hva jeg lærer meg i Dynamo, Python og all things Revit. Hvis andre vil lese så er det hyggelig, men kan ikke garantere faste innlegg.

Noen referanser til godt kildemateriell først:
dynamoBIM.org

https://github.com/DynamoDS/Dynamo

BeginnersGuide/NonProgrammers Python

Vi snakkes!