Dividing Surface Curves Independently - Placing Shingles


I would like to create a GH script that places an object (shingle) along the surface that is double curved.
I’ve read a similar thread but I think this is unique / simpler.

What I have-
Currently I’ve lofted between three curves each rotated 45 degrees to create the surface
(looks like right angle sweep) .
I have the shingle created in GH and aligned this Brep to the surface by using PPlanes.
The problem is I used a surface divide so by using UV, I either have too few shingles where the loft is longer or too many shingles where the loft is shorter.

What (I think) I would like to do-
I would like to place these shingles on a list of interpolated lines that are divided by the width of the shingle Brep. This way each (U) row of shingles would have a different number of Breps depending on it’s length.

Can you please point me in the right direction? I’m relatively new to this, just trying to learn and not have someone do all the work for me. I feel like surface divide function is a hammer and I need a needle.


cedar shake.gh (19.3 KB) Roof example.3dm (179.2 KB)

I would approach it from this direction (see white group). Note that I modified the initial orientation of the shingle to the default plane used by Orient (‘World XY’) and internalized it.

cedar shake_2020May09a.gh (24.2 KB)


Wow this is wonderful!

May I ask what Srf CP does if the interpolated lines are from the surface?
Not questioning, just curious.

Also if I wanted to adjust the angle of the shingles I would change the Normal
of the Frames output from EvalSrf correct?

Again thank you so much

The IntCrv after Flip is divided to get a new set of points so Srf CP is used to get the ‘uvP’ (surface coordinate) for each of those points, which is then used by EvalSrf to get the “normal” plane at each of those points.

You could do that, especially if you want angles to change relative to each shingle’s location (or slope?) on the roof.

More easily I think, is to change the angle of the pattern ‘shingle’ relative to World XY that is used as the ‘G’ input to Orient. Rotating the input has the effect of rotating all the Orient results.

The biggest problem I see here is that the curved roof won’t drain in some areas, no matter what. Changing the angle of the shingles won’t solve that problem.

By the way, I did not notice before that the large group at the top of your model creates the shake shingle (you need to flatten the input to Join to get a ‘Closed Brep’). You could modify that to orient the shingle “properly” so it works without baking it and manipulating it in Rhino as I did.

1 Like

Great explanations.

I was hoping to pitch the shingles more just to stop them from overlapping excessively.
This was more of an experiment in preparation for grad school (I’m currently a carpenter).

I’m thinking I might want to adjust the size of the shingles so that on tighter curves the shingles
get smaller in length. Using your advice with the join command I could actively change the Geo in GH which would be nice. This would give some variation in the pattern and make the curves more
visually prevalent.

I think. Maybe.

Thanks again Joseph!

Yes, that could be done, but it significantly complicates their spacing if they aren’t all the same width.

This version creates the pattern shingle differently, adds a ‘gap’ slider and second ‘Angle’ but it doesn’t help. The roof shape just isn’t appropriate at all for shedding water.

The yellow group is a half-hearted effort to use contour lines instead but it’s not even close to what is needed for a roof like this (which will never shed water anyway).

Learn from failure?

cedar shake_2020May09b.gh (27.6 KB)

1 Like