[Bf-blender-cvs] [6ff81cd6584] soc-2021-adaptive-cloth: modifier: adaptive_remesh: Run split edge of specified edge index

ishbosamiya noreply at git.blender.org
Mon Jul 12 08:23:49 CEST 2021


Commit: 6ff81cd6584353d957acf530c911e4eed480a5e1
Author: ishbosamiya
Date:   Wed Jul 7 19:24:00 2021 +0530
Branches: soc-2021-adaptive-cloth
https://developer.blender.org/rB6ff81cd6584353d957acf530c911e4eed480a5e1

modifier: adaptive_remesh: Run split edge of specified edge index

This is for testing the cloth_remesh.cc::Mesh::split_edge_triangulate() function.

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

M	source/blender/blenkernel/BKE_cloth_remesh.hh
M	source/blender/makesdna/DNA_modifier_defaults.h
M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/makesrna/intern/rna_modifier.c
M	source/blender/modifiers/intern/MOD_adaptive_remesh.cc

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

diff --git a/source/blender/blenkernel/BKE_cloth_remesh.hh b/source/blender/blenkernel/BKE_cloth_remesh.hh
index cfcc7407c88..030a250cedd 100644
--- a/source/blender/blenkernel/BKE_cloth_remesh.hh
+++ b/source/blender/blenkernel/BKE_cloth_remesh.hh
@@ -85,6 +85,13 @@ template<typename> class Face;
 template<typename, typename, typename, typename> class Mesh;
 class MeshIO;
 template<typename, typename, typename, typename> class MeshDiff;
+class EmptyExtraData {
+ public:
+  EmptyExtraData interp(const EmptyExtraData &other) const
+  {
+    return other;
+  }
+};
 
 namespace ga = blender::generational_arena;
 namespace fs = std::filesystem;
diff --git a/source/blender/makesdna/DNA_modifier_defaults.h b/source/blender/makesdna/DNA_modifier_defaults.h
index f6dac88051b..d154e4645e8 100644
--- a/source/blender/makesdna/DNA_modifier_defaults.h
+++ b/source/blender/makesdna/DNA_modifier_defaults.h
@@ -49,6 +49,11 @@
     .uv_offset = {0.0f, 0.0f}, \
   }
 
+#define _DNA_DEFAULT_AdaptiveRemeshModifierData \
+  { \
+    .edge_index = 0, \
+  }
+
 #define _DNA_DEFAULT_BevelModifierData \
   { \
     .value = 0.1f, \
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index a4d7a98dd4a..25239c011cc 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -2346,6 +2346,10 @@ typedef enum VolumeToMeshFlag {
 
 typedef struct AdaptiveRemeshModifierData {
   ModifierData modifier;
+
+  int edge_index;
+
+  char _pad[4];
 } AdaptiveRemeshModifierData;
 
 #ifdef __cplusplus
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index ebe92fb8bbb..04e8ad700cb 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -309,7 +309,7 @@ const EnumPropertyItem rna_enum_object_modifier_type_items[] = {
     {eModifierType_Softbody, "SOFT_BODY", ICON_MOD_SOFT, "Soft Body", ""},
     {eModifierType_Surface, "SURFACE", ICON_MODIFIER, "Surface", ""},
     {eModifierType_AdaptiveRemesh,
-     "ADAPTIVEREMESH",
+     "ADAPTIVE_REMESH",
      ICON_MOD_CLOTH,
      "Adaptive Remesh",
      ""}, /* TODO(ish): Use correct icon. */
@@ -7239,6 +7239,12 @@ static void rna_def_modifier_adaptive_remesh(BlenderRNA *brna)
 
   RNA_define_lib_overridable(true);
 
+  prop = RNA_def_property(srna, "edge_index", PROP_INT, PROP_UNSIGNED);
+  RNA_def_property_int_sdna(prop, NULL, "edge_index");
+  RNA_def_property_ui_text(prop, "Edge Index", "Edge index number for the operation");
+  RNA_def_property_range(prop, 0, INT_MAX);
+  RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
   RNA_define_lib_overridable(false);
 }
 
diff --git a/source/blender/modifiers/intern/MOD_adaptive_remesh.cc b/source/blender/modifiers/intern/MOD_adaptive_remesh.cc
index 4904905eef8..a18dbc3d1c7 100644
--- a/source/blender/modifiers/intern/MOD_adaptive_remesh.cc
+++ b/source/blender/modifiers/intern/MOD_adaptive_remesh.cc
@@ -23,9 +23,11 @@
 
 #include "BLI_utildefines.h"
 
+#include "BKE_cloth_remesh.hh"
 #include "BKE_context.h"
 #include "BKE_modifier.h"
 
+#include "DNA_modifier_types.h"
 #include "DNA_screen_types.h"
 
 #include "RNA_access.h"
@@ -35,11 +37,34 @@
 
 #include "MOD_ui_common.h"
 
-static Mesh *modifyMesh(ModifierData *UNUSED(md),
-                        const ModifierEvalContext *UNUSED(ctx),
-                        Mesh *mesh)
+using namespace blender::bke;
+
+static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *UNUSED(ctx), Mesh *mesh)
 {
-  return mesh;
+  AdaptiveRemeshModifierData *armd = (AdaptiveRemeshModifierData *)md;
+
+  auto edge_i = armd->edge_index;
+
+  internal::MeshIO reader;
+  reader.read(mesh);
+
+  internal::Mesh<internal::EmptyExtraData,
+                 internal::EmptyExtraData,
+                 internal::EmptyExtraData,
+                 internal::EmptyExtraData>
+      internal_mesh;
+  internal_mesh.read(reader);
+
+  auto op_edge_index = internal_mesh.get_edges().get_no_gen_index(edge_i);
+  if (op_edge_index) {
+    auto edge_index = op_edge_index.value();
+    std::cout << "edge_index: " << edge_index << " edge_i: " << armd->edge_index << std::endl;
+    internal_mesh.split_edge_triangulate(edge_index);
+  }
+
+  internal::MeshIO writer = internal_mesh.write();
+  auto *mesh_result = writer.write();
+  return mesh_result;
 }
 
 static bool dependsOnTime(ModifierData *UNUSED(md))
@@ -56,6 +81,8 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel)
 
   uiLayoutSetPropSep(layout, true);
 
+  uiItemR(layout, ptr, "edge_index", 0, nullptr, ICON_NONE);
+
   modifier_panel_end(layout, ptr);
 }
 
@@ -73,7 +100,7 @@ ModifierTypeInfo modifierType_AdaptiveRemesh = {
     /* flags */ eModifierTypeFlag_AcceptsMesh,
     /* icon */ ICON_MOD_CLOTH, /* TODO(ish): Use correct icon. */
 
-    /* copyData */ nullptr,
+    /* copyData */ BKE_modifier_copydata_generic,
 
     /* deformVerts */ nullptr,
     /* deformMatrices */ nullptr,
@@ -87,7 +114,7 @@ ModifierTypeInfo modifierType_AdaptiveRemesh = {
     /* requiredDataMask */ nullptr,
     /* freeData */ nullptr,
     /* isDisabled */ nullptr,
-    /* updateDepsgraph */ NULL,
+    /* updateDepsgraph */ nullptr,
     /* dependsOnTime */ dependsOnTime,
     /* dependsOnNormals */ nullptr,
     /* foreachIDLink */ nullptr,



More information about the Bf-blender-cvs mailing list