[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