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.
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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 (geometry_set.has_pointcloud()) {
|
||||
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 PointCloudComponent *component =
|
||||
geometry_set.get_component_for_read<PointCloudComponent>()) {
|
||||
count++;
|
||||
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 (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();
|
||||
|
||||
Reference in New Issue
Block a user