[Bf-blender-cvs] [0f20476116e] soc-2021-porting-modifiers-to-nodes-merge-by-distance: merged master and updated the node to fields.
Fabian Schempp
noreply at git.blender.org
Fri Sep 24 23:59:48 CEST 2021
Commit: 0f20476116e3e8407ff120984c209b4e28803875
Author: Fabian Schempp
Date: Fri Sep 24 23:59:31 2021 +0200
Branches: soc-2021-porting-modifiers-to-nodes-merge-by-distance
https://developer.blender.org/rB0f20476116e3e8407ff120984c209b4e28803875
merged master and updated the node to fields.
===================================================================
M source/blender/makesrna/intern/rna_modifier.c
M source/blender/makesrna/intern/rna_nodetree.c
M source/blender/nodes/geometry/nodes/node_geo_merge_by_distance.cc
===================================================================
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index d0b6ebec52e..133558d39bf 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -6172,7 +6172,7 @@ static void rna_def_modifier_laplaciandeform(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Modifier_update");
}
-const EnumPropertyItem rna_enum_weld_mode_items[] = {
+const EnumPropertyItem rna_enum_modifier_weld_mode_items[] = {
{0, "ALL", 0, "All", "Full merge by distance"},
{1, "CONNECTED", 0, "Connected", "Only merge along the edges"},
{0, NULL, 0, NULL, NULL},
@@ -6191,7 +6191,7 @@ static void rna_def_modifier_weld(BlenderRNA *brna)
RNA_define_lib_overridable(true);
prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_items(prop, rna_enum_weld_mode_items);
+ RNA_def_property_enum_items(prop, rna_enum_modifier_weld_mode_items);
RNA_def_property_ui_text(prop, "Mode", "Mode defines the merge rule");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index e9f8b46dd59..bd4f5daa87b 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -10398,13 +10398,19 @@ static void def_geo_attribute_capture(StructRNA *srna)
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
}
+const EnumPropertyItem rna_enum_geometry_nodes_weld_mode_items[] = {
+ {0, "ALL", 0, "All", "Full merge by distance"},
+ {1, "CONNECTED", 0, "Connected", "Only merge along the edges"},
+ {0, NULL, 0, NULL, NULL},
+};
+
static void def_geo_merge_by_distance(StructRNA *srna)
{
PropertyRNA *prop;
prop = RNA_def_property(srna, "merge_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "custom1");
- RNA_def_property_enum_items(prop, rna_enum_weld_mode_items);
+ RNA_def_property_enum_items(prop, rna_enum_geometry_nodes_weld_mode_items);
RNA_def_property_ui_text(prop, "Mode", "Mode defines the merge rule");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
}
diff --git a/source/blender/nodes/geometry/nodes/node_geo_merge_by_distance.cc b/source/blender/nodes/geometry/nodes/node_geo_merge_by_distance.cc
index 500471637b3..710d9beea2d 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_merge_by_distance.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_merge_by_distance.cc
@@ -19,6 +19,7 @@
#include "BLI_float3.hh"
#include "BLI_span.hh"
+#include "DNA_mesh_types.h"
#include "DNA_pointcloud_types.h"
#include "GEO_mesh_merge_by_distance.h"
@@ -34,17 +35,15 @@ using blender::float3;
using blender::Span;
using blender::Vector;
-static bNodeSocketTemplate geo_node_merge_by_distance_in[] = {
- {SOCK_GEOMETRY, N_("Geometry")},
- {SOCK_FLOAT, N_("Distance"), 0.0f, 0, 0, 0, 0, 10000.0f, PROP_DISTANCE},
- {SOCK_STRING, N_("Selection")},
- {-1, ""},
-};
+namespace blender::nodes {
+static void geo_node_merge_by_distance_declare(NodeDeclarationBuilder &b)
+{
+ b.add_input<decl::Geometry>("Geometry");
+ b.add_input<decl::Float>("Distance").default_value(0.0f).min(0.0f).max(10000.0f);
+ b.add_input<decl::Bool>("Selection").default_value(true).hide_value().supports_field();
-static bNodeSocketTemplate geo_node_merge_by_distance_out[] = {
- {SOCK_GEOMETRY, N_("Geometry")},
- {-1, ""},
-};
+ b.add_output<decl::Geometry>("Geometry");
+}
static void geo_node_merge_by_distance_layout(uiLayout *layout,
bContext *UNUSED(C),
@@ -58,7 +57,6 @@ static void geo_merge_by_distance_init(bNodeTree *UNUSED(ntree), bNode *node)
node->custom1 = WELD_MODE_ALL;
}
-namespace blender::nodes {
static void geo_node_merge_by_distance_exec(GeoNodeExecParams params)
{
GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
@@ -71,10 +69,12 @@ static void geo_node_merge_by_distance_exec(GeoNodeExecParams params)
MeshComponent &mesh_component = geometry_set.get_component_for_write<MeshComponent>();
const Mesh *input_mesh = mesh_component.get_for_read();
- const bool default_selection = true;
- GVArray_Typed<bool> selection_attribute = params.get_input_attribute<bool>(
- "Selection", mesh_component, ATTR_DOMAIN_POINT, default_selection);
- VArray_Span<bool> selection{selection_attribute};
+ GeometryComponentFieldContext field_context{mesh_component, ATTR_DOMAIN_POINT};
+ const Field<bool> selection_field = params.extract_input<Field<bool>>("Selection");
+ fn::FieldEvaluator selection_evaluator{field_context, input_mesh->totvert};
+ selection_evaluator.add(selection_field);
+ selection_evaluator.evaluate();
+ const VArray_Span<bool> selection = selection_evaluator.get_evaluated<bool>(0);
Mesh *result = GEO_mesh_merge_by_distance(input_mesh, selection.data(), distance, weld_mode);
if (result != input_mesh) {
@@ -107,10 +107,9 @@ void register_node_type_geo_merge_by_distance()
static bNodeType ntype;
geo_node_type_base(
&ntype, GEO_NODE_MERGE_BY_DISTANCE, "Merge By Distance", NODE_CLASS_GEOMETRY, 0);
- node_type_socket_templates(
- &ntype, geo_node_merge_by_distance_in, geo_node_merge_by_distance_out);
- node_type_init(&ntype, geo_merge_by_distance_init);
+ node_type_init(&ntype, blender::nodes::geo_merge_by_distance_init);
+ ntype.declare = blender::nodes::geo_node_merge_by_distance_declare;
ntype.geometry_node_execute = blender::nodes::geo_node_merge_by_distance_exec;
- ntype.draw_buttons = geo_node_merge_by_distance_layout;
+ ntype.draw_buttons = blender::nodes::geo_node_merge_by_distance_layout;
nodeRegisterType(&ntype);
}
More information about the Bf-blender-cvs
mailing list