Boolean union fails on two solids faces cut with same surface

I had two solids overlapping and needed part of one and part of the other, I created a cutting surface and boolean split each one and the resulting solids 1 AND 2 obviously share a common exact same abutting face, YET BOOLEAN UNION FAILS ON THESE TWO FACES.

Maybe abutting faces wont union.

I do a test make two blocks abutting, they union, so not that then !

Make another solid that intersects solid 1 and solid2, using a rectangle profile and sweep2 on solid2, this should bind them together, it also fails.
I run intersect command on solid1 and solid2, they show two lines , so they intersect within tolerance of 0.01mm

Where is the problem ? and can someone also union solid1 to solid2.

I fear booleans !!! surely cut with a common surface should fuse together. I just wish rhino had a sort of ’ I know what you want to do and will fix whatever miniscule reason there is for failure’ …approach.
BooleanUnion failures.3dm (537.9 KB)

I wonder if progs such as Autodesk Inventor have boolean failures as much as Rhino. I am told by someone using both that Rhino creates naked edges yet Inventor in their hands has never ever created one. What of Booleans.


Your blue object is not solid. That can be seen by calling ShowEdges and choosing Naked Edges.

Nope, they don’t. Somewhere along the line you shrunk one but not the other, or something similar to that, but they’re not the same face. You can see if I extract the two faces that are supposed to be identical, and turn on the points, one is trimmed (the magenta (?) one) and one is untrimmed (the greenish one). You can also run “What” on both and see the same, in addition to the fact that the point counts are different. Also, note that the isocurves don’t align. All of these should be warning signs that your surfaces are different, and in a case like this where your boolean depends on two surfaces being EXACTLY the same…well this is the result. Also, what Chuck said about one of them not being watertight. Boolean works just dandy if your geometry is clean and proper.

Hi, I see naked edge requires 0.0001 to join, as I am with tolerance of 0.01, should that be a naked edge ?

Thanks for enlightening me on requirements for union. I didnt know CV and iso’s had to match on abutting surfaces but I am a little unsettled by the thought of getting them to do so. If I have two different solids from different projects which I need to union, say the finger off one hand to the palm off another, and use the same cutting surface for both, the resulting abutting surfaces would match, the fact that the one has a different set of curves so CV and iso’s are different, is a reason for them to fail boolean union, so to have to get the cv and isos the same, that involves running rebuild I guess which can change curves, and I presume surfaces, as on this I see rebuild command has a dialog box for surface, so by altering to match the cv count for U and for V, that meets that requirement but might it alter the surface face shape like rebuild can alter curve shape, so they no longer abutt ?
Out of frying pan into fire in my mind from what I see rebuild do. what is best approach to making them compatible in my theoretical example of finger and palm ?

In the real example , its odd that one as you say shows trimmed when both were boolean split , unless I found that split had left the back face open and I did a sweep2 to fill it, if I did, or had that need, then if both have to be trimmed or untrimmed, I would have to extend surface of the sweep2 one, then trim it back, so I have both trimmed ?


It’s only a requirement if the only point where two objects being joined is a face like that - meaning there is zero overlap between the two. You need to make sure if you want to use Boolean, that the faces use the same surface. They can be trimmed differently, but the underlying surface needs to be the same. See attached. Notice you can Boolean Solid2 with the new mating face I’ve made. It’s just a trim of surface of Solid2.

AjoiningFaces.3dm (223.6 KB)

And, fwiw, I tend not to use Boolean in situations like this. Boolean is way better when there is overlap. In this case, it’s just faster/easier to trim out the face of Solid2, and delete the mating face on Solid1, and join them all together. Provided that Solid1 was watertight of course…

Long story short, when you’re doing stuff like this, you need to make sure that when you want to join stuff up, you are using the SAME EXACT surface as a basis for both pieces. I can see multiple instances in both pieces where this is not the case. Hard to say how you’re creating this problem, but that’s the problem.

