Archive for the ‘Production Optimization’ Category


Created By / Last Updated By in 2013 >

July 27, 2013

If you want to track down the last user to update a model component in your Revit project or determine who created it you can by simply going to the bottom of the Revit interface screen and selecting the WorkSharing Display button.  At the drop down select “Owners”
Revit-Last User-01

Then hover over the object you want info on.  You should get an info box like this.

Revit-Last User-02

Of course this assumes you are using a central file and worksharing.

Be careful though, over using this capability to point the finger at others can ultimately be your downfall, since Karma has a way of coming around to bite you in the backside.  Always elevate your inquiries to the professional level, seek an explanation and strive to educate, understand and reach a solution that reduces the potential reoccurrence of the problem.

Strive for Temperance


Beyond Grid Guides – A Revit Layout Technique

October 15, 2011

At Breckenridge we use a grid system I developed many years ago in my private practice.  Essentially it is two grid systems.  One divides the sheet for details and enlarged plans and helps set schedule limits and note areas.  The other is a view title guide designed to help provide for a uniform placement of the view titles.

The first grid is in black and is broken into segments so you can hide individual segments and create rectangular or enlarged grid areas.  I group this grid and assign it a name unique to the sheet.

The view title grid is in red and is not segmented.  I typically have this grid grouped and hidden.  I use the reveal hidden light bulb at the bottom of the interface to highlight this grid and then register my view title while in this mode.

I find these to be great organizational tools.

One day all this sheet layout process will disappear but it will take a mobile heads-ups field display system that the contractors can utilize.

Paperless Society?  Still Waiting. 😦



Improve Efficiency – Model / Detail Elements Disconnect

October 5, 2011

Often when working in the interior elevations we are tempted to use region fills to represent complex tile patterns and symbolic lines for items like wall base heights.  There’s nothing wrong with this approach until you need to make adjustments in your finished floor elevation because the topography changes.  The model does not globally recognize these detail elements and as a result these items will not move vertically with the model.  This holds true for notes as well.

One way to compensate for this disconnect in the interior elevations is to group the symbolic lines, fill patterns and notes (if desired) and then dimension from the floor level line to a reference line in the group.  Lock the dimension and now the group will move with the model in elevation. Hide the dimension using the right mouse click Hide in View>Element if you don’t want to see the dimension string.  Or align and lock a horizontal line in the group to the model.  Locking to a surface pattern, like a horizontal tile grid, will also move the symbolics & annotations since the surface patterns maintain there relationship to the wall limits.

Also be aware that Modeled in Place components will have a similar disconnect if not dimensionally referenced to a component of a model (preferably a level) that controls global height.

btw: If you ever loose the finish group icon in the head ribbon just type ‘fg’ to finish the grouping command.

Revit Encounters


Revit Crash – Insufficient Space on the…………………C-Drive Error

June 8, 2011

If you get this error it’s because your system’s paging limit for the Virtual Memory Allocation is set to low.  Check out this link for accessing and changing the VMA setting.,topicNumber=d0e1694
Typical responses to this type of limitation: Revit evaporates or locks up, or Revit gives you the memory warning and prompts you to save a recovery file, which more often than not will fail and the application will go into a recovery file prompt loop. If this happens just end the program and hope you haven’t lost to much work.

To get ahead of this I suggest you check your VMA and up the default limit substantially.

At my age I can use all the memory I can get!

P.S.  Insufficient drive space can also be due to too many temporary files on  the drive.  This type of problem is accompanied by a warning to free up space on the C-Drive or redefine Windows user variable TMP to be a folder on another drive.  To purge your TMP files use the Disk Cleanup utility in the Programs>Accessories>System Tools folder.  Reboot after running the Cleanup routine.



Point Clouds in Revit 2012

April 29, 2011

” With the advent of the Autodesk Revit 2012 platform, you can now view point clouds directly inside Revit. Scan to BIM™ 2012 takes this one step further, enabling you to not only visualize point clouds in Revit, but also to interact with them, assisting with automated recognition and placement of architectural elements such as walls, as well as MEP elements such as pipes and ducts.”

