[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