FIX: CLI: fix an arrange issue when duplicate failed

restore the wipe_tower position to original when duplicate fail

JIRA: MAK-2638
Change-Id: I355056f1d87648cc1f6aafa15a98ff569359b44f
This commit is contained in:
lane.wei 2024-01-19 17:44:38 +08:00 committed by Lane.Wei
parent ee3bba7fcb
commit f2f8c13208
1 changed files with 40 additions and 3 deletions

View File

@ -3563,6 +3563,7 @@ int CLI::run(int argc, char **argv)
bool finished_arrange = false, first_run = true;
Slic3r::GUI::PartPlate* cur_plate = nullptr;
int low_duplicate_count = 0, up_duplicate_count = duplicate_count, arrange_count = 0;
float orig_wipe_x = 0.f, orig_wipe_y = 0.f;
if (duplicate_count > 0) {
original_model = model;
@ -3589,8 +3590,22 @@ int CLI::run(int argc, char **argv)
unprintable.clear();
locked_aps.clear();
}
else
else {
first_run = false;
if (plate_to_slice > 0) {
ConfigOptionFloats* wipe_x_option = m_print_config.option<ConfigOptionFloats>("wipe_tower_x");
ConfigOptionFloats* wipe_y_option = m_print_config.option<ConfigOptionFloats>("wipe_tower_y");
if (wipe_x_option && (wipe_x_option->size() > (plate_to_slice-1))) {
orig_wipe_x = wipe_x_option->get_at(plate_to_slice-1);
BOOST_LOG_TRIVIAL(info) << boost::format("%1%, plate_to_slice %2%, orig_wipe_x=%3%")%__LINE__%plate_to_slice%orig_wipe_x;
}
if (wipe_y_option && (wipe_y_option->size() > (plate_to_slice-1))) {
orig_wipe_y = wipe_y_option->get_at(plate_to_slice-1);
BOOST_LOG_TRIVIAL(info) << boost::format("%1%, plate_to_slice %2%, orig_wipe_y=%3%")%__LINE__%plate_to_slice%orig_wipe_y;
}
}
}
cur_plate = (Slic3r::GUI::PartPlate *)partplate_list.get_plate(plate_to_slice-1);
cur_plate->duplicate_all_instance(duplicate_count, need_skip, skip_maps);
@ -4023,11 +4038,22 @@ int CLI::run(int argc, char **argv)
if (duplicate_count == 0)
{
//restore to the original
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": restore to the original model and plates");
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": restore to the original model and plates, orig_wipe_x %1%, orig_wipe_y %2%")%orig_wipe_x %orig_wipe_y;
finished_arrange = true;
model = original_model;
partplate_list.load_from_3mf_structure(plate_data_src);
partplate_list.reset_size(current_printable_width, current_printable_depth, current_printable_height, true, true);
if ((orig_wipe_x > 0.f) && (orig_wipe_y > 0.f))
{
ConfigOptionFloat wt_x_opt(orig_wipe_x);
ConfigOptionFloat wt_y_opt(orig_wipe_y);
ConfigOptionFloats* wipe_x_option = m_print_config.option<ConfigOptionFloats>("wipe_tower_x", true);
ConfigOptionFloats* wipe_y_option = m_print_config.option<ConfigOptionFloats>("wipe_tower_y", true);
wipe_x_option->set_at(&wt_x_opt, plate_to_slice-1, 0);
wipe_y_option->set_at(&wt_y_opt, plate_to_slice-1, 0);
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": restore wipe_tower position to {%1%, %2%}")%orig_wipe_x %orig_wipe_y;
}
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": exit arrange process");
}
continue;
@ -4036,7 +4062,7 @@ int CLI::run(int argc, char **argv)
if (duplicate_single_object)
{
if (real_duplicate_count <= 1) {
BOOST_LOG_TRIVIAL(warning) << "no object can be placed under single object mode, restore to the original model and plates also" << std::endl;
BOOST_LOG_TRIVIAL(warning) << boost::format("no object can be placed under single object mode, restore to the original model and plates also, orig_wipe_x %1%, orig_wipe_y %2%")%orig_wipe_x %orig_wipe_y;
//record_exit_reson(outfile_dir, CLI_OBJECT_ARRANGE_FAILED, 0, cli_errors[CLI_OBJECT_ARRANGE_FAILED], sliced_info);
//flush_and_exit(CLI_OBJECT_ARRANGE_FAILED);
finished_arrange = true;
@ -4044,6 +4070,17 @@ int CLI::run(int argc, char **argv)
partplate_list.load_from_3mf_structure(plate_data_src);
partplate_list.reset_size(current_printable_width, current_printable_depth, current_printable_height, true, true);
duplicate_count = 0;
if ((orig_wipe_x > 0.f) && (orig_wipe_y > 0.f))
{
ConfigOptionFloat wt_x_opt(orig_wipe_x);
ConfigOptionFloat wt_y_opt(orig_wipe_y);
ConfigOptionFloats* wipe_x_option = m_print_config.option<ConfigOptionFloats>("wipe_tower_x", true);
ConfigOptionFloats* wipe_y_option = m_print_config.option<ConfigOptionFloats>("wipe_tower_y", true);
wipe_x_option->set_at(&wt_x_opt, plate_to_slice-1, 0);
wipe_y_option->set_at(&wt_y_opt, plate_to_slice-1, 0);
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": restore wipe_tower position to {%1%, %2%}")%orig_wipe_x %orig_wipe_y;
}
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": exit arrange process");
continue;
}