algorithmic modeling for Rhino

The new version (0.095) of Kangaroo is now available for download:  

Additions include:  

  • Remote timer controller - can replace the use of the reset toggle and grasshopper timer to simplify simulation control. Double click the main Kangaroo component to open this remote. There are buttons for Stop(reset), Play, Pause, and Step (moves the simulation forward one iteration).
  • Line-line force - allows interaction between line segments - they are treated as rigid cylinders. As with springs, there are settings for offset and rest distance, so this can be used to simulate colliding rods, and also for keeping cylinders tangent to one another (can be used for reciprocal structures).
  • Gear simulator - collision between curves in a plane, can be used for various mechanical simulations - cams, gears, rack and pinions etc.
  • Developablize force - adjusts vertices of a mesh locally, to make angles around each interior vertex sum to 2*Pi, so the mesh can be unfolded to a flat sheet without stretching.
  • Volume dependent pressure force - allows you to set a rest volume for a mesh instead of just a fixed pressure. When combined with Laplacian smoothing for area minimization, this can be used to optimize for CMC (constant-mean-curvature) surfaces. It will also work on open meshes.
  • Translation lock - maintains a fixed relationship between a pair of points. This can be used to enforce periodic boundary conditions for TPMS.
  • Equalize angles force - given a set of angles (defined by 3 points each), this tries to adjust them all to become equal.
  • Mirror symmetry force - can be used to minimize curvature variation, and optimize for higher order curve continuity. It can also be used for simulating torsional resistance in curved rods.
  • True minimal surface relaxation - Laplacian smoothing force now includes an option for cotangent weighting, which optimizes for zero mean curvature, unlike spring based methods, or uniform weighted Laplacian smoothing which only roughly approximate this.
  • Fast sphere collide - allows much faster collision detection between large numbers of spheres. By placing these spheres at the vertices, this can also be used for collision between meshes.
  • Force-density element - an experimental one, more on this later
  • Projected-force  - adjusts its strength so the component of the force in a given direction stays constant.

New mesh tools:

  •  WarpWeft - sorts the edges of a quad mesh into warp and weft directions. This can be used to assign them different stiffness in fabric form-finding.
  • Checkerboard - sort the faces of a mesh into 2 lists so that 2 faces of the same colour are never adjacent.
  • MeshDirection - sorts the vertices of a quad mesh to give it a sort of u-v directionality
  • Refine Strips - subdivision in one direction only - can be used to generate developable strips
  • Stripper - separates out the strips of quads from a larger mesh
  • Unroller - unfolds a quad strip to flat without stretching
  • MeshMap - maps points from one mesh to another (can be used together with circle-packing to generate conformal mappings)
  • Reciprocal structure - generates starting geometry for a reciprocal structure from any input mesh (using the Plankton mesh library *Note* If you already have the Plankton components installed, you will need to update to version 0.3.0, which is available from here)
  • ReMesher - adjusts the connectivity of a mesh by flipping, splitting and collapsing edges to make all edge lengths closer to a target value
  • Diagonalize - creates a new face for every edge of the original mesh. Can be used on quad meshes to easily convert to a diagrid.
  • Refine - simple non-smoothing subdivision, splitting quads into 4 quads, and triangles into 4 triangles
  • QuadDivide - subdivide quads by any number squared, not just powers of 4
  • Corners - finds the corner vertices of a quad mesh
  • ByParent - simple quad subdivision, keeping the output grouped by parent face.

User objects:

The download comes with an increased collection of user objects to simplify setting up common simulation types - Including a simple to use origami simulator, a reciprocal structure generator, and a tool to generate compact circle packings from a CP mesh.


Geometry input now accepts polylines and straight curves.

Hinges can now be fold completely flat in both directions.

Various other minor bug fixes and speed improvements (including much faster removeDuplicatePoints/Lines components)


I've not yet updated all the documentation and example files to reflect this new version, but over time I will keep posting here with new demos and explanation of all these new features. I'll try and add a few new examples each week. Vote in the comments below if there is a feature mentioned above that you're particularly keen to hear more about soon.

No doubt there are still some bugs to be discovered. If something isn't working the way you expect or want it to, please post in this forum (ideally with a description or sketch of what you think should be happening, and a clear description of what happens instead and any error messages).

