FIX: fix the crash issue when change setting after .gcode.3mf loaded

Change-Id: I47ae6c6b14f94858ff9789ef3ed927930b611203
(cherry picked from commit ad548cdc7491fd432603c80ea2fcf151115efd10)
This commit is contained in:
lane.wei 2023-06-15 20:19:49 +08:00 committed by Lane.Wei
parent f96e60a14a
commit 0fcc235e14
2 changed files with 13 additions and 8 deletions

View File

@ -1484,13 +1484,16 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
for (auto layer : object->support_layers()) for (auto layer : object->support_layers())
zs.push_back(layer->print_z); zs.push_back(layer->print_z);
} }
std::sort(zs.begin(), zs.end()); if (!zs.empty())
//BBS: merge numerically very close Z values. {
auto end_it = std::unique(zs.begin(), zs.end()); std::sort(zs.begin(), zs.end());
m_layer_count = (unsigned int)(end_it - zs.begin()); //BBS: merge numerically very close Z values.
for (auto it = zs.begin(); it != end_it - 1; it++) { auto end_it = std::unique(zs.begin(), zs.end());
if (abs(*it - *(it + 1)) < EPSILON) m_layer_count = (unsigned int)(end_it - zs.begin());
m_layer_count--; for (auto it = zs.begin(); it != end_it - 1; it++) {
if (abs(*it - *(it + 1)) < EPSILON)
m_layer_count--;
}
} }
} }
print.throw_if_canceled(); print.throw_if_canceled();

View File

@ -4716,6 +4716,7 @@ void Plater::priv::export_gcode(fs::path output_path, bool output_path_on_remova
unsigned int Plater::priv::update_restart_background_process(bool force_update_scene, bool force_update_preview) unsigned int Plater::priv::update_restart_background_process(bool force_update_scene, bool force_update_preview)
{ {
bool switch_print = true; bool switch_print = true;
//BBS: judge whether can switch print or not //BBS: judge whether can switch print or not
if ((partplate_list.get_plate_count() > 1) && !this->background_process.can_switch_print()) if ((partplate_list.get_plate_count() > 1) && !this->background_process.can_switch_print())
{ {
@ -11199,7 +11200,8 @@ int Plater::select_plate(int plate_index, bool need_slice)
{ {
if (need_slice) { //from preview's thumbnail if (need_slice) { //from preview's thumbnail
if ((invalidated & PrintBase::APPLY_STATUS_INVALIDATED) || (gcode_result->moves.empty())){ if ((invalidated & PrintBase::APPLY_STATUS_INVALIDATED) || (gcode_result->moves.empty())){
//part_plate->update_slice_result_valid_state(false); if (invalidated & PrintBase::APPLY_STATUS_INVALIDATED)
part_plate->update_slice_result_valid_state(false);
p->process_completed_with_error = -1; p->process_completed_with_error = -1;
p->m_slice_all = false; p->m_slice_all = false;
reset_gcode_toolpaths(); reset_gcode_toolpaths();