The COBie Extension is a key part of the Revit BIM Interoperability Tools that our team at CADD develops and supports for Autodesk. It is the best (and cost effective) way to help get your Revit model aligned with a COBie required deliverable. But with that comes some complexity and possibly obtuse ways it works to help be as powerful and flexible as possible.
I recently walked through the steps to update a COBie Component Space information for a user and thought I would put that information here for any future folks who hit the same confusion.
Overview
First of all, Revit Components marked for COBie populate their COBie.Component.Space parameter by identifying what Revit Room/Space they are in and copying that Room/Space’s COBie.Space.Name parameter. So, the initial step is to make sure the Room/Space has the proper data, then run COBie Update on Components to copy that Space data.Initial COBie Space to Component Population
In this first round, I setup my COBie settings under Setup Project to be "LEVEL_NUMBER_NAME", then ran COBie Update and set everything to SKIP except for SPACE > NAME which is set to ALL. That updated the Room/Space COBie.Space.Name parameter with the original settings:After that, I ran COBie Update again this time everything set to SKIP except for COMPONENT > SPACE set to ALL. That copied the Revit Room/Space data from the COBie.Space.Name parameter to the Revit Component’s COBie.Component.Space parameter:
On Create Spreadsheet, all my Room-Aware Revit Components had the proper Space information (ignore other n/a info – I did not populate all fields):
Changing and Updating COBie Space Name Data
The next step would be to make project setting changes and get the updated data to push through to the Room/Space to the Component, then to the Spreadsheet. For the test, I simply changed the COBie Setup Project > Space Name Builder to only be the "NUMBER".Once updated under Setup Project, I ran the same COBie Update with SPACE > NAME set to ALL, which updated my Room parameters to look like this:
That updated the Revit Room/Spaces successfully. Again, this parameter is what the Revit Components copy to fill in their COBie.Component.Space data.
I then ran the COBie Update with COMPONENT > NAME set to ALL, everything else set to SKIP. This also worked as expected:
Now that my Revit Components are updated, running COBie Create Spreadsheet gave me the expected results:
Crazy Obligatory Graphic
Made a graphic showing this simplified. Does it help? Only time will tell...Random Notes
Some random items to fill in the gaps.- You Revit Room/Space does NOT need to be flagged for "COBie" for the Revit Components in that Room/Space to copy the data. You just need to be sure that the COBie.Component.Space parameter is filled in. The Component DOES need to be flagged for COBie to export it to Excel, however.
- You can manually fill in any of this data directly in the parameters (or maybe you want something like Dynamo to do it). But if you re-run the COBie Update, your manual info might get overridden.
- The COBie Extension can only fill the data in for Components that are "Room Aware." Categories of elements that may span multiple rooms, Walls, Floors, Piping, do not have built-in ability to find their Room/Space, so the COBie Extension cannot find it either.
Wrap-Up
This is obviously a very deliberate series of steps, but I did it this way to try to best illustrate the process the COBie Extension takes to populate Components’ COBie.Component.Space parameter.COBie Update is designed to try to update parameters in an order that gives priority to values that are needed by other elements, but the tool and amount of data and combinations is complicated and not every factor can be take into account. However, when I ran a quick test with a different setting for the COBie Space Name, it did update the Space parameter first, then update the Component parameter with that new value. So, in this specific case a single Update run was successful. Often, we find users will update Project Setup, but skip running the COBie Update again to actually populate parameters with the new values.