[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