There are also some more new features that weren't quite ready to make it into this release, but are on the way shortly...

Kangaroo remains completely free, for personal, academic, and commercial use. I'm always interested to hear about projects done using it, and suggestions for improvements or additions.


Views: 10403

Replies to This Discussion

Hi Daniel

Thanks again!

When I try to open/edit the new user objects I get this message. And if I try to delete them they crash rhino. 

I am running RH SR6 - GH 0.9.0064 and KG 0.095.

Any idea why?


In case it helps... just one works ok... MeshCorners.

I updated to SR7 and the problem persists

Thanks so so much! Daniel!! There is nothing I can say...:DDDD

Thanks Daniel, was waiting for a long time for this update! Great as usual!

With and without sphere collision.  Very nice (and fast) indeed!

Thanks so much for releasing this new version of Kangaroo! 

I have been trying to use the new origami component with no luck. When pressing play in the new remote controller nothing seems to be happening in the Rhino interface. There are no errors or Null values given by Kangaroo Physics though.

As an attempt to fix the problem, I have looked in to the cluster definition as there is a mesh component in red. I had tried replacing it with other components making sure the information passed was the info required, i.e. the point (3d coord) of the mesh faces. However, it would still not work when connected to the Kangaroo physics component. 

Does the new Kangaroo 00.096 require Grasshopper 1.0 (0.9.0066)?

Any ideas on why this might be happening are welcomed!

Thanks in advance




Hi Maria,

I'm afraid I'm not sure why this might be happening. I've tested with the last couple of versions of Grasshopper and can't replicate this. Which version of Grasshopper are you running?

Could you take a screenshot showing which component in the cluster is red?

Hi Daniel,

The failing red component is inside the origami cluster: HingePoints. Please see below the error message I get. I have tried replacing it with another set of components to obtain the vertices of the mesh faces as points. Is the component HingePoints reordering the points in any particular manner, i.e. point 1 and point 2 being the opposite corners of the quad faces?

1. Solution exception:Cannot marshal 'parameter #5': Invalid managed/unmanaged type combination (Arrays can only be marshaled as LPArray, ByValArray, or SafeArray).

I have attached the script and a couple of snapshots showing the red component inside the origami cluster. 

Aside from this error, I had also noticed that the two last addition components which provide the RestAngle and Strength Values to the Kangaroo Physics component were loosing the '0' value entered as 'A' (they were getting Null instead). I have replaced the manual entry with a panel entry. However, I still cannot get the Kangaroo Physics component to run the simulation (or the forces might be somehow equal to the initial ones, and hence not getting the system to move in any way).

I am out of ideas as to why this might be happening. I had worked with Kangaroo before and really liked it. This origami component is really promising and I would really like to get it to work on my machine.

The grasshopper version I am using is: 0.9.064. Kangaroo is 00.096.

I would be very grateful if you could have a look into it and let me know your thoughts.

Thanks for your help!




Thanks Maria for providing this information,

It looks like this problem is related to the Plankton mesh library (The HingePoints components is currently one of the few places where Kangaroo uses this library internally).

Do you have the Plankton.dll file also installed and unblocked?

That marshaling error is not one I have seen before though. Perhaps updating your .net framework ( might help

Thanks Daniel

I have updated .net framework and reinstalled Plankton. The Hingepoints component is still not working and giving the same error message.

I have tried substituting it but it is difficult to track which are the shared edges and which ones are the opposite triangle corners of the mesh. I have attached the updated script for reference. If you could give me some tips as to how to replace Hingepoints properly, I would be very grateful.




I'm afraid I don't think it would be easy to replace the hingepoints component using only standard grasshopper components, because of the topology information required.

The 4 points should be (in order) : the start and end points of each internal mesh edge, and the tips of the left and right adjacent triangles (where left and right are defined looking along the direction of the edge). It is essential that these orders are correct to get the right assignment of mountain/valley folds.

Here's a version with scripts instead of the compiled component for extracting this topology info. The non-Plankton script is rather convoluted, whereas the Plankton one is just a few lines, but I suspect that if the component doesn't work, then neither will the Plankton script, but I'd be interested to know.







  • Add Photos
  • View All

© 2021   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service