Cull inner geometry which does not receive light - render to true/false - converted Revit model

Hi guys!

I’m just throwing it out there since I’ve searched the web and the forum for a few hours without finding exactly what I’m looking for.

Which plug-ins or native components could analyze whether a mesh face receives light or not? My idea goes straight from rendering to true/false values. All of the inner mesh faces (or srfs I do not believe it should matter) of an solid Revit model should get 0 daylight/gi and turn black if rendering. All exterior would get lighter values.

Where could the bridge be between rendering and values? Maybe some of the daylight sim plugins - but it would be great if it could take less time than these ones tend to do (for me).

Please let me know if anyone has any ideas :)!


What means inner mesh faces? Inner in relation to what? Or there’s some mesh (I do hope valid) around that “engulfs” some faces because is made, say, “via layers”?

Or … you mean that you have various meshes and you want to find inclusion (or exclusion) of mesh faces belonging to other meshes? like this? (This is not the same with mesh boolean diff mind).

Or … you mean that you want to flip selected mesh faces of a given mesh based on some kind of logic?

Hi Peter!

Thank you for answering me :slight_smile:

I believe that I have tried to hard to be simple in my phrasing and failed.

I’m trying to find a simpler way of doing something which the is commonly done by remodeling geometry: 3D printing with an FDM machine from Revit.

This is a model from Revit of a building. The building has interior walls and objects. Unfortunately, the interior walls have the same identity as the exterior and cannot be removed simply by that. Same goes for many doors with exist both on the outside and inside. Etc.

The pipeline (at the moment, I’m experimenting) goes: Revit>DWG>Rhino>Explode>Many surfaces>Finding a smart way of eliminating all surfaces which are on the inside>Export as OBJ>Import to 3D Builder>Join>Export as STL>Into slizer and check

(Since the DWG from Revit are some nice solid polysrfs I’ve tried to booljoin them, but some are slightly corrupt and fail the operation.)

Essentially what I’m trying to do is a simple way of finding which surfaces/meshes/what have you (depends on what you convert the model to in Rhino/GH) are the most outwards facing (relative to what… I know).

I’m trying to find a simple enough way of doing it through analysis and not have to remove all interior objects by hand. In the end to create something close to a solid polysrf which is a shell representation of a building, no wall thicknesses or such needed, the fdm-slizer will offsett all geo inwards.

In the end, I’ll try to create a pipeline from Revit to 3D printing (basic fdm machine) which is quicker than doing everything by hand. Might need to do a little bit by hand, but 1 hour is more ok than 8hrs.

A thought was if you could analyse what’s inside and outside depending on whether it receives light or not. Very simple, as if rendered or analyzed with sunlight-hours. This seems to be a rule which could apply to many such cases. I’ve googled my way through many other creative rules, but they have a hard time catering to all needs.

I’m not looking for a script or a quick fix, mostly a dialog of whether or not we can use such data to find inside/outside. Most other rules have too many exceptions. Just like the Revit files to begin with.

Happy holidays :)!

I hate Revit (I’m a Bentley Systems man, meaning AECOSim and verticals) and I never work with Rhino plus I never work with GH native components. That’s the sum of bad news.

The ugly ones are that … well … in any AEC oriented design you should classify your beans accordingly … meaning nested hierarcies of assemblies/components of smart Geometry (feature driven solids) items (plus their BIM meta data) that belong to “classes” that have some AEC/BIM meaning: like a void assembly of envelope(s) that contains envelope A, B, C etc etc, A void assembly of partition(s) that contains … etc etc. That said a “rough envelope” class of objects is (or should be) always present for real-time calculations and regulation complience. The so called “massing” thingy.

So since nothing from the above is done your issue is a reverse engineering one: get a bounch of objects that arrived into Rhino from the outer space and find the ones that outline an envelope of some sort (then the others are inside … but that’s an ultra naive over simplification … of everything).

Anyway there’s a variety of ways (one is to shoot a zillion rays against meshes and breps) to attempt (no guaranties of any kind, mind) to do that but better post a representative case (DO NOT explode your objects into pieces because that makes the whole puzzle far far far more meaningless/pointless).

Hi again!

