Lets talk Curtain Grids

Currently we don’t have a native Add Curtain Grid component, this is primarily due to the complexity of of Element Tracking of the Parent>Child relationships. When modifying Curtain Wall grids Panels & Mullions are potentially added and removed at each step.

That said, there is a lot we can do with a simple non-element tracked script. This topic will look at some of the ways we can use this in various workflows.

This definition will work in Rhino 7 Grasshopper or Rhino 8.
RiR-CurtainWallGrids-GH-Driven-OneWall.gh (19.7 KB)

The Add Wall (Curve) creates our Curtain Wall 1, which then gets points given via Grasshopper Divide Curve of Height & Length. If we want to reset we can remove the Grids.


Some of the best workflows use a combination of Grasshopper and Rhino Objects, which allows for manually editing to overcome special conditions.

This definition uses Rhino 8 GH1 components.
RiR-CurtainWallGrids-RH8-Driven-OneWall.gh (31.9 KB)

Here we Bake the Points to Rhino and then re-reference before adding the Grid Lines. The Line generating the wall and the points can be edited in Rhino. Re-baking the line/points to Rhino would override your edits.

Points are U/V sublayers of the Walls Element ID, this allows for referencing in a new GH file.


Curtain Grids are based on UV layout. When creating Curtain Systems from various geometries this needs to be considered.


When creating the host geometries the direction during creation orients the UV

In this example the angled element is going to get its UV aligned to the Revit XY, which creates an un-desired Grid. Creating the family straight towards the Front view will generate the expected UV, then place the family in a different orientation.

Here the Sloped Angled condition is created in the front view and then rotated. The Curtain Grid UV is now per the Element.

1 Like

Here’s a quick example of creating a Curtain System on a Surface Face and then populating Grids.

wall by surface.rvt (764 KB)

RiR-Rh7-Mass-Face.gh (19.8 KB)

Original Wall by Face thread

1 Like

Why is element tracking it so complicated? I would have thought since the insertion of a grid line creates new Revit elements, the previous elements will no longer exist, so the element binding would update to match these new elements? Any breaking changes to the element binding as a consequence is no different to the user deleting an element in Revit that is tracked in the GH graph, so the mechanism is no different?

I know, right?! This has been on the feature requests from the beginning and EVERY single design firm that we have discussions with brings this up as an issue. To not have native curtain grid capabilities is gaping hole in the feature set and if it didn’t require particular condition handling it would be in there already.


Hi Japhy, I have downloaded the rvt and GH file. I try to understand how to create such a Curtain System. But I cannot make the GH definition work… I guess “1” is picking the mass from Revit. But I am not sure what are “2” and “3” doing. I click the “GO” button but not thing happen. Should it generate a Curtain Wall, then I should feed the Curtain Wall into “4”(the second Graphical Element)?
But I don’t have anything to feed to “4”…

Hi Jack_Zeng,

There is a mistake in the definition, please change Curtain Wall 1 to Blank

Then its a matter of setting the Graphical Element in this example.

Wow, cool! It works now. Thanks Japhy.