[Bf-blender-cvs] [5d6e4822d85] master: Cleanup: Combine geometry null checks in if statements

Hans Goudey noreply at git.blender.org
Wed Jul 20 01:34:17 CEST 2022


Commit: 5d6e4822d85bf4db099e2810555af17962929e49
Author: Hans Goudey
Date:   Tue Jul 19 18:29:23 2022 -0500
Branches: master
https://developer.blender.org/rB5d6e4822d85bf4db099e2810555af17962929e49

Cleanup: Combine geometry null checks in if statements

Testing if components or virtual arrays are null in the same line they
are retrieved can make this boilerplate code a bit easier to read.

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

M	source/blender/nodes/geometry/nodes/node_geo_attribute_domain_size.cc
M	source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc

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

diff --git a/source/blender/nodes/geometry/nodes/node_geo_attribute_domain_size.cc b/source/blender/nodes/geometry/nodes/node_geo_attribute_domain_size.cc
index 7e4904a7a6a..f6ea6073459 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_attribute_domain_size.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_attribute_domain_size.cc
@@ -65,13 +65,12 @@ static void node_update(bNodeTree *ntree, bNode *node)
 
 static void node_geo_exec(GeoNodeExecParams params)
 {
-  GeometryComponentType component = (GeometryComponentType)params.node().custom1;
-  GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
+  const GeometryComponentType component = (GeometryComponentType)params.node().custom1;
+  const GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
 
   switch (component) {
     case GEO_COMPONENT_TYPE_MESH: {
-      if (geometry_set.has_mesh()) {
-        const MeshComponent *component = geometry_set.get_component_for_read<MeshComponent>();
+      if (const MeshComponent *component = geometry_set.get_component_for_read<MeshComponent>()) {
         const AttributeAccessor attributes = *component->attributes();
         params.set_output("Point Count", attributes.domain_size(ATTR_DOMAIN_POINT));
         params.set_output("Edge Count", attributes.domain_size(ATTR_DOMAIN_EDGE));
@@ -84,8 +83,8 @@ static void node_geo_exec(GeoNodeExecParams params)
       break;
     }
     case GEO_COMPONENT_TYPE_CURVE: {
-      if (geometry_set.has_curves()) {
-        const CurveComponent *component = geometry_set.get_component_for_read<CurveComponent>();
+      if (const CurveComponent *component =
+              geometry_set.get_component_for_read<CurveComponent>()) {
         const AttributeAccessor attributes = *component->attributes();
         params.set_output("Point Count", attributes.domain_size(ATTR_DOMAIN_POINT));
         params.set_output("Spline Count", attributes.domain_size(ATTR_DOMAIN_CURVE));
@@ -96,10 +95,10 @@ static void node_geo_exec(GeoNodeExecParams params)
       break;
     }
     case GEO_COMPONENT_TYPE_POINT_CLOUD: {
-      if (geometry_set.has_pointcloud()) {
-        const PointCloudComponent *component =
-            geometry_set.get_component_for_read<PointCloudComponent>();
-        params.set_output("Point Count", component->attributes()->domain_size(ATTR_DOMAIN_POINT));
+      if (const PointCloudComponent *component =
+              geometry_set.get_component_for_read<PointCloudComponent>()) {
+        const AttributeAccessor attributes = *component->attributes();
+        params.set_output("Point Count", attributes.domain_size(ATTR_DOMAIN_POINT));
       }
       else {
         params.set_default_remaining_outputs();
@@ -107,11 +106,10 @@ static void node_geo_exec(GeoNodeExecParams params)
       break;
     }
     case GEO_COMPONENT_TYPE_INSTANCES: {
-      if (geometry_set.has_instances()) {
-        const InstancesComponent *component =
-            geometry_set.get_component_for_read<InstancesComponent>();
-        params.set_output("Instance Count",
-                          component->attributes()->domain_size(ATTR_DOMAIN_INSTANCE));
+      if (const InstancesComponent *component =
+              geometry_set.get_component_for_read<InstancesComponent>()) {
+        const AttributeAccessor attributes = *component->attributes();
+        params.set_output("Instance Count", attributes.domain_size(ATTR_DOMAIN_INSTANCE));
       }
       else {
         params.set_default_remaining_outputs();
diff --git a/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc b/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
index 3d0bc9cd462..7c26ffc2099 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
@@ -140,33 +140,35 @@ static Mesh *compute_hull(const GeometrySet &geometry_set)
 
   Span<float3> positions_span;
 
-  if (geometry_set.has_mesh()) {
+  if (const MeshComponent *component = geometry_set.get_component_for_read<MeshComponent>()) {
     count++;
-    const MeshComponent *component = geometry_set.get_component_for_read<MeshComponent>();
-    const Mesh *mesh = component->get_for_read();
-    total_num += mesh->totvert;
+    if (const VArray<float3> positions = component->attributes()->lookup<float3>(
+            "position", ATTR_DOMAIN_POINT)) {
+      if (positions.is_span()) {
+        span_count++;
+        positions_span = positions.get_internal_span();
+      }
+      total_num += positions.size();
+    }
   }
 
-  if (geometry_set.has_pointcloud()) {
+  if (const PointCloudComponent *component =
+          geometry_set.get_component_for_read<PointCloudComponent>()) {
     count++;
-    const PointCloudComponent *component =
-        geometry_set.get_component_for_read<PointCloudComponent>();
-    const PointCloud *pointcloud = component->get_for_read();
-    const bke::AttributeAccessor attributes = bke::pointcloud_attributes(*pointcloud);
-    const VArray<float3> positions = attributes.lookup_or_default<float3>(
-        "position", ATTR_DOMAIN_POINT, float3(0));
-    if (positions.is_span()) {
-      span_count++;
-      positions_span = positions.get_internal_span();
+    if (const VArray<float3> positions = component->attributes()->lookup<float3>(
+            "position", ATTR_DOMAIN_POINT)) {
+      if (positions.is_span()) {
+        span_count++;
+        positions_span = positions.get_internal_span();
+      }
+      total_num += positions.size();
     }
-    total_num += positions.size();
   }
 
-  if (geometry_set.has_curves()) {
+  if (const Curves *curves_id = geometry_set.get_curves_for_read()) {
     count++;
     span_count++;
-    const Curves &curves_id = *geometry_set.get_curves_for_read();
-    const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
+    const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
     positions_span = curves.evaluated_positions();
     total_num += positions_span.size();
   }
@@ -184,30 +186,25 @@ static Mesh *compute_hull(const GeometrySet &geometry_set)
   Array<float3> positions(total_num);
   int offset = 0;
 
-  if (geometry_set.has_mesh()) {
-    const MeshComponent *component = geometry_set.get_component_for_read<MeshComponent>();
-    const VArray<float3> varray = component->attributes()->lookup<float3>("position",
-                                                                          ATTR_DOMAIN_POINT);
-    if (varray) {
+  if (const MeshComponent *component = geometry_set.get_component_for_read<MeshComponent>()) {
+    if (const VArray<float3> varray = component->attributes()->lookup<float3>("position",
+                                                                              ATTR_DOMAIN_POINT)) {
       varray.materialize(positions.as_mutable_span().slice(offset, varray.size()));
       offset += varray.size();
     }
   }
 
-  if (geometry_set.has_pointcloud()) {
-    const PointCloudComponent *component =
-        geometry_set.get_component_for_read<PointCloudComponent>();
-    const VArray<float3> varray = component->attributes()->lookup<float3>("position",
-                                                                          ATTR_DOMAIN_POINT);
-    if (varray) {
+  if (const PointCloudComponent *component =
+          geometry_set.get_component_for_read<PointCloudComponent>()) {
+    if (const VArray<float3> varray = component->attributes()->lookup<float3>("position",
+                                                                              ATTR_DOMAIN_POINT)) {
       varray.materialize(positions.as_mutable_span().slice(offset, varray.size()));
       offset += varray.size();
     }
   }
 
-  if (geometry_set.has_curves()) {
-    const Curves &curves_id = *geometry_set.get_curves_for_read();
-    const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
+  if (const Curves *curves_id = geometry_set.get_curves_for_read()) {
+    const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
     Span<float3> array = curves.evaluated_positions();
     positions.as_mutable_span().slice(offset, array.size()).copy_from(array);
     offset += array.size();



More information about the Bf-blender-cvs mailing list