I’m looking to utilize Dynamo to run a Revit Interference Check.
I’d like to feed it a list of straight MEP Fabrication pipes on one side and a list of hangers on the other side. I have not been able to do this using the normal Revit means, and I have seen very little on utilizing Dynamo for running the Interference check.
Does anyone have any experience initiating an Interference Check using Dynamo?
Alternatively, I’m trying to use bounding boxes (of the pipe) and centroid points (of the hangers) to see what points will intersect with what bounding boxes. I was going to then set up probably a dictionary so that I can transfer/copypasta a Parameter value from the pipe, to a different parameter of the hanger.
Any help or insight is greatly appreciated, thank you guys!’
I’d recommend looking into Bimorph nodes custom package which has some fairly efficient nodes for running element interference checks.
I’ve checked out the Bimorph nodes, and I’ve found that the Element.IntersectsElement node results in a list of the hangers that I am trying to grab. Unfortunately I was having a hard time pairing those hangers (in a list) with a list of Assembly names to set as a parameter value.
So I’ve actually used Element.BoundingBox, and used the BoundingBox.GetElementIntersect, it grouped the listed in a way that I could then pull a list from the source pipe to result in the Assembly Names, which I was able to feed into an Element.SetParameterByName node and effectively fulfill my task.
That is until I find a situation that breaks this lol
Boundingbox intersection isn’t ideal for geometry. To ‘break’ your workflow, draw a duct, pipe, or wall at a 45 degree angle, and a desk just adjacent to the wall (but not touching!) and parallel to it. you’ll see that the bounding box lists the desk as intersecting.
This thread has a good explanation of how to use the Bimorph nodes: Access Revit's intersection checker in the API?
As of now there is no API connection to the interference checker tool; this is mostly due to the fact that the API calls which that utilizes are rather easy to replicate and customize well beyond how that tool works. The thread above outlines several other limitations which makes calling it programmatically less than desirable.
Can you provide a sample screenshot of your attempts with the Bimorphs node? My hope is that it’s just a list issue on the input side, the outputs should be grouped per Input A.
Though BoundingBox intersection may not be ideal on paper, it seems to be working for me rather well. This could be due to the fact that my content is usually predictable, so I actually have it filter down to just the elements that I care about.
Given further testing, if I am worried about the accuracy of my script, then I can always change it to utilize Centroid points of the hangers in question. After all, if the centroid is interfering with a BoundingBox of a pipe, then it’s a pretty good chance that it’s supporting that pipe.
Unfortunately, the Intersection Check tool is too limited for this use case.
So this is how I was able to try to utilize the Bimorph nodes. As far as I can tell they functioned properly.
However, I wanted to be able to pair up the elements (from each list) that intersect with one another, instead of just a list from ‘ElementsA’ that interfere with at least one element from ‘ElementsB’.
I wasn’t worried though because I was able to use BoundingBox’s, for the Pipes list, and get an Intersect list using the Clamps&Hangers list. It resulted in a nice stacked list that I was able to use to coordinate with the Pipes list. That way I can pull specific parameters from the Pipes list and correlate the values with the appropriate Hanger element. I was even able to pull two different Parameter values from the Pipes and throw them at the Hanger that supports it.
My runtime isn’t even bad. I’ve thrown +5k elements at it so far, and it just filters everything down to only the elements I care about. I have a lot less stability issues when compared to the Interference Check method. My Dynamo crashed at least a half dozen times in my testing with Interference Check.
Can you provide the version of Bimorph you’re using?
I’m noticing that the intersect output is only list length 28, the same as the longest list you inputted. I would have expected either a 28x20 cross-lace with nulls or some reduced number that (usually) would not coincide with one of the list lengths.
I have Bimorph 4.2.1 on my machine. Curious for sure, can you correlate those outputs to be matched up by intersecting elements?
I’m wondering if that node would result in a faster runtime, compared to my boundingbox method