Sugo alla casa… LRCZ Style

This Dynamo is the worst piece of spaghetti code ever written – I take full blame.

But duh – it does it’s job on modest sized models like this one:

Rendering001.png

So now for the idea – bypass Revit schedules, they are hard to communicate. Make a Dynamo and write the data to Excel to pass on – I know – we love and hate Excel but it is a de-facto standard.

The graph

Capture.pngI did warn – bad spaghetti code and I will refactor – but for the time being the result is perfect:

Noname

Life is good…

Posted in Uncategorized | 1 Comment

A short commercial break

We here at Livingroomcraftz don’t really endorse products. Nobody would pay us for that. But once in a while there is stuff that needs to get mentioned.

Today we have two:

Number one Revizto.

For us here the perfect marriage of creating a model for the non-Revit savvy people out there to share your model with with good looks and still enough “I” in the BIM.

Very few clicks bring you here:

Noname.png

Your model and your drawings in context – how cool is that. And that is just a fraction of what you can do – compile that into a *.exe file and send it to your client for starters. And much more…

Number two Simlab.

Those guys also have a Revit plugin that lets you take your scene into Composer where you can render and much more.

Rendering001.png

The better part is that you can very easily create a 3D PDF to pass on. Sure 3D PDF is not the greatest around but at least most people have a PDF reader capable of displaying the model.

Here in Composer

Noname.png

And here the PDF

Noname

Sample model here.

Life is good…

Just to make sure, we are not paid for this endorsement. We just think these are good tools.

Posted in Uncategorized | 1 Comment

That’s pep

Quantities – or better quantity takeoffs – sure, easy you say, we have schedules in Revit. Bugger is just that everybody and his grumpy grandma wants an Excel file. So – export schedule to *.txt, format your heart out, import into Excel – and do that all over again. Especially on non-US Windows it’s such a fun getting dots and commas right for Excel to be recognized as a number…

Dynamo to the rescue – at least we can cut out some of the unnecessary clicky-clack… Call Dynamo, click run and get a nicely formatted workbook to pass on.

Here’s the graph:

Capture.png

Hi-res pic here.

Were basically filtering for structural elements and the write the volume parameter into Excel – one sheet per category. We also build the sum and put it at the last line. For stairs it’s a bit trickier – here we number the elements, pull the geometry, get the volume and write that. Stairs have no volume parameter as instance parameter – so that is why we have to work around here:

Noname

Result:

Noname

Sure – not perfect but way less error prone than OOTB – and I just don’t want to use my credit card for another plugin when I can do it myself.

Life is good…

 

 

Posted in Uncategorized | 1 Comment

I admit

I admit – on this little bugger I would have been faster to just go ahead and number each wall, floor, structural column and framing as well as foundations by hand…

BIMmotion_Screenshot_001.png

But we do not want to do that. Things that can be automated will be automated. Period!

So – yeah – Dynamo of the day…

Noname.png

Full graph at my G-whatsoever.

The basic idea is to catch the base constraint of element – map it onto a table of level names:

Noname

Once that is done, we can create a list with names to our own liking – do some string transform and come up with a snazzy name for each element:

Noname

Check the full screen here.

If you want to have the graph ping me. Seriously – happy to share.

Result for a wall on the first floor is:

Noname

 

W-01OG-002 … don’t ask me about the naming convention.

Life is good…

Posted in Uncategorized | 1 Comment

All I ever wanted was everything…

You are looking at a structural model. We see load-bearing exterior walls and little pieces that form the sill in between them. In a forward thinking manner modeled sperately and with a different wall type.

Noname

Now the change – we need to change them to non-load-bearing and shorten them at each end for 1 cm so that we have a gap.

Imagine doing this OOTB Revit – first we need to select the wall, disable join at beginning and end (otherwise even shortened they’d rejoin and the gap would disappear) shorten them at each end which is a pain by itself. There are 176 instances in this rather small model – imagine doing this for thousands.

Dynamo to the rescue:

Capture.png

The idea is to analyse all these walls, recreate them shorter, make them not join and then delete the old ones.

Now step-by-step

y.png

Here we collect the walls and create a list

Noname.png

Here we retrieve the wall curves and create vectors by start point and end point

Noname.png

Here we move the start point and the end point in the desired location and create the new walls

Noname

The python script disables the joins – we’ll come to that in a second. As soon that is done we delete the original walls. Now to the Python script:

