Revert "Fix: Curves: Select Alternate operator not selecting handles"

This reverts commit 4d7042a46e.
The PR got merged by accident.
This commit is contained in:
Falk David
2025-08-26 10:54:37 +02:00
parent 505e4fc3ae
commit 23d8b7f126

View File

@@ -556,47 +556,39 @@ void select_alternate(bke::CurvesGeometry &curves,
}
const OffsetIndices points_by_curve = curves.points_by_curve();
bke::GSpanAttributeWriter selection = ensure_selection_attribute(
curves, bke::AttrDomain::Point, bke::AttrType::Bool);
const VArray<bool> cyclic = curves.cyclic();
Vector<bke::GSpanAttributeWriter> selection_writers = init_selection_writers(
curves, bke::AttrDomain::Point);
MutableSpan<bool> selection_typed = selection.span.typed<bool>();
curves_mask.foreach_index([&](const int64_t curve) {
const IndexRange points = points_by_curve[curve];
bool anything_selected = false;
for (const int i : selection_writers.index_range()) {
anything_selected = anything_selected ||
has_anything_selected(selection_writers[i].span.slice(points));
}
if (!anything_selected) {
if (!has_anything_selected(selection.span.slice(points))) {
return;
}
for (const int i : selection_writers.index_range()) {
MutableSpan<bool> selection_typed = selection_writers[i].span.typed<bool>();
const int half_of_size = points.size() / 2;
const IndexRange selected = points.shift(deselect_ends ? 1 : 0);
const IndexRange deselected = points.shift(deselect_ends ? 0 : 1);
for (const int i : IndexRange(half_of_size)) {
const int index = i * 2;
selection_typed[selected[index]] = true;
selection_typed[deselected[index]] = false;
}
const int half_of_size = points.size() / 2;
const IndexRange selected = points.shift(deselect_ends ? 1 : 0);
const IndexRange deselected = points.shift(deselect_ends ? 0 : 1);
for (const int i : IndexRange(half_of_size)) {
const int index = i * 2;
selection_typed[selected[index]] = true;
selection_typed[deselected[index]] = false;
}
selection_typed[points.first()] = !deselect_ends;
const bool end_parity_to_selected = bool(points.size() % 2);
const bool selected_end = cyclic[curve] || end_parity_to_selected;
selection_typed[points.last()] = !deselect_ends && selected_end;
selection_typed[points.first()] = !deselect_ends;
const bool end_parity_to_selected = bool(points.size() % 2);
const bool selected_end = cyclic[curve] || end_parity_to_selected;
selection_typed[points.last()] = !deselect_ends && selected_end;
/* Selected last one require to deselect pre-last one point which is not first. */
const IndexRange curve_body = points.drop_front(1).drop_back(1);
if (!deselect_ends && cyclic[curve] && !curve_body.is_empty()) {
selection_typed[curve_body.last()] = false;
}
/* Selected last one require to deselect pre-last one point which is not first. */
const IndexRange curve_body = points.drop_front(1).drop_back(1);
if (!deselect_ends && cyclic[curve] && !curve_body.is_empty()) {
selection_typed[curve_body.last()] = false;
}
});
finish_attribute_writers(selection_writers);
selection.finish();
}
void select_alternate(bke::CurvesGeometry &curves, const bool deselect_ends)