Revit is all about data and displaying or extracting that data. So, you'd think that when a new Revit feature is added, like Global Parameters, you should be able to schedule them?
Wrong! You cannot directly schedule or tag Global Parameters in Revit.
However, I have devised a workaround (NB. this won't work on Revit 2016 R2):
Example 1 - Reporting Dimensions
In this example there are several sloping ceilings. Each ceiling has a built-in property 'Height Offset From Level', which represents the height of the base of the ceiling slope. This can easily be scheduled. It is not so easy to schedule the height of the top of the ceiling slope - unless you use global parameters:
Step 1 - Reporting Dimensions
In a section view, add a dimension from the level to the top end of the sloping ceiling
Associate this to a global parameter
Make it a reporting parameter
Repeat this step for each sloping ceiling
Step 2 - Project Parameters
Create a new instance project parameter called 'Ceiling Top Height'
Make it a length type
Apply it to the ceiling category
Give it a meaningful tooltip
Each ceiling will now have that property, albeit blank
Step 3 - Associating Global parameters
The Project parameter properties of individual ceiling elements then need to be associated to the relevant global parameters (reporting dimensions):
This obviously means that one global parameter is required for each ceiling, which could become tedious for many elements - but this a workaround, after all.
Step 4 - Create the Schedule
A schedule can be created to display this information:
A ceiling schedule could be created, showing the built-in height parameters and the project parameter with associated global parameter
Example 2 - Area Calculations and WC Numbers
Step 1 - Global Parameters
Create your global parameters, with formulas as required. In this example, global parameters are being used to calculate the number of toilets required for a community hall, where the statutory regulations require a certain number depending on the floor area of the hall:
There are two reporting parameter dimensions for room width and length.
These are used to calculate a room area - this is an extra step to be taken because even though Revit gives us room areas automatically, we are not able to associate areas as reporting parameters, so we can't use the system Area property (except as a check on the calculation)
There is a user defined "Area per WC" - which is set as 1 WC required per every 30 square metres of the hall area. This value can be changed later.
To establish the number of required WCs, a simple calculation is done: Hall Area / Area per WC This is an integer parameter so it always gives a whole number; however, you could make the formula a bit more complicated so it always rounds up to the next integer
There is another check formula that sets the minimum number of WCs to be 2 - this is partly because arrays will only accept 2 as a minimum. There is an 'array workaround' if the minimum really needs to be 1, but that is not shown here.
Step 2 - Project Parameters
The trick for being able to schedule and tag global parameters is again to use an intermediary - namely Project Parameters:
As many project parameters are created as you need for scheduling/tagging global parameters
They are defined for the categories to be scheduled - in this example it will be for both rooms and generic categories
'Area Calculated' is added to the room category so that it can be scheduled and tagged
It must be a shared parameter for tagging; if you want to apply it to just one category and only schedule (not tag), you might get away with it not being shared; for multiple category schedules it needs to be a shared parameter.
'WC Numbers' is an integer parameter added to both the room and generic categories - for rooms it is just for schedules/tags; for generic categories it is being used to drive the model - number of WCs in the array
Step 3 - Associating Global parameters
The Project parameter properties of individual elements then need to be associated to the relevant global parameters:
The room element for the hall has its 'Area Calculated' property associated to the 'AreaCalc' global parameter
Its 'WC Numbers' property is associated to the 'WCNumCalc' global parameter
The WC cubicle component has a family property for the 'Number of WC Cubicles', which is used to control the number in the array. This is associated to the 'WCNumCalc' global parameter - so that when the hall area changes, the global parameters recalculate the number of WCs and push that change into the cubicle array component..
NB. It is not possible to associate a global parameter directly to an array number in the project environment, so the array has to be built into the family - another workaround.
Step 4 - Create the Schedule
Schedules can be created in a number of ways to display this information:
A room schedule could be created, which shows the contents of the room
A better way to achieve this is to create a multi-category schedule that includes one element in the required room (Hall) and also the WC cubicles in the other rooms
Room properties can then be added for each element - in particular the project parameters for the hall room
The one element in the room 'Hall' needs to be listed in order to display the
associated global parameter values of the room (Calculated Area & Required WC
numbers), even if we don't want to schedule that element itself. This is because a Revit multi-category schedule cannot contain rooms as one of the categories - only the room properties of other category elements.
In this example, the schedule needs to be filtered to restrict it to just show generic category elements (WCs) plus the category of the element in the hall (a door in this case, but it could be anything); and then further filtered to get only the relevant ones listing
The fields from Rooms and Count, can be renamed to indicate required and supplied WC numbers
These are only two specific examples of how global parameter data can be scheduled and displayed. Of course it is unlikely to suit your exact requirements but it should demonstrate the principles to be applied to different situations.
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
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
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.