[Bf-blender-cvs] [40c2938209b] temp-geometry-nodes-instances-api-v2: Further cleanup

Hans Goudey noreply at git.blender.org
Thu Mar 18 04:30:27 CET 2021


Commit: 40c2938209b80f83b58142d327ca85cdbfed57df
Author: Hans Goudey
Date:   Wed Mar 17 20:54:12 2021 -0400
Branches: temp-geometry-nodes-instances-api-v2
https://developer.blender.org/rB40c2938209b80f83b58142d327ca85cdbfed57df

Further cleanup

===================================================================

M	source/blender/nodes/geometry/nodes/node_geo_point_separate.cc

===================================================================

diff --git a/source/blender/nodes/geometry/nodes/node_geo_point_separate.cc b/source/blender/nodes/geometry/nodes/node_geo_point_separate.cc
index 09ed2b87f5b..83d7ea24f7a 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_point_separate.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_point_separate.cc
@@ -246,15 +246,21 @@ static void geo_node_point_separate_exec(GeoNodeExecParams params)
 {
   GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
   const std::string mask_attribute_name = params.extract_input<std::string>("Mask");
-  GeometrySet out_set_a;
-  GeometrySet out_set_b;
   if (mask_attribute_name.empty()) {
-    params.set_output("Geometry 1", std::move(geometry_set));
-    params.set_output("Geometry 2", std::move(out_set_b));
+    params.set_output("Geometry 1", std::move(GeometrySet()));
+    params.set_output("Geometry 2", std::move(GeometrySet()));
   }
 
   Vector<GeometryInstanceGroup> set_groups = bke::geometry_set_gather_instances(geometry_set);
 
+  /* Remove any set inputs that don't contain points, to avoid checking later on. */
+  for (int i = set_groups.size() - 1; i >= 0; i--) {
+    const GeometrySet &set = set_groups[i].geometry_set;
+    if (!set.has_mesh() && !set.has_pointcloud()) {
+      set_groups.remove_and_reorder(i);
+    }
+  }
+
   int instances_len = 0;
   for (const GeometryInstanceGroup &set_group : set_groups) {
     instances_len += set_group.transforms.size();
@@ -264,19 +270,20 @@ static void geo_node_point_separate_exec(GeoNodeExecParams params)
   Array<Vector<float3>> positions_b(instances_len);
   get_positions_from_instances(set_groups, mask_attribute_name, positions_a, positions_b);
 
-  PointCloudComponent &component_a = out_set_a.get_component_for_write<PointCloudComponent>();
-  PointCloudComponent &component_b = out_set_b.get_component_for_write<PointCloudComponent>();
-  component_a.replace(create_point_cloud(positions_a));
-  component_a.replace(create_point_cloud(positions_b));
+  GeometrySet out_set_a = GeometrySet::create_with_pointcloud(create_point_cloud(positions_a));
+  GeometrySet out_set_b = GeometrySet::create_with_pointcloud(create_point_cloud(positions_b));
 
   Map<std::string, AttributeKind> result_attributes_info;
   bke::gather_attribute_info(result_attributes_info,
-                             {GeometryComponentType::Mesh, GeometryComponentType::PointCloud},
+                             {GEO_COMPONENT_TYPE_MESH, GEO_COMPONENT_TYPE_POINT_CLOUD},
                              set_groups,
-                             {});
+                             {"position"});
 
-  copy_attributes_to_output(
-      set_groups, result_attributes_info, mask_attribute_name, component_a, component_b);
+  copy_attributes_to_output(set_groups,
+                            result_attributes_info,
+                            mask_attribute_name,
+                            out_set_a.get_component_for_write<PointCloudComponent>(),
+                            out_set_b.get_component_for_write<PointCloudComponent>());
 
   params.set_output("Geometry 1", std::move(out_set_a));
   params.set_output("Geometry 2", std::move(out_set_b));



More information about the Bf-blender-cvs mailing list