algorithmic modeling for Rhino

Following on from the images I posted recently (here),

I am now making available the source script for Cytoskeleton.

First, to explain the name:

In 1903 Nikolai K Koltsov  proposed that the shape of cells was determined by a network of tubules that he termed the cytoskeleton

(the name comes from Cyto- meaning cell or hollow vessel)

This is another wireframe thickening tool, intended for 3d printing use.

In contrast to exoskeleton (which works on general line networks), this works exclusively on lines which form the edges of meshes. The additional connectivity information present in this case makes it possible to produce an output with all quads, and moreover, a quad mesh with all even valence vertices.

Because it works on a Plankton mesh, the input can be made of ngons. We can also input a triangular mesh, apply the dual operation, and then thicken the edges of the resulting polygon mesh. This works well in combination with the remeshing script I posted here, for getting approximately equal edge lengths. This can be used to quickly turn any closed mesh into a lightweight hexagonal (mostly - with a few pentagons and heptagons for curvature) frame structure.

The even valence quad mesh property of the resulting thickened mesh means we can also use the mesh direction-sorting and directional-subdivision tools from Kangaroo (described here).

When combined with Weaverbird's Catmull-Clark subdivision, this allows us to smooth the mesh, while also having control over how much 'webbing' occurs at the nodes:

from left to right we see:

  • 2 levels of Catmull-Clark with no directional subdivision
  • 1 level of directional subD, then 2 Catmull-Clark
  • 2 levels of directional subD, then 2 Catmull-Clark

One could even combine the resulting surfaces with all sorts of relaxation, or developable strip unrolling...

The code is there for you to read, so feel free to experiment and make adjustments to it. Hopefully it is fairly self explanatory.

Please feel free to ask any questions or suggest improvements, or just show off anything you create using this.

and yes - because the input and output are both meshes, you can apply it recursively!

This script references version 0.3.0 of Plankton, which you can download here:

Views: 31959


Replies to This Discussion

great job, I wish that for getting approximately equal edge lengths


great great great! Thanks  Daniel:)

great work again Daniel Piker!!

is this going to be a component like exoskeleton or just the definition?

maybe these two, topologizer (am i forgetting another?)  and future ones could be a gh add-on 


the cytoskeleton script is great, it is super fast and produces nice and very clean meshes. Than you! In many ways it works much better than exoskeleton in my opinion.

Is it possible to thicken a mesh progressively with cytoskeleton? That would be very cool in combination with your Dynamic remeshing script.

Hi Wieland,

Thanks - glad you like it! Your sculptures were one inspiration for developing this.

I don't actually see this as a replacement for exoskeleton - they each apply to different situations. Exoskeleton can handle much more general networks that don't form surfaces, but when you do have a mesh to begin with, things get a bit simpler and Cytoskeleton can give a very clean and quick result.

Yes - it certainly should be possible to vary the thickness across the mesh - it just depends what you want to control that with. One option could be to tie it to edge length, but there are many other possibilities...

After playing around a bit with Cytoskeleton I understand the limitations and that it can not handle general networks. I was just blown away by the cleanness and speed of Cytoskeleton and I imagined it would produce Exoskeleton style nodes that clean. 

I would like to control the thickness of the mesh according to the cell size, like in the example on the left. There the thickness is controlled with WeaverBird (like Giulio explained it here). I think it would really cool to be able to control this directly in Cytoskeleton.

Hi Wieland,

I added an option to multiply the thickness of the struts according to the local mesh size(it actually takes the average length of the connected edges at each vertex).

The updated definition is attached below


Hi Daniel,

thank you very much! It works perfect, great work. Its exactly what I wanted to do. What are your plans with Cytoskeleton? Will it become part Kangaroo?

HI I get this message when I try to load the example, anyone no what it means?

1. Solution exception:Could not load file or assembly 'Plankton, Version=, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

Hi Simon,

You need to download version 0.3.0 of Plankton, from here:

Hi Daniel,

I received a similar message:

Object: Cytoskeleton (level 1)
Exception has been thrown by the target of an invocation.

Object: Cytoskeleton (level 2)
Could not load file or assembly 'PlanktonGh, Version=, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

 I downloaded all the files from the link above, I unblocked the files put them in special folders/ components.

What am I doing wrong? please.

Thank you!






  • Add Photos
  • View All

© 2021   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service