Revit does not come with strong official support for IFC. This guidebook relies on Revit users using the revit-ifc open-source Revit IFC plug-in.
Simply installing the plug-in does not guarantee the quality of IFC exports and imports. Many parameters need to be manually created and export settings need to be manually written. To aid this procedure a shared parameters file is provided. This is similar to the shared parameters provided by Autodesk, with some additions to overcome shortcomings in the Autodesk version, in particular for geolocation and type vs instance parameter name clashes. Many of these parameters will be used throughout the guidebook.
Whenever one of these shared parameters are used, they must belong to the
IFC Parameters group, as shown below.
You can download the OSArch Revit Shared Parameters File:Revit-sharedparams.txt, which is based off the official Autodesk-provided shared parameters, but contains minor tweaks to accommodate for common Revit workarounds.
The Revit IFC exporter also requires the user to define property sets to be exported. By default, the definition is empty. A template is provided below.
A starting template for Revit user defined psets can be found here: File:Revit-psets.txt
Revit and IFC
GlobalId values are not visible in Revit by default. This becomes problematic if users are trying to reference an object by its ID. The only way to see the GlobalId is to export your Revit model to an IFC file with the
Store the IFC GUID in an element parameter after export option enabled in
File > Export > IFC > Modify Setup > Advanced window, as shown below. It is highly recommended that this option is always enabled.
After your export is complete, you can now see a new parameter called
IfcGUID for your objects as shown below. Despite the inconsistent naming, this is actually the IFC
GlobalId. This property can now be overridden, copied, or searched for. If the text is deleted, it will be rewritten on your next export. However, it will always rewrite the original
GlobalId, as it is predetermined inside Revit. There is no way to regenerate a fresh ID for an existing Revit object.
It is possible to determine the IFC
GlobalId without the overhead of exporting a full IFC file, since it is predetermined. Every Revit element has a
UniqueId parameter, which is a hexademical string formatted in groups of
8-4-4-4-12-8. This string contains 8 more hexadecimal characters at the end compared to the standard UUID formatting. These 8 trailing hexadecimal characters store the Revit
ElementId. The remaining standard UUID formatted string is called the Revit
EpisodeId, which provides true uniqueness, as the Revit
ElementId has no guarantee of uniqueness.
ElementId = 130315 (Decimal) or 1fd0b (Hex) < ........... EpisodeId .......... >-<ElmtId> UniqueId = 60f91daf-3dd7-4283-a86d-24137b73f3da-0001fd0b
UniqueId can be converted into an IFC GUID by XOR-ing the last 8 characters of the
EpisodeId and the 8 character
ElementId. This provides an IFC GUID in standard UUID format. Revit calls this standard UUID format the "DWF GUID" for historical reasons, but it contains the same data as the IFC GUID. It may then be compressed to the 22-character IFC base64
Example Python code of this procedure is shown below.
unique_id = UniqueId.replace('-', '') dwf_guid = unique_id[0:-16] + hex(int(unique_id[-16:-8], 16) ^ int(unique_id[-8:], 16))[2:] # 60f91daf3dd74283a86d24137b720ed1 ifc_guid = ifcopenshell.guid.compress(dwf_guid) # 1W_HslFTT2WwXj91DxSWxH