Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHoward Trickey <howard.trickey@gmail.com>2020-11-12 00:22:13 +0300
committerHoward Trickey <howard.trickey@gmail.com>2020-11-12 00:24:01 +0300
commitb99faa0f567fdf139a8e357112f9b2c7a0458aa5 (patch)
tree5a031c22c80ef81f29056cb783c14b653b92c71c
parent7ba971d6d855034d5a8f0e8dab1bcd892b5aabd3 (diff)
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
-rw-r--r--source/blender/bmesh/tools/bmesh_bevel.c16
1 files changed, 15 insertions, 1 deletions
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);