As software and standards mature and even become archaic, they inevitably attract baggage along the way. Years of technical debt amassed by well-intentioned developers and product managers will be paid for by us and our children.

This is particularly evident when we start talking about the Id of Revit elements, and the IFC GUID syntax. As most of you are aware, Revit carries a number of different identifying attributes for each and every element. Here is a basic list:

  • Element Id – the numerical form of a Revit Id, you can interact directly with this using the Select By Id command in Revit
  • UniqueId – “A stable unique identifier for an element within the document.” This is not a correctly formed UUID, but rather a concatenation of a standard UUID for the Revit EpisodeId (session based), along with the Revit element Id. From Jeremy’s post: similar to the standard GUID format, but has 8 additional characters at the end. These 8 additional hexadecimal characters are large enough to store 4 bytes or a 32 bit number, which is exactly the size of a Revit element id.
  • DwfGuid (Export Guid) – this is a correctly formed UUID in .NET / standard format
  • IfcGuid – identical to DwfGuid, but encoded differently according to IFC rules created in the mid-90s. At the time, it was deemed worthwhile to ‘compress’ the IFC Guid to the shorter form we still have to deal with today.

It would be nice if Revit and IFC shared a single common unique identifying syntax, but unfortunately this is not the case.

The above Ids do actually bear some predictable relationship to each other. The UniqueId is formed by Revit joining the EpisodeId and the encoded Element Id, the Dwf or Export Guid is created by an algorithm that has a number of conditional rules, and the Dwf Guid can be converted to the backwards-compatible IfcGuid format through a different algorithm, originally created in C. Those algorithms can be sourced in various places (see links in Further Reading below).

Also, some of these get exposed in different ways – if you create Element-bound BCF files, they will typically show the IFC Guid syntax. Further, if you export an IFC file from Revit and tick the option on the Exporter, it will write the IfcGuid to a parameter on the element.

You can query the Element Id directly in Revit (Modify ribbon, Inquiry panel, IDs of Selection):

However, for the purpose of this post, let’s assume you are using Dynamo with IronPython, and you want to query all 4 Ids from an element.

We at least need to import the Revit API and the Revit IFC API:

clr.AddReference("RevitAPI")
import Autodesk 
from Autodesk.Revit.DB import *
clr.AddReference('RevitAPIIFC')
from Autodesk.Revit.DB.IFC import *

 

Following this, we can use the various Dynamo and Python commands to access the Ids:

elementIds, uniqueIds, DwfGuids, IfcGuids, successlist = [], [], [], [], []
for i in e:
    try:
        elementIds.append(i.Id)
        uniqueIds.append(i.UniqueId)
        DwfGuids.append(ExportUtils.GetExportId(doc, ElementId(i.Id)))
        IfcGuids.append(ExporterIFCUtils.CreateSubElementGUID (UnwrapElement(i),0))
        successlist.append("Success")
    except:
        successlist.append("Failure")
OUT = elementIds, uniqueIds, DwfGuids, IfcGuids, successlist

 

Notice the commands and properties used:

  • Element Id – query the Element.Id member
  • Unique Id – query the Element.UniqueId member
  • Dwf or Export Guid – use the ExportUtils.GetExportId method
  • IfcGuid – use the ExporterIFCUtils.CreateSubElementGUID method (index 0 refers to the main element itself)

 

From here, I create a Dynamo node that eats Revit elements and gives us back these Id values:

before node created

 

After “All The Ids” node created

 

This node will be published in the Bakery package on the package manager, and to Github.

 

Further, our VirtualBuiltApp platform has been developed to store and query multiple Ids for a single element.

 

Example output from the Dynamo / Python (initial test showed the Dwf Guid is still a .NET object, that probably should get converted to a string for consistency).

[2424]
['c98618bf-7112-4e90-8a71-8ab768f2b1c0-00000978']
[<System.Guid object at 0x0000000000000071 [c98618bf-7112-4e90-8a71-8ab768f2b8b8]>]
['39XXY$SH9Ea8fnYhTeyhYu']

 

