Mesh Boolean Split not working

can_slices.3dm (14.9 MB)
I have this closed mesh of a can, and I am trying to slice off a section on the top with the extrusion surface.

I did it before with this same object, using meshbooleansplit on the mesh, and using the extrusion as the cutting object. When I did this previously it cut the mesh perfectly along that line and became two separate closed mesh objects that I could move around independently. But for some reason now when I try to perform that same operation it doesn’t divide the mesh.

Not sure what I did to it in between to make it stop working.

Hi Martus - thanks, this also gives trouble to the V8 mesh intersector - the mesh is somewhat messy, but Rhino should probably handle it better. I’ll send this to the developer for a look.

RH-77070 MeshBoolean - tough example


Since the mesh isn’t a pretty one, perhaps try scaling the cutter a smidge. I found that when objects are lying on too many vertices, it just won’t split/trim/boolean/etc.

I was able to get your mesh to split by scaling the cutter a tiny bit

This mesh is a bit of a mess.

Always run the Check command on the mesh:

General information about this mesh:

Mesh has 2 extremely short edges.
Mesh has 55393 non manifold edges.
Mesh has 38009 duplicate faces.
Skipping face direction check because of positive non manifold edge count.
Mesh has 75296 pairs of faces that intersect each other.
This can cause problems if you’re doing mesh boolean operations with it.

Mesh has 159 faces where the face normal differs substantially from the vertex normals.
These normals can cause problems if the ultimate goal is for rendering or boolean purposes.

Mesh does not have any degenerate faces.
Mesh does not have any n-gons.
Mesh does not have any naked edges.
Mesh has 13 disjoint pieces.
Mesh does not have any unused vertices.

Using Rhino 8 Shrinkwrap around the can before subtracting the graphics would be a great way to improve it. I used Shrinkwrap with a target edge length of 2. Even better results can be had with and edge length of 1. This makes the Boolean easy:

I find with Mesh boolean split in difficult cases, if the cutter is closed it works better. We are working on this, but here is the result once the box was closed at the bottom without even running shrinkwrap:


watch out about this area:

there are several faces stacked on top of each other. How did that part get generated? We would like to fix that code, or see if there’s something else we can do.

In general, you can try to run _SplitDisjointMesh to see if the mesh is actually a single object, or it’s just made of disjoint pieces that do not actually touch each other along edges.