Sunday, 28 July 2013

Revit Scaleable Spline Tree Family

Having returned from RTC in Vancouver a couple of weeks ago, I decided to put into practice some of the things that I learnt at the conference.  It was another great Revit conference in a fabulous location - Vancouver is a beautiful city, and the waterfront has been really well designed and carried out.  Aside from catching up with friends, I met lots of interesting people and attended plenty of good classes.  Although I attended Marcello Sgambelluri's class on scaling families at RTC in Auckland, it was also a big talking point in Vancouver.  I asked several people if they had attended the class, and many enthusiastic people had;  some others said that they did not want to see how to scale a Revit cow or elephant - well they missed out on a treat, because we learned many tricks that could be applied to totally different areas of Revit. 

Here is one idea that I have developed based on one of the methods that Marcello used to scale classical column families:
Marcello Sgambelluri - Scaling Classical Order of Columns

Scale By Spline

This concept has also been explored by others, notably
Andy Milburn - Spline Sailing

but I first need to describe the concept here. 

A spline can be scaled just by dragging one of its end points.  To control this within a scaleable Revit family, you need to lock or attach the end points of the spline to something that you can dimension.  Although you can dimension the end points directly, it is better to use something like a reference plane.  Here is a simple rig to demonstrate this process:
The vertical reference planes and width parameter will be used to control the distance between start and end of the spline, and in turn its scale.
The offset reference plane and parameter are required in order to control the location of the spline.
Once the rig is set up, draw a spline between the two top reference plane intersections

Use the align tool to lock the ends to the reference planes, in both directions (4 locks required)

Change the width parameter to check that the spline is locked to the vertical reference planes and that it scales properly.
Change the Offset parameter to check that the spline is locked to the horizontal reference plane.

This example establishes the principle of being able to control scaling and location of splines using reference planes.  The spline end points do not need to be orthogonal to each other - they can also be at an angle.

Revit Scaleable Spline Tree Family

We can now apply this principle to multiple splines linked to each other, to create a simple tree family.  This example is proof of concept, and is only done in 2D, but it could be applied to 3D trees.

First make a rig of reference planes that are controlled by parameters
Then draw a series of splines between each reference plane intersection.
Lock the ends of the splines to the intersections using the Align tool (and then padlock)
Try flexing the overall height parameter - this will not only change the overall height, but it will not affect the other parameters.  So only parts of the tree will scale, and others will not be affected depending on how the parameters are arranged.  In this example, the tree trunk is not affected by the change in height - only the top part of the tree scales.
Changing the intermediate parameters will alter the overall shape as well as the width
 Different tree forms can be achieved by playing around with the parameters
One tree family can be used to create multiple tree types that vary in shape and height
By adding a few more reference planes and splines it should be possible to create a family that has independant tree height and spread parameters.  And all this can be done without having to nest one planting family inside another - it works without nesting.

No doubt there will be people who say that this is not practicable, or that the trees look terrible - but this is only a proof of concept.  I'm hoping that it will give more ideas to others who can run with the concept and create wonderful flexible tree families.