Boolean Difference Failed



Here’s a sample of two objects where I’m trying to achieve a fillet using boolean difference (I’m actually trying to do it from rhino common API but it fails from user interace too).

I know it’s not an ideal difference operand, but perhaps it’s a good canididate for improving the function?
Let me know if there is something that can be done to improve the operands (other than extending the profile as this would be difficult to detect from the API).



140916 boolean difference fail.3dm (1.2 MB)


The boolean fails because both objects are "bad objects"
That means they are objects that are well known to cause commands to fail.
The smaller object has a tiny sliver of a surface that is much smaller than the file tolerance. The larger object contains composite surfaces which are well known to cause commands to fail.

To fix the larger polysurface, select it and run “testSplitAtTangents”.
To fix the smaller polysurface use “ExtractSrf” to extract the one surface that you are interested in using and discard the rest.

After fixing, select both objects and run “Trim” and spick the 3 parts you want removed and then run “join”.


In the current version of V5, this has been “officialized” as an option in DivideAlongCreases:



Thanks for you both for your replies. Makes sense and does indeed enable a successful result by applying these fixes.

Jim, how do you detect the issues? Rhino reports the objects as valid (and selbadobjects selects nothing).




When you have used rhino long enough your number one concern becomes keeping
the geometry robust and clean because if you let things slide it can take you hours or even days to do what should take seconds. If you keep things clean it is rare to run into problems. Since there is a huge penalty for allowing bad geometry into the model it pays to learn to avoid it. Composite surfaces and degenerate surfaces are on the short list of primary causes of failure that aren’t found by Check or SelBadObjects.

Rhino version 2 would have detected the geometry as bad objects. Somebody at McNeel thought it was a good idea to remove that functionality.