Also not helping is you have stacked NEARLY duplicate surfaces on these ends:

Anyway, once you ditch those out and simply trim the face of 2 with the edge of 1, you can join it all up and run Cap and it all goes watertight.

AjoiningFacesFixed.3dm (419.0 KB)

Yeah you should probably use Inventor instead. Then you can get great advice like this:


This sentence is amazing. I have no idea what’s happening…


They call him “the riddler”…


skyg, many thanks for the enlightenment and files, I see what you mean, and will adopt a no boolean union rule for abutting surfaces, the trim and join is better.

I have though in the past been told avoid trimming surfaces, and joining them, as JoinEdge is not a good tool to use, and MatchSrf requires untrimmed.

Interesting video and competing prog, where is he worthy of the tears, seems to me ok but I am still learning so not so astute.

I didnt get a chance to read and edit, so here it is translated :smile:
take two items, lets say a model of two right hands made at different times, I need finger from one and the palm from the other. I scale and position one to match the other,
I make both cuts with same surface created to use as cutter, surfaces thus match.
I now have a finger from hand1 to boolean union to palm from hand2.

but…cv count and iso’s differ. I gather they must be same. I use rebuild to alter cv count on one surface to match the other.

I have experience of rebuild command altering a curves shape, so surely the matching surface might be likewise affected, boolean failure results ?

What is best way of matching cv and isos on two surfaces to allow boolean to work ?
thats what I meant, and I also am now aware that for abutting surfaces try to avoid boolean.


For a BooleanOperations, that shouldn’t be necessary. All that is necessary is a good clean intersection that produces one or more clean, closed loops for trimming and joining the parts.

The problem with concurrent (abutting) surfaces is the intersection is often ambiguous. Rhino tries to figure out a logical path, but doesn’t always succeed.

What more or less always succeeds is manual splitting/trimming/joining. Going that route when Boolean operations fail will often show you where the problem lies as well, and with some manual work, will get you out of almost any situation.


Steve, do I understand correctly that you are trying to join two objects which have previously been trimmed by the same surface so that they abut but do not overlap? If so why are you using a Boolean command rather than Join? My understanding is the resulting polysurface will be the same.

A few points on this:

There are times when trims are unavoidable. I know you may find this hard to believe, but Rhino actually deals with trimmed surfaces far better than pretty much any other program out there. The key is to keep your trimming geometry “clean” and to make sure if you want things to join up later, to make sure abutting surfaces are created from the same “base” surface, and are trimmed along the joining edge with the same cutting geometry. If you are able to do this, you should be able to use Join and get watertight geometry. If you can’t use Join, 99.99% of the time you’ve done something wrong, not the program. Never use JoinEdge. Ever.

The reason the video is funny is because he is giving truly awful advice, and has no clue. He gets one thing right - singularities CAN be a problem - sometimes. But in this case, the cure is worse than the disease. Myself, and everyone I respect as a modeler considers Patch (it’s a common command in many programs, including Rhino) to be the “command of the damned.” It’s what you use when you run out of skill, ideas or time. The fact that this guy is saying “singularities are bad, so just use Patch pretty much by default” is a little like me saying “hey you might get a cold this winter, so let me give you leprosy.” Notice that as he extends the edge of the surface, the isoparms become a jagged ugly mess. “Pay no attention to these oozing sores…” he could add. The presenter either doesn’t notice, or doesn’t have a clue what the ramifications are. The surface beyond the boundary is clearly a lumpy unusable mess, and it’s plain as day to see. Of course it just underscores the inherent problem of seeking advice on the internet in general…

You’re making it way more difficult. The way I solved the problem was super basic. I made a copy of the face of Solid2 that joins with Solid1. I trimmed it. That should be the face for Solid1 that mates with Solid2. That’s what I mean by using the same surface. You LITERALLY use the same surface.

1 Like