Oo I understand. I don’t hate it per-say, but (as in all cases) if the Revit model isn’t modeled for 3D printing it will not 3D print well. I’m experimenting with Sketch-up models as well. What I have done before, with great success (both Revit and Sketch-up), is remodeling everything into wholesome closed polysrfs in Rhino and printed it. But it is time consuming and not very elegant in it’s pipeline. I’m aware that this is reversed engineering but it’s hard to teach everyone to model the same way/keeping healthy order as you suggesting through IDs. Or they do it and I’m just too noob to realize and have to go ask what the interior wooden wall ID is every time.

Wow if the massing thingy was there I wouldn’t have these problems, but alas. Some people remodel their Revit models in Revit into a mass to represent their building envelope before printing. Basically what I do in Rhino but in Revit.

It is very true that exploding the stuff makes it even more time consuming in all regards. I will keep on experimenting with the non-exploded closed polysrfs instead.

Rhino has a command called “selVisible” but it performs poorly.

Yes, I’m aware of the zillion rays ways of solving it, which is basically rendering I guess. It would be great if we could do something, yes crazy, like shooting rays which color the faces which are hit red (permanently) and do that all around the bundle of geo until everything on the outside has a color which it can be identified by. (In Rhino, or GH, or both. Maybe no color but a value instead. Anything really). THIS might be what selVisible is trying to do.

Do you think it would help to post the file? One could simply experiment on a box consisting of walls of closed polysrfs with an interior wall of the same nature inside it, trying to select everything on the outside. That’s basically what the files look like (they have windows etc but basically).

Again, thank you for answering me!


Imagine Breps that are your solution. Assume that there’s no “holes” around. Do a bounding box from all rhese … then fit a sphere to the 8 corners and then define a zillion points on the sphere. Define a Ray3d from each one to the sphere’s center and test each brep on a Ray3d intersection event basis. The ones that are not hit are excluded from the party.

Now comes the pain: make a BrepFace List (as breps) from the remaining and do it again. The Breps (the decomposed portions, that is) not hit are excluded from the party.

But … doing a solid out of the rest is nuclear science (no Karma left) or easy (lot’s of Karma) especially having in mind the fact that Rhino is a surface modeller meaning that complex stitching opps (Brep Join in Rhino talk) may or - most propably - may not yield the desired result.

If I was you: the manual removal is the way to go because the amount of time to write the proper code to act as a Jack for all trades is unpredictable and NOT worthy the effort at all. And the moment that you are 100% sure that you did it … another test case proves you wrong and you start again digging deeper into the rabbit hole (or reinventing the wheel).

I was thinking more like shooting rays from top view, right view, bottom etc (all basic rhino views). Or say spheres in that sense placed all around. In a sense, the concept is much like a 3D scanning lazer at this point. Creating points of intersection at everything visible which you can use as cull data. These models are usually rectangular in a sense. Hehe we are straying away from a general solution here already and making it rectangular/cube building design specific. And, just as your suggestion I imagine, it’s computationally heavy.

YES and the solid part. Fun fun fun! I’m very use to Rhino after these 8 years of intensive use, I’m aware of it’s limitations. I’m experimenting a bit with other software as well. 3D builder, it’s like Paint for 3D models, new for windows 10, actually adds karma to the karma. It has strange booleon operations which joins non-solid geometry pretty well and a “make empty” option which creates a shell. It sounds funky but it has worked for me before. And sometimes not, it’s karma dependent.

Haha yes I know that the Jack of all trades is almost impossible, crazy, time consuming and a rabbit hole! But sometimes you find a good enough solution. But yes, manual labor yields great result. But experimenting is fun :slight_smile: Thank you for your input Peter :D!

Well … for me (Alas: I’m a pro) fun means do the job in record time and rise the fee to record levels, he he.

Anyway get this static (with regard the object creation) demo on shooting rays on meshes and dealing with visibility matters. If you are familiar with coding this could be a start. If not … lucky you. (134.9 KB)

Thank you Peter, and thank you for a good discussion!

I believe Netfabb could handle this, its designed to produce 3D printable parts from complex geometry. There’s a 30 day free trial available.

Hi all! I didn’t check on this thread in way too long. Update - I’m now using Rhino for quick cleanup, Dendro+MeshPlus (Grasshopper) to achieve water tight geometry from almost anything. Works like a charm :slight_smile: way faster than re-modelling geometry.

Hey, would you care to provide more details? Looking at doing something similar and my initial thought was along the lines of the SelVisible method you posted towards the top of the thread.
I’m interested in removing the internal geometry. If I can’t see it, i want to remove it!