algorithmic modeling for Rhino

After playing with Kangaroo on this discussion and as I like a lot Marc Fornes structures I wanted to go a bit further with Kangaroo and also making some mesh automation.  

So the question is: how to make quad mesh usable with Kangaroo and with limited inputs parameters in order to simulate funicular structures like "Vaulted Willow" or "Pleated Inflation" from Marc Fornes and the Verymany.

Here is a first attempt script.

As inputs there are :

Lines_in, just lines, no duplicates, on XY plane could have Z values, but the algorithm works on a , on XY plane could have Z values, but the algorithm works on a  flat representation.

Tolerance is used to glue lines when points are closer than tolerance

Width is the half width of the “roads” going through the network

Angle is the shape of the ends of the roads, 0° means flat end, 180° a totally rounded end

Deviation is the shift generating spikes or enabling to generate pleated geometry


N_u is the number of subdivision along the “roads”, image above with 3 subdivisions on the roads

N_u is the number of subdivision across the “roads”

Zbool if false everything is flat, if true the mesh is in 3d, best with angle = 180° or -180°


For the outputs there is the topology of the network (like Sandbox)

As outputs geometry are put on datatree, each branch represent a path on the road, above 3 paths, which are brep output.

Adding a diagonal there are now 4 paths so 4 branches


The mesh M goes with F which are fixed points, anchor in Kangaroo.

U and V are lines in datatree, there will be used as spring in Kangaroo, U above



This script could be used to draw sort of roads, like in here

But the primary purpose is to do that.


Views: 25084


Replies to This Discussion

You are a naturally born killer > excellent stuff > bravo.

I'll post something later (I'm at home right now) with regard the quad thingy.

Example 1 : 

How to get this : 

First draw lines, not polycurve. The number of lines between 2 connexions is used to add or remove quad. So if you find that a leg is too short, split some lines in 2 or 3. What is important is the direction and position of end curves (where a point is connected to only one line). The direction will give the orientation of the foot. The position its position as it is used as Anchor in Kangaroo.

So you will have this mesh. There are some mesh overlaps, which are not important if points are not coincidents. 

U and V curves are used for springs. Mesh is used for inflation. Points (from mesh or lines for gravity).

With no inflation (don't use it at the beginning), constant stiffness for springs and not cutoff the shape is like that : 

In order to have more equal size in lateral I apply a cutoff. I also add differents strength of string on u (along legs) direction, I use genome (grafted) in order to have multiple sliders. After that a bit of inflation and it is done. 


Bravo, super travail. je suis impressionné

Great Work! Thanks for sharing!

I' have build something similar (like envelope curves script) a while a go but yours is way more evolved!

Thanks Peter, Ludo and Christian. 

I still have many things to understand. Especially with pleated inflation. I am sure I can replicated a different discretization for the width of some "roads". Argeles Pleated Inflation has 2, 4, 6 12 discretizations in U.  It will not be difficult to replicate as I separate "roads" in branch. It is more difficult to replicate pleated, I tried with different strengh of springs, differents loads ... Perphas  angle limit in Kangaroo or I could cut in 2 each quad and make the angle there, surely the best option

Cool! Thanks for sharing. Also a big fan of Marc Fornes stuff. 

Dear Laurent + All,

as im drawing a lot of 2D stuff with my pen plotter at the moment - your tool gives really nice pattern in combination with weaver bird and branching structures - but would it be complicated to add a variable width value for each curve - or 2 values for each curve (start and end value basically like the t spline pipe command works)?

Christian I have done something on my travel to London
But not enough battery to post the definition, surely tonight at the hotel
So I put 2 radius , at intersections of 2 lines I put mean radius
I will test that with attractors to see robustness
Best regards

Here it is.

Width_b = beginning of lines width in list

Width_e = ending of lines width in list

If there are less widths than the number of lines, the last width is taken by default for the missing widths. 

Hope it helps, tell me if you want some improvements. Please post your work, I like to see how are used scripts.

An exemple with one attractor point in order to calculate the widths. Here it is meshes. I used a font described by curves (Fabtools)

P.S : I saw that dents doesn't work for 0° and other bugs !!



Thank you Laurent for looking into it.

Good idea with the attractor point!

Its working already pretty fine for what I intended to do.

I just found the the mesh out is always invalid for some reason while the brep out works most of the time but still misses some of the Input lines.

I also attached the corresponding .gh file








  • Add Photos
  • View All

© 2022   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service