Flat Equal Paneling on a Curved Surface?

off topic
this look like a nose :smile:

1 Like

There is a ThinkParametric course using Lunchbox machine learning, Annemone and Kangaroo recreating the Soumaya: https://thinkparametric.com/courses/panel-clustering-using-machine-learning-soumaya-museum

1 Like

Hello, I want to achieve similar thing in first part of my thesis project, and I have similar questions.

My thesis project steps:
1- equal paneling a given freeform surface, (triangular, quad and hexagonal grids)
2: analyzing the support structure of the paneling grid,
3: Comparing the results.

Karamba developers provided me educational licence for my project, so I’ll use it for my second step of my work.

But for the first part; I cant decide which plug-in should I use? Or which path should I follow.

I tried downloading Varylab (which provided me beta token btw) but it is blocked by Java. and grasshopper plug-in is not fully developed I guess… (But I might try this if there is no other way)

I check the Museu Soumaya publication, but they give general explanations, not educational about implementing issues.

Thanks for any help.

Kangaroo has various tools for this…
however - be aware that it is not possible to smoothly tile general freeform surfaces with identical tiles meeting exactly at their edges. You’ll need either gaps between them, or slight variation in the dimensions of the panels.

1 Like

Hi, does someone know why is this happening: mesh not generated along the entire surface

It could be many things. You’ll need to share your file to get a solution.

Try this, there are two options which are a bit easier to use than meshmachine (both of which are in kangaroo by default). It’s likely that you need to refine your input mesh before remeshing.

planar_panels_2.gh (104.8 KB)


Thank u, this is exactly what I need, but you might be right, the surface is been generated using two curves and loft. I was trying to add panels using the examples you shared above, using mash machine… but I will try this new process. Where can I find Kangaroo 2.5.2? I can only see 2.4.2
Thanks a lot

Has anyone tried to actually modify the underlying surface in a way that the curvature stays as homogeneous as possible? This doesn’t make the panels planar but it simplifies a lot. In automotive we care a lot about preventing twisted surfaces, and it leads also to lighter twists on hexagon panels (we do not planarize).

I mean is it just me? I find the surface of the initial example horrible, and I‘m shocked that this is actually built within a city. Which makes me think that hopefully this topic stays difficult…

Kangaroo is built into grasshopper now. I’m using Grasshopper 1.0.0007 which is built into Rhino 6 (i’m on 6.25.20114.5271)

Can you please send HS_kim SplitSurface_re.gh link or definition?

Hi Dharman,

I was looking for examples which showcase planarization and stumbled upon this example. This looks really nice and works perfectly. I have one more question to ask, is there a way to sort these geometries with respect to similar geometries? I know how to sort them with area and length’s but not with similar shapes.

You’ll need to define what similar means. There’ll probably need to be some kind or heirarchy. For example first distinguish by number of edges (4,5,6,7 etc) then by edge lengths, or vertex angles. You can use k means clustering for this. It is complicated by the fact that the panels have rotational similarity. You may end up with a Dendrogram of panel families. As per museo soumaya link above. As that document explains, this is a very tricky problem. It’s easy to get something which gives you bunch of colored panels which look similar, but to actually make a bunch of the panels not unique is very difficult to algorithmically solve. I think in the end they defined some areas manually in order to classify panel families. I can upload a k means example when I’m next at a PC

Heres a sample of using the Owl kmeans component. i’ve shown how you can use weights to control the relative importance of each tensor component. if you set everything except EdgeCount to 0 you’ll just get clusters representing all unique edge counts.

planar_panels_3.gh (137.6 KB)

I’ve shown how to create an average panel for each cluster too, which is then used to replace every member of the cluster.

unique panels coloured by cluster:

average polygon. each cluster member is identical. note inconsistant gaps. initial polygons are not regular

all panels in each cluster:

It would be worthwhile performing some kind of fitness check to determine a good value for K. for instance you could check the cumulative total difference between.

Also the original triangular tessellation is not very good. i’s suggest using kangaroo to create TangentInCircles. this ought to give much more regular starting polygons, however the boundary condition will be problematic.

Hope this helps you!


Hi Dharman,

Thank you for the reply, by similar I mean the shape of the panels so that we can make molds of panels which are similar in shape (length, width and height). Yes, I read a few thing about k means but have never used it myself. Yes, that will be really helpful will take a look at the example.

Wow, this is really helpful Dharman. Thank you so much, actually I went through the script and I had a few questions to ask -

  1. It is written that ‘tensor dimension and weights much match’, but from where did the number 1000 and 0.100 come from?
  2. I apologize as I have no much knowledge of K-means and owl component, what exactly is happening there in the ‘K-means cluster grouping’ group in grasshopper?
  3. Lastly, once we have the panels in each cluster, is there a way to sort the panel that are same in their dimensions and geometrical form so that we can lets say give one shape and say, make 20 laser cut parts of this same shape. I hope I could convey my thoughts.

And thank you once again for all your help. This is really helpful.

Glad this has helped you and that you have more questions.

  1. I should have written that the count of dimensions and the count of the weights must be the same. The value of the edgecount weight is very high to ensure clusters don’t have some members with differing edge counts (eg hexagons and pentagons). The weights determine how much importance each dimension is given.
  2. Google k means. Essentially the tensors are vectors which can have as many dimensions as you want. Dimensions can be any number you want. It could be the R component of an RGB colour or it could be the length of a curve. Visuals of k means usually show tensors with two dimension drawn as x and y. Watch this
  3. That’s already happening here:
    Whatever you choose as K, will be the number of unique panels

Apologies for making this example a bit over complicated. It follows on from work I have done previously on a project, where I was interested in doing this but it was not in our scope. I might try to make a simpler sample focussing on the clustering only. There is also a simpler example in the owl folder

1 Like

Hi Dharman,

Thank you for being patient and replying to my answers.

So if I understand it correctly, the number of inputs in dimensions and inputs in weights must match. And the input of maxEdge, maxRadius and minRadius for weights can be any minimum number, in this case 0.100?

Thank you for sharing that video, I think I understood what K-Means mean. Like you said, it can be any attribute of the geometry as long as it is expressed in numbers which can be the cluster the objects/panels.

Sorry, but I think you meant the the K in the K-means clustering group, the one marked here changes the radius of the panels. I changed the K input to 500 which was connected to the N of random component and still I am not able to get set of panels which look alike. Sorry if I am doing something wrong here. And while I was changing the K values the Average Tset componnet sometimes gave error saying - TensorSet has no Tensors. I have no clue why that happened.

No the example you have shown is really good, I am learning it for the first time so I have many doubts. Lastly, thank you for suggesting to look at the OWL example, I looked at it and to take that example a step forward, can you tell me how to segregate same cuboids?

I hope I am not bugging you a lot by asking so many questions and thank you once again for all your help.

HI ,

Iam trying to get planer equal triangle panels for a curved surface , The size of each panel needs to be (950X950mm- a square with two triangles) , by using lunch box but controlling U & V as shown below is not achieving the required size .
Any idea ?

Triangle Panles.gh (9.9 KB)

Most surfaces cannot be covered by triangles or any other shape which are exactly the same. That is how basic geometry works…

One class of surfaces which can be covered by triangles which are exactly the same are “developable” surfaces. I don’t think there are any other classes of surfaces with the same property but I could be wrong.

1 Like