Page MenuHome

BMesh boolean fails when edge is co-planar to face (under some circumstances)
Open, Confirmed, MediumPublic


System Information
Ubuntu 17.10, Intel HD Graphics

Blender Version

Short description of error
Boolean operations using BMesh may not work properly when I use cubes in combination with cylinders

Exact steps for others to reproduce the error This video shows exactly what I did.

Make a cylinder with the depth 6 and the radius 1
Make a second cylinder with the radius 0.8 and the depth 7
Make a Boolean operation (BMesh) to subtract the smaller cylinder from the bigger one
You now have a pipe.
Place a cube covering half of the pipe but bigger than the pipe
Do a Boolean operation (BMesh) on the pipe: difference with the cube.

The results should be that the pipe disappears or stays a whole pipe without getting anything cut of of it. The results seem to vary when you restart Blender and different rotations may also make a difference.



Event Timeline

Campbell Barton (campbellbarton) renamed this task from Boolean operations with BMesh can cause interesting results to BMesh boolean fails when edge is co-planar to face (under some circumstances).Feb 8 2018, 5:32 AM

I suspect the cause of this is a known issue comparing distances along the edge instead of global space.

This means an edge may not be considered exactly aligned to the face, and the edges on either side may also not be considered touching the face.

The solution is to move all distance comparisons into the same space (known TODO)

Notice this works if you :

  • Change overlap threshold to 0.0000001
  • Set the Cylinders Z scale to 0.4

Doing that did in fact make the Boolean operation work.

@Campbell Barton (campbellbarton) As Carve boolean has been removed, would it be possible to finalize Bmesh version? Before user could use the other one as fallback, but now we have to use Bmesh. I'm happy to have only one variant if it's robust enough.

Addons relying on carve modifier are not working in master like this one and the results of bmesh are not yet there in some cases (like overlapping/coplanar edges/faces).
I think it was a very good idea to keep only one version of the boolean modifier and bmesh is really fast, but it should offer as much as the old combination. Or is the plan to only remove functionality in this case?

The plan is to improve bmesh boolean to support overlap.