[Bf-blender-cvs] [3ecf0753e80] gsoc-2021-porting-modifiers-to-nodes-solidify: added back vertex-group reverse option.
Fabian Schempp
noreply at git.blender.org
Fri Jun 18 17:22:37 CEST 2021
Commit: 3ecf0753e8012d6ab0a6642a476e931d1972bad5
Author: Fabian Schempp
Date: Fri Jun 18 17:22:24 2021 +0200
Branches: gsoc-2021-porting-modifiers-to-nodes-solidify
https://developer.blender.org/rB3ecf0753e8012d6ab0a6642a476e931d1972bad5
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