Corridor Shape Information

I am new to dynamo for C3D so apologies if this has been ask’d before, I am wanting to calulate the length of a 3dSolid, as we know C3D only gives the volume, however if we can take the end and start assembly stations and make a small subtraction this will give us the much needed lengths.

This coud then be exprted to csv and the estimators wouldnt have to use the measureing tool in Navis.

Can anyone help, see attached image

Hi @grastar,

Is this what you’re looking for?

GetCorridorSolidLength.dyn (94.6 KB)

Hi mzjensen

Thank you so much, no sure what happen but got some warnings, see attached, there are more then 12 solids as well? I can send the Navis file if that helps as the C3D file is 90MB?

are you allowed to share your email address?

Can you show the beginning of the script? Also please hover over the first warning in the sequence so we can see what it says.

Hi @grastar

Are you interested getting the length using python?


See attched, do I need to add the individual strings?

Hi Kulkul
Happy to use anything that allows for a collaborative out put of data from a Civils3D model, it would be better if all the 3d solids and there start/end stations and the length calculation can be output into a csv file, this would make it very efficent for our BIM & estimating teams. We have 20+ models that are built in C3D that do not push out the required quantum for expediant 5d BIM. Any help is most appreciated

In that case refer to @mzjensen graph.

That means that there is something going on with the node before it. What is the output of the Corridors node?

See attached, it captures 12 corridors which is correct

Hi @grastar Just for clarification Corridor.Getsolids node doesn’t create solids like this

it rather select the corridor solids which are already there in drawing. so please create corridor solids in the model and then try to get them in dynamo using above node.

Hope this helps

1 Like

Hi, Thank you for your comments, I am not trying to create solids these already exist, see attached image from Navisworks if I open up the same dwg file. It’s just that the solids do not export anything that is quantifiable for BIM quants and our estimators, the more I dig deep the more it’s fustrating that something as simple as a length of something is so hard to achieve.

@mzjensen,However just noticed something in the Navis file, maybe we can use the layers to get to the solids, just thinking out loud?

Do the corridors have multiple baselines? I’m remembering now that I think the GetSolids node doesn’t work when there are multiple baselines. You could use the baseline input to filter, or select the solids in the drawing by layer. I believe the layer names should be the shape codes (unless you’ve changed it from the default). Another option could be to use All Objects of Type where the type is Solid3d. That would work best if there aren’t any other solids in the drawing.

Hi mzjensen

getting a lot closer, see attached images, using Navisisworks to test how things are built by our designers. I thought it would be good to have the Handle of the 3dsolid list in the excel output. Not sure how or where to put the wire?. Note just one yellow warning box?. Thanks for your help in getting me started.


Ah OK, I see. I had written the script assuming that the station values were formatted as 12+34.56’. So the String.Split node and those that follow are to convert that into a usable number (e.g. 1234.56) so that the start can be subtracted from the end. In your case, it looks like the station values are formatted as 1234.56m, so you only need to remove the ‘m’ and then convert the string to a number. Something like this should work:

Regarding the handles, you’d just need to add that to whatever list is being exported to Excel. It might look like this:

That output would look like this in Excel:


1 Like

Hi mzjensen

Sorry to be a pain, I noticed that it wasnt list the StartStations, so thought I would try to duplicate the ‘Function’ part for AssemblyStartStation, however not sure it wont work? Also noticed the end length is calcuating all the lengths added together this is okay and would be needed, however whats needed is each the length of each object 267 in this case. The 267 is the number of objects is it possible to filter this by layer name this would reduce the list quite a lot.

I’m not sure about this without seeing the DWG file.

Again, this is because the original script was setup to work with + formatted stations. You need to remove these nodes:

Get the layer of each object, check for equality with the desired layer, and then use List.FilterByBoolMask, like this:

1 Like

Hi mzjensen

Thank you again for setting me on the path with this, as you can see I have a result, I just need to get this filtered by the layers thus reducing the list by a lot. I have noticed that the layer name in the Pset is by something called ‘CodeName’ not sure if that makes a difference?

The layer name is set from the Layer Name Template when when extracting the solids. I think the default is to use the subassembly name, but maybe in your case it was using the shape code name. The CodeName property in the property set should be the shape code.

It looks like you want to filter by multiple layers. Here are some ways you could do that.