One More Time Around our Little Yellow Star!

Merry Happy everyone! Thanks so much to all of you who have read and contributed to this blog during it's tender first months, I hope it's been as fun for you as it's been for me. There's so much more to say and show about the tools we are all continuing to learn about, I hope I can make it worth your while to come back and read some more.

The softwares we all love and hate so much are unbelievably deep and complex. Created by hundreds of hands, employed by thousands, the repercussions and mutations of these organisms can never be entirely predicted by their creators. These tools aren't like hammers or pencils or cars, but more like elephants. They can lift and pull enormous loads, but they also stand on one foot, play jokes on each other, and occasionally get scared and trample their keepers. They're like wines, with good years and bad years, but always intoxicating. Enjoy and beware!

With any luck, the coming year will be an easier one, 2009 was exciting and new and interesting and no picnic in many ways. Let's give the ship a big push and take another spin around, or as the little babies being bounced on knees say: "Again! Again!"


API Yi Yi: bitmap to panel plugin

[EDIT: The startup proceedure for Revit 2011 API tools has changed a bit, read this post to get up to date]

Let me be the first to admit I have an unhealthy relationship with my software. But this is too cool to not gush about.

Harry the API Guru did a course on using the API in the revit 2010 massing environment at AU2009 just a few weeks ago: "Creating and Analyzing New Conceptual Massing Geometry With the Autodesk® Revit® API". Unfortunately, I was unable to attend, but I was given the opportunity to test drive some of the tools he made for the course before hand. Hands down the best one yet is Harry's SetParamFromImage.

Conceptually the tool is dead simple. You have a bitmap that is 12x12 pixels. You have a divided surface that is 12x12. The panels in your divided surface contain a parameter called Grayscale, and the API will write a value from 0" (white) to 12"(black) based on the pixel values of the image. Tah dah!

Of course, this is nothing new for many modeling softwares, which have been able to do this sort of thing with displacement to meshes with out-of-the-box functionality for over a decade. But it does get interesting when you tie this together with Revit's core competency of scheduling and parameter driven families. For instance. Here's a quick and dirty knock off of Gramazio and Kohler's winery, where they superimposed a image on a brick wall simply by precisely rotating bricks.

Now load, make your rotational parameter shared and you have precise information on the placement of each brick in your schedule.

You can extrapolate this method to all sorts of designs just deviating the angle of the brick on what is essentially a flat wall. The gradient and pattern fill tools in Photoshop get a whole new level of utility.
Another evening, armed with beer, the plugin, and something not so good on the Tevo, I came up with these 5 variations on a skyscraper facade just by manipulating a bitmap and reloading it. The panel has a mullion that has a radius directly linked to the 0-12" information given from the bitmap image.

We tinkered with the plugin a little since the AU class, you can download the most recent source code and the compiled dll here, along with a sample file to get you started. There are a bunch of other functions in this plugin, but the one I'm describing here is SetParamFromImage. You can see Harry's whole presentation at AU where he talks about making all the tools in this plugin.

To load it, I suggest using the revit add-in manager, which allows you to easily add and remove plugins that don't have installers: http://revittotd.com/07/607. If you just want to alter your .ini to load the plugin, add this to your .ini (see full instructions from this post)

ECAssembly1=[path to your dll]\AU2009.dll
ECDescription1=External Tool

The plugin will look for an image file next to your rfa file named "[your file name].rfa_grayscale.bmp" I really recommend starting small, like 12x12 bitmap/divided surface. It can take a really long time to start getting results with larger images.

Enjoy, make some good stuff.
[EDIT: The startup proceedure for Revit 2011 API tools has changed a bit, read this post to get up to date]


Conceptual Modeling Tips with Joe K

Clean up your desktop! Sit up straight! Hide the unmentionables! We have a guest!

Joe Kendsersky works at Autodesk as a Customer Success Engineer for Revit Architecture. He's like an ADSK Green Beret who gets parachuted into customer offices to smooth over the bumps on their road to BIM victory. He is trained as an architect and joined Revit Technology in 2000, and subsequently Autodesk in 2002. Joe is a wealth of information about what it going on in offices as well as what is being developed in the factory. Today, dear readers, he is going to share some tips and tricks from a project that is close to my heart and 15' from my desk. Without further ado, take it away Joe!


Making the "Boomerang" Ceiling
The conceptual modeling environment allows users to design and analyze forms and also create parametric sub components that are intelligent and adapt to the form. However, in cases where you may need to use an existing family as a sub component, the new massing environment allows users to nest existing families into a Curtain Panel Pattern Based template.
The example we'll go through is from a project that I worked on - The Autodesk Customer Briefing Centers ceiling "boomerang" element in Waltham MA, designed by KlingStubbins, Cambridge MA. It was a study given to me by our Revit QA team while exploring the new modeling tools for RAC 2010.
Below is an image of the component and hexagon pattern. When assembled, the repeating ceiling shape creates an undulating convex / concave form.

The challenge was how to begin modeling the component, what template to start off with, how to break down the entire assembly into a kit of parts. For the component, I started with the Curtain Panel Pattern Based template hexagon tile pattern, but realized that its sides are not equilateral – as shown in the image below by superimposing a sketched hexagon over the hexagon tile pattern in the template. Working in this tile pattern was not going to work because it was not a true hexagon and also it would have been very difficult to model several elements within the same context. So, I decided to try and build the geometry with a triangular tile pattern instead. The thought behind it is to break down element further to a more granular level – a single boomerang component.

Attempt made with hexagon pattern:

Attempt made with triangular pattern:

As we can see, I was getting close but encountered several modeling challenges with the creation of the component. But then, I had the idea of reusing the existing generic model family and loading it into the Curtain Panel Pattern Based template with a triangular tile pattern, and it worked.

