Changing and updating Shared Coordinates in Revit can be quite a challenge. At Virtual Built Technology we often create a Revit Control File to manage and transfer project datums, shared coordinates and other compliance items for the project team.
This video describes the techniques and challenges involved in updating and instituting shared coordinates on a Revit project. It also includes the steps involved in adopting other Revit modelling standards and requirements into your file.
Here are some of the tips included in the video:
how to un-share coordinates for linked models
how to acquire new coordinates
checking that coordinates are correct for linked models
using Transfer Project Standards – Project Info as a method of fixing coordinates
other model compliance steps including: updating base point settings, transferring Phase Settings, loading a Start View for the project
copying locator elements
copying scope boxes
using Dynamo to automatically generate the required worksets for compliance
I love Box. It is an incredibly robust file sharing tool and it has rarely let me down even though we have used it extensively on many large BIM and VDC projects. Recently, Box has been pushing people away from Box Sync and into Box Drive. I was syncing over 1 tb of data across many thousands of project files, so I could see the advantage of a more ‘on demand’ system. Box Sync actually struggles to scan through the entire folder structure – so much so that it sometimes never quite catches up in a 24 hour period. On the other hand, Box Drive uses a 25 gb transparent cache, and you can still mark certain folders to keep them offline. Another key difference is that Box Drive will always show you all of your files and folders, and it will download them on-demand (unless set to keep offline). This means that there is no web-based control for ‘Sync Folder’ or similar, the setting is basically on the client device.
A mini-install will run, and then you will be prompted to login
After you login, you will be prompted to uninstall Box Sync. You will have to make sure any files in Box Sync are closed.
I received this annoying warning a few times:
As it kept failing, I did have to restart my computer. The uninstall picked up automatically after the restart. Even after a long time ‘restoring disk space’ did not complete…
My workaround was to:
– boot into Safe Mode
– rename the existing Box Sync folder to “Box Sync.old”
– upon reboot, the Box Sync uninstall script thinks that it got the job done, even though I helped it along
Following this step, I wanted to move the Box Drive to the same absolute folder location I had previous, which was E:\BOX\Box Sync\contentfolders .By default it was pointing to a user location, that is C:\Users\lukes\Box\ .There are some notes here on how to do change the Box Drive folder location.
Restart Box Drive after setting the CustomBoxLocation Registry key shown below:
Unfortunately, this did not have the desired effect. It resulted in a folder structure like: E:\BOX\Box Sync\Box\contentfoldersAnnoying! So you can’t actually rename the \Box\ piece of that folder structure…
My next plan to work around this limitation was:
– put Box in a different folder, and
– make a symlink to the new folder.New location in Registry:
Finally, I made the symbolic link like this:
mklink /d "E:\BOX\Box Sync" E:\BOX\Box
Now, I can use all of my legacy Box Sync links with Box Drive, and they will all correctly redirect to the new Box Drive location.
Obviously, you have to go through now and ‘Mark Offline’ any folders that I want to keep permanently syncing to that device.
Update: Changing the Box Drive Cache Folder location
I discovered the Box Drive cache was using heaps of hard drive space
So I decided to move that cache folder using yet another symbolic link… Here’s how:
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:
from Autodesk.Revit.DB import *
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:
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:
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).
[<System.Guid object at 0x0000000000000071 [c98618bf-7112-4e90-8a71-8ab768f2b8b8]>]
I added str() to the Python:
Final test showing the 4 different Id values for a single object:
Disclaimers (use at your own risk etc) and notes on how to use the scripts are as per previous post.
Here is the note from Thomas:
Hi Luke, I have used your script from https://wrw.is/script-to-disable-all-revit-addins/ and I have adjusted it a bit. I have local users without admin rights (training center computers), so I go to the users computer, open the file with rightclick > Powershell and the Admin login is shown. I got also some problems with the allusersprofile and the appdata path variable, because as soon as I login as admin, the appdata path is not anymore the user path. Thus I have changed it to the path itself. The last 2 lines help to see the errors.
Thanks for your script, it helped me a lot! My scripts are attached if you want to use it on your blog =)
Thanks to Thomas Vogt for sharing his work on this!
Look at the top of the dialog box, it should say “Export IFC (v.188.8.131.52)
Here is a list of fixes from the Release Notes:
• This is generally a bug fix release with some new IFC functionality.
New Export Functionality:
• IFC Exporter now supports IFC Spatial Container assignment override using IfcSpatialContainer parameter. Valid values are: “IFCSITE”, “IFCBUILDING”, or name of the Building Storey
• Improved detection of Door operation type using the 2D swing symbol (arc). The improved version detects range of angles (not limited to 90, 180 or 360 degrees only)
• Added support for IfcCivilElement
• Replace IfcRelConnectsPortToElement with IfcRelNests for IFC4 export as recommended in IFC4 specifications, allowing non-IfcDIstributionElement to participates in the connectivity
• Added support for RampFlight and Run from generic models or family representing more complex Ramp for export to IfcRamp and IfcRampFlight
• Added various property Calculators
• Improve performance when exporting a large mesh
• Enable IFC Property Templates
• Allow multiple Property Template mapping from txt
• Projection improvement
• Enable site and project property creation
• Utilize Site GlobalId method
• Add multilanguage support files for German language (DE)
• Provide a complete list of all Shared Parameters used by Revit on export including ALL properties defined in IFC PropertySet Definition for both Instances and Types. The lists are included in the installer and will be placed in the install folder: IFC Shared Parameters-RevitIFCBuiltIn_ALL.txt (for the Instance parameters) and IFC Shared Parameters-RevitIFCBuiltIn-Type_ALL.txt (for the Type parameters).
• Improve consistency for setting the object direct attributes, support IfcObjectType[Type] special parameter to drive instance ObjectType parameter from the Type, update the shared parameter definition files (now for [Type] parameters we will also maintain the GUID as long as it remains)
• Incremental work towards IFC4RV 1.2 MVD
Export Bug Fixes:
• Consistent ExportAs entity and its PredefinedTypes
• Export fails when there is no associated Plan View to a level
• Additional fix for error getting 2D data when there is no Level associated to the FamilyInstance
• Various fixes related to missing geometry and export failures
• Fixed performance issue in IFC2x3 export due to error in creating types
• Fixed issue with slanted Pile
• Fixed issue related to element that is split into parts
• Improvement in handling level of Part Override
• Some improvements on classification (issue #31)
• Improve voiding of IfcMappedItem representation (issue #9)
• Fixed issue on Composite curve tolerance (issue #5)
• Fixed issue where element is still exported even though it is set to not-exported in the mapping table
• Bugfix for incorrect cylindrical hollow core Beam export in IFC4RV
• Fixed for issue #51
• Bugfix based on Pull request #52 for MEP connector, and a few clean-ups
• Fixed minor issue to ensure generic element exporter will generate consistent GUID for the instance
• Fixed issue when OverrideElementContainment is used but the Site does not have site geometry (from Topography surface)
• Add support of OverrideElementContainment also for SpatialElement (Room/Space/Area). This enables export to place IfcSpace directly to IfcSite for example, which is useful for outdoor spaces
• Refactored the handling of valid entity and type and fixed a few defects related to it (Github issue #68)
• Fixed issue with Stair Landing that is offset far away from the supposed location
• Fixed issue with missing geometry when assigning IfcExportAs to the Spatial Element (Issue #23) However, in IFC4RV or DTV, there is a fixed list of valid entities that will be enforced, entity such as IfcExternalSpatialElement will be exported as IfcBuildingElementProxy.
• Fixed performance issue when there is a large triangulated geometry for export to IFC4RV
• Fixed issue of exception raised during export when “Export schedules as property sets” option is selected, and the model contains ViewSchedule from the template
• Update Source/IFCExporterUIOverride/IFCExporterUIWindow.xaml.cs (issue #59)
• IFCBooleanOperator.Union don’t work! (issue #32)
• Fixed issue in exporting IfcBuildingElementProxy that assigns an invalid enumeration for CompositionType in Ifc2x3 export
• Fixed issue related to opening that cuts through multiple walls (note that this is not yet 100%. In some cases, due to the extended body of the opening (that is defined in the native code) there may be more cut than it should for a few cases
• Fixed issue with changing GUID of Window or Door when it is in the context of the opening that cuts multiple walls (issue “IFC Guid on family” in SourceForge)
• Fixed IfcWindowLiningProperties, IfcWindowPanelProperties GUID issue
• Improve handling for multiple meshes in a tessellated geometry that causes missing some surface body.
• Fixed issues of UserDefined propertysets that fails to recognize the Pset assigned to a Type. Also improve the handling for Conditional Pset (by PredefinedType)
• Fixed regression issue #70 missing toprail for IfcRailing on export
• Fixed issue with “runaway” flex duct with “Keep Tessellated Geometry as Triangulation” option selected (issue #58)
• Fixed regression issue (issue #96) IfcZone ObjectType not exported
• Fixed issue of Naming override/default value, and issue of Qto_ properties are not exported
• Fixed issue on a wrong enumeration for the SweptArea (it was set to .CURVE., should be .AREA.)
• Fixed for orphaned entities and wrong footprint information due to incorrect projection direction for IFC4RV requirements. IFC4RV Beam (Arch) is now without error in the automated test
• 1st fixed for issue related to runaway parts in “export only elements visible in view” (there are still situations that may cause a wrong rotation, but the test case reported in issue #86 so far looks good)
Import Bug Fixes:
• Improve voiding of IfcMappedItem representation (#9)
A while back, I conducted extensive research into Revit content management tools. I was commissioned by Unifi to do this, and I told the story of the process over here. You can also watch the related webinar here. Over the last couple of years, some of you have approached me to gain access to the master Excel comparison matrix document that I produced. Recently, Jay Merlan updated this document on behalf of Unifi and it has now been approved for public release!
The document is very detailed and consists of a number of key sections:
Matrix – where data is entered and initial scores are calculated. This includes a ‘feature weight’ where you can allocate how important a given feature is to you personally.
Screencasts – links to actually tests undertaken
Test Results – summary sheet
Cost data – a series of sheets for attempting to compare and calculate overall cost of the content management system
Summary Pivot Tables and Charts
Overall Summary Chart
As it is an Excel document using Formulas and Pivot Tables, it could be a very powerful starting point for you to dig in and investigate the various features of Revit and BIM Content Management systems and Content Providers. I hope you find it useful!
Feel free to comment here with any of your thoughts, and if you have any questions about the document and how it works.
I have been resisting the 2019.2 update because there were some issues with it originally, plus the forced upgrade of Dynamo. I decided to go ahead with Revit 2019.2.1 Hotfix today. I think that the forced Dynamo update occurred with the 2019.2 major point version, but 2019.2.1 seems to install without forcing the Dynamo upgrade – on my machine, Dynamo 184.108.40.20666 was not updated during the 2019.2.1 hotfix installation. Here are the links:
If Revit 2019 and Revit LT 2019 are installed side-by-side and the 2019.2.1 Hotfix is only applied to one of these products, a “Could not load type ‘Autodesk.Revit.DB.ICloudExternalServer’ from assembly” error will be displayed when launching the non-updated product. To alleviate this error, make sure to apply the 2019.2.1 Hotfix to both Revit and Revit LT in side-by-side configurations.
Revit Users do a lot of funny (and sometimes quite terrible) things. BIM Managers have spent years trying to control the chaos, through training, documentation, standardisation, model auditing, Big Brother techniques, and a mixture of carrots and sticks. And that is why I really like the idea of Guardian.
Ultimately, people just can’t quite be trusted to comply with all the constraints you think are valuable. But if you have a ‘virtual firewall’ for Revit, it should take the human element out of the equation, right? The idea is that your Revit model is a secure and safe place – a lot of important work happens in there, so you don’t want it to get infected with junk. It is harder to remove the junk later, than it is to programmatically STOP the bad stuff from entering your model. Enter Guardian for Revit…
Have you ever wanted:
To restrict users from exploding CAD, modeling in-place, etc.?
To prevent users from creating duplicate properties?
To automatically clean content that users bring into projects?
A better ‘purge unused’ tool that cleans object styles, patterns, etc.?
To translate content to meet different requirements / standards as it enters projects?
To quickly align your library and details into complete conformity with your template?
I recently had the chance to interview Parley Burnett, the creator of Guardian. Parley has had a lot of experience with Revit and content management over the years, and he offers some great insight below as he describes the ‘journey to Guardian’.
LJ: What motivated you to create Guardian? PB:
Revit can be so fun to work with and… not so fun. We understand the issues that cause inconsistencies in data and graphics and believe we should tackle them on a fundamental level before we can REALLY benefit from all that BIM can offer. We need a ‘new class’ of cloud powered assistants in our BIM environments as the old approach of adding complication (most other add-ins) to solve complication isn’t working. I have also tired of “standards” discussions never materializing and have come to believe that we can do this in smarter ways than maintaining spreadsheets and documents.
LJ: What key problem does Guardian currently solve? PB:
Cluttered properties in projects!!
Without Guardian, anybody can do anything at any time in any Revit project anytime and, as a result, administrators are forced to react rather than anticipate the resulting damage. Without intense oversight, Revit projects can quickly become a quagmire of properties such as materials, patterns and parameters. This causes confusion and friction as projects progress and deliverables can be messy.
Revit offers little assistance as many of the property types cannot even be purged if they are unused. Worse yet, administrators have no way of knowing WHERE these properties are used so and if they did, the cleanup would take far too much time.
Guardian allows complete transparency into incoming properties including whether they are used or not used. It then allows properties to be mapped to existing properties or removed. These decisions can be saved as rules and enforced silently across an entire firm.
LJ: What is coming up on the Guardian feature roadmap?PB:
We have hit several releases already since launching late last summer and are only picking up the pace even more! We expect to add more ways that Guardian can be extended to existing projects and more flexibly across project teams and user roles.
Here are some new things in Guardian 1.4.0:
Ability to detect duplicate properties
New Suggestions Framework
User prompts when duplicates are made or modified
Below I have included some how-to guidance information in the following sections:
In the download package, you will get an MSI and current Release Notes:
Just double-click the MSI to install.
You can install for Current User or All Users:
And choose from supported Revit version:
License activation is achieved by entering your Company ID during installation:
When launching Revit, you can press ‘Always Load’ at the normal security prompt:
To manage your Revit content standards in Guardian, you use the ‘Admin Login’. Following this, you will see more features in the menu:
In Projects, you can define mapping files for each project, and you can create Project Templates:
The Mappings dialog provides the real ‘nuts and bolts’ of Guardian, you can individually configure constraints around the following items:
It basically works by taking some incoming data from whatever source, and mapping it to the ‘project template’ or standard Revit libraries that you have implemented in your firm.
There are some really interesting features in the ‘Company Settings’, and this is where it really starts to take control of the human element I mentioned earlier:
In ‘User Behaviours’ you can actually stop or restrain certain commands from executing. Evidently, Guardian makes a distinction between ‘normal users’ and admin-level users:
It will appear in your Add-Ins ribbon like this:
This is what happens when you load a new family:
And this is what happens if you select “Let me choose which properties to keep”:
As you can see, you then have the opportunity to enter the Mappings dialog.
“Suggestions” will dig deeper into the content and let you know if certain things are similar or identical (very cool, it feels a bit like AI):
We have come a long way at Virtual Built Technology through building our VirtualBuiltApp federated project-wide data platform in recent years, and Guardian is an excellent accompaniment to it. As a company-level control mechanism, it aims to prevent the problems that can be detected later through our analytical methods.
If you are in a situation where you would like to really improve the overall quality and consistency of the Revit modelling in your firm, I recommend that you check out Guardian.