mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Added progress dialog for adding parts from files
This commit is contained in:
		
							parent
							
								
									b748f36246
								
							
						
					
					
						commit
						b6634b2ea0
					
				
					 2 changed files with 21 additions and 25 deletions
				
			
		|  | @ -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<std::pair<wxString, bool>> 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<int>(100.0f * static_cast<float>(i) / static_cast<float>(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; | ||||
|             } | ||||
|  |  | |||
|  | @ -2142,8 +2142,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& 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<int>(100.0f * static_cast<float>(i) / static_cast<float>(input_files.size())), dlg_info); | ||||
|         dlg.Update(static_cast<int>(100.0f * static_cast<float>(i) / static_cast<float>(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<size_t> Plater::priv::load_files(const std::vector<fs::path>& 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<size_t> Plater::priv::load_files(const std::vector<fs::path>& 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<size_t> Plater::priv::load_files(const std::vector<fs::path>& 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<size_t> Plater::priv::load_files(const std::vector<fs::path>& 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<size_t> Plater::priv::load_files(const std::vector<fs::path>& 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<size_t> Plater::priv::load_files(const std::vector<fs::path>& 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); | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 enricoturri1966
						enricoturri1966