[Bf-blender-cvs] [3493fefb748] gsoc-2021-porting-modifiers-to-nodes-solidify: - selection for simple

Fabian Schempp noreply at git.blender.org
Fri Jun 18 17:06:52 CEST 2021


Commit: 3493fefb7487895e30b7eaba4c0426518b669871
Author: Fabian Schempp
Date:   Wed Jun 9 23:24:51 2021 +0200
Branches: gsoc-2021-porting-modifiers-to-nodes-solidify
https://developer.blender.org/rB3493fefb7487895e30b7eaba4c0426518b669871

- selection for simple

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

M	source/blender/blenkernel/BKE_deform.h
M	source/blender/blenkernel/BKE_solidifiy.h
M	source/blender/blenkernel/intern/solidify_extrude.c
M	source/blender/blenkernel/intern/solidify_nonmanifold.c
M	source/blender/modifiers/intern/MOD_solidify.c
M	source/blender/nodes/geometry/nodes/node_geo_solidifiy.cc

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

diff --git a/source/blender/blenkernel/BKE_deform.h b/source/blender/blenkernel/BKE_deform.h
index 8b5fdf69bb0..a9c6a4ab394 100644
--- a/source/blender/blenkernel/BKE_deform.h
+++ b/source/blender/blenkernel/BKE_deform.h
@@ -16,7 +16,6 @@
  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
  * All rights reserved.
  */
-
 #pragma once
 
 #ifdef __cplusplus
diff --git a/source/blender/blenkernel/BKE_solidifiy.h b/source/blender/blenkernel/BKE_solidifiy.h
index 832c3e06387..c022352544c 100644
--- a/source/blender/blenkernel/BKE_solidifiy.h
+++ b/source/blender/blenkernel/BKE_solidifiy.h
@@ -1,3 +1,5 @@
+#include "DNA_object_types.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -6,6 +8,7 @@ struct Mesh;
 
 typedef struct SolidifyData {
   /** Name of vertex group to use, MAX_VGROUP_NAME. */
+  const Object *object;
   char defgrp_name[64];
   char shell_defgrp_name[64];
   char rim_defgrp_name[64];
@@ -35,6 +38,7 @@ typedef struct SolidifyData {
 
   float merge_tolerance;
   float bevel_convex;
+  float *selection;
 } SolidifyData;
 
 Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh);
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. */
+  

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list