[Bf-blender-cvs] [14f1d8962f6] master: Geometry Nodes: add method to get all geometry components in a set

Jacques Lucke noreply at git.blender.org
Fri Feb 19 12:31:55 CET 2021


Commit: 14f1d8962f6c8ab609daff3cca1702b35eee5b68
Author: Jacques Lucke
Date:   Fri Feb 19 12:29:37 2021 +0100
Branches: master
https://developer.blender.org/rB14f1d8962f6c8ab609daff3cca1702b35eee5b68

Geometry Nodes: add method to get all geometry components in a set

Previously, functions would have to ask for every geometry type explicitely.

Using a vector is return type is fine. In practice this will probably never
allocate because of the small buffer optimization in vector.

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

M	source/blender/blenkernel/BKE_geometry_set.hh
M	source/blender/blenkernel/intern/geometry_set.cc

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

diff --git a/source/blender/blenkernel/BKE_geometry_set.hh b/source/blender/blenkernel/BKE_geometry_set.hh
index 02b3c88183a..5b1882d0d4c 100644
--- a/source/blender/blenkernel/BKE_geometry_set.hh
+++ b/source/blender/blenkernel/BKE_geometry_set.hh
@@ -308,6 +308,8 @@ struct GeometrySet {
 
   void add(const GeometryComponent &component);
 
+  blender::Vector<const GeometryComponent *> get_components_for_read() const;
+
   void compute_boundbox_without_instances(blender::float3 *r_min, blender::float3 *r_max) const;
 
   friend std::ostream &operator<<(std::ostream &stream, const GeometrySet &geometry_set);
diff --git a/source/blender/blenkernel/intern/geometry_set.cc b/source/blender/blenkernel/intern/geometry_set.cc
index 74d8b9afd82..0274dfdbd1c 100644
--- a/source/blender/blenkernel/intern/geometry_set.cc
+++ b/source/blender/blenkernel/intern/geometry_set.cc
@@ -160,6 +160,18 @@ void GeometrySet::add(const GeometryComponent &component)
   components_.add_new(component.type(), std::move(component_ptr));
 }
 
+/**
+ * Get all geometry components in this geometry set for read-only access.
+ */
+Vector<const GeometryComponent *> GeometrySet::get_components_for_read() const
+{
+  Vector<const GeometryComponent *> components;
+  for (const GeometryComponentPtr &ptr : components_.values()) {
+    components.append(ptr.get());
+  }
+  return components;
+}
+
 void GeometrySet::compute_boundbox_without_instances(float3 *r_min, float3 *r_max) const
 {
   const PointCloud *pointcloud = this->get_pointcloud_for_read();



More information about the Bf-blender-cvs mailing list