[Bf-blender-cvs] [b4ff2ce85d6] gsoc-2021-porting-modifiers-to-nodes-solidify: - added output groups for rim and fill

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


Commit: b4ff2ce85d6d86d324579d0eb65971842f1dcac1
Author: Fabian Schempp
Date:   Wed Jun 16 10:01:22 2021 +0200
Branches: gsoc-2021-porting-modifiers-to-nodes-solidify
https://developer.blender.org/rBb4ff2ce85d6d86d324579d0eb65971842f1dcac1

- added output groups for rim and fill

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

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/makesdna/DNA_modifier_types.h
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_solidifiy.h b/source/blender/blenkernel/BKE_solidifiy.h
index c022352544c..1fd885ae665 100644
--- a/source/blender/blenkernel/BKE_solidifiy.h
+++ b/source/blender/blenkernel/BKE_solidifiy.h
@@ -38,11 +38,11 @@ typedef struct SolidifyData {
 
   float merge_tolerance;
   float bevel_convex;
-  float *selection;
+  float *distance;
 } SolidifyData;
 
 Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh);
-Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh);
+Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh, bool **r_shell_verts, bool **r_rim_verts);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/blenkernel/intern/solidify_extrude.c b/source/blender/blenkernel/intern/solidify_extrude.c
index f1d3fce3f8a..03885770ff6 100644
--- a/source/blender/blenkernel/intern/solidify_extrude.c
+++ b/source/blender/blenkernel/intern/solidify_extrude.c
@@ -621,10 +621,10 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
         //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 - solidify_data->distance[i];//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 = solidify_data->distance[i];//BKE_defvert_find_weight(dv, defgrp_index);
           }
           scalar_short_vgroup = (offset_fac_vg + (scalar_short_vgroup * offset_fac_vg_inv)) *
                                 scalar_short;
@@ -668,10 +668,10 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
         //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 - solidify_data->distance[i];//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 = solidify_data->distance[i];//BKE_defvert_find_weight(dv, defgrp_index);
           }
           scalar_short_vgroup = (offset_fac_vg + (scalar_short_vgroup * offset_fac_vg_inv)) *
                                 scalar_short;
@@ -808,14 +808,14 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
 
       if (defgrp_invert) {
         for (i = 0; i < numVerts; i++){//}, dv++) {
-          scalar = 1.0f - solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+          scalar = 1.0f - solidify_data->distance[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 = solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+          scalar = solidify_data->distance[i];//BKE_defvert_find_weight(dv, defgrp_index);
           scalar = offset_fac_vg + (scalar * offset_fac_vg_inv);
           vert_angles[i] *= scalar;
         }
diff --git a/source/blender/blenkernel/intern/solidify_nonmanifold.c b/source/blender/blenkernel/intern/solidify_nonmanifold.c
index 75dedac1fbf..0d2392be4b7 100644
--- a/source/blender/blenkernel/intern/solidify_nonmanifold.c
+++ b/source/blender/blenkernel/intern/solidify_nonmanifold.c
@@ -152,7 +152,7 @@ static void get_vgroup(
 }
 
 /* NOLINTNEXTLINE: readability-function-size */
-Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
+Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh, bool **r_shell_verts, bool **r_rim_verts)
 {
   Mesh *result;
 
@@ -187,8 +187,7 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
   const bool do_angle_clamp = solidify_data->flag & MOD_SOLIDIFY_OFFSET_ANGLE_CLAMP;
   const bool do_flip = (solidify_data->flag & MOD_SOLIDIFY_FLIP) != 0;
   const bool do_rim = solidify_data->flag & MOD_SOLIDIFY_RIM;
-  const bool do_shell = ((solidify_data->flag & MOD_SOLIDIFY_RIM) && (solidify_data->flag & MOD_SOLIDIFY_NOSHELL)) ==
-                        0;
+  const bool do_shell = solidify_data->flag & MOD_SOLIDIFY_SHELL;
   const bool do_clamp = (solidify_data->offset_clamp != 0.0f);
 
   const float bevel_convex = solidify_data->bevel_convex;
@@ -1408,10 +1407,10 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
         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->selection[i],scalar_vgroup);
+            scalar_vgroup = min_ff(1.0f - solidify_data->distance[i],scalar_vgroup);
           }
           else {
-            scalar_vgroup = min_ff(solidify_data->selection[i], scalar_vgroup);
+            scalar_vgroup = min_ff(solidify_data->distance[i], scalar_vgroup);
           }
         }
         scalar_vgroup = offset_fac_vg + (scalar_vgroup * offset_fac_vg_inv);
