[Bf-blender-cvs] [2869ee328cd] gsoc-2021-porting-modifiers-to-nodes-solidify: added back vertex-group reverse option.

Fabian Schempp noreply at git.blender.org
Tue Jun 22 10:49:53 CEST 2021


Commit: 2869ee328cd8d3a78115c85f0fc1189c9d6721fc
Author: Fabian Schempp
Date:   Fri Jun 18 17:22:24 2021 +0200
Branches: gsoc-2021-porting-modifiers-to-nodes-solidify
https://developer.blender.org/rB2869ee328cd8d3a78115c85f0fc1189c9d6721fc

added back vertex-group reverse option.

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

M	source/blender/blenkernel/intern/solidify_nonmanifold.c
M	source/blender/modifiers/intern/MOD_solidify.c

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

diff --git a/source/blender/blenkernel/intern/solidify_nonmanifold.c b/source/blender/blenkernel/intern/solidify_nonmanifold.c
index 93c75fd5de4..a72ee14a08b 100644
--- a/source/blender/blenkernel/intern/solidify_nonmanifold.c
+++ b/source/blender/blenkernel/intern/solidify_nonmanifold.c
@@ -34,10 +34,6 @@
 #include "BKE_mesh.h"
 #include "BKE_solidifiy.h"
 
-//#include "MOD_modifiertypes.h"
-//#include "MOD_solidify_util.h" /* Own include. */
-//#include "MOD_util.h"
-
 #ifdef __GNUC__
 #  pragma GCC diagnostic error "-Wsign-conversion"
 #endif
@@ -135,22 +131,6 @@ static int comp_float_int_pair(const void *a, const void *b)
   return (int)(x->angle > y->angle) - (int)(x->angle < y->angle);
 }
 
-static void get_vgroup(
-    const Object *ob, struct Mesh *mesh, const char *name, MDeformVert **dvert, int *defgrp_index)
-{
-  *defgrp_index = BKE_object_defgroup_name_index(ob, name);
-  *dvert = NULL;
-
-  if (*defgrp_index != -1) {
-    if (ob->type == OB_LATTICE) {
-      *dvert = BKE_lattice_deform_verts_get(ob);
-    }
-    else if (mesh) {
-      *dvert = mesh->dvert;
-    }
-  }
-}
-
 /* NOLINTNEXTLINE: readability-function-size */
 Mesh *solidify_nonmanifold(const SolidifyData *solidify_data,
                            Mesh *mesh,
@@ -197,16 +177,6 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data,
 
   const float bevel_convex = solidify_data->bevel_convex;
 
-  MDeformVert *dvert = mesh->dvert;
-  const bool defgrp_invert = (solidify_data->flag & MOD_SOLIDIFY_VGROUP_INV) != 0;
-  int defgrp_index = 0;
-  //  const int shell_defgrp_index =
-  //  BKE_object_defgroup_name_index(solidify_data->object,solidify_data->shell_defgrp_name); const
-  //  int rim_defgrp_index = BKE_object_defgroup_name_index(solidify_data->object,
-  //  solidify_data->rim_defgrp_name);
-
-  get_vgroup(solidify_data->object, mesh, solidify_data->defgrp_name, &dvert, &defgrp_index);
-
   const bool do_flat_faces = solidify_data->flag & MOD_SOLIDIFY_NONMANIFOLD_FLAT_FACES;
 
   orig_mvert = mesh->mvert;
@@ -1414,12 +1384,7 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data,
         int loopend = mp->loopstart + mp->totloop;
         ml = orig_mloop + mp->loopstart;
         for (int j = mp->loopstart; j < loopend; j++, ml++) {
-          if (defgrp_invert) {
-            scalar_vgroup = min_ff(1.0f - solidify_data->distance[i], scalar_vgroup);
-          }
-          else {
             scalar_vgroup = min_ff(solidify_data->distance[i], scalar_vgroup);
-          }
         }
         scalar_vgroup = offset_fac_vg + (scalar_vgroup * offset_fac_vg_inv);
         face_weight[i] = scalar_vgroup;
@@ -1808,12 +1773,7 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data,
             float scalar_vgroup = 1;
             /* Use vertex group. */
             if (!do_flat_faces) {
-              if (defgrp_invert) {
-                scalar_vgroup = 1.0f - solidify_data->distance[i];
-              }
-              else {
-                scalar_vgroup = solidify_data->distance[i];
-              }
+              scalar_vgroup = solidify_data->distance[i];
               scalar_vgroup = offset_fac_vg + (scalar_vgroup * offset_fac_vg_inv);
             }
             /* Do clamping. */
diff --git a/source/blender/modifiers/intern/MOD_solidify.c b/source/blender/modifiers/intern/MOD_solidify.c
index 74e3672d54d..6baa35e8067 100644
--- a/source/blender/modifiers/intern/MOD_solidify.c
+++ b/source/blender/modifiers/intern/MOD_solidify.c
@@ -88,7 +88,7 @@ static void requiredDataMask(Object *UNUSED(ob),
   }
 }
 
-static float *get_selection(Mesh *mesh, Object *ob, const char name[64])
+static float *get_distance_factor(Mesh *mesh, Object *ob, const char *name, bool invert)
 {
   int defgrp_index = BKE_object_defgroup_name_index(ob, name);
   MDeformVert *dvert = mesh->dvert;
@@ -114,6 +114,12 @@ static float *get_selection(Mesh *mesh, Object *ob, const char name[64])
     }
   }
 
+  if(invert){
+    for (int i = 0; i < mesh->totvert; i++) {
+      selection[i] = 1.0f - selection[i];
+    }
+  }
+
   return selection;
 }
 
@@ -123,9 +129,9 @@ static const SolidifyData solidify_data_from_modifier_data(ModifierData *md,
   const SolidifyModifierData *smd = (SolidifyModifierData *)md;
   SolidifyData solidify_data = {
       ctx->object,
-      "",  // smd->defgrp_name,
-      "",  // smd->shell_defgrp_name,
-      "",  // smd->rim_defgrp_name,
+      "",
+      "",
+      "",
       smd->offset,
       smd->offset_fac,
       smd->offset_fac_vg,
@@ -164,7 +170,11 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
       return MOD_solidify_extrude_modifyMesh(md, ctx, mesh);
     case MOD_SOLIDIFY_MODE_NONMANIFOLD: {
       SolidifyData solidify_data = solidify_data_from_modifier_data(md, ctx);
-      solidify_data.distance = get_selection(mesh, ctx->object, smd->defgrp_name);
+
+      const bool defgrp_invert = (solidify_data.flag & MOD_SOLIDIFY_VGROUP_INV) != 0;
+      solidify_data.distance = get_distance_factor(
+          mesh, ctx->object, smd->defgrp_name, defgrp_invert);
+
       bool *shell_verts = NULL;
       bool *rim_verts = NULL;
       Mesh *output_mesh = solidify_nonmanifold(&solidify_data, mesh, &shell_verts, &rim_verts);



More information about the Bf-blender-cvs mailing list