Split ducts by room

Hello fellows.
Actually, I have a problem that I thing that I can solve with dynamo, but I don’t have the knowledge of this (for the moment). So, I’m wishing to ask your help hopping to learn.
I need to automate the process of split ducts with union in each intersection between the rooms and ducts of the project. The reason is that I need a schedule of the ducts lenght by rooms.

After intersect solids I noticed that y need the ones whose were sustract for the node Geometry.Intersect. Who can I recover it?

I’d appreciate your help.
Thank you.

Hi @brunollave
If you want split the ducts (but is not necessary for schedules) you can looking the break method for ducts:

and maybe @c.poupin can help us with the use of lambda recursive function in python for Split multiple ducts at multiple points.
Hope this help

1 Like


Do you want the union placed at wall faces (there would be a union on each side of the wall), or the centerline of the wall?

If you compare the room geometry to the duct geometry, the intersection is the duct geometry in the room. This has some use in other applications, but if you just want union placement you might be better off comparing against the walls/slab of the room instead.

I would recommend looking into the MEPover package, they have a nice node for this exact application:


1 Like

Hello fellows.
Thanks @Robert_Younger and @paris for you interest.
Finally, I was able to take a time for this. I figure it out at this way. I hope this helps someone.

There area two scripts with node from Dynatool, Mepover and Rhythm.

Hi @brunollave, thanks but if you need only schedule of the ducts lenght by rooms is not necessary split the ducts, you coud use Geometry.Intersect node. Do you know if there is another node for split duct or pipe with a custom node made in python?

1 Like

Thank you @paris.

With “Geometry. Intersect” node we can isolate the duct segment whose intersect the room, whoever with the configuration that I share we can obtain the length from segments which starts or ends at the middle point to the middle of a wall or an expansion joint. (I didn’t considerate the separators rooms because it’s not necessary for this project).

About the duct splitting, it’s true. Definitely doesnt split the duct and take the information of the curves is a better automation option, but it was enough for me because this a “ONERUN” routine, so I thought that split the ducts made more agile the process of generating scheduling tables because it would made able the Revit to do this.
But I going to try it, just for fun.

Maybe creating rooms parameters to classify “duct lengths” by “system types”, and fill-in these values with a similar process of the picture, but with some filters to order the information and finishing with the tables autogeneration.

Please if you have another idea to do this, i’ll appreciate if you can share with me.

I guees, this is not a solution for all the problems but it was for my especifict situation.

Hi @brunollave for me it’s works does it expected

About duct splitting do you know if there is another node for split duct or pipe with a custom node made in python? Thank you Cheers

1 Like

Hello @paris , I’m looking for another one, too. This node just splits the duct, doesn’t generate unions.
In this link, taking about an interesting package, but I can’t use yet.


Hi @brunollave for add the union you can use the node from MEPover like @Robert_Younger said, but the old node (for dyn version 1.3.4) it doesn’ work as expected, I haven’t try yet the same new node for dyn 2.0.3. I’m looking for split multiple ducts and pipes with python and not from zero touch node. Cheers

1 Like

Hi @paris i was triying to apply the mepover nodes but I cant make it found. I’ll open a new topic if you want to participate I would really apreciate.

Hi Paris,

This is excactly what im looking for, but im having a hard time figuring out how to make it work.

How do you set the up the script with the “Geometry.Intersect” node so that you get the excact lenght of the duct/pipe in the room.

I have build a script so the I can se what room the duct is in, but only if the duct is in one room and not going through more rooms.

Thanks in advance

Hi @s194951 for “Geometry.Intersect” you can look at List the pipes within a room / space and for split “Split ByPoints” node in the great “Genius Loci” package like at Split Pipe at a Length with Coupling - #2 by Alban_de_Chasteigner


Thanks for your reply. But I cant seem to make it work.

My goal is to split the ducts every time they intersect with a room boundary.

I tried with the script from Alban_de_Chasteigner that you are referring to, but the “Select Model Elements” node is yellow and does not work. Then I tried with the “Select Model Element” node and then I could pick a duct from the model. But nothing happens when I run the script.

Any ideas of what im doing wrong here?