[Bf-blender-cvs] [a13e9edfbbf] gsoc-2021-porting-modifiers-to-nodes-solidify: - selection for simple
Fabian Schempp
noreply at git.blender.org
Tue Jun 22 10:49:54 CEST 2021
Commit: a13e9edfbbfa7971c5b133c0c64c2b5225107e42
Author: Fabian Schempp
Date: Wed Jun 9 23:24:51 2021 +0200
Branches: gsoc-2021-porting-modifiers-to-nodes-solidify
https://developer.blender.org/rBa13e9edfbbfa7971c5b133c0c64c2b5225107e42
- selection for simple
===================================================================
M source/blender/blenkernel/intern/solidify_extrude.c
===================================================================
diff --git a/source/blender/blenkernel/intern/solidify_extrude.c b/source/blender/blenkernel/intern/solidify_extrude.c
index fb461b7e06b..4589772f89e 100644
--- a/source/blender/blenkernel/intern/solidify_extrude.c
+++ b/source/blender/blenkernel/intern/solidify_extrude.c
@@ -32,6 +32,7 @@
#include "MEM_guardedalloc.h"
#include "BKE_deform.h"
+#include "BKE_lattice.h"
#include "BKE_mesh.h"
#include "BKE_solidifiy.h"
@@ -182,10 +183,27 @@ static void mesh_calc_hq_normal(Mesh *mesh, float (*poly_nors)[3], float (*r_ver
/* -------------------------------------------------------------------- */
/** \name Main Solidify Function
* \{ */
+static void get_vgroup(
+ 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;
+ }
+ }
+}
Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
{
- printf("solidify extrude: %f, %i\n", solidify_data->offset, solidify_data->flag);
+ //printf("solidify extrude: %f, %i\n", solidify_data->offset, solidify_data->flag);
+ printf("selection data %f\n",solidify_data->selection[0]);
+
Mesh *result;
MVert *mv, *mvert, *orig_mvert;
@@ -199,9 +217,9 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
uint newLoops = 0, newPolys = 0, newEdges = 0, newVerts = 0, rimVerts = 0;
/* only use material offsets if we have 2 or more materials */
- const short mat_nr_max = 0;//object->totcol > 1 ? object->totcol - 1 : 0;
- const short mat_ofs = 0;//mat_nr_max ? smd->mat_ofs : 0;
- const short mat_ofs_rim = 0;//mat_nr_max ? smd->mat_ofs_rim : 0;
+ const short mat_nr_max = solidify_data->object->totcol > 1 ? solidify_data->object->totcol - 1 : 0;
+ const short mat_ofs = mat_nr_max ? solidify_data->mat_ofs : 0;
+ const short mat_ofs_rim = mat_nr_max ? solidify_data->mat_ofs_rim : 0;
/* use for edges */
/* over-alloc new_vert_arr, old_vert_arr */
@@ -241,14 +259,14 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
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(object,
-// smd->shell_defgrp_name);
-// const int rim_defgrp_index = BKE_object_defgroup_name_index(object, smd->rim_defgrp_name);
+ 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);
/* array size is doubled in case of using a shell */
const uint stride = do_shell ? 2 : 1;
- //MOD_get_vgroup(object, mesh, smd->defgrp_name, &dvert, &defgrp_index);
+ get_vgroup(solidify_data->object, mesh, solidify_data->defgrp_name, &dvert, &defgrp_index);
orig_mvert = mesh->mvert;
orig_medge = mesh->medge;
@@ -593,6 +611,10 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
MEM_freeN(edge_user_pairs);
}
+ /////
+ /////
+ ///// V-Group influence start
+
if (ofs_new != 0.0f) {
uint i_orig, i_end;
bool do_shell_align;
@@ -603,17 +625,17 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
for (i_orig = 0; i_orig < i_end; i_orig++, mv++) {
const uint i = do_shell_align ? i_orig : new_vert_arr[i_orig];
- if (dvert) {
- MDeformVert *dv = &dvert[i];
+ //if (dvert) {
+ //MDeformVert *dv = &dvert[i];
if (defgrp_invert) {
- scalar_short_vgroup = 1.0f - BKE_defvert_find_weight(dv, defgrp_index);
+ scalar_short_vgroup = 1.0f - solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
}
else {
- scalar_short_vgroup = BKE_defvert_find_weight(dv, defgrp_index);
+ scalar_short_vgroup = solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
}
scalar_short_vgroup = (offset_fac_vg + (scalar_short_vgroup * offset_fac_vg_inv)) *
scalar_short;
- }
+ //}
if (do_clamp && offset > FLT_EPSILON) {
/* always reset because we may have set before */
if (dvert == NULL) {
@@ -650,17 +672,17 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
for (i_orig = 0; i_orig < i_end; i_orig++, mv++) {
const uint i = do_shell_align ? i_orig : new_vert_arr[i_orig];
- if (dvert) {
- MDeformVert *dv = &dvert[i];
+ //if (dvert) {
+ //MDeformVert *dv = &dvert[i];
if (defgrp_invert) {
- scalar_short_vgroup = 1.0f - BKE_defvert_find_weight(dv, defgrp_index);
+ scalar_short_vgroup = 1.0f - solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
}
else {
- scalar_short_vgroup = BKE_defvert_find_weight(dv, defgrp_index);
+ scalar_short_vgroup = solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
}
scalar_short_vgroup = (offset_fac_vg + (scalar_short_vgroup * offset_fac_vg_inv)) *
scalar_short;
- }
+ //}
if (do_clamp && offset > FLT_EPSILON) {
/* always reset because we may have set before */
if (dvert == NULL) {
@@ -686,6 +708,10 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
}
}
+ ///// V-Group influende end
+ /////
+ /////
+
if (do_bevel_convex) {
for (uint i = 0; i < numEdges; i++) {
if (edge_users[i] == INVALID_PAIR) {
@@ -789,25 +815,25 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
}
/* vertex group support */
- if (dvert) {
- MDeformVert *dv = dvert;
+ //if (dvert) {
+ //MDeformVert *dv = dvert;
float scalar;
if (defgrp_invert) {
- for (i = 0; i < numVerts; i++, dv++) {
- scalar = 1.0f - BKE_defvert_find_weight(dv, defgrp_index);
+ for (i = 0; i < numVerts; i++){//}, dv++) {
+ scalar = 1.0f - solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
scalar = offset_fac_vg + (scalar * offset_fac_vg_inv);
vert_angles[i] *= scalar;
}
}
else {
- for (i = 0; i < numVerts; i++, dv++) {
- scalar = BKE_defvert_find_weight(dv, defgrp_index);
+ for (i = 0; i < numVerts; i++){//, dv++) {
+ scalar = solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
scalar = offset_fac_vg + (scalar * offset_fac_vg_inv);
vert_angles[i] *= scalar;
}
}
- }
+ //}
/* for angle clamp */
float *vert_angs = NULL;
@@ -995,35 +1021,35 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
}
/* Add vertex weights for rim and shell vgroups. */
-// if (shell_defgrp_index != -1 || rim_defgrp_index != -1) {
-// dvert = CustomData_duplicate_referenced_layer(&result->vdata, CD_MDEFORMVERT, result->totvert);
-// /* If no vertices were ever added to an object's vgroup, dvert might be NULL. */
-// if (dvert == NULL) {
-// /* Add a valid data layer! */
-// dvert = CustomData_add_layer(
-// &result->vdata, CD_MDEFORMVERT, CD_CALLOC, NULL, result->totvert);
-// }
-// /* Ultimate security check. */
-// if (dvert != NULL) {
-// result->dvert = dvert;
-//
-// if (rim_defgrp_index != -1) {
-// for (uint i = 0; i < rimVerts; i++) {
-// BKE_defvert_ensure_index(&result->dvert[new_vert_arr[i]], rim_defgrp_index)->weight =
-// 1.0f;
-// BKE_defvert_ensure_index(&result->dvert[(do_shell ? new_vert_arr[i] : i) + numVerts],
-// rim_defgrp_index)
-// ->weight = 1.0f;
-// }
-// }
-//
-// if (shell_defgrp_index != -1) {
-// for (uint i = numVerts; i < result->totvert; i++) {
-// BKE_defvert_ensure_index(&result->dvert[i], shell_defgrp_index)->weight = 1.0f;
-// }
-// }
-// }
-// }
+ if (shell_defgrp_index != -1 || rim_defgrp_index != -1) {
+ dvert = CustomData_duplicate_referenced_layer(&result->vdata, CD_MDEFORMVERT, result->totvert);
+ /* If no vertices were ever added to an object's vgroup, dvert might be NULL. */
+ if (dvert == NULL) {
+ /* Add a valid data layer! */
+ dvert = CustomData_add_layer(
+ &result->vdata, CD_MDEFORMVERT, CD_CALLOC, NULL, result->totvert);
+ }
+ /* Ultimate security check. */
+ if (dvert != NULL) {
+ result->dvert = dvert;
+
+ if (rim_defgrp_index != -1) {
+ for (uint i = 0; i < rimVerts; i++) {
+ BKE_defvert_ensure_index(&result->dvert[new_vert_arr[i]], rim_defgrp_index)->weight =
+ 1.0f;
+ BKE_defvert_ensure_index(&result->dvert[(do_shell ? new_vert_arr[i] : i) + numVerts],
+ rim_defgrp_index)
+ ->weight = 1.0f;
+ }
+ }
+
+ if (shell_defgrp_index != -1) {
+ for (uint i = numVerts; i < result->totvert; i++) {
+ BKE_defvert_ensure_index(&result->dvert[i], shell_defgrp_index)->weight = 1.0f;
+ }
+ }
+ }
+ }
if (do_rim) {
uint i;
@@ -1235,1055 +1261,6 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
return result;
}
/* NOLINTNEXTLINE: readability-function-size */
-//Mesh *solidify_extrude_modifyMesh( Mesh *mesh)
-//{
-// Mesh *result;
-// //const SolidifyModifierData *smd = (SolidifyModifierData *)md;
-//
-// MVert *mv, *mvert, *orig_mvert;
-// MEdge *ed, *medge, *orig_medge;
-// MLoop *ml, *mloop, *orig_mloop
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list