Export Vasari/Revit to Rhino

While sending data out of Rhino and into Revit is pretty commonplace, I've seen a bunch of situations where folks need to go from Revit to Rhino and run into trouble.  Data is imported and doesn't show up, imported geometry is faceted, or in some way not what you're looking for.

Luckily, it doesn't have to be like this, you just need to change a couple default settings.  Here's how to get a nice clean, smooth DWG into Rhino

Step 1:  Solids v. Polymesh

Strangely, the default setting for DWG exports is polymesh.  Assuming you want to bring in real smooth, accurate, analytic surfaces and solids, open up Export, Options, Export Setups DWG/DXF
Go to the "Solids" tab and change "exports solids as" from the default "Polymesh" to "ACIS Solids"

Step 2:  DWG Versions

Every 3 years, the folks who make DWG update the file format and often times it takes a couple releases for other companies to incorporate the new file formats.  If you are using Rhino 4, you will be able to import the 2007 version of DWG, if you are on Rhino 5, you can import 2010.  However, the default setting in Revit 2013 and Vasari is the 2013 version, which Rhino will not accept.

So, while you are still in the export options dialog, wander over to the General tab.  In the "Default export options", change the Autocad 2013 Format to 2010 or 2007 depending on what version of Rhino you are on.

 Alternately, you can also change the version while you are exporting

Either way works.

Export is What-You-See-Is-What-You-Get.  Export a Plan view and you get some funny sliced shape.  Isolate or hide elements in a 3d view and you get what is on screen.  Knowing this, go to a 3d view, isolate/hide what you need or don't need and Export.  Import them into Rhino, and Unrollsrf, or Grasshopper, or Squish or whatever else you desire. 



Vasari Talk Session 25: The Vasari Beta splash screen


The latest Vasari Talk (Jan 22nd) has been posted!  If you missed it here’s the brief.  Download the dataset from here and follow along with the video.

“Description: In this episode, Zach Kron will dive deep into Vasari geometry and show you how to model the building on our Vasari Beta 2 splash screen. He will also show you how to make some interesting and challenging geometry from past splash screens.”

Learning Objectives:

  1. By the end of this session, attendees will be able to drive a parameter with a formula in a sample exercise.
  2. Attendees will be able to create a parameter that is a function of another parameter.
  3. Attendees will be able to modify the width of panels and mullions parametrically in a sample exercise.
  4. Attendees will be able to apply parametric panels and mullions to a façade and set their parameters based on their position on the façade.


Origami and The Context Aware Panel: being a good neighbor


I was looking at these fantastic modular origami tesselations and thinking (as I tend to) “Vasari Panel?  Sure!”



Turns out origami is hard!  One of the first issues that comes up is that each panel needs to have some amount of awareness about what its neighbor is doing.  In general, Revit/Vasari panels operate in isolation, each one’s behavior having very little, if anything to do with the panels that it shares edges with.  For most cases, this is fine, as the creation of seamless relationships can be handled by referencing shared point normals. In this case, however, there turn out to be more than one place where geometry in PanelA needs to reference the same geometry as PanelB. 

The kernel of this solution is a 9 point adaptive component that is repeated 4 different times over a surface. The center of a 9 bay grid defines the center of any given panel, and the remaining 8 reference the centers of all neighbors. 


With this solution in mind, let’s take a look at our origami pattern


If you break the pattern down into repeated elements, at first you can do the standard thing of identifying a rectangular set of points. 


Here I am identifying the low point of each module and just connecting the dots.


That module is built on a “seamless panel base”, where I just look at where are the lines intersect with an imagined cubic space projected off the surface of the form, and connect the dots.

3D View 1


Q.E.D., right?  Now we can all go back to doing important work, please?

NO!  This solution leaves out an important piece of information


Look carefully at the resulting pattern, and you will see a kink in what should be a straight line connection between the high points of the modules!


Each panel piece needs to REACH OVER into the neighboring panel and make a straight line connection between interior geometry in itself and interior geometry in the neighbor!


A minor detail?  No!  This simplicity is what lends clarity and readability to the pattern.

In a completely flat, regular system, this would be no problem, as there would be no kink.

3D View 1

But with irregular curvature, where angles are changing, you can’t pre-calculate where that reach-over is going to need to land.

What’s a  girl to do?

If you conceive of each high, square area as the center of each module, each panel needs to know about 4 other similar centers:


But with this configuration of 5 points, you can’t determine the extents of each cell.  For that you also need to get the geometry of the centers of the remaining 4 corner neighbors.


Therefore, for every one cell that gets placed, it must have one point to identify its center, and 8 to identify its neighbor’s placements.


So you have a 9 point adaptive component where point #5 represents the center of one square we will model, and the remaining 8 points represent the neighboring cell centers


If you connect #5 diagonally to the corner neighbors, you can derive the lines out from the center that will define the lowest points of the pattern. 


Imagine that points  2, 4, 6, and 8 will similarly be the center of their own high, square areas and connect them


Host points at he intersections and you will have the corners of the lowest points of the pattern.


These corners are where the panel will connect at the lowest point with its neighbor


Ok, head hurting?  Hang on, it gets worse.  This is a fully 3 dimensional pattern, that offsets from an arbitrarily curving surface.  So we need to attack the Z-direction by placing points on the horizontal workplane of each adaptive point and offsetting the desired thickness.


Connect the diagonals again and we can define the high, square area.


Now we connect more dots to create the folds:


One last piece.  We place 4 of these little monsters on our divided surface, overlapping so that each block of 9 control points relates to its neighbor.   Note that there are multiple areas of alignment in 3 dimensions of neighboring panels.


Select each of the 4 families, one at a time, and hit the Repeat button:


This will result in 4 different Repeater elements on the surface.



There are still 3 missing features that are not solved with this.  1.  Edges only match up on surfaces that have planar panels: revolves, translation, single curvature, and flat surfaces. Paper will stretch, crinkle and bend a little, mine doesn’t.  2. The high, square areas do not rotate, that is, they stay in a gridded orthogonal relationship to each other.  In the actual origami example, they rotate against each other.  3. Perhaps more interestingly, there is no necessity for the panel elements to remain dimensionally static while only changing their angular relationship.  I think there is some interesting math to be done that might solve this last problem, and I can approximate it with some formulas that adjust the height of the family with changes in size of the cell, but it isn’t perfect.


(animation made with BoostYourBIM’s Image-O-Matic and Gimp)




Download the family from here.  ContextPanel_seamless.rfa is a base family that can be used to make your own patterns that need to reference neighbors.  ContextPanel_hosted has the origami panel module hosted 4 times on a surface.  Select each one and Repeat for each to cover the surface.

Suggestions for improvements or totally alternate approaches welcome!


BoostYourBIM Contest and Prizes!


Do you want Harry the Revit API Guru to build you your very own custom Revit plug-in?  Now is your chance!  BoostYourBIM is offering a free custom API addin to the person who makes the best use of his brand new Image-O-Matic addin for Revit and Vasari.

Ok, that’s a lot of words.  Let’s break it down

BoostYourBIM:  blog written by one of the developers of the Revit API.  So, he has the chops.

Image-O-Matic:  an addin in for Revit or Vasari that will automatically write a sequence of numbers to a specified parameter or iterate through phases, dumping images as it goes.  Do a little post processing and you can animate your BIM!

Custom API addin:  this is the hard part to define, but it may be up to you to decide what it is.  Always wanted to place walls in the configuration of a Mandelbrot set?  Or dump all your curtain panel data to a spreadsheet in just the right way?  Fire up your mad skillz and win this contest!

Read the contest rules here, and Good luck.