Finding center pipe fittings from SAT with navisworks

Hello all,

I am revisiting a subject I tried when i first started dynamo(to no avail).
Now with all that i’ve learned I want to tackle this problem again, since its a very very time consuming issue in my office.

We have concrete waterproof walls, with pipes going through them, they are drawn in Solidworks and exported as a SAT file, which we load into Revit directly, or convert do a DWG so we can explode it in the Revit model.

We do this to draw in void families for where the pipes pass through the concrete (because it’s in situ and we need to detail all the rebar around it for the contractor.)

I’ve been trying to automate this by using Navisworks clash detector but the clash points it puts out seem rather random.
However, i’m afraid that the navisworks clash detector is my only route to take here, as the piping model is one generic model which, especially for larger projects cant be exploded properly (or exported as IFC)

Tagging @GavinCrump if i may be so free, since you’re videos on clash detection and Dynamo have been very helpful. Perhaps you know of a way to handle these clashes more accurately…

The Navisworks clash detection:

When i place the points in Revit with Dynamo, the points seem to be placed rather randomly, i cant really figure out how i could use these to find the actual center of the pipe:

The final objective is to place a void face hosted family on the wall at the center of the pipe, which i can manage myself if I can find the center of these things…

If you make a boudingbox around your pipe (And you average the min and max points of the bb) you have your center logically if your pipe is symmetrically placed with respect to your average sheet of your wall

Hi Christian,

I dont think i am able to determine the bounding box of the pipes unfortunately…

When you import a SAT/DWG into revit it turns it into a generic model, so it’s one large element, not multiple elements. Trying to get the bounding box of the pipe would result in the boundingbox of the entire piping model.

Sorry for the wrong track


1 Like

No problem!
It was a good suggestion, this could work for smaller piping models that have been exported as IFC, this is basically a linked revit model so you could get the bounding box of singular elements in the IFC. Unfortunately the filesize of an piping NFC file gets ridiculously large and slow… So for most ouf our projects i am either stuck with a SAT file or a 3D DWG.

1 Like

This way

you can turn the translate it was to check

29 Novembre forum anglais.dyn (39.6 KB)


Wow that is cool!

Very interesting, this is able to find the center perfectly.

It only does it for one pipe now, is it possible to get all the pipes through the solid.difference node?

1 Like

I had used the solid.difference to have non-straight curves in the example
if after you want to dig your solid (you unite your recomposed inner cylinders) then you can use solid.difference

logically the script identifies non-straight curves (it is possible that such a node exists at startup in custom)


1 Like

If the model can handle it, id suggest joining wall geometry using solid union, then getting solid intersection with the piping, then disjoint the solid outcome. Bounding box each disjointed solid and you can then place openings at the centroids with the width/height of the BB assuming they are Y axis orientated.

1 Like

Hi Gavin,

Thank you for your suggestion i think im able to work this out.

One question i have, by disjoint, do you mean explode?
I cant find a disjoint node and when i explode the solid, it results in a bunch of surfaces i need to thicken to assign a boundingbox (but this results in a bunch of points close to the center):

I assume i am just using the wrong node to ‘disjoin’ the solid?

Im thinking in grasshopper speak here i think, but there should be a node under geometry > solids that can separate solids into disjointed pieces. Not at desk unfortunately but I’m sure its in dynamo.

I’d explore taking the solid works file into AutoCAD, and pull the parts in AutoCAD via the Dynamo for Civil 3D integration.

Doing this in Revit is problematic as the initial data is lost and imports are what they sound like - one imported mass of data. Getting something more BIM friendly from the provider of the solid works dataset would also work - could you ask for a direct IFC export of each pipe?

Hi jacob,

I’d explore taking the solid works file into AutoCAD, and pull the parts in AutoCAD via the Dynamo for Civil 3D integration.

I’ll see what i can do with this, thanks for your suggestion. I do wonder if this proces wouldnt be very complicated, as in Revit i can determine where a pipe actually goes through a wall (through clashing/intersection). Or i’d have to get the boundingboxes of all the walls and compare that to all the piping in my Autocad file? Not sure what that route would look like…

As to the direct IFC export, This would for most projects we do result in hundreds/thousands of models. I’ve also been told that exporting these pipes to ifc files is very cumbersome and takes an enormous amount of time, might be because of how large our projects can get…

I think (inexperienced) the method Gavin suggested works best here if I either check every wall individually or divide my model up with section boxes and do 25% of the walls in one run.

To give you a small sense of the possible size of our projects:

For anyone interested, i have uploaded the smal test model from my original post with wetransfer. It has a revit file and a SAT file for the piping.

Hi Gavin,

I have been looking for the node you’re describing, this has been added in Dynamo 2.9 and is not yet available in the version i’m working with.

I think there’s a workaround i could use by using Geometry.Explode, since the exploded surfaced generated ON the wall/floor face align perfectly with the center of the piping:

The problem however is the irregular shape of these pipes (but not always in every model). There is an inner steel strip at the center of these concrete walls (for complete watertight sealing). Some models have both these pipes and normal steel pipes without this strip.

Do you have a suggestion on how to filter all these center points so that i end up with only the points that reside ON a wall/floor face?

Once in AutoCAD you can use Dynamo for Civil 3D to get the location line of the pipe as a line and the pipe diameter. I would not bother with the bounding boxes - that is a path which will lead to frustration as some pipes are not going to be orthogonal, such is the nature of MEP work. Once you have the lines, you can serialize them into an external JSON file (search soliddef and json in your library) or write out the curve geometry points to a CSV. From the exterior file you can pull the data back into Dynamo for Revit and properly locate the geometry. Note that at this point you may have to transform the resulting geometry based on how you would transform the link - if internal origins align you’ll be all set, if not, you’ll have to account for it here, or earlier in the process.

1 Like