ENH: filament actions and dual extruder filaments
Change-Id: I12a83f29c96887fc910976ac8e025c4f1508d945
This commit is contained in:
parent
faa2386b0d
commit
0065ea986f
|
@ -0,0 +1,10 @@
|
|||
<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_16585_40433)">
|
||||
<path d="M7.21631 13.8672C8.84076 13.8672 10.3987 13.2219 11.5473 12.0732C12.696 10.9246 13.3413 9.36664 13.3413 7.74219C13.3413 6.11774 12.696 4.55982 11.5473 3.41116C10.3987 2.2625 8.84076 1.61719 7.21631 1.61719C5.59186 1.61719 4.03394 2.2625 2.88528 3.41116C1.73662 4.55982 1.09131 6.11774 1.09131 7.74219C1.09131 9.36664 1.73662 10.9246 2.88528 12.0732C4.03394 13.2219 5.59186 13.8672 7.21631 13.8672ZM7.21631 0.742188C9.07282 0.742188 10.8533 1.47969 12.1661 2.79244C13.4788 4.10519 14.2163 5.88567 14.2163 7.74219C14.2163 9.5987 13.4788 11.3792 12.1661 12.6919C10.8533 14.0047 9.07282 14.7422 7.21631 14.7422C5.35979 14.7422 3.57932 14.0047 2.26656 12.6919C0.953807 11.3792 0.216309 9.5987 0.216309 7.74219C0.216309 5.88567 0.953807 4.10519 2.26656 2.79244C3.57932 1.47969 5.35979 0.742188 7.21631 0.742188ZM7.87256 7.74219C7.87256 7.91624 7.80342 8.08316 7.68035 8.20623C7.55728 8.3293 7.39036 8.39844 7.21631 8.39844C7.04226 8.39844 6.87534 8.3293 6.75227 8.20623C6.6292 8.08316 6.56006 7.91624 6.56006 7.74219C6.56006 7.56814 6.6292 7.40122 6.75227 7.27815C6.87534 7.15508 7.04226 7.08594 7.21631 7.08594C7.39036 7.08594 7.55728 7.15508 7.68035 7.27815C7.80342 7.40122 7.87256 7.56814 7.87256 7.74219ZM9.84131 7.08594C10.0154 7.08594 10.1823 7.15508 10.3053 7.27815C10.4284 7.40122 10.4976 7.56814 10.4976 7.74219C10.4976 7.91624 10.4284 8.08316 10.3053 8.20623C10.1823 8.3293 10.0154 8.39844 9.84131 8.39844C9.66726 8.39844 9.50034 8.3293 9.37727 8.20623C9.2542 8.08316 9.18506 7.91624 9.18506 7.74219C9.18506 7.56814 9.2542 7.40122 9.37727 7.27815C9.50034 7.15508 9.66726 7.08594 9.84131 7.08594ZM5.24756 7.74219C5.24756 7.91624 5.17842 8.08316 5.05535 8.20623C4.93228 8.3293 4.76536 8.39844 4.59131 8.39844C4.41726 8.39844 4.25034 8.3293 4.12727 8.20623C4.0042 8.08316 3.93506 7.91624 3.93506 7.74219C3.93506 7.56814 4.0042 7.40122 4.12727 7.27815C4.25034 7.15508 4.41726 7.08594 4.59131 7.08594C4.76536 7.08594 4.93228 7.15508 5.05535 7.27815C5.17842 7.40122 5.24756 7.56814 5.24756 7.74219Z" fill="#6B6B6B"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_16585_40433">
|
||||
<rect width="14" height="14" fill="white" transform="translate(0.216309 0.742188)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
|
@ -1361,6 +1361,20 @@ void MenuFactory::create_cut_cutter_menu()
|
|||
append_menu_item_change_type(menu);
|
||||
}
|
||||
|
||||
void MenuFactory::create_filament_action_menu()
|
||||
{
|
||||
wxMenu *menu = &m_filament_action_menu;
|
||||
|
||||
append_menu_item(
|
||||
menu, wxID_ANY, _L("Edit"), "", [](wxCommandEvent &) {
|
||||
plater()->sidebar().edit_filament(); }, "", nullptr,
|
||||
[]() { return true; }, m_parent);
|
||||
append_menu_item(
|
||||
menu, wxID_ANY, _L("Delete"), _L("Delete this filament"), [](wxCommandEvent &) {
|
||||
plater()->sidebar().delete_filament(-2); }, "menu_delete", nullptr,
|
||||
[]() { return plater()->sidebar().combos_filament().size() > 1; }, m_parent);
|
||||
}
|
||||
|
||||
//BBS: add part plate related logic
|
||||
void MenuFactory::create_plate_menu()
|
||||
{
|
||||
|
@ -1464,6 +1478,8 @@ void MenuFactory::init(wxWindow* parent)
|
|||
//BBS: add part plate related logic
|
||||
create_plate_menu();
|
||||
|
||||
create_filament_action_menu();
|
||||
|
||||
// create "Instance to Object" menu item
|
||||
append_menu_item_instance_to_object(&m_instance_menu);
|
||||
}
|
||||
|
@ -1641,6 +1657,8 @@ wxMenu* MenuFactory::assemble_multi_selection_menu()
|
|||
return menu;
|
||||
}
|
||||
|
||||
wxMenu *MenuFactory::filament_action_menu() { return &m_filament_action_menu; }
|
||||
|
||||
|
||||
//BBS: add partplate related logic
|
||||
wxMenu* MenuFactory::plate_menu()
|
||||
|
|
|
@ -79,6 +79,8 @@ public:
|
|||
wxMenu* assemble_part_menu();
|
||||
wxMenu* assemble_multi_selection_menu();
|
||||
|
||||
wxMenu *filament_action_menu();
|
||||
|
||||
private:
|
||||
enum MenuType {
|
||||
mtObjectFFF = 0,
|
||||
|
@ -101,6 +103,8 @@ private:
|
|||
MenuWithSeparators m_assemble_object_menu;
|
||||
MenuWithSeparators m_assemble_part_menu;
|
||||
|
||||
wxMenu m_filament_action_menu;
|
||||
|
||||
int object_menu_count{ 0 };
|
||||
int part_menu_count{ 0 };
|
||||
int default_menu_count{ 0 };
|
||||
|
@ -130,6 +134,8 @@ private:
|
|||
void create_bbl_assemble_part_menu();
|
||||
void create_cut_cutter_menu();
|
||||
|
||||
void create_filament_action_menu();
|
||||
|
||||
wxMenu* append_submenu_add_generic(wxMenu* menu, ModelVolumeType type);
|
||||
void append_menu_item_add_svg(wxMenu *menu, ModelVolumeType type, bool is_submenu_item = true);
|
||||
void append_menu_items_add_volume(wxMenu* menu);
|
||||
|
|
|
@ -341,6 +341,7 @@ struct Sidebar::priv
|
|||
ScalableButton * m_bpButton_del_filament;
|
||||
ScalableButton * m_bpButton_ams_filament;
|
||||
ScalableButton * m_bpButton_set_filament;
|
||||
int m_menu_filament_id = -1;
|
||||
wxPanel* m_panel_filament_content;
|
||||
wxScrolledWindow* m_scrolledWindow_filament_content;
|
||||
wxStaticLine* m_staticline2;
|
||||
|
@ -1089,15 +1090,15 @@ Sidebar::Sidebar(Plater *parent)
|
|||
bSizer39->Add(add_btn, 0, wxALIGN_CENTER|wxALL, FromDIP(5));
|
||||
bSizer39->Add(FromDIP(10), 0, 0, 0, 0 );
|
||||
|
||||
ScalableButton* del_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "delete_filament");
|
||||
del_btn->SetToolTip(_L("Remove last filament"));
|
||||
del_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent &e) {
|
||||
delete_filament();
|
||||
});
|
||||
p->m_bpButton_del_filament = del_btn;
|
||||
//ScalableButton* del_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "delete_filament");
|
||||
//del_btn->SetToolTip(_L("Remove last filament"));
|
||||
//del_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent &e) {
|
||||
// delete_filament();
|
||||
//});
|
||||
//p->m_bpButton_del_filament = del_btn;
|
||||
|
||||
bSizer39->Add(del_btn, 0, wxALIGN_CENTER_VERTICAL, FromDIP(5));
|
||||
bSizer39->Add(FromDIP(20), 0, 0, 0, 0);
|
||||
//bSizer39->Add(del_btn, 0, wxALIGN_CENTER_VERTICAL, FromDIP(5));
|
||||
//bSizer39->Add(FromDIP(20), 0, 0, 0, 0);
|
||||
|
||||
ams_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "ams_fila_sync", wxEmptyString, wxDefaultSize, wxDefaultPosition,
|
||||
wxBU_EXACTFIT | wxNO_BORDER, false, 18);
|
||||
|
@ -1138,33 +1139,7 @@ Sidebar::Sidebar(Plater *parent)
|
|||
p->combos_filament.push_back(nullptr);
|
||||
|
||||
/* first filament item */
|
||||
p->combos_filament[0] = new PlaterPresetComboBox(p->m_panel_filament_content, Preset::TYPE_FILAMENT);
|
||||
auto combo_and_btn_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
// BBS: filament double columns
|
||||
combo_and_btn_sizer->Add(FromDIP(8), 0, 0, 0, 0);
|
||||
if (p->combos_filament[0]->clr_picker) {
|
||||
p->combos_filament[0]->clr_picker->SetLabel("1");
|
||||
combo_and_btn_sizer->Add(p->combos_filament[0]->clr_picker, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(3));
|
||||
}
|
||||
combo_and_btn_sizer->Add(p->combos_filament[0], 1, wxALL | wxEXPAND, FromDIP(2))->SetMinSize({-1, FromDIP(30) });
|
||||
|
||||
ScalableButton* edit_btn = new ScalableButton(p->m_panel_filament_content, wxID_ANY, "edit");
|
||||
edit_btn->SetBackgroundColour(wxColour(255, 255, 255));
|
||||
edit_btn->SetToolTip(_L("Click to edit preset"));
|
||||
|
||||
PlaterPresetComboBox* combobox = p->combos_filament[0];
|
||||
edit_btn->Bind(wxEVT_BUTTON, [this, combobox](wxCommandEvent)
|
||||
{
|
||||
p->editing_filament = 0;
|
||||
combobox->switch_to_tab();
|
||||
});
|
||||
combobox->edit_btn = edit_btn;
|
||||
|
||||
combo_and_btn_sizer->Add(edit_btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(3));
|
||||
combo_and_btn_sizer->Add(FromDIP(8), 0, 0, 0, 0);
|
||||
|
||||
p->combos_filament[0]->set_filament_idx(0);
|
||||
p->sizer_filaments->GetItem((size_t)0)->GetSizer()->Add(combo_and_btn_sizer, 1, wxEXPAND);
|
||||
init_filament_combo(&p->combos_filament[0], 0);
|
||||
|
||||
//bSizer_filament_content->Add(p->sizer_filaments, 1, wxALIGN_CENTER | wxALL);
|
||||
wxSizer *sizer_filaments2 = new wxBoxSizer(wxVERTICAL);
|
||||
|
@ -1292,16 +1267,18 @@ void Sidebar::init_filament_combo(PlaterPresetComboBox **combo, const int filame
|
|||
combo_and_btn_sizer->Add(32 * em / 10, 0, 0, 0, 0);
|
||||
combo_and_btn_sizer->Add(del_btn, 0, wxALIGN_CENTER_VERTICAL, 5 * em / 10);
|
||||
*/
|
||||
ScalableButton* edit_btn = new ScalableButton(p->m_panel_filament_content, wxID_ANY, "edit");
|
||||
ScalableButton* edit_btn = new ScalableButton(p->m_panel_filament_content, wxID_ANY, "menu_filament");
|
||||
edit_btn->SetToolTip(_L("Click to edit preset"));
|
||||
|
||||
PlaterPresetComboBox* combobox = (*combo);
|
||||
edit_btn->Bind(wxEVT_BUTTON, [this, combobox, filament_idx](wxCommandEvent)
|
||||
{
|
||||
p->editing_filament = -1;
|
||||
if (combobox->switch_to_tab())
|
||||
p->editing_filament = filament_idx; // sync with TabPresetComboxBox's m_filament_idx
|
||||
});
|
||||
edit_btn->Bind(wxEVT_BUTTON, [this, edit_btn, filament_idx](wxCommandEvent) {
|
||||
auto menu = p->plater->filament_action_menu();
|
||||
wxPoint pt { 0, edit_btn->GetSize().GetHeight() + 10 };
|
||||
pt = edit_btn->ClientToScreen(pt);
|
||||
pt = wxGetApp().mainframe->ScreenToClient(pt);
|
||||
p->m_menu_filament_id = filament_idx;
|
||||
p->plater->PopupMenu(menu, (int) pt.x, pt.y);
|
||||
});
|
||||
combobox->edit_btn = edit_btn;
|
||||
|
||||
combo_and_btn_sizer->Add(edit_btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(3));
|
||||
|
@ -1313,7 +1290,7 @@ void Sidebar::init_filament_combo(PlaterPresetComboBox **combo, const int filame
|
|||
auto /***/sizer_filaments = this->p->sizer_filaments->GetItem(side)->GetSizer();
|
||||
if (side == 1 && filament_idx > 1) sizer_filaments->Remove(filament_idx / 2);
|
||||
sizer_filaments->Add(combo_and_btn_sizer, 1, wxEXPAND);
|
||||
if (side == 0) {
|
||||
if (side == 0 && filament_idx > 0) {
|
||||
sizer_filaments = this->p->sizer_filaments->GetItem(1)->GetSizer();
|
||||
sizer_filaments->AddStretchSpacer(1);
|
||||
}
|
||||
|
@ -1905,6 +1882,9 @@ void Sidebar::delete_filament(size_t filament_id) {
|
|||
if (p->combos_filament.size() <= 1) return;
|
||||
wxBusyCursor busy;
|
||||
size_t filament_count = p->combos_filament.size() - 1;
|
||||
if (filament_id == size_t(-2)) {
|
||||
filament_id = p->m_menu_filament_id;
|
||||
}
|
||||
if (filament_id == size_t(-1)) {
|
||||
filament_id = filament_count;
|
||||
}
|
||||
|
@ -1927,6 +1907,14 @@ void Sidebar::delete_filament(size_t filament_id) {
|
|||
wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config);
|
||||
}
|
||||
|
||||
void Sidebar::edit_filament()
|
||||
{
|
||||
p->editing_filament = -1;
|
||||
if (p->m_menu_filament_id >= 0 && p->m_menu_filament_id < p->combos_filament.size()
|
||||
&& p->combos_filament[p->m_menu_filament_id]->switch_to_tab())
|
||||
p->editing_filament = p->m_menu_filament_id; // sync with TabPresetComboxBox's m_filament_idx
|
||||
}
|
||||
|
||||
void Sidebar::add_custom_filament(wxColour new_col) {
|
||||
if (p->combos_filament.size() >= size_t(EnforcerBlockerType::ExtruderMax)) return;
|
||||
|
||||
|
@ -1952,43 +1940,41 @@ std::map<int, DynamicPrintConfig> Sidebar::build_filament_ams_list(MachineObject
|
|||
std::map<int, DynamicPrintConfig> filament_ams_list;
|
||||
if (!obj) return filament_ams_list;
|
||||
|
||||
auto vt_tray = obj->vt_slot[0];
|
||||
if (obj->ams_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{ true });
|
||||
auto build_tray_config = [](AmsTray const & tray, std::string const & name) {
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": name %1% setting_id %2% color %3%") % name % tray.setting_id % tray.color;
|
||||
DynamicPrintConfig tray_config;
|
||||
tray_config.set_key_value("filament_id", new ConfigOptionStrings{tray.setting_id});
|
||||
tray_config.set_key_value("tag_uid", new ConfigOptionStrings{tray.tag_uid});
|
||||
tray_config.set_key_value("filament_type", new ConfigOptionStrings{tray.type});
|
||||
tray_config.set_key_value("tray_name", new ConfigOptionStrings{ name });
|
||||
tray_config.set_key_value("filament_colour", new ConfigOptionStrings{into_u8(wxColour("#" + tray.color).GetAsString(wxC2S_HTML_SYNTAX))});
|
||||
tray_config.set_key_value("filament_exist", new ConfigOptionBools{tray.is_exists});
|
||||
|
||||
vt_tray_config.set_key_value("filament_multi_colors", new ConfigOptionStrings{});
|
||||
for (int i = 0; i < vt_tray.cols.size(); ++i) {
|
||||
vt_tray_config.opt<ConfigOptionStrings>("filament_multi_colors")->values.push_back(into_u8(wxColour("#" + vt_tray.cols[i]).GetAsString(wxC2S_HTML_SYNTAX)));
|
||||
tray_config.set_key_value("filament_multi_colors", new ConfigOptionStrings{});
|
||||
for (int i = 0; i < tray.cols.size(); ++i) {
|
||||
tray_config.opt<ConfigOptionStrings>("filament_multi_colors")->values.push_back(into_u8(wxColour("#" + tray.cols[i]).GetAsString(wxC2S_HTML_SYNTAX)));
|
||||
}
|
||||
filament_ams_list.emplace(VIRTUAL_TRAY_MAIN_ID, std::move(vt_tray_config));
|
||||
return tray_config;
|
||||
};
|
||||
|
||||
auto vt_tray = obj->vt_tray;
|
||||
if (obj->ams_support_virtual_tray) {
|
||||
int extruder = 0x10000;
|
||||
//for (auto &vt_tray : obj->vt_slot) {
|
||||
filament_ams_list.emplace(extruder + VIRTUAL_TRAY_ID, build_tray_config(vt_tray, "Ext"));
|
||||
extruder = 0;
|
||||
//}
|
||||
}
|
||||
|
||||
auto list = obj->amsList;
|
||||
for (auto ams : list) {
|
||||
char n = ams.first.front() - '0' + 'A';
|
||||
int extruder = /*ams.nozzle ? 0 :*/ 0x10000;
|
||||
for (auto tray : ams.second->trayList) {
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__
|
||||
<< boost::format(": ams %1% tray %2% id %3% color %4%") % ams.first % tray.first % tray.second->setting_id % tray.second->color;
|
||||
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)) });
|
||||
tray_config.set_key_value("filament_exist", new ConfigOptionBools{ tray.second->is_exists });
|
||||
|
||||
tray_config.set_key_value("filament_multi_colors", new ConfigOptionStrings{});
|
||||
for (int i = 0; i < tray.second->cols.size(); ++i) {
|
||||
tray_config.opt<ConfigOptionStrings>("filament_multi_colors")->values.push_back(into_u8(wxColour("#" + tray.second->cols[i]).GetAsString(wxC2S_HTML_SYNTAX)));
|
||||
}
|
||||
filament_ams_list.emplace(((n - 'A') * 4 + t - '1'), std::move(tray_config));
|
||||
filament_ams_list.emplace(extruder + ((n - 'A') * 4 + t - '1'),
|
||||
build_tray_config(*tray.second, std::string(1, n) + std::string(1, t)));
|
||||
extruder = 0;
|
||||
}
|
||||
}
|
||||
return filament_ams_list;
|
||||
|
@ -15011,6 +14997,7 @@ wxMenu* Plater::instance_menu() { return p->menus.instance_menu();
|
|||
wxMenu* Plater::layer_menu() { return p->menus.layer_menu(); }
|
||||
wxMenu* Plater::multi_selection_menu() { return p->menus.multi_selection_menu(); }
|
||||
wxMenu *Plater::assemble_multi_selection_menu() { return p->menus.assemble_multi_selection_menu(); }
|
||||
wxMenu *Plater::filament_action_menu() { return p->menus.filament_action_menu(); }
|
||||
int Plater::GetPlateIndexByRightMenuInLeftUI() { return p->m_is_RightClickInLeftUI; }
|
||||
void Plater::SetPlateIndexByRightMenuInLeftUI(int index) { p->m_is_RightClickInLeftUI = index; }
|
||||
SuppressBackgroundProcessingUpdate::SuppressBackgroundProcessingUpdate() :
|
||||
|
|
|
@ -141,6 +141,7 @@ public:
|
|||
|
||||
void add_filament();
|
||||
void delete_filament(size_t filament_id = size_t(-1));
|
||||
void edit_filament();
|
||||
void add_custom_filament(wxColour new_col);
|
||||
// BBS
|
||||
void on_bed_type_change(BedType bed_type);
|
||||
|
@ -738,6 +739,7 @@ public:
|
|||
wxMenu* layer_menu();
|
||||
wxMenu* multi_selection_menu();
|
||||
wxMenu* assemble_multi_selection_menu();
|
||||
wxMenu* filament_action_menu();
|
||||
int GetPlateIndexByRightMenuInLeftUI();
|
||||
void SetPlateIndexByRightMenuInLeftUI(int);
|
||||
static bool has_illegal_filename_characters(const wxString& name);
|
||||
|
|
|
@ -375,10 +375,15 @@ void PresetComboBox::add_ams_filaments(std::string selected, bool alias_name)
|
|||
{
|
||||
bool is_bbl_vendor_preset = m_preset_bundle->printers.get_edited_preset().is_bbl_vendor_preset(m_preset_bundle);
|
||||
if (is_bbl_vendor_preset && !m_preset_bundle->filament_ams_list.empty()) {
|
||||
set_label_marker(Append(separator(L("AMS filaments")), wxNullBitmap));
|
||||
bool dual_extruder = (--m_preset_bundle->filament_ams_list.end())->first & 0x10000;
|
||||
set_label_marker(Append(separator(dual_extruder ? L("Left filaments") : L("AMS filaments")), wxNullBitmap));
|
||||
m_first_ams_filament = GetCount();
|
||||
auto &filaments = m_collection->get_presets();
|
||||
for (auto &entry : m_preset_bundle->filament_ams_list) {
|
||||
if (dual_extruder && (entry.first & 0x10000)) {
|
||||
dual_extruder = false;
|
||||
set_label_marker(Append(separator(L("Right filaments")), wxNullBitmap));
|
||||
}
|
||||
auto & tray = entry.second;
|
||||
std::string filament_id = tray.opt_string("filament_id", 0u);
|
||||
if (filament_id.empty()) continue;
|
||||
|
|
Loading…
Reference in New Issue