I’m trying to create a monoclastic shell with Kangaroo in Grasshopper. The shape can be achieved pretty easily if I only constrain the mesh edge, but this causes the original mesh to deform and get bigger as it curves upwards. I want the original dimensions of the mesh to be maintained (edge lengths and area), and rather than having the edges be anchored I want them to move inwards as the mesh rises. I guess you could imagine it to be the same as curving a piece of paper to create a semi-cylindrical form.
Below are some screenshots of the monoclastic shell with the edges constrained but the mesh deforms.
Here I have the new script I created for a monoclastic shell that maintains the edge lengths of its mesh faces. The mesh faces hinge at the edges to achieve curvature, while the mesh faces themselves remain straight. I’ve also included the GH script for reference.
There are a few issues with the second monoclastic shell, despite the mesh face dimensions being maintained.
I have managed to get the two longest edges to move towards each other using a force component, but they keep moving towards each other infinitely, so eventually they crash.
Am I able to replace the force movement with a number slider that allows me to move the two longest edges towards or away from each other intuitively instead?
Secondly, the mesh faces currently hinge to achieve curvature but I want the faces of the meshes themselves to curve in a similar fashion to the two first monoclastic shell images I included. This means the final form is smoother and curves properly like a piece of paper.
Is this possible with Kangaroo?
Most YouTube tutorials only look at constraining the edge of the mesh, and chatGPT isn’t super specific about solving this. Would anyone happen to know if I could achieve this with Kangaroo, and how I might go about this?
I’m also open to using different plugins or incorporating Python code if it makes the goal more achievable.
If you want a singly curved shell, then there’s no need to use Kangaroo to form-find it. It can be treated as a 2d problem, with the known solution being a catenary curve. You can just take a catenary and extrude it.
I understand I could do that, but I want this specific workflow because the form-finding is required for a larger project. For the sake of simplicity I only included the two criteria because they were the current limitations on Kangaroo.
You could set the edges as anchors, and apply a scale 1d to the target points of these anchors to bring them inwards.
It can be good to present a simplified version of the problem when seeking help, but I think here sharing a bit more about the wider aim (and how it differs from the simple 2d catenary case) could get you more useful responses.
ok, I see. I’ll provide some context, although I’m not sure the problem can be simplified (a monoclastic shell is currently the simplest form I can think of).
This workflow is part of a project to design the shell for a deployable structure built from hygromorphic timber panels. These panels are laminated as a flat, 2D shape but when absorbing or desorbing moisture they will begin to curve. Below is an image of different bilayer curvatures. When multiple bilayer panels are combined they can curve uniformly to create a large-scale shelter.
The GH workflow is the initial step in the design to create a monoclastic (semi-cylinder) shelter made from hygromorphic bilayers. For this reason, it is necessary that the initial 2D mesh constructed in GH retains its original dimensions (length and width) given that in the real world the hygromorphic bilayers wouldn’t be able to stretch or warp.
Additionally, since the bilayers will all curve naturally as the moisture changes, the GH workflow needs to match that, so I can’t have the Kangaroo solver hinging the mesh; the mesh faces themselves need to curve.
Below I have included a diagram on how different initial 2D meshes can create different sheltering structures depending on how the horizontal forces are applied. At all the blue lines, a force is being applied towards the centre of the mesh, which causes the shelter to form.
I hope this offers some clarity on why the Kangaroo solver isn’t achieving the right form! I’m not sure if it’s an excessive explanation or if I’m being a bit misleading, but I’ll answer any other questions people have.
1 - at this moment, googling “monoclastic shell” or “monoclastic” returns few results with this thread being on the top.
What do you mean with this?
Can we simply talk about a shape with a single curvature (not double-curved), aka developable?
But, in the last image:
it doesn’t seems the case… so, what are you talking about?
Or, you mean every single cell itself is “monoclastic”, but the whole shape can bend to any form?
2 - Converting a mesh to a “net of kangaroo springs” does just that, no constraint for area or else.
Imagine it like a literal fishing net, with each segment being just a line which cannot bend but only shrink/stretch in length (a spring).
You can overcome the elastic part if you give the kangaroo component generating the springs a strength much bigger than the other strengths in the simulation, thus converting each segment into a “rigid beam”.
Then, your cells are still quadrilaterals, and those are not rigid per se. So, please create the diagonal (or best, both diagonals) for each of your quad cell, and use those too as kangaroo springs.
3 -
… ??
… that’s not going to happen.
Even in FEM/FEA a curved shape is subdivided enough until the straight segments are small enough to fit the goals of the simulation.
You can do the simulation with kangaroo and later transport your shape from the “mesh before” to the “mesh after” to retrieve your curved shapes, but during the simulation the mesh of springs will have simply linear segments.
Yes a monoclastic shell is single curvature. I used the term because I thought it would be clearer, my apologies. We can refer to the shape as a single-curvature or semi-cylinder for clarity.
The image of different structures I attached were simply meant as examples on how a 2D mesh can deform into different shelters, but I realise now how that’s confusing so please ignore the shapes below and refer only to the single curvature.
To answer your question: “Or, you mean every single cell itself is “monoclastic”, but the whole shape can bend to any form?” Every cell will itself be monoclastic so that all together they achieve a large single curvature. The whole shape should not bend into any form, so disregard that.
I’m a little confused by your second point on a net of kangaroo springs. If I’m correct in guessing, this is how the BouncySolver functions to achieve a relaxed form when you toggle to True? You mentioned the line cannot bend but only stretch, which is not exactly what I want to achieve (I need the line to bend).
In your third point you mention that achieving mesh curvature is not possible - which is also what I’m starting to conclude from playing around with Kangaroo - but if you check my GH script, which was posted earlier in the thread, the BouncySolver can achieve a relaxed, curved form if you anchor the points but leave the mesh faces unconstrained. It makes sense that the mesh faces would then be able to warp and deform (as they are not being constrained) but if this logic persists wouldn’t it mean that the Kangaroo plugin has the potential to achieve mesh face curvature?
My speculations might be completely off, and I can look for a different solution, but I just wanted to be sure about Kangaroo’s limitations.
I think maybe ChatGPT is guiding you very badly, because I see a lot of confusion here about Kangaroo and Rhino that could take a while to unpick.
A line object in Rhino cannot be curved, it is always geometrically a straight line segment. The only way it can become curved is if it is first converted into a different type of object - a NURBS curve or a polyline made up of multiple segments.
If you want something to start out straight, then become curved during the form-finding process, it needs to start out as a straight polyline.
Mesh quad faces in Rhino can be non planar, in the sense of their 2 diagonals not intersecting, but their edges will always be straight. The only sense in which a single quad can be curved is about one of its diagonals.
Also forget the BouncySolver - whether you use this or the regular Solver is not relevant here - it does not change the shapes you can make, only the way you see the iterations along the way to getting there.
By searching I see that your reference image comes from this paper. (It’s always good to include this information, as it gives people helpful context)