Cut all elements intersecting with a plane

Hi all,

I have a question. I have a very long model in Revit with thousands of elements in different disciplines. Based on the project design zones, we need to split the model elements at specific locations. Is there a way to use dynamo to cut all the elements, even slabs/floors, using a cut plane/ref plane? I tried ‘split.geometry’ nodes from two packages, but they just geometrically cut the elements (second image). What is the next step after splitting? Should we assign a family instance to the new geometries? I tried the node below but it did not work. Last picture shows the real which needs to be cut at the zones highlighted using scope boxes. Do you think this process needs to work with the Revit API and can not be done within Dynamo itself?

Thanks so much for your help

You have to think about how this works natively in Revit. There are only a handful of element types that can be split with Split Element and I believe they’re exclusively system elements. How would you “split” a floor in Revit? You can’t. You would have to either modify the existing floor and/or create new ones with the appropriate boundaries. How would you split a piece of equipment? You can’t. You would have to build a custom family for both sides of the split element.

The same thing has to happen in Dynamo. A few element types can be split directly. I believe there are a few custom nodes that already do this, but it’s also available in the API. The other “splitable” element types would have to be created with new geometries. This is similar to what you’re attempting currently but you probably want to create the actual elements instead of imported geometry (which is what you’re doing now). Then you’ll still have to decide what to do with the remaining elements that can’t be split automatically.

This will be a lot of work since you’ll likely have to deal with many element types individually within the API or with nodes. It might be worth considering other options or providing more specific information on what you’re trying to accomplish and why.

1 Like

Hi Nick,
Thank you for getting back to me. As you said, I have developed several scripts for cutting linear elements like pipes, ducts, and conduits,…intersecting a reference plane. I worked on a script to cut the floors but there are limitations. In general, what our company is looking for is to find a workflow that can cut the whole model intersecting a plane; just like what section boxes do, but really cut the elements, like a 3D trim. But, based on my research it is a complex project which needs not only a good knowledge of Dynamo but also the Revit API. As you mentioned, it’s not an easy workflow. If you see the picture, which is the Architectural model only, you can find that we need to split the model according to the construction zones. (Elements in each zone has their own tags according to the P6 schedule, so we can use them later for 4D modeling)

What’s pushing the requirement to actually split the elements though? A slab is either being poured once as a single slab or it’s being poured in stages as multiple slabs. Multiple slabs should be modeled as such. Do these zones perimeters perfectly align with the installation methods of given object? You can’t install half a light fixture in one stage and the other half the next, so why would you model it that way?

These questions aren’t meant discredit what you’re after, just to get a better understanding for both of us as to what this all entails. Why can’t you filter and deleted elements by stage (model) and then use section boxes for visibility, without actually “splitting” elements? This seems more like a phasing issue than a physical separation of elements.

1 Like

I understand that it looks weird.
The models were first created by the design team. The zoning of the project took place way later and is based on schedule activities, cost estimation and pricing process. Each schedule activity has its own tags (area, ESN,Subsys, turn over) …I dont know the details so much, but I know that they tried to do it through phasing but it was not successful. Only floors, pipes, ducts, conduits, cable trays and walls need to be split so we can add those P6 tags to each of them and have them as a unique record in the QTO. And the construction team will follow the same process as per P6.

In that case I’d suggest starting by filtering and deleting elements by zone first. Have one script get your individual zone models cleaned/setup, with only the elements that fall within the respective zone (scope box) left. Then you can create a separate script to split those elements at the zone (scope box) boundary. Because these are all system elements that allow splitting, it should be relatively straight forward with the API or a custom node. Splitting an element is not the same as splitting geometry. You’ll need to make sure you’re using the correct method or node.

1 Like

There’s a package called Onion with some handful nodes:

So maybe you can solve task this way. If element is linear - split it, else generate new cutted elements.



Thanks for your message. The splitting of pipes and ducts can be easily done using this node from GeniusLoci package

1 Like

Thank you so much for your message, I will get back to you after work

Hi Nick, sorry for my delay to get back to you. Your comments were helpful, and our team is working on implementing the workflow on our RVT models and dynamo scripts. The most challenging part in Dynamo is to split the floor elements that are sloped or shape-edited (Image below). For flat ones, the script works almost stable.

1 Like