Imaginit Technologies website:

There’s a brief web video on this page describing the usage of this add-on.


Structuring a Conditional Statement

March 27, 2011

I need a label in my family that will monitor a numerical input and change its value as a specific number value limit of another label is reached.

Wire gauge values in a panel schedule change as the wattage goes up.  This would be one example where the numerical input (watts) is being monitored by the wire gauge (label) and will change at specific thresholds.

The label requires a conditional statement that checks each wire gauge threshold and when a specific value is reached renders the appropriate wire gauge.

NEC Table 310-16 sets the following AWG (wire gauge) values for 75 degree (F) temperature rated copper conductors

14 AWG = 15 amps
12 AWG=  20 amps
10 AWG= 30 amps

Watts / 120v = Amps

CL1 = Circuit Load 1 (represents that manually input Volt*Amps VA or Watts for Circuit 1)

Label Value:
Wire 1 (represents the wire gauge value in the panel)

Conditional Structure for Wire 1 Label
    is assigned in the Type dialog of the family as follows:

if(CL1 = 0, 0, 
__This first logical check says if the value for the label CL1 = 0 then return 0 which is
__assigned to the label  Wire 1.  The comma after the last 0 is where you put in the
__results if the value is not 0 which is your  next conditional check.  In my working
__version I used the 0 value to drive a visibility control of a text  based label which
__had the value of “—“ since I did not want to see a 0 value for the wire gauge.

if(CL1 / 120 < 15, 14, 
__ The next logical check says convert CL1 to amps by CL1 / 120 (as per our
__formula) and if it is less than 15 set the value for CL1 to 14 for 14 gauge wire. 
__This conditional follows the previous giving us a  structure of
__if(CL1 = 0, 0, if(CL1 / 120 < 15, 14, 
__the trailing comma is looking for the results if the value is 15 or larger and is
__where we place the next logical check

if(CL1 / 120 < 20, 12, 
__ The next logical check is similar to the previous only this condition checks
__for amp values from 15 to  just below 20 and assigns the value of 12 to the label
__Wire1 giving us a structure of 
__if(CL1 = 0, 0, if(CL1 / 120 < 15, 14, if(CL1 / 120 < 20, 12,
__ Again we have a trailing comma so we  need another logical check or
__closing value.

if(CL1 / 120 < 30, 10,
__The next logical check is again similar to the previous but checks for the
__amp values from 20 to just below 30 and assigns the value of 14 to the label
__Wire1 giving us a structure of 
__ if(CL1 = 0, 0, if(CL1 / 120 < 15, 14, if(CL1 / 120 < 20, 12, if(CL9 / 120 < 30, 10,

At this point we need to address what the value will be if we exceed the 30 amp limit.  In reality this conditional statement has numerous more checks for 50, 65, 85, … 200 amp conditions but I’ve shortened this example.  In my working version of this I had the statement return a value of 100 if I exceeded the wire size limit of the largest breaker that would typically be put in an electrical panel.  I used the 100 as a trigger for the visibility of a warning label that resided right on top of the location where the wire gauge was on my panel schedule so it was obvious that a value was entered that would not be accepted by the panel. The final statement reads as follows:

if(CL1 = 0, 0, if(CL1 / 120 < 15, 14, if(CL1 / 120 < 20, 12, if(CL9 / 120 < 30, 10,100))))

Note that you need 4 )))) to close the statement, if you count the corresponding ( brackets you will also find 4 so you will need to balance the brackets to close the statement otherwise Revit will return a Boolean error warning. 

This is an example of a nested conditional statement.  The working version was more complex in that the Wire1 label had to check two different CL1 values.  One where the values were as input and another where the values were bumped up by 25% for continuous loading as is the case with commercial lighting circuits.

When you start to build this type of intelligence into your Revit families you will begin to see how long and complex the conditional statements can become but this kind of automation is very valuable for improved accuracy and quality control.  Also when you create these kind of families I highly recommend running a performance check on every formula driven label to assure it’s working properly.  Given the time it takes to create one of these gems you will begin to see why the B.I.M. operators that build these high performance components have issues with sharing their B.I.M. files or turning the B.I.M. over to the Owner.  Personally I strip these components from my B.I.M. model before I share it with anyone.  One word of warning.  Nested Conditional Statements rigorously test your ability to handle logic and will drive you crazy.





Seeing my Psychiatrist Tomorrow.


Working with Formulas in Revit

February 6, 2011

There’s a nice synopsis on Revit formulas and syntax at:

Thanks to Mike Hardy Brown for the post.  Partially duplicated below incase we lose the link.


TIP: Keep your units consistent. Do not mix units in your formulas. You can use constants with no units assigned to them.

Length = Height + Width + sqrt(Height*Width)
Length = Wall 1 (11000mm)+ Wall 2 (15000mm)
Area = Length (500mm) * Width (300mm)
Volume = Length (500mm) * Width (300mm) * Height (800 mm)
Width = 100m * cos(angle)
x = 2*abs(a) + abs(b/2)

Create the family geometry.

Create and label dimensions to the geometry. See Labeling Dimensions. Do not select the Instance Parameter option. In the Family Editor, formulas are available for type parameters only.
Click Family Types from the Design Bar.
In the Formula column next to the appropriate parameter, type the formula for the parameter. Notice that the formula begins with an equal sign (=).

Formulas can comprise conditional statements. You enter conditional statements in the Formula box for a numerical parameter.

A conditional statement uses this structure:

IF (, , )

This means that values are entered for the parameter, depending on whether the condition is satisfied (true) or not satisfied (false). If the condition is true, return the true value. If the condition is false, return the false value.

Conditions can use numeric values, numeric parameter names, or Yes/No parameters. You can use the following comparisons in a condition: <, >, =. You can also use Boolean operators with a conditional statement: AND, OR, NOT. Currently, <= and >= are not implemented. To express such a comparison, you can use a logical NOT. For example, a<=b can be entered as NOT(a>b).

The following are some sample formulas that use conditional statements.

Simple IF: =IF (Length < 3000mm, 200mm, 300mm)

IF with logical AND: =IF ( AND (x = 1 , y = 2), 8 , 3 )

IF with logical OR: =IF ( OR ( A = 1 , B = 3 ) , 8 , 3 )

IF with Yes/No condition: =IF (Long, 50, 60) where Long is a Yes/No parameter defined as Long = Length > 40

Embedded IF statements: =IF ( Length < 35′ , 2′ 6″ , IF ( Length < 45′ , 3′ , IF ( Length < 55′ , 5′ , 8′ ) ) )

The following are valid formula abbreviations.

Addition— +
Subtraction— –
Exponentiation—^: x^y, x raised to the power of y
Square root—sqrt: sqrt(16)
e raised to an x power—exp
Absolute Value—abs

Driving Revit Functionality


Purge Unused – The Good the Bad and the Ugly

December 31, 2010

The Good: How the Purge Unused Works in Revit 
The Bad: What can go wrong, fortunately this was a training session.
The Ugly: What happens after the Boss finds out you did the My Bad above.

This operation will allow you to perform a surgical strike to remove unwanted Revit items that don’t utilize the typically operations for removing like dimension string types.

I would highly recommend leaving this operation to the Revit Manager.

Fair Warning


Revit Dimensions Explained

December 31, 2010

No need to reinvent the Revit Dimension here, get the full explanation.

Strung Out



December 30, 2010

Noteblocks are one way Revit lets you create tag dependent notes that will appear in a schedule on your sheet.  They can be used for construction notes or finish notes and unlike Keynotes are not tied to the Keynote table that Keynote Manager lets you access.

I ran across this nice webcast that gives a quick overview of how to set up the Noteblock tag as well as the  Noteblock schedule.

Unfortunately the Generic Annotation tag, which is used for this process, does not self generate the leader line like a keynote does.  Consequently you have to go through a few more click operations to get the leader in place.