Revert "Fix: Curves: Select Alternate operator not selecting handles"
This reverts commit 4d7042a46e.
The PR got merged by accident.
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user