ENH: calib support multi_extruder(UI part)

jira: none
Change-Id: I3009c2f8b601dc078cfed787dc3531fc1d4848d6
This commit is contained in:
zhimin.zeng 2024-08-16 14:54:34 +08:00 committed by lane.wei
parent 3119a84eb2
commit 11f61abefa
13 changed files with 656 additions and 85 deletions

View File

@ -56,6 +56,7 @@ public:
int ams_id = 0;
int slot_id = 0;
int bed_temp;
ExtruderType extruder_type{ExtruderType::etDirectDrive};
NozzleVolumeType nozzle_volume_type = NozzleVolumeType::nvtNormal;
int nozzle_temp;
float nozzle_diameter;

View File

@ -44,4 +44,36 @@ void get_other_layers_print_sequence(const std::vector<LayerPrintSequence> &cust
}
}
int get_index_for_extruder_parameter(const DynamicPrintConfig &config, const std::string &opt_key, int cur_extruder_id, ExtruderType extruder_type, NozzleVolumeType nozzle_volume_type)
{
std::string id_name, variant_name;
unsigned int stride = 1;
if (printer_options_with_variant_1.count(opt_key) > 0) { // printer parameter
id_name = "printer_extruder_id";
variant_name = "printer_extruder_variant";
} else if (printer_options_with_variant_2.count(opt_key) > 0) {
id_name = "printer_extruder_id";
variant_name = "printer_extruder_variant";
stride = 2;
} else if (filament_options_with_variant.count(opt_key) > 0) {
// filament don't use id anymore
// id_name = "filament_extruder_id";
variant_name = "filament_extruder_variant";
} else if (print_options_with_variant.count(opt_key) > 0) {
id_name = "print_extruder_id";
variant_name = "print_extruder_variant";
} else {
return 0;
}
// variant index
int variant_index = config.get_index_for_extruder(cur_extruder_id + 1, id_name, extruder_type, nozzle_volume_type, variant_name, stride);
if (variant_index < 0) {
assert(false);
return 0;
}
return variant_index;
}
}; // namespace Slic3r

View File

@ -3,12 +3,14 @@
#include <vector>
#include <map>
#include "PrintConfig.hpp"
namespace Slic3r {
using LayerPrintSequence = std::pair<std::pair<int, int>, std::vector<int>>;
std::vector<LayerPrintSequence> get_other_layers_print_sequence(int sequence_nums, const std::vector<int> &sequence);
void get_other_layers_print_sequence(const std::vector<LayerPrintSequence> &customize_sequences, int &sequence_nums, std::vector<int> &sequence);
extern int get_index_for_extruder_parameter(const DynamicPrintConfig &config, const std::string &opt_key, int cur_extruder_id, ExtruderType extruder_type, NozzleVolumeType nozzle_volume_type);
} // namespace Slic3r
#endif // slic3r_Parameter_Utils_hpp_

View File

