In this previous tutorial, I demonstrated how to undertake various view analyses in Grasshopper with Ladybug. Some of these analyses can also now be performed in Revit within Dynamo. This tutorial will show you how to create a 2D isovist by creating filled regions and if desired, assigning the fitness of the view to a room parameter in which it is associated.
One of the simplest methodologies for undertaking a view analysis is to use an isovist. An isovist is the volume of space visible from a given point in space. Isovists are naturally three-dimensional, but they may also be studied in two-dimensions.
Back in June, Nate Miller updated his LunchBox Dynamo Package to include a new isovist node, ‘Intersection.CreateIsovist‘. Furthermore, with the release of Dynamo 1.2.0, there is now the ability to create filled regions with the ‘FilledRegion.ByCurves‘ node.
This enhancement means that not only can isovists be analysed but they can be visualised and documented within a Revit project. This functionality is beneficial for projects where visibility is important, such as urban planning, shopfronts in a retail mall, or patient visibility from a hospital’s nurse station. In this scenario, the ‘fitness’ of the solution can be considered the area of the isovist. The larger the area, the greater the visibility.
Creating an isovist with Dynamo
To simplify the workflow, I have created the ‘FilledRegion.ByIsovist‘ node in the BVN Dynamo package. The script requires an element to define the centre or eye location. I have used a setout point generic annotation family for this. Once the script is complete, this category can then be turned off via visibility graphics if desired.
Next, we need to select the walls which will act as a boundary for the isovist. The easiest way to do this on a floorplate is to select a couple of walls and then isolate by category. This method will allow you to select all the walls by dragging a rectangular window. (Note that you are unable to shift-select multiple elements in Dynamo). The isovist will conform to any window or door openings in the walls.
Once the isovist is created, the geometry is cleaned and rebuilt. A filled region is then generated on the document’s current view using the filled region type defined in the input. The outline of the filled region will be ‘Thin lines’. If you wish to change the outline of the filled region, your best bet is to use the ‘Element.OverrideColorInView‘.
The custom node also calculates the total area of the isovist and the room in which the point is located. This value is then written to the room’s parameter as defined in the custom node’s input.
To create a project parameter, go Manage > Settings > Project Parameters and create a new parameter. Ensure it is an ‘Instance’ parameter, the type of parameter is ‘Area’ and it is assigned to the ‘Rooms’ category. I have used the name ‘View Fitness’. The value of this parameter can be considered the fitness of the view analysis and is useful in comparing options.
I don’t know what I’m missing; I did replicate all the nodes, but I wasn’t able to get the same results you had. Do I need to add parameters to the model?
Hi Gustavo. What error message are you getting? The parameter that you enter must be a parameter that is already in the project and should be of the right type.
Hi Paul, THANKS for your help!!
I’m not getting any errors, I’m curios about “The parameter that you enter must be a parameter that is already in the project and should be of the right type” what do you mean with that? what parameter should i create?
Hi Gustavo. I am also getting an error message. There seems to be be a problem with the ‘Springs.CurveLoop.Simplify’ node which is nested into my node. This node is used to simplify the polycurve before the filled region is created. I’ve submitted a github request which you can follow here: https://github.com/dimven/SpringNodes/issues/29#issuecomment-320148354
In the mean time you might just want to edit the node and remove this component. It will work but the filled region will have lots of little segments. I’ll update the node once I know exactly what is causing this issue.
For the parameter creation, go to Manage>Settings>Project Parameters, and create a new project parameter. Allocate it to the ‘Room’ category. Make sure it is set to instance, not type. And the type should be ‘number’ or ‘area’.Whatever name you give to this parameter, use this in your Dynamo script (ensuring it is exact – case and all).
Let me know how you get on.
I have updated the node in the latest version of the BVN package (v1.4.6). There were some problems with the dependent packages, namely LunchBox and Springs. You need to have the latest version of easy installed for it to work correctly – Lunchbox 2017.8.7 and Springs 121.0.2. I’ve also included some more info in the tutorial around the parameter creation. Let me know if you have any more issues.
Hi Paul, Have been trying to get this to work but no luck. Don’t get any errors, just nothing happens. The watch output says Null. Any thoughts appreciated.
Using BVN (v1.6.1) and Lunchbox (2018.7.6) if that helps. Justgetting started with Dynamo and have been working through your tutorials.
Hi! Thank you for your script! This is really helpful
I’d like to know why there is no ‘isovist’ in the my ‘select filled region type’ node
Hope to hear from you soon!
Hi Jason. The select filled region type node reads what ever is in your Revit project. I just happened to create a filled region type called ‘isovist’ but you can use whatever filled region type you like.
Thank you Paul!! It is working perfectly now!
Hi Paul and community,
I know this is a relatively old post but I have the same issue as Matt, I do not get any errors, just nothing happens and the watch output stays by null.
I am using a erman version Revit (2021.1.1), Dynamo Core 126.96.36.19986, Dynamo Revit 188.8.131.5250, LunchBox 2018.7.6, BVN 1.6.1.
Many thanks for the support !
Hi Marwan. The BVN package was created for Dynamo 1.3.1 and hasn’t been updated for a long time. There were some significant changes in Dynamo 2.X. I can see that one issue is the LunchBox Isovist node which is nested inside. It has some inputs with the data type defined. At the moment, it just says ‘Geometry’, it should say ‘Autodesk.Geometry’. There are probably some other issues too that need to be updated.