Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/geometry/nodes/node_geo_instances_to_points.cc
| Show First 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | static void convert_instances_to_points(GeometrySet &geometry_set, | ||||
| evaluator.add(std::move(position_field)); | evaluator.add(std::move(position_field)); | ||||
| evaluator.add(std::move(radius_field)); | evaluator.add(std::move(radius_field)); | ||||
| evaluator.evaluate(); | evaluator.evaluate(); | ||||
| const VArray<float3> &positions = evaluator.get_evaluated<float3>(0); | const VArray<float3> &positions = evaluator.get_evaluated<float3>(0); | ||||
| copy_attribute_to_points(positions, selection, {(float3 *)pointcloud->co, pointcloud->totpoint}); | copy_attribute_to_points(positions, selection, {(float3 *)pointcloud->co, pointcloud->totpoint}); | ||||
| const VArray<float> &radii = evaluator.get_evaluated<float>(1); | const VArray<float> &radii = evaluator.get_evaluated<float>(1); | ||||
| copy_attribute_to_points(radii, selection, {pointcloud->radius, pointcloud->totpoint}); | copy_attribute_to_points(radii, selection, {pointcloud->radius, pointcloud->totpoint}); | ||||
| if (!instances.instance_ids().is_empty()) { | |||||
| OutputAttribute_Typed<int> id_attribute = points.attribute_try_get_for_output<int>( | OutputAttribute_Typed<int> id_attribute = points.attribute_try_get_for_output<int>( | ||||
| "id", ATTR_DOMAIN_POINT, 0); | "id", ATTR_DOMAIN_POINT, CD_PROP_INT32); | ||||
| MutableSpan<int> ids = id_attribute.as_span(); | MutableSpan<int> ids = id_attribute.as_span(); | ||||
| for (const int i : selection.index_range()) { | for (const int i : selection.index_range()) { | ||||
| ids[i] = instances.instance_ids()[selection[i]]; | ids[i] = instances.instance_ids()[selection[i]]; | ||||
| } | } | ||||
| id_attribute.save(); | id_attribute.save(); | ||||
| } | } | ||||
| } | |||||
| static void geo_node_instances_to_points_exec(GeoNodeExecParams params) | static void geo_node_instances_to_points_exec(GeoNodeExecParams params) | ||||
| { | { | ||||
| GeometrySet geometry_set = params.extract_input<GeometrySet>("Instances"); | GeometrySet geometry_set = params.extract_input<GeometrySet>("Instances"); | ||||
| if (geometry_set.has_instances()) { | if (geometry_set.has_instances()) { | ||||
| convert_instances_to_points(geometry_set, | convert_instances_to_points(geometry_set, | ||||
| params.extract_input<Field<float3>>("Position"), | params.extract_input<Field<float3>>("Position"), | ||||
| Show All 22 Lines | |||||