Split a lot of surfaces by a lot of blocks

guys I need your support, please!
first of all: this is only a example, the final result is about 7000 cutting objects and 120 layers, that’s why it has to be CPU-friendly.

aim: cutting all surfaces which intersect with the blocks and remove the small parts which are inside the blocks.

As you can see I had 3 methods in mind, but I didn’t get any to work properly. the image should only visualize the methods, of course there is missing something.

split_multiple_surfaces.gh (69.8 KB)

Of coure there is always the solution to cut everything with everything but with a lot of data my CPU wouldn’t sleep for days. I would prefer to check only the intersection for split result and check if the resulting shapes are within the specific brep and cull it.

in short: if intersections are addressed like {block;surface}=polyline I would like to Adress the steps only to these items.

Is this possible? does anybody have any idea how to get this work on massive data?

split_multiple_surfaces_re.gh (105.6 KB)

1 Like


I’m not sure why Shape In Brep failed you and was spared the drudgery of finding out when I saw @HS_Kim’s far simpler solution. This is a variation of that:

split_multiple_surfaces_2021_Aug31a.gh (62.2 KB)

P.S. Or extrude the surfaces slightly before using SDiff, though this might not scale well?

split_multiple_surfaces_2021_Aug31b.gh (57.3 KB)

Thank you both. “Solid Difference” is impossible with 10 or more buildings so the fastest way to split is with “Surface Split”.

The area trick doesn’t work if the remaining parts are smaller. SInce weeks i try to find a solution to remove “splitted parts” without using area.
I tried to find/create a point inside the splitted area but thats harder than you think (:

Now i want to test if “point in brep” is true and cull it, but somehow there is a problem. Amidoingitwrong?

split_multiple_surfaces_2.gh (68.3 KB)

btw sorry for not mention the Pufferfish component, i didn’t knew i was using it. I didn’t get it to work anyway, datamismatching or sth. Somehow i got the feeling that my understanding of GHs path structure and workflow is completely wrong

You can also use Trim Solid.

split_multiple_surfaces_rev2.gh (107.8 KB)

i could, in this small scenario, but in the end it will be ~200 layers and 7000 blocks, don’t you think this would eat up any cpu?

If only there would be an universal and elegant solution to select the unneeded surfaces, i would be damn happy

You can enable “Profiler” and check which way is what you want…

1 Like

ok, to be honest i didn’t recognise “trim SOlid” although i’ve used it before.
It works. Not very fast but it works. tried it on about 1/10 of the original data and it took about 2 min. on a i7-9750 cpu.

I still hope anybody would give me any hint on how to check if splitted parts are in the blocks, since there are more situations where i would need this.

You can find and sort the surfaces per cutter using one of collision components, but the time consuming is not likely less and the resulting trimmed surfaces would be overlapped…

split_multiple_surfaces_rev3.gh (61.5 KB)

1 Like

@HS_Kim I like your approach of sorting the surfaces per cutter using collisions, but to get non-overlapping surfaces, I would flip the sorting to cutters per surface.

Scaling this up to 213 surfaces and 2,000 blocks took about 3.5 minutes, which I thought was decent given one thread.

split_multiple_surfaces_rev3_BW.gh (64.0 KB)

Took 25 minutes for 213 surface and 7,000 blocks.