I added str() to the Python:

 

Final test showing the 4 different Id values for a single object:

2424
'c98618bf-7112-4e90-8a71-8ab768f2b1c0-00000978'
'c98618bf-7112-4e90-8a71-8ab768f2b8b8'
'39XXY$SH9Ea8fnYhTeyhYu'

 

Further reading:

The BIM Collaboration Format is getting more popular and more widely supported as the months go by. I was interested to find to this little command line utility that quickly creates a PDF file from a BCFzip. It can batch process multiple BCF files and it outputs a relatively clean PDF with the image and issue name.

What is it? From Sourceforge:
This project provides conversion/rendering of a BIM Collaboration Format (BCFZIP) file exported from Tekla BIMSight and similar applications to a PDF report. It can be useful in several ways, such as:
1) sending someone a PDF report instead of BCF file.
2) Print a hard copy of BCF report for signoff
3) Review BCF content quickly without installing or launching any BIM software

Command line usage:

cmdline.png

PDF output looks like this, 1 issue per page:

pdf.png

Download and main page at:
BCF2PDF download | SourceForge.net

Instructions, showing you can also use drag-and-drop for multiple BCFs:
1. Download the file BCF2PDF.rar from Source Forge and place in a folder.
2. Export one or more .bcfzip files from Tekla BIMSight or other similar applications.
3. Drag the .bcfzip files and drop onto the icon of BCF2PDF.exe executable.
4. One or more PDF reports will be created in the same folder as the source .bcfzip files.

XML files are everywhere. And in the BIM world, we have to deal with a range of different xml file schemas, such as BCF, Navisworks Clash Reports and Viewpoints, and so forth. Hiding inside these XMLs there is some very useful information. For example, BCF files often have Element IDs in the viewpoint.bcfv component, and Navisworks XML files often have point XYZ values. Can we easily get access to this information for use in Dynamo, and then in Revit?

Yes, we can! There were one or two ways to do this in Dynamo before, but here is my take on it…

Dynamo ships with IronPython, which in turn ships with an XML handler called ElementTree. I have created some basic nodes that give us access to ElementTree functions in Dynamo. Along the way, I learnt a bit about encoding and character sets. It turns out that Navisworks often inserts tricky characters into the XML (like the diameter symbol), so as a workaround (for now) I do a string encoding roundtrip to get rid of these problematic characters. In the same node, I create the ElementTree object: this is a special object that essentially represents structured information about the XML data. The initial import looks like this:

Once we have this ElementTree object in hand, we can start to do some interesting things, like:
Iterate through tree to get individual XML elements

iterate.png

and Show a hierarchical representation:

With the individual elements, we can Get Attribute names and values, and the Get the children of those elements:

Obviously, you can immediately do some nice lookups against these lists in Dynamo, depending what information you want. However, on large XMLs this can be quite slow. Happily, ElementTree provides some basic XPATH support, which looks a bit like this:

With the XPATH support and an understanding of the xml hierarchy, I have created a node to do XPATH calls straight to the ElementTree object:

Now that we can ‘snip’ out useful information from the XML, we can do interesting things with it, like make some points:

When it comes to BCF, its a little bit more challenging. I haven’t figured out how to unpack the bcfzip directly to memory (yet), so we have do that manual step first. Once we have a ‘folder’ from the BCFZIP, we can get the bcfv files from inside it and then get information from them, like this:

So, in the latest Bakery package are the nodes needed to read a variety of XML files, get information from them, and do some useful things with that information. It was a learning experience for me, and I hope its useful to you 🙂

version.png

If you are interested in issue tracking, BCF, and multidisciplinary coordination, then the new “BIMcollab” offering from Kubus may be worth a look:
http://www.bimcollab.com/en/BIMcollab/BIMcollab

