diff --git a/source/blender/makesrna/intern/rna_nodetree.cc b/source/blender/makesrna/intern/rna_nodetree.cc index 2236897a753..eead8832464 100644 --- a/source/blender/makesrna/intern/rna_nodetree.cc +++ b/source/blender/makesrna/intern/rna_nodetree.cc @@ -1949,15 +1949,6 @@ static bool switch_type_supported(const EnumPropertyItem *item) SOCK_IMAGE); } -static const EnumPropertyItem *rna_GeometryNodeSwitch_type_itemf(bContext * /*C*/, - PointerRNA * /*ptr*/, - PropertyRNA * /*prop*/, - bool *r_free) -{ - *r_free = true; - return itemf_function_check(rna_enum_node_socket_data_type_items, switch_type_supported); -} - static bool geometry_node_asset_trait_flag_get(PointerRNA *ptr, const GeometryNodeAssetTraitFlag flag) { @@ -2046,20 +2037,6 @@ static const EnumPropertyItem *rna_FunctionNodeRandomValue_type_itemf(bContext * return itemf_function_check(rna_enum_attribute_type_items, random_value_type_supported); } -static bool accumulate_field_type_supported(const EnumPropertyItem *item) -{ - return ELEM(item->value, CD_PROP_FLOAT, CD_PROP_FLOAT3, CD_PROP_INT32); -} - -static const EnumPropertyItem *rna_GeoNodeAccumulateField_type_itemf(bContext * /*C*/, - PointerRNA * /*ptr*/, - PropertyRNA * /*prop*/, - bool *r_free) -{ - *r_free = true; - return itemf_function_check(rna_enum_attribute_type_items, accumulate_field_type_supported); -} - static bool generic_attribute_type_supported(const EnumPropertyItem *item) { return ELEM(item->value, @@ -2072,20 +2049,13 @@ static bool generic_attribute_type_supported(const EnumPropertyItem *item) CD_PROP_BYTE_COLOR, CD_PROP_QUATERNION); } -static const EnumPropertyItem *rna_GeometryNodeAttributeType_type_itemf(bContext * /*C*/, - PointerRNA * /*ptr*/, - PropertyRNA * /*prop*/, - bool *r_free) -{ - *r_free = true; - return itemf_function_check(rna_enum_attribute_type_items, generic_attribute_type_supported); -} static bool generic_attribute_type_supported_with_socket(const EnumPropertyItem *item) { return generic_attribute_type_supported(item) && !ELEM(item->value, CD_PROP_BYTE_COLOR, CD_PROP_FLOAT2); } + static const EnumPropertyItem *rna_GeometryNodeAttributeType_type_with_socket_itemf( bContext * /*C*/, PointerRNA * /*ptr*/, PropertyRNA * /*prop*/, bool *r_free) { @@ -2094,30 +2064,6 @@ static const EnumPropertyItem *rna_GeometryNodeAttributeType_type_with_socket_it generic_attribute_type_supported_with_socket); } -static bool rna_GeometryNodeBlurAttribute_data_type_supported(const EnumPropertyItem *item) -{ - return ELEM(item->value, CD_PROP_FLOAT, CD_PROP_FLOAT3, CD_PROP_COLOR, CD_PROP_INT32); -} - -static const EnumPropertyItem *rna_GeometryNodeBlurAttribute_data_type_itemf( - bContext * /*C*/, PointerRNA * /*ptr*/, PropertyRNA * /*prop*/, bool *r_free) -{ - *r_free = true; - return itemf_function_check(rna_enum_attribute_type_items, - rna_GeometryNodeBlurAttribute_data_type_supported); -} - -static bool attribute_statistic_type_supported(const EnumPropertyItem *item) -{ - return ELEM(item->value, CD_PROP_FLOAT, CD_PROP_FLOAT3); -} -static const EnumPropertyItem *rna_GeometryNodeAttributeStatistic_type_itemf( - bContext * /*C*/, PointerRNA * /*ptr*/, PropertyRNA * /*prop*/, bool *r_free) -{ - *r_free = true; - return itemf_function_check(rna_enum_attribute_type_items, attribute_statistic_type_supported); -} - static StructRNA *rna_ShaderNode_register(Main *bmain, ReportList *reports, void *data, @@ -3934,11 +3880,6 @@ void rna_Node_socket_update(Main *bmain, Scene *scene, PointerRNA *ptr) rna_Node_update(bmain, scene, ptr); } -static void rna_GeometryNode_socket_update(Main *bmain, Scene *scene, PointerRNA *ptr) -{ - rna_Node_update(bmain, scene, ptr); -} - static void rna_CompositorNodeScale_update(Main *bmain, Scene *scene, PointerRNA *ptr) { rna_Node_update(bmain, scene, ptr); @@ -9032,42 +8973,6 @@ static void def_geo_curve_sample(StructRNA *srna) RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); } -static void def_geo_accumulate_field(StructRNA *srna) -{ - PropertyRNA *prop; - - RNA_def_struct_sdna_from(srna, "NodeAccumulateField", "storage"); - - prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, nullptr, "data_type"); - RNA_def_property_enum_items(prop, rna_enum_attribute_type_items); - RNA_def_property_enum_funcs(prop, nullptr, nullptr, "rna_GeoNodeAccumulateField_type_itemf"); - RNA_def_property_enum_default(prop, CD_PROP_FLOAT); - RNA_def_property_ui_text(prop, "Data Type", "Type of data stored in attribute"); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); - - prop = RNA_def_property(srna, "domain", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, nullptr, "domain"); - RNA_def_property_enum_items(prop, rna_enum_attribute_domain_items); - RNA_def_property_enum_default(prop, ATTR_DOMAIN_POINT); - RNA_def_property_ui_text(prop, "Domain", ""); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); -} - -static void def_geo_blur_attribute(StructRNA *srna) -{ - PropertyRNA *prop; - - prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, nullptr, "custom1"); - RNA_def_property_enum_items(prop, rna_enum_attribute_type_items); - RNA_def_property_enum_funcs( - prop, nullptr, nullptr, "rna_GeometryNodeBlurAttribute_data_type_itemf"); - RNA_def_property_enum_default(prop, CD_PROP_FLOAT); - RNA_def_property_ui_text(prop, "Data Type", ""); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_GeometryNode_socket_update"); -} - static void def_fn_random_value(StructRNA *srna) { PropertyRNA *prop; @@ -9083,30 +8988,6 @@ static void def_fn_random_value(StructRNA *srna) RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); } -static void def_geo_attribute_statistic(StructRNA *srna) -{ - PropertyRNA *prop; - - prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, nullptr, "custom1"); - RNA_def_property_enum_items(prop, rna_enum_attribute_type_items); - RNA_def_property_enum_funcs( - prop, nullptr, nullptr, "rna_GeometryNodeAttributeStatistic_type_itemf"); - RNA_def_property_enum_default(prop, CD_PROP_FLOAT); - RNA_def_property_ui_text( - prop, - "Data Type", - "The data type the attribute is converted to before calculating the results"); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_GeometryNode_socket_update"); - - prop = RNA_def_property(srna, "domain", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, nullptr, "custom2"); - RNA_def_property_enum_items(prop, rna_enum_attribute_domain_items); - RNA_def_property_enum_default(prop, ATTR_DOMAIN_POINT); - RNA_def_property_ui_text(prop, "Domain", "Which domain to read the data from"); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); -} - static void def_geo_distribute_points_on_faces(StructRNA *srna) { PropertyRNA *prop; @@ -9502,19 +9383,6 @@ static void def_fn_rotate_euler(StructRNA *srna) RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } -static void def_geo_switch(StructRNA *srna) -{ - PropertyRNA *prop; - - RNA_def_struct_sdna_from(srna, "NodeSwitch", "storage"); - prop = RNA_def_property(srna, "input_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, nullptr, "input_type"); - RNA_def_property_enum_items(prop, rna_enum_node_socket_data_type_items); - RNA_def_property_enum_funcs(prop, nullptr, nullptr, "rna_GeometryNodeSwitch_type_itemf"); - RNA_def_property_ui_text(prop, "Input Type", ""); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); -} - static void def_geo_sample_index(StructRNA *srna) { PropertyRNA *prop; @@ -9543,30 +9411,6 @@ static void def_geo_sample_index(StructRNA *srna) RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } -static void def_geo_sample_nearest_surface(StructRNA *srna) -{ - PropertyRNA *prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, nullptr, "custom1"); - RNA_def_property_enum_items(prop, rna_enum_attribute_type_items); - RNA_def_property_enum_funcs( - prop, nullptr, nullptr, "rna_GeometryNodeAttributeType_type_with_socket_itemf"); - RNA_def_property_enum_default(prop, CD_PROP_FLOAT); - RNA_def_property_ui_text(prop, "Data Type", ""); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); -} - -static void def_geo_sample_uv_surface(StructRNA *srna) -{ - PropertyRNA *prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, nullptr, "custom1"); - RNA_def_property_enum_items(prop, rna_enum_attribute_type_items); - RNA_def_property_enum_funcs( - prop, nullptr, nullptr, "rna_GeometryNodeAttributeType_type_with_socket_itemf"); - RNA_def_property_enum_default(prop, CD_PROP_FLOAT); - RNA_def_property_ui_text(prop, "Data Type", ""); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); -} - static void def_geo_input_material(StructRNA *srna) { PropertyRNA *prop; @@ -9580,96 +9424,6 @@ static void def_geo_input_material(StructRNA *srna) RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } -static void def_geo_raycast(StructRNA *srna) -{ - static EnumPropertyItem mapping_items[] = { - {GEO_NODE_RAYCAST_INTERPOLATED, - "INTERPOLATED", - 0, - "Interpolated", - "Interpolate the attribute from the corners of the hit face"}, - {GEO_NODE_RAYCAST_NEAREST, - "NEAREST", - 0, - "Nearest", - "Use the attribute value of the closest mesh element"}, - {0, nullptr, 0, nullptr, nullptr}, - }; - - PropertyRNA *prop; - - RNA_def_struct_sdna_from(srna, "NodeGeometryRaycast", "storage"); - - prop = RNA_def_property(srna, "mapping", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, mapping_items); - RNA_def_property_ui_text(prop, "Mapping", "Mapping from the target geometry to hit points"); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); - - prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, rna_enum_attribute_type_items); - RNA_def_property_enum_funcs( - prop, nullptr, nullptr, "rna_GeometryNodeAttributeType_type_with_socket_itemf"); - RNA_def_property_enum_default(prop, CD_PROP_FLOAT); - RNA_def_property_ui_text(prop, "Data Type", "Type of data stored in attribute"); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_GeometryNode_socket_update"); -} - -static void def_geo_store_named_attribute(StructRNA *srna) -{ - PropertyRNA *prop; - - RNA_def_struct_sdna_from(srna, "NodeGeometryStoreNamedAttribute", "storage"); - - prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, rna_enum_attribute_type_items); - RNA_def_property_enum_funcs(prop, nullptr, nullptr, "rna_GeometryNodeAttributeType_type_itemf"); - RNA_def_property_enum_default(prop, CD_PROP_FLOAT); - RNA_def_property_ui_text(prop, "Data Type", "Type of data stored in attribute"); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_GeometryNode_socket_update"); - - prop = RNA_def_property(srna, "domain", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, rna_enum_attribute_domain_items); - RNA_def_property_enum_default(prop, ATTR_DOMAIN_POINT); - RNA_def_property_ui_text(prop, "Domain", "Which domain to store the data in"); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); -} - -static void def_geo_input_named_attribute(StructRNA *srna) -{ - PropertyRNA *prop; - - RNA_def_struct_sdna_from(srna, "NodeGeometryInputNamedAttribute", "storage"); - - prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, rna_enum_attribute_type_items); - RNA_def_property_enum_funcs( - prop, nullptr, nullptr, "rna_GeometryNodeAttributeType_type_with_socket_itemf"); - RNA_def_property_enum_default(prop, CD_PROP_FLOAT); - RNA_def_property_ui_text(prop, "Data Type", "The data type used to read the attribute values"); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_GeometryNode_socket_update"); -} - -static void def_geo_attribute_capture(StructRNA *srna) -{ - PropertyRNA *prop; - - RNA_def_struct_sdna_from(srna, "NodeGeometryAttributeCapture", "storage"); - - prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, rna_enum_attribute_type_items); - RNA_def_property_enum_funcs( - prop, nullptr, nullptr, "rna_GeometryNodeAttributeType_type_with_socket_itemf"); - RNA_def_property_enum_default(prop, CD_PROP_FLOAT); - RNA_def_property_ui_text(prop, "Data Type", "Type of data stored in attribute"); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_GeometryNode_socket_update"); - - prop = RNA_def_property(srna, "domain", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, rna_enum_attribute_domain_items); - RNA_def_property_enum_default(prop, ATTR_DOMAIN_POINT); - RNA_def_property_ui_text(prop, "Domain", "Which domain to store the data in"); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); -} - static void def_geo_image(StructRNA *srna) { PropertyRNA *prop; @@ -9833,67 +9587,6 @@ static void def_geo_string_to_curves(StructRNA *srna) RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } -static void def_geo_viewer(StructRNA *srna) -{ - PropertyRNA *prop; - - RNA_def_struct_sdna_from(srna, "NodeGeometryViewer", "storage"); - - prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, rna_enum_attribute_type_items); - RNA_def_property_enum_funcs( - prop, nullptr, nullptr, "rna_GeometryNodeAttributeType_type_with_socket_itemf"); - RNA_def_property_enum_default(prop, CD_PROP_FLOAT); - RNA_def_property_ui_text(prop, "Data Type", ""); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_GeometryNode_socket_update"); - - prop = RNA_def_property(srna, "domain", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, rna_enum_attribute_domain_with_auto_items); - RNA_def_property_enum_default(prop, ATTR_DOMAIN_POINT); - RNA_def_property_ui_text(prop, "Domain", "Domain to evaluate the field on"); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); -} - -static void def_geo_evaluate_at_index(StructRNA *srna) -{ - PropertyRNA *prop; - - prop = RNA_def_property(srna, "domain", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, nullptr, "custom1"); - RNA_def_property_enum_items(prop, rna_enum_attribute_domain_items); - RNA_def_property_ui_text(prop, "Domain", "Domain the field is evaluated in"); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_GeometryNode_socket_update"); - - prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, nullptr, "custom2"); - RNA_def_property_enum_items(prop, rna_enum_attribute_type_items); - RNA_def_property_enum_funcs( - prop, nullptr, nullptr, "rna_GeometryNodeAttributeType_type_with_socket_itemf"); - RNA_def_property_ui_text(prop, "Data Type", ""); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_GeometryNode_socket_update"); -} - -static void def_geo_evaluate_on_domain(StructRNA *srna) -{ - PropertyRNA *prop; - - prop = RNA_def_property(srna, "domain", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, nullptr, "custom1"); - RNA_def_property_enum_items(prop, rna_enum_attribute_domain_items); - RNA_def_property_ui_text(prop, "Domain", "Domain the field is evaluated in"); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_GeometryNode_socket_update"); - - prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, nullptr, "custom2"); - RNA_def_property_enum_items(prop, rna_enum_attribute_type_items); - RNA_def_property_enum_funcs( - prop, nullptr, nullptr, "rna_GeometryNodeAttributeType_type_with_socket_itemf"); - RNA_def_property_ui_text(prop, "Data Type", ""); - RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_GeometryNode_socket_update"); -} - -/* -------------------------------------------------------------------------- */ - static void rna_def_shader_node(BlenderRNA *brna) { StructRNA *srna; diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h index b741233b075..bdd4a7057a1 100644 --- a/source/blender/nodes/NOD_static_types.h +++ b/source/blender/nodes/NOD_static_types.h @@ -290,12 +290,12 @@ DefNode(FunctionNode, FN_NODE_SLICE_STRING, 0, "SLICE_STRING", SliceString, "Sli DefNode(FunctionNode, FN_NODE_STRING_LENGTH, 0, "STRING_LENGTH", StringLength, "String Length", "") DefNode(FunctionNode, FN_NODE_VALUE_TO_STRING, 0, "VALUE_TO_STRING", ValueToString, "Value to String", "") -DefNode(GeometryNode, GEO_NODE_ACCUMULATE_FIELD, def_geo_accumulate_field, "ACCUMULATE_FIELD", AccumulateField, "Accumulate Field", "Add the values of an evaluated field together and output the running total for each element") +DefNode(GeometryNode, GEO_NODE_ACCUMULATE_FIELD, 0, "ACCUMULATE_FIELD", AccumulateField, "Accumulate Field", "Add the values of an evaluated field together and output the running total for each element") DefNode(GeometryNode, GEO_NODE_ATTRIBUTE_DOMAIN_SIZE, 0, "ATTRIBUTE_DOMAIN_SIZE", AttributeDomainSize, "Domain Size", "Retrieve the number of elements in a geometry for each attribute domain") -DefNode(GeometryNode, GEO_NODE_ATTRIBUTE_STATISTIC, def_geo_attribute_statistic, "ATTRIBUTE_STATISTIC",AttributeStatistic, "Attribute Statistic", "Calculate statistics about a data set from a field evaluated on a geometry") -DefNode(GeometryNode, GEO_NODE_BLUR_ATTRIBUTE, def_geo_blur_attribute, "BLUR_ATTRIBUTE", BlurAttribute, "Blur Attribute", "Mix attribute values of neighboring elements") +DefNode(GeometryNode, GEO_NODE_ATTRIBUTE_STATISTIC, 0, "ATTRIBUTE_STATISTIC",AttributeStatistic, "Attribute Statistic", "Calculate statistics about a data set from a field evaluated on a geometry") +DefNode(GeometryNode, GEO_NODE_BLUR_ATTRIBUTE, 0, "BLUR_ATTRIBUTE", BlurAttribute, "Blur Attribute", "Mix attribute values of neighboring elements") DefNode(GeometryNode, GEO_NODE_BOUNDING_BOX, 0, "BOUNDING_BOX", BoundBox, "Bounding Box", "Calculate the limits of a geometry's positions and generate a box mesh with those dimensions") -DefNode(GeometryNode, GEO_NODE_CAPTURE_ATTRIBUTE, def_geo_attribute_capture, "CAPTURE_ATTRIBUTE", CaptureAttribute, "Capture Attribute", "Store the result of a field on a geometry and output the data as a node socket. Allows remembering or interpolating data as the geometry changes, such as positions before deformation") +DefNode(GeometryNode, GEO_NODE_CAPTURE_ATTRIBUTE, 0, "CAPTURE_ATTRIBUTE", CaptureAttribute, "Capture Attribute", "Store the result of a field on a geometry and output the data as a node socket. Allows remembering or interpolating data as the geometry changes, such as positions before deformation") DefNode(GeometryNode, GEO_NODE_COLLECTION_INFO, 0, "COLLECTION_INFO", CollectionInfo, "Collection Info", "Retrieve geometry instances from a collection") DefNode(GeometryNode, GEO_NODE_CONVEX_HULL, 0, "CONVEX_HULL", ConvexHull, "Convex Hull", "Create a mesh that encloses all points in the input geometry with the smallest number of points") DefNode(GeometryNode, GEO_NODE_CURVE_ENDPOINT_SELECTION, 0, "CURVE_ENDPOINT_SELECTION", CurveEndpointSelection, "Endpoint Selection", "Provide a selection for an arbitrary number of endpoints in each spline") @@ -325,8 +325,8 @@ DefNode(GeometryNode, GEO_NODE_DUPLICATE_ELEMENTS, 0, "DUPLICATE_ELEMENTS", Dupl DefNode(GeometryNode, GEO_NODE_EDGE_PATHS_TO_CURVES, 0, "EDGE_PATHS_TO_CURVES", EdgePathsToCurves, "Edge Paths to Curves", "") DefNode(GeometryNode, GEO_NODE_EDGE_PATHS_TO_SELECTION, 0, "EDGE_PATHS_TO_SELECTION", EdgePathsToSelection, "Edge Paths to Selection", "") DefNode(GeometryNode, GEO_NODE_EDGES_TO_FACE_GROUPS, 0, "EDGES_TO_FACE_GROUPS", EdgesToFaceGroups, "Edges to Face Groups", "Group faces into regions surrounded by the selected boundary edges") -DefNode(GeometryNode, GEO_NODE_EVALUATE_AT_INDEX, def_geo_evaluate_at_index, "FIELD_AT_INDEX", FieldAtIndex, "Evaluate at Index", "Retrieve data of other elements in the context's geometry") -DefNode(GeometryNode, GEO_NODE_EVALUATE_ON_DOMAIN, def_geo_evaluate_on_domain, "FIELD_ON_DOMAIN", FieldOnDomain, "Evaluate on Domain", "Retrieve values from a field on a different domain besides the domain from the context") +DefNode(GeometryNode, GEO_NODE_EVALUATE_AT_INDEX, 0, "FIELD_AT_INDEX", FieldAtIndex, "Evaluate at Index", "Retrieve data of other elements in the context's geometry") +DefNode(GeometryNode, GEO_NODE_EVALUATE_ON_DOMAIN, 0, "FIELD_ON_DOMAIN", FieldOnDomain, "Evaluate on Domain", "Retrieve values from a field on a different domain besides the domain from the context") DefNode(GeometryNode, GEO_NODE_EXTRUDE_MESH, 0, "EXTRUDE_MESH", ExtrudeMesh, "Extrude Mesh", "Generate new vertices, edges, or faces from selected elements and move them based on an offset while keeping them connected by their boundary") DefNode(GeometryNode, GEO_NODE_FILL_CURVE, 0, "FILL_CURVE", FillCurve, "Fill Curve", "Generate a mesh on the XY plane with faces on the inside of input curves") DefNode(GeometryNode, GEO_NODE_FILLET_CURVE, 0, "FILLET_CURVE", FilletCurve, "Fillet Curve", "Round corners by generating circular arcs on each control point") @@ -352,7 +352,7 @@ DefNode(GeometryNode, GEO_NODE_INPUT_MESH_FACE_IS_PLANAR, 0, "MESH_FACE_IS_PLANA DefNode(GeometryNode, GEO_NODE_INPUT_MESH_FACE_NEIGHBORS, 0, "MESH_FACE_NEIGHBORS",InputMeshFaceNeighbors, "Face Neighbors", "Retrieve topology information relating to each face of a mesh") DefNode(GeometryNode, GEO_NODE_INPUT_MESH_ISLAND, 0, "MESH_ISLAND", InputMeshIsland, "Mesh Island", "Retrieve information about separate connected regions in a mesh") DefNode(GeometryNode, GEO_NODE_INPUT_MESH_VERTEX_NEIGHBORS, 0, "MESH_VERTEX_NEIGHBORS", InputMeshVertexNeighbors, "Vertex Neighbors", "Retrieve topology information relating to each vertex of a mesh") -DefNode(GeometryNode, GEO_NODE_INPUT_NAMED_ATTRIBUTE, def_geo_input_named_attribute, "INPUT_ATTRIBUTE", InputNamedAttribute, "Named Attribute", "Retrieve the data of a specified attribute") +DefNode(GeometryNode, GEO_NODE_INPUT_NAMED_ATTRIBUTE, 0, "INPUT_ATTRIBUTE", InputNamedAttribute, "Named Attribute", "Retrieve the data of a specified attribute") DefNode(GeometryNode, GEO_NODE_INPUT_NORMAL, 0, "INPUT_NORMAL", InputNormal, "Normal", "Retrieve a unit length vector indicating the direction pointing away from the geometry at each element") DefNode(GeometryNode, GEO_NODE_INPUT_POSITION, 0, "POSITION", InputPosition, "Position", "Retrieve a vector indicating the location of each element") DefNode(GeometryNode, GEO_NODE_INPUT_RADIUS, 0, "INPUT_RADIUS", InputRadius, "Radius", "Retrieve the radius at each point on curve or point cloud geometry") @@ -406,7 +406,7 @@ DefNode(GeometryNode, GEO_NODE_POINTS_TO_VERTICES, 0, "POINTS_TO_VERTICES", Poin DefNode(GeometryNode, GEO_NODE_POINTS_TO_VOLUME, 0, "POINTS_TO_VOLUME", PointsToVolume, "Points to Volume", "Generate a fog volume sphere around every point") DefNode(GeometryNode, GEO_NODE_POINTS, 0, "POINTS", Points, "Points", "Generate a point cloud with positions and radii defined by fields") DefNode(GeometryNode, GEO_NODE_PROXIMITY, 0, "PROXIMITY", Proximity, "Geometry Proximity", "Compute the closest location on the target geometry") -DefNode(GeometryNode, GEO_NODE_RAYCAST, def_geo_raycast, "RAYCAST", Raycast, "Raycast", "Cast rays from the context geometry onto a target geometry, and retrieve information from each hit point") +DefNode(GeometryNode, GEO_NODE_RAYCAST, 0, "RAYCAST", Raycast, "Raycast", "Cast rays from the context geometry onto a target geometry, and retrieve information from each hit point") DefNode(GeometryNode, GEO_NODE_REALIZE_INSTANCES, 0, "REALIZE_INSTANCES", RealizeInstances, "Realize Instances", "Convert instances into real geometry data") DefNode(GeometryNode, GEO_NODE_REMOVE_ATTRIBUTE, 0, "REMOVE_ATTRIBUTE", RemoveAttribute, "Remove Named Attribute", "Delete an attribute with a specified name from a geometry. Typically used to optimize performance") DefNode(GeometryNode, GEO_NODE_REPEAT_INPUT, def_geo_repeat_input, "REPEAT_INPUT", RepeatInput, "Repeat Input", "") @@ -417,9 +417,9 @@ DefNode(GeometryNode, GEO_NODE_REVERSE_CURVE, 0, "REVERSE_CURVE", ReverseCurve, DefNode(GeometryNode, GEO_NODE_ROTATE_INSTANCES, 0, "ROTATE_INSTANCES", RotateInstances, "Rotate Instances", "Rotate geometry instances in local or global space") DefNode(GeometryNode, GEO_NODE_SAMPLE_CURVE, def_geo_curve_sample, "SAMPLE_CURVE", SampleCurve, "Sample Curve", "Retrieve data from a point on a curve at a certain distance from its start") DefNode(GeometryNode, GEO_NODE_SAMPLE_INDEX, def_geo_sample_index, "SAMPLE_INDEX", SampleIndex, "Sample Index", "Retrieve values from specific geometry elements") -DefNode(GeometryNode, GEO_NODE_SAMPLE_NEAREST_SURFACE, def_geo_sample_nearest_surface, "SAMPLE_NEAREST_SURFACE", SampleNearestSurface, "Sample Nearest Surface", "Calculate the interpolated value of a mesh attribute on the closest point of its surface") +DefNode(GeometryNode, GEO_NODE_SAMPLE_NEAREST_SURFACE, 0, "SAMPLE_NEAREST_SURFACE", SampleNearestSurface, "Sample Nearest Surface", "Calculate the interpolated value of a mesh attribute on the closest point of its surface") DefNode(GeometryNode, GEO_NODE_SAMPLE_NEAREST, 0, "SAMPLE_NEAREST", SampleNearest, "Sample Nearest", "Find the element of a geometry closest to a position. Similar to the \"Index of Nearest\" node") -DefNode(GeometryNode, GEO_NODE_SAMPLE_UV_SURFACE, def_geo_sample_uv_surface, "SAMPLE_UV_SURFACE", SampleUVSurface, "Sample UV Surface", "Calculate the interpolated values of a mesh attribute at a UV coordinate") +DefNode(GeometryNode, GEO_NODE_SAMPLE_UV_SURFACE, 0, "SAMPLE_UV_SURFACE", SampleUVSurface, "Sample UV Surface", "Calculate the interpolated values of a mesh attribute at a UV coordinate") DefNode(GeometryNode, GEO_NODE_SAMPLE_VOLUME, 0, "SAMPLE_VOLUME", SampleVolume, "Sample Volume", "Calculate the interpolated values of a Volume grid at the specified position") DefNode(GeometryNode, GEO_NODE_SCALE_ELEMENTS, 0, "SCALE_ELEMENTS", ScaleElements, "Scale Elements", "Scale groups of connected edges and faces") DefNode(GeometryNode, GEO_NODE_SCALE_INSTANCES, 0, "SCALE_INSTANCES", ScaleInstances, "Scale Instances", "Scale geometry instances in local or global space") @@ -442,20 +442,20 @@ DefNode(GeometryNode, GEO_NODE_SET_SPLINE_RESOLUTION, 0, "SET_SPLINE_RESOLUTION" DefNode(GeometryNode, GEO_NODE_SIMULATION_INPUT, def_geo_simulation_input, "SIMULATION_INPUT", SimulationInput, "Simulation Input", "") DefNode(GeometryNode, GEO_NODE_SIMULATION_OUTPUT, def_geo_simulation_output, "SIMULATION_OUTPUT", SimulationOutput, "Simulation Output", "") DefNode(GeometryNode, GEO_NODE_SPLIT_EDGES, 0, "SPLIT_EDGES", SplitEdges, "Split Edges", "Duplicate mesh edges and break connections with the surrounding faces") -DefNode(GeometryNode, GEO_NODE_STORE_NAMED_ATTRIBUTE, def_geo_store_named_attribute, "STORE_NAMED_ATTRIBUTE", StoreNamedAttribute, "Store Named Attribute", "Store the result of a field on a geometry as an attribute with the specified name") +DefNode(GeometryNode, GEO_NODE_STORE_NAMED_ATTRIBUTE, 0, "STORE_NAMED_ATTRIBUTE", StoreNamedAttribute, "Store Named Attribute", "Store the result of a field on a geometry as an attribute with the specified name") DefNode(GeometryNode, GEO_NODE_STRING_JOIN, 0, "STRING_JOIN", StringJoin, "Join Strings", "Combine any number of input strings") DefNode(GeometryNode, GEO_NODE_STRING_TO_CURVES, def_geo_string_to_curves, "STRING_TO_CURVES", StringToCurves, "String to Curves", "Generate a paragraph of text with a specific font, using a curve instance to store each character") DefNode(GeometryNode, GEO_NODE_SUBDIVIDE_CURVE, 0, "SUBDIVIDE_CURVE", SubdivideCurve, "Subdivide Curve", "Dividing each curve segment into a specified number of pieces") DefNode(GeometryNode, GEO_NODE_SUBDIVIDE_MESH, 0, "SUBDIVIDE_MESH", SubdivideMesh, "Subdivide Mesh", "Divide mesh faces into smaller ones without changing the shape or volume, using linear interpolation to place the new vertices") DefNode(GeometryNode, GEO_NODE_SUBDIVISION_SURFACE, 0, "SUBDIVISION_SURFACE",SubdivisionSurface, "Subdivision Surface", "Divide mesh faces to form a smooth surface, using the Catmull-Clark subdivision method") -DefNode(GeometryNode, GEO_NODE_SWITCH, def_geo_switch, "SWITCH", Switch, "Switch", "Switch between two inputs") +DefNode(GeometryNode, GEO_NODE_SWITCH, 0, "SWITCH", Switch, "Switch", "Switch between two inputs") DefNode(GeometryNode, GEO_NODE_TRANSFORM_GEOMETRY, 0, "TRANSFORM_GEOMETRY", Transform, "Transform Geometry", "Translate, rotate or scale the geometry") DefNode(GeometryNode, GEO_NODE_TRANSLATE_INSTANCES, 0, "TRANSLATE_INSTANCES",TranslateInstances, "Translate Instances", "Move top-level geometry instances in local or global space") DefNode(GeometryNode, GEO_NODE_TRIANGULATE, 0, "TRIANGULATE", Triangulate, "Triangulate", "Convert all faces in a mesh to triangular faces") DefNode(GeometryNode, GEO_NODE_TRIM_CURVE, 0, "TRIM_CURVE", TrimCurve, "Trim Curve", "Shorten curves by removing portions at the start or end") DefNode(GeometryNode, GEO_NODE_UV_PACK_ISLANDS, 0, "UV_PACK_ISLANDS", UVPackIslands, "Pack UV Islands", "Scale islands of a UV map and move them so they fill the UV space as much as possible") DefNode(GeometryNode, GEO_NODE_UV_UNWRAP, 0, "UV_UNWRAP", UVUnwrap, "UV Unwrap", "Generate a UV map based on seam edges") -DefNode(GeometryNode, GEO_NODE_VIEWER, def_geo_viewer, "VIEWER", Viewer, "Viewer", "Display the input data in the Spreadsheet Editor") +DefNode(GeometryNode, GEO_NODE_VIEWER, 0, "VIEWER", Viewer, "Viewer", "Display the input data in the Spreadsheet Editor") DefNode(GeometryNode, GEO_NODE_VOLUME_CUBE, 0, "VOLUME_CUBE", VolumeCube, "Volume Cube", "Generate a dense volume with a field that controls the density at each grid voxel based on its position") DefNode(GeometryNode, GEO_NODE_VOLUME_TO_MESH, 0, "VOLUME_TO_MESH", VolumeToMesh, "Volume to Mesh", "Generate a mesh on the \"surface\" of a volume") diff --git a/source/blender/nodes/geometry/node_geometry_util.cc b/source/blender/nodes/geometry/node_geometry_util.cc index f037cc08f58..5490afc1037 100644 --- a/source/blender/nodes/geometry/node_geometry_util.cc +++ b/source/blender/nodes/geometry/node_geometry_util.cc @@ -15,8 +15,11 @@ #include "BKE_pointcloud.h" #include "NOD_add_node_search.hh" +#include "NOD_rna_define.hh" #include "NOD_socket_search_link.hh" +#include "RNA_enum_types.hh" + namespace blender::nodes { std::optional node_data_type_to_custom_data_type(const eNodeSocketDatatype type) @@ -70,6 +73,36 @@ void search_link_ops_for_tool_node(GatherLinkSearchOpParams ¶ms) } } +namespace enums { + +const EnumPropertyItem *attribute_type_type_with_socket_fn(bContext * /*C*/, + PointerRNA * /*ptr*/, + PropertyRNA * /*prop*/, + bool *r_free) +{ + *r_free = true; + return enum_items_filter(rna_enum_attribute_type_items, + [](const EnumPropertyItem &item) -> bool { + return generic_attribute_type_supported(item) && + !ELEM(item.value, CD_PROP_BYTE_COLOR, CD_PROP_FLOAT2); + }); +} + +bool generic_attribute_type_supported(const EnumPropertyItem &item) +{ + return ELEM(item.value, + CD_PROP_FLOAT, + CD_PROP_FLOAT2, + CD_PROP_FLOAT3, + CD_PROP_COLOR, + CD_PROP_BOOL, + CD_PROP_INT32, + CD_PROP_BYTE_COLOR, + CD_PROP_QUATERNION); +} + +} // namespace enums + } // namespace blender::nodes bool geo_node_poll_default(const bNodeType * /*ntype*/, diff --git a/source/blender/nodes/geometry/node_geometry_util.hh b/source/blender/nodes/geometry/node_geometry_util.hh index 89a444e9aff..7c0663aef4f 100644 --- a/source/blender/nodes/geometry/node_geometry_util.hh +++ b/source/blender/nodes/geometry/node_geometry_util.hh @@ -160,4 +160,15 @@ void copy_with_checked_indices(const GVArray &src, void socket_declarations_for_repeat_items(const Span items, NodeDeclaration &r_declaration); +namespace enums { + +const EnumPropertyItem *attribute_type_type_with_socket_fn(bContext * /*C*/, + PointerRNA * /*ptr*/, + PropertyRNA * /*prop*/, + bool *r_free); + +bool generic_attribute_type_supported(const EnumPropertyItem &item); + +} // namespace enums + } // namespace blender::nodes diff --git a/source/blender/nodes/geometry/nodes/node_geo_accumulate_field.cc b/source/blender/nodes/geometry/nodes/node_geo_accumulate_field.cc index c4a4f66395e..ef1ceb89eac 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_accumulate_field.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_accumulate_field.cc @@ -8,8 +8,11 @@ #include "BLI_generic_virtual_array.hh" #include "BLI_virtual_array.hh" +#include "NOD_rna_define.hh" #include "NOD_socket_search_link.hh" +#include "RNA_enum_types.hh" + #include "node_geometry_util.hh" #include "UI_interface.hh" @@ -440,6 +443,32 @@ static void node_geo_exec(GeoNodeExecParams params) }); } +static void node_rna(StructRNA *srna) +{ + RNA_def_node_enum( + srna, + "data_type", + "Data Type", + "Type of data stored in attribute", + rna_enum_attribute_type_items, + NOD_storage_enum_accessors(data_type), + CD_PROP_FLOAT, + [](bContext * /*C*/, PointerRNA * /*ptr*/, PropertyRNA * /*prop*/, bool *r_free) { + *r_free = true; + return enum_items_filter(rna_enum_attribute_type_items, [](const EnumPropertyItem &item) { + return ELEM(item.value, CD_PROP_FLOAT, CD_PROP_FLOAT3, CD_PROP_INT32); + }); + }); + + RNA_def_node_enum(srna, + "domain", + "Domain", + "", + rna_enum_attribute_domain_items, + NOD_storage_enum_accessors(domain), + ATTR_DOMAIN_POINT); +} + static void node_register() { static bNodeType ntype; @@ -454,6 +483,8 @@ static void node_register() node_type_storage( &ntype, "NodeAccumulateField", node_free_standard_storage, node_copy_standard_storage); nodeRegisterType(&ntype); + + node_rna(ntype.rna_ext.srna); } NOD_REGISTER_NODE(node_register) diff --git a/source/blender/nodes/geometry/nodes/node_geo_attribute_capture.cc b/source/blender/nodes/geometry/nodes/node_geo_attribute_capture.cc index c11f16e6d52..a940f801a92 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_attribute_capture.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_attribute_capture.cc @@ -2,6 +2,8 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "NOD_rna_define.hh" + #include "UI_interface.hh" #include "UI_resources.hh" @@ -9,6 +11,8 @@ #include "NOD_socket_search_link.hh" +#include "RNA_enum_types.hh" + #include "node_geometry_util.hh" namespace blender::nodes::node_geo_attribute_capture_cc { @@ -213,6 +217,26 @@ static void node_geo_exec(GeoNodeExecParams params) params.set_output("Geometry", geometry_set); } +static void node_rna(StructRNA *srna) +{ + RNA_def_node_enum(srna, + "data_type", + "Data Type", + "Type of data stored in attribute", + rna_enum_attribute_type_items, + NOD_storage_enum_accessors(data_type), + CD_PROP_FLOAT, + enums::attribute_type_type_with_socket_fn); + + RNA_def_node_enum(srna, + "domain", + "Domain", + "Which domain to store the data in", + rna_enum_attribute_domain_items, + NOD_storage_enum_accessors(domain), + ATTR_DOMAIN_POINT); +} + static void node_register() { static bNodeType ntype; @@ -230,6 +254,8 @@ static void node_register() ntype.draw_buttons = node_layout; ntype.gather_link_search_ops = node_gather_link_searches; nodeRegisterType(&ntype); + + node_rna(ntype.rna_ext.srna); } NOD_REGISTER_NODE(node_register) diff --git a/source/blender/nodes/geometry/nodes/node_geo_attribute_statistic.cc b/source/blender/nodes/geometry/nodes/node_geo_attribute_statistic.cc index ab2dc95bb81..fb322e0edae 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_attribute_statistic.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_attribute_statistic.cc @@ -5,6 +5,8 @@ #include #include +#include "NOD_rna_define.hh" + #include "UI_interface.hh" #include "UI_resources.hh" @@ -13,6 +15,8 @@ #include "NOD_socket_search_link.hh" +#include "RNA_enum_types.hh" + #include "node_geometry_util.hh" namespace blender::nodes::node_geo_attribute_statistic_cc { @@ -380,6 +384,32 @@ static void node_geo_exec(GeoNodeExecParams params) } } +static void node_rna(StructRNA *srna) +{ + RNA_def_node_enum( + srna, + "data_type", + "Data Type", + "The data type the attribute is converted to before calculating the results", + rna_enum_attribute_type_items, + NOD_inline_enum_accessors(custom1), + CD_PROP_FLOAT, + [](bContext * /*C*/, PointerRNA * /*ptr*/, PropertyRNA * /*prop*/, bool *r_free) { + *r_free = true; + return enum_items_filter(rna_enum_attribute_type_items, [](const EnumPropertyItem &item) { + return ELEM(item.value, CD_PROP_FLOAT, CD_PROP_FLOAT3); + }); + }); + + RNA_def_node_enum(srna, + "domain", + "Domain", + "Which domain to read the data from", + rna_enum_attribute_domain_items, + NOD_inline_enum_accessors(custom2), + ATTR_DOMAIN_POINT); +} + static void node_register() { static bNodeType ntype; @@ -394,6 +424,8 @@ static void node_register() ntype.draw_buttons = node_layout; ntype.gather_link_search_ops = node_gather_link_searches; nodeRegisterType(&ntype); + + node_rna(ntype.rna_ext.srna); } NOD_REGISTER_NODE(node_register) diff --git a/source/blender/nodes/geometry/nodes/node_geo_blur_attribute.cc b/source/blender/nodes/geometry/nodes/node_geo_blur_attribute.cc index 2feb6309556..2aa43721e6b 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_blur_attribute.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_blur_attribute.cc @@ -20,9 +20,13 @@ #include "BKE_mesh.hh" #include "BKE_mesh_mapping.hh" +#include "NOD_rna_define.hh" + #include "UI_interface.hh" #include "UI_resources.hh" +#include "RNA_enum_types.hh" + #include "NOD_socket_search_link.hh" #include "node_geometry_util.hh" @@ -517,6 +521,24 @@ static void node_geo_exec(GeoNodeExecParams params) }); } +static void node_rna(StructRNA *srna) +{ + RNA_def_node_enum( + srna, + "data_type", + "Data Type", + "", + rna_enum_attribute_type_items, + NOD_inline_enum_accessors(custom1), + CD_PROP_FLOAT, + [](bContext * /*C*/, PointerRNA * /*ptr*/, PropertyRNA * /*prop*/, bool *r_free) { + *r_free = true; + return enum_items_filter(rna_enum_attribute_type_items, [](const EnumPropertyItem &item) { + return ELEM(item.value, CD_PROP_FLOAT, CD_PROP_FLOAT3, CD_PROP_COLOR, CD_PROP_INT32); + }); + }); +} + static void node_register() { static bNodeType ntype; @@ -528,6 +550,8 @@ static void node_register() ntype.geometry_node_execute = node_geo_exec; ntype.gather_link_search_ops = node_gather_link_searches; nodeRegisterType(&ntype); + + node_rna(ntype.rna_ext.srna); } NOD_REGISTER_NODE(node_register) diff --git a/source/blender/nodes/geometry/nodes/node_geo_evaluate_at_index.cc b/source/blender/nodes/geometry/nodes/node_geo_evaluate_at_index.cc index 55890b90f6b..badc62d1dbc 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_evaluate_at_index.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_evaluate_at_index.cc @@ -4,6 +4,8 @@ #include "node_geometry_util.hh" +#include "NOD_rna_define.hh" + #include "UI_interface.hh" #include "UI_resources.hh" @@ -11,6 +13,8 @@ #include "BLI_task.hh" +#include "RNA_enum_types.hh" + #include "NOD_socket_search_link.hh" namespace blender::nodes { @@ -179,6 +183,26 @@ static void node_geo_exec(GeoNodeExecParams params) }); } +static void node_rna(StructRNA *srna) +{ + RNA_def_node_enum(srna, + "domain", + "Domain", + "Domain the field is evaluated in", + rna_enum_attribute_domain_items, + NOD_inline_enum_accessors(custom1), + ATTR_DOMAIN_POINT); + + RNA_def_node_enum(srna, + "data_type", + "Data Type", + "", + rna_enum_attribute_type_items, + NOD_inline_enum_accessors(custom2), + CD_PROP_FLOAT, + enums::attribute_type_type_with_socket_fn); +} + static void node_register() { static bNodeType ntype; @@ -192,6 +216,8 @@ static void node_register() ntype.updatefunc = node_update; ntype.gather_link_search_ops = node_gather_link_searches; nodeRegisterType(&ntype); + + node_rna(ntype.rna_ext.srna); } NOD_REGISTER_NODE(node_register) diff --git a/source/blender/nodes/geometry/nodes/node_geo_evaluate_on_domain.cc b/source/blender/nodes/geometry/nodes/node_geo_evaluate_on_domain.cc index fa8b3c60f1b..be7d03dfc9c 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_evaluate_on_domain.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_evaluate_on_domain.cc @@ -4,6 +4,8 @@ #include "node_geometry_util.hh" +#include "NOD_rna_define.hh" + #include "UI_interface.hh" #include "UI_resources.hh" @@ -11,6 +13,8 @@ #include "BLI_task.hh" +#include "RNA_enum_types.hh" + #include "NOD_socket_search_link.hh" namespace blender::nodes::node_geo_evaluate_on_domain_cc { @@ -168,6 +172,26 @@ static void node_geo_exec(GeoNodeExecParams params) }); } +static void node_rna(StructRNA *srna) +{ + RNA_def_node_enum(srna, + "domain", + "Domain", + "Domain the field is evaluated in", + rna_enum_attribute_domain_items, + NOD_inline_enum_accessors(custom1), + ATTR_DOMAIN_POINT); + + RNA_def_node_enum(srna, + "data_type", + "Data Type", + "", + rna_enum_attribute_type_items, + NOD_inline_enum_accessors(custom2), + CD_PROP_FLOAT, + enums::attribute_type_type_with_socket_fn); +} + static void node_register() { static bNodeType ntype; @@ -181,6 +205,8 @@ static void node_register() ntype.updatefunc = node_update; ntype.gather_link_search_ops = node_gather_link_searches; nodeRegisterType(&ntype); + + node_rna(ntype.rna_ext.srna); } NOD_REGISTER_NODE(node_register) diff --git a/source/blender/nodes/geometry/nodes/node_geo_input_named_attribute.cc b/source/blender/nodes/geometry/nodes/node_geo_input_named_attribute.cc index 7c83c584e09..13580e04a25 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_input_named_attribute.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_input_named_attribute.cc @@ -2,11 +2,15 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "NOD_rna_define.hh" + #include "UI_interface.hh" #include "UI_resources.hh" #include "NOD_socket_search_link.hh" +#include "RNA_enum_types.hh" + #include "node_geometry_util.hh" namespace blender::nodes::node_geo_input_named_attribute_cc { @@ -135,6 +139,18 @@ static void node_geo_exec(GeoNodeExecParams params) params.set_output("Exists", bke::AttributeExistsFieldInput::Create(std::move(name))); } +static void node_rna(StructRNA *srna) +{ + RNA_def_node_enum(srna, + "data_type", + "Data Type", + "The data type used to read the attribute values", + rna_enum_attribute_type_items, + NOD_storage_enum_accessors(data_type), + CD_PROP_FLOAT, + enums::attribute_type_type_with_socket_fn); +} + static void node_register() { static bNodeType ntype; @@ -151,6 +167,8 @@ static void node_register() node_free_standard_storage, node_copy_standard_storage); nodeRegisterType(&ntype); + + node_rna(ntype.rna_ext.srna); } NOD_REGISTER_NODE(node_register) diff --git a/source/blender/nodes/geometry/nodes/node_geo_raycast.cc b/source/blender/nodes/geometry/nodes/node_geo_raycast.cc index 5f6367eeafb..9d8e5ace225 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_raycast.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_raycast.cc @@ -8,10 +8,13 @@ #include "BKE_bvhutils.h" #include "BKE_mesh_sample.hh" +#include "NOD_rna_define.hh" +#include "NOD_socket_search_link.hh" + #include "UI_interface.hh" #include "UI_resources.hh" -#include "NOD_socket_search_link.hh" +#include "RNA_enum_types.hh" #include "node_geometry_util.hh" @@ -372,6 +375,39 @@ static void node_geo_exec(GeoNodeExecParams params) } } +static void node_rna(StructRNA *srna) +{ + static EnumPropertyItem mapping_items[] = { + {GEO_NODE_RAYCAST_INTERPOLATED, + "INTERPOLATED", + 0, + "Interpolated", + "Interpolate the attribute from the corners of the hit face"}, + {GEO_NODE_RAYCAST_NEAREST, + "NEAREST", + 0, + "Nearest", + "Use the attribute value of the closest mesh element"}, + {0, nullptr, 0, nullptr, nullptr}, + }; + + RNA_def_node_enum(srna, + "mapping", + "Mapping", + "Mapping from the target geometry to hit points", + mapping_items, + NOD_storage_enum_accessors(mapping), + GEO_NODE_RAYCAST_INTERPOLATED); + RNA_def_node_enum(srna, + "data_type", + "Data Type", + "Type of data stored in attribute", + rna_enum_attribute_type_items, + NOD_storage_enum_accessors(data_type), + CD_PROP_FLOAT, + enums::attribute_type_type_with_socket_fn); +} + static void node_register() { static bNodeType ntype; @@ -387,6 +423,8 @@ static void node_register() ntype.draw_buttons = node_layout; ntype.gather_link_search_ops = node_gather_link_searches; nodeRegisterType(&ntype); + + node_rna(ntype.rna_ext.srna); } NOD_REGISTER_NODE(node_register) diff --git a/source/blender/nodes/geometry/nodes/node_geo_sample_nearest_surface.cc b/source/blender/nodes/geometry/nodes/node_geo_sample_nearest_surface.cc index c73a711cad6..8333fcfa3b4 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_sample_nearest_surface.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_sample_nearest_surface.cc @@ -10,10 +10,13 @@ #include "BKE_mesh.hh" #include "BKE_mesh_sample.hh" +#include "NOD_rna_define.hh" +#include "NOD_socket_search_link.hh" + #include "UI_interface.hh" #include "UI_resources.hh" -#include "NOD_socket_search_link.hh" +#include "RNA_enum_types.hh" #include "node_geometry_util.hh" @@ -245,6 +248,17 @@ static void node_geo_exec(GeoNodeExecParams params) output_attribute_field(params, GField(sample_op)); } +static void node_rna(StructRNA *srna) +{ + RNA_def_node_enum(srna, + "data_type", + "Data Type", "", + rna_enum_attribute_type_items, + NOD_inline_enum_accessors(custom1), + CD_PROP_FLOAT, + enums::attribute_type_type_with_socket_fn); +} + static void node_register() { static bNodeType ntype; @@ -259,6 +273,8 @@ static void node_register() ntype.draw_buttons = node_layout; ntype.gather_link_search_ops = node_gather_link_searches; nodeRegisterType(&ntype); + + node_rna(ntype.rna_ext.srna); } NOD_REGISTER_NODE(node_register) diff --git a/source/blender/nodes/geometry/nodes/node_geo_sample_uv_surface.cc b/source/blender/nodes/geometry/nodes/node_geo_sample_uv_surface.cc index 6df00ced2e1..2eb9c46b54d 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_sample_uv_surface.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_sample_uv_surface.cc @@ -7,12 +7,15 @@ #include "BKE_mesh_sample.hh" #include "BKE_type_conversions.hh" +#include "NOD_rna_define.hh" +#include "NOD_socket_search_link.hh" + #include "UI_interface.hh" #include "UI_resources.hh" #include "GEO_reverse_uv_sampler.hh" -#include "NOD_socket_search_link.hh" +#include "RNA_enum_types.hh" #include "node_geometry_util.hh" @@ -270,6 +273,17 @@ static void node_geo_exec(GeoNodeExecParams params) output_attribute_field(params, GField(sample_op, 0)); } +static void node_rna(StructRNA *srna) +{ + RNA_def_node_enum(srna, + "data_type", + "Data Type", "", + rna_enum_attribute_type_items, + NOD_inline_enum_accessors(custom1), + CD_PROP_FLOAT, + enums::attribute_type_type_with_socket_fn); +} + static void node_register() { static bNodeType ntype; @@ -282,6 +296,8 @@ static void node_register() ntype.draw_buttons = node_layout; ntype.gather_link_search_ops = node_gather_link_searches; nodeRegisterType(&ntype); + + node_rna(ntype.rna_ext.srna); } NOD_REGISTER_NODE(node_register) diff --git a/source/blender/nodes/geometry/nodes/node_geo_store_named_attribute.cc b/source/blender/nodes/geometry/nodes/node_geo_store_named_attribute.cc index 77479b2c7a2..c0f305d82bc 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_store_named_attribute.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_store_named_attribute.cc @@ -10,9 +10,12 @@ #include "RNA_access.hh" #include "RNA_enum_types.hh" +#include "BKE_type_conversions.hh" + +#include "NOD_rna_define.hh" #include "NOD_socket_search_link.hh" -#include "BKE_type_conversions.hh" +#include "RNA_enum_types.hh" #include "node_geometry_util.hh" @@ -203,6 +206,31 @@ static void node_geo_exec(GeoNodeExecParams params) params.set_output("Geometry", std::move(geometry_set)); } +static void node_rna(StructRNA *srna) +{ + RNA_def_node_enum( + srna, + "data_type", + "Data Type", + "Type of data stored in attribute", + rna_enum_attribute_type_items, + NOD_storage_enum_accessors(data_type), + CD_PROP_FLOAT, + [](bContext * /*C*/, PointerRNA * /*ptr*/, PropertyRNA * /*prop*/, bool *r_free) { + *r_free = true; + return enum_items_filter(rna_enum_attribute_type_items, + enums::generic_attribute_type_supported); + }); + + RNA_def_node_enum(srna, + "domain", + "Domain", + "Which domain to store the data in", + rna_enum_attribute_domain_items, + NOD_storage_enum_accessors(domain), + ATTR_DOMAIN_POINT); +} + static void node_register() { static bNodeType ntype; @@ -221,6 +249,8 @@ static void node_register() ntype.geometry_node_execute = node_geo_exec; ntype.draw_buttons = node_layout; nodeRegisterType(&ntype); + + node_rna(ntype.rna_ext.srna); } NOD_REGISTER_NODE(node_register) diff --git a/source/blender/nodes/geometry/nodes/node_geo_switch.cc b/source/blender/nodes/geometry/nodes/node_geo_switch.cc index c9f72f72261..78fec095d78 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_switch.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_switch.cc @@ -7,8 +7,11 @@ #include "UI_interface.hh" #include "UI_resources.hh" +#include "NOD_rna_define.hh" #include "NOD_socket_search_link.hh" +#include "RNA_enum_types.hh" + #include "FN_field_cpp_type.hh" namespace blender::nodes::node_geo_switch_cc { @@ -271,6 +274,38 @@ class LazyFunctionForSwitchNode : public LazyFunction { } }; +static void node_rna(StructRNA *srna) +{ + RNA_def_node_enum( + srna, + "input_type", + "Input Type", + "", + rna_enum_node_socket_data_type_items, + NOD_storage_enum_accessors(input_type), + SOCK_GEOMETRY, + [](bContext * /*C*/, PointerRNA * /*ptr*/, PropertyRNA * /*prop*/, bool *r_free) { + *r_free = true; + return enum_items_filter(rna_enum_node_socket_data_type_items, + [](const EnumPropertyItem &item) -> bool { + return ELEM(item.value, + SOCK_FLOAT, + SOCK_INT, + SOCK_BOOLEAN, + SOCK_ROTATION, + SOCK_VECTOR, + SOCK_STRING, + SOCK_RGBA, + SOCK_GEOMETRY, + SOCK_OBJECT, + SOCK_COLLECTION, + SOCK_TEXTURE, + SOCK_MATERIAL, + SOCK_IMAGE); + }); + }); +} + static void register_node() { static bNodeType ntype; @@ -283,6 +318,8 @@ static void register_node() ntype.gather_link_search_ops = node_gather_link_searches; ntype.draw_buttons = node_layout; nodeRegisterType(&ntype); + + node_rna(ntype.rna_ext.srna); } NOD_REGISTER_NODE(register_node) diff --git a/source/blender/nodes/geometry/nodes/node_geo_viewer.cc b/source/blender/nodes/geometry/nodes/node_geo_viewer.cc index a0ca764baba..913e0a5fe67 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_viewer.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_viewer.cc @@ -4,13 +4,16 @@ #include "BKE_context.h" +#include "NOD_rna_define.hh" +#include "NOD_socket_search_link.hh" + #include "UI_interface.hh" #include "UI_resources.hh" #include "ED_node.hh" #include "ED_viewer_path.hh" -#include "NOD_socket_search_link.hh" +#include "RNA_enum_types.hh" #include "node_geometry_util.hh" @@ -135,6 +138,24 @@ static void node_gather_link_searches(GatherLinkSearchOpParams ¶ms) } } +static void node_rna(StructRNA *srna) +{ + RNA_def_node_enum(srna, + "data_type", + "Data Type", "", + rna_enum_attribute_type_items, + NOD_storage_enum_accessors(data_type), + CD_PROP_FLOAT, + enums::attribute_type_type_with_socket_fn); + + RNA_def_node_enum(srna, + "domain", + "Domain", "Domain to evaluate the field on", + rna_enum_attribute_domain_with_auto_items, + NOD_storage_enum_accessors(domain), + ATTR_DOMAIN_POINT); +} + static void node_register() { static bNodeType ntype; @@ -150,6 +171,8 @@ static void node_register() ntype.gather_link_search_ops = node_gather_link_searches; ntype.no_muting = true; nodeRegisterType(&ntype); + + node_rna(ntype.rna_ext.srna); } NOD_REGISTER_NODE(node_register)