[Bf-blender-cvs] [00a32410957] gsoc-2021-porting-modifiers-to-nodes-solidify: makeing node and modifier working with solidify kernel version.

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


Commit: 00a32410957e899b94d75b4df394cb5320abe260
Author: Fabian Schempp
Date:   Tue Jun 1 23:50:41 2021 +0200
Branches: gsoc-2021-porting-modifiers-to-nodes-solidify
https://developer.blender.org/rB00a32410957e899b94d75b4df394cb5320abe260

makeing node and modifier working with solidify kernel version.

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

M	source/blender/blenkernel/BKE_solidifiy.h
M	source/blender/blenkernel/intern/solidify_extrude.c
M	source/blender/nodes/geometry/nodes/node_geo_solidifiy.cc

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

diff --git a/source/blender/blenkernel/BKE_solidifiy.h b/source/blender/blenkernel/BKE_solidifiy.h
index 25e53ddcf5c..c6a902c9def 100644
--- a/source/blender/blenkernel/BKE_solidifiy.h
+++ b/source/blender/blenkernel/BKE_solidifiy.h
@@ -29,7 +29,6 @@ typedef struct SolidifyData {
   char nonmanifold_offset_mode;
   char nonmanifold_boundary_mode;
 
-  char _pad;
   float crease_inner;
   float crease_outer;
   float crease_rim;
diff --git a/source/blender/blenkernel/intern/solidify_extrude.c b/source/blender/blenkernel/intern/solidify_extrude.c
index f1d3fce3f8a..fb461b7e06b 100644
--- a/source/blender/blenkernel/intern/solidify_extrude.c
+++ b/source/blender/blenkernel/intern/solidify_extrude.c
@@ -32,7 +32,6 @@
 #include "MEM_guardedalloc.h"
 
 #include "BKE_deform.h"
-#include "BKE_lattice.h"
 #include "BKE_mesh.h"
 #include "BKE_solidifiy.h"
 
@@ -183,24 +182,10 @@ static void mesh_calc_hq_normal(Mesh *mesh, float (*poly_nors)[3], float (*r_ver
 /* -------------------------------------------------------------------- */
 /** \name Main Solidify Function
  * \{ */
-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;
-    }
-  }
-}
 
 Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
 {
+  printf("solidify extrude: %f, %i\n", solidify_data->offset, solidify_data->flag);
   Mesh *result;
 
   MVert *mv, *mvert, *orig_mvert;
@@ -214,9 +199,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 = 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;
+  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;
 
   /* use for edges */
   /* over-alloc new_vert_arr, old_vert_arr */
@@ -256,14 +241,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(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);
+//  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);
 
   /* array size is doubled in case of using a shell */
   const uint stride = do_shell ? 2 : 1;
 
-  get_vgroup(solidify_data->object, mesh, solidify_data->defgrp_name, &dvert, &defgrp_index);
+  //MOD_get_vgroup(object, mesh, smd->defgrp_name, &dvert, &defgrp_index);
 
   orig_mvert = mesh->mvert;
   orig_medge = mesh->medge;
@@ -618,17 +603,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 - solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+            scalar_short_vgroup = 1.0f - BKE_defvert_find_weight(dv, defgrp_index);
           }
           else {
-            scalar_short_vgroup = solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+            scalar_short_vgroup = 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) {
@@ -665,17 +650,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 - solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+            scalar_short_vgroup = 1.0f - BKE_defvert_find_weight(dv, defgrp_index);
           }
           else {
-            scalar_short_vgroup = solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+            scalar_short_vgroup = 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) {
@@ -804,23 +789,25 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
     }
 
     /* vertex group support */
+    if (dvert) {
+      MDeformVert *dv = dvert;
       float scalar;
 
       if (defgrp_invert) {
-        for (i = 0; i < numVerts; i++){//}, dv++) {
-          scalar = 1.0f - solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+        for (i = 0; i < numVerts; i++, dv++) {
+          scalar = 1.0f - 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 = solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+        for (i = 0; i < numVerts; i++, dv++) {
+          scalar = 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;
@@ -917,7 +904,8 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
         else {
           for (i = 0; i < numVerts; i++) {
             if (vert_lens_sq[i] < offset_sq) {
-              vert_angles[i] *= sqrtf(vert_lens_sq[i]) / offset;
+              float scalar = sqrtf(vert_lens_sq[i]) / offset;
+              vert_angles[i] *= scalar;
             }
           }
         }
@@ -1007,35 +995,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;
 
@@ -1247,6 +1235,1055 @@ 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_m

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list