From c5b34ff17f4d3f43073320f910ced49b59bfcfa2 Mon Sep 17 00:00:00 2001 From: Jesse Yurkovich Date: Thu, 20 Feb 2025 00:23:25 +0100 Subject: [PATCH] Cleanup: IO: Use recently added radius accessors for USD and Alembic IO Use recently added `radius` accessors for USD and Alembic PointClouds and Curves. Pull Request: https://projects.blender.org/blender/blender/pulls/134704 --- .../blender/io/alembic/exporter/abc_writer_curves.cc | 4 +--- source/blender/io/alembic/intern/abc_reader_curves.cc | 8 ++------ source/blender/io/alembic/intern/abc_reader_points.cc | 11 ++--------- source/blender/io/usd/intern/usd_reader_points.cc | 10 +++------- source/blender/io/usd/intern/usd_writer_points.cc | 2 +- 5 files changed, 9 insertions(+), 26 deletions(-) diff --git a/source/blender/io/alembic/exporter/abc_writer_curves.cc b/source/blender/io/alembic/exporter/abc_writer_curves.cc index fd20f1dd698..7780be54b33 100644 --- a/source/blender/io/alembic/exporter/abc_writer_curves.cc +++ b/source/blender/io/alembic/exporter/abc_writer_curves.cc @@ -165,9 +165,7 @@ void ABCCurveWriter::do_write(HierarchyContext &context) const Span positions = curves.positions(); const Span nurbs_weights = curves.nurbs_weights(); const VArray nurbs_orders = curves.nurbs_orders(); - const bke::AttributeAccessor curve_attributes = curves.attributes(); - const VArray radii = *curve_attributes.lookup_or_default( - "radius", bke::AttrDomain::Point, 0.01f); + const VArray radii = curves.radius(); vert_counts.resize(curves.curves_num()); const OffsetIndices points_by_curve = curves.points_by_curve(); diff --git a/source/blender/io/alembic/intern/abc_reader_curves.cc b/source/blender/io/alembic/intern/abc_reader_curves.cc index fae64fd9e59..d288a854f6e 100644 --- a/source/blender/io/alembic/intern/abc_reader_curves.cc +++ b/source/blender/io/alembic/intern/abc_reader_curves.cc @@ -450,16 +450,12 @@ void AbcCurveReader::read_curves_sample(Curves *curves_id, } if (data.radii) { - bke::SpanAttributeWriter radii = - curves.attributes_for_write().lookup_or_add_for_write_span("radius", - bke::AttrDomain::Point); + MutableSpan radii = curves.radius_for_write(); Alembic::Abc::FloatArraySample alembic_widths = *data.radii; for (const int i_point : curves.points_range()) { - radii.span[i_point] = alembic_widths[i_point] / 2.0f; + radii[i_point] = alembic_widths[i_point] / 2.0f; } - - radii.finish(); } if (data.curve_type == CURVE_TYPE_NURBS) { diff --git a/source/blender/io/alembic/intern/abc_reader_points.cc b/source/blender/io/alembic/intern/abc_reader_points.cc index 16be38f44bd..114b62f8bd7 100644 --- a/source/blender/io/alembic/intern/abc_reader_points.cc +++ b/source/blender/io/alembic/intern/abc_reader_points.cc @@ -153,15 +153,9 @@ void AbcPointsReader::read_geometry(bke::GeometrySet &geometry_set, bke::MutableAttributeAccessor attribute_accessor = pointcloud->attributes_for_write(); - bke::SpanAttributeWriter positions_writer = - attribute_accessor.lookup_or_add_for_write_span("position", bke::AttrDomain::Point); - MutableSpan point_positions = positions_writer.span; + MutableSpan point_positions = pointcloud->positions_for_write(); N3fArraySamplePtr normals = read_points_sample(m_schema, sample_sel, point_positions); - positions_writer.finish(); - - bke::SpanAttributeWriter point_radii_writer = - attribute_accessor.lookup_or_add_for_write_span("radius", bke::AttrDomain::Point); - MutableSpan point_radii = point_radii_writer.span; + MutableSpan point_radii = pointcloud->radius_for_write(); if (widths) { for (size_t i = 0; i < widths->size(); i++) { @@ -171,7 +165,6 @@ void AbcPointsReader::read_geometry(bke::GeometrySet &geometry_set, else { point_radii.fill(0.01f); } - point_radii_writer.finish(); if (normals) { bke::SpanAttributeWriter normals_writer = diff --git a/source/blender/io/usd/intern/usd_reader_points.cc b/source/blender/io/usd/intern/usd_reader_points.cc index 801f8bf81d1..5ea93704c67 100644 --- a/source/blender/io/usd/intern/usd_reader_points.cc +++ b/source/blender/io/usd/intern/usd_reader_points.cc @@ -79,21 +79,17 @@ void USDPointsReader::read_geometry(bke::GeometrySet &geometry_set, points_prim_.GetWidthsAttr().Get(&usd_widths, params.motion_sample_time); if (!usd_widths.empty()) { - bke::MutableAttributeAccessor attributes = pointcloud->attributes_for_write(); - bke::SpanAttributeWriter radii = attributes.lookup_or_add_for_write_only_span( - "radius", bke::AttrDomain::Point); + MutableSpan radii = pointcloud->radius_for_write(); const pxr::TfToken widths_interp = points_prim_.GetWidthsInterpolation(); if (widths_interp == pxr::UsdGeomTokens->constant) { - radii.span.fill(usd_widths[0] / 2.0f); + radii.fill(usd_widths[0] / 2.0f); } else { for (int i_point = 0; i_point < usd_widths.size(); i_point++) { - radii.span[i_point] = usd_widths[i_point] / 2.0f; + radii[i_point] = usd_widths[i_point] / 2.0f; } } - - radii.finish(); } /* TODO: Read in ID and normal data. diff --git a/source/blender/io/usd/intern/usd_writer_points.cc b/source/blender/io/usd/intern/usd_writer_points.cc index 7f393428c88..ce8365301ac 100644 --- a/source/blender/io/usd/intern/usd_writer_points.cc +++ b/source/blender/io/usd/intern/usd_writer_points.cc @@ -26,7 +26,7 @@ void USDPointsWriter::do_write(HierarchyContext &context) const PointCloud *points = static_cast(context.object->data); Span positions = points->positions().cast(); - VArray radii = *points->attributes().lookup("radius", bke::AttrDomain::Point); + VArray radii = points->radius(); const pxr::UsdGeomPoints usd_points = pxr::UsdGeomPoints::Define(stage, usd_path);