Parting surface between cells

Some weeks ago NERVOUS SYSTEM showed a new collection named Porifera.

It is very interesting structure beacause it is based on the separation of a volume (made with cells) by one unique “surface” (not a Rhino surface). Here are the results of my first experiment to partition cells (Voronoi or cubes). It is not yet as good as I want but I have no more (:crossed_fingers:) cell just touching by edge or vertex. Not good because it is not a 50 % 50 % separation. But on one of the separation the skeletton is good.

Here a separation rough and smoothed on cubic cells

The process of construction (animated gif if it works !!!)

Cubic and Voronoi cells with differents type of volume generation (Sheet solid or Network solid ref at the end)

Minimal surface scaffold designs for tissue engineering


Cool! :astonished:

Interesting work, thanks for sharing Laurent.
The thing about partitioning the points into 2 lattices in that article also caught my eye when I read it.

It seems to me there are many different ways you could approach this partitioning that would give quite different results.
I also think that by working with the point distribution separately from the partitioning they miss out on some of the more optimal surfaces that are possible here - for instance I don’t think a gyroid like geometry could ever result from this system. I was thinking this could tie into something @Dani_Abalde brought up recently about joining particles with a valence (Topology goal?), combined with having 2 types of points, which only snap to points of the same type…

Also, this reminds me, I saw a paper the other day about cellular materials that included some links to old Grasshopper forum discussions on ‘skeletal meshes’ in the references:

Daniel, I am happy you responded because I was now in the part to minimize the surface with sort of mean curvature flow so I was just trying to use your Amazing MeshmachineStatic. I will see where I can go with that.

For the surface building I do that

  1. Choose a Cell (say it is white color) and set the faces of this cell as a separation (with the rest that is black)
  2. For all faces that are a separation I look if they can grow on adjacent Cell (black one), they can if they doesn’t touch a white cell with just the edge or a vertex, it is not allowed to have an edge engulfed by white cells… It tooks me some hours to make all the topology class …
  3. Choose among all possibilities new cell,
    3.1) the first cell of the list or
    3.2) a random cell or
    3.3) the cell that maximize surface (I didn’t implement this feature yet) and
    go back to 2 until there is no more “free” faces.

Still work to do to replicate Nervous work.

Interesting approach of growing from an initial cell.

I suppose one advantage of working with Voronoi cells would be that since there are 3 cells around each edge, and 4 around each vertex (except in certain degenerate cases, such as the points being on a cubic grid), you don’t need to worry about cells touching only by an edge or a vertex.

My attempt at this was to randomly assign all cells to either black or white, then for each one (in a random order), count how many neighbours it has of each type, and turn itself into the type it has the fewest neighbours of.

How nervous system keep track of neigbhours in thiat pointcloud?
Is there any graph behind where cells are not cubes?

They’re using the connectivity of the Delaunay graph of the points

I assume it is the 3d Delaunay graph with tetrahedrons ! As they are implemented in Mesh+ it could be used in Rhino/Grasshopper but I haven’t any idea for the logic of use.

I have also big problems to minimize the mesh with MeshMachine!!

I have also to implement the area maximazition to test if I can be better. One volume 35000 mm^3 and the other 64500 mm^3. If optimum volumes must be similar.