From 740c970ca75ad61c9cfcede7d3cba4a4bea8819a Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Sat, 11 Jan 2025 22:50:24 +0800 Subject: [PATCH] FIX: arrange: fix the obj not arranged issue after preset changed jira: STUDIO-8933 Change-Id: I72607dda04f1f6e5805cf11e7c9f1d2f7603153b --- src/slic3r/GUI/Plater.cpp | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 4fafe0868..d606e4983 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -8999,6 +8999,7 @@ void Plater::priv::update_objects_position_when_select_preset(const std::functio plate_object.emplace_back(std::move(obj_idxs)); } +#if 0 BoundingBoxf3 platelist_bbox = old_plate_list.get_bounding_box(); std::map outside_plate_object; for (int i = 0; i < model.objects.size(); ++i) { @@ -9007,6 +9008,7 @@ void Plater::priv::update_objects_position_when_select_preset(const std::functio if (all_plate_object.find(i) == all_plate_object.end()) { int position_type = 0; + BoundingBoxf3 instance_bbox = object->instance_convex_hull_bounding_box(obj_inst); /* 1 | 2 | 3 * -------------------------------- @@ -9032,10 +9034,11 @@ void Plater::priv::update_objects_position_when_select_preset(const std::functio position_type = 8; else position_type = 5; + outside_plate_object.emplace(i, position_type); } } - +#endif select_prest(); wxGetApp().obj_list()->update_object_list_by_printer_technology(); @@ -9055,6 +9058,31 @@ void Plater::priv::update_objects_position_when_select_preset(const std::functio view3D->center_selected_plate(i); } + BOOST_LOG_TRIVIAL(info) << format("change bed size from (%.0f,%.0f) to (%.0f,%.0f)", old_plate_size.x(), old_plate_size.y(), cur_plate_size.x(), cur_plate_size.y()); + if (cur_plate_is_smaller && std::any_of(plate_object.begin(), plate_object.end(), [](const std::vector& obj_idxs) { return !obj_idxs.empty(); })) { + take_snapshot("Arrange after bed size changes"); + //collect all the objects on the current plates + std::set new_all_plate_object; + for (int index = 0; index < cur_plate_list.get_plate_count(); index++) + { + PartPlate* plate = cur_plate_list.get_plate(index); + ModelObjectPtrs plate_obj_list = plate->get_objects_on_this_plate(); + new_all_plate_object.insert(plate_obj_list.begin(), plate_obj_list.end()); + } + std::set>& obj_set = cur_plate->get_obj_and_inst_set(); + std::set>& obj_out_set = cur_plate->get_obj_and_inst_outside_set(); + for (int i = 0; i < model.objects.size(); ++i) { + ModelObject* object = model.objects[i]; + if (new_all_plate_object.find(object) == new_all_plate_object.end()) { + //need to arrange + obj_set.emplace(std::pair{i, 0}); + obj_out_set.emplace(std::pair{i, 0}); + } + } + q->set_prepare_state(Job::PREPARE_STATE_OUTSIDE_BED); + q->arrange(); + } +#if 0 const BoundingBoxf3 &cur_platelist_bbox = cur_plate_list.get_bounding_box(); const BoundingBoxf3 last_plate_bbox = cur_plate_list.get_plate(cur_plate_list.get_plate_count() - 1)->get_bounding_box(); int cur_plate_w, cur_plate_d, cur_plate_h; @@ -9087,14 +9115,7 @@ void Plater::priv::update_objects_position_when_select_preset(const std::functio object->translate_instance(0, offset); cur_plate_list.notify_instance_update(iter.first, 0); } - - BOOST_LOG_TRIVIAL(info) << format("change bed size from (%.0f,%.0f) to (%.0f,%.0f)", old_plate_size.x(), old_plate_size.y(), cur_plate_size.x(), cur_plate_size.y()); - if (cur_plate_is_smaller && std::any_of(plate_object.begin(), plate_object.end(), [](const std::vector &obj_idxs) { return !obj_idxs.empty(); })) { - take_snapshot("Arrange after bed size changes"); - q->set_prepare_state(Job::PREPARE_STATE_OUTSIDE_BED); - q->arrange(); - } - +#endif view3D->deselect_all(); }