Old Town Roofs

Hello Laurent,

you made a great program, i tried it in rhino 7 and it work so far fine.

I have a question regarding the shape of the roof. Is it possible to get it more like a gable rooftop? That two side have steep angles?

thank you in advance

Yes it must be possible
I did that :

So I must find a way to tweak the new definition to make the same thing.

The problem with this type of specialization is to find a good way to enter the angles, not too simple and not over-complicated…

Great progress! Also you implemented the multicurve support directly. Nice!
But I still have a challenge for you to figure out. Lets call this un-capable… :smiley: (15.4 KB)
I also attched a GH so you can check out the non working curve for yourself…

Thanks for reporting, I know where this problem come from, I just check brep that touches Plan.XY !

I’ll have to fin a way to retrieve the cutted brep that fills in holes.

There is also this one, but not my fault

Playing with tolerance helps

1 Like

I think the complicated part here is that you have to define which sides are the ones that have the steep angles.
I´ve acomplished gable rooftops so far by generating a “normal” roof first, then taking the very upper curve of this roof, extend it to infinity, intersect it with a extruded surface of the base-surface and then combine the edge vertices with this intersection point. Might be a bit complicated but it works very well. In this case I never have to set the lines of the steep angles manually…

@rhino16 @paul.metzger
New Version, it works on example given, sometimes it outputs more geometry than number of roof but this is due to bad roof border. I mean very sharp angles that generates intersection at places not intended.
Implementation is surely not bullet proof. I first take all roofs touching the ground then I union all parts. Then search for holes. Then put in holes geometries that were not used and not having a bounding box center coincident with a previous geometry.
I also change the way curve is transformed to Polyline. So if it already a Polyline, there will be no changes.

sand_dune_internal_curves_csharp_RH7_LEGACY.gh (103.2 KB)


I´ve tried your “multiple angles roof generator”. Doesn´t work with more complex shapes :frowning:
Do you have a version that works with Rhino 7?

I looked at it some time ago and i didnt work. My logic to make contour as polyline is not a good idea with variation of angle. So i didnt manage to make a workable tool.

1 Like

The only way I can think of doing this properly, is using the STALGO algorithm for the straight skeleton, but with a modification for the vertical angle of the edges in the motorcycle graph…this algo is pretty hard to implement, because you need to solve the collision problem at different angles. The straight skeleton is a collision based algo. other of the ways is by adding a parameter for the angle of the corner rays, instead of just using bisectors. But in this way you cannot specify the slope of the roof first. In the ideal roof generator algorithm, you have to be able to specify the slope of the different surfaces by hand, and the location of the principal axis. If your are gonna have to do this is probably just better to model the roof by hand.
Its funny because this problem is actually central to architecture, but I never seen anyone in the past 8 years having even a close solution to it


That sounds interesting, even when I don’t quite understand what you are doing :wink: Would you mind sharing the gh file? It would be much appreciated.

Hey Joel, well its not the most robust way to generate it. I had some troubles with it. Is your buidling polygonal or rectangular? If it is rectangular you can create the sattle roof way easier. I think its necessary to emphasize that the sand dune approach is perfect for non-rectangular buildings…

Thank you for the quick answer. I am looking for a script for gable roofs on polygonal (L-shaped, U-shaped) buildings. Maybe I have to go through the sand dunes script again to see what is possible with it.

You’re looking for the sand dunes script iteration that allows variable angles.

You can set the gable angle to 90 and leave the others to default and you should get a hip roof on all faces with the exception of the gable face.

Does that make sense?

This one was working for simple geometry

Thanks a lot! This works pretty good! Can I somehow use the color Gradient to define an angle? Like green roof and lila roof 90 degrees, rest 35 degrees. That would be quite practical. But otherwise amazing work!

The tool is now in Nautilus plugin and it accepts curves in whatever plane you want.

If you want multiple angles see the tool Arqishap3d

1 Like

Hi Laurent,

Have you seen this approach for constructing roofs that have variable-sloped faces?


Unfortunately, I can’t make much use of that article… I know that many Rhino and VisualARQ users would benefit from having a high-quality, flexible solution for complex roofs. In this case, I can only kindly ask if there is a chance that somebody could turn it into a Grasshopper component. I would be also the first on the list to crowdfund such an effort.


I’ve looked at all the roof solutions I could find relating to Grasshopper and @laurent_delrie’s code is what I have settled on as it yields the best results.

But, as this article points out, roof conditions like gable ends, dormers, flat tops, or varying heights from a single height input profile/curve set gets “complicated” and while I’ve put this on hold for now I, and I know others, would be very keen to be able to solve for “typical” architectural conditions of roofs such as gable, dormers, dutch gables, shed, etc.

With Laurent’s variable angle version of the script I was able to get gable ends working by effectively feeding an angle of 90 degrees to those sides of the boundary curve, thus producing a gable.

I experimented with Dutch gables by parametrically offsetting the sub-curve of a roof boundary at a Dutch Gable condition up the existing “hip roof” face and then lofting/extruding out the dutch gable portion at the top but never quite finished that in a polished state.

Roofs are annoying in that they are complex yet stupidly simple simultaneously, really roofs are just edges that have an angle given to them, creating a plane, and these planes are trimmed at their intersections and you end up with any conventionally framed roof form from that method. This obviously doesn’t account for onion domes, curvilinear roofs, etc. but that’s another/separate issue.

The majority (please correct me if I’m wrong) of roofs are framed with planar faces intersecting each other and some variation of this at a smaller/local scale within the larger roof form (such as dormers)

Solving this portion of the problem would be so highly beneficial. Next chance I have I’ll compile what I have been able to produce thus far and share to this thread in the hopes of advancing the topic.

TLDR; this is something I, and others, have been wanting/hoping to solve for years, and I’d love to collaborate on this effort for those open to it.


That´s a very great tool!

1 Like

Next year I hope to output a version that will rely on lines and arcs. I begin to work on it, the tools to transform a curve to lines and arcs seem to work, it uses mainly Rhinocommon method but some additional features were required.
Now I am on the slope generation, that’s the easy part.

Still struggling cutting the breps and sorting them …

Happy New Year

Debugging, optimizing … Sometime some funny things appear.

Tool now output the medial Axis in 3d

Still some problems, look at the K