Noname

Quite easy.

The result:

Noname

Hi-res screenshot of the graph here.

Life is good…

Posted in Uncategorized | 1 Comment

No news are good news…

Admittedly – it has been quiet all last week. So much stuff going onm – #OTWB where we really push hard to get thing up and running in BIM in DACH.

#bringyourproblemwewillfix it – so if you have an issue with your BIM, or your Dynamo – come there, bring it up and the experts dudes hanging around there will try the utmost to get it right. Period. !

Info to #OTWB – here. If you miss that and still whine about your BIM after that – well, you gotta pay good money for the answer.

Apart of that – new project going on. Quick model up of a structural model that we will take into FEM next week (Sofistik, no endorsement, but we rely on them in our workflow like that stuff.

Some eye candy:

1.png

This time we are trialing Simlab for the pics – and it turns out to be quite fine – more info here.

2.png

Now lets try their clay render setting:

3.png

Oh yeah – that is good. De-materialized. BTW – something does not look right in the staircases, gotta call the architects, don’t want to be disrespectful to original design intent.

Stats: 741 elements in Revit, Warnings 0, pretty flexible rig since we did change quite a lot of structural logic the past couple of hours without too much pain.

Modelical’s Dynamo node to quickly en-/disable the analytical model helped such a lot – here an endorsement for the people at Modelical.

Brilliant simple graph to toggle the analytical model and save you tons of time while modeling up:

4

The point is – while you model you turn the analytical model off. So Revit will much faster regenerate your elements. Before you send the model to analysis you turn it back on. Grab a coffee, but it’l be alright.

If you prefer Python – here is the code to turn it off:

“””
Copyright (c) 2016 Peter Kompolschek/LRCZ

“””

__doc__ = ‘Diese Tool schaltet den Status für das analytische Modell aller relevanten Elemente aus’.encode(“utf-8”)
__window__.Close()
import datetime
from Autodesk.Revit.DB import *
from System.Collections.Generic import List
uidoc = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document

cl = FilteredElementCollector(doc)
walls = cl.OfCategory( BuiltInCategory.OST_Walls ).WhereElementIsNotElementType().ToElements()
cl = FilteredElementCollector(doc)
floors = cl.OfCategory( BuiltInCategory.OST_Floors ).WhereElementIsNotElementType().ToElements()
cl = FilteredElementCollector(doc)
columns = cl.OfCategory( BuiltInCategory.OST_StructuralColumns ).WhereElementIsNotElementType().ToElements()
cl = FilteredElementCollector(doc)
frames = cl.OfCategory( BuiltInCategory.OST_StructuralFraming ).WhereElementIsNotElementType().ToElements()
cl = FilteredElementCollector(doc)
foundations = cl.OfCategory( BuiltInCategory.OST_StructuralFoundation ).WhereElementIsNotElementType().ToElements()

selection = []
selSet = []
tb = FilteredElementCollector(doc)
sheets = tb.OfClass(ViewSheet)
t = Transaction(doc,”Set Paramvalue”)
t.Start()

for wall in walls:
try:
anpar = BuiltInParameter.STRUCTURAL_ANALYTICAL_MODEL
an = wall.get_Parameter(anpar).AsInteger()
if an == 1:
wall.get_Parameter(anpar).Set(0)
except:
print “Error”

for floor in floors:
try:
anpar = BuiltInParameter.STRUCTURAL_ANALYTICAL_MODEL
an = floor.get_Parameter(anpar).AsInteger()
if an == 1:
floor.get_Parameter(anpar).Set(0)
except:
print “Error”

for column in columns:
try:
anpar = BuiltInParameter.STRUCTURAL_ANALYTICAL_MODEL
an = column.get_Parameter(anpar).AsInteger()
if an == 1:
column.get_Parameter(anpar).Set(0)
except:
print “Error”

for frame in frames:
try:
anpar = BuiltInParameter.STRUCTURAL_ANALYTICAL_MODEL
an = frame.get_Parameter(anpar).AsInteger()
if an == 1:
frame.get_Parameter(anpar).Set(0)
except:
print “Error”

for foundation in foundations:
try:
anpar = BuiltInParameter.STRUCTURAL_ANALYTICAL_MODEL
an = foundation.get_Parameter(anpar).AsInteger()
if an == 1:
foundation.get_Parameter(anpar).Set(0)
except:
print “Error”

t.Commit()

Spaghetti code… sure – I am no good in Phyton

Same for turning it on again…

“””
Copyright (c) 2016 Peter Kompolschek/LRCZ

“””

__doc__ = ‘Diese Tool schaltet den Status für das analytische Modell aller relevanten Elemente aus’.encode(“utf-8”)
__window__.Close()
import datetime
from Autodesk.Revit.DB import *
from System.Collections.Generic import List
uidoc = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document

cl = FilteredElementCollector(doc)
walls = cl.OfCategory( BuiltInCategory.OST_Walls ).WhereElementIsNotElementType().ToElements()
cl = FilteredElementCollector(doc)
floors = cl.OfCategory( BuiltInCategory.OST_Floors ).WhereElementIsNotElementType().ToElements()
cl = FilteredElementCollector(doc)
columns = cl.OfCategory( BuiltInCategory.OST_StructuralColumns ).WhereElementIsNotElementType().ToElements()
cl = FilteredElementCollector(doc)
frames = cl.OfCategory( BuiltInCategory.OST_StructuralFraming ).WhereElementIsNotElementType().ToElements()
cl = FilteredElementCollector(doc)
foundations = cl.OfCategory( BuiltInCategory.OST_StructuralFoundation ).WhereElementIsNotElementType().ToElements()

selection = []
selSet = []
tb = FilteredElementCollector(doc)
sheets = tb.OfClass(ViewSheet)
t = Transaction(doc,”Set Paramvalue”)
t.Start()

for wall in walls:
try:
anpar = BuiltInParameter.STRUCTURAL_ANALYTICAL_MODEL
an = wall.get_Parameter(anpar).AsInteger()
if an == 1:
wall.get_Parameter(anpar).Set(0)
except:
print “Error”

for floor in floors:
try:
anpar = BuiltInParameter.STRUCTURAL_ANALYTICAL_MODEL
an = floor.get_Parameter(anpar).AsInteger()
if an == 1:
floor.get_Parameter(anpar).Set(0)
except:
print “Error”

for column in columns:
try:
anpar = BuiltInParameter.STRUCTURAL_ANALYTICAL_MODEL
an = column.get_Parameter(anpar).AsInteger()
if an == 1:
column.get_Parameter(anpar).Set(0)
except:
print “Error”

for frame in frames:
try:
anpar = BuiltInParameter.STRUCTURAL_ANALYTICAL_MODEL
an = frame.get_Parameter(anpar).AsInteger()
if an == 1:
frame.get_Parameter(anpar).Set(0)
except:
print “Error”

for foundation in foundations:
try:
anpar = BuiltInParameter.STRUCTURAL_ANALYTICAL_MODEL
an = foundation.get_Parameter(anpar).AsInteger()
if an == 1:
foundation.get_Parameter(anpar).Set(0)
except:
print “Error”

t.Commit()

I got sidetracked – just keep in mind this has been the hottest day of the year so far.

Total time in there so far spent on this project- maybe 10 hours, with setting up and testing for upcoming ones a template as a side project.

Life is good…

PS’s.:

On a side note – lets call this the commercial evening:

#BILTeur2017 – that’s the big thing. Info here.

#BCSeur2017 – content – like content we can use in our BIM without messing it up – info here.

I did mention that Aarhus is a lovely city, didn’t I – well…. here. Image credits go to Scandic Hotels AB (®, or maybe ©… dunno). (Just so that nobody will sue me.)

And yeah – BTW – Livingroomcraftz a.k.a. LRCZ – is open for stuff.

And life is still good on still within the PS’s….

Posted in Uncategorized | 1 Comment

Behind the screens

There is a lot going on these days.. from scripts to conferences to registering funny domain names – more on that to come…

Just to make it a day – here is a very elegant little Dynamo script to retrieve all rooms from a linked file and create matching lists with ducts passing through them – tomorrow we are going to discuss (with the client) which info they really want to see in the duct and in which parameter.

The interesting and challenging part is that a single duct crosses more than one room – so  which room does it belong to? But that is up for discussion

Graph is here:

Capture

You need the MEP ducts in the main project, the rooms are in a linked project…

And for sure not limited to ducts, think pipes, cable trays, conduits,…

And the following boring disclaimer hides an Easter-egg  to a website you want to follow as soon as we got our s.. stuff together, give us a fortnight…

Capture

Life is fun so life is good…

 

Posted in Uncategorized | 1 Comment