Monday, 20 February 2012

Two-Directional Arrays in Revit - Some Detail

As promised last month, here is a little more detail on the techniques used to create a complex two-directional array in Revit:

The nice little four square "Array" command icon in Revit, implies that you can array elements in two directions at once.  Sadly this is not the case - so you have to resort to creating arrays in one direction, and then arraying the result in the other direction.
The first thing to know is that if you try to array elements in Revit, and then array the results as a group, you end up with nested groups.  This really does not work - you very quickly get into trouble keeping things aligned and locked, particularly when you add parameters to the mix.  The technique that I used to create the complex pattern arrays shown in earlier posts, was to nest the arrays as components rather than groups.  This gives you much better control, and avoids all those frustrating error messages.  It may seem longer to set up but it soon saves you time.

You might start with a simple component that has two options for a circle or a square (chosen by Yes/No visibility parameters):
  • This component might also have parameters for changing its size;
  • You can add a material parameter to the object so that you can later control its colour;
  • Then you need to nest the component into another family, and link its parameters to similar ones in the parent family;
  • Using reference planes to lock to, you can give it some X and Y offset parameters (as seen in the middle image above);
  • Then create multiple types for the nested component, and give each one a different value for its material, and hence a different colour;
  • This component then needs to be nested into another family.  
  • Again you need to link the parameters, but this time you need to take advantage of the new capability (in v2012) to assign types by a formula in a parameter.  This is where the control of colours is done.
  • Now you can do the first array, creating parameters to control spacing and numbers in the array (as shown in the right hand image above).
  • Time for some more nesting into another family, so that you can create arrays within arrays in the same direction (as shown below).
     
     
     
     

     
  • You need to link the parameters to equivalent ones in the parent again;  and then add some new parameters to control the multiple arrays;
  • Then repeat the process, by nesting again.
  • This time you can array in a different direction.

     


    Eventually you will end up with a very complex family nested about 6 levels deep, with dozens of parameters.  The nesting means that the family can be very slow to respond when you first place it or make any changes to it.  Of course you could create much simpler two-directional arrays that only have two levels of nesting.