Monday, 19 June 2017

Global Parameter Enhancements in Revit 2018

I recently did a presentation on ‘Global Parameters’ at BILT ANZ 2017 in Adelaide.  I listed the two updates in Revit 2018 related to Global Parameters – one a bug fix, and the other being support for radius and diameter dimensions.  At the time I suggested that this was not a particularly interesting enhancement, and that I could not think of any particular uses for it.  However, in discussions with Frank Crisp of KTA (in Sydney), he came up with a brilliant idea for how to take advantage of this feature – so I have tested the idea and made a working example as follows.

Curved Curtain Walls

Everyone knows that Revit cannot do curved curtain walls – or at least the walls can be curved but the panels are flat, so that you get segmented curtain walls. 

In some situations this can be appropriate, but if you have enough budget for this, it may be desirable for the panels to curve too.  Some years back I created a curved curtain panel family but it was very clunky to use, and you had to manually match the radii of the wall and the panels.  Frank and I have now worked out a method to use global parameters to keep the radii in sync so that you don’t need to change the panel radius if the wall radius changes.  I have also improved my curtain panel family to make it much simpler to set up and to modify, as well as putting in some check formulas.

The Panel Family

My original curved curtain panel family had a series of reference line arcs in plan, running between the sides of the panel – one each for centreline, front and back of glass (and for any transoms).  These were used to define the outlines of vertical extrusions.  This was quite fiddly to set up and I have since learnt that it is much better to use sweeps for defining such geometry – this means that it is only necessary to draw one curved reference line to be used for the sweep path in plan.  All the sketch (or profile) geometry is drawn at the midpoint of the arc in a left or right view.  This means that an additional reference plane needs to be placed in plan at the furthest offset from the baseline or chord of the arc – this is used to host the profile sketches and it moves relative to the chord baseline depending on the radius of the arc and the length of the chord.
A formula is required to calculate this offset from the chord baseline – this dimension for the height of an arc above the chord is called a ‘Sagitta’.  Using Pythagoras’ Theorem it can be easily calculated from the chord length and the arc radius.  The radius is defined as the hypotenuse of the triangle (long side) while half the chord length forms one of the short sides (B).  The other short side (A) is calculated:
A = Square root of (C squared – B squared)
In Revit this formula is written as
A = SQRT(C ^ 2 – B ^ 2) 

The arc height (Sagitta) is simply the Radius (C) minus the short triangle side (A), so the overall formula is:
Sagitta = C - SQRT(C ^ 2 – B ^ 2)
B = Chord / 2
C = Radius

A few check formulas need to be put in as Revit does not like to calculate square roots of minus numbers, nor to have the radius equal or less than half the chord length.
The Radius parameter can be changed to ‘Radius desired’, which is the input value;  A new parameter ‘Radius actual’ checks the input value for anything less than or equal to half the chord length:
Radius actual = If(Radius desired > Chord/2, make it the Radius desired value, otherwise make it
the value ‘Chord/2 +1mm’).

In the Project

This curtain panel family can be loaded into a project and used in a curved curtain wall.  Initially the radius of the panels have to be manually set to match the radius of the wall.

If the wall radius is changed, the panel radii will be wrong

A curved wall does not automatically have a system property for Radius, so you need to add a dimension.

This dimension can then be associated to a global parameter but it must be a ‘reporting‘ parameter, so that all it is doing is getting the radius information from the wall element and pushing it back into the parameter for use elsewhere.

The curved curtain panel family can then have its radius matched to the curtain wall.  The ‘Radius desired’ property of each panel needs to be associated to the reporting parameter Radius of the wall.   

Alternatively, you can create a new global parameter that will represent the curtain wall radius if you need any calculations based on the reporting parameter.

Type vs instance

Depending on how you want to use the panels, the ‘Radius desired’ property could be either instance or type.  If you want to define the curved curtain panel as the default panel for this particular curtain wall type, then it must also be a type property.
If the curved curtain panel family Radius property is a type property, then you would need a panel type for each particular curtain wall otherwise it may break.  As a type property you only need to set it once regardless of how many panels you have in the curtain wall.

If the curved curtain panel family Radius property is an instance property, then you only need one panel type.  However, you need to associate the radius to the global parameter for each panel, which means extra work whenever the number of panels changes.

Warning: if you delete a radius dimension with an associated global parameter, it does not ask you if you want to remove the constraint.  This means you could end up with hidden constraints.

Tuesday, 13 June 2017

Filtering Global Parameter Associations in Revit

Global parameters allow you to introduce many new constraints and dynamic ways to manage your model.  This gives us more power, but makes it harder to understand what is driving changes to the model - so Autodesk have given us a suite of tools to track where global parameters have been implemented.  Amongst these tools are additional filtering capabilities.

One of the features introduced in Revit 2017 was the ability to filter elements by Global Parameter Associations (this is not available in Revit 2016 R2).  There are two ways to do this:
  • in schedules - clearly explained in the help files, but has significant limitations
  • View filters - this is not well documented in the help files, but is very powerful and extremely useful

Filter Schedule by Associated Global Parameters

You can filter a schedule by parameters that have GP associations – a new ‘is associated with’ filter method is available. This should be invaluable for tracking down all those associations that are making unexpected changes to your model

Unfortunately you cannot filter a schedule associated with more than one global parameter – well, you can but it would always force a blank list in the schedule because Revit only allows the operator ‘And’ within schedules (it is not possible for one element to be associated with more than one global parameter).

Until we have an ‘Or’ operator in schedule filters, this is a singularly useless capability unless you are working with only one global parameter!

There is also an option to filter by ‘is not associated with’ – this does allow you to add multiple parameters because excluding by several associations works with the ‘And’ operator. This is somewhat more useful in that it does work, but you are less likely to want to do this.

Filter Views by Associated Global Parameters

View filters also now work with properties that have GP associations – a new ‘is associated with’ filter method is available. This allows you to visually highlight elements by different associations. This suffers from the same problem as schedules, in that filters can only have the ‘And’ operator, meaning you can only filter by one parameter at a time.  However, there is a big difference in that you can add multiple filters per view; you can then make each filter work differently (on/off, or different hatching or colours) – making this very useful, and much more effective than scheduling by association.  It will of course give you a visual result rather than a schedule