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: 10391

Replies to This Discussion

Thanks Daniel!

The C# script you provided in the file is working perfectly. However, as you predicted, the Plankton C# script did not work.

I have attached a version of the script cleaned up, a video while running the simulation and the gh file.

Thanks a lot for your help!




Origami from Maria Mingallon on Vimeo.


Hello Daniel,

Thanks for the great additions!

Does the new sphere collide function support spheres with a variety of radii?


Hi Bill,

You can do collision between spheres of different radii using springs with cutoffs as before (see here for some examples), but not with the new faster SphereCollide component yet.

In time though I do intend to extend the fast collision to work with a larger range of primitives (spheres of different radii, cylinders etc.)

Hi, Daniel! thanks for your plugin, indeed.

But I have a question. I need to collide lots of sphrers and your new component works like charm. But it takes only the largest radius, so it makes this thing:   How can I make the diffrent radii sphere collide? Is it possible?


I am facing the same problem than Nick Tyrer concerning "remove duplicate lines" component.

config: rhino 5 SR8 ; Gh 0.9.0072 ; Kangaroo 0.95

I though the bug was fixed in the v0.85, is that correct?






  • Add Photos
  • View All

© 2021   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service