Paneling on mesh with circle packing

I’m looking for a solution to this problem that is driving me crazy.
How can I make panels once I have made a circle packing on a mesh previously generated with kangaroo?

All this to generate the bearing structure of a shell (then to be passed in karamba).
Initially I had simply mapped the catenary mesh with a voronoi grid generated on the flat mesh, then relaxed to obtain a more regular geometry with polygons (more or less hexagons and pentagons, etc)

I simply thought of intersecting all the planes generated by the circle packing but this I cannot do because they also intersect each other several times.

I could use the intersection of the spheres generated by the circles, but this would require the enlargement of all the circles to allow the intersection, certainly a lot of calculation time, and in any case it is not said that all the spheres intersect.

Ironically I would need something similar, but inverse and on a 3d mesh, to the process of what is described in this discussion … Maximum inscribed circle - Grasshopper

Thanks a lot to those who can help me!

P.S. I don’t know how they made these panels but I really need something like this (it is not strictly necessary that the faces are planar) Landesgartenschau Exhibition Hall on Vimeo

circle packing on mesh

circle packing on (15.8 KB)

Ok folks, it works well.
Unfortunately it is very very slow, 12 seconds per 345 pannelli.

In the end I used the “Plan e Region” (in the mathematical intersect tab).

I listed each circle and entered all the plans together in the “Bounds” field. maybe this is what slows down the processing (I don’t know how the heck the professors of the Stuttgart ICD did! maybe one or more more powerful CPU / s. Or maybe there is a deception?)

Perhaps it would be ideal for a quick and interactive visualization to be able to insert only the circles adjacent to the circle to be paneled.

If anyone comes up with something to speed up the process, he is welcome!

circle packing on mesh - panel

Never mind, obviously this cannot work on my mesh.
The problem is due to the fact that the plane is infinite and being a double curvature surface with recesses, it also intersects the planes on the other side …

I wonder if there is a way to reduce the size of the plane (physically not only visually).

I keep wondering here too: how did they do for the Stuttgart pavilion? since there is also a double curvature there and the planes would intersect.

Thanks for your help
circle packing on mesh (63.6 KB)

If I remember correctly ICD used an agent based system for the panelling, not just plain circle packing. Nevertheless what you see as panels is the mesh dual of the delaunay mesh of the circle center points.
The theory behind why that approach is used is that if 3 edges meet in one vertex the mesh is easily offesettable whithout planning cutouts.

The picture is from this german paper by C. Robeller:

Here is a post by Daniel Piker from the old forum, the gh files might produce errors, but the principle should be understandable.

The only problem with your mesh atm (atleast the one that was referenced in the 2nd file) are the holes, so either delete these faces from the delauny mesh or use a different technique to get to the delauny mesh.

Hi Daniel,
Yes, I had already seen that the optimization of the panels in the ICD pavilions takes place through agents, but what interests me is the process by which they manage to make the panels.

Really interesting this approach, I had already tried to create a mesh by delaunay triangulation based on the origin of the circles, to then take advantage of its duality.
This, however, as you rightly foresee, creates problems in cutting the mesh, so the entire triangulation process is almost useless, since small and altered triangles are generated at the base.

I have to find a way to keep the circles above the bottom edge of the mesh, to then cut it precisely and maybe this road is the right one.

Looking closely at the video of the ICD pavilions, it seems that the geometry of the panels exactly respects the duality of Delauney.

Thanks for your help!

I found this repository on the github of the computational design team the design of the ICD / ITKE Research Pavilion 2015-16, but I don’t know how to use the .cs files inside the grasshopper to try them.

Ah, nice find. It’s a visual studio project. You can download it, open with Visual Studio and compile it to get a .dll/.gha.

I have very few skills with Visual Studio, now I see what I can do. Thanks for your help!

The delaunay method applied on the circle packing of my mesh shelldoes not seem to give the desired result, at the base the faces are too distorted and there are too many irregular polygons. Besides, I would still need to manually create the missing segments at the base later.

Inside Pavillion2015/bin, there’s already a .gha. :slight_smile:

how could I not find it ?!
Have you tried to make it work?
I’m starting to see it now

Thanks Max!

That’s right, but I didn’t mentioned it since it’s not the full build just one component, check the size.

Check your messages in the forum, I did send you the compiled. gha

It’s not clear to me what kind of shape you want to tesselate since its switching with every post. It looks like the one form the gif has to much curverature in certain areas. And the starting mesh seems not good either.

1 Like

Didn’t check the size, sorry. Just wanted to help out quickly so I posted it.


No problem :slight_smile: I did send him the compiled .gha as a pm like 2 hours ago, but guess he didn’t notice.


Thanks guys, I’m glad to get so much help. I hope this is an interesting topic for the forum!
I see how this .gha that Daniel compiled :pray: works, I hope to succeed in the task in order to load the .gh file for those who need it in the future.
My biggest thanks to GeneKao, for the wonderful work he shared. (there is not here but he’s present on the old forum Gene Kao's Page - Grasshopper)

See you soon :rocket:

For completeness I add this article that I found today which describes the approach of making panels using adjacent planes and the variation of the position of the points on mesh.

They developed this grasshopper algorithm, following more or less the same initial intuition that I had.

I believe they succeed in the enterprise by somehow filtering only the planes adjacent to the plane region.
Quite right?

1 Like

Hi Daniel
I tried to build the code in VS 2019 but I got errors.

could you please help me solve it?


Relink rhinocommon and grasshopper references of your pc. Vs cannot find the directories

1 Like

Hi @Petras_Vestartas
Thank you for your help. Do you mean like the following image?
When I create a new project, I do it this way, but when the project is ready, I do not know how to do it. Can you please tell me what to do?


Yes or in project references.

The adjacent panel intersection is not so difficult, since you can get this from a mesh topology or closest point search or delaunay triangution. This is the component in ngon plugin, called planar faces. The problem is how you get those center of the cells…

Thank you very much, I did the following steps: “Solution Explorer…”, “Add References…”, “Browse…”, and select .DLL files. Previous errors were fixed but I still could not build the code and it failed.I attached the list of errors as a pdf file.

errors.pdf (163.4 KB)