It looks like in that image they’ve used a *compact* circle packing (each gap between the circles has 3 sides)

In general this will mean the circles are all of slightly different sizes.

You can pack circles of predefined sizes on a surface with the definitions I posted above, just adding an OnMesh goal with your target surface, but it won’t be as neat - many of the spaces between the circles will have 4 or more sides.

Here’s an example for a compact circle packing on a surface:

CompactCirclePackingOnSurface.gh (40.9 KB)

For more about compact circle packings, see this paper

http://www.geometrie.tugraz.at/wallner/packing.pdf

or Mathias Höbinger’s thesis