We are trying to create a system that can displays BIM Model using Model Derivative and Viewer API, and provide functionality to use updated BIM Model, while preserving the mapping between element (currently we are using dbId) with some metadata.
The problem is that when we post Model Derivative translation process with updated BIM Model(updated meaning that we modified Revit file using Autodesk Revit or equivalent toolkit), the original dbId is lost.
While looking through viewer API, we've found that through model.getProperty with dbId, we can obtain a value called 'external-id', which seem to be preserved even after the update. However, this seems like that this can only be accessed in client side; there is no MD api that provides external-id property(correct me if I am wrong please).
As the last resort, we are trying to map dbId=>metadata mapping from original BIM model to dbId=>metadata mapping in updated BIM Model by creating a dbId=>dbId mapping using name as common feature, but we are worried that adding / removing BIM Model's element while updating would cause name mapping to be invalid.
TL DR; the question is: Is there a way to obtain unique and preserving id per each ObjectId / dbId in Model Derivative translation process with updated BIMs?
Yes, exactly.
In Revit, the UniqueId
is the safest method to persistently identify elements.
This UniqueId
is available in the viewer, and unfortunately currently not in the model derivative API.
For an immediate solution, I suggest that you create you own shared parameter in Revit for all elements that are of interest to you and populate it with the UniqueId
value. Then, that information will become available to you in the model derivative API as well.