[Bf-blender-cvs] [bd4c68658f2] refactor-mesh-sharp-face-generic: Fix screw modifier

Hans Goudey noreply at git.blender.org
Sun Jan 22 18:29:41 CET 2023


Commit: bd4c68658f214db9f157562a66e9c9e6764170fc
Author: Hans Goudey
Date:   Sun Jan 22 11:29:33 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rBbd4c68658f214db9f157562a66e9c9e6764170fc

Fix screw modifier

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

M	source/blender/blenkernel/intern/mesh_convert.cc
M	source/blender/modifiers/intern/MOD_screw.cc

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

diff --git a/source/blender/blenkernel/intern/mesh_convert.cc b/source/blender/blenkernel/intern/mesh_convert.cc
index 9ac2da547ca..ad8e4ec976a 100644
--- a/source/blender/blenkernel/intern/mesh_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_convert.cc
@@ -386,14 +386,6 @@ static Mesh *mesh_nurbs_displist_to_mesh(const Curve *cu, const ListBase *dispba
     make_edges_mdata_extend(*mesh);
   }
 
-  int sharp_faces_count = 0;
-  for (const bool value : sharp_faces.span) {
-    if (value) {
-      sharp_faces_count++;
-    }
-  }
-  std::cout << "Number of sharp faces: " << sharp_faces_count << '\n';
-
   material_indices.finish();
   sharp_faces.finish();
 
diff --git a/source/blender/modifiers/intern/MOD_screw.cc b/source/blender/modifiers/intern/MOD_screw.cc
index 76d611c1147..ec615c7883b 100644
--- a/source/blender/modifiers/intern/MOD_screw.cc
+++ b/source/blender/modifiers/intern/MOD_screw.cc
@@ -21,6 +21,7 @@
 #include "DNA_object_types.h"
 #include "DNA_screen_types.h"
 
+#include "BKE_attribute.hh"
 #include "BKE_context.h"
 #include "BKE_lib_query.h"
 #include "BKE_mesh.h"
@@ -179,6 +180,7 @@ static Mesh *mesh_remove_doubles_on_axis(Mesh *result,
 
 static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *meshData)
 {
+  using namespace blender;
   const Mesh *mesh = meshData;
   Mesh *result;
   ScrewModifierData *ltmd = (ScrewModifierData *)md;
@@ -245,6 +247,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
 
   ScrewVertConnect *vc, *vc_tmp, *vert_connect = nullptr;
 
+  const bool use_flat_shading = (ltmd->flag & MOD_SCREW_SMOOTH_SHADING) == 0;
+
   /* don't do anything? */
   if (!totvert) {
     return BKE_mesh_new_nomain_from_template(mesh, 0, 0, 0, 0, 0);
@@ -387,6 +391,9 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
   MEdge *medge_new = BKE_mesh_edges_for_write(result);
   MPoly *mpoly_new = BKE_mesh_polys_for_write(result);
   MLoop *mloop_new = BKE_mesh_loops_for_write(result);
+  bke::MutableAttributeAccessor attributes = result->attributes_for_write();
+  bke::SpanAttributeWriter<bool> sharp_faces = attributes.lookup_or_add_for_write_span<bool>(
+      "sharp_face", ATTR_DOMAIN_FACE);
 
   if (!CustomData_has_layer(&result->pdata, CD_ORIGINDEX)) {
     CustomData_add_layer(&result->pdata, CD_ORIGINDEX, CD_SET_DEFAULT, nullptr, int(maxPolys));
@@ -863,6 +870,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
       else {
         origindex[mpoly_index] = ORIGINDEX_NONE;
         dst_material_index[mpoly_index] = mat_nr;
+        sharp_faces.span[i] = use_flat_shading;
       }
       mp_new->loopstart = mpoly_index * 4;
       mp_new->totloop = 4;
@@ -988,6 +996,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
   }
 #endif
 
+  sharp_faces.finish();
+
   if (edge_poly_map) {
     MEM_freeN(edge_poly_map);
   }
@@ -1006,8 +1016,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
                                          ltmd->merge_dist);
   }
 
-  BKE_mesh_smooth_flag_set(result, ltmd->flag & MOD_SCREW_SMOOTH_SHADING);
-
   return result;
 }



More information about the Bf-blender-cvs mailing list