Wednesday, May 09, 2007

The Challenges of Phase-Aware Revit Apps.

Revit Phases
One of the more interesting capabilities of Revit (for a long time now, not a recent one) is the concept of Phases. Specifically, that you can define, for example, the "Existing" state of a building, then define a "New Construction" phase and demolish existing elements (like walls) as well as add new elements.
Internally, each type of element within Revit has a "PhaseCreated" and a "PhaseDemolished". Sounds pretty cool, right? It is.

A Couple More Worthwhile Notes...
As I understand it (and real Reviteers, please jump on me if I'm wrong on this) - while Elements can be created or demolished in particular phases, they cannot change. If the idea is to change something, it must be demolished and re-created. Another interesting behavior is that of Room objects - room objects are locked to a single phase (which makes some sense, seeing that they would wind up changing between phases if you dropped in a wall, for example). Some strange things do happen out there in the wild, though - case in point - an existing window which is demolished seems to magically cause a "filler wall" to be created.

A Developer's Life Gets Harder
Here's where the hard part comes in as an application developer, though - when you have multiple phases within one model, are moving into not just 3D CAD but 4D (time). As developers we are used to dealing with the model as "the current state reality" - but in Revit, when you dig through the model, you're digging through a whole potential timeline of model construction - you have to do extra work to determine the state of the model as of "Phase X".

For example, if you're interested in the "New Construction" phase, you need to ignore any elements that are existing but demolished as part of the "New Construction" phase.

One of the interesting new capabilities in 2008 is that you can access the ROOM, TO_ROOM and FROM_ROOM for FamilyInstances (doors, windows, light fixtures, etc). The trick is that this ability to access room data is actually "Phase-based" - when you want to know, for example, which room a desk is in, you have to specify during which phase of construction.

The more I grasp the Revit Phased approach, the more I think that most of the applications we're developing will need to prompt the user for which phase they should work on. While specific companies may not be using Phases today - you probably still need to support the phase checking concept (because if you don't and someone decides to "try it", then you'll probably get the wrong answer!).

To that end, we're posting a new version of Earth Connector for Revit, which prompts the user for which Phase they would like to display.

This 4D stuff is cool, but developers may need to stock up on some Ibuprofen.


Glenn McGuyre said...

Revit Phases
You should demolish in the existing phase. For construction drawing purposes, there is little need for an existing drawing.

A Couple More...
Whithin an object's properties the phase of it's demolision can be changed. Tip, if an object is created and demolished during the same phase it turns blue, identifying itself as a temporary object (ie. temporary wall) and should print grey.

A Developers Life...
The To_Room, From_Room was available in earlier versions. It is handy with door schedules where the rooms are important. Tip, doors in curtainwalls/storefronts are really not doors they are panels and they don't schedule very well. It is a hit and miss for my experience.

Yes, in this 4-D world it is very important for the user to know where and when they are.

Matt Mason said...


While I agree that the existing phase doesn't have much use to construction drawings, I still find it useful in my own personal home renovation project :).

With respect to the FamilyInstance Room, To_Room, From_Room - it was available in interactive Revit schedules for a few releases - but it only was made to work in the API in the 2008 release. I agree that it still has its challenges being useful.

Aaron Maller said...

I cant go along with the demolision during the Existing Phase. That works wonders assuming a Single Phase of Demolition and New Work, but at some point (in a multip phase Revit model) you need to have the Phases working as intended, or you cant get anywhere.

In a project with two Demo/Construction Phases, for instance, if the demo is done in the existing phase, youre Phase 2 Demo wont show up properly, as it will either be demolished in Phase 1 (which means the Items will be "temporary in Phase 1," resulting in any graphic overrides and whatever other implications go with Temporary items, or they wont show up at all, if you havea minor amount of demo and want to do a Phase 2: Show all, which we do on some elements.

I do agree wholeheartedly, and have written my Product Feedbacks to Autodesk, saying that we need every object to not only be phase aware, but to be Phase Filter in view aware. Im sure you are both aware of the standard architecturaly graphic notation for doors, and that is one instance, but there are many more. The option in Families to depict certain graphical representations (aside from linweight) for new and existing items would be very powerful.

Sorry for the hijack (this isnt API related), but its a great conversation (Revit Phasing...)

Matt Mason said...

No problem on the hijack - I agree that it's a very deep topic... and that most Revit users aren't making enough use of it.