ENH: calibration
1.fix some issue: STUDIO-3127、STUDIO-3138、STUDIO-3135、STUDIO-3123、STUDIO-3117、STUDIO-3115、STUDIO-3114、STUDIO-3113、STUDIO-3112 and other issues 2.refine UI 3.FLOW RATE multi-slots calibrate saving related logic 4.add input validate and access protection Change-Id: Ie6c04fdfd050cc48607182bd8cc8f145381a5b70
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
BIN
resources/images/flow_rate_calibration_fine.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
resources/images/max_volumetric_speed_calibration.png
Normal file
After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 194 KiB After Width: | Height: | Size: 194 KiB |
Before Width: | Height: | Size: 536 KiB After Width: | Height: | Size: 536 KiB |
@ -2,7 +2,9 @@
|
||||
#include "I18N.hpp"
|
||||
|
||||
namespace Slic3r { namespace GUI {
|
||||
|
||||
#define REFRESH_INTERVAL 1000
|
||||
|
||||
CalibrationPanel::CalibrationPanel(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style)
|
||||
: wxPanel(parent, id, pos, size, style)
|
||||
{
|
||||
@ -39,6 +41,15 @@ void CalibrationPanel::init_tabpanel() {
|
||||
|
||||
m_temp_panel = new TemperatureWizard(m_tabpanel);
|
||||
m_tabpanel->AddPage(m_temp_panel, _L("Temperature"), "", false);
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
m_tabpanel->SetPageImage(i, "");
|
||||
|
||||
m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [this](wxBookCtrlEvent&) {
|
||||
wxCommandEvent e (EVT_CALIBRATION_TAB_CHANGED);
|
||||
e.SetEventObject(m_tabpanel->GetCurrentPage());
|
||||
wxPostEvent(m_tabpanel->GetCurrentPage(), e);
|
||||
}, m_tabpanel->GetId());
|
||||
}
|
||||
|
||||
void CalibrationPanel::init_timer()
|
||||
@ -54,19 +65,19 @@ void CalibrationPanel::on_timer(wxTimerEvent& event) {
|
||||
}
|
||||
|
||||
void CalibrationPanel::update_all() {
|
||||
if (m_pa_panel) {
|
||||
if (m_pa_panel && m_pa_panel->IsShown()) {
|
||||
m_pa_panel->update_printer_selections();
|
||||
m_pa_panel->update_print_progress();
|
||||
}
|
||||
if (m_flow_panel) {
|
||||
if (m_flow_panel && m_flow_panel->IsShown()) {
|
||||
m_flow_panel->update_printer_selections();
|
||||
m_flow_panel->update_print_progress();
|
||||
}
|
||||
if (m_volumetric_panel) {
|
||||
if (m_volumetric_panel && m_volumetric_panel->IsShown()) {
|
||||
m_volumetric_panel->update_printer_selections();
|
||||
m_volumetric_panel->update_print_progress();
|
||||
}
|
||||
if (m_temp_panel) {
|
||||
if (m_temp_panel && m_temp_panel->IsShown()) {
|
||||
m_temp_panel->update_printer_selections();
|
||||
m_temp_panel->update_print_progress();
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ namespace Slic3r { namespace GUI {
|
||||
|
||||
wxDECLARE_EVENT(EVT_CALIBRATION_TRAY_SELECTION_CHANGED, SimpleEvent);
|
||||
wxDECLARE_EVENT(EVT_CALIBRATION_NOTIFY_CHANGE_PAGES, SimpleEvent);
|
||||
wxDECLARE_EVENT(EVT_CALIBRATION_TAB_CHANGED, wxCommandEvent);
|
||||
|
||||
enum FilamentSelectMode {
|
||||
FSMCheckBoxMode,
|
||||
@ -32,6 +33,7 @@ public:
|
||||
void load_tray_from_ams(int id, DynamicPrintConfig& tray);
|
||||
void update_from_preset();
|
||||
int get_tray_id() { return m_tray_id; }
|
||||
bool is_bbl_filament() { return m_is_bbl_filamnet; }
|
||||
std::string get_tray_name() { return m_tray_name; }
|
||||
CalibrateFilamentComboBox* GetComboBox() { return m_comboBox; }
|
||||
CheckBox* GetCheckBox() { return m_checkBox; }
|
||||
@ -45,6 +47,7 @@ public:
|
||||
protected:
|
||||
int m_tray_id;
|
||||
std::string m_tray_name;
|
||||
bool m_is_bbl_filamnet{ false };
|
||||
|
||||
CheckBox* m_checkBox{nullptr};
|
||||
//RadioBox* m_radioBox;
|
||||
@ -73,6 +76,7 @@ protected:
|
||||
virtual bool save_calibration_result() = 0;
|
||||
virtual bool recommend_input_value();
|
||||
virtual void request_calib_result() {};
|
||||
virtual void change_ams_select_mode() {};
|
||||
|
||||
protected:
|
||||
MachineObject* curr_obj{ nullptr };
|
||||
@ -122,6 +126,8 @@ protected:
|
||||
|
||||
// print panel
|
||||
wxPanel* m_print_panel;
|
||||
wxStaticText* m_staticText_profile_value;
|
||||
wxStaticText* m_printing_stage_value;
|
||||
wxStaticText* m_staticText_progress_percent;
|
||||
wxStaticText* m_staticText_progress_left_time;
|
||||
wxStaticText* m_staticText_layers;
|
||||
@ -132,21 +138,28 @@ protected:
|
||||
PageButton* m_btn_recali;
|
||||
|
||||
// save panel
|
||||
//wxPanel* m_save_panel;
|
||||
wxPanel* m_save_panel;
|
||||
|
||||
|
||||
void add_presets_panel_to_page(CalibrationWizardPage* page, wxBoxSizer* sizer);
|
||||
void add_print_panel_to_page(CalibrationWizardPage* page, wxBoxSizer* sizer);
|
||||
void add_send_progress_to_page(CalibrationWizardPage* page, wxBoxSizer* sizer);
|
||||
|
||||
void reset_printing_values();
|
||||
bool save_presets(const std::string& config_key, ConfigOption* config_value);
|
||||
void create_presets_panel(CalibrationWizardPage* page, wxBoxSizer* sizer, bool need_custom_range = true);
|
||||
void create_send_progress_bar(CalibrationWizardPage* page, wxBoxSizer* sizer);
|
||||
void init_presets_selections();
|
||||
void init_nozzle_selections();
|
||||
void init_bed_type_selections();
|
||||
void init_process_selections();
|
||||
int get_bed_temp(DynamicPrintConfig* config);
|
||||
FilamentSelectMode get_ams_select_mode() { if (!m_filament_comboBox_list.empty()) return m_filament_comboBox_list[0]->get_select_mode(); return FilamentSelectMode::FSMRadioMode; }
|
||||
void set_ams_select_mode(FilamentSelectMode mode) { for (auto fcb : m_filament_comboBox_list) fcb->set_select_mode(mode); };
|
||||
void set_ams_select_mode(FilamentSelectMode mode);
|
||||
std::vector<int> get_selected_tray();
|
||||
FilamentComboBoxList get_selected_filament_comboBox();
|
||||
|
||||
void create_print_panel(CalibrationWizardPage* page, wxBoxSizer* sizer);
|
||||
void reset_printing_values();
|
||||
|
||||
void create_save_panel(CalibrationWizardPage* page, wxBoxSizer* sizer);
|
||||
virtual void create_save_panel_content(wxBoxSizer* sizer) {}
|
||||
bool save_presets(const std::string& config_key, ConfigOption* config_value, const std::string& name);
|
||||
|
||||
// event handlers
|
||||
void on_select_printer(wxCommandEvent& evt);
|
||||
void on_select_nozzle(wxCommandEvent& evt);
|
||||
void on_select_tray(SimpleEvent& evt);
|
||||
@ -159,17 +172,6 @@ protected:
|
||||
void on_choose_ext_spool(wxCommandEvent& event);
|
||||
void on_update_ams_filament(bool dialog = true);
|
||||
void on_switch_ams(std::string ams_id);
|
||||
|
||||
private:
|
||||
void create_presets_panel();
|
||||
void create_print_panel();
|
||||
//void create_save_panel();
|
||||
void create_send_progress_bar();
|
||||
|
||||
void init_presets_selections();
|
||||
void init_nozzle_selections();
|
||||
void init_bed_type_selections();
|
||||
void init_process_selections();
|
||||
};
|
||||
|
||||
class PressureAdvanceWizard : public CalibrationWizard{
|
||||
@ -177,30 +179,39 @@ public:
|
||||
PressureAdvanceWizard(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL);
|
||||
~PressureAdvanceWizard() {};
|
||||
protected:
|
||||
void create_low_end_pages();
|
||||
void create_high_end_pages();
|
||||
void create_history_window();
|
||||
virtual void create_pages() override;
|
||||
virtual void create_save_panel_content(wxBoxSizer* sizer) override;
|
||||
virtual bool start_calibration(std::vector<int> tray_ids) override;
|
||||
virtual bool save_calibration_result() override;
|
||||
virtual bool recommend_input_value() override;
|
||||
virtual void request_calib_result() override;
|
||||
virtual void change_ams_select_mode() override;
|
||||
|
||||
void sync_save_page_data();
|
||||
void switch_pages(SimpleEvent& evt);
|
||||
private:
|
||||
// page 1
|
||||
// history page
|
||||
//CalibrationWizardPage* m_history_page{ nullptr };
|
||||
|
||||
// start page
|
||||
CalibrationWizardPage* m_page0{ nullptr };
|
||||
|
||||
// preset page
|
||||
CalibrationWizardPage* m_page1{ nullptr };
|
||||
|
||||
// page 2
|
||||
// print page
|
||||
CalibrationWizardPage* m_page2{ nullptr };
|
||||
|
||||
// page 3
|
||||
CalibrationWizardPage* m_low_end_page3{ nullptr };
|
||||
// save page
|
||||
CalibrationWizardPage* m_page3{ nullptr };
|
||||
wxPanel* m_low_end_save_panel;
|
||||
TextInput* m_k_val;
|
||||
TextInput* m_n_val;
|
||||
|
||||
CalibrationWizardPage* m_high_end_page3{ nullptr };
|
||||
wxPanel* m_high_end_save_panel;
|
||||
std::vector<PACalibResult> m_calib_results;
|
||||
std::vector<PACalibResult> m_calib_results_history;
|
||||
wxPanel* m_grid_panel;
|
||||
};
|
||||
|
||||
@ -212,32 +223,46 @@ protected:
|
||||
void create_low_end_pages();
|
||||
void create_high_end_pages();
|
||||
virtual void create_pages() override;
|
||||
virtual void create_save_panel_content(wxBoxSizer* sizer) override;
|
||||
virtual bool start_calibration(std::vector<int> tray_ids) override;
|
||||
virtual bool save_calibration_result() override;
|
||||
virtual bool recommend_input_value() override;
|
||||
virtual void request_calib_result() override;
|
||||
virtual void change_ams_select_mode() override;
|
||||
|
||||
void sync_save_page_data();
|
||||
void switch_pages(SimpleEvent& evt);
|
||||
private:
|
||||
// page 1
|
||||
// preset page
|
||||
CalibrationWizardPage* m_page1{ nullptr };
|
||||
|
||||
// page 2
|
||||
// print page
|
||||
CalibrationWizardPage* m_page2{ nullptr };
|
||||
|
||||
// page 3
|
||||
CalibrationWizardPage* m_low_end_page3{ nullptr };
|
||||
ComboBox* m_optimal_block_coarse;
|
||||
wxStaticText* m_coarse_calc_result_text;
|
||||
float m_coarse_calc_result;
|
||||
CheckBox* m_checkBox_skip_calibration;
|
||||
|
||||
CalibrationWizardPage* m_high_end_page3{ nullptr };
|
||||
std::vector<FlowRatioCalibResult> m_calib_results;
|
||||
wxPanel* m_grid_panel;
|
||||
std::map<int, std::string> m_high_end_save_names;
|
||||
|
||||
// page 4
|
||||
CalibrationWizardPage* m_low_end_page4{ nullptr };
|
||||
|
||||
// page 5
|
||||
// save page
|
||||
CalibrationWizardPage* m_low_end_page5{ nullptr };
|
||||
ComboBox* m_optimal_block_fine;
|
||||
wxStaticText* m_fine_calc_result_text;
|
||||
float m_fine_calc_result;
|
||||
std::string m_save_name;
|
||||
|
||||
void reset_print_panel_to_page(CalibrationWizardPage* page, wxBoxSizer* sizer);
|
||||
void reset_send_progress_to_page(CalibrationWizardPage* page, wxBoxSizer* sizer);
|
||||
void on_fine_tune(wxCommandEvent&);
|
||||
};
|
||||
|
||||
@ -247,19 +272,23 @@ public:
|
||||
~MaxVolumetricSpeedWizard() {};
|
||||
protected:
|
||||
virtual void create_pages() override;
|
||||
virtual void create_save_panel_content(wxBoxSizer* sizer) override;
|
||||
virtual bool start_calibration(std::vector<int> tray_ids) override;
|
||||
virtual bool save_calibration_result() override;
|
||||
virtual bool recommend_input_value() override;
|
||||
private:
|
||||
// page 1
|
||||
// preset page
|
||||
CalibrationWizardPage* m_page1;
|
||||
|
||||
// page 2
|
||||
// print page
|
||||
CalibrationWizardPage* m_page2;
|
||||
|
||||
// page 3
|
||||
// save page
|
||||
CalibrationWizardPage* m_page3;
|
||||
TextInput* m_optimal_max_speed;
|
||||
wxStaticText* m_calc_result_text;
|
||||
float m_calc_result;
|
||||
std::string m_save_name;
|
||||
};
|
||||
|
||||
class TemperatureWizard : public CalibrationWizard {
|
||||
@ -268,19 +297,21 @@ public:
|
||||
~TemperatureWizard() {};
|
||||
protected:
|
||||
virtual void create_pages() override;
|
||||
virtual void create_save_panel_content(wxBoxSizer* sizer) override;
|
||||
virtual bool start_calibration(std::vector<int> tray_ids) override;
|
||||
virtual bool save_calibration_result() override;
|
||||
virtual bool recommend_input_value() override;
|
||||
private:
|
||||
// page 1
|
||||
// preset page
|
||||
CalibrationWizardPage* m_page1;
|
||||
|
||||
// page 2
|
||||
// print page
|
||||
CalibrationWizardPage* m_page2;
|
||||
|
||||
// page 3
|
||||
// save page
|
||||
CalibrationWizardPage* m_page3;
|
||||
TextInput* m_optimal_temp;
|
||||
std::string m_save_name;
|
||||
};
|
||||
|
||||
class VFAWizard : public CalibrationWizard {};
|
||||
|
@ -87,40 +87,41 @@ CalibrationWizardPage::CalibrationWizardPage(wxWindow* parent, wxWindowID id, co
|
||||
page_sizer->AddSpacer(FromDIP(20));
|
||||
|
||||
m_top_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
m_top_sizer->AddSpacer(FromDIP(180));
|
||||
m_top_sizer->AddStretchSpacer();
|
||||
m_preset_text = new wxStaticText(this, wxID_ANY, _L("Preset"), wxDefaultPosition, wxDefaultSize, 0);
|
||||
m_preset_text->SetFont(::Label::Head_14);
|
||||
m_top_sizer->Add(m_preset_text, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(15));
|
||||
auto line1 = new wxPanel(this, wxID_ANY, wxDefaultPosition, {FromDIP(250), 1});
|
||||
auto line1 = new wxPanel(this, wxID_ANY, wxDefaultPosition, {FromDIP(200), 1});
|
||||
line1->SetBackgroundColour(*wxBLACK);
|
||||
m_top_sizer->Add(line1, 1, wxALIGN_CENTER, 0);
|
||||
m_calibration_text = new wxStaticText(this, wxID_ANY, _L("Calibration"), wxDefaultPosition, wxDefaultSize, 0);
|
||||
m_calibration_text->SetFont(::Label::Head_14);
|
||||
m_top_sizer->Add(m_calibration_text, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(15));
|
||||
auto line2 = new wxPanel(this, wxID_ANY, wxDefaultPosition, { FromDIP(250), 1});
|
||||
auto line2 = new wxPanel(this, wxID_ANY, wxDefaultPosition, { FromDIP(200), 1});
|
||||
line2->SetBackgroundColour(*wxBLACK);
|
||||
m_top_sizer->Add(line2, 1, wxALIGN_CENTER, 0);
|
||||
m_record_text = new wxStaticText(this, wxID_ANY, _L("Record"), wxDefaultPosition, wxDefaultSize, 0);
|
||||
m_record_text->SetFont(::Label::Head_14);
|
||||
m_top_sizer->Add(m_record_text, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(15));
|
||||
m_top_sizer->AddSpacer(FromDIP(180));
|
||||
m_top_sizer->AddStretchSpacer();
|
||||
page_sizer->Add(m_top_sizer, 0, wxEXPAND, 0);
|
||||
|
||||
page_sizer->AddSpacer(FromDIP(40));
|
||||
|
||||
m_content_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
page_sizer->Add(m_content_sizer, 0, wxEXPAND, 0);
|
||||
page_sizer->Add(m_content_sizer, 0, wxALIGN_CENTER, 0);
|
||||
|
||||
page_sizer->AddStretchSpacer();
|
||||
page_sizer->AddSpacer(FromDIP(40));
|
||||
|
||||
m_btn_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
m_btn_sizer->Add(0, 0, 1, wxEXPAND, 0);
|
||||
m_btn_sizer->AddStretchSpacer();
|
||||
m_btn_prev = new PageButton(this, "Back", Back);
|
||||
m_btn_sizer->Add(m_btn_prev, 0);
|
||||
m_btn_sizer->AddSpacer(FromDIP(10));
|
||||
m_btn_next = new PageButton(this, "Next", Next);
|
||||
m_btn_sizer->Add(m_btn_next, 0);
|
||||
m_btn_sizer->AddStretchSpacer();
|
||||
|
||||
page_sizer->Add(m_btn_sizer, 0, wxEXPAND, 0);
|
||||
|
||||
|
@ -1383,10 +1383,11 @@ void Sidebar::load_ams_list(std::string const &device, MachineObject* obj)
|
||||
if (is_support_virtual_tray) {
|
||||
DynamicPrintConfig vt_tray_config;
|
||||
vt_tray_config.set_key_value("filament_id", new ConfigOptionStrings{ vt_tray.setting_id });
|
||||
vt_tray_config.set_key_value("tag_uid", new ConfigOptionStrings{ vt_tray.tag_uid });
|
||||
vt_tray_config.set_key_value("filament_type", new ConfigOptionStrings{ vt_tray.type });
|
||||
vt_tray_config.set_key_value("tray_name", new ConfigOptionStrings{std::string("Ext")});
|
||||
vt_tray_config.set_key_value("filament_colour", new ConfigOptionStrings{into_u8(wxColour("#" + vt_tray.color).GetAsString(wxC2S_HTML_SYNTAX))});
|
||||
vt_tray_config.set_key_value("filament_exist", new ConfigOptionBools{ vt_tray.is_exists });
|
||||
vt_tray_config.set_key_value("filament_exist", new ConfigOptionBools{ true });
|
||||
|
||||
filament_ams_list.emplace(VIRTUAL_TRAY_ID, std::move(vt_tray_config));
|
||||
}
|
||||
@ -1400,6 +1401,7 @@ void Sidebar::load_ams_list(std::string const &device, MachineObject* obj)
|
||||
char t = tray.first.front() - '0' + '1';
|
||||
DynamicPrintConfig tray_config;
|
||||
tray_config.set_key_value("filament_id", new ConfigOptionStrings{tray.second->setting_id});
|
||||
tray_config.set_key_value("tag_uid", new ConfigOptionStrings{ tray.second->tag_uid });
|
||||
tray_config.set_key_value("filament_type", new ConfigOptionStrings{tray.second->type});
|
||||
tray_config.set_key_value("tray_name", new ConfigOptionStrings{std::string(1, n) + std::string(1, t)});
|
||||
tray_config.set_key_value("filament_colour", new ConfigOptionStrings{into_u8(wxColour("#" + tray.second->color).GetAsString(wxC2S_HTML_SYNTAX))});
|
||||
|
@ -1397,6 +1397,7 @@ void GUI::CalibrateFilamentComboBox::load_tray(DynamicPrintConfig &config)
|
||||
{
|
||||
m_tray_name = config.opt_string("tray_name", 0u);
|
||||
m_filament_id = config.opt_string("filament_id", 0u);
|
||||
m_tag_uid = config.opt_string("tag_uid", 0u);
|
||||
m_filament_type = config.opt_string("filament_type", 0u);
|
||||
m_filament_color = config.opt_string("filament_colour", 0u);
|
||||
m_filament_exist = config.opt_bool("filament_exist", 0u);
|
||||
@ -1408,21 +1409,32 @@ void GUI::CalibrateFilamentComboBox::load_tray(DynamicPrintConfig &config)
|
||||
#endif
|
||||
if (!m_filament_exist) {
|
||||
SetValue(_L("Empty"));
|
||||
m_selected_preset = nullptr;
|
||||
m_is_compatible = false;
|
||||
clr_picker->SetBitmap(*get_extruder_color_icon("#F0F0F0FF", m_tray_name, 16, 16));
|
||||
} else {
|
||||
auto &filaments = m_collection->get_presets();
|
||||
auto iter = std::find_if(filaments.begin(), filaments.end(), [this](auto &f) { return f.is_compatible && f.is_system && f.filament_id == m_filament_id; });
|
||||
if (iter == filaments.end() && !m_filament_type.empty()) {
|
||||
auto filament_type = "Generic " + m_filament_type;
|
||||
iter = std::find_if(filaments.begin(), filaments.end(),
|
||||
[&filament_type](auto &f) { return f.is_compatible && f.is_system && boost::algorithm::starts_with(f.name, filament_type); });
|
||||
}
|
||||
auto iter = std::find_if(filaments.begin(), filaments.end(), [this](auto &f) {
|
||||
bool is_compatible = m_preset_bundle->calibrate_filaments.find(&f) != m_preset_bundle->calibrate_filaments.end();
|
||||
return is_compatible && f.is_system && f.filament_id == m_filament_id;
|
||||
});
|
||||
//if (iter == filaments.end() && !m_filament_type.empty()) {
|
||||
// auto filament_type = "Generic " + m_filament_type;
|
||||
// iter = std::find_if(filaments.begin(), filaments.end(),
|
||||
// [this , &filament_type](auto &f) {
|
||||
// bool is_compatible = m_preset_bundle->calibrate_filaments.find(&f) != m_preset_bundle->calibrate_filaments.end();
|
||||
// return is_compatible && f.is_system && boost::algorithm::starts_with(f.name, filament_type); });
|
||||
//}
|
||||
if (iter != filaments.end()) {
|
||||
m_selected_preset = &*iter;
|
||||
m_is_compatible = true;
|
||||
SetValue(get_preset_name(*iter));
|
||||
}
|
||||
else
|
||||
else {
|
||||
m_selected_preset = nullptr;
|
||||
m_is_compatible = false;
|
||||
SetValue(_L("Incompatible"));
|
||||
}
|
||||
Enable();
|
||||
}
|
||||
}
|
||||
@ -1444,8 +1456,7 @@ void GUI::CalibrateFilamentComboBox::update()
|
||||
std::map<wxString, wxBitmap*> system_presets;
|
||||
|
||||
wxString selected_preset = m_selected_preset ? get_preset_name(*m_selected_preset) : GetValue();
|
||||
if (!m_selected_preset)
|
||||
m_selected_preset = m_collection->find_preset(selected_preset.ToStdString());
|
||||
|
||||
wxString tooltip;
|
||||
const std::deque<Preset>& presets = m_collection->get_presets();
|
||||
|
||||
@ -1498,16 +1509,13 @@ void GUI::CalibrateFilamentComboBox::update()
|
||||
update_selection();
|
||||
Thaw();
|
||||
|
||||
if (!tooltip.IsEmpty()) {
|
||||
#ifdef __WXMSW__
|
||||
SetToolTip(NULL);
|
||||
#endif
|
||||
SetToolTip(tooltip);
|
||||
}
|
||||
SetToolTip(NULL);
|
||||
}
|
||||
|
||||
void GUI::CalibrateFilamentComboBox::OnSelect(wxCommandEvent &evt)
|
||||
{
|
||||
m_is_compatible = true;
|
||||
static_cast<FilamentComboBox*>(m_parent)->Enable(true);
|
||||
std::string preset_name = m_collection->get_preset_name_by_alias(evt.GetString().ToUTF8().data());
|
||||
m_selected_preset = m_collection->find_preset(preset_name);
|
||||
SimpleEvent e(EVT_CALIBRATION_TRAY_SELECTION_CHANGED);
|
||||
|
@ -230,14 +230,18 @@ public:
|
||||
void OnSelect(wxCommandEvent &evt) override;
|
||||
const Preset* get_selected_preset() { return m_selected_preset; }
|
||||
std::string get_tray_name() { return m_tray_name; }
|
||||
std::string get_tag_uid() { return m_tag_uid; }
|
||||
bool is_tray_exist() { return m_filament_exist; }
|
||||
bool is_compatible_with_printer() { return m_is_compatible; }
|
||||
|
||||
private:
|
||||
std::string m_tray_name;
|
||||
std::string m_filament_id;
|
||||
std::string m_tag_uid;
|
||||
std::string m_filament_type;
|
||||
std::string m_filament_color;
|
||||
bool m_filament_exist{false};
|
||||
bool m_is_compatible{true};
|
||||
const Preset* m_selected_preset = nullptr;
|
||||
};
|
||||
|
||||
|
@ -151,12 +151,16 @@ void TabButtonsListCtrl::RemovePage(size_t n)
|
||||
m_sizer->Layout();
|
||||
}
|
||||
|
||||
bool TabButtonsListCtrl::SetPageImage(size_t n, const std::string &bmp_name) const
|
||||
bool TabButtonsListCtrl::SetPageImage(size_t n, const std::string &bmp_name)
|
||||
{
|
||||
if (n >= m_pageButtons.size())
|
||||
return false;
|
||||
|
||||
ScalableBitmap bitmap(NULL, bmp_name);
|
||||
|
||||
ScalableBitmap bitmap;
|
||||
if (!bmp_name.empty())
|
||||
bitmap = ScalableBitmap(this, bmp_name, 14);
|
||||
m_pageButtons[n]->SetBitmap(bitmap);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ public:
|
||||
void Rescale();
|
||||
bool InsertPage(size_t n, const wxString& text, bool bSelect = false, const std::string& bmp_name = "");
|
||||
void RemovePage(size_t n);
|
||||
bool SetPageImage(size_t n, const std::string& bmp_name) const;
|
||||
bool SetPageImage(size_t n, const std::string& bmp_name);
|
||||
void SetPageText(size_t n, const wxString& strText);
|
||||
wxString GetPageText(size_t n) const;
|
||||
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
#include "../GUI/GUI_App.hpp"
|
||||
#include "../GUI/DeviceManager.hpp"
|
||||
#include "../GUI/Jobs/PrintJob.hpp"
|
||||
#include "../GUI/Jobs/ProgressIndicator.hpp"
|
||||
#include "../GUI/PartPlate.hpp"
|
||||
|
||||
@ -14,7 +13,7 @@
|
||||
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
std::shared_ptr<PrintJob> print_job;
|
||||
std::shared_ptr<PrintJob> CalibUtils::print_job;
|
||||
static const std::string temp_dir = fs::path(fs::temp_directory_path() / "calib").string();
|
||||
static const std::string temp_gcode_path = temp_dir + "/temp.gcode";
|
||||
static const std::string path = temp_dir + "/test.3mf";
|
||||
@ -302,7 +301,7 @@ void CalibUtils::calib_flowrate(int pass, const CalibInfo& calib_info, std::stri
|
||||
params.mode = CalibMode::Calib_Flow_Rate;
|
||||
process_and_store_3mf(&model, full_config, params, error_message);
|
||||
if (!error_message.empty())
|
||||
return
|
||||
return;
|
||||
|
||||
send_to_print(calib_info.dev_id, calib_info.select_ams, calib_info.process_bar, calib_info.bed_type, error_message);
|
||||
}
|
||||
@ -360,6 +359,7 @@ void CalibUtils::calib_temptue(const CalibInfo& calib_info, std::string& error_m
|
||||
model.objects[0]->config.set_key_value("brim_type", new ConfigOptionEnum<BrimType>(btOuterOnly));
|
||||
model.objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(5.0));
|
||||
model.objects[0]->config.set_key_value("brim_object_gap", new ConfigOptionFloat(0.0));
|
||||
model.objects[0]->config.set_key_value("enable_support", new ConfigOptionBool(false));
|
||||
|
||||
// apply preset
|
||||
DynamicPrintConfig full_config;
|
||||
@ -405,7 +405,7 @@ void CalibUtils::calib_max_vol_speed(const CalibInfo& calib_info, std::string& e
|
||||
auto max_lh = printer_config.option<ConfigOptionFloats>("max_layer_height");
|
||||
if (max_lh->values[0] < layer_height) max_lh->values[0] = {layer_height};
|
||||
|
||||
filament_config.set_key_value("filament_max_volumetric_speed", new ConfigOptionFloats{200});
|
||||
filament_config.set_key_value("filament_max_volumetric_speed", new ConfigOptionFloats{50});
|
||||
filament_config.set_key_value("slow_down_layer_time", new ConfigOptionInts{0});
|
||||
|
||||
print_config.set_key_value("enable_overhang_speed", new ConfigOptionBool{false});
|
||||
@ -555,12 +555,12 @@ void CalibUtils::process_and_store_3mf(Model* model, const DynamicPrintConfig& f
|
||||
Print *fff_print = dynamic_cast<Print *>(print);
|
||||
fff_print->set_calib_params(params);
|
||||
|
||||
StringObjectException warning;
|
||||
auto err = print->validate(&warning);
|
||||
if (!err.string.empty()) {
|
||||
error_message = "slice validate: " + err.string;
|
||||
return;
|
||||
}
|
||||
//StringObjectException warning;
|
||||
//auto err = print->validate(&warning);
|
||||
//if (!err.string.empty()) {
|
||||
// error_message = "slice validate: " + err.string;
|
||||
// return;
|
||||
//}
|
||||
|
||||
fff_print->process();
|
||||
part_plate->update_slice_result_valid_state(true);
|
||||
@ -662,16 +662,17 @@ void CalibUtils::send_to_print(const std::string& dev_id, const std::string& sel
|
||||
|
||||
print_job->job_data = job_data;
|
||||
print_job->plate_data = plate_data;
|
||||
print_job->m_print_type = "from_normal";
|
||||
|
||||
if (!obj_->is_support_ams_mapping()) {
|
||||
error_message = "It is not support ams mapping.";
|
||||
return;
|
||||
}
|
||||
//if (!obj_->is_support_ams_mapping()) {
|
||||
// error_message = "It is not support ams mapping.";
|
||||
// return;
|
||||
//}
|
||||
|
||||
if (!obj_->has_ams()) {
|
||||
error_message = "There is no ams.";
|
||||
return;
|
||||
}
|
||||
//if (!obj_->has_ams()) {
|
||||
// error_message = "There is no ams.";
|
||||
// return;
|
||||
//}
|
||||
|
||||
print_job->task_ams_mapping = select_ams;
|
||||
print_job->task_ams_mapping_info = "";
|
||||
|
@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
#include "libslic3r/Calib.hpp"
|
||||
#include "../GUI/DeviceManager.hpp"
|
||||
#include "../GUI/Jobs/PrintJob.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
@ -26,6 +27,7 @@ class CalibUtils
|
||||
{
|
||||
public:
|
||||
CalibUtils(){};
|
||||
static std::shared_ptr<PrintJob> print_job;
|
||||
static void calib_PA(const X1CCalibInfos& calib_infos, std::string& error_message);
|
||||
static void emit_get_PA_calib_results();
|
||||
static bool get_PA_calib_results(std::vector<PACalibResult> &pa_calib_results);
|
||||
|