Select surface within brep

I’m trying to use a rhino model of a building to do area take-offs for cladding etc.

I’ve modeled most of the walls etc. as solid objects. However, when doing these takeoffs I’m often only interested in only individual surfaces within the solid object.

I’m wondering if there is a way to select individual faces of a solid within grasshopper to allow me to do this. I’ve tried shift-clicking the faces I’m interested in with both the Surface and Brep objects and neither seems to do the trick. I also can’t seem to find any sort of “extract face” object… any help would be appreciated.

Hi -

You could use the Decompose Brep component and then filter the faces based on some criteria - like distance to the overall bounding box center, perhaps?
But if there is going to be a bit of manual picking involved of the main breps, I suppose you might just extract a copy of the surfaces in Rhino or even just sub-object select the surfaces and run Area?
-wim

Deconstruct Brep ‘F’ (Faces) output. You could then sort the faces by area and choose the largest, but there is likely to be two faces with the same area so picking the outside face is a problem.

Thanks, this is helpful but was hoping to avoid copying/exploding the originally geometry, so that if I were to change the original model I wouldn’t have to redo the whole process to get updated quantities.

The problem with this is that I won’t always won’t the largest face.

Using Deconstruct Brep and then manually sorting the results would work for sure. I was hoping there would be an easier/more direct solution but seems like there might not be…

The ‘path idx’ slider chooses the branch (brep), the ‘list idx’ slider chooses the face (item in branch).


face_area_2021_Aug6a.gh (61.1 KB)

‘Tree/List Viewer’ is a general purpose tool I wrote years ago:

Hi -

You wouldn’t have to sort them manually - if you are always looking for the surface on the outside of the house, the distance to the combined bounding box needs to be the largest.

It looks like you would have to change the original model in plain Rhino. You can use the Area text field in Rhino to get the area of a surface of a brep and that will automatically update when you, e.g. scale, that brep. You can also add the areas of different surfaces of different breps.

In this example, 3 surfaces (marked with the orange rectangle) of 2 different boxes are checked for the area. When a box is scaled, the values update automatically:

The text field looks like this:

%<Area(“8698d8ff-6fed-4500-8a79-f6b788ebfbb2:3,0”,“Millimeters”)>%
%<Area(“d52d32e7-b70b-40cf-920e-68ae898f20cb:3,0”,“Millimeters”)>%
%<Area(“d52d32e7-b70b-40cf-920e-68ae898f20cb:3,3”,“Millimeters”)>%

Sum:
%<Area(“8698d8ff-6fed-4500-8a79-f6b788ebfbb2:3,0”,“Millimeters”) + Area(“d52d32e7-b70b-40cf-920e-68ae898f20cb:3,0”,“Millimeters”) + Area(“d52d32e7-b70b-40cf-920e-68ae898f20cb:3,3”,“Millimeters”)>%
-wim

Smallest distance works better than largest in this crude experiment but neither are really satisfactory. Reverse the Sort ‘A’ output to get largest.


face_area_2021_Aug6b.gh (53.5 KB)

Ya exactly, something like this is what I was thinking in the absence of a more direct way

Did not know about text fields–this is pretty much what I’m after, even if it doesn’t use grasshopper. Thanks!

Something like what? “a more direct way”?

P.S. This approach using IVRay (IsoVist Ray) works reasonably well but I had to slightly enlarge the bound box and remove its top and bottom faces.


face_area_2021_Aug6c.gh (61.1 KB)

So the official solution is to just show the area of all faces? Really? :man_facepalming:

Wish you had posted your geometry so I could test this solution with it.