Cull all but "top" faces

Great!

And: damnit!

I’ve gone over this one more (bloody) time, and now have a solution that semi works. Or rather: it seems to at least work for these surfaces, but won’t work for “all” (or close to “all,” which I guess is the best one can hope for). It’s not exactly elegant, but it’s a wide net catching the correct points, more or less.

Would love to get your five cents on it - what are the mysterious things exactly?

191001_peter-question.gh (113.9 KB)

191001 mysterious things (on R5) listed (what they do? why?):

Note: I know that hope dies last … but if you have a far more challenging thing “of that type” on hand … solving it via components could be another trip into a big rabbit hole (but hope dies last)

Moral: Suzuka (take no prisoners)

Subtraction - honestly?

Suzuka indeed.

Right. Think (?) those should now be eliminated from this one:

191001_peter-question-2.gh (109.8 KB)

And tell me more about “solving it via components” please?

Er (191001 … well … you know) given the opportunity let’s do some theoretical talking:

Forget any pragmatic consideration(s)/constrain(s)/teamwork(s) workflow (like the ones found in a contemporary practice these days) and accept that cases in general are divided into 3 classes: (1) simple/medium cases that you can solve via native stuff (and/or some add-ons), (2) cases “like” (1) that you can solve far more easily via code as well, (3) cases that you can solve only via code.

Now … the tricky thing is that any given case may - on first sight - appear a (1) class thingy … but if you start asking more questions (of the “what if” type) … then you should date a different girl. A pro always asks more questions that you can imagine. Most non-pros do that critical mistake: they can’t see an inch further and thus they put themselves deep into the rabbit hole. In real life this is Nirvana for pros (for obvious reasons related with Mammon) … but this Noble Forum is far and away from such things.

Your case as exposed insofar flirts with (1) … but … the general case is a (3) task … most notably if this thing is part of some Academic thesis/research … meaning far more complex/challenging examples etc etc etc.

Right, thanks.

I hear you.

However, and having said that, &c, &c…

In this particular case I have some control over the input data (surface plots). They will always be reparametrised to fit within a 1 x 1 x 1 unit bounding box, and (pretty much, as in pretty much enough) always start at 0,0,0. And I can decide, in fact it seems I just decided, that there will always be three of them.

As we know, the only (“only”) thing I need is to cut these surfaces where they intersect each other, and cull the surface fragments that “lie beneath” another surface.

The attempt above (that for silly versioning reasons you still can’t open?) does that in this instance. So I got some of the way from when we started the conversation - which, by the way, I’ve enjoyed and am still enjoying a lot - and for this I’m truly grateful. You already made me almost solve this, you Dark-Lord-shoulder-to-cry-on you.

The strategy I’ve used for this latest attempt is to build a surface, let’s call it the base surface, that’s scaled to be wider (in x and y) than the surface plots, and moved down (in z). I then build breps between each surface plot and this base surface. I then populate the (cut) surface plot fragments with points and cull those fragments that have points within the two breps they are not part of.

This sort of works. Matching up the different points/edges to correctly construct the surfaces that make up the breps is a bit of a nightmare, but at least I got around the brep-from-hell-that-wouldn’t-close issue. The whole surface plot-to-closed(-ish)-brep thingie got pretty messy, so I clustered it (apologies in advance to Joseph Oster if he’s reading this) - but I now need two different clusters (based on slightly differing logics) to make it work, which to an extent brings us back to the dating of a different girl scenario.

But only to an extent. So out of these ramblings I vaguely sense a new question forming, and despite possibly overstaying my welcome I’ll come right out and ask it. Have you in your c# vaults something that does what the two clusters below do, but in a less improvised (single component, (3) task) sort of way?

Oh, and can you open it?

191001_peter-question-3.gh (45.0 KB)

Moral: hope dies last.

Should die first if you ask me.

191001_3: Karma and The Force (alas: the white option) is around:

But … er … the thing that the 2nd cluster does is a bit faulty (and that’s before the fireworks start: many sheet like Breps with unpredictable orientations etc etc).

But … why you need a C# that does the clustering since the C# supplied cuts the mustard? Or maybe you want a solution based almost on native components with a little bit of help from the Dark Side?

Moral: Avē, Imperātor, moritūrī tē salūtant

Aut nōn.

The cluster seems to do its stuff on my machine, or am I missing something? (Screenshots below.)

A little help from the Dark Side is e-x-a-c-t-l-y what I’m after.

OK, as soon as I finish a very nasty thing here in the practice … I’ll try to add a small C# here (or there) for a solution(?) that could(?) work “basically” with native components.

Moral: Bene diagnoscitur, bene curatur.

Audaces fortuna iuvat.

Much appreciated.

Er … not quite (hope shoud die first, said The Lord).

Let’s see what happens with a “partial” solution (the last step is out of question due to a vast variety of reasons - but this is not the time nor the place to analyse it in depth).

Play with the bool toggles (Flip the Brep, Merge CoplanarFaces) and see that with the wrong combo the partial result [ brep[1], brep[2]] may be bananas: this means that dealing on a BrepFace VS BrepFace (no join etc etc) basis would require a ton of components (and a ton of combos and a ton of Karma). A ton … due to results depending on orientations, that is.

This is what the C# attached several posts ahead does for you … and that’s the reason that I said that there’s cases that may fool you into believing something … while the truth is rather different. But what is truth? You tell me.

Brep_SplitWithSheetBreps_WhiteSide_V1.gh (54.4 KB)

All that with a very simple/entry level case: now invite 50++ sheet body Breps to the party and have a big time: if you are brave I could provide a test like this, he he.

Moral: Effectus sequitir causam.

Thanks Peter.

I’m afraid I’ll have to get back to you a little later on this one due to a pile of nasty practice-related things possibly similar to the ones you mentioned above.

Despite this pile, hope is far from dead. I revel in the presence of the dark force.

Moral: Ego postulo magis tempus in vita mea.

Speak soon.

Screen%20Shot%20048

Moral: Qui dormit non peccat.