Tetrahedron aggregation over Kangaroo mesh

Hi all,

I am looking into generating an aggregate structure using a system like shown here:

I would like it to create vaulted spaces and have looked into using Wasp and Kangaroo to achieve this:

As you can see on the image above though, the aggregate tetrahedrons dont grow from each other like in the first image, but rather congregate over the surface. The result is therefore not very realistic… I am not sure how to make this work so the structure is created in the same manner as in the first image - please see the gh file attached.

I have also looked at achieving a similar effect just with meshes, ‘crumbling’ the mesh or using weaverbird to create spikes but neither of those methods seems to achieve what Im after.

@DanielPiker and @ar0551 maybe you guys have seen a similar problem before?

Thank you all in advance for all your help!

Aggregation over Kangaroo.gh (79.1 KB)Main_Crumble Test.gh (72.7 KB)

If I’m understanding right you want to keep adding tetrahedra to faces of existing tetrahedra, without any of them overlapping with each other?
I don’t think Kangaroo is the ideal tool for this - I think you want a simple loop (which would require scripting or a looping plugin) that picks a random external face of the existing aggregation, and adds a new tet to it (after checking that this would not overlap with any existing ones) then repeats.

Hi Daniel,

Thanks for such a quick reply.
The reason why I looked to Kangaroo is because it helps creating more emergent architectural spaces. I found that with only a looping plugin such as Wasp or Fox, to get any forms of architectural merit, I had to provide a base mesh/surface. I also thought that maybe I could get a similar working effect just through meshes rather than actual aggregation since its very heavy and its hard to see the detail at the given scale.
The crumbling code I attached gets a bit closer to the effect I imagined but there are many clashing faces. Do you know if there is a way to remove the clashing whilst maintaining a more or less equal edge length? If this worked I could possibly try to work with moving the vertices alongside face normals and creating first set of tetrahedrons and then connecting the neighbouring ones after…

Thanks again for your help!

I have a couple of C#'s that do that sort of random aggregation (but not following anything [ this could been added rather easily, mind]). Done via classic recursion where each mesh face (per loop) is candidate for yielding a new tetrahedron as far it doesn’t clash with the existed mesh.

Is rather unlikely that you can achieve that sort of controlled random “evolution” without code (notably: thread safe // code).

But the 1M question is why? Just for creating another envelope having a myriad of real-life issues? (drainage, leaks, hideous cost, not rational by any means/standards blah, blah).

Hi Peter,

The codes would be brilliant, Id really appreciate if you could share them with me. I haven’t really done much C# coding yet, but will do my best to understand. Do you have an idea how to possibly incorporate the mesh to follow?

To answer your question why, the project focuses on re-using waste materials without further processing to give them new life in a big waste dump in Ghana, in this case modules are being made by a swarm of small robots out of car wishbones with car panels cut to shape for weather proofing. All material is collected from the site, assembled on site and reused without any melting or using other methods of toxic processing. It is a university project though so the stage is pretty conceptual still but I will address the issues you mentioned hopefully!

Thanks for your help, its much appreciated

OK, I’ll try to find a non internal build on that matter and I’ll post it here. Have in mind that // Methods may be absent (strictly internal stuff etc etc) meaning that elapsed times may suffer.

Managing a follow me rule is very easy: while we evaluate any candidate face as basis for a new tetrahedron we check for inclusion (OK, that’s obvious) and we just invite the distance (say from the tetra center ro the guide object(s)) to the party. So you have an ordered List of candidates … and then … blah, blah.

But you are into a rabbit hole (the usual trap due ro that parametric thingy). This IS NOT a real-life way to create a rational shelter for a poor country: is just another (implicit) testament to vanity best suited for places where money means nothing.

Anyway: here’s an absurd (hideous cost) take on that matter: a tensegrity truss done that way (i.e. the art of pointless to the max).

Thanks Peter, I really appreciate your help!

Ill keep you posted if it works

If you mean that you can do anything realistic … well … hope dies last (should ALWAYS die first: better safe than sorry).

Get a very early take (a bit naive I confess) on that matter.

As I prepare the practice for a shutdown (until the end of days as we know them) I have no time to implement a variety of best strategies required for that scope … since I have removed all the sensitive internal stuff dealing with // and thread safety.

Recursion_GrowTetrahedronMesh_V1B_Derestricted.gh (140.2 KB)

BTW: Most amateurs believe that // is a simple thingy: just take the blue pill and be a happy bunny (if it doesn’t work take the red pill and/or both).

The Master has a different opinion:


Hi Agata,

sorry for the late reply. What is exactly that you are trying to achieve? Do the tetrahedrons have to be all identical, or are you looking to have parametrically-varied tetrahedral geometries?
This is quite important to understand, as both Wasp and Fox are based on using identical geometries for all modules.
Besides that, I believe it should be possible to make Wasp follow your surface more accurately. This is a matter of choosing the right rules and describing the surface field correctly.