Changing reference level of Revit family instance can be painful, especially if you do not want to move an element, just change the reference.
For particular object it’s not a big deal, just calculate the offset value, change the level and enter new offset value, the object will go to the same place it were.
But, what if we have several, if not hundreds of such objects. On different heights (offsets) and referenced to different levels? That could take some time to adjust (re-reference). And it’s prone to errors.
Even worst case is with conduits, pipes, cable trays, ducts and similar objects which have point objects (fittings), and linear objects (ducts, pipes etc.) with or without a slope. Re-referencing of such instances is a nightmare. Forget about copy/cut and pasting “aligned to same place/level” it will not work.
So, to make long story short. Use Dynamo script to re-reference selected objects. I created this script which works the following way:
- Select objects (instances) you want to re-reference and keep in the same place.
- From list of existing levels in the project, choose a new reference level for the selection to be re-reference to.
- Script reads current (apsolute) x,y,z coordinates of each object from selection.
- Script looks into selection and tries to find paremeters “Level” or “Reference Level” (of course, there are “Base Constraint Level”, “Host” and other referencing parameters, so that’s the limitation, it will work on most common uses).
- Script sets these parameters to the new level.
- Script writes previous (apsolute) x,y,z coordinates to each object from selection.