This is a blog about doing BIM – no theory, just doing it…
Task for today – create a wall “Mark” parameter value that is individual for each wall, shows it’s bottom constraint, and dress it up with a “W” prefix.
OK – Dynamo – here we are:
Not necessarily rocket science but still worthwhile to explore – given that it a quick one at the end of a quite long day – so what are we doing here?
We collect all walls and count them and create a string from the count – remember the “Mark” parameter requires a string….
Further down the drain we do a lot of string manipulation to get an individual number for each wall as a string padded to a “XXX” format
At the same time we extract the “Base Constraint” parameter from all the wall elements and clean up that string to show what we want:
We add the “W_” prefix
And here we go…
Kinda cool for Saturday Night…
A blog to follow – BILT Academy
OK – here is a link to explain the title. But let me get back to what happened the last week(s). BILT Europe 2018 in Ljubljana.
This was grand – best RTC aka BILT ever. Until the folks stop rebranding the event yours truly will refer to it as “the event”.
Before that we had the BILT EUR Academy going on.
That was fun – young students challenging us procrastinated elderly ones..
More on that to follow soon.. in the meantime – Enscape makes sense to explain clashes to clients like this picture explains
Bravissimo to the good folks at Enscape
And life is good
BIM is the it – so many things exploding at the same time. My attention – apart of models and complex beam families – was glued today at the work of those folks: OpenDesignAlliance.
With that toolkit we can natively write RVT or RFA shapes – geometry as I understand so far is restricted to DirectShape representations in Revit.
That is the source:
That is what the translator tells me:
So let’s try:
So let’s look at this:
Stay tuned for the outcome…
Killer finding of the day – ever got frustrated by opening an IFC file in Revit? Look at this:
(Image courtesy of Dutch Steigers BV)
98000 parts, instances of 22 families.
So you attempt to open the file in Revit going the good old File > Open > IFC way
4 Gigabyte – seriously…? And totally unusable. No instances of families whatsoever.
However – try linking the same IFC into an empty Revit project.
All of a sudden a new Revit project file gets created…
Wait a second – 29 Mb instead of 4 Gb… really…
Then you close your dummy project and open that newly created Revit file (courtesy of the IFC > Link process)
Open the file and check if there are instances if families:
Sure – perfect… some little things to know – all Direct Shape Geometry (ultra efficient), families won’t show up in schedules or the Project Browser, Dynamo can fetch them – so instead of a plain old Revit schedule take Dynamo and write to Excel – or even better – XML…
But that will be another story…
Life is good…
Once in a while I accidentally use the wrong material to illustrate new Dynamo development.
So – in order to avoid any further slips using live project data – I’ve prepared several old projects of myself – no further IP related collisions.
Life is good…
Long story short – the assignment we got was to create an electrical schematic drawing programmatically.
Warning: Work in Progress, stay tuned for updates.
So – in AutoCAD the schematic looked like this:
First step – rebuild it in Revit using Generic Annotations and then record the position of each element:
So, rebuilt in Revit (there is still the import instance visible in yellow)
Next step – a Dynamo script to record family type name and location into Excel:
Next step – create a new drafting view, read the Excel sheet and position the families:
Graph above and the result:
Getting there – as said work in progress..
Some more detail – recording the positions was fairly trivial, the Dynamo is here.
Recreating the 2D assembly in a drafting view was a bit more complex – Dynamo here.
Some Python script required (originally: #Copyright(c) 2016, Dimitar Venkov):
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
if hasattr(obj1,”__iter__”): return obj1
else: return [obj1]
view = UnwrapElement(tolist(IN))
ftype = UnwrapElement(tolist(IN))
fpts = UnwrapElement(tolist(IN))
OUT = 
ftp_len = len(ftype) == 1
view_len = len(view) == 1
for i in xrange(len(fpts) ):
p = fpts[i].ToXyz(True)
j = 0 if ftp_len else i
k = 0 if view_len else i
if not ftype[j].IsActive : ftype[j].Activate()
nf = doc.Create.NewFamilyInstance(p, ftype[j], view[k])
Analyse a model like this:
Record the elements found and fetch the right symbol families to get placed in a drafting view…
In the end – a real world example where we are aiming at:
Lots to do… stay tuned
And life is good again…