@ -19,6 +19,12 @@ static const wxString NA_STR = _L("N/A");
static const float MIN_PA_K_VALUE_STEP = 0.001;
static const int MAX_PA_HISTORY_RESULTS_NUMS = 16;
void get_ams_id_and_slot_id(int tray_id, int& ams_id, int& slot_id)
{
ams_id = tray_id / 4;
slot_id = tray_id % 4;
}
std::map<int, Preset*> get_cached_selected_filament(MachineObject* obj) {
std::map<int, Preset*> selected_filament_map;
if (!obj) return selected_filament_map;
@ -592,6 +598,10 @@ void PressureAdvanceWizard::on_cali_start()
}
X1CCalibInfos::X1CCalibInfo calib_info;
get_ams_id_and_slot_id(item.first, calib_info.ams_id, calib_info.slot_id);
calib_info.extruder_id = preset_page->get_extruder_id(calib_info.ams_id);
calib_info.extruder_type = preset_page->get_extruder_type(calib_info.extruder_id);
calib_info.nozzle_volume_type = preset_page->get_nozzle_volume_type(calib_info.extruder_id);
calib_info.tray_id = item.first;
calib_info.nozzle_diameter = nozzle_dia;
calib_info.filament_id = item.second->filament_id;
@ -626,6 +636,10 @@ void PressureAdvanceWizard::on_cali_start()
CalibInfo calib_info;
calib_info.dev_id = curr_obj->dev_id;
get_ams_id_and_slot_id(selected_filaments.begin()->first, calib_info.ams_id, calib_info.slot_id);
calib_info.extruder_id = preset_page->get_extruder_id(calib_info.ams_id);
calib_info.extruder_type = preset_page->get_extruder_type(calib_info.extruder_id);
calib_info.extruder_id = preset_page->get_nozzle_volume_type(calib_info.extruder_id);
calib_info.select_ams = "[" + std::to_string(selected_filaments.begin()->first) + "]";
Preset *preset = selected_filaments.begin()->second;
Preset * temp_filament_preset = new Preset(preset->type, preset->name + "_temp");
@ -992,6 +1006,10 @@ void FlowRateWizard::on_cali_start(CaliPresetStage stage, float cali_value, Flow
X1CCalibInfos::X1CCalibInfo calib_info;
calib_info.tray_id = item.first;
get_ams_id_and_slot_id(item.first, calib_info.ams_id, calib_info.slot_id);
calib_info.extruder_id = preset_page->get_extruder_id(calib_info.ams_id);
calib_info.extruder_type = preset_page->get_extruder_type(calib_info.extruder_id);
calib_info.extruder_id = preset_page->get_nozzle_volume_type(calib_info.extruder_id);
calib_info.nozzle_diameter = nozzle_dia;
calib_info.filament_id = item.second->filament_id;
calib_info.setting_id = item.second->setting_id;
@ -1043,6 +1061,10 @@ void FlowRateWizard::on_cali_start(CaliPresetStage stage, float cali_value, Flow
if (!selected_filaments.empty()) {
calib_info.select_ams = "[" + std::to_string(selected_filaments.begin()->first) + "]";
get_ams_id_and_slot_id(selected_filaments.begin()->first, calib_info.ams_id, calib_info.slot_id);
calib_info.extruder_id = preset_page->get_extruder_id(calib_info.ams_id);
calib_info.extruder_type = preset_page->get_extruder_type(calib_info.extruder_id);
calib_info.nozzle_volume_type = preset_page->get_nozzle_volume_type(calib_info.extruder_id);
Preset* preset = selected_filaments.begin()->second;
temp_filament_preset = new Preset(preset->type, preset->name + "_temp");
temp_filament_preset->config = preset->config;

View File

@ -275,6 +275,18 @@ FilamentComboBox::FilamentComboBox(wxWindow* parent, const wxPoint& pos, const w
main_sizer->Fit(this);
}
void FilamentComboBox::ShowPanel()
{
this->Show();
m_radioBox->Show();
}
void FilamentComboBox::HidePanel()
{
this->Hide();
m_radioBox->Hide();
}
void FilamentComboBox::set_select_mode(CalibrationFilamentMode mode)
{
m_mode = mode;

View File

@ -98,6 +98,9 @@ public:
virtual void SetValue(bool value, bool send_event = true);
void msw_rescale();
void ShowPanel();
void HidePanel();
protected:
int m_tray_id { -1 };
std::string m_tray_name;
@ -160,7 +163,7 @@ protected:
std::vector<Label*> m_text_steps;
};
class CaliPagePicture : public wxPanel
class CaliPagePicture : public wxPanel
{
public:
CaliPagePicture(wxWindow* parent,
@ -232,7 +235,7 @@ private:
CaliPageActionType m_action_type;
};
class CaliPageSendingPanel : public wxPanel
class CaliPageSendingPanel : public wxPanel
{
public:
CaliPageSendingPanel(wxWindow* parent,
@ -277,7 +280,7 @@ protected:
std::vector<CaliPageButton*> m_action_btns;
};
class CalibrationWizardPage : public wxPanel
class CalibrationWizardPage : public wxPanel
{
public:
CalibrationWizardPage(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL);

View File

@ -489,6 +489,8 @@ CalibrationPresetPage::CalibrationPresetPage(
m_page_type = CaliPageType::CALI_PAGE_PRESET;
m_cali_filament_mode = CalibrationFilamentMode::CALI_MODEL_SINGLE;
m_top_sizer = new wxBoxSizer(wxVERTICAL);
m_extrder_types.resize(2, ExtruderType::etDirectDrive);
m_extruder_nozzle_types.resize(2, NozzleVolumeType::nvtBigTraffic);
create_page(this);
@ -512,6 +514,16 @@ void CalibrationPresetPage::on_sys_color_changed()
m_ams_sync_button->msw_rescale();
}
int CalibrationPresetPage::get_extruder_id(int ams_id)
{
if (m_ams_id_to_extruder_id_map.find(ams_id) != m_ams_id_to_extruder_id_map.end()) {
return m_ams_id_to_extruder_id_map[ams_id];
}
else {
return -1;
}
}
void CalibrationPresetPage::create_selection_panel(wxWindow* parent)
{
auto panel_sizer = new wxBoxSizer(wxVERTICAL);
@ -533,6 +545,48 @@ void CalibrationPresetPage::create_selection_panel(wxWindow* parent)
panel_sizer->AddSpacer(PRESET_GAP);
// nozzle_volume_type (multi_extruder)
{
m_nozzle_volume_type_panel = new wxPanel(parent);
auto nozzle_volume_sizer = new wxBoxSizer(wxVERTICAL);
auto nozzle_volume_type_text = new Label(m_nozzle_volume_type_panel, _L("Nozzle Volume Type"));
nozzle_volume_type_text->SetFont(Label::Head_14);
nozzle_volume_type_text->Wrap(-1);
nozzle_volume_sizer->Add(nozzle_volume_type_text, 0, wxALL, 0);
nozzle_volume_sizer->AddSpacer(FromDIP(10));
wxBoxSizer * type_sizer = new wxBoxSizer(wxHORIZONTAL);
m_left_nozzle_volume_type_sizer = new wxStaticBoxSizer(wxVERTICAL, m_nozzle_volume_type_panel, "Left");
m_right_nozzle_volume_type_sizer = new wxStaticBoxSizer(wxVERTICAL, m_nozzle_volume_type_panel, "Right");
m_comboBox_nozzle_volume_types.clear();
ComboBox *nozzle_volume_type_cbx = new ComboBox(m_nozzle_volume_type_panel, wxID_ANY, "", wxDefaultPosition, CALIBRATION_FILAMENT_COMBOX_SIZE, 0, nullptr, wxCB_READONLY);
m_comboBox_nozzle_volume_types.emplace_back(nozzle_volume_type_cbx);
m_left_nozzle_volume_type_sizer->Add(m_comboBox_nozzle_volume_types.back(), 0, wxEXPAND | wxALL, 5);
nozzle_volume_type_cbx = new ComboBox(m_nozzle_volume_type_panel, wxID_ANY, "", wxDefaultPosition, CALIBRATION_FILAMENT_COMBOX_SIZE, 0, nullptr,wxCB_READONLY);
m_comboBox_nozzle_volume_types.emplace_back(nozzle_volume_type_cbx);
m_right_nozzle_volume_type_sizer->Add(m_comboBox_nozzle_volume_types.back(), 0, wxEXPAND | wxALL, 5);
type_sizer->Add(m_left_nozzle_volume_type_sizer, 1, wxEXPAND | wxALL, 10);
type_sizer->Add(m_right_nozzle_volume_type_sizer, 1, wxEXPAND | wxALL, 10);
nozzle_volume_sizer->Add(type_sizer);
nozzle_volume_sizer->AddSpacer(PRESET_GAP);
for (size_t i = 0; i < m_comboBox_nozzle_volume_types.size(); ++i) {
m_comboBox_nozzle_volume_types[i]->Bind(wxEVT_COMBOBOX, std::bind(&CalibrationPresetPage::on_select_nozzle_volume_type, this, std::placeholders::_1, i));
m_comboBox_nozzle_volume_types[i]->Hide();
}
m_nozzle_volume_type_panel->SetSizer(nozzle_volume_sizer);
panel_sizer->Add(m_nozzle_volume_type_panel);
m_nozzle_volume_type_panel->Hide();
}
auto plate_type_combo_text = new Label(parent, _L("Plate Type"));
plate_type_combo_text->SetFont(Label::Head_14);
plate_type_combo_text->Wrap(-1);
@ -607,6 +661,22 @@ void CalibrationPresetPage::init_selection_values()
}
m_comboBox_bed_type->SetSelection(curr_selection);
}
// init nozzle_volume_type for multi_extruder
{
const ConfigOptionDef *nozzle_volume_type_def = print_config_def.get("nozzle_volume_type");
if (nozzle_volume_type_def && nozzle_volume_type_def->enum_keys_map) {
for (auto item : nozzle_volume_type_def->enum_labels) {
for (size_t i = 0; i < m_comboBox_nozzle_volume_types.size(); ++i) {
m_comboBox_nozzle_volume_types[i]->AppendString(_L(item));
}
}
}
for (size_t i = 0; i < m_comboBox_nozzle_volume_types.size(); ++i) {
m_comboBox_nozzle_volume_types[i]->SetSelection(int(NozzleVolumeType::nvtBigTraffic));
}
}
}
void CalibrationPresetPage::create_filament_list_panel(wxWindow* parent)
@ -680,6 +750,164 @@ void CalibrationPresetPage::create_filament_list_panel(wxWindow* parent)
panel_sizer->Fit(parent);
}
NozzleVolumeType CalibrationPresetPage::get_nozzle_volume_type(int extruder_id) const
{
return NozzleVolumeType(m_comboBox_nozzle_volume_types[extruder_id]->GetSelection());
}
ExtruderType CalibrationPresetPage::get_extruder_type(int extruder_id) const
{
return ExtruderType(m_extrder_types[extruder_id]);
}
void CalibrationPresetPage::create_multi_extruder_filament_list_panel(wxWindow *parent)
{
m_multi_extruder_ams_panel_sizer = new wxBoxSizer(wxVERTICAL);
m_filament_list_tips = new Label(
parent,
_L("Tips for calibration material: \n- Materials that can share same hot bed temperature\n- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)"));
m_filament_list_tips->Hide();
m_filament_list_tips->SetFont(Label::Body_13);
m_filament_list_tips->SetForegroundColour(wxColour(145, 145, 145));
m_filament_list_tips->Wrap(CALIBRATION_TEXT_MAX_LENGTH);
m_multi_extruder_ams_panel_sizer->Add(m_filament_list_tips, 0, wxBOTTOM, FromDIP(10));
{
// 1. Preview item
m_main_sizer = new wxStaticBoxSizer(wxVERTICAL, parent, "Main");
m_main_ams_preview_panel = new wxPanel(parent);
auto ams_items_sizer = new wxBoxSizer(wxHORIZONTAL);
for (int i = 0; i < 5; i++) { // most connect 4 ams(multi + single)
AMSinfo temp_info = AMSinfo{std::to_string(i), std::vector<Caninfo>{}};
if (i == 4)
temp_info.ams_type = AMSModel::EXT_AMS;
auto preview_ams_item = new AMSPreview(m_main_ams_preview_panel, wxID_ANY, temp_info);
m_main_ams_preview_list.push_back(preview_ams_item);
size_t index = m_main_ams_preview_list.size() - 1;
preview_ams_item->Bind(wxEVT_LEFT_DOWN, [this, index](wxMouseEvent &e) {
update_multi_extruder_filament_combobox(m_main_ams_preview_list[index]->m_amsinfo.ams_id, 0);
e.Skip();
});
ams_items_sizer->Add(preview_ams_item, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(6));
}
m_main_ams_preview_panel->SetSizer(ams_items_sizer);
m_main_sizer->Add(m_main_ams_preview_panel);
// 2. AMS item
m_main_ams_items_sizer = new wxBoxSizer(wxVERTICAL);
for (int i = 0; i < 4; i++) { // 4 slots
auto filament_comboBox_sizer = new wxBoxSizer(wxHORIZONTAL);
wxRadioButton *radio_btn = new wxRadioButton(m_multi_exutrder_filament_list_panel, wxID_ANY, "");
CheckBox * check_box = new CheckBox(m_multi_exutrder_filament_list_panel);
check_box->SetBackgroundColour(*wxWHITE);
FilamentComboBox *fcb = new FilamentComboBox(m_multi_exutrder_filament_list_panel);
fcb->SetRadioBox(radio_btn);
fcb->SetCheckBox(check_box);
fcb->set_select_mode(CalibrationFilamentMode::CALI_MODEL_SINGLE);
filament_comboBox_sizer->Add(radio_btn, 0, wxALIGN_CENTER);
filament_comboBox_sizer->Add(check_box, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(8));
filament_comboBox_sizer->Add(fcb, 0, wxALIGN_CENTER);
m_main_ams_items_sizer->Add(filament_comboBox_sizer, 0);
fcb->Bind(EVT_CALI_TRAY_CHANGED, &CalibrationPresetPage::on_select_tray, this);
m_main_filament_comboBox_list.emplace_back(fcb);
radio_btn->Bind(wxEVT_RADIOBUTTON, [this](wxCommandEvent &evt) {
wxCommandEvent event(EVT_CALI_TRAY_CHANGED);
event.SetEventObject(this);
wxPostEvent(this, event);
});
check_box->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent &evt) {
wxCommandEvent event(EVT_CALI_TRAY_CHANGED);
event.SetEventObject(this);
wxPostEvent(this, event);
evt.Skip();
});
if (i == 0)
radio_btn->SetValue(true);
}
m_main_sizer->Add(m_main_ams_items_sizer, 1, wxEXPAND | wxALL, 10);
}
{
// 1. Preview item
m_deputy_sizer = new wxStaticBoxSizer(wxVERTICAL, parent, "Deputy");
m_deputy_ams_preview_panel = new wxPanel(parent);
auto ams_items_sizer = new wxBoxSizer(wxHORIZONTAL);
for (int i = 0; i < 5; i++) { // most connect 4 ams(multi + single) + 1 vt_slot
AMSinfo temp_info = AMSinfo{std::to_string(i), std::vector<Caninfo>{}};
if (i == 4)
temp_info.ams_type = AMSModel::EXT_AMS;
auto preview_ams_item = new AMSPreview(m_deputy_ams_preview_panel, wxID_ANY, temp_info);
m_deputy_ams_preview_list.push_back(preview_ams_item);
size_t index = m_deputy_ams_preview_list.size() - 1;
preview_ams_item->Bind(wxEVT_LEFT_DOWN, [this, index](wxMouseEvent &e) {
update_multi_extruder_filament_combobox(m_deputy_ams_preview_list[index]->m_amsinfo.ams_id, 1);
e.Skip();
});
ams_items_sizer->Add(preview_ams_item, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(6));
}
m_deputy_ams_preview_panel->SetSizer(ams_items_sizer);
m_deputy_sizer->Add(m_deputy_ams_preview_panel);
// 2. AMS item
m_deputy_ams_items_sizer = new wxBoxSizer(wxVERTICAL);
for (int i = 0; i < 4; ++i) { // 4 slots
auto filament_comboBox_sizer = new wxBoxSizer(wxHORIZONTAL);
wxRadioButton *radio_btn = new wxRadioButton(m_multi_exutrder_filament_list_panel, wxID_ANY, "");
CheckBox * check_box = new CheckBox(m_multi_exutrder_filament_list_panel);
check_box->SetBackgroundColour(*wxWHITE);
FilamentComboBox *fcb = new FilamentComboBox(m_multi_exutrder_filament_list_panel);
fcb->SetRadioBox(radio_btn);
fcb->SetCheckBox(check_box);
fcb->set_select_mode(CalibrationFilamentMode::CALI_MODEL_SINGLE);
filament_comboBox_sizer->Add(radio_btn, 0, wxALIGN_CENTER);
filament_comboBox_sizer->Add(check_box, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(8));
filament_comboBox_sizer->Add(fcb, 0, wxALIGN_CENTER);
m_deputy_ams_items_sizer->Add(filament_comboBox_sizer, 0);
fcb->Bind(EVT_CALI_TRAY_CHANGED, &CalibrationPresetPage::on_select_tray, this);
m_deputy_filament_comboBox_list.emplace_back(fcb);
radio_btn->Bind(wxEVT_RADIOBUTTON, [this](wxCommandEvent &evt) {
wxCommandEvent event(EVT_CALI_TRAY_CHANGED);
event.SetEventObject(this);
wxPostEvent(this, event);
});
check_box->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent &evt) {
wxCommandEvent event(EVT_CALI_TRAY_CHANGED);
event.SetEventObject(this);
wxPostEvent(this, event);
evt.Skip();
});
}
m_deputy_sizer->Add(m_deputy_ams_items_sizer, 1, wxEXPAND | wxALL, 10);
}
m_multi_exturder_ams_sizer = new wxBoxSizer(wxHORIZONTAL);
if (m_main_extruder_on_left) {
m_main_sizer->GetStaticBox()->SetLabel("Left");
m_deputy_sizer->GetStaticBox()->SetLabel("Right");
m_multi_exturder_ams_sizer->Add(m_main_sizer, 1, wxEXPAND | wxALL, 10);
m_multi_exturder_ams_sizer->Add(m_deputy_sizer, 1, wxEXPAND | wxALL, 10);
}
else {
m_main_sizer->GetStaticBox()->SetLabel("Right");
m_deputy_sizer->GetStaticBox()->SetLabel("Left");
m_multi_exturder_ams_sizer->Add(m_deputy_sizer, 1, wxEXPAND | wxALL, 10);
m_multi_exturder_ams_sizer->Add(m_main_sizer, 1, wxEXPAND | wxALL, 10);
}
m_multi_extruder_ams_panel_sizer->Add(m_multi_exturder_ams_sizer);
parent->SetSizer(m_multi_extruder_ams_panel_sizer);
m_multi_extruder_ams_panel_sizer->Fit(parent);
}
void CalibrationPresetPage::create_ext_spool_panel(wxWindow* parent)
{
auto panel_sizer = new wxBoxSizer(wxHORIZONTAL);
@ -746,6 +974,10 @@ void CalibrationPresetPage::create_page(wxWindow* parent)
m_filament_list_panel->SetBackgroundColour(*wxWHITE);
create_filament_list_panel(m_filament_list_panel);
m_multi_exutrder_filament_list_panel = new wxPanel(parent);
m_multi_exutrder_filament_list_panel->SetBackgroundColour(*wxWHITE);
create_multi_extruder_filament_list_panel(m_multi_exutrder_filament_list_panel);
if (m_cali_mode == CalibMode::Calib_PA_Line || m_cali_mode == CalibMode::Calib_PA_Pattern) {
wxArrayString pa_cali_modes;
pa_cali_modes.push_back(_L("Line"));
@ -781,6 +1013,7 @@ void CalibrationPresetPage::create_page(wxWindow* parent)
m_top_sizer->Add(m_selection_panel, 0);
m_top_sizer->Add(m_filament_list_panel, 0);
m_top_sizer->Add(m_multi_exutrder_filament_list_panel, 0);
m_top_sizer->Add(m_ext_spool_panel, 0);
m_top_sizer->Add(m_pa_cali_method_combox, 0);
m_top_sizer->Add(m_custom_range_panel, 0);
@ -881,6 +1114,10 @@ void CalibrationPresetPage::on_select_nozzle(wxCommandEvent& evt)
update_combobox_filaments(curr_obj);
}
void CalibrationPresetPage::on_select_nozzle_volume_type(wxCommandEvent &evt, size_t extruder_id)
{
}
void CalibrationPresetPage::on_select_plate_type(wxCommandEvent& evt)
{
select_default_compatible_filament();
@ -1196,6 +1433,14 @@ void CalibrationPresetPage::update_combobox_filaments(MachineObject* obj)
Preset* printer_preset = get_printer_preset(obj, nozzle_value);
auto opt_extruder_type = printer_preset->config.option<ConfigOptionEnumsGeneric>("extruder_type");
if (opt_extruder_type) {
assert(opt_extruder_type->values.size() <= 2);
for (size_t i = 0; i < opt_extruder_type->values.size(); ++i) {
m_extrder_types[i] = (ExtruderType)(opt_extruder_type->values[i]);
}
}
// sync ams filaments list info
PresetBundle* preset_bundle = wxGetApp().preset_bundle;
if (preset_bundle && printer_preset) {
@ -1292,7 +1537,7 @@ void CalibrationPresetPage::update_show_status()
show_status(CaliPresetPageStatus::CaliPresetStatusInPrinting);
return;
}
else if (!obj_->is_support_print_without_sd && (obj_->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD)) {
else if (!obj_->is_multi_extruders() && !obj_->is_support_print_without_sd && (obj_->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD)) {
show_status(CaliPresetPageStatus::CaliPresetStatusNoSdcard);
return;
}
@ -1625,13 +1870,71 @@ void CalibrationPresetPage::init_with_machine(MachineObject* obj)
m_comboBox_nozzle_dia->SetSelection(NOZZLE_LIST_DEFAULT);
}
if (obj->is_multi_extruders()) {
for (int i = 0; i < m_comboBox_nozzle_volume_types.size(); ++i) {
m_comboBox_nozzle_volume_types[i]->Show();
m_comboBox_nozzle_volume_types[i]->SetSelection(obj->m_nozzle_data.nozzles[i].flow_type);
}
if (obj->printer_type.find("O1D") != std::string::npos && m_main_extruder_on_left) {
m_multi_exturder_ams_sizer->Detach(m_main_sizer);
m_multi_exturder_ams_sizer->Detach(m_deputy_sizer);
m_left_nozzle_volume_type_sizer->Detach(0);
m_right_nozzle_volume_type_sizer->Detach(0);
m_main_sizer->GetStaticBox()->SetLabel("Right");
m_deputy_sizer->GetStaticBox()->SetLabel("Left");
m_multi_exturder_ams_sizer->Add(m_deputy_sizer);
m_multi_exturder_ams_sizer->Add(m_main_sizer);
m_left_nozzle_volume_type_sizer->Add(m_comboBox_nozzle_volume_types[0]);
m_right_nozzle_volume_type_sizer->Add(m_comboBox_nozzle_volume_types[1]);
m_main_extruder_on_left = false;
}
else if (obj->printer_type.find("O1D") == std::string::npos && !m_main_extruder_on_left) {
m_multi_exturder_ams_sizer->Detach(m_main_sizer);
m_multi_exturder_ams_sizer->Detach(m_deputy_sizer);
m_left_nozzle_volume_type_sizer->Detach(0);
m_right_nozzle_volume_type_sizer->Detach(0);
m_main_sizer->GetStaticBox()->SetLabel("Left");
m_deputy_sizer->GetStaticBox()->SetLabel("Right");
m_multi_exturder_ams_sizer->Add(m_main_sizer);
m_multi_exturder_ams_sizer->Add(m_deputy_sizer);
m_left_nozzle_volume_type_sizer->Add(m_comboBox_nozzle_volume_types[1]);
m_right_nozzle_volume_type_sizer->Add(m_comboBox_nozzle_volume_types[0]);
m_main_extruder_on_left = true;
}
m_nozzle_volume_type_panel->Show();
m_multi_exutrder_filament_list_panel->Show();
m_filament_list_panel->Hide();
m_ext_spool_panel->Hide();
}
else {
for (int i = 0; i < m_comboBox_nozzle_volume_types.size(); ++i) {
m_comboBox_nozzle_volume_types[i]->Hide();
}
m_nozzle_volume_type_panel->Hide();
m_multi_exutrder_filament_list_panel->Hide();
}
// set bed type collection from machine
//if (m_cali_mode == CalibMode::Calib_PA_Line)
// update_plate_type_collection(m_cali_method);
// init default for filament source
// TODO if user change ams/ext, need to update
if ( !obj->has_ams() || (obj->m_tray_now == std::to_string(VIRTUAL_TRAY_MAIN_ID)) )
if (obj->is_multi_extruders()) {
m_ext_spool_radiobox->SetValue(false);
m_ams_radiobox->SetValue(false);
}
else if ( !obj->has_ams() || (obj->m_tray_now == std::to_string(VIRTUAL_TRAY_MAIN_ID)) )
{
m_ext_spool_radiobox->SetValue(true);
m_ams_radiobox->SetValue(false);
@ -1660,6 +1963,9 @@ void CalibrationPresetPage::sync_ams_info(MachineObject* obj)
std::map<int, DynamicPrintConfig> full_filament_ams_list;
for (auto ams_item : old_full_filament_ams_list) {
int key = ams_item.first & 0x0FFFF;
if (key == VIRTUAL_TRAY_MAIN_ID || key == VIRTUAL_TRAY_DEPUTY_ID) {
ams_item.second.set_key_value("filament_exist", new ConfigOptionBools{true});
}
full_filament_ams_list[key] = std::move(ams_item.second);
}
@ -1688,6 +1994,9 @@ void CalibrationPresetPage::sync_ams_info(MachineObject* obj)
filament_ams_list[VIRTUAL_TRAY_MAIN_ID] = full_filament_ams_list[VIRTUAL_TRAY_MAIN_ID];
}
if (full_filament_ams_list.find(VIRTUAL_TRAY_DEPUTY_ID) != full_filament_ams_list.end()) {
filament_ams_list[VIRTUAL_TRAY_DEPUTY_ID] = full_filament_ams_list[VIRTUAL_TRAY_DEPUTY_ID];
}
// update filament from panel, display only obj has ams
// update multi ams panel, display only obj has multi ams
@ -1700,19 +2009,104 @@ void CalibrationPresetPage::sync_ams_info(MachineObject* obj)
if (!obj->amsList.empty())
update_filament_combobox(obj->amsList.begin()->first);
}
if (obj->is_multi_extruders()) {
bool main_done = false;
bool deputy_done = false;
for (auto &ams_item : obj->amsList) {
if (ams_item.second->nozzle == 0 && !main_done) {
update_multi_extruder_filament_combobox(ams_item.second->id, ams_item.second->nozzle);
main_done = true;
} else if (ams_item.second->nozzle == 1 && !deputy_done) {
update_multi_extruder_filament_combobox(ams_item.second->id, ams_item.second->nozzle);
deputy_done = true;
}
}
}
}
else {
if (obj->is_multi_extruders()) {
update_multi_extruder_filament_combobox(std::to_string(VIRTUAL_TRAY_MAIN_ID), 0);
update_multi_extruder_filament_combobox(std::to_string(VIRTUAL_TRAY_DEPUTY_ID), 1);
}
update_filament_combobox();
m_multi_ams_panel->Hide();
}
m_ams_id_to_extruder_id_map.clear();
std::vector<AMSinfo> ams_info;
std::vector<AMSinfo> main_ams_info;
std::vector<AMSinfo> deputy_ams_info;
for (auto ams = obj->amsList.begin(); ams != obj->amsList.end(); ams++) {
AMSinfo info;
info.ams_id = ams->first;
if (ams->second->is_exists
&& info.parse_ams_info(obj, ams->second, obj->ams_calibrate_remain_flag, obj->is_support_ams_humidity)) {
ams_info.push_back(info);
if (info.nozzle_id == 0) {
main_ams_info.push_back(info);
} else {
deputy_ams_info.push_back(info);
}
}
m_ams_id_to_extruder_id_map[stoi(info.ams_id)] = info.nozzle_id;
}
// update for multi_exturder preview
for (auto i = 0; i < 4; i++) {
AMSPreview *main_item = m_main_ams_preview_list[i];
if (main_ams_info.size() > 0) {
if (i < main_ams_info.size()) {
main_item->Update(main_ams_info[i]);
main_item->Open();
} else {
main_item->Close();
}
}
else {
main_item->Close();
}
AMSPreview *deputy_item = m_deputy_ams_preview_list[i];
if (deputy_ams_info.size() > 0) {
if (i < deputy_ams_info.size()) {
deputy_item->Update(deputy_ams_info[i]);
deputy_item->Open();
} else {
deputy_item->Close();
}
} else {
deputy_item->Close();
}
}
// update vt slot preview list
{
for (const AmsTray& vt_tray : obj->vt_slot) {
if (vt_tray.id == std::to_string(VIRTUAL_TRAY_MAIN_ID)) {
AMSinfo info;
info.ReadExtInfo(vt_tray);
info.ams_type = AMSModel::EXT_AMS;
assert(m_main_ams_preview_list.size() == 4);
AMSPreview *vt_item = m_main_ams_preview_list[4];
vt_item->Update(info);
vt_item->Open();
}
else if (vt_tray.id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) {
AMSinfo info;
info.ReadExtInfo(vt_tray);
info.ams_type = AMSModel::EXT_AMS;
assert(m_deputy_ams_preview_list.size() == 4);
AMSPreview *vt_item = m_deputy_ams_preview_list[4];
vt_item->Update(info);
vt_item->Open();
}
else {
assert(false);
}
}
}
@ -1798,28 +2192,54 @@ std::vector<FilamentComboBox*> CalibrationPresetPage::get_selected_filament_comb
{
std::vector<FilamentComboBox*> fcb_list;
if (m_ext_spool_radiobox->GetValue()) {
if (m_ext_spool_panel) {
if (m_virtual_tray_comboBox->GetRadioBox()->GetValue())
fcb_list.push_back(m_virtual_tray_comboBox);
}
} else if (m_ams_radiobox->GetValue()) {
if (curr_obj && curr_obj->is_multi_extruders()) {
if (m_cali_filament_mode == CalibrationFilamentMode::CALI_MODEL_MULITI) {
for (auto& fcb : m_filament_comboBox_list) {
for (auto &fcb : m_main_filament_comboBox_list) {
if (fcb->GetCheckBox()->GetValue()) {
fcb_list.push_back(fcb);
}
}
}
else if (m_cali_filament_mode == CalibrationFilamentMode::CALI_MODEL_SINGLE) {
for (auto& fcb : m_filament_comboBox_list) {
for (auto &fcb : m_deputy_filament_comboBox_list) {
if (fcb->GetCheckBox()->GetValue()) {
fcb_list.push_back(fcb);
}
}
} else if (m_cali_filament_mode == CalibrationFilamentMode::CALI_MODEL_SINGLE) {
for (auto &fcb : m_main_filament_comboBox_list) {
if (fcb->GetRadioBox()->GetValue()) {
fcb_list.push_back(fcb);
}
}
for (auto &fcb : m_deputy_filament_comboBox_list) {
if (fcb->GetRadioBox()->GetValue()) {
fcb_list.push_back(fcb);
}
}
}
} else {
assert(false);
}
else {
if (m_ext_spool_radiobox->GetValue()) {
if (m_ext_spool_panel) {
if (m_virtual_tray_comboBox->GetRadioBox()->GetValue())
fcb_list.push_back(m_virtual_tray_comboBox);
}
} else if (m_ams_radiobox->GetValue()) {
if (m_cali_filament_mode == CalibrationFilamentMode::CALI_MODEL_MULITI) {
for (auto &fcb : m_filament_comboBox_list) {
if (fcb->GetCheckBox()->GetValue()) {
fcb_list.push_back(fcb);
}
}
} else if (m_cali_filament_mode == CalibrationFilamentMode::CALI_MODEL_SINGLE) {
for (auto &fcb : m_filament_comboBox_list) {
if (fcb->GetRadioBox()->GetValue()) {
fcb_list.push_back(fcb);
}
}
}
} else {
assert(false);
}
}
return fcb_list;
@ -1870,6 +2290,88 @@ void CalibrationPresetPage::get_cali_stage(CaliPresetStage& stage, float& value)
}
}
void CalibrationPresetPage::update_multi_extruder_filament_combobox(const std::string &ams_id, int nozzle_id)
{
if (nozzle_id == 0) {
for (auto &fcb : m_main_filament_comboBox_list) {
fcb->update_from_preset();
fcb->set_select_mode(m_cali_filament_mode);
}
}
else {
for (auto &fcb : m_deputy_filament_comboBox_list) {
fcb->update_from_preset();
fcb->set_select_mode(m_cali_filament_mode);
}
}
DynamicPrintConfig empty_config;
empty_config.set_key_value("filament_id", new ConfigOptionStrings{""});
empty_config.set_key_value("tag_uid", new ConfigOptionStrings{""});
empty_config.set_key_value("filament_type", new ConfigOptionStrings{""});
empty_config.set_key_value("tray_name", new ConfigOptionStrings{""});
empty_config.set_key_value("filament_colour", new ConfigOptionStrings{""});
empty_config.set_key_value("filament_exist", new ConfigOptionBools{false});
if (filament_ams_list.empty()) return;
int ams_id_int = 0;
try {
if (!ams_id.empty())
ams_id_int = stoi(ams_id.c_str());
} catch (...) {}
int item_size = 4;
if (ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) {
item_size = 1;
}
for (int i = 0; i < 4; i++) {
if (i < item_size) {
if (nozzle_id == 0)
m_main_filament_comboBox_list[i]->ShowPanel();
else
m_deputy_filament_comboBox_list[i]->ShowPanel();
}
else {
if (nozzle_id == 0)
m_main_filament_comboBox_list[i]->HidePanel();
else
m_deputy_filament_comboBox_list[i]->HidePanel();
}
int tray_index = ams_id_int * 4 + i;
if (ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) {
tray_index = stoi(ams_id);
}
auto it = std::find_if(filament_ams_list.begin(), filament_ams_list.end(), [tray_index](auto &entry) {
return entry.first == tray_index;
});
if (nozzle_id == 0) {
if (m_main_filament_comboBox_list.empty())
continue;
if (it != filament_ams_list.end()) {
m_main_filament_comboBox_list[i]->load_tray_from_ams(tray_index, it->second);
} else {
m_main_filament_comboBox_list[i]->load_tray_from_ams(tray_index, empty_config);
}
}
else{
if (m_deputy_filament_comboBox_list.empty())
continue;
if (it != filament_ams_list.end()) {
m_deputy_filament_comboBox_list[i]->load_tray_from_ams(tray_index, it->second);
} else {
m_deputy_filament_comboBox_list[i]->load_tray_from_ams(tray_index, empty_config);
}
}
}
Layout();
}
void CalibrationPresetPage::update_filament_combobox(std::string ams_id)
{
for (auto& fcb : m_filament_comboBox_list) {
@ -1888,14 +2390,14 @@ void CalibrationPresetPage::update_filament_combobox(std::string ams_id)
/* update virtual tray combo box*/
m_virtual_tray_comboBox->update_from_preset();
auto it = std::find_if(filament_ams_list.begin(), filament_ams_list.end(), [](auto& entry) {
return entry.first == VIRTUAL_TRAY_MAIN_ID;
return entry.first == VIRTUAL_TRAY_DEPUTY_ID;
});
if (it != filament_ams_list.end()) {
m_virtual_tray_comboBox->load_tray_from_ams(VIRTUAL_TRAY_MAIN_ID, it->second);
m_virtual_tray_comboBox->load_tray_from_ams(VIRTUAL_TRAY_DEPUTY_ID, it->second);
}
else {
m_virtual_tray_comboBox->load_tray_from_ams(VIRTUAL_TRAY_MAIN_ID, empty_config);
m_virtual_tray_comboBox->load_tray_from_ams(VIRTUAL_TRAY_DEPUTY_ID, empty_config);
}
if (filament_ams_list.empty())
@ -1935,9 +2437,9 @@ Preset* CalibrationPresetPage::get_printer_preset(MachineObject* obj, float nozz
if (!printer_it->is_system) continue;
ConfigOption* printer_nozzle_opt = printer_it->config.option("nozzle_diameter");
ConfigOptionFloats* printer_nozzle_vals = nullptr;
ConfigOptionFloatsNullable *printer_nozzle_vals = nullptr;
if (printer_nozzle_opt)
printer_nozzle_vals = dynamic_cast<ConfigOptionFloats*>(printer_nozzle_opt);
printer_nozzle_vals = dynamic_cast<ConfigOptionFloatsNullable*>(printer_nozzle_opt);
std::string model_id = printer_it->get_current_printer_type(preset_bundle);
std::string printer_type = obj->printer_type;

View File

@ -219,6 +219,10 @@ public:
void msw_rescale() override;
void on_sys_color_changed() override;
int get_extruder_id(int ams_id);
NozzleVolumeType get_nozzle_volume_type(int extruder_id) const;
ExtruderType get_extruder_type(int extruder_id) const;
protected:
void create_selection_panel(wxWindow* parent);
void create_filament_list_panel(wxWindow* parent);
@ -285,6 +289,39 @@ protected:
ComboBox* m_comboBox_process;
Label* m_nozzle_diameter_tips{nullptr};
// multi_extruder
void update_multi_extruder_filament_combobox(const std::string &ams_id, int nozzle_id);
void create_multi_extruder_filament_list_panel(wxWindow *parent);
void on_select_nozzle_volume_type(wxCommandEvent &evt, size_t extruder_id);
std::vector<ComboBox*> m_comboBox_nozzle_volume_types;
wxPanel* m_nozzle_volume_type_panel{nullptr};
wxPanel* m_multi_exutrder_filament_list_panel{nullptr};
wxPanel* m_main_ams_preview_panel{nullptr};
wxPanel* m_deputy_ams_preview_panel{nullptr};
wxBoxSizer* m_main_ams_items_sizer{nullptr};
wxBoxSizer* m_deputy_ams_items_sizer{nullptr};
std::vector<AMSPreview *> m_main_ams_preview_list;
std::vector<AMSPreview *> m_deputy_ams_preview_list;
FilamentComboBoxList m_main_filament_comboBox_list;
FilamentComboBoxList m_deputy_filament_comboBox_list;
std::unordered_map<int, int> m_ams_id_to_extruder_id_map;
std::vector<ExtruderType> m_extrder_types;
std::vector<NozzleVolumeType> m_extruder_nozzle_types;
bool m_main_extruder_on_left{true};
wxBoxSizer* m_multi_extruder_ams_panel_sizer;
wxBoxSizer * m_multi_exturder_ams_sizer;
wxStaticBoxSizer * m_main_sizer;
wxStaticBoxSizer * m_deputy_sizer;
wxStaticBoxSizer * m_left_nozzle_volume_type_sizer;
wxStaticBoxSizer * m_right_nozzle_volume_type_sizer;
wxRadioButton* m_ams_radiobox;
wxRadioButton* m_ext_spool_radiobox;

View File

@ -23,58 +23,6 @@ namespace Slic3r { namespace GUI {
// BBS: new layout
constexpr int titleWidth = 20;
// get the param index of cur_exturder
int get_extruder_idx(const DynamicPrintConfig& config, const std::string &opt_key, int cur_extruder_id, NozzleVolumeType nozzle_volume_type)
{
if (printer_extruder_options.find(opt_key) != printer_extruder_options.end()) {
return cur_extruder_id;
}
int extruder_count = wxGetApp().preset_bundle->get_printer_extruder_count();
if (extruder_count == 1 || cur_extruder_id == -1)
return 0;
assert(cur_extruder_id < extruder_count);
const DynamicPrintConfig& cur_printer_config = wxGetApp().preset_bundle->printers.get_selected_preset().config;
auto opt_extruder_type = dynamic_cast<const ConfigOptionEnumsGeneric *>(cur_printer_config.option("extruder_type"));
//auto opt_nozzle_volume_type = dynamic_cast<const ConfigOptionEnumsGeneric *>(cur_printer_config.option("default_nozzle_volume_type"));
if (!opt_extruder_type)
return 0;
ExtruderType extruder_type = (ExtruderType) (opt_extruder_type->get_at(cur_extruder_id));
//NozzleVolumeType nozzle_volume_type = (NozzleVolumeType) (opt_nozzle_volume_type->get_at(cur_extruder_id));
std::string id_name, variant_name;
unsigned int stride = 1;
if (printer_options_with_variant_1.count(opt_key) > 0) { // printer parameter
id_name = "printer_extruder_id";
variant_name = "printer_extruder_variant";
} else if (printer_options_with_variant_2.count(opt_key) > 0) {
id_name = "printer_extruder_id";
variant_name = "printer_extruder_variant";
stride = 2;
} else if (filament_options_with_variant.count(opt_key) > 0) {
//filament don't use id anymore
//id_name = "filament_extruder_id";
variant_name = "filament_extruder_variant";
} else if (print_options_with_variant.count(opt_key) > 0) {
id_name = "print_extruder_id";
variant_name = "print_extruder_variant";
} else {
return 0;
}
// variant index
int variant_index = config.get_index_for_extruder(cur_extruder_id + 1, id_name, extruder_type, nozzle_volume_type, variant_name, stride);
if (variant_index < 0) {
assert(false);
return 0;
}
return variant_index;
}
const t_field& OptionsGroup::build_field(const Option& opt) {
return build_field(opt.opt_id, opt.opt);
}

View File

@ -24,8 +24,6 @@
namespace Slic3r { namespace GUI {
extern int get_extruder_idx(const DynamicPrintConfig& config, const std::string &opt_key, int cur_extruder_id, NozzleVolumeType nozzle_volume_type);
// Thrown if the building of a parameter page is canceled.
class UIBuildCanceled : public std::exception {};
class OG_CustomCtrl;

View File

@ -1982,7 +1982,7 @@ std::map<int, DynamicPrintConfig> Sidebar::build_filament_ams_list(MachineObject
if (obj->ams_support_virtual_tray) {
int extruder = 0x10000; // Main (first) extruder at right
for (auto & vt_tray : obj->vt_slot) {
filament_ams_list.emplace(extruder + VIRTUAL_TRAY_MAIN_ID, build_tray_config(vt_tray, "Ext"));
filament_ams_list.emplace(extruder + stoi(vt_tray.id), build_tray_config(vt_tray, "Ext"));
extruder = 0;
}
}

View File

@ -530,9 +530,9 @@ bool CalibUtils::calib_flowrate(int pass, const CalibInfo &calib_info, wxString
read_model_from_file(input_file, model);
DynamicConfig print_config = calib_info.print_prest->config;
DynamicConfig filament_config = calib_info.filament_prest->config;
DynamicConfig printer_config = calib_info.printer_prest->config;
DynamicPrintConfig print_config = calib_info.print_prest->config;
DynamicPrintConfig filament_config = calib_info.filament_prest->config;
DynamicPrintConfig printer_config = calib_info.printer_prest->config;
/// --- scale ---
// model is created for a 0.4 nozzle, scale z with nozzle size.
@ -555,10 +555,22 @@ bool CalibUtils::calib_flowrate(int pass, const CalibInfo &calib_info, wxString
//}
Flow infill_flow = Flow(nozzle_diameter * 1.2f, layer_height, nozzle_diameter);
double filament_max_volumetric_speed = filament_config.option<ConfigOptionFloatsNullable>("filament_max_volumetric_speed")->get_at(0);
int index = get_index_for_extruder_parameter(filament_config, "filament_max_volumetric_speed", calib_info.extruder_id, calib_info.extruder_type, calib_info.nozzle_volume_type);
double filament_max_volumetric_speed = filament_config.option<ConfigOptionFloatsNullable>("filament_max_volumetric_speed")->get_at(index);
double max_infill_speed = filament_max_volumetric_speed / (infill_flow.mm3_per_mm() * (pass == 1 ? 1.2 : 1));
double internal_solid_speed = std::floor(std::min(print_config.opt_float_nullable("internal_solid_infill_speed", calib_info.extruder_id), max_infill_speed));
double top_surface_speed = std::floor(std::min(print_config.opt_float_nullable("top_surface_speed", calib_info.extruder_id), max_infill_speed));
index = get_index_for_extruder_parameter(print_config, "internal_solid_infill_speed", calib_info.extruder_id, calib_info.extruder_type, calib_info.nozzle_volume_type);
double internal_solid_speed = std::floor(std::min(print_config.opt_float_nullable("internal_solid_infill_speed", index), max_infill_speed));
ConfigOptionFloatsNullable* internal_solid_speed_opt = print_config.option<ConfigOptionFloatsNullable>("internal_solid_infill_speed");
auto & new_internal_solid_speed = internal_solid_speed_opt->values;
new_internal_solid_speed[index] = internal_solid_speed;
index = get_index_for_extruder_parameter(print_config, "top_surface_speed", calib_info.extruder_id, calib_info.extruder_type, calib_info.nozzle_volume_type);
double top_surface_speed = std::floor(std::min(print_config.opt_float_nullable("top_surface_speed", index), max_infill_speed));
ConfigOptionFloatsNullable *top_surface_speed_opt = print_config.option<ConfigOptionFloatsNullable>("top_surface_speed");
auto & new_top_surface_speed = top_surface_speed_opt->values;
new_top_surface_speed[index] = top_surface_speed;
// adjust parameters
filament_config.set_key_value("curr_bed_type", new ConfigOptionEnum<BedType>(calib_info.bed_type));
@ -580,8 +592,8 @@ bool CalibUtils::calib_flowrate(int pass, const CalibInfo &calib_info, wxString
_obj->config.set_key_value("top_solid_infill_flow_ratio", new ConfigOptionFloat(1.0f));
_obj->config.set_key_value("infill_direction", new ConfigOptionFloat(45));
_obj->config.set_key_value("ironing_type", new ConfigOptionEnum<IroningType>(IroningType::NoIroning));
_obj->config.set_key_value("internal_solid_infill_speed", new ConfigOptionFloat(internal_solid_speed));
_obj->config.set_key_value("top_surface_speed", new ConfigOptionFloat(top_surface_speed));
_obj->config.set_key_value("internal_solid_infill_speed", internal_solid_speed_opt);
_obj->config.set_key_value("top_surface_speed", top_surface_speed_opt);
// extract flowrate from name, filename format: flowrate_xxx
std::string obj_name = _obj->name;

View File

@ -18,6 +18,8 @@ public:
int extruder_id = 0;
int ams_id = 0;
int slot_id = 0;
ExtruderType extruder_type{ExtruderType::etDirectDrive};
NozzleVolumeType nozzle_volume_type;
Calib_Params params;
Preset* printer_prest;
Preset* filament_prest;