[Bf-blender-cvs] [b99faa0f567] blender-v2.91-release: Fix T80475, bad bevel: side vertex in bad plane in some cases.

Howard Trickey noreply at git.blender.org
Wed Nov 11 22:28:42 CET 2020


Commit: b99faa0f567fdf139a8e357112f9b2c7a0458aa5
Author: Howard Trickey
Date:   Wed Nov 11 16:22:13 2020 -0500
Branches: blender-v2.91-release
https://developer.blender.org/rBb99faa0f567fdf139a8e357112f9b2c7a0458aa5

Fix T80475, bad bevel: side vertex in bad plane in some cases.

Needed a better normal to for plane to offset into when there are
non in-plane edges between two beveled edges. It was using the vertex
normal, which is just wrong.

Differential Revision: https://developer.blender.org/D9508

===================================================================

M	source/blender/bmesh/tools/bmesh_bevel.c

===================================================================

diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c
index e8ded83dfbe..309b6547a39 100644
--- a/source/blender/bmesh/tools/bmesh_bevel.c
+++ b/source/blender/bmesh/tools/bmesh_bevel.c
@@ -1334,7 +1334,21 @@ static void offset_meet(BevelParams *bp,
       copy_v3_v3(norm_v, f->no);
     }
     else {
-      copy_v3_v3(norm_v, v->no);
+      /* Get average of face norms of faces between e and e2. */
+      int fcount = 0;
+      zero_v3(norm_v);
+      for (EdgeHalf *eloop = e1; eloop != e2; eloop = eloop->next) {
+        if (eloop->fnext != NULL) {
+          add_v3_v3(norm_v, eloop->fnext->no);
+          fcount++;
+        }
+      }
+      if (fcount == 0) {
+        copy_v3_v3(norm_v, v->no);
+      }
+      else {
+        mul_v3_fl(norm_v, 1.0f / fcount);
+      }
     }
     add_v3_v3(dir1, dir2);
     cross_v3_v3v3(norm_perp1, dir1, norm_v);



More information about the Bf-blender-cvs mailing list