@Trav, thanks for pushing out the ShrinkWrap command! I’ve been playing with it earlier today and wanted to share some initial impressions.
Here is the test file for you to play with as well. It’s a fairly typical urban model with messy geometry which needs to be cleaned up and closed for a downstream CFD simulation.
Forum_City.3dm (4.9 MB)
Most of the time, ShrinkWrap works as expected:
But sometimes it fails at seemingly simple geometries.
I highlighted these in yellow for you to investigate. Do you have any ideas on how to address these edge cases?
Some of these will never close because their closed volumes cant be determined.
For example run FillMeshHoles on this object. It’ll never fly. This is why the mesh is eroding in this area, because there’s 0 underlying thickness in that area.
Adding a plane to the bottom plugs up the hole.
Thanks for your prompt response.
For me to understand the logic better, I marked a new cluster of meshes in cyan. It also doesn’t close properly with
ShrinkWraps just fine. What is the difference between the yellow and the cyan geometries?
Forum_City.3dm (5.0 MB)
This object does not have the inner partial walls like the others.
Object on the left is what you’re hoping for.
Object on the right is what can be determined.
The trick to add a bottom plane seems to hep in these cases. Results on the right are without the plane, on the left with the plane.
Is there any way for me to access this command programmatically? Ideally I’d call it from Rhinocommon or headless from the command line to run over hundreds of selected objects individually.
We just barely have the command running. We’ll be working on grasshopper and other SDK access after. Command line macro access should be working atm.
Adding the plane lets it create boundaries to assume closed solids from. When it can figure that out it’ll discard those interior surfaces. Otherwise it’ll try to preserve some of those interior wall features as walls in some cases where a solid volume cant be determined.
Gotcha. For anyone else interested, here is an example snippet on how to create a macro for this command: