mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	ENH:optimize the logic related to the virtual tray
Change-Id: I4d3b78f86191a4f3760d16234006b3aa603dd09e
This commit is contained in:
		
							parent
							
								
									c63326b721
								
							
						
					
					
						commit
						14c5215b48
					
				
					 4 changed files with 99 additions and 77 deletions
				
			
		|  | @ -1962,8 +1962,8 @@ void StatusPanel::update_ams(MachineObject *obj) | |||
|         is_vt_tray = true; | ||||
| 
 | ||||
|     // set segment 1, 2
 | ||||
|     if (m_ams_control->GetCurentAms() != std::to_string(VIRTUAL_TRAY_ID)) { | ||||
|         if (obj->m_tray_now != "255" && obj->is_filament_at_extruder()) { | ||||
|     if (obj->m_tray_now != std::to_string(VIRTUAL_TRAY_ID)) { | ||||
|         if (obj->m_tray_now != "255" && obj->is_filament_at_extruder() && !obj->m_tray_id.empty()) { | ||||
|             m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2); | ||||
|         } | ||||
|         else if (obj->m_tray_now != "255") { | ||||
|  | @ -1977,7 +1977,7 @@ void StatusPanel::update_ams(MachineObject *obj) | |||
|     } | ||||
| 
 | ||||
|     // set segment 3
 | ||||
|     if (m_ams_control->GetCurentAms() == std::to_string(VIRTUAL_TRAY_ID)) { | ||||
|     if (obj->m_tray_now == std::to_string(VIRTUAL_TRAY_ID)) { | ||||
|         m_ams_control->SetExtruder(obj->is_filament_at_extruder(), obj->vt_tray.get_color()); | ||||
|     } else { | ||||
|         m_ams_control->SetExtruder(obj->is_filament_at_extruder(), m_ams_control->GetCanColour(curr_ams_id, obj->m_tray_id)); | ||||
|  | @ -2078,34 +2078,67 @@ void StatusPanel::update_ams(MachineObject *obj) | |||
|         } catch (...) {} | ||||
|     } | ||||
| 
 | ||||
|     update_ams_control_state(curr_ams_id, is_support_extrusion_cali); | ||||
| } | ||||
| 
 | ||||
| void StatusPanel::update_ams_control_state(std::string ams_id, bool is_support_virtual_tray) | ||||
| { | ||||
|     // update load/unload enable state
 | ||||
|     if (obj->is_in_extrusion_cali()) { | ||||
|         m_ams_control->SetActionState(AMSAction::AMS_ACTION_CALI, is_support_virtual_tray); | ||||
|     } | ||||
|     else if (!obj->has_ams()) { | ||||
|         m_ams_control->SetActionState(AMSAction::AMS_ACTION_NOAMS, is_support_virtual_tray); | ||||
|     } | ||||
|     else if (obj->is_in_printing() && !obj->can_resume()) { | ||||
|         m_ams_control->SetActionState(AMSAction::AMS_ACTION_PRINTING, is_support_virtual_tray); | ||||
|     } | ||||
|     else { | ||||
|         if (obj->ams_status_main != AMS_STATUS_MAIN_FILAMENT_CHANGE) { | ||||
|             if (obj->m_tray_now == "255") { | ||||
|                 m_ams_control->SetActionState(AMSAction::AMS_ACTION_LOAD, is_support_virtual_tray); | ||||
|             } | ||||
|             else { | ||||
|                 m_ams_control->SetActionState(AMSAction::AMS_ACTION_NORMAL, is_support_virtual_tray); | ||||
|             } | ||||
|     bool is_curr_tray_selected = false; | ||||
|     if (!curr_ams_id.empty() && !curr_can_id.empty()) { | ||||
|         if (curr_can_id == obj->m_tray_now) { | ||||
|             is_curr_tray_selected = true; | ||||
|         } | ||||
|         else { | ||||
|             m_ams_control->SetActionState(AMSAction::AMS_ACTION_PRINTING, is_support_virtual_tray); | ||||
| 
 | ||||
|             std::map<std::string, Ams*>::iterator it = obj->amsList.find(curr_ams_id); | ||||
|             if (it == obj->amsList.end()) { | ||||
|                 BOOST_LOG_TRIVIAL(trace) << "ams: find " << curr_ams_id << " failed"; | ||||
|                 return; | ||||
|             } | ||||
|             auto tray_it = it->second->trayList.find(curr_can_id); | ||||
|             if (tray_it == it->second->trayList.end()) { | ||||
|                 BOOST_LOG_TRIVIAL(trace) << "ams: find " << curr_can_id << " failed"; | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             if (!tray_it->second->is_exists) { | ||||
|                 is_curr_tray_selected = true; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     else { | ||||
|         is_curr_tray_selected = true; | ||||
|     } | ||||
|          | ||||
|     update_ams_control_state(is_support_extrusion_cali, is_curr_tray_selected); | ||||
| } | ||||
| 
 | ||||
| void StatusPanel::update_ams_control_state(bool is_support_virtual_tray, bool is_curr_tray_selected) | ||||
| { | ||||
|     bool enable[ACTION_BTN_COUNT]; | ||||
| 
 | ||||
|     // set default value to true
 | ||||
| 
 | ||||
|     if (obj->is_in_printing() && !obj->can_resume()) { | ||||
|         enable[ACTION_BTN_LOAD] = false; | ||||
|         enable[ACTION_BTN_UNLOAD] = false; | ||||
|     } | ||||
| 
 | ||||
|     if (!is_support_virtual_tray) { | ||||
|         enable[ACTION_BTN_CALI] = false; | ||||
|     } else { | ||||
|         // update load/unload enable state
 | ||||
|         if (obj->is_in_extrusion_cali()) { | ||||
|             enable[ACTION_BTN_LOAD] = false; | ||||
|             enable[ACTION_BTN_UNLOAD] = false; | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     // select current
 | ||||
|     if (is_curr_tray_selected) { | ||||
|         enable[ACTION_BTN_LOAD] = false; | ||||
|     } | ||||
| 
 | ||||
|     if (obj->m_tray_now == "255") { | ||||
|         enable[ACTION_BTN_UNLOAD] = false; | ||||
|     } | ||||
| 
 | ||||
|     m_ams_control->SetActionState(enable); | ||||
| } | ||||
| 
 | ||||
| void StatusPanel::update_cali(MachineObject *obj) | ||||
|  | @ -2739,12 +2772,27 @@ void StatusPanel::on_ext_spool_edit(wxCommandEvent &event) | |||
|         m_filament_setting_dlg->obj = obj; | ||||
|         try { | ||||
|             m_filament_setting_dlg->tray_id = VIRTUAL_TRAY_ID; | ||||
|             std::string sn_number; | ||||
|             std::string filament; | ||||
|             std::string temp_max; | ||||
|             std::string temp_min; | ||||
|             wxString k_val; | ||||
|             wxString n_val; | ||||
|             k_val = wxString::Format("%.3f", obj->vt_tray.k); | ||||
|             n_val = wxString::Format("%.3f", obj->vt_tray.n); | ||||
|             wxColor color = AmsTray::decode_color(obj->vt_tray.color); | ||||
|             m_filament_setting_dlg->set_color(color); | ||||
|             m_filament_setting_dlg->ams_filament_id = obj->vt_tray.setting_id; | ||||
|             m_filament_setting_dlg->m_is_third = !MachineObject::is_bbl_filament(obj->vt_tray.tag_uid); | ||||
|             if (!m_filament_setting_dlg->m_is_third) { | ||||
|                 sn_number = obj->vt_tray.uuid; | ||||
|                 filament = obj->vt_tray.sub_brands; | ||||
|                 temp_max = obj->vt_tray.nozzle_temp_max; | ||||
|                 temp_min = obj->vt_tray.nozzle_temp_min; | ||||
|             } | ||||
| 
 | ||||
|             m_filament_setting_dlg->SetPosition(m_ams_control->GetScreenPosition()); | ||||
|             m_filament_setting_dlg->Popup(wxEmptyString, wxEmptyString, wxEmptyString, wxEmptyString, k_val, n_val); | ||||
|             m_filament_setting_dlg->Popup(filament, sn_number, temp_min, temp_max, k_val, n_val); | ||||
|         } | ||||
|         catch (...) { | ||||
|             ; | ||||
|  | @ -2798,7 +2846,7 @@ void StatusPanel::on_ams_selected(wxCommandEvent &event) | |||
|     if (obj) { | ||||
|         std::string curr_ams_id = m_ams_control->GetCurentAms(); | ||||
|         if (curr_ams_id.compare(std::to_string(VIRTUAL_TRAY_ID)) == 0) { | ||||
|             update_ams_control_state(curr_ams_id, true); | ||||
|             //update_ams_control_state(curr_ams_id, true);
 | ||||
|             return; | ||||
|         } else { | ||||
|             std::string curr_can_id = event.GetString().ToStdString(); | ||||
|  | @ -2818,7 +2866,7 @@ void StatusPanel::on_ams_selected(wxCommandEvent &event) | |||
|             } catch (...) { | ||||
|                 ; | ||||
|             } | ||||
|             update_ams_control_state(curr_ams_id, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)); | ||||
|             //update_ams_control_state(curr_ams_id, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI));
 | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -383,7 +383,7 @@ protected: | |||
|     void update_misc_ctrl(MachineObject *obj); | ||||
|     void update_ams(MachineObject* obj); | ||||
|     void update_extruder_status(MachineObject* obj); | ||||
|     void update_ams_control_state(std::string ams_id, bool is_support_virtual_tray); | ||||
|     void update_ams_control_state(bool is_support_virtual_tray, bool is_curr_tray_selected); | ||||
|     void update_cali(MachineObject* obj); | ||||
| 
 | ||||
|     void reset_printing_values(); | ||||
|  |  | |||
|  | @ -1471,11 +1471,10 @@ void AmsCans::PlayRridLoading(wxString canid) | |||
| 
 | ||||
| std::string AmsCans::GetCurrentCan() | ||||
| { | ||||
|     if (m_canlib_selection > -1 && m_canlib_selection < m_can_lib_list.size()) { | ||||
|         CanLibs *lib = m_can_lib_list[m_canlib_selection]; | ||||
|         return lib->canLib->m_info.can_id; | ||||
|     } | ||||
|     return ""; | ||||
|     if (m_canlib_selection < 0) | ||||
|         return ""; | ||||
| 
 | ||||
|     return wxString::Format("%d", m_canlib_selection).ToStdString(); | ||||
| } | ||||
| 
 | ||||
| void AmsCans::StopRridLoading(wxString canid) | ||||
|  | @ -2028,48 +2027,16 @@ wxColour AMSControl::GetCanColour(std::string amsid, std::string canid) | |||
|     return col; | ||||
| } | ||||
| 
 | ||||
| void AMSControl::SetActionState(AMSAction action, bool support_virtual_tray) | ||||
| void AMSControl::SetActionState(bool button_status[]) | ||||
| { | ||||
|     m_button_area->Layout(); | ||||
|     m_button_area->Fit(); | ||||
|     if (button_status[ActionButton::ACTION_BTN_CALI]) m_button_extrusion_cali->Enable(); | ||||
|     else m_button_extrusion_cali->Disable(); | ||||
| 
 | ||||
|     switch (action) { | ||||
|     case Slic3r::GUI::AMSAction::AMS_ACTION_NONE: break; | ||||
|     case Slic3r::GUI::AMSAction::AMS_ACTION_LOAD:  | ||||
|         m_button_extrusion_cali->Enable(); | ||||
|         m_button_extruder_feed->Enable(); | ||||
|         m_button_extruder_back->Disable(); | ||||
|         break; | ||||
|     case Slic3r::GUI::AMSAction::AMS_ACTION_UNLOAD:  | ||||
|         m_button_extrusion_cali->Enable(); | ||||
|         m_button_extruder_feed->Disable(); | ||||
|         m_button_extruder_back->Enable(); | ||||
|         break; | ||||
|     case Slic3r::GUI::AMSAction::AMS_ACTION_PRINTING:  | ||||
|         m_button_extrusion_cali->Disable(); | ||||
|         m_button_extruder_feed->Disable(); | ||||
|         m_button_extruder_back->Disable(); | ||||
|         break; | ||||
|     case Slic3r::GUI::AMSAction::AMS_ACTION_NORMAL: | ||||
|         m_button_extrusion_cali->Enable(); | ||||
|         m_button_extruder_feed->Enable(); | ||||
|         m_button_extruder_back->Enable(); | ||||
|         break; | ||||
|     case Slic3r::GUI::AMSAction::AMS_ACTION_CALI: | ||||
|         m_button_extrusion_cali->Enable(); | ||||
|         m_button_extruder_feed->Disable(); | ||||
|         m_button_extruder_back->Disable(); | ||||
|         break;  | ||||
|     case Slic3r::GUI::AMSAction::AMS_ACTION_NOAMS: | ||||
|         if (support_virtual_tray) | ||||
|             m_button_extrusion_cali->Enable(); | ||||
|         else | ||||
|             m_button_extrusion_cali->Disable(); | ||||
|         m_button_extruder_feed->Enable(); | ||||
|         m_button_extruder_back->Enable(); | ||||
|         break; | ||||
|     default: break; | ||||
|     } | ||||
|     if (button_status[ActionButton::ACTION_BTN_LOAD]) m_button_extruder_feed->Enable(); | ||||
|     else m_button_extruder_feed->Disable(); | ||||
| 
 | ||||
|     if (button_status[ActionButton::ACTION_BTN_UNLOAD]) m_button_extruder_back->Enable(); | ||||
|     else m_button_extruder_back->Disable(); | ||||
| } | ||||
| 
 | ||||
| void AMSControl::EnterNoneAMSMode(bool support_vt_load) | ||||
|  |  | |||
|  | @ -35,6 +35,13 @@ | |||
| 
 | ||||
| namespace Slic3r { namespace GUI { | ||||
| 
 | ||||
| enum ActionButton { | ||||
|     ACTION_BTN_CALI     = 0, | ||||
|     ACTION_BTN_LOAD     = 1, | ||||
|     ACTION_BTN_UNLOAD   = 2, | ||||
|     ACTION_BTN_COUNT    = 3 | ||||
| }; | ||||
| 
 | ||||
| enum class AMSRoadMode : int { | ||||
|     AMS_ROAD_MODE_LEFT, | ||||
|     AMS_ROAD_MODE_LEFT_RIGHT, | ||||
|  | @ -524,7 +531,7 @@ public: | |||
| 	wxColour GetCanColour(std::string amsid, std::string canid); | ||||
| 
 | ||||
|     bool m_is_none_ams_mode{false}; | ||||
| 	void SetActionState(AMSAction action, bool support_virtual_tray = true); | ||||
| 	void SetActionState(bool button_status[]); | ||||
|     void EnterNoneAMSMode(bool support_vt_load = false); | ||||
|     void ExitNoneAMSMode(); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 tao wang
						tao wang