Unfolding Pyramids in a row

Hi everybody,
I have 81 pyramids aligned on a curved surface.
I am trying to unroll the pyramids in a row and all connected.

I aligned these nine manually. But even 9 of them took so much time.
I would be appreciate if you have any idea to make it by grasshopper.
pyramids.3dm (1.1 MB)

I have a variety of - internal - C#'s that do unroll jobs. They layout/label developable faces not in the way that you want … but I could over-simplify and modify one this w/e (there’s a F1 race but is in afternoon [Mexico]). Have in mind that this would be a 100% black box for you if you are not familiar with coding: i.e something freaky like this:

As exposed in SDK Unroller (on Brep basis) does this:

Notify if you think that a similar solution could be usefull to you (but it would not be the Jack for all trades).

Check out this post and script here:

You’ll have to figure out which edges to unjoin.

first of all a friendly reminder not to destruct any existing data structure.
(90% of this definition is just to restructure the pyramids in rows and columns)
now, I fiddled a little bit and found that since the pyramid shapes are quite irregular, I don’t think you will find a ‘golden’ algorithm to unwrap them. in this definition, you can unwrap them in small groups (I think ideal is 2 or 3)
In my mind, if this is a school project, you’re better off gluing 30 or 40 pieces than spending a week finding an algorithm to reduce them to 9

semimanual.gh (318.3 KB)

A decade this way (optimistically speaking) … or an hour the other way:

  1. First (general case: using a BrepFace) you should detect islands in the divTree (representing each non null quad pts set as a bool Matrix cell: that’s classic Matrix stuff). A Surface doesn’t need that … but where’s the challenge?
  2. Then you should create your pyramid 4 sides per quad pt collection (where none is null) in a controllable manner keeping track what side is connected to what.
  3. For each side you should create mapping planes for the unroll (per quad sides) task. Why not using the Unroller? Well … I’m not 100% sure about what that thing does (i.e. if it respects the face order - but I guess that it does that).
  4. For each pyramid quad set you should create mapping planes (from, to) related with what side is connected to that other. These would allow you to map an unrolled set to the previous one (the one that in the Matrix is related with the new, that is).
  5. When ready with breps, planes, cats and dogs … is a classic backwards recursion task where you may go back and rearrange the unrolled sets already placed if a ccx event with the candidate one occurs.

Don’t even think to do that with components or Anemone.

Shown some WIP tests (speed is all what I am after, mind) where the pyramids have random hights (dMin-dMax).

too much speaking… too few solutions…
The poor guy wants to finish his project!
I’ll give you an advice: “Don’t think like an academic” :wink:

I was talking to you (I guess). And I NEVER think like an Academic.

With regard the final solution cross fingers that it wouldn’t require restricted/internal stuff (or island detection: that’s strictly internal, but if you use a Surface … etc etc).

don’t worry! despite all the teasing, I’m always listening! (obviously)

If so as a challenge and using a BrepFace do the 2,3,4 steps.

Other than that the Unroller gives up quite fast: See some test results VS corrected ones meaning that while there’s a solution around (that’s obviously not assured for any Brep) the thing is rather in a hurry to provide some result

Hi @lulukner,
This problem is very difficult!
Fortunately, some brilliant mathematicians have worked out some beast-level theory in this area.
And Andrei Nejur has done an amazing project to make it into a Grasshopper plug in called Ivy.

You should be able to get results with Ivy.


Thank you all for your answers and time!