Boolean operations distorting solid

I keep running into this issue. I start off with a solid that looks the way I want it, do either a Boolean Split, or a Boolean Difference, the Boolean operation itself works as expected, but I get distortions in other parts.

here is an example. I start with this part, my corner of the blue plate is nice and round, I want to subtract a truncated cone that will make the countersink:

As soon as I do a Boolean Subtract, the corner is all squared off.

the wireframe is still nice and round, but my surfaces on the edge are all wrong. I have to explode the solid and rebuild the whole thing to get nice round corners again. It doesn’t always do this, for example I made cylinders to subtract the holes, and it didn’t happen, but I made a big cylinder to subtract a large hole and it did happen. I don’t understand this at all, since the truncated cone has nothing to do with that edge surface at all, it only intersects with the top and the hole that was already there.

I tried doing ClearAllMeshes and re-doing the shading, but it still looks the same.

Can someone please tell me why this is happening, how I could prevent it, or how to restore it without manually re-building it?

Here is a sample drawing that demonstrates this.
clamp.3dm (6.9 MB)

Run DivideAlongCreases with SplitAtTangents=Yes…

1 Like

Hi James - select the object and DivideAlongCreases > SplitAtTangents=Yes. That should clean up the display mesh.


1 Like

@Helvetosaur & @pascal:


That is something I would have absolutely never guessed.

Besides my new button that does this, is there any reason I shouldn’t just re-define my Boolean buttons to always do this?

I just noticed that with OSnap set to Center, it is MUCH easier to pick the center of the top radius edge after I apply DivideAlongCreases > SplitAtTangents=Yes.

And Picking the End or MidPoints of the straight sections is easier too!

Hi James - the problem, when it turns up, is not particularly related to Boolean operatons - the issue is, the surfaces that are in the object are single surfaces with, internally, only tangent continuity - as in a filleted rectangle with circular fillets at the corners - the lines and arcs are tangent continuous but not curvature continious. Sometimes - often - Rhino will make a single surface from these curvature-discontinuous spans. Surfaces prefer to be curvature continous but there are good reasons to do that, I’m told, at least in some cases. But it messes up the thing that creates the render meshes, among other things. FWIW, I tend always to use this divide tool if I see tangent surfaces - other things tend to work better as well, like filleting.


Well, this is not really the Boolean operation’s fault… It just triggered a remeshing of the object and it went bad and it was predictable. The main problem is your original object - looks like it might have been an extrusion - should probably already have been made with SplitAtTangents=Yes, but it wasn’t. Extruding rounded rectangle curves now seems to do this automatically (there is no longer the option on the command line, that’s progress), but ExtrudeSrf still has this option. If it is not activated, tangent joints are extruded as a single surface instead of being split into a polysurface at the joint(s). This type of surface often wreaks havoc with the Rhino mesher. Fortunately, you can still split the objects later with DivideAlongCreases > SplitAtTangents=Yes.

Thank you for the information. I can’t remember how I made these, but it was more than likely _OffsetSrf as I use that the most. It doesn’t seem to have an option for SplitAtTangents.

What’s the difference between _ExtrudeSrf and _OffsetSrf? (other than one has the SplitAtTangents option?) The only real reason I have for using _OffsetSrf is because I know where the button is.
I make these kind of flat plates all the time, so maybe _ExtrudeSrf with SplitAtTangents=Yes would be a better option.

For flat (planar) surfaces, you will not see a difference. For curved surfaces there will be a notable difference. The Offset will have an equal thickness everywhere - the “extrusion” being normal to the surface at every point - while the Extruded part will be offset in only one direction (the direction of the extrusion) and thus the part thickness will vary.



Thank you for the excellent explanation. I did some playing with ExtrudeSrf and discovered I could use a single surface of a solid, which is what I normally want to do, OffsetSrf is offsetting all surfaces of the solid, so I’ve been extracting the one surface and OffsetSrf that. Looks like ExtrudeSrf will save me a lot of time for these flat parts.

Just keep in mind it will not have a constant clearance, or thickness or whatver you’re doing, if not planar.