It looks essentially like a cloud manager for BCF issues. From the marketing spiel:

  • issues directly linked to objects in your BIM together with the correct viewpoint for quick visualisation
  • all the information needed at hand to lookup, create and solve issues within your BIM tool,
  • to save all your issues in the cloud and be able to access them from anywhere at anytime.


BIMcollab centralizes issue management in the cloud, simplifies this process and offers a structured way of storing, sharing and managing issues. But more important: you have the information right where it’s needed most: directly within your BIM model checker and BIM authoring tools. 

If you are already using it, feel free to comment and let us know what you think.
UPDATE some links from the press release:

Kubus BIMcollab® release 
KUBUS announces the release of a new ground breaking product: BIMcollab®. This BCF based issue management system for BIM in the cloud operates across applications. It helps bridging the differences between BIM tools, and targets the multidisciplinary cooperation between companies working on construction projects.
 
 
Join BIMcollab® Join BIMcollab®

We are happy to invite you to try BIMcollab for free. Upload BCF files or connect to BIM applications and invite team members to view your issues. Improving communication in BIM projects starts today. Join us >

 
 
BCF Managers for free BCF Managers for free

With the introduction of BIMcollab® we now offer our BCF Managers for free. These add-ons for Revit, simplebim and ArchiCAD have a direct link to BIMcollab® from the before mentioned BIM authoring tools. Download >

 
 

BIMcollab®
Why BIMcollab?
Features
Developer

Part of working in a BIM environment is putting together all of the little pieces that you know and turning it into a useful workflow. Do you have a 3D file, such as an FBX, that has some camera views saved in it, and you would like to convert these to BCF, perhaps for eventual import to Revit or some other application?

Navisworks can help here. It is pretty smart when it comes to most 3D formats. Importing an FBX will bring in camera views as Saved Viewpoints. If you have an FBX file from 123D Catch, it will contain Camera views that match the actual camera locations. Here’s what to do:

  1. Append the FBX to Navisworks 2014
  2. Use the addin and method here to export from Navisworks viewpoints to BCF issues
  3. Import to Revit or your software of choice using the relevant BCF importer

There are a couple of options:

  1. Use BCFzip format to Export viewpoints from Navisworks 2014 and into Revit camera views (ortho or perspective)
  2. Use Kiwicodes Bonus Tools or BIM One Clash Sphere Generator to import a Clash Report XML directly into a Revit project

Some of you may say “why not use Switchback?” Well, you don’t always have access to original source files necessary to make this happen. BCF is environment-neutral, and if you are using Revit zero (origin to origin) linking, you should have no problems getting this to work.

Check out this 30 second demo:

My forum post:
Re: Revit to Navisworks to Revit? – Autodesk Community

To get the CASE BCF Exporter for Navisworks Manage 2014 working, you need to make sure you are running Navis 2014 with SP1 but WITHOUT any further hotfixes. The required version number is:
11.4.0.101763

If you have already installed the hotfixes, go to Control Panel, Programs and Features, Uninstall and then reinstall Navisworks Manage 2014 completely (you will need your install media). Then apply SP1. Then install the BCF Exporter using the Case Addin Manager. You can manually copy to the following directory if necessary:
C:UsersUSERNAMEAppDataRoamingAutodesk Navisworks Manage 2014Plugins

Once installed, it is quite easy to:

  • export the BCFzip from Navisworks, 
  • open in Revit addin, 
  • look for a particular view that you would like to solve, then 
  • click Open View. 
  • Set Discipline to Coordination, 
  • Detail Level to Fine, 
  • Far Clip Active – start at around 5m and adjust as necessary, maybe 
  • turn off Pipe Insulation. 
  • Make a view template of these “BCF view” settings to easily re-apply.

I think that BCF is going to become a significant part of our BIM workflows moving forward…

More info:
BCF Exporter for Navisworks 2014 – collective BIM

Navisworks .NET: Deploy Addins (Plugins) – RevitNetAddinWizard & NavisworksNetAddinWizard

NavisworksNetAddinWizard.zip – Google Drive