DirectShape.ByGeometry, DirectShape.Transform

You are probably wondering what these DirectShape objects(refered to as DS from now on) you’ve been seeing in the last few releases of Dynamo are all about and how are they any better than the built in “ImportInstance” SAT objects or family instances? Well here’s a brief summary:

They are very lightweight. They produce 3d geometry that is usually 20-30% smaller in size compared to conventional form based family instances.

DS objects belong to a category. This means that they can have type and instance based project parameters. They can also be scheduled or have rule based filters applied to them.

They can be transformed and translated incredibly quickly. Read on to find more about how to do that.

The “DirectShape.ByGeometry” node converts a Dynamo surface, poly-surface or solid into a Revit design script object type (which is a system type) and places an instance of that type inside your project, reflecting the geometry position from inside Dynamo. It currently supports Revit 2015 and 2016.

The most important inputs are:

The geometry objects

A unique type name for each geometry object

The optional input is:

Category. The default value is Generic Model. Direct shapes have much less restrictions on categories compared to families.

Spring nodes’ DS implementation differs from the built in DS nodes in a few ways. The main difference is that this implementation produces smooth curved surfaces(similar to the SAT imports), instead of tessellated objects. This however comes at a price – you can not assign material properties to DS objects due the current restrictions in the Revit API.

The other major difference is that spring nodes’ DS objects have a type.This means you can assign type parameters to them and reuse the type’s stored geometry either by translating or transforming it. This can result in the quick generation of large compilations of complex geometry arrays. Let us build up on the previous graph:

This graph manages to produce over 300 uniquely orientated, complex geometry elements in less than a second! Try to do that with any other Revit object.

The “DirectShape.Transform” node takes the following inputs:

a spring nodes typed direct shape instance

one or more coordinate systems

And the best part?

It does so by consuming just a few megabytes!

Once you’ve finalized your design, you can start populating the DS elements with different parameters and start scheduling them:

You can not add any materials, but you can easily override their visual graphics representation or create rule based filters:

DS objects have both pros and cons. I personally see them as the perfect “temporary objects” or placeholder geometry in the early design stages of a project. Think of the possibility of creating tens or even hundreds of unique and lightweight design options that can coexist in a single Revit project. You’ll be able to quickly quantify and compare the different designs and once ready, send them along to the client in a nicely wrapped Revit file. Or if you are rushing for a deadline and do not have the time to create highly specific parametric content for an iteration that could very likely be thrown away by next week, you could quickly pop in a few DS elements and be good and ready.

Alternatively, imagine the following situation – you need to share your model with one of your biggest rivals. You have used hundreds of internal highly – parametric and intelligent families, that you’ve invested thousands of man-hours developing. You must share all your geometry and data but you still want to keep your competitive advantage.Well, why not simply “freeze” some of your families by converting them to static DS objects? You’ll be able to transfer their entire parameter information and preserve the geometry without delivering your secret sauce to the competition on a silver platter. This sounds more sinister, but still could be a valid use for the DS nodes.

You can download this sample and others from the Spring Nodes repository:

Hi, thanks for trying this. I haven’t used that node in a while and while it works fine in 2017 and earlier, there were some slight changes to the API that came into effect with 2018 and I’ll need to revise the node. I’ll do the revisions for the next release.