Page MenuHome

mesh intersect using exact solver produces inconsistent vertex groups results
Closed, ResolvedPublic


System Information
Operating system: Linux-4.15.0-117-generic-x86_64-with-debian-buster-sid 64 Bits
Graphics card: GeForce GTX 1050/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 435.21

Blender Version
Broken: version: 2.91.0, branch: master, commit date: 2020-11-25 08:34, hash: rB0f45cab862b8
Worked: (newest version of Blender that worked as expected)

Short description of error
I have faces whose vertices are assigned to a vertex group. I select these faces and use bpy.ops.mesh.intersect() to cut them into the rest of the mesh.

Using the op with the fast solver, none of the newly created faces will carry the cutter's vertex group. To me this is desirable, because since the selection is lost after mesh.intersect is run, I can - in a script - restore the selection via the vertex group + growing it once, to be able to remove the cutter.

Now in 2.91, mesh.intersect() defaults to the exact solver, which has different, and inconsistent behavior in regards to vertex groups.
In the image below I have manually removed the cutter polygons, and then selected the container vertex group. All the verts of the newly cut faces carry the cutter's vgroup.

This seems to be the exception to the rule however, as most of the time at least some verts of the newly cut faces will not have the vgroup. As shown in the example below, where the cutter was moved slightly before running mesh.intersect.

video demo

Exact steps for others to reproduce the error

  • open mesh_intersect_using_exact_solver_and_vertex_groups.blend from the zip in 2.91
  • use Intersect (Knife)
  • re-select the faces using Select Linked and remove them
  • select the container vgroup
  • repeat the process in mesh_intersect_using_exact_solver_and_vertex_groups2.blend where the cutter is positioned a bit differently
  • also compare intersecting using the fast solver, to see which faces can be selected via the vgroup


  • don't loose the selection after mesh.intersect(), or rather restore it
  • or clear the vgroup from all faces that have been cut, just its done with the fast solver

Event Timeline

Howard Trickey (howardt) changed the task status from Needs Triage to Confirmed.Dec 13 2020, 4:53 PM

Others have complained about this different behavior too. I think what happens with the exact solver is just a natural result of using the code which interpolates vertex data for new verts inserted into a polygon edge of the data on the vertices at either end. I will investigate why this doesn't happen with the fast solver. In any case I agree that the behavior should be the same for the fast and the exact solver, if at all possible.