FIX: arrange: fix the obj not arranged issue after preset changed
jira: STUDIO-8933 Change-Id: I72607dda04f1f6e5805cf11e7c9f1d2f7603153b
This commit is contained in:
parent
06d483ee46
commit
740c970ca7
|
@ -8999,6 +8999,7 @@ void Plater::priv::update_objects_position_when_select_preset(const std::functio
|
||||||
plate_object.emplace_back(std::move(obj_idxs));
|
plate_object.emplace_back(std::move(obj_idxs));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
BoundingBoxf3 platelist_bbox = old_plate_list.get_bounding_box();
|
BoundingBoxf3 platelist_bbox = old_plate_list.get_bounding_box();
|
||||||
std::map<int, int> outside_plate_object;
|
std::map<int, int> outside_plate_object;
|
||||||
for (int i = 0; i < model.objects.size(); ++i) {
|
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()) {
|
if (all_plate_object.find(i) == all_plate_object.end()) {
|
||||||
int position_type = 0;
|
int position_type = 0;
|
||||||
|
|
||||||
BoundingBoxf3 instance_bbox = object->instance_convex_hull_bounding_box(obj_inst);
|
BoundingBoxf3 instance_bbox = object->instance_convex_hull_bounding_box(obj_inst);
|
||||||
/* 1 | 2 | 3
|
/* 1 | 2 | 3
|
||||||
* --------------------------------
|
* --------------------------------
|
||||||
|
@ -9032,10 +9034,11 @@ void Plater::priv::update_objects_position_when_select_preset(const std::functio
|
||||||
position_type = 8;
|
position_type = 8;
|
||||||
else
|
else
|
||||||
position_type = 5;
|
position_type = 5;
|
||||||
|
|
||||||
outside_plate_object.emplace(i, position_type);
|
outside_plate_object.emplace(i, position_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
select_prest();
|
select_prest();
|
||||||
|
|
||||||
wxGetApp().obj_list()->update_object_list_by_printer_technology();
|
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);
|
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<int>& obj_idxs) { return !obj_idxs.empty(); })) {
|
||||||
|
take_snapshot("Arrange after bed size changes");
|
||||||
|
//collect all the objects on the current plates
|
||||||
|
std::set<ModelObject*> 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<std::pair<int, int>>& obj_set = cur_plate->get_obj_and_inst_set();
|
||||||
|
std::set<std::pair<int, int>>& 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<int, int>{i, 0});
|
||||||
|
obj_out_set.emplace(std::pair<int, int>{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 &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();
|
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;
|
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);
|
object->translate_instance(0, offset);
|
||||||
cur_plate_list.notify_instance_update(iter.first, 0);
|
cur_plate_list.notify_instance_update(iter.first, 0);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
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<int> &obj_idxs) { return !obj_idxs.empty(); })) {
|
|
||||||
take_snapshot("Arrange after bed size changes");
|
|
||||||
q->set_prepare_state(Job::PREPARE_STATE_OUTSIDE_BED);
|
|
||||||
q->arrange();
|
|
||||||
}
|
|
||||||
|
|
||||||
view3D->deselect_all();
|
view3D->deselect_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue