Placing Hexagonal Panels on a Surface Using Grasshopper

Hello colleagues,

I have a task where I need to distribute hexagonal tiles of fixed dimensions across a surface. There should be a gap between the tiles, and this gap needs to be adjustable. A perfect, tight fit to the surface is not required — it is acceptable (and even preferable) to use a best-fit or approximated surface for the placement.

Could you please advise whether this is possible to achieve in Grasshopper, and which tools or components would be best suited for this?

ChatGPT suggests that it might be best to use the Bouncy Solver. Is that correct?

Definitely something you can do in Grasshopper, and you might not even need Kangaroo. The surface doesn’t look like it has a massive amount of curvature to it, so you might get away with something like:

  • Use Contour to make evenly-space lines across the surface
  • Divide the lines into segments (offset on alternating lines to create the hexagonal grid)
  • Evaluate Surface at that location to get the Normal and Plane
  • Align Plane with one of the cardinal directions
  • Orient a hexagon to each point.

Include a tolerance in your hexagon size.
Use this image to work out your contour spacing and divisions

You’ll probably get the best results when your contour lines run parallel/perpendicular to the major “fold” lines in the surface.

2 Likes

Actually, having played with it a bit, you probably get the best results by simply projecting a flat hex grid onto it from above. Any attempt to make the grid conform to the surface in one direction just makes it overlap in the other.

1 Like

Hi Tom, thanks for the suggestion.
I was actually thinking about a hybrid approach:
first project a flat hex grid onto the mesh, and then use BouncySolver just to slightly relax the centers so they don’t overlap and keep a clean spacing.

Can you share your surface? Is it a mesh, polysurface or subd?

Hi,

There is Rhino plug-in called Paneling Tools that actually allows you to do just that, it might be worth to check it out

This is tricky to simulate with Kangaroo.

The setup is easy:

Generate hex grid of points
Project onto the surface
Copy a hexagon to each point
Align to local surface normal

Some simulation is easy:

Pulling hex centres towards each other so that local distances are minimised
Keeping hex centres on the source surface.

This gives a nice tight sphere packing:

But this means the actual hexes intersect.

It’s easy to just shrink the hexes till they don’t intersect, but this isn’t really optimal.

Ideally, we’d want the hexes to collide with each other, not their centres. But this is tricky when the 2D shapes are not all constrained to a 2D plane. You can’t use sphere or rod collision because the tiles overlap at their edges when the surface curvature is high. See how these pairs of points can just slip over each other:

A better collision could be made by making prisms out of each tilted hex, and making sure they don’t intersect each other:

BUT, the angle of each hex should change as they slide across the source surface, which can’t be updated in real time in the solver.

2 Likes