Make sure codes uses same structure/naming/position as BambuStudio

for easier code comparasion & porting in the future
This commit is contained in:
Noisyfox
2026-07-07 16:34:35 +08:00
parent 0e20f60712
commit f713c7ae49
9 changed files with 111 additions and 78 deletions

View File

@@ -3781,6 +3781,26 @@ void PresetCollection::set_custom_preset_alias(Preset &preset)
set_printer_hold_alias(preset.alias, preset); set_printer_hold_alias(preset.alias, preset);
} }
std::string PresetCollection::get_preset_alias(Preset &preset, bool force)
{
if (!preset.alias.empty())
return preset.alias;
else
set_custom_preset_alias(preset);
if (!preset.alias.empty() || !force)
return preset.alias;
std::string alias_name;
std::string preset_name = preset.name;
size_t end_pos = preset_name.find_first_of("@");
if (end_pos != std::string::npos) {
alias_name = preset_name.substr(0, end_pos);
boost::trim_right(alias_name);
}
return alias_name;
}
void PresetCollection::set_printer_hold_alias(const std::string &alias, Preset &preset, bool remove) void PresetCollection::set_printer_hold_alias(const std::string &alias, Preset &preset, bool remove)
{ {
auto compatible_printers = dynamic_cast<ConfigOptionStrings *>(preset.config.option("compatible_printers")); auto compatible_printers = dynamic_cast<ConfigOptionStrings *>(preset.config.option("compatible_printers"));

View File

@@ -803,6 +803,9 @@ public:
std::string path_from_name(const std::string &new_name, bool detach = false) const; std::string path_from_name(const std::string &new_name, bool detach = false) const;
std::string path_for_preset(const Preset & preset) const; std::string path_for_preset(const Preset & preset) const;
// Get the alias of a preset, setting it if it's empty
std::string get_preset_alias(Preset &preset, bool force = false);
size_t num_default_presets() { return m_num_default_presets; } size_t num_default_presets() { return m_num_default_presets; }
protected: protected:

View File

@@ -1615,7 +1615,7 @@ int AMSDryCtrWin::update_filament_list(DevAms* dev_ams, MachineObject* obj)
} }
filament_id_set.insert(filament_it->filament_id); filament_id_set.insert(filament_it->filament_id);
auto filament_alias = filament_it->alias; auto filament_alias = filaments.get_preset_alias(*filament_it, true);
if (!filament_alias.empty()) { if (!filament_alias.empty()) {
auto opt_info = preset_bundle->get_filament_by_filament_id(filament_it->filament_id); auto opt_info = preset_bundle->get_filament_by_filament_id(filament_it->filament_id);
if (opt_info.has_value()) { if (opt_info.has_value()) {

View File

@@ -99,8 +99,7 @@ std::string DevAmsTray::get_filament_type()
return m_fila_type; return m_fila_type;
} }
std::optional<Slic3r::DevFilamentDryingPreset> DevAmsTray::get_ams_drying_preset() const
std::optional<DevFilamentDryingPreset> DevAmsTray::get_ams_drying_preset() const
{ {
return DevUtilBackend::GetFilamentDryingPreset(setting_id); return DevUtilBackend::GetFilamentDryingPreset(setting_id);
} }
@@ -454,32 +453,17 @@ void DevFilaSystemParser::ParseV1_0(const json& jj, MachineObject* obj, DevFilaS
; ;
} }
if (it->contains("dry_time") && (*it)["dry_time"].is_number())
if (it->contains("temp"))
{ {
curr_ams->m_left_dry_time = (*it)["dry_time"].get<int>(); std::string temp = (*it)["temp"].get<std::string>();
} try
{
// Drying status — only parse if printer supports remote drying curr_ams->m_current_temperature = DevUtil::string_to_float(temp);
if (obj->is_support_remote_dry) {
if (it->contains("info")) {
const std::string& info = (*it)["info"].get<std::string>();
curr_ams->m_dry_status = (DevAms::DryStatus)DevUtil::get_flag_bits(info, 4, 4);
curr_ams->m_dry_fan1_status = (DevAms::DryFanStatus)DevUtil::get_flag_bits(info, 18, 2);
curr_ams->m_dry_fan2_status = (DevAms::DryFanStatus)DevUtil::get_flag_bits(info, 20, 2);
curr_ams->m_dry_sub_status = (DevAms::DrySubStatus)DevUtil::get_flag_bits(info, 22, 2);
} }
catch (...)
if (it->contains("dry_setting")) { {
const auto& j_dry_settings = (*it)["dry_setting"]; curr_ams->m_current_temperature = INVALID_AMS_TEMPERATURE;
DevAms::DrySettings dry_settings;
DevJsonValParser::ParseVal(j_dry_settings, "dry_filament", dry_settings.dry_filament);
DevJsonValParser::ParseVal(j_dry_settings, "dry_temperature", dry_settings.dry_temp);
DevJsonValParser::ParseVal(j_dry_settings, "dry_duration", dry_settings.dry_hour);
curr_ams->m_dry_settings = dry_settings;
}
if (it->contains("dry_sf_reason")) {
curr_ams->m_dry_cannot_reasons = DevJsonValParser::GetVal<std::vector<DevAms::CannotDryReason>>((*it), "dry_sf_reason");
} }
} }
@@ -509,17 +493,32 @@ void DevFilaSystemParser::ParseV1_0(const json& jj, MachineObject* obj, DevFilaS
} }
} }
if (it->contains("dry_time") && (*it)["dry_time"].is_number())
if (it->contains("temp"))
{ {
std::string temp = (*it)["temp"].get<std::string>(); curr_ams->m_left_dry_time = (*it)["dry_time"].get<int>();
try }
{
curr_ams->m_current_temperature = DevUtil::string_to_float(temp); // Drying status — only parse if printer supports remote drying
if (obj->is_support_remote_dry) {
if (it->contains("info")) {
const std::string& info = (*it)["info"].get<std::string>();
curr_ams->m_dry_status = (DevAms::DryStatus)DevUtil::get_flag_bits(info, 4, 4);
curr_ams->m_dry_fan1_status = (DevAms::DryFanStatus)DevUtil::get_flag_bits(info, 18, 2);
curr_ams->m_dry_fan2_status = (DevAms::DryFanStatus)DevUtil::get_flag_bits(info, 20, 2);
curr_ams->m_dry_sub_status = (DevAms::DrySubStatus)DevUtil::get_flag_bits(info, 22, 2);
} }
catch (...)
{ if (it->contains("dry_setting")) {
curr_ams->m_current_temperature = INVALID_AMS_TEMPERATURE; const auto& j_dry_settings = (*it)["dry_setting"];
DevAms::DrySettings dry_settings;
DevJsonValParser::ParseVal(j_dry_settings, "dry_filament", dry_settings.dry_filament);
DevJsonValParser::ParseVal(j_dry_settings, "dry_temperature", dry_settings.dry_temp);
DevJsonValParser::ParseVal(j_dry_settings, "dry_duration", dry_settings.dry_hour);
curr_ams->m_dry_settings = dry_settings;
}
if (it->contains("dry_sf_reason")) {
curr_ams->m_dry_cannot_reasons = DevJsonValParser::GetVal<std::vector<DevAms::CannotDryReason>>((*it), "dry_sf_reason");
} }
} }

