[Bf-blender-cvs] [3efc50dfde4] temp-geometry-nodes-curve-sample: Boilerplate code. Big problem is using builtin attributes
Hans Goudey
noreply at git.blender.org
Tue Jul 13 01:43:14 CEST 2021
Commit: 3efc50dfde43252927e094b1ebf9ef5aa6b12b07
Author: Hans Goudey
Date: Fri Jul 2 15:23:43 2021 -0500
Branches: temp-geometry-nodes-curve-sample
https://developer.blender.org/rB3efc50dfde43252927e094b1ebf9ef5aa6b12b07
Boilerplate code. Big problem is using builtin attributes
===================================================================
M source/blender/blenkernel/BKE_geometry_set.hh
M source/blender/blenkernel/BKE_node.h
M source/blender/blenkernel/BKE_spline.hh
M source/blender/blenkernel/intern/node.cc
M source/blender/makesdna/DNA_node_types.h
M source/blender/makesrna/intern/rna_nodetree.c
M source/blender/nodes/CMakeLists.txt
M source/blender/nodes/NOD_geometry.h
M source/blender/nodes/NOD_static_types.h
M source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc
A source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
M source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_geometry_set.hh b/source/blender/blenkernel/BKE_geometry_set.hh
index 82c9a31dfce..c8d6f18baf8 100644
--- a/source/blender/blenkernel/BKE_geometry_set.hh
+++ b/source/blender/blenkernel/BKE_geometry_set.hh
@@ -180,6 +180,18 @@ class GeometryComponent {
return blender::fn::GVArray_Typed<T>(std::move(varray));
}
+ /* Should be used instead of the method above when the requested data type is known at compile
+ * time for better type safety. */
+ template<typename T>
+ blender::fn::GVArray_Typed<T> attribute_get_for_read(const blender::StringRef attribute_name,
+ const T &default_value) const
+ {
+ const blender::fn::CPPType &cpp_type = blender::fn::CPPType::get<T>();
+ const CustomDataType type = blender::bke::cpp_type_to_custom_data_type(cpp_type);
+ std::unique_ptr varray = this->attribute_get_for_read(attribute_name, type, &default_value);
+ return blender::fn::GVArray_Typed<T>(std::move(varray));
+ }
+
/**
* Returns an "output attribute", which is essentially a mutable virtual array with some commonly
* used convince features. The returned output attribute might be empty if requested attribute
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 3562a3e8d63..0f53b76ce15 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1444,6 +1444,7 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
#define GEO_NODE_CURVE_PRIMITIVE_QUADRATIC_BEZIER 1064
#define GEO_NODE_CURVE_PRIMITIVE_BEZIER_SEGMENT 1065
#define GEO_NODE_CURVE_PRIMITIVE_CIRCLE 1066
+#define GEO_NODE_CURVE_SAMPLE 1067
/** \} */
diff --git a/source/blender/blenkernel/BKE_spline.hh b/source/blender/blenkernel/BKE_spline.hh
index 1aac2e311e3..cd752bcb798 100644
--- a/source/blender/blenkernel/BKE_spline.hh
+++ b/source/blender/blenkernel/BKE_spline.hh
@@ -205,6 +205,8 @@ class Spline {
return blender::fn::GVArray_Typed<T>(this->interpolate_to_evaluated(blender::fn::GSpan(data)));
}
+ blender::fn::GVArrayPtr get_evaluated_attribute(const blender::StringRef name) const;
+
protected:
virtual void correct_end_tangents() const = 0;
virtual void copy_settings(Spline &dst) const = 0;
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index e6635665567..9773bc77f31 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -5059,6 +5059,7 @@ static void registerGeometryNodes()
register_node_type_geo_curve_primitive_quadratic_bezier();
register_node_type_geo_curve_primitive_spiral();
register_node_type_geo_curve_primitive_star();
+ register_node_type_geo_curve_sample();
register_node_type_geo_curve_to_mesh();
register_node_type_geo_curve_to_points();
register_node_type_geo_curve_resample();
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index a6de85dd6af..a98023158df 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1368,17 +1368,22 @@ typedef struct NodeGeometryCurvePrimitiveCircle {
} NodeGeometryCurvePrimitiveCircle;
typedef struct NodeGeometryCurveResample {
- /* GeometryNodeCurveSampleMode. */
+ /* GeometryNodeCurveResampleMode. */
uint8_t mode;
} NodeGeometryCurveResample;
+typedef struct NodeGeometryCurveSample {
+ /* GeometryNodeCurveSampleMode. */
+ uint8_t mode;
+} NodeGeometryCurveSample;
+
typedef struct NodeGeometryCurveSubdivide {
/* GeometryNodeAttributeInputMode (integer or attribute). */
uint8_t cuts_type;
} NodeGeometryCurveSubdivide;
typedef struct NodeGeometryCurveToPoints {
- /* GeometryNodeCurveSampleMode. */
+ /* GeometryNodeCurveResampleMode. */
uint8_t mode;
} NodeGeometryCurveToPoints;
@@ -1909,10 +1914,15 @@ typedef enum GeometryNodeCurvePrimitiveBezierSegmentMode {
GEO_NODE_CURVE_PRIMITIVE_BEZIER_SEGMENT_OFFSET = 1,
} GeometryNodeCurvePrimitiveBezierSegmentMode;
+typedef enum GeometryNodeCurveResampleMode {
+ GEO_NODE_CURVE_RESAMPLE_COUNT = 0,
+ GEO_NODE_CURVE_RESAMPLE_LENGTH = 1,
+ GEO_NODE_CURVE_RESAMPLE_EVALUATED = 2,
+} GeometryNodeCurveResampleMode;
+
typedef enum GeometryNodeCurveSampleMode {
- GEO_NODE_CURVE_SAMPLE_COUNT = 0,
+ GEO_NODE_CURVE_SAMPLE_FACTOR = 0,
GEO_NODE_CURVE_SAMPLE_LENGTH = 1,
- GEO_NODE_CURVE_SAMPLE_EVALUATED = 2,
} GeometryNodeCurveSampleMode;
typedef enum GeometryNodeAttributeTransferMapMode {
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index c927c7df6bd..88697760a77 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -9890,12 +9890,12 @@ static void def_geo_curve_resample(StructRNA *srna)
PropertyRNA *prop;
static EnumPropertyItem mode_items[] = {
- {GEO_NODE_CURVE_SAMPLE_COUNT,
+ {GEO_NODE_CURVE_RESAMPLE_COUNT,
"COUNT",
0,
"Count",
"Sample the specified number of points along each spline"},
- {GEO_NODE_CURVE_SAMPLE_LENGTH,
+ {GEO_NODE_CURVE_RESAMPLE_LENGTH,
"LENGTH",
0,
"Length",
@@ -9912,6 +9912,32 @@ static void def_geo_curve_resample(StructRNA *srna)
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
}
+static void def_geo_curve_sample(StructRNA *srna)
+{
+ PropertyRNA *prop;
+
+ static EnumPropertyItem mode_items[] = {
+ {GEO_NODE_CURVE_SAMPLE_FACTOR,
+ "COUNT",
+ 0,
+ "Count",
+ "Choose sample points on the curve based on the portion of the total length"},
+ {GEO_NODE_CURVE_SAMPLE_LENGTH,
+ "LENGTH",
+ 0,
+ "Length",
+ "Choose sample points on the curve based on the assumulated length at that point"},
+ {0, NULL, 0, NULL, NULL},
+ };
+
+ RNA_def_struct_sdna_from(srna, "NodeGeometryCurveResample", "storage");
+
+ prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, mode_items);
+ RNA_def_property_ui_text(prop, "Mode", "How to specify the amount of samples");
+ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
+}
+
static void def_geo_curve_subdivide(StructRNA *srna)
{
PropertyRNA *prop;
@@ -9929,18 +9955,18 @@ static void def_geo_curve_to_points(StructRNA *srna)
PropertyRNA *prop;
static EnumPropertyItem mode_items[] = {
- {GEO_NODE_CURVE_SAMPLE_EVALUATED,
+ {GEO_NODE_CURVE_RESAMPLE_EVALUATED,
"EVALUATED",
0,
"Evaluated",
"Create points from the curve's evaluated points, based on the resolution attribute for "
"NURBS and Bezier splines"},
- {GEO_NODE_CURVE_SAMPLE_COUNT,
+ {GEO_NODE_CURVE_RESAMPLE_COUNT,
"COUNT",
0,
"Count",
"Sample each spline by evenly distributing the specified number of points"},
- {GEO_NODE_CURVE_SAMPLE_LENGTH,
+ {GEO_NODE_CURVE_RESAMPLE_LENGTH,
"LENGTH",
0,
"Length",
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index 77d2f043b64..9bfd42b3a15 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -169,6 +169,7 @@ set(SRC
geometry/nodes/node_geo_curve_primitive_quadratic_bezier.cc
geometry/nodes/node_geo_curve_primitive_spiral.cc
geometry/nodes/node_geo_curve_primitive_star.cc
+ geometry/nodes/node_geo_curve_sample.cc
geometry/nodes/node_geo_curve_to_mesh.cc
geometry/nodes/node_geo_curve_to_points.cc
geometry/nodes/node_geo_curve_resample.cc
diff --git a/source/blender/nodes/NOD_geometry.h b/source/blender/nodes/NOD_geometry.h
index 3e41c37ca75..ecc36aea588 100644
--- a/source/blender/nodes/NOD_geometry.h
+++ b/source/blender/nodes/NOD_geometry.h
@@ -57,6 +57,7 @@ void register_node_type_geo_curve_primitive_circle(void);
void register_node_type_geo_curve_primitive_quadratic_bezier(void);
void register_node_type_geo_curve_primitive_spiral(void);
void register_node_type_geo_curve_primitive_star(void);
+void register_node_type_geo_curve_sample(void);
void register_node_type_geo_curve_to_mesh(void);
void register_node_type_geo_curve_to_points(void);
void register_node_type_geo_curve_resample(void);
diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h
index f6063039bfc..313fb7ebf0c 100644
--- a/source/blender/nodes/NOD_static_types.h
+++ b/source/blender/nodes/NOD_static_types.h
@@ -297,6 +297,7 @@ DefNode(GeometryNode, GEO_NODE_CURVE_PRIMITIVE_QUADRATIC_BEZIER, 0, "CURVE_PRIMI
DefNode(GeometryNode, GEO_NODE_CURVE_PRIMITIVE_STAR, 0, "CURVE_PRIMITIVE_STAR", CurveStar, "Star", "")
DefNode(GeometryNode, GEO_NODE_CURVE_PRIMITIVE_SPIRAL, 0, "CURVE_PRIMITIVE_SPIRAL", CurveSpiral, "Curve Spiral", "")
DefNode(GeometryNode, GEO_NODE_CURVE_RESAMPLE, def_geo_curve_resample, "CURVE_RESAMPLE", CurveResample, "Resample Curve", "")
+DefNode(GeometryNode, GEO_NODE_CURVE_SAMPLE, def_geo_curve_sample, "CURVE_SAMPLE", CurveSample, "Curve Sample", "")
DefNode(GeometryNode, GEO_NODE_CURVE_SUBDIVIDE, def_geo_curve_subdivide, "CURVE_SUBDIVIDE", CurveSubdivide, "Curve Subdivide", "")
DefNode(GeometryNode, GEO_NODE_CURVE_TO_MESH, 0, "CURVE_TO_MESH", CurveToMesh, "Curve to Mesh", "")
DefNode(GeometryNode, GEO_NODE_CURVE_REVERSE, 0, "CURVE_REVERSE", CurveReverse, "Curve Reverse", "")
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc
index fc65d1754e9..48b2cf7505f 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc
@@ -52,26 +52,26 @@ static void geo_node_curve_resample_init(bNodeTree *UNUSED(tree), bNode *node)
NodeGeometryCurveResample *data = (NodeGeometryCurveResample *)MEM_callocN(
sizeof(NodeGeometryCurveResample), __func__);
- data->mode = GEO_NODE_CURVE_SAMPLE_COUNT;
+ data->mode = GEO_NODE_CURVE_RESAMPLE_COUNT;
node->storage = data;
}
static void geo_node_curve_resample_up
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list