Here is the process:

The ceiling component is a generic model family created using a solid extrusion and void revolve to create the concave shape.

Open the Curtain Panel Pattern Based template and switch the pattern to triangular checkerboard – this is the same shape / pattern as the ceiling component. Also, this pattern will allow us to have two coinciding surfaces to create the overlap in the hexagon design. When assembled, three components are positioned up (concave) and another three are positioned down (convex) to form the hexagon shape.

Adjust the horizontal and vertical spacing of the parameters – set values that are close to the actual size of the component that will be inserted.

Insert the existing family into the Curtain Panel Pattern Based template on level 1 and move / align it into position with triangular tile pattern. Given the generic family has some symbolic lines sketched in plan makes it easier for you to align with the triangular pattern.

Load and test the component in the massing environment to reconcile any problems – I prefer toggling views so you can view the curtain panel pattern family and massing side by side, this allows you to easily work / test back and forth.

In the massing environment – after creating the form, dividing the surface and placing the component – you’ll need to adjust the surfaces grid rotation, flip or mirror, indent values and set U V spacing values to match with the component actual size, position.

Before adjusting surfaces grid rotation, U V instance parameters:

After adjusting surfaces grid rotation, U V instance parameters:

Since the ceiling component undulates, you’ll have to overlap two surfaces. This can be done by copying one surface (using 0’ value) and then by adjusting the surfaces instance parameters (mirror, rotate and indent) so the surface components complement one another to form the concave-convex hexagon pattern.

As we can see, the resulting hexagon form is close to the actual design and the overall design intent can be understood.

This exercise was a group collaboration with several colleagues. I would like to thank Zach Kron, Heather Lech, Lira Nikolovska, Matthew Jezyk, Greg Demchak for the challenge and working with me through the process.

If you have any questions regarding this exercise, please contact:

Joe Kendsersky



Planar Panels: 2 Ways to Get Flat

A recurring question I have gotten: "is there any way with the 2010 Massing tool set to make Curtain Panels that are always flat?" A couple ways.

[Edit: I have posted a better way for quad panels here: http://buildz.blogspot.com/2009/11/planar-panels-3-point-invisible.html]

Option 1
Real Triangle:
Curtain Panel by pattern templates have a number of basic pattern, one is called “Triangular”. Curiously, this panel is made up of four points, and some users find it vexing. There is an explanation for this, just not a very good one, and it's boring. If you want to make your panel behave like a real triangle (always planar), grab the middle, extraneous point
and pull it vertically up off the grid,

Connect the remaining points by a reference spline by points, and proceed to forget all about the extra point.

Voila, faceted surface with triangles!

But planar triangles are too easy to design and too expensive to build. How about something more challenging?

Option 2
Planar Quadrilaterals:

Go into the shipped content in the curtain panel by pattern folder and load "Planar Face". If your faces are relatives small, they will always be planar on the top surface. This panel does some freaky things with the panel paradigm.

If you open the panel and select the geometry, you will see that it's actually a tall blend with a void slicing off the top.

This void is hosted on the Level 1 workplane, which, when loaded into the family, approximates a "best fit" normal plane for the four panel points. The practical upshot of this is that you get a stable plane that will always shear off your blend with a nice planar face. There are 2 notable limitations to this panel. If your panel is too big, the void will not shear off the face completely. This can make for some interesting results, but probably not what you are going for. To correct this, just make the void much wider. The second problem is that for really distorted panels, the void will sometimes shear off the corners or mid section. But sometimes this is good too.

I was originally messing around with this stuff trying to knock off Norman Foster's Smithsonian roof:

But you can also make a mean Sonic the Hedgehog.


Calculating Pour Volumes

I'm sort of a feral child, and people ask me questions to which there might already be perfectly good answers. This time, the question was "In Revit, is there a way for me to analyze large concrete pours for irregular concrete elements?" I never heard back if it was useful, so you can be the judge.
Lets say you have a large irregularly shaped concrete element, like one of these:

or these:

You need to model and schedule it not only as a single monolithic element, but also as a series of pours that will happen in stages. What to do?

First, make your irregular shape in an external family of whatever category makes sense for your use. Here I'm doing it as a generic model (you can start this way and change it to, say, structural foundation if you need).

Next, take the whole complex chunk and slice it up at regular horizontal intervals. To do this, go to an elevation view and make 2 reference lines with parameterized dimensions (label them "top" and "bottom") to the reference level. Make void geometry on the horizontal workplane of each ref line, one going up on the "top" ref line, the other going down on the "bottom" ref line. These voids should each be large enough to completely cut the base form.

Now cut the complex geometry with your voids.

You now have a basic rig to move this slice of your solid geometry up and down the form.

Make as many types as you will have pours. For this example I have only 6 ridiculously deep pours of 20 feet each: 6 types, called pour 1 to pour 6, you may require more, shallower slices. Pour 1 is going to be the slice starting at 0' and ending at 20'. So bottom dimension is set to 0' and top is 20'. Progress up through each pour at 20' intervals.

Also make yourself a type "whole", with bottom set at 0' and top set over the top of the form. This will give you one type that shows the whole form for you to continue making design changes.

Load the family into the project environment and place 6 copies of the family in the same location. Set each instance of the family as a different type so that you have an instance of each slice and so make a reconstituted whole.

In this way the entire monolithic element can be instantiated as a series of pours by a single loaded family with many types, and each pour can be scheduled independently.
The nice part about this is that you get your schedulable volumes that are still fully integrated with your original form. To make changes, simple go back to your loaded family and make alteration to the "whole" type and reload it into the project for updates.

Bonus exploration for those who are interested: REBAR! I have no idea how this would work with rebar, I don't do much in Revit Structure, but I suspect that it would work nicely.