Fix #110666: Copy built-in attributes for masked curves type conversion #114765

Merged
Philipp Oeser merged 2 commits from mod_moder/blender:tmp_fix_3_6_backport into blender-v3.6-release 2023-11-13 09:22:34 +01:00
1 changed files with 44 additions and 20 deletions

View File

@ -446,6 +446,10 @@ static bke::CurvesGeometry convert_curves_to_bezier(
}
};
for (bke::AttributeTransferData &attribute : generic_attributes) {
attribute.dst.finish();
}
bke::curves::foreach_curve_by_type(src_curves.curve_types(),
src_curves.curve_type_counts(),
selection,
@ -454,17 +458,25 @@ static bke::CurvesGeometry convert_curves_to_bezier(
bezier_to_bezier,
nurbs_to_bezier);
for (bke::AttributeTransferData &attribute : generic_attributes) {
bke::curves::copy_point_data(src_points_by_curve,
dst_points_by_curve,
unselected_ranges,
attribute.src,
attribute.dst.span);
}
src_attributes.for_all(
[&](const bke::AttributeIDRef &id, const bke::AttributeMetaData meta_data) {
if (id.is_anonymous() && !propagation_info.propagate(id.anonymous_id())) {
return true;
}
if (meta_data.domain != ATTR_DOMAIN_POINT) {
return true;
}
for (bke::AttributeTransferData &attribute : generic_attributes) {
attribute.dst.finish();
}
const GVArraySpan src = *src_attributes.lookup(id, meta_data.domain);
bke::GSpanAttributeWriter dst = dst_attributes.lookup_or_add_for_write_only_span(
id, meta_data.domain, meta_data.data_type);
bke::curves::copy_point_data(
src_points_by_curve, dst_points_by_curve, unselected_ranges, src, dst.span);
dst.finish();
return true;
});
return dst_curves;
}
@ -623,6 +635,10 @@ static bke::CurvesGeometry convert_curves_to_nurbs(
}
};
for (bke::AttributeTransferData &attribute : generic_attributes) {
attribute.dst.finish();
}
bke::curves::foreach_curve_by_type(src_curves.curve_types(),
src_curves.curve_type_counts(),
selection,
@ -631,17 +647,25 @@ static bke::CurvesGeometry convert_curves_to_nurbs(
bezier_to_nurbs,
nurbs_to_nurbs);
for (bke::AttributeTransferData &attribute : generic_attributes) {
bke::curves::copy_point_data(src_points_by_curve,
dst_points_by_curve,
unselected_ranges,
attribute.src,
attribute.dst.span);
}
src_attributes.for_all(
[&](const bke::AttributeIDRef &id, const bke::AttributeMetaData meta_data) {
if (id.is_anonymous() && !propagation_info.propagate(id.anonymous_id())) {
return true;
}
if (meta_data.domain != ATTR_DOMAIN_POINT) {
return true;
}
for (bke::AttributeTransferData &attribute : generic_attributes) {
attribute.dst.finish();
}
const GVArraySpan src = *src_attributes.lookup(id, meta_data.domain);
bke::GSpanAttributeWriter dst = dst_attributes.lookup_or_add_for_write_only_span(
id, meta_data.domain, meta_data.data_type);
bke::curves::copy_point_data(
src_points_by_curve, dst_points_by_curve, unselected_ranges, src, dst.span);
dst.finish();
return true;
});
return dst_curves;
}