@@ -1800,10 +1799,10 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
             if (!do_flat_faces) {
               //MDeformVert *dv = &dvert[i];
               if (defgrp_invert) {
-                scalar_vgroup = 1.0f - solidify_data->selection[i];
+                scalar_vgroup = 1.0f - solidify_data->distance[i];
               }
               else {
-                scalar_vgroup = solidify_data->selection[i];
+                scalar_vgroup = solidify_data->distance[i];
               }
               scalar_vgroup = offset_fac_vg + (scalar_vgroup * offset_fac_vg_inv);
             }
@@ -1938,6 +1937,13 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
   }
 
   /* Checks that result has dvert data. */
+  //////---->/////
+  *r_shell_verts = MEM_malloc_arrayN(
+      (size_t)result->totvert, sizeof(bool), "shell verts selection in solidify");
+
+  *r_rim_verts = MEM_malloc_arrayN(
+      (size_t)result->totvert, sizeof(bool), "rim verts selection in solidify");
+
   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. */
@@ -1948,6 +1954,7 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
     }
     result->dvert = dvert;
   }
+  //////---->/////
 
   /* Make_new_verts. */
   {
@@ -2312,20 +2319,26 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
         MEdge *open_face_edge;
         uint open_face_edge_index;
         if (!do_flip) {
+          //////---->/////
+          (*r_rim_verts)[medge[edge1->new_edge].v1] = true;
           if (rim_defgrp_index != -1) {
             BKE_defvert_ensure_index(&result->dvert[medge[edge1->new_edge].v1], rim_defgrp_index)
                 ->weight = 1.0f;
           }
+          //////---->/////
           CustomData_copy_data(&mesh->ldata, &result->ldata, loop1, (int)loop_index, 1);
           mloop[loop_index].v = medge[edge1->new_edge].v1;
           mloop[loop_index++].e = edge1->new_edge;
 
           if (!v2_singularity) {
             open_face_edge_index = edge1->link_edge_groups[1]->open_face_edge;
+            //////---->/////
+            (*r_rim_verts)[medge[edge1->new_edge].v2] = true;
             if (rim_defgrp_index != -1) {
               BKE_defvert_ensure_index(&result->dvert[medge[edge1->new_edge].v2], rim_defgrp_index)
                   ->weight = 1.0f;
             }
+            //////---->/////
             CustomData_copy_data(&mesh->ldata, &result->ldata, loop2, (int)loop_index, 1);
             mloop[loop_index].v = medge[edge1->new_edge].v2;
             open_face_edge = medge + open_face_edge_index;
@@ -2336,21 +2349,26 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
               mloop[loop_index++].e = edge2->link_edge_groups[1]->open_face_edge;
             }
           }
-
+          //////---->/////
+          (*r_rim_verts)[medge[edge2->new_edge].v2] = true;
           if (rim_defgrp_index != -1) {
             BKE_defvert_ensure_index(&result->dvert[medge[edge2->new_edge].v2], rim_defgrp_index)
                 ->weight = 1.0f;
           }
+          //////---->/////
           CustomData_copy_data(&mesh->ldata, &result->ldata, loop2, (int)loop_index, 1);
           mloop[loop_index].v = medge[edge2->new_edge].v2;
           mloop[loop_index++].e = edge2->new_edge;
 
           if (!v1_singularity) {
             open_face_edge_index = edge2->link_edge_groups[0]->open_face_edge;
+            //////---->/////
+            (*r_rim_verts)[medge[edge2->new_edge].v1] = true;
             if (rim_defgrp_index != -1) {
               BKE_defvert_ensure_index(&result->dvert[medge[edge2->new_edge].v1], rim_defgrp_index)
                   ->weight = 1.0f;
             }
+            //////---->/////
             CustomData_copy_data(&mesh->ldata, &result->ldata, loop1, (int)loop_index, 1);
             mloop[loop_index].v = medge[edge2->new_edge].v1;
             open_face_edge = medge + open_face_edge_index;
@@ -2365,10 +2383,13 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
         else {
           if (!v1_singularity) {
             open_face_edge_index = edge1->link_edge_groups[0]->open_face_edge;
+            //////---->/////
+            (*r_rim_verts)[medge[edge1->new_edge].v1] = true;
             if (rim_defgrp_index != -1) {
               BKE_defvert_ensure_index(&result->dvert[medge[edge1->new_edge].v1], rim_defgrp_index)
                   ->weight = 1.0f;
             }
+            //////---->/////
             CustomData_copy_data(&mesh->ldata, &result->ldata, loop1, (int)loop_index,

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list