mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	NEW:add filaments not supported by detection
Change-Id: I1cabf8631e77fbaf42d2b30ee3e715c8f2459bda
This commit is contained in:
		
							parent
							
								
									33c22bef62
								
							
						
					
					
						commit
						7c728452a2
					
				
					 7 changed files with 140 additions and 0 deletions
				
			
		
							
								
								
									
										30
									
								
								resources/printers/filaments_blacklist.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								resources/printers/filaments_blacklist.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | ||||||
|  | { | ||||||
|  |   "whitelist": [ | ||||||
|  |   ], | ||||||
|  |   "blacklist": [ | ||||||
|  |     { | ||||||
|  |       "vendor": "Third Party", | ||||||
|  |       "type": "TPU", | ||||||
|  |       "action": "prohibition", | ||||||
|  |       "description": "TPU is not supported by AMS." | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "vendor": "Third Party", | ||||||
|  |       "type": "PVA", | ||||||
|  | 	  "action": "warning", | ||||||
|  |       "description": "Damp PVA will become flexible and get stuck inside AMS,please take care to dry it before use." | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "vendor": "Third Party", | ||||||
|  |       "type": "PA-CF", | ||||||
|  |       "action": "warning", | ||||||
|  |       "description": "CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, please use with caution." | ||||||
|  |     }, | ||||||
|  | 	{ | ||||||
|  |       "vendor": "Third Party", | ||||||
|  |       "type": "PLA-CF", | ||||||
|  |       "action": "warning", | ||||||
|  |       "description": "CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, please use with caution." | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
|  | @ -712,6 +712,29 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) | ||||||
|     if (preset_bundle) { |     if (preset_bundle) { | ||||||
|         for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { |         for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { | ||||||
|             if (it->alias.compare(m_comboBox_filament->GetValue().ToStdString()) == 0) { |             if (it->alias.compare(m_comboBox_filament->GetValue().ToStdString()) == 0) { | ||||||
|  | 
 | ||||||
|  |                 //check is it in the filament blacklist
 | ||||||
|  |                 bool in_blacklist = false; | ||||||
|  |                 std::string action; | ||||||
|  |                 std::string info; | ||||||
|  |                 std::string filamnt_type; | ||||||
|  |                 it->get_filament_type(filamnt_type); | ||||||
|  | 
 | ||||||
|  |                 DeviceManager::check_filaments_in_blacklist(it->vendor->name, filamnt_type, in_blacklist, action, info); | ||||||
|  | 
 | ||||||
|  |                 if (in_blacklist) { | ||||||
|  |                     if (action == "prohibition") { | ||||||
|  |                         MessageDialog msg_wingow(nullptr, info, _L("Error"), wxICON_WARNING | wxOK); | ||||||
|  |                         msg_wingow.ShowModal(); | ||||||
|  |                         m_comboBox_filament->SetSelection(m_filament_selection); | ||||||
|  |                         return; | ||||||
|  |                     } | ||||||
|  |                     else if (action == "warning") { | ||||||
|  |                         MessageDialog msg_wingow(nullptr, info, _L("Warning"), wxICON_INFORMATION | wxOK); | ||||||
|  |                         msg_wingow.ShowModal(); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|                 // ) if nozzle_temperature_range is found
 |                 // ) if nozzle_temperature_range is found
 | ||||||
|                 ConfigOption* opt_min = it->config.option("nozzle_temperature_range_low"); |                 ConfigOption* opt_min = it->config.option("nozzle_temperature_range_low"); | ||||||
|                 if (opt_min) { |                 if (opt_min) { | ||||||
|  | @ -742,6 +765,8 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) | ||||||
|                 } |                 } | ||||||
|                 if (!found_filament_type) |                 if (!found_filament_type) | ||||||
|                     m_filament_type = ""; |                     m_filament_type = ""; | ||||||
|  | 
 | ||||||
|  |                 break; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -751,6 +776,8 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) | ||||||
|     if (m_input_nozzle_max->GetTextCtrl()->GetValue().IsEmpty()) { |     if (m_input_nozzle_max->GetTextCtrl()->GetValue().IsEmpty()) { | ||||||
|          m_input_nozzle_max->GetTextCtrl()->SetValue("220"); |          m_input_nozzle_max->GetTextCtrl()->SetValue("220"); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     m_filament_selection = evt.GetSelection(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void AMSMaterialsSetting::on_dpi_changed(const wxRect &suggested_rect) { this->Refresh(); } | void AMSMaterialsSetting::on_dpi_changed(const wxRect &suggested_rect) { this->Refresh(); } | ||||||
|  |  | ||||||
|  | @ -98,6 +98,7 @@ protected: | ||||||
|     TextInput*          m_input_k_val; |     TextInput*          m_input_k_val; | ||||||
|     wxStaticText*       m_n_param; |     wxStaticText*       m_n_param; | ||||||
|     TextInput*          m_input_n_val; |     TextInput*          m_input_n_val; | ||||||
|  |     int                 m_filament_selection; | ||||||
| 
 | 
 | ||||||
| #ifdef __APPLE__ | #ifdef __APPLE__ | ||||||
|     wxComboBox *m_comboBox_filament; |     wxComboBox *m_comboBox_filament; | ||||||
|  |  | ||||||
|  | @ -3999,6 +3999,7 @@ void DeviceManager::load_last_machine() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| json DeviceManager::function_table = json::object(); | json DeviceManager::function_table = json::object(); | ||||||
|  | json DeviceManager::filaments_blacklist = json::object(); | ||||||
| 
 | 
 | ||||||
| std::string DeviceManager::parse_printer_type(std::string type_str) | std::string DeviceManager::parse_printer_type(std::string type_str) | ||||||
| { | { | ||||||
|  | @ -4107,6 +4108,79 @@ bool DeviceManager::load_functional_config(std::string config_file) | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | bool DeviceManager::load_filaments_blacklist_config(std::string config_file) | ||||||
|  | { | ||||||
|  |     filaments_blacklist = json::object(); | ||||||
|  |     std::ifstream json_file(config_file.c_str()); | ||||||
|  | 
 | ||||||
|  |     try { | ||||||
|  |         if (json_file.is_open()) { | ||||||
|  |             json_file >> filaments_blacklist; | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             BOOST_LOG_TRIVIAL(error) << "load filaments blacklist config failed, file = " << config_file; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     catch (...) { | ||||||
|  |         BOOST_LOG_TRIVIAL(error) << "load filaments blacklist config failed, file = " << config_file; | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void DeviceManager::check_filaments_in_blacklist(std::string tag_vendor, std::string tag_type, bool& in_blacklist, std::string& ac, std::string& info) | ||||||
|  | { | ||||||
|  |     in_blacklist = false; | ||||||
|  | 
 | ||||||
|  |     if (filaments_blacklist.contains("blacklist")) { | ||||||
|  |         for (auto prohibited_filament : filaments_blacklist["blacklist"]) { | ||||||
|  | 
 | ||||||
|  |             std::string vendor; | ||||||
|  |             std::string type; | ||||||
|  |             std::string action; | ||||||
|  |             std::string description; | ||||||
|  | 
 | ||||||
|  |             if (prohibited_filament.contains("vendor") && | ||||||
|  |                 prohibited_filament.contains("type") && | ||||||
|  |                 prohibited_filament.contains("action") && | ||||||
|  |                 prohibited_filament.contains("description")) | ||||||
|  |             { | ||||||
|  |                 vendor = prohibited_filament["vendor"].get<std::string>(); | ||||||
|  |                 type = prohibited_filament["type"].get<std::string>(); | ||||||
|  |                 action = prohibited_filament["action"].get<std::string>(); | ||||||
|  |                 description = prohibited_filament["description"].get<std::string>(); | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             std::transform(vendor.begin(), vendor.end(), vendor.begin(), ::tolower); | ||||||
|  |             std::transform(tag_vendor.begin(), tag_vendor.end(), tag_vendor.begin(), ::tolower); | ||||||
|  |             std::transform(tag_type.begin(), tag_type.end(), tag_type.begin(), ::tolower); | ||||||
|  |             std::transform(type.begin(), type.end(), type.begin(), ::tolower); | ||||||
|  | 
 | ||||||
|  |             //third party
 | ||||||
|  |             if (vendor == "third party") { | ||||||
|  |                 if ("bambulab" != vendor && tag_type == type) { | ||||||
|  |                     in_blacklist = true; | ||||||
|  |                     ac = action; | ||||||
|  |                     info = description; | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 if (vendor == tag_vendor && tag_type == type) { | ||||||
|  |                     in_blacklist = true; | ||||||
|  |                     ac = action; | ||||||
|  |                     info = description; | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| std::string DeviceManager::load_gcode(std::string type_str, std::string gcode_file) | std::string DeviceManager::load_gcode(std::string type_str, std::string gcode_file) | ||||||
| { | { | ||||||
|     std::string gcode_full_path = Slic3r::resources_dir() + "/printers/" + gcode_file; |     std::string gcode_full_path = Slic3r::resources_dir() + "/printers/" + gcode_file; | ||||||
|  |  | ||||||
|  | @ -826,6 +826,8 @@ public: | ||||||
|     void load_last_machine(); |     void load_last_machine(); | ||||||
| 
 | 
 | ||||||
|     static json function_table; |     static json function_table; | ||||||
|  |     static json filaments_blacklist; | ||||||
|  | 
 | ||||||
|     static std::string parse_printer_type(std::string type_str); |     static std::string parse_printer_type(std::string type_str); | ||||||
|     static std::string get_printer_display_name(std::string type_str); |     static std::string get_printer_display_name(std::string type_str); | ||||||
|     static std::string get_printer_thumbnail_img(std::string type_str); |     static std::string get_printer_thumbnail_img(std::string type_str); | ||||||
|  | @ -834,6 +836,8 @@ public: | ||||||
| 
 | 
 | ||||||
|     static bool get_bed_temperature_limit(std::string type_str, int& limit); |     static bool get_bed_temperature_limit(std::string type_str, int& limit); | ||||||
|     static bool load_functional_config(std::string config_file); |     static bool load_functional_config(std::string config_file); | ||||||
|  |     static bool load_filaments_blacklist_config(std::string config_file); | ||||||
|  |     static void check_filaments_in_blacklist(std::string tag_vendor, std::string tag_type, bool& in_blacklist, std::string& ac, std::string& info); | ||||||
|     static std::string load_gcode(std::string type_str, std::string gcode_file); |     static std::string load_gcode(std::string type_str, std::string gcode_file); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1162,6 +1162,9 @@ void GUI_App::post_init() | ||||||
|     std::string functional_config_file = Slic3r::resources_dir() + "/config.json"; |     std::string functional_config_file = Slic3r::resources_dir() + "/config.json"; | ||||||
|     DeviceManager::load_functional_config(encode_path(functional_config_file.c_str())); |     DeviceManager::load_functional_config(encode_path(functional_config_file.c_str())); | ||||||
| 
 | 
 | ||||||
|  |     std::string filaments_blacklist_config_file = Slic3r::resources_dir() + "/printers/filaments_blacklist.json"; | ||||||
|  |     DeviceManager::load_filaments_blacklist_config(encode_path(filaments_blacklist_config_file.c_str())); | ||||||
|  | 
 | ||||||
|     // remove old log files over LOG_FILES_MAX_NUM
 |     // remove old log files over LOG_FILES_MAX_NUM
 | ||||||
|     std::string log_addr = data_dir(); |     std::string log_addr = data_dir(); | ||||||
|     if (!log_addr.empty()) { |     if (!log_addr.empty()) { | ||||||
|  |  | ||||||
|  | @ -284,6 +284,7 @@ private: | ||||||
|     bool             m_adding_script_handler { false }; |     bool             m_adding_script_handler { false }; | ||||||
|     bool             m_side_popup_status{false}; |     bool             m_side_popup_status{false}; | ||||||
| public: | public: | ||||||
|  |     void            check_filaments_in_blacklist(std::string tag_supplier, std::string tag_material, bool& in_blacklist, std::string& action, std::string& info); | ||||||
|     std::string     get_local_models_path(); |     std::string     get_local_models_path(); | ||||||
|     bool            OnInit() override; |     bool            OnInit() override; | ||||||
|     bool            initialized() const { return m_initialized; } |     bool            initialized() const { return m_initialized; } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 tao wang
						tao wang