Morphing Families with Dynamo for Revit

We recently put together a Dynamo dataset to test out some of its newer functionality. For this project (inspired by UNStudio’s Bologna Masterplan & Train Station), we were working with a structural system spanning from a level floor to an undulating roof, and we looked for ways to keep this system as one element in the Revit project:
untitled.23This design creates a diamond lattice on the roof with one point of contact on the ground for each component. Since the form of the roof is separate from that of the floor, we looked to an 8-point adaptive component to define the shape of each element:
2014-12-03 17_31_42-Autodesk Revit 2015 - STUDENT VERSION - [3D View_ {3D} - adaptiveFamily]

But here’s the problem with the above image: the geometry is not linked to the adaptive points.  How do we get every control point of every surface to update within the domains of the box created by these 8 points?  This would be time prohibitive with manual modeling, but with Dynamo we were able to automate the process.

In this demo, we’re using reference points and their normalized position along a reference curve. If we create an 8-point adaptive component, we can locate a point contained anywhere within a bounding box with 3 parameters representing tx, ty, and tz:


Using Grasshopper for Rhino, we selected the geometry and created a bounding box. Then, for each of the control points of the form, we found the tx,ty, and tz parameters within the box.  These values are then written to Excel, with a row representing a polyline defining the form for Revit.  On the Dynamo end, we’re instantiating these values as normalized parameters along a curve (3D diagram above), and creating identical reference curves for the form, linked to the 8 original adaptive points.  Here’s the result:

2014-12-03 17_30_28-3D View_ {3D} - adaptiveFamily

There’s a lot going on up there, but minimizing adaptive points in favor of reference points has proven to be a lot faster when instantiating the family in a project.  In this case, we can scale and morph geometry in Revit.  The adaptive family can also be updated by incoming data from a more flexible 3D modeling program.  Here’s a look at the family applied between two faces of a Revit mass:


And another example on a conceptual mass in context:
sheet02Adaptive components, in summary, can be characterized by adaptive points, offsets from planes, and normalized parameters on curves or surfaces. Creating normalized parameters in boxes would be a great addition to Revit (and would eliminate the need for all the extra reference lines and curves above).

There have also been some really creative workarounds within the constraints of the family editor (check out Marcello Sgambelluri’s presentation at AU 2013 or the Parametric Pumpkin Carving Contest on Buildz).  But let’s face it, manually creating an adaptive component can be an exercise in tedium and confusion.  Dynamo has a major value proposition here, allowing the generative creation of adaptive families.  We’re looking forward to using Dynamo more in the family editor as well as the project environment.

Revit Treemap

As a follow-up to a recent post on Revit Selection, we’re taking a look at simpler, more user-friendly ways to navigate the Revit hierarchy.
The zoomable treemap above is referencing a representative file of the full Revit hierarchy (all elements with a category in this case). The first screen shows all of the categories in the file, and clicking on a designated area zooms into the following tier in accordance with the Revit hierarchy (category, family, type, instance). The vertical toolbar on the right displays parameter data as well as preview images for applicable Revit types, while the circular buttons sort data based on instances, families and parameter count.

This is a demonstrative tool, allowing the user to explore the hierarchy and gain a better understanding of its construction. To create generic hierarchical data, a Python script in Dynamo creates the content in the .json format below:
This data is then referenced in the browser, using D3.js to create the interface. Treemaps are pretty popular these days when it comes to data visualization, and with the help of the D3.js library, we can explore a wide range of options like these for web-based interaction.

So while this is a Revit experiment for us, the design can be applied to any hierarchical data set with the same format. For example, check out this zoomable treemap for the D3.js API, the file we referenced for the Revit interface above.

We plan on making this interface available for all Revit projects with the release of some custom Dynamo nodes. Short term goals here are to explore more opportunities for visualization and interaction with AEC data sets. Long term goals include taming the Revit beast and making it more approachable to all of us.

Dynamo Review – Selections

This year, we’ve taken an in-depth look at Dynamo, the visual programming environment for Revit.  There’s a lot of potential here for widespread use in the AEC industries, and recent releases provide some exciting new features (check out our introductory and advanced courses). The program’s developers are rethinking how one interacts with Revit, and this is awesome.

