Hexagons on surface : Is there a tool that outputs nice hexagons?

I played with @martinsiegrist definition and managed to get something more homogeneous, rebuilding flat rectangular surfaces from different sets of control points.

vase_hexagons_v2.gh (27.2 KB)

With correction of control points around seam at the end :

vase_hexagons_v2.gh (22.4 KB)


Interesting. Learnt something new with the rectangle mapping.

Very nice result. Here a comparison between the 2 methods.

I’ll have to make a version which hexagon rotated and also an automatic seam detection.

1 Like

And adding a Graph mapper can allow some control.


:slight_smile: I just did the same

Got back to the script above and noticed the surfaces did not behave as expected. After calling maths to the rescue, I rewrote the entire thing using domain mappings. It turns out to be extremely simple : divide the rail and “unroll” it, divide the length of each segment by the ratio of the biggest radius to the smallest radius, and scale this new rail to the same height as the pattern. This “deforms” the rail in such a way that when mapped back, the pattern is evenly scaled on the surface.

It works for any pattern made of polylines but if this pattern happens to be a square, then Map to Surface can be used to map any pattern from a unit square…

vase_hexagons_v3.gh (39.3 KB)



Too bad, though I’ve had a hard time reading your GH code anyway.

Ha, I missed one of those during cleaning - edited post above. However it should not affect the main routine.

1 Like

vase_hexagons_v3 (1).gh

I still see nothing when I open your file, perhaps because of this?

1 Like

Nice work @magicteddy!

I’ve added the regular hexagonal pattern and a profile for the vase.

vase_hexagons_v3.gh (53.9 KB)


vase_hexagons_v3 (2).gh - At least I can see something, thank you. It’s a sprawling canvas though, so reluctantly, I’ll pass on trying to understand it.

I added this little component in Nautilus

hexagonsOnSurface.gh (5.4 KB)

Version 0.5


I didn’t know you had released this. Thanks for sharing! I’ve used your reaction diffusion to mesh to 3d print some things which was really satisfying!

:smiling_face_with_tear: I was hoping you would find a nice intuitive approach to avoid those math tricks I love so much !
I could clean this a bit more, but already spent almost the entire day on it so that will wait. Note that I use icon display + Group Display and that doesn’t seem as messy as it is on your screenshot. You can ignore some parts as well.

Have a nice evening :smiley:

I don’t read icons. I figured you do because the ‘Draw Full Names’ components (from you) often overlap. I can turn Full Names on/off, of course (I have to turn it on first to turn it off), but the canvas is still HUGE . Difficult for me to take in, which is too bad because I’d like to understand your code.

What is “Group Display”?

P.S. Oh, Sunglasses - “Big nicknames on groups”? Took awhile to get that to work, enable Sunglasses, remove ‘Group’ from the ‘Exclusions’ filter. It’s cool but not enough.

Hi Laurent, thank you for this post. It’s a great topic and rather relevant in architecture- I thought I would share my own solution, which I used for this project a few years back, and allowed to fabricate this pod in melbourne with only a handful of node types, as the angles between members where consistent within a certain tolerance. Now that I learned how to loop, it took me under one hour to rewrite. Not as sophisticated as yours and others on this post but it works. Cheers

230803_Proportional Grid.gh (15.9 KB)


At least for the hexagons, the pattern could also be optimized with Kangaroo.

This approach does not require the remapping of domains.

vase_hexagons_v3_kangaroo.gh (57.9 KB)


Maybe this link:

can help?

Thank you,


Yes, for pure surfaces of revolution I think using the respaced uv isovalues approach in the other definitions above can work well, but if the shape is more freeform, the relaxation approach comes into its own more.

Rather than acting on hexagons and keeping their angles, I think I’d use a triangular mesh here and take the dual at the end. The TangentIncircles goal will optimise towards a conformal mapping, so the resulting hexagons will be close to regular (within the limits created by the number of rows we set).

Here’s an example of this relaxation, outputting a hexagonal mesh at the end
hexagons_relaxed.gh (129.5 KB)


Makes sense :slight_smile: