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);
}
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)
{
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_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; }
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);
auto filament_alias = filament_it->alias;
auto filament_alias = filaments.get_preset_alias(*filament_it, true);
if (!filament_alias.empty()) {
auto opt_info = preset_bundle->get_filament_by_filament_id(filament_it->filament_id);
if (opt_info.has_value()) {

View File

@@ -99,8 +99,7 @@ std::string DevAmsTray::get_filament_type()
return m_fila_type;
}
std::optional<DevFilamentDryingPreset> DevAmsTray::get_ams_drying_preset() const
std::optional<Slic3r::DevFilamentDryingPreset> DevAmsTray::get_ams_drying_preset() const
{
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>();
}
// 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);
std::string temp = (*it)["temp"].get<std::string>();
try
{
curr_ams->m_current_temperature = DevUtil::string_to_float(temp);
}
if (it->contains("dry_setting")) {
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");
catch (...)
{
curr_ams->m_current_temperature = INVALID_AMS_TEMPERATURE;
}
}
@@ -509,17 +493,32 @@ void DevFilaSystemParser::ParseV1_0(const json& jj, MachineObject* obj, DevFilaS
}
}
if (it->contains("temp"))
if (it->contains("dry_time") && (*it)["dry_time"].is_number())
{
std::string temp = (*it)["temp"].get<std::string>();
try
{
curr_ams->m_current_temperature = DevUtil::string_to_float(temp);
curr_ams->m_left_dry_time = (*it)["dry_time"].get<int>();
}
// 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 (...)
{
curr_ams->m_current_temperature = INVALID_AMS_TEMPERATURE;
if (it->contains("dry_setting")) {
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_filament_type();
std::optional<DevFilamentDryingPreset> get_ams_drying_preset() const;
// static
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 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; }
// remote drying control
@@ -333,6 +334,8 @@ public:
public:
// ctrls
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 CtrlAmsStopDrying(int ams_id) const;

View File

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

View File

@@ -3334,6 +3334,7 @@ void StatusPanel::update_ams(MachineObject *obj)
// 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->UpdateAmsDryControl(obj);
last_tray_exist_bits = obj->tray_exist_bits;
last_ams_exist_bits = obj->ams_exist_bits;

View File

@@ -6,7 +6,6 @@
#include "slic3r/GUI/MsgDialog.hpp"
#include "slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h"
#include "slic3r/GUI/AMSDryControl.hpp"
#include "slic3r/GUI/DeviceCore/DevManager.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_percent_humidity_dry_popup(new uiAmsPercentHumidityDryPopup(this))
, m_ams_introduce_popup(AmsIntroducePopup(this))
, m_ams_dry_ctr_win(new AMSDryCtrWin(this))
{
Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (dev) {
@@ -245,6 +245,12 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
uiAmsHumidityInfo *info = (uiAmsHumidityInfo *) evt.GetClientData();
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)
{
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;
if (humidity_value > 0 && humidity_value <= 5) { m_Humidity_tip_popup.set_humidity_level(humidity_value); }
m_Humidity_tip_popup.Popup();
}
else if (info->ams_type == AMSModel::N3F_AMS || info->ams_type == AMSModel::N3S_AMS)
{
// 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);
} else if (obj && obj->is_support_remote_dry && (info->ams_type == AMSModel::N3F_AMS || info->ams_type == AMSModel::N3S_AMS)){
m_ams_dry_ctr_win->set_ams_id(info->ams_id);
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);
}
}
m_dry_ctr_win->ShowModal();
}
else
{
wxPoint img_pos = ClientToScreen(wxPoint(0, 0));
wxPoint popup_pos(img_pos.x - m_ams_dry_ctr_win->GetSize().GetWidth() + FromDIP(150), img_pos.y - FromDIP(80));
m_ams_dry_ctr_win->Move(popup_pos);
m_ams_dry_ctr_win->ShowModal();
} else {
m_percent_humidity_dry_popup->Update(info);
wxPoint img_pos = ClientToScreen(wxPoint(0, 0));
@@ -294,7 +287,12 @@ void AMSControl::on_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() {
return m_current_ams;
@@ -512,8 +510,8 @@ void AMSControl::msw_rescale()
m_percent_humidity_dry_popup->msw_rescale();
}
if (m_dry_ctr_win){
m_dry_ctr_win->msw_rescale();
if (m_ams_dry_ctr_win) {
m_ams_dry_ctr_win->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);
}
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() {
auto caninfo0_0 = Caninfo{ "0", (""), *wxRED, 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*/
if (m_extruder->updateNozzleNum(m_total_ext_count, series_name))
{

View File

@@ -15,13 +15,13 @@
#include <wx/dynarray.h>
#include "slic3r/GUI/DeviceCore/DevExtruderSystem.h"
#include "slic3r/GUI/AMSDryControl.hpp"
namespace Slic3r { namespace GUI {
//Previous definitions
class uiAmsPercentHumidityDryPopup;
class AMSDryCtrWin;
class AMSControl : public wxSimplebook
{
@@ -119,7 +119,7 @@ protected:
AmsHumidityTipPopup m_Humidity_tip_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_tray_id = "";
@@ -158,6 +158,7 @@ public:
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 ClearAms();
void UpdateAmsDryControl(MachineObject* obj);
void UpdateAms(const std::string &series_name,
const std::string &printer_type,
std::vector<AMSinfo> ams_info,