View File

@@ -104,10 +104,11 @@ public:
std::string get_display_filament_type() const; std::string get_display_filament_type() const;
std::string get_filament_type(); std::string get_filament_type();
std::optional<DevFilamentDryingPreset> get_ams_drying_preset() const;
// static // static
static wxColour decode_color(const std::string& color); static wxColour decode_color(const std::string& color);
std::optional<DevFilamentDryingPreset> get_ams_drying_preset() const;
}; };
/** /**
@@ -228,7 +229,7 @@ public:
int GetHumidityLevel() const { return m_humidity_level; } int GetHumidityLevel() const { return m_humidity_level; }
int GetHumidityPercent() const { return m_humidity_percent; } int GetHumidityPercent() const { return m_humidity_percent; }
bool SupportDrying() const { return m_ams_type == N3F || m_ams_type == N3S; } bool SupportDrying() const { return m_ams_type == DevAmsType::N3F || m_ams_type == DevAmsType::N3S; }
int GetLeftDryTime() const { return m_left_dry_time; } int GetLeftDryTime() const { return m_left_dry_time; }
// remote drying control // remote drying control
@@ -333,6 +334,8 @@ public:
public: public:
// ctrls // ctrls
int CtrlAmsReset() const; int CtrlAmsReset() const;
// crtl
int CtrlAmsStartDryingHour(int ams_id, std::string filament_type, int tag_temp, int tag_duration_hour, bool rotate_tray, int cooling_temp, bool close_power_conflict = false) const; int CtrlAmsStartDryingHour(int ams_id, std::string filament_type, int tag_temp, int tag_duration_hour, bool rotate_tray, int cooling_temp, bool close_power_conflict = false) const;
int CtrlAmsStopDrying(int ams_id) const; int CtrlAmsStopDrying(int ams_id) const;

View File

@@ -254,7 +254,6 @@ public:
bool is_tunnel_mqtt = false; bool is_tunnel_mqtt = false;
//AmsTray vt_tray; // virtual tray //AmsTray vt_tray; // virtual tray
bool is_support_remote_dry = false;
long ams_exist_bits = 0; long ams_exist_bits = 0;
long tray_exist_bits = 0; long tray_exist_bits = 0;
long tray_is_bbl_bits = 0; long tray_is_bbl_bits = 0;
@@ -621,6 +620,7 @@ public:
// fun2 // fun2
bool is_support_print_with_emmc{false}; bool is_support_print_with_emmc{false};
bool is_support_remote_dry = false;
bool installed_upgrade_kit{false}; bool installed_upgrade_kit{false};
int bed_temperature_limit = -1; int bed_temperature_limit = -1;

View File

@@ -3334,6 +3334,7 @@ void StatusPanel::update_ams(MachineObject *obj)
// must select a current can // must select a current can
m_ams_control->UpdateAms(obj->get_printer_series_str(), obj->printer_type, ams_info, ext_info, *obj->GetExtderSystem(), obj->get_dev_id(), false); m_ams_control->UpdateAms(obj->get_printer_series_str(), obj->printer_type, ams_info, ext_info, *obj->GetExtderSystem(), obj->get_dev_id(), false);
m_ams_control->UpdateAmsDryControl(obj);
last_tray_exist_bits = obj->tray_exist_bits; last_tray_exist_bits = obj->tray_exist_bits;
last_ams_exist_bits = obj->ams_exist_bits; last_ams_exist_bits = obj->ams_exist_bits;

View File

@@ -6,7 +6,6 @@
#include "slic3r/GUI/MsgDialog.hpp" #include "slic3r/GUI/MsgDialog.hpp"
#include "slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h" #include "slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h"
#include "slic3r/GUI/AMSDryControl.hpp"
#include "slic3r/GUI/DeviceCore/DevManager.h" #include "slic3r/GUI/DeviceCore/DevManager.h"
#include "slic3r/GUI/DeviceCore/DevFilaSystem.h" #include "slic3r/GUI/DeviceCore/DevFilaSystem.h"
@@ -30,6 +29,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
, m_Humidity_tip_popup(AmsHumidityTipPopup(this)) , m_Humidity_tip_popup(AmsHumidityTipPopup(this))
, m_percent_humidity_dry_popup(new uiAmsPercentHumidityDryPopup(this)) , m_percent_humidity_dry_popup(new uiAmsPercentHumidityDryPopup(this))
, m_ams_introduce_popup(AmsIntroducePopup(this)) , m_ams_introduce_popup(AmsIntroducePopup(this))
, m_ams_dry_ctr_win(new AMSDryCtrWin(this))
{ {
Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (dev) { if (dev) {
@@ -245,6 +245,12 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
uiAmsHumidityInfo *info = (uiAmsHumidityInfo *) evt.GetClientData(); uiAmsHumidityInfo *info = (uiAmsHumidityInfo *) evt.GetClientData();
if (info) if (info)
{ {
Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
MachineObject *obj = nullptr;
if (dev) {
obj = dev->get_selected_machine();
}
if (info->ams_type == AMSModel::GENERIC_AMS) if (info->ams_type == AMSModel::GENERIC_AMS)
{ {
wxPoint img_pos = ClientToScreen(wxPoint(0, 0)); wxPoint img_pos = ClientToScreen(wxPoint(0, 0));
@@ -254,27 +260,14 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
int humidity_value = info->humidity_display_idx; int humidity_value = info->humidity_display_idx;
if (humidity_value > 0 && humidity_value <= 5) { m_Humidity_tip_popup.set_humidity_level(humidity_value); } if (humidity_value > 0 && humidity_value <= 5) { m_Humidity_tip_popup.set_humidity_level(humidity_value); }
m_Humidity_tip_popup.Popup(); m_Humidity_tip_popup.Popup();
} } else if (obj && obj->is_support_remote_dry && (info->ams_type == AMSModel::N3F_AMS || info->ams_type == AMSModel::N3S_AMS)){
else if (info->ams_type == AMSModel::N3F_AMS || info->ams_type == AMSModel::N3S_AMS) m_ams_dry_ctr_win->set_ams_id(info->ams_id);
{
// Open full drying control dialog for N3F/N3S AMS
if (!m_dry_ctr_win) {
m_dry_ctr_win = new AMSDryCtrWin(this);
}
m_dry_ctr_win->set_ams_id(info->ams_id);
Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); wxPoint img_pos = ClientToScreen(wxPoint(0, 0));
if (dev) { wxPoint popup_pos(img_pos.x - m_ams_dry_ctr_win->GetSize().GetWidth() + FromDIP(150), img_pos.y - FromDIP(80));
MachineObject *obj = dev->get_selected_machine(); m_ams_dry_ctr_win->Move(popup_pos);
if (obj && obj->GetFilaSystem()) { m_ams_dry_ctr_win->ShowModal();
std::shared_ptr<DevFilaSystem> fila_ptr(obj->GetFilaSystem(), [](DevFilaSystem*){}); } else {
m_dry_ctr_win->update(fila_ptr, obj);
}
}
m_dry_ctr_win->ShowModal();
}
else
{
m_percent_humidity_dry_popup->Update(info); m_percent_humidity_dry_popup->Update(info);
wxPoint img_pos = ClientToScreen(wxPoint(0, 0)); wxPoint img_pos = ClientToScreen(wxPoint(0, 0));
@@ -294,7 +287,12 @@ void AMSControl::on_retry()
post_event(wxCommandEvent(EVT_AMS_RETRY)); post_event(wxCommandEvent(EVT_AMS_RETRY));
} }
AMSControl::~AMSControl() {} AMSControl::~AMSControl()
{
if (m_ams_dry_ctr_win) {
delete m_ams_dry_ctr_win;
}
}
std::string AMSControl::GetCurentAms() { std::string AMSControl::GetCurentAms() {
return m_current_ams; return m_current_ams;
@@ -512,8 +510,8 @@ void AMSControl::msw_rescale()
m_percent_humidity_dry_popup->msw_rescale(); m_percent_humidity_dry_popup->msw_rescale();
} }
if (m_dry_ctr_win){ if (m_ams_dry_ctr_win) {
m_dry_ctr_win->msw_rescale(); m_ams_dry_ctr_win->msw_rescale();
} }
m_Humidity_tip_popup.msw_rescale(); m_Humidity_tip_popup.msw_rescale();
@@ -839,6 +837,27 @@ void AMSControl::show_vams_kn_value(bool show)
//m_vams_lib->show_kn_value(show); //m_vams_lib->show_kn_value(show);
} }
void AMSControl::UpdateAmsDryControl(MachineObject* obj)
{
if (!m_ams_dry_ctr_win->IsShown()) {
return;
}
if (!obj || !obj->GetFilaSystem()) {
m_ams_dry_ctr_win->Close();
return;
}
std::weak_ptr<DevFilaSystem> weak_fila_system = obj->GetFilaSystem();
if (auto locaked_fila_system = weak_fila_system.lock()) {
m_ams_dry_ctr_win->update(locaked_fila_system, obj);
} else {
m_ams_dry_ctr_win->Close();
return;
}
}
std::vector<AMSinfo> AMSControl::GenerateSimulateData() { std::vector<AMSinfo> AMSControl::GenerateSimulateData() {
auto caninfo0_0 = Caninfo{ "0", (""), *wxRED, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo0_0 = Caninfo{ "0", (""), *wxRED, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
auto caninfo0_1 = Caninfo{ "1", (""), *wxGREEN, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo0_1 = Caninfo{ "1", (""), *wxGREEN, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
@@ -993,19 +1012,6 @@ void AMSControl::UpdateAms(const std::string &series_name,
} }
} }
/*update AMS dry control dialog*/
if (m_dry_ctr_win && m_dry_ctr_win->IsShown())
{
Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (dev) {
MachineObject *obj = dev->get_selected_machine();
if (obj && obj->GetFilaSystem()) {
std::shared_ptr<DevFilaSystem> fila_ptr(obj->GetFilaSystem(), [](DevFilaSystem*){});
m_dry_ctr_win->update(fila_ptr, obj);
}
}
}
/*update ams extruder*/ /*update ams extruder*/
if (m_extruder->updateNozzleNum(m_total_ext_count, series_name)) if (m_extruder->updateNozzleNum(m_total_ext_count, series_name))
{ {

View File

@@ -15,13 +15,13 @@
#include <wx/dynarray.h> #include <wx/dynarray.h>
#include "slic3r/GUI/DeviceCore/DevExtruderSystem.h" #include "slic3r/GUI/DeviceCore/DevExtruderSystem.h"
#include "slic3r/GUI/AMSDryControl.hpp"
namespace Slic3r { namespace GUI { namespace Slic3r { namespace GUI {
//Previous definitions //Previous definitions
class uiAmsPercentHumidityDryPopup; class uiAmsPercentHumidityDryPopup;
class AMSDryCtrWin;
class AMSControl : public wxSimplebook class AMSControl : public wxSimplebook
{ {
@@ -119,7 +119,7 @@ protected:
AmsHumidityTipPopup m_Humidity_tip_popup; AmsHumidityTipPopup m_Humidity_tip_popup;
uiAmsPercentHumidityDryPopup* m_percent_humidity_dry_popup; uiAmsPercentHumidityDryPopup* m_percent_humidity_dry_popup;
AMSDryCtrWin* m_dry_ctr_win{nullptr}; AMSDryCtrWin* m_ams_dry_ctr_win;
std::string m_last_ams_id = ""; std::string m_last_ams_id = "";
std::string m_last_tray_id = ""; std::string m_last_tray_id = "";
@@ -158,6 +158,7 @@ public:
void CreateAmsDoubleNozzle(const std::string &series_name, const std::string& printer_type); void CreateAmsDoubleNozzle(const std::string &series_name, const std::string& printer_type);
void CreateAmsSingleNozzle(const std::string &series_name, const std::string &printer_type); void CreateAmsSingleNozzle(const std::string &series_name, const std::string &printer_type);
void ClearAms(); void ClearAms();
void UpdateAmsDryControl(MachineObject* obj);
void UpdateAms(const std::string &series_name, void UpdateAms(const std::string &series_name,
const std::string &printer_type, const std::string &printer_type,
std::vector<AMSinfo> ams_info, std::vector<AMSinfo> ams_info,