[Bf-blender-cvs] [7e5df11cac9] temp-geometry-nodes-curve-deform-node: Futher progress on retrieving parameters

Hans Goudey noreply at git.blender.org
Fri May 28 18:40:51 CEST 2021


Commit: 7e5df11cac9c20fb56bd75f6f9ce95c5861a68e8
Author: Hans Goudey
Date:   Wed May 26 19:15:13 2021 -0400
Branches: temp-geometry-nodes-curve-deform-node
https://developer.blender.org/rB7e5df11cac9c20fb56bd75f6f9ce95c5861a68e8

Futher progress on retrieving parameters

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

M	source/blender/makesdna/DNA_node_types.h
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/nodes/geometry/nodes/node_geo_curve_deform.cc

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

diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index eabc963fab4..a7c11e92d97 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1357,6 +1357,8 @@ typedef struct NodeGeometryCurveDeform {
   uint8_t position_axis;
   /* GeometryNodeAttributeInputMode (float or attribute). */
   uint8_t attribute_input_type;
+
+  char _pad[5];
 } NodeGeometryCurveDeform;
 
 typedef struct NodeGeometryAttributeTransfer {
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index dbf6db800d5..d54c4f6b5b9 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -9853,7 +9853,7 @@ static void def_geo_curve_deform(StructRNA *srna)
   RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
 
   prop = RNA_def_property(srna, "position_axis", PROP_ENUM, PROP_NONE);
-  RNA_def_property_enum_items(prop, mode_items);
+  RNA_def_property_enum_items(prop, position_axis_items);
   RNA_def_property_ui_text(prop, "Position Axis", "");
   RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
 
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_deform.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_deform.cc
index 2c45f36b7e1..881c6876c6f 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_deform.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_deform.cc
@@ -34,6 +34,7 @@ static bNodeSocketTemplate geo_node_curve_deform_in[] = {
     {SOCK_GEOMETRY, N_("Curve")},
     {SOCK_STRING, N_("Parameter")},
     {SOCK_FLOAT, N_("Parameter"), 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, FLT_MAX},
+    {SOCK_BOOLEAN, N_("Use Radius")},
     {-1, ""},
 };
 
@@ -54,7 +55,9 @@ static void geo_node_curve_deform_layout(uiLayout *layout, bContext *UNUSED(C),
     uiItemR(layout, ptr, "position_axis", UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
   }
   else {
-    uiItemR(layout, ptr, "attribute_input_type", UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
+    uiLayoutSetPropSep(layout, true);
+    uiLayoutSetPropDecorate(layout, false);
+    uiItemR(layout, ptr, "attribute_input_type", 0, nullptr, ICON_NONE);
   }
 }
 
@@ -79,16 +82,60 @@ static void geo_node_curve_deform_update(bNodeTree *UNUSED(ntree), bNode *node)
   bNodeSocket *attribute_socket = ((bNodeSocket *)node->inputs.first)->next->next;
 
   nodeSetSocketAvailability(attribute_socket, mode == GEO_NODE_CURVE_DEFORM_ATTRIBUTE);
-  if (mode == GEO_NODE_CURVE_DEFORM_ATTRIBUTE) {
-    update_attribute_input_socket_availabilities(
-        *node, "Parameter", (GeometryNodeAttributeInputMode)node_storage.attribute_input_type);
-  }
+  update_attribute_input_socket_availabilities(
+      *node,
+      "Parameter",
+      (GeometryNodeAttributeInputMode)node_storage.attribute_input_type,
+      mode == GEO_NODE_CURVE_DEFORM_ATTRIBUTE);
 }
 
-static void execute_on_component(GeoNodeExecParams params,
-                                 GeometryComponent &component,
+namespace {
+struct Parameter {
+  float parameter;
+  int index;
+};
+}  // namespace
+
+static void spline_deform(VArray<float3> &positions, Span<float> parameters, const Spline &spline)
+{
+}
+
+struct CurveDeformInput {
+  GeometryNodeAttributeInputMode mode;
+  std::optional<GeometryNodeCurveDeformPositionAxis> position_axis;
+  std::optional<std::string> attribute_name;
+};
+
+static void execute_on_component(GeometryComponent &component,
+                                 const CurveDeformInput &input,
                                  const CurveEval &curve)
 {
+  GVArray_Typed<float3> positions = component.attribute_get_for_read<float3>(
+      "position", ATTR_DOMAIN_POINT, {0, 0, 0});
+
+  Array<Parameter> parameters(positions.size());
+
+  if (input.mode == GEO_NODE_CURVE_DEFORM_POSITION) {
+    switch (*input.position_axis) {
+      case GEO_NODE_CURVE_DEFORM_POSX:
+        parallel_for(positions.index_range(), 4096, [&](IndexRange range) {
+          for (const int i : range) {
+            parameters[i] = { positions }
+          }
+        });
+        break;
+      case GEO_NODE_CURVE_DEFORM_POSY:
+        break;
+      case GEO_NODE_CURVE_DEFORM_POSZ:
+        break;
+      case GEO_NODE_CURVE_DEFORM_NEGX:
+        break;
+      case GEO_NODE_CURVE_DEFORM_NEGY:
+        break;
+      case GEO_NODE_CURVE_DEFORM_NEGZ:
+        break;
+    }
+  }
 }
 
 static void geo_node_curve_deform_exec(GeoNodeExecParams params)



More information about the Bf-blender-cvs mailing list