Change level while keeping elevation

Hi all,

I need to change the level from many elements in the project while keeping their exact location.

So, I made a script to select elements and read the base offset value, calculate the new offset and set the new level and base offset parameters.

So far so good. Only issue is that if both parameters are not changed at the same time (in the same transaction or when pressing apply in the revit UI) dynamo will change one first and then the other with the consequent move of the element during the process (and lost of dimensions, hosted elements, rooms not enclosed, etc.).

I can think about using python or a macro to start a transaction and doing both changes in the same transaction, instead of sequentially in dynamo, but that goes beyond my abilities / time to learn at the moment.

Is there a way to get both changes at the same time with dynamo?


It is hard to tell without an illustration. Could you send a screenshot showing what you describe?

Try using a single element.setparametervaluebyname node and feeding a list of elements with a list of parameter names and values, setting levels, and lacing accordingly to see the what happens.

EDIT (I had an idea): You could also store the recalculated elevation value in a CSV or XLS file so you set the elevation after setting the level.

Sure, I’ll try to put an illustration later.

Thanks JacobSmall, I’ll try that: creating a list of 2 lists of parameters and another list of 2 lists of values and feed with that the node at once :slight_smile:

I’ll comment and post a pic when I try. In the meantime here is the WiP DYN file if anybody finds it useful or want to give it a try:Change Level.dyn (12.0 KB)

Hello Francis,
I think this post might be able to help you:

I also made a small post about something similar that could be of help, check it out here:


Sorry for the delay in answering, I’m really busy these days…

Thanks T_Pover I think that’s exactly what I was referring to :slight_smile:

So simple. As you said just feeding the Element.SetParameterByName node with a list of ParameterNames (level and offset) and a list of Values does the changes in the same transaction :slight_smile: