At the weekend I was looking at this paper

The curvature line parametrization from circular

nets on a surface, by Bobenko and Tsarev

…and they describe what I thought was an interesting purely geometric construction for finding principal curvature directions on a mesh.

I tried it out in Grasshopper, and it seems to work fairly well. I’m just sharing it here in case it is of use or interest to anyone else. It may not be the fastest or most robust method for doing this, but I thought it was neat how simple it is, and that this is possible with only native components and no scripting:

principalcurvatures.gh (1.2 MB)

Having an idea of the principal curvatures can be useful when you are trying to build a planar quad mesh or developable strip discretization of the surface.

The basic idea is:

Take a small circle through 3 points on the mesh. It will intersect the mesh in at least one more point. Take the diagonals connecting these 4 points, and the bisectors of these are the principal directions.

The ideal size of circle to use depends on the resolution of the mesh. I also noticed it generally works better if you subdivide the mesh first with Weaverbird to get something denser and smoother.