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:
committed by
Jesse Yurkovich
parent
de5c38e969
commit
c5b34ff17f
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user