Report on layer thickness

I want to extract layer thicknesses from each wall type. The ultimate aim to push them into wall type parameters so they can be tagged and scheduled.

I found FamilyType.CompoundStuctureLayers in the Clockwork package but got stuck.

Firstly its input is a list of all wall types. Feeding it the name from Wall Types node doesn’t work. I’m not sure why.

Output for Layers is a list of wall types, with nested list of presumably layers. But each member is Autodesk.Revit.DB.CompoundStructureLayer.
How do I drill down to get each layer’s thickness?

Or am I barking up the wrong tree?

Hi Antony,

I think that you will fall in love with the “FamilyType.CompoundStructureLayers” node from the clockwork package. Tho keep in mind that if you’re using it in one of the daily 0.81 or 0.82 versions of Dynamo, you’ll need to make a small change due to the way units are handled now:




One step at a time . . . .

I found a node that extracts some material parameters (in Clockwork again - great package), but not the one I’m looking for - Comment

Does anyone know any nodes for extracting all material parameters?

Clockwork’s node already extracts the thickness of each layer of the wall for you. The node probably didn’t work because you’re using it on a newer version of Dynamo. If you change it as shown above it should hopefully work:


Yes, I’ve managed to get the layer thickness.

I’ve also managed to get the layer’s material. But I need access to that material’s parameters. I can’t find a way to access a material’s parameters.

I found Element.GetParameterValueByName on another post which did the trick.

I’m new to Dynamo (as if you couldn’t tell), the problem I’m having is the library search doesn’t come up with everything.

I searched parameter but didn’t get Element.GetParameterValueByName or a whole lot of other nodes that have parameter in their name. The same thing happened with a search for list.

Why? Is there some trick I’m missing. I tried wildcards but they don’t make any difference.

The list of widths returned from FamilyType.CompoundStuctureLayers is in metres (0.016m, 0.064m).

But when I put one of the values into Convert Between Units - Meters to Millimeters it comes up with an error (input types not matching).

If I try and multiply the value by 1000 it creates an error.

If I put a width value straight into String.Join it doesn’t work, presumably because it is not a string.

I presume width is a length. Can lengths be converted into numbers or strings?

Dynamo’s library search is experiencing some difficulties but from what I hear, the team is working on it.

What version of Dynamo are you using? See if you have a node called “SIUnit.Value”. That should be able to extract the number value from the unit.

I haven’t started migrating Clockwork to Dynamo 0.8.x yet, so all Clcokwork nodes that report any unitized data will not report correctly because of the way the handling of units has changed between Dynamo 0.7 and 0.8. In order to use this node in 0.8 regardless of what your current display unit is in Revit, I would suggest you modify it as shown below. Note that in the code block I changed the fourth line from Length.FromFeet(seq[3]); to just seq[3];


What this will do is convert the length value from Revit’s internal units (decimal feet) to the display unit currently set in your Revit project (which is what Dynamo is using).

Can’t say I follow what you’ve done, but it doesn’t seem to work.

Strange think is values from Dynamo are in metres, but the project units are millimetres.




Yes, because you’re applying the nodes outside of the custom node. You’ll need to edit the custom node (double-click on the custom node).

Sorry, I didn’t realise it was in the node.

But . . . now width comes out as a single list of all widths instead of lists of width per wall type, which it used to do.


And if only give the node only one wall type width returns just one value.


Got it. You missed a step - values needed to be mapped to the list.








Dynamo sure is fun. I’ve even written my first node: NumToString:


Anthony, you’re absolutely right. The List.Map node is crucial in this context. Glad you got it to work properly.

Thank Andreas for your help. I’ve now got the core of it working.

It places a wall’s layer materials and thicknesses into a parameter of the wall so wall layers can be tagged (and scheduled).



The graph:


Note that FamilyType.CompoundStructureLayers from Clock requires the edits Andreas post above.
A_NumToString is a node I made. It is also posted above.

Next step turn it into a node!

Being new to Dynamo, this might be a very rookie question. I ran into a bit of a delay when trying to combine my material and widths list. Any help?



wall test

Any trick to getting it to work with fractional inches for the width?

Hi Antony,

it appears that you are working on exactly what I am looking for.

I would like tho use the thickness of each material in a wall or floor family, to build a more compact database for simultaneous cost-estimating.

Unfortunately, I have very limited capacities in Dynamo.

Is there a way you can send me your findings in a “plug and play” Revit file?

Or isn’t this the way this forum works?

Kind regards,


Willem, install Dynamo, start it and create the graphs in posts above (July 2).

The only way to learn Dynamo is to do it!

Hi. I tried this workflow, but I get stuck at one point, where I get onlu null values. Could someone help me? Thanks!