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)
where
B = Chord / 2
C = Radius
where
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’).
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.
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.