mechanical Blender

Collision-aware Inset


It aplies the patch submited by Howard Trickey at

Comments by the author:


This patch adds a library function BLI_polyinset3d to blenlib and uses it to do the main functionality of the 'Inset Face' (shortcut 'i') mesh modeling function (but for now, only when 'Individual' is checked in the panel; and it also doesn't work if 'Offset Relative' is checked). I will continue to work on this to handle the non-Individual case if this patch direction looks promising. When 'Fix Overlaps' is not checked, the functionality is meant to be the same as current. But when 'Fix Overlaps' is checked, the inset thickness is clamped to the point of first collision. Collisions happen in two ways during inset:

(1) two of the lines that go inward from the original vertices meet (and are about to cross)

(2) the inset of a reflex angle hits some other inset edge

The code handles these cases, when 'Fix Overlaps' is checked, by in the case of (1), making a vertex for the intersection point; and in the case of (2), splitting the inner polygon in two at the intersection point. And there are many edge cases where many vertices merge into one point and degenerate polygons need to be cleaned up. The code handles these edge cases.



Changes on source are isolated via WITH_MECHANICAL_BLENDER_D1669 compiler definition