[Bf-blender-cvs] [fafed6234b2] geometry-nodes: Geometry Nodes: Add edge split node functionality
Hans Goudey
noreply at git.blender.org
Thu Oct 22 20:49:03 CEST 2020
Commit: fafed6234b2d1d7a3ab897fb128f0d39776ece37
Author: Hans Goudey
Date: Thu Oct 22 13:48:56 2020 -0500
Branches: geometry-nodes
https://developer.blender.org/rBfafed6234b2d1d7a3ab897fb128f0d39776ece37
Geometry Nodes: Add edge split node functionality
===================================================================
M source/blender/modifiers/intern/MOD_edgesplit.c
M source/blender/nodes/geometry/nodes/node_geo_edge_split.cc
===================================================================
diff --git a/source/blender/modifiers/intern/MOD_edgesplit.c b/source/blender/modifiers/intern/MOD_edgesplit.c
index 882d080c08d..1743321d44d 100644
--- a/source/blender/modifiers/intern/MOD_edgesplit.c
+++ b/source/blender/modifiers/intern/MOD_edgesplit.c
@@ -53,7 +53,10 @@
#include "MOD_modifiertypes.h"
#include "MOD_ui_common.h"
-static Mesh *doEdgeSplit(Mesh *mesh, EdgeSplitModifierData *emd)
+/* For edge split modifier node. */
+Mesh *doEdgeSplit(Mesh *mesh, EdgeSplitModifierData *emd);
+
+Mesh *doEdgeSplit(Mesh *mesh, EdgeSplitModifierData *emd)
{
Mesh *result;
BMesh *bm;
diff --git a/source/blender/nodes/geometry/nodes/node_geo_edge_split.cc b/source/blender/nodes/geometry/nodes/node_geo_edge_split.cc
index 86d35df882a..e6cddb9db7d 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_edge_split.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_edge_split.cc
@@ -17,8 +17,14 @@
#include "BLI_math_base.h"
#include "BLI_math_rotation.h"
+#include "DNA_modifier_types.h"
+
#include "node_geometry_util.hh"
+extern "C" {
+Mesh *doEdgeSplit(Mesh *mesh, EdgeSplitModifierData *emd);
+}
+
static bNodeSocketTemplate geo_node_edge_split_in[] = {
{SOCK_GEOMETRY, N_("Geometry")},
{SOCK_FLOAT,
@@ -39,11 +45,39 @@ static bNodeSocketTemplate geo_node_edge_split_out[] = {
{-1, ""},
};
+namespace blender::nodes {
+static void geo_edge_split_exec(bNode *UNUSED(node), GValueByName &inputs, GValueByName &outputs)
+{
+ GeometryPtr geometry_in = inputs.extract<GeometryPtr>("Geometry");
+
+ GeometryPtr geometry_out;
+ if (geometry_in.has_value()) {
+ Mesh *mesh_in = geometry_in->mesh_get_for_read();
+ if (mesh_in != nullptr) {
+ const float split_angle = inputs.extract<float>("Angle");
+ const bool use_sharp_flag = inputs.extract<bool>("Sharp Edges");
+
+ /* Use modifier struct to pass arguments to the modifier code. */
+ EdgeSplitModifierData emd = {.split_angle = split_angle, .flags = MOD_EDGESPLIT_FROMANGLE};
+ if (use_sharp_flag) {
+ emd.flags |= MOD_EDGESPLIT_FROMFLAG;
+ }
+
+ Mesh *mesh_out = doEdgeSplit(mesh_in, &emd);
+ geometry_out = GeometryPtr{new Geometry()};
+ geometry_out->mesh_set_and_transfer_ownership(mesh_out);
+ }
+ }
+ outputs.move_in("Geometry", std::move(geometry_out));
+}
+} // namespace blender::nodes
+
void register_node_type_geo_edge_split()
{
static bNodeType ntype;
geo_node_type_base(&ntype, GEO_NODE_EDGE_SPLIT, "Edge Split", 0, 0);
node_type_socket_templates(&ntype, geo_node_edge_split_in, geo_node_edge_split_out);
+ ntype.geometry_node_execute = blender::nodes::geo_edge_split_exec;
nodeRegisterType(&ntype);
}
More information about the Bf-blender-cvs
mailing list