So how can we take full advantage of a visual programming environment within the Revit platform?  Now that we’ve explored the software, it’s time to reflect and look at a few ways to improve our parametric workflow.

Dynamo is a program in its infancy, and there will of course be bumps in the road. One of these bumps, which is the focus of this post, is Revit selection.  This is the process we use to link Dynamo elements to those in Revit.  Here is a group of some of the selection options within the Dynamo suite:


The fact that Dynamo is built on top of the Revit database gives it a good deal of potential, but this also makes its interaction challenging.  The selection options above provide decent functionality, but it’s not all there, and it’s scattered.  If we can query a Revit file the same way we query a database, this interaction can become a lot simpler.

Back to the basics, the Revit hierarchy has four main tiers: categories, families, types, and instances. This defines the Revit database, and grasping this concept is particularly important when making project-wide parametric applications:

2014-10-10 09_57_17-Autodesk Revit 2015 - STUDENT VERSION - [3D View_ {3D} - rac_advanced_sample_pro

Our workshop attendees generally have a wide range of experience. Some are new to Revit, but experienced in visual programming through applications like Grasshopper. Others are Revit aces who want to learn more about visual programming. Dynamo’s existing selection nodes can be a headache for both of these users. When instructing a course, we want to move quickly while ensuring that the fundamentals are clear: here is the Revit hierarchy, and here is the way to navigate it in Dynamo. Perhaps this can be done with two nodes:


The video in this post shows these custom nodes in action. The user can move up and down throughout the project hierarchy, and use the nodes in either direction. This will enable the user to select an element and get any combination of similar elements. Or, one can select multiple elements and extract their hierarchical sets.

The intention with these nodes is to make Dynamo more demonstrative of the Revit environment. By simplifying selection, we can facilitate parametric interaction.  Students can learn more about the Revit database while they learn more about Dynamo, and modelers can operate on an advanced level with ease.

We plan on releasing these nodes as soon as we hash out a few more programming tasks (so that its applicable to all Revit projects).  This will include hierarchy from elements, elements from hierarchy, and get all parameters (rather than drop-down menus, away with those!).

Advanced Dynamo Curriculum

We’ve released a series of tutorials for advanced parametric modeling with Dynamo.  This builds off of introductory lessons from Computational Design for BIM.

The course focuses on Revit element generation, parametric masses, data transfer, and scripting.  The project was also an exploration for us, as we develop methods for visual scripting in Revit which can be applied to professional practice as well as academia.


Zahner’s New Software Aids in Facade Design

Facade fabricator Zahner has launched a new software tool to assist with design and fabrication.  Called CloudWall, the software is a web based program that provides a user interface to design and fabricate curving metal facades (like that of the Zahner Headquarters in Kansas City).  Users can upload their own images and manipulate the design of a custom facade.  Furthermore, the user can export and download 3D models of their facade design, making the transition from screen to site a not too distant reality.

Find out more at Arch Daily.

Automattic’s Secret Sauce

What defines your work day?

For Matt Mullenweg, there are no formal meetings, rarely any email communication, and team members only see each other once or twice a year at most. So how does the creator of WordPress, founder of Automattic, and chairman of The WordPress Foundation keep his finger on the pulse of 450 terabytes of data pushed daily around the globe? Matt replaced email, phone calls, and meetings with one simple thing – blog posts.

Automattic’s secret sauce is a WordPress theme called P2 that every employee publishes to all day. Every project, question, idea, complaint, and conversation gets its own P2, and is completely open for anyone who wants to participate to join in. Each P2 post gets its own URL, which can be referenced in other posts. There are no private P2s and P2s do not degrade over time, as is the case with ongoing email threads. Automattic also tracks team member’s actual work (support tickets closed, code written and deleted, etc.) and puts it on a public scoreboard, so everyone knows what, and how, everyone else is getting work done. Instead of being good at delegating tasks, managers just need to become better at reading.

As a communication medium, P2s empower the group rather than the sender.

Continue reading via Matt’s Blog.