From b6634b2ea0474e06303b03a39648a51cb40ace3c Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Thu, 4 Mar 2021 15:09:50 +0100 Subject: [PATCH] Added progress dialog for adding parts from files --- src/slic3r/GUI/GUI_ObjectList.cpp | 16 +++++++++++----- src/slic3r/GUI/Plater.cpp | 30 ++++++++++-------------------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index ad5ee151d82..54e0a2b4f1b 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -2133,12 +2133,11 @@ void ObjectList::load_subobject(ModelVolumeType type) if (m_objects_model->GetItemType(item)&itInstance) item = m_objects_model->GetItemById(obj_idx); - take_snapshot(_(L("Load Part"))); + take_snapshot(_L("Load Part")); std::vector> volumes_info; load_part((*m_objects)[obj_idx], volumes_info, type); - changed_object(obj_idx); if (type == ModelVolumeType::MODEL_PART) // update printable state on canvas @@ -2164,23 +2163,30 @@ void ObjectList::load_part( ModelObject* model_object, wxArrayString input_files; wxGetApp().import_model(parent, input_files); + + wxProgressDialog dlg(_L("Loading") + dots, "", 100, wxGetApp().plater(), wxPD_AUTO_HIDE); + wxBusyCursor busy; + for (size_t i = 0; i < input_files.size(); ++i) { std::string input_file = input_files.Item(i).ToUTF8().data(); + dlg.Update(static_cast(100.0f * static_cast(i) / static_cast(input_files.size())), + _L("Loading file") + ": " + from_path(boost::filesystem::path(input_file).filename())); + dlg.Fit(); + Model model; try { model = Model::read_from_file(input_file); } catch (std::exception &e) { - auto msg = _(L("Error!")) + " " + input_file + " : " + e.what() + "."; + auto msg = _L("Error!") + " " + input_file + " : " + e.what() + "."; show_error(parent, msg); exit(1); } for (auto object : model.objects) { Vec3d delta = Vec3d::Zero(); - if (model_object->origin_translation != Vec3d::Zero()) - { + if (model_object->origin_translation != Vec3d::Zero()) { object->center_around_origin(); delta = model_object->origin_translation - object->origin_translation; } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 3a227bfb32a..e6573d1b827 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2142,8 +2142,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ for (size_t i = 0; i < input_files.size(); ++i) { const auto &path = input_files[i]; const auto filename = path.filename(); - const auto dlg_info = _L("Loading file") + ": " + from_path(filename); - dlg.Update(static_cast(100.0f * static_cast(i) / static_cast(input_files.size())), dlg_info); + dlg.Update(static_cast(100.0f * static_cast(i) / static_cast(input_files.size())), _L("Loading file") + ": " + from_path(filename)); dlg.Fit(); const bool type_3mf = std::regex_match(path.string(), pattern_3mf); @@ -2164,12 +2163,10 @@ std::vector Plater::priv::load_files(const std::vector& input_ PrinterTechnology printer_technology = Preset::printer_technology(config_loaded); // We can't to load SLA project if there is at least one multi-part object on the bed - if (printer_technology == ptSLA) - { + if (printer_technology == ptSLA) { const ModelObjectPtrs& objects = q->model().objects; for (auto object : objects) - if (object->volumes.size() > 1) - { + if (object->volumes.size() > 1) { Slic3r::GUI::show_info(nullptr, _L("You cannot load SLA project with a multi-part object on the bed") + "\n\n" + _L("Please check your object list before preset changing."), @@ -2188,8 +2185,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ this->model.custom_gcode_per_print_z = model.custom_gcode_per_print_z; } - if (load_config) - { + if (load_config) { if (!config.empty()) { Preset::normalize(config); PresetBundle* preset_bundle = wxGetApp().preset_bundle; @@ -2264,8 +2260,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ continue; } - if (load_model) - { + if (load_model) { // The model should now be initialized auto convert_from_imperial_units = [](Model& model, bool only_small_volumes) { @@ -2315,8 +2310,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ else if ((wxGetApp().get_mode() == comSimple) && (type_3mf || type_any_amf) && model_has_advanced_features(model)) { wxMessageDialog msg_dlg(q, _L("This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?")+"\n", _L("Detected advanced data"), wxICON_WARNING | wxYES | wxNO); - if (msg_dlg.ShowModal() == wxID_YES) - { + if (msg_dlg.ShowModal() == wxID_YES) { Slic3r::GUI::wxGetApp().save_mode(comAdvanced); view3D->set_as_dirty(); } @@ -2331,8 +2325,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ } // check multi-part object adding for the SLA-printing - if (printer_technology == ptSLA) - { + if (printer_technology == ptSLA) { for (auto obj : model.objects) if ( obj->volumes.size()>1 ) { Slic3r::GUI::show_error(nullptr, @@ -2368,23 +2361,20 @@ std::vector Plater::priv::load_files(const std::vector& input_ obj_idxs.insert(obj_idxs.end(), loaded_idxs.begin(), loaded_idxs.end()); } - if (load_model) - { + if (load_model) { wxGetApp().app_config->update_skein_dir(input_files[input_files.size() - 1].parent_path().string()); // XXX: Plater.pm had @loaded_files, but didn't seem to fill them with the filenames... statusbar()->set_status_text(_L("Loaded")); } // automatic selection of added objects - if (!obj_idxs.empty() && (view3D != nullptr)) - { + if (!obj_idxs.empty() && view3D != nullptr) { // update printable state for new volumes on canvas3D wxGetApp().plater()->canvas3D()->update_instance_printable_state_for_objects(obj_idxs); Selection& selection = view3D->get_canvas3d()->get_selection(); selection.clear(); - for (size_t idx : obj_idxs) - { + for (size_t idx : obj_idxs) { selection.add_object((unsigned int)idx, false); }