Dynamo Users Meet-Up

If you’re living in United Kingdom and you’re interested in Dynamo, computational design and automation, I strongly recommend getting involved with UK Dynamo User group. So far I’ve attended two meetings and it was a time well spent! Each meeting consists of 3-4 longer presentations and quick round of tips & tricks from other users. When the official part is over, there’s time for casual networking and it usually involves a pub nearby. In terms of topics covered on those meetings, some of my favorite lectures were about macros, add-ins, modelling from point cloud, computational design in structural engineering and linking Revit with Power BI.

Here’s a picture from May meeting, you can even spot me there:You can find them here, there’s an event happening in Manchester, 7th September.

Watch out when the tickets are out – because they might be gone within an hour!

Painting walls using Dynamo

Hello again! As it turns out, moving all your livelihood to a different country is quite an absorbing process and I had to skip on my blogging for a bit. But now I’m back and…

 

…picture a massive hospital model in Revit that’s in dire need of painting. The default tool for applying paint is not the most efficient one to say the least and the deadline is approaching. What do you do? Since taking a holiday break was not an option, my second guess was to use Dynamo for that.

This script can be broken into two parts.

First part deals with sorting the walls per width and base constraint. To my surprise, the former wasn’t as straight forward I thought (It might have something to do with family structure for “Walls” category). In order to get the value of width, I used the following combination of two Python scripts:

import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
items = UnwrapElement(IN[0])
typelist = list()
for item in items:
      try:
        typelist.append(item.Document.GetElement(item.GetTypeId()))
      except:
        typelist.append(list())
OUT = typelist

and:

check = IN[0]
items = IN[1]
     if isinstance(check, (list)): OUT = items
else: OUT = items[0]

Combining those two with some basic BoolMasks leaves me with a list of walls-to-be-painted. Now to the second part – applying paint.

I must admit, my Revit API game isn’t the strongest, so to get this (simple, I know) script working I had to consult it with a colleague of mine. The final product is as follows:

import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc =  DocumentManager.Instance.CurrentDBDocument

elems = UnwrapElement(IN[0])
paintmat = UnwrapElement(IN[1])

TransactionManager.Instance.EnsureInTransaction(doc)
for elem in elems:
     for geo in elem.get_Geometry(Options()):
             for face in geo.Faces:
                      doc.Paint(elem.Id, face, paintmat.Id)
TransactionManager.Instance.TransactionTaskDone()
OUT = elems

One interesting thing I’ve noticed is that the Python part of this Dynamo script seems to be “remembering” the values, i.e. when I’m done with painting one selections of walls and I want change the values by which I sort them – this script insists on painting the original selection. I think I’m missing something obvious here, feel free to enlighten me.

 

Forum Autodesk 2016, Warsaw and what came afterwards

October turns out to be a busy month for me. I’ve just gave my speach at the Autodesk Event in Warsaw few days ago and now I’m in Boston, Massachusetts, waiting for another exciting event by Autodesk. Honestly, I can’t complain, the feedback from Warsaw event was very positive and now even the Boston rain won’t change my mood!

I’ll post some updates about the Bostons testing sessions soon, but I might be restricted by confidentiality agreement with Autodesk… we’ll see. Stay tuned!

img_20161006_111804    img_20161008_112217

What I’m working on – Column arrangement coordination in Dynamo

…but let me start with explaining WHY I’m doing this. Imagine a high rise located somewhere in London, It will have 60-something floors, around 18000 beams, more than 2000 columns – and 2-5 people working on the structural model, just to make the tight deadlines possible. It would be hard to keep track. Now imagine a lot of design changes, structural supports moving left and right, columns disappearing and appearing again. And to top it all – very restrictive column schedule macro that doesn’t take “almost in line” as an answer. I need to be able to quickly see if all the columns are in line, are the column numbers assigned correctly and were there any last-minute design changes that I’m not aware of.

Now we get to the Dynamo part. This is what I have so far, and keep in mind this is just a very early version of this concept:

columnlocationc12

So what’s the deal here? First, we get all the columns from the model and choose the column “path” that we’re interested in (C12 here). Then it get’s trickier – as far as I know, Dynamo 1.1 (which I’ve used to write this) doesn’t have an easy way to get X,Y location of the center of the column (I know there’s a node for that in 1.2), so I’ve came up with following workaround: we get the coordinates value from Element.Solid – asking for maximum and minimum Y (thus getting the point in the middle), and we subtract this with value of the column below. If it’s zero – columns are in line. To make this work, columns should be sorted according to Z value, and to my suprise this wasn’t the default – somehow slopped columns mess up this order (that’s why the counter-intuitive sorting method)

As I said, this is still very early version, and here are my plans for further development:

  • Exporting to Excel
  • Export all the columns, not just one “line”
  • Checking X,Y values at the top and bottom, so that slopped columns won’t be seen as an “value other than zero”

Feel free to comment on this script – I’m still learning here!

First project in Revit

What’s better way to start of this journal than to write about my first BIM project! It all began almost three years ago, and my starting point was my master thesis, student exchange programme and learning about this crazy BIM-thing in Scandinavian countries (first software I’ve tried was Tekla). I’ve connected all the dots and thought to myself – “why not give myself a challange, and maybe learn something in the process?”

The idea of my master thesis was to recreate an existing housing project located in Warsaw using BIM software (in this case – Revit), provide an analitical model within the same file that could be exported to structural software (in this case – Robot Structural Analysis) and show that such an aproach could bring cost and time saving benefits.

rsz_visual

For the modelling part I was using “paper” documentation, but because the building wasn’t very complex – it wasn’t a terrible downside. My modelling software of choice was Revit 2014, upgraded later to 2015. I’ve issued the final copy as native file (.rvt), but if I was to repeat that project, I’d definetly use .ifc standard (and I’d add another chapter to my thesis explaining why that’s the right approach to have).

I’ve tried to use the “purest” software I could – i.e I wanted to use default solutions to fully learn software capabilites. However, seeing all that Revit had to offer, for the purpose of creating shop rebar drawings I’ve used SOFiSTiK Reinforcement Detailing.

rebar

Having a working analitical model within a structural model wasn’t as simple as I thought it would be, so I’ve spent a lot of time moving columns & walls around (Robot doesn’t take misalignments very well), and If I were to do it again, I’d look for some smarter aproach (Dynamo?).

amodel

Not to make this post longer than in should, I’ll give some bullet points:

  • Structural and analitical information were matching – although I’m not sure if that could be achieved if the project would be more complex
  • Loadings and foundation were modelled in Revit – so that Robot would be used just for calculation
  • Loading combination were done in Revit, but I wouldn’t recommend such a solution
  • Rebar was modelled in Revit, wasn’t easy but It made schedulling faster than ever