39 for (
Base *base_src : bases) {
40 src_curves.
add(
static_cast<Curves *
>(base_src->object->data));
46 for (const int i : range) {
47 Curves &src = *src_curves[i];
48 IndexMaskMemory memory;
49 switch (bke::AttrDomain(src.selection_domain)) {
50 case bke::AttrDomain::Point: {
51 const IndexMask selection = retrieve_selected_points(src, memory);
52 if (selection.is_empty()) {
55 bke::CurvesGeometry separated;
56 bke::CurvesGeometry retained;
57 separate_points(src.geometry.wrap(), selection, separated, retained);
59 separated.calculate_bezier_auto_handles();
60 retained.calculate_bezier_auto_handles();
62 dst_geometry[i] = std::move(separated);
63 src.geometry.wrap() = std::move(retained);
66 case bke::AttrDomain::Curve: {
67 const IndexMask selection = retrieve_selected_curves(src, memory);
68 if (selection.is_empty()) {
71 dst_geometry[i] = bke::curves_copy_curve_selection(src.geometry.wrap(), selection, {});
72 src.geometry.wrap().remove_curves(selection, {});
76 BLI_assert_unreachable();
84 for (
const int i : dst_curves.index_range()) {
85 if (std::optional<bke::CurvesGeometry> &dst = dst_geometry[
i]) {
87 dst_curves[
i]->geometry.wrap() = std::move(*dst);
93 bases.remove_if([&](
Base *base) {
95 return dst_curves[src_curves.index_of(curves)] ==
nullptr;
98 if (bases.is_empty()) {
103 for (
Base *base_src : bases) {
104 Curves *src =
static_cast<Curves *
>(base_src->object->data);
105 Curves *dst = dst_curves[src_curves.index_of(src)];
111 object_dst->
data = dst;
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
View3D * CTX_wm_view3d(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)