diff options
Diffstat (limited to 'source/blender/nodes/geometry/nodes/node_geo_instances_to_points.cc')
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_instances_to_points.cc | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_instances_to_points.cc b/source/blender/nodes/geometry/nodes/node_geo_instances_to_points.cc index 63d1f88a442..c3955426e69 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_instances_to_points.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_instances_to_points.cc @@ -23,15 +23,15 @@ namespace blender::nodes { static void geo_node_instances_to_points_declare(NodeDeclarationBuilder &b) { - b.add_input<decl::Geometry>("Instances"); - b.add_input<decl::Bool>("Selection").default_value(true).hide_value().supports_field(); - b.add_input<decl::Vector>("Position").implicit_field(); - b.add_input<decl::Float>("Radius") + b.add_input<decl::Geometry>(N_("Instances")).only_instances(); + b.add_input<decl::Bool>(N_("Selection")).default_value(true).hide_value().supports_field(); + b.add_input<decl::Vector>(N_("Position")).implicit_field(); + b.add_input<decl::Float>(N_("Radius")) .default_value(0.05f) .min(0.0f) .subtype(PROP_DISTANCE) .supports_field(); - b.add_output<decl::Geometry>("Points"); + b.add_output<decl::Geometry>(N_("Points")); } template<typename T> @@ -77,13 +77,15 @@ static void convert_instances_to_points(GeometrySet &geometry_set, const VArray<float> &radii = evaluator.get_evaluated<float>(1); copy_attribute_to_points(radii, selection, {pointcloud->radius, pointcloud->totpoint}); - OutputAttribute_Typed<int> id_attribute = points.attribute_try_get_for_output<int>( - "id", ATTR_DOMAIN_POINT, 0); - MutableSpan<int> ids = id_attribute.as_span(); - for (const int i : selection.index_range()) { - ids[i] = instances.instance_ids()[selection[i]]; + if (!instances.instance_ids().is_empty()) { + OutputAttribute_Typed<int> id_attribute = points.attribute_try_get_for_output<int>( + "id", ATTR_DOMAIN_POINT, CD_PROP_INT32); + MutableSpan<int> ids = id_attribute.as_span(); + for (const int i : selection.index_range()) { + ids[i] = instances.instance_ids()[selection[i]]; + } + id_attribute.save(); } - id_attribute.save(); } static void geo_node_instances_to_points_exec(GeoNodeExecParams params) |