[Bf-blender-cvs] [c7b7ec062d4] refactor-mesh-bevel-weight-generic: Fix issue with complex solidify

Hans Goudey noreply at git.blender.org
Sat May 14 23:14:12 CEST 2022


Commit: c7b7ec062d45c7ae42ef36c4025f6f82efb9d30d
Author: Hans Goudey
Date:   Sat May 14 23:14:08 2022 +0200
Branches: refactor-mesh-bevel-weight-generic
https://developer.blender.org/rBc7b7ec062d45c7ae42ef36c4025f6f82efb9d30d

Fix issue with complex solidify

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

M	source/blender/modifiers/intern/MOD_solidify_nonmanifold.c

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

diff --git a/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c b/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c
index 036d6526eab..211c96ae8eb 100644
--- a/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c
+++ b/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c
@@ -1973,7 +1973,7 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
   int *origindex_edge = CustomData_get_layer(&result->edata, CD_ORIGINDEX);
   int *origindex_poly = CustomData_get_layer(&result->pdata, CD_ORIGINDEX);
 
-  float *result_edge_bweight = NULL;
+  float *result_edge_bweight = CustomData_get_layer(&result->edata, CD_BWEIGHT);
   if (bevel_convex != 0.0f || orig_vert_bweight != NULL) {
     result_edge_bweight = CustomData_add_layer(
         &result->edata, CD_BWEIGHT, CD_CALLOC, NULL, result->totedge);
@@ -2053,8 +2053,10 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
             medge[insert].v2 = v2;
             medge[insert].flag = orig_medge[(*l)->old_edge].flag | ME_EDGEDRAW | ME_EDGERENDER;
             medge[insert].crease = orig_medge[(*l)->old_edge].crease;
-            if (bevel_convex != 0.0f && (*l)->faces[1] != NULL && result_edge_bweight) {
+            if (result_edge_bweight) {
               result_edge_bweight[insert] = orig_edge_bweight[(*l)->old_edge];
+            }
+            if (bevel_convex != 0.0f && (*l)->faces[1] != NULL) {
               result_edge_bweight[insert] = clamp_f(
                   result_edge_bweight[insert] +
                       ((*l)->angle > M_PI + FLT_EPSILON ?
@@ -2124,6 +2126,7 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
         EdgeGroup *last_g = NULL;
         EdgeGroup *first_g = NULL;
         char mv_crease = vertex_crease ? (char)(vertex_crease[i] * 255.0f) : 0;
+        float mv_bweight = orig_vert_bweight ? orig_vert_bweight[i] : 0.0f;
         /* Data calculation cache. */
         char max_crease;
         char last_max_crease = 0;
@@ -2164,13 +2167,13 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
               }
             }
 
-            const char bweight_open_edge =
+            const float bweight_open_edge =
                 orig_edge_bweight ?
                     min_ff(orig_edge_bweight[g->edges[0]->old_edge],
                            orig_edge_bweight[g->edges[g->edges_len - 1]->old_edge]) :
                     0.0f;
             if (bweight_open_edge > 0) {
-              max_bweight = min_cc(bweight_open_edge, max_bweight);
+              max_bweight = min_ff(bweight_open_edge, max_bweight);
             }
             else {
               if (bevel_convex < 0.0f) {
@@ -2199,8 +2202,7 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
                                        ((last_flag | flag) & (ME_SEAM | ME_SHARP));
               medge[edge_index].crease = max_cc(mv_crease, min_cc(last_max_crease, max_crease));
               if (result_edge_bweight) {
-                result_edge_bweight[edge_index] = max_ff(orig_vert_bweight ? orig_vert_bweight[i] :
-                                                                             0.0f,
+                result_edge_bweight[edge_index] = max_ff(mv_bweight,
                                                          min_ff(last_max_bweight, max_bweight));
               }
               edge_index++;
@@ -2233,8 +2235,7 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
                                                 min_cc(last_max_crease, first_max_crease));
               if (result_edge_bweight) {
                 result_edge_bweight[edge_index] = max_ff(
-                    orig_vert_bweight ? orig_vert_bweight[i] : 0.0f,
-                    min_ff(last_max_bweight, first_max_bweight));
+                    mv_bweight, min_ff(last_max_bweight, first_max_bweight));
               }
               edge_index++;



More information about the Bf-blender-cvs mailing list