Deconstructing Building Mesh to Extract Walls

Hi all,

I have a mesh and I am trying to extract its edges by deconstructing it. But it is creating points at the vertices and some additional points close to it (may be due to the thickness of mesh). I assume the mesh has not been constructed properly (which cannot be controlled at this stage). I have tried and I could extract the bottom and top surfaces but those were not the same (as those should be) because of these additional points. Is there any way I can cull those points and extract the separate surfaces in all four directions?
Thank you so much for your time and help :slight_smile:
A picture is attached for reference to show the close points:

The internalised file is here (25.2 KB)

I have been able to extract surfaces from it. If I can get a bit of help to separate the surfaces in the x and y direction as walls of the building, it would be great.

Looking forward to your kind response!

Thanks! (203.5 KB)

Here’s one way: (209.9 KB)


1 Like

Hi Kevin, that works well. Thank you so much.

However, I was trying to get the outer surfaces of the model. Is there any way I can remove the thickness or just extract the outer surfaces of the model?

Thank you so much again!!

This isolates the outer wall surfaces. I eliminated the code for culling the upward and downward facing surfaces as they can be culled by size along with the window edges. (207.3 KB)


1 Like

Awesome, thank you very much. It works as desired. I understood the workflow, however, if you could please share a bit of detail about Round Surfaces Section where you used Variable y as 2, I’d be very grateful. I do not want to just use the script but comprehend it.

Thanks again :slight_smile:

If you use the Vector Display Ex component to visualize the normals of your surfaces, you can see that they appear to be facing in 6 directions.

If you bypass the group that rounds the normal vectors and use a Paramater Viewer component to see how many branches the normal vectors have been divided into, you can see the 1,484 surfaces have been placed in 416 branches (not very useful). Looking at the S output of the first Create Set component you can see the list of unique normal vectors. The Evaluate component displays the values with all available decimal places (the Panel component by default only displays 6 decimal places).

If you re-connect the group that is rounding the normal vectors and set the slider to 3, you can see that we are still getting 17 branches. Better, but still not what we’re looking for.

Changing the slider to 2 gives us 6 branches, this is our desired result.

It’s best to use rounding with caution, you want to keep as much precision as possible. With the file you provided, you could round to 1 decimal place (or even 0) and get the desired result, but it could cause problems in the future if you wanted to use this definition with another set of surfaces.


1 Like

wow that’s clear. Thank you so much Kevin!

This thread has been very useful. Thank you!

I am new to Rhino and Grasshopper, coming from the Revit + Dynamo world. The list management is something have not yet mastered very well. Hence, my question is, how can we pass through the same workflow multiple building geometries? Would this need looping in Python?


Your question sort of answers itself. You say you haven’t mastered list management, but list management is exactly what’s needed to handle multiple building geometries.

If you’d like to use this process repeatably and robustly, learning how to break out a list of buildings into a branched data set and controlling the branching as it flows through the rest of the grasshopper file is exactly how that would be done.

If, instead you just need it to work, you can just replace the starting input mesh with each building that you want to run the analysis on and rinse and repeat for each one.

I don’t think looping with python would be necessary, though I’m sure it could be useful for reducing the processing needed to analyze a large data set all at once.

All that to say, if you’re just dipping a toe into grasshopper, I’d recommend you spend some time learning about the process of managing lists and branches, you’ll gain a lot from it.

Thank you for the response. I have now spent time studying list management and different options. However, I can not wrap my head around how to match lists with different l
evels to each other. In Revit + Dynamo, there is a list-level concept and tool that helps to achieve that relatively quickly, but I cannot figure out how this is done in Grasshopper. I have attached the file with two Meshe components. One has internalized 5 buildings and the other 1 building. The current approach works for one building but can not be directly added to 5 buildings. Any suggestions on how to approach this?

Multiple (60.7 KB)

List of lists are called data trees in grasshopper. They do take some work to get used to. Here is one of the popular videos to understand them:

The basics:

Then a practical deeper dive:

Thank you, I will study these references.

Thanks, I have a solution, and it is, I was overthinking :slight_smile: