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
This commit is contained in:
Jesse Yurkovich
2025-02-20 00:23:25 +01:00
committed by Jesse Yurkovich
parent de5c38e969
commit c5b34ff17f
5 changed files with 9 additions and 26 deletions

View File

@@ -165,9 +165,7 @@ void ABCCurveWriter::do_write(HierarchyContext &context)
const Span<float3> positions = curves.positions();
const Span<float> nurbs_weights = curves.nurbs_weights();
const VArray<int8_t> nurbs_orders = curves.nurbs_orders();
const bke::AttributeAccessor curve_attributes = curves.attributes();
const VArray<float> radii = *curve_attributes.lookup_or_default<float>(
"radius", bke::AttrDomain::Point, 0.01f);
const VArray<float> radii = curves.radius();
vert_counts.resize(curves.curves_num());
const OffsetIndices points_by_curve = curves.points_by_curve();

View File

@@ -450,16 +450,12 @@ void AbcCurveReader::read_curves_sample(Curves *curves_id,
}
if (data.radii) {
bke::SpanAttributeWriter<float> radii =
curves.attributes_for_write().lookup_or_add_for_write_span<float>("radius",
bke::AttrDomain::Point);
MutableSpan<float> 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) {

View File

@@ -153,15 +153,9 @@ void AbcPointsReader::read_geometry(bke::GeometrySet &geometry_set,
bke::MutableAttributeAccessor attribute_accessor = pointcloud->attributes_for_write();
bke::SpanAttributeWriter<float3> positions_writer =
attribute_accessor.lookup_or_add_for_write_span<float3>("position", bke::AttrDomain::Point);
MutableSpan<float3> point_positions = positions_writer.span;
MutableSpan<float3> point_positions = pointcloud->positions_for_write();
N3fArraySamplePtr normals = read_points_sample(m_schema, sample_sel, point_positions);
positions_writer.finish();
bke::SpanAttributeWriter<float> point_radii_writer =
attribute_accessor.lookup_or_add_for_write_span<float>("radius", bke::AttrDomain::Point);
MutableSpan<float> point_radii = point_radii_writer.span;
MutableSpan<float> 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<float3> normals_writer =

View File

@@ -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<float> radii = attributes.lookup_or_add_for_write_only_span<float>(
"radius", bke::AttrDomain::Point);
MutableSpan<float> 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.

View File

@@ -26,7 +26,7 @@ void USDPointsWriter::do_write(HierarchyContext &context)
const PointCloud *points = static_cast<const PointCloud *>(context.object->data);
Span<pxr::GfVec3f> positions = points->positions().cast<pxr::GfVec3f>();
VArray<float> radii = *points->attributes().lookup<float>("radius", bke::AttrDomain::Point);
VArray<float> radii = points->radius();
const pxr::UsdGeomPoints usd_points = pxr::UsdGeomPoints::Define(stage, usd_path);