From e9e069c167dbdf8ae3c9f15ca21a38d0ec8c20d1 Mon Sep 17 00:00:00 2001 From: yw4z Date: Thu, 17 Jul 2025 15:44:45 +0300 Subject: [PATCH 01/13] Styling management for buttons and matching all button styles (#8184) * Add button styling * Fix dark mode compability * printable area button * Connection dialog icons * Add aligment control * Fix alignment * add new styles * Update BedShapeDialog.cpp * Use darker text color on dark mode * update code * Update * update * Update * Update WipeTowerDialog.cpp * update * Update Button.cpp * update * Update Button.cpp * add enums for style and type * update * Update Button.cpp * fix * update * Update DialogButtons.cpp * Update UnsavedChangesDialog.cpp * update * update * update * Update Button.cpp * cleanup --------- Co-authored-by: Noisyfox --- src/slic3r/GUI/AboutDialog.cpp | 12 +-- src/slic3r/GUI/BedShapeDialog.cpp | 70 ++------------ src/slic3r/GUI/CreatePresetsDialog.cpp | 80 ++------------- src/slic3r/GUI/FileArchiveDialog.cpp | 43 ++------ src/slic3r/GUI/MsgDialog.cpp | 113 +++++----------------- src/slic3r/GUI/NetworkTestDialog.cpp | 20 ++-- src/slic3r/GUI/PhysicalPrinterDialog.cpp | 22 +---- src/slic3r/GUI/PhysicalPrinterDialog.hpp | 1 + src/slic3r/GUI/Plater.cpp | 23 +---- src/slic3r/GUI/Preferences.cpp | 33 +------ src/slic3r/GUI/Tab.cpp | 57 +---------- src/slic3r/GUI/UnsavedChangesDialog.cpp | 24 +---- src/slic3r/GUI/Widgets/Button.cpp | 78 ++++++++++++++- src/slic3r/GUI/Widgets/Button.hpp | 30 +++++- src/slic3r/GUI/Widgets/DialogButtons.cpp | 80 +-------------- src/slic3r/GUI/Widgets/ProgressDialog.cpp | 4 +- src/slic3r/GUI/WipeTowerDialog.cpp | 92 ++---------------- 17 files changed, 199 insertions(+), 583 deletions(-) diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index 181236fad3..06e968631b 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -342,17 +342,7 @@ AboutDialog::AboutDialog() } //Add "Portions copyright" button Button* button_portions = new Button(this,_L("Portions copyright")); - StateColor report_bg(std::pair(wxColour(255, 255, 255), StateColor::Disabled), std::pair(wxColour(206, 206, 206), StateColor::Pressed), - std::pair(wxColour(238, 238, 238), StateColor::Hovered), std::pair(wxColour(255, 255, 255), StateColor::Enabled), - std::pair(wxColour(255, 255, 255), StateColor::Normal)); - button_portions->SetBackgroundColor(report_bg); - StateColor report_bd(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - button_portions->SetBorderColor(report_bd); - StateColor report_text(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - button_portions->SetTextColor(report_text); - button_portions->SetFont(Label::Body_12); - button_portions->SetCornerRadius(FromDIP(12)); - button_portions->SetMinSize(wxSize(FromDIP(120), FromDIP(24))); + button_portions->SetStyle(ButtonStyle::Regular, ButtonType::Window); wxBoxSizer *copyright_button_ver = new wxBoxSizer(wxVERTICAL); copyright_button_ver->Add( 0, 0, 0, wxTOP, FromDIP(10)); diff --git a/src/slic3r/GUI/BedShapeDialog.cpp b/src/slic3r/GUI/BedShapeDialog.cpp index 9327dc920f..50e8a548e0 100644 --- a/src/slic3r/GUI/BedShapeDialog.cpp +++ b/src/slic3r/GUI/BedShapeDialog.cpp @@ -228,22 +228,9 @@ void BedShapePanel::build_panel(const Pointfs& default_pt, const std::string& cu Line line{ "", "" }; line.full_width = 1; line.widget = [this](wxWindow* parent) { - StateColor clr_bg = StateColor( - std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Pressed), - std::pair(wxColour("#D4D4D4"), (int)StateColor::Hovered), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Normal), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Enabled) - ); - StateColor clr_tx = StateColor( - std::pair(wxColour("#6B6A6A"), (int)StateColor::Disabled), - std::pair(wxColour("#262E30"), (int)StateColor::Hovered), - std::pair(wxColour("#262E30"), (int)StateColor::Normal) - ); Button* shape_btn = new Button(parent, _L("Load shape from STL...")); - shape_btn->SetBackgroundColor(clr_bg); - shape_btn->SetBorderColor(clr_bg); - shape_btn->SetTextColor(clr_tx); + shape_btn->SetStyle(ButtonStyle::Regular, ButtonType::Expanded); + wxSizer* shape_sizer = new wxBoxSizer(wxHORIZONTAL); shape_sizer->Add(shape_btn, 1, wxEXPAND); @@ -324,41 +311,22 @@ wxPanel* BedShapePanel::init_texture_panel() Line line{ "", "" }; line.full_width = 1; line.widget = [this](wxWindow* parent) { - StateColor clr_bg = StateColor( - std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Pressed), - std::pair(wxColour("#D4D4D4"), (int)StateColor::Hovered), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Normal), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Enabled) - ); - StateColor clr_tx = StateColor( - std::pair(wxColour("#6B6A6A"), (int)StateColor::Disabled), - std::pair(wxColour("#262E30"), (int)StateColor::Hovered), - std::pair(wxColour("#262E30"), (int)StateColor::Normal) - ); - Button* load_btn = new Button(parent, _L("Load...")); - load_btn->SetBackgroundColor(clr_bg); - load_btn->SetBorderColor(clr_bg); - load_btn->SetTextColor(clr_tx); + load_btn->SetStyle(ButtonStyle::Regular, ButtonType::Expanded); + wxSizer* load_sizer = new wxBoxSizer(wxHORIZONTAL); load_sizer->Add(load_btn, 1, wxEXPAND); wxStaticText* filename_lbl = new wxStaticText(parent, wxID_ANY, _(NONE)); - wxSizer* filename_sizer = new wxBoxSizer(wxHORIZONTAL); filename_sizer->Add(filename_lbl, 1, wxEXPAND); Button* remove_btn = new Button(parent, _L("Remove")); - remove_btn->SetBackgroundColor(clr_bg); - remove_btn->SetBorderColor(clr_bg); - remove_btn->SetTextColor(clr_tx); + remove_btn->SetStyle(ButtonStyle::Regular, ButtonType::Expanded); + wxSizer* remove_sizer = new wxBoxSizer(wxHORIZONTAL); remove_sizer->Add(remove_btn, 1, wxEXPAND); - wxGetApp().UpdateDarkUI(load_btn); - wxGetApp().UpdateDarkUI(remove_btn); - wxSizer* sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(filename_sizer, 1, wxEXPAND); sizer->Add(load_sizer, 1, wxEXPAND); @@ -420,23 +388,9 @@ wxPanel* BedShapePanel::init_model_panel() Line line{ "", "" }; line.full_width = 1; line.widget = [this](wxWindow* parent) { - StateColor clr_bg = StateColor( - std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Pressed), - std::pair(wxColour("#D4D4D4"), (int)StateColor::Hovered), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Normal), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Enabled) - ); - StateColor clr_tx = StateColor( - std::pair(wxColour("#6B6A6A"), (int)StateColor::Disabled), - std::pair(wxColour("#262E30"), (int)StateColor::Hovered), - std::pair(wxColour("#262E30"), (int)StateColor::Normal) - ); - Button* load_btn = new Button(parent, _L("Load...")); - load_btn->SetBackgroundColor(clr_bg); - load_btn->SetBorderColor(clr_bg); - load_btn->SetTextColor(clr_tx); + load_btn->SetStyle(ButtonStyle::Regular, ButtonType::Expanded); + wxSizer* load_sizer = new wxBoxSizer(wxHORIZONTAL); load_sizer->Add(load_btn, 1, wxEXPAND); @@ -445,15 +399,11 @@ wxPanel* BedShapePanel::init_model_panel() filename_sizer->Add(filename_lbl, 1, wxEXPAND); Button* remove_btn = new Button(parent, _L("Remove")); - remove_btn->SetBackgroundColor(clr_bg); - remove_btn->SetBorderColor(clr_bg); - remove_btn->SetTextColor(clr_tx); + remove_btn->SetStyle(ButtonStyle::Regular, ButtonType::Expanded); + wxSizer* remove_sizer = new wxBoxSizer(wxHORIZONTAL); remove_sizer->Add(remove_btn, 1, wxEXPAND); - wxGetApp().UpdateDarkUI(load_btn); - wxGetApp().UpdateDarkUI(remove_btn); - wxSizer* sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(filename_sizer, 1, wxEXPAND); sizer->Add(load_sizer, 1, wxEXPAND); diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index ca8bb0c9de..8274c004c3 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -1933,21 +1933,10 @@ wxBoxSizer *CreatePrinterPresetDialog::create_hot_bed_stl_item(wxWindow *parent) wxBoxSizer *hot_bed_stl_sizer = new wxBoxSizer(wxVERTICAL); - StateColor flush_bg_col(std::pair(wxColour(219, 253, 231), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(wxColour(238, 238, 238), StateColor::Normal)); + m_button_bed_stl = new Button(parent, _L("Load...")); + m_button_bed_stl->SetStyle(ButtonStyle::Regular, ButtonType::Parameter); + m_button_bed_stl->Bind(wxEVT_BUTTON, ([this](wxCommandEvent& e) { load_model_stl(); })); - StateColor flush_bd_col(std::pair(wxColour(0, 150, 136), StateColor::Pressed), std::pair(wxColour(0, 150, 136), StateColor::Hovered), - std::pair(wxColour(172, 172, 172), StateColor::Normal)); - - m_button_bed_stl = new Button(parent, _L("Load stl")); - m_button_bed_stl->Bind(wxEVT_BUTTON, ([this](wxCommandEvent &e) { load_model_stl(); })); - m_button_bed_stl->SetFont(Label::Body_10); - - m_button_bed_stl->SetPaddingSize(wxSize(FromDIP(30), FromDIP(8))); - m_button_bed_stl->SetFont(Label::Body_13); - m_button_bed_stl->SetCornerRadius(FromDIP(8)); - m_button_bed_stl->SetBackgroundColor(flush_bg_col); - m_button_bed_stl->SetBorderColor(flush_bd_col); hot_bed_stl_sizer->Add(m_button_bed_stl, 0, wxEXPAND | wxALL, 0); horizontal_sizer->Add(hot_bed_stl_sizer, 0, wxEXPAND | wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); @@ -1970,21 +1959,10 @@ wxBoxSizer *CreatePrinterPresetDialog::create_hot_bed_svg_item(wxWindow *parent) wxBoxSizer *hot_bed_stl_sizer = new wxBoxSizer(wxVERTICAL); - StateColor flush_bg_col(std::pair(wxColour(219, 253, 231), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(wxColour(238, 238, 238), StateColor::Normal)); - - StateColor flush_bd_col(std::pair(wxColour(0, 150, 136), StateColor::Pressed), std::pair(wxColour(0, 150, 136), StateColor::Hovered), - std::pair(wxColour(172, 172, 172), StateColor::Normal)); - - m_button_bed_svg = new Button(parent, _L("Load svg")); + m_button_bed_svg = new Button(parent, _L("Load...")); + m_button_bed_svg->SetStyle(ButtonStyle::Regular, ButtonType::Parameter); m_button_bed_svg->Bind(wxEVT_BUTTON, ([this](wxCommandEvent &e) { load_texture(); })); - m_button_bed_svg->SetFont(Label::Body_10); - m_button_bed_svg->SetPaddingSize(wxSize(FromDIP(30), FromDIP(8))); - m_button_bed_svg->SetFont(Label::Body_13); - m_button_bed_svg->SetCornerRadius(FromDIP(8)); - m_button_bed_svg->SetBackgroundColor(flush_bg_col); - m_button_bed_svg->SetBorderColor(flush_bd_col); hot_bed_stl_sizer->Add(m_button_bed_svg, 0, wxEXPAND | wxALL, 0); horizontal_sizer->Add(hot_bed_stl_sizer, 0, wxEXPAND | wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); @@ -4488,22 +4466,8 @@ wxBoxSizer *EditFilamentPresetDialog::create_add_filament_btn() { wxBoxSizer *add_filament_btn_sizer = new wxBoxSizer(wxHORIZONTAL); m_add_filament_btn = new Button(this, _L("+ Add Preset")); - m_add_filament_btn->SetFont(Label::Body_10); - m_add_filament_btn->SetPaddingSize(wxSize(FromDIP(8), FromDIP(3))); - m_add_filament_btn->SetCornerRadius(FromDIP(8)); + m_add_filament_btn->SetStyle(ButtonStyle::Regular, ButtonType::Window); - StateColor flush_bg_col(std::pair(wxColour(219, 253, 231), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(wxColour(238, 238, 238), StateColor::Normal)); - - StateColor flush_fg_col(std::pair(wxColour(107, 107, 106), StateColor::Pressed), std::pair(wxColour(107, 107, 106), StateColor::Hovered), - std::pair(wxColour(107, 107, 106), StateColor::Normal)); - - StateColor flush_bd_col(std::pair(wxColour(0, 150, 136), StateColor::Pressed), std::pair(wxColour(0, 150, 136), StateColor::Hovered), - std::pair(wxColour(172, 172, 172), StateColor::Normal)); - - m_add_filament_btn->SetBackgroundColor(flush_bg_col); - m_add_filament_btn->SetBorderColor(flush_bd_col); - m_add_filament_btn->SetTextColor(flush_fg_col); add_filament_btn_sizer->Add(m_add_filament_btn, 0, wxEXPAND | wxALL, FromDIP(10)); m_add_filament_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { @@ -4836,41 +4800,17 @@ wxPanel *PresetTree::get_child_item(wxPanel *parent, std::shared_ptr pre } sizer->Add(0, 0, 1, wxEXPAND, 0); - StateColor flush_bg_col(std::pair(wxColour(219, 253, 231), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(wxColour(238, 238, 238), StateColor::Normal)); - - StateColor flush_fg_col(std::pair(wxColour(107, 107, 106), StateColor::Pressed), std::pair(wxColour(107, 107, 106), StateColor::Hovered), - std::pair(wxColour(107, 107, 106), StateColor::Normal)); - - StateColor flush_bd_col(std::pair(wxColour(0, 150, 136), StateColor::Pressed), std::pair(wxColour(0, 150, 136), StateColor::Hovered), - std::pair(wxColour(172, 172, 172), StateColor::Normal)); - - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - - Button *edit_preset_btn = new Button(panel, _L("Edit Preset")); - edit_preset_btn->SetFont(Label::Body_10); - edit_preset_btn->SetPaddingSize(wxSize(8, 3)); - edit_preset_btn->SetCornerRadius(8); - edit_preset_btn->SetBackgroundColor(flush_bg_col); - edit_preset_btn->SetBorderColor(flush_bd_col); - edit_preset_btn->SetTextColor(flush_fg_col); + Button *edit_preset_btn = new Button(panel, _L("Edit Preset")); + edit_preset_btn->SetStyle(ButtonStyle::Regular, ButtonType::Compact); //edit_preset_btn->Hide(); sizer->Add(edit_preset_btn, 0, wxALL | wxALIGN_CENTER_VERTICAL, 0); sizer->Add(0, 0, 0, wxLEFT, 5); Button *del_preset_btn = new Button(panel, _L("Delete Preset")); - del_preset_btn->SetFont(Label::Body_10); - del_preset_btn->SetPaddingSize(wxSize(8, 3)); - del_preset_btn->SetCornerRadius(8); if (base_id_error) { - del_preset_btn->SetBackgroundColor(btn_bg_green); - del_preset_btn->SetBorderColor(btn_bg_green); - del_preset_btn->SetTextColor(wxColour(0xFFFFFE)); + del_preset_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Compact); } else { - del_preset_btn->SetBackgroundColor(flush_bg_col); - del_preset_btn->SetBorderColor(flush_bd_col); - del_preset_btn->SetTextColor(flush_fg_col); + del_preset_btn->SetStyle(ButtonStyle::Alert, ButtonType::Compact); } //del_preset_btn->Hide(); diff --git a/src/slic3r/GUI/FileArchiveDialog.cpp b/src/slic3r/GUI/FileArchiveDialog.cpp index ac0eda96d5..18c804196f 100644 --- a/src/slic3r/GUI/FileArchiveDialog.cpp +++ b/src/slic3r/GUI/FileArchiveDialog.cpp @@ -378,62 +378,33 @@ wxBoxSizer* FileArchiveDialog::create_btn_sizer() { auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); - auto apply_highlighted_btn_colors = [](Button* btn) { - btn->SetBackgroundColor(StateColor(std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal))); - - btn->SetBorderColor(StateColor(std::pair(wxColour(0, 150, 136), StateColor::Normal))); - - btn->SetTextColor(StateColor(std::pair(wxColour(255, 255, 254), StateColor::Normal))); - }; - - auto apply_std_btn_colors = [](Button* btn) { - btn->SetBackgroundColor(StateColor(std::pair(wxColour(206, 206, 206), StateColor::Pressed), - std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(wxColour(255, 255, 255), StateColor::Normal))); - - btn->SetBorderColor(StateColor(std::pair(wxColour(38, 46, 48), StateColor::Normal))); - - btn->SetTextColor(StateColor(std::pair(wxColour(38, 46, 48), StateColor::Normal))); - }; - - auto style_btn = [this, apply_highlighted_btn_colors, apply_std_btn_colors](Button* btn, bool highlight) { - btn->SetMinSize(BTN_SIZE); - btn->SetCornerRadius(FromDIP(12)); - if (highlight) - apply_highlighted_btn_colors(btn); - else - apply_std_btn_colors(btn); - }; - Button* all_btn = new Button(this, _L("All")); - style_btn(all_btn, false); + all_btn->SetStyle(ButtonStyle::Regular, ButtonType::Window); all_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { on_all_button(); }); btn_sizer->Add(all_btn, 0, wxALIGN_CENTER_VERTICAL); m_button_list.push_back(all_btn); Button* none_btn = new Button(this, _L("None")); - style_btn(none_btn, false); + none_btn->SetStyle(ButtonStyle::Regular, ButtonType::Window); none_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { on_none_button(); }); - btn_sizer->Add(none_btn, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + btn_sizer->Add(none_btn, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(ButtonProps::WindowButtonGap())); m_button_list.push_back(none_btn); btn_sizer->AddStretchSpacer(); Button* open_btn = new Button(this, _L("Open")); - style_btn(open_btn, true); + open_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Choice); open_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { on_open_button(); }); open_btn->SetFocus(); open_btn->SetId(wxID_OK); - btn_sizer->Add(open_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + btn_sizer->Add(open_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(ButtonProps::ChoiceButtonGap())); m_button_list.push_back(open_btn); Button* cancel_btn = new Button(this, _L("Cancel")); - style_btn(cancel_btn, false); + cancel_btn->SetStyle(ButtonStyle::Regular, ButtonType::Choice); cancel_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { this->EndModal(wxID_CANCEL); }); cancel_btn->SetId(wxID_CANCEL); - btn_sizer->Add(cancel_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + btn_sizer->Add(cancel_btn, 0, wxALIGN_CENTER_VERTICAL); m_button_list.push_back(cancel_btn); return btn_sizer; diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp index 56e74a6270..0ffaeb3fe7 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -109,6 +109,7 @@ void MsgDialog::on_dpi_changed(const wxRect &suggested_rect) while (i != m_buttons.end()) { MsgButton *bd = i->second; + /* ORCA not required since all buttons has same size and Rescale re applies its style wxSize bsize; @@ -120,6 +121,8 @@ void MsgDialog::on_dpi_changed(const wxRect &suggested_rect) } bd->buttondata->button->SetMinSize(bsize); + */ + bd->buttondata->button->Rescale(); i++; } } @@ -137,11 +140,13 @@ void MsgDialog::SetButtonLabel(wxWindowID btn_id, const wxString& label, bool se Button* MsgDialog::add_button(wxWindowID btn_id, bool set_focus /*= false*/, const wxString& label/* = wxString()*/) { Button* btn = new Button(this, label, "", 0, 0, btn_id); + /* ORCA not required since all buttons has same size and Rescale re applies its style ButtonSizeType type; if (label.length() < 5) { type = ButtonSizeNormal; - btn->SetMinSize(MSG_DIALOG_BUTTON_SIZE); } + btn->SetMinSize(MSG_DIALOG_BUTTON_SIZE); // ????? + } else if (label.length() >= 5 && label.length() < 8) { type = ButtonSizeMiddle; btn->SetMinSize(MSG_DIALOG_MIDDLE_BUTTON_SIZE); @@ -153,58 +158,26 @@ Button* MsgDialog::add_button(wxWindowID btn_id, bool set_focus /*= false*/, con type = ButtonSizeLong; btn->SetMinSize(MSG_DIALOG_LONGER_BUTTON_SIZE); } - - btn->SetCornerRadius(FromDIP(12)); - StateColor btn_bg_green( - std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor btn_bd_green( - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor btn_text_green( - std::pair(wxColour(255, 255, 254), StateColor::Normal) - ); - - StateColor btn_bg_white( - std::pair(wxColour(206, 206, 206), StateColor::Pressed), - std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(wxColour(255, 255, 255), StateColor::Normal) - ); - - StateColor btn_bd_white( - std::pair(wxColour(38, 46, 48), StateColor::Normal) - ); - - StateColor btn_text_white( - std::pair(wxColour(38, 46, 48), StateColor::Normal) - ); + */ if (btn_id == wxID_OK || btn_id == wxID_YES) { - btn->SetBackgroundColor(btn_bg_green); - btn->SetBorderColor(btn_bd_green); - btn->SetTextColor(btn_text_green); + btn->SetStyle(ButtonStyle::Confirm, ButtonType::Choice); } if (btn_id == wxID_CANCEL || btn_id == wxID_NO) { - btn->SetBackgroundColor(btn_bg_white); - btn->SetBorderColor(btn_bd_white); - btn->SetTextColor(btn_text_white); + btn->SetStyle(ButtonStyle::Regular, ButtonType::Choice); } if (set_focus) btn->SetFocus(); - btn_sizer->Add(btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_SPACING); + btn_sizer->Add(btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(ButtonProps::ChoiceButtonGap())); btn->Bind(wxEVT_BUTTON, [this, btn_id](wxCommandEvent&) { EndModal(btn_id); }); MsgButton *mb = new MsgButton; ButtonData *bd = new ButtonData; bd->button = btn; - bd->type = type; + //bd->type = type; mb->id = wxString::Format("%d", m_buttons.size()); mb->buttondata = bd; @@ -499,28 +472,14 @@ DeleteConfirmDialog::DeleteConfirmDialog(wxWindow *parent, const wxString &title wxBoxSizer *bSizer_button = new wxBoxSizer(wxHORIZONTAL); bSizer_button->Add(0, 0, 1, wxEXPAND, 0); - StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(*wxWHITE, StateColor::Normal)); - m_cancel_btn = new Button(this, _L("Cancel")); - m_cancel_btn->SetBackgroundColor(btn_bg_white); - m_cancel_btn->SetBorderColor(*wxBLACK); - m_cancel_btn->SetTextColor(wxColour(*wxBLACK)); - m_cancel_btn->SetFont(Label::Body_12); - m_cancel_btn->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_cancel_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_cancel_btn->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_cancel_btn, 0, wxRIGHT | wxBOTTOM, FromDIP(10)); + m_cancel_btn = new Button(this, _L("Cancel")); + m_cancel_btn->SetStyle(ButtonStyle::Regular, ButtonType::Choice); + bSizer_button->Add(m_cancel_btn, 0, wxRIGHT | wxBOTTOM, FromDIP(ButtonProps::ChoiceButtonGap())); m_del_btn = new Button(this, _L("Delete")); - m_del_btn->SetBackgroundColor(*wxRED); - m_del_btn->SetBorderColor(*wxWHITE); - m_del_btn->SetTextColor(wxColour(0xFFFFFE)); - m_del_btn->SetFont(Label::Body_12); - m_del_btn->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_del_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_del_btn->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_del_btn, 0, wxRIGHT | wxBOTTOM, FromDIP(10)); + m_del_btn->SetStyle(ButtonStyle::Alert, ButtonType::Choice); + bSizer_button->Add(m_del_btn, 0, wxRIGHT | wxBOTTOM, FromDIP(ButtonProps::ChoiceButtonGap())); m_main_sizer->Add(bSizer_button, 0, wxEXPAND, 0); m_del_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { EndModal(wxID_OK); }); @@ -607,21 +566,12 @@ wxBoxSizer *Newer3mfVersionDialog::get_btn_sizer() { wxBoxSizer *horizontal_sizer = new wxBoxSizer(wxHORIZONTAL); horizontal_sizer->Add(0, 0, 1, wxEXPAND, 0); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(*wxWHITE, StateColor::Normal)); + bool file_version_newer = (*m_file_version) > (*m_cloud_version); if (!file_version_newer) { m_update_btn = new Button(this, _L("Update")); - m_update_btn->SetBackgroundColor(btn_bg_green); - m_update_btn->SetBorderColor(*wxWHITE); - m_update_btn->SetTextColor(wxColour(0xFFFFFE)); - m_update_btn->SetFont(Label::Body_12); - m_update_btn->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_update_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_update_btn->SetCornerRadius(FromDIP(12)); - horizontal_sizer->Add(m_update_btn, 0, wxRIGHT, FromDIP(10)); + m_update_btn->SetStyle(ButtonStyle::Regular, ButtonType::Choice); + horizontal_sizer->Add(m_update_btn, 0, wxRIGHT, FromDIP(ButtonProps::ChoiceButtonGap())); m_update_btn->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_OK); @@ -637,19 +587,12 @@ wxBoxSizer *Newer3mfVersionDialog::get_btn_sizer() if (!file_version_newer) { m_later_btn = new Button(this, _L("Not for now")); - m_later_btn->SetBackgroundColor(btn_bg_white); - m_later_btn->SetBorderColor(wxColour(38, 46, 48)); + m_later_btn->SetStyle(ButtonStyle::Regular, ButtonType::Choice); } else { m_later_btn = new Button(this, _L("OK")); - m_later_btn->SetBackgroundColor(btn_bg_green); - m_later_btn->SetBorderColor(*wxWHITE); - m_later_btn->SetTextColor(wxColour(0xFFFFFE)); + m_later_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Choice); } - m_later_btn->SetFont(Label::Body_12); - m_later_btn->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_later_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_later_btn->SetCornerRadius(FromDIP(12)); - horizontal_sizer->Add(m_later_btn, 0, wxRIGHT, FromDIP(10)); + horizontal_sizer->Add(m_later_btn, 0, wxRIGHT, FromDIP(ButtonProps::ChoiceButtonGap())); m_later_btn->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_OK); }); @@ -723,22 +666,14 @@ NetworkErrorDialog::NetworkErrorDialog(wxWindow* parent) e.Skip(); }); - auto bt_enable = StateColor(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), - std::pair(wxColour(0, 174, 66), StateColor::Normal)); - m_button_confirm = new Button(this, _L("Confirm")); - m_button_confirm->SetBackgroundColor(bt_enable); - m_button_confirm->SetBorderColor(bt_enable); - m_button_confirm->SetTextColor(StateColor::darkModeColorFor("#FFFFFE")); - m_button_confirm->SetMinSize(wxSize(FromDIP(68), FromDIP(23))); - m_button_confirm->SetMinSize(wxSize(FromDIP(68), FromDIP(23))); - m_button_confirm->SetCornerRadius(12); + m_button_confirm->SetStyle(ButtonStyle::Confirm, ButtonType::Choice); m_button_confirm->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {EndModal(wxCLOSE);}); sizer_button->Add(checkbox, 0, wxALL, 5); sizer_button->Add(checkbox_title, 0, wxALL, 5); sizer_button->Add(0, 0, 1, wxEXPAND, 5); - sizer_button->Add(m_button_confirm, 0, wxALL, 5); + sizer_button->Add(m_button_confirm, 0, wxALL, FromDIP(ButtonProps::ChoiceButtonGap())); sizer_main->Add(m_line_top, 0, wxEXPAND, 0); sizer_main->Add(0, 0, 0, wxTOP, 20); diff --git a/src/slic3r/GUI/NetworkTestDialog.cpp b/src/slic3r/GUI/NetworkTestDialog.cpp index 8805b938af..468ab2a71a 100644 --- a/src/slic3r/GUI/NetworkTestDialog.cpp +++ b/src/slic3r/GUI/NetworkTestDialog.cpp @@ -56,21 +56,20 @@ NetworkTestDialog::NetworkTestDialog(wxWindow* parent, wxWindowID id, const wxSt wxBoxSizer* NetworkTestDialog::create_top_sizer(wxWindow* parent) { - StateColor btn_bg(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), std::pair(wxColour(255, 255, 255), StateColor::Enabled)); auto sizer = new wxBoxSizer(wxVERTICAL); auto line_sizer = new wxBoxSizer(wxHORIZONTAL); btn_start = new Button(this, _L("Start Test Multi-Thread")); - btn_start->SetBackgroundColor(btn_bg); + btn_start->SetStyle(ButtonStyle::Confirm, ButtonType::Window); line_sizer->Add(btn_start, 0, wxALL, 5); btn_start_sequence = new Button(this, _L("Start Test Single-Thread")); - btn_start_sequence->SetBackgroundColor(btn_bg); + btn_start_sequence->SetStyle(ButtonStyle::Regular, ButtonType::Window); line_sizer->Add(btn_start_sequence, 0, wxALL, 5); btn_download_log = new Button(this, _L("Export Log")); - btn_download_log->SetBackgroundColor(btn_bg); + btn_download_log->SetStyle(ButtonStyle::Regular, ButtonType::Window); line_sizer->Add(btn_download_log, 0, wxALL, 5); btn_download_log->Hide(); @@ -138,31 +137,30 @@ wxBoxSizer* NetworkTestDialog::create_content_sizer(wxWindow* parent) grid_sizer->SetFlexibleDirection(wxBOTH); grid_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); - StateColor btn_bg(std::pair(wxColour(0, 137, 123), StateColor::Pressed),std::pair(wxColour(38, 166, 154), StateColor::Hovered), std::pair(wxColour(255,255,255), StateColor::Enabled)); btn_link = new Button(this, _L("Test OrcaSlicer (GitHub)")); - btn_link->SetBackgroundColor(btn_bg); + btn_link->SetStyle(ButtonStyle::Regular, ButtonType::Window); grid_sizer->Add(btn_link, 0, wxEXPAND | wxALL, 5); text_link_title = new wxStaticText(this, wxID_ANY, _L("Test OrcaSlicer (GitHub):"), wxDefaultPosition, wxDefaultSize, 0); text_link_title->Wrap(-1); - grid_sizer->Add(text_link_title, 0, wxALIGN_RIGHT | wxALL, 5); + grid_sizer->Add(text_link_title, 0, wxALIGN_RIGHT | wxALL | wxALIGN_CENTER_VERTICAL, 5); text_link_val = new wxStaticText(this, wxID_ANY, _L("N/A"), wxDefaultPosition, wxDefaultSize, 0); text_link_val->Wrap(-1); - grid_sizer->Add(text_link_val, 0, wxALL, 5); + grid_sizer->Add(text_link_val, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5); btn_bing = new Button(this, _L("Test bing.com")); - btn_bing->SetBackgroundColor(btn_bg); + btn_bing->SetStyle(ButtonStyle::Regular, ButtonType::Window); grid_sizer->Add(btn_bing, 0, wxEXPAND | wxALL, 5); text_bing_title = new wxStaticText(this, wxID_ANY, _L("Test bing.com:"), wxDefaultPosition, wxDefaultSize, 0); text_bing_title->Wrap(-1); - grid_sizer->Add(text_bing_title, 0, wxALIGN_RIGHT | wxALL, 5); + grid_sizer->Add(text_bing_title, 0, wxALIGN_RIGHT | wxALL | wxALIGN_CENTER_VERTICAL, 5); text_bing_val = new wxStaticText(this, wxID_ANY, _L("N/A"), wxDefaultPosition, wxDefaultSize, 0); text_bing_val->Wrap(-1); - grid_sizer->Add(text_bing_val, 0, wxALL, 5); + grid_sizer->Add(text_bing_val, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5); sizer->Add(grid_sizer, 1, wxEXPAND, 5); btn_link->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp index 5165730952..bbc4d9e5e4 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.cpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp @@ -136,25 +136,8 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr m_optgroup->append_single_option_line("host_type"); auto create_sizer_with_btn = [](wxWindow* parent, Button** btn, const std::string& icon_name, const wxString& label) { - *btn = new Button(parent, label, ""/*icon_name*/, 0, parent->FromDIP(16)); - (*btn)->SetFont(Label::Body_14); - (*btn)->SetMinSize(wxSize(parent->FromDIP(120), parent->FromDIP(26))); - (*btn)->SetSize(wxSize(parent->FromDIP(120), parent->FromDIP(26))); - (*btn)->SetCornerRadius(parent->FromDIP(4)); - StateColor clr_bg = StateColor( - std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Pressed), - std::pair(wxColour("#D4D4D4"), (int)StateColor::Hovered), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Normal), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Enabled) - ); - (*btn)->SetBackgroundColor(clr_bg); - (*btn)->SetBorderColor(clr_bg); - (*btn)->SetTextColor(StateColor( - std::pair(wxColour("#6B6A6A"), (int)StateColor::Disabled), - std::pair(wxColour("#262E30"), (int)StateColor::Hovered), - std::pair(wxColour("#262E30"), (int)StateColor::Normal) - )); + *btn = new Button(parent, label); + (*btn)->SetStyle(ButtonStyle::Regular, ButtonType::Parameter); auto sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(*btn); @@ -253,6 +236,7 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr //add_scaled_button(parent, &m_printhost_port_browse_btn, "browse", _(L("Refresh Printers")), wxBU_LEFT | wxBU_EXACTFIT); auto sizer = create_sizer_with_btn(parent, &m_printhost_port_browse_btn, "monitor_signal_strong", _L("Refresh") + " " + dots); Button* btn = m_printhost_port_browse_btn; + btn->SetStyle(ButtonStyle::Regular, ButtonType::Parameter); btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent e) { update_printers(); }); return sizer; }; diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.hpp b/src/slic3r/GUI/PhysicalPrinterDialog.hpp index 08b017c862..cef6d8fe63 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.hpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.hpp @@ -8,6 +8,7 @@ #include "libslic3r/Preset.hpp" #include "GUI_Utils.hpp" #include "Widgets/RoundedRectangle.hpp" +#include "Widgets/Button.hpp" class wxTextCtrl; class wxStaticText; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 49d50e97ee..1e16c5ff2a 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -887,29 +887,8 @@ Sidebar::Sidebar(Plater *parent) // add wiping dialog //wiping_dialog_button->SetFont(wxGetApp().normal_font()); p->m_flushing_volume_btn = new Button(p->m_panel_filament_title, _L("Flushing volumes")); - p->m_flushing_volume_btn->SetFont(Label::Body_10); - p->m_flushing_volume_btn->SetPaddingSize(wxSize(FromDIP(8),FromDIP(3))); - p->m_flushing_volume_btn->SetCornerRadius(FromDIP(8)); - - StateColor flush_bg_col(std::pair(wxColour("#BFE1DE"), StateColor::Pressed), // ORCA - std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(wxColour(238, 238, 238), StateColor::Normal)); - - StateColor flush_fg_col(std::pair(wxColour(107, 107, 106), StateColor::Pressed), - std::pair(wxColour(107, 107, 106), StateColor::Hovered), - std::pair(wxColour(107, 107, 106), StateColor::Normal)); - - StateColor flush_bd_col(std::pair(wxColour(0, 150, 136), StateColor::Pressed), - std::pair(wxColour(0, 150, 136), StateColor::Hovered), - std::pair(wxColour(172, 172, 172), StateColor::Normal)); - - p->m_flushing_volume_btn->SetBackgroundColor(flush_bg_col); - p->m_flushing_volume_btn->SetBorderColor(flush_bd_col); - p->m_flushing_volume_btn->SetTextColor(flush_fg_col); - p->m_flushing_volume_btn->SetFocus(); + p->m_flushing_volume_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Compact); p->m_flushing_volume_btn->SetId(wxID_RESET); - p->m_flushing_volume_btn->Rescale(); - p->m_flushing_volume_btn->Bind(wxEVT_BUTTON, ([parent](wxCommandEvent &e) { auto& project_config = wxGetApp().preset_bundle->project_config; diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 807ec9d4ef..77df4dd0c5 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -860,19 +860,7 @@ wxBoxSizer* PreferencesDialog::create_item_button( m_staticTextPath->SetToolTip(tooltip); auto m_button_download = new Button(parent, title2); - - StateColor abort_bg(std::pair(wxColour(255, 255, 255), StateColor::Disabled), std::pair(wxColour(206, 206, 206), StateColor::Pressed), - std::pair(wxColour(238, 238, 238), StateColor::Hovered), std::pair(wxColour(255, 255, 255), StateColor::Enabled), - std::pair(wxColour(255, 255, 255), StateColor::Normal)); - m_button_download->SetBackgroundColor(abort_bg); - StateColor abort_bd(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - m_button_download->SetBorderColor(abort_bd); - StateColor abort_text(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - m_button_download->SetTextColor(abort_text); - m_button_download->SetFont(Label::Body_10); - m_button_download->SetMinSize(wxSize(FromDIP(58), FromDIP(22))); - m_button_download->SetSize(wxSize(FromDIP(58), FromDIP(22))); - m_button_download->SetCornerRadius(FromDIP(12)); + m_button_download->SetStyle(ButtonStyle::Regular, ButtonType::Window); m_button_download->SetToolTip(tooltip2); m_button_download->Bind(wxEVT_BUTTON, [this, onclick](auto &e) { onclick(); }); @@ -903,19 +891,7 @@ wxWindow* PreferencesDialog::create_item_downloads(wxWindow* parent, int padding m_staticTextPath->Wrap(-1); auto m_button_download = new Button(item_panel, _L("Browse")); - - StateColor abort_bg(std::pair(wxColour(255, 255, 255), StateColor::Disabled), std::pair(wxColour(206, 206, 206), StateColor::Pressed), - std::pair(wxColour(238, 238, 238), StateColor::Hovered), std::pair(wxColour(255, 255, 255), StateColor::Enabled), - std::pair(wxColour(255, 255, 255), StateColor::Normal)); - m_button_download->SetBackgroundColor(abort_bg); - StateColor abort_bd(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - m_button_download->SetBorderColor(abort_bd); - StateColor abort_text(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - m_button_download->SetTextColor(abort_text); - m_button_download->SetFont(Label::Body_10); - m_button_download->SetMinSize(wxSize(FromDIP(58), FromDIP(22))); - m_button_download->SetSize(wxSize(FromDIP(58), FromDIP(22))); - m_button_download->SetCornerRadius(FromDIP(12)); + m_button_download->SetStyle(ButtonStyle::Regular, ButtonType::Window); m_button_download->Bind(wxEVT_BUTTON, [this, m_staticTextPath, item_panel](auto& e) { wxString defaultPath = wxT("/"); @@ -1491,10 +1467,7 @@ wxWindow* PreferencesDialog::create_debug_page() StateColor btn_bd_white(std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); Button* debug_button = new Button(page, _L("debug save button")); - debug_button->SetBackgroundColor(btn_bg_white); - debug_button->SetBorderColor(btn_bd_white); - debug_button->SetFont(Label::Body_13); - + debug_button->SetStyle(ButtonStyle::Regular, ButtonType::Window); debug_button->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { // success message box diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index c1b4e0ee88..aa4a5a13fc 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -3611,25 +3611,10 @@ void TabFilament::build() optgroup->append_single_option_line("filament_stamping_loading_speed"); optgroup->append_single_option_line("filament_stamping_distance"); create_line_with_widget(optgroup.get(), "filament_ramming_parameters", "", [this](wxWindow* parent) { + // ORCA modernize button style Button* btn = new Button(parent, _(L("Set")) + " " + dots); - btn->SetFont(Label::Body_14); - btn->SetSize(wxSize(FromDIP(120), FromDIP(26))); - btn->SetCornerRadius(FromDIP(4)); - StateColor clr_bg = StateColor( - std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Pressed), - std::pair(wxColour("#D4D4D4"), (int)StateColor::Hovered), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Normal), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Enabled) - ); - btn->SetBackgroundColor(clr_bg); - btn->SetBorderColor(clr_bg); - btn->SetTextColor(StateColor( - std::pair(wxColour("#6B6A6A"), (int)StateColor::Disabled), - std::pair(wxColour("#262E30"), (int)StateColor::Hovered), - std::pair(wxColour("#262E30"), (int)StateColor::Normal) - )); + btn->SetStyle(ButtonStyle::Regular, ButtonType::Parameter); auto sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(btn); @@ -6011,23 +5996,7 @@ wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &dep // ORCA modernize button style Button* btn = new Button(parent, _(L("Set")) + " " + dots); - btn->SetFont(Label::Body_14); - btn->SetSize(wxSize(FromDIP(120), FromDIP(26))); - btn->SetCornerRadius(FromDIP(4)); - StateColor clr_bg = StateColor( - std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Pressed), - std::pair(wxColour("#D4D4D4"), (int)StateColor::Hovered), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Normal), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Enabled) - ); - btn->SetBackgroundColor(clr_bg); - btn->SetBorderColor(clr_bg); - btn->SetTextColor(StateColor( - std::pair(wxColour("#6B6A6A"), (int)StateColor::Disabled), - std::pair(wxColour("#262E30"), (int)StateColor::Hovered), - std::pair(wxColour("#262E30"), (int)StateColor::Normal) - )); + btn->SetStyle(ButtonStyle::Regular, ButtonType::Parameter); deps.btn = btn; auto sizer = new wxBoxSizer(wxHORIZONTAL); @@ -6138,25 +6107,9 @@ wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &dep // Return a callback to create a TabPrinter widget to edit bed shape wxSizer* TabPrinter::create_bed_shape_widget(wxWindow* parent) { - // ORCA modernize button style + // ORCA modernize button style Button* btn = new Button(parent, _(L("Set")) + " " + dots); - btn->SetFont(Label::Body_14); - btn->SetSize(wxSize(FromDIP(120), FromDIP(26))); - btn->SetCornerRadius(FromDIP(4)); - StateColor clr_bg = StateColor( - std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Pressed), - std::pair(wxColour("#D4D4D4"), (int)StateColor::Hovered), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Normal), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Enabled) - ); - btn->SetBackgroundColor(clr_bg); - btn->SetBorderColor(clr_bg); - btn->SetTextColor(StateColor( - std::pair(wxColour("#6B6A6A"), (int)StateColor::Disabled), - std::pair(wxColour("#262E30"), (int)StateColor::Hovered), - std::pair(wxColour("#262E30"), (int)StateColor::Normal) - )); + btn->SetStyle(ButtonStyle::Regular, ButtonType::Parameter); auto sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(btn, 0, wxALIGN_CENTER_VERTICAL); diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index e3e0665727..983336558c 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -962,25 +962,11 @@ void UnsavedChangesDialog::build(Preset::Type type, PresetCollection *dependent_ m_sizer_button->Add(0, 0, 1, 0, 0); // Add Buttons - wxFont btn_font = this->GetFont().Scaled(1.4f); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - - auto add_btn = [this, m_sizer_button, btn_font, dependent_presets, btn_bg_green](Button **btn, int &btn_id, const std::string &icon_name, Action close_act, const wxString &label, + auto add_btn = [this, m_sizer_button, dependent_presets](Button **btn, int &btn_id, const std::string &icon_name, Action close_act, const wxString &label, bool focus, bool process_enable = true) { *btn = new Button(this, _L(label)); - if (focus) { - (*btn)->SetBackgroundColor(btn_bg_green); - (*btn)->SetBorderColor(wxColour(0, 150, 136)); - (*btn)->SetTextColor(wxColour("#FFFFFE")); - } else { - (*btn)->SetTextColor(wxColour(107, 107, 107)); - } - - //(*btn)->SetMinSize(UNSAVE_CHANGE_DIALOG_BUTTON_SIZE); - (*btn)->SetMinSize(wxSize(-1,-1)); - (*btn)->SetCornerRadius(FromDIP(12)); + (*btn)->SetStyle(focus ? ButtonStyle::Confirm : ButtonStyle::Regular, ButtonType::Choice); (*btn)->Bind(wxEVT_BUTTON, [this, close_act, dependent_presets](wxEvent &) { bool save_names_and_types = close_act == Action::Save || (close_act == Action::Transfer && ActionButtons::KEEP & m_buttons); @@ -994,7 +980,7 @@ void UnsavedChangesDialog::build(Preset::Type type, PresetCollection *dependent_ e.Skip(); }); - m_sizer_button->Add(*btn, 0, wxLEFT, 5); + m_sizer_button->Add(*btn, 0, wxLEFT, FromDIP(ButtonProps::ChoiceButtonGap())); }; // "Transfer" / "Keep" button @@ -1706,9 +1692,9 @@ void UnsavedChangesDialog::on_dpi_changed(const wxRect& suggested_rect) { int em = em_unit(); - msw_buttons_rescale(this, em, { wxID_CANCEL, m_move_btn_id, m_continue_btn_id }); + //msw_buttons_rescale(this, em, { wxID_CANCEL, m_move_btn_id, m_continue_btn_id }); for (auto btn : {m_transfer_btn, m_discard_btn, m_save_btn}) - if (btn) btn->SetMinSize(UNSAVE_CHANGE_DIALOG_BUTTON_SIZE); + if (btn) btn->Rescale(); //m_cancel_btn->SetMinSize(UNSAVE_CHANGE_DIALOG_BUTTON_SIZE); const wxSize& size = wxSize(70 * em, 30 * em); diff --git a/src/slic3r/GUI/Widgets/Button.cpp b/src/slic3r/GUI/Widgets/Button.cpp index f0ba5e967d..4fed671e74 100644 --- a/src/slic3r/GUI/Widgets/Button.cpp +++ b/src/slic3r/GUI/Widgets/Button.cpp @@ -151,6 +151,79 @@ void Button::SetCenter(bool isCenter) this->isCenter = isCenter; } +// Background Foreground Border on focus +// Button Colors 0-Disabled 1-Pressed 2-Hover 3-Normal 4-Enabled 5-Disabled 6-Normal 7-Hover 8-Dark 9-Light +wxString btn_regular[10] = {"#DFDFDF", "#DFDFDF", "#D4D4D4", "#DFDFDF", "#DFDFDF", "#6B6A6A", "#262E30", "#262E30", "#009688", "#009688"}; +wxString btn_confirm[10] = {"#DFDFDF", "#009688", "#26A69A", "#009688", "#009688", "#6B6A6A", "#FEFEFE", "#FEFEFE", "#26A69A", "#00FFD4"}; +wxString btn_alert[10] = {"#DFDFDF", "#DFDFDF", "#E14747", "#DFDFDF", "#DFDFDF", "#6B6A6A", "#262E30", "#FFFFFD", "#009688", "#009688"}; +wxString btn_disabled[10] = {"#DFDFDF", "#DFDFDF", "#DFDFDF", "#DFDFDF", "#DFDFDF", "#6B6A6A", "#6B6A6A", "#262E30", "#DFDFDF", "#DFDFDF"}; + +void Button::SetStyle(const ButtonStyle style, const ButtonType type) +{ + if (type == ButtonType::Compact) { + this->SetPaddingSize(FromDIP(wxSize(8,3))); + this->SetCornerRadius(this->FromDIP(8)); + this->SetFont(Label::Body_10); + } + else if (type == ButtonType::Window) { + this->SetSize(FromDIP(wxSize(58,24))); + this->SetMinSize(FromDIP(wxSize(58,24))); + this->SetCornerRadius(this->FromDIP(12)); + this->SetFont(Label::Body_12); + } + else if (type == ButtonType::Choice) { + this->SetMinSize(FromDIP(wxSize(100,32))); + this->SetPaddingSize(FromDIP(wxSize(12,8))); + this->SetCornerRadius(this->FromDIP(4)); + this->SetFont(Label::Body_14); + } + else if (type == ButtonType::Parameter) { + this->SetMinSize(FromDIP(wxSize(120,26))); + this->SetSize(FromDIP(wxSize(120,26))); + this->SetCornerRadius(this->FromDIP(4)); + this->SetFont(Label::Body_14); + } + else if (type == ButtonType::Expanded) { + this->SetMinSize(FromDIP(wxSize(-1,32))); + this->SetPaddingSize(FromDIP(wxSize(12,8))); + this->SetCornerRadius(this->FromDIP(4)); + this->SetFont(Label::Body_14); + } + + this->SetBorderWidth(this->FromDIP(1)); + + bool is_dark = StateColor::darkModeColorFor("#FFFFFF") != wxColour("#FFFFFF"); + + auto clr_arr = style == ButtonStyle::Regular ? btn_regular : + style == ButtonStyle::Confirm ? btn_confirm : + style == ButtonStyle::Alert ? btn_alert : + style == ButtonStyle::Disabled ? btn_disabled : + btn_regular ; + + this->SetBackgroundColor(StateColor( + std::pair(wxColour(clr_arr[3]), (int)StateColor::NotHovered), + std::pair(wxColour(clr_arr[0]), (int)StateColor::Disabled), + std::pair(wxColour(clr_arr[1]), (int)StateColor::Pressed), + std::pair(wxColour(clr_arr[2]), (int)StateColor::Hovered), + std::pair(wxColour(clr_arr[3]), (int)StateColor::Normal), + std::pair(wxColour(clr_arr[4]), (int)StateColor::Enabled) + )); + this->SetBorderColor(StateColor( + std::pair(wxColour(clr_arr[3]), (int)StateColor::NotFocused), + std::pair(wxColour(clr_arr[0]), (int)StateColor::Disabled), + std::pair(wxColour(clr_arr[is_dark ? 8 : 9]), (int)StateColor::Focused) + )); + this->SetTextColor(StateColor( + std::pair(wxColour(clr_arr[5]), (int)StateColor::Disabled), + std::pair(wxColour(clr_arr[7]), (int)StateColor::Hovered), + std::pair(wxColour(clr_arr[6]), (int)StateColor::Normal) + )); + + m_has_style = true; + m_style = style; + m_type = type; +} + void Button::Rescale() { if (this->active_icon.bmp().IsOk()) @@ -160,6 +233,9 @@ void Button::Rescale() this->inactive_icon.msw_rescale(); messureSize(); + + if(m_has_style) + SetStyle(m_style, m_type); } void Button::paintEvent(wxPaintEvent& evt) @@ -334,4 +410,4 @@ WXLRESULT Button::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) #endif -bool Button::AcceptsFocus() const { return canFocus; } +bool Button::AcceptsFocus() const { return canFocus; } \ No newline at end of file diff --git a/src/slic3r/GUI/Widgets/Button.hpp b/src/slic3r/GUI/Widgets/Button.hpp index d3496c0e49..3b3b518691 100644 --- a/src/slic3r/GUI/Widgets/Button.hpp +++ b/src/slic3r/GUI/Widgets/Button.hpp @@ -4,6 +4,28 @@ #include "../wxExtensions.hpp" #include "StaticBox.hpp" +class ButtonProps +{ +public: + static int ChoiceButtonGap(){return 10;}; + static int WindowButtonGap(){return 10;}; +}; + +enum class ButtonStyle{ + Regular, + Confirm, + Alert, + Disabled, +}; + +enum class ButtonType{ + Compact , // Font10 FullyRounded For spaces with less areas + Window , // Font12 FullyRounded For regular buttons in windows and not related with parameter boxes + Choice , // Font14 Semi-Rounded For dialog/window choice buttons + Parameter, // Font14 Semi-Rounded For buttons that near parameter boxes + Expanded , // Font14 Semi-Rounded For full length buttons. ex. buttons in static box +}; + class Button : public StaticBox { wxRect textSize; @@ -40,7 +62,9 @@ public: void SetMinSize(const wxSize& size) override; void SetPaddingSize(const wxSize& size); - + + void SetStyle(const ButtonStyle style /*= ButtonStyle::Regular*/, const ButtonType type /*= ButtonType::None*/); + void SetTextColor(StateColor const &color); void SetTextColorNormal(wxColor const &color); @@ -67,6 +91,10 @@ protected: bool AcceptsFocus() const override; private: + bool m_has_style = false; + ButtonStyle m_style; + ButtonType m_type; + void paintEvent(wxPaintEvent& evt); void render(wxDC& dc); diff --git a/src/slic3r/GUI/Widgets/DialogButtons.cpp b/src/slic3r/GUI/Widgets/DialogButtons.cpp index 923e60ab6a..4db205eca9 100644 --- a/src/slic3r/GUI/Widgets/DialogButtons.cpp +++ b/src/slic3r/GUI/Widgets/DialogButtons.cpp @@ -95,30 +95,8 @@ void DialogButtons::SetPrimaryButton(wxString translated_label) { // apply focus only if there is no focused element exist. this prevents stealing focus from input boxes if(m_parent->FindFocus() == nullptr) btn->SetFocus(); - - // we won't need color definations after button style management - bool is_dark = wxGetApp().dark_mode(); - StateColor clr_bg = StateColor( - std::pair(wxColour("#009688"), (int)StateColor::NotHovered), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), - std::pair(wxColour("#009688"), (int)StateColor::Pressed), - std::pair(wxColour("#26A69A"), (int)StateColor::Hovered), - std::pair(wxColour("#009688"), (int)StateColor::Normal), - std::pair(wxColour("#009688"), (int)StateColor::Enabled) - ); - btn->SetBackgroundColor(clr_bg); - StateColor clr_br = StateColor( - std::pair(wxColour("#009688"), (int)StateColor::NotFocused), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), - std::pair(wxColour(is_dark ? "#26A69A" : "#00FFD4"), (int)StateColor::Focused) - ); - btn->SetBorderColor(clr_br); - StateColor clr_tx = StateColor( - std::pair(wxColour("#6B6A6A"), (int)StateColor::Disabled), - std::pair(wxColour("#FEFEFE"), (int)StateColor::Hovered), - std::pair(wxColour("#FEFEFE"), (int)StateColor::Normal) - ); - btn->SetTextColor(clr_tx); + + btn->SetStyle(ButtonStyle::Confirm, ButtonType::Choice); } void DialogButtons::SetAlertButton(wxString translated_label) { @@ -136,66 +114,16 @@ void DialogButtons::SetAlertButton(wxString translated_label) { m_alert = translated_label; - // we won't need color definations after button style management - StateColor clr_bg = StateColor( - std::pair(wxColour("#DFDFDF"), (int)StateColor::NotHovered), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Pressed), - std::pair(wxColour("#CD1F00"), (int)StateColor::Hovered), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Normal), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Enabled) - ); - btn->SetBackgroundColor(clr_bg); - StateColor clr_br = StateColor( - std::pair(wxColour("#DFDFDF"), (int)StateColor::NotFocused), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), - std::pair(wxColour("#26A69A"), (int)StateColor::Focused) - ); - btn->SetBorderColor(clr_br); - StateColor clr_tx = StateColor( - std::pair(wxColour("#CD1F00"), (int)StateColor::NotHovered), - std::pair(wxColour("#6B6A6A"), (int)StateColor::Disabled), - std::pair(wxColour("#CD1F00"), (int)StateColor::Pressed), - std::pair(wxColour("#FFFFFD"), (int)StateColor::Hovered), - std::pair(wxColour("#CD1F00"), (int)StateColor::Focused), - std::pair(wxColour("#CD1F00"), (int)StateColor::Normal) - ); - btn->SetTextColor(clr_tx); + btn->SetStyle(ButtonStyle::Alert, ButtonType::Choice); } void DialogButtons::UpdateButtons() { m_sizer->Clear(); SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#FFFFFF"))); - // we won't need color definations after button style management - StateColor clr_bg = StateColor( - std::pair(wxColour("#DFDFDF"), (int)StateColor::NotHovered), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Pressed), - std::pair(wxColour("#D4D4D4"), (int)StateColor::Hovered), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Normal), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Enabled) - ); - StateColor clr_br = StateColor( - std::pair(wxColour("#DFDFDF"), (int)StateColor::NotFocused), - std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), - std::pair(wxColour("#26A69A"), (int)StateColor::Focused) - ); - StateColor clr_tx = StateColor( - std::pair(wxColour("#6B6A6A"), (int)StateColor::Disabled), - std::pair(wxColour("#262E30"), (int)StateColor::Hovered), - std::pair(wxColour("#262E30"), (int)StateColor::Normal) - ); // Apply standard style to all for (Button* btn : m_buttons) { - btn->SetFont(Label::Body_14); - btn->SetMinSize(wxSize(FromDIP(100),FromDIP(32))); - btn->SetPaddingSize(wxSize(FromDIP(12), FromDIP(8))); - btn->SetCornerRadius(FromDIP(4)); - btn->SetBorderWidth(FromDIP(1)); - btn->SetBackgroundColor(clr_bg); - btn->SetBorderColor(clr_br); - btn->SetTextColor(clr_tx); + btn->SetStyle(ButtonStyle::Regular, ButtonType::Choice); btn->Bind(wxEVT_KEY_DOWN, &DialogButtons::on_keydown, this); } diff --git a/src/slic3r/GUI/Widgets/ProgressDialog.cpp b/src/slic3r/GUI/Widgets/ProgressDialog.cpp index f7841d2600..1db69da11f 100644 --- a/src/slic3r/GUI/Widgets/ProgressDialog.cpp +++ b/src/slic3r/GUI/Widgets/ProgressDialog.cpp @@ -243,9 +243,7 @@ bool ProgressDialog::Create(const wxString &title, const wxString &message, int if (HasPDFlag(wxPD_CAN_ABORT)) { m_button_cancel = new Button(this, _L("Cancel")); - m_button_cancel->SetTextColor(PROGRESSDIALOG_GREY_700); - m_button_cancel->SetMinSize(PROGRESSDIALOG_CANCEL_BUTTON_SIZE); - m_button_cancel->SetCornerRadius(PROGRESSDIALOG_CANCEL_BUTTON_SIZE.y / 2); + m_button_cancel->SetStyle(ButtonStyle::Regular, ButtonType::Choice); m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &event) { if (m_state == Finished) { event.Skip(); diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index 3194909ae5..3d28fe9e8d 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -235,82 +235,27 @@ wxBoxSizer* WipingDialog::create_btn_sizer(long flags) auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); btn_sizer->AddStretchSpacer(); - StateColor ok_btn_bg( - std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor ok_btn_bd( - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor ok_btn_text( - std::pair(wxColour(255, 255, 254), StateColor::Normal) - ); - - StateColor cancel_btn_bg( - std::pair(wxColour(206, 206, 206), StateColor::Pressed), - std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(wxColour(255, 255, 255), StateColor::Normal) - ); - - StateColor cancel_btn_bd_( - std::pair(wxColour(38, 46, 48), StateColor::Normal) - ); - - StateColor cancel_btn_text( - std::pair(wxColour(38, 46, 48), StateColor::Normal) - ); - - - StateColor calc_btn_bg( - std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor calc_btn_bd( - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor calc_btn_text( - std::pair(wxColour(255, 255, 254), StateColor::Normal) - ); - if (flags & wxRESET) { Button *calc_btn = new Button(this, _L("Auto-Calc")); - calc_btn->SetMinSize(wxSize(FromDIP(75), FromDIP(24))); - calc_btn->SetCornerRadius(FromDIP(12)); - calc_btn->SetBackgroundColor(calc_btn_bg); - calc_btn->SetBorderColor(calc_btn_bd); - calc_btn->SetTextColor(calc_btn_text); + calc_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Choice); calc_btn->SetFocus(); calc_btn->SetId(wxID_RESET); - btn_sizer->Add(calc_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + btn_sizer->Add(calc_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(ButtonProps::ChoiceButtonGap())); m_button_list[wxRESET] = calc_btn; } if (flags & wxOK) { Button* ok_btn = new Button(this, _L("OK")); - ok_btn->SetMinSize(BTN_SIZE); - ok_btn->SetCornerRadius(FromDIP(12)); - ok_btn->SetBackgroundColor(ok_btn_bg); - ok_btn->SetBorderColor(ok_btn_bd); - ok_btn->SetTextColor(ok_btn_text); + ok_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Choice); ok_btn->SetFocus(); ok_btn->SetId(wxID_OK); - btn_sizer->Add(ok_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + btn_sizer->Add(ok_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(ButtonProps::ChoiceButtonGap())); m_button_list[wxOK] = ok_btn; } if (flags & wxCANCEL) { Button* cancel_btn = new Button(this, _L("Cancel")); - cancel_btn->SetMinSize(BTN_SIZE); - cancel_btn->SetCornerRadius(FromDIP(12)); - cancel_btn->SetBackgroundColor(cancel_btn_bg); - cancel_btn->SetBorderColor(cancel_btn_bd_); - cancel_btn->SetTextColor(cancel_btn_text); + cancel_btn->SetStyle(ButtonStyle::Regular, ButtonType::Choice); cancel_btn->SetId(wxID_CANCEL); - btn_sizer->Add(cancel_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + btn_sizer->Add(cancel_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(ButtonProps::ChoiceButtonGap())); m_button_list[wxCANCEL] = cancel_btn; } @@ -320,29 +265,11 @@ wxBoxSizer* WipingDialog::create_btn_sizer(long flags) wxBoxSizer* WipingPanel::create_calc_btn_sizer(wxWindow* parent) { auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); - StateColor calc_btn_bg( - std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor calc_btn_bd( - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor calc_btn_text( - std::pair(wxColour(255, 255, 254), StateColor::Normal) - ); Button* calc_btn = new Button(parent, _L("Re-calculate")); - calc_btn->SetFont(Label::Body_13); - calc_btn->SetMinSize(wxSize(FromDIP(75), FromDIP(24))); - calc_btn->SetCornerRadius(FromDIP(12)); - calc_btn->SetBackgroundColor(calc_btn_bg); - calc_btn->SetBorderColor(calc_btn_bd); - calc_btn->SetTextColor(calc_btn_text); + calc_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Window); calc_btn->SetFocus(); - btn_sizer->Add(calc_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + btn_sizer->Add(calc_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(ButtonProps::WindowButtonGap())); calc_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { calc_flushing_volumes(); }); return btn_sizer; @@ -353,8 +280,7 @@ void WipingDialog::on_dpi_changed(const wxRect &suggested_rect) { if (button_item.first == wxRESET) { - button_item.second->SetMinSize(wxSize(FromDIP(75), FromDIP(24))); - button_item.second->SetCornerRadius(FromDIP(12)); + button_item.second->Rescale(); } } m_panel_wiping->msw_rescale(); From 821e5ac5975352dc6b60652786b7a48f9e958bba Mon Sep 17 00:00:00 2001 From: Pepe-Polymaker Date: Thu, 17 Jul 2025 23:16:45 +0800 Subject: [PATCH 02/13] Add more Polymaker filaments to Global Library and BBL (#10152) --- resources/profiles/BBL.json | 952 ++++++++++++++++-- .../Fiberon PA12-CF @BBL X1C.json | 0 .../Fiberon PA12-CF @base.json | 0 .../Fiberon PA6-CF @BBL X1C.json | 0 .../{ => Polymaker}/Fiberon PA6-CF @base.json | 0 .../Fiberon PA6-GF @BBL X1C.json | 0 .../{ => Polymaker}/Fiberon PA6-GF @base.json | 0 .../Fiberon PA612-CF @BBL X1C.json | 0 .../Fiberon PA612-CF @base.json | 0 .../Fiberon PET-CF @BBL X1C.json | 0 .../{ => Polymaker}/Fiberon PET-CF @base.json | 0 .../Fiberon PETG-ESD @BBL X1C.json | 0 .../Fiberon PETG-ESD @base.json | 0 .../Fiberon PETG-rCF @BBL X1C.json | 0 .../Fiberon PETG-rCF @base.json | 0 .../Panchroma CoPE @BBL A1 0.2 nozzle.json | 26 + .../Polymaker/Panchroma CoPE @BBL A1.json | 28 + .../Panchroma CoPE @BBL A1M 0.2 nozzle.json | 26 + .../Polymaker/Panchroma CoPE @BBL A1M.json | 28 + .../Panchroma CoPE @BBL P1P 0.2 nozzle.json | 26 + .../Polymaker/Panchroma CoPE @BBL P1P.json | 28 + .../Panchroma CoPE @BBL X1 0.2 nozzle.json | 26 + .../Polymaker/Panchroma CoPE @BBL X1.json | 28 + .../Panchroma CoPE @BBL X1C 0.2 nozzle.json | 28 + .../Polymaker/Panchroma CoPE @BBL X1C.json | 34 + .../Polymaker/Panchroma CoPE @base.json | 41 + .../Panchroma PLA @BBL A1 0.2 nozzle.json | 26 + .../Polymaker/Panchroma PLA @BBL A1.json | 28 + .../Panchroma PLA @BBL A1M 0.2 nozzle.json | 26 + .../Polymaker/Panchroma PLA @BBL A1M.json | 28 + .../Panchroma PLA @BBL P1P 0.2 nozzle.json | 23 + .../Polymaker/Panchroma PLA @BBL P1P.json | 28 + .../Panchroma PLA @BBL X1 0.2 nozzle.json | 23 + .../Polymaker/Panchroma PLA @BBL X1.json | 25 + .../Panchroma PLA @BBL X1C 0.2 nozzle.json | 25 + .../Polymaker/Panchroma PLA @BBL X1C.json | 31 + .../Polymaker/Panchroma PLA @base.json | 44 + ...roma PLA Celestial @BBL A1 0.2 nozzle.json | 26 + .../Panchroma PLA Celestial @BBL A1.json | 28 + ...oma PLA Celestial @BBL A1M 0.2 nozzle.json | 26 + .../Panchroma PLA Celestial @BBL A1M.json | 28 + ...oma PLA Celestial @BBL P1P 0.2 nozzle.json | 26 + .../Panchroma PLA Celestial @BBL P1P.json | 28 + ...roma PLA Celestial @BBL X1 0.2 nozzle.json | 26 + .../Panchroma PLA Celestial @BBL X1.json | 28 + ...oma PLA Celestial @BBL X1C 0.2 nozzle.json | 28 + .../Panchroma PLA Celestial @BBL X1C.json | 34 + .../Panchroma PLA Celestial @base.json | 41 + ...nchroma PLA Galaxy @BBL A1 0.2 nozzle.json | 26 + .../Panchroma PLA Galaxy @BBL A1.json | 28 + ...chroma PLA Galaxy @BBL A1M 0.2 nozzle.json | 26 + .../Panchroma PLA Galaxy @BBL A1M.json | 28 + ...chroma PLA Galaxy @BBL P1P 0.2 nozzle.json | 26 + .../Panchroma PLA Galaxy @BBL P1P.json | 28 + ...nchroma PLA Galaxy @BBL X1 0.2 nozzle.json | 26 + .../Panchroma PLA Galaxy @BBL X1.json | 28 + ...chroma PLA Galaxy @BBL X1C 0.2 nozzle.json | 28 + .../Panchroma PLA Galaxy @BBL X1C.json | 34 + .../Polymaker/Panchroma PLA Galaxy @base.json | 41 + ...Panchroma PLA Glow @BBL A1 0.2 nozzle.json | 29 + .../Polymaker/Panchroma PLA Glow @BBL A1.json | 31 + ...anchroma PLA Glow @BBL A1M 0.2 nozzle.json | 29 + .../Panchroma PLA Glow @BBL A1M.json | 31 + ...anchroma PLA Glow @BBL P1P 0.2 nozzle.json | 29 + .../Panchroma PLA Glow @BBL P1P.json | 31 + ...Panchroma PLA Glow @BBL X1 0.2 nozzle.json | 29 + .../Polymaker/Panchroma PLA Glow @BBL X1.json | 31 + ...anchroma PLA Glow @BBL X1C 0.2 nozzle.json | 31 + .../Panchroma PLA Glow @BBL X1C.json | 37 + .../Polymaker/Panchroma PLA Glow @base.json | 41 + ...hroma PLA Luminous @BBL A1 0.2 nozzle.json | 29 + .../Panchroma PLA Luminous @BBL A1.json | 31 + ...roma PLA Luminous @BBL A1M 0.2 nozzle.json | 29 + .../Panchroma PLA Luminous @BBL A1M.json | 31 + ...roma PLA Luminous @BBL P1P 0.2 nozzle.json | 29 + .../Panchroma PLA Luminous @BBL P1P.json | 31 + ...hroma PLA Luminous @BBL X1 0.2 nozzle.json | 29 + .../Panchroma PLA Luminous @BBL X1.json | 31 + ...roma PLA Luminous @BBL X1C 0.2 nozzle.json | 31 + .../Panchroma PLA Luminous @BBL X1C.json | 37 + .../Panchroma PLA Luminous @base.json | 41 + ...nchroma PLA Marble @BBL A1 0.2 nozzle.json | 26 + .../Panchroma PLA Marble @BBL A1.json | 28 + ...chroma PLA Marble @BBL A1M 0.2 nozzle.json | 26 + .../Panchroma PLA Marble @BBL A1M.json | 28 + ...chroma PLA Marble @BBL P1P 0.2 nozzle.json | 26 + .../Panchroma PLA Marble @BBL P1P.json | 28 + ...nchroma PLA Marble @BBL X1 0.2 nozzle.json | 26 + .../Panchroma PLA Marble @BBL X1.json | 28 + ...chroma PLA Marble @BBL X1C 0.2 nozzle.json | 28 + .../Panchroma PLA Marble @BBL X1C.json | 34 + .../Polymaker/Panchroma PLA Marble @base.json | 41 + ...anchroma PLA Matte @BBL A1 0.2 nozzle.json | 26 + .../Panchroma PLA Matte @BBL A1.json | 28 + ...nchroma PLA Matte @BBL A1M 0.2 nozzle.json | 26 + .../Panchroma PLA Matte @BBL A1M.json | 28 + ...nchroma PLA Matte @BBL P1P 0.2 nozzle.json | 26 + .../Panchroma PLA Matte @BBL P1P.json | 28 + ...anchroma PLA Matte @BBL X1 0.2 nozzle.json | 26 + .../Panchroma PLA Matte @BBL X1.json | 28 + ...nchroma PLA Matte @BBL X1C 0.2 nozzle.json | 28 + .../Panchroma PLA Matte @BBL X1C.json | 34 + .../Polymaker/Panchroma PLA Matte @base.json | 41 + ...hroma PLA Metallic @BBL A1 0.2 nozzle.json | 29 + .../Panchroma PLA Metallic @BBL A1.json | 31 + ...roma PLA Metallic @BBL A1M 0.2 nozzle.json | 29 + .../Panchroma PLA Metallic @BBL A1M.json | 31 + ...roma PLA Metallic @BBL P1P 0.2 nozzle.json | 29 + .../Panchroma PLA Metallic @BBL P1P.json | 31 + ...hroma PLA Metallic @BBL X1 0.2 nozzle.json | 29 + .../Panchroma PLA Metallic @BBL X1.json | 31 + ...roma PLA Metallic @BBL X1C 0.2 nozzle.json | 31 + .../Panchroma PLA Metallic @BBL X1C.json | 37 + .../Panchroma PLA Metallic @base.json | 41 + ...Panchroma PLA Neon @BBL A1 0.2 nozzle.json | 29 + .../Polymaker/Panchroma PLA Neon @BBL A1.json | 31 + ...anchroma PLA Neon @BBL A1M 0.2 nozzle.json | 29 + .../Panchroma PLA Neon @BBL A1M.json | 31 + ...anchroma PLA Neon @BBL P1P 0.2 nozzle.json | 29 + .../Panchroma PLA Neon @BBL P1P.json | 31 + ...Panchroma PLA Neon @BBL X1 0.2 nozzle.json | 29 + .../Polymaker/Panchroma PLA Neon @BBL X1.json | 31 + ...anchroma PLA Neon @BBL X1C 0.2 nozzle.json | 31 + .../Panchroma PLA Neon @BBL X1C.json | 37 + .../Polymaker/Panchroma PLA Neon @base.json | 41 + ...Panchroma PLA Silk @BBL A1 0.2 nozzle.json | 29 + .../Polymaker/Panchroma PLA Silk @BBL A1.json | 31 + ...anchroma PLA Silk @BBL A1M 0.2 nozzle.json | 29 + .../Panchroma PLA Silk @BBL A1M.json | 31 + ...anchroma PLA Silk @BBL P1P 0.2 nozzle.json | 29 + .../Panchroma PLA Silk @BBL P1P.json | 31 + ...Panchroma PLA Silk @BBL X1 0.2 nozzle.json | 29 + .../Polymaker/Panchroma PLA Silk @BBL X1.json | 31 + ...anchroma PLA Silk @BBL X1C 0.2 nozzle.json | 31 + .../Panchroma PLA Silk @BBL X1C.json | 37 + .../Polymaker/Panchroma PLA Silk @base.json | 41 + ...anchroma PLA Stain @BBL A1 0.2 nozzle.json | 29 + .../Panchroma PLA Stain @BBL A1.json | 31 + ...nchroma PLA Stain @BBL A1M 0.2 nozzle.json | 29 + .../Panchroma PLA Stain @BBL A1M.json | 31 + ...nchroma PLA Stain @BBL P1P 0.2 nozzle.json | 29 + .../Panchroma PLA Stain @BBL P1P.json | 31 + ...anchroma PLA Stain @BBL X1 0.2 nozzle.json | 29 + .../Panchroma PLA Stain @BBL X1.json | 31 + ...nchroma PLA Stain @BBL X1C 0.2 nozzle.json | 31 + .../Panchroma PLA Stain @BBL X1C.json | 37 + .../Polymaker/Panchroma PLA Stain @base.json | 41 + ...roma PLA Starlight @BBL A1 0.2 nozzle.json | 29 + .../Panchroma PLA Starlight @BBL A1.json | 31 + ...oma PLA Starlight @BBL A1M 0.2 nozzle.json | 29 + .../Panchroma PLA Starlight @BBL A1M.json | 31 + ...oma PLA Starlight @BBL P1P 0.2 nozzle.json | 29 + .../Panchroma PLA Starlight @BBL P1P.json | 31 + ...roma PLA Starlight @BBL X1 0.2 nozzle.json | 29 + .../Panchroma PLA Starlight @BBL X1.json | 31 + ...oma PLA Starlight @BBL X1C 0.2 nozzle.json | 31 + .../Panchroma PLA Starlight @BBL X1C.json | 37 + .../Panchroma PLA Starlight @base.json | 41 + ...oma PLA Temp Shift @BBL A1 0.2 nozzle.json | 29 + .../Panchroma PLA Temp Shift @BBL A1.json | 31 + ...ma PLA Temp Shift @BBL A1M 0.2 nozzle.json | 29 + .../Panchroma PLA Temp Shift @BBL A1M.json | 31 + ...ma PLA Temp Shift @BBL P1P 0.2 nozzle.json | 29 + .../Panchroma PLA Temp Shift @BBL P1P.json | 31 + ...oma PLA Temp Shift @BBL X1 0.2 nozzle.json | 29 + .../Panchroma PLA Temp Shift @BBL X1.json | 31 + ...ma PLA Temp Shift @BBL X1C 0.2 nozzle.json | 31 + .../Panchroma PLA Temp Shift @BBL X1C.json | 37 + .../Panchroma PLA Temp Shift @base.json | 41 + ...ma PLA Translucent @BBL A1 0.2 nozzle.json | 29 + .../Panchroma PLA Translucent @BBL A1.json | 31 + ...a PLA Translucent @BBL A1M 0.2 nozzle.json | 29 + .../Panchroma PLA Translucent @BBL A1M.json | 31 + ...a PLA Translucent @BBL P1P 0.2 nozzle.json | 29 + .../Panchroma PLA Translucent @BBL P1P.json | 31 + ...ma PLA Translucent @BBL X1 0.2 nozzle.json | 29 + .../Panchroma PLA Translucent @BBL X1.json | 31 + ...a PLA Translucent @BBL X1C 0.2 nozzle.json | 31 + .../Panchroma PLA Translucent @BBL X1C.json | 37 + .../Panchroma PLA Translucent @base.json | 41 + ...hroma PLA UV Shift @BBL A1 0.2 nozzle.json | 29 + .../Panchroma PLA UV Shift @BBL A1.json | 31 + ...roma PLA UV Shift @BBL A1M 0.2 nozzle.json | 29 + .../Panchroma PLA UV Shift @BBL A1M.json | 31 + ...roma PLA UV Shift @BBL P1P 0.2 nozzle.json | 29 + .../Panchroma PLA UV Shift @BBL P1P.json | 31 + ...hroma PLA UV Shift @BBL X1 0.2 nozzle.json | 29 + .../Panchroma PLA UV Shift @BBL X1.json | 31 + ...roma PLA UV Shift @BBL X1C 0.2 nozzle.json | 31 + .../Panchroma PLA UV Shift @BBL X1C.json | 37 + .../Panchroma PLA UV Shift @base.json | 41 + .../PolyLite ABS @BBL A1 0.2 nozzle.json | 0 .../{ => Polymaker}/PolyLite ABS @BBL A1.json | 0 .../PolyLite ABS @BBL P1P 0.2 nozzle.json | 0 .../PolyLite ABS @BBL P1P.json | 0 .../PolyLite ABS @BBL X1C 0.2 nozzle.json | 0 .../PolyLite ABS @BBL X1C.json | 0 .../PolyLite ABS @BBL X1E 0.2 nozzle.json | 0 .../PolyLite ABS @BBL X1E.json | 0 .../{ => Polymaker}/PolyLite ABS @base.json | 0 .../PolyLite ASA @BBL A1 0.2 nozzle.json | 0 .../{ => Polymaker}/PolyLite ASA @BBL A1.json | 0 .../PolyLite ASA @BBL P1P 0.2 nozzle.json | 0 .../PolyLite ASA @BBL P1P.json | 0 .../PolyLite ASA @BBL X1C 0.2 nozzle.json | 0 .../PolyLite ASA @BBL X1C.json | 0 .../PolyLite ASA @BBL X1E 0.2 nozzle.json | 0 .../PolyLite ASA @BBL X1E.json | 0 .../{ => Polymaker}/PolyLite ASA @base.json | 0 .../PolyLite PETG @BBL A1 0.2 nozzle.json | 0 .../PolyLite PETG @BBL A1.json | 0 .../PolyLite PETG @BBL A1M 0.2 nozzle.json | 0 .../PolyLite PETG @BBL A1M.json | 0 .../PolyLite PETG @BBL P1P 0.2 nozzle.json | 0 .../PolyLite PETG @BBL P1P.json | 0 .../PolyLite PETG @BBL X1C 0.2 nozzle.json | 0 .../PolyLite PETG @BBL X1C.json | 0 .../{ => Polymaker}/PolyLite PETG @base.json | 0 .../PolyLite PLA @BBL A1 0.2 nozzle.json | 0 .../{ => Polymaker}/PolyLite PLA @BBL A1.json | 0 .../PolyLite PLA @BBL A1M 0.2 nozzle.json | 0 .../PolyLite PLA @BBL A1M.json | 0 .../{ => Polymaker}/PolyLite PLA @BBL X1.json | 0 .../PolyLite PLA @BBL X1C 0.2 nozzle.json | 0 .../PolyLite PLA @BBL X1C.json | 0 .../{ => Polymaker}/PolyLite PLA @base.json | 0 .../PolyLite PLA Pro @BBL A1 0.2 nozzle.json | 26 + .../Polymaker/PolyLite PLA Pro @BBL A1.json | 28 + .../PolyLite PLA Pro @BBL A1M 0.2 nozzle.json | 26 + .../Polymaker/PolyLite PLA Pro @BBL A1M.json | 28 + .../PolyLite PLA Pro @BBL P1P 0.2 nozzle.json | 23 + .../Polymaker/PolyLite PLA Pro @BBL P1P.json | 28 + .../PolyLite PLA Pro @BBL X1 0.2 nozzle.json | 23 + .../Polymaker/PolyLite PLA Pro @BBL X1.json | 25 + .../PolyLite PLA Pro @BBL X1C 0.2 nozzle.json | 25 + .../Polymaker/PolyLite PLA Pro @BBL X1C.json | 31 + .../Polymaker/PolyLite PLA Pro @base.json | 41 + .../PolyTerra PLA @BBL A1 0.2 nozzle.json | 0 .../PolyTerra PLA @BBL A1.json | 0 .../PolyTerra PLA @BBL A1M 0.2 nozzle.json | 0 .../PolyTerra PLA @BBL A1M.json | 0 .../PolyTerra PLA @BBL X1.json | 0 .../PolyTerra PLA @BBL X1C 0.2 nozzle.json | 0 .../PolyTerra PLA @BBL X1C.json | 0 .../{ => Polymaker}/PolyTerra PLA @base.json | 0 .../Polymaker HT-PLA @BBL A1 0.2 nozzle.json | 26 + .../Polymaker/Polymaker HT-PLA @BBL A1.json | 28 + .../Polymaker HT-PLA @BBL A1M 0.2 nozzle.json | 26 + .../Polymaker/Polymaker HT-PLA @BBL A1M.json | 28 + .../Polymaker HT-PLA @BBL P1P 0.2 nozzle.json | 23 + .../Polymaker/Polymaker HT-PLA @BBL P1P.json | 28 + .../Polymaker HT-PLA @BBL X1 0.2 nozzle.json | 23 + .../Polymaker/Polymaker HT-PLA @BBL X1.json | 25 + .../Polymaker HT-PLA @BBL X1C 0.2 nozzle.json | 25 + .../Polymaker/Polymaker HT-PLA @BBL X1C.json | 31 + .../Polymaker/Polymaker HT-PLA @base.json | 47 + ...olymaker HT-PLA-GF @BBL A1 0.2 nozzle.json | 26 + .../Polymaker HT-PLA-GF @BBL A1.json | 28 + ...lymaker HT-PLA-GF @BBL A1M 0.2 nozzle.json | 26 + .../Polymaker HT-PLA-GF @BBL A1M.json | 28 + ...lymaker HT-PLA-GF @BBL P1P 0.2 nozzle.json | 23 + .../Polymaker HT-PLA-GF @BBL P1P.json | 28 + ...olymaker HT-PLA-GF @BBL X1 0.2 nozzle.json | 23 + .../Polymaker HT-PLA-GF @BBL X1.json | 25 + ...lymaker HT-PLA-GF @BBL X1C 0.2 nozzle.json | 25 + .../Polymaker HT-PLA-GF @BBL X1C.json | 31 + .../Polymaker/Polymaker HT-PLA-GF @base.json | 41 + resources/profiles/OrcaFilamentLibrary.json | 164 ++- .../Polymaker/Panchroma CoPE @System.json | 14 + .../Polymaker/Panchroma CoPE @base.json | 38 + .../Polymaker/Panchroma PLA @System.json | 14 + .../Polymaker/Panchroma PLA @base.json | 32 + .../Panchroma PLA Celestial @System.json | 14 + .../Panchroma PLA Celestial @base.json | 38 + .../Panchroma PLA Galaxy @System.json | 14 + .../Polymaker/Panchroma PLA Galaxy @base.json | 38 + .../Polymaker/Panchroma PLA Glow @System.json | 14 + .../Polymaker/Panchroma PLA Glow @base.json | 38 + .../Panchroma PLA Luminous @System.json | 14 + .../Panchroma PLA Luminous @base.json | 38 + .../Panchroma PLA Marble @System.json | 11 + .../Polymaker/Panchroma PLA Marble @base.json | 35 + .../Panchroma PLA Matte @System.json | 11 + .../Polymaker/Panchroma PLA Matte @base.json | 35 + .../Panchroma PLA Metallic @System.json | 14 + .../Panchroma PLA Metallic @base.json | 38 + .../Polymaker/Panchroma PLA Neon @System.json | 14 + .../Polymaker/Panchroma PLA Neon @base.json | 38 + .../Polymaker/Panchroma PLA Silk @System.json | 11 + .../Polymaker/Panchroma PLA Silk @base.json | 35 + .../Panchroma PLA Stain @System.json | 14 + .../Polymaker/Panchroma PLA Stain @base.json | 35 + .../Panchroma PLA Starlight @System.json | 14 + .../Panchroma PLA Starlight @base.json | 38 + .../Panchroma PLA Temp Shift @System.json | 14 + .../Panchroma PLA Temp Shift @base.json | 38 + .../Panchroma PLA Translucent @System.json | 14 + .../Panchroma PLA Translucent @base.json | 38 + .../Panchroma PLA UV Shift @System.json | 14 + .../Panchroma PLA UV Shift @base.json | 38 + .../Polymaker/PolyLite PLA Pro @System.json | 14 + .../Polymaker/PolyLite PLA Pro @base.json | 38 + .../Polymaker/Polymaker HT-PLA @System.json | 14 + .../Polymaker/Polymaker HT-PLA @base.json | 50 + .../Polymaker HT-PLA-GF @System.json | 14 + .../Polymaker/Polymaker HT-PLA-GF @base.json | 50 + 306 files changed, 8347 insertions(+), 64 deletions(-) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PA12-CF @BBL X1C.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PA12-CF @base.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PA6-CF @BBL X1C.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PA6-CF @base.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PA6-GF @BBL X1C.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PA6-GF @base.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PA612-CF @BBL X1C.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PA612-CF @base.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PET-CF @BBL X1C.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PET-CF @base.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PETG-ESD @BBL X1C.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PETG-ESD @base.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PETG-rCF @BBL X1C.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/Fiberon PETG-rCF @base.json (100%) create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @base.json rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ABS @BBL A1 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ABS @BBL A1.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ABS @BBL P1P 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ABS @BBL P1P.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ABS @BBL X1C 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ABS @BBL X1C.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ABS @BBL X1E 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ABS @BBL X1E.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ABS @base.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ASA @BBL A1 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ASA @BBL A1.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ASA @BBL P1P 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ASA @BBL P1P.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ASA @BBL X1C 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ASA @BBL X1C.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ASA @BBL X1E 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ASA @BBL X1E.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite ASA @base.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PETG @BBL A1 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PETG @BBL A1.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PETG @BBL A1M 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PETG @BBL A1M.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PETG @BBL P1P 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PETG @BBL P1P.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PETG @BBL X1C 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PETG @BBL X1C.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PETG @base.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PLA @BBL A1 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PLA @BBL A1.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PLA @BBL A1M 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PLA @BBL A1M.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PLA @BBL X1.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PLA @BBL X1C 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PLA @BBL X1C.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyLite PLA @base.json (100%) create mode 100644 resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @base.json rename resources/profiles/BBL/filament/{ => Polymaker}/PolyTerra PLA @BBL A1 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyTerra PLA @BBL A1.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyTerra PLA @BBL A1M 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyTerra PLA @BBL A1M.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyTerra PLA @BBL X1.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyTerra PLA @BBL X1C 0.2 nozzle.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyTerra PLA @BBL X1C.json (100%) rename resources/profiles/BBL/filament/{ => Polymaker}/PolyTerra PLA @base.json (100%) create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @base.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @base.json diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 41232f6cda..6ec894dd04 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -695,7 +695,7 @@ }, { "name": "PolyLite ABS @base", - "sub_path": "filament/PolyLite ABS @base.json" + "sub_path": "filament/Polymaker/PolyLite ABS @base.json" }, { "name": "Bambu ASA @base", @@ -715,7 +715,7 @@ }, { "name": "PolyLite ASA @base", - "sub_path": "filament/PolyLite ASA @base.json" + "sub_path": "filament/Polymaker/PolyLite ASA @base.json" }, { "name": "Generic BVOH @base", @@ -755,19 +755,19 @@ }, { "name": "Fiberon PA12-CF @base", - "sub_path": "filament/Fiberon PA12-CF @base.json" + "sub_path": "filament/Polymaker/Fiberon PA12-CF @base.json" }, { "name": "Fiberon PA6-CF @base", - "sub_path": "filament/Fiberon PA6-CF @base.json" + "sub_path": "filament/Polymaker/Fiberon PA6-CF @base.json" }, { "name": "Fiberon PA6-GF @base", - "sub_path": "filament/Fiberon PA6-GF @base.json" + "sub_path": "filament/Polymaker/Fiberon PA6-GF @base.json" }, { "name": "Fiberon PA612-CF @base", - "sub_path": "filament/Fiberon PA612-CF @base.json" + "sub_path": "filament/Polymaker/Fiberon PA612-CF @base.json" }, { "name": "Generic PA", @@ -831,15 +831,15 @@ }, { "name": "Fiberon PET-CF @base", - "sub_path": "filament/Fiberon PET-CF @base.json" + "sub_path": "filament/Polymaker/Fiberon PET-CF @base.json" }, { "name": "Fiberon PETG-ESD @base", - "sub_path": "filament/Fiberon PETG-ESD @base.json" + "sub_path": "filament/Polymaker/Fiberon PETG-ESD @base.json" }, { "name": "Fiberon PETG-rCF @base", - "sub_path": "filament/Fiberon PETG-rCF @base.json" + "sub_path": "filament/Polymaker/Fiberon PETG-rCF @base.json" }, { "name": "Generic PETG @base", @@ -855,7 +855,7 @@ }, { "name": "PolyLite PETG @base", - "sub_path": "filament/PolyLite PETG @base.json" + "sub_path": "filament/Polymaker/PolyLite PETG @base.json" }, { "name": "SUNLU PETG @base", @@ -963,11 +963,11 @@ }, { "name": "PolyLite PLA @base", - "sub_path": "filament/PolyLite PLA @base.json" + "sub_path": "filament/Polymaker/PolyLite PLA @base.json" }, { "name": "PolyTerra PLA @base", - "sub_path": "filament/PolyTerra PLA @base.json" + "sub_path": "filament/Polymaker/PolyTerra PLA @base.json" }, { "name": "SUNLU PLA Marble @base", @@ -1143,19 +1143,19 @@ }, { "name": "PolyLite ABS @BBL A1", - "sub_path": "filament/PolyLite ABS @BBL A1.json" + "sub_path": "filament/Polymaker/PolyLite ABS @BBL A1.json" }, { "name": "PolyLite ABS @BBL A1 0.2 nozzle", - "sub_path": "filament/PolyLite ABS @BBL A1 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite ABS @BBL A1 0.2 nozzle.json" }, { "name": "PolyLite ABS @BBL P1P", - "sub_path": "filament/PolyLite ABS @BBL P1P.json" + "sub_path": "filament/Polymaker/PolyLite ABS @BBL P1P.json" }, { "name": "PolyLite ABS @BBL X1C", - "sub_path": "filament/PolyLite ABS @BBL X1C.json" + "sub_path": "filament/Polymaker/PolyLite ABS @BBL X1C.json" }, { "name": "Bambu ASA @BBL A1 0.2 nozzle", @@ -1271,19 +1271,19 @@ }, { "name": "PolyLite ASA @BBL A1", - "sub_path": "filament/PolyLite ASA @BBL A1.json" + "sub_path": "filament/Polymaker/PolyLite ASA @BBL A1.json" }, { "name": "PolyLite ASA @BBL A1 0.2 nozzle", - "sub_path": "filament/PolyLite ASA @BBL A1 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite ASA @BBL A1 0.2 nozzle.json" }, { "name": "PolyLite ASA @BBL P1P", - "sub_path": "filament/PolyLite ASA @BBL P1P.json" + "sub_path": "filament/Polymaker/PolyLite ASA @BBL P1P.json" }, { "name": "PolyLite ASA @BBL X1C", - "sub_path": "filament/PolyLite ASA @BBL X1C.json" + "sub_path": "filament/Polymaker/PolyLite ASA @BBL X1C.json" }, { "name": "Generic BVOH @BBL A1", @@ -1407,19 +1407,19 @@ }, { "name": "Fiberon PA12-CF @BBL X1C", - "sub_path": "filament/Fiberon PA12-CF @BBL X1C.json" + "sub_path": "filament/Polymaker/Fiberon PA12-CF @BBL X1C.json" }, { "name": "Fiberon PA6-CF @BBL X1C", - "sub_path": "filament/Fiberon PA6-CF @BBL X1C.json" + "sub_path": "filament/Polymaker/Fiberon PA6-CF @BBL X1C.json" }, { "name": "Fiberon PA6-GF @BBL X1C", - "sub_path": "filament/Fiberon PA6-GF @BBL X1C.json" + "sub_path": "filament/Polymaker/Fiberon PA6-GF @BBL X1C.json" }, { "name": "Fiberon PA612-CF @BBL X1C", - "sub_path": "filament/Fiberon PA612-CF @BBL X1C.json" + "sub_path": "filament/Polymaker/Fiberon PA612-CF @BBL X1C.json" }, { "name": "Generic PA @BBL A1", @@ -1727,15 +1727,15 @@ }, { "name": "Fiberon PET-CF @BBL X1C", - "sub_path": "filament/Fiberon PET-CF @BBL X1C.json" + "sub_path": "filament/Polymaker/Fiberon PET-CF @BBL X1C.json" }, { "name": "Fiberon PETG-ESD @BBL X1C", - "sub_path": "filament/Fiberon PETG-ESD @BBL X1C.json" + "sub_path": "filament/Polymaker/Fiberon PETG-ESD @BBL X1C.json" }, { "name": "Fiberon PETG-rCF @BBL X1C", - "sub_path": "filament/Fiberon PETG-rCF @BBL X1C.json" + "sub_path": "filament/Polymaker/Fiberon PETG-rCF @BBL X1C.json" }, { "name": "Generic PETG", @@ -1815,23 +1815,23 @@ }, { "name": "PolyLite PETG @BBL A1", - "sub_path": "filament/PolyLite PETG @BBL A1.json" + "sub_path": "filament/Polymaker/PolyLite PETG @BBL A1.json" }, { "name": "PolyLite PETG @BBL A1 0.2 nozzle", - "sub_path": "filament/PolyLite PETG @BBL A1 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite PETG @BBL A1 0.2 nozzle.json" }, { "name": "PolyLite PETG @BBL A1M", - "sub_path": "filament/PolyLite PETG @BBL A1M.json" + "sub_path": "filament/Polymaker/PolyLite PETG @BBL A1M.json" }, { "name": "PolyLite PETG @BBL P1P", - "sub_path": "filament/PolyLite PETG @BBL P1P.json" + "sub_path": "filament/Polymaker/PolyLite PETG @BBL P1P.json" }, { "name": "PolyLite PETG @BBL X1C", - "sub_path": "filament/PolyLite PETG @BBL X1C.json" + "sub_path": "filament/Polymaker/PolyLite PETG @BBL X1C.json" }, { "name": "SUNLU PETG @BBL A1", @@ -2543,19 +2543,19 @@ }, { "name": "PolyLite PLA @BBL A1", - "sub_path": "filament/PolyLite PLA @BBL A1.json" + "sub_path": "filament/Polymaker/PolyLite PLA @BBL A1.json" }, { "name": "PolyLite PLA @BBL A1 0.2 nozzle", - "sub_path": "filament/PolyLite PLA @BBL A1 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite PLA @BBL A1 0.2 nozzle.json" }, { "name": "PolyLite PLA @BBL A1M", - "sub_path": "filament/PolyLite PLA @BBL A1M.json" + "sub_path": "filament/Polymaker/PolyLite PLA @BBL A1M.json" }, { "name": "PolyLite PLA @BBL A1M 0.2 nozzle", - "sub_path": "filament/PolyLite PLA @BBL A1M 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite PLA @BBL A1M 0.2 nozzle.json" }, { "name": "PolyLite PLA @BBL P1P", @@ -2563,27 +2563,27 @@ }, { "name": "PolyLite PLA @BBL X1", - "sub_path": "filament/PolyLite PLA @BBL X1.json" + "sub_path": "filament/Polymaker/PolyLite PLA @BBL X1.json" }, { "name": "PolyLite PLA @BBL X1C", - "sub_path": "filament/PolyLite PLA @BBL X1C.json" + "sub_path": "filament/Polymaker/PolyLite PLA @BBL X1C.json" }, { "name": "PolyTerra PLA @BBL A1", - "sub_path": "filament/PolyTerra PLA @BBL A1.json" + "sub_path": "filament/Polymaker/PolyTerra PLA @BBL A1.json" }, { "name": "PolyTerra PLA @BBL A1 0.2 nozzle", - "sub_path": "filament/PolyTerra PLA @BBL A1 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyTerra PLA @BBL A1 0.2 nozzle.json" }, { "name": "PolyTerra PLA @BBL A1M", - "sub_path": "filament/PolyTerra PLA @BBL A1M.json" + "sub_path": "filament/Polymaker/PolyTerra PLA @BBL A1M.json" }, { "name": "PolyTerra PLA @BBL A1M 0.2 nozzle", - "sub_path": "filament/PolyTerra PLA @BBL A1M 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyTerra PLA @BBL A1M 0.2 nozzle.json" }, { "name": "PolyTerra PLA @BBL P1P", @@ -2591,11 +2591,11 @@ }, { "name": "PolyTerra PLA @BBL X1", - "sub_path": "filament/PolyTerra PLA @BBL X1.json" + "sub_path": "filament/Polymaker/PolyTerra PLA @BBL X1.json" }, { "name": "PolyTerra PLA @BBL X1C", - "sub_path": "filament/PolyTerra PLA @BBL X1C.json" + "sub_path": "filament/Polymaker/PolyTerra PLA @BBL X1C.json" }, { "name": "SUNLU PLA Marble @BBL A1", @@ -3059,15 +3059,15 @@ }, { "name": "PolyLite ABS @BBL P1P 0.2 nozzle", - "sub_path": "filament/PolyLite ABS @BBL P1P 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite ABS @BBL P1P 0.2 nozzle.json" }, { "name": "PolyLite ABS @BBL X1C 0.2 nozzle", - "sub_path": "filament/PolyLite ABS @BBL X1C 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite ABS @BBL X1C 0.2 nozzle.json" }, { "name": "PolyLite ABS @BBL X1E", - "sub_path": "filament/PolyLite ABS @BBL X1E.json" + "sub_path": "filament/Polymaker/PolyLite ABS @BBL X1E.json" }, { "name": "Bambu ASA @BBL X1E", @@ -3091,15 +3091,15 @@ }, { "name": "PolyLite ASA @BBL P1P 0.2 nozzle", - "sub_path": "filament/PolyLite ASA @BBL P1P 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite ASA @BBL P1P 0.2 nozzle.json" }, { "name": "PolyLite ASA @BBL X1C 0.2 nozzle", - "sub_path": "filament/PolyLite ASA @BBL X1C 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite ASA @BBL X1C 0.2 nozzle.json" }, { "name": "PolyLite ASA @BBL X1E", - "sub_path": "filament/PolyLite ASA @BBL X1E.json" + "sub_path": "filament/Polymaker/PolyLite ASA @BBL X1E.json" }, { "name": "Bambu PA-CF @BBL X1E", @@ -3183,15 +3183,15 @@ }, { "name": "PolyLite PETG @BBL A1M 0.2 nozzle", - "sub_path": "filament/PolyLite PETG @BBL A1M 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite PETG @BBL A1M 0.2 nozzle.json" }, { "name": "PolyLite PETG @BBL P1P 0.2 nozzle", - "sub_path": "filament/PolyLite PETG @BBL P1P 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite PETG @BBL P1P 0.2 nozzle.json" }, { "name": "PolyLite PETG @BBL X1C 0.2 nozzle", - "sub_path": "filament/PolyLite PETG @BBL X1C 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite PETG @BBL X1C 0.2 nozzle.json" }, { "name": "SUNLU PETG @BBL A1M 0.4 nozzle", @@ -3263,7 +3263,7 @@ }, { "name": "PolyLite PLA @BBL X1C 0.2 nozzle", - "sub_path": "filament/PolyLite PLA @BBL X1C 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite PLA @BBL X1C 0.2 nozzle.json" }, { "name": "PolyTerra PLA @BBL P1P 0.2 nozzle", @@ -3271,15 +3271,15 @@ }, { "name": "PolyTerra PLA @BBL X1C 0.2 nozzle", - "sub_path": "filament/PolyTerra PLA @BBL X1C 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyTerra PLA @BBL X1C 0.2 nozzle.json" }, { "name": "PolyLite ABS @BBL X1E 0.2 nozzle", - "sub_path": "filament/PolyLite ABS @BBL X1E 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite ABS @BBL X1E 0.2 nozzle.json" }, { "name": "PolyLite ASA @BBL X1E 0.2 nozzle", - "sub_path": "filament/PolyLite ASA @BBL X1E 0.2 nozzle.json" + "sub_path": "filament/Polymaker/PolyLite ASA @BBL X1E 0.2 nozzle.json" }, { "name": "AliZ PA-CF @P1-X1", @@ -3300,6 +3300,842 @@ { "name": "AliZ PLA @P1-X1", "sub_path": "filament/AliZ/AliZ PLA @P1-X1.json" + }, + { + "name": "Panchroma CoPE @base", + "sub_path": "filament/Polymaker/Panchroma CoPE @base.json" + }, + { + "name": "Panchroma CoPE @BBL A1", + "sub_path": "filament/Polymaker/Panchroma CoPE @BBL A1.json" + }, + { + "name": "Panchroma CoPE @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma CoPE @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma CoPE @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma CoPE @BBL A1M.json" + }, + { + "name": "Panchroma CoPE @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma CoPE @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma CoPE @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma CoPE @BBL P1P.json" + }, + { + "name": "Panchroma CoPE @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma CoPE @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma CoPE @BBL X1", + "sub_path": "filament/Polymaker/Panchroma CoPE @BBL X1.json" + }, + { + "name": "Panchroma CoPE @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma CoPE @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma CoPE @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma CoPE @BBL X1C.json" + }, + { + "name": "Panchroma CoPE @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma CoPE @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA @base", + "sub_path": "filament/Polymaker/Panchroma PLA @base.json" + }, + { + "name": "Panchroma PLA @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA @BBL A1.json" + }, + { + "name": "Panchroma PLA @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA @BBL A1M.json" + }, + { + "name": "Panchroma PLA @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA @BBL P1P.json" + }, + { + "name": "Panchroma PLA @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA @BBL X1.json" + }, + { + "name": "Panchroma PLA @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA @BBL X1C.json" + }, + { + "name": "Panchroma PLA @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Celestial @base", + "sub_path": "filament/Polymaker/Panchroma PLA Celestial @base.json" + }, + { + "name": "Panchroma PLA Celestial @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA Celestial @BBL A1.json" + }, + { + "name": "Panchroma PLA Celestial @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Celestial @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Celestial @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA Celestial @BBL A1M.json" + }, + { + "name": "Panchroma PLA Celestial @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Celestial @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Celestial @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA Celestial @BBL P1P.json" + }, + { + "name": "Panchroma PLA Celestial @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Celestial @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Celestial @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA Celestial @BBL X1.json" + }, + { + "name": "Panchroma PLA Celestial @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Celestial @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Celestial @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA Celestial @BBL X1C.json" + }, + { + "name": "Panchroma PLA Celestial @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Celestial @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Galaxy @base", + "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @base.json" + }, + { + "name": "Panchroma PLA Galaxy @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @BBL A1.json" + }, + { + "name": "Panchroma PLA Galaxy @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Galaxy @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @BBL A1M.json" + }, + { + "name": "Panchroma PLA Galaxy @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Galaxy @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @BBL P1P.json" + }, + { + "name": "Panchroma PLA Galaxy @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Galaxy @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @BBL X1.json" + }, + { + "name": "Panchroma PLA Galaxy @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Galaxy @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @BBL X1C.json" + }, + { + "name": "Panchroma PLA Galaxy @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Glow @base", + "sub_path": "filament/Polymaker/Panchroma PLA Glow @base.json" + }, + { + "name": "Panchroma PLA Glow @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA Glow @BBL A1.json" + }, + { + "name": "Panchroma PLA Glow @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Glow @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Glow @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA Glow @BBL A1M.json" + }, + { + "name": "Panchroma PLA Glow @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Glow @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Glow @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA Glow @BBL P1P.json" + }, + { + "name": "Panchroma PLA Glow @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Glow @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Glow @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA Glow @BBL X1.json" + }, + { + "name": "Panchroma PLA Glow @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Glow @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Glow @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA Glow @BBL X1C.json" + }, + { + "name": "Panchroma PLA Glow @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Glow @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Luminous @base", + "sub_path": "filament/Polymaker/Panchroma PLA Luminous @base.json" + }, + { + "name": "Panchroma PLA Luminous @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA Luminous @BBL A1.json" + }, + { + "name": "Panchroma PLA Luminous @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Luminous @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Luminous @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA Luminous @BBL A1M.json" + }, + { + "name": "Panchroma PLA Luminous @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Luminous @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Luminous @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA Luminous @BBL P1P.json" + }, + { + "name": "Panchroma PLA Luminous @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Luminous @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Luminous @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA Luminous @BBL X1.json" + }, + { + "name": "Panchroma PLA Luminous @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Luminous @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Luminous @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA Luminous @BBL X1C.json" + }, + { + "name": "Panchroma PLA Luminous @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Luminous @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Marble @base", + "sub_path": "filament/Polymaker/Panchroma PLA Marble @base.json" + }, + { + "name": "Panchroma PLA Marble @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA Marble @BBL A1.json" + }, + { + "name": "Panchroma PLA Marble @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Marble @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Marble @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA Marble @BBL A1M.json" + }, + { + "name": "Panchroma PLA Marble @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Marble @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Marble @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA Marble @BBL P1P.json" + }, + { + "name": "Panchroma PLA Marble @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Marble @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Marble @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA Marble @BBL X1.json" + }, + { + "name": "Panchroma PLA Marble @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Marble @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Marble @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA Marble @BBL X1C.json" + }, + { + "name": "Panchroma PLA Marble @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Marble @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Matte @base", + "sub_path": "filament/Polymaker/Panchroma PLA Matte @base.json" + }, + { + "name": "Panchroma PLA Matte @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA Matte @BBL A1.json" + }, + { + "name": "Panchroma PLA Matte @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Matte @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Matte @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA Matte @BBL A1M.json" + }, + { + "name": "Panchroma PLA Matte @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Matte @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Matte @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA Matte @BBL P1P.json" + }, + { + "name": "Panchroma PLA Matte @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Matte @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Matte @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA Matte @BBL X1.json" + }, + { + "name": "Panchroma PLA Matte @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Matte @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Matte @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA Matte @BBL X1C.json" + }, + { + "name": "Panchroma PLA Matte @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Matte @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Metallic @base", + "sub_path": "filament/Polymaker/Panchroma PLA Metallic @base.json" + }, + { + "name": "Panchroma PLA Metallic @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA Metallic @BBL A1.json" + }, + { + "name": "Panchroma PLA Metallic @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Metallic @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Metallic @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA Metallic @BBL A1M.json" + }, + { + "name": "Panchroma PLA Metallic @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Metallic @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Metallic @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA Metallic @BBL P1P.json" + }, + { + "name": "Panchroma PLA Metallic @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Metallic @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Metallic @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA Metallic @BBL X1.json" + }, + { + "name": "Panchroma PLA Metallic @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Metallic @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Metallic @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA Metallic @BBL X1C.json" + }, + { + "name": "Panchroma PLA Metallic @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Metallic @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Neon @base", + "sub_path": "filament/Polymaker/Panchroma PLA Neon @base.json" + }, + { + "name": "Panchroma PLA Neon @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA Neon @BBL A1.json" + }, + { + "name": "Panchroma PLA Neon @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Neon @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Neon @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA Neon @BBL A1M.json" + }, + { + "name": "Panchroma PLA Neon @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Neon @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Neon @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA Neon @BBL P1P.json" + }, + { + "name": "Panchroma PLA Neon @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Neon @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Neon @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA Neon @BBL X1.json" + }, + { + "name": "Panchroma PLA Neon @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Neon @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Neon @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA Neon @BBL X1C.json" + }, + { + "name": "Panchroma PLA Neon @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Neon @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Silk @base", + "sub_path": "filament/Polymaker/Panchroma PLA Silk @base.json" + }, + { + "name": "Panchroma PLA Silk @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL A1.json" + }, + { + "name": "Panchroma PLA Silk @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Silk @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL A1M.json" + }, + { + "name": "Panchroma PLA Silk @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Silk @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL P1P.json" + }, + { + "name": "Panchroma PLA Silk @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Silk @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL X1.json" + }, + { + "name": "Panchroma PLA Silk @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Silk @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL X1C.json" + }, + { + "name": "Panchroma PLA Silk @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Stain @base", + "sub_path": "filament/Polymaker/Panchroma PLA Stain @base.json" + }, + { + "name": "Panchroma PLA Stain @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL A1.json" + }, + { + "name": "Panchroma PLA Stain @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Stain @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL A1M.json" + }, + { + "name": "Panchroma PLA Stain @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Stain @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL P1P.json" + }, + { + "name": "Panchroma PLA Stain @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Stain @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL X1.json" + }, + { + "name": "Panchroma PLA Stain @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Stain @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL X1C.json" + }, + { + "name": "Panchroma PLA Stain @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Starlight @base", + "sub_path": "filament/Polymaker/Panchroma PLA Starlight @base.json" + }, + { + "name": "Panchroma PLA Starlight @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL A1.json" + }, + { + "name": "Panchroma PLA Starlight @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Starlight @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL A1M.json" + }, + { + "name": "Panchroma PLA Starlight @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Starlight @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL P1P.json" + }, + { + "name": "Panchroma PLA Starlight @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Starlight @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL X1.json" + }, + { + "name": "Panchroma PLA Starlight @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Starlight @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL X1C.json" + }, + { + "name": "Panchroma PLA Starlight @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Temp Shift @base", + "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @base.json" + }, + { + "name": "Panchroma PLA Temp Shift @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @BBL A1.json" + }, + { + "name": "Panchroma PLA Temp Shift @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Temp Shift @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @BBL A1M.json" + }, + { + "name": "Panchroma PLA Temp Shift @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Temp Shift @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @BBL P1P.json" + }, + { + "name": "Panchroma PLA Temp Shift @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Temp Shift @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @BBL X1.json" + }, + { + "name": "Panchroma PLA Temp Shift @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Temp Shift @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @BBL X1C.json" + }, + { + "name": "Panchroma PLA Temp Shift @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Translucent @base", + "sub_path": "filament/Polymaker/Panchroma PLA Translucent @base.json" + }, + { + "name": "Panchroma PLA Translucent @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA Translucent @BBL A1.json" + }, + { + "name": "Panchroma PLA Translucent @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Translucent @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Translucent @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA Translucent @BBL A1M.json" + }, + { + "name": "Panchroma PLA Translucent @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Translucent @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Translucent @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA Translucent @BBL P1P.json" + }, + { + "name": "Panchroma PLA Translucent @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Translucent @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Translucent @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA Translucent @BBL X1.json" + }, + { + "name": "Panchroma PLA Translucent @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Translucent @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA Translucent @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA Translucent @BBL X1C.json" + }, + { + "name": "Panchroma PLA Translucent @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA Translucent @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA UV Shift @base", + "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @base.json" + }, + { + "name": "Panchroma PLA UV Shift @BBL A1", + "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @BBL A1.json" + }, + { + "name": "Panchroma PLA UV Shift @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @BBL A1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA UV Shift @BBL A1M", + "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @BBL A1M.json" + }, + { + "name": "Panchroma PLA UV Shift @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA UV Shift @BBL P1P", + "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @BBL P1P.json" + }, + { + "name": "Panchroma PLA UV Shift @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA UV Shift @BBL X1", + "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @BBL X1.json" + }, + { + "name": "Panchroma PLA UV Shift @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @BBL X1 0.2 nozzle.json" + }, + { + "name": "Panchroma PLA UV Shift @BBL X1C", + "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @BBL X1C.json" + }, + { + "name": "Panchroma PLA UV Shift @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @BBL X1C 0.2 nozzle.json" + }, + { + "name": "PolyLite PLA Pro @base", + "sub_path": "filament/Polymaker/PolyLite PLA Pro @base.json" + }, + { + "name": "PolyLite PLA Pro @BBL A1", + "sub_path": "filament/Polymaker/PolyLite PLA Pro @BBL A1.json" + }, + { + "name": "PolyLite PLA Pro @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/PolyLite PLA Pro @BBL A1 0.2 nozzle.json" + }, + { + "name": "PolyLite PLA Pro @BBL A1M", + "sub_path": "filament/Polymaker/PolyLite PLA Pro @BBL A1M.json" + }, + { + "name": "PolyLite PLA Pro @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/PolyLite PLA Pro @BBL A1M 0.2 nozzle.json" + }, + { + "name": "PolyLite PLA Pro @BBL P1P", + "sub_path": "filament/Polymaker/PolyLite PLA Pro @BBL P1P.json" + }, + { + "name": "PolyLite PLA Pro @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/PolyLite PLA Pro @BBL P1P 0.2 nozzle.json" + }, + { + "name": "PolyLite PLA Pro @BBL X1", + "sub_path": "filament/Polymaker/PolyLite PLA Pro @BBL X1.json" + }, + { + "name": "PolyLite PLA Pro @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/PolyLite PLA Pro @BBL X1 0.2 nozzle.json" + }, + { + "name": "PolyLite PLA Pro @BBL X1C", + "sub_path": "filament/Polymaker/PolyLite PLA Pro @BBL X1C.json" + }, + { + "name": "PolyLite PLA Pro @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/PolyLite PLA Pro @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Polymaker HT-PLA @base", + "sub_path": "filament/Polymaker/Polymaker HT-PLA @base.json" + }, + { + "name": "Polymaker HT-PLA @BBL A1", + "sub_path": "filament/Polymaker/Polymaker HT-PLA @BBL A1.json" + }, + { + "name": "Polymaker HT-PLA @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Polymaker HT-PLA @BBL A1 0.2 nozzle.json" + }, + { + "name": "Polymaker HT-PLA @BBL A1M", + "sub_path": "filament/Polymaker/Polymaker HT-PLA @BBL A1M.json" + }, + { + "name": "Polymaker HT-PLA @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Polymaker HT-PLA @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Polymaker HT-PLA @BBL P1P", + "sub_path": "filament/Polymaker/Polymaker HT-PLA @BBL P1P.json" + }, + { + "name": "Polymaker HT-PLA @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Polymaker HT-PLA @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Polymaker HT-PLA @BBL X1", + "sub_path": "filament/Polymaker/Polymaker HT-PLA @BBL X1.json" + }, + { + "name": "Polymaker HT-PLA @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Polymaker HT-PLA @BBL X1 0.2 nozzle.json" + }, + { + "name": "Polymaker HT-PLA @BBL X1C", + "sub_path": "filament/Polymaker/Polymaker HT-PLA @BBL X1C.json" + }, + { + "name": "Polymaker HT-PLA @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Polymaker HT-PLA @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Polymaker HT-PLA-GF @base", + "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @base.json" + }, + { + "name": "Polymaker HT-PLA-GF @BBL A1", + "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @BBL A1.json" + }, + { + "name": "Polymaker HT-PLA-GF @BBL A1 0.2 nozzle", + "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @BBL A1 0.2 nozzle.json" + }, + { + "name": "Polymaker HT-PLA-GF @BBL A1M", + "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @BBL A1M.json" + }, + { + "name": "Polymaker HT-PLA-GF @BBL A1M 0.2 nozzle", + "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Polymaker HT-PLA-GF @BBL P1P", + "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @BBL P1P.json" + }, + { + "name": "Polymaker HT-PLA-GF @BBL P1P 0.2 nozzle", + "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Polymaker HT-PLA-GF @BBL X1", + "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @BBL X1.json" + }, + { + "name": "Polymaker HT-PLA-GF @BBL X1 0.2 nozzle", + "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @BBL X1 0.2 nozzle.json" + }, + { + "name": "Polymaker HT-PLA-GF @BBL X1C", + "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @BBL X1C.json" + }, + { + "name": "Polymaker HT-PLA-GF @BBL X1C 0.2 nozzle", + "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @BBL X1C 0.2 nozzle.json" } ], "machine_list": [ @@ -3424,4 +4260,4 @@ "sub_path": "machine/Bambu Lab A1 0.8 nozzle.json" } ] -} +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Fiberon PA12-CF @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF @BBL X1C.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PA12-CF @BBL X1C.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF @BBL X1C.json diff --git a/resources/profiles/BBL/filament/Fiberon PA12-CF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF @base.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PA12-CF @base.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF @base.json diff --git a/resources/profiles/BBL/filament/Fiberon PA6-CF @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF @BBL X1C.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PA6-CF @BBL X1C.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF @BBL X1C.json diff --git a/resources/profiles/BBL/filament/Fiberon PA6-CF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF @base.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PA6-CF @base.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF @base.json diff --git a/resources/profiles/BBL/filament/Fiberon PA6-GF @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF @BBL X1C.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PA6-GF @BBL X1C.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF @BBL X1C.json diff --git a/resources/profiles/BBL/filament/Fiberon PA6-GF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF @base.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PA6-GF @base.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF @base.json diff --git a/resources/profiles/BBL/filament/Fiberon PA612-CF @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF @BBL X1C.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PA612-CF @BBL X1C.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF @BBL X1C.json diff --git a/resources/profiles/BBL/filament/Fiberon PA612-CF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF @base.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PA612-CF @base.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF @base.json diff --git a/resources/profiles/BBL/filament/Fiberon PET-CF @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF @BBL X1C.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PET-CF @BBL X1C.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF @BBL X1C.json diff --git a/resources/profiles/BBL/filament/Fiberon PET-CF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF @base.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PET-CF @base.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF @base.json diff --git a/resources/profiles/BBL/filament/Fiberon PETG-ESD @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-ESD @BBL X1C.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PETG-ESD @BBL X1C.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PETG-ESD @BBL X1C.json diff --git a/resources/profiles/BBL/filament/Fiberon PETG-ESD @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-ESD @base.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PETG-ESD @base.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PETG-ESD @base.json diff --git a/resources/profiles/BBL/filament/Fiberon PETG-rCF @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF @BBL X1C.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PETG-rCF @BBL X1C.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF @BBL X1C.json diff --git a/resources/profiles/BBL/filament/Fiberon PETG-rCF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF @base.json similarity index 100% rename from resources/profiles/BBL/filament/Fiberon PETG-rCF @base.json rename to resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF @base.json diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..4435171ffb --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma CoPE @BBL A1 0.2 nozzle", + "inherits": "Panchroma CoPE @base", + "from": "system", + "setting_id": "GFSPM016_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1.json new file mode 100644 index 0000000000..e0a64ebef3 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma CoPE @BBL A1", + "inherits": "Panchroma CoPE @base", + "from": "system", + "setting_id": "GFSPM016_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..10ab1c148d --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1M 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma CoPE @BBL A1M 0.2 nozzle", + "inherits": "Panchroma CoPE @base", + "from": "system", + "setting_id": "GFSPM016_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1M.json new file mode 100644 index 0000000000..1f3ec53352 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL A1M.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma CoPE @BBL A1M", + "inherits": "Panchroma CoPE @base", + "from": "system", + "setting_id": "GFSPM016_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..9f46be238f --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL P1P 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma CoPE @BBL P1P 0.2 nozzle", + "inherits": "Panchroma CoPE @base", + "from": "system", + "setting_id": "GFSPM016_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL P1P.json new file mode 100644 index 0000000000..3c353981a6 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL P1P.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma CoPE @BBL P1P", + "inherits": "Panchroma CoPE @base", + "from": "system", + "setting_id": "GFSPM016_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..7cdd898b0f --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma CoPE @BBL X1 0.2 nozzle", + "inherits": "Panchroma CoPE @base", + "from": "system", + "setting_id": "GFSPM016_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1.json new file mode 100644 index 0000000000..3daf3fbfe2 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma CoPE @BBL X1", + "inherits": "Panchroma CoPE @base", + "from": "system", + "setting_id": "GFSPM016_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..d9273fa7d5 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1C 0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma CoPE @BBL X1C 0.2 nozzle", + "inherits": "Panchroma CoPE @base", + "from": "system", + "setting_id": "GFSPM016_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1C.json new file mode 100644 index 0000000000..1f5bcdf319 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @BBL X1C.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Panchroma CoPE @BBL X1C", + "inherits": "Panchroma CoPE @base", + "from": "system", + "setting_id": "GFSPM016_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @base.json new file mode 100644 index 0000000000..65a244dc3b --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma CoPE @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM016", + "instantiation": "false", + "filament_cost": [ + "19.99" + ], + "filament_density": [ + "1.29" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "58" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..fedc96aca2 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA @base", + "from": "system", + "setting_id": "GFSPM001_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1.json new file mode 100644 index 0000000000..1ce31933e4 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA @BBL A1", + "inherits": "Panchroma PLA @base", + "from": "system", + "setting_id": "GFSPM001_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..df0472485f --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1M 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA @base", + "from": "system", + "setting_id": "GFSPM001_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1M.json new file mode 100644 index 0000000000..a48a6ad3f8 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL A1M.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA @BBL A1M", + "inherits": "Panchroma PLA @base", + "from": "system", + "setting_id": "GFSPM001_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..2a13382b65 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL P1P 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Panchroma PLA @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA @base", + "from": "system", + "setting_id": "GFSPM001_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL P1P.json new file mode 100644 index 0000000000..b26dae6a12 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL P1P.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA @BBL P1P", + "inherits": "Panchroma PLA @base", + "from": "system", + "setting_id": "GFSPM001_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..375298f472 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Panchroma PLA @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA @base", + "from": "system", + "setting_id": "GFSPM001_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1.json new file mode 100644 index 0000000000..cab6ec4d9e --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Panchroma PLA @BBL X1", + "inherits": "Panchroma PLA @base", + "from": "system", + "setting_id": "GFSPM001_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..96efdcc639 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1C 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Panchroma PLA @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA @base", + "from": "system", + "setting_id": "GFSPM001_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1C.json new file mode 100644 index 0000000000..808415e14e --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA @BBL X1C", + "inherits": "Panchroma PLA @base", + "from": "system", + "setting_id": "GFSPM001_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @base.json new file mode 100644 index 0000000000..c40e258143 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @base.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Panchroma PLA @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM001", + "instantiation": "false", + "filament_cost": [ + "19.99" + ], + "filament_density": [ + "1.32" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "filament_wipe": [ + "0" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "58" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..874e56e229 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Celestial @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA Celestial @base", + "from": "system", + "setting_id": "GFSPM008_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1.json new file mode 100644 index 0000000000..361634dc66 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Celestial @BBL A1", + "inherits": "Panchroma PLA Celestial @base", + "from": "system", + "setting_id": "GFSPM008_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..f8de2e8019 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1M 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Celestial @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA Celestial @base", + "from": "system", + "setting_id": "GFSPM008_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1M.json new file mode 100644 index 0000000000..0e8abd2368 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL A1M.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Celestial @BBL A1M", + "inherits": "Panchroma PLA Celestial @base", + "from": "system", + "setting_id": "GFSPM008_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..1afbd9f232 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL P1P 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Celestial @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA Celestial @base", + "from": "system", + "setting_id": "GFSPM008_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL P1P.json new file mode 100644 index 0000000000..2d3331a71e --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL P1P.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Celestial @BBL P1P", + "inherits": "Panchroma PLA Celestial @base", + "from": "system", + "setting_id": "GFSPM008_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..dd357a29a4 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Celestial @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA Celestial @base", + "from": "system", + "setting_id": "GFSPM008_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1.json new file mode 100644 index 0000000000..7639b54849 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Celestial @BBL X1", + "inherits": "Panchroma PLA Celestial @base", + "from": "system", + "setting_id": "GFSPM008_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..64b36bb38b --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1C 0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Celestial @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA Celestial @base", + "from": "system", + "setting_id": "GFSPM008_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1C.json new file mode 100644 index 0000000000..4a5b926a98 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @BBL X1C.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Panchroma PLA Celestial @BBL X1C", + "inherits": "Panchroma PLA Celestial @base", + "from": "system", + "setting_id": "GFSPM008_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @base.json new file mode 100644 index 0000000000..b99f1cf62e --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA Celestial @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM008", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..bc8fa91bf1 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Galaxy @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA Galaxy @base", + "from": "system", + "setting_id": "GFSPM007_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1.json new file mode 100644 index 0000000000..583d917de9 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Galaxy @BBL A1", + "inherits": "Panchroma PLA Galaxy @base", + "from": "system", + "setting_id": "GFSPM007_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..2b026f0d94 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1M 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Galaxy @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA Galaxy @base", + "from": "system", + "setting_id": "GFSPM007_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1M.json new file mode 100644 index 0000000000..e5225dced7 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL A1M.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Galaxy @BBL A1M", + "inherits": "Panchroma PLA Galaxy @base", + "from": "system", + "setting_id": "GFSPM007_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..fe1f70f3af --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL P1P 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Galaxy @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA Galaxy @base", + "from": "system", + "setting_id": "GFSPM007_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL P1P.json new file mode 100644 index 0000000000..9c11c907fc --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL P1P.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Galaxy @BBL P1P", + "inherits": "Panchroma PLA Galaxy @base", + "from": "system", + "setting_id": "GFSPM007_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..23681df0cb --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Galaxy @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA Galaxy @base", + "from": "system", + "setting_id": "GFSPM007_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1.json new file mode 100644 index 0000000000..31200805a2 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Galaxy @BBL X1", + "inherits": "Panchroma PLA Galaxy @base", + "from": "system", + "setting_id": "GFSPM007_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..c9f16e6d39 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1C 0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Galaxy @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA Galaxy @base", + "from": "system", + "setting_id": "GFSPM007_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1C.json new file mode 100644 index 0000000000..4cf28a5f47 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @BBL X1C.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Panchroma PLA Galaxy @BBL X1C", + "inherits": "Panchroma PLA Galaxy @base", + "from": "system", + "setting_id": "GFSPM007_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @base.json new file mode 100644 index 0000000000..488ddb8d2a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA Galaxy @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM007", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..527752ad37 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Glow @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA Glow @base", + "from": "system", + "setting_id": "GFSPM010_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1.json new file mode 100644 index 0000000000..8758b9a445 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Glow @BBL A1", + "inherits": "Panchroma PLA Glow @base", + "from": "system", + "setting_id": "GFSPM010_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..e21e3b30c8 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1M 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Glow @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA Glow @base", + "from": "system", + "setting_id": "GFSPM010_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1M.json new file mode 100644 index 0000000000..0f15840da0 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL A1M.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Glow @BBL A1M", + "inherits": "Panchroma PLA Glow @base", + "from": "system", + "setting_id": "GFSPM010_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..4adf766d48 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL P1P 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Glow @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA Glow @base", + "from": "system", + "setting_id": "GFSPM010_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL P1P.json new file mode 100644 index 0000000000..c45fefc8e7 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL P1P.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Glow @BBL P1P", + "inherits": "Panchroma PLA Glow @base", + "from": "system", + "setting_id": "GFSPM010_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..28cfc6e682 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Glow @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA Glow @base", + "from": "system", + "setting_id": "GFSPM010_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1.json new file mode 100644 index 0000000000..0de8909a2b --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Glow @BBL X1", + "inherits": "Panchroma PLA Glow @base", + "from": "system", + "setting_id": "GFSPM010_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..1152563ae9 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1C 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Glow @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA Glow @base", + "from": "system", + "setting_id": "GFSPM010_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1C.json new file mode 100644 index 0000000000..9ba7c5c77e --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @BBL X1C.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Panchroma PLA Glow @BBL X1C", + "inherits": "Panchroma PLA Glow @base", + "from": "system", + "setting_id": "GFSPM010_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @base.json new file mode 100644 index 0000000000..3cd38cc9df --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA Glow @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM010", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..7a48ff8a9d --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Luminous @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA Luminous @base", + "from": "system", + "setting_id": "GFSPM011_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1.json new file mode 100644 index 0000000000..7e6c734944 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Luminous @BBL A1", + "inherits": "Panchroma PLA Luminous @base", + "from": "system", + "setting_id": "GFSPM011_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..05de6a5711 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1M 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Luminous @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA Luminous @base", + "from": "system", + "setting_id": "GFSPM011_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1M.json new file mode 100644 index 0000000000..69dc535b7d --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL A1M.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Luminous @BBL A1M", + "inherits": "Panchroma PLA Luminous @base", + "from": "system", + "setting_id": "GFSPM011_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..9f2c7c1d63 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL P1P 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Luminous @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA Luminous @base", + "from": "system", + "setting_id": "GFSPM011_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL P1P.json new file mode 100644 index 0000000000..eaad7625fc --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL P1P.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Luminous @BBL P1P", + "inherits": "Panchroma PLA Luminous @base", + "from": "system", + "setting_id": "GFSPM011_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..fbfb11d7b0 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Luminous @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA Luminous @base", + "from": "system", + "setting_id": "GFSPM011_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1.json new file mode 100644 index 0000000000..c1536922eb --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Luminous @BBL X1", + "inherits": "Panchroma PLA Luminous @base", + "from": "system", + "setting_id": "GFSPM011_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..4e0b9f5449 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1C 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Luminous @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA Luminous @base", + "from": "system", + "setting_id": "GFSPM011_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1C.json new file mode 100644 index 0000000000..75dd18c2bc --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @BBL X1C.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Panchroma PLA Luminous @BBL X1C", + "inherits": "Panchroma PLA Luminous @base", + "from": "system", + "setting_id": "GFSPM011_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @base.json new file mode 100644 index 0000000000..61945203ba --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA Luminous @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM011", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..501e9257b6 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Marble @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA Marble @base", + "from": "system", + "setting_id": "GFSPM003_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1.json new file mode 100644 index 0000000000..4ecdd7313f --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Marble @BBL A1", + "inherits": "Panchroma PLA Marble @base", + "from": "system", + "setting_id": "GFSPM003_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..e74eb2e58e --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1M 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Marble @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA Marble @base", + "from": "system", + "setting_id": "GFSPM003_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1M.json new file mode 100644 index 0000000000..43d9cae7cb --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL A1M.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Marble @BBL A1M", + "inherits": "Panchroma PLA Marble @base", + "from": "system", + "setting_id": "GFSPM003_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..5faaf07c41 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL P1P 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Marble @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA Marble @base", + "from": "system", + "setting_id": "GFSPM003_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "50" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL P1P.json new file mode 100644 index 0000000000..004cef8930 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL P1P.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Marble @BBL P1P", + "inherits": "Panchroma PLA Marble @base", + "from": "system", + "setting_id": "GFSPM003_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "50" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..34e4efbd60 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Marble @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA Marble @base", + "from": "system", + "setting_id": "GFSPM003_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1.json new file mode 100644 index 0000000000..464ce3a85d --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Marble @BBL X1", + "inherits": "Panchroma PLA Marble @base", + "from": "system", + "setting_id": "GFSPM003_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..cfbfaa2b5d --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1C 0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Marble @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA Marble @base", + "from": "system", + "setting_id": "GFSPM003_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1C.json new file mode 100644 index 0000000000..2998f775ed --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @BBL X1C.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Panchroma PLA Marble @BBL X1C", + "inherits": "Panchroma PLA Marble @base", + "from": "system", + "setting_id": "GFSPM003_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @base.json new file mode 100644 index 0000000000..fec4fa42b0 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA Marble @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM003", + "instantiation": "false", + "filament_cost": [ + "21.99" + ], + "filament_density": [ + "1.31" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..6f880f558a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Matte @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA Matte @base", + "from": "system", + "setting_id": "GFSPM002_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1.json new file mode 100644 index 0000000000..65fc8fd754 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Matte @BBL A1", + "inherits": "Panchroma PLA Matte @base", + "from": "system", + "setting_id": "GFSPM002_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..3452cf6407 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1M 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Matte @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA Matte @base", + "from": "system", + "setting_id": "GFSPM002_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1M.json new file mode 100644 index 0000000000..454ad5d53c --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL A1M.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Matte @BBL A1M", + "inherits": "Panchroma PLA Matte @base", + "from": "system", + "setting_id": "GFSPM002_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..b646f2cf8a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL P1P 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Matte @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA Matte @base", + "from": "system", + "setting_id": "GFSPM002_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "50" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL P1P.json new file mode 100644 index 0000000000..d37dad1383 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL P1P.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Matte @BBL P1P", + "inherits": "Panchroma PLA Matte @base", + "from": "system", + "setting_id": "GFSPM002_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "50" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..a19a3cd8d5 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Panchroma PLA Matte @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA Matte @base", + "from": "system", + "setting_id": "GFSPM002_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1.json new file mode 100644 index 0000000000..0e8b84ac56 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Matte @BBL X1", + "inherits": "Panchroma PLA Matte @base", + "from": "system", + "setting_id": "GFSPM002_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..45fa7d9556 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1C 0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Panchroma PLA Matte @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA Matte @base", + "from": "system", + "setting_id": "GFSPM002_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1C.json new file mode 100644 index 0000000000..d125c5b6ac --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @BBL X1C.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Panchroma PLA Matte @BBL X1C", + "inherits": "Panchroma PLA Matte @base", + "from": "system", + "setting_id": "GFSPM002_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @base.json new file mode 100644 index 0000000000..11c0d44e9e --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA Matte @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM002", + "instantiation": "false", + "filament_cost": [ + "20.99" + ], + "filament_density": [ + "1.31" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..5c334a646e --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Metallic @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA Metallic @base", + "from": "system", + "setting_id": "GFSPM012_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1.json new file mode 100644 index 0000000000..0e7a06b5fa --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Metallic @BBL A1", + "inherits": "Panchroma PLA Metallic @base", + "from": "system", + "setting_id": "GFSPM012_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..b83de59bfc --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1M 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Metallic @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA Metallic @base", + "from": "system", + "setting_id": "GFSPM012_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1M.json new file mode 100644 index 0000000000..4eb110b264 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL A1M.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Metallic @BBL A1M", + "inherits": "Panchroma PLA Metallic @base", + "from": "system", + "setting_id": "GFSPM012_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..dd21350987 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL P1P 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Metallic @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA Metallic @base", + "from": "system", + "setting_id": "GFSPM012_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL P1P.json new file mode 100644 index 0000000000..a1e797a91a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL P1P.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Metallic @BBL P1P", + "inherits": "Panchroma PLA Metallic @base", + "from": "system", + "setting_id": "GFSPM012_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..b2242e831e --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Metallic @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA Metallic @base", + "from": "system", + "setting_id": "GFSPM012_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1.json new file mode 100644 index 0000000000..e5875a0338 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Metallic @BBL X1", + "inherits": "Panchroma PLA Metallic @base", + "from": "system", + "setting_id": "GFSPM012_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..4810a98db8 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1C 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Metallic @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA Metallic @base", + "from": "system", + "setting_id": "GFSPM012_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1C.json new file mode 100644 index 0000000000..41a95868b9 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @BBL X1C.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Panchroma PLA Metallic @BBL X1C", + "inherits": "Panchroma PLA Metallic @base", + "from": "system", + "setting_id": "GFSPM012_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @base.json new file mode 100644 index 0000000000..fb5c7fa4c4 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA Metallic @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM012", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..356ebac36d --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Neon @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA Neon @base", + "from": "system", + "setting_id": "GFSPM013_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1.json new file mode 100644 index 0000000000..fb7e9cdf6a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Neon @BBL A1", + "inherits": "Panchroma PLA Neon @base", + "from": "system", + "setting_id": "GFSPM013_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..6f8a99ff37 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1M 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Neon @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA Neon @base", + "from": "system", + "setting_id": "GFSPM013_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1M.json new file mode 100644 index 0000000000..605e434809 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL A1M.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Neon @BBL A1M", + "inherits": "Panchroma PLA Neon @base", + "from": "system", + "setting_id": "GFSPM013_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..5abafb1ead --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL P1P 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Neon @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA Neon @base", + "from": "system", + "setting_id": "GFSPM013_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL P1P.json new file mode 100644 index 0000000000..fcdbae5353 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL P1P.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Neon @BBL P1P", + "inherits": "Panchroma PLA Neon @base", + "from": "system", + "setting_id": "GFSPM013_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..ce9527af0b --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Neon @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA Neon @base", + "from": "system", + "setting_id": "GFSPM013_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1.json new file mode 100644 index 0000000000..119a1effaf --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Neon @BBL X1", + "inherits": "Panchroma PLA Neon @base", + "from": "system", + "setting_id": "GFSPM013_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..9bce0d6c39 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1C 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Neon @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA Neon @base", + "from": "system", + "setting_id": "GFSPM013_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1C.json new file mode 100644 index 0000000000..bd43d856db --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @BBL X1C.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Panchroma PLA Neon @BBL X1C", + "inherits": "Panchroma PLA Neon @base", + "from": "system", + "setting_id": "GFSPM013_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @base.json new file mode 100644 index 0000000000..54d0f40e92 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA Neon @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM013", + "instantiation": "false", + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..1e9564b8b7 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Silk @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA Silk @base", + "from": "system", + "setting_id": "GFSPM004_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1.json new file mode 100644 index 0000000000..36e26ba83f --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Silk @BBL A1", + "inherits": "Panchroma PLA Silk @base", + "from": "system", + "setting_id": "GFSPM004_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..90f4f86848 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1M 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Silk @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA Silk @base", + "from": "system", + "setting_id": "GFSPM004_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1M.json new file mode 100644 index 0000000000..d855c02c42 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL A1M.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Silk @BBL A1M", + "inherits": "Panchroma PLA Silk @base", + "from": "system", + "setting_id": "GFSPM004_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..22a27bc90a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL P1P 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Silk @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA Silk @base", + "from": "system", + "setting_id": "GFSPM004_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL P1P.json new file mode 100644 index 0000000000..ab1a6e28cf --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL P1P.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Silk @BBL P1P", + "inherits": "Panchroma PLA Silk @base", + "from": "system", + "setting_id": "GFSPM004_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..102cbb19aa --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Silk @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA Silk @base", + "from": "system", + "setting_id": "GFSPM004_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1.json new file mode 100644 index 0000000000..d48e2a1da6 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Silk @BBL X1", + "inherits": "Panchroma PLA Silk @base", + "from": "system", + "setting_id": "GFSPM004_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..38ca557e9f --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1C 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Silk @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA @base", + "from": "system", + "setting_id": "GFSPM004_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1C.json new file mode 100644 index 0000000000..ccf8735db1 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @BBL X1C.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Panchroma PLA Silk @BBL X1C", + "inherits": "Panchroma PLA Silk @base", + "from": "system", + "setting_id": "GFSPM004_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @base.json new file mode 100644 index 0000000000..8c2c7d2085 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA Silk @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM004", + "instantiation": "false", + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.31" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "58" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..1db86a72e8 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Stain @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA Stain @base", + "from": "system", + "setting_id": "GFSPM005_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1.json new file mode 100644 index 0000000000..6f573a8f19 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Stain @BBL A1", + "inherits": "Panchroma PLA Stain @base", + "from": "system", + "setting_id": "GFSPM005_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..7510aa9ebf --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Stain @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA Stain @base", + "from": "system", + "setting_id": "GFSPM005_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M.json new file mode 100644 index 0000000000..620a76ffe4 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Stain @BBL A1M", + "inherits": "Panchroma PLA Stain @base", + "from": "system", + "setting_id": "GFSPM005_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..00cf4852a1 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Stain @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA Stain @base", + "from": "system", + "setting_id": "GFSPM005_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "15" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P.json new file mode 100644 index 0000000000..88678c3159 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Stain @BBL P1P", + "inherits": "Panchroma PLA Stain @base", + "from": "system", + "setting_id": "GFSPM005_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "15" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..435a9c991a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Stain @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA Stain @base", + "from": "system", + "setting_id": "GFSPM005_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "15" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1.json new file mode 100644 index 0000000000..e5d9bfdf3a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Stain @BBL X1", + "inherits": "Panchroma PLA Stain @base", + "from": "system", + "setting_id": "GFSPM005_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "15" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..d4f02ff39a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Stain @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA Stain @base", + "from": "system", + "setting_id": "GFSPM005_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "15" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C.json new file mode 100644 index 0000000000..1d50deee52 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Panchroma PLA Stain @BBL X1C", + "inherits": "Panchroma PLA Stain @base", + "from": "system", + "setting_id": "GFSPM005_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "15" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @base.json new file mode 100644 index 0000000000..b2cb2b8cf3 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA Stain @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM005", + "instantiation": "false", + "filament_cost": [ + "20.99" + ], + "filament_density": [ + "1.24" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "5" + ], + "temperature_vitrification": [ + "59" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..be07d4198a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Starlight @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA Starlight @base", + "from": "system", + "setting_id": "GFSPM009_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1.json new file mode 100644 index 0000000000..42fee56487 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Starlight @BBL A1", + "inherits": "Panchroma PLA Starlight @base", + "from": "system", + "setting_id": "GFSPM009_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..5b3c763912 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1M 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Starlight @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA Starlight @base", + "from": "system", + "setting_id": "GFSPM009_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1M.json new file mode 100644 index 0000000000..89608dc85a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL A1M.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Starlight @BBL A1M", + "inherits": "Panchroma PLA Starlight @base", + "from": "system", + "setting_id": "GFSPM009_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..b9e30ad4d7 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL P1P 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Starlight @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA Starlight @base", + "from": "system", + "setting_id": "GFSPM009_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL P1P.json new file mode 100644 index 0000000000..c84c9ebd3a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL P1P.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Starlight @BBL P1P", + "inherits": "Panchroma PLA Starlight @base", + "from": "system", + "setting_id": "GFSPM009_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..6356cbb490 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Starlight @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA Starlight @base", + "from": "system", + "setting_id": "GFSPM009_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1.json new file mode 100644 index 0000000000..fae07c5452 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Starlight @BBL X1", + "inherits": "Panchroma PLA Starlight @base", + "from": "system", + "setting_id": "GFSPM009_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..10a20e2cce --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1C 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Starlight @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA Starlight @base", + "from": "system", + "setting_id": "GFSPM009_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1C.json new file mode 100644 index 0000000000..8f5545ad78 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @BBL X1C.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Panchroma PLA Starlight @BBL X1C", + "inherits": "Panchroma PLA Starlight @base", + "from": "system", + "setting_id": "GFSPM009_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @base.json new file mode 100644 index 0000000000..ee671b76f6 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA Starlight @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM009", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..159a227c61 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Temp Shift @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA Temp Shift @base", + "from": "system", + "setting_id": "GFSPM015_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1.json new file mode 100644 index 0000000000..505233caf8 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Temp Shift @BBL A1", + "inherits": "Panchroma PLA Temp Shift @base", + "from": "system", + "setting_id": "GFSPM015_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..e8ff1d3835 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1M 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Temp Shift @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA Temp Shift @base", + "from": "system", + "setting_id": "GFSPM015_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1M.json new file mode 100644 index 0000000000..d60a58d413 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL A1M.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Temp Shift @BBL A1M", + "inherits": "Panchroma PLA Temp Shift @base", + "from": "system", + "setting_id": "GFSPM015_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..449d367a57 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL P1P 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Temp Shift @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA Temp Shift @base", + "from": "system", + "setting_id": "GFSPM015_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL P1P.json new file mode 100644 index 0000000000..3fcae5816d --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL P1P.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Temp Shift @BBL P1P", + "inherits": "Panchroma PLA Temp Shift @base", + "from": "system", + "setting_id": "GFSPM015_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..33925b4cb4 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Temp Shift @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA Temp Shift @base", + "from": "system", + "setting_id": "GFSPM015_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1.json new file mode 100644 index 0000000000..bef8a9ba20 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Temp Shift @BBL X1", + "inherits": "Panchroma PLA Temp Shift @base", + "from": "system", + "setting_id": "GFSPM015_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..a3e626a805 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1C 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Temp Shift @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA Temp Shift @base", + "from": "system", + "setting_id": "GFSPM015_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1C.json new file mode 100644 index 0000000000..69f8f094a0 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @BBL X1C.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Panchroma PLA Temp Shift @BBL X1C", + "inherits": "Panchroma PLA Temp Shift @base", + "from": "system", + "setting_id": "GFSPM015_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @base.json new file mode 100644 index 0000000000..2803a639ed --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA Temp Shift @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM015", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..7ec12c4e44 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Translucent @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA Translucent @base", + "from": "system", + "setting_id": "GFSPM006_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1.json new file mode 100644 index 0000000000..53e7e455ae --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Translucent @BBL A1", + "inherits": "Panchroma PLA Translucent @base", + "from": "system", + "setting_id": "GFSPM006_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..e8c1ba3401 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1M 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Translucent @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA Translucent @base", + "from": "system", + "setting_id": "GFSPM006_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1M.json new file mode 100644 index 0000000000..ae4382da35 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL A1M.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Translucent @BBL A1M", + "inherits": "Panchroma PLA Translucent @base", + "from": "system", + "setting_id": "GFSPM006_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..24436d1087 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL P1P 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Translucent @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA Translucent @base", + "from": "system", + "setting_id": "GFSPM006_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL P1P.json new file mode 100644 index 0000000000..e8a2eee45e --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL P1P.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Translucent @BBL P1P", + "inherits": "Panchroma PLA Translucent @base", + "from": "system", + "setting_id": "GFSPM006_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..594ae1cd6b --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA Translucent @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA Translucent @base", + "from": "system", + "setting_id": "GFSPM006_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1.json new file mode 100644 index 0000000000..b161236585 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Translucent @BBL X1", + "inherits": "Panchroma PLA Translucent @base", + "from": "system", + "setting_id": "GFSPM006_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..959e2c47a7 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1C 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA Translucent @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA Translucent @base", + "from": "system", + "setting_id": "GFSPM006_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1C.json new file mode 100644 index 0000000000..3d39284a5c --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @BBL X1C.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Panchroma PLA Translucent @BBL X1C", + "inherits": "Panchroma PLA Translucent @base", + "from": "system", + "setting_id": "GFSPM006_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @base.json new file mode 100644 index 0000000000..7128268876 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA Translucent @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM006", + "instantiation": "false", + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..15fe67b3e4 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA UV Shift @BBL A1 0.2 nozzle", + "inherits": "Panchroma PLA UV Shift @base", + "from": "system", + "setting_id": "GFSPM014_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1.json new file mode 100644 index 0000000000..a507426161 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA UV Shift @BBL A1", + "inherits": "Panchroma PLA UV Shift @base", + "from": "system", + "setting_id": "GFSPM014_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..00356f1a31 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1M 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA UV Shift @BBL A1M 0.2 nozzle", + "inherits": "Panchroma PLA UV Shift @base", + "from": "system", + "setting_id": "GFSPM014_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1M.json new file mode 100644 index 0000000000..c79f610a6a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL A1M.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA UV Shift @BBL A1M", + "inherits": "Panchroma PLA UV Shift @base", + "from": "system", + "setting_id": "GFSPM014_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..b543471afe --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL P1P 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA UV Shift @BBL P1P 0.2 nozzle", + "inherits": "Panchroma PLA UV Shift @base", + "from": "system", + "setting_id": "GFSPM014_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL P1P.json new file mode 100644 index 0000000000..d8b635614f --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL P1P.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA UV Shift @BBL P1P", + "inherits": "Panchroma PLA UV Shift @base", + "from": "system", + "setting_id": "GFSPM014_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..d9676aeaef --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1 0.2 nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Panchroma PLA UV Shift @BBL X1 0.2 nozzle", + "inherits": "Panchroma PLA UV Shift @base", + "from": "system", + "setting_id": "GFSPM014_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1.json new file mode 100644 index 0000000000..31f7750018 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA UV Shift @BBL X1", + "inherits": "Panchroma PLA UV Shift @base", + "from": "system", + "setting_id": "GFSPM014_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..9fba4928d9 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1C 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Panchroma PLA UV Shift @BBL X1C 0.2 nozzle", + "inherits": "Panchroma PLA UV Shift @base", + "from": "system", + "setting_id": "GFSPM014_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1C.json new file mode 100644 index 0000000000..552ee78abb --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @BBL X1C.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Panchroma PLA UV Shift @BBL X1C", + "inherits": "Panchroma PLA UV Shift @base", + "from": "system", + "setting_id": "GFSPM014_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @base.json new file mode 100644 index 0000000000..552776198a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Panchroma PLA UV Shift @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM014", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/PolyLite ABS @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL A1 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ABS @BBL A1 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL A1 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite ABS @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL A1.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ABS @BBL A1.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL A1.json diff --git a/resources/profiles/BBL/filament/PolyLite ABS @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL P1P 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ABS @BBL P1P 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL P1P 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite ABS @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL P1P.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ABS @BBL P1P.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL P1P.json diff --git a/resources/profiles/BBL/filament/PolyLite ABS @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL X1C 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ABS @BBL X1C 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL X1C 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite ABS @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL X1C.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ABS @BBL X1C.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL X1C.json diff --git a/resources/profiles/BBL/filament/PolyLite ABS @BBL X1E 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL X1E 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ABS @BBL X1E 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL X1E 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite ABS @BBL X1E.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL X1E.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ABS @BBL X1E.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ABS @BBL X1E.json diff --git a/resources/profiles/BBL/filament/PolyLite ABS @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @base.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ABS @base.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ABS @base.json diff --git a/resources/profiles/BBL/filament/PolyLite ASA @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL A1 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ASA @BBL A1 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL A1 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite ASA @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL A1.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ASA @BBL A1.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL A1.json diff --git a/resources/profiles/BBL/filament/PolyLite ASA @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL P1P 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ASA @BBL P1P 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL P1P 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite ASA @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL P1P.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ASA @BBL P1P.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL P1P.json diff --git a/resources/profiles/BBL/filament/PolyLite ASA @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL X1C 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ASA @BBL X1C 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL X1C 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite ASA @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL X1C.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ASA @BBL X1C.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL X1C.json diff --git a/resources/profiles/BBL/filament/PolyLite ASA @BBL X1E 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL X1E 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ASA @BBL X1E 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL X1E 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite ASA @BBL X1E.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL X1E.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ASA @BBL X1E.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ASA @BBL X1E.json diff --git a/resources/profiles/BBL/filament/PolyLite ASA @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @base.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite ASA @base.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite ASA @base.json diff --git a/resources/profiles/BBL/filament/PolyLite PETG @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL A1 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PETG @BBL A1 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL A1 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite PETG @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL A1.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PETG @BBL A1.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL A1.json diff --git a/resources/profiles/BBL/filament/PolyLite PETG @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL A1M 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PETG @BBL A1M 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL A1M 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite PETG @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL A1M.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PETG @BBL A1M.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL A1M.json diff --git a/resources/profiles/BBL/filament/PolyLite PETG @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL P1P 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PETG @BBL P1P 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL P1P 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite PETG @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL P1P.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PETG @BBL P1P.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL P1P.json diff --git a/resources/profiles/BBL/filament/PolyLite PETG @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL X1C 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PETG @BBL X1C 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL X1C 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite PETG @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL X1C.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PETG @BBL X1C.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PETG @BBL X1C.json diff --git a/resources/profiles/BBL/filament/PolyLite PETG @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @base.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PETG @base.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PETG @base.json diff --git a/resources/profiles/BBL/filament/PolyLite PLA @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL A1 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PLA @BBL A1 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL A1 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite PLA @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL A1.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PLA @BBL A1.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL A1.json diff --git a/resources/profiles/BBL/filament/PolyLite PLA @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL A1M 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PLA @BBL A1M 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL A1M 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite PLA @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL A1M.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PLA @BBL A1M.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL A1M.json diff --git a/resources/profiles/BBL/filament/PolyLite PLA @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL X1.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PLA @BBL X1.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL X1.json diff --git a/resources/profiles/BBL/filament/PolyLite PLA @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL X1C 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PLA @BBL X1C 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL X1C 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyLite PLA @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL X1C.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PLA @BBL X1C.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PLA @BBL X1C.json diff --git a/resources/profiles/BBL/filament/PolyLite PLA @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @base.json similarity index 100% rename from resources/profiles/BBL/filament/PolyLite PLA @base.json rename to resources/profiles/BBL/filament/Polymaker/PolyLite PLA @base.json diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..b30f302c9b --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "PolyLite PLA Pro @BBL A1 0.2 nozzle", + "inherits": "PolyLite PLA Pro @base", + "from": "system", + "setting_id": "GFSPM019_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1.json new file mode 100644 index 0000000000..524e86f867 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "PolyLite PLA Pro @BBL A1", + "inherits": "PolyLite PLA Pro @base", + "from": "system", + "setting_id": "GFSPM019_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..938ddc1247 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1M 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "PolyLite PLA Pro @BBL A1M 0.2 nozzle", + "inherits": "PolyLite PLA Pro @base", + "from": "system", + "setting_id": "GFSPM019_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1M.json new file mode 100644 index 0000000000..b4a7f2ab08 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL A1M.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "PolyLite PLA Pro @BBL A1M", + "inherits": "PolyLite PLA Pro @base", + "from": "system", + "setting_id": "GFSPM019_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..28ade72761 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL P1P 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "PolyLite PLA Pro @BBL P1P 0.2 nozzle", + "inherits": "PolyLite PLA Pro @base", + "from": "system", + "setting_id": "GFSPM019_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL P1P.json new file mode 100644 index 0000000000..b18d00c3d8 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL P1P.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "PolyLite PLA Pro @BBL P1P", + "inherits": "PolyLite PLA Pro @base", + "from": "system", + "setting_id": "GFSPM019_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..03ea3972dc --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "PolyLite PLA Pro @BBL X1 0.2 nozzle", + "inherits": "PolyLite PLA Pro @base", + "from": "system", + "setting_id": "GFSPM019_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1.json new file mode 100644 index 0000000000..413c47c348 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "PolyLite PLA Pro @BBL X1", + "inherits": "PolyLite PLA Pro @base", + "from": "system", + "setting_id": "GFSPM019_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..91d8ee03dd --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1C 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "PolyLite PLA Pro @BBL X1C 0.2 nozzle", + "inherits": "PolyLite PLA Pro @base", + "from": "system", + "setting_id": "GFSPM019_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1C.json new file mode 100644 index 0000000000..435ec5cb8c --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "PolyLite PLA Pro @BBL X1C", + "inherits": "PolyLite PLA Pro @base", + "from": "system", + "setting_id": "GFSPM019_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @base.json new file mode 100644 index 0000000000..890818d5db --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "PolyLite PLA Pro @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM019", + "instantiation": "false", + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.22" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "62" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL A1 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyTerra PLA @BBL A1 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL A1 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL A1.json similarity index 100% rename from resources/profiles/BBL/filament/PolyTerra PLA @BBL A1.json rename to resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL A1.json diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL A1M 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyTerra PLA @BBL A1M 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL A1M 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL A1M.json similarity index 100% rename from resources/profiles/BBL/filament/PolyTerra PLA @BBL A1M.json rename to resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL A1M.json diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL X1.json similarity index 100% rename from resources/profiles/BBL/filament/PolyTerra PLA @BBL X1.json rename to resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL X1.json diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL X1C 0.2 nozzle.json similarity index 100% rename from resources/profiles/BBL/filament/PolyTerra PLA @BBL X1C 0.2 nozzle.json rename to resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL X1C 0.2 nozzle.json diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL X1C.json similarity index 100% rename from resources/profiles/BBL/filament/PolyTerra PLA @BBL X1C.json rename to resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @BBL X1C.json diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @base.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @base.json similarity index 100% rename from resources/profiles/BBL/filament/PolyTerra PLA @base.json rename to resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @base.json diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..6718080dbc --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA @BBL A1 0.2 nozzle", + "inherits": "Polymaker HT-PLA @base", + "from": "system", + "setting_id": "GFSPM017_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1.json new file mode 100644 index 0000000000..6481ca3256 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA @BBL A1", + "inherits": "Polymaker HT-PLA @base", + "from": "system", + "setting_id": "GFSPM017_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..b68f3573cf --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1M 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA @BBL A1M 0.2 nozzle", + "inherits": "Polymaker HT-PLA @base", + "from": "system", + "setting_id": "GFSPM017_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1M.json new file mode 100644 index 0000000000..bd8ec395a6 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL A1M.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA @BBL A1M", + "inherits": "Polymaker HT-PLA @base", + "from": "system", + "setting_id": "GFSPM017_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..5661d0eacb --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL P1P 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA @BBL P1P 0.2 nozzle", + "inherits": "Polymaker HT-PLA @base", + "from": "system", + "setting_id": "GFSPM017_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL P1P.json new file mode 100644 index 0000000000..9e8d7a749c --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL P1P.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA @BBL P1P", + "inherits": "Polymaker HT-PLA @base", + "from": "system", + "setting_id": "GFSPM017_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..52e855cf29 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA @BBL X1 0.2 nozzle", + "inherits": "Polymaker HT-PLA @base", + "from": "system", + "setting_id": "GFSPM017_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1.json new file mode 100644 index 0000000000..d36d11142a --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA @BBL X1", + "inherits": "Polymaker HT-PLA @base", + "from": "system", + "setting_id": "GFSPM017_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..2e0a8026eb --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1C 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA @BBL X1C 0.2 nozzle", + "inherits": "Polymaker HT-PLA @base", + "from": "system", + "setting_id": "GFSPM017_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1C.json new file mode 100644 index 0000000000..46e06a63eb --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA @BBL X1C", + "inherits": "Polymaker HT-PLA @base", + "from": "system", + "setting_id": "GFSPM017_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @base.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @base.json new file mode 100644 index 0000000000..a66d2cb478 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @base.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM017", + "instantiation": "false", + "filament_cost": [ + "26.99" + ], + "filament_density": [ + "1.28" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..657177889c --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA-GF @BBL A1 0.2 nozzle", + "inherits": "Polymaker HT-PLA-GF @base", + "from": "system", + "setting_id": "GFSPM018_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1.json new file mode 100644 index 0000000000..b3a391815f --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA-GF @BBL A1", + "inherits": "Polymaker HT-PLA-GF @base", + "from": "system", + "setting_id": "GFSPM018_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..fbce27c2d1 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1M 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA-GF @BBL A1M 0.2 nozzle", + "inherits": "Polymaker HT-PLA-GF @base", + "from": "system", + "setting_id": "GFSPM018_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1M.json new file mode 100644 index 0000000000..3802820225 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL A1M.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA-GF @BBL A1M", + "inherits": "Polymaker HT-PLA-GF @base", + "from": "system", + "setting_id": "GFSPM018_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..70e670df7e --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL P1P 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA-GF @BBL P1P 0.2 nozzle", + "inherits": "Polymaker HT-PLA-GF @base", + "from": "system", + "setting_id": "GFSPM018_05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL P1P.json new file mode 100644 index 0000000000..b37bb5f249 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL P1P.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA-GF @BBL P1P", + "inherits": "Polymaker HT-PLA-GF @base", + "from": "system", + "setting_id": "GFSPM018_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..2b39fd0a67 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA-GF @BBL X1 0.2 nozzle", + "inherits": "Polymaker HT-PLA-GF @base", + "from": "system", + "setting_id": "GFSPM018_07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1.json new file mode 100644 index 0000000000..4b63b5dae9 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA-GF @BBL X1", + "inherits": "Polymaker HT-PLA-GF @base", + "from": "system", + "setting_id": "GFSPM018_06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..50f8f5d3b1 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1C 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA-GF @BBL X1C 0.2 nozzle", + "inherits": "Polymaker HT-PLA-GF @base", + "from": "system", + "setting_id": "GFSPM018_09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1C.json new file mode 100644 index 0000000000..6721530b3f --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA-GF @BBL X1C", + "inherits": "Polymaker HT-PLA-GF @base", + "from": "system", + "setting_id": "GFSPM018_08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @base.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @base.json new file mode 100644 index 0000000000..9e42157a91 --- /dev/null +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA-GF @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFPM018", + "instantiation": "false", + "filament_cost": [ + "32.99" + ], + "filament_density": [ + "1.34" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "60" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json index 9ed681e6a9..9adfc32c57 100644 --- a/resources/profiles/OrcaFilamentLibrary.json +++ b/resources/profiles/OrcaFilamentLibrary.json @@ -1,6 +1,6 @@ { "name": "OrcaFilamentLibrary", - "version": "02.03.00.04", + "version": "02.03.00.04", "force_update": "0", "description": "Orca Filament Library", "filament_list": [ @@ -368,11 +368,11 @@ "name": "Overture PLA @base", "sub_path": "filament/Overture/Overture PLA @base.json" }, - { + { "name": "Overture TPU @base", "sub_path": "filament/Overture/Overture TPU @base.json" }, - { + { "name": "Overture ABS Basic @base", "sub_path": "filament/Overture/Overture ABS Basic @base.json" }, @@ -708,11 +708,11 @@ "name": "Overture PLA @System", "sub_path": "filament/Overture/Overture PLA @System.json" }, - { + { "name": "Overture TPU @System", "sub_path": "filament/Overture/Overture TPU @System.json" }, - { + { "name": "Overture ABS Basic @System", "sub_path": "filament/Overture/Overture ABS Basic @System.json" }, @@ -819,6 +819,158 @@ { "name": "AliZ PETG-Metal @System", "sub_path": "filament/AliZ/AliZ PETG-Metal @System.json" + }, + { + "name": "Panchroma CoPE @base", + "sub_path": "filament/Polymaker/Panchroma CoPE @base.json" + }, + { + "name": "Panchroma CoPE @System", + "sub_path": "filament/Polymaker/Panchroma CoPE @System.json" + }, + { + "name": "Panchroma PLA @base", + "sub_path": "filament/Polymaker/Panchroma PLA @base.json" + }, + { + "name": "Panchroma PLA @System", + "sub_path": "filament/Polymaker/Panchroma PLA @System.json" + }, + { + "name": "Panchroma PLA Celestial @base", + "sub_path": "filament/Polymaker/Panchroma PLA Celestial @base.json" + }, + { + "name": "Panchroma PLA Celestial @System", + "sub_path": "filament/Polymaker/Panchroma PLA Celestial @System.json" + }, + { + "name": "Panchroma PLA Galaxy @base", + "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @base.json" + }, + { + "name": "Panchroma PLA Galaxy @System", + "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @System.json" + }, + { + "name": "Panchroma PLA Glow @base", + "sub_path": "filament/Polymaker/Panchroma PLA Glow @base.json" + }, + { + "name": "Panchroma PLA Glow @System", + "sub_path": "filament/Polymaker/Panchroma PLA Glow @System.json" + }, + { + "name": "Panchroma PLA Luminous @base", + "sub_path": "filament/Polymaker/Panchroma PLA Luminous @base.json" + }, + { + "name": "Panchroma PLA Luminous @System", + "sub_path": "filament/Polymaker/Panchroma PLA Luminous @System.json" + }, + { + "name": "Panchroma PLA Marble @base", + "sub_path": "filament/Polymaker/Panchroma PLA Marble @base.json" + }, + { + "name": "Panchroma PLA Marble @System", + "sub_path": "filament/Polymaker/Panchroma PLA Marble @System.json" + }, + { + "name": "Panchroma PLA Matte @base", + "sub_path": "filament/Polymaker/Panchroma PLA Matte @base.json" + }, + { + "name": "Panchroma PLA Matte @System", + "sub_path": "filament/Polymaker/Panchroma PLA Matte @System.json" + }, + { + "name": "Panchroma PLA Metallic @base", + "sub_path": "filament/Polymaker/Panchroma PLA Metallic @base.json" + }, + { + "name": "Panchroma PLA Metallic @System", + "sub_path": "filament/Polymaker/Panchroma PLA Metallic @System.json" + }, + { + "name": "Panchroma PLA Neon @base", + "sub_path": "filament/Polymaker/Panchroma PLA Neon @base.json" + }, + { + "name": "Panchroma PLA Neon @System", + "sub_path": "filament/Polymaker/Panchroma PLA Neon @System.json" + }, + { + "name": "Panchroma PLA Silk @base", + "sub_path": "filament/Polymaker/Panchroma PLA Silk @base.json" + }, + { + "name": "Panchroma PLA Silk @System", + "sub_path": "filament/Polymaker/Panchroma PLA Silk @System.json" + }, + { + "name": "Panchroma PLA Stain @base", + "sub_path": "filament/Polymaker/Panchroma PLA Stain @base.json" + }, + { + "name": "Panchroma PLA Stain @System", + "sub_path": "filament/Polymaker/Panchroma PLA Stain @System.json" + }, + { + "name": "Panchroma PLA Starlight @base", + "sub_path": "filament/Polymaker/Panchroma PLA Starlight @base.json" + }, + { + "name": "Panchroma PLA Starlight @System", + "sub_path": "filament/Polymaker/Panchroma PLA Starlight @System.json" + }, + { + "name": "Panchroma PLA Temp Shift @base", + "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @base.json" + }, + { + "name": "Panchroma PLA Temp Shift @System", + "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @System.json" + }, + { + "name": "Panchroma PLA Translucent @base", + "sub_path": "filament/Polymaker/Panchroma PLA Translucent @base.json" + }, + { + "name": "Panchroma PLA Translucent @System", + "sub_path": "filament/Polymaker/Panchroma PLA Translucent @System.json" + }, + { + "name": "Panchroma PLA UV Shift @base", + "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @base.json" + }, + { + "name": "Panchroma PLA UV Shift @System", + "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @System.json" + }, + { + "name": "PolyLite PLA Pro @base", + "sub_path": "filament/Polymaker/PolyLite PLA Pro @base.json" + }, + { + "name": "PolyLite PLA Pro @System", + "sub_path": "filament/Polymaker/PolyLite PLA Pro @System.json" + }, + { + "name": "Polymaker HT-PLA @base", + "sub_path": "filament/Polymaker/Polymaker HT-PLA @base.json" + }, + { + "name": "Polymaker HT-PLA @System", + "sub_path": "filament/Polymaker/Polymaker HT-PLA @System.json" + }, + { + "name": "Polymaker HT-PLA-GF @base", + "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @base.json" + }, + { + "name": "Polymaker HT-PLA-GF @System", + "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @System.json" } ] -} +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @System.json new file mode 100644 index 0000000000..89cb3351ac --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Panchroma CoPE @System", + "inherits": "Panchroma CoPE @base", + "from": "system", + "setting_id": "OGFSPM016", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @base.json new file mode 100644 index 0000000000..322160d970 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Panchroma CoPE @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM016", + "instantiation": "false", + "filament_cost": [ + "19.99" + ], + "filament_density": [ + "1.29" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "58" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @System.json new file mode 100644 index 0000000000..da9461e046 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Panchroma PLA @System", + "inherits": "Panchroma PLA @base", + "from": "system", + "setting_id": "OGFSPM001", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @base.json new file mode 100644 index 0000000000..c4c427efb3 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @base.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Panchroma PLA @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM001", + "instantiation": "false", + "filament_cost": [ + "19.99" + ], + "filament_density": [ + "1.32" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "58" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @System.json new file mode 100644 index 0000000000..5df619a373 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Panchroma PLA Celestial @System", + "inherits": "Panchroma PLA Celestial @base", + "from": "system", + "setting_id": "OGFSPM008", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @base.json new file mode 100644 index 0000000000..f2bec62180 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Panchroma PLA Celestial @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM008", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @System.json new file mode 100644 index 0000000000..2447d3ca88 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Panchroma PLA Galaxy @System", + "inherits": "Panchroma PLA Galaxy @base", + "from": "system", + "setting_id": "OGFSPM007", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @base.json new file mode 100644 index 0000000000..87d64472b3 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Panchroma PLA Galaxy @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM007", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @System.json new file mode 100644 index 0000000000..aa0b49bcaf --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Panchroma PLA Glow @System", + "inherits": "Panchroma PLA Glow @base", + "from": "system", + "setting_id": "OGFSPM010", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @base.json new file mode 100644 index 0000000000..66dfd1199f --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Panchroma PLA Glow @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM010", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @System.json new file mode 100644 index 0000000000..cc5faeba82 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Panchroma PLA Luminous @System", + "inherits": "Panchroma PLA Luminous @base", + "from": "system", + "setting_id": "OGFSPM011", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @base.json new file mode 100644 index 0000000000..32467b8397 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Panchroma PLA Luminous @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM011", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @System.json new file mode 100644 index 0000000000..15f118b727 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @System.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Panchroma PLA Marble @System", + "inherits": "Panchroma PLA Marble @base", + "from": "system", + "setting_id": "OGFSPM003", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @base.json new file mode 100644 index 0000000000..16d92253bf --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @base.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Panchroma PLA Marble @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM003", + "instantiation": "false", + "filament_cost": [ + "21.99" + ], + "filament_density": [ + "1.31" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @System.json new file mode 100644 index 0000000000..ede971cc8a --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @System.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Panchroma PLA Matte @System", + "inherits": "Panchroma PLA Matte @base", + "from": "system", + "setting_id": "GFSPM002", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @base.json new file mode 100644 index 0000000000..be50bed224 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @base.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Panchroma PLA Matte @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM002", + "instantiation": "false", + "filament_cost": [ + "20.99" + ], + "filament_density": [ + "1.31" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @System.json new file mode 100644 index 0000000000..10fb8b3691 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Panchroma PLA Metallic @System", + "inherits": "Panchroma PLA Metallic @base", + "from": "system", + "setting_id": "OGFSPM012", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @base.json new file mode 100644 index 0000000000..6551995e47 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Panchroma PLA Metallic @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM012", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @System.json new file mode 100644 index 0000000000..907d3ab334 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Panchroma PLA Neon @System", + "inherits": "Panchroma PLA Neon @base", + "from": "system", + "setting_id": "OGFSPM013", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @base.json new file mode 100644 index 0000000000..bdaab2e375 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Panchroma PLA Neon @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM013", + "instantiation": "false", + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @System.json new file mode 100644 index 0000000000..b2c640209c --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @System.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Panchroma PLA Silk @System", + "inherits": "Panchroma PLA Silk @base", + "from": "system", + "setting_id": "OGFSPM004", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @base.json new file mode 100644 index 0000000000..3650fe2ccd --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @base.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Panchroma PLA Silk @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM004", + "instantiation": "false", + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.31" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "58" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @System.json new file mode 100644 index 0000000000..96e40e373f --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Panchroma PLA Stain @System", + "inherits": "Panchroma PLA Stain @base", + "from": "system", + "setting_id": "OGFSPM005", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @base.json new file mode 100644 index 0000000000..4021abe0c3 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @base.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Panchroma PLA Stain @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM005", + "instantiation": "false", + "filament_cost": [ + "20.99" + ], + "filament_density": [ + "1.24" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "59" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @System.json new file mode 100644 index 0000000000..a6318ff2f2 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Panchroma PLA Starlight @System", + "inherits": "Panchroma PLA Starlight @base", + "from": "system", + "setting_id": "OGFSPM009", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @base.json new file mode 100644 index 0000000000..eace8c38dd --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Panchroma PLA Starlight @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM009", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @System.json new file mode 100644 index 0000000000..9c911f4937 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Panchroma PLA Temp Shift @System", + "inherits": "Panchroma PLA Temp Shift @base", + "from": "system", + "setting_id": "OGFSPM015", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @base.json new file mode 100644 index 0000000000..d201b27510 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Panchroma PLA Temp Shift @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM015", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @System.json new file mode 100644 index 0000000000..9479013a22 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Panchroma PLA Translucent @System", + "inherits": "Panchroma PLA Translucent @base", + "from": "system", + "setting_id": "OGFSPM006", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @base.json new file mode 100644 index 0000000000..7a5851c120 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Panchroma PLA Translucent @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM006", + "instantiation": "false", + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @System.json new file mode 100644 index 0000000000..29b9c1f215 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Panchroma PLA UV Shift @System", + "inherits": "Panchroma PLA UV Shift @base", + "from": "system", + "setting_id": "OGFSPM014", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @base.json new file mode 100644 index 0000000000..ad077493bf --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Panchroma PLA UV Shift @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM014", + "instantiation": "false", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.17" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "61" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @System.json new file mode 100644 index 0000000000..949bf9e77b --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "PolyLite PLA Pro @System", + "inherits": "PolyLite PLA Pro @base", + "from": "system", + "setting_id": "OGFSPM019", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @base.json new file mode 100644 index 0000000000..1a0c38e2bb --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "PolyLite PLA Pro @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM019", + "instantiation": "false", + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.22" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "temperature_vitrification": [ + "62" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @System.json new file mode 100644 index 0000000000..d11b0d7ac2 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA @System", + "inherits": "Polymaker HT-PLA @base", + "from": "system", + "setting_id": "OGFSPM017", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @base.json new file mode 100644 index 0000000000..14640f17a2 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @base.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM017", + "instantiation": "false", + "filament_cost": [ + "26.99" + ], + "filament_density": [ + "1.28" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @System.json new file mode 100644 index 0000000000..e6b5f2fe60 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA-GF @System", + "inherits": "Polymaker HT-PLA-GF @base", + "from": "system", + "setting_id": "OGFSPM018", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @base.json new file mode 100644 index 0000000000..80d1b1f3f3 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @base.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Polymaker HT-PLA-GF @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFPM018", + "instantiation": "false", + "filament_cost": [ + "32.99" + ], + "filament_density": [ + "1.34" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Polymaker" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} \ No newline at end of file From 18f17a10c98d3b25127da508385a969c96fc177f Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Fri, 18 Jul 2025 07:31:14 +0800 Subject: [PATCH 03/13] Fix issue that clicking paint gizmos while mouse is hovering above the model, view panning doesn't work (#10164) Fix issue that clicking paint gizmos while mouse is hovering above the model, view panning doesn't work. The issue was introduced in #8776. --- src/slic3r/GUI/GLCanvas3D.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 72ad8f59f5..e8cf2235b0 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1658,6 +1658,11 @@ void GLCanvas3D::enable_legend_texture(bool enable) void GLCanvas3D::enable_picking(bool enable) { m_picking_enabled = enable; + + // Orca: invalidate hover state when dragging is toggled, otherwise if we turned off dragging + // while hovering above a volume, the hovering state won't update even if mouse has moved away. + // Fixes https://github.com/SoftFever/OrcaSlicer/pull/9979#issuecomment-3065575889 + m_hover_volume_idxs.clear(); } void GLCanvas3D::enable_moving(bool enable) From 571adb9a3fdf5624491cd0f8543d7ca778c51643 Mon Sep 17 00:00:00 2001 From: EmilVitus <80851898+EmilVitus@users.noreply.github.com> Date: Fri, 18 Jul 2025 01:48:28 +0200 Subject: [PATCH 04/13] Fixed error in Anycubic Kobra 2 0.4 nozzle.json (#10128) Update Anycubic Kobra 2 0.4 nozzle.json Fixed error: Relative extruder addressing requires resetting the extruder position at each layer to prevent loss of floating point accuracy. --- .../Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json index 0f09f22753..6d074906e3 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json @@ -108,7 +108,7 @@ ], "machine_start_gcode": "G90 ;Use absolute coordinates\nM83 ;Extruder relative mode\nM104 S[first_layer_temperature] ;Set extruder temp\nM140 S[first_layer_bed_temperature] ;Set bed temp\nM190 S[first_layer_bed_temperature] ;Wait for bed temp\nM109 S[first_layer_temperature] ;Wait for extruder temp\nG28 ;Move X/Y/Z to min endstops\nG1 Z0.28 ;Lift nozzle a bit\nG92 E0 ;Specify current extruder position as zero\nG1 Y3 F1800 ;Move Y to purge point\nG1 X60 E25 F500 ;Extrude 25mm of filament in a 5cm line\nG92 E0 ;Zero the extruded length again\nG1 E-2 F500 ;Retract a little\nG1 X70 F4000 ;Quickly wipe away from the filament line\nM117", "machine_end_gcode": "M104 S0 ;Extruder off\nM140 S0 ;Heatbed off\nM107 ;Fan off\nG91 ;Relative positioning\nG1 E-5 F3000 ;Retract filament\nG1 Z+0.3 F3000 ;Lift print head\nG28 X0 F3000 ;Home X axis\nM84 ;Disable stepper motors", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n[layer_num] @ [layer_z]mm", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n[layer_num] @ [layer_z]mm/nG92 E0", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n[layer_num] @ [layer_z]mm", "scan_first_layer": "0" -} \ No newline at end of file +} From 521d2470eba2b15031f2a434058ce84054739eec Mon Sep 17 00:00:00 2001 From: shimmyx <56849430+shimmyx@users.noreply.github.com> Date: Fri, 18 Jul 2025 01:49:50 +0200 Subject: [PATCH 05/13] Add CR10 V3 (Marlin) Profile to Orcaslicer (#10122) * Update Creality.json Added Creality CR-10 V3, 0.4 and 0.6 nozzles * CR10 V3 /profiles/creality CR10 V3 Image cover, buildplate model, buildplate texture * CR10 V3 /profiles/creality/process CR10 V3 Process files * CR10 V3 /resources/profiles/Creality/machine CR10 V3 machine files, 0.4, 0.6 nozzle * Update Creality CR-10 V3 0.4 nozzle.json Fixed typo * Update Creality Generic ABS.json * Update Creality Generic ASA.json Add CR-10 V3 * Update Creality Generic PETG.json * Update Creality Generic ABS.json * Add CR10 V3 * Add CR10 V3 * Add CR10 V3 * Add CR10 V3 * Add CR10 V3 * Fix missing nozzle size * Fix nozzle size missing * Update 0.20mm Standard @Creality CR10V3 0.6.json Fixed naming * Update 0.20mm Standard @Creality CR10V3 0.4.json * Update Creality CR-10 V3 0.6 nozzle.json * Update Creality CR-10 V3 0.4 nozzle.json --------- Co-authored-by: Noisyfox --- resources/profiles/Creality.json | 20 +++ .../Creality/Creality CR-10 V3_cover.png | Bin 0 -> 25325 bytes .../creality_cr10v3_buildplate_model.stl | Bin 0 -> 18684 bytes .../creality_cr10v3_buildplate_texture.png | Bin 0 -> 3298 bytes .../filament/Creality Generic ABS.json | 2 + .../filament/Creality Generic ASA.json | 2 + .../filament/Creality Generic PA-CF.json | 4 +- .../filament/Creality Generic PETG.json | 2 + .../filament/Creality Generic PLA-CF.json | 4 +- .../filament/Creality Generic PLA.json | 2 + .../filament/Creality Generic TPU.json | 2 + .../machine/Creality CR-10 V3 0.4 nozzle.json | 113 +++++++++++++++++ .../machine/Creality CR-10 V3 0.6 nozzle.json | 114 ++++++++++++++++++ .../Creality/machine/Creality CR-10 V3.json | 12 ++ .../0.20mm Standard @Creality CR10V3 0.4.json | 108 +++++++++++++++++ .../0.20mm Standard @Creality CR10V3 0.6.json | 108 +++++++++++++++++ 16 files changed, 491 insertions(+), 2 deletions(-) create mode 100644 resources/profiles/Creality/Creality CR-10 V3_cover.png create mode 100644 resources/profiles/Creality/creality_cr10v3_buildplate_model.stl create mode 100644 resources/profiles/Creality/creality_cr10v3_buildplate_texture.png create mode 100644 resources/profiles/Creality/machine/Creality CR-10 V3 0.4 nozzle.json create mode 100644 resources/profiles/Creality/machine/Creality CR-10 V3 0.6 nozzle.json create mode 100644 resources/profiles/Creality/machine/Creality CR-10 V3.json create mode 100644 resources/profiles/Creality/process/0.20mm Standard @Creality CR10V3 0.4.json create mode 100644 resources/profiles/Creality/process/0.20mm Standard @Creality CR10V3 0.6.json diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 1deaf3081b..3a9a6457ce 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -8,6 +8,10 @@ "name": "Creality CR-10 V2", "sub_path": "machine/Creality CR-10 V2.json" }, + { + "name": "Creality CR-10 V3", + "sub_path": "machine/Creality CR-10 V3.json" + }, { "name": "Creality CR-10 Max", "sub_path": "machine/Creality CR-10 Max.json" @@ -646,6 +650,14 @@ "name": "0.20mm Standard @Creality CR10V2", "sub_path": "process/0.20mm Standard @Creality CR10V2.json" }, + { + "name": "0.20mm Standard @Creality CR10V3 0.4", + "sub_path": "process/0.20mm Standard @Creality CR10V3 0.4.json" + }, + { + "name": "0.20mm Standard @Creality CR10V3 0.6", + "sub_path": "process/0.20mm Standard @Creality CR10V3 0.6.json" + }, { "name": "0.20mm Standard @Creality CR10Max", "sub_path": "process/0.20mm Standard @Creality CR10Max.json" @@ -1502,6 +1514,14 @@ "name": "Creality CR-10 V2 0.4 nozzle", "sub_path": "machine/Creality CR-10 V2 0.4 nozzle.json" }, + { + "name": "Creality CR-10 V3 0.4 nozzle", + "sub_path": "machine/Creality CR-10 V3 0.4 nozzle.json" + }, + { + "name": "Creality CR-10 V3 0.6 nozzle", + "sub_path": "machine/Creality CR-10 V3 0.6 nozzle.json" + }, { "name": "Creality CR-10 Max 0.4 nozzle", "sub_path": "machine/Creality CR-10 Max 0.4 nozzle.json" diff --git a/resources/profiles/Creality/Creality CR-10 V3_cover.png b/resources/profiles/Creality/Creality CR-10 V3_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb2410f63c64934c2376174456277eb8da299fe GIT binary patch literal 25325 zcmX_{V_0SV*T=J6lQq?3+qP}jRFiGnm~7j&n~alf+tzdL7yoBp*V+5k+4y1MyFM#I zQCmu}Qn#nYoEUb?$I#y;6p_bdP-l(em+l6X1{K+Y;!psdAZyB=6%`d7#ngVNI)=0=m#=g_T(*vEtB`);d8BRA=BZJuIV&5d z>PGzoE0&IU>+rOAQIAH52k7u+-1(=E3g3$hXly=lzDX1-*0*5-tSn@$nHQ>fg=XU7&Wg zxV1HHAQ*VeNF2fY=aS8OiooZA3ZB5{USp~pxk|qs1Qx*)lV791uj?*L3qhwVTt!92 z&e0JRGBUFB^%jA6Au8~QA2UUPfj~Hs4#7{ySx(5#ZoI#lHQ8UYYBJDmI+0D3UtTw5 zcEF7ZeLhH3Fn(R1AVz~*P0gG{e0)UoTWj}vwz^yljn%)h!vshdGuP;}+G-&pBF0OS zfsEvL6@ZP6jltYJhpie1NRkDMl7xuT25y=S9?@kcWG61$`aEs0%q*!bs(NL}lB2Yi zt`;iIgVamHgl+csD2J9}V|73L)scYK_iFClgevXE-B3T2Ci{D0yV-H5U9HZEkHosP zSm<;-9Y1k+^Y|DtYYk@52cA3A`|9#I{v#<_!*y(CrgusGvaLA_3#(f()j+ckWXb{m zeed3*ia@diOn*~Xbgv*Sb0D0;C_-amjX_i_-w@dB zaauO{|4CrzewfRcNTr|Jf#JLmKzisM-^|7|EY+yhnfL%Snoa9!sVPNFW?i(7kB`$g zANvdNKi6}|sGqMc6alA5SonCl&HJ^%=?Dc@Nlz=H-RT&YDEqlBN~Dwaq1DT9_I{?e z-ShA)I>pbXKJ<$E2OX3`t$ynj*0yH)_fVn>I26(iZ=Ih&xT|ayBkH>AmEq2ly~h4P z$i4gS>v2rnWacq&?*X>20=D@+AI_?xC)0WPdp&LsvyPIbe-)vP$-!^tV7_+#cDr0_ zj#Dn@om#y>ks+J3p+tejsVyyE5UCbFjlq*aCggtjU|6k*Rb94Aah&wK8(VDW;$p$k z_|?XGuXZN^4-q(TwfudDnX$%fz7&M-!PR%%FSJ2um?YA7EJB`8P}XF6+8+e1=kKa@ zV)xufipeX>mG( zEsAuzZOYPw0mr5U05Jd^rxcfwaaR1UhxrB_cEo{bQP|HI`pg^HoQg&iL!eRtNam^ zJewsPZ)Sg_(qwX)ll^^}ydEoma(El|Ogmd2p3VJeEFtn_VMFcp2&zK5@f0F?A+sx(VP3n zkkq)D)8dJgtsjCjSzPx=1@V}{(E^QALfH4gS0Q<_LE zl+N}rFfjgcwb$t!+n)C|ZI>_rI;J%`|B`Isy8+1}v^5I{&^HP7%>NdNMV~*LE!;mj zK@}oYYwxaZ)Mcu#Ng^zU9vXl0aiQG;I-ax(vBH=ighXf&*zA=qr=fD0y7+7V@_RSI zgP;+$NmWM80V&M0NJmOL_%MiwBHrGmEDT)_1A3qjK`iDD?3Ky?92E_F6)F8UjZE^Z z!3ZIhxwiCrZz~};JKb`3%hhYs*)P9B2PNXZyrwc-WV%3q)8%#JT{RfUWdHYqrlav} zXc0s0kC%1Z_;EWsC_^Lvay?#=Yny)LQAOAOb_+g3-QJ*bP&RqO;qiR1=FeqdO`jxE zhR9PT4-q_x1}REBxez`Yc51LJ_=#H$rNI9Mp-OlaA4%5ceuY5j;oXDM=SOt19N1(~ zM$oGzm>2>T#}VY-IA~;EDokqz4}U|%;yQV{{k@9}Zc7k!aA3-PN!Pr7$=jh`I%_z3 zv-_OQ<#KkDM5Th6vPlW9&?k{74qo|h9QFGV87{m~kTkJ>l$R1hbPclTy&4mKlAVU< zw=Gkq5mUMmBW{FppEc8`7H`6YAm1Evmu}_ph|ad zWs8u|{#kL*(sifY-1j*Xe;w%=aLdHB-{E@xlzNh8;oa;paoyO^fCP&2aJ}sZW4)6w z9J*?2R#O{Bn9*pu{6yeaSzfagCL!T=nUnP3uU;G0FW6Tvs;;W)Sy!f1KmZ2X=vgJ= zK8ek|i<3DuZcKfFR7x{tSwCRP-oLxkXH37+JcY-?OISq01R)GMM8Xt|#>AsUe*nMY zX1+?Rne5ZbmMYcDq5x0OZOOks+7*F>=k3$IdwTkBZPFrPaC(|k8EAbsLPFquq0425 zzvPK)tE+?JDTe?0b)!1%565&Fj52;%R-B^v$3{iTR8&@0R##Wk_1evu%9{fQOqmNi zI&dwManUK{hx$dJHB0CE)(9XNkx0d(hrWE?6Eahw(>FXugV-t4X7X^lgcHJVRr3X5 z@+C(Fe_=$XiMfdHB*bZtqD;Gvo%(_izHh>sf^h_-L2}(@`I+2eTQe==GeIL6*9UJ- z9H5?w#iv=lcpBR63k z3xaBVo6+mY(AC$^QSf=J6k26iiAMrGd5sgeo$2}rl&&uMIWscyJTcdR_TwMV$)hKX z2Z?O%7f2H~9atdP?V^SbF-pWv-RjMPio))^g23S8BtmdVa3BK)BO`j54mfip@$s6w zSMMC%E2wr|PzD7Cd0JGKc;6o5e?-5~V4Yaue+I9}MXQv`UxM$5-n9yBtkjzrG-gai z(P7dQ6p*YMJYQ_aoSaZ%937HUQo^7r)%)pmyIvCc2_bw|RGgvs6Y?7NeV9-v_zLos zs#13ow`;hITdtp(g2mKqv0wB zB@nQ3Rg#b?+j*Ga0nc>N@rWT3ObAh(om2B^Z#_j#`-F=o-Qqy$8Zd()2^AF;7f;W( zugu`5brDOeT2w*~*9$Am#6L`bZWB7to4+$RJ8>2%sp!RJWf7*cdQYksEzj2~5qqB; z{T}^Y-Q1qt9}iO<4c-PTw*&y`4L^et5g{R8VUXd?`=+MH#4RK#8?!#&pO?Sxr~DE} zA*T*g4Bq`eG~ZzW>WzQu7tO@n-8q9vm|U+`Kn)Ct7M7L@40^v-I=}r(#S8zOjLvva z*nBsGYtJ@X6{HZL9Y&eu^7?o#KJ#59NhNY|qY|K@jhDP`Z0JHjybP|d!-GR10D3xJ zzE$1kqy+Z$weIPgcg;7P)>C6;@ZK{PjdiV?6GLJHRjCK3vw2o%MYjGXC1H5C7$4U9 z$lASo=s4}xzU@LIV&6046B84S z*BIys0L*ja%)tSDeYBLx@p0kd=JTq!J}g>pkFy0GH*E!po^K6!i(=)|AE;=$mGKi& zXcM<%STtE94ZX)A{yp}$B*w-CKhYxN6A}VO%OsB!2>Gqku97vr0X6b9{Es*z(FPB8rW=0H66$9(atH)>o;oAMqOqR%qlU(j}LKr9U<5z zrI3`%V5MEeia{gc19Q#g7x9u<*;g+YwbzLr{x6hpG8s3Y`zd7cwAq52y%6~D$Vg+~ zosA9rV2H4~DfGtGrh|iWmD-kLmN~Py{=Dzynr<(Hj^>=6Y;<<@KN4BudjulH6VruHpYE((~s{9@#kuU_ILiJXQ^;iO6dMicIy4=k|lvXh@ z-b0U!95r0-gyrizp2O_{2MnRvARr-`TlH+^>2-+bpu+zd>p9*njJZNSg#Q$2PF`Fj z(w&%m!OSbSn}d3=xnas&ctzq_@a&A(KiFs|GTJvq^&Om@83s7EI+ zBs3X`77|l?ETCI&X$RR{L$aNDe|x$Z*Q$aF4jD2&pUxJLjv-gb8v6a)Y(Std&f(-E z&|5TEq7DW&actwtpOD3K0go4n;bNmv<6)Ek_VzXcXYm)kM9G7{6g5YUc5lt1K8!fm zN&z4;EzP|psNHHAsYQg#^T8r%gHor-WSJf-Zyi0YnreN1o`sW_Gf$Ngti$E9^8KW7 z#y1IEA%`35jU@fW0|9dcjsG z`%9mh3mg{y4%f#!UcYY;O4X}t+l{VQi4Zk%`Lxl)gQL1jOKu#wF;)>_Va=+LK_dgl zi=haf0({a?}0 z%)*PlU+=hoBpD+PpEPCJzNmhbffp~%VBfmOfb;4K>{FYQ-Wxl&;bJ5!q2Dk=I%3Bnuwtc`hI+qBO{s2lLPDX&_&x_zV{^IDX$%DWvKgnR5Pw zxeLV&Dag9x)9{uyRm`Ak)~xg;BJoKB9y43rjJODCjJ~{J;9&M=7hI_!UsQD;bAGuj zR>N|k0 z_-_#-IV<>hL>#X{$N~_*2c%CHVBxXo`=X-sL5_=8S;nm@_naDoOgcWK2fAg7NI_?bUfbb6nW>7fB`NDN{S_ z-u=MJ^Mj-9eb_#h%{7~uY@0@gM;^%$k+7v{aT{ne6Z9%0P8?TMRt6LBBT9=QmmHe= zC7}&^A~qw?d)OE7nb^clFmD+f6E)a4!ymSBLEA?2V^SKuSW2D{ELl2cqw9R~xBH>= zaI?9Ad;LW9C%exIOrdJ^-!(C?`BXf1WowB_{z)5ic7~&SE(i#yos$I8c{7Ghjo74<@aNATMqIhFGTIPH z%78`V;&pe4=VH%`}4Nbu*oySu(Q^2W}WYt>hUGyLEAd0%!v_{d#YHI%eK z59I{02Di7dJhPE(nLR2&_^xlmTGOa&Q#ZeTvGK}JPzRd#-Tvvvpz9|=u(3qI=(N@(*UqJ- za=MbV*x%i9-4`J6DN4`;f?ir2yYv@YcoX5Iz-(M7OzP0K8jSTiVdO~fl2CJti%Tou z!;xvpc5E<<%TH8&`1j4rv{SfpJHE+?tltJvh z#|Ao|ESd~~@OObC@9S~cIC0Z9;ym;1 zY_0X{&im*e%X!9r{rX{Fe>Sg-*XDaA*hA2KNje-HJlW6we$8GFc)9g$tKTIv25owI zNJQp;D--+-DTGD2lQh(Y%3U2#3g*zv@-s7zl%j}D=+E}h%IYX2nkJBSwQIPN9nDb;qW~1h25NBF2o2Pt0_? z`j@JICHMI9_D23XdYDRAm)A0zXKP^r*pUBh)kpt9w0(cOyv46!b)0{-$Cb6w43}*( zU{A+_Cmw|KESCdXnaW|t-vVOb_eIq~fh-oo4VC=uH|%+j%5|&Ltv!^wAU-!%hO%~pAG&et5!m@5m&~U zR;4q-#799C zXnixwL<+oISPFb>$jtc&b*uSLPXp(E1_RE#l(sqtAOs5piaWV1E1h;&zts-p6vPttv^W0DO|np_%ei zx)$7D%Eexm?-`69Ce!1^9)vxmNE;aRM3!3Euop=oIvQl!Jb!_kWfK-EOMJf1&uDbL zIIYbq)qIWxd=(RtQBzlx#&w=$X;O<>%U;ANs8_+f=6AgFzamfTUHGq3L_*%C))*jh z=zwELLrRk5bv2;z>+1t7n!=?dheDeTz7Cv#3AP8T`G~ENyW0ywI+VU1DC-(|xDXl? ziKwV(VMPT#lJ`G@f0 zp~0#O^N>9z$6G}aD~b8~aAFhe=66Q7*y@)b8Bpv~q!exdc=`+}mQ?(3fx4&#clvb_z@=k*k* zp-9R7cnMyp9yZ?LdBD1Yf}0*bK28m@NG-MbrSVJALoe4o5#8%G=(;9wXj;TM9)suWhO=NWh}bQ$ zprQiKGMNV#7Z-K&7p#tLkmF$`uhkB7%~g>+16Xod_ja{ zO$a|LQfiJ*yyAbw*o?$DY)D~7hn?SDuqVFVUPRQiqeN%q8oa8S$_;lCZ{ne!y9!(V%QOO^xvdNp71Z%b*kMM4q50o= zLX6mxH;=aibHx+sjtf4>vO=oP7_OIF$UTZN+&SQ@VaU4=r=&jc@bC=Z{%KR$2)ng= zTe(@0e);NmZx1I|_A6E4=L@iv%XS~?oxI@SB11^^c?}I^;cF~ci{C3v-pB#6Bp?cc z%#E(5)o&Eu8^7Zx$jYj!Ac{F_Dk~+dQ^~UUe4BK%v~UpjkbO(!v$e@E#|B^OKLKfs zxLqXL&Zj?7R)}|sU}E7#(1nFhZPu*g#Olr*t zd(}ukofS|i*VaQ9kH(G#7E%gyl(EvjzQJzS7G*6mojIMp@Ckh%ltljx86Qvcz4R`B zN6wm1kn+#Le}66O^zahK&097%_X1YF3Kl=8K{i`8YMHzZDQqa--=Pnzw_50Gim^)g zdknKln$DXhLd0&uPr$_D8H#MT;<<1gUWpjMk)l{+lblW6@g-$a_-SEL3_u9SoNql) z>JKtZ?W78p((AsK;#zBwhe#lYvY`s7m=G6F!*<9u`i5429^W#WU7%PCWI*y&!NkCY z_38!rd_OZ5NyAcCTB5S={X{rH4~eerG2M%3QYMpPv_xMNqxd6uX|xw#bHpUF#4HxNCp#zzSrVdemBn1>OiHCh){Kd!(M(q4s2KrUPCQFm zAjpIw)?~Gzb$6f0zx3!EDQsTBXrl-k1+QwL#_lP0d~~$!1k9PI$6R6Bis`25s< z))@7xH=)Xfwe><@zmp|h)ayY2`YZuKOvbmzx3Z!IT%;lF%|G%IX!+;n7MKV{Y7c^3)u_RWey zxjp7YQz)HBcLHdUvRXduHrfLC-k)|C1wM%OcqojQCRZtG86=ho`B2c$!UjGD#4=lL zKb1@87n}Cux0(z5eqeguy*NCLk4yV{>+|=rG6~Y$q z@7M3Vwrld6V3;y0&w^qGypE2r(xfoPR4>YPgWM*roPYpp6>6X?88Nc z$0fKN=MHcJn6f>qw_FXo#x4A_6-f4y5+UkXxOAkyOv1t&K~l6wWtAzr4sPz1Nr@@* zWJxdyiqFMkv6-ff>+O+ZN3bG-yQ(Xf3#QA0wr@_$5agj4u5lBb`lb-QGf^G-w>S-K z{WD9^n2`mB@(9=UJz#+4N@+IFve1pVu$&CY#}IH7biEz;w4$0tQ?qjVG|3Jj=)_r5 z1{%739653Ma>YCE4{wK~ja5W45~>7gErvu#s%|e7n7*;a`7>*h9wo}aBqzaCFUZAW z55@M%SvN&yZ!mBs6It9LZ~mq=@+zHPB=SnsASepbaxdg6{dQElp8KBz1%r%CHZat- zsvRJkzM4>P52q~Z16UWtae=wL+mDY1HqsyEZ^}7eQF5i>m@p9}Fz!1mCp;iI;9xx% zIa!G2>YwO;htceFa!y>o!Az^Q*tyT&4*3LBpAzkSw6(0`Umf)O0TbRkJJEFxlUpJK z(4t5*vfe)+vLKb)!6KfF@jdsspavFTp9|}hIt_-fRyu|t$oW|8Y*|6}75GMGUOFxQ z%|_wuMo7)h#NY*#R2UDrN(*kI7BU*XFb<7l6pcjrcs(<{HCR0(O{VjKXY>3rT*Ny6 znc_*@nNP^Zl{(7tHC$4y^F5oPH<3HL)#-YwSBgJFt6BGbb_h=u0NPJUPv=u1#{N9w zS#-jFlC&8@y(E z*0}>+zAI~eRL)Y;EYaPCM_c>Go%~fJDP>Z?N&0>U18n~V)1$`g;O^{Hp=i2r^t|3> z3tWGi9hb7AH0{5N;Cj0;D>`2fD$r@Wa{GL<3=cz1rtw1$nhAilujP(GsYJ@7&xC4M zf_N0Wnp)z;>uACjXM+3ia^6EXj)O{1-?c?vBWbZ`0 zb%52ZH=D9)ErID4%2)E^-9!TO-DJCWZwMSy|(gKc7R+A=D@RDEWSML-wU< zSM)-<+1cIawlYVHOoX@;IMK2d-6&19czhnz zp;am$Lt-SBPmklTh-5%bF+AXsNl{8lYH$&56?Crf{`PT3r}dA@Y}f8+wh_F1RQ$f=MfDV4;_7 zg^QlRmVCdMSTKM=@`g9>=a7h7MZFu3iF0dBJ6+U@e$4xPWiJD#!=5OFl)IX$8pBrS z_l|*GX^p;!GU2lV?kjRgsj`phKGw+@UD$9@m~4q*O+9%v=G7G(#*ZJQ^z^=C)0>@k z>%!aepKj+FyMx146%}`C(#Z(0-HA-k3U>aD@YtL2D_p9}$%FF~@X4M$TlybhlZRqA znDBKb-&>vB)4isCn~Tud+zwz8=~aLKb{Nht*;Hd1;xO}uu;3xYOJ{49G-=bRN<&8C ziaL8kkR-ktKQu`g)@%R7R2le5B_8}fHa8sORn=5gU{!k+(J_Ig zU{_XYRYpx!ZkcR7zyLecQgL1bx;8(rvPi`(Eiz%l-T(2LTB*I6vao<5U&_KnrNmFCtMw>mw>vIpFLqL+pIn z&iT)J^Wyrg(|9_g>&3@#=-V@uoVKW_>0v32I@CwjyInWCjViT7Y2%+}1)d-|IXP?S z>Y_53Y&0H*SI_q+BxDN?j#hv9`rE^d5~#@xHuN=eI++iTw@EJY>hsgx08hEgf@Z5_ zpopYRygBC6>vb1#j)Sv|PN~(E+PeJ2k=o6dpL}>L9*2JjIDJF_BsIj$wNWKYr<_$e z8K?d-u>0;91n)5D^+i5uUVAiaL~S(V8zq6GdO3YaZw!x;Gh~K}iE)Wiuhu&UbEXM! zmS~Mp!23OK!5VnA>18~>RJ#uZbsV*|@|+(=mBfSk`@jMrgnu>yY~i@Tol}Q~yat4y zuNL3+8pm!}4`GNne0eP`E3`;vfZ8%KeG7V`y@f@Y187GwamW0+d(hjX*&m%w=hH}J z{;#6N4;+75mjlY6fQE795{(2DTsd?M>R*v?aI=LPGruy~ZO(2mJ(nJEhR<=9iXvtP45sl40VpLy690>rbA@6_vJ}ZAkx3m2o z7mt%>i-&?vmdGO?2g(VGnu`8CK5w*ItwthY&=2uKK{kjnF@ZNXj47%~Ntu#QK#A!- zJSM`5AE0>I0H_uMWN*#)D&!(3!JQ@w3H3ALPE{`1yjeaGBvIk^TVv4y}fx*EUcOSoqru0 zLdZR|XTKsE5fP#Jy|`3XQNeSU$SjzsMlP6`ymZDYJ4YaI zC}`NDza4x!Z?=1PNJCtY(=HssVy-~K-GSb;m zONNZo?-s+j04-0QN@-oO)uMW0!T~zbhsIV;Ru&&`XTLotDa_b-Uv6UiGjGu{Yidzu zBo^0Z;p{Z21s!m3s7QG@IyUw1CTUlu=f(JU7}P^BEV_DfO3E}z29xgwC%%9u8Z0cV zHRM{&31+e z)p9A9o^NrklW#BLD$gDohdsLs%4fAyRZ&$%YY?G2An$I_?u-bV-C1YO=eNsB`IsFS zM{#zJhgGfJIer+{BO>@&wJw2#H_nC6PWJ29ZsCkN#L45^c&=LCw?3^LL9!+52^GoT z5n9&v8w;hh%*3EwDk=g(z+f0sB?NCGVA;;rM-~3e=SGlN71Q$)T9j(XbeDOp<~c#+Nu)>9u=jAy3%* z7A}7z@KSnU#l^7-5E)oFuPr}atlq1<&9ti2SucbqKuPC_{Dmmuui)SW%}!5`U@{qY zwh)AdhNhUx#>GlKIw&Y80)Q;v{_*Swz_m@fSU9L;_6PE(OpM`o&nMCGy~p>@ z>K4FGd#{5;@DTQ4}H+&JWX2_8tYt~XP ztdCSU3&T;2S7Xo}8aaN3gm`i#rN`B{8vSR!R7IG?`}0wqA}=UVvnBAO%R4wUgblo7 z4Dw`saFW2F_++-aGe!CopD2!Dx!MN)+exOdh)N_3X9^P@oV5^NoD|~RM*(K*e<`v$8A5v zYL|E1dUgCODzvTFnqUJ0K=TT%oHwHP)JC%<^kauh$g#qDOxC^dAfx5wx(!=2J1RF9 zfkrLe?epzX!FIo8y<3!>75JQp93DyaROrenD2{Xl94#$~6QuLQG)CKj*~rMdekc+2 z;W(nWw~mq$pZBKrCWo#{P87?C_?+=n9ulEp`#>Uh zb4@c{h20cj2tMya{==Iv?o>eK#>>nM>Os6v14ze&Ij?UDxK!{72*lMoYLIYKOPjmd z$BIbAmI()nprT?$zjJz4UlVsV6!VaP=431Ucyj*cgR zf!+|%VT|LmqDh0m8SXbduZ@U`>J(sPvGO5xn9{Se=PR7&TjY#4vmA4F9+rd z=m(Y7xi})1FjFUgfJy{nG^g>tC$>^j_*A5u-+ih;#O8Yb9Pty0kT(wj9#%|Jl5t{A zO))+!FORsTzF_eTs2!Wwe=0aU%cU!CtdzkPtF;N2uQVASj=!(B$)Co921OTLyVB(S zfP-9j2Dm5+Qjn1${0$!(IoTPwkIMNMd)es=EXm&t2Yh-Z8|C-Iz{8tUD<##&Z@5zz zqj?7XXYZhvzcH3u-H2lUswsb6RpKls*6Ox9R>hnrArW$pN_t3!OQ2uob&)sC0!>DC zy@~e8R=1bH?^f-t!g-D;eRrh$Ty099gM@ar_oqvxIdN%GO>8HXqvK;zMn)9rVjcvj z)DT-M{&%{n@k7Vn>Dz2-SnK@!{FNpb8LzSt86eqVQM5o^%U^G9r&(Oc%lMpi3OJaUp*H{&D2oDoP*5QRfOsL$3$3qc z`&PCI1wnPw{)qUtWz&&d-TGKfrODEASbHMHW3|ugPd5!<)}0-Q57MQVIC?}lksU^Y zJvp5x+K~(uBE!hDS|;my?jPw2GZR>7`tIZZCAOT9OfKN;8!#_inM8dOJuHT&7d6l# zwp?8tgP)>If&ni=M#5BKS@9k3`}Tl$shDXE@DG^!v%|Sk#hzl3$Sj2#wuFa3FgG#l zCnykWmQglp&mE$2{~D>*<7759i_hyVC??DTVKMHesj3R|4dQncwuB=G3<<#dv?DRx zWTctrjR7+=$my%AA~pKmo=pU2iHH{heSK}{HWiw*JFt-Ponr~f4g_nluok|{HBzo< zcDalWyuVt;zwdLuG5NfX@TYbQq1Ap0^+yjR%yhRE#UE0rc6tfgIf8cZaW!=*)NawH zLboTkcy~8|3j6n&ciUDB}R1AEG@m;A^6Ij3%H8S=j@I$ah0ksObsT-S%-+6}b z(-GOXyMABu`YvNo50@j9&~$$(V?~J3gr)q=q6T7*4<*B+yaa2KYHMrl`l1-<2EvGZ znQ!KbWhl(2)5^IV59%UaVZp(`SJ?fe{=jB}CQJX2#f$=i7~qhGVzGD}HKF^Q*GK;E zhh9$?9xd5tf1l3hmnDN_{7V2z6)MHb#P@G57IH^Ot(4yGPg#Q=uk9j0WuM9C$hqt5 z4Uf$1PcD;*`21|4MDlKaK9DoEhH|F*_~^pPn^MmNCcF^LbH9%kEZM+<0_}l80Y4-p zr1^R|{h!_~pJ)iPw*nj?GR!*A=}BS%=Miw{wXy}{ZXv9S<#Rx%om~UK+SSCL-%(U5 zN;tBu@c5S$xSbtC$%GMWC#`cQz#jkr1jqN~ohLB|lnmFl+S#RgTEv&iXTQlxDcv$R zj86*VA)rJ;$P#f=(7yFo@6gXSAcJxTvDO zGezFS`0oBWc=9*_W|Yh9aINmFt4(b4u1FXg6$acd$aNak@hO_#4@b*PjXB*NAjy!^ zuB6-{OIZ>u1YtoSiiXO&vAH@NDZah?0ob#ZiZF}3^gWmjyWM)fRv4e4dCMSt?s>nO z2gcB{KL|0Q{QUfm>=+mr!s1$yRj;Tut6hPN61WBI?QK?V9E11ghyBMvg#6**q1L4m za`G66o^FFIF=qWdwd|MyZD?vKZn{Qop-}C$A|B1>`-8`THItuY)H)=54taZ+1BF7) z>Z)ulD-ht(P{Nl0%I{+11zjId-d&$NHR^-LjUAXFHi)c1;Br*H-r<$Klc2v}Xr;qO zrxTEo;)cc9=mgmL{!IU*ey{N--MMHK=os|&4QDFUAFpiwLI;*y%lN?pGD z`zEq2lrw6cLKbI!0ZXvZ7bvY^OIHC#55F(HAV*Na6eypobA}crS|pX`s42TogZXxk z$0h7Zc_KNVilSy)G%F1m8WS!aZhAp{SSm#WGjskdy9=ejLwr9t7u*KLxeOR{ZtaU* z=q8m)2`hnsuP)B&#bF+$cmcjXKmX0cgMT__6Afp%&F&Ic5Bl-x;n;@sI}$#Om4yZ6 zpLN_GJzP-k-aLDpKdSMgvW4Q{91$2f`h>u;wkXn*d8E66wva24)D-o5HrBLNo#n)UOx-}gRSvf6ikRZSDz zcDHpl?+8QNCs-Abn zhTm+qO7$C68&9>YtYmuLm8kQ)eDl?)(dF8_J3%Lx1r(K*Rt^M;?3^FN6UN1jN5aL& zlY*`pyZv))qWUEnem(U1@=|A*zVR`@gvFr0vAN|hFDLigwi8ou83?{Xu-a5vJa!=M zw`4N^@y-@6eWstW;P03|>J6EF}s3ahEA3XB7`kaT6)cGl`*cGwVO zVPGuKag*GUgxI~kd78XW>)E_Dd??b43C|ZOlDmOBC^P_^bK)_jfbXP4{_0ZO_`?9>50l)Zx#cPE*@E z*0spTyE|sP_4;nUY2+^jV05XHOE)=TK&>*0b7)Zya8@Q~;K0((o>nNGS8M&p(&C1r z*GcAxkt)>bd+^KidGopVH^y)@P9c}qQFJ6Hs}i;JUsW|VNMvNU78s6K z41V1(O&%-4W;6r=>QTKw^~PkadL}0&Wy$$!QtOvZmAi*$!%k7g8g5%B&F=9r zGD{&oJ^Utl8|l}@^)WQE0x|~1kC-<1+r0pGsuv14pit{kLd;;7E?gX#nTcmAyrLBTjQ&QFSM$8(NW&r<1wAOpw zm(dm2b^gEsJkq6V4K6M(r*IHUszgR&CyjZCY+lkCZ8z?J{5Z4&+N#O)dz4}q{iiXC zTs}9eA11@mf4E)FFxEBmO*9T#Dr;&2*F>g#OEv%7s)mZjCMM7lp&>-o)s^5>4}Ohy zc3vlT-gYu!NCa=P4o17o93g=Y<_&<0p-A0;zyUDc=ZkwTtEF0>CZIX-G$@2-g0#Zr)#yq%GRFuH38rEuexwzk zn5Xl4nCe&PSforvb9i?+G2$n`{B*tjoh!_LE#^4LcYA>T@=~bab#!>B_fiwW?{kI` z6-IsvW{I9{>ENc(XrhUk2@FBT25im_q$K_skL}FO;T6$nxRUVky&NMPW$R{UWqkm@ zVV1eLGg1j@F9|3fBmo^i_U&=+2c&OLPaTukuhI_XiLe1V9gxpWc1AXp&TO9qbwVGe zG5xpIeiLZNh{3tfR^Lr+@=u=JnNm0pZ~kra1j%3*7Z(nog3FM+O*!-J`M#X1(yd+H z;;Flq))hI<+}afgCY!^HW3^m!t*)-_`r7HwpPW;JfQ%@jXwPV^P6O;i$$z@>udPL{ zas`Iz=z_?EE4hVY(fa1Z^@-1M_*{1n+5Qj58$7NTE6X+d?Hy^xL9q7D5K(2&KB#&6 zUYBf8515SGa3?weFFyWe>Z?~x(-%>`w!S}M0IKFJ7IuMeULc>_1+UXrn1F8lm1sc$ zl}z97_wB}}k*2b%xng)AuVu7yf!`V0$a5jw12U1yfL>IZYkb$kllKt<>^Ql( zy$xNobyJGX1N3%kM)znJe&3SFKLN z>GRg)3`|L;Qj$!l?Xs)1fKE1z&^Ex@??)fDUN2$c>>6UrFKfsx4h5kvbemUiYA1p zs7`)YmR0$;a)7RdLB9Ak7yDp^5E2qz%}n?D-DcsC=1en`jdr**J--NSzh}+T`4{yD zWMpLUOl@yjzHHQo#Ky%bAi~{zm*nRM5G?T8pD?zcPgdK`y4k8$E}p%Y$a?gA`}@v+ zdViQ?8Al^1A!H>TSwCNG=G{j@2+lPS6Qk#nZ(pb=@I7|>+m@F=TDO|yXFm)|X{G(P zg>s2fv!#mi?e&mjss2-cK=+7J2RY>&!tCCCwH4<#=4tzBUt zy+7U!z6aXxk8#pYC(Ii2J1XFE^!0CUp9=Ujn|`mixZa9Lh>8yJ_1@I03Hk2nJJy3c z)`P&c6DV^v%Rwbb!a-Z3NXzcvyQU#{YfkbmEN5gcR2UwlXr$O~`rK{Kn>S8tsH-2{ zzj{B}a4lwnlgv~LW6k`J_<0jV)qAq8BHKv0d`k{GY7=bHp!A3d5-l9{Y>LCk4^OD>?FZ$;^BdNn`b5fuy3R9P+yE8q5KTsOi@ItHo9vFc2gw)=1XtPi#F~ zT{u#Dojbr%F>!wSPQ0O_YgNV>F0fmi83>lOh^?<-0zMo}hH0?{j0Q5Z2FdL;J@R13 zLC4Ma4Sflrl_=8s_p4A=AVDZVa_yi-ScIsLgedD6u`2q9MMMf=$vf{#nD*`=<*6+i zMfS+SbAzf2x(cpp{S44V8xX5OJu3T`m9^ps`Pzcp+~Y&oGpF#LiMU?`t#Aj(X@SKP zdRW+RNm<#navMvG@Lwd9KdxvwCCEGe#{!VCGW4Q=_Vna|7x4H0q(#R7W#i)`0BRX# z{;u}yPu(Go0H)$U^Ccqm8jLk-!dzeHQ-4+=_IQ|Y zol)ZA92s#m>|kL)WS7zi5Fj?ZtXQ-nf-=m9&1=q+l#)vK{az@)zIz25SJ>CZNEEV10kvd; zlfP29q==d%V@}UvqS6HAt;qH*;o&5-4)#7XCxmIcu)~NN_`d+eAv@j|2pN^54KagW z&y-`|T)vFykhBIzcM51h=gysN0e=3FN+c8rG~?K@W9wSekX!B%&7Lu1*Ejq3&sM2a z-e$9z7aks-SXfwiULui5x^|A5{OG*L|59F2kK*ED6crS*4HRUV+sEBQ@9653r=g*&q*=#|-zI~a|$jZ*b zg5NE`v17*=cu2d04mQxyGy0f}=DE?4(Vq++Jjn6N;y)5FZtIhfkkDsDO3K2{of2lX zP%Fmq1p+oJwt(8%KTg>-M~h`(HPFJ@*6a}?O6CMR^=Zq3{MK~~d58$zwYBxoYMNlb zxi;b9t-A&2Zr!@g3-uTiS4B2<>jIvzW{|rMeNvrlTHV|NCdgk4gS6X z2oDZJWMm|ZK?$LBX>{O*v%p}mz-TgpI4%ta12kD0kf;rh4Rnj8cK%M*-qHNsIU|s? z!c8m9=fQ4k_F)U1SUYy~D0c7K%@S#5W@Vsz_ingxqYOFOxiA==9vg*1$*!gC?VOx! zczJp;w;h2@qiKRdA!oCaR3c_)4SVt)G^^J707s(CHh;Q9n2>@^=^9)K7GMLqk3Edc#f1VQXH5lht1S&f9m# zLf=32z8tYs6qBEu3!zYi<0sSa)Z+i-7#vvsw8JMfi5HwQ4aJ28SiAB|oIG|6`!uT?y zHGEvVb`7UbpJr(!QiiACZ-4zO5<17TS%bLgxwGftuoK4y=&-R^Bw=0*XTVhsynTF_ z>y8$MH8nMiKhtR)9_%br!r;LJxOwvz^85AcH}ur0Q-{B=Q-=*1Qe03}6l&BPSZWJ8 z!bXQ8XbYV@R{p-eEMA0UiK%R{NW{|R*==?<3p%YYV7HT1CT{J_Kz8dI<-fBO4}1X+ zHk%!E_?NhU3((p1v_9d${!V~j{?0ph2hfzZH##;3nubQ$?Up?U4j&!;lZb5n1#Ztj zyWq1P?v2wfW!FO;(}P*xg8Y1xloq49rka7737$8DS>`5TGe?UHkB({4G);?3A&-D2 zfZ1qaXZOyWJ_RpN56I*^IQV8LKcp~F&y5Wo@{_AJu}A>qp`XH0e%5cs@2FZ$iu}8mmpWlF>Kf{=yW=4{%R9+Mm-FA z1C#cm8K$JT7}qm0==2H8Y(+k13K6ZVt4CsD7Y1k_UtiWH@{3a+c&I%XhYk%6LP2gW zeEfYsNFF@6n?x+{ziQ1&q>fI5LauaB6d&~gPav?r_wKtQtHaJ*f{fe3cGDvB;OrZE ztLTL!AXA@OiI#zkgd8$A8S4`QKYh{5pj0ZFc`^UyJWa;JZs$;2Tf@c&G=nkkj?CSE187OtE=eYG=u?zieqmusc6Ro`*5mbm@AUHW3YtD`+Tzn^ z&O{gthGBJeb)wP32V&#ao!~imjPKH6SUTw~5eeAzOulg1`eq(nhlBl0w1EDm_Ea<9 zEl)gB{RMX2&V5Xn> zd>eRdy>QDyxp{rT=oif%#HF3gg7r5&AN@~#O#d#CNZHF98XC@CKK9``X$y-u;GA@< zsGtD80i*=woGIR1y7ZT~&_k1xUr?(({#9C93XxEVQ)kb#Io+7^;OyG+vNErMg9qVc zdO8a8^O2O)71_DjsH&`DR-&$rcoih!2zJP7S(EEo`qCJ3-8TZbM=J#hHQ5pX;{8Z=F8;2IhlnJ`YL&YjpS zLLQDs9(@Qz-=OOn+tOX?{H&9nsgGm#oym0vNATO+osZ)5y!pzymX9AUi7?RFDS8&0(FREU zq4etthprJ0iyl^6BRGc+e4)kZy`c31^EKLF=i9+^NEpR&Qe_7mjB__zUvg}4&b7qD za~^75OE@W*lXvkT6bg`^Ux0uBe^ixM!pqkiCX*RzwFll>b{D)HqeqP@^Yir!BsY@9 zYUM6nx$Im8-TB9D_N-Z7=jY`Q=$x47M&%RGjAj!9Cn;~zl$?>70Z%VAtQIRMv5rt6 zLQ|uL?ZDCE&O_}9p+ti4h{$6H4jz1@y1F{QxoJGLS{>T6N7t3*rDe$!okv{M&Jh=E z&PK~Dlyh5~e8C2Tk&cw%nS~3nV&w|vZE)DEjC+!%9H}+&L;`rIRN(Oi5OG?pe54af zO)@OrSO_cUv|6EI!8mvB0<%K&vXB9cjEaPZ2c?Y8!n6nOM^;uQ=Ffl1F*0@R|L6e@ z7%)I{@#005zpozyHCeqTZ4-N8X)Pdt5k6uuh9(K%WWHK z*VI6#(J`-%L@b6;uLU0>ct_5{kp4>$=`Dw@+KlQ_E5vdm#Bv7=j$&vmWzZVyP*-1u zMqLSXx)SJ(b#U1Au=Df~lSL;#bn`-xQtT03dGz5qY$4pTGfK00Nl7WAQ?zG5JEK-J zd8SCDo{WM3Z!KH?%UkG#_&6@Hb0TVLYiX)FcI4>MOKr6_Gw%F2Cv_l!|XWSH7p zje-&b&eias^z*=$ueN~l3#N@uW5=fs96ZFzrUaTKS#b6074+=c9cgK!N&DF`GIh-V z0DAbaVV098(?tRP{s;;RWG_TrT`g;yR3b%akOwOAa`4jp0l08J16js6{J-|D1S*O< z&3}EL&>+}``xZq74}yuu;HWVwV9d3?XUJrtId^8>?9S}Y?(ELKec8;B#JH0fW6VTj zHpc5ElVjsW4kJn&M~Dy=BM2fOH*$1C)7@3wweR;;7wIrM8lvdzqu%3jRdrSU>-Ycu zzwh@Q)z;Wdy)Gw(h1n=MF^OX1;)FHNtkFRV_lpwwylzq%j5P1gU6dL&l`O^q>Z}bT z!DS+wO(eC}M_!Ma1W84Phz@f5)Z}&(`E+Iy4Y0Hx@>;5B-}VBg864Y$bExuDQc@Dl z%l#h9bI4`{kA~3zEyPL(Q1|!ulR;;oK36|;a8SeFzjy;U^b7yJw#DP|+yZaC?0EUy zhK7c#O_x-~#>P&$bw>8A_ia&mHL@|4N+MQIra6SA{sFem%$U@^DGRckaH)`orz z*$5p?MZb?MW)p?j!q}2V$3`|pL`1&%?z?-DQ{YxC@qPE+``*RQi?i%@``G?|C%;A* zbOdq{963-W02%yK@w%1pIVcMr4=e^`GtimLtW2r8rUvPnZ~VEmbXDLy#<{o6x^Skd zI>PC4@+8z+jI`wYOX%az4v;v|$JdT?p&1OQ!uavy>7$Q6W}1M?n(XXsw#>G$P+Gcl z3H9{!`hWAgXM+K)%E-w0p`*9=^|qE)=JhEl$$V{%O^p;66GKLWiQ*IE$rPp`XRC{< zYtNF}Y@+zFQ4}2;i(`&$+O%o$gN23VTQ+Y=fMtZ$9B}oM+8j;GmV8deZaqmNJTy=k zky0l~#35?j`rDm z_7(l0rlw}=U$f4kp`l~!5fOJMCnY~`wOYgG&YjC1GxS%yuR13un<`J9L=G`OBrK(Z zATkg@DFjhq>x>SYW5U8|{KN@_-V~q-2ECtbHUru1p%fZsp}l*`&!|-)-NE!tls5vfD0A(ojF zCuT4o?sGaQFF&v8t?fHkR8&-ajzpl`+}xrgM~=)yYc&LmaD5iDS-xJMNcJc@&6;@| zUo-O2d%B(ISVgI+sT3J8mf*TUc3Z#U6^;=k#V7c?dwNyizbq?zy=0DGLQ7}AO4Q^h zt4&Sreu1=lVjsn5QImTBMGrnQnMG=EmboxAc#T>lvT11h-X-K0%1G@u^V@tmI4=3< z(MKPZX`CSNDhmg-rlyuBbaiz#rKhJ;Rn-~(9jhMe+$y4V>o<%%povJIpP&EG?%lgz zy9AikQBhH|GbT=a)hBuNkKv0);@=$5c)8HDG0uR3?#9FftPPWxQCVt06?n3 zl8b6;Y#3zGD=^&vFhD6_sR0yNzsQKluezMhpVrmYeS9@E%5Jx(Oqn$42OhU)vE3e( z1Iu3D(7?+l0%BcV7r~V!kH=lMujpe?GhRiI@MF>&&Ok@b%FHCU;I7@gc}wc7S+gGX zy4`D=T3SLN?}2w><$(6w2@dS+qpYkfijIk9;Gl~?mTqf^l@*uc$B)zOIkOn#@WJ2^ zzw+v9nv9H$tmekX<8Vr`!PSMTk^Q~(ls;w&x!NQWB{gZa0)>Zr$z;&**!jFB>K|}0 z;0)+}(&ZzKUQcGLi%jtrdj6#uq$dYEjI4G9UJtT*^(uCl1-F;#>(3Kj7zzswc@ozQ zi;c{Y0}RWBS;-EWD9EyoL}UxI;U)K+xtErfR(|Z*u}5m^ z>&t^no)*lXzttxSh5Q;Qur_``vIJx{=$MvtcXg3hKyHTz8aXdz0EKc+kIThe9Z5`h z1ssAb&i?)%ov5tbc)g>Y$|Q-5jLc3?8(->lIOv{x@1YYXDr&2%&!)hNV~N%qj3oN} zyc!{A1LKpLnnGw*44}8Qw~@oyOCh15==4u+_W-rGwNhBDte7;tAtXp9GUz4Jsr_Uzdq}MoxM`0h4p2f0 zQDbdC3H?!|F?h%?sL33nr#f#9?R;kr>6vPvFQ=TeguWqnEnCJEq_5X87}11-jU=|n z$gzw87&g4h8b+wI^CGtf9&tcF{`h0h^*J0F2M-;7B0n#0_u=A0SpWxe3Xsc-mq0=r z#qtiIB4J4MA(ZT5O&B^Wz6J)|gr&5rvy&g7PNx&cL`JMD|MKM1JrHUyv(3xR-71J; zA!fI%X)20@hBaM0NCbP(j`sQI*YG(J+D3v894R;>p;imU#KcOWHrxNa|KXm;hzQ}Y z5#1jC;lm%bwlv*=W%q#x9-tjNcAyJC2WCJ|%x1`Wovebun!)1s^z>41Zx2&4MDh@j z!9)e%u>#`#GMKda`T0~%oIS`4g6Ji2t%2Cb0ghgjulFmtS&E4wv`wNwW{{1v2d<3yM-;(9Cre3*pJBCx{V^>yCE@t-FDNfB zpFaKc69z8I$Z$WnfAD<(*5T-7tBm_YU1-?@nR0Y%ab|f zcD{F0UoIvYiXCQ+CBKV4{~_**LO*4hF%KPdria!TTR%A#w$+6BZIL3W7?2r4$3I zMVPm@h|{G+K>ZY^u}q;0CJ=I0xqt==H1+=yiII{5kuaY;~Z$Vt)(_K0|p6 z7JkNqZ#aLRmoZEzyIC?(TIhEiGT&C=lb8=FR)wFU&^M)AjY|RakBzQ=U3i z$)5igUzD*50zFpA>_e^wCrhECzZ}hI$bYmP&_Q@m_y_G@Vr((yo#SUo;1>2evC>;P4O1hh3Sxs(2Ypxht|%2)<{;<;tN=QP zskz8nVoIYg z(eaAoPsc>XA~DEuptu+jLu|+&zHVD)X6D??$x~i$ZfZ=0cQ3d8)srB2DJyI0pmVCE zS;7ZE&IkaH;#cHKfO}4zI@P&#+xDE`SA1Bl*0DaHkDJP`xPQfekYA+3M~)yq@NW)> zqf5D|*|*=`ce?Vl1v)Xt7>=~bXyPzG#{K6%|0jCxxixZHD93yOX#Bt>2}~oPbij#} z{GfVBxAl^WGwakOseBB0+ykz+ATN&%%FtvbP|LnPCqI8kph6Y?!-J;e7b6D)gNm>#a($U<2wqun zK(2*Kw$`xrY@v1X3xRl<3Vaqa*f2=|TAm16Er(MPU_j;^98m;H5M9Lo*@F4y5-RXH z{0_ii(&3yq2YA10z*RLNJsmRB&OVpxG`c_?K79DYp!>Y)^w{asr~lp9F%hrz^z?)_ zH8+z^C#wta@{xma-+lM9l!z4v;68S&lpQ-*De%wmF_Cn!tBWGS!;cmpKD^|w`4v~1 zjbWiSpo@2#HhmgZRD4M@re{-Wc`0Sj$ma1z^$*4y+t+EIgNMnSmqRDWX5`r4VAdTT zjGS6av|!-^N{r*eqrhiD9rUuof#P0S;fMl#WE_~y7H-_0kdVmM`_ze31qVw?c3!$W0&X4* zXcz#*4Y2>|)29i6oxc7)PL}fdB~EdLG^qd@`>$TTTCU9k^!Y&&2=i@l$>_Pcw00#bti2`bciHDFb zJ_F###A7MZVrDB0Egloh>2PwnSijRj&ph)R`qi(VqNLBWE zOC1vx6}89ZaxERKwvmX(54qDoBPxFYXcz@KQ}JsHtyHZbq6x=3Hado{b4un^26TBv zITh{S$Cev)n;NZ(9(?dY9wo&=MeYkS2jL4qCT(hJ;>iu(i~taP0OXOwI>R{CoV!T@ zos*NZy0f!$69Ov-4t_>DwU+#%NR7=+R|V)RJW!sD@$vCV(b3V9I@{V*3l=VV)a`a9 z3=Fsv-0p!;0Ef$oSgV!?7!(5(2jGLn2k<#$#?GUjtu_KI1|y1cHG^Cq6OkzsS5^d4 zAwhpMYF>F@Rk>=!XbkGzfy8!svcWlZIGvp327WC01WHJVqaXeFNqYIEjbyY~sII0qP4 zVSNo&M!CQtAu*oj&6~%T85?9rtVURkp~|q~5CjG`&Ig{2U7k?>ZjX#RrlxBdFpzx(OY($ZbSd4N}Q%$;}M zDVG2TCN)+GfC=;hz5~86vB7C!JyEcV$*#~4<+z~^-q3SnzeS4{k=-57jodh0S#vVgtYNz z_7?4*cr_1V1oz>0X~R6sn>TN{D2n4IPo8{_R;^A)^h&K#je~XNE=nvtBE0TrpfkmB zI+=%JQlLBv-H)(D!wO*n0T^=lf84;nqWwwj?d^!J(*E5a4!rljAH4ADA2xlXDdV-i z@1;wZO1R$O;#>vbvXmNdxCfBe` zHo`CQzHrRz8|qn}LsAsij)M#GH-z71S5uxis-{0|+60gChE#oD>#@JtKTj7P9&X0c z{m?@X{p?UHe4KHq3GPU+}qHwa$A=oaLHTDJDE^lq8nfQoc=cTsXuvS-&jZ*%W# zk%-;#>Top zMff3l1=d@UI8<`v$h3}*j_cMY?Q%B)KnDXic)y{4SG0e{YGYr84-fr(j?|(YOOn+i zP_FT5sVv7T9b4shF3PeUQ;Y!OV3Fl6HHbfGsI{f_ANCd%z4%=p#weh_>j?hk@#^G+ zM4zNqaV{_v1Xwa;_X$4nmUc9B9^tK^pnxfdLNk=pf2}nK_*PJN*5In_%K>`uHUcdj z{9cg~lTc3qNe_V*S+?UXpi#@6Tv0#)f~TVBs2JgyHP3>`90if;8tQMzco!5D`2EO8`bNOyn>{lw=kQ(05#(A+$ec)HAQj&;@^+LS z9twqllo33se_50F0007mNklD=
H(>gnc) zAc6=;!a{ZVnUPg@28U*O!7{(k??;sSvYl2hWv%f6R|9C!4sJY2#1-+P=n2Si0I_U% zm9Rd(TP&9I@4Wl|oQoGPHeKuIHwx%$J)%T3XVz?~;X)%`Dn-{t?Kfc`F{_cwCvvit%`krDC0 zk=GJj6s+WxE1*@Z>QK(D-0o0%0?NU3hKM4^L~wZ%_B7gqktZ%k-mA)qeCS=F0XLq%3oHUJxepDO?$k#84*se z8P)lSbSecD0KB46^Ur~TSQG_7?LfvL9ALYBZ1>vVzla*FzLC83Q9zI6X#WkK3oit< zSS%qnn=NL}?Aec`r;T6P-qEgZX=z3NhZa-@&LH>(EV9XLB(2V{e#@3EKe-XNI|}F< zG3x)1&WZ57D2lp>h=_!=l(a|Q{^Q&CU8^9;aE56V(8C$E(PM7f5f}yZP5Wp@FKjp? zFbe45jN0fiH|+?F0{W(XG@}o_ylTr@s68>#zU!?En9H@pIF3?b_!r z{`4;|Z6^D?bLpx5X+C*ln&wTWr|IgMAMd~RC;$G1%Oq$S6Vvp<<>UXnaq(v_|Ga6C z$h5RC?Z5Q(Q%$=Pw2TR9y!ZZ@y@&4nQEx|Jl z*dHV^J#QX)>%RS$|K@F~1TAAi8uTuSOjj>dB7HJVV?r7q{qnu@idFeNTdVZ(!;#;1 z5o#@oNJ~Ry`)A&J_wm#FzxvOa)*tUae&R6F({$SU>8|#DC1|O{39I2}5z~~p*uJVk zOC_Qmirr|1`D>4@C7~L=a^%Z{c93AME5}Y+J66Oj4YrnkbHaVtYGt|gnfGX^#2NE0 zh?ad#TsfAxK6vKT;itzz%tA!aQi;3v3(>N#i4UI1T-LLPzx(s)^wlgx1TB@gd%qAZ z`nNr&ATL+OFlgM@rqcy8y5A)bC2HLBAg}dt`!OO|EteCy_;aJT-!0C%)?rva{ocX z<9MV&g1I!(#r1eXd$7sB>HJL!Cbz=jryDxt+f%m z)ZVQ@f;*f_JpA@om)(R#$zhD5XU~1_(0AeRZi_@(NT{UPYgG*r%ysqVIn%=qK!di$ z6)hL8-M8!$Ski6{5*A~12Otgm%zG@0x$Zc2c6&Xa*93FDbLp`|e=1u0iWU+UG1l_c zo}p=wV6LlYet76lcWVt=NN_LFd}ZZ#@1iW`;?AIYmpe%9&LYCO*Yehxr_3ZO~^{f6zigZ5q!dB$(@wx9&O2=cuO8{-YT#EhOC2s~N7c;8_>u~zTWLPBvo_AUwL(pZV!tQxfVc=S1nB~^kJ5}adp6U@c2SqbjdY?pWN z+@rp4^PS~q?Gs5H{rKd;(T`7j#y*j`o_nj3=b@LM7-Q67Iv@-i>jm9&`=&;fSE6YRGRR!acgJ;eH#9T3V># zJ{%FWkZ?~2VP|BUer7pyhRd{0rgD{NXJiXO%b4hAeb@Wh>r5ikI#1*}Xs3eiMwn}hy9uv~gxobarExzJ>PA?R~PH1Djn>QpfEe-UCofXF}wGz3D zS`)M+t&?r;;ox0Zbl#r1axReu30lU4W(M?!o!!UoZr)^CwTe+I4HC4B32A)k@|$ni zoU60fISKurjo3bO=J(P7QPfFf8nv<$wJ0~{c4;U*Z#cUy?PvroUhbNJcejY7t&Nz2 zm;UIr%Gr5LNTbKq7Ln!78_wF5pk+)*L-UBv+~q0~nVvVC^D9Bin2?6%5xqN*28m41 z8?Gglpk+)*L-UB8RD#u1TAAi8ee?z?|-z|>HQJ0WP&QQpM^4Fb`dQy zKm^^}u@~*&9w*cCmG*P7I$Jvyf|fDS`(rQqgG8p)=N9$L4#0YFA!r#B(y+MNi?||@ zX~nMgyU`93w2TR9sC-fCa}t?ueZK4;E1}l4vI|W@8uF7`FAWlz)?A{~TAyPoLCcts zhWcB*CwYUj8ofWZh@_(jLxY6(fm_CeG-Ps!YyM$8hzAWSAUSmbj&58LBhwjTgHSm`s~v*NMyQ3OeGjgV?r9g zzxS`PXRsYW-Zk*ZS8vvP2fGMGenw)ZwJ+(bf!Z;*xLwACmEY2_Muo3P_?qFCq)GJt z&^p*ONMt(J+R(86SO{PH+%hJlVNs&>TyZs%$aL%(LW6{_;cgid(op%Lq(LInZN9>D z6bbYDVi^< zyvek+a5?2(6SRzp9=ovvm`P-Mn({0Q8W-hVTE>Jl`pmFJByIP7+UdE@g?E_f;dzXLjo_En`9&)`RV7 z!v4NMBGbMOM)V{hZLLdT857d5NYwLrYX^x;$9f*)gM_cIZW$BO@Oi!Mcl+MJiKKmB z5~H~i+9!l%Oh`lPlOjbe&)a|VCeyOSJxlcm30lSkG%i{}Gl@*Qw%>+;MkDgpgY71l znvj66wuq!P$LOx&Xn#e^n2<*A!9BHuM5Z-g#cdI_g9I&OLK;1Gn+AzYoBDF=MH(b% z857db8mQP(J4j?&^Htp5kp>A`#)LGuTOyHZwL|ys#`~+ZjESy+{Z$fKuI8Ay8>M#i zIZ-VymNC(NrMZ2J$Z}Oy+}`TGS_oRkgfujdC{k1siA-x&ihE?e&liH0F(C~re>tZn zk!j6Wy5kq)g9I&OLK>Ra6)9>3iA-z0iW_@s2MJongfzHYB9UpSKVa>+tM5xl&@v{V zaa|>m$h5a3X4j=wjZnE^858i;7Lj!LFxHRmt46qg+%hJl(R*;CR*=ZF$5pI$l~6y2 zWlTt;$8OUgk!h*Nom9kbBWM{D(y*A)h}t5O_R$=>k4k9Vg=I`ggS#aXnN~YA$LNli z+ChSrG0`=!zsjGA6pOG`DXNNvj=k*In)Cb9?u0TE>Jl`iiqf zWVyZ$M)Xud>rz<8gfuiCDz;Qx5}A(mJjMqJUtiraCZu70(iuY=Q6w^5_e7P*{f@oK z$FCsrdub?Ej=ui~d+%kR<^7q?#qwMGYzGPEq8FOR>{P7@ zYnZzlw8JRvKjXeJe+{N~#4pA=v1pKBE=6VW)k4rh!ecB}XKTYk&_W`2vg=yWLL&Fq zXt|`U<@pRiB5#r0nuy;-sU)6$SmFB2u8|g&n(r$zf> zA)zPlajj?}!Fxb;43c0j8^P7PbE{OVRa!{sIlA=VLeN4YPq}*!im*R+V+SYkB=YQi zP0&IjZzLf~B-7qt#1k)b*^FvlkKLsADFd9=qKE_|EO?iLbx7i+D-vY0DR*wzFsB>Y{f-3zd| zs69x6xpH^5O<*iaBP9t47d5g1f0G}Pa^Mc<}Q3p_+Gsd@izQcM7|m4JNh+I--K8peG|kg zcCCDm#CqGza<@BW>OtOUwA}j49*Jq;Z8P5LS+_h1=HjefiCU|;4J$#5`KR9s zj2m0y{>ZZY{*~wQdr~8U7QgA_xu|`sT1hX)W8Q$O1pVXXI^q4HJ1pxlNDB$xjjI~8 zkZ`|^HS*RR3Eo?)8nlq$EwoC|LV|b7D#3jT_YZoK*|pZDr4o7OR5e(Zo};7Od=tCw z4_YdbXHHdvM4lAsL`VO^Mw~6R5!n7yEtQCW31eL=mX#+(ddHS;;%lvFsYLusC~FN8 Wc>-mlcJ#EZ>7-aHkx%+BT>c+yoNHA8 literal 0 HcmV?d00001 diff --git a/resources/profiles/Creality/creality_cr10v3_buildplate_texture.png b/resources/profiles/Creality/creality_cr10v3_buildplate_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..0098bd6fa275358c51d7d7da4dee6733ef656046 GIT binary patch literal 3298 zcmeHI`B&1562~o-+=y_`M6sk?x>s>2mo!MfxumG%mWE}S8@H>KiiR%(%`HQ35w0nj zxq|v6O>(W&G?TpL29{cM4U%$8OMUbwydU4Y_jAsiGc#xA%*^M^nYr%e>7oqQ27^E# zWxy4U1%YG;63JGOk$6O1#2FAsy3xzs7b7vZ{=q*C{O>TJ*1y4)Z0-Aatfvo%y?1+! zG^Bd%z;CaY$1*qVr3Pt;gbl-Oxp0;HzxGYZtgFph%Lg;37goQ^X=_!={&>LOX``qK zQ&7_Vg4tmgsCQ(ZzVh!E6HugvPVGpysrcQuIo^rM#v%2kgNw@Jt`)zGK6bkPM*kxC z%bUr#<8X5syZl;{M;%k){SMp(a4FpnH2hdKw2_eExxRhjkY5lDRtM8p4Es6d& z#?N#1_r+U{|Bu-ViXSCMMosqEY+AxCe~YkwBvQ6z1XG*4w%>cG&IZTamG*1(yL{PJ z@R~=Q;_)`x9!)N6J^apILFB3Ry>Jf^B0nvD9q+%gT8z4bf|l0UlVYkvGs*XCq#BH} zS8HbW`^q-`k#zrFpz}_{f{9P)s=%yD2UYy&VnwpffXNYCwyaD+kgSILQEK$9?SgZ9 z6<$#8DK`eQ&E@sl%h2w&!PZOQWqs!qS_%G0#t1{pLIrPkn0}Mr?-OC%D)(N26=B9& z$n6eB^tXOq)(tyKJnaI`gm^g|tpoB;A2SL(ry z)!uSpPJzqp-JaULFatx*1C5N27O1BjmTBygj{_E>_1H%1tO4+Ou5M=v!2~&?T*(gv z&eXEw>d^6JGOUHV^#ncXqT9lDq=)DL3|Jr6lvfUWW1cR|nTYJd4c+Z3!l((Zn}rOY zK=Xp6FlBa3g)8$sL>P&t;&T(Re40$FK>bn|Nv#~yX7WEQh?pqXFb4am86k@bR)4C42TCI9euRoUf02criq-Tf9o~ z^3lO4fQnR!uCwDKsjgEVjKUGU7{W&KuqPVmSMX~1pcaLc_sM^wR_F-(U;s2Z>|oio zsb^HPCyL7AxUuq{C6BnO; zX@_;9$d-;`gYuc()M+l)e}&ShmD%@gZ{p$b`)OkbcMoEy!9>?4u~NCnw60L#eyY)i zZ5H{Oc6q{nK^;Jj;HvrL_( z>-c*NcBZU0Ke01rd&Om2%4IbfKz4d<<79loqMh@K{-KOBer`1txaV zZ)^n;^fvoELHxKZFZXeZ_8tUaWN;NL!@-BC${}^Pj4Z8{S8(S9_*lhMV5YX2q&CUV z+d}@;2<07s19Xf@mn(txFlXI3MhnM$^fakv0vK;&%uqk2{8(CdXQ^URSd4DbmFv^C1S%A#Zws-_GkO&RRRmFT{pHLoVPCe3?-)iLOR> z8hO7Bf5V*jpdLF54SE>I#~X6sYl2>3M_>Aj74F3_`57x!Y!MyuBQD2pS$ zq>&Ljt+wVb1v53~OpW{cCaHU2AbosItvh$fb%@7WNeewY1y-b<&?iG^0Iz^{|KmiunB5aDs~O8B&hXL!~0IC3M%usvrDr|=(M@CwK=V#3zd8;eWgZHU_8 Date: Fri, 18 Jul 2025 01:50:54 +0200 Subject: [PATCH 06/13] Update Italian translation (#10142) --- localization/i18n/it/OrcaSlicer_it.po | 758 +++++++++++++------------- 1 file changed, 381 insertions(+), 377 deletions(-) diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 56ccdfbfe1..95daa25f5d 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -893,13 +893,13 @@ msgid "Style \"%1%\" can't be used and will be removed from a list." msgstr "Lo stile \"%1%\" non può essere usato e sarà rimosso dall'elenco." msgid "Unset italic" -msgstr "Rimovi corsivo" +msgstr "Rimuovi corsivo" msgid "Set italic" msgstr "Imposta corsivo" msgid "Unset bold" -msgstr "Rimuovi rassetto" +msgstr "Rimuovi grassetto" msgid "Set bold" msgstr "Imposta grassetto" @@ -1024,8 +1024,8 @@ msgstr "" #, boost-format msgid "" -"Can't load exactly same font (\"%1%\"). Application selected a similar " -"one (\"%2%\"). You have to specify font for enable edit text." +"Can't load exactly same font (\"%1%\"). Application selected a similar one " +"(\"%2%\"). You have to specify font for enable edit text." msgstr "" "Non è possibile caricare esattamente lo stesso tipo di carattere(\"%1%\"). " "L'applicazione ne ha selezionato uno simile(\"%2%\"). È necessario " @@ -1342,7 +1342,7 @@ msgid "" "Please confirm explosion ratio = 1, and please select at least one object." msgstr "" "Si prega di confermare il rapporto di esplosione = 1 e di selezionare almeno " -"un oggetto" +"un oggetto." msgid "Please select at least one object." msgstr "Si prega di selezionare almeno un oggetto." @@ -1627,8 +1627,8 @@ msgid "" "The version of Orca Slicer is too low and needs to be updated to the latest " "version before it can be used normally." msgstr "" -"La versione di OrcaSlicer è obsoleta. Devi aggiornarla all'ultima versione \n" -"prima di poter utilizzare normalmente il programma" +"La versione di OrcaSlicer è obsoleta. Devi aggiornarla all'ultima versione " +"prima di poter utilizzare normalmente il programma." msgid "Privacy Policy Update" msgstr "Aggiornamento dell'informativa sulla riservatezza" @@ -2341,7 +2341,7 @@ msgstr "" "una cella può essere copiata solo in una o più celle della stessa colonna" msgid "Copying multiple cells is not supported." -msgstr "copia di celle multiple non supportata" +msgstr "Copia di celle multiple non supportata." msgid "Outside" msgstr "Esterno" @@ -2850,7 +2850,7 @@ msgid "Canceled" msgstr "Annullato" msgid "Installed successfully" -msgstr "Installato con successo." +msgstr "Installato con successo" msgid "Installing" msgstr "Installazione" @@ -3099,7 +3099,7 @@ msgid "" "Configure which AMS slot should be used for a filament used in the print job." msgstr "" "Configura lo slot AMS da usare per un filamento utilizzato nell'attività di " -"stampa" +"stampa." msgid "Filament used in this print job" msgstr "Filamento utilizzato in questa stampa" @@ -3226,8 +3226,8 @@ msgid "" "AMS will continue to another spool with matching filament properties " "automatically when current filament runs out." msgstr "" -"L'AMS passerà automaticamente a un altro filamento con stesse proprietà " -"quando il filamento corrente si esaurisce" +"Quando il filamento corrente sarà esaurito, l'AMS passerà automaticamente a " +"un'altra bobina contenente un filamento con le stesse proprietà." msgid "Air Printing Detection" msgstr "Rilevamento della stampa ad aria" @@ -3694,8 +3694,8 @@ msgid "Bed Shape" msgstr "Forma Piano" msgid "" -"The recommended minimum temperature is less than 190°C or the " -"recommended maximum temperature is greater than 300°C.\n" +"The recommended minimum temperature is less than 190°C or the recommended " +"maximum temperature is greater than 300°C.\n" msgstr "" "La temperatura minima consigliata è inferiore a 190°C o la temperatura " "massima consigliata è superiore a 300°C.\n" @@ -5571,8 +5571,8 @@ msgstr "Strato: %d/%d" msgid "" "Please heat the nozzle to above 170°C before loading or unloading filament." msgstr "" -"Si prega di riscaldare l'ugello a oltre 170°C prima di caricare o " -"scaricare il filamento." +"Si prega di riscaldare l'ugello a oltre 170°C prima di caricare o scaricare " +"il filamento." msgid "Still unload" msgstr "Scarica ancora" @@ -5581,7 +5581,7 @@ msgid "Still load" msgstr "Carica ancora" msgid "Please select an AMS slot before calibration." -msgstr "Seleziona uno slot AMS prima di calibrare" +msgstr "Seleziona uno slot AMS prima di calibrare." msgid "" "Cannot read filament info: the filament is loaded to the tool head,please " @@ -5671,14 +5671,13 @@ msgstr "Caricamento non riuscito\n" msgid "obtaining instance_id failed\n" msgstr "ottenimento di instance_id non riuscito\n" -#, fuzzy msgid "" "Your comment result cannot be uploaded due to the following reasons:\n" "\n" " error code: " msgstr "" -"Il risultato del tuo commento non può essere caricato per alcuni motivi. " -"Come segue:\n" +"Il risultato del tuo commento non può essere caricato per i seguenti " +"motivi:\n" "\n" " Codice di errore: " @@ -5892,7 +5891,7 @@ msgid "Warning:" msgstr "Avviso:" msgid "Exported successfully" -msgstr "Esportazione riuscita." +msgstr "Esportazione riuscita" msgid "Model file downloaded." msgstr "File del modello scaricato." @@ -6157,8 +6156,8 @@ msgstr "Vuoi salvare le modifiche a \"%1%\"?" #, c-format, boost-format msgid "" -"Successfully unmounted. The device %s (%s) can now be safely removed from the " -"computer." +"Successfully unmounted. The device %s (%s) can now be safely removed from " +"the computer." msgstr "" "Smontato con successo. Il dispositivo %s (%s) può ora essere rimosso dal " "computer in sicurezza." @@ -6897,14 +6896,19 @@ msgstr "" msgid "Swap pan and rotate mouse buttons" msgstr "Scambia i pulsanti del mouse per ruotare e spostare" -msgid "If enabled, swaps the left and right mouse buttons pan and rotate functions." -msgstr "Se abilitato, inverte le funzioni di panoramica e rotazione dei pulsanti sinistro e destro del mouse." +msgid "" +"If enabled, swaps the left and right mouse buttons pan and rotate functions." +msgstr "" +"Se abilitato, inverte le funzioni di panoramica e rotazione dei pulsanti " +"sinistro e destro del mouse." msgid "Reverse mouse zoom" msgstr "Inverti zoom del mouse" msgid "If enabled, reverses the direction of zoom with mouse wheel." -msgstr "Se abilitato, inverte la direzione dell'ingrandimento con la rotellina del mouse." +msgstr "" +"Se abilitato, inverte la direzione dell'ingrandimento con la rotellina del " +"mouse." msgid "Show splash screen" msgstr "Mostra schermata iniziale" @@ -7303,7 +7307,7 @@ msgid "Name is unavailable." msgstr "Nome non disponibile." msgid "Overwriting a system profile is not allowed." -msgstr "Non è consentito sovrascrivere un profilo di sistema" +msgstr "Non è consentito sovrascrivere un profilo di sistema." #, boost-format msgid "Preset \"%1%\" already exists." @@ -7316,7 +7320,8 @@ msgstr "" "Il profilo \"%1%\" esiste già ma è incompatibile con la stampante corrente." msgid "Please note that saving will overwrite this preset." -msgstr "Tieni presente che il salvataggio sovrascriverà Il profilo corrente" +msgstr "" +"Si prega di notare che il salvataggio sovrascriverà Il profilo corrente." msgid "The name cannot be the same as a preset alias name." msgstr "Il nome non può essere uguale a quello di un profilo." @@ -7741,11 +7746,11 @@ msgid "" "successes and failures of the vast number of prints by our users. We are " "training %s to be smarter by feeding them the real-world data. If you are " "willing, this service will access information from your error logs and usage " -"logs, which may include information described in Privacy Policy. We will " -"not collect any Personal Data by which an individual can be identified " -"directly or indirectly, including without limitation names, addresses, " -"payment information, or phone numbers. By enabling this service, you agree " -"to these terms and the statement about Privacy Policy." +"logs, which may include information described in Privacy Policy. We will not " +"collect any Personal Data by which an individual can be identified directly " +"or indirectly, including without limitation names, addresses, payment " +"information, or phone numbers. By enabling this service, you agree to these " +"terms and the statement about Privacy Policy." msgstr "" "Nella comunità della stampa 3D, impariamo dai successi e dagli insuccessi " "degli altri per adattare i nostri parametri e impostazioni di elaborazione. " @@ -7878,8 +7883,8 @@ msgstr "Ignora" msgid "" "Experimental feature: Retracting and cutting off the filament at a greater " "distance during filament changes to minimize flush. Although it can notably " -"reduce flush, it may also elevate the risk of nozzle clogs or other " -"printing complications." +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications." msgstr "" "Funzionalità sperimentale: ritrazione e taglio del filamento a una distanza " "maggiore durante i cambi di filamento per ridurre al minimo lo spurgo. " @@ -8146,9 +8151,9 @@ msgid "" "Bed temperature when the Cool Plate Supertack is installed. A value of 0 " "means the filament does not support printing on the Cool Plate SuperTack." msgstr "" -"Indica la temperatura del piano quando è installato il Piatto SuperTack a " -"bassa temperatura. Un valore pari a 0 indica che il filamento non è " -"compatibile con la stampa sul Piatto SuperTack a bassa temperatura" +"Indica la temperatura del piano di stampa quando è installato il Piatto " +"SuperTack a bassa temperatura. Un valore pari a 0 indica che il filamento " +"non è compatibile con la stampa sul Piatto SuperTack a bassa temperatura." msgid "Cool Plate" msgstr "Piatto a bassa temperatura" @@ -8159,7 +8164,7 @@ msgid "" msgstr "" "Indica la temperatura del piano di stampa quando è installato il Piatto a " "bassa temperatura. Un valore pari a 0 indica che il filamento non è " -"compatibile con la stampa sul Piatto a bassa temperatura" +"compatibile con la stampa sul Piatto a bassa temperatura." msgid "Textured Cool plate" msgstr "Piatto ruvido a bassa temperatura" @@ -8170,7 +8175,7 @@ msgid "" msgstr "" "Indica la temperatura del piano di stampa quando è installato il Piatto " "ruvido a bassa temperatura. Un valore pari a 0 indica che il filamento non è " -"compatibile con la stampa sul Piatto ruvido a bassa temperatura" +"compatibile con la stampa sul Piatto ruvido a bassa temperatura." msgid "Engineering Plate" msgstr "Piatto ingegneristico" @@ -8181,7 +8186,7 @@ msgid "" msgstr "" "Indica la temperatura del piano di stampa quando è installato il Piatto " "ingegneristico. Un valore pari a 0 indica che il filamento non è compatibile " -"con la stampa sul Piatto ingegneristico" +"con la stampa sul Piatto ingegneristico." msgid "Smooth PEI Plate / High Temp Plate" msgstr "Piatto PEI liscio / Piatto ad alta temperatura" @@ -8191,10 +8196,10 @@ msgid "" "installed. A value of 0 means the filament does not support printing on the " "Smooth PEI Plate/High Temp Plate." msgstr "" -"Indica la temperatura del piano di stampa quando è installata il Piatto PEI " -"liscio/Piatto adalta temperatura. Un valore pari a 0 indica che il filamento " -"non è compatibile con la stampa sul Piatto PEI liscio/Piatto ad alta " -"temperatura" +"Indica la temperatura del piano di stampa quando è installato il Piatto PEI " +"liscio/Piatto ad alta temperatura. Un valore pari a 0 indica che il " +"filamento non è compatibile con la stampa sul Piatto PEI liscio/Piatto ad " +"alta temperatura." msgid "Textured PEI Plate" msgstr "Piatto PEI ruvido" @@ -8205,7 +8210,7 @@ msgid "" msgstr "" "Indica la temperatura del piano di stampa quando è installato il Piatto PEI " "ruvido. Un valore pari a 0 indica che il filamento non è compatibile con la " -"stampa sul Piatto PEI ruvido" +"stampa sul Piatto PEI ruvido." msgid "Volumetric speed limitation" msgstr "Limitazione velocità volumetrica" @@ -8681,9 +8686,10 @@ msgid "" "The configuration package is incompatible with the current application.\n" "%s will update the configuration package to allow the application to start." msgstr "" -"Pacchetto di configurazione non compatibile con l'applicazione corrente.\n" +"Il pacchetto di configurazione non è compatibile con l'applicazione " +"corrente.\n" "%s aggiornerà il pacchetto di configurazione per consentire l'avvio " -"dell'applicazione" +"dell'applicazione." #, c-format, boost-format msgid "Exit %s" @@ -8957,9 +8963,9 @@ msgid "Shift+R" msgstr "Maiusc+R" msgid "" -"Auto orients selected objects or all objects. If there are selected " -"objects, it just orients the selected ones. Otherwise, it will orient " -"all objects in the current project." +"Auto orients selected objects or all objects. If there are selected objects, " +"it just orients the selected ones. Otherwise, it will orient all objects in " +"the current project." msgstr "" "Questo orienta automaticamente gli oggetti selezionati o tutti gli oggetti. " "Se ci sono oggetti selezionati, orienta solo quelli selezionati. Altrimenti, " @@ -9687,8 +9693,8 @@ msgid "" "during printing." msgstr "" "Non è possibile stampare insieme più filamenti con grandi differenze di " -"temperatura, altrimenti, l'estrusore e l'ugello potrebbero bloccarsi o " -"danneggiarsi durante la stampa" +"temperatura, altrimenti l'estrusore e l'ugello potrebbero bloccarsi o " +"danneggiarsi durante la stampa." msgid "No extrusions under current settings." msgstr "Nessuna estrusione con le impostazioni attuali." @@ -9790,19 +9796,19 @@ msgid "" "The prime tower requires \"support gap\" to be multiple of layer height." msgstr "" "La torre di spurgo richiede che lo \"spazio supporto\" sia un multiplo " -"dell'altezza dello strato" +"dell'altezza dello strato." msgid "The prime tower requires that all objects have the same layer heights." msgstr "" "La torre di spurgo richiede che tutti gli oggetti abbiano gli strati della " -"stessa altezza" +"stessa altezza." msgid "" "The prime tower requires that all objects are printed over the same number " "of raft layers." msgstr "" "La torre di spurgo richiede che tutti gli oggetti siano stampati su un " -"zattera (o base di stampa) con lo stesso numero di strati" +"zattera (o base di stampa) con lo stesso numero di strati." msgid "" "The prime tower is only supported for multiple objects if they are printed " @@ -9823,7 +9829,7 @@ msgid "" "layer height." msgstr "" "La torre di spurgo è supportata solo se tutti gli oggetti hanno la stessa " -"Altezza strato adattiva" +"Altezza strato adattiva." msgid "" "One or more object were assigned an extruder that the printer does not have." @@ -9882,7 +9888,7 @@ msgstr "" "supporti." msgid "Layer height cannot exceed nozzle diameter." -msgstr "L'altezza dello strato non può superare il diametro dell'ugello" +msgstr "L'altezza dello strato non può superare il diametro dell'ugello." msgid "" "Relative extruder addressing requires resetting the extruder position at " @@ -10015,7 +10021,7 @@ msgid "" "effect." msgstr "" "Questo parametro restringe il primo strato sul piano di stampa per " -"compensare l'effetto zampa d'elefante" +"compensare l'effetto zampa d'elefante." msgid "Elephant foot compensation layers" msgstr "Strato di compensazione zampa d'elefante" @@ -10039,7 +10045,7 @@ msgid "" "more printing time." msgstr "" "Indica l'altezza di ogni strato. Un'altezza minore implica una maggiore " -"precisione a fronte di un tempo di stampa maggiore" +"precisione a fronte di un tempo di stampa maggiore." msgid "Printable height" msgstr "Altezza di stampa" @@ -10047,7 +10053,7 @@ msgstr "Altezza di stampa" msgid "Maximum printable height which is limited by mechanism of printer." msgstr "" "Indica l'altezza massima di stampa, limitata dalle caratteristiche della " -"stampante" +"stampante." msgid "Preferred orientation" msgstr "Orientamento preferito" @@ -10055,7 +10061,7 @@ msgstr "Orientamento preferito" msgid "Automatically orient stls on the Z-axis upon initial import." msgstr "" "Orienta automaticamente gli STL sull'asse Z al momento dell'importazione " -"iniziale" +"iniziale." msgid "Printer preset names" msgstr "Nomi dei profili della stampante" @@ -10066,7 +10072,7 @@ msgstr "Usa un host di stampa di terze parti" msgid "Allow controlling BambuLab's printer through 3rd party print hosts." msgstr "" "Consente il controllo della stampante di BambuLab attraverso host di stampa " -"di terze parti" +"di terze parti." msgid "Hostname, IP or URL" msgstr "Nome servizio, IP o URL" @@ -10092,7 +10098,7 @@ msgid "" "Specify the URL of your device user interface if it's not same as print_host." msgstr "" "Specificare l'URL dell'interfaccia utente del dispositivo se non corrisponde " -"a print_host" +"a print_host." msgid "API Key / Password" msgstr "Chiave API / Password" @@ -10105,7 +10111,7 @@ msgstr "" "deve contenere la chiave API o la password richiesta per l'autenticazione." msgid "Name of the printer." -msgstr "Nome della stampante" +msgstr "Nome della stampante." msgid "HTTPS CA File" msgstr "File CA HTTPS" @@ -10139,7 +10145,7 @@ msgstr "" "autofirmati fallisce, dovresti abilitare questa opzione." msgid "Names of presets related to the physical printer." -msgstr "Nomi dei profili relativi alla stampante" +msgstr "Nomi dei profili relativi alla stampante." msgid "Authorization Type" msgstr "Tipo di autorizzazione" @@ -10157,7 +10163,7 @@ msgid "" "Detour to avoid traveling across walls, which may cause blobs on the surface." msgstr "" "Devia ed evita di attraversare le pareti per impedire la formazione di grumi " -"sulla superficie" +"sulla superficie." msgid "Avoid crossing walls - Max detour length" msgstr "Evitare di attraversare le pareti - Lunghezza massima della deviazione" @@ -10172,7 +10178,7 @@ msgstr "" "stampante non eseguirà alcuna deviazione se la distanza di deviazione è " "maggiore di questo valore. La lunghezza della deviazione può essere " "specificata come valore assoluto o come percentuale (ad esempio 50%) di uno " -"spostamento. Un valore pari a 0 lo disabiliterà" +"spostamento. Un valore pari a 0 lo disabiliterà." msgid "mm or %" msgstr "mm o %" @@ -10234,15 +10240,15 @@ msgid "" "not support printing on the Cool Plate SuperTack." msgstr "" "Indica la temperatura del piatto per il primo strato. Un valore pari a 0 " -"indica che ilfilamento non supporta la stampa su Piatto SuperTack a bassa " -"temperatura" +"indica che il filamento non supporta la stampa su Piatto SuperTack a bassa " +"temperatura." msgid "" "Bed temperature of the initial layer. A value of 0 means the filament does " "not support printing on the Cool Plate." msgstr "" "Indica la temperatura del piatto per il primo strato. Un valore pari a 0 " -"indica che il filamento non supporta la stampa su Piatto a bassa temperatura" +"indica che il filamento non supporta la stampa su Piatto a bassa temperatura." msgid "" "Bed temperature of the initial layer. A value of 0 means the filament does " @@ -10250,31 +10256,31 @@ msgid "" msgstr "" "Indica la temperatura del piatto per il primo strato. Un valore pari a 0 " "indica che il filamento non supporta la stampa su Piatto ruvido a bassa " -"temperatura" +"temperatura." msgid "" "Bed temperature of the initial layer. A value of 0 means the filament does " "not support printing on the Engineering Plate." msgstr "" "Indica la temperatura del piatto per il primo strato. Un valore pari a 0 " -"indica che il filamento non supporta la stampa su Piatto ingegneristico" +"indica che il filamento non supporta la stampa su Piatto ingegneristico." msgid "" "Bed temperature of the initial layer. A value of 0 means the filament does " "not support printing on the High Temp Plate." msgstr "" "Indica la temperatura del piatto per il primo strato. Un valore pari a 0 " -"indica che il filamento non supporta la stampa su Piatto ad alta temperatura" +"indica che il filamento non supporta la stampa su Piatto ad alta temperatura." msgid "" "Bed temperature of the initial layer. A value of 0 means the filament does " "not support printing on the Textured PEI Plate." msgstr "" "Indica la temperatura del piatto per il primo strato. Un valore pari a 0 " -"indica che il filamento non supporta la stampa su Piatto PEI ruvido" +"indica che il filamento non supporta la stampa su Piatto PEI ruvido." msgid "Bed types supported by the printer." -msgstr "Tipi di piatti supportati dalla stampante" +msgstr "Tipi di piatti supportati dalla stampante." msgid "Smooth Cool Plate" msgstr "Piatto liscio a bassa temperatura" @@ -10297,7 +10303,7 @@ msgstr "Sequenza di filamento degli altri strati" msgid "This G-code is inserted at every layer change before the Z lift." msgstr "" "Questo G-code viene inserito ad ogni nuovo strato prima del sollevamento " -"sull'asse Z" +"sull'asse Z." msgid "Bottom shell layers" msgstr "Strati guscio inferiore" @@ -10310,7 +10316,7 @@ msgstr "" "Indica il numero di strati solidi del guscio inferiore, incluso lo strato " "della superficie inferiore. Se lo spessore calcolato con questo valore è più " "sottile dello spessore del guscio inferiore, il numero degli strati del " -"guscio inferiore sarà aumentato" +"guscio inferiore sarà aumentato." msgid "Bottom shell thickness" msgstr "Spessore guscio inferiore" @@ -10327,7 +10333,7 @@ msgstr "" "aumentato durante l'elaborazione. In questo modo si evita di avere un guscio " "troppo sottile quando l'altezza dello strato è fine. Un valore pari a 0 " "indica che questa impostazione è disabilitata e che lo spessore del guscio " -"inferiore è determinato dal numero di strati del guscio inferiore" +"inferiore è determinato dal numero di strati del guscio inferiore." msgid "Apply gap fill" msgstr "Applica riempimento spazi vuoti" @@ -10387,7 +10393,7 @@ msgstr "" "modelli in cui viene generato un riempimento eccessivo degli spazi tra i " "perimetri, un'alternativa sarebbe quella di utilizzare il generatore di " "pareti Arachne e controllare la finitura delle superfici superiore e " -"inferiore con questa opzione" +"inferiore con questa opzione." msgid "Everywhere" msgstr "Ovunque" @@ -10620,8 +10626,8 @@ msgid "" "Use only one wall on flat top surfaces, to give more space to the top infill " "pattern." msgstr "" -"Utilizza solo una parete su superfici superiori piane, per dare più spazio " -"al motivo di riempimento superiore" +"Utilizza una sola parete su superfici superiori piane, per dare più spazio " +"al motivo di riempimento superiore." msgid "One wall threshold" msgstr "Soglia singola parete" @@ -10654,8 +10660,8 @@ msgid "" "Use only one wall on first layer, to give more space to the bottom infill " "pattern." msgstr "" -"Utilizza un solo una parete sul primo strato, per dare più spazio al motivo " -"di riempimento inferiore" +"Utilizza una sola parete sul primo strato, per dare più spazio al motivo di " +"riempimento inferiore." msgid "Extra perimeters on overhangs" msgstr "Pareti aggiuntive su sporgenze" @@ -10731,10 +10737,10 @@ msgid "" msgstr "" "Questa opzione consente di creare ponti per i fori svasati, consentendone la " "stampa senza supporto. Le modalità disponibili sono:\n" -"1. Nessuno: non viene creato alcun ponte.\n" +"1. Nessuno: non viene creato alcun ponte\n" "2. Parzialmente collegato: solo una parte dell'area non supportata verrà " -"collegata.\n" -"3. Strato sacrificale: viene creato uno strato-ponte sacrificale completo." +"collegata\n" +"3. Strato sacrificale: viene creato uno strato-ponte sacrificale completo" msgid "Partially bridged" msgstr "Parzialmente collegato" @@ -10766,7 +10772,7 @@ msgid "Classic mode" msgstr "Modalità classica" msgid "Enable this option to use classic mode." -msgstr "Abilita questa opzione per utilizzare la modalità classica" +msgstr "Abilita questa opzione per utilizzare la modalità classica." msgid "Slow down for overhang" msgstr "Rallenta in caso di sporgenze" @@ -10774,7 +10780,7 @@ msgstr "Rallenta in caso di sporgenze" msgid "Enable this option to slow printing down for different overhang degree." msgstr "" "Abilita questa opzione per rallentare la stampa in base ai diversi gradi di " -"sporgenza" +"sporgenza." msgid "Slow down for curled perimeters" msgstr "Rallenta per pareti incurvate" @@ -10802,8 +10808,8 @@ msgstr "" "Abilita questa opzione per rallentare la stampa nelle aree in cui potrebbero " "potenzialmente formarsi deformazioni delle pareti verso l'alto. Ad esempio, " "la velocità sarà ridotta ulteriormente durante la stampa di sporgenze su " -"angoli stretti, come la prua dello scafo della Benchy, riducendo la deformazione " -"che può accumularsi su più strati.\n" +"angoli stretti, come la prua dello scafo della Benchy, riducendo la " +"deformazione che può accumularsi su più strati.\n" "\n" "In genere si consiglia di attivare questa opzione a meno che il " "raffreddamento della stampante non sia sufficientemente potente o la " @@ -10855,7 +10861,7 @@ msgid "Brim width" msgstr "Larghezza tesa" msgid "Distance from model to the outermost brim line." -msgstr "Questa è la distanza tra il modello e la linea della tesa più esterno" +msgstr "Questa è la distanza tra il modello e la linea più esterna della tesa." msgid "Brim type" msgstr "Tipo di tesa" @@ -10879,7 +10885,7 @@ msgid "" "easily." msgstr "" "Crea uno spazio tra la linea più interna della tesa e l'oggetto per rendere " -"più facile la rimozione della tesa" +"più facile la rimozione della tesa." msgid "Brim ears" msgstr "Tesa ad orecchio" @@ -10910,7 +10916,7 @@ msgid "" msgstr "" "La geometria verrà decimata prima di rilevare gli spigoli vivi. Questo " "parametro indica la lunghezza minima dello scostamento per la decimazione.\n" -"0 per disattivare" +"0 per disattivare." msgid "Compatible machine" msgstr "Macchina compatibile" @@ -10948,7 +10954,7 @@ msgstr "" msgid "Print sequence, layer by layer or object by object." msgstr "" "Determina la sequenza di stampa, che consente di stampare strato per strato " -"o oggetto per oggetto" +"o oggetto per oggetto." msgid "By layer" msgstr "Per strato" @@ -10960,7 +10966,7 @@ msgid "Intra-layer order" msgstr "Ordine intra-strato" msgid "Print order within a single layer." -msgstr "Ordine di stampa all'interno di un singolo strato" +msgstr "Ordine di stampa all'interno di un singolo strato." msgid "As object list" msgstr "Come elenco di oggetti" @@ -10975,10 +10981,10 @@ msgid "" "quality for needle and small details." msgstr "" "Abilita questa opzione per rallentare la velocità di stampa in modo che la " -"durata d stampa finale dello strato non sia inferiore alla soglia di durata " +"durata di stampa finale dello strato non sia inferiore alla soglia di durata " "di stampa dello strato in \"Soglia velocità massima della ventola\", in modo " "che lo strato possa essere raffreddato più a lungo.\n" -"Ciò può migliorare la qualità per i piccoli dettagli" +"Ciò può migliorare la qualità per i piccoli dettagli." msgid "Normal printing" msgstr "Stampa normale" @@ -10988,21 +10994,21 @@ msgid "" "layer." msgstr "" "Accelerazione predefinita sia per la stampa normale che per gli spostamenti, " -"eccetto lo strato iniziale" +"eccetto lo strato iniziale." msgid "Default filament profile" msgstr "Profilo filamento predefinito" msgid "Default filament profile when switching to this machine profile." msgstr "" -"Profilo filamento predefinito quando si passa a questo profilo macchina" +"Profilo filamento predefinito quando si passa a questo profilo macchina." msgid "Default process profile" msgstr "Profilo di processo predefinito" msgid "Default process profile when switching to this machine profile." msgstr "" -"Profilo di processo predefinito quando si passa a questo profilo macchina" +"Profilo di processo predefinito quando si passa a questo profilo macchina." msgid "Activate air filtration" msgstr "Attivare filtrazione dell'aria" @@ -11024,7 +11030,7 @@ msgstr "" "filamento." msgid "Speed of exhaust fan after printing completes." -msgstr "Velocità ventola di estrazione al termine della stampa" +msgstr "Velocità ventola di estrazione al termine della stampa." msgid "No cooling for the first" msgstr "Nessun raffreddamento per primi strati" @@ -11034,7 +11040,7 @@ msgid "" "improve build plate adhesion." msgstr "" "Spegne tutte le ventole di raffreddamento per i primi strati. Può servire a " -"migliorare l'adesione del piano di stampa" +"migliorare l'adesione del piano di stampa." msgid "Don't support bridges" msgstr "Non supportare i ponti" @@ -11044,7 +11050,7 @@ msgid "" "can usually be printed directly without support if not very long." msgstr "" "Evita di creare i supporti lungo tutta l'area del ponte. I ponti possono " -"essere solitamente stampati senza supporti nel caso non siano troppo lunghi" +"essere solitamente stampati senza supporti nel caso non siano troppo lunghi." msgid "Thick external bridges" msgstr "Ponti esterni spessi" @@ -11192,14 +11198,14 @@ msgstr "" "pochi supporti. Le opzioni sottostanti controllano la sensibilità del " "filtraggio, ovvero controllano dove vengono creati i ponti interni.\n" "1. Filtra: abilita questa opzione. Questo è il comportamento predefinito e " -"funziona bene nella maggior parte dei casi.\n" +"funziona bene nella maggior parte dei casi\n" "2. Filtraggio limitato: crea ponti interni su superfici fortemente inclinate " "evitando ponti non necessari. Funziona bene per la maggior parte dei modelli " -"complessi.\n" +"complessi\n" "3. Nessun filtraggio: crea ponti interni su ogni potenziale sporgenza " "interna. Questa opzione è utile per modelli di superficie superiore " "fortemente inclinati; tuttavia, nella maggior parte dei casi, crea troppi " -"ponti non necessari." +"ponti non necessari" msgid "Filter" msgstr "Filtra" @@ -11226,20 +11232,20 @@ msgid "End G-code" msgstr "G-code finale" msgid "End G-code when finishing the entire print." -msgstr "G-code finale quando si termina la stampa" +msgstr "G-code finale quando si termina la stampa." msgid "Between Object G-code" msgstr "G-code tra oggetti" msgid "" -"Insert G-code between objects. This parameter will only come into effect when " -"you print your models object by object." +"Insert G-code between objects. This parameter will only come into effect " +"when you print your models object by object." msgstr "" "Inserisce il G-code tra gli oggetti. Questo parametro avrà effetto solo " "quando si stampano i modelli 'per oggetto'." msgid "End G-code when finishing the printing of this filament." -msgstr "G-code finale quando si termina la stampa di questo filamento" +msgstr "G-code finale quando si termina la stampa di questo filamento." msgid "Ensure vertical shell thickness" msgstr "Garantisci spessore verticale del guscio" @@ -11276,7 +11282,7 @@ msgid "Top surface pattern" msgstr "Motivo superfice superiore" msgid "Line pattern of top surface infill." -msgstr "Motivo per il riempimento della superficie superiore" +msgstr "Motivo per il riempimento della superficie superiore." msgid "Concentric" msgstr "Concentrico" @@ -11308,7 +11314,7 @@ msgstr "Motivo superficie inferiore" msgid "Line pattern of bottom surface infill, not bridge infill." msgstr "" "Motivo per il riempimento della superficie inferiore, escluso il riempimento " -"dei ponti" +"dei ponti." msgid "Internal solid infill pattern" msgstr "Motivo riempimento solido interno" @@ -11356,8 +11362,8 @@ msgstr "Soglia perimetri piccoli" msgid "" "This sets the threshold for small perimeter length. Default threshold is 0mm." msgstr "" -"In questo modo viene impostata la soglia per la lunghezza dei perimetri " -"piccoli. La soglia predefinita è 0 mm" +"Imposta la soglia per la lunghezza dei perimetri piccoli. La soglia " +"predefinita è 0 mm." msgid "Walls printing order" msgstr "Ordine stampa pareti" @@ -11579,7 +11585,7 @@ msgid "Extruder Color" msgstr "Colore estrusore" msgid "Only used as a visual help on UI." -msgstr "Utilizzato solo come aiuto visivo per l'interfaccia utente" +msgstr "Utilizzato solo come aiuto visivo per l'interfaccia utente." msgid "Extruder offset" msgstr "Compensazione estrusore" @@ -11723,12 +11729,12 @@ msgstr "" "\n" "Come calibrare:\n" "1. Esegui il test dell'anticipo di pressione per almeno 3 velocità per ogni " -"valore di accelerazione. Si consiglia di eseguire il test come minimo per la " +"valore di accelerazione. Si consiglia di eseguire il test almeno per la " "velocità delle pareti esterne, la velocità delle pareti interne e la " "velocità di stampa più rapida nel tuo profilo (solitamente è il riempimento " -"sparso o solido), quindi eseguire i test con questevelocità per ogni valore " -"di accelerazione, dal piu lento al più veloce. Non superare l'accelerazione " -"massima consigliata fornita dal firmware Klipper.\n" +"sparso o solido), quindi eseguire i test con queste velocità per ogni valore " +"di accelerazione, dal più lento al più veloce. Non superare l'accelerazione " +"massima consigliata fornita dal firmware Klipper\n" "2. Prendi nota del valore AP ottimale per ogni portata volumetrica e " "accelerazione. Puoi trovare il numero relativo alla portata volumetrica dal " "menu a discesa dello schema di colori e spostando il cursore orizzontale " @@ -11737,10 +11743,9 @@ msgstr "" "all'aumentare della portata volumetrica. In caso contrario, verifica che " "l'estrusore funzioni correttamente. Più lentamente e con meno accelerazione " "stampi, più ampio è l'intervallo di valori AP accettabili. Se non è visibile " -"alcuna differenza, usa il valore AP dal test più veloce.\n" +"alcuna differenza, usa il valore AP dal test più veloce\n" "3. Inserisci le triplette dei valori di anticipo di pressione, portata e " -"accelerazione nella casella di testo qui e salva il tuo profilo di " -"filamento." +"accelerazione nella casella di testo qui e salva il tuo profilo di filamento" msgid "Enable adaptive pressure advance for overhangs (beta)" msgstr "Abilita anticipo di pressione adattiva per sporgenze (beta)" @@ -11763,10 +11768,10 @@ msgstr "Anticipo di pressione per ponti" msgid "" "Pressure advance value for bridges. Set to 0 to disable.\n" "\n" -"A lower PA value when printing bridges helps reduce the appearance of " -"slight under extrusion immediately after bridges. This is caused by the " -"pressure drop in the nozzle when printing in the air and a lower PA helps " -"counteract this." +"A lower PA value when printing bridges helps reduce the appearance of slight " +"under extrusion immediately after bridges. This is caused by the pressure " +"drop in the nozzle when printing in the air and a lower PA helps counteract " +"this." msgstr "" "Valore di anticipo di pressione per i ponti. Impostare su 0 per " "disabilitare.\n" @@ -11793,7 +11798,7 @@ msgid "" msgstr "" "Se si attiva questa impostazione, la ventola di raffreddamento non si " "arresterà mai del tutto, ma funzionerà almeno alla velocità minima per " -"ridurre la frequenza di avvio e arresto" +"ridurre la frequenza di avvio e arresto." msgid "Don't slow down outer walls" msgstr "Non rallentare su pareti esterne" @@ -11829,7 +11834,7 @@ msgstr "" "La ventola di raffreddamento verrà attivata per gli strati in cui il tempo " "stimato è inferiore a questo valore. La velocità della ventola varierà tra " "la velocità minima e massima in base alla durata stimata di stampa dello " -"strato" +"strato." msgid "Default color" msgstr "Colore predefinito" @@ -11862,7 +11867,7 @@ msgstr "" "Questa impostazione indica il volume del filamento che può essere fuso ed " "estruso al secondo. Nel caso la velocità di stampa impostata sia troppo " "alta, questa viene limitata in base alla velocità volumetrica massima. " -"Questo valore non può essere zero" +"Questo valore non può essere zero." msgid "mm³/s" msgstr "mm³/s" @@ -11877,7 +11882,7 @@ msgid "" msgstr "" "Durata di caricamento del nuovo filamento. Di solito è applicabile per " "macchine multimateriale a singolo estrusore. Per le macchine con cambio di " -"testina o multitestina, di solito è 0. Solo a fini statistici" +"testina o multitestina, di solito è 0. Solo a fini statistici." msgid "Filament unload time" msgstr "Durata scaricamento filamento" @@ -11889,7 +11894,7 @@ msgid "" msgstr "" "Durata di scaricamento del vecchio filamento. Di solito è applicabile per " "macchine multimateriale a singolo estrusore. Per le macchine con cambio di " -"testina o multitestina, di solito è 0. Solo a fini statistici" +"testina o multitestina, di solito è 0. Solo a fini statistici." msgid "Tool change time" msgstr "Durata cambio testina" @@ -11901,7 +11906,7 @@ msgid "" msgstr "" "Tempo impiegato per cambiare testina. Di solito è applicabile per le " "macchine con cambio di testina o multitestina. Per le macchine " -"multimateriale a estrusore singolo, è in genere 0. Solo a fini statistici" +"multimateriale a estrusore singolo, è in genere 0. Solo a fini statistici." msgid "" "Filament diameter is used to calculate extrusion in G-code, so it is " @@ -12110,13 +12115,13 @@ msgid "Density" msgstr "Densità" msgid "Filament density. For statistics only." -msgstr "Densità filamento, solo a fini statistici" +msgstr "Densità filamento, solo a fini statistici." msgid "g/cm³" msgstr "g/cm³" msgid "The material type of filament." -msgstr "Tipo di materiale del filamento" +msgstr "Tipo di materiale del filamento." msgid "Soluble material" msgstr "Materiale solubile" @@ -12125,7 +12130,7 @@ msgid "" "Soluble material is commonly used to print supports and support interfaces." msgstr "" "Il materiale solubile viene comunemente utilizzato per stampare supporti e " -"interfacce di supporto" +"interfacce di supporto." msgid "Support material" msgstr "Materiale di supporto" @@ -12134,7 +12139,7 @@ msgid "" "Support material is commonly used to print supports and support interfaces." msgstr "" "Il materiale di supporto viene comunemente utilizzato per stampare supporti " -"e interfacce di supporto" +"e interfacce di supporto." msgid "Softening temperature" msgstr "Temperatura di ammorbidimento" @@ -12153,7 +12158,7 @@ msgid "Price" msgstr "Prezzo" msgid "Filament price. For statistics only." -msgstr "Prezzo del filamento, solo a fini statistici" +msgstr "Prezzo del filamento, solo a fini statistici." msgid "money/kg" msgstr "soldi/kg" @@ -12162,7 +12167,7 @@ msgid "Vendor" msgstr "Produttore" msgid "Vendor of filament. For show only." -msgstr "Produttore del filamento. Solo per dettagli" +msgstr "Produttore del filamento. Solo per dettagli." msgid "(Undefined)" msgstr "(Indefinito)" @@ -12175,7 +12180,7 @@ msgid "" "of line." msgstr "" "Angolo per il motivo del riempimento sparso, che controlla l'inizio o la " -"direzione principale delle linee" +"direzione principale delle linee." msgid "Solid infill direction" msgstr "Direzione riempimento solido" @@ -12185,7 +12190,7 @@ msgid "" "of line." msgstr "" "Angolo per il motivo del riempimento solido, che controlla l'inizio o la " -"direzione principale delle linee" +"direzione principale delle linee." msgid "Rotate solid infill direction" msgstr "Ruota direzione riempimento solido" @@ -12203,13 +12208,13 @@ msgid "" msgstr "" "Densità del riempimento sparso interno. 100% trasforma il riempimento sparso " "in riempimento solido e verrà utilizzato il motivo del riempimento solido " -"interno" +"interno." msgid "Sparse infill pattern" msgstr "Motivo riempimento sparso" msgid "Line pattern for internal sparse infill." -msgstr "Motivo delle linee per il riempimento sparso interno" +msgstr "Motivo delle linee per il riempimento sparso interno." msgid "Grid" msgstr "Griglia" @@ -12332,25 +12337,25 @@ msgid "0 (Simple connect)" msgstr "0 (Connessione semplice)" msgid "Acceleration of outer walls." -msgstr "Accelerazione delle pareti esterne" +msgstr "Accelerazione delle pareti esterne." msgid "Acceleration of inner walls." -msgstr "Accelerazione delle pareti interne" +msgstr "Accelerazione delle pareti interne." msgid "Acceleration of travel moves." -msgstr "Accelerazione per gli spostamenti" +msgstr "Accelerazione per gli spostamenti." msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality." msgstr "" "Accelerazione del riempimento della superficie superiore. L'utilizzo di un " -"valore inferiore può migliorare la qualità della superficie superiore" +"valore inferiore può migliorare la qualità della superficie superiore." msgid "Acceleration of outer wall. Using a lower value can improve quality." msgstr "" "Accelerazione della parete esterna: l'utilizzo di un valore inferiore può " -"migliorare la qualità" +"migliorare la qualità." msgid "" "Acceleration of bridges. If the value is expressed as a percentage (e.g. " @@ -12383,13 +12388,14 @@ msgid "" "adhesion." msgstr "" "Accelerazione di stampa per il primo strato. Utilizzando un valore " -"inferiore, è possibile migliorare l'adesione sul piano di stampa" +"inferiore, è possibile migliorare l'adesione sul piano di stampa." msgid "Enable accel_to_decel" msgstr "Abilita accel_to_decel" msgid "Klipper's max_accel_to_decel will be adjusted automatically." -msgstr "Il valore max_accel_to_decel di Klipper verrà regolato automaticamente" +msgstr "" +"Il valore max_accel_to_decel di Klipper verrà regolato automaticamente." msgid "accel_to_decel" msgstr "accel_to_decel" @@ -12399,32 +12405,32 @@ msgid "" "Klipper's max_accel_to_decel will be adjusted to this %% of acceleration." msgstr "" "Il valore max_accel_to_decel di Klipper verrà regolato su questa %% di " -"accelerazione" +"accelerazione." msgid "Jerk of outer walls." -msgstr "Scatto pareti esterne" +msgstr "Scatto pareti esterne." msgid "Jerk of inner walls." -msgstr "Scatto pareti interne" +msgstr "Scatto pareti interne." msgid "Jerk for top surface." -msgstr "Scatto per superficie superiore" +msgstr "Scatto per superficie superiore." msgid "Jerk for infill." -msgstr "Scatto per riempimento" +msgstr "Scatto per riempimento." msgid "Jerk for initial layer." -msgstr "Scatto per strato iniziale" +msgstr "Scatto per strato iniziale." msgid "Jerk for travel." -msgstr "Scatto per spostamento" +msgstr "Scatto per spostamento." msgid "" "Line width of initial layer. If expressed as a %, it will be computed over " "the nozzle diameter." msgstr "" -"Larghezza della linea del primo strato. Se espresso come una %, verrà calcolato " -"sul diametro dell'ugello." +"Larghezza della linea del primo strato. Se espresso come una %, verrà " +"calcolato sul diametro dell'ugello." msgid "Initial layer height" msgstr "Altezza primo strato" @@ -12434,24 +12440,25 @@ msgid "" "can improve build plate adhesion." msgstr "" "Altezza del primo strato. L'aumento dell'altezza del primo strato può " -"migliorare l'adesione al piano di stampa" +"migliorare l'adesione al piano di stampa." msgid "Speed of initial layer except the solid infill part." msgstr "" "Indica la velocità per il primo strato, tranne che per le sezioni di " -"riempimento solido" +"riempimento solido." msgid "Initial layer infill" msgstr "Riempimento primo strato" msgid "Speed of solid infill part of initial layer." -msgstr "Indica la velocità per le parti di riempimento solido del primo strato" +msgstr "" +"Indica la velocità per le parti di riempimento solido del primo strato." msgid "Initial layer travel speed" msgstr "Velocità spostamento primo strato" msgid "Travel speed of initial layer." -msgstr "Velocità di spostamento del primo strato" +msgstr "Velocità di spostamento del primo strato." msgid "Number of slow layers" msgstr "Numero di strati lenti" @@ -12469,7 +12476,7 @@ msgstr "Temperatura ugello primo strato" msgid "Nozzle temperature for printing initial layer when using this filament." msgstr "" -"Temperatura dell'ugello per la stampa del primo strato con questo filamento" +"Temperatura dell'ugello per la stampa del primo strato con questo filamento." msgid "Full fan speed at layer" msgstr "Velocità massima della ventola su strato" @@ -12533,10 +12540,9 @@ msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position." msgstr "" -"Questa impostazione fa vibrare casualmente la testina durante la stampa di " -"pareti, in modo che la superficie abbia un aspetto ruvido. Con questa " -"impostazione è possibile controllare le zone in cui si vuole avere una " -"superficie ruvida e irregolare" +"Fa vibrare casualmente la testina durante la stampa di pareti, in modo che " +"la superficie abbia un aspetto ruvido. Con questa impostazione è possibile " +"controllare le zone in cui si vuole avere una superficie ruvida e irregolare." msgid "Contour" msgstr "Contorno" @@ -12564,13 +12570,13 @@ msgid "" "The average distance between the random points introduced on each line " "segment." msgstr "" -"Distanza media tra i punti casuali introdotti su ogni segmento di linea" +"Distanza media tra i punti casuali introdotti su ogni segmento di linea." msgid "Apply fuzzy skin to first layer" msgstr "Applica la superficie ruvida sul primo strato" msgid "Whether to apply fuzzy skin on the first layer." -msgstr "Se applicare la superficie ruvida sul primo strato" +msgstr "Se applicare la superficie ruvida sul primo strato." msgid "Fuzzy skin noise type" msgstr "Tipo di rumore superficie ruvida" @@ -12661,7 +12667,7 @@ msgid "" msgstr "" "Indica la velocità per il riempimento degli spazi vuoti. Gli spazi vuoti " "hanno solitamente linee di larghezza irregolare e devono essere stampate più " -"lentamente" +"lentamente." msgid "Precise Z height" msgstr "Altezza Z precisa" @@ -12714,8 +12720,8 @@ msgid "" "Enable this to enable the camera on printer to check the quality of first " "layer." msgstr "" -"Abilita questa opzione per consentire alla fotocamera della stampante di " -"verificare la qualità del primo strato" +"Abilita questa opzione per consentire alla telecamera della stampante di " +"verificare la qualità del primo strato." msgid "Nozzle type" msgstr "Tipo di ugello" @@ -12724,8 +12730,8 @@ msgid "" "The metallic material of nozzle. This determines the abrasive resistance of " "nozzle, and what kind of filament can be printed." msgstr "" -"Il materiale metallico del ugello. Determina la resistenza all'abrasione " -"dell'ugello e il tipo di filamento che può essere stampato" +"Materiale metallico dell'ugello. Determina la resistenza all'abrasione " +"dell'ugello e il tipo di filamento che può essere stampato." msgid "Undefine" msgstr "Indefinito" @@ -12756,7 +12762,7 @@ msgid "Printer structure" msgstr "Struttura della stampante" msgid "The physical arrangement and components of a printing device." -msgstr "La disposizione fisica e i componenti di un dispositivo di stampa" +msgstr "Disposizione fisica e i componenti di un dispositivo di stampa." msgid "CoreXY" msgstr "CoreXY" @@ -12792,8 +12798,8 @@ msgid "" "unsupported).\n" "It won't move fan commands from custom G-code (they act as a sort of " "'barrier').\n" -"It won't move fan commands into the start G-code if the 'only custom start " -"G-code' is activated.\n" +"It won't move fan commands into the start G-code if the 'only custom start G-" +"code' is activated.\n" "Use 0 to deactivate." msgstr "" "Avvia la ventola con questo numero di secondi di anticipo rispetto " @@ -12835,7 +12841,7 @@ msgid "Time cost" msgstr "Costo orario" msgid "The printer cost per hour." -msgstr "Il costo orario della stampante" +msgstr "Costo orario della stampante." msgid "money/h" msgstr "soldi/h" @@ -12876,13 +12882,13 @@ msgstr "Stampante modificata per granuli" msgid "Enable this option if your printer uses pellets instead of filaments." msgstr "" "Abilita questa opzione se la tua stampante utilizza materiale a granuli " -"invece di filamenti" +"invece di filamenti." msgid "Support multi bed types" msgstr "Supporto tipi di piatti multipli" msgid "Enable this option if you want to use multiple bed types." -msgstr "Abilita questa opzione se si desidera utilizzare più tipi di piatto" +msgstr "Abilita questa opzione se si desidera utilizzare più tipi di piatto." msgid "Label objects" msgstr "Etichetta oggetti" @@ -12965,8 +12971,8 @@ msgid "" "Line width of internal sparse infill. If expressed as a %, it will be " "computed over the nozzle diameter." msgstr "" -"Larghezza della linea del riempimento sparso interno. Se espresso come una %, " -"verrà calcolato sul diametro dell'ugello." +"Larghezza della linea del riempimento sparso interno. Se espresso come una " +"%, verrà calcolato sul diametro dell'ugello." msgid "Infill/Wall overlap" msgstr "Sovrapposizione riempimento/parete" @@ -13000,16 +13006,16 @@ msgstr "" "minimo la comparsa di fori nei punti in cui il riempimento superiore/" "inferiore incontra le pareti. Un valore del 25-30% è un buon punto di " "partenza, riducendo al minimo la comparsa di fori. Il valore percentuale è " -"relativo alla larghezza della linea del riempimento sparso" +"relativo alla larghezza della linea del riempimento sparso." msgid "Speed of internal sparse infill." -msgstr "Velocità del riempimento sparso interno" +msgstr "Velocità del riempimento sparso interno." msgid "Inherits profile" msgstr "Eredita profilo" msgid "Name of parent profile." -msgstr "Nome del profilo padre" +msgstr "Nome del profilo padre." msgid "Interface shells" msgstr "Pareti interfaccia" @@ -13021,7 +13027,7 @@ msgid "" msgstr "" "Forza la generazione di perimetri solidi tra volumi o materiali adiacenti. " "Utile per stampe multiestrusore con materiali traslucidi o supporti con " -"materiali solubili" +"materiali solubili." msgid "Maximum width of a segmented region" msgstr "Larghezza massima regione segmentata" @@ -13128,7 +13134,7 @@ msgid "Ironing Pattern" msgstr "Motivo stiratura" msgid "The pattern that will be used when ironing." -msgstr "Motivo che verrà utilizzata durante la stiratura" +msgstr "Motivo che verrà utilizzata durante la stiratura." msgid "Ironing flow" msgstr "Flusso stiratura" @@ -13139,13 +13145,13 @@ msgid "" msgstr "" "Indica la quantità di materiale da estrudere durante la stiratura. È " "relativo al flusso dell'altezza normale degli strati. Un valore troppo alto " -"provoca una sovraestrusione sulla superficie" +"può provocare una sovraestrusione sulla superficie." msgid "Ironing line spacing" msgstr "Spaziatura linee di stiratura" msgid "The distance between the lines of ironing." -msgstr "Indica la distanza tra le linee utilizzate per la stiratura" +msgstr "Indica la distanza tra le linee utilizzate per la stiratura." msgid "Ironing inset" msgstr "Distanza stiratura dai bordi" @@ -13155,7 +13161,7 @@ msgid "" "nozzle diameter." msgstr "" "Distanza da mantenere dai bordi. Un valore pari a 0 imposta questo valore a " -"metà del diametro dell'ugello" +"metà del diametro dell'ugello." msgid "Ironing speed" msgstr "Velocità stiratura" @@ -13186,7 +13192,7 @@ msgid "" "acceleration to print." msgstr "" "Indica se la macchina supporta la modalità silenziosa, ovvero utilizza " -"un'accelerazione inferiore per stampare" +"un'accelerazione inferiore per stampare." msgid "Emit limits to G-code" msgstr "Emetti limiti al G-code" @@ -13210,13 +13216,13 @@ msgstr "" "utenti possono inserire il G-code di pausa nel visualizzatore G-code." msgid "This G-code will be used as a custom code." -msgstr "Questo G-code verrà utilizzato come codice personalizzato" +msgstr "Questo G-code verrà utilizzato come codice personalizzato." msgid "Small area flow compensation (beta)" msgstr "Compensazione del flusso su piccola area (beta)" msgid "Enable flow compensation for small infill areas." -msgstr "Abilita la compensazione del flusso per piccole aree di riempimento" +msgstr "Abilita la compensazione del flusso per piccole aree di riempimento." msgid "Flow Compensation Model" msgstr "Modello di compensazione del flusso" @@ -13334,15 +13340,15 @@ msgstr "Accelerazione massima per spostamenti" msgid "Maximum acceleration for travel (M204 T), it only applies to Marlin 2." msgstr "" "Accelerazione massima per spostamenti (M204 T), si applica solo al formato " -"Marlin 2" +"Marlin 2." msgid "" "Part cooling fan speed may be increased when auto cooling is enabled. This " "is the maximum speed for the part cooling fan." msgstr "" -"La velocità della ventola di raffreddamento può essere aumentata quando è " -"abilitato il raffreddamento automatico. Questa è la limitazione massima " -"della velocità della ventola di raffreddamento" +"La velocità della ventola di raffreddamento potrebbe aumentare quando è " +"abilitato il raffreddamento automatico. Questa è la velocità massima della " +"ventola di raffreddamento." msgid "Max" msgstr "Massimo" @@ -13353,7 +13359,7 @@ msgid "" msgstr "" "L'altezza massima degli strati stampabile per l'estrusore. Viene utilizzata " "per limitare l'altezza massima degli strati quando è abilitato Altezza " -"strato adattiva" +"strato adattiva." msgid "Extrusion rate smoothing" msgstr "Livellamento velocità di estrusione" @@ -13459,7 +13465,7 @@ msgstr "" "visibili all'utente." msgid "Minimum speed for part cooling fan." -msgstr "Velocità minima ventola di raffreddamento" +msgstr "Velocità minima ventola di raffreddamento." msgid "" "Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed " @@ -13483,7 +13489,7 @@ msgid "" msgstr "" "L'altezza minima degli strati stampabile per l'estrusore. Viene utilizzata " "per limitare l'altezza minima degli strati quando è abilitato Altezza strato " -"adattiva" +"adattiva." msgid "Min print speed" msgstr "Velocità minima di stampa" @@ -13524,7 +13530,7 @@ msgid "Nozzle volume" msgstr "Volume ugello" msgid "Volume of nozzle between the cutter and the end of nozzle." -msgstr "Volume dell'ugello tra l'area di taglio ed l'estremità dell'ugello" +msgstr "Volume dell'ugello tra l'area di taglio ed l'estremità dell'ugello." msgid "Cooling tube position" msgstr "Posizione tubo di raffreddamento" @@ -13600,7 +13606,7 @@ msgstr "" "riempimento. Ciò significa che il trasudo del materiale non è visibile. " "Questo può ridurre i tempi di retrazione per i modelli complessi e far " "risparmiare tempo di stampa, ma rende più lento l'elaborazione e la " -"generazione del G-code" +"generazione del G-code." msgid "" "This option will drop the temperature of the inactive extruders to prevent " @@ -13613,7 +13619,8 @@ msgid "Filename format" msgstr "Formato nome file" msgid "Users can define the project file name when exporting." -msgstr "Gli utenti possono decidere i nomi dei file progetto nell'esportazione" +msgstr "" +"Gli utenti possono decidere i nomi dei file progetto nell'esportazione." msgid "Make overhangs printable" msgstr "Rendi sporgenze stampabili" @@ -13672,10 +13679,10 @@ msgstr "" "calcolato sul diametro dell'ugello." msgid "Speed of inner wall." -msgstr "Velocità per pareti interne" +msgstr "Velocità per pareti interne." msgid "Number of walls of every layer." -msgstr "Numero di pareti per ogni strato" +msgstr "Numero di pareti per ogni strato." msgid "Alternate extra wall" msgstr "Parete aggiuntiva alternativa" @@ -13735,19 +13742,19 @@ msgstr "Distanza Z di contatto zattera" msgid "Z gap between object and raft. Ignored for soluble interface." msgstr "" "Indica lo spazio Z tra oggetto e zattera. Viene ignorato per le interfacce " -"di supporto solubili" +"di supporto solubili." msgid "Raft expansion" msgstr "Espansione della zattera" msgid "Expand all raft layers in XY plane." -msgstr "Espande tutti gli strati della zattera nel piano XY" +msgstr "Espande tutti gli strati della zattera nel piano XY." msgid "Initial layer density" msgstr "Densità primo strato" msgid "Density of the first raft or support layer." -msgstr "Densità del primo strato della zattera o del supporto" +msgstr "Densità del primo strato della zattera o del supporto." msgid "Initial layer expansion" msgstr "Espansione primo strato" @@ -13755,7 +13762,7 @@ msgstr "Espansione primo strato" msgid "Expand the first raft or support layer to improve bed plate adhesion." msgstr "" "Espande il primo strato della zattera o del supporto per migliorare " -"l'adesione al piatto" +"l'adesione al piatto." msgid "Raft layers" msgstr "Strati zattera" @@ -13765,7 +13772,7 @@ msgid "" "avoid warping when printing ABS." msgstr "" "L'oggetto verrà sollevato per questo numero di strati di supporto. " -"Utilizzare questa funzione per evitare deformazioni durante la stampa di ABS" +"Utilizzare questa funzione per evitare deformazioni durante la stampa di ABS." msgid "" "The G-code path is generated after simplifying the contour of models to " @@ -13785,7 +13792,7 @@ msgid "" "threshold." msgstr "" "L'attivazione della retrazione avviene solo quando la distanza percorsa è " -"superiore a questa soglia" +"superiore a questa soglia." msgid "Retract amount before wipe" msgstr "Quantità di retrazione prima di spurgo" @@ -13793,14 +13800,14 @@ msgstr "Quantità di retrazione prima di spurgo" msgid "" "The length of fast retraction before wipe, relative to retraction length." msgstr "" -"Indica la lunghezza della retrazione veloce prima di uno spurgo, rispetto alla " -"lunghezza di retrazione." +"Indica la lunghezza della retrazione veloce prima di uno spurgo, rispetto " +"alla lunghezza di retrazione." msgid "Retract when change layer" msgstr "Ritrai al cambio di strato" msgid "Force a retraction when changes layer." -msgstr "Forza una retrazione quando si passa ad un nuovo strato" +msgstr "Forza una retrazione quando si passa ad un nuovo strato." msgid "Retract on top layer" msgstr "Ritrai su strato superiore" @@ -13811,7 +13818,7 @@ msgid "" msgstr "" "Forza una retrazione sullo strato superiore. La disattivazione di questa " "opzione potrebbe impedire l'intasamento dell'ugello su modelli molto lenti " -"con piccoli movimenti, come la curva di Hilbert" +"con piccoli movimenti, come la curva di Hilbert." msgid "Retraction Length" msgstr "Lunghezza retrazione" @@ -13821,8 +13828,8 @@ msgid "" "travel. Set zero to disable retraction" msgstr "" "Indica la quantità di filamento nell'estrusore che viene ritirata per " -"evitare la colatura del materiale durante lunghi spostamenti. Impostalo " -"su 0 per disattivare la retrazione" +"evitare la colatura del materiale durante lunghi spostamenti. Impostalo su 0 " +"per disattivare la retrazione" msgid "Long retraction when cut (beta)" msgstr "Retrazione lunga durante il taglio (beta)" @@ -13846,7 +13853,7 @@ msgid "" "change." msgstr "" "Funzionalità sperimentale: Lunghezza di retrazione prima del taglio durante " -"il cambio del filamento" +"il cambio del filamento." msgid "Z-hop height" msgstr "Altezza sollevamento Z" @@ -13859,7 +13866,7 @@ msgstr "" "Ogni volta che si verifica una retrazione, l'ugello viene sollevato " "leggermente per creare spazio tra ugello e stampa. Ciò impedisce all'ugello " "di colpire la stampa negli spostamenti. L'uso di linee a spirale per il " -"sollevamento sull'asse Z può evitare gli sfilacciamenti sulla stampa" +"sollevamento sull'asse Z può evitare gli sfilacciamenti sulla stampa." msgid "Z-hop lower boundary" msgstr "Limite inferiore sollevamento Z" @@ -13965,7 +13972,7 @@ msgid "Retraction Speed" msgstr "Velocità di retrazione" msgid "Speed of retractions." -msgstr "Indica la velocità di retrazione" +msgstr "Indica la velocità di retrazione." msgid "De-retraction Speed" msgstr "Velocità di de-retrazione" @@ -13975,7 +13982,7 @@ msgid "" "retraction." msgstr "" "Velocità di ricarica del filamento nell'estrusore dopo una retrazione. " -"Impostando 0, la velocità sarà la stessa della retrazione" +"Impostando 0, la velocità sarà la stessa della retrazione." msgid "Use firmware retraction" msgstr "Usa retrazione firmware" @@ -14004,7 +14011,7 @@ msgid "Seam position" msgstr "Posizione cucitura" msgid "The start position to print each part of outer wall." -msgstr "Indica la posizione di partenza per ogni parte della parete esterna" +msgstr "Indica la posizione di partenza per ogni parte della parete esterna." msgid "Nearest" msgstr "Più vicino" @@ -14100,13 +14107,13 @@ msgstr "Velocità cucitura a sciarpa" msgid "" "This option sets the printing speed for scarf joints. It is recommended to " -"print scarf joints at a slow speed (less than 100 mm/s). It's also " -"advisable to enable 'Extrusion rate smoothing' if the set speed varies " -"significantly from the speed of the outer or inner walls. If the speed " -"specified here is higher than the speed of the outer or inner walls, the " -"printer will default to the slower of the two speeds. When specified as a " -"percentage (e.g., 80%), the speed is calculated based on the respective " -"outer or inner wall speed. The default value is set to 100%." +"print scarf joints at a slow speed (less than 100 mm/s). It's also advisable " +"to enable 'Extrusion rate smoothing' if the set speed varies significantly " +"from the speed of the outer or inner walls. If the speed specified here is " +"higher than the speed of the outer or inner walls, the printer will default " +"to the slower of the two speeds. When specified as a percentage (e.g., 80%), " +"the speed is calculated based on the respective outer or inner wall speed. " +"The default value is set to 100%." msgstr "" "Questa opzione imposta la velocità di stampa per le cuciture a sciarpa. È " "consigliabile stampare le cuciture a a sciarpa a una velocità bassa " @@ -14172,9 +14179,10 @@ msgid "Role base wipe speed" msgstr "Velocità di spurgo basata su ruolo" msgid "" -"The wipe speed is determined by the speed of the current extrusion role. e.g. " -"if a wipe action is executed immediately following an outer wall extrusion, " -"the speed of the outer wall extrusion will be utilized for the wipe action." +"The wipe speed is determined by the speed of the current extrusion role. e." +"g. if a wipe action is executed immediately following an outer wall " +"extrusion, the speed of the outer wall extrusion will be utilized for the " +"wipe action." msgstr "" "La velocità di spurgo è determinata dalla velocità del ruolo di estrusione " "corrente, ad esempio: se un'azione di spurgo viene eseguita immediatamente " @@ -14227,9 +14235,9 @@ msgid "" "this parameter is 80%." msgstr "" "La velocità di spurgo è determinata dall'impostazione della velocità " -"specificata in questa configurazione. Se il valore è espresso in percentuale " -"(ad es. 80%), verrà calcolato in base all'impostazione della 'Velocità di " -"spostamento' di cui sopra. Il valore predefinito per questo parametro è 80%" +"specificata in questa opzione. Se il valore è espresso in percentuale (ad " +"es. 80%), verrà calcolato in base all'impostazione della 'Velocità di " +"spostamento' di cui sopra. Il valore predefinito per questo parametro è 80%." msgid "Skirt distance" msgstr "Distanza gonna" @@ -14251,7 +14259,7 @@ msgid "Skirt height" msgstr "Altezza gonna" msgid "How many layers of skirt. Usually only one layer." -msgstr "Numero di strati della gonna. Di solito solo uno" +msgstr "Numero di strati della gonna. Di solito solo uno." msgid "Single loop draft shield" msgstr "Perimetro singolo per scudo protettivo" @@ -14315,8 +14323,7 @@ msgstr "Perimetri gonna" msgid "Number of loops for the skirt. Zero means disabling skirt." msgstr "" -"Questo è il numero di perimetri per la gonna. 0 indica che la gonna è " -"disabilitata" +"Numero di perimetri per la gonna. 0 indica che la gonna è disabilitata." msgid "Skirt speed" msgstr "Velocità gonna" @@ -14364,7 +14371,7 @@ msgid "" "internal solid infill." msgstr "" "L'area del riempimento sparso che è inferiore al valore di soglia, viene " -"sostituita da un riempimento solido interno" +"sostituita da un riempimento solido interno." msgid "Solid infill" msgstr "Riempimento solido" @@ -14376,13 +14383,13 @@ msgid "" "Line width of internal solid infill. If expressed as a %, it will be " "computed over the nozzle diameter." msgstr "" -"Larghezza della linea del riempimento solido interno. Se espresso come una %, " -"verrà calcolato sul diametro dell'ugello." +"Larghezza della linea del riempimento solido interno. Se espresso come una " +"%, verrà calcolato sul diametro dell'ugello." msgid "Speed of internal solid infill, not the top and bottom surface." msgstr "" "Indica la velocità del riempimento solido interno, esclusa la superficie " -"superiore o inferiore" +"superiore o inferiore." msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " @@ -14391,7 +14398,7 @@ msgid "" msgstr "" "Consente la stampa a spirale, che attenua i movimenti Z del contorno esterno " "e trasforma un modello solido in una stampa a parete singola con strati " -"inferiori solidi. Il modello finale generato non presenta alcuna cucitura" +"inferiori solidi. Il modello finale generato non presenta alcuna cucitura." msgid "Smooth Spiral" msgstr "Spirale liscia" @@ -14400,8 +14407,9 @@ msgid "" "Smooth Spiral smooths out X and Y moves as well, resulting in no visible " "seam at all, even in the XY directions on walls that are not vertical." msgstr "" -"Spirale liscia leviga anche i movimenti X e Y, senza alcuna cucitura " -"visibile, anche nelle direzioni XY su pareti che non sono verticali" +"Spirale Liscia attenua i movimenti X e Y, con il risultato che non sarà " +"visibile alcuna cucitura, nemmeno nelle direzioni XY su pareti che non sono " +"verticali." msgid "Max XY Smoothing" msgstr "Levigatura XY massima" @@ -14413,7 +14421,7 @@ msgid "" msgstr "" "Distanza massima di spostamento tra i punti in XY nel tentativo di ottenere " "una spirale uniforme. Se espressa come una %, verrà calcolata sul diametro " -"dell'ugello" +"dell'ugello." msgid "Spiral starting flow ratio" msgstr "Flusso iniziale spirale" @@ -14473,8 +14481,8 @@ msgstr "Variazione di temperatura" #. TRN PrintSettings : "Ooze prevention" > "Temperature variation" msgid "" "Temperature difference to be applied when an extruder is not active. The " -"value is not used when 'idle_temperature' in filament settings is set to " -"non-zero value." +"value is not used when 'idle_temperature' in filament settings is set to non-" +"zero value." msgstr "" "Differenza di temperatura da applicare quando un estrusore non è attivo. Il " "valore non viene utilizzato quando 'idle_temperature' nelle impostazioni del " @@ -14499,8 +14507,8 @@ msgid "Preheat steps" msgstr "Fasi preriscaldamento" msgid "" -"Insert multiple preheat commands (e.g. M104.1). Only useful for Prusa XL. For " -"other printers, please set it to 1." +"Insert multiple preheat commands (e.g. M104.1). Only useful for Prusa XL. " +"For other printers, please set it to 1." msgstr "" "Inserisci più comandi di preriscaldamento (ad esempio M104.1). Utile solo " "per Prusa XL. Per altre stampanti, impostalo su 1." @@ -14509,16 +14517,16 @@ msgid "Start G-code" msgstr "G-code iniziale" msgid "Start G-code when starting the entire print." -msgstr "G-code aggiunto all'avvio di una stampa" +msgstr "G-code aggiunto all'avvio di una stampa." msgid "Start G-code when starting the printing of this filament." -msgstr "G-code aggiunto quando la stampante utilizza questo filamento" +msgstr "G-code aggiunto quando la stampante utilizza questo filamento." msgid "Single Extruder Multi Material" msgstr "Estrusore singolo multimateriale" msgid "Use single nozzle to print multi filament." -msgstr "Usa un ugello singolo per stampare più filamenti" +msgstr "Usa un ugello singolo per stampare più filamenti." msgid "Manual Filament Change" msgstr "Cambio manuale del filamento" @@ -14540,10 +14548,10 @@ msgid "Purge in prime tower" msgstr "Usa torre di spurgo" msgid "Purge remaining filament into prime tower." -msgstr "Spurga il filamento rimanente nella torre di spurgo" +msgstr "Spurga il filamento rimanente nella torre di spurgo." msgid "Enable filament ramming." -msgstr "Abilita modellazione della punta del filamento" +msgstr "Abilita modellazione della punta del filamento." msgid "No sparse layers (beta)" msgstr "Nessuno strato sparso (beta)" @@ -14627,9 +14635,9 @@ msgid "" "Normal (manual) or Tree (manual) is selected, only support enforcers are " "generated." msgstr "" -"Normale (auto) e Ad albero (auto) vengono utilizzati per generare " -"automaticamente il supporto. Se Normale (manuale) o Ad Albero (manuale) è " -"selezionato, i supporti vengono generati solo per gli esecutori di supporto" +"Le opzioni Normale (auto) e Ad albero (auto) vengono utilizzate per generare " +"i supporti automaticamente. Selezionando invece Normale (manuale) o Ad " +"albero (manuale), verranno generati solo gli esecutori di supporto." msgid "Normal (auto)" msgstr "Normale (auto)" @@ -14647,7 +14655,7 @@ msgid "Support/object xy distance" msgstr "Distanza XY supporto/oggetto" msgid "XY separation between an object and its support." -msgstr "Separazione XY tra un oggetto e il suo supporto" +msgstr "Separazione XY tra un oggetto e il suo supporto." msgid "Support/object first layer gap" msgstr "Spazio supporto/oggetto primo strato" @@ -14667,7 +14675,7 @@ msgid "On build plate only" msgstr "Solo sul piatto" msgid "Don't create support on model surface, only on build plate." -msgstr "Genera supporti che poggiano solo sul piano di stampa" +msgstr "Genera supporti che poggiano solo sul piano di stampa." msgid "Support critical regions only" msgstr "Supporta solo aree critiche" @@ -14691,14 +14699,14 @@ msgstr "Distanza Z superiore" msgid "The Z gap between the top support interface and object." msgstr "" -"Determina lo spazio Z tra l'interfaccia di supporto superiore e l'oggetto" +"Determina lo spazio Z tra l'interfaccia di supporto superiore e l'oggetto." msgid "Bottom Z distance" msgstr "Distanza Z inferiore" msgid "The Z gap between the bottom support interface and object." msgstr "" -"Determina lo spazio Z tra l'interfaccia di supporto inferiore e l'oggetto" +"Determina lo spazio Z tra l'interfaccia di supporto inferiore e l'oggetto." msgid "Support/raft base" msgstr "Base supporto/zattera" @@ -14709,7 +14717,7 @@ msgid "" msgstr "" "Filamento per stampare basi di supporto e zattere. \"Predefinito\" indica " "che non verrà utilizzato alcun filamento specifico per il supporto e che " -"verrà utilizzato il filamento corrente" +"sarà utilizzato il filamento corrente." msgid "Avoid interface filament for base" msgstr "Evita filamento interfaccia per base" @@ -14724,8 +14732,8 @@ msgid "" "Line width of support. If expressed as a %, it will be computed over the " "nozzle diameter." msgstr "" -"Larghezza della linea del supporto. Se espresso come una %, verrà calcolato sul " -"diametro dell'ugello." +"Larghezza della linea del supporto. Se espresso come una %, verrà calcolato " +"sul diametro dell'ugello." msgid "Interface use loop pattern" msgstr "Usa motivo ad anello per interfaccie" @@ -14744,20 +14752,20 @@ msgid "" "for support interface and current filament is used." msgstr "" "Filamento per la stampa delle interfacce di supporto. \"Predefinito\" indica " -"che non viene utilizzato alcun filamento specifico per l'interfaccia di " -"supporto e che verrà utilizzato il filamento corrente" +"che non verrà utilizzato alcun filamento specifico per l'interfaccia di " +"supporto e che sarà utilizzato il filamento corrente." msgid "Top interface layers" msgstr "Strati interfaccia superiore" msgid "Number of top interface layers." -msgstr "Numero di strati dell'interfaccia superiore" +msgstr "Numero di strati dell'interfaccia superiore." msgid "Bottom interface layers" msgstr "Strati interfaccia inferiore" msgid "Number of bottom interface layers." -msgstr "Numero di strati dell'interfaccia inferiore" +msgstr "Numero di strati dell'interfaccia inferiore." msgid "Same as top" msgstr "Come quello superiore" @@ -14767,7 +14775,7 @@ msgstr "Spaziatura interfaccia superiore" msgid "Spacing of interface lines. Zero means solid interface." msgstr "" -"Spaziatura delle linee dell'interfaccia. 0 equivale ad un'interfaccia solida" +"Spaziatura delle linee dell'interfaccia. 0 equivale ad un'interfaccia solida." msgid "Bottom interface spacing" msgstr "Spaziatura interfaccia inferiore" @@ -14775,16 +14783,16 @@ msgstr "Spaziatura interfaccia inferiore" msgid "Spacing of bottom interface lines. Zero means solid interface." msgstr "" "Spaziatura delle linee dell'interfaccia inferiore. 0 equivale ad " -"un'interfaccia solida" +"un'interfaccia solida." msgid "Speed of support interface." -msgstr "Velocità per le interfacce di supporto" +msgstr "Velocità per le interfacce di supporto." msgid "Base pattern" msgstr "Motivo base" msgid "Line pattern of support." -msgstr "Motivo delle linee utilizzate nei supporti" +msgstr "Motivo delle linee utilizzate nei supporti." msgid "Rectilinear grid" msgstr "Griglia rettilinea" @@ -14802,7 +14810,7 @@ msgid "" msgstr "" "Motivo delle linee per le interfacce di supporto. Il motivo predefinito per " "le interfacce di supporto non solubili è Rettilineo mentre quello per le " -"interfacce di supporto solubili è Concentrico" +"interfacce di supporto solubili è Concentrico." msgid "Rectilinear Interlaced" msgstr "Rettilineo Interlacciato" @@ -14811,17 +14819,17 @@ msgid "Base pattern spacing" msgstr "Spaziatura motivo base" msgid "Spacing between support lines." -msgstr "Spaziatura tra le linee di supporto" +msgstr "Spaziatura tra le linee di supporto." msgid "Normal Support expansion" msgstr "Espansione supporti normali" msgid "Expand (+) or shrink (-) the horizontal span of normal support." msgstr "" -"Espandere (+) o restringere (-) l'estensione orizzontale del supporto normale" +"Espande (+) o restringe (-) l'estensione orizzontale del supporto normale." msgid "Speed of support." -msgstr "Velocità del supporto" +msgstr "Velocità dei supporti." msgid "" "Style and shape of the support. For normal support, projecting the supports " @@ -14952,11 +14960,11 @@ msgid "Adaptive layer height" msgstr "Altezza strato adattiva" msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated." +"Enabling this option means the height of tree support layer except the first " +"will be automatically calculated." msgstr "" "Abilitando questa opzione, l'altezza degli strati dei supporti ad albero, " -"eccetto il primo, verrà calcolata automaticamente " +"eccetto il primo, verrà calcolata automaticamente." msgid "Auto brim width" msgstr "Larghezza tesa automatica" @@ -14966,13 +14974,13 @@ msgid "" "automatically calculated." msgstr "" "Abilitando questa opzione, la larghezza della tesa per i supporti ad albero " -"verrà calcolata automaticamente" +"verrà calcolata automaticamente." msgid "Tree support brim width" msgstr "Larghezza tesa supporto ad albero" msgid "Distance from tree branch to the outermost brim line." -msgstr "Distanza dal ramo dell'albero alla linea più esterna della tesa" +msgstr "Distanza dal ramo dell'albero alla linea più esterna della tesa." msgid "Tip Diameter" msgstr "Diametro della punta" @@ -15022,7 +15030,7 @@ msgid "" "support." msgstr "" "Questa impostazione specifica se aggiungere il riempimento all'interno di " -"grandi cavità del supporto dell'albero" +"grandi cavità del supporto dell'albero." msgid "Activate temperature control" msgstr "Attiva controllo della temperatura" @@ -15093,7 +15101,7 @@ msgstr "" "macro di inizio stampa." msgid "Nozzle temperature for layers after the initial one." -msgstr "Temperatura dell'ugello per gli strati successivi a quello iniziale" +msgstr "Temperatura dell'ugello per gli strati successivi a quello iniziale." msgid "Detect thin wall" msgstr "Rileva pareti sottili" @@ -15102,9 +15110,9 @@ msgid "" "Detect thin wall which can't contain two line width. And use single line to " "print. Maybe printed not very well, because it's not closed loop." msgstr "" -"Rileva pareti sottili che non possono contenere due linee e utilizza una " -"sola linea per la stampa. Potrebbe non essere stampato altrettanto bene " -"perché non è un circuito chiuso" +"Rileva le pareti sottili che non possono contenere due linee di larghezza, " +"utilizzandone quindi una sola per la stampa. Potrebbe non essere stampato " +"bene poiché non è un perimetro chiuso." msgid "" "This G-code is inserted when filament is changed, including T commands to " @@ -15121,11 +15129,11 @@ msgid "" "Line width for top surfaces. If expressed as a %, it will be computed over " "the nozzle diameter." msgstr "" -"Larghezza delle linee per le superfici superiori. Se espresso come una %, verrà " -"calcolato sul diametro dell'ugello." +"Larghezza delle linee per le superfici superiori. Se espresso come una %, " +"verrà calcolato sul diametro dell'ugello." msgid "Speed of top surface infill which is solid." -msgstr "Velocità per il riempimento delle superfici solide superiori" +msgstr "Velocità per il riempimento delle superfici solide superiori." msgid "Top shell layers" msgstr "Strati guscio superiore" @@ -15138,7 +15146,7 @@ msgstr "" "Indica il numero di strati solidi del guscio superiore, compreso lo strato " "della superficie superiore. Se lo spessore calcolato con questo valore è più " "sottile dello spessore del guscio superiore, gli strati del guscio superiore " -"verranno aumentati" +"verranno aumentati." msgid "Top solid layers" msgstr "Strati solidi superiori" @@ -15158,10 +15166,10 @@ msgstr "" "questo valore. In questo modo si evita di avere un guscio troppo sottile " "quando l'altezza degli strati è piccola. Il valore 0 indica che questa " "impostazione è disattivata e che lo spessore del guscio superiore è " -"determinato in modo assoluto dagli strati del guscio superiore" +"determinato in modo assoluto dagli strati del guscio superiore." msgid "Speed of travel which is faster and without extrusion." -msgstr "Indica la velocità di spostamento più rapida e senza estrusione" +msgstr "Indica la velocità di spostamento più rapida e senza estrusione." msgid "Wipe while retracting" msgstr "Spurga durante retrazione" @@ -15174,14 +15182,13 @@ msgstr "" "Sposta l'ugello lungo l'ultimo percorso di estrusione durante la retrazione " "per rimuovere il materiale fuoriuscito dall'ugello. In questo modo è " "possibile ridurre al minimo i grumi quando si stampa una nuova parte dopo lo " -"spostamento" +"spostamento." msgid "Wipe Distance" msgstr "Distanza spurgo" msgid "" -"Describe how long the nozzle will move along the last path when " -"retracting.\n" +"Describe how long the nozzle will move along the last path when retracting.\n" "\n" "Depending on how long the wipe operation lasts, how fast and long the " "extruder/filament retraction settings are, a retraction move may be needed " @@ -15230,7 +15237,7 @@ msgid "The volume of material to prime extruder on tower." msgstr "Volume materiale da usare per la torre di spurgo." msgid "Width of the prime tower." -msgstr "Larghezza della torre di spurgo" +msgstr "Larghezza della torre di spurgo." msgid "Wipe tower rotation angle" msgstr "Angolo di rotazione della torre di spurgo" @@ -15384,7 +15391,6 @@ msgstr "" msgid "X-Y hole compensation" msgstr "Compensazione fori X-Y" -#, fuzzy msgid "" "Holes in objects will expand or contract in the XY plane by the configured " "value. Positive values make holes bigger, negative values make holes " @@ -15395,12 +15401,11 @@ msgstr "" "base al valore impostato. I valori positivi ingrandiscono i fori mentre " "quelli negativi li rimpiccioliscono. Questa funzione viene utilizzata per " "regolare leggermente le dimensioni quando gli oggetti presentano problemi di " -"assemblaggio" +"assemblaggio." msgid "X-Y contour compensation" msgstr "Compensazione contorni X-Y" -#, fuzzy msgid "" "Contours of objects will expand or contract in the XY plane by the " "configured value. Positive values make contours bigger, negative values make " @@ -15411,7 +15416,7 @@ msgstr "" "base al valore impostato. I valori positivi ingrandiscono i contorni mentre " "quelli negativi li rimpiccioliscono. Questa funzione viene utilizzata per " "regolare leggermente le dimensioni quando gli oggetti presentano problemi di " -"assemblaggio" +"assemblaggio." msgid "Convert holes to polyholes" msgstr "Converti fori in polifori" @@ -15468,7 +15473,7 @@ msgid "" "QOI for low memory firmware." msgstr "" "Formato delle miniature del G-code: PNG per la migliore qualità, JPG per la " -"dimensione più piccola, QOI per i firmware con poca memoria" +"dimensione più piccola, QOI per i firmware con poca memoria." msgid "Use relative E distances" msgstr "Usa distanze E relative" @@ -15483,7 +15488,7 @@ msgstr "" "\"label_objects\". Alcuni estrusori funzionano meglio con questa opzione " "disattivata (modalità di estrusione assoluta). La torre di spurgo è " "compatibile solo con la modalità relativa. È consigliato sulla maggior parte " -"delle stampanti. Il valore predefinito è 'attivato'" +"delle stampanti. Il valore predefinito è 'attivato'." msgid "" "Classic wall generator produces walls with constant extrusion width and for " @@ -15507,9 +15512,9 @@ msgid "" "segments. It's expressed as a percentage over nozzle diameter." msgstr "" "Quando si passa da un numero di pareti diverso all'altro, man mano che il " -"pezzo diviene più sottile, viene assegnata una certa quantità di spazio per " -"dividere o unire i segmenti di parete. Questo valore è espressa come " -"percentuale rispetto al diametro dell'ugello" +"pezzo diventa più sottile, viene assegnata una certa quantità di spazio per " +"dividere o unire i segmenti di parete. Questo valore è espresso come " +"percentuale rispetto al diametro dell'ugello." msgid "Wall transitioning filter margin" msgstr "Margine filtro transizione parete" @@ -15524,13 +15529,13 @@ msgid "" "percentage over nozzle diameter." msgstr "" "Evita la transizione avanti e indietro tra una parete aggiuntiva e una in " -"meno. Questo margine estende l'intervallo di estrusione che segue a " -"[Larghezza minima parete - margine, 2 * Larghezza minima parete + margine]. " -"L'aumento di questo margine riduce il numero di transizioni, il che riduce " -"il numero di avvii/arresti dell'estrusione e il tempo di spostamento. " -"Tuttavia, una grande variazione della larghezza di estrusione può portare a " -"problemi di sottoestrusione o sovraestrusione. Questo valore è espresso come " -"percentuale rispetto al diametro dell'ugello" +"meno. Questo margine estende l'intervallo larghezza di estrusione che segue " +"a [Larghezza minima parete - margine, 2 * Larghezza minima parete + " +"margine]. L'aumento di questo margine riduce il numero di transizioni, il " +"che riduce il numero di avvii/arresti dell'estrusione e il tempo di " +"spostamento. Tuttavia, una grande variazione della larghezza di estrusione " +"può portare a problemi di sottoestrusione o sovraestrusione. Questo valore è " +"espresso come percentuale rispetto al diametro dell'ugello." msgid "Wall transitioning threshold angle" msgstr "Angolo soglia transizione parete" @@ -15543,10 +15548,10 @@ msgid "" "leave gaps or overextrude." msgstr "" "Quando creare transizioni tra numeri pari e dispari di pareti. Una forma a " -"cuneo con un angolo superiore a questa impostazione non avrà transizioni e " -"non verranno stampate pareti al centro per riempire lo spazio rimanente. " -"Riducendo questa impostazione, si riduce il numero e la lunghezza delle " -"pareti centrali, ma si possono lasciare spazi vuoti o sovraestrusi" +"cuneo con un angolo maggiore di questa impostazione, non presenterà " +"transizioni e non verranno stampate pareti al centro per riempire lo spazio " +"rimanente. Riducendo questa impostazione, si riduce il numero e la lunghezza " +"delle pareti centrali, ma si possono lasciare spazi vuoti o sovraestrusi." msgid "Wall distribution count" msgstr "Conteggio distribuzione parete" @@ -15557,12 +15562,11 @@ msgid "" msgstr "" "Numero di pareti, contati a partire dal centro, sui quali deve essere " "distribuita la variazione. Valori più bassi indicano che le pareti esterne " -"non cambiano in larghezza" +"non cambiano in larghezza." msgid "Minimum feature size" msgstr "Dimensione minima elementi" -#, fuzzy msgid "" "Minimum thickness of thin features. Model features that are thinner than " "this value will not be printed, while features thicker than this value will " @@ -15570,9 +15574,9 @@ msgid "" "nozzle diameter." msgstr "" "Spessore minimo degli elementi sottili. Gli elementi del modello più sottili " -"di questo valore non verranno stampati, mentre le più spesse della " -"dimensione minima verranno ampliate fino alla larghezza minima della parete. " -"Questo valore è espresso come percentuale rispetto al diametro dell'ugello" +"di questo valore non verranno stampati, mentre quelli più spessi della " +"dimensione minima verranno ampliati fino alla larghezza minima della parete. " +"Questo valore è espresso come percentuale rispetto al diametro dell'ugello." msgid "Minimum wall length" msgstr "Lunghezza minima parete" @@ -15624,7 +15628,7 @@ msgstr "" "dimensione minima degli elementi) del modello. Se la larghezza minima della " "parete è più sottile dello spessore dell'elemento, la parete diventerà " "spessa quanto l'elemento stesso. Questo valore è espresso come percentuale " -"rispetto al diametro dell'ugello" +"rispetto al diametro dell'ugello." msgid "Detect narrow internal solid infill" msgstr "Rileva riempimento solido interno stretto" @@ -15667,7 +15671,7 @@ msgid "Load slicing data" msgstr "Carica dati elaborati" msgid "Load cached slicing data from directory." -msgstr "Carica i dati elaborati nella cache dalla directory" +msgstr "Carica i dati di elaborazione memorizzati nella cache dalla directory." msgid "Export STL" msgstr "Esporta STL" @@ -15679,7 +15683,7 @@ msgid "Export multiple STLs" msgstr "Esporta STL multipli" msgid "Export the objects as multiple STLs to directory." -msgstr "Esporta gli oggetti in STL mutipli nella directory" +msgstr "Esporta gli oggetti come STL multipli nella directory." msgid "Slice" msgstr "Elabora" @@ -15705,13 +15709,13 @@ msgid "" "list." msgstr "" "verifica se la macchina corrente è compatibile con le macchine presenti " -"nell'elenco" +"nell'elenco." msgid "Load default filaments" msgstr "Carica filamenti predefiniti" msgid "Load first filament as default for those not loaded." -msgstr "Carica il primo filamento come predefinito per quelli non caricati" +msgstr "Carica il primo filamento come predefinito per quelli non caricati." msgid "Minimum save" msgstr "Salvataggio minimo" @@ -15773,16 +15777,17 @@ msgid "Repetition count" msgstr "Conteggio delle ripetizioni" msgid "Repetition count of the whole model." -msgstr "Numero di ripetizioni dell'intero modello" +msgstr "Numero di ripetizioni dell'intero modello." msgid "Ensure on bed" msgstr "Accerta che sia sul piano" msgid "" -"Lift the object above the bed when it is partially below. Disabled by default." +"Lift the object above the bed when it is partially below. Disabled by " +"default." msgstr "" "Solleva l'oggetto sopra il piatto quando è parzialmente sotto. Disabilitato " -"per impostazione predefinita" +"per impostazione predefinita." msgid "" "Arrange the supplied models in a plate and merge them in a single model in " @@ -15795,7 +15800,7 @@ msgid "Convert Unit" msgstr "Converti unità" msgid "Convert the units of model." -msgstr "Converti le unità del modello" +msgstr "Converti le unità del modello." msgid "Orient Options" msgstr "Opzioni di orientamento" @@ -15813,73 +15818,73 @@ msgid "Rotation angle around the Y axis in degrees." msgstr "Angolo di rotazione attorno all'asse Y in gradi." msgid "Scale the model by a float factor." -msgstr "Ridimensiona il modello in base a un fattore decimale" +msgstr "Ridimensiona il modello in base a un fattore decimale." msgid "Load General Settings" msgstr "Carica impostazioni generali" msgid "Load process/machine settings from the specified file." -msgstr "Carica le impostazioni di processo/macchina dal file specificato" +msgstr "Carica le impostazioni di processo/macchina dal file specificato." msgid "Load Filament Settings" msgstr "Carica impostazioni filamento" msgid "Load filament settings from the specified file list." -msgstr "Carica le impostazioni del filamento dall'elenco di file specificato" +msgstr "Carica le impostazioni del filamento dall'elenco di file specificato." msgid "Skip Objects" msgstr "Salta Oggetti" msgid "Skip some objects in this print." -msgstr "Salta alcuni oggetti in questa stampa" +msgstr "Salta alcuni oggetti in questa stampa." msgid "Clone Objects" msgstr "Clona Oggetti" msgid "Clone objects in the load list." -msgstr "Clona gli oggetti nell'elenco di caricamento" +msgstr "Clona gli oggetti nell'elenco di caricamento." msgid "Load uptodate process/machine settings when using uptodate." msgstr "" -"carica le impostazioni di processo/macchina aggiornate quando si utilizza " -"Aggiorna" +"Carica le impostazioni di processo/macchina aggiornate quando si utilizza " +"Aggiorna." msgid "" "Load uptodate process/machine settings from the specified file when using " "uptodate." msgstr "" -"carica le impostazioni di processo/macchina aggiornate dal file specificato " -"quando si utilizza Aggiorna" +"Carica le impostazioni di processo/macchina aggiornate dal file specificato " +"quando si utilizza Aggiorna." msgid "Load uptodate filament settings when using uptodate." msgstr "" -"carica le impostazioni del filamento aggiornate quando si utilizza Aggiorna" +"Carica le impostazioni del filamento aggiornate quando si utilizza Aggiorna." msgid "" "Load uptodate filament settings from the specified file when using uptodate." msgstr "" -"carica le impostazioni aggiornate del filamento dal file specificato quando " -"si utilizza Aggiorna" +"Carica le impostazioni aggiornate del filamento dal file specificato quando " +"si utilizza Aggiorna." msgid "" "If enabled, check whether current machine downward compatible with the " "machines in the list." msgstr "" -"se abilitato, controlla se la macchina corrente è compatibile con le " -"macchine presenti nell'elenco" +"Se abilitato, controlla se la macchina corrente è compatibile con le " +"macchine presenti nell'elenco." msgid "Downward machines settings" -msgstr "impostazioni macchine" +msgstr "Impostazioni macchine" msgid "The machine settings list needs to do downward checking." -msgstr "l'elenco delle impostazioni delle macchine deve essere controllato" +msgstr "L'elenco delle impostazioni delle macchine deve essere controllato." msgid "Load assemble list" msgstr "Carica elenco di assemblaggio" msgid "Load assemble object list from config file." msgstr "" -"Carica l'elenco degli oggetti di assemblaggio dal file di configurazione" +"Carica l'elenco degli oggetti di assemblaggio dal file di configurazione." msgid "Data directory" msgstr "Cartella dati" @@ -15913,7 +15918,8 @@ msgstr "Abilita timelapse per la stampa" msgid "If enabled, this slicing will be considered using timelapse." msgstr "" -"Se abilitato, verrà utilizzato il timelapse durante l'elaborazione del piatto" +"Se abilitato, verrà utilizzato il timelapse durante l'elaborazione del " +"piatto." msgid "Load custom G-code" msgstr "Carica G-code personalizzato" @@ -15931,15 +15937,15 @@ msgid "Allow multiple colors on one plate" msgstr "Consenti più colori sul piatto" msgid "If enabled, Arrange will allow multiple colors on one plate." -msgstr "Se abilitato, la disposizione consentirà più colori sul piatto" +msgstr "Se abilitato, la funzione Disponi consentirà più colori sul piatto." msgid "Allow rotation when arranging" msgstr "Consenti rotazioni quando si dispone" msgid "If enabled, Arrange will allow rotation when placing objects." msgstr "" -"Se abilitato, la disposizione consentirà la rotazione quando si posiziona " -"l'oggetto" +"Se abilitato, la funzione Disponi consentirà la rotazione quando si " +"posiziona l'oggetto." msgid "Avoid extrusion calibrate region when arranging" msgstr "Evita regione calibrazione estrusione quando si dispone" @@ -15948,8 +15954,8 @@ msgid "" "If enabled, Arrange will avoid extrusion calibrate region when placing " "objects." msgstr "" -"Se abilitato, la disposizione eviterà la regione di calibrazione " -"dell'estrusione quando si posiziona l'oggetto" +"Se abilitato, la funzione Disponi eviterà la regione di calibrazione " +"dell'estrusione quando si posiziona l'oggetto." msgid "Skip modified G-code in 3mf" msgstr "Salta G-code modificati nel 3mf" @@ -15984,7 +15990,7 @@ msgid "metadata value list added into 3mf" msgstr "elenco dei valori dei metadati aggiunti nel 3mf" msgid "Allow 3mf with newer version to be sliced." -msgstr "Consenti l'elaborazione del 3mf con la versione più recente" +msgstr "Consenti l'elaborazione del file 3mf con la versione più recente." msgid "Current Z-hop" msgstr "Sollevamento Z corrente" @@ -16534,7 +16540,7 @@ msgstr "Il risultato del test non riuscito è stato eliminato." msgid "Flow Dynamics Calibration result has been saved to the printer." msgstr "" "Il risultato della calibrazione della dinamica del flusso è stato salvato " -"sulla stampante" +"sulla stampante." #, c-format, boost-format msgid "" @@ -16562,12 +16568,12 @@ msgstr "Si prega di selezionare almeno un filamento per la calibrazione" msgid "Flow rate calibration result has been saved to preset." msgstr "" -"Il risultato della calibrazione della portata è stato salvato nel profilo" +"Il risultato della calibrazione della portata è stato salvato nel profilo." msgid "Max volumetric speed calibration result has been saved to preset." msgstr "" "Il risultato della calibrazione della velocità volumetrica massima è stato " -"salvato nel profilo" +"salvato nel profilo." msgid "When do you need Flow Dynamics Calibration" msgstr "Quando è necessaria la calibrazione della dinamica del flusso" @@ -16582,14 +16588,15 @@ msgid "" "3. If the max volumetric speed or print temperature is changed in the " "filament setting" msgstr "" -"Ora abbiamo aggiunto la calibrazione automatica per diversi filamenti, che è " -"completamente automatizzata e il risultato verrà salvato nella stampante per " -"usi futuri. È necessario eseguire la calibrazione solo nei seguenti casi:\n" +"È stata aggiunta la calibrazione automatica per diversi filamenti, " +"completamente automatizzata, e il cui risultato verrà salvato nella " +"stampante per usi futuri. È necessario eseguire la calibrazione solo nei " +"seguenti casi:\n" "1. Se si introduce un nuovo filamento di marche/modelli diversi o il " -"filamento è umido;\n" -"2. se l'ugello è usurato o è stato sostituito con uno nuovo;\n" -"3. Se la velocità volumetrica massima o la temperatura di stampa vengono " -"modificate nell'impostazione del filamento." +"filamento è umido\n" +"2. Se l'ugello è usurato o è stato sostituito con uno nuovo\n" +"3. Se la velocità volumetrica massima o la temperatura di stampa è stata " +"modificata nell'impostazione del filamento" msgid "About this calibration" msgstr "Informazioni su questa calibrazione" @@ -16652,15 +16659,14 @@ msgstr "" "Dopo aver utilizzato la calibrazione della dinamica del flusso, potrebbero " "esserci ancora alcuni problemi di estrusione, ad esempio:\n" "1. Sovraestrusione: materiale in eccesso sull'oggetto stampato, formazione " -"di grumi o brufoli o strati che sembrano più spessi del previsto e non " -"uniformi.\n" +"di grumi o strati che sembrano più spessi del previsto e non uniformi\n" "2. Sottoestrusione: strati molto sottili, resistenza del riempimento debole " "o spazi vuoti nello strato superiore del modello, anche quando si stampa " -"lentamente.\n" +"lentamente\n" "3. Scarsa qualità della superficie: la superficie delle stampe sembra ruvida " -"o irregolare.\n" +"o irregolare\n" "4. Integrità strutturale debole: le stampe si rompono facilmente o non " -"sembrano robuste come dovrebbero essere." +"sembrano robuste come dovrebbero essere" msgid "" "In addition, Flow Rate Calibration is crucial for foaming materials like LW-" @@ -18759,8 +18765,8 @@ msgstr "" #: resources/data/hints.ini: [hint:Flush into support/objects/infill] msgid "" "Flush into support/objects/infill\n" -"Did you know that you can save wasted filament by flushing it into " -"support/objects/infill during filament change?" +"Did you know that you can save wasted filament by flushing it into support/" +"objects/infill during filament change?" msgstr "" "Spurga nei supporti/oggetti/riempimenti\n" "Sapevi che puoi ridurre lo spreco di filamento spurgandolo nei supporti/" @@ -18779,14 +18785,13 @@ msgstr "" #: resources/data/hints.ini: [hint:When do you need to print with the printer #: door opened] -#, fuzzy msgid "" "When do you need to print with the printer door opened?\n" "Did you know that opening the printer door can reduce the probability of " "extruder/hotend clogging when printing lower temperature filament with a " "higher enclosure temperature? More info about this in the Wiki." msgstr "" -"Quando è necessario stampare con lo sportello della stampante aperto\n" +"Quando è necessario stampare con lo sportello della stampante aperto?\n" "Sapevi che aprendo lo sportello della stampante puoi ridurre la probabilità " "di intasamento dell'estrusore/camera di estrusione quando si stampa un " "filamento a bassa temperatura con una temperatura dell'involucro più elevata?" @@ -19533,8 +19538,7 @@ msgstr "" #~ msgid "Initialize failed (No Camera Device)!" #~ msgstr "Inizializzazione fallita (Nessun dispositivo fotocamera)!" -#~ msgid "" -#~ "Printer is busy downloading, please wait for the download to finish." +#~ msgid "Printer is busy downloading, please wait for the download to finish." #~ msgstr "" #~ "Stampante in fase di caricamento; attendi il completamento del " #~ "caricamento." From 41659bcfda6997970e22b040d3292e94dd6f3dfa Mon Sep 17 00:00:00 2001 From: Andy Date: Fri, 18 Jul 2025 06:52:23 +0700 Subject: [PATCH 07/13] Update OrcaSlicer_ru.po (#10077) Improving translation, correcting errors. --- localization/i18n/ru/OrcaSlicer_ru.po | 1232 ++++++++++++++++++------- 1 file changed, 873 insertions(+), 359 deletions(-) diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 3ec1c050bf..4bceec3432 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: OrcaSlicer V2.3.0 Official Release\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-16 22:32+0800\n" -"PO-Revision-Date: 2025-03-21 20:41+0700\n" +"PO-Revision-Date: 2025-07-06 21:08+0700\n" "Last-Translator: \n" "Language-Team: Andylg \n" "Language: ru_RU\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"X-Generator: Poedit 3.5\n" +"X-Generator: Poedit 3.6\n" msgid "Support Painting" msgstr "Рисование поддержек" @@ -67,6 +67,7 @@ msgstr "Заполнение пробелов" msgid "Perform" msgstr "Выполнить" +# это в гизмо покраски msgid "Gap area" msgstr "Площадь пробела" @@ -91,6 +92,7 @@ msgstr "Сфера" msgid "Fill" msgstr "Заливка" +# это в гизмо покраски msgid "Gap Fill" msgstr "Заполнение пробелов" @@ -517,11 +519,11 @@ msgstr[2] "%1$d соединений выходит за контур модел msgid "%1$d connector is out of object" msgid_plural "%1$d connectors are out of object" msgstr[0] "%1$d соединение находится за пределами модели." -msgstr[1] "%1$d соединения находится за пределами модели." -msgstr[2] "%1$d соединений находится за пределами модели." +msgstr[1] "%1$d соединения находятся за пределами модели." +msgstr[2] "%1$d соединений находятся за пределами модели." msgid "Some connectors are overlapped" -msgstr "Имеются пересекающие соединения" +msgstr "Имеются пересекающиеся соединения" msgid "Select at least one object to keep after cutting." msgstr "Выберите хотя бы одну из частей для сохранения после разреза." @@ -1026,8 +1028,8 @@ msgstr "Шрифт \"%1%\" не может быть использован. По #, boost-format msgid "" -"Can't load exactly same font (\"%1%\"). Application selected a similar " -"one (\"%2%\"). You have to specify font for enable edit text." +"Can't load exactly same font (\"%1%\"). Application selected a similar one " +"(\"%2%\"). You have to specify font for enable edit text." msgstr "" "Т.к. не удалось загрузить тот же шрифт (\"%1%\"), приложение выбрало похожий " "шрифт (\"%2%\"). Выберите шрифт для включения редактирования текста." @@ -1381,7 +1383,7 @@ msgid "Face" msgstr "Грань" msgid " (Fixed)" -msgstr " (не подвижная)" +msgstr " (неподвижная)" msgid "Point" msgstr "Точка" @@ -1399,7 +1401,6 @@ msgstr "Внимание: выберите плоскость." msgid "Warning: please select Point's or Circle's feature." msgstr "Внимание: выберите точку или окружность." -# ????? выберите две разные сетки, выберите две различные 3D-сетки (объекты), msgid "Warning: please select two different meshes." msgstr "Внимание: выберите требуемый элемент на втором объекте." @@ -1424,6 +1425,7 @@ msgstr "Параллельно" msgid "Center coincidence" msgstr "Совместить центры" +# ???? msgid "Feature 1" msgstr "Элемент 1" @@ -2055,7 +2057,7 @@ msgid "Auto Rotate" msgstr "Автоповорот" msgid "auto rotate current plate" -msgstr "Автоповорот моделей на текущем стола" +msgstr "Автоповорот моделей на текущем столе" msgid "Delete Plate" msgstr "Удалить стол" @@ -2127,30 +2129,34 @@ msgstr[1] "%1$d открытых ребра" msgstr[2] "%1$d открытых рёбер" msgid "Right click the icon to fix model object" -msgstr "Нажмите правой кнопкой мыши на значок, чтобы починить модель" +msgstr "Нажмите правой кнопкой мыши на значок, чтобы починить модель." msgid "Right button click the icon to drop the object settings" -msgstr "Нажмите правой кнопкой мыши на значок, чтобы изменить настройки модели" +msgstr "" +"Нажмите правой кнопкой мыши на значок, чтобы изменить настройки модели." msgid "Click the icon to reset all settings of the object" -msgstr "Нажмите на значок, чтобы сбросить все настройки модели" +msgstr "Нажмите на значок, чтобы сбросить все настройки модели." msgid "Right button click the icon to drop the object printable property" msgstr "" "Нажмите правой кнопкой мыши на значок, чтобы разрешить/запретить печать " -"модели" +"модели." msgid "Click the icon to toggle printable property of the object" -msgstr "Нажмите на значок, чтобы разрешить/запретить печать модели" +msgstr "Нажмите на значок, чтобы разрешить/запретить печать модели." +# ??? Нажмите на значок, открыть рисование поддержек... чтобы перераскрасить области расположения поддержек для модели." msgid "Click the icon to edit support painting of the object" -msgstr "Нажмите на значок, чтобы отредактировать рисунок поддержки этой модели" +msgstr "" +"Нажмите на значок, чтобы изменить зоны расположения поддержек для модели." +# ??? цветовую раскраску модели? открыть покраску, чтобы изменить раскраску модели msgid "Click the icon to edit color painting of the object" -msgstr "Нажмите на значок, чтобы изменить цвет модели" +msgstr "Нажмите на значок, чтобы перераскрасить модель." msgid "Click the icon to shift this object to the bed" -msgstr "Нажмите на значок, чтобы переместить эту модель на стол" +msgstr "Нажмите на значок, чтобы переместить эту модель на стол." msgid "Loading file" msgstr "Загрузка файла" @@ -2297,7 +2303,7 @@ msgstr "Переименование" msgid "Following model object has been repaired" msgid_plural "Following model objects have been repaired" -msgstr[0] "Следующая модель были успешно починена" +msgstr[0] "Следующая модель была успешно починена" msgstr[1] "Следующие модели были успешно починены" msgstr[2] "Следующие модели были успешно починены" @@ -2323,7 +2329,7 @@ msgid "Remove height range" msgstr "Удаление диапазона высот слоёв" msgid "Add height range" -msgstr "Добавление диапазон высот слоёв" +msgstr "Добавление диапазона высот слоёв" msgid "Invalid numeric." msgstr "Неправильное числовое значение." @@ -2334,7 +2340,7 @@ msgstr "" "и того же столбца." msgid "Copying multiple cells is not supported." -msgstr "копирование нескольких ячеек не поддерживается" +msgstr "Копирование нескольких ячеек не поддерживается." msgid "Outside" msgstr "Вне стола" @@ -2500,7 +2506,7 @@ msgid "Connection to printer failed" msgstr "Не удалось подключиться к принтеру" msgid "Please check the network connection of the printer and Orca." -msgstr "Пожалуйста, проверьте сетевое подключение принтера с OrcaSlicer." +msgstr "Убедитесь, что принтер и Orca имеют доступ к сети." msgid "Connecting..." msgstr "Подключение..." @@ -2636,8 +2642,8 @@ msgstr "Расстановка выполнена." msgid "" "Arrange failed. Found some exceptions when processing object geometries." msgstr "" -"Ошибка расстановки. Обнаружены некоторые исключения при обработке геометрии " -"моделей." +"Не удалось выполнить расстановку из-за ошибки в геометрических данных " +"объекта." #, c-format, boost-format msgid "" @@ -2714,7 +2720,6 @@ msgid "Cloud service connection failed. Please try again." msgstr "" "Не удалось подключиться к облачному сервису. Пожалуйста, попробуйте ещё раз." -# Print file - речь про g-код msgid "Print file not found. Please slice again." msgstr "Файл печати не найден, нарежьте ещё раз." @@ -2789,10 +2794,10 @@ msgid "An SD card needs to be inserted before printing via LAN." msgstr "Перед печатью через локальную сеть необходимо вставить SD-карту." msgid "Sending G-code file over LAN" -msgstr "Отправка файла G-кода по локальной сети" +msgstr "Отправка G-код файла по локальной сети" msgid "Sending G-code file to SD card" -msgstr "Отправка файла G-кода на SD-карту" +msgstr "Отправка G-код файла на SD-карту" #, c-format, boost-format msgid "Successfully sent. Close current page in %s s" @@ -2843,7 +2848,7 @@ msgid "Canceled" msgstr "Отменено" msgid "Installed successfully" -msgstr "Установка успешно завершена." +msgstr "Успешно установлено." msgid "Installing" msgstr "Установка" @@ -3001,9 +3006,6 @@ msgstr "Температура стола" msgid "Max volumetric speed" msgstr "Макс. объёмный расход" -msgid "Volumetric speed" -msgstr "Объёмный расход" - msgid "℃" msgstr "℃" @@ -3188,23 +3190,25 @@ msgstr "" msgid "Power on update" msgstr "Обновлять данные при включении принтера" +# ??? было При включении принтера АСПП будет автоматически считывать информацию о вставленных материалах. Это занимает около одной минуты. В процессе считывания информации о материале катушка вращается. msgid "" "The AMS will automatically read the information of inserted filament on " "start-up. It will take about 1 minute. The reading process will roll the " "filament spools." msgstr "" -"При каждом включении принтера АСПП будет автоматически считывать информацию " -"о вставленных материалах. Это занимает приблизительно одну минуту. В " -"процессе считывания информации о материале катушка вращается." +"АСПП будет автоматически считывать информацию о вставленных материалах при " +"включении принтера. Это занимает около одной минуты. В процессе считывания " +"информации о материале катушка вращается." +# ??? было При каждом включении принтера, считывание информации о вставленных материалах АСПП будет отключено. Будет использоваться информация, полученная перед последним выключением. msgid "" "The AMS will not automatically read information from inserted filament " "during startup and will continue to use the information recorded before the " "last shutdown." msgstr "" -"При каждом включении принтера, считывание информации о вставленных " -"материалах АСПП будет отключено. Будет использоваться информация, полученная " -"перед последним выключением." +"АСПП не будет автоматически считывать информацию о вставленных материалах " +"при включении принтера и продолжит использовать данные, записанные перед " +"последним выключением." msgid "Update remaining capacity" msgstr "Обновлять оставшуюся ёмкость катушки" @@ -3249,7 +3253,7 @@ msgid "" "software, check and retry." msgstr "" "Не удалось загрузить плагин. Пожалуйста, проверьте настройки брандмауэра и " -"vpn, и повторите попытку." +"VPN и повторите попытку." msgid "" "Failed to install the plug-in. Please check whether it is blocked or deleted " @@ -3598,7 +3602,7 @@ msgid "" "minute each batch. (It depends on how long it takes to complete the heating.)" msgstr "" "минут для отправки каждого пакета заданий (зависит от того, сколько времени " -"требуется для завершения нагрева перед началом печати)." +"требуется для завершения нагрева перед началом печати.)" # ??????? Используется в двух местах или уже исправили? msgid "Send" @@ -3617,13 +3621,13 @@ msgid "The name is not allowed to be empty." msgstr "Имя не может быть пустым." msgid "The name is not allowed to start with space character." -msgstr "Имя не должно начитаться с пробела." +msgstr "Имя не должно начинаться с пробела." msgid "The name is not allowed to end with space character." msgstr "Имя не должно заканчиваться пробелом." msgid "The name length exceeds the limit." -msgstr "Длина имени превышает установленное ограничение." +msgstr "Слишком длинное имя." msgid "Origin" msgstr "Начало координат" @@ -3683,7 +3687,7 @@ msgstr "Выбранный файл не содержит геометрии." msgid "" "The selected file contains several disjoint areas. This is not supported." msgstr "" -"Выбранный файл содержит несколько не пересекающихся областей. Такие файлы не " +"Выбранный файл содержит несколько непересекающихся областей. Такие файлы не " "поддерживаются." msgid "Choose a file to import bed texture from (PNG/SVG):" @@ -3695,10 +3699,9 @@ msgstr "Выберите STL файл для импорта формы стол msgid "Bed Shape" msgstr "Форма стола" -#, fuzzy msgid "" -"The recommended minimum temperature is less than 190°C or the " -"recommended maximum temperature is greater than 300°C.\n" +"The recommended minimum temperature is less than 190°C or the recommended " +"maximum temperature is greater than 300°C.\n" msgstr "" "Минимально рекомендуемая температура меньше 190 градусов или максимально " "рекомендуемая температура выше 300 градусов.\n" @@ -3806,7 +3809,7 @@ msgid "" "is set to All." msgstr "" "Чередующаяся дополнительная стенка не работает, если для «Сохранение толщины " -"вертикальной оболочки» установлено значение «Везде»." +"вертикальной оболочки» установлено значение «Все»." msgid "" "Change these settings automatically?\n" @@ -3815,7 +3818,7 @@ msgid "" "No - Don't use alternate extra wall" msgstr "" "Изменить эти настройки автоматически?\n" -"Да - Изменить в «Сохранение толщины вертикальной оболочки» на значение " +"Да - Изменить в «Обеспечивать верт. толщину оболочки» на значение " "«Умеренное» и включить чередующуюся дополнительную стенку\n" "Нет - Отказаться от использования чередующейся дополнительной стенки" @@ -3938,7 +3941,7 @@ msgid "Printing was paused by the user" msgstr "Печать приостановлена пользователем" msgid "Pause of front cover falling" -msgstr "Пауза при падения передней крышки с головы" +msgstr "Пауза при падении передней крышки с головы" msgid "Calibrating the micro lidar" msgstr "Калибровка микролидаром" @@ -4048,7 +4051,7 @@ msgid "" msgstr "" "Если вы установили температура внутри термокамеры ниже 40℃, то контроль " "температуры не запустится, а целевая температура в ней будет автоматически " -"установлена на 0℃." +"установлена ​​на 0℃." msgid "Failed to start print job" msgstr "Не удалось запустить задание на печать." @@ -4089,6 +4092,7 @@ msgstr "" "CF/GF пластиковые нити твердые и хрупкие, легко ломаются или застревают в " "АСПП, поэтому используйте их с осторожностью." +# отображается в Моделях msgid "default" msgstr "По ум." @@ -4098,7 +4102,7 @@ msgstr "Изменение пользовательского G-кода (%1%)" msgid "Built-in placeholders (Double click item to add to G-code)" msgstr "" -"Встроенные заполнители. Для добавить его в G-код, дважды щелкните на " +"Встроенные заполнители. Для добавления его в G-код, дважды щелкните на " "выбранное." msgid "Search G-code placeholders" @@ -4267,8 +4271,9 @@ msgstr "Статистика по всем столам" msgid "Display" msgstr "Видимость" +# в результате нарезки это, в профиле прутка msgid "Flushed" -msgstr "Очищено" +msgstr "Очистка" msgid "Tower" msgstr "Башня" @@ -4352,8 +4357,10 @@ msgstr "Перемещения" msgid "Extruder" msgstr "Экструдер" +# в результате нарезки это, в профиле прутка +# ??? Число смен материалов msgid "Filament change times" -msgstr "Время смены прутка" +msgstr "Кол-во смен материала" msgid "Cost" msgstr "Стоимость" @@ -4495,10 +4502,10 @@ msgid "Add plate" msgstr "Добавить стол" msgid "Auto orient all/selected objects" -msgstr "Автоориентация все/выбранные модели" +msgstr "Автоориентация всех/выбранных моделей" msgid "Auto orient all objects on current plate" -msgstr "Автоориентация всех моделей на текущем столе" +msgstr "Автоориентация всех моделей на текущей печатной пластине" msgid "Arrange all objects" msgstr "Расставить все модели" @@ -4579,7 +4586,7 @@ msgstr "" "построения." msgid "Calibration step selection" -msgstr "Выбор шага калибровки" +msgstr "Выбор шагов калибровки" msgid "Micro lidar calibration" msgstr "Калибровка микролидаром" @@ -4655,7 +4662,7 @@ msgid "1080p" msgstr "1080p" msgid "Connect Printer (LAN)" -msgstr "Подключение принтера (локальная сеть)" +msgstr "Подключение принтера (LAN)" msgid "Please input the printer access code:" msgstr "Пожалуйста, введите код доступа к принтеру:" @@ -4954,7 +4961,6 @@ msgstr "Ортогональный вид" msgid "Auto Perspective" msgstr "Автоперспектива" -# ??? Автоматическое переключение между ортогональным видом и перспективной проекцией при смене вида сверху/снизу/сбоку msgid "" "Automatically switch between orthographic and perspective when changing from " "top/bottom/side views." @@ -4966,14 +4972,14 @@ msgid "Show &G-code Window" msgstr "&Показать окно G-кода" msgid "Show G-code window in Preview scene." -msgstr "Показать окно G-кода в окне предпросмотра" +msgstr "Показать окно G-кода в окне предпросмотра." msgid "Show 3D Navigator" msgstr "Показать навигационный куб" msgid "Show 3D navigator in Prepare and Preview scene." msgstr "" -"Показать навигационный куб в режиме подготовки и предварительного просмотра" +"Показать навигационный куб в режиме подготовки и предварительного просмотра." msgid "Reset Window Layout" msgstr "Сбросить настройки окон" @@ -4985,13 +4991,13 @@ msgid "Show &Labels" msgstr "Показать &имена файлов" msgid "Show object labels in 3D scene." -msgstr "Показать имена моделей в 3D-сцене" +msgstr "Показать имена моделей в 3D-сцене." msgid "Show &Overhang" msgstr "Показать &нависания" msgid "Show object overhang highlight in 3D scene." -msgstr "Подсвечивать нависания у модели в окне подготовки" +msgstr "Подсвечивать нависания у модели в окне подготовки." msgid "Show Selected Outline (beta)" msgstr "Показать контур выбранной модели" @@ -5175,7 +5181,7 @@ msgid "" "2. The Filament presets\n" "3. The Printer presets" msgstr "" -"Вы хотите синхронизировать свои данные с Bambu Cloud?\n" +"Вы хотите синхронизировать свои данные с Bambu Cloud? \n" "В облаке храниться следующая информация:\n" "1. Профили процессов печати\n" "2. Профили пластиковых нитей\n" @@ -5214,8 +5220,6 @@ msgstr "" "Возникла проблема. Пожалуйста, обновите прошивку принтера и повторите " "попытку." -# ??? Видеотрансляция, Трансляция с видеокамеры -# ??? Прямая трансляция для локальной сети отключена. Пожалуйста, включите её с экрана принтера. msgid "" "LAN Only Liveview is off. Please turn on the liveview on printer screen." msgstr "" @@ -5233,7 +5237,6 @@ msgstr "" "Не удалось установить соединение. Пожалуйста, проверьте сеть и повторите " "попытку" -# ??? Проверить влезает ли теперь. Или ещё короче - Проверьте сеть и повторите попытку. Если не помогло, перезагрузите или обновите принтер. msgid "" "Please check the network and try again. You can restart or update the " "printer if the issue persists." @@ -5244,9 +5247,8 @@ msgstr "" msgid "The printer has been logged out and cannot connect." msgstr "Принтер вышел из системы и не может подключиться." -# ??? видеотрансляция остановлена msgid "Video Stopped." -msgstr "Трансляция с камеры остановлена." +msgstr "Видеотрансляция с камеры остановлена." # ??? Сбой подключения к локальной сети (не удалось запустить просмотр в реальном времени msgid "LAN Connection Failed (Failed to start liveview)" @@ -5257,7 +5259,7 @@ msgid "" "Virtual Camera Tools is required for this task!\n" "Do you want to install them?" msgstr "" -"Для этой задачи потребуется Virtual Camera Tools!\n" +"Для этой задачи требуется Virtual Camera Tools!\n" "Хотите установить?" msgid "Downloading Virtual Camera Tools" @@ -5444,7 +5446,7 @@ msgstr "" "немедленно, повторите попытку позже." msgid "File does not exist." -msgstr "Файла не существует." +msgstr "Файл не существует." msgid "File checksum error. Please retry." msgstr "Ошибка контрольной суммы файла. Повторите попытку." @@ -5611,7 +5613,7 @@ msgid "Still load" msgstr "Ещё загружается" msgid "Please select an AMS slot before calibration." -msgstr "Пожалуйста, выберите слот АСПП перед калибровкой" +msgstr "Пожалуйста, выберите слот АСПП перед калибровкой." msgid "" "Cannot read filament info: the filament is loaded to the tool head,please " @@ -5657,13 +5659,10 @@ msgid "Submit" msgstr "Отправить" msgid "Please click on the star first." -msgstr "Пожалуйста, сначала нажмите на звездочку." +msgstr "Пожалуйста, сначала нажмите на звёздочку." msgid "Get oss config failed." -msgstr "" -"Не удалось получить конфигурацию OSS.\n" -"\n" -"Ошибка получения конфигурации OSS." +msgstr "Ошибка получения конфигурации OSS." # ??? или Загрузка оставить? msgid "Upload Pictures" @@ -5711,7 +5710,7 @@ msgid "" "\n" " error code: " msgstr "" -"Ваш комментарий не может быть отправлен по некоторым причинам. Причины:\n" +"Ваш комментарий не может быть отправлен по следующим причинам:\n" "\n" "Код ошибки: " @@ -5927,13 +5926,13 @@ msgid "Warning:" msgstr "Предупреждение:" msgid "Exported successfully" -msgstr "Успешно экспортировано." +msgstr "Успешно экспортировано" msgid "Model file downloaded." msgstr "Файл модели скачан." msgid "Serious warning:" -msgstr "Серьезное предупреждение:" +msgstr "Серьёзное предупреждение:" msgid " (Repair)" msgstr " (Починить модель)" @@ -6093,7 +6092,7 @@ msgid " plate %1%:" msgstr " печатной пластины %1%: " msgid "Invalid name, the following characters are not allowed:" -msgstr "Недопустимое имя файла. Следующие символов не разрешены:" +msgstr "Недопустимое имя файла. Следующие символы не разрешены:" msgid "Sliced Info" msgstr "Информация о нарезке" @@ -6135,7 +6134,7 @@ msgid "Remove last filament" msgstr "Удалить последнюю добавленную пластиковую нить" msgid "Synchronize filament list from AMS" -msgstr "Синхронизировать список материалов из АСПП" +msgstr "Синхронизировать перечень материалов из АСПП" msgid "Set filaments to use" msgstr "Выбор пластиковой нити" @@ -6184,7 +6183,7 @@ msgid "" "Orca Slicer or restart Orca Slicer to check if there is an update to system " "presets." msgstr "" -"Имеются несколько неизвестных материалов, сопоставленных с общим профилем. " +"Имеется несколько неизвестных материалов, сопоставленных с общим профилем. " "Обновите или перезапустите Orca Slicer, чтобы проверить наличие обновлений " "системных профилей." @@ -6194,8 +6193,8 @@ msgstr "Вы хотите сохранить изменения в \"%1%\"?" #, c-format, boost-format msgid "" -"Successfully unmounted. The device %s (%s) can now be safely removed from the " -"computer." +"Successfully unmounted. The device %s (%s) can now be safely removed from " +"the computer." msgstr "" "Размонтирование прошло успешно. Теперь устройство %s(%s) может быть " "безопасно извлечено из компьютера." @@ -6367,7 +6366,7 @@ msgid "" "print bed automatically?" msgstr "" "Похоже, ваша модель слишком большая.\n" -"Хотите автоматически уменьшить её масштаб, \n" +"Хотите автоматически уменьшить её масштаб,\n" "чтобы она уместилась на столе?" msgid "Object too large" @@ -6606,7 +6605,7 @@ msgstr "Все модели будут удалены, продолжить?" msgid "The current project has unsaved changes, save it before continue?" msgstr "" -"В текущем проекте имеются несохранённые изменения.\n" +"В текущем проекте имеются несохранённые изменения. \n" "Сохранить их перед продолжением?" msgid "Number of copies:" @@ -6931,20 +6930,27 @@ msgid "Use free camera" msgstr "Использовать свободную камеру" msgid "If enabled, use free camera. If not enabled, use constrained camera." -msgstr "Если включено, используется свободное вращение камеры. Если выключено, " +msgstr "" +"Если включено, используется свободное вращение камеры. Если выключено, " "используется вращение камера с ограничениями." +# Поменять местами кнопки перемещение и поворота камеры msgid "Swap pan and rotate mouse buttons" -msgstr "Поменять местами кнопки панорамирования и вращения мыши" +msgstr "Поменять местами кнопки мыши для перемещение и вращение камеры" -msgid "If enabled, swaps the left and right mouse buttons pan and rotate functions." -msgstr "Если включено, меняет местами функции панорамирования и поворота левой и правой кнопок мыши." +msgid "" +"If enabled, swaps the left and right mouse buttons pan and rotate functions." +msgstr "" +"Если включено, меняет местами функции перемещения и вращения камеры для " +"левой и правой кнопок мыши." msgid "Reverse mouse zoom" msgstr "Инвертировать управление масштабом" msgid "If enabled, reverses the direction of zoom with mouse wheel." -msgstr "Если включено, направление масштабирования с помощью колесика мыши будет инвертировано." +msgstr "" +"Если включено, направление масштабирования с помощью колесика мыши будет " +"инвертировано." msgid "Show splash screen" msgstr "Показывать заставку при запуске программы" @@ -6956,37 +6962,46 @@ msgid "Show \"Tip of the day\" notification after start" msgstr "Показывать уведомление с полезным советом при запуске приложения" msgid "If enabled, useful hints are displayed at startup." -msgstr "Если включено, будут показываться уведомления с полезном советом при запуске приложения." +msgstr "" +"Если включено, будут показываться уведомления с полезном советом при запуске " +"приложения." msgid "Flushing volumes: Auto-calculate every time the color changed." msgstr "Объём очистки: автопересчёт при каждом изменении цвета" msgid "If enabled, auto-calculate every time the color changed." -msgstr "Если включено, выполняется автоматический перерасчёт объёма очистки при " +msgstr "" +"Если включено, выполняется автоматический перерасчёт объёма очистки при " "каждом изменении цвета." -msgid "Flushing volumes: Auto-calculate every time when the filament is changed." +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." msgstr "Объём очистки: автопересчёт при каждой смене прутка" msgid "If enabled, auto-calculate every time when filament is changed" -msgstr "Если включено, выполняется автоматический перерасчёт объёма очистки при " +msgstr "" +"Если включено, выполняется автоматический перерасчёт объёма очистки при " "каждой смене прутка." msgid "Remember printer configuration" msgstr "Запоминать конфигурацию принтера" -msgid "If enabled, Orca will remember and switch filament/process configuration for " +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " "each printer automatically." -msgstr "Если включено, программа будет запоминать связь выбранного профиля принтера " +msgstr "" +"Если включено, программа будет запоминать связь выбранного профиля принтера " "с профилем пластиковой нити и процессом печати, выставленными вами в " "последний раз." msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Управление несколькими принтерами (требуется перезапуск программы)" +msgstr "Управление несколькими устройствами (требуется перезапуск программы)" -msgid "With this option enabled, you can send a task to multiple devices at the " +msgid "" +"With this option enabled, you can send a task to multiple devices at the " "same time and manage multiple devices." -msgstr "Если включено, вы сможете управлять несколькими устройствами и отправлять " +msgstr "" +"Если включено, вы сможете управлять несколькими устройствами и отправлять " "задания на печать на несколько устройств одновременно." msgid "Auto arrange plate after cloning" @@ -7223,7 +7238,7 @@ msgid "AMS filaments" msgstr "Прутки АСПП" msgid "Click to select filament color" -msgstr "Нажмите, чтобы выбрать цвет нити" +msgstr "Нажмите, чтобы выбрать цвет прутка" msgid "Please choose the filament color" msgstr "Пожалуйста, выберите цвет прутка" @@ -7352,7 +7367,7 @@ msgid "Name is unavailable." msgstr "Имя недоступно." msgid "Overwriting a system profile is not allowed." -msgstr "Перезапись системного профиля запрещена" +msgstr "Перезапись системного профиля запрещена." #, boost-format msgid "Preset \"%1%\" already exists." @@ -7363,7 +7378,6 @@ msgid "" "Preset \"%1%\" already exists and is incompatible with the current printer." msgstr "Профиль \"%1%\" уже существует и несовместим с текущим принтером." -#, fuzzy msgid "Please note that saving will overwrite this preset." msgstr "" "Обратите внимание, что при сохранении произойдёт замена текущего профиля." @@ -7786,11 +7800,11 @@ msgid "" "successes and failures of the vast number of prints by our users. We are " "training %s to be smarter by feeding them the real-world data. If you are " "willing, this service will access information from your error logs and usage " -"logs, which may include information described in Privacy Policy. We will " -"not collect any Personal Data by which an individual can be identified " -"directly or indirectly, including without limitation names, addresses, " -"payment information, or phone numbers. By enabling this service, you agree " -"to these terms and the statement about Privacy Policy." +"logs, which may include information described in Privacy Policy. We will not " +"collect any Personal Data by which an individual can be identified directly " +"or indirectly, including without limitation names, addresses, payment " +"information, or phone numbers. By enabling this service, you agree to these " +"terms and the statement about Privacy Policy." msgstr "" "В сообществе 3D-печатников мы учимся на успехах и неудачах друг друга, чтобы " "корректировать свои собственные параметры и настройки нарезки. Система %s " @@ -7840,15 +7854,16 @@ msgstr "Поиск в профиле" msgid "Click to reset all settings to the last saved preset." msgstr "" -"Нажмите, чтобы сбросить все настройки до последнего сохраненного профиля." +"Нажмите, чтобы сбросить все настройки к последнему сохранённому значению " +"профиля." msgid "" "A prime tower is required for smooth timelapse. There may be flaws on the " "model without prime tower. Are you sure you want to disable prime tower?" msgstr "" "Для плавного таймлапса требуется черновая башня. На модели без использования " -"черновой башни могут быть дефекты. Вы уверены, что хотите отключить черновую " -"башню?" +"черновой башни могут возникнуть дефекты. Вы уверены, что хотите отключить " +"черновую башню?" msgid "" "A prime tower is required for smooth timelapse. There may be flaws on the " @@ -7921,8 +7936,8 @@ msgstr "Игнорировать" msgid "" "Experimental feature: Retracting and cutting off the filament at a greater " "distance during filament changes to minimize flush. Although it can notably " -"reduce flush, it may also elevate the risk of nozzle clogs or other " -"printing complications." +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications." msgstr "" "Экспериментальная функция. Втягивание и обрезка пластиковой нити на большем " "расстоянии во время её замены для минимизации очистки. Хотя это значительно " @@ -7948,7 +7963,7 @@ msgid "" "Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "При записи таймлапса без видимости головы рекомендуется добавить «Черновая " -"башня таймлапса».\n" +"башня таймлапса». \n" "Щёлкните правой кнопкой мыши на пустом месте стола и выберите «Добавить " "примитив» -> «Черновая башня таймлапса»." @@ -8141,15 +8156,15 @@ msgid_plural "" "estimation." msgstr[0] "" "Следующая строка %s содержит зарезервированные ключевые слова.\n" -"Удалите их, иначе может возникнуть проблемы при визуализации G-кода и оценка " +"Удалите их, иначе могут возникнуть проблемы при визуализации G-кода и оценка " "времени печати." msgstr[1] "" "Следующие строки %s содержат зарезервированные ключевые слова.\n" -"Удалите их, иначе может возникнуть проблемы при визуализации G-кода и оценка " +"Удалите их, иначе могут возникнуть проблемы при визуализации G-кода и оценка " "времени печати." msgstr[2] "" "Следующие строки %s содержат зарезервированные ключевые слова.\n" -"Удалите их, иначе может возникнуть проблемы при визуализации G-кода и оценка " +"Удалите их, иначе могут возникнуть проблемы при визуализации G-кода и оценка " "времени печати." msgid "Reserved keywords found" @@ -8194,8 +8209,9 @@ msgid "" "Bed temperature when the Cool Plate Supertack is installed. A value of 0 " "means the filament does not support printing on the Cool Plate SuperTack." msgstr "" -"Температура стола при установленной не нагреваемой пластине. 0 означает, что " -"пластиковая нить не поддерживает печать на этой печатной пластине." +"Температура стола при установленной не нагреваемой пластине Supertack. 0 " +"означает, что пластиковая нить не поддерживает печать на этой печатной " +"пластине." msgid "Cool Plate" msgstr "Не нагреваемая пластина" @@ -8214,8 +8230,8 @@ msgid "" "Bed temperature when the Textured Cool Plate is installed. A value of 0 " "means the filament does not support printing on the Textured Cool Plate." msgstr "" -"Температура стола при установленной не нагреваемой текстурированной пластине " -"Bambu. 0 означает, что пластиковая нить не поддерживает печать на этой " +"Температура стола при установленной не нагреваемой текстурированной " +"пластине. 0 означает, что пластиковая нить не поддерживает печать на этой " "печатной пластине." msgid "Engineering Plate" @@ -8248,12 +8264,13 @@ msgid "" "Bed temperature when the Textured PEI Plate is installed. A value of 0 means " "the filament does not support printing on the Textured PEI Plate." msgstr "" -"Температура стола при установленной текстурированной пластите с PEI " -"покрытием. 0 означает, что пластиковая нить не поддерживает печать на этой " -"печатной пластине." +"Температура стола при установленной текстурированной PEI пластите. 0 " +"означает, что пластиковая нить не поддерживает печать на этой печатной " +"пластине." +# ??? объёмной скорости msgid "Volumetric speed limitation" -msgstr "Ограничение объёмной скорости" +msgstr "Ограничение объёмного расхода" msgid "Cooling" msgstr "Охлаждение" @@ -8273,7 +8290,7 @@ msgid "" "shorter than threshold, fan speed is interpolated between the minimum and " "maximum fan speed according to layer printing time" msgstr "" -"Вентилятор для охлаждения моделей начнет работать с минимальной скоростью, " +"Вентилятор для охлаждения моделей начнёт работать с минимальной скоростью, " "когда расчётное время печати слоя не превышает заданное время печати слоя. " "Если время печати слоя меньше порогового значения, скорость вентилятора " "интерполируется между минимальной и максимальной скоростью вентилятора в " @@ -8469,14 +8486,15 @@ msgstr "" "профилей прутка -%d шт. и профилей процесса печати - %d шт.\n" "При удалении принтера эти профили так же будут удалены." +# ??? Профили, наследуемые от других профилей, не могут быть удалены. msgid "Presets inherited by other presets cannot be deleted!" -msgstr "Профили на которых основаны другие профили не могут быть удалены!" +msgstr "Профили на которых основаны другие профили не могут быть удалены." msgid "The following presets inherit this preset." msgid_plural "The following preset inherits this preset." -msgstr[0] "Профиль указанный ниже, наследуется от текущего профиля." -msgstr[1] "Профили указанные ниже, наследуются от текущего профиля." -msgstr[2] "Профили указанные ниже, наследуются от текущего профиля." +msgstr[0] "Профиль, указанный ниже, наследуется от текущего профиля." +msgstr[1] "Профили, указанные ниже, наследуются от текущего профиля." +msgstr[2] "Профили, указанные ниже, наследуются от текущего профиля." #. TRN Remove/Delete #, boost-format @@ -8494,7 +8512,7 @@ msgid "" "If the preset corresponds to a filament currently in use on your printer, " "please reset the filament information for that slot." msgstr "" -"Вы уверены, что хотите удалить выбранный профиль?\n" +"Вы уверены, что хотите удалить выбранный профиль? \n" "Если этот профиль используется в данный момент в вашем принтере, пожалуйста, " "сбросьте информацию о прутке для этого слота." @@ -8502,9 +8520,10 @@ msgstr "" msgid "Are you sure to %1% the selected preset?" msgstr "%1% выбранный профиль?" -# в Обеспечивать верт. толщину оболочки +# в Сохранение толщины вертикальной оболочки. +# было Везде, но из-за условия совместимости изменено.... как тогда быть? msgid "All" -msgstr "Везде" +msgstr "Все" msgid "Set" msgstr "Выбор" @@ -8801,7 +8820,7 @@ msgid "" "Warning: The count of newly added and \n" "current extruders exceeds 16." msgstr "" -"Предупреждение: количество новых \n" +"Предупреждение: количество новых\n" "и текущих экструдеров превышает 16." msgid "Ramming customization" @@ -9002,16 +9021,16 @@ msgid "Shift+R" msgstr "Shift+R" msgid "" -"Auto orients selected objects or all objects. If there are selected " -"objects, it just orients the selected ones. Otherwise, it will orient " -"all objects in the current project." +"Auto orients selected objects or all objects. If there are selected objects, " +"it just orients the selected ones. Otherwise, it will orient all objects in " +"the current project." msgstr "" "Автоориентация выбранных или всех моделей. Если выбраны отдельные модели, " "ориентация будет применена только к ним; в противном случае ко всем моделям " -"в текущем проекте." +"на текущем столе." msgid "Auto orients all objects on the active plate." -msgstr "Автоориентация ко всем моделям на текущем столе." +msgstr "Автоориентация всех моделей на текущей печатной пластине." msgid "Shift+Tab" msgstr "Shift+Tab" @@ -9125,7 +9144,7 @@ msgid "Gizmo place face on bed" msgstr "Гизмо поверхностью на стол" msgid "Gizmo mesh boolean" -msgstr "Гизмо Булевы операции" +msgstr "Гизмо булевы операции" msgid "Gizmo SLA support points" msgstr "Гизмо точки SLA поддержки" @@ -9140,10 +9159,10 @@ msgid "Gizmo measure" msgstr "Гизмо измерения" msgid "Gizmo assemble" -msgstr "Гизмо собрать" +msgstr "Гизмо объединения в сборку" msgid "Gizmo brim ears" -msgstr "Гизмо уши границы" +msgstr "Гизмо каймы «мышиные уши»" msgid "Zoom in" msgstr "Приблизить" @@ -9294,9 +9313,8 @@ msgstr "Загрузить" msgid "Filament Loaded, Resume" msgstr "Пруток загружен, Повторить" -# ??? Просмотр камеры, Посмотреть, Открыть прямую трансляцию, Открыть камеру msgid "View Liveview" -msgstr "Открыть видеотрансляцию" +msgstr "Посмотреть камеру" msgid "Confirm and Update Nozzle" msgstr "Подтвердить и обновить сопло" @@ -9314,8 +9332,8 @@ msgid "" "Step 2. If the IP and Access Code below are different from the actual values " "on your printer, please correct them." msgstr "" -"2) Если указанный ниже IP-адрес и код доступа отличаются от фактических " -"значений на вашем принтере, пожалуйста, исправьте их." +"2) Если указанные ниже IP-адрес и код доступа отличаются от фактических " +"значений вашего принтера, исправьте их." msgid "" "Step 3. Please obtain the device SN from the printer side; it is usually " @@ -9400,7 +9418,7 @@ msgid "Updating" msgstr "Обновление" msgid "Update failed" -msgstr "Сбой при обновлении" +msgstr "Сбой обновления" msgid "Update successful" msgstr "Обновление успешно выполнено" @@ -9536,6 +9554,7 @@ msgid "" msgstr "" "Не удалось сгенерировать G-код из-за недопустимого пользовательского G-" "кода.\n" +"\n" msgid "Please check the custom G-code or use the default custom G-code." msgstr "" @@ -9585,7 +9604,7 @@ msgstr "Множитель" #, boost-format msgid "Failed to calculate line width of %1%. Cannot get value of \"%2%\" " msgstr "" -"Не удалось вычислить ширину линии %1%. Не удается получить значение \"%2%\". " +"Не удалось вычислить ширину линии %1%. Не удаётся получить значение \"%2%\". " msgid "" "Invalid spacing supplied to Flow::with_spacing(), check your layer height " @@ -9619,7 +9638,7 @@ msgid "not a ZIP archive" msgstr "это не ZIP архив" msgid "invalid header or corrupted" -msgstr "неверный или поврежденный заголовок" +msgstr "неверный или повреждённый заголовок" msgid "unsupported multidisk" msgstr "неподдерживаемый многотомный архив" @@ -9926,7 +9945,7 @@ msgstr "" "Пожалуйста, включите генерацию поддержки в настройках слайсера." msgid "Layer height cannot exceed nozzle diameter." -msgstr "Высота слоя не может быть больше диаметра сопла" +msgstr "Высота слоя не может быть больше диаметра сопла." msgid "" "Relative extruder addressing requires resetting the extruder position at " @@ -10130,7 +10149,7 @@ msgid "" "Specify the URL of your device user interface if it's not same as print_host." msgstr "" "Укажите URL-адрес пользовательского интерфейса вашего устройства, если он не " -"совпадает с print_host" +"совпадает с print_host." msgid "API Key / Password" msgstr "API-ключ / Пароль" @@ -10143,7 +10162,7 @@ msgstr "" "содержать API ключ или пароль, необходимые для проверки подлинности." msgid "Name of the printer." -msgstr "Название принтера" +msgstr "Название принтера." msgid "HTTPS CA File" msgstr "Файл корневого сертификата HTTPS" @@ -10176,7 +10195,7 @@ msgstr "" "самоподписанных сертификатов в случае сбоя подключения." msgid "Names of presets related to the physical printer." -msgstr "Имена профилей, связанных с физическим принтером" +msgstr "Имена профилей, связанных с физическим принтером." msgid "Authorization Type" msgstr "Тип авторизации" @@ -10193,8 +10212,8 @@ msgstr "Избегать пересечения периметров" msgid "" "Detour to avoid traveling across walls, which may cause blobs on the surface." msgstr "" -"Объезжать и избегать пересечения периметров для предотвращения образования " -"дефектов на поверхности модели." +"Избегать пересечения периметров для предотвращения образования дефектов на " +"поверхности модели." msgid "Avoid crossing walls - Max detour length" msgstr "Максимальная длина обхода" @@ -10304,7 +10323,7 @@ msgstr "" "поддерживает печать на этой печатной пластине." msgid "Bed types supported by the printer." -msgstr "Типы столов, поддерживаемые принтером" +msgstr "Типы столов, поддерживаемые принтером." msgid "Smooth Cool Plate" msgstr "Не нагреваемая гладкая пластина Bambu" @@ -10364,7 +10383,6 @@ msgstr "" msgid "Apply gap fill" msgstr "Заполнять щели" -# ??? msgid "" "Enables gap fill for the selected solid surfaces. The minimum gap length " "that will be filled can be controlled from the filter out tiny gaps option " @@ -10406,7 +10424,7 @@ msgstr "" "Если хотите чтобы все заполнения щелей, в том числе сгенерированные " "классическим генератором периметров, были удалены (т.е. не печатались), " "установите высокое значение параметра «Игнорировать небольшие щели», " -"например, 999999.\n" +"например, 999999. \n" "\n" "Однако это не рекомендуется, так как заполнение щелей между периметрами " "делает модель прочнее. Если слишком много заполнений появляется между " @@ -10462,7 +10480,7 @@ msgstr "" "вентилятора»." msgid "Overhang cooling activation threshold" -msgstr "Порог включения обдува на нависаниях" +msgstr "Порог нависания для включения обдува" # ??? скорость вентилятора для нависающих элементов #, no-c-format, no-boost-format @@ -10481,7 +10499,7 @@ msgstr "" "будет работать для всех внешних стенок, независимо от угла нависания." msgid "External bridge infill direction" -msgstr "Угол печати внутренних мостов" +msgstr "Угол печати внешних мостов" #, no-c-format, no-boost-format msgid "" @@ -10494,7 +10512,7 @@ msgstr "" "угол для внешних мостов. Для нулевого угла установите 180°." msgid "Internal bridge infill direction" -msgstr "Угол печати внешних мостов" +msgstr "Угол печати внутренних мостов" msgid "" "Internal bridging angle override. If left to zero, the bridging angle will " @@ -10764,7 +10782,7 @@ msgid "" "3. Sacrificial Layer: A full sacrificial bridge layer is created" msgstr "" "Эта опция создаёт мосты для отверстий с зенковкой, позволяя печатать их без " -"поддержки.\n" +"поддержки. \n" "\n" "Опции:\n" "1. Нет (т.е. отключено)\n" @@ -10798,7 +10816,7 @@ msgstr "" "периметра.\n" "При нуле разворот будет на каждом чётном слое, независимо от величина " "свеса.\n" -"Если «Определять нависающие периметры» не включено, этот параметр " +"Если «Обнаруживать нависающие периметры» не включено, этот параметр " "игнорируется, и разворот происходит на каждом чётном слое без исключений." msgid "Classic mode" @@ -10816,7 +10834,6 @@ msgstr "Включение динамического управления ск msgid "Slow down for curled perimeters" msgstr "Замедляться на изогнутых периметрах" -# ??? , скорость печати нависаний будет 100%-ая. #, no-c-format, no-boost-format msgid "" "Enable this option to slow down printing in areas where perimeters may have " @@ -11022,7 +11039,7 @@ msgstr "" "улучшить качество охлаждения острых концов и мелких деталей." msgid "Normal printing" -msgstr "Ускорение по умолчанию" +msgstr "Ускорение печати по умолчанию" msgid "" "The default acceleration of both normal printing and travel except initial " @@ -11064,7 +11081,7 @@ msgstr "" "скорость в пользовательском G-коде прутка." msgid "Speed of exhaust fan after printing completes." -msgstr "Скорость вытяжного вентилятора после завершения печати" +msgstr "Скорость вытяжного вентилятора после завершения печати." msgid "No cooling for the first" msgstr "Не включать вентилятор на первых" @@ -11193,7 +11210,7 @@ msgstr "Для всех мостов" msgid "Filter out small internal bridges" msgstr "Отфильтровать небольшие внутренние мосты (beta)" -#, fuzzy +# ???? msgid "" "This option can help reduce pillowing on top surfaces in heavily slanted or " "curved models.\n" @@ -11219,6 +11236,7 @@ msgid "" msgstr "" "Эта опция может помочь уменьшить образование эффекта «дырявой подушки» на " "верхних сильно наклонных поверхностях или изогнутых моделях.\n" +"\n" "По умолчанию, маленькие внутренние мосты отфильтровываются, а внутреннее " "сплошное заполнение печатается непосредственно поверх разреженного " "заполнения. В большинстве случаев это хорошо работает, ускоряя печать без " @@ -11226,13 +11244,17 @@ msgstr "" "поверхностях или изогнутых моделях, особенно при низкой плотности " "заполнения, это может привести к скручиванию неподдерживаемого сплошного " "заполнения и образованию эффекта «дырявой подушки».\n" +"\n" "Отключение позволит печатать слой внутреннего моста над слабо поддерживаемым " "внутренним сплошным заполнением. Приведённые ниже параметры управляют " "степенью фильтрации, т.е. количеством создаваемых внутренних мостов.\n" +"\n" "Фильтрация включена по умолчанию и хорошо работает в большинстве случаев.\n" +"\n" "Ограниченная фильтрация - создаёт внутренние мосты на сильно наклонных " "поверхностях, при этом избегая создания ненужных внутренних мостов. Это " "хорошо работает на большинстве сложных моделях.\n" +"\n" "Без фильтрации - мосты создаются над каждым потенциально внутреннем " "нависании. Этот вариант полезен для моделей с сильно наклонной верхней " "поверхностью. Однако в большинстве случаев этот вариант создаёт слишком " @@ -11269,8 +11291,8 @@ msgid "Between Object G-code" msgstr "G-код между моделями" msgid "" -"Insert G-code between objects. This parameter will only come into effect when " -"you print your models object by object." +"Insert G-code between objects. This parameter will only come into effect " +"when you print your models object by object." msgstr "" "Команды в G-коде, которые выполняются каждый раз перед сменой модели. " "Действует только при печати моделей «По очереди»." @@ -11280,10 +11302,10 @@ msgstr "" "Команды в G-коде, которые выполняются при окончании печатью этой пластиковой " "нитью." -# ??? Контроль толщины вертикальной оболочки msgid "Ensure vertical shell thickness" msgstr "Сохранение толщины вертикальной оболочки" +# было Везде, но из-за условия совместимости изменено.... как тогда быть? msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " "thickness (top+bottom solid layers)\n" @@ -11302,9 +11324,9 @@ msgstr "" "Только критические - избегать добавления сплошного заполнения для стен.\n" "Умеренное - добавление сплошного заполнения только для сильно наклонных " "поверхностей.\n" -"Везде - добавление сплошного заполнения для всех подходящих наклонных " -"поверхностей.\n" -"Значение по умолчанию - Везде." +"Все, т.е. везде - добавление сплошного заполнения для всех подходящих " +"наклонных поверхностей.\n" +"Значение по умолчанию - Все." msgid "Critical Only" msgstr "Только критические" @@ -11615,7 +11637,7 @@ msgid "Extruder offset" msgstr "Смещение координат экструдера" msgid "Flow ratio" -msgstr "Коэффициент потока модели" +msgstr "Коэф. потока модели" msgid "" "The material may have volumetric change after switching between molten and " @@ -11629,7 +11651,6 @@ msgstr "" "При небольшом переливе или недоливе на поверхности, корректировка этого " "параметра поможет получить хорошую гладкую поверхность." -# ???1 Конечная величина потока модели - это введённое здесь значение, умноженное на коэффициент потока прутка. msgid "" "The material may have volumetric change after switching between molten and " "crystalline states. This setting changes all extrusion flow of this filament " @@ -11742,7 +11763,7 @@ msgid "" msgstr "" "Впишите через запятую наборы значений Pressure advance, объёмных скоростей " "потока (далее просто поток) и ускорений, при которых они были измерены. По " -"одному набору значений в строке. Например\n" +"одному набору значений в строке. Например:\n" "0.04,3.96,3000\n" "0.033,3.96,10000\n" "0.029,7.91,3000\n" @@ -11789,10 +11810,10 @@ msgstr "Коэф. Pressure advance для мостов" msgid "" "Pressure advance value for bridges. Set to 0 to disable.\n" "\n" -"A lower PA value when printing bridges helps reduce the appearance of " -"slight under extrusion immediately after bridges. This is caused by the " -"pressure drop in the nozzle when printing in the air and a lower PA helps " -"counteract this." +"A lower PA value when printing bridges helps reduce the appearance of slight " +"under extrusion immediately after bridges. This is caused by the pressure " +"drop in the nozzle when printing in the air and a lower PA helps counteract " +"this." msgstr "" "Коэффициент Pressure advance для мостов. Установите 0 для отключения.\n" "\n" @@ -11837,11 +11858,12 @@ msgstr "" "Если включено, то скорость печати внешних периметров не будет снижаться, " "чтобы уложиться в минимальное время печати слоя. Это особенно полезно при " "следующих сценариях:\n" -"1. Чтобы при печати глянцевыми материалами избежать изменения блеска\n" +"\n" +"1. Чтобы при печати глянцевыми материалами избежать изменения блеска.\n" "2. Чтобы избежать появления небольших дефектов, которые возникают при " -"изменении скорости и выглядят как горизонтальные полосы\n" +"изменении скорости и выглядят как горизонтальные полосы.\n" "3. Чтобы избежать печати на скоростях, при которых на внешних периметрах " -"возникают вертикальные артефакты (VFA)" +"возникают вертикальные артефакты (VFA)." msgid "Layer time" msgstr "Время слоя" @@ -11860,7 +11882,7 @@ msgid "Default color" msgstr "Цвет по умолчанию" msgid "Default filament color" -msgstr "Цвет пластиковой нити по умолчанию" +msgstr "Цвет материла по умолчанию" msgid "Filament notes" msgstr "Примечание о прутке" @@ -11935,7 +11957,7 @@ msgid "" "important and should be accurate." msgstr "" "Диаметр пластиковой нити используется для расчёта экструзии, поэтому он " -"важен и должен быть точным" +"важен и должен быть точным." msgid "Pellet flow coefficient" msgstr "Коэф. потока гранул" @@ -12026,9 +12048,9 @@ msgid "" "changes with flexible materials that may need more time to shrink to " "original dimensions." msgstr "" -"Время ожидания после выгрузки прутка. Это может помочь вам легко сменить " -"сопло при печати гибкими материалами, которым требуется больше времени, " -"чтобы вернуться к своим первоначальным размерам." +"Время ожидания после выгрузки прутка. Может помочь добиться стабильной смены " +"гибких материалов, которым требуется больше времени для того, чтобы принять " +"положение покоя." msgid "Number of cooling moves" msgstr "Количество охлаждающих движений" @@ -12050,14 +12072,15 @@ msgstr "Скорость, используемая для утрамбовки." msgid "Stamping distance measured from the center of the cooling tube" msgstr "Расстояние утрамбовки" +# ??? msgid "" "If set to non-zero value, filament is moved toward the nozzle between the " "individual cooling moves (\"stamping\"). This option configures how long " "this movement should be before the filament is retracted again." msgstr "" -"Если задано ненулевое значение, пруток перемещается к соплу между отдельными " -"охлаждающими движениями (\"утрамбовка\"). Эта опция определяет, как долго " -"должно продолжаться это движение, прежде чем пруток снова будет втянут." +"Если задано ненулевое значение, пруток будет перемещается к соплу между " +"отдельными охлаждающими движениями - утрамбовкой. Эта опция определяет длину " +"это движения, прежде чем пруток снова будет втянут." msgid "Speed of the first cooling move" msgstr "Скорость первого охлаждающего движения" @@ -12154,7 +12177,7 @@ msgstr "Поддержка" msgid "" "Support material is commonly used to print supports and support interfaces." msgstr "" -"«Материал для поддержки» обычно используется для печати поддержки и " +"Материал для поддержки» обычно используется для печати поддержки и " "связующего слоя поддержки." msgid "Softening temperature" @@ -12268,7 +12291,7 @@ msgid "Lightning" msgstr "Молния" msgid "Cross Hatch" -msgstr "Перекрестная решётка" +msgstr "Перекрёстная решётка" msgid "Quarter Cubic" msgstr "Четверть куба" @@ -12379,8 +12402,8 @@ msgid "mm/s² or %" msgstr "мм/с² или %" msgid "" -"Acceleration of sparse infill. If the value is expressed as a percentage (e." -"g. 100%), it will be calculated based on the default acceleration." +"Acceleration of sparse infill. If the value is expressed as a percentage " +"(e.g. 100%), it will be calculated based on the default acceleration." msgstr "" "Ускорение на разреженном заполнении. Если задано в процентах, то значение " "вычисляться относительно ускорения по умолчанию." @@ -12413,7 +12436,7 @@ msgstr "" # ??? Ускорение к замедлению, Ускорение торможения, Скорость торможения, Скорость торможения перед поворотом, Соотношение ускорения к замедлению msgid "accel_to_decel" -msgstr "Ограничение ускорение зигзагов" +msgstr "Ограничение ускорения зигзагов" #, c-format, boost-format msgid "" @@ -12521,7 +12544,7 @@ msgstr "слой" msgid "Support interface fan speed" msgstr "Скорость вентилятора на связующем слое" -# ????? Установите значение -1, чтобы запретить переопределять этот параметр.???? +# ????? Установите значение -1, чтобы запретить переопределять этот параметр. msgid "" "This part cooling fan speed is applied when printing support interfaces. " "Setting this parameter to a higher than regular speed reduces the layer " @@ -12540,7 +12563,7 @@ msgstr "" "перекрывает эту настройку." msgid "Internal bridges fan speed" -msgstr "Скорость вентилятора для мостов" +msgstr "Скорость вентилятора для внутренних мостов" msgid "" "The part cooling fan speed used for all internal bridges. Set to -1 to use " @@ -12561,9 +12584,9 @@ msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position." msgstr "" -"Случайное дрожание сопла при печати внешнего периметра для создания эффекта " -"шероховатой поверхности. Эта настройка определяет положение нечёткой " -"оболочки." +"Случайное дрожание сопла при печати периметра для создания эффекта " +"шероховатой поверхности. Эта настройка определяет, где будет применяться " +"нечёткая оболочка." msgid "Contour" msgstr "Внешний периметр" @@ -12571,6 +12594,7 @@ msgstr "Внешний периметр" msgid "Contour and hole" msgstr "Внешний периметр и отверстия" +# на всех внутренних и внешних периметрах, На всех периметрах msgid "All walls" msgstr "Все периметры" @@ -12606,10 +12630,6 @@ msgstr "Применять ли нечёткую оболочку к перво msgid "Fuzzy skin noise type" msgstr "Тип нечёткой оболочки" -# Перлин -# Волны -# Гребни -# Ячейки msgid "" "Noise type to use for fuzzy skin generation:\n" "Classic: Classic uniform random noise.\n" @@ -12720,7 +12740,7 @@ msgid "" "layers. Note that this is an experimental parameter." msgstr "" "Включите этот параметр, чтобы получить точную высоту модели по оси Z после " -"нарезки. Точная высота модели будет получена путем точной настройки высоты " +"нарезки. Точная высота модели будет получена путём точной настройки высоты " "последних нескольких слоёв." msgid "Arc fitting" @@ -12739,7 +12759,7 @@ msgstr "" "Включите, если хотите чтобы программа пыталась заменить последовательности " "из коротких прямолинейных участков дугами (используя команды G2 и G3). " "Функция должна поддерживаться прошивкой принтера. Значение допуска " -"траектории такое же как разрешение G-кода.\n" +"траектории такое же как разрешение G-кода. \n" "\n" "Примечание: для устройств с прошивкой Klipper рекомендуется отключить эту " "опцию. Klipper не получает преимуществ от этой опции, поскольку прошивка " @@ -12803,7 +12823,7 @@ msgid "Printer structure" msgstr "Кинематика принтера" msgid "The physical arrangement and components of a printing device." -msgstr "Конструкция физического принтера" +msgstr "Конструкция физического принтера." msgid "CoreXY" msgstr "CoreXY" @@ -12830,7 +12850,7 @@ msgid "" "command: M106 P2 S(0-255)." msgstr "" "Если в принтере имеет вспомогательный вентилятор для охлаждения моделей " -"(обычно это боковой вентилятор), можете включить эту опцию.\n" +"(обычно это боковой вентилятор), можете включить эту опцию. \n" "G-код команда: M106 P2 S(0-255)." msgid "" @@ -12840,8 +12860,8 @@ msgid "" "unsupported).\n" "It won't move fan commands from custom G-code (they act as a sort of " "'barrier').\n" -"It won't move fan commands into the start G-code if the 'only custom start " -"G-code' is activated.\n" +"It won't move fan commands into the start G-code if the 'only custom start G-" +"code' is activated.\n" "Use 0 to deactivate." msgstr "" "Запуск вентилятора на указанное количество секунд раньше целевого времени " @@ -12994,7 +13014,7 @@ msgid "" "Use either absolute mm values (eg. 0.32mm for a 0.4mm nozzle) or % values " "(eg 80%). This value must not be larger than the nozzle diameter." msgstr "" -"Максимальная высота слоя для комбинированного разреженного заполнения.\n" +"Максимальная высота слоя для комбинированного разреженного заполнения. \n" "\n" "Установите 0 или 100%, чтобы использовать значение диаметра сопла (для " "максимального сокращения времени печати), или значение ~80% для увеличения " @@ -13051,13 +13071,13 @@ msgstr "" "является хорошей отправной точкой, минимизирующей появление таких отверстий." msgid "Speed of internal sparse infill." -msgstr "Скорость заполнения" +msgstr "Скорость печати разреженного заполнения." msgid "Inherits profile" msgstr "Наследует профиль" msgid "Name of parent profile." -msgstr "Имя родительского профиля" +msgstr "Имя родительского профиля." msgid "Interface shells" msgstr "Связующие оболочки" @@ -13182,7 +13202,7 @@ msgid "The pattern that will be used when ironing." msgstr "Шаблон по которому будет производиться разглаживание." msgid "Ironing flow" -msgstr "Поток" +msgstr "Поток разглаживания" msgid "" "The amount of material to extrude during ironing. Relative to flow of normal " @@ -13212,7 +13232,7 @@ msgid "Ironing speed" msgstr "Скорость разглаживания" msgid "Print speed of ironing lines." -msgstr "Скорость разглаживания" +msgstr "Скорость разглаживания." msgid "Ironing angle" msgstr "Угол разглаживания" @@ -13400,7 +13420,7 @@ msgstr "" "для охлаждения моделей." msgid "Max" -msgstr "Максимальная" +msgstr "Макс." msgid "" "The highest printable layer height for the extruder. Used to limit the " @@ -13490,12 +13510,12 @@ msgid "" msgstr "" "Меньшее значение приводит к более плавному изменению скорости экструзии. " "Однако это приводит к значительному увеличению размера G-код файла и " -"увеличению количества инструкций для обработки принтером.\n" +"увеличению количества инструкций для обработки принтером. \n" "\n" "Значение по умолчанию, равное 3, хорошо подходит для большинства случаев. " "Если принтер печатает с мини-фризами, увеличьте это значение, чтобы " "уменьшить количество выполняемых изменений.\n" -"Допустимые значения: 1–5." +"Допустимые значения: 0.5-5." # ??? msgid "Apply only on external features" @@ -13508,7 +13528,7 @@ msgid "" "not be visible to the user." msgstr "" "Сглаживание скорости экструзии будет применяться только к внешним периметрам " -"и нависаниям.\n" +"и нависаниям. \n" "Это помогает уменьшить количество артефактов, вызванные резкими перепадами " "скорости на видимых внешних участках, без влияния на скорость печати " "внутренних элементов, которые не видны пользователю." @@ -13528,11 +13548,11 @@ msgstr "" "исключением первых нескольких слоёв, которые обычно настроены на работу без " "охлаждения.\n" "Пожалуйста, включите вспомогательный вентилятор для охлаждения моделей " -"(auxiliary_fan) в настройках принтера, чтобы использовать эту функцию.\n" +"(auxiliary_fan) в настройках принтера, чтобы использовать эту функцию. \n" "G-код команда: M106 P2 S(0-255)." msgid "Min" -msgstr "Минимальная" +msgstr "Мин." msgid "" "The lowest printable layer height for the extruder. Used to limit the " @@ -13699,7 +13719,7 @@ msgid "mm²" msgstr "мм²" msgid "Detect overhang wall" -msgstr "Определять нависающие периметры" +msgstr "Обнаруживать нависающие периметры" #, c-format, boost-format msgid "" @@ -13805,7 +13825,7 @@ msgstr "Расширение первого слоя" msgid "Expand the first raft or support layer to improve bed plate adhesion." msgstr "" "Расширение первого слоя подложки или поддержки в плоскости XY для улучшения " -"адгезии при печати материалами склонными к отлипанию и закручиванию." +"адгезии при печати материалами, склонными к отлипанию и закручиванию." msgid "Raft layers" msgstr "Слоёв в подложке" @@ -13879,7 +13899,7 @@ msgstr "" "избежать его течи при длительном перемещении. 0 - отключение отката." msgid "Long retraction when cut (beta)" -msgstr "Длинное втягивания перед отрезанием прутка (beta)" +msgstr "Длинное втягивание перед отрезанием прутка (beta)" msgid "" "Experimental feature: Retracting and cutting off the filament at a longer " @@ -14036,7 +14056,6 @@ msgstr "" "Скорость возврата материала при откате. Если оставить 0, будет " "использоваться та же скорость что и при извлечении." -# ??? Откат из прошивки msgid "Use firmware retraction" msgstr "Откат на уровне прошивки" @@ -14160,13 +14179,13 @@ msgstr "Скорость клиновидного шва" msgid "" "This option sets the printing speed for scarf joints. It is recommended to " -"print scarf joints at a slow speed (less than 100 mm/s). It's also " -"advisable to enable 'Extrusion rate smoothing' if the set speed varies " -"significantly from the speed of the outer or inner walls. If the speed " -"specified here is higher than the speed of the outer or inner walls, the " -"printer will default to the slower of the two speeds. When specified as a " -"percentage (e.g., 80%), the speed is calculated based on the respective " -"outer or inner wall speed. The default value is set to 100%." +"print scarf joints at a slow speed (less than 100 mm/s). It's also advisable " +"to enable 'Extrusion rate smoothing' if the set speed varies significantly " +"from the speed of the outer or inner walls. If the speed specified here is " +"higher than the speed of the outer or inner walls, the printer will default " +"to the slower of the two speeds. When specified as a percentage (e.g., 80%), " +"the speed is calculated based on the respective outer or inner wall speed. " +"The default value is set to 100%." msgstr "" "Этот параметр задает скорость печати клиновидного шва. Рекомендуется " "печатать его на низкой скорости (менее 100 мм/с). Также рекомендуется " @@ -14228,9 +14247,10 @@ msgid "Role base wipe speed" msgstr "Скорость очистки по типу экструзии" msgid "" -"The wipe speed is determined by the speed of the current extrusion role. e.g. " -"if a wipe action is executed immediately following an outer wall extrusion, " -"the speed of the outer wall extrusion will be utilized for the wipe action." +"The wipe speed is determined by the speed of the current extrusion role. " +"e.g. if a wipe action is executed immediately following an outer wall " +"extrusion, the speed of the outer wall extrusion will be utilized for the " +"wipe action." msgstr "" "Скорость очистки будет определяться скоростью текущего типа экструзии, т.е " "если операция очистки выполняется сразу после экструзии внешнего периметра, " @@ -14424,7 +14444,7 @@ msgid "" "computed over the nozzle diameter." msgstr "" "Ширина экструзии для внутреннего сплошного заполнения. Если задано в " -"процентах, то значение вычисляться относительно диаметра сопла." +"процентах, то значение вычисляется относительно диаметра сопла." msgid "Speed of internal solid infill, not the top and bottom surface." msgstr "" @@ -14460,7 +14480,7 @@ msgid "" "expressed as a %, it will be computed over nozzle diameter." msgstr "" "Максимальное расстояние перемещения точек по XY для достижения плавной " -"спирали. Если задано в процентах, то значение вычисляться относительно " +"спирали. Если задано в процентах, то значение вычисляется относительно " "диаметра сопла." # ??? Коэфф. потока первого витка @@ -14476,7 +14496,7 @@ msgid "" msgstr "" "Обычно при печати спиральной вазы поток первого витка увеличивается от 0% до " "100%, что в некоторых случаях может привести к недоэкструзии в начале " -"спирали.\n" +"спирали. \n" "Этот коэффициент позволяет изменить поток в начале спиральной вазы, чтобы " "избежать подобных проблем." @@ -14493,7 +14513,7 @@ msgid "" msgstr "" "Обычно при печати спиральной вазы поток последнего витка уменьшается от 100% " "до 0%, что в некоторых случаях может привести к недоэкструзии в конце " -"спирали.\n" +"спирали. \n" "Этот коэффициент позволяет изменить поток в конце спиральной вазы, чтобы " "избежать подобных проблем." @@ -14513,7 +14533,7 @@ msgstr "" "ускоренное видео. Если включён плавный режим, то после печати каждого слоя " "головка перемещается к лотку для удаления излишков, а уже затем делается " "снимок. Очистка сопла на черновой башне обязательна, т.к. при плавном режиме " -"возможно вытекание материалы из сопла когда делается снимок." +"возможно вытекание материала из сопла когда делается снимок." msgid "Traditional" msgstr "Обычный" @@ -14524,12 +14544,13 @@ msgstr "Разница температур" #. TRN PrintSettings : "Ooze prevention" > "Temperature variation" msgid "" "Temperature difference to be applied when an extruder is not active. The " -"value is not used when 'idle_temperature' in filament settings is set to " -"non-zero value." +"value is not used when 'idle_temperature' in filament settings is set to non-" +"zero value." msgstr "" -"Задаёт, на сколько следует понижать температуру хотэнда, когда экструдер не " -"активен. Значение не используется, если в настройках прутка задана " -"«Температура ожидания», отличная от нуля." +"Разница температур, которая будет применяться, когда экструдер не активен. " +"Значение не используется, если для параметра «Температура ожидания» " +"('idle_temperature') в настройках пластиковой нити установлено ненулевое " +"значение." msgid "Preheat time" msgstr "Время преднагрева" @@ -14549,8 +14570,8 @@ msgid "Preheat steps" msgstr "Шагов преднагрева" msgid "" -"Insert multiple preheat commands (e.g. M104.1). Only useful for Prusa XL. For " -"other printers, please set it to 1." +"Insert multiple preheat commands (e.g. M104.1). Only useful for Prusa XL. " +"For other printers, please set it to 1." msgstr "" "Задание нескольких команд преднагрева (например, M104.1). Полезно только для " "Prusa XL. Для других принтеров установите значение 1." @@ -14598,7 +14619,7 @@ msgid "Purge remaining filament into prime tower." msgstr "Очистка сопла от остатков материала в черновую башню." msgid "Enable filament ramming." -msgstr "Включить рэмминг прутка" +msgstr "Включить рэмминг прутка." msgid "No sparse layers (beta)" msgstr "Без разреженных слоёв (beta)" @@ -14753,8 +14774,8 @@ msgstr "Игнорировать небольшие нависания" msgid "Remove small overhangs that possibly need no supports." msgstr "" -"Не печатать поддержку под небольшими нависаниями, которые, как вам казалось, " -"нуждаются в них." +"Не печатать поддержку для небольших нависаний, которые могут обойтись без " +"неё." msgid "Top Z distance" msgstr "Зазор поддержки сверху" @@ -14836,9 +14857,7 @@ msgid "Top interface spacing" msgstr "Расстояние между линиями связующего слоя сверху" msgid "Spacing of interface lines. Zero means solid interface." -msgstr "" -"Расстояние между линиями связующего слоя сверху. Установите 0, чтобы " -"получить сплошной слой." +msgstr "Расстояние между линиями связующего слоя сверху." msgid "Bottom interface spacing" msgstr "Расстояние между линиями связующего слоя снизу" @@ -14906,7 +14925,7 @@ msgid "" msgstr "" "Стиль и форма создаваемой поддержки.\n" "\n" -"Стиль «Сетка» создаёт более устойчивые опоры (по умолчанию). Стиль " +"Стиль «Сетка» создаёт более устойчивую поддержку (по умолчанию). Стиль " "«Аккуратный» экономит материал и уменьшает образование дефектов на моделях.\n" "\n" "Для древовидной поддержки, при стройном и органическом стиле происходит " @@ -15029,8 +15048,8 @@ msgid "Adaptive layer height" msgstr "Переменная высота слоёв" msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated." +"Enabling this option means the height of tree support layer except the first " +"will be automatically calculated." msgstr "" "Включение автоматического расчёта высоты слоя древовидной поддержки, кроме " "первого слоя. " @@ -15154,7 +15173,7 @@ msgstr "" "исключить коробление материала, и потенциально привести к повышению " "прочности межслойного соединения. Однако в то же время более высокая " "температура камеры снижает эффективность фильтрации воздуха при печати ABS и " -"ASA.\n" +"ASA. \n" "\n" "Для PLA, PETG, TPU, PVA и других низкотемпературных материалов этот параметр " "следует отключить, поскольку температура внутри термокамеры должна быть " @@ -15173,7 +15192,7 @@ msgid "Nozzle temperature for layers after the initial one." msgstr "Температура сопла при печати для слоёв после первого." msgid "Detect thin wall" -msgstr "Обнаружение тонких стенок" +msgstr "Обнаруживать тонкие стенки" msgid "" "Detect thin wall which can't contain two line width. And use single line to " @@ -15261,8 +15280,7 @@ msgstr "Расстояние очистки" # ??? Установка значения в приведенном ниже параметре «Величина отката перед очисткой», приведёт к дополнительному втягиванию на заданную тут величину, в противном случае оно будет выполнено после. msgid "" -"Describe how long the nozzle will move along the last path when " -"retracting.\n" +"Describe how long the nozzle will move along the last path when retracting.\n" "\n" "Depending on how long the wipe operation lasts, how fast and long the " "extruder/filament retraction settings are, a retraction move may be needed " @@ -15306,11 +15324,12 @@ msgstr "" "очистки указанные в таблице." msgid "Prime volume" -msgstr "Объём сброса на черновой башне" +msgstr "Объём сброса материала на черновой башни" msgid "The volume of material to prime extruder on tower." msgstr "" -"Объём выдавленного материала для заправки экструдера на черновой башне." +"Объём материала, который необходимо выдавить для подготовки экструдера на " +"черновой башне." msgid "Width of the prime tower." msgstr "" @@ -15468,7 +15487,6 @@ msgstr "" msgid "X-Y hole compensation" msgstr "Компенсация размера отверстий по XY" -#, fuzzy msgid "" "Holes in objects will expand or contract in the XY plane by the configured " "value. Positive values make holes bigger, negative values make holes " @@ -15483,7 +15501,6 @@ msgstr "" msgid "X-Y contour compensation" msgstr "Компенсация размера модели по XY" -#, fuzzy msgid "" "Contours of objects will expand or contract in the XY plane by the " "configured value. Positive values make contours bigger, negative values make " @@ -15550,7 +15567,7 @@ msgid "" "QOI for low memory firmware." msgstr "" "Формат эскизов G-кода: PNG для наилучшего качества, JPG для наименьшего " -"размера, QOI для прошивки с малым объемом памяти." +"размера, QOI для прошивки с малым объёмом памяти." msgid "Use relative E distances" msgstr "Относительные координаты экструдера" @@ -15595,7 +15612,7 @@ msgstr "" "Этот параметр задаёт длину перехода между периметрами при изменении их " "количества (с чётного на нечётное, и обратно). Чем больше значение, тем " "плавнее переход, и наоборот: чем меньше, тем резче. Если задано в процентах, " -"то значение вычисляться относительно диаметра сопла." +"то значение вычисляется относительно диаметра сопла." msgid "Wall transitioning filter margin" msgstr "Граница фильтрации переходов между периметрами" @@ -15652,7 +15669,6 @@ msgstr "" msgid "Minimum feature size" msgstr "Минимальный размер элемента" -#, fuzzy msgid "" "Minimum thickness of thin features. Model features that are thinner than " "this value will not be printed, while features thicker than this value will " @@ -15663,9 +15679,9 @@ msgstr "" "напечатаны. Если же их толщина превышает этот порог, но не достигает " "минимальной ширины периметра, они автоматически расширяются до указанного " "минимума, равного значению «Минимальная ширина периметра». Если задано в " -"процентах, то значение вычисляться относительно диаметра сопла.\n" +"процентах, то значение вычисляется относительно диаметра сопла.\n" "\n" -"Например расчёт при значении 25% и сопле 0,4 мм: 0,4 мм × 25% = 0,1 мм. " +"Например, расчёт при значении 25% и сопле 0,4 мм: 0,4 мм × 25% = 0,1 мм. " "Следовательно, при значении параметра 25% и сопле 0,4 мм элементы толщиной " "до 0,1 мм не напечатаются. Элементы же толщиной от 0,1 мм и выше расширяются " "до минимальной ширины периметра, указанной ниже." @@ -15730,10 +15746,10 @@ msgid "" "the concentric pattern will be used for the area to speed up printing. " "Otherwise, the rectilinear pattern will be used by default." msgstr "" -"Этот параметр автоматически определяет узкую внутреннюю область сплошного " -"заполнения. Если включено, для ускорения печати будет использоваться " -"концентрический шаблон. В противном случае по умолчанию используется " -"прямолинейный шаблон." +"Автоопределение узких сплошных областей для заполнения. Если включено, то " +"для ускорения печати они будут заполняться концентрическим шаблоном " +"заполнения. В противном случае по умолчанию используется прямолинейный " +"шаблон заполнения." msgid "invalid value " msgstr "недопустимое значение " @@ -15764,7 +15780,7 @@ msgid "Load slicing data" msgstr "Загрузка данных о нарезке" msgid "Load cached slicing data from directory." -msgstr "Загрузка кэшированных данных о нарезке из папки" +msgstr "Загрузка кэшированных данных о нарезке из папки." msgid "Export STL" msgstr "Экспорт в STL" @@ -15776,7 +15792,7 @@ msgid "Export multiple STLs" msgstr "Экспорт в отдельные STL" msgid "Export the objects as multiple STLs to directory." -msgstr "Экспорт моделей в папку в отдельные STL-файлы" +msgstr "Экспорт моделей в папку в отдельные STL-файлы." msgid "Slice" msgstr "Нарезать" @@ -15790,16 +15806,18 @@ msgstr "Показать справку по команде." msgid "UpToDate" msgstr "Актуальная версия" +# ????? Обновить значения конфигурации msgid "Update the configs values of 3mf to latest." -msgstr "" +msgstr "Обновить значения профилей 3MF файла до актуальных." msgid "downward machines check" msgstr "Проверка совместимости принтера" +# ??? msgid "" "check whether current machine downward compatible with the machines in the " "list." -msgstr "Проверка совместимости текущего принтера с принтерами из списка" +msgstr "Проверка совместимости текущего принтера с принтерами из списка." # ??? msgid "Load default filaments" @@ -15857,9 +15875,11 @@ msgstr "Экспорт настроек" msgid "Export settings to a file." msgstr "Экспорт настроек в файл." +# командная строка? нужен ли пеевод? msgid "Send progress to pipe" msgstr "" +# ??? это относится к командной строке msgid "Send progress to pipe." msgstr "" @@ -15870,9 +15890,11 @@ msgid "Arrange options: 0-disable, 1-enable, others-auto" msgstr "" "Параметры расстановки: 0 - отключено, 1 - включено, другие - автоматически" +# командная строка? нужен ли перевод? msgid "Repetition count" msgstr "" +# ??? это относится к командной строке msgid "Repetition count of the whole model." msgstr "" @@ -15880,7 +15902,8 @@ msgid "Ensure on bed" msgstr "Обеспечивать размещение на столе" msgid "" -"Lift the object above the bed when it is partially below. Disabled by default." +"Lift the object above the bed when it is partially below. Disabled by " +"default." msgstr "" "Поднимает модель над столом, когда она частично находится ниже его уровня. " "По умолчанию отключено." @@ -15915,30 +15938,36 @@ msgid "Rotation angle around the Y axis in degrees." msgstr "Угол поворота вокруг оси Y в градусах." msgid "Scale the model by a float factor." -msgstr "Масштабировать модель с помощью коэффициента" +msgstr "Масштабировать модель с помощью коэффициента." msgid "Load General Settings" msgstr "Загрузка общих настроек" msgid "Load process/machine settings from the specified file." -msgstr "Загрузка настроек процесса/принтера из указанного файла" +msgstr "Загрузка настроек процесса/принтера из указанного файла." msgid "Load Filament Settings" msgstr "Загрузка настроек материала" msgid "Load filament settings from the specified file list." -msgstr "Загрузка настроек материала из указанного списка файлов" +msgstr "Загрузка настроек материала из указанного списка файлов." +# Исключить модели +# командная строка? нужен ли пеевод? msgid "Skip Objects" msgstr "" +# ??? это относится к командной строке +# Пропустить некоторые\выбранные модели в этой печати, Пропуск, Отменить msgid "Skip some objects in this print." msgstr "" +# Сделать копию модели +# командная строка? нужен ли пеевод? msgid "Clone Objects" msgstr "" -# ??? +# ??? это относится к командной строке msgid "Clone objects in the load list." msgstr "" @@ -15953,6 +15982,7 @@ msgstr "" msgid "Load uptodate filament settings when using uptodate." msgstr "" +# ??? msgid "" "Load uptodate filament settings from the specified file when using uptodate." msgstr "" @@ -15971,11 +16001,13 @@ msgstr "Настройки совместимости принтера" msgid "The machine settings list needs to do downward checking." msgstr "" +# ??? Загрузка msgid "Load assemble list" -msgstr "" +msgstr "Загрузить список сборки" +# ??? msgid "Load assemble object list from config file." -msgstr "" +msgstr "Загрузить список объектов для сборки из конфигурационного файла." msgid "Data directory" msgstr "Папка конфигурации пользователя" @@ -15999,8 +16031,8 @@ msgid "Debug level" msgstr "Уровень отладки журнала" msgid "" -"Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -"trace\n" +"Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +"5:trace\n" msgstr "" "Задаёт параметр чувствительности записи событий в журнал.\n" "0: Критическая ошибка, 1: Ошибка, 2: Предупреждение, 3: Информация, 4: " @@ -16026,11 +16058,10 @@ msgstr "Загрузить идентификаторы прутков" msgid "Load filament ids for each object" msgstr "Загрузить идентификаторы прутков для каждого объекта" -# ??? msgid "Allow multiple colors on one plate" msgstr "Разрешить многоцветную печать на одном столе" -# ????? +# ???? msgid "If enabled, Arrange will allow multiple colors on one plate." msgstr "" "Если включено, то функция расстановки позволяет использовать несколько " @@ -16087,7 +16118,7 @@ msgstr "Список значений метаданных добавляемы # ??? msgid "Allow 3mf with newer version to be sliced." -msgstr "Разрешить нарезку новых версий 3MF-файлов" +msgstr "Разрешить нарезку новых версий 3MF-файлов." msgid "Current Z-hop" msgstr "Подъём оси Z" @@ -16199,7 +16230,6 @@ msgid "Total filament volume extruded per extruder during the entire print." msgstr "" "Общий объём материала, выдавленного одним экструдером в процесса всей печати." -# ??? Всего смен инструментов msgid "Total tool changes" msgstr "Число смен инструментов" @@ -16408,7 +16438,7 @@ msgid "Generating infill toolpath" msgstr "Генерация траектории заполнения" msgid "Detect overhangs for auto-lift" -msgstr "Обнаружение нависаний для автоподъёма" +msgstr "Обнаруживать нависания для автоподъёма" msgid "Checking support necessity" msgstr "Проверка необходимости поддержки" @@ -16420,14 +16450,14 @@ msgid "floating cantilever" msgstr "нависающий горизонтальный выступ (консоль)" msgid "large overhangs" -msgstr "большая области нависания" +msgstr "большая область нависания" #, c-format, boost-format msgid "" "It seems object %s has %s. Please re-orient the object or enable support " "generation." msgstr "" -"Похоже, что у модели %s имеются замечания - %s.\n" +"Похоже, что у модели %s имеются замечания - %s. \n" "Переориентируйте её или включите генерацию поддержки." msgid "Generating support" @@ -16473,8 +16503,8 @@ msgstr "Предоставленный файл не может быть про msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "" -"Неизвестный формат файла. Входной файл должен иметь расширение *.3mf или *." -"zip.amf." +"Неизвестный формат файла. Входной файл должен иметь расширение *.3mf или " +"*.zip.amf." msgid "load_obj: failed to parse" msgstr "load_obj: ошибка обработки" @@ -16489,7 +16519,7 @@ msgid "The file contains polygons with less than 2 vertices." msgstr "Файл содержит многоугольники с менее чем 2 вершинами." msgid "The file contains invalid vertex index." -msgstr "Файл содержит неверный количество вершин." +msgstr "Файл содержит неверное количество вершин." msgid "This OBJ file couldn't be read because it's empty." msgstr "Этот OBJ файл не может быть прочитан, так как он пуст." @@ -16616,10 +16646,9 @@ msgid "" "historical results.\n" "Do you still want to continue the calibration?" msgstr "" -"Этот тип принтера может хранить для каждого сопла только 16 последних " -"результатов. Вы можете удалить существующие результаты, а затем запустить " -"калибровку. Или вы можете продолжить калибровку, но результаты калибровки не " -"будут сохранены.\n" +"Данный принтер может хранить максимум 16 результатов для каждого сопла. Вы " +"можете удалить старые результаты, а затем запустить калибровку. Или вы " +"можете продолжить калибровку, но результаты калибровки не будут сохранены.\n" "Хотите продолжить калибровку?" msgid "Connecting to printer..." @@ -16645,8 +16674,8 @@ msgid "" "This machine type can only hold %d history results per nozzle. This result " "will not be saved." msgstr "" -"Этот тип принтера может хранить для каждого сопла только %d последних " -"результатов. Этот результат не будет сохранён." +"Данный принтер может хранить максимум %d результатов для каждого сопла. Этот " +"результат не будет сохранён." msgid "Internal Error" msgstr "Внутренняя ошибка" @@ -16657,7 +16686,6 @@ msgstr "Выберите хотя бы один пруток для калибр msgid "Flow rate calibration result has been saved to preset." msgstr "Результат калибровки динамики потока был сохранён в профиль" -# не длинно??? Результат калибровки макс. объёмного расхода был сохранён в профиль msgid "Max volumetric speed calibration result has been saved to preset." msgstr "" "Результат калибровки максимального объёмного расхода был сохранён в профиль" @@ -16707,13 +16735,13 @@ msgid "" "cause the result not exactly the same in each calibration. We are still " "investigating the root cause to do improvements with new updates." msgstr "" -"Подробную информацию про калибровку динамики потока можно найти на нашем " -"вики-сайте.\n" +"Подробную информацию о калибровке динамики потока можно найти на нашем вики-" +"сайте.\n" "\n" -"При обычных обстоятельствах калибровка не требуется.\n" +"При обычных обстоятельствах калибровка не требуется. \n" "Если при запуске печати одним цветом/материалом в меню запуска печати " "отмечена опция «Калибровка динамики потока», то калибровка пластиковой нити " -"будет производится старым способом.\n" +"будет производится старым способом. \n" "При запуске печати несколькими цветами/материалами, принтер будет " "использовать параметр компенсации по умолчанию для материала при каждой его " "смене, что в большинстве случаев позволяет получить хороший результат.\n" @@ -16760,8 +16788,8 @@ msgid "" msgstr "" "Кроме того, калибровка скорости потока крайне важна для вспенивающихся " "материалов, таких как LW-PLA, используемых при печати деталей для " -"радиоуправляемых самолетов. Эти материалы сильно расширяются при нагревании, " -"а калибровка позволяет получить эталонную скорости потока." +"радиоуправляемых самолётов. Эти материалы сильно расширяются при нагревании, " +"а калибровка позволяет получить эталонную скорость потока." msgid "" "Flow Rate Calibration measures the ratio of expected to actual extrusion " @@ -16800,7 +16828,7 @@ msgstr "" "Автоматическая калибровка скорости потока использует технологию микролидара " "Bambu Lab, непосредственно измеряя калибровочные шаблоны. Однако имейте " "ввиду, что эффективность и точность этого метода может быть снижена при " -"использовании определенных типов материалов. В частности, прозрачные или " +"использовании определённых типов материалов. В частности, прозрачные или " "полупрозрачные материалы, материалы с блестящими частицами или с " "светоотражающим покрытием могут не подойти для данной калибровки и привести " "к нежелательным результатам.\n" @@ -16808,7 +16836,7 @@ msgstr "" "\n" "Результаты калибровки могут различаться от калибровки к калибровке или от " "материала к материалу. Мы продолжаем улучшать точность и совместимость этой " -"калибровки путем обновления прошивки принтера.\n" +"калибровки путём обновления прошивки принтера.\n" "\n" "Внимание: калибровка скорости потока - это сложный процесс, к которому " "следует прибегать только тем, кто полностью понимает её назначение и " @@ -16856,7 +16884,7 @@ msgid "Failed" msgstr "Неудачно" msgid "Please enter the name you want to save to printer." -msgstr "Введите имя, который хотите сохранить на принтере." +msgstr "Введите имя, которое хотите сохранить на принтере." msgid "The name cannot exceed 40 characters." msgstr "Максимальная длина имени 40 символов." @@ -16896,7 +16924,7 @@ msgid "Please input a valid value (0.0 < flow ratio < 2.0)" msgstr "Введите допустимое значение (0.0 < коэффициент потока < 2.0)" msgid "Please enter the name of the preset you want to save." -msgstr "Введите имя профили, который хотите сохранить." +msgstr "Введите имя профиля, которое хотите сохранить." msgid "Calibration1" msgstr "Калибровка 1" @@ -16905,7 +16933,7 @@ msgid "Calibration2" msgstr "Калибровка 2" msgid "Please find the best object on your plate" -msgstr "Пожалуйста, найдите лучшую модель на своей столе" +msgstr "Пожалуйста, найдите лучшую модель на столе" msgid "Fill in the value above the block with smoothest top surface" msgstr "Заполните значение над блоком с самой гладкой верхней поверхностью" @@ -16947,7 +16975,7 @@ msgid "Printing Parameters" msgstr "Параметры печати" msgid "Plate Type" -msgstr "Типа печатной пластины" +msgstr "Тип печатной пластины" msgid "filament position" msgstr "положение прутка" @@ -16956,7 +16984,7 @@ msgid "External Spool" msgstr "Внешняя катушка" msgid "Filament For Calibration" -msgstr "Пруток для калибровки" +msgstr "Материал для калибровки" msgid "" "Tips for calibration material: \n" @@ -16982,7 +17010,7 @@ msgid "TPU is not supported for Flow Dynamics Auto-Calibration." msgstr "Автоматическая калибровка динамики потока для TPU не поддерживается." msgid "Connecting to printer" -msgstr "Подключением к принтеру" +msgstr "Подключение к принтеру" msgid "From k Value" msgstr "Начальный коэф. K" @@ -17023,14 +17051,13 @@ msgstr "Действие" #, c-format, boost-format msgid "This machine type can only hold %d history results per nozzle." msgstr "" -"Этот тип принтера может хранить для каждого сопла только %d последних " -"результатов." +"Данный принтер может хранить максимум %d результатов для каждого сопла." msgid "Edit Flow Dynamics Calibration" msgstr "Редактировать калибровку динамики потока" msgid "New Flow Dynamic Calibration" -msgstr "Новая калибровка динамика потока" +msgstr "Новая калибровка динамики потока" msgid "Ok" msgstr "Ok" @@ -17272,8 +17299,9 @@ msgstr "Отменить выбранное" msgid "Show error message" msgstr "Показать сообщение об ошибке" +# ??? Ожидание, Запланировано msgid "Queued" -msgstr "Поставлено в очередь" +msgstr "В очереди" msgid "Uploading" msgstr "Отправка" @@ -17366,13 +17394,13 @@ msgid "DNS Server:" msgstr "DNS-сервер:" msgid "Test OrcaSlicer (GitHub)" -msgstr "Тест доступности OrcaSlicer(GitHub)" +msgstr "Тест доступности OrcaSlicer (GitHub)" msgid "Test OrcaSlicer (GitHub):" -msgstr "Тест доступности OrcaSlicer(GitHub):" +msgstr "Тест доступности OrcaSlicer (GitHub):" msgid "Test bing.com" -msgstr "Тест доступности Bing.com" +msgstr "Тест доступности bing.com" msgid "Test bing.com:" msgstr "Тест доступности bing.com:" @@ -17395,11 +17423,13 @@ msgstr "Скопировать текущий профиль прутка " msgid "Basic Information" msgstr "Основная информация" +# ??? Создать профиль для этого прутка, Создание профиля прутка для данный прутка +# ??? было Добавление профиля прутка под текущий пруток msgid "Add Filament Preset under this filament" -msgstr "Добавление профиля прутка под текущий пруток" +msgstr "Создание профиля для данный прутка" msgid "We could create the filament presets for your following printer:" -msgstr "Мы можем создать профили прутка для ваших следующих принтеров:" +msgstr "Можно создать профили прутка для ваших следующих принтеров:" msgid "Select Vendor" msgstr "Выбор производителя" @@ -17455,7 +17485,7 @@ msgstr "" msgid "All inputs in the custom vendor or serial are spaces. Please re-enter." msgstr "" -"В поле ввода производителя/серии пластиковой нити введены пробелы.\n" +"В поле ввода производителя/серии пластиковой нити введены пробелы. \n" "Пожалуйста, введите нормальное имя." msgid "The vendor cannot be a number. Please re-enter." @@ -17473,12 +17503,11 @@ msgid "" "If you continue creating, the preset created will be displayed with its full " "name. Do you want to continue?" msgstr "" -"Пластиковая нить с таким именем %s уже существует.\n" +"Пластиковая нить с таким именем %s уже существует. \n" "Если продолжить создание, то созданный профиль будет отображаться с полным " "именем. Хотите продолжить?" -# ??? было Не удалось создать некоторые из следующих существующих профилей: -# Создание некоторых профилей завершилось с ошибкой. Список проблемных профилей: +# ??? Создание некоторых профилей завершилось с ошибкой. Список проблемных профилей: msgid "Some existing presets have failed to be created, as follows:\n" msgstr "Не удалось создать следующие профили:\n" @@ -17597,7 +17626,7 @@ msgid "" "choose the vendor and model of the printer" msgstr "" "Вы не выбрали на базе какого профиля принтера хотите создать новый профиль " -"принтера.\n" +"принтера. \n" "Пожалуйста, выберите производителя и модель принтера." msgid "" @@ -17659,7 +17688,7 @@ msgstr "" msgid "" "All inputs in the custom printer vendor or model are spaces. Please re-enter." msgstr "" -"В поле ввода производителя/модели принтера введены пробелы.\n" +"В поле ввода производителя/модели принтера введены пробелы. \n" "Пожалуйста, введите нормальное имя." msgid "Please check bed printable shape and origin input." @@ -17709,7 +17738,7 @@ msgstr "" "\n" "Программа обнаружила, что функция синхронизации пользовательских профилей " "отключена, \n" -"что может привести к неудачной настройке прутка на вкладке «Принтер».\n" +"что может привести к неудачной настройке прутка на вкладке «Принтер». \n" "Нажмите «Синхронизировать пользовательские профили», чтобы включить функцию " "синхронизации." @@ -17763,16 +17792,15 @@ msgid "" "Printer and all the filament&&process presets that belongs to the printer.\n" "Can be shared with others." msgstr "" -"Экспортируется профиль принтера, а также профили пластиковых нитей и " -"процессов, \n" -"связанные с выбранным принтером.\n" +"Экспортируется профиль принтера, а также профили пластиковых нитей\n" +"и процессов, связанные с выбранным принтером.\n" "Вы сможете делиться этими файлами с другими пользователями." msgid "" "User's filament preset set.\n" "Can be shared with others." msgstr "" -"Экспортируется набор пользовательских профилей пластиковых нитей.\n" +"Экспортируется набор пользовательских профилей пластиковых нитей. \n" "Вы сможете делиться этими файлами с другими пользователями." msgid "" @@ -17789,7 +17817,7 @@ msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" -"Будут отображаться только пользовательские профили принтеров.\n" +"Будут отображаться только пользовательские профили принтеров. \n" "Все они будут экспортированы в единый zip-файл." msgid "" @@ -17806,7 +17834,7 @@ msgid "" "exported as a zip." msgstr "" "Будут отображаться только профили принтеров с изменёнными профилями " -"процесса.\n" +"процесса. \n" "Все пользовательские профили процессов будут экспортированы в единый zip-" "файл." @@ -17834,15 +17862,14 @@ msgstr "" "Примечание: если удаляется единственный профиль для этого материала, \n" "то сам материал также будет удалён после закрытия окна." -# ??? Профили, наследуемые от других профилей, не могут быть удалены. msgid "Presets inherited by other presets cannot be deleted" msgstr "Профили на которых основаны другие профили не могут быть удалены." msgid "The following presets inherits this preset." msgid_plural "The following preset inherits this preset." -msgstr[0] "Профиль указанный ниже, наследуется от текущего профиля." -msgstr[1] "Профили указанные ниже, наследуются от текущего профиля." -msgstr[2] "Профили указанные ниже, наследуются от текущего профиля." +msgstr[0] "Профиль, указанный ниже, наследуется от текущего профиля." +msgstr[1] "Профили, указанные ниже, наследуются от текущего профиля." +msgstr[2] "Профили, указанные ниже, наследуются от текущего профиля." msgid "Delete Preset" msgstr "Удалить профиль" @@ -17864,9 +17891,9 @@ msgid "" "If you are using this filament on your printer, please reset the filament " "information for that slot." msgstr "" -"Все профили прутка, относящиеся к этому материалу, будут удалены. Если вы " -"используете этот пруток в принтере, пожалуйста, сбросьте информацию о прутке " -"для этого слота." +"Все профили прутка, относящиеся к этому материалу, будут удалены. \n" +"Если вы используете этот пруток в принтере, пожалуйста, сбросьте информацию " +"о прутке для этого слота." msgid "Delete filament" msgstr "Удаление прутка" @@ -18021,7 +18048,6 @@ msgstr "Не удалось получить ресурсы для создан msgid "Upload not enabled on FlashAir card." msgstr "Загрузка данных на карту FlashAir не включена." -# ??? в смысле выгрузка msgid "Connection to FlashAir is working correctly and upload is enabled." msgstr "" "Подключение к FlashAir успешно установлено. Загрузка на карту включена." @@ -18194,10 +18220,10 @@ msgid "" "Gyroid. This results in minimal layer lines and much higher print quality " "but much longer print time." msgstr "" -"По сравнению со стандартным профилем для сопла 0.2 мм, имеет наименьшую " -"высоту слоя, более низкие скорости и ускорения, а также задан гироидный " -"шаблон заполнения. Это обеспечивает незаметные слои и наилучшее качество " -"печати, но при этом значительно увеличивается время печати." +"По сравнению со стандартным профилем для сопла 0.2 мм, имеет меньшую высоту " +"слоя, более низкие скорости и ускорения, а также задан гироидный шаблон " +"заполнения. Это обеспечивает практически невидимые слои и более высокое " +"качество печати, но при этом значительно увеличивается время печати." msgid "" "It has a normal layer height. This results in average layer lines and print " @@ -18487,9 +18513,9 @@ msgid "" "overhangs?" msgstr "" "Порядок печати периметров «Сэндвич»\n" -"Знаете ли вы, что можно использовать порядок печати периметров «Сэндвич» (т." -"е. внутренний-внешний-внутренний) для повышения точности и согласованности " -"слоёв, если у вашей модели не очень крутые нависания?" +"Знаете ли вы, что можно использовать порядок печати периметров «Сэндвич» " +"(т.е. внутренний-внешний-внутренний) для повышения точности и " +"согласованности слоёв, если у вашей модели не очень крутые нависания?" #: resources/data/hints.ini: [hint:Chamber temperature] msgid "" @@ -18599,7 +18625,7 @@ msgid "" "Did you know that you can auto-arrange all the objects in your project?" msgstr "" "Авторасстановка\n" -"Знаете ли вы, что можно автоматически расставить все модели на вашем столе?" +"Знаете ли вы, что можно автоматически расставить все модели в вашем проекте?" #: resources/data/hints.ini: [hint:Auto-Orient] msgid "" @@ -18815,8 +18841,8 @@ msgstr "" #: resources/data/hints.ini: [hint:Flush into support/objects/infill] msgid "" "Flush into support/objects/infill\n" -"Did you know that you can save wasted filament by flushing it into " -"support/objects/infill during filament change?" +"Did you know that you can save wasted filament by flushing it into support/" +"objects/infill during filament change?" msgstr "" "Очистка в поддержку/модель/заполнение\n" "Знаете ли вы, что при смене пластиковой нити, можно сохранить материал, " @@ -18859,11 +18885,223 @@ msgstr "" "ABS, повышение температуры подогреваемого стола может снизить эту " "вероятность?" -# ??? Грань-грань +msgid "Enable filament ramming" +msgstr "Включить рэмминг прутка" + +msgid "" +"This parameter smooths out sudden extrusion rate changes that happen when " +"the printer transitions from printing a high flow (high speed/larger " +"width) extrusion to a lower flow (lower speed/smaller width) extrusion " +"and vice versa.\n" +"\n" +"It defines the maximum rate by which the extruded volumetric flow in mm3/" +"sec can change over time. Higher values mean higher extrusion rate " +"changes are allowed, resulting in faster speed transitions.\n" +"\n" +"A value of 0 disables the feature.\n" +"\n" +"For a high speed, high flow direct drive printer (like the Bambu lab or " +"Voron) this value is usually not needed. However it can provide some " +"marginal benefit in certain cases where feature speeds vary greatly. For " +"example, when there are aggressive slowdowns due to overhangs. In these " +"cases a high value of around 300-350mm3/s2 is recommended as this allows " +"for just enough smoothing to assist pressure advance achieve a smoother " +"flow transition.\n" +"\n" +"For slower printers without pressure advance, the value should be set " +"much lower. A value of 10-15mm3/s2 is a good starting point for direct " +"drive extruders and 5-10mm3/s2 for Bowden style.\n" +"\n" +"This feature is known as Pressure Equalizer in Prusa slicer.\n" +"\n" +"Note: this parameter disables arc fitting." +msgstr "" +"Этот параметр сглаживает резкие изменения скорости экструзии, которые " +"происходят, когда принтер переходит от печати с большим расходом (высокая " +"скорость/большая ширина) к печати с меньшим расходом (меньшая скорость/" +"меньшая ширина) и наоборот.\n" +"\n" +"Параметр задаёт максимальную скорость, с которой объёмный расход " +"экструдируемого материала может изменяться с течением времени. Более " +"высокие значения означают, что допускаются более высокие изменения " +"скорости экструзии, что приводит к более быстрому переключению " +"скоростей.\n" +"\n" +"Значение 0 отключает эту функцию. \n" +"\n" +"Для высокоскоростных принтеров с высокопроизводительным директ-" +"экструдером (например, Bambu lab или Voron) обычно не требуется " +"использование данного параметра. Однако в некоторых случаях, когда " +"скорость печати сильно различается, это может принести некоторую " +"дополнительную пользу. Например, когда происходят резкие замедления из-за " +"нависаний. В этих случаях рекомендуется использовать высокое значение, " +"составляющее около 300-350 мм³/с², так как это обеспечивает достаточное " +"сглаживание, помогающее прогнозированию давления достичь более плавного " +"перехода потока.\n" +"\n" +"Для более медленных принтеров, не использующих прогнозирование давления " +"(pressure advance), это значение должно быть значительно ниже. Значение " +"10-15 мм³/с² является хорошей отправной точкой для экструдеров с прямым " +"приводом и 5-10 мм³/с² для боуден экструдеров.\n" +"\n" +"В Prusa Slicer эта функция известна как «Сглаживание расхода» (Pressure " +"equalizer).\n" +"\n" +"Примечание: этот параметр отключает аппроксимацию дугами." + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the " +"wipe tower sparse layers. When purging, if the sparse infill speed or " +"calculated speed from the filament max volumetric speed is lower, the " +"lowest will be used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the " +"lowest will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as " +"increase the force with which the nozzle collides with any blobs that may " +"have formed on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make " +"sure your printer can reliably bridge at the increased speeds and that " +"ooze when tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is " +"used regardless of this setting." +msgstr "" +"Максимальная скорость печати при очистке в черновую башню и печати её " +"разреженных слоёв.\n" +"Во время очистки программа сопоставляет скорость разреженного заполнения " +"и скорость, рассчитанную по 'максимальному объёмному расходу', и " +"использует наименьшую.\n" +"При печати разреженных слоёв программа сопоставляет скорость внутренних " +"периметров и скорость, рассчитанную по 'максимальному объёмному расходу', " +"и также использует наименьшую.\n" +"\n" +"Увеличение этой скорости может повлиять на устойчивость башни, а также " +"увеличить силу, с которой сопло сталкивается с любыми наплывами, которые " +"могли образоваться на черновой башне.\n" +"\n" +"Перед увеличением этого параметра выше значения по умолчанию 90 мм/с " +"убедитесь, что ваш принтер может надежно строить мосты на повышенных " +"скоростях и что отсутствует подтекание при смене инструмента.\n" +"\n" +"Для внешних периметров черновой башни всегда используется скорость " +"внутренних периметров, независимо от значения данного параметра." + +msgid "Compatible printers" +msgstr "Совместимые профили принтеров" + +msgid "Select printers" +msgstr "Выбор профиля принтера" + +msgid "Select profiles" +msgstr "Выбор профиля процесса" + +msgid "Condition" +msgstr "Условия совместимости" + +msgid "Junction Deviation test" +msgstr "Тест Junction Deviation" + +msgid "Test model" +msgstr "Тестовая модель" + +msgid "Ringing Tower" +msgstr "Полный тест (Ringing Tower)" + +msgid "Fast Tower" +msgstr "Быстрый тест (Fast Tower)" + +msgid "Junction Deviation settings" +msgstr "Настройки Deviation settings" + +msgid "Start junction deviation: " +msgstr "Начальное значение junction deviation: " + +msgid "End junction deviation: " +msgstr "Конечное значение junction deviation: " + +msgid "Note: Lower values = sharper corners but slower speeds" +msgstr "" +"Примечание: более низкие значения = более острые углы, \n" +"но более низкая скорость." + +# ??? Подбор +msgid "Input shaping Frequency test" +msgstr "Тест частоты Input Shaping" + +msgid "Frequency settings" +msgstr "Задание частоты" + +msgid "Start X: " +msgstr "Начальная по X:" + +msgid "End X: " +msgstr "Конечная по X:" + +msgid "Start Y: " +msgstr "Начальная по Y:" + +msgid "End Y: " +msgstr "Конечная по Y:" + +msgid "Damp: " +msgstr "Затухание (Damp):" + +# ??? При установке значения... +msgid "" +"Recommended: Set Damp to 0.\n" +"This will use the printer's default or the last saved value." +msgstr "" +"Рекомендация: установите значение затухания (Damp) равным 0, тогда " +"будет \n" +"использоваться значение по умолчанию из принтера или последнее " +"сохранённое значение." + +msgid "Input shaping Damp test" +msgstr "Тест затухания Input shaping" + +msgid "Damp Start/End: " +msgstr "Начальное/Конечное значение затухания:" + +msgid "Note: Use previously calculated frequencies." +msgstr "Примечание: используйте ранее рассчитанные частоты." + +msgid "" +"Please input valid values\n" +"(0 < Freq < 500" +msgstr "" +"Введите допустимые значения:\n" +"(0 < Частота < 500)" + +msgid "Input Shaping Damping/zeta factor" +msgstr "Затухание Input Shaping/Коэффициент затухания (ζ)" + +msgid "Junction Deviation calibration" +msgstr "Калибровка Junction Deviation" + +msgid "Input Shaping" +msgstr "Input Shaping" + +msgid "Input Shaping Frequency" +msgstr "Частота Input Shaping " + +msgid "" +"Please input a valid damping factor (0 <= DampingStart < DampingEnd <= 1) " +msgstr "" +"Введите допустимый коэффициент затухания (0 <= Начальное значение " +"затухания < Конечное значение затухания <= 1) " + +msgid "Maximum Junction Deviation" +msgstr "Макс. значение Junction Deviation" + +# если нужно короче то Грань-грань msgid "Face and face assembly" msgstr "Сборка по граням" -# ??? Точка-точка +# если нужно короче то Точка-точка msgid "Point and point assembly" msgstr "Сборка по точкам" @@ -18884,3 +19122,279 @@ msgstr "Ошибка инициализации (%s)!" msgid "IP and Access Code Verified! You may close the window" msgstr "IP-адрес и код доступа подтверждены! Вы можете закрыть окно." + +msgid "Stagger perimeters" +msgstr "Сдвиг периметров" + +# ??? Экспериментальная функция, которая позволяет печатать чётные периметры относительно нечётных с перекрытием/со смещением... +msgid "" +"This is an experminetal feature that allows you to print staggered " +"perimeters for better layer adhesion and strength." +msgstr "" +"Экспериментальная функция, которая позволяет печатать чередующиеся " +"периметры с перекрытием для улучшения межслойного сцепления и увеличения " +"прочности напечатанного." + +msgid "" +"Staggered perimeters is an experimental feature and only works when the " +"First layer height is the same as Layer height, Top surface line width is " +"the same as Outer wall line width and only for Arachne" +msgstr "" +"Сдвиг периметров - экспериментальная функция, которая работает только " +"тогда, когда:\n" +"- высота первого слоя совпадает с высотой слоя\n" +"- ширина линии верхней поверхности совпадает с шириной линии внешней " +"стены\n" +"- включен только с генератором периметров Arachne" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings and enable staggered perimeters\n" +"No - Give up using staggered perimeters this time" +msgstr "" +"Изменить эти настройки автоматически? \n" +"Да - Изменить эти настройки и включить сдвиг периметров\n" +"Нет - Отказаться от использования сдвига периметров" + +msgid "Orbit speed multiplier" +msgstr "Множитель скорости движения по орбите" + +# ??? Умножает скорость движения по орбите для более тонкого или грубого перемещения камеры. +msgid "Multiplies the orbit speed for finer or coarser camera movement." +msgstr "" +"Множитель скорости движения камеры по орбите для более тонкого или " +"грубого её перемещения." + +msgid "Show the step mesh parameter setting dialog." +msgstr "Показывать диалоговое окно настройки сетки при импорте STEP файла" + +msgid "" +"If enabled,a parameter settings dialog will appear during STEP file " +"import." +msgstr "" +"Если включено, во время импорта STEP файла появится диалоговое окно " +"настроек параметров импорта." + +# ??? Сеточная структура для предотвращения коробления, Предотвращение коробления, Сетка от деформации +msgid "Gridify Anti-warping" +msgstr "Антидеформационная сетка" + +msgid "Split object into grids to avoid wrapping" +msgstr "" +"Разделение модели на блоки сеткой, чтобы внутреннее напряжение сжимало " +"каждый блок по отдельности, а общая деформация была сведена к минимуму." + +msgid "Gridify pattern direction" +msgstr "Угол поворота сетки" + +msgid "Angle for gridify pattern" +msgstr "Угол поворота всего сетчатого шаблона." + +# ??? зачем зазор то писать? +msgid "Gridify gap width" +msgstr "Ширина линий сетки" + +# ??? Слоёв сетки ... Т.е. высота по другому... Высота сетки +msgid "Gridify pattern layers" +msgstr "Высота линий сетки" + +msgid "" +"The number of layers the grid pattern repeats before shifting position" +msgstr "Количество слоёв повторения сетки перед её смещением." + +msgid "Gridify grid size" +msgstr "Размер ячейки сетки" + +msgid "Gridify inset" +msgstr "Границы сетки" + +msgid "" +"The distance to keep from the edges. A value of 0 create holes on walls" +msgstr "" +"Расстояние от краёв модели. При значении 0 на стенах будут иметься " +"отверстия." + +msgid "Support ironing" +msgstr "Разглаживание поддержки" + +msgid "Support Ironing" +msgstr "Разглаживание поддержки" + +# Разглаживать верхний слой поддержки +msgid "Ironing Support Interface" +msgstr "Разглаживать связующий слой поддержки" + +msgid "" +"Ironing is using small flow to print on same height of support interface " +"again to make it more smooth. This setting controls whether support " +"interface being ironed. When enabled, support interface will be extruded " +"as solid too." +msgstr "" +"Включение разглаживания связующего слоя поддержки с помощью горячего " +"сопла для получения гладкой поверхности. После печати связующего слоя " +"поддержки сопло пройдётся по нему ещё раз, но с значительно меньшей " +"скоростью и потоком." + +msgid "Support Ironing Pattern" +msgstr "Шаблон разглаживания поддержки" + +msgid "Support Ironing flow" +msgstr "Поток разглаживания поддержки" + +# ??? +msgid "" +"The amount of material to extrude during ironing. Relative to flow of " +"normal support interface layer height. Too high value results in " +"overextrusion on the surface." +msgstr "" +"Количество материала, которое необходимо выдавить во время разглаживания, " +"относительно потока нормальной высоты связующего слоя поддержки." + +msgid "Support Ironing line spacing" +msgstr "Расстояние между линиями разглаживания поддержки" + +msgid "Resonance Avoidance" +msgstr "Предотвращение резонанса" + +# ??? Избегать резонанса, Не допускать +msgid "Resonance avoidance" +msgstr "Избегать резонанса" + +# ??? За счёт снижения скорости печати внешнего периметра для избежания попадания в зону резонанса принтера, удаётся предотвратить появление ряби на поверхности модели. Пожалуйста, отключите эту опцию при тестировании на вертикальные артефакты. +# ??? Путем снижения скорости печати внешнего периметра... +# ??? Снижение скорости печати внешнего периметра для избежания попадания в зону резонанса принтера позволяет избежать появление ряби на поверхности модели.\nПожалуйста, отключите эту опцию при тестировании на вертикальные артефакты. +msgid "" +"By reducing the speed of the outer wall to avoid the resonance zone of " +"the printer, ringing on the surface of the model are avoided.\n" +"Please turn this option off when testing ringing." +msgstr "" +"Уменьшая скорость печати внешнего периметра для предотвращения попадания " +"в зону резонансной частоты принтера, можно избежать появления ряби на " +"поверхности модели. Эта функция требует установки минимального и " +"максимального значения. Если запланированная скорость печати попадает " +"внутрь диапазона, функция активируется, и реальная скорость печати будет " +"принудительно ограничена минимальным значением, несмотря на другие " +"настройки скорости.\n" +"Пожалуйста, отключите эту опцию при тестировании на вертикальные артефакты" + +# ??? Скорость предотвращение резонанса, Диапазон скоростей при которых возникает резонанс и стоит снизить скорость до минимальной, Избегать диапазона скоростей, Скорость избегания резонанса, Резонансоопасные скорости +msgid "Resonance Avoidance Speed" +msgstr "Диапазон скоростей избегания резонанса" + +msgid "Minimum speed of resonance avoidance." +msgstr "Минимальная скорость предотвращения резонанса." + +msgid "Maximum speed of resonance avoidance." +msgstr "Максимальная скорость предотвращения резонанса." + +msgid "X Start/End:" +msgstr "Начальная/Конечная по X:" + +msgid "Y Start/End:" +msgstr "Начальная/Конечная по Y:" + +msgid "Start / End" +msgstr "(начальное/конечное значение)" + +msgid "Damp" +msgstr "Затухание" + +msgid "Frequency" +msgstr "Частота по" + +msgid "Wall type" +msgstr "Тип стенки черновой башни" + +msgid "" +"Wipe tower outer wall type.\n" +"1. Rectangle: The default wall type, a rectangle with fixed width and " +"height.\n" +"2. Cone: A cone with a fillet at the bottom to help stabilize the wipe " +"tower.\n" +"3. Rib: Adds four ribs to the tower wall for enhanced stability." +msgstr "" +"Тип внешней стенки черновой башни.\n" +"1. Прямоугольник с фиксированной шириной и высотой. Установлено по " +"умолчанию.\n" +"2. Конус с выступом в нижней части для повышения устойчивости.\n" +"3. Рёбра жесткости, которые добавляются по четырём углам чернотой башни " +"для повышения устойчивости." + +msgid "Extra rib length" +msgstr "Дополнительная длина ребра" + +msgid "" +"Positive values can increase the size of the rib wall, while negative " +"values can reduce the size.However, the size of the rib wall can not be " +"smaller than that determined by the cleaning volume." +msgstr "" +"Положительное значение может увеличить длину ребра, а отрицательное - " +"уменьшить. Однако она не может быть меньше размера, определяемого объёмом " +"очистки." + +msgid "Rib" +msgstr "Рёбра" + +msgid "Rib width" +msgstr "Ширина ребра" + +# ??? Скругление углов стенки +msgid "Fillet wall" +msgstr "Скругление стенки" + +msgid "The wall of prime tower will fillet" +msgstr "Скругление углов стенки черновой башни." + +# ??? Плотность верхней оболочки +msgid "Top surface density" +msgstr "Плотность верхней поверхности" + +# ??? Плотность верхней поверхности. При 100% создаётся сплошной верхний слой. +msgid "" +"Density of top surface layer. A value of 100% creates a fully solid, " +"smooth top layer. Reducing this value results in a textured top surface, " +"according to the chosen top surface pattern. A value of 0% will result in " +"only the walls on the top layer being created. Intended for aesthetic or " +"functional purposes, not to fix issues such as over-extrusion." +msgstr "" +"Плотность верхней поверхности. Если установить 100%, поверхность будет " +"сплошной и гладкой. Уменьшение этого параметра создаст текстурированную " +"поверхность в соответствии с выбранным шаблоном заполнения верхней " +"поверхности. При значении 0% останутся только стенки верхнего слоя. Эта " +"функция предназначена для улучшения внешнего вида или функциональности " +"объекта, но не для решения проблем, таких как чрезмерная экструзия." + +msgid "Bottom surface density" +msgstr "Плотность нижней поверхности" + +msgid "" +"Density of the bottom surface layer. Intended for aesthetic or functional " +"purposes, not to fix issues such as over-extrusion." +msgstr "" +"Плотность нижней поверхности. Эта функция предназначена для улучшения " +"внешнего вида или функциональности объекта, но не для решения проблем, " +"таких как чрезмерная экструзия." + +msgid "Solid infill rotatation template" +msgstr "Поворот шаблона сплошного заполнения" + +msgid "" +"This parameter adds a rotation of sparse infill direction to each layer " +"according to the specified template. The template is a comma-separated " +"list of angles in degrees, e.g. '0,90'. The first angle is applied to the " +"first layer, the second angle to the second layer, and so on. If there " +"are more layers than angles, the angles will be repeated. Note that not " +"all sparse infill patterns support rotation." +msgstr "" +"Этот параметр поворачивает шаблон разреженного заполнения на каждом слое " +"по заданному правилу. Шаблон представляет собой список углов в градусах, " +"разделенных запятыми, например '0,90'. Первый угол применяется к первому " +"слою, второй угол - ко второму слою и так далее. Если слоёв больше, чем " +"углов, то углы будут повторяться. Обратите внимание, что не все шаблоны с " +"разреженной заливкой поддерживают поворот." + +msgid "Pick" +msgstr "Выбрать" + +msgid "Right click to reset value to system default." +msgstr "Правая кнопка мыши - сброс значения до системного по умолчанию." From 46af00aa017365709b0a8a482638c8faf14b27d9 Mon Sep 17 00:00:00 2001 From: discip <53649486+discip@users.noreply.github.com> Date: Fri, 18 Jul 2025 08:06:48 +0200 Subject: [PATCH 08/13] hide `Reverse threshold` when not editable (#10161) * make **`Reverse threshold`** inactive when **`Reverse only internal perimeters`** is activated * Update ConfigManipulation.cpp * 100%% => 100% Also fixed a typo along the way. --- localization/i18n/OrcaSlicer.pot | 2 +- src/slic3r/GUI/ConfigManipulation.cpp | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index cb5c116d47..5d8e75c2cb 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -11727,7 +11727,7 @@ msgstr "" #, possible-c-format, possible-boost-format msgid "" "Detect the overhang percentage relative to line width and use different " -"speed to print. For 100%% overhang, bridge speed is used." +"speed to print. For 100% overhang, bridge speed is used." msgstr "" msgid "Filament to print walls" diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index f57aa5f812..9818260b00 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -824,9 +824,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co bool has_overhang_reverse = config->opt_bool("overhang_reverse"); bool force_wall_direction = config->opt_enum("wall_direction") != WallDirection::Auto; bool allow_overhang_reverse = !has_spiral_vase && !force_wall_direction; - toggle_field("overhang_reverse", allow_overhang_reverse); - toggle_field("overhang_reverse_threshold", has_detect_overhang_wall); - toggle_line("overhang_reverse_threshold", allow_overhang_reverse && has_overhang_reverse); + toggle_line("overhang_reverse", allow_overhang_reverse); toggle_line("overhang_reverse_internal_only", allow_overhang_reverse && has_overhang_reverse); bool has_overhang_reverse_internal_only = config->opt_bool("overhang_reverse_internal_only"); if (has_overhang_reverse_internal_only){ @@ -834,6 +832,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co new_conf.set_key_value("overhang_reverse_threshold", new ConfigOptionFloatOrPercent(0,true)); apply(config, &new_conf); } + toggle_line("overhang_reverse_threshold", has_detect_overhang_wall && allow_overhang_reverse && has_overhang_reverse && !has_overhang_reverse_internal_only); toggle_line("timelapse_type", is_BBL_Printer); From 11e2c054d067234b7e9b0023e312b7e8e7b0df59 Mon Sep 17 00:00:00 2001 From: krmz-krmz <71175240+krmz-krmz@users.noreply.github.com> Date: Fri, 18 Jul 2025 16:43:46 +0900 Subject: [PATCH 09/13] add user name placeholder (#10109) * Add user name placeholder * non-ASCII character support * fix: Explicitly include --- src/libslic3r/GCode.cpp | 1 + src/libslic3r/PlaceholderParser.cpp | 8 ++++++++ src/libslic3r/PlaceholderParser.hpp | 3 +++ src/libslic3r/PrintBase.cpp | 1 + 4 files changed, 13 insertions(+) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index cbe275d387..d1f881c702 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -2041,6 +2041,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // Prepare the helper object for replacing placeholders in custom G-code and output filename. m_placeholder_parser_integration.parser = print.placeholder_parser(); m_placeholder_parser_integration.parser.update_timestamp(); + m_placeholder_parser_integration.parser.update_user_name(); m_placeholder_parser_integration.context.rng = std::mt19937(std::chrono::high_resolution_clock::now().time_since_epoch().count()); // Enable passing global variables between PlaceholderParser invocations. m_placeholder_parser_integration.context.global_config = std::make_unique(); diff --git a/src/libslic3r/PlaceholderParser.cpp b/src/libslic3r/PlaceholderParser.cpp index 04935ae481..5cc18345f3 100644 --- a/src/libslic3r/PlaceholderParser.cpp +++ b/src/libslic3r/PlaceholderParser.cpp @@ -27,6 +27,7 @@ #include #include +#include // Spirit v2.5 allows you to suppress automatic generation // of predefined terminals to speed up complation. With @@ -71,6 +72,7 @@ PlaceholderParser::PlaceholderParser(const DynamicConfig *external_config) : m_e this->set("version", std::string(SoftFever_VERSION)); this->apply_env_variables(); this->update_timestamp(); + this->update_user_name(); } void PlaceholderParser::update_timestamp(DynamicConfig &config) @@ -98,6 +100,12 @@ void PlaceholderParser::update_timestamp(DynamicConfig &config) config.set_key_value("second", new ConfigOptionInt(timeinfo->tm_sec)); } +void PlaceholderParser::update_user_name(DynamicConfig &config) +{ + const char* user = boost::nowide::getenv("USER") ? boost::nowide::getenv("USER") : boost::nowide::getenv("USERNAME") ? boost::nowide::getenv("USERNAME") : "unknown"; + config.set_key_value("user", new ConfigOptionString(user)); +} + static inline bool opts_equal(const DynamicConfig &config_old, const DynamicConfig &config_new, const std::string &opt_key) { const ConfigOption *opt_old = config_old.option(opt_key); diff --git a/src/libslic3r/PlaceholderParser.hpp b/src/libslic3r/PlaceholderParser.hpp index 39c33206c6..3f3998dc5a 100644 --- a/src/libslic3r/PlaceholderParser.hpp +++ b/src/libslic3r/PlaceholderParser.hpp @@ -71,6 +71,9 @@ public: // Update timestamp, year, month, day, hour, minute, second variables at m_config. void update_timestamp() { update_timestamp(m_config); } + static void update_user_name(DynamicConfig &config); + void update_user_name() { update_user_name(m_config); } + private: // config has a higher priority than external_config when looking up a symbol. DynamicConfig m_config; diff --git a/src/libslic3r/PrintBase.cpp b/src/libslic3r/PrintBase.cpp index 81ee858c26..f5ab988847 100644 --- a/src/libslic3r/PrintBase.cpp +++ b/src/libslic3r/PrintBase.cpp @@ -69,6 +69,7 @@ std::string PrintBase::output_filename(const std::string &format, const std::str cfg = *config_override; cfg.set_key_value("version", new ConfigOptionString(std::string(SoftFever_VERSION))); PlaceholderParser::update_timestamp(cfg); + PlaceholderParser::update_user_name(cfg); this->update_object_placeholders(cfg, default_ext); if (! filename_base.empty()) { cfg.set_key_value("input_filename", new ConfigOptionString(filename_base + default_ext)); From 46c0f19cc94cda773e0294340c59c9dc507ab109 Mon Sep 17 00:00:00 2001 From: mosfet80 <10235105+mosfet80@users.noreply.github.com> Date: Fri, 18 Jul 2025 09:51:40 +0200 Subject: [PATCH 10/13] Update unordered_dense.h (#10101) * Update unordered_dense.h update lib version from 3.1.1 to 4.5.0 changelog: https://github.com/martinus/unordered_dense/releases * Update README.txt --- src/ankerl/README.txt | 2 +- src/ankerl/unordered_dense.h | 833 ++++++++++++++++++++++++++++------- 2 files changed, 676 insertions(+), 159 deletions(-) diff --git a/src/ankerl/README.txt b/src/ankerl/README.txt index 0996bc28cf..8b2b2fc741 100644 --- a/src/ankerl/README.txt +++ b/src/ankerl/README.txt @@ -1,7 +1,7 @@ THIS DIRECTORY CONTAINS PIECES OF THE ankerl::unordered_dense::{map, set} https://github.com/martinus/unordered_dense -unordered_dense 3.1.1 10782bfc651c2bb75b11bf90491f50da122e5432 +unordered_dense 4.5.0 73f3cbb237e84d483afafc743f1f14ec53e12314 SOURCE DISTRIBUTION. THIS IS NOT THE COMPLETE unordered_dense DISTRIBUTION. ONLY FILES NEEDED FOR COMPILING PRUSASLICER WERE PUT INTO THE PRUSASLICER SOURCE DISTRIBUTION. diff --git a/src/ankerl/unordered_dense.h b/src/ankerl/unordered_dense.h index e294bdb4e6..13484a9817 100644 --- a/src/ankerl/unordered_dense.h +++ b/src/ankerl/unordered_dense.h @@ -1,12 +1,12 @@ ///////////////////////// ankerl::unordered_dense::{map, set} ///////////////////////// // A fast & densely stored hashmap and hashset based on robin-hood backward shift deletion. -// Version 3.1.1 +// Version 4.5.0 // https://github.com/martinus/unordered_dense // // Licensed under the MIT License . // SPDX-License-Identifier: MIT -// Copyright (c) 2022-2023 Martin Leitner-Ankerl +// Copyright (c) 2022-2024 Martin Leitner-Ankerl // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -30,12 +30,15 @@ #define ANKERL_UNORDERED_DENSE_H // see https://semver.org/spec/v2.0.0.html -#define ANKERL_UNORDERED_DENSE_VERSION_MAJOR 3 // NOLINT(cppcoreguidelines-macro-usage) incompatible API changes -#define ANKERL_UNORDERED_DENSE_VERSION_MINOR 1 // NOLINT(cppcoreguidelines-macro-usage) backwards compatible functionality -#define ANKERL_UNORDERED_DENSE_VERSION_PATCH 1 // NOLINT(cppcoreguidelines-macro-usage) backwards compatible bug fixes +#define ANKERL_UNORDERED_DENSE_VERSION_MAJOR 4 // NOLINT(cppcoreguidelines-macro-usage) incompatible API changes +#define ANKERL_UNORDERED_DENSE_VERSION_MINOR 5 // NOLINT(cppcoreguidelines-macro-usage) backwards compatible functionality +#define ANKERL_UNORDERED_DENSE_VERSION_PATCH 0 // NOLINT(cppcoreguidelines-macro-usage) backwards compatible bug fixes // API versioning with inline namespace, see https://www.foonathan.net/2018/11/inline-namespaces/ + +// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) #define ANKERL_UNORDERED_DENSE_VERSION_CONCAT1(major, minor, patch) v##major##_##minor##_##patch +// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) #define ANKERL_UNORDERED_DENSE_VERSION_CONCAT(major, minor, patch) ANKERL_UNORDERED_DENSE_VERSION_CONCAT1(major, minor, patch) #define ANKERL_UNORDERED_DENSE_NAMESPACE \ ANKERL_UNORDERED_DENSE_VERSION_CONCAT( \ @@ -57,9 +60,9 @@ // exceptions #if defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND) -# define ANKERL_UNORDERED_DENSE_HAS_EXCEPTIONS() 1 +# define ANKERL_UNORDERED_DENSE_HAS_EXCEPTIONS() 1 // NOLINT(cppcoreguidelines-macro-usage) #else -# define ANKERL_UNORDERED_DENSE_HAS_EXCEPTIONS() 0 +# define ANKERL_UNORDERED_DENSE_HAS_EXCEPTIONS() 0 // NOLINT(cppcoreguidelines-macro-usage) #endif #ifdef _MSC_VER # define ANKERL_UNORDERED_DENSE_NOINLINE __declspec(noinline) @@ -67,6 +70,11 @@ # define ANKERL_UNORDERED_DENSE_NOINLINE __attribute__((noinline)) #endif +// defined in unordered_dense.cpp +#if !defined(ANKERL_UNORDERED_DENSE_EXPORT) +# define ANKERL_UNORDERED_DENSE_EXPORT +#endif + #if ANKERL_UNORDERED_DENSE_CPP_VERSION < 201703L # error ankerl::unordered_dense requires C++17 or higher #else @@ -78,6 +86,7 @@ # include // for pair, distance # include // for numeric_limits # include // for allocator, allocator_traits, shared_ptr +# include // for optional # include // for out_of_range # include // for basic_string # include // for basic_string_view, hash @@ -89,20 +98,13 @@ # include // for abort # endif -# define ANKERL_UNORDERED_DENSE_PMR 0 // NOLINT(cppcoreguidelines-macro-usage) -# if defined(__has_include) +# if defined(__has_include) && !defined(ANKERL_UNORDERED_DENSE_DISABLE_PMR) # if __has_include() -# undef ANKERL_UNORDERED_DENSE_PMR -# define ANKERL_UNORDERED_DENSE_PMR 1 // NOLINT(cppcoreguidelines-macro-usage) -# define ANKERL_UNORDERED_DENSE_PMR_ALLOCATOR \ - std::pmr::polymorphic_allocator // NOLINT(cppcoreguidelines-macro-usage) -# include // for polymorphic_allocator +# define ANKERL_UNORDERED_DENSE_PMR std::pmr // NOLINT(cppcoreguidelines-macro-usage) +# include // for polymorphic_allocator # elif __has_include() -# undef ANKERL_UNORDERED_DENSE_PMR -# define ANKERL_UNORDERED_DENSE_PMR 1 // NOLINT(cppcoreguidelines-macro-usage) -# define ANKERL_UNORDERED_DENSE_PMR_ALLOCATOR \ - std::experimental::pmr::polymorphic_allocator // NOLINT(cppcoreguidelines-macro-usage) -# include // for polymorphic_allocator +# define ANKERL_UNORDERED_DENSE_PMR std::experimental::pmr // NOLINT(cppcoreguidelines-macro-usage) +# include // for polymorphic_allocator # endif # endif @@ -158,10 +160,10 @@ namespace detail { // This is a stripped-down implementation of wyhash: https://github.com/wangyi-fudan/wyhash // No big-endian support (because different values on different machines don't matter), -// hardcodes seed and the secret, reformattes the code, and clang-tidy fixes. +// hardcodes seed and the secret, reformats the code, and clang-tidy fixes. namespace detail::wyhash { -static inline void mum(uint64_t* a, uint64_t* b) { +inline void mum(uint64_t* a, uint64_t* b) { # if defined(__SIZEOF_INT128__) __uint128_t r = *a; r *= *b; @@ -191,30 +193,30 @@ static inline void mum(uint64_t* a, uint64_t* b) { } // multiply and xor mix function, aka MUM -[[nodiscard]] static inline auto mix(uint64_t a, uint64_t b) -> uint64_t { +[[nodiscard]] inline auto mix(uint64_t a, uint64_t b) -> uint64_t { mum(&a, &b); return a ^ b; } // read functions. WARNING: we don't care about endianness, so results are different on big endian! -[[nodiscard]] static inline auto r8(const uint8_t* p) -> uint64_t { +[[nodiscard]] inline auto r8(const uint8_t* p) -> uint64_t { uint64_t v{}; std::memcpy(&v, p, 8U); return v; } -[[nodiscard]] static inline auto r4(const uint8_t* p) -> uint64_t { +[[nodiscard]] inline auto r4(const uint8_t* p) -> uint64_t { uint32_t v{}; std::memcpy(&v, p, 4); return v; } // reads 1, 2, or 3 bytes -[[nodiscard]] static inline auto r3(const uint8_t* p, size_t k) -> uint64_t { +[[nodiscard]] inline auto r3(const uint8_t* p, size_t k) -> uint64_t { return (static_cast(p[0]) << 16U) | (static_cast(p[k >> 1U]) << 8U) | p[k - 1]; } -[[maybe_unused]] [[nodiscard]] static inline auto hash(void const* key, size_t len) -> uint64_t { +[[maybe_unused]] [[nodiscard]] inline auto hash(void const* key, size_t len) -> uint64_t { static constexpr auto secret = std::array{UINT64_C(0xa0761d6478bd642f), UINT64_C(0xe7037ed1a0b428db), UINT64_C(0x8ebc6af09c88c6e3), @@ -261,13 +263,13 @@ static inline void mum(uint64_t* a, uint64_t* b) { return mix(secret[1] ^ len, mix(a ^ secret[1], b ^ seed)); } -[[nodiscard]] static inline auto hash(uint64_t x) -> uint64_t { +[[nodiscard]] inline auto hash(uint64_t x) -> uint64_t { return detail::wyhash::mix(x, UINT64_C(0x9E3779B97F4A7C15)); } } // namespace detail::wyhash -template +ANKERL_UNORDERED_DENSE_EXPORT template struct hash { auto operator()(T const& obj) const noexcept(noexcept(std::declval>().operator()(std::declval()))) -> uint64_t { @@ -275,6 +277,15 @@ struct hash { } }; +template +struct hash::is_avalanching> { + using is_avalanching = void; + auto operator()(T const& obj) const noexcept(noexcept(std::declval>().operator()(std::declval()))) + -> uint64_t { + return std::hash{}(obj); + } +}; + template struct hash> { using is_avalanching = void; @@ -327,6 +338,50 @@ struct hash::value>::type> { } }; +template +struct tuple_hash_helper { + // Converts the value into 64bit. If it is an integral type, just cast it. Mixing is doing the rest. + // If it isn't an integral we need to hash it. + template + [[nodiscard]] constexpr static auto to64(Arg const& arg) -> uint64_t { + if constexpr (std::is_integral_v || std::is_enum_v) { + return static_cast(arg); + } else { + return hash{}(arg); + } + } + + [[nodiscard]] static auto mix64(uint64_t state, uint64_t v) -> uint64_t { + return detail::wyhash::mix(state + v, uint64_t{0x9ddfea08eb382d69}); + } + + // Creates a buffer that holds all the data from each element of the tuple. If possible we memcpy the data directly. If + // not, we hash the object and use this for the array. Size of the array is known at compile time, and memcpy is optimized + // away, so filling the buffer is highly efficient. Finally, call wyhash with this buffer. + template + [[nodiscard]] static auto calc_hash(T const& t, std::index_sequence) noexcept -> uint64_t { + auto h = uint64_t{}; + ((h = mix64(h, to64(std::get(t)))), ...); + return h; + } +}; + +template +struct hash> : tuple_hash_helper { + using is_avalanching = void; + auto operator()(std::tuple const& t) const noexcept -> uint64_t { + return tuple_hash_helper::calc_hash(t, std::index_sequence_for{}); + } +}; + +template +struct hash> : tuple_hash_helper { + using is_avalanching = void; + auto operator()(std::pair const& t) const noexcept -> uint64_t { + return tuple_hash_helper::calc_hash(t, std::index_sequence_for{}); + } +}; + // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) # define ANKERL_UNORDERED_DENSE_HASH_STATICCAST(T) \ template <> \ @@ -346,7 +401,7 @@ ANKERL_UNORDERED_DENSE_HASH_STATICCAST(bool); ANKERL_UNORDERED_DENSE_HASH_STATICCAST(char); ANKERL_UNORDERED_DENSE_HASH_STATICCAST(signed char); ANKERL_UNORDERED_DENSE_HASH_STATICCAST(unsigned char); -# if ANKERL_UNORDERED_DENSE_CPP_VERSION >= 202002L +# if ANKERL_UNORDERED_DENSE_CPP_VERSION >= 202002L && defined(__cpp_char8_t) ANKERL_UNORDERED_DENSE_HASH_STATICCAST(char8_t); # endif ANKERL_UNORDERED_DENSE_HASH_STATICCAST(char16_t); @@ -390,6 +445,7 @@ ANKERL_UNORDERED_DENSE_PACK(struct big { namespace detail { struct nonesuch {}; +struct default_container_t {}; template class Op, class... Args> struct detector { @@ -428,7 +484,7 @@ constexpr bool is_map_v = !std::is_void_v; // clang-format off template -constexpr bool is_transparent_v = is_detected_v&& is_detected_v; +constexpr bool is_transparent_v = is_detected_v && is_detected_v; // clang-format on template @@ -446,26 +502,339 @@ struct base_table_type_map { // base type for set doesn't have mapped_type struct base_table_type_set {}; +} // namespace detail + +// Very much like std::deque, but faster for indexing (in most cases). As of now this doesn't implement the full std::vector +// API, but merely what's necessary to work as an underlying container for ankerl::unordered_dense::{map, set}. +// It allocates blocks of equal size and puts them into the m_blocks vector. That means it can grow simply by adding a new +// block to the back of m_blocks, and doesn't double its size like an std::vector. The disadvantage is that memory is not +// linear and thus there is one more indirection necessary for indexing. +template , size_t MaxSegmentSizeBytes = 4096> +class segmented_vector { + template + class iter_t; + +public: + using allocator_type = Allocator; + using pointer = typename std::allocator_traits::pointer; + using const_pointer = typename std::allocator_traits::const_pointer; + using difference_type = typename std::allocator_traits::difference_type; + using value_type = T; + using size_type = std::size_t; + using reference = T&; + using const_reference = T const&; + using iterator = iter_t; + using const_iterator = iter_t; + +private: + using vec_alloc = typename std::allocator_traits::template rebind_alloc; + std::vector m_blocks{}; + size_t m_size{}; + + // Calculates the maximum number for x in (s << x) <= max_val + static constexpr auto num_bits_closest(size_t max_val, size_t s) -> size_t { + auto f = size_t{0}; + while (s << (f + 1) <= max_val) { + ++f; + } + return f; + } + + using self_t = segmented_vector; + static constexpr auto num_bits = num_bits_closest(MaxSegmentSizeBytes, sizeof(T)); + static constexpr auto num_elements_in_block = 1U << num_bits; + static constexpr auto mask = num_elements_in_block - 1U; + + /** + * Iterator class doubles as const_iterator and iterator + */ + template + class iter_t { + using ptr_t = typename std::conditional_t; + ptr_t m_data{}; + size_t m_idx{}; + + template + friend class iter_t; + + public: + using difference_type = segmented_vector::difference_type; + using value_type = T; + using reference = typename std::conditional_t; + using pointer = typename std::conditional_t; + using iterator_category = std::forward_iterator_tag; + + iter_t() noexcept = default; + + template ::type> + // NOLINTNEXTLINE(google-explicit-constructor,hicpp-explicit-conversions) + constexpr iter_t(iter_t const& other) noexcept + : m_data(other.m_data) + , m_idx(other.m_idx) {} + + constexpr iter_t(ptr_t data, size_t idx) noexcept + : m_data(data) + , m_idx(idx) {} + + template ::type> + constexpr auto operator=(iter_t const& other) noexcept -> iter_t& { + m_data = other.m_data; + m_idx = other.m_idx; + return *this; + } + + constexpr auto operator++() noexcept -> iter_t& { + ++m_idx; + return *this; + } + + constexpr auto operator++(int) noexcept -> iter_t { + iter_t prev(*this); + this->operator++(); + return prev; + } + + constexpr auto operator+(difference_type diff) noexcept -> iter_t { + return {m_data, static_cast(static_cast(m_idx) + diff)}; + } + + template + constexpr auto operator-(iter_t const& other) noexcept -> difference_type { + return static_cast(m_idx) - static_cast(other.m_idx); + } + + constexpr auto operator*() const noexcept -> reference { + return m_data[m_idx >> num_bits][m_idx & mask]; + } + + constexpr auto operator->() const noexcept -> pointer { + return &m_data[m_idx >> num_bits][m_idx & mask]; + } + + template + constexpr auto operator==(iter_t const& o) const noexcept -> bool { + return m_idx == o.m_idx; + } + + template + constexpr auto operator!=(iter_t const& o) const noexcept -> bool { + return !(*this == o); + } + }; + + // slow path: need to allocate a new segment every once in a while + void increase_capacity() { + auto ba = Allocator(m_blocks.get_allocator()); + pointer block = std::allocator_traits::allocate(ba, num_elements_in_block); + m_blocks.push_back(block); + } + + // Moves everything from other + void append_everything_from(segmented_vector&& other) { + reserve(size() + other.size()); + for (auto&& o : other) { + emplace_back(std::move(o)); + } + } + + // Copies everything from other + void append_everything_from(segmented_vector const& other) { + reserve(size() + other.size()); + for (auto const& o : other) { + emplace_back(o); + } + } + + void dealloc() { + auto ba = Allocator(m_blocks.get_allocator()); + for (auto ptr : m_blocks) { + std::allocator_traits::deallocate(ba, ptr, num_elements_in_block); + } + } + + [[nodiscard]] static constexpr auto calc_num_blocks_for_capacity(size_t capacity) { + return (capacity + num_elements_in_block - 1U) / num_elements_in_block; + } + +public: + segmented_vector() = default; + + // NOLINTNEXTLINE(google-explicit-constructor,hicpp-explicit-conversions) + segmented_vector(Allocator alloc) + : m_blocks(vec_alloc(alloc)) {} + + segmented_vector(segmented_vector&& other, Allocator alloc) + : segmented_vector(alloc) { + *this = std::move(other); + } + + segmented_vector(segmented_vector const& other, Allocator alloc) + : m_blocks(vec_alloc(alloc)) { + append_everything_from(other); + } + + segmented_vector(segmented_vector&& other) noexcept + : segmented_vector(std::move(other), get_allocator()) {} + + segmented_vector(segmented_vector const& other) { + append_everything_from(other); + } + + auto operator=(segmented_vector const& other) -> segmented_vector& { + if (this == &other) { + return *this; + } + clear(); + append_everything_from(other); + return *this; + } + + auto operator=(segmented_vector&& other) noexcept -> segmented_vector& { + clear(); + dealloc(); + if (other.get_allocator() == get_allocator()) { + m_blocks = std::move(other.m_blocks); + m_size = std::exchange(other.m_size, {}); + } else { + // make sure to construct with other's allocator! + m_blocks = std::vector(vec_alloc(other.get_allocator())); + append_everything_from(std::move(other)); + } + return *this; + } + + ~segmented_vector() { + clear(); + dealloc(); + } + + [[nodiscard]] constexpr auto size() const -> size_t { + return m_size; + } + + [[nodiscard]] constexpr auto capacity() const -> size_t { + return m_blocks.size() * num_elements_in_block; + } + + // Indexing is highly performance critical + [[nodiscard]] constexpr auto operator[](size_t i) const noexcept -> T const& { + return m_blocks[i >> num_bits][i & mask]; + } + + [[nodiscard]] constexpr auto operator[](size_t i) noexcept -> T& { + return m_blocks[i >> num_bits][i & mask]; + } + + [[nodiscard]] constexpr auto begin() -> iterator { + return {m_blocks.data(), 0U}; + } + [[nodiscard]] constexpr auto begin() const -> const_iterator { + return {m_blocks.data(), 0U}; + } + [[nodiscard]] constexpr auto cbegin() const -> const_iterator { + return {m_blocks.data(), 0U}; + } + + [[nodiscard]] constexpr auto end() -> iterator { + return {m_blocks.data(), m_size}; + } + [[nodiscard]] constexpr auto end() const -> const_iterator { + return {m_blocks.data(), m_size}; + } + [[nodiscard]] constexpr auto cend() const -> const_iterator { + return {m_blocks.data(), m_size}; + } + + [[nodiscard]] constexpr auto back() -> reference { + return operator[](m_size - 1); + } + [[nodiscard]] constexpr auto back() const -> const_reference { + return operator[](m_size - 1); + } + + void pop_back() { + back().~T(); + --m_size; + } + + [[nodiscard]] auto empty() const { + return 0 == m_size; + } + + void reserve(size_t new_capacity) { + m_blocks.reserve(calc_num_blocks_for_capacity(new_capacity)); + while (new_capacity > capacity()) { + increase_capacity(); + } + } + + [[nodiscard]] auto get_allocator() const -> allocator_type { + return allocator_type{m_blocks.get_allocator()}; + } + + template + auto emplace_back(Args&&... args) -> reference { + if (m_size == capacity()) { + increase_capacity(); + } + auto* ptr = static_cast(&operator[](m_size)); + auto& ref = *new (ptr) T(std::forward(args)...); + ++m_size; + return ref; + } + + void clear() { + if constexpr (!std::is_trivially_destructible_v) { + for (size_t i = 0, s = size(); i < s; ++i) { + operator[](i).~T(); + } + } + m_size = 0; + } + + void shrink_to_fit() { + auto ba = Allocator(m_blocks.get_allocator()); + auto num_blocks_required = calc_num_blocks_for_capacity(m_size); + while (m_blocks.size() > num_blocks_required) { + std::allocator_traits::deallocate(ba, m_blocks.back(), num_elements_in_block); + m_blocks.pop_back(); + } + m_blocks.shrink_to_fit(); + } +}; + +namespace detail { + // This is it, the table. Doubles as map and set, and uses `void` for T when its used as a set. template + class Bucket, + class BucketContainer, + bool IsSegmented> class table : public std::conditional_t, base_table_type_map, base_table_type_set> { + using underlying_value_type = typename std::conditional_t, std::pair, Key>; + using underlying_container_type = std::conditional_t, + std::vector>; + public: - using value_container_type = std::conditional_t< - is_detected_v, - AllocatorOrContainer, - typename std::vector, std::pair, Key>, AllocatorOrContainer>>; + using value_container_type = std:: + conditional_t, AllocatorOrContainer, underlying_container_type>; private: using bucket_alloc = typename std::allocator_traits::template rebind_alloc; - using bucket_alloc_traits = std::allocator_traits; + using default_bucket_container_type = + std::conditional_t, std::vector>; - static constexpr uint8_t initial_shifts = 64 - 3; // 2^(64-m_shift) number of buckets + using bucket_container_type = std::conditional_t, + default_bucket_container_type, + BucketContainer>; + + static constexpr uint8_t initial_shifts = 64 - 2; // 2^(64-m_shift) number of buckets static constexpr float default_max_load_factor = 0.8F; public: @@ -492,8 +861,7 @@ private: static_assert(std::is_trivially_copyable_v, "assert we can just memset / memcpy"); value_container_type m_values{}; // Contains all the key-value pairs in one densely stored container. No holes. - typename std::allocator_traits::pointer m_buckets{}; - size_t m_num_buckets = 0; + bucket_container_type m_buckets{}; size_t m_max_bucket_capacity = 0; float m_max_load_factor = default_max_load_factor; Hash m_hash{}; @@ -501,15 +869,18 @@ private: uint8_t m_shifts = initial_shifts; [[nodiscard]] auto next(value_idx_type bucket_idx) const -> value_idx_type { - return ANKERL_UNORDERED_DENSE_UNLIKELY(bucket_idx + 1U == m_num_buckets) + return ANKERL_UNORDERED_DENSE_UNLIKELY(bucket_idx + 1U == bucket_count()) ? 0 : static_cast(bucket_idx + 1U); } // Helper to access bucket through pointer types - [[nodiscard]] static constexpr auto at(typename std::allocator_traits::pointer bucket_ptr, size_t offset) - -> Bucket& { - return *(bucket_ptr + static_cast::difference_type>(offset)); + [[nodiscard]] static constexpr auto at(bucket_container_type& bucket, size_t offset) -> Bucket& { + return bucket[offset]; + } + + [[nodiscard]] static constexpr auto at(const bucket_container_type& bucket, size_t offset) -> const Bucket& { + return bucket[offset]; } // use the dist_inc and dist_dec functions so that uint16_t types work without warning @@ -591,10 +962,21 @@ private: // assumes m_values has data, m_buckets=m_buckets_end=nullptr, m_shifts is INITIAL_SHIFTS void copy_buckets(table const& other) { - if (!empty()) { + // assumes m_values has already the correct data copied over. + if (empty()) { + // when empty, at least allocate an initial buckets and clear them. + allocate_buckets_from_shift(); + clear_buckets(); + } else { m_shifts = other.m_shifts; allocate_buckets_from_shift(); - std::memcpy(m_buckets, other.m_buckets, sizeof(Bucket) * bucket_count()); + if constexpr (IsSegmented || !std::is_same_v) { + for (auto i = 0UL; i < bucket_count(); ++i) { + at(m_buckets, i) = at(other.m_buckets, i); + } + } else { + std::memcpy(m_buckets.data(), other.m_buckets.data(), sizeof(Bucket) * bucket_count()); + } } } @@ -602,34 +984,42 @@ private: * True when no element can be added any more without increasing the size */ [[nodiscard]] auto is_full() const -> bool { - return size() >= m_max_bucket_capacity; + return size() > m_max_bucket_capacity; } void deallocate_buckets() { - auto ba = bucket_alloc(m_values.get_allocator()); - if (nullptr != m_buckets) { - bucket_alloc_traits::deallocate(ba, m_buckets, bucket_count()); - } - m_buckets = nullptr; - m_num_buckets = 0; + m_buckets.clear(); + m_buckets.shrink_to_fit(); m_max_bucket_capacity = 0; } void allocate_buckets_from_shift() { - auto ba = bucket_alloc(m_values.get_allocator()); - m_num_buckets = calc_num_buckets(m_shifts); - m_buckets = bucket_alloc_traits::allocate(ba, m_num_buckets); - if (m_num_buckets == max_bucket_count()) { + auto num_buckets = calc_num_buckets(m_shifts); + if constexpr (IsSegmented || !std::is_same_v) { + if constexpr (has_reserve) { + m_buckets.reserve(num_buckets); + } + for (size_t i = m_buckets.size(); i < num_buckets; ++i) { + m_buckets.emplace_back(); + } + } else { + m_buckets.resize(num_buckets); + } + if (num_buckets == max_bucket_count()) { // reached the maximum, make sure we can use each bucket m_max_bucket_capacity = max_bucket_count(); } else { - m_max_bucket_capacity = static_cast(static_cast(m_num_buckets) * max_load_factor()); + m_max_bucket_capacity = static_cast(static_cast(num_buckets) * max_load_factor()); } } void clear_buckets() { - if (m_buckets != nullptr) { - std::memset(&*m_buckets, 0, sizeof(Bucket) * bucket_count()); + if constexpr (IsSegmented || !std::is_same_v) { + for (auto&& e : m_buckets) { + std::memset(&e, 0, sizeof(e)); + } + } else { + std::memset(m_buckets.data(), 0, sizeof(Bucket) * bucket_count()); } } @@ -646,16 +1036,21 @@ private: } void increase_size() { - if (ANKERL_UNORDERED_DENSE_UNLIKELY(m_max_bucket_capacity == max_bucket_count())) { + if (m_max_bucket_capacity == max_bucket_count()) { + // remove the value again, we can't add it! + m_values.pop_back(); on_error_bucket_overflow(); } --m_shifts; - deallocate_buckets(); + if constexpr (!IsSegmented || std::is_same_v) { + deallocate_buckets(); + } allocate_buckets_from_shift(); clear_and_fill_buckets_from_values(); } - void do_erase(value_idx_type bucket_idx) { + template + void do_erase(value_idx_type bucket_idx, Op handle_erased_value) { auto const value_idx_to_remove = at(m_buckets, bucket_idx).m_value_idx; // shift down until either empty or an element with correct spot is found @@ -666,6 +1061,7 @@ private: bucket_idx = std::exchange(next_bucket_idx, next(next_bucket_idx)); } at(m_buckets, bucket_idx) = {}; + handle_erased_value(std::move(m_values[value_idx_to_remove])); // update m_values if (value_idx_to_remove != m_values.size() - 1) { @@ -686,8 +1082,8 @@ private: m_values.pop_back(); } - template - auto do_erase_key(K&& key) -> size_t { + template + auto do_erase_key(K&& key, Op handle_erased_value) -> size_t { if (empty()) { return 0; } @@ -703,7 +1099,7 @@ private: if (dist_and_fingerprint != at(m_buckets, bucket_idx).m_dist_and_fingerprint) { return 0; } - do_erase(bucket_idx); + do_erase(bucket_idx, handle_erased_value); return 1; } @@ -716,27 +1112,26 @@ private: return it_isinserted; } - template - auto do_place_element(dist_and_fingerprint_type dist_and_fingerprint, value_idx_type bucket_idx, K&& key, Args&&... args) + template + auto do_place_element(dist_and_fingerprint_type dist_and_fingerprint, value_idx_type bucket_idx, Args&&... args) -> std::pair { // emplace the new value. If that throws an exception, no harm done; index is still in a valid state - m_values.emplace_back(std::piecewise_construct, - std::forward_as_tuple(std::forward(key)), - std::forward_as_tuple(std::forward(args)...)); + m_values.emplace_back(std::forward(args)...); + + auto value_idx = static_cast(m_values.size() - 1); + if (ANKERL_UNORDERED_DENSE_UNLIKELY(is_full())) { + increase_size(); + } else { + place_and_shift_up({dist_and_fingerprint, value_idx}, bucket_idx); + } // place element and shift up until we find an empty spot - auto value_idx = static_cast(m_values.size() - 1); - place_and_shift_up({dist_and_fingerprint, value_idx}, bucket_idx); return {begin() + static_cast(value_idx), true}; } template auto do_try_emplace(K&& key, Args&&... args) -> std::pair { - if (ANKERL_UNORDERED_DENSE_UNLIKELY(is_full())) { - increase_size(); - } - auto hash = mixed_hash(key); auto dist_and_fingerprint = dist_and_fingerprint_from_hash(hash); auto bucket_idx = bucket_idx_from_hash(hash); @@ -744,11 +1139,15 @@ private: while (true) { auto* bucket = &at(m_buckets, bucket_idx); if (dist_and_fingerprint == bucket->m_dist_and_fingerprint) { - if (m_equal(key, m_values[bucket->m_value_idx].first)) { + if (m_equal(key, get_key(m_values[bucket->m_value_idx]))) { return {begin() + static_cast(bucket->m_value_idx), false}; } } else if (dist_and_fingerprint > bucket->m_dist_and_fingerprint) { - return do_place_element(dist_and_fingerprint, bucket_idx, std::forward(key), std::forward(args)...); + return do_place_element(dist_and_fingerprint, + bucket_idx, + std::piecewise_construct, + std::forward_as_tuple(std::forward(key)), + std::forward_as_tuple(std::forward(args)...)); } dist_and_fingerprint = dist_inc(dist_and_fingerprint); bucket_idx = next(bucket_idx); @@ -814,21 +1213,25 @@ private: } public: - table() - : table(0) {} - explicit table(size_t bucket_count, Hash const& hash = Hash(), KeyEqual const& equal = KeyEqual(), allocator_type const& alloc_or_container = allocator_type()) : m_values(alloc_or_container) + , m_buckets(alloc_or_container) , m_hash(hash) , m_equal(equal) { if (0 != bucket_count) { reserve(bucket_count); + } else { + allocate_buckets_from_shift(); + clear_buckets(); } } + table() + : table(0) {} + table(size_t bucket_count, allocator_type const& alloc) : table(bucket_count, Hash(), KeyEqual(), alloc) {} @@ -872,15 +1275,8 @@ public: : table(std::move(other), other.m_values.get_allocator()) {} table(table&& other, allocator_type const& alloc) noexcept - : m_values(std::move(other.m_values), alloc) - , m_buckets(std::exchange(other.m_buckets, nullptr)) - , m_num_buckets(std::exchange(other.m_num_buckets, 0)) - , m_max_bucket_capacity(std::exchange(other.m_max_bucket_capacity, 0)) - , m_max_load_factor(std::exchange(other.m_max_load_factor, default_max_load_factor)) - , m_hash(std::exchange(other.m_hash, {})) - , m_equal(std::exchange(other.m_equal, {})) - , m_shifts(std::exchange(other.m_shifts, initial_shifts)) { - other.m_values.clear(); + : m_values(alloc) { + *this = std::move(other); } table(std::initializer_list ilist, @@ -898,12 +1294,7 @@ public: table(std::initializer_list init, size_type bucket_count, Hash const& hash, allocator_type const& alloc) : table(init, bucket_count, hash, KeyEqual(), alloc) {} - ~table() { - if (nullptr != m_buckets) { - auto ba = bucket_alloc(m_values.get_allocator()); - bucket_alloc_traits::deallocate(ba, m_buckets, bucket_count()); - } - } + ~table() {} auto operator=(table const& other) -> table& { if (&other != this) { @@ -918,20 +1309,38 @@ public: return *this; } - auto operator=(table&& other) noexcept( - noexcept(std::is_nothrow_move_assignable_v&& std::is_nothrow_move_assignable_v&& - std::is_nothrow_move_assignable_v)) -> table& { + auto operator=(table&& other) noexcept(noexcept(std::is_nothrow_move_assignable_v && + std::is_nothrow_move_assignable_v && + std::is_nothrow_move_assignable_v)) -> table& { if (&other != this) { deallocate_buckets(); // deallocate before m_values is set (might have another allocator) m_values = std::move(other.m_values); - m_buckets = std::exchange(other.m_buckets, nullptr); - m_num_buckets = std::exchange(other.m_num_buckets, 0); - m_max_bucket_capacity = std::exchange(other.m_max_bucket_capacity, 0); - m_max_load_factor = std::exchange(other.m_max_load_factor, default_max_load_factor); - m_hash = std::exchange(other.m_hash, {}); - m_equal = std::exchange(other.m_equal, {}); - m_shifts = std::exchange(other.m_shifts, initial_shifts); other.m_values.clear(); + + // we can only reuse m_buckets when both maps have the same allocator! + if (get_allocator() == other.get_allocator()) { + m_buckets = std::move(other.m_buckets); + other.m_buckets.clear(); + m_max_bucket_capacity = std::exchange(other.m_max_bucket_capacity, 0); + m_shifts = std::exchange(other.m_shifts, initial_shifts); + m_max_load_factor = std::exchange(other.m_max_load_factor, default_max_load_factor); + m_hash = std::exchange(other.m_hash, {}); + m_equal = std::exchange(other.m_equal, {}); + other.allocate_buckets_from_shift(); + other.clear_buckets(); + } else { + // set max_load_factor *before* copying the other's buckets, so we have the same + // behavior + m_max_load_factor = other.m_max_load_factor; + + // copy_buckets sets m_buckets, m_num_buckets, m_max_bucket_capacity, m_shifts + copy_buckets(other); + // clear's the other's buckets so other is now already usable. + other.clear_buckets(); + m_hash = other.m_hash; + m_equal = other.m_equal; + } + // map "other" is now already usable, it's empty. } return *this; } @@ -1048,7 +1457,7 @@ public: on_error_too_many_elements(); } auto shifts = calc_shifts_for_size(container.size()); - if (0 == m_num_buckets || shifts < m_shifts || container.get_allocator() != m_values.get_allocator()) { + if (0 == bucket_count() || shifts < m_shifts || container.get_allocator() != m_values.get_allocator()) { m_shifts = shifts; deallocate_buckets(); allocate_buckets_from_shift(); @@ -1075,7 +1484,7 @@ public: break; } if (dist_and_fingerprint == bucket.m_dist_and_fingerprint && - m_equal(key, m_values[bucket.m_value_idx].first)) { + m_equal(key, get_key(m_values[bucket.m_value_idx]))) { key_found = true; break; } @@ -1142,10 +1551,6 @@ public: typename KE = KeyEqual, std::enable_if_t && is_transparent_v, bool> = true> auto emplace(K&& key) -> std::pair { - if (is_full()) { - increase_size(); - } - auto hash = mixed_hash(key); auto dist_and_fingerprint = dist_and_fingerprint_from_hash(hash); auto bucket_idx = bucket_idx_from_hash(hash); @@ -1161,19 +1566,11 @@ public: } // value is new, insert element first, so when exception happens we are in a valid state - m_values.emplace_back(std::forward(key)); - // now place the bucket and shift up until we find an empty spot - auto value_idx = static_cast(m_values.size() - 1); - place_and_shift_up({dist_and_fingerprint, value_idx}, bucket_idx); - return {begin() + static_cast(value_idx), true}; + return do_place_element(dist_and_fingerprint, bucket_idx, std::forward(key)); } template auto emplace(Args&&... args) -> std::pair { - if (is_full()) { - increase_size(); - } - // we have to instantiate the value_type to be able to access the key. // 1. emplace_back the object so it is constructed. 2. If the key is already there, pop it later in the loop. auto& key = get_key(m_values.emplace_back(std::forward(args)...)); @@ -1193,8 +1590,13 @@ public: // value is new, place the bucket and shift up until we find an empty spot auto value_idx = static_cast(m_values.size() - 1); - place_and_shift_up({dist_and_fingerprint, value_idx}, bucket_idx); - + if (ANKERL_UNORDERED_DENSE_UNLIKELY(is_full())) { + // increase_size just rehashes all the data we have in m_values + increase_size(); + } else { + // place element and shift up until we find an empty spot + place_and_shift_up({dist_and_fingerprint, value_idx}, bucket_idx); + } return {begin() + static_cast(value_idx), true}; } @@ -1256,15 +1658,37 @@ public: bucket_idx = next(bucket_idx); } - do_erase(bucket_idx); + do_erase(bucket_idx, [](value_type&& /*unused*/) { + }); return begin() + static_cast(value_idx_to_remove); } + auto extract(iterator it) -> value_type { + auto hash = mixed_hash(get_key(*it)); + auto bucket_idx = bucket_idx_from_hash(hash); + + auto const value_idx_to_remove = static_cast(it - cbegin()); + while (at(m_buckets, bucket_idx).m_value_idx != value_idx_to_remove) { + bucket_idx = next(bucket_idx); + } + + auto tmp = std::optional{}; + do_erase(bucket_idx, [&tmp](value_type&& val) { + tmp = std::move(val); + }); + return std::move(tmp).value(); + } + template , bool> = true> auto erase(const_iterator it) -> iterator { return erase(begin() + (it - cbegin())); } + template , bool> = true> + auto extract(const_iterator it) -> value_type { + return extract(begin() + (it - cbegin())); + } + auto erase(const_iterator first, const_iterator last) -> iterator { auto const idx_first = first - cbegin(); auto const idx_last = last - cbegin(); @@ -1290,16 +1714,35 @@ public: } auto erase(Key const& key) -> size_t { - return do_erase_key(key); + return do_erase_key(key, [](value_type&& /*unused*/) { + }); + } + + auto extract(Key const& key) -> std::optional { + auto tmp = std::optional{}; + do_erase_key(key, [&tmp](value_type&& val) { + tmp = std::move(val); + }); + return tmp; } template , bool> = true> auto erase(K&& key) -> size_t { - return do_erase_key(std::forward(key)); + return do_erase_key(std::forward(key), [](value_type&& /*unused*/) { + }); } - void swap(table& other) noexcept(noexcept(std::is_nothrow_swappable_v&& - std::is_nothrow_swappable_v&& std::is_nothrow_swappable_v)) { + template , bool> = true> + auto extract(K&& key) -> std::optional { + auto tmp = std::optional{}; + do_erase_key(std::forward(key), [&tmp](value_type&& val) { + tmp = std::move(val); + }); + return tmp; + } + + void swap(table& other) noexcept(noexcept(std::is_nothrow_swappable_v && + std::is_nothrow_swappable_v && std::is_nothrow_swappable_v)) { using std::swap; swap(other, *this); } @@ -1414,7 +1857,7 @@ public: // bucket interface /////////////////////////////////////////////////////// auto bucket_count() const noexcept -> size_t { // NOLINT(modernize-use-nodiscard) - return m_num_buckets; + return m_buckets.size(); } static constexpr auto max_bucket_count() noexcept -> size_t { // NOLINT(modernize-use-nodiscard) @@ -1433,7 +1876,7 @@ public: void max_load_factor(float ml) { m_max_load_factor = ml; - if (m_num_buckets != max_bucket_count()) { + if (bucket_count() != max_bucket_count()) { m_max_bucket_capacity = static_cast(static_cast(bucket_count()) * max_load_factor()); } } @@ -1457,7 +1900,7 @@ public: m_values.reserve(capa); } auto shifts = calc_shifts_for_size((std::max)(capa, size())); - if (0 == m_num_buckets || shifts < m_shifts) { + if (0 == bucket_count() || shifts < m_shifts) { m_shifts = shifts; deallocate_buckets(); allocate_buckets_from_shift(); @@ -1513,34 +1956,97 @@ public: } // namespace detail -template , - class KeyEqual = std::equal_to, - class AllocatorOrContainer = std::allocator>, - class Bucket = bucket_type::standard> -using map = detail::table; +ANKERL_UNORDERED_DENSE_EXPORT template , + class KeyEqual = std::equal_to, + class AllocatorOrContainer = std::allocator>, + class Bucket = bucket_type::standard, + class BucketContainer = detail::default_container_t> +using map = detail::table; -template , - class KeyEqual = std::equal_to, - class AllocatorOrContainer = std::allocator, - class Bucket = bucket_type::standard> -using set = detail::table; +ANKERL_UNORDERED_DENSE_EXPORT template , + class KeyEqual = std::equal_to, + class AllocatorOrContainer = std::allocator>, + class Bucket = bucket_type::standard, + class BucketContainer = detail::default_container_t> +using segmented_map = detail::table; -# if ANKERL_UNORDERED_DENSE_PMR +ANKERL_UNORDERED_DENSE_EXPORT template , + class KeyEqual = std::equal_to, + class AllocatorOrContainer = std::allocator, + class Bucket = bucket_type::standard, + class BucketContainer = detail::default_container_t> +using set = detail::table; + +ANKERL_UNORDERED_DENSE_EXPORT template , + class KeyEqual = std::equal_to, + class AllocatorOrContainer = std::allocator, + class Bucket = bucket_type::standard, + class BucketContainer = detail::default_container_t> +using segmented_set = detail::table; + +# if defined(ANKERL_UNORDERED_DENSE_PMR) namespace pmr { -template , - class KeyEqual = std::equal_to, - class Bucket = bucket_type::standard> -using map = detail::table>, Bucket>; +ANKERL_UNORDERED_DENSE_EXPORT template , + class KeyEqual = std::equal_to, + class Bucket = bucket_type::standard> +using map = detail::table>, + Bucket, + detail::default_container_t, + false>; -template , class KeyEqual = std::equal_to, class Bucket = bucket_type::standard> -using set = detail::table, Bucket>; +ANKERL_UNORDERED_DENSE_EXPORT template , + class KeyEqual = std::equal_to, + class Bucket = bucket_type::standard> +using segmented_map = detail::table>, + Bucket, + detail::default_container_t, + true>; + +ANKERL_UNORDERED_DENSE_EXPORT template , + class KeyEqual = std::equal_to, + class Bucket = bucket_type::standard> +using set = detail::table, + Bucket, + detail::default_container_t, + false>; + +ANKERL_UNORDERED_DENSE_EXPORT template , + class KeyEqual = std::equal_to, + class Bucket = bucket_type::standard> +using segmented_set = detail::table, + Bucket, + detail::default_container_t, + true>; } // namespace pmr @@ -1558,11 +2064,22 @@ using set = detail::table +ANKERL_UNORDERED_DENSE_EXPORT template // NOLINTNEXTLINE(cert-dcl58-cpp) -auto erase_if(ankerl::unordered_dense::detail::table& map, Pred pred) - -> size_t { - using map_t = ankerl::unordered_dense::detail::table; +auto erase_if( + ankerl::unordered_dense::detail::table& + map, + Pred pred) -> size_t { + using map_t = ankerl::unordered_dense::detail:: + table; // going back to front because erase() invalidates the end iterator auto const old_size = map.size(); @@ -1575,7 +2092,7 @@ auto erase_if(ankerl::unordered_dense::detail::table Date: Fri, 18 Jul 2025 16:01:15 +0800 Subject: [PATCH 11/13] Add ironing fan speed control (#9944) * Internal bridge fan speed should be applied only if overhang bridge fan control is enabled * Reduce duplicate code * Add ironing fan speed control --- src/libslic3r/GCode.cpp | 121 ++++++++++---------------- src/libslic3r/GCode.hpp | 6 +- src/libslic3r/GCode/CoolingBuffer.cpp | 41 ++++++++- src/libslic3r/Preset.cpp | 1 + src/libslic3r/Print.cpp | 1 + src/libslic3r/PrintConfig.cpp | 11 +++ src/libslic3r/PrintConfig.hpp | 1 + src/slic3r/GUI/Tab.cpp | 1 + 8 files changed, 101 insertions(+), 82 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index d1f881c702..9f0c236437 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1839,9 +1839,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato m_last_layer_z = 0.f; m_max_layer_z = 0.f; m_last_width = 0.f; - m_is_overhang_fan_on = false; - m_is_internal_bridge_fan_on = false; - m_is_supp_interface_fan_on = false; + m_is_role_based_fan_on.fill(false); #if ENABLE_GCODE_VIEWER_DATA_CHECKING m_last_mm3_per_mm = 0.; #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING @@ -5602,9 +5600,6 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, auto overhang_fan_threshold = EXTRUDER_CONFIG(overhang_fan_threshold); auto enable_overhang_bridge_fan = EXTRUDER_CONFIG(enable_overhang_bridge_fan); - - auto supp_interface_fan_speed = EXTRUDER_CONFIG(support_material_interface_fan_speed); - // { "0%", Overhang_threshold_none }, // { "10%", Overhang_threshold_1_4 }, @@ -5647,6 +5642,37 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, comment += ";_EXTERNAL_PERIMETER"; } + // Change fan speed based on current extrusion role + auto append_role_based_fan_marker = [this, &gcode](const ExtrusionRole role, const std::string_view& marker_prefix, const bool fan_on) { + assert(m_enable_cooling_markers); + + if (fan_on) { + if (!m_is_role_based_fan_on[role]) { + gcode += ";"; + gcode += marker_prefix; + gcode += "_FAN_START\n"; + m_is_role_based_fan_on[role] = true; + } + } else { + if (m_is_role_based_fan_on[role]) { + gcode += ";"; + gcode += marker_prefix; + gcode += "_FAN_END\n"; + m_is_role_based_fan_on[role] = false; + } + } + }; + auto apply_role_based_fan_speed = [ + &path, &append_role_based_fan_marker, + supp_interface_fan_speed = EXTRUDER_CONFIG(support_material_interface_fan_speed), + ironing_fan_speed = EXTRUDER_CONFIG(ironing_fan_speed) + ] { + append_role_based_fan_marker(erSupportMaterialInterface, "_SUPP_INTERFACE"sv, + supp_interface_fan_speed >= 0 && path.role() == erSupportMaterialInterface); + append_role_based_fan_marker(erIroning, "_IRONING"sv, + ironing_fan_speed >= 0 && path.role() == erIroning); + }; + if (!variable_speed) { // F is mm per minute. if( (std::abs(writer().get_current_speed() - F) > EPSILON) || (std::abs(_mm3_per_mm - m_last_mm3_mm) > EPSILON) ){ @@ -5703,41 +5729,15 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, if (enable_overhang_bridge_fan) { // BBS: Overhang_threshold_none means Overhang_threshold_1_4 and forcing cooling for all external // perimeter - if ((overhang_fan_threshold == Overhang_threshold_none && is_external_perimeter(path.role())) || - (path.role() == erBridgeInfill || path.role() == erOverhangPerimeter)) { // ORCA: Add support for separate internal bridge fan speed control - if (!m_is_overhang_fan_on) { - gcode += ";_OVERHANG_FAN_START\n"; - m_is_overhang_fan_on = true; - } - } else { - if (m_is_overhang_fan_on) { - m_is_overhang_fan_on = false; - gcode += ";_OVERHANG_FAN_END\n"; - } - } - if (path.role() == erInternalBridgeInfill) { // ORCA: Add support for separate internal bridge fan speed control - if (!m_is_internal_bridge_fan_on) { - gcode += ";_INTERNAL_BRIDGE_FAN_START\n"; - m_is_internal_bridge_fan_on = true; - } - } else { - if (m_is_internal_bridge_fan_on) { - m_is_internal_bridge_fan_on = false; - gcode += ";_INTERNAL_BRIDGE_FAN_END\n"; - } - } - } - if (supp_interface_fan_speed >= 0 && path.role() == erSupportMaterialInterface) { - if (!m_is_supp_interface_fan_on) { - gcode += ";_SUPP_INTERFACE_FAN_START\n"; - m_is_supp_interface_fan_on = true; - } - } else { - if (m_is_supp_interface_fan_on) { - gcode += ";_SUPP_INTERFACE_FAN_END\n"; - m_is_supp_interface_fan_on = false; - } + append_role_based_fan_marker(erOverhangPerimeter, "_OVERHANG"sv, + (overhang_fan_threshold == Overhang_threshold_none && is_external_perimeter(path.role())) || + (path.role() == erBridgeInfill || path.role() == erOverhangPerimeter)); // ORCA: Add support for separate internal bridge fan speed control + + // ORCA: Add support for separate internal bridge fan speed control + append_role_based_fan_marker(erInternalBridgeInfill, "_INTERNAL_BRIDGE"sv, path.role() == erInternalBridgeInfill); } + + apply_role_based_fan_speed(); } // BBS: use G1 if not enable arc fitting or has no arc fitting result or in spiral_mode mode or we are doing sloped extrusion // Attention: G2 and G3 is not supported in spiral_mode mode @@ -5870,43 +5870,14 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, if (m_enable_cooling_markers) { if (enable_overhang_bridge_fan) { cur_fan_enabled = check_overhang_fan(processed_point.overlap, path.role()); - if (pre_fan_enabled && cur_fan_enabled) { - if (!m_is_overhang_fan_on) { - gcode += ";_OVERHANG_FAN_START\n"; - m_is_overhang_fan_on = true; - } - } else { - if (m_is_overhang_fan_on) { - m_is_overhang_fan_on = false; - gcode += ";_OVERHANG_FAN_END\n"; - } - } + append_role_based_fan_marker(erOverhangPerimeter, "_OVERHANG"sv, pre_fan_enabled && cur_fan_enabled); pre_fan_enabled = cur_fan_enabled; + + // ORCA: Add support for separate internal bridge fan speed control + append_role_based_fan_marker(erInternalBridgeInfill, "_INTERNAL_BRIDGE"sv, path.role() == erInternalBridgeInfill); } - // ORCA: Add support for separate internal bridge fan speed control - if (path.role() == erInternalBridgeInfill) { - if (!m_is_internal_bridge_fan_on) { - gcode += ";_INTERNAL_BRIDGE_FAN_START\n"; - m_is_internal_bridge_fan_on = true; - } - } else { - if (m_is_internal_bridge_fan_on) { - gcode += ";_INTERNAL_BRIDGE_FAN_END\n"; - m_is_internal_bridge_fan_on = false; - } - } - - if (supp_interface_fan_speed >= 0 && path.role() == erSupportMaterialInterface) { - if (!m_is_supp_interface_fan_on) { - gcode += ";_SUPP_INTERFACE_FAN_START\n"; - m_is_supp_interface_fan_on = true; - } - } else { - if (m_is_supp_interface_fan_on) { - gcode += ";_SUPP_INTERFACE_FAN_END\n"; - m_is_supp_interface_fan_on = false; - } - } + + apply_role_based_fan_speed(); } const double line_length = (p - prev).norm(); diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index d02b751d0d..f3ce7aaf74 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -517,10 +517,8 @@ private: bool m_enable_exclude_object; std::vector m_label_objects_ids; std::string _encode_label_ids_to_base64(std::vector ids); - // Orca - bool m_is_overhang_fan_on; - bool m_is_internal_bridge_fan_on; // ORCA: Add support for separate internal bridge fan speed control - bool m_is_supp_interface_fan_on; + // ORCA: Add support for role based fan speed control + std::array m_is_role_based_fan_on; // Markers for the Pressure Equalizer to recognize the extrusion type. // The Pressure Equalizer removes the markers from the final G-code. bool m_enable_extrusion_role_markers; diff --git a/src/libslic3r/GCode/CoolingBuffer.cpp b/src/libslic3r/GCode/CoolingBuffer.cpp index 194afe9b1b..9541d68034 100644 --- a/src/libslic3r/GCode/CoolingBuffer.cpp +++ b/src/libslic3r/GCode/CoolingBuffer.cpp @@ -66,8 +66,11 @@ struct CoolingLine TYPE_SUPPORT_INTERFACE_FAN_START = 1 << 15, TYPE_SUPPORT_INTERFACE_FAN_END = 1 << 16, // ORCA: Add support for separate internal bridge fan speed control - TYPE_INTERNAL_BRIDGE_FAN_START = 1 << 17, - TYPE_INTERNAL_BRIDGE_FAN_END = 1 << 18, + TYPE_INTERNAL_BRIDGE_FAN_START = 1 << 17, + TYPE_INTERNAL_BRIDGE_FAN_END = 1 << 18, + // ORCA: Add support for ironing fan speed control + TYPE_IRONING_FAN_START = 1 << 19, + TYPE_IRONING_FAN_END = 1 << 20, }; CoolingLine(unsigned int type, size_t line_start, size_t line_end) : @@ -522,6 +525,10 @@ std::vector CoolingBuffer::parse_layer_gcode(const std:: line.type = CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_START; } else if (boost::starts_with(sline, ";_SUPP_INTERFACE_FAN_END")) { line.type = CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_END; + } else if (boost::starts_with(sline, ";_IRONING_FAN_START")) { // ORCA: Add support for ironing fan speed control + line.type = CoolingLine::TYPE_IRONING_FAN_START; + } else if (boost::starts_with(sline, ";_IRONING_FAN_END")) { // ORCA: Add support for ironing fan speed control + line.type = CoolingLine::TYPE_IRONING_FAN_END; } else if (boost::starts_with(sline, "G4 ")) { // Parse the wait time. line.type = CoolingLine::TYPE_G4; @@ -716,7 +723,14 @@ std::string CoolingBuffer::apply_layer_cooldown( int internal_bridge_fan_speed = 0; // ORCA: Add support for separate internal bridge fan speed control bool supp_interface_fan_control= false; int supp_interface_fan_speed = 0; - auto change_extruder_set_fan = [ this, layer_id, layer_time, &new_gcode, &overhang_fan_control, &overhang_fan_speed, &internal_bridge_fan_control, &internal_bridge_fan_speed, &supp_interface_fan_control, &supp_interface_fan_speed](bool immediately_apply) { + bool ironing_fan_control= false; // ORCA: Add support for ironing fan speed control + int ironing_fan_speed = 0; // ORCA: Add support for ironing fan speed control + auto change_extruder_set_fan = [ this, layer_id, layer_time, &new_gcode, + &overhang_fan_control, &overhang_fan_speed, + &internal_bridge_fan_control, &internal_bridge_fan_speed, + &supp_interface_fan_control, &supp_interface_fan_speed, + &ironing_fan_control, &ironing_fan_speed + ](bool immediately_apply) { #define EXTRUDER_CONFIG(OPT) m_config.OPT.get_at(m_current_extruder) float fan_min_speed = EXTRUDER_CONFIG(fan_min_speed); float fan_speed_new = EXTRUDER_CONFIG(reduce_fan_stop_start_freq) ? fan_min_speed : 0; @@ -768,6 +782,10 @@ std::string CoolingBuffer::apply_layer_cooldown( internal_bridge_fan_speed = overhang_fan_speed; internal_bridge_fan_control = overhang_fan_control; } + + // ORCA: Add support for ironing fan speed control + ironing_fan_speed = EXTRUDER_CONFIG(ironing_fan_speed); + ironing_fan_control = ironing_fan_speed >= 0; #undef EXTRUDER_CONFIG } else { @@ -779,6 +797,8 @@ std::string CoolingBuffer::apply_layer_cooldown( supp_interface_fan_speed = 0; internal_bridge_fan_control = false; // ORCA: Add support for separate internal bridge fan speed control internal_bridge_fan_speed = 0; // ORCA: Add support for separate internal bridge fan speed control + ironing_fan_control = false; // ORCA: Add support for ironing fan speed control + ironing_fan_speed = 0; // ORCA: Add support for ironing fan speed control } if (fan_speed_new != m_fan_speed) { m_fan_speed = fan_speed_new; @@ -803,6 +823,7 @@ std::string CoolingBuffer::apply_layer_cooldown( std::unordered_map fan_speed_change_requests = {{CoolingLine::TYPE_OVERHANG_FAN_START, false}, {CoolingLine::TYPE_INTERNAL_BRIDGE_FAN_START, false}, // ORCA: Add support for separate internal bridge fan speed control {CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_START, false}, + {CoolingLine::TYPE_IRONING_FAN_START, false}, // ORCA: Add support for ironing fan speed control {CoolingLine::TYPE_FORCE_RESUME_FAN, false}}; bool need_set_fan = false; @@ -851,6 +872,16 @@ std::string CoolingBuffer::apply_layer_cooldown( fan_speed_change_requests[CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_START] = false; } need_set_fan = true; + } else if (line->type & CoolingLine::TYPE_IRONING_FAN_START) { + if (ironing_fan_control && !fan_speed_change_requests[CoolingLine::TYPE_IRONING_FAN_START]) { + fan_speed_change_requests[CoolingLine::TYPE_IRONING_FAN_START] = true; + need_set_fan = true; + } + } else if (line->type & CoolingLine::TYPE_IRONING_FAN_END && fan_speed_change_requests[CoolingLine::TYPE_IRONING_FAN_START]) { + if (ironing_fan_control) { + fan_speed_change_requests[CoolingLine::TYPE_IRONING_FAN_START] = false; + } + need_set_fan = true; } else if (line->type & CoolingLine::TYPE_FORCE_RESUME_FAN) { // check if any fan speed change request is active if (m_fan_speed != -1 && !std::any_of(fan_speed_change_requests.begin(), fan_speed_change_requests.end(), [](const std::pair& p) { return p.second; })){ @@ -957,6 +988,10 @@ std::string CoolingBuffer::apply_layer_cooldown( new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, supp_interface_fan_speed); m_current_fan_speed = supp_interface_fan_speed; } + else if (fan_speed_change_requests[CoolingLine::TYPE_IRONING_FAN_START]){ + new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, ironing_fan_speed); + m_current_fan_speed = ironing_fan_speed; + } else if(fan_speed_change_requests[CoolingLine::TYPE_FORCE_RESUME_FAN] && m_current_fan_speed != -1){ new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_current_fan_speed); fan_speed_change_requests[CoolingLine::TYPE_FORCE_RESUME_FAN] = false; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 35ee46b27d..3ee5733929 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -866,6 +866,7 @@ static std::vector s_Preset_filament_options { "nozzle_temperature_range_low", "nozzle_temperature_range_high", //SoftFever "enable_pressure_advance", "pressure_advance","adaptive_pressure_advance","adaptive_pressure_advance_model","adaptive_pressure_advance_overhangs", "adaptive_pressure_advance_bridges","chamber_temperature", "filament_shrink","filament_shrinkage_compensation_z", "support_material_interface_fan_speed","internal_bridge_fan_speed", "filament_notes" /*,"filament_seam_gap"*/, + "ironing_fan_speed", "filament_loading_speed", "filament_loading_speed_start", "filament_unloading_speed", "filament_unloading_speed_start", "filament_toolchange_delay", "filament_cooling_moves", "filament_stamping_loading_speed", "filament_stamping_distance", "filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters", diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index ae2b420049..858fa32053 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -193,6 +193,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "exclude_object", "support_material_interface_fan_speed", "internal_bridge_fan_speed", // ORCA: Add support for separate internal bridge fan speed control + "ironing_fan_speed", "single_extruder_multi_material_priming", "activate_air_filtration", "during_print_exhaust_fan_speed", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 721475fa92..2b4f53af69 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -2770,6 +2770,17 @@ void PrintConfigDef::init_fff_params() def->max = 100; def->mode = comAdvanced; def->set_default_value(new ConfigOptionInts{ -1 }); + + def = this->add("ironing_fan_speed", coInts); + def->label = L("Ironing fan speed"); + def->tooltip = L("This part cooling fan speed is applied when ironing. Setting this parameter to a lower than regular speed " + "reduces possible nozzle clogging due to the low volumetric flow rate, making the interface smoother." + "\nSet to -1 to disable it."); + def->sidetext = "%"; + def->min = -1; + def->max = 100; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionInts{ -1 }); def = this->add("fuzzy_skin", coEnum); def->label = L("Fuzzy Skin"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index de981319d2..f09a1b5e49 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1396,6 +1396,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionInt, slow_down_layers)) ((ConfigOptionInts, support_material_interface_fan_speed)) ((ConfigOptionInts, internal_bridge_fan_speed)) // ORCA: Add support for separate internal bridge fan speed control + ((ConfigOptionInts, ironing_fan_speed)) // Orca: notes for profiles from PrusaSlicer ((ConfigOptionStrings, filament_notes)) ((ConfigOptionString, notes)) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index aa4a5a13fc..9821add07a 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -3549,6 +3549,7 @@ void TabFilament::build() optgroup->append_single_option_line("overhang_fan_speed", "auto-cooling"); optgroup->append_single_option_line("internal_bridge_fan_speed"); // ORCA: Add support for separate internal bridge fan speed control optgroup->append_single_option_line("support_material_interface_fan_speed"); + optgroup->append_single_option_line("ironing_fan_speed"); // ORCA: Add support for ironing fan speed control optgroup = page->new_optgroup(L("Auxiliary part cooling fan"), L"param_cooling_aux_fan"); optgroup->append_single_option_line("additional_cooling_fan_speed", "auxiliary-fan"); From 50e64d5961c1f80d7da6e75df959ff2ddf6db875 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Fri, 18 Jul 2025 16:01:25 +0800 Subject: [PATCH 12/13] Add fuzzy skin painting (#9979) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * SPE-2486: Refactor function apply_mm_segmentation() to prepare support for fuzzy skin painting. (cherry picked from commit 2c06c81159f7aadd6ac20c7a7583c8f4959a5601) * SPE-2585: Fix empty layers when multi-material painting and modifiers are used. (cherry picked from commit 4b3da02ec26d43bfad91897cb34779fb21419e3e) * Update project structure to match Prusa * SPE-2486: Add a new gizmo for fuzzy skin painting. (cherry picked from commit 886faac74ebe6978b828f51be62d26176e2900e5) * Fix render * Remove duplicated painting gizmo `render_triangles` code * SPE-2486: Extend multi-material segmentation to allow segmentation of any painted faces. (cherry picked from commit 519f5eea8e3be0d7c2cd5d030323ff264727e3d0) --------- Co-authored-by: Lukáš Hejl * SPE-2486: Implement segmentation of layers based on fuzzy skin painting. (cherry picked from commit 800b742b950438c5ed8323693074b6171300131c) * SPE-2486: Separate fuzzy skin implementation into the separate file. (cherry picked from commit efd95c1c66dc09fca7695fb82405056c687c2291) * Move more fuzzy code to separate file * Don't hide fuzzy skin option, so it can be applied to paint on fuzzy * Fix build * Add option group for fuzzy skin * Update icon color * Fix reset painting * Update UI style * Store fuzzy painting in bbs_3mf * Add missing fuzzy paint code * SPE-2486: Limit the depth of the painted fuzzy skin regions to make regions cover just external perimeters. This reduces the possibility of artifacts that could happen during regions merging. (cherry picked from commit fa2663f02647f80b239da4f45d92ef66f5ce048a) * Update icons --------- Co-authored-by: yw4z * Make the region compatible check a separate function * Only warn about multi-material if it's truly multi-perimeters * Improve gizmo UI & tooltips --------- Co-authored-by: Lukáš Hejl Co-authored-by: yw4z --- resources/images/fuzzy_skin.svg | 1 + resources/images/objlist_fuzzy_skin_paint.svg | 1 + resources/images/toolbar_fuzzy_skin_paint.svg | 1 + .../images/toolbar_fuzzy_skin_paint_dark.svg | 1 + .../Arachne/utils/ExtrusionJunction.hpp | 3 +- src/libslic3r/CMakeLists.txt | 10 +- src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp | 391 ++++++++++++++++++ src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp | 23 ++ .../Interlocking/InterlockingGenerator.cpp | 0 .../Interlocking/InterlockingGenerator.hpp | 2 +- .../{ => Feature}/Interlocking/VoxelUtils.cpp | 6 +- .../{ => Feature}/Interlocking/VoxelUtils.hpp | 4 +- src/libslic3r/Format/3mf.cpp | 19 +- src/libslic3r/Format/bbs_3mf.cpp | 23 +- src/libslic3r/Layer.cpp | 70 ++-- src/libslic3r/Layer.hpp | 3 + src/libslic3r/Model.cpp | 21 + src/libslic3r/Model.hpp | 33 +- src/libslic3r/MultiMaterialSegmentation.cpp | 314 +++++--------- src/libslic3r/MultiMaterialSegmentation.hpp | 33 +- src/libslic3r/PerimeterGenerator.cpp | 371 +---------------- src/libslic3r/Print.cpp | 30 +- src/libslic3r/Print.hpp | 25 +- src/libslic3r/PrintApply.cpp | 70 +++- src/libslic3r/PrintObjectSlice.cpp | 333 +++++++++++---- src/libslic3r/TriangleSelector.hpp | 2 + src/slic3r/CMakeLists.txt | 2 + src/slic3r/GUI/ConfigManipulation.cpp | 10 +- src/slic3r/GUI/GLCanvas3D.cpp | 24 +- src/slic3r/GUI/GUI_ObjectList.cpp | 39 +- src/slic3r/GUI/GUI_ObjectList.hpp | 1 - src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp | 48 --- src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp | 2 - src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp | 390 +++++++++++++++++ src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.hpp | 52 +++ .../GUI/Gizmos/GLGizmoMmuSegmentation.cpp | 54 +-- .../GUI/Gizmos/GLGizmoMmuSegmentation.hpp | 2 - src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp | 33 +- src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp | 3 +- src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp | 47 --- src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp | 2 - src/slic3r/GUI/Gizmos/GLGizmos.hpp | 1 + src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 34 +- src/slic3r/GUI/Gizmos/GLGizmosManager.hpp | 3 +- src/slic3r/GUI/KBShortcutsDialog.cpp | 1 + src/slic3r/GUI/NotificationManager.cpp | 3 +- src/slic3r/GUI/ObjectDataViewModel.cpp | 3 +- src/slic3r/GUI/ObjectDataViewModel.hpp | 3 +- src/slic3r/GUI/Plater.cpp | 6 +- src/slic3r/GUI/Tab.cpp | 1 + 50 files changed, 1614 insertions(+), 940 deletions(-) create mode 100644 resources/images/fuzzy_skin.svg create mode 100644 resources/images/objlist_fuzzy_skin_paint.svg create mode 100644 resources/images/toolbar_fuzzy_skin_paint.svg create mode 100644 resources/images/toolbar_fuzzy_skin_paint_dark.svg create mode 100644 src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp create mode 100644 src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp rename src/libslic3r/{ => Feature}/Interlocking/InterlockingGenerator.cpp (100%) rename src/libslic3r/{ => Feature}/Interlocking/InterlockingGenerator.hpp (99%) rename src/libslic3r/{ => Feature}/Interlocking/VoxelUtils.cpp (98%) rename src/libslic3r/{ => Feature}/Interlocking/VoxelUtils.hpp (99%) create mode 100644 src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp create mode 100644 src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.hpp diff --git a/resources/images/fuzzy_skin.svg b/resources/images/fuzzy_skin.svg new file mode 100644 index 0000000000..78294b863f --- /dev/null +++ b/resources/images/fuzzy_skin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/objlist_fuzzy_skin_paint.svg b/resources/images/objlist_fuzzy_skin_paint.svg new file mode 100644 index 0000000000..b011d2cf1e --- /dev/null +++ b/resources/images/objlist_fuzzy_skin_paint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/toolbar_fuzzy_skin_paint.svg b/resources/images/toolbar_fuzzy_skin_paint.svg new file mode 100644 index 0000000000..3bf4f83ab7 --- /dev/null +++ b/resources/images/toolbar_fuzzy_skin_paint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/toolbar_fuzzy_skin_paint_dark.svg b/resources/images/toolbar_fuzzy_skin_paint_dark.svg new file mode 100644 index 0000000000..da06932f64 --- /dev/null +++ b/resources/images/toolbar_fuzzy_skin_paint_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/libslic3r/Arachne/utils/ExtrusionJunction.hpp b/src/libslic3r/Arachne/utils/ExtrusionJunction.hpp index 7789612e4b..625bf9b727 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionJunction.hpp +++ b/src/libslic3r/Arachne/utils/ExtrusionJunction.hpp @@ -59,7 +59,8 @@ inline const Point& make_point(const ExtrusionJunction& ej) return ej.p; } -using LineJunctions = std::vector; //; //; } #endif // UTILS_EXTRUSION_JUNCTION_H diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 6a1bc24d81..2e56523334 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -77,7 +77,13 @@ set(lisbslic3r_sources ExtrusionEntityCollection.hpp ExtrusionSimulator.cpp ExtrusionSimulator.hpp + Feature/Interlocking/InterlockingGenerator.cpp + Feature/Interlocking/InterlockingGenerator.hpp + Feature/Interlocking/VoxelUtils.cpp + Feature/Interlocking/VoxelUtils.hpp FileParserError.hpp + Feature/FuzzySkin/FuzzySkin.cpp + Feature/FuzzySkin/FuzzySkin.hpp Fill/Fill.cpp Fill/Fill.hpp Fill/Fill3DHoneycomb.cpp @@ -445,10 +451,6 @@ set(lisbslic3r_sources calib.cpp GCode/Thumbnails.cpp GCode/Thumbnails.hpp - Interlocking/InterlockingGenerator.hpp - Interlocking/InterlockingGenerator.cpp - Interlocking/VoxelUtils.hpp - Interlocking/VoxelUtils.cpp ) if (APPLE) diff --git a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp new file mode 100644 index 0000000000..a79220951e --- /dev/null +++ b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp @@ -0,0 +1,391 @@ +#include + +#include "libslic3r/Algorithm/LineSplit.hpp" +#include "libslic3r/Arachne/utils/ExtrusionJunction.hpp" +#include "libslic3r/Arachne/utils/ExtrusionLine.hpp" +#include "libslic3r/Layer.hpp" +#include "libslic3r/PerimeterGenerator.hpp" +#include "libslic3r/Point.hpp" +#include "libslic3r/Polygon.hpp" +#include "libslic3r/Print.hpp" +#include "libslic3r/PrintConfig.hpp" + +#include "FuzzySkin.hpp" + +#include "libnoise/noise.h" + +// #define DEBUG_FUZZY + +using namespace Slic3r; + +namespace Slic3r::Feature::FuzzySkin { + +// Produces a random value between 0 and 1. Thread-safe. +static double random_value() { + thread_local std::random_device rd; + // Hash thread ID for random number seed if no hardware rng seed is available + thread_local std::mt19937 gen(rd.entropy() > 0 ? rd() : std::hash()(std::this_thread::get_id())); + thread_local std::uniform_real_distribution dist(0.0, 1.0); + return dist(gen); +} + +class UniformNoise: public noise::module::Module { + public: + UniformNoise(): Module (GetSourceModuleCount ()) {}; + + virtual int GetSourceModuleCount() const { return 0; } + virtual double GetValue(double x, double y, double z) const { return random_value() * 2 - 1; } +}; + +static std::unique_ptr get_noise_module(const FuzzySkinConfig& cfg) { + if (cfg.noise_type == NoiseType::Perlin) { + auto perlin_noise = noise::module::Perlin(); + perlin_noise.SetFrequency(1 / cfg.noise_scale); + perlin_noise.SetOctaveCount(cfg.noise_octaves); + perlin_noise.SetPersistence(cfg.noise_persistence); + return std::make_unique(perlin_noise); + } else if (cfg.noise_type == NoiseType::Billow) { + auto billow_noise = noise::module::Billow(); + billow_noise.SetFrequency(1 / cfg.noise_scale); + billow_noise.SetOctaveCount(cfg.noise_octaves); + billow_noise.SetPersistence(cfg.noise_persistence); + return std::make_unique(billow_noise); + } else if (cfg.noise_type == NoiseType::RidgedMulti) { + auto ridged_multi_noise = noise::module::RidgedMulti(); + ridged_multi_noise.SetFrequency(1 / cfg.noise_scale); + ridged_multi_noise.SetOctaveCount(cfg.noise_octaves); + return std::make_unique(ridged_multi_noise); + } else if (cfg.noise_type == NoiseType::Voronoi) { + auto voronoi_noise = noise::module::Voronoi(); + voronoi_noise.SetFrequency(1 / cfg.noise_scale); + voronoi_noise.SetDisplacement(1.0); + return std::make_unique(voronoi_noise); + } else { + return std::make_unique(); + } +} + +// Thanks Cura developers for this function. +void fuzzy_polyline(Points& poly, bool closed, coordf_t slice_z, const FuzzySkinConfig& cfg) +{ + std::unique_ptr noise = get_noise_module(cfg); + + const double min_dist_between_points = cfg.point_distance * 3. / 4.; // hardcoded: the point distance may vary between 3/4 and 5/4 the supplied value + const double range_random_point_dist = cfg.point_distance / 2.; + double dist_left_over = random_value() * (min_dist_between_points / 2.); // the distance to be traversed on the line before making the first new point + Point* p0 = &poly.back(); + Points out; + out.reserve(poly.size()); + for (Point &p1 : poly) + { + if (!closed) { + // Skip the first point for open path + closed = true; + p0 = &p1; + continue; + } + // 'a' is the (next) new point between p0 and p1 + Vec2d p0p1 = (p1 - *p0).cast(); + double p0p1_size = p0p1.norm(); + double p0pa_dist = dist_left_over; + for (; p0pa_dist < p0p1_size; + p0pa_dist += min_dist_between_points + random_value() * range_random_point_dist) + { + Point pa = *p0 + (p0p1 * (p0pa_dist / p0p1_size)).cast(); + double r = noise->GetValue(unscale_(pa.x()), unscale_(pa.y()), slice_z) * cfg.thickness; + out.emplace_back(pa + (perp(p0p1).cast().normalized() * r).cast()); + } + dist_left_over = p0pa_dist - p0p1_size; + p0 = &p1; + } + while (out.size() < 3) { + size_t point_idx = poly.size() - 2; + out.emplace_back(poly[point_idx]); + if (point_idx == 0) + break; + -- point_idx; + } + if (out.size() >= 3) + poly = std::move(out); +} + +// Thanks Cura developers for this function. +void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice_z, const FuzzySkinConfig& cfg) +{ + std::unique_ptr noise = get_noise_module(cfg); + + const double min_dist_between_points = cfg.point_distance * 3. / 4.; // hardcoded: the point distance may vary between 3/4 and 5/4 the supplied value + const double range_random_point_dist = cfg.point_distance / 2.; + double dist_left_over = random_value() * (min_dist_between_points / 2.); // the distance to be traversed on the line before making the first new point + + auto* p0 = &ext_lines.front(); + Arachne::ExtrusionJunctions out; + out.reserve(ext_lines.size()); + for (auto& p1 : ext_lines) { + if (p0->p == p1.p) { // Connect endpoints. + out.emplace_back(p1.p, p1.w, p1.perimeter_index); + continue; + } + + // 'a' is the (next) new point between p0 and p1 + Vec2d p0p1 = (p1.p - p0->p).cast(); + double p0p1_size = p0p1.norm(); + double p0pa_dist = dist_left_over; + for (; p0pa_dist < p0p1_size; p0pa_dist += min_dist_between_points + random_value() * range_random_point_dist) { + Point pa = p0->p + (p0p1 * (p0pa_dist / p0p1_size)).cast(); + double r = noise->GetValue(unscale_(pa.x()), unscale_(pa.y()), slice_z) * cfg.thickness; + out.emplace_back(pa + (perp(p0p1).cast().normalized() * r).cast(), p1.w, p1.perimeter_index); + } + dist_left_over = p0pa_dist - p0p1_size; + p0 = &p1; + } + + while (out.size() < 3) { + size_t point_idx = ext_lines.size() - 2; + out.emplace_back(ext_lines[point_idx].p, ext_lines[point_idx].w, ext_lines[point_idx].perimeter_index); + if (point_idx == 0) + break; + --point_idx; + } + + if (ext_lines.back().p == ext_lines.front().p) // Connect endpoints. + out.front().p = out.back().p; + + if (out.size() >= 3) + ext_lines = std::move(out); +} + +void group_region_by_fuzzify(PerimeterGenerator& g) +{ + g.regions_by_fuzzify.clear(); + g.has_fuzzy_skin = false; + g.has_fuzzy_hole = false; + + std::unordered_map regions; + for (auto region : *g.compatible_regions) { + const auto& region_config = region->region().config(); + const FuzzySkinConfig cfg{region_config.fuzzy_skin, + scaled(region_config.fuzzy_skin_thickness.value), + scaled(region_config.fuzzy_skin_point_distance.value), + region_config.fuzzy_skin_first_layer, + region_config.fuzzy_skin_noise_type, + region_config.fuzzy_skin_scale, + region_config.fuzzy_skin_octaves, + region_config.fuzzy_skin_persistence}; + auto& surfaces = regions[cfg]; + for (const auto& surface : region->slices.surfaces) { + surfaces.push_back(&surface); + } + + if (cfg.type != FuzzySkinType::None) { + g.has_fuzzy_skin = true; + if (cfg.type != FuzzySkinType::External) { + g.has_fuzzy_hole = true; + } + } + } + + if (regions.size() == 1) { // optimization + g.regions_by_fuzzify[regions.begin()->first] = {}; + return; + } + + for (auto& it : regions) { + g.regions_by_fuzzify[it.first] = offset_ex(it.second, ClipperSafetyOffset); + } +} + +bool should_fuzzify(const FuzzySkinConfig& config, const int layer_id, const size_t loop_idx, const bool is_contour) +{ + const auto fuzziy_type = config.type; + + if (fuzziy_type == FuzzySkinType::None) { + return false; + } + if (!config.fuzzy_first_layer && layer_id <= 0) { + // Do not fuzzy first layer unless told to + return false; + } + + const bool fuzzify_contours = loop_idx == 0 || fuzziy_type == FuzzySkinType::AllWalls; + const bool fuzzify_holes = fuzzify_contours && (fuzziy_type == FuzzySkinType::All || fuzziy_type == FuzzySkinType::AllWalls); + + return is_contour ? fuzzify_contours : fuzzify_holes; +} + +Polygon apply_fuzzy_skin(const Polygon& polygon, const PerimeterGenerator& perimeter_generator, const size_t loop_idx, const bool is_contour) +{ + Polygon fuzzified; + + const auto slice_z = perimeter_generator.slice_z; + const auto& regions = perimeter_generator.regions_by_fuzzify; + if (regions.size() == 1) { // optimization + const auto& config = regions.begin()->first; + const bool fuzzify = should_fuzzify(config, perimeter_generator.layer_id, loop_idx, is_contour); + if (!fuzzify) { + return polygon; + } + + fuzzified = polygon; + fuzzy_polyline(fuzzified.points, true, slice_z, config); + return fuzzified; + } + + // Find all affective regions + std::vector> fuzzified_regions; + fuzzified_regions.reserve(regions.size()); + for (const auto& region : regions) { + if (should_fuzzify(region.first, perimeter_generator.layer_id, loop_idx, is_contour)) { + fuzzified_regions.emplace_back(region.first, region.second); + } + } + if (fuzzified_regions.empty()) { + return polygon; + } + +#ifdef DEBUG_FUZZY + { + int i = 0; + for (const auto& r : fuzzified_regions) { + BoundingBox bbox = get_extents(perimeter_generator.slices->surfaces); + bbox.offset(scale_(1.)); + ::Slic3r::SVG svg(debug_out_path("fuzzy_traverse_loops_%d_%d_%d_region_%d.svg", perimeter_generator.layer_id, + loop.is_contour ? 0 : 1, loop.depth, i) + .c_str(), + bbox); + svg.draw_outline(perimeter_generator.slices->surfaces); + svg.draw_outline(loop.polygon, "green"); + svg.draw(r.second, "red", 0.5); + svg.draw_outline(r.second, "red"); + svg.Close(); + i++; + } + } +#endif + + // Split the loops into lines with different config, and fuzzy them separately + fuzzified = polygon; + for (const auto& r : fuzzified_regions) { + const auto splitted = Algorithm::split_line(fuzzified, r.second, true); + if (splitted.empty()) { + // No intersection, skip + continue; + } + + // Fuzzy splitted polygon + if (std::all_of(splitted.begin(), splitted.end(), [](const Algorithm::SplitLineJunction& j) { return j.clipped; })) { + // The entire polygon is fuzzified + fuzzy_polyline(fuzzified.points, true, slice_z, r.first); + } else { + Points segment; + segment.reserve(splitted.size()); + fuzzified.points.clear(); + + const auto fuzzy_current_segment = [&segment, &fuzzified, &r, slice_z]() { + fuzzified.points.push_back(segment.front()); + const auto back = segment.back(); + fuzzy_polyline(segment, false, slice_z, r.first); + fuzzified.points.insert(fuzzified.points.end(), segment.begin(), segment.end()); + fuzzified.points.push_back(back); + segment.clear(); + }; + + for (const auto& p : splitted) { + if (p.clipped) { + segment.push_back(p.p); + } else { + if (segment.empty()) { + fuzzified.points.push_back(p.p); + } else { + segment.push_back(p.p); + fuzzy_current_segment(); + } + } + } + if (!segment.empty()) { + // Close the loop + segment.push_back(splitted.front().p); + fuzzy_current_segment(); + } + } + } + + return fuzzified; +} + +void apply_fuzzy_skin(Arachne::ExtrusionLine* extrusion, const PerimeterGenerator& perimeter_generator, const bool is_contour) +{ + const auto slice_z = perimeter_generator.slice_z; + const auto& regions = perimeter_generator.regions_by_fuzzify; + if (regions.size() == 1) { // optimization + const auto& config = regions.begin()->first; + const bool fuzzify = should_fuzzify(config, perimeter_generator.layer_id, extrusion->inset_idx, is_contour); + if (fuzzify) + fuzzy_extrusion_line(extrusion->junctions, slice_z, config); + } else { + // Find all affective regions + std::vector> fuzzified_regions; + fuzzified_regions.reserve(regions.size()); + for (const auto& region : regions) { + if (should_fuzzify(region.first, perimeter_generator.layer_id, extrusion->inset_idx, is_contour)) { + fuzzified_regions.emplace_back(region.first, region.second); + } + } + if (!fuzzified_regions.empty()) { + // Split the loops into lines with different config, and fuzzy them separately + for (const auto& r : fuzzified_regions) { + const auto splitted = Algorithm::split_line(*extrusion, r.second, false); + if (splitted.empty()) { + // No intersection, skip + continue; + } + + // Fuzzy splitted extrusion + if (std::all_of(splitted.begin(), splitted.end(), [](const Algorithm::SplitLineJunction& j) { return j.clipped; })) { + // The entire polygon is fuzzified + fuzzy_extrusion_line(extrusion->junctions, slice_z, r.first); + } else { + const auto current_ext = extrusion->junctions; + std::vector segment; + segment.reserve(current_ext.size()); + extrusion->junctions.clear(); + + const auto fuzzy_current_segment = [&segment, &extrusion, &r, slice_z]() { + extrusion->junctions.push_back(segment.front()); + const auto back = segment.back(); + fuzzy_extrusion_line(segment, slice_z, r.first); + extrusion->junctions.insert(extrusion->junctions.end(), segment.begin(), segment.end()); + extrusion->junctions.push_back(back); + segment.clear(); + }; + + const auto to_ex_junction = [¤t_ext](const Algorithm::SplitLineJunction& j) -> Arachne::ExtrusionJunction { + Arachne::ExtrusionJunction res = current_ext[j.get_src_index()]; + if (!j.is_src()) { + res.p = j.p; + } + return res; + }; + + for (const auto& p : splitted) { + if (p.clipped) { + segment.push_back(to_ex_junction(p)); + } else { + if (segment.empty()) { + extrusion->junctions.push_back(to_ex_junction(p)); + } else { + segment.push_back(to_ex_junction(p)); + fuzzy_current_segment(); + } + } + } + if (!segment.empty()) { + fuzzy_current_segment(); + } + } + } + } + } +} + +} // namespace Slic3r::Feature::FuzzySkin diff --git a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp new file mode 100644 index 0000000000..be0b9750c1 --- /dev/null +++ b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp @@ -0,0 +1,23 @@ +#ifndef libslic3r_FuzzySkin_hpp_ +#define libslic3r_FuzzySkin_hpp_ + +#include "libslic3r/Arachne/utils/ExtrusionJunction.hpp" +#include "libslic3r/Arachne/utils/ExtrusionLine.hpp" +#include "libslic3r/PerimeterGenerator.hpp" + +namespace Slic3r::Feature::FuzzySkin { + +void fuzzy_polyline(Points& poly, bool closed, coordf_t slice_z, const FuzzySkinConfig& cfg); + +void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice_z, const FuzzySkinConfig& cfg); + +void group_region_by_fuzzify(PerimeterGenerator& g); + +bool should_fuzzify(const FuzzySkinConfig& config, int layer_id, size_t loop_idx, bool is_contour); + +Polygon apply_fuzzy_skin(const Polygon& polygon, const PerimeterGenerator& perimeter_generator, size_t loop_idx, bool is_contour); +void apply_fuzzy_skin(Arachne::ExtrusionLine* extrusion, const PerimeterGenerator& perimeter_generator, bool is_contour); + +} // namespace Slic3r::Feature::FuzzySkin + +#endif // libslic3r_FuzzySkin_hpp_ diff --git a/src/libslic3r/Interlocking/InterlockingGenerator.cpp b/src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp similarity index 100% rename from src/libslic3r/Interlocking/InterlockingGenerator.cpp rename to src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp diff --git a/src/libslic3r/Interlocking/InterlockingGenerator.hpp b/src/libslic3r/Feature/Interlocking/InterlockingGenerator.hpp similarity index 99% rename from src/libslic3r/Interlocking/InterlockingGenerator.hpp rename to src/libslic3r/Feature/Interlocking/InterlockingGenerator.hpp index aca74010cd..6f331fb8ef 100644 --- a/src/libslic3r/Interlocking/InterlockingGenerator.hpp +++ b/src/libslic3r/Feature/Interlocking/InterlockingGenerator.hpp @@ -4,7 +4,7 @@ #ifndef INTERLOCKING_GENERATOR_HPP #define INTERLOCKING_GENERATOR_HPP -#include "../Print.hpp" +#include "libslic3r/Print.hpp" #include "VoxelUtils.hpp" namespace Slic3r { diff --git a/src/libslic3r/Interlocking/VoxelUtils.cpp b/src/libslic3r/Feature/Interlocking/VoxelUtils.cpp similarity index 98% rename from src/libslic3r/Interlocking/VoxelUtils.cpp rename to src/libslic3r/Feature/Interlocking/VoxelUtils.cpp index ed012233ba..303473ae48 100644 --- a/src/libslic3r/Interlocking/VoxelUtils.cpp +++ b/src/libslic3r/Feature/Interlocking/VoxelUtils.cpp @@ -2,9 +2,9 @@ // CuraEngine is released under the terms of the AGPLv3 or higher. #include "VoxelUtils.hpp" -#include "../Geometry.hpp" -#include "../Fill/FillRectilinear.hpp" -#include "../Surface.hpp" +#include "libslic3r/Geometry.hpp" +#include "libslic3r/Fill/FillRectilinear.hpp" +#include "libslic3r/Surface.hpp" namespace Slic3r { diff --git a/src/libslic3r/Interlocking/VoxelUtils.hpp b/src/libslic3r/Feature/Interlocking/VoxelUtils.hpp similarity index 99% rename from src/libslic3r/Interlocking/VoxelUtils.hpp rename to src/libslic3r/Feature/Interlocking/VoxelUtils.hpp index 8496b3b233..0348b69598 100644 --- a/src/libslic3r/Interlocking/VoxelUtils.hpp +++ b/src/libslic3r/Feature/Interlocking/VoxelUtils.hpp @@ -6,8 +6,8 @@ #include -#include "../Polygon.hpp" -#include "../ExPolygon.hpp" +#include "libslic3r/Polygon.hpp" +#include "libslic3r/ExPolygon.hpp" namespace Slic3r { diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp index 7ca0bceb97..812e9f0154 100644 --- a/src/libslic3r/Format/3mf.cpp +++ b/src/libslic3r/Format/3mf.cpp @@ -112,6 +112,7 @@ static constexpr const char* INSTANCESCOUNT_ATTR = "instances_count"; static constexpr const char* CUSTOM_SUPPORTS_ATTR = "slic3rpe:custom_supports"; static constexpr const char* CUSTOM_SEAM_ATTR = "slic3rpe:custom_seam"; static constexpr const char* MMU_SEGMENTATION_ATTR = "slic3rpe:mmu_segmentation"; +static constexpr const char* FUZZY_SKIN_ATTR = "slic3rpe:fuzzy_skin"; static constexpr const char* KEY_ATTR = "key"; static constexpr const char* VALUE_ATTR = "value"; @@ -417,6 +418,7 @@ ModelVolumeType type_from_string(const std::string &s) std::vector custom_supports; std::vector custom_seam; std::vector mmu_segmentation; + std::vector fuzzy_skin; bool empty() { return vertices.empty() || triangles.empty(); } @@ -426,6 +428,7 @@ ModelVolumeType type_from_string(const std::string &s) custom_supports.clear(); custom_seam.clear(); mmu_segmentation.clear(); + fuzzy_skin.clear(); } }; @@ -1739,6 +1742,7 @@ ModelVolumeType type_from_string(const std::string &s) m_curr_object.geometry.custom_supports.push_back(get_attribute_value_string(attributes, num_attributes, CUSTOM_SUPPORTS_ATTR)); m_curr_object.geometry.custom_seam.push_back(get_attribute_value_string(attributes, num_attributes, CUSTOM_SEAM_ATTR)); + m_curr_object.geometry.fuzzy_skin.push_back(get_attribute_value_string(attributes, num_attributes, FUZZY_SKIN_ATTR)); m_curr_object.geometry.mmu_segmentation.push_back(get_attribute_value_string(attributes, num_attributes, MMU_SEGMENTATION_ATTR)); return true; } @@ -2152,10 +2156,11 @@ ModelVolumeType type_from_string(const std::string &s) if (has_transform) volume->source.transform = Slic3r::Geometry::Transformation(volume_matrix_to_object); - // recreate custom supports, seam and mmu segmentation from previously loaded attribute + // recreate custom supports, seam, mm segmentation and fuzzy skin from previously loaded attribute volume->supported_facets.reserve(triangles_count); volume->seam_facets.reserve(triangles_count); volume->mmu_segmentation_facets.reserve(triangles_count); + volume->fuzzy_skin_facets.reserve(triangles_count); for (size_t i=0; iseam_facets.set_triangle_from_string(i, geometry.custom_seam[index]); if (! geometry.mmu_segmentation[index].empty()) volume->mmu_segmentation_facets.set_triangle_from_string(i, geometry.mmu_segmentation[index]); + if (! geometry.fuzzy_skin[index].empty()) + volume->fuzzy_skin_facets.set_triangle_from_string(i, geometry.fuzzy_skin[index]); } volume->supported_facets.shrink_to_fit(); volume->seam_facets.shrink_to_fit(); volume->mmu_segmentation_facets.shrink_to_fit(); + volume->fuzzy_skin_facets.shrink_to_fit(); // apply the remaining volume's metadata for (const Metadata& metadata : volume_data.metadata) { @@ -2824,6 +2832,15 @@ ModelVolumeType type_from_string(const std::string &s) output_buffer += "\""; } + std::string fuzzy_skin_data_string = volume->fuzzy_skin_facets.get_triangle_as_string(i); + if (!fuzzy_skin_data_string.empty()) { + output_buffer += " "; + output_buffer += FUZZY_SKIN_ATTR; + output_buffer += "=\""; + output_buffer += fuzzy_skin_data_string; + output_buffer += "\""; + } + output_buffer += "/>\n"; if (! flush()) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 00c588283d..67e20d81a8 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -276,6 +276,7 @@ static constexpr const char* INSTANCESCOUNT_ATTR = "instances_count"; static constexpr const char* CUSTOM_SUPPORTS_ATTR = "paint_supports"; static constexpr const char* CUSTOM_SEAM_ATTR = "paint_seam"; static constexpr const char* MMU_SEGMENTATION_ATTR = "paint_color"; +static constexpr const char* FUZZY_SKIN_ATTR = "paint_fuzzy"; // BBS static constexpr const char* FACE_PROPERTY_ATTR = "face_property"; @@ -661,6 +662,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::vector custom_supports; std::vector custom_seam; std::vector mmu_segmentation; + std::vector fuzzy_skin; // BBS std::vector face_properties; @@ -680,6 +682,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) custom_supports.clear(); custom_seam.clear(); mmu_segmentation.clear(); + fuzzy_skin.clear(); } }; @@ -3602,6 +3605,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_curr_object->geometry.custom_supports.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_SUPPORTS_ATTR)); m_curr_object->geometry.custom_seam.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_SEAM_ATTR)); m_curr_object->geometry.mmu_segmentation.push_back(bbs_get_attribute_value_string(attributes, num_attributes, MMU_SEGMENTATION_ATTR)); + m_curr_object->geometry.fuzzy_skin.push_back(bbs_get_attribute_value_string(attributes, num_attributes, FUZZY_SKIN_ATTR)); // BBS m_curr_object->geometry.face_properties.push_back(bbs_get_attribute_value_string(attributes, num_attributes, FACE_PROPERTY_ATTR)); } @@ -4764,21 +4768,27 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) volume->supported_facets.reserve(triangles_count); volume->seam_facets.reserve(triangles_count); volume->mmu_segmentation_facets.reserve(triangles_count); + volume->fuzzy_skin_facets.reserve(triangles_count); for (size_t i=0; igeometry.custom_supports.size()); assert(i < sub_object->geometry.custom_seam.size()); assert(i < sub_object->geometry.mmu_segmentation.size()); + assert(i < sub_object->geometry.fuzzy_skin.size()); if (! sub_object->geometry.custom_supports[i].empty()) volume->supported_facets.set_triangle_from_string(i, sub_object->geometry.custom_supports[i]); if (! sub_object->geometry.custom_seam[i].empty()) volume->seam_facets.set_triangle_from_string(i, sub_object->geometry.custom_seam[i]); if (! sub_object->geometry.mmu_segmentation[i].empty()) volume->mmu_segmentation_facets.set_triangle_from_string(i, sub_object->geometry.mmu_segmentation[i]); + if (!sub_object->geometry.fuzzy_skin[i].empty()) + volume->fuzzy_skin_facets.set_triangle_from_string(i, sub_object->geometry.fuzzy_skin[i]); } volume->supported_facets.shrink_to_fit(); volume->seam_facets.shrink_to_fit(); volume->mmu_segmentation_facets.shrink_to_fit(); volume->mmu_segmentation_facets.touch(); + volume->fuzzy_skin_facets.shrink_to_fit(); + volume->fuzzy_skin_facets.touch(); } volume->set_type(volume_data->part_type); @@ -5237,6 +5247,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) current_object->geometry.custom_supports.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_SUPPORTS_ATTR)); current_object->geometry.custom_seam.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_SEAM_ATTR)); current_object->geometry.mmu_segmentation.push_back(bbs_get_attribute_value_string(attributes, num_attributes, MMU_SEGMENTATION_ATTR)); + current_object->geometry.fuzzy_skin.push_back(bbs_get_attribute_value_string(attributes, num_attributes, FUZZY_SKIN_ATTR)); // BBS current_object->geometry.face_properties.push_back(bbs_get_attribute_value_string(attributes, num_attributes, FACE_PROPERTY_ATTR)); } @@ -6616,7 +6627,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) const ModelVolume* shared_volume = iter->second.second; if ((shared_volume->supported_facets.equals(volume->supported_facets)) && (shared_volume->seam_facets.equals(volume->seam_facets)) - && (shared_volume->mmu_segmentation_facets.equals(volume->mmu_segmentation_facets))) + && (shared_volume->mmu_segmentation_facets.equals(volume->mmu_segmentation_facets)) + && (shared_volume->fuzzy_skin_facets.equals(volume->fuzzy_skin_facets))) { auto data = iter->second.first; const_cast<_BBS_3MF_Exporter *>(this)->m_volume_paths.insert({volume, {data->sub_path, data->volumes_objectID.find(iter->second.second)->second}}); @@ -7022,6 +7034,15 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) output_buffer += "\""; } + std::string fuzzy_skin_painting_data_string = volume->fuzzy_skin_facets.get_triangle_as_string(i); + if (!fuzzy_skin_painting_data_string.empty()) { + output_buffer += " "; + output_buffer += FUZZY_SKIN_ATTR; + output_buffer += "=\""; + output_buffer += fuzzy_skin_painting_data_string; + output_buffer += "\""; + } + // BBS if (i < its.properties.size()) { std::string prop_str = its.properties[i].to_string(); diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index e419b5497b..326d1fffbe 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -136,6 +136,42 @@ ExPolygons Layer::merged(float offset_scaled) const return out; } +bool Layer::is_perimeter_compatible(const PrintRegion& a, const PrintRegion& b) +{ + const PrintRegionConfig& config = a.config(); + const PrintRegionConfig& other_config = b.config(); + + return config.wall_filament == other_config.wall_filament + && config.wall_loops == other_config.wall_loops + && config.wall_sequence == other_config.wall_sequence + && config.is_infill_first == other_config.is_infill_first + && config.inner_wall_speed == other_config.inner_wall_speed + && config.outer_wall_speed == other_config.outer_wall_speed + && config.small_perimeter_speed == other_config.small_perimeter_speed + && config.gap_infill_speed.value == other_config.gap_infill_speed.value + && config.filter_out_gap_fill.value == other_config.filter_out_gap_fill.value + && config.detect_overhang_wall == other_config.detect_overhang_wall + && config.overhang_reverse == other_config.overhang_reverse + && config.overhang_reverse_threshold == other_config.overhang_reverse_threshold + && config.wall_direction == other_config.wall_direction + && config.opt_serialize("inner_wall_line_width") == other_config.opt_serialize("inner_wall_line_width") + && config.opt_serialize("outer_wall_line_width") == other_config.opt_serialize("outer_wall_line_width") + && config.detect_thin_wall == other_config.detect_thin_wall + && config.infill_wall_overlap == other_config.infill_wall_overlap + && config.top_bottom_infill_wall_overlap == other_config.top_bottom_infill_wall_overlap + && config.seam_slope_type == other_config.seam_slope_type + && config.seam_slope_conditional == other_config.seam_slope_conditional + && config.scarf_angle_threshold == other_config.scarf_angle_threshold + && config.scarf_overhang_threshold == other_config.scarf_overhang_threshold + && config.scarf_joint_speed == other_config.scarf_joint_speed + && config.scarf_joint_flow_ratio == other_config.scarf_joint_flow_ratio + && config.seam_slope_start_height == other_config.seam_slope_start_height + && config.seam_slope_entire_loop == other_config.seam_slope_entire_loop + && config.seam_slope_min_length == other_config.seam_slope_min_length + && config.seam_slope_steps == other_config.seam_slope_steps + && config.seam_slope_inner_walls == other_config.seam_slope_inner_walls; +} + // Here the perimeters are created cummulatively for all layer regions sharing the same parameters influencing the perimeters. // The perimeter paths and the thin fills (ExtrusionEntityCollection) are assigned to the first compatible layer region. // The resulting fill surface is split back among the originating regions. @@ -157,7 +193,7 @@ void Layer::make_perimeters() continue; BOOST_LOG_TRIVIAL(trace) << "Generating perimeters for layer " << this->id() << ", region " << region_id; done[region_id] = true; - const PrintRegionConfig &config = (*layerm)->region().config(); + const PrintRegion &this_region = (*layerm)->region(); // find compatible regions LayerRegionPtrs layerms; @@ -165,36 +201,8 @@ void Layer::make_perimeters() for (LayerRegionPtrs::const_iterator it = layerm + 1; it != m_regions.end(); ++it) if (! (*it)->slices.empty()) { LayerRegion* other_layerm = *it; - const PrintRegionConfig &other_config = other_layerm->region().config(); - if (config.wall_filament == other_config.wall_filament - && config.wall_loops == other_config.wall_loops - && config.wall_sequence == other_config.wall_sequence - && config.is_infill_first == other_config.is_infill_first - && config.inner_wall_speed == other_config.inner_wall_speed - && config.outer_wall_speed == other_config.outer_wall_speed - && config.small_perimeter_speed == other_config.small_perimeter_speed - && config.gap_infill_speed.value == other_config.gap_infill_speed.value - && config.filter_out_gap_fill.value == other_config.filter_out_gap_fill.value - && config.detect_overhang_wall == other_config.detect_overhang_wall - && config.overhang_reverse == other_config.overhang_reverse - && config.overhang_reverse_threshold == other_config.overhang_reverse_threshold - && config.wall_direction == other_config.wall_direction - && config.opt_serialize("inner_wall_line_width") == other_config.opt_serialize("inner_wall_line_width") - && config.opt_serialize("outer_wall_line_width") == other_config.opt_serialize("outer_wall_line_width") - && config.detect_thin_wall == other_config.detect_thin_wall - && config.infill_wall_overlap == other_config.infill_wall_overlap - && config.top_bottom_infill_wall_overlap == other_config.top_bottom_infill_wall_overlap - && config.seam_slope_type == other_config.seam_slope_type - && config.seam_slope_conditional == other_config.seam_slope_conditional - && config.scarf_angle_threshold == other_config.scarf_angle_threshold - && config.scarf_overhang_threshold == other_config.scarf_overhang_threshold - && config.scarf_joint_speed == other_config.scarf_joint_speed - && config.scarf_joint_flow_ratio == other_config.scarf_joint_flow_ratio - && config.seam_slope_start_height == other_config.seam_slope_start_height - && config.seam_slope_entire_loop == other_config.seam_slope_entire_loop - && config.seam_slope_min_length == other_config.seam_slope_min_length - && config.seam_slope_steps == other_config.seam_slope_steps - && config.seam_slope_inner_walls == other_config.seam_slope_inner_walls) + const PrintRegion &other_region = other_layerm->region(); + if (is_perimeter_compatible(this_region, other_region)) { other_layerm->perimeters.clear(); other_layerm->fills.clear(); diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index 48f1ca95e2..1c325034cd 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -180,6 +180,9 @@ public: for (const LayerRegion *layerm : m_regions) if (layerm->slices.any_bottom_contains(item)) return true; return false; } + + // Whether two regions can be printed in a continues perimeter + static bool is_perimeter_compatible(const PrintRegion& a, const PrintRegion& b); void make_perimeters(); // Phony version of make_fills() without parameters for Perl integration only. void make_fills() { this->make_fills(nullptr, nullptr); } diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index b9d3b7db3e..4edec076af 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -1070,6 +1070,11 @@ bool Model::is_mm_painted() const return std::any_of(this->objects.cbegin(), this->objects.cend(), [](const ModelObject *mo) { return mo->is_mm_painted(); }); } +bool Model::is_fuzzy_skin_painted() const +{ + return std::any_of(this->objects.cbegin(), this->objects.cend(), [](const ModelObject *mo) { return mo->is_fuzzy_skin_painted(); }); +} + static void add_cut_volume(TriangleMesh& mesh, ModelObject* object, const ModelVolume* src_volume, const Transform3d& cut_matrix, const std::string& suffix = {}, ModelVolumeType type = ModelVolumeType::MODEL_PART) { @@ -1336,6 +1341,11 @@ bool ModelObject::is_mm_painted() const return std::any_of(this->volumes.cbegin(), this->volumes.cend(), [](const ModelVolume *mv) { return mv->is_mm_painted(); }); } +bool ModelObject::is_fuzzy_skin_painted() const +{ + return std::any_of(this->volumes.cbegin(), this->volumes.cend(), [](const ModelVolume *mv) { return mv->is_fuzzy_skin_painted(); }); +} + void ModelObject::sort_volumes(bool full_sort) { // sort volumes inside the object to order "Model Part, Negative Volume, Modifier, Support Blocker and Support Enforcer. " @@ -1818,6 +1828,7 @@ void ModelObject::convert_units(ModelObjectPtrs& new_objects, ConversionType con vol->supported_facets.assign(volume->supported_facets); vol->seam_facets.assign(volume->seam_facets); vol->mmu_segmentation_facets.assign(volume->mmu_segmentation_facets); + vol->fuzzy_skin_facets.assign(volume->fuzzy_skin_facets); // Perform conversion only if the target "imperial" state is different from the current one. // This check supports conversion of "mixed" set of volumes, each with different "imperial" state. @@ -1929,6 +1940,7 @@ void ModelVolume::reset_extra_facets() this->supported_facets.reset(); this->seam_facets.reset(); this->mmu_segmentation_facets.reset(); + this->fuzzy_skin_facets.reset(); } static void invalidate_translations(ModelObject* object, const ModelInstance* src_instance) @@ -2658,6 +2670,7 @@ size_t ModelVolume::split(unsigned int max_extruders) this->exterior_facets.reset(); this->supported_facets.reset(); this->seam_facets.reset(); + this->fuzzy_skin_facets.reset(); } else this->object->volumes.insert(this->object->volumes.begin() + (++ivolume), new ModelVolume(object, *this, std::move(mesh))); @@ -2718,6 +2731,7 @@ void ModelVolume::assign_new_unique_ids_recursive() supported_facets.set_new_unique_id(); seam_facets.set_new_unique_id(); mmu_segmentation_facets.set_new_unique_id(); + fuzzy_skin_facets.set_new_unique_id(); } void ModelVolume::rotate(double angle, Axis axis) @@ -3579,6 +3593,13 @@ bool model_mmu_segmentation_data_changed(const ModelObject& mo, const ModelObjec [](const ModelVolume &mv_old, const ModelVolume &mv_new){ return mv_old.mmu_segmentation_facets.timestamp_matches(mv_new.mmu_segmentation_facets); }); } +bool model_fuzzy_skin_data_changed(const ModelObject &mo, const ModelObject &mo_new) +{ + return model_property_changed(mo, mo_new, + [](const ModelVolumeType t) { return t == ModelVolumeType::MODEL_PART; }, + [](const ModelVolume &mv_old, const ModelVolume &mv_new){ return mv_old.fuzzy_skin_facets.timestamp_matches(mv_new.fuzzy_skin_facets); }); +} + bool model_brim_points_data_changed(const ModelObject& mo, const ModelObject& mo_new) { if (mo.brim_points.size() != mo_new.brim_points.size()) diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 3866e252b7..0456448e65 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -426,6 +426,8 @@ public: bool is_seam_painted() const; // Checks if any of object volume is painted using the multi-material painting gizmo. bool is_mm_painted() const; + // Checks if any of object volume is painted using the fuzzy skin painting gizmo. + bool is_fuzzy_skin_painted() const; // This object may have a varying layer height by painting or by a table. // Even if true is returned, the layer height profile may be "flat" with no difference to default layering. bool has_custom_layering() const @@ -868,6 +870,9 @@ public: // List of mesh facets painted for MMU segmentation. FacetsAnnotation mmu_segmentation_facets; + // List of mesh facets painted for fuzzy skin. + FacetsAnnotation fuzzy_skin_facets; + // BBS: quick access for volume extruders, 1 based mutable std::vector mmuseg_extruders; mutable Timestamp mmuseg_ts; @@ -990,11 +995,13 @@ public: this->supported_facets.set_new_unique_id(); this->seam_facets.set_new_unique_id(); this->mmu_segmentation_facets.set_new_unique_id(); + this->fuzzy_skin_facets.set_new_unique_id(); } bool is_fdm_support_painted() const { return !this->supported_facets.empty(); } bool is_seam_painted() const { return !this->seam_facets.empty(); } bool is_mm_painted() const { return !this->mmu_segmentation_facets.empty(); } + bool is_fuzzy_skin_painted() const { return !this->fuzzy_skin_facets.empty(); } // Orca: Implement prusa's filament shrink compensation approach // Returns 0-based indices of extruders painted by multi-material painting gizmo. @@ -1046,10 +1053,12 @@ private: assert(this->supported_facets.id().valid()); assert(this->seam_facets.id().valid()); assert(this->mmu_segmentation_facets.id().valid()); + assert(this->fuzzy_skin_facets.id().valid()); assert(this->id() != this->config.id()); assert(this->id() != this->supported_facets.id()); assert(this->id() != this->seam_facets.id()); assert(this->id() != this->mmu_segmentation_facets.id()); + assert(this->id() != this->fuzzy_skin_facets.id()); if (mesh.facets_count() > 1) calculate_convex_hull(); } @@ -1060,10 +1069,12 @@ private: assert(this->supported_facets.id().valid()); assert(this->seam_facets.id().valid()); assert(this->mmu_segmentation_facets.id().valid()); + assert(this->fuzzy_skin_facets.id().valid()); assert(this->id() != this->config.id()); assert(this->id() != this->supported_facets.id()); assert(this->id() != this->seam_facets.id()); assert(this->id() != this->mmu_segmentation_facets.id()); + assert(this->id() != this->fuzzy_skin_facets.id()); } ModelVolume(ModelObject *object, TriangleMesh &&mesh, TriangleMesh &&convex_hull, ModelVolumeType type = ModelVolumeType::MODEL_PART) : m_mesh(new TriangleMesh(std::move(mesh))), m_convex_hull(new TriangleMesh(std::move(convex_hull))), m_type(type), object(object) { @@ -1072,10 +1083,12 @@ private: assert(this->supported_facets.id().valid()); assert(this->seam_facets.id().valid()); assert(this->mmu_segmentation_facets.id().valid()); + assert(this->fuzzy_skin_facets.id().valid()); assert(this->id() != this->config.id()); assert(this->id() != this->supported_facets.id()); assert(this->id() != this->seam_facets.id()); assert(this->id() != this->mmu_segmentation_facets.id()); + assert(this->id() != this->fuzzy_skin_facets.id()); } // Copying an existing volume, therefore this volume will get a copy of the ID assigned. @@ -1084,13 +1097,14 @@ private: name(other.name), source(other.source), m_mesh(other.m_mesh), m_convex_hull(other.m_convex_hull), config(other.config), m_type(other.m_type), object(object), m_transformation(other.m_transformation), supported_facets(other.supported_facets), seam_facets(other.seam_facets), mmu_segmentation_facets(other.mmu_segmentation_facets), - cut_info(other.cut_info), text_configuration(other.text_configuration), emboss_shape(other.emboss_shape) + fuzzy_skin_facets(other.fuzzy_skin_facets), cut_info(other.cut_info), text_configuration(other.text_configuration), emboss_shape(other.emboss_shape) { assert(this->id().valid()); assert(this->config.id().valid()); assert(this->supported_facets.id().valid()); assert(this->seam_facets.id().valid()); assert(this->mmu_segmentation_facets.id().valid()); + assert(this->fuzzy_skin_facets.id().valid()); assert(this->id() != this->config.id()); assert(this->id() != this->supported_facets.id()); assert(this->id() != this->seam_facets.id()); @@ -1100,6 +1114,7 @@ private: assert(this->supported_facets.id() == other.supported_facets.id()); assert(this->seam_facets.id() == other.seam_facets.id()); assert(this->mmu_segmentation_facets.id() == other.mmu_segmentation_facets.id()); + assert(this->fuzzy_skin_facets.id() == other.fuzzy_skin_facets.id()); this->set_material_id(other.material_id()); } // Providing a new mesh, therefore this volume will get a new unique ID assigned. @@ -1112,10 +1127,12 @@ private: assert(this->supported_facets.id().valid()); assert(this->seam_facets.id().valid()); assert(this->mmu_segmentation_facets.id().valid()); + assert(this->fuzzy_skin_facets.id().valid()); assert(this->id() != this->config.id()); assert(this->id() != this->supported_facets.id()); assert(this->id() != this->seam_facets.id()); assert(this->id() != this->mmu_segmentation_facets.id()); + assert(this->id() != this->fuzzy_skin_facets.id()); assert(this->id() != other.id()); assert(this->config.id() == other.config.id()); this->set_material_id(other.material_id()); @@ -1127,10 +1144,12 @@ private: assert(this->supported_facets.id() != other.supported_facets.id()); assert(this->seam_facets.id() != other.seam_facets.id()); assert(this->mmu_segmentation_facets.id() != other.mmu_segmentation_facets.id()); + assert(this->fuzzy_skin_facets.id() != other.fuzzy_skin_facets.id()); assert(this->id() != this->config.id()); assert(this->supported_facets.empty()); assert(this->seam_facets.empty()); assert(this->mmu_segmentation_facets.empty()); + assert(this->fuzzy_skin_facets.empty()); } ModelVolume& operator=(ModelVolume &rhs) = delete; @@ -1138,12 +1157,13 @@ private: friend class cereal::access; friend class UndoRedo::StackImpl; // Used for deserialization, therefore no IDs are allocated. - ModelVolume() : ObjectBase(-1), config(-1), supported_facets(-1), seam_facets(-1), mmu_segmentation_facets(-1), object(nullptr) { + ModelVolume() : ObjectBase(-1), config(-1), supported_facets(-1), seam_facets(-1), mmu_segmentation_facets(-1), fuzzy_skin_facets(-1), object(nullptr) { assert(this->id().invalid()); assert(this->config.id().invalid()); assert(this->supported_facets.id().invalid()); assert(this->seam_facets.id().invalid()); assert(this->mmu_segmentation_facets.id().invalid()); + assert(this->fuzzy_skin_facets.id().invalid()); } template void load(Archive &ar) { bool has_convex_hull; @@ -1161,6 +1181,8 @@ private: t = mmu_segmentation_facets.timestamp(); cereal::load_by_value(ar, mmu_segmentation_facets); mesh_changed |= t != mmu_segmentation_facets.timestamp(); + cereal::load_by_value(ar, fuzzy_skin_facets); + mesh_changed |= t != fuzzy_skin_facets.timestamp(); cereal::load_by_value(ar, config); cereal::load(ar, text_configuration); cereal::load(ar, emboss_shape); @@ -1181,6 +1203,7 @@ private: cereal::save_by_value(ar, supported_facets); cereal::save_by_value(ar, seam_facets); cereal::save_by_value(ar, mmu_segmentation_facets); + cereal::save_by_value(ar, fuzzy_skin_facets); cereal::save_by_value(ar, config); cereal::save(ar, text_configuration); cereal::save(ar, emboss_shape); @@ -1657,6 +1680,8 @@ public: bool is_seam_painted() const; // Checks if any of objects is painted using the multi-material painting gizmo. bool is_mm_painted() const; + // Checks if any of objects is painted using the fuzzy skin painting gizmo. + bool is_fuzzy_skin_painted() const; std::unique_ptr calib_pa_pattern; @@ -1715,6 +1740,10 @@ bool model_custom_seam_data_changed(const ModelObject& mo, const ModelObject& mo // The function assumes that volumes list is synchronized. extern bool model_mmu_segmentation_data_changed(const ModelObject& mo, const ModelObject& mo_new); +// Test whether the now ModelObject has newer fuzzy skin data than the old one. +// The function assumes that volumes list is synchronized. +extern bool model_fuzzy_skin_data_changed(const ModelObject &mo, const ModelObject &mo_new); + bool model_brim_points_data_changed(const ModelObject& mo, const ModelObject& mo_new); // If the model has multi-part objects, then it is currently not supported by the SLA mode. diff --git a/src/libslic3r/MultiMaterialSegmentation.cpp b/src/libslic3r/MultiMaterialSegmentation.cpp index 492e70b730..4946ad45c8 100644 --- a/src/libslic3r/MultiMaterialSegmentation.cpp +++ b/src/libslic3r/MultiMaterialSegmentation.cpp @@ -408,7 +408,7 @@ static inline Polygon to_polygon(const std::vector> &id return poly_out; } -static std::vector extract_colored_segments(const MMU_Graph &graph, const size_t num_extruders) +static std::vector extract_colored_segments(const MMU_Graph& graph, const size_t num_facets_states) { std::vector used_arcs(graph.arcs.size(), false); @@ -416,7 +416,7 @@ static std::vector extract_colored_segments(const MMU_Graph &graph, return std::all_of(node.arc_idxs.cbegin(), node.arc_idxs.cend(), [&used_arcs](const size_t &arc_idx) -> bool { return used_arcs[arc_idx]; }); }; - std::vector expolygons_segments(num_extruders + 1); + std::vector expolygons_segments(num_facets_states); for (size_t node_idx = 0; node_idx < graph.all_border_points; ++node_idx) { const MMU_Graph::Node &node = graph.nodes[node_idx]; @@ -1141,151 +1141,13 @@ static void remove_multiple_edges_in_vertex(const VD::vertex_type &vertex) { } } -#if (0) -// Returns list of ExPolygons for each extruder + 1 for default unpainted regions. -// It iterates through all nodes on the border between two different colors, and from this point, -// start selection always left most edges for every node to construct CCW polygons. -static std::vector extract_colored_segments(const std::vector &colored_polygons, - const size_t num_extruders, - const size_t layer_idx) -{ - const ColoredLines colored_lines = to_lines(colored_polygons); - const BoundingBox bbox = get_extents(colored_polygons); - - auto get_next_contour_line = [&colored_polygons](const ColoredLine &line) -> const ColoredLine & { - size_t contour_line_size = colored_polygons[line.poly_idx].size(); - size_t contour_next_idx = (line.local_line_idx + 1) % contour_line_size; - return colored_polygons[line.poly_idx][contour_next_idx]; - }; - - Voronoi::VD vd; - vd.construct_voronoi(colored_lines.begin(), colored_lines.end()); - - // First, mark each Voronoi vertex on the input polygon to prevent it from being deleted later. - for (const Voronoi::VD::cell_type &cell : vd.cells()) { - if (cell.is_degenerate() || !cell.contains_segment()) - continue; - - if (const Geometry::SegmentCellRange cell_range = Geometry::VoronoiUtils::compute_segment_cell_range(cell, colored_lines.begin(), colored_lines.end()); cell_range.is_valid()) - cell_range.edge_begin->vertex0()->color(VD_ANNOTATION::VERTEX_ON_CONTOUR); - } - - // Second, remove all Voronoi vertices that are outside the bounding box of input polygons. - // Such Voronoi vertices are definitely not inside of input polygons, so we don't care about them. - for (const Voronoi::VD::vertex_type &vertex : vd.vertices()) { - if (vertex.color() == VD_ANNOTATION::DELETED || vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR) - continue; - - if (!Geometry::VoronoiUtils::is_in_range(vertex) || !bbox.contains(Geometry::VoronoiUtils::to_point(vertex).cast())) - delete_vertex_deep(vertex); - } - - // Third, remove all Voronoi edges that are infinite. - for (const Voronoi::VD::edge_type &edge : vd.edges()) { - if (edge.color() != VD_ANNOTATION::DELETED && edge.is_infinite()) { - edge.color(VD_ANNOTATION::DELETED); - edge.twin()->color(VD_ANNOTATION::DELETED); - - if (edge.vertex0() != nullptr && can_vertex_be_deleted(*edge.vertex0())) - delete_vertex_deep(*edge.vertex0()); - - if (edge.vertex1() != nullptr && can_vertex_be_deleted(*edge.vertex1())) - delete_vertex_deep(*edge.vertex1()); - } - } - - // Fourth, remove all edges that point outward from the input polygon. - for (Voronoi::VD::cell_type cell : vd.cells()) { - if (cell.is_degenerate() || !cell.contains_segment()) - continue; - - if (const Geometry::SegmentCellRange cell_range = Geometry::VoronoiUtils::compute_segment_cell_range(cell, colored_lines.begin(), colored_lines.end()); cell_range.is_valid()) { - const ColoredLine ¤t_line = Geometry::VoronoiUtils::get_source_segment(cell, colored_lines.begin(), colored_lines.end()); - const ColoredLine &next_line = get_next_contour_line(current_line); - - const VD::edge_type *edge = cell_range.edge_begin; - do { - if (edge->color() == VD_ANNOTATION::DELETED) - continue; - - if (!points_inside(current_line.line, next_line.line, Geometry::VoronoiUtils::to_point(edge->vertex1()).cast())) { - edge->color(VD_ANNOTATION::DELETED); - edge->twin()->color(VD_ANNOTATION::DELETED); - delete_vertex_deep(*edge->vertex1()); - } - } while (edge = edge->prev()->twin(), edge != cell_range.edge_begin); - } - } - - // Fifth, if a Voronoi vertex has more than one Voronoi edge, remove all but one of them based on heuristics. - for (const Voronoi::VD::vertex_type &vertex : vd.vertices()) { - if (vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR) - remove_multiple_edges_in_vertex(vertex); - } - -#ifdef MM_SEGMENTATION_DEBUG_GRAPH - { - static int iRun = 0; - export_graph_to_svg(debug_out_path("mm-graph-%d-%d.svg", layer_idx, iRun++), vd, colored_polygons); - } -#endif // MM_SEGMENTATION_DEBUG_GRAPH - - // Sixth, extract the colored segments from the annotated Voronoi diagram. - std::vector segmented_expolygons_per_extruder(num_extruders + 1); - for (const Voronoi::VD::cell_type &cell : vd.cells()) { - if (cell.is_degenerate() || !cell.contains_segment()) - continue; - - if (const Geometry::SegmentCellRange cell_range = Geometry::VoronoiUtils::compute_segment_cell_range(cell, colored_lines.begin(), colored_lines.end()); cell_range.is_valid()) { - if (cell_range.edge_begin->vertex0()->color() != VD_ANNOTATION::VERTEX_ON_CONTOUR) - continue; - - const ColoredLine source_segment = Geometry::VoronoiUtils::get_source_segment(cell, colored_lines.begin(), colored_lines.end()); - - Polygon segmented_polygon; - segmented_polygon.points.emplace_back(source_segment.line.b); - - // We have ensured that each segmented_polygon have to start at edge_begin->vertex0() and end at edge_end->vertex1(). - const VD::edge_type *edge = cell_range.edge_begin; - do { - if (edge->color() == VD_ANNOTATION::DELETED) - continue; - - const VD::vertex_type &next_vertex = *edge->vertex1(); - segmented_polygon.points.emplace_back(Geometry::VoronoiUtils::to_point(next_vertex).cast()); - edge->color(VD_ANNOTATION::DELETED); - - if (next_vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR || next_vertex.color() == VD_ANNOTATION::DELETED) { - assert(next_vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR); - break; - } - - edge = edge->twin(); - } while (edge = edge->twin()->next(), edge != cell_range.edge_begin); - - if (edge->vertex1() != cell_range.edge_end->vertex1()) - continue; - - cell_range.edge_begin->vertex0()->color(VD_ANNOTATION::DELETED); - segmented_expolygons_per_extruder[source_segment.color].emplace_back(std::move(segmented_polygon)); - } - } - - // Merge all polygons together for each extruder - for (auto &segmented_expolygons : segmented_expolygons_per_extruder) - segmented_expolygons = union_ex(segmented_expolygons); - - return segmented_expolygons_per_extruder; -} -#endif - static void cut_segmented_layers(const std::vector &input_expolygons, std::vector> &segmented_regions, const float cut_width, const float interlocking_depth, const std::function &throw_on_cancel_callback) { - BOOST_LOG_TRIVIAL(debug) << "MM segmentation - cutting segmented layers in parallel - begin"; + BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - cutting segmented layers in parallel - begin"; const float interlocking_cut_width = interlocking_depth > 0.f ? std::max(cut_width - interlocking_depth, 0.f) : 0.f; tbb::parallel_for(tbb::blocked_range(0, segmented_regions.size()), [&segmented_regions, &input_expolygons, &cut_width, &interlocking_depth, &throw_on_cancel_callback](const tbb::blocked_range &range) { @@ -1302,7 +1164,7 @@ static void cut_segmented_layers(const std::vector &input_exp } } }); // end of parallel_for - BOOST_LOG_TRIVIAL(debug) << "MM segmentation - cutting segmented layers in parallel - end"; + BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - cutting segmented layers in parallel - end"; } static bool is_volume_sinking(const indexed_triangle_set &its, const Transform3d &trafo) @@ -1315,13 +1177,14 @@ static bool is_volume_sinking(const indexed_triangle_set &its, const Transform3d //#define MMU_SEGMENTATION_DEBUG_TOP_BOTTOM -// Returns MMU segmentation of top and bottom layers based on painting in MMU segmentation gizmo -static inline std::vector> mmu_segmentation_top_and_bottom_layers(const PrintObject &print_object, - const std::vector &input_expolygons, - const std::function &throw_on_cancel_callback) +// Returns segmentation of top and bottom layers based on painting in segmentation gizmos. +static inline std::vector> segmentation_top_and_bottom_layers(const PrintObject &print_object, + const std::vector &input_expolygons, + const std::function &extract_facets_info, + const size_t num_facets_states, + const std::function &throw_on_cancel_callback) { - // BBS - const size_t num_extruders = print_object.print()->config().filament_colour.size() + 1; + BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - Segmentation of top and bottom layers in parallel - Begin"; const size_t num_layers = input_expolygons.size(); const ConstLayerPtrsAdaptor layers = print_object.layers(); @@ -1338,7 +1201,7 @@ static inline std::vector> mmu_segmentation_top_and_bott // Project upwards pointing painted triangles over top surfaces, // project downards pointing painted triangles over bottom surfaces. - std::vector> top_raw(num_extruders), bottom_raw(num_extruders); + std::vector> top_raw(num_facets_states), bottom_raw(num_facets_states); std::vector zs = zs_from_layers(layers); Transform3d object_trafo = print_object.trafo_centered(); @@ -1350,8 +1213,8 @@ static inline std::vector> mmu_segmentation_top_and_bott for (const ModelVolume *mv : print_object.model_object()->volumes) if (mv->is_model_part()) { const Transform3d volume_trafo = object_trafo * mv->get_matrix(); - for (size_t extruder_idx = 0; extruder_idx < num_extruders; ++ extruder_idx) { - const indexed_triangle_set painted = mv->mmu_segmentation_facets.get_facets_strict(*mv, EnforcerBlockerType(extruder_idx)); + for (size_t extruder_idx = 0; extruder_idx < num_facets_states; ++extruder_idx) { + const indexed_triangle_set painted = extract_facets_info(*mv).facets_annotation.get_facets_strict(*mv, EnforcerBlockerType(extruder_idx)); #ifdef MM_SEGMENTATION_DEBUG_TOP_BOTTOM { static int iRun = 0; @@ -1400,8 +1263,8 @@ static inline std::vector> mmu_segmentation_top_and_bott } } - auto filter_out_small_polygons = [&num_extruders, &num_layers](std::vector> &raw_surfaces, double min_area) -> void { - for (size_t extruder_idx = 0; extruder_idx < num_extruders; ++extruder_idx) + auto filter_out_small_polygons = [&num_facets_states, &num_layers](std::vector> &raw_surfaces, double min_area) -> void { + for (size_t extruder_idx = 0; extruder_idx < num_facets_states; ++extruder_idx) if (!raw_surfaces[extruder_idx].empty()) for (size_t layer_idx = 0; layer_idx < num_layers; ++layer_idx) if (!raw_surfaces[extruder_idx][layer_idx].empty()) @@ -1438,7 +1301,7 @@ static inline std::vector> mmu_segmentation_top_and_bott // When the upper surface of an object is occluded, it should no longer be considered the upper surface { - for (size_t extruder_idx = 0; extruder_idx < num_extruders; ++extruder_idx) { + for (size_t extruder_idx = 0; extruder_idx < num_facets_states; ++extruder_idx) { for (size_t layer_idx = 0; layer_idx < layers.size(); ++layer_idx) { if (!top_raw[extruder_idx].empty() && !top_raw[extruder_idx][layer_idx].empty() && layer_idx + 1 < layers.size()) { top_raw[extruder_idx][layer_idx] = diff(top_raw[extruder_idx][layer_idx], input_expolygons[layer_idx + 1]); @@ -1450,16 +1313,16 @@ static inline std::vector> mmu_segmentation_top_and_bott } } - std::vector> triangles_by_color_bottom(num_extruders); - std::vector> triangles_by_color_top(num_extruders); - triangles_by_color_bottom.assign(num_extruders, std::vector(num_layers * 2)); - triangles_by_color_top.assign(num_extruders, std::vector(num_layers * 2)); + std::vector> triangles_by_color_bottom(num_facets_states); + std::vector> triangles_by_color_top(num_facets_states); + triangles_by_color_bottom.assign(num_facets_states, std::vector(num_layers * 2)); + triangles_by_color_top.assign(num_facets_states, std::vector(num_layers * 2)); // BBS: use shell_triangles_by_color_bottom & shell_triangles_by_color_top to save the top and bottom embedded layers's color information - std::vector> shell_triangles_by_color_bottom(num_extruders); - std::vector> shell_triangles_by_color_top(num_extruders); - shell_triangles_by_color_bottom.assign(num_extruders, std::vector(num_layers * 2)); - shell_triangles_by_color_top.assign(num_extruders, std::vector(num_layers * 2)); + std::vector> shell_triangles_by_color_bottom(num_facets_states); + std::vector> shell_triangles_by_color_top(num_facets_states); + shell_triangles_by_color_bottom.assign(num_facets_states, std::vector(num_layers * 2)); + shell_triangles_by_color_top.assign(num_facets_states, std::vector(num_layers * 2)); struct LayerColorStat { // Number of regions for a queried color. @@ -1504,13 +1367,13 @@ static inline std::vector> mmu_segmentation_top_and_bott return out; }; - tbb::parallel_for(tbb::blocked_range(0, num_layers, granularity), [&granularity, &num_layers, &num_extruders, &layer_color_stat, &top_raw, &triangles_by_color_top, + tbb::parallel_for(tbb::blocked_range(0, num_layers, granularity), [&granularity, &num_layers, &num_facets_states, &layer_color_stat, &top_raw, &triangles_by_color_top, &throw_on_cancel_callback, &input_expolygons, &bottom_raw, &triangles_by_color_bottom, &shell_triangles_by_color_top, &shell_triangles_by_color_bottom](const tbb::blocked_range &range) { size_t group_idx = range.begin() / granularity; size_t layer_idx_offset = (group_idx & 1) * num_layers; for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++ layer_idx) { - for (size_t color_idx = 0; color_idx < num_extruders; ++ color_idx) { + for (size_t color_idx = 0; color_idx < num_facets_states; ++color_idx) { throw_on_cancel_callback(); LayerColorStat stat = layer_color_stat(layer_idx, color_idx); if (std::vector &top = top_raw[color_idx]; ! top.empty() && ! top[layer_idx].empty()) @@ -1557,8 +1420,8 @@ static inline std::vector> mmu_segmentation_top_and_bott } }); - std::vector> triangles_by_color_merged(num_extruders); - triangles_by_color_merged.assign(num_extruders, std::vector(num_layers)); + std::vector> triangles_by_color_merged(num_facets_states); + triangles_by_color_merged.assign(num_facets_states, std::vector(num_layers)); tbb::parallel_for(tbb::blocked_range(0, num_layers), [&triangles_by_color_merged, &triangles_by_color_bottom, &triangles_by_color_top, &num_layers, &throw_on_cancel_callback, &shell_triangles_by_color_top, &shell_triangles_by_color_bottom](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++ layer_idx) { @@ -1602,6 +1465,7 @@ static inline std::vector> mmu_segmentation_top_and_bott triangles_by_color_merged[0][layer_idx] = diff_ex(triangles_by_color_merged[0][layer_idx], painted_regions); } }); + BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - Segmentation of top and bottom layers in parallel - End"; return triangles_by_color_merged; } @@ -1958,34 +1822,37 @@ static void remove_multiple_edges_in_vertices(MMU_Graph &graph, const std::vecto } } -static std::vector> merge_segmented_layers( - const std::vector> &segmented_regions, - std::vector> &&top_and_bottom_layers, - const size_t num_extruders, - const std::function &throw_on_cancel_callback) +static std::vector> merge_segmented_layers(const std::vector> &segmented_regions, + std::vector> &&top_and_bottom_layers, + const size_t num_facets_states, + const std::function &throw_on_cancel_callback) { const size_t num_layers = segmented_regions.size(); std::vector> segmented_regions_merged(num_layers); - segmented_regions_merged.assign(num_layers, std::vector(num_extruders)); - assert(num_extruders + 1 == top_and_bottom_layers.size()); + segmented_regions_merged.assign(num_layers, std::vector(num_facets_states - 1)); + assert(!top_and_bottom_layers.size() || num_facets_states == top_and_bottom_layers.size()); - BOOST_LOG_TRIVIAL(debug) << "MM segmentation - merging segmented layers in parallel - begin"; - tbb::parallel_for(tbb::blocked_range(0, num_layers), [&segmented_regions, &top_and_bottom_layers, &segmented_regions_merged, &num_extruders, &throw_on_cancel_callback](const tbb::blocked_range &range) { + BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - Merging segmented layers in parallel - Begin"; + tbb::parallel_for(tbb::blocked_range(0, num_layers), [&segmented_regions, &top_and_bottom_layers, &segmented_regions_merged, &num_facets_states, &throw_on_cancel_callback](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { - assert(segmented_regions[layer_idx].size() == num_extruders + 1); + assert(segmented_regions[layer_idx].size() == num_facets_states); // Zero is skipped because it is the default color of the volume - for (size_t extruder_id = 1; extruder_id < num_extruders + 1; ++extruder_id) { + for (size_t extruder_id = 1; extruder_id < num_facets_states; ++extruder_id) { throw_on_cancel_callback(); if (!segmented_regions[layer_idx][extruder_id].empty()) { ExPolygons segmented_regions_trimmed = segmented_regions[layer_idx][extruder_id]; - for (const std::vector &top_and_bottom_by_extruder : top_and_bottom_layers) - if (!top_and_bottom_by_extruder[layer_idx].empty() && !segmented_regions_trimmed.empty()) - segmented_regions_trimmed = diff_ex(segmented_regions_trimmed, top_and_bottom_by_extruder[layer_idx]); + if (!top_and_bottom_layers.empty()) { + for (const std::vector &top_and_bottom_by_extruder : top_and_bottom_layers) { + if (!top_and_bottom_by_extruder[layer_idx].empty() && !segmented_regions_trimmed.empty()) { + segmented_regions_trimmed = diff_ex(segmented_regions_trimmed, top_and_bottom_by_extruder[layer_idx]); + } + } + } segmented_regions_merged[layer_idx][extruder_id - 1] = std::move(segmented_regions_trimmed); } - if (!top_and_bottom_layers[extruder_id][layer_idx].empty()) { + if (!top_and_bottom_layers.empty() && !top_and_bottom_layers[extruder_id][layer_idx].empty()) { bool was_top_and_bottom_empty = segmented_regions_merged[layer_idx][extruder_id - 1].empty(); append(segmented_regions_merged[layer_idx][extruder_id - 1], top_and_bottom_layers[extruder_id][layer_idx]); @@ -1996,7 +1863,7 @@ static std::vector> merge_segmented_layers( } } }); // end of parallel_for - BOOST_LOG_TRIVIAL(debug) << "MM segmentation - merging segmented layers in parallel - end"; + BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - Merging segmented layers in parallel - End"; return segmented_regions_merged; } @@ -2085,12 +1952,18 @@ static bool has_layer_only_one_color(const std::vector &colored_po return true; } -std::vector> multi_material_segmentation_by_painting(const PrintObject &print_object, const std::function &throw_on_cancel_callback) +std::vector> segmentation_by_painting(const PrintObject &print_object, + const std::function &extract_facets_info, + const size_t num_facets_states, + const float segmentation_max_width, + const float segmentation_interlocking_depth, + const bool segmentation_interlocking_beam, + const IncludeTopAndBottomLayers include_top_and_bottom_layers, + const std::function &throw_on_cancel_callback) { - const size_t num_extruders = print_object.print()->config().filament_colour.size(); const size_t num_layers = print_object.layers().size(); std::vector> segmented_regions(num_layers); - segmented_regions.assign(num_layers, std::vector(num_extruders + 1)); + segmented_regions.assign(num_layers, std::vector(num_facets_states)); std::vector> painted_lines(num_layers); std::array painted_lines_mutex; std::vector edge_grids(num_layers); @@ -2104,7 +1977,7 @@ std::vector> multi_material_segmentation_by_painting(con #endif // MM_SEGMENTATION_DEBUG // Merge all regions and remove small holes - BOOST_LOG_TRIVIAL(debug) << "MM segmentation - slices preparation in parallel - begin"; + BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - Slices preprocessing in parallel - Begin"; tbb::parallel_for(tbb::blocked_range(0, num_layers), [&layers, &input_expolygons, &throw_on_cancel_callback](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { throw_on_cancel_callback(); @@ -2131,7 +2004,7 @@ std::vector> multi_material_segmentation_by_painting(con #endif // MM_SEGMENTATION_DEBUG_INPUT } }); // end of parallel_for - BOOST_LOG_TRIVIAL(debug) << "MM segmentation - slices preparation in parallel - end"; + BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - Slices preprocessing in parallel - End"; std::vector layer_bboxes(num_layers); for (size_t layer_idx = 0; layer_idx < num_layers; ++layer_idx) { @@ -2154,12 +2027,13 @@ std::vector> multi_material_segmentation_by_painting(con edge_grids[layer_idx].create(input_expolygons[layer_idx], coord_t(scale_(10.))); } - BOOST_LOG_TRIVIAL(debug) << "MM segmentation - projection of painted triangles - begin"; + BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - Projection of painted triangles - Begin"; for (const ModelVolume *mv : print_object.model_object()->volumes) { - tbb::parallel_for(tbb::blocked_range(1, num_extruders + 1), [&mv, &print_object, &layers, &edge_grids, &painted_lines, &painted_lines_mutex, &input_expolygons, &throw_on_cancel_callback](const tbb::blocked_range &range) { + const ModelVolumeFacetsInfo facets_info = extract_facets_info(*mv); + tbb::parallel_for(tbb::blocked_range(1, num_facets_states), [&mv, &print_object, &facets_info, &layers, &edge_grids, &painted_lines, &painted_lines_mutex, &input_expolygons, &throw_on_cancel_callback](const tbb::blocked_range &range) { for (size_t extruder_idx = range.begin(); extruder_idx < range.end(); ++extruder_idx) { throw_on_cancel_callback(); - const indexed_triangle_set custom_facets = mv->mmu_segmentation_facets.get_facets(*mv, EnforcerBlockerType(extruder_idx)); + const indexed_triangle_set custom_facets = facets_info.facets_annotation.get_facets(*mv, EnforcerBlockerType(extruder_idx)); if (!mv->is_model_part() || custom_facets.indices.empty()) continue; @@ -2245,12 +2119,12 @@ std::vector> multi_material_segmentation_by_painting(con } }); // end of parallel_for } - BOOST_LOG_TRIVIAL(debug) << "MM segmentation - projection of painted triangles - end"; - BOOST_LOG_TRIVIAL(debug) << "MM segmentation - painted layers count: " + BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - projection of painted triangles - end"; + BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - painted layers count: " << std::count_if(painted_lines.begin(), painted_lines.end(), [](const std::vector &pl) { return !pl.empty(); }); - BOOST_LOG_TRIVIAL(debug) << "MM segmentation - layers segmentation in parallel - begin"; - tbb::parallel_for(tbb::blocked_range(0, num_layers), [&edge_grids, &input_expolygons, &painted_lines, &segmented_regions, &num_extruders, &throw_on_cancel_callback](const tbb::blocked_range &range) { + BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - layers segmentation in parallel - begin"; + tbb::parallel_for(tbb::blocked_range(0, num_layers), [&edge_grids, &input_expolygons, &painted_lines, &segmented_regions, &num_facets_states, &throw_on_cancel_callback](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { throw_on_cancel_callback(); if (!painted_lines[layer_idx].empty()) { @@ -2279,7 +2153,7 @@ std::vector> multi_material_segmentation_by_painting(con MMU_Graph graph = build_graph(layer_idx, color_poly); remove_multiple_edges_in_vertices(graph, color_poly); graph.remove_nodes_with_one_arc(); - segmented_regions[layer_idx] = extract_colored_segments(graph, num_extruders); + segmented_regions[layer_idx] = extract_colored_segments(graph, num_facets_states); //segmented_regions[layer_idx] = extract_colored_segments(color_poly, num_extruders, layer_idx); } @@ -2289,21 +2163,22 @@ std::vector> multi_material_segmentation_by_painting(con } } }); // end of parallel_for - BOOST_LOG_TRIVIAL(debug) << "MM segmentation - layers segmentation in parallel - end"; + BOOST_LOG_TRIVIAL(debug) << "Print object segmentation - layers segmentation in parallel - end"; throw_on_cancel_callback(); - auto interlocking_beam = print_object.config().interlocking_beam; - if (auto max_width = print_object.config().mmu_segmented_region_max_width, interlocking_depth = print_object.config().mmu_segmented_region_interlocking_depth; - !interlocking_beam && (max_width > 0.f || interlocking_depth > 0.f)) { - cut_segmented_layers(input_expolygons, segmented_regions, float(scale_(max_width)), float(scale_(interlocking_depth)), throw_on_cancel_callback); + if ((segmentation_max_width > 0.f || segmentation_interlocking_depth > 0.f) && !segmentation_interlocking_beam) { + cut_segmented_layers(input_expolygons, segmented_regions, float(scale_(segmentation_max_width)), float(scale_(segmentation_interlocking_depth)), throw_on_cancel_callback); throw_on_cancel_callback(); } // The first index is extruder number (includes default extruder), and the second one is layer number - std::vector> top_and_bottom_layers = mmu_segmentation_top_and_bottom_layers(print_object, input_expolygons, throw_on_cancel_callback); - throw_on_cancel_callback(); + std::vector> top_and_bottom_layers; + if (include_top_and_bottom_layers == IncludeTopAndBottomLayers::Yes) { + top_and_bottom_layers = segmentation_top_and_bottom_layers(print_object, input_expolygons, extract_facets_info, num_facets_states, throw_on_cancel_callback); + throw_on_cancel_callback(); + } - std::vector> segmented_regions_merged = merge_segmented_layers(segmented_regions, std::move(top_and_bottom_layers), num_extruders, throw_on_cancel_callback); + std::vector> segmented_regions_merged = merge_segmented_layers(segmented_regions, std::move(top_and_bottom_layers), num_facets_states, throw_on_cancel_callback); throw_on_cancel_callback(); #ifdef MM_SEGMENTATION_DEBUG_REGIONS @@ -2318,4 +2193,37 @@ std::vector> multi_material_segmentation_by_painting(con return segmented_regions_merged; } +// Returns multi-material segmentation based on painting in multi-material segmentation gizmo +std::vector> multi_material_segmentation_by_painting(const PrintObject &print_object, const std::function &throw_on_cancel_callback) { + const size_t num_facets_states = print_object.print()->config().filament_colour.size() + 1; + const float max_width = float(print_object.config().mmu_segmented_region_max_width.value); + const float interlocking_depth = float(print_object.config().mmu_segmented_region_interlocking_depth.value); + const bool interlocking_beam = print_object.config().interlocking_beam.value; + + const auto extract_facets_info = [](const ModelVolume &mv) -> ModelVolumeFacetsInfo { + return {mv.mmu_segmentation_facets, mv.is_mm_painted(), false}; + }; + + return segmentation_by_painting(print_object, extract_facets_info, num_facets_states, max_width, interlocking_depth, interlocking_beam, IncludeTopAndBottomLayers::Yes, throw_on_cancel_callback); +} + +// Returns fuzzy skin segmentation based on painting in fuzzy skin segmentation gizmo +std::vector> fuzzy_skin_segmentation_by_painting(const PrintObject &print_object, const std::function &throw_on_cancel_callback) { + const size_t num_facets_states = 2; // Unpainted facets and facets painted with fuzzy skin. + + const auto extract_facets_info = [](const ModelVolume &mv) -> ModelVolumeFacetsInfo { + return {mv.fuzzy_skin_facets, mv.is_fuzzy_skin_painted(), false}; + }; + + // Because we apply fuzzy skin just on external perimeters, we limit the depth of fuzzy skin + // by the maximal extrusion width of external perimeters. + float max_external_perimeter_width = 0.; + for (size_t region_idx = 0; region_idx < print_object.num_printing_regions(); ++region_idx) { + const PrintRegion ®ion = print_object.printing_region(region_idx); + max_external_perimeter_width = std::max(max_external_perimeter_width, region.flow(print_object, frExternalPerimeter, print_object.config().layer_height).width()); + } + + return segmentation_by_painting(print_object, extract_facets_info, num_facets_states, max_external_perimeter_width, 0.f, false, IncludeTopAndBottomLayers::No, throw_on_cancel_callback); +} + } // namespace Slic3r diff --git a/src/libslic3r/MultiMaterialSegmentation.hpp b/src/libslic3r/MultiMaterialSegmentation.hpp index 91d0f298bc..fad97e4cf2 100644 --- a/src/libslic3r/MultiMaterialSegmentation.hpp +++ b/src/libslic3r/MultiMaterialSegmentation.hpp @@ -6,8 +6,11 @@ namespace Slic3r { -class PrintObject; class ExPolygon; +class ModelVolume; +class PrintObject; +class FacetsAnnotation; + using ExPolygons = std::vector; struct ColoredLine @@ -20,9 +23,35 @@ struct ColoredLine using ColoredLines = std::vector; -// Returns MMU segmentation based on painting in MMU segmentation gizmo +enum class IncludeTopAndBottomLayers { + Yes, + No +}; + +struct ModelVolumeFacetsInfo { + const FacetsAnnotation &facets_annotation; + // Indicate if model volume is painted. + const bool is_painted; + // Indicate if the default extruder (TriangleStateType::NONE) should be replaced with the volume extruder. + const bool replace_default_extruder; +}; + +// Returns segmentation based on painting in segmentation gizmos. +std::vector> segmentation_by_painting(const PrintObject &print_object, + const std::function &extract_facets_info, + size_t num_facets_states, + float segmentation_max_width, + float segmentation_interlocking_depth, + bool segmentation_interlocking_beam, + IncludeTopAndBottomLayers include_top_and_bottom_layers, + const std::function &throw_on_cancel_callback); + +// Returns multi-material segmentation based on painting in multi-material segmentation gizmo std::vector> multi_material_segmentation_by_painting(const PrintObject &print_object, const std::function &throw_on_cancel_callback); +// Returns fuzzy skin segmentation based on painting in fuzzy skin segmentation gizmo +std::vector> fuzzy_skin_segmentation_by_painting(const PrintObject &print_object, const std::function &throw_on_cancel_callback); + } // namespace Slic3r namespace boost::polygon { diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 07d1409481..c67f0cf3f3 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -4,6 +4,7 @@ #include "ClipperUtils.hpp" #include "ExtrusionEntity.hpp" #include "ExtrusionEntityCollection.hpp" +#include "Feature/FuzzySkin/FuzzySkin.hpp" #include "PrintConfig.hpp" #include "ShortestPath.hpp" #include "VariableWidth.hpp" @@ -14,13 +15,10 @@ #include "Line.hpp" #include #include -#include #include #include #include "libslic3r/AABBTreeLines.hpp" #include "Print.hpp" -#include "Algorithm/LineSplit.hpp" -#include "libnoise/noise.h" static const int overhang_sampling_number = 6; static const double narrow_loop_length_threshold = 10; //BBS: when the width of expolygon is smaller than @@ -28,26 +26,9 @@ static const double narrow_loop_length_threshold = 10; //we think it's small detail area and will generate smaller line width for it static constexpr double SMALLER_EXT_INSET_OVERLAP_TOLERANCE = 0.22; -//#define DEBUG_FUZZY - namespace Slic3r { - -// Produces a random value between 0 and 1. Thread-safe. -static double random_value() { - thread_local std::random_device rd; - // Hash thread ID for random number seed if no hardware rng seed is available - thread_local std::mt19937 gen(rd.entropy() > 0 ? rd() : std::hash()(std::this_thread::get_id())); - thread_local std::uniform_real_distribution dist(0.0, 1.0); - return dist(gen); -} - -class UniformNoise: public noise::module::Module { - public: - UniformNoise(): Module (GetSourceModuleCount ()) {}; - - virtual int GetSourceModuleCount() const { return 0; } - virtual double GetValue(double x, double y, double z) const { return random_value() * 2 - 1; } -}; + +using namespace Slic3r::Feature::FuzzySkin; // Hierarchy of perimeters. class PerimeterGeneratorLoop { @@ -71,124 +52,6 @@ public: bool is_internal_contour() const; }; -static std::unique_ptr get_noise_module(const FuzzySkinConfig& cfg) { - if (cfg.noise_type == NoiseType::Perlin) { - auto perlin_noise = noise::module::Perlin(); - perlin_noise.SetFrequency(1 / cfg.noise_scale); - perlin_noise.SetOctaveCount(cfg.noise_octaves); - perlin_noise.SetPersistence(cfg.noise_persistence); - return std::make_unique(perlin_noise); - } else if (cfg.noise_type == NoiseType::Billow) { - auto billow_noise = noise::module::Billow(); - billow_noise.SetFrequency(1 / cfg.noise_scale); - billow_noise.SetOctaveCount(cfg.noise_octaves); - billow_noise.SetPersistence(cfg.noise_persistence); - return std::make_unique(billow_noise); - } else if (cfg.noise_type == NoiseType::RidgedMulti) { - auto ridged_multi_noise = noise::module::RidgedMulti(); - ridged_multi_noise.SetFrequency(1 / cfg.noise_scale); - ridged_multi_noise.SetOctaveCount(cfg.noise_octaves); - return std::make_unique(ridged_multi_noise); - } else if (cfg.noise_type == NoiseType::Voronoi) { - auto voronoi_noise = noise::module::Voronoi(); - voronoi_noise.SetFrequency(1 / cfg.noise_scale); - voronoi_noise.SetDisplacement(1.0); - return std::make_unique(voronoi_noise); - } else { - return std::make_unique(); - } -} - -// Thanks Cura developers for this function. -static void fuzzy_polyline(Points& poly, bool closed, coordf_t slice_z, const FuzzySkinConfig& cfg) -{ - std::unique_ptr noise = get_noise_module(cfg); - - const double min_dist_between_points = cfg.point_distance * 3. / 4.; // hardcoded: the point distance may vary between 3/4 and 5/4 the supplied value - const double range_random_point_dist = cfg.point_distance / 2.; - double dist_left_over = random_value() * (min_dist_between_points / 2.); // the distance to be traversed on the line before making the first new point - Point* p0 = &poly.back(); - Points out; - out.reserve(poly.size()); - for (Point &p1 : poly) - { - if (!closed) { - // Skip the first point for open path - closed = true; - p0 = &p1; - continue; - } - // 'a' is the (next) new point between p0 and p1 - Vec2d p0p1 = (p1 - *p0).cast(); - double p0p1_size = p0p1.norm(); - double p0pa_dist = dist_left_over; - for (; p0pa_dist < p0p1_size; - p0pa_dist += min_dist_between_points + random_value() * range_random_point_dist) - { - Point pa = *p0 + (p0p1 * (p0pa_dist / p0p1_size)).cast(); - double r = noise->GetValue(unscale_(pa.x()), unscale_(pa.y()), slice_z) * cfg.thickness; - out.emplace_back(pa + (perp(p0p1).cast().normalized() * r).cast()); - } - dist_left_over = p0pa_dist - p0p1_size; - p0 = &p1; - } - while (out.size() < 3) { - size_t point_idx = poly.size() - 2; - out.emplace_back(poly[point_idx]); - if (point_idx == 0) - break; - -- point_idx; - } - if (out.size() >= 3) - poly = std::move(out); -} - -// Thanks Cura developers for this function. -static void fuzzy_extrusion_line(std::vector& ext_lines, coordf_t slice_z, const FuzzySkinConfig& cfg) -{ - std::unique_ptr noise = get_noise_module(cfg); - - const double min_dist_between_points = cfg.point_distance * 3. / 4.; // hardcoded: the point distance may vary between 3/4 and 5/4 the supplied value - const double range_random_point_dist = cfg.point_distance / 2.; - double dist_left_over = random_value() * (min_dist_between_points / 2.); // the distance to be traversed on the line before making the first new point - - auto* p0 = &ext_lines.front(); - std::vector out; - out.reserve(ext_lines.size()); - for (auto& p1 : ext_lines) { - if (p0->p == p1.p) { // Connect endpoints. - out.emplace_back(p1.p, p1.w, p1.perimeter_index); - continue; - } - - // 'a' is the (next) new point between p0 and p1 - Vec2d p0p1 = (p1.p - p0->p).cast(); - double p0p1_size = p0p1.norm(); - double p0pa_dist = dist_left_over; - for (; p0pa_dist < p0p1_size; p0pa_dist += min_dist_between_points + random_value() * range_random_point_dist) { - Point pa = p0->p + (p0p1 * (p0pa_dist / p0p1_size)).cast(); - double r = noise->GetValue(unscale_(pa.x()), unscale_(pa.y()), slice_z) * cfg.thickness; - out.emplace_back(pa + (perp(p0p1).cast().normalized() * r).cast(), p1.w, p1.perimeter_index); - } - dist_left_over = p0pa_dist - p0p1_size; - p0 = &p1; - } - - while (out.size() < 3) { - size_t point_idx = ext_lines.size() - 2; - out.emplace_back(ext_lines[point_idx].p, ext_lines[point_idx].w, ext_lines[point_idx].perimeter_index); - if (point_idx == 0) - break; - --point_idx; - } - - if (ext_lines.back().p == ext_lines.front().p) // Connect endpoints. - out.front().p = out.back().p; - - if (out.size() >= 3) - ext_lines = std::move(out); -} - using PerimeterGeneratorLoops = std::vector; template @@ -234,31 +97,12 @@ static bool detect_steep_overhang(const PrintRegionConfig *config, return false; } -static bool should_fuzzify(const FuzzySkinConfig& config, const int layer_id, const size_t loop_idx, const bool is_contour) -{ - const auto fuzziy_type = config.type; - - if (fuzziy_type == FuzzySkinType::None) { - return false; - } - if (!config.fuzzy_first_layer && layer_id <= 0) { - // Do not fuzzy first layer unless told to - return false; - } - - const bool fuzzify_contours = loop_idx == 0 || fuzziy_type == FuzzySkinType::AllWalls; - const bool fuzzify_holes = fuzzify_contours && (fuzziy_type == FuzzySkinType::All || fuzziy_type == FuzzySkinType::AllWalls); - - return is_contour ? fuzzify_contours : fuzzify_holes; -} - static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perimeter_generator, const PerimeterGeneratorLoops &loops, ThickPolylines &thin_walls, bool &steep_overhang_contour, bool &steep_overhang_hole) { // loops is an arrayref of ::Loop objects // turn each one into an ExtrusionLoop object ExtrusionEntityCollection coll; - Polygon fuzzified; // Detect steep overhangs bool overhangs_reverse = perimeter_generator.config->overhang_reverse && @@ -302,99 +146,9 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime extrusion_mm3_per_mm = perimeter_generator.mm3_per_mm(); extrusion_width = perimeter_generator.perimeter_flow.width(); } - const Polygon& polygon = *([&perimeter_generator, &loop, &fuzzified]() ->const Polygon* { - const auto& regions = perimeter_generator.regions_by_fuzzify; - if (regions.size() == 1) { // optimization - const auto& config = regions.begin()->first; - const bool fuzzify = should_fuzzify(config, perimeter_generator.layer_id, loop.depth, loop.is_contour); - if (!fuzzify) { - return &loop.polygon; - } - fuzzified = loop.polygon; - fuzzy_polyline(fuzzified.points, true, perimeter_generator.slice_z, config); - return &fuzzified; - } - - // Find all affective regions - std::vector> fuzzified_regions; - fuzzified_regions.reserve(regions.size()); - for (const auto & region : regions) { - if (should_fuzzify(region.first, perimeter_generator.layer_id, loop.depth, loop.is_contour)) { - fuzzified_regions.emplace_back(region.first, region.second); - } - } - if (fuzzified_regions.empty()) { - return &loop.polygon; - } - -#ifdef DEBUG_FUZZY - { - int i = 0; - for (const auto & r : fuzzified_regions) { - BoundingBox bbox = get_extents(perimeter_generator.slices->surfaces); - bbox.offset(scale_(1.)); - ::Slic3r::SVG svg(debug_out_path("fuzzy_traverse_loops_%d_%d_%d_region_%d.svg", perimeter_generator.layer_id, loop.is_contour ? 0 : 1, loop.depth, i).c_str(), bbox); - svg.draw_outline(perimeter_generator.slices->surfaces); - svg.draw_outline(loop.polygon, "green"); - svg.draw(r.second, "red", 0.5); - svg.draw_outline(r.second, "red"); - svg.Close(); - i++; - } - } -#endif - - // Split the loops into lines with different config, and fuzzy them separately - fuzzified = loop.polygon; - for (const auto& r : fuzzified_regions) { - const auto splitted = Algorithm::split_line(fuzzified, r.second, true); - if (splitted.empty()) { - // No intersection, skip - continue; - } - - // Fuzzy splitted polygon - if (std::all_of(splitted.begin(), splitted.end(), [](const Algorithm::SplitLineJunction& j) { return j.clipped; })) { - // The entire polygon is fuzzified - fuzzy_polyline(fuzzified.points, true, perimeter_generator.slice_z, r.first); - } else { - Points segment; - segment.reserve(splitted.size()); - fuzzified.points.clear(); - - const auto slice_z = perimeter_generator.slice_z; - const auto fuzzy_current_segment = [&segment, &fuzzified, &r, slice_z]() { - fuzzified.points.push_back(segment.front()); - const auto back = segment.back(); - fuzzy_polyline(segment, false, slice_z, r.first); - fuzzified.points.insert(fuzzified.points.end(), segment.begin(), segment.end()); - fuzzified.points.push_back(back); - segment.clear(); - }; - - for (const auto& p : splitted) { - if (p.clipped) { - segment.push_back(p.p); - } else { - if (segment.empty()) { - fuzzified.points.push_back(p.p); - } else { - segment.push_back(p.p); - fuzzy_current_segment(); - } - } - } - if (!segment.empty()) { - // Close the loop - segment.push_back(splitted.front().p); - fuzzy_current_segment(); - } - } - } - - return &fuzzified; - }()); + // Apply fuzzy skin if it is enabled for at least some part of the polygon. + const Polygon polygon = apply_fuzzy_skin(loop.polygon, perimeter_generator, loop.depth, loop.is_contour); ExtrusionPaths paths; if (perimeter_generator.config->detect_overhang_wall && perimeter_generator.layer_id > perimeter_generator.object_config->raft_layers) { @@ -603,8 +357,6 @@ struct PerimeterGeneratorArachneExtrusion static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& perimeter_generator, std::vector& pg_extrusions, bool &steep_overhang_contour, bool &steep_overhang_hole) { - const auto slice_z = perimeter_generator.slice_z; - // Detect steep overhangs bool overhangs_reverse = perimeter_generator.config->overhang_reverse && perimeter_generator.layer_id % 2 == 1; // Only calculate overhang degree on even (from GUI POV) layers @@ -618,77 +370,8 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p const bool is_external = extrusion->inset_idx == 0; ExtrusionRole role = is_external ? erExternalPerimeter : erPerimeter; - const auto& regions = perimeter_generator.regions_by_fuzzify; const bool is_contour = !extrusion->is_closed || pg_extrusion.is_contour; - if (regions.size() == 1) { // optimization - const auto& config = regions.begin()->first; - const bool fuzzify = should_fuzzify(config, perimeter_generator.layer_id, extrusion->inset_idx, is_contour); - if (fuzzify) - fuzzy_extrusion_line(extrusion->junctions, slice_z, config); - } else { - // Find all affective regions - std::vector> fuzzified_regions; - fuzzified_regions.reserve(regions.size()); - for (const auto& region : regions) { - if (should_fuzzify(region.first, perimeter_generator.layer_id, extrusion->inset_idx, is_contour)) { - fuzzified_regions.emplace_back(region.first, region.second); - } - } - if (!fuzzified_regions.empty()) { - // Split the loops into lines with different config, and fuzzy them separately - for (const auto& r : fuzzified_regions) { - const auto splitted = Algorithm::split_line(*extrusion, r.second, false); - if (splitted.empty()) { - // No intersection, skip - continue; - } - - // Fuzzy splitted extrusion - if (std::all_of(splitted.begin(), splitted.end(), [](const Algorithm::SplitLineJunction& j) { return j.clipped; })) { - // The entire polygon is fuzzified - fuzzy_extrusion_line(extrusion->junctions, slice_z, r.first); - } else { - const auto current_ext = extrusion->junctions; - std::vector segment; - segment.reserve(current_ext.size()); - extrusion->junctions.clear(); - - const auto fuzzy_current_segment = [&segment, &extrusion, &r, slice_z]() { - extrusion->junctions.push_back(segment.front()); - const auto back = segment.back(); - fuzzy_extrusion_line(segment, slice_z, r.first); - extrusion->junctions.insert(extrusion->junctions.end(), segment.begin(), segment.end()); - extrusion->junctions.push_back(back); - segment.clear(); - }; - - const auto to_ex_junction = [¤t_ext](const Algorithm::SplitLineJunction& j) -> Arachne::ExtrusionJunction { - Arachne::ExtrusionJunction res = current_ext[j.get_src_index()]; - if (!j.is_src()) { - res.p = j.p; - } - return res; - }; - - for (const auto& p : splitted) { - if (p.clipped) { - segment.push_back(to_ex_junction(p)); - } else { - if (segment.empty()) { - extrusion->junctions.push_back(to_ex_junction(p)); - } else { - segment.push_back(to_ex_junction(p)); - fuzzy_current_segment(); - } - } - } - if (!segment.empty()) { - fuzzy_current_segment(); - } - } - } - } - } + apply_fuzzy_skin(extrusion, perimeter_generator, is_contour); ExtrusionPaths paths; // detect overhanging/bridging perimeters @@ -1430,48 +1113,6 @@ static void reorient_perimeters(ExtrusionEntityCollection &entities, bool steep_ } } -static void group_region_by_fuzzify(PerimeterGenerator& g) -{ - g.regions_by_fuzzify.clear(); - g.has_fuzzy_skin = false; - g.has_fuzzy_hole = false; - - std::unordered_map regions; - for (auto region : *g.compatible_regions) { - const auto& region_config = region->region().config(); - const FuzzySkinConfig cfg{ - region_config.fuzzy_skin, - scaled(region_config.fuzzy_skin_thickness.value), - scaled(region_config.fuzzy_skin_point_distance.value), - region_config.fuzzy_skin_first_layer, - region_config.fuzzy_skin_noise_type, - region_config.fuzzy_skin_scale, - region_config.fuzzy_skin_octaves, - region_config.fuzzy_skin_persistence - }; - auto& surfaces = regions[cfg]; - for (const auto& surface : region->slices.surfaces) { - surfaces.push_back(&surface); - } - - if (cfg.type != FuzzySkinType::None) { - g.has_fuzzy_skin = true; - if (cfg.type != FuzzySkinType::External) { - g.has_fuzzy_hole = true; - } - } - } - - if (regions.size() == 1) { // optimization - g.regions_by_fuzzify[regions.begin()->first] = {}; - return; - } - - for (auto& it : regions) { - g.regions_by_fuzzify[it.first] = offset_ex(it.second, ClipperSafetyOffset); - } -} - void PerimeterGenerator::process_classic() { group_region_by_fuzzify(*this); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 858fa32053..a9db96d090 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1098,8 +1098,15 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* if (total_copies_count > 1 && m_config.print_sequence != PrintSequence::ByObject) return {L("Please select \"By object\" print sequence to print multiple objects in spiral vase mode."), nullptr, "spiral_mode"}; assert(m_objects.size() == 1); - if (m_objects.front()->all_regions().size() > 1) - return {L("The spiral vase mode does not work when an object contains more than one materials."), nullptr, "spiral_mode"}; + const auto all_regions = m_objects.front()->all_regions(); + if (all_regions.size() > 1) { + // Orca: make sure regions are not compatible + if (std::any_of(all_regions.begin() + 1, all_regions.end(), [ra = all_regions.front()](const auto rb) { + return !Layer::is_perimeter_compatible(ra, rb); + })) { + return {L("The spiral vase mode does not work when an object contains more than one materials."), nullptr, "spiral_mode"}; + } + } } // Cache of layer height profiles for checking: @@ -1881,6 +1888,8 @@ void Print::process(long long *time_cost_with_cache, bool use_cache) return false; if (!model_volume1.mmu_segmentation_facets.equals(model_volume2.mmu_segmentation_facets)) return false; + if (!model_volume1.fuzzy_skin_facets.equals(model_volume2.fuzzy_skin_facets)) + return false; if (model_volume1.config.get() != model_volume2.config.get()) return false; } @@ -4331,4 +4340,21 @@ Point PrintInstance::shift_without_plate_offset() const return shift - Point(scaled(plate_offset.x()), scaled(plate_offset.y())); } +PrintRegion *PrintObjectRegions::FuzzySkinPaintedRegion::parent_print_object_region(const LayerRangeRegions &layer_range) const +{ + using FuzzySkinParentType = PrintObjectRegions::FuzzySkinPaintedRegion::ParentType; + + if (this->parent_type == FuzzySkinParentType::PaintedRegion) { + return layer_range.painted_regions[this->parent].region; + } + + assert(this->parent_type == FuzzySkinParentType::VolumeRegion); + return layer_range.volume_regions[this->parent].region; +} + +int PrintObjectRegions::FuzzySkinPaintedRegion::parent_print_object_region_id(const LayerRangeRegions &layer_range) const +{ + return this->parent_print_object_region(layer_range)->print_object_region_id(); +} + } // namespace Slic3r diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index ac3e17a4eb..7261bc2ce6 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -185,8 +185,6 @@ class ConstSupportLayerPtrsAdaptor : public ConstVectorOfPtrsAdaptor(data) {} }; -class BoundingBoxf3; // TODO: for temporary constructor parameter - // Single instance of a PrintObject. // As multiple PrintObjects may be generated for a single ModelObject (their instances differ in rotation around Z), // ModelObject's instancess will be distributed among these multiple PrintObjects. @@ -251,6 +249,22 @@ public: PrintRegion *region { nullptr }; }; + struct LayerRangeRegions; + + struct FuzzySkinPaintedRegion + { + enum class ParentType { VolumeRegion, PaintedRegion }; + + ParentType parent_type { ParentType::VolumeRegion }; + // Index of a parent VolumeRegion or PaintedRegion. + int parent { -1 }; + // Pointer to PrintObjectRegions::all_regions. + PrintRegion *region { nullptr }; + + PrintRegion *parent_print_object_region(const LayerRangeRegions &layer_range) const; + int parent_print_object_region_id(const LayerRangeRegions &layer_range) const; + }; + // One slice over the PrintObject (possibly the whole PrintObject) and a list of ModelVolumes and their bounding boxes // possibly clipped by the layer_height_range. struct LayerRangeRegions @@ -263,8 +277,9 @@ public: std::vector volumes; // Sorted in the order of their source ModelVolumes, thus reflecting the order of region clipping, modifier overrides etc. - std::vector volume_regions; - std::vector painted_regions; + std::vector volume_regions; + std::vector painted_regions; + std::vector fuzzy_skin_painted_regions; bool has_volume(const ObjectID id) const { auto it = lower_bound_by_predicate(this->volumes.begin(), this->volumes.end(), [id](const VolumeExtents &l) { return l.volume_id < id; }); @@ -415,6 +430,8 @@ public: bool has_support_material() const { return this->has_support() || this->has_raft(); } // Checks if the model object is painted using the multi-material painting gizmo. bool is_mm_painted() const { return this->model_object()->is_mm_painted(); } + // Checks if the model object is painted using the fuzzy skin painting gizmo. + bool is_fuzzy_skin_painted() const { return this->model_object()->is_fuzzy_skin_painted(); } // returns 0-based indices of extruders used to print the object (without brim, support and other helper extrusions) std::vector object_extruders() const; diff --git a/src/libslic3r/PrintApply.cpp b/src/libslic3r/PrintApply.cpp index b7d630c0d5..3921ea48a8 100644 --- a/src/libslic3r/PrintApply.cpp +++ b/src/libslic3r/PrintApply.cpp @@ -77,6 +77,8 @@ static inline void model_volume_list_copy_configs(ModelObject &model_object_dst, mv_dst.seam_facets.assign(mv_src.seam_facets); assert(mv_dst.mmu_segmentation_facets.id() == mv_src.mmu_segmentation_facets.id()); mv_dst.mmu_segmentation_facets.assign(mv_src.mmu_segmentation_facets); + assert(mv_dst.fuzzy_skin_facets.id() == mv_src.fuzzy_skin_facets.id()); + mv_dst.fuzzy_skin_facets.assign(mv_src.fuzzy_skin_facets); //FIXME what to do with the materials? // mv_dst.m_material_id = mv_src.m_material_id; ++ i_src; @@ -705,7 +707,6 @@ bool verify_update_print_object_regions( ModelVolumePtrs model_volumes, const PrintRegionConfig &default_region_config, size_t num_extruders, - const std::vector &painting_extruders, PrintObjectRegions &print_object_regions, const std::function &callback_invalidate) { @@ -803,6 +804,29 @@ bool verify_update_print_object_regions( print_region_ref_inc(*region.region); } + // Verify and / or update PrintRegions produced by fuzzy skin painting. + for (const PrintObjectRegions::LayerRangeRegions &layer_range : print_object_regions.layer_ranges) { + for (const PrintObjectRegions::FuzzySkinPaintedRegion ®ion : layer_range.fuzzy_skin_painted_regions) { + const PrintRegion &parent_print_region = *region.parent_print_object_region(layer_range); + PrintRegionConfig cfg = parent_print_region.config(); + cfg.fuzzy_skin.value = FuzzySkinType::All; + if (cfg != region.region->config()) { + // Region configuration changed. + if (print_region_ref_cnt(*region.region) == 0) { + // Region is referenced for the first time. Just change its parameters. + // Stop the background process before assigning new configuration to the regions. + t_config_option_keys diff = region.region->config().diff(cfg); + callback_invalidate(region.region->config(), cfg, diff); + region.region->config_apply_only(cfg, diff, false); + } else { + // Region is referenced multiple times, thus the region is being split. We need to reslice. + return false; + } + } + print_region_ref_inc(*region.region); + } + } + // Lastly verify, whether some regions were not merged. { std::vector regions; @@ -906,7 +930,8 @@ static PrintObjectRegions* generate_print_object_regions( const Transform3d &trafo, size_t num_extruders, const float xy_contour_compensation, - const std::vector & painting_extruders) + const std::vector &painting_extruders, + const bool has_painted_fuzzy_skin) { // Reuse the old object or generate a new one. auto out = print_object_regions_old ? std::unique_ptr(print_object_regions_old) : std::make_unique(); @@ -928,6 +953,7 @@ static PrintObjectRegions* generate_print_object_regions( r.config = range.config; r.volume_regions.clear(); r.painted_regions.clear(); + r.fuzzy_skin_painted_regions.clear(); } } else { out->trafo_bboxes = trafo; @@ -1009,13 +1035,42 @@ static PrintObjectRegions* generate_print_object_regions( cfg.sparse_infill_filament.value = painted_extruder_id; layer_range.painted_regions.push_back({ painted_extruder_id, parent_region_id, get_create_region(std::move(cfg))}); } - // Sort the regions by parent region::print_object_region_id() and extruder_id to help the slicing algorithm when applying MMU segmentation. + // Sort the regions by parent region::print_object_region_id() and extruder_id to help the slicing algorithm when applying MM segmentation. std::sort(layer_range.painted_regions.begin(), layer_range.painted_regions.end(), [&layer_range](auto &l, auto &r) { int lid = layer_range.volume_regions[l.parent].region->print_object_region_id(); int rid = layer_range.volume_regions[r.parent].region->print_object_region_id(); return lid < rid || (lid == rid && l.extruder_id < r.extruder_id); }); } + if (has_painted_fuzzy_skin) { + using FuzzySkinParentType = PrintObjectRegions::FuzzySkinPaintedRegion::ParentType; + + for (PrintObjectRegions::LayerRangeRegions &layer_range : layer_ranges_regions) { + // FuzzySkinPaintedRegion can override different parts of the Layer than PaintedRegions, + // so FuzzySkinPaintedRegion has to point to both VolumeRegion and PaintedRegion. + for (int parent_volume_region_id = 0; parent_volume_region_id < int(layer_range.volume_regions.size()); ++parent_volume_region_id) { + if (const PrintObjectRegions::VolumeRegion &parent_volume_region = layer_range.volume_regions[parent_volume_region_id]; parent_volume_region.model_volume->is_model_part() || parent_volume_region.model_volume->is_modifier()) { + PrintRegionConfig cfg = parent_volume_region.region->config(); + cfg.fuzzy_skin.value = FuzzySkinType::All; + layer_range.fuzzy_skin_painted_regions.push_back({FuzzySkinParentType::VolumeRegion, parent_volume_region_id, get_create_region(std::move(cfg))}); + } + } + + for (int parent_painted_regions_id = 0; parent_painted_regions_id < int(layer_range.painted_regions.size()); ++parent_painted_regions_id) { + const PrintObjectRegions::PaintedRegion &parent_painted_region = layer_range.painted_regions[parent_painted_regions_id]; + + PrintRegionConfig cfg = parent_painted_region.region->config(); + cfg.fuzzy_skin.value = FuzzySkinType::All; + layer_range.fuzzy_skin_painted_regions.push_back({FuzzySkinParentType::PaintedRegion, parent_painted_regions_id, get_create_region(std::move(cfg))}); + } + + // Sort the regions by parent region::print_object_region_id() to help the slicing algorithm when applying fuzzy skin segmentation. + std::sort(layer_range.fuzzy_skin_painted_regions.begin(), layer_range.fuzzy_skin_painted_regions.end(), [&layer_range](auto &l, auto &r) { + return l.parent_print_object_region_id(layer_range) < r.parent_print_object_region_id(layer_range); + }); + } + } + return out.release(); } @@ -1251,7 +1306,8 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ // Only volume IDs, volume types, transformation matrices and their order are checked, configuration and other parameters are NOT checked. bool solid_or_modifier_differ = model_volume_list_changed(model_object, model_object_new, solid_or_modifier_types) || model_mmu_segmentation_data_changed(model_object, model_object_new) || - (model_object_new.is_mm_painted() && num_extruders_changed ); + (model_object_new.is_mm_painted() && num_extruders_changed) || + model_fuzzy_skin_data_changed(model_object, model_object_new); bool supports_differ = model_volume_list_changed(model_object, model_object_new, ModelVolumeType::SUPPORT_BLOCKER) || model_volume_list_changed(model_object, model_object_new, ModelVolumeType::SUPPORT_ENFORCER); bool layer_height_ranges_differ = ! layer_height_ranges_equal(model_object.layer_config_ranges, model_object_new.layer_config_ranges, model_object_new.layer_height_profile.empty()); @@ -1541,8 +1597,7 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ verify_update_print_object_regions( print_object.model_object()->volumes, m_default_region_config, - num_extruders , - painting_extruders, + num_extruders, *print_object_regions, [it_print_object, it_print_object_end, &update_apply_status](const PrintRegionConfig &old_config, const PrintRegionConfig &new_config, const t_config_option_keys &diff_keys) { for (auto it = it_print_object; it != it_print_object_end; ++it) @@ -1569,7 +1624,8 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ model_object_status.print_instances.front().trafo, num_extruders , print_object.is_mm_painted() ? 0.f : float(print_object.config().xy_contour_compensation.value), - painting_extruders); + painting_extruders, + print_object.is_fuzzy_skin_painted()); } for (auto it = it_print_object; it != it_print_object_end; ++it) if ((*it)->m_shared_regions) { diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 36a5c22d2a..532307414d 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -1,16 +1,16 @@ +#include + +#include + +#include "ClipperUtils.hpp" #include "ElephantFootCompensation.hpp" #include "I18N.hpp" #include "Layer.hpp" #include "MultiMaterialSegmentation.hpp" #include "Print.hpp" -#include "ClipperUtils.hpp" -#include "Interlocking/InterlockingGenerator.hpp" //BBS #include "ShortestPath.hpp" - -#include - -#include +#include "libslic3r/Feature/Interlocking/InterlockingGenerator.hpp" //! macro used to mark string used at localization, return same string #define L(s) Slic3r::I18N::translate(s) @@ -845,35 +845,38 @@ void PrintObject::slice() template static inline void apply_mm_segmentation(PrintObject &print_object, ThrowOnCancel throw_on_cancel) { - // Returns MMU segmentation based on painting in MMU segmentation gizmo + // Returns MM segmentation based on painting in MM segmentation gizmo std::vector> segmentation = multi_material_segmentation_by_painting(print_object, throw_on_cancel); assert(segmentation.size() == print_object.layer_count()); tbb::parallel_for( tbb::blocked_range(0, segmentation.size(), std::max(segmentation.size() / 128, size_t(1))), [&print_object, &segmentation, throw_on_cancel](const tbb::blocked_range &range) { const auto &layer_ranges = print_object.shared_regions()->layer_ranges; - double z = print_object.get_layer(range.begin())->slice_z; + double z = print_object.get_layer(int(range.begin()))->slice_z; auto it_layer_range = layer_range_first(layer_ranges, z); // BBS const size_t num_extruders = print_object.print()->config().filament_diameter.size(); + struct ByExtruder { ExPolygons expolygons; BoundingBox bbox; }; - std::vector by_extruder; + struct ByRegion { - ExPolygons expolygons; - bool needs_merge { false }; + ExPolygons expolygons; + bool needs_merge { false }; }; - std::vector by_region; - for (size_t layer_id = range.begin(); layer_id < range.end(); ++ layer_id) { + + std::vector by_extruder; + std::vector by_region; + for (size_t layer_id = range.begin(); layer_id < range.end(); ++layer_id) { throw_on_cancel(); - Layer *layer = print_object.get_layer(layer_id); - it_layer_range = layer_range_next(layer_ranges, it_layer_range, layer->slice_z); + Layer &layer = *print_object.get_layer(int(layer_id)); + it_layer_range = layer_range_next(layer_ranges, it_layer_range, layer.slice_z); const PrintObjectRegions::LayerRangeRegions &layer_range = *it_layer_range; // Gather per extruder expolygons. by_extruder.assign(num_extruders, ByExtruder()); - by_region.assign(layer->region_count(), ByRegion()); + by_region.assign(layer.region_count(), ByRegion()); bool layer_split = false; for (size_t extruder_id = 0; extruder_id < num_extruders; ++ extruder_id) { ByExtruder ®ion = by_extruder[extruder_id]; @@ -883,92 +886,228 @@ static inline void apply_mm_segmentation(PrintObject &print_object, ThrowOnCance layer_split = true; } } - if (! layer_split) + + if (!layer_split) continue; + // Split LayerRegions by by_extruder regions. // layer_range.painted_regions are sorted by extruder ID and parent PrintObject region ID. - auto it_painted_region = layer_range.painted_regions.begin(); - for (int region_id = 0; region_id < int(layer->region_count()); ++ region_id) - if (LayerRegion &layerm = *layer->get_region(region_id); ! layerm.slices.surfaces.empty()) { - assert(layerm.region().print_object_region_id() == region_id); - const BoundingBox bbox = get_extents(layerm.slices.surfaces); - assert(it_painted_region < layer_range.painted_regions.end()); - // Find the first it_painted_region which overrides this region. - for (; layer_range.volume_regions[it_painted_region->parent].region->print_object_region_id() < region_id; ++ it_painted_region) - assert(it_painted_region != layer_range.painted_regions.end()); - assert(it_painted_region != layer_range.painted_regions.end()); - assert(layer_range.volume_regions[it_painted_region->parent].region == &layerm.region()); - // 1-based extruder ID - bool self_trimmed = false; - int self_extruder_id = -1; - for (int extruder_id = 1; extruder_id <= int(by_extruder.size()); ++ extruder_id) - if (ByExtruder &segmented = by_extruder[extruder_id - 1]; segmented.bbox.defined && bbox.overlap(segmented.bbox)) { - // Find the target region. - for (; int(it_painted_region->extruder_id) < extruder_id; ++ it_painted_region) - assert(it_painted_region != layer_range.painted_regions.end()); - assert(layer_range.volume_regions[it_painted_region->parent].region == &layerm.region() && int(it_painted_region->extruder_id) == extruder_id); - //FIXME Don't trim by self, it is not reliable. - if (&layerm.region() == it_painted_region->region) { - self_extruder_id = extruder_id; - continue; - } - // Steal from this region. - int target_region_id = it_painted_region->region->print_object_region_id(); - ExPolygons stolen = intersection_ex(layerm.slices.surfaces, segmented.expolygons); - if (! stolen.empty()) { - ByRegion &dst = by_region[target_region_id]; - if (dst.expolygons.empty()) { - dst.expolygons = std::move(stolen); - } else { - append(dst.expolygons, std::move(stolen)); - dst.needs_merge = true; - } - } -#if 0 - if (&layerm.region() == it_painted_region->region) - // Slices of this LayerRegion were trimmed by a MMU region of the same PrintRegion. - self_trimmed = true; -#endif - } - if (! self_trimmed) { - // Trim slices of this LayerRegion with all the MMU regions. - Polygons mine = to_polygons(std::move(layerm.slices.surfaces)); - for (auto &segmented : by_extruder) - if (&segmented - by_extruder.data() + 1 != self_extruder_id && segmented.bbox.defined && bbox.overlap(segmented.bbox)) { - mine = diff(mine, segmented.expolygons); - if (mine.empty()) - break; - } - // Filter out unprintable polygons produced by subtraction multi-material painted regions from layerm.region(). - // ExPolygon returned from multi-material segmentation does not precisely match ExPolygons in layerm.region() - // (because of preprocessing of the input regions in multi-material segmentation). Therefore, subtraction from - // layerm.region() could produce a huge number of small unprintable regions for the model's base extruder. - // This could, on some models, produce bulges with the model's base color (#7109). - if (! mine.empty()) - mine = opening(union_ex(mine), float(scale_(5 * EPSILON)), float(scale_(5 * EPSILON))); - if (! mine.empty()) { - ByRegion &dst = by_region[layerm.region().print_object_region_id()]; - if (dst.expolygons.empty()) { - dst.expolygons = union_ex(mine); - } else { - append(dst.expolygons, union_ex(mine)); - dst.needs_merge = true; - } + auto it_painted_region_begin = layer_range.painted_regions.cbegin(); + for (int parent_layer_region_idx = 0; parent_layer_region_idx < layer.region_count(); ++parent_layer_region_idx) { + if (it_painted_region_begin == layer_range.painted_regions.cend()) + continue; + + const LayerRegion &parent_layer_region = *layer.get_region(parent_layer_region_idx); + const PrintRegion &parent_print_region = parent_layer_region.region(); + assert(parent_print_region.print_object_region_id() == parent_layer_region_idx); + if (parent_layer_region.slices.empty()) + continue; + + // Find the first PaintedRegion, which overrides the parent PrintRegion. + auto it_first_painted_region = std::find_if(it_painted_region_begin, layer_range.painted_regions.cend(), [&layer_range, &parent_print_region](const auto &painted_region) { + return layer_range.volume_regions[painted_region.parent].region->print_object_region_id() == parent_print_region.print_object_region_id(); + }); + + if (it_first_painted_region == layer_range.painted_regions.cend()) + continue; // This LayerRegion isn't overrides by any PaintedRegion. + + assert(&parent_print_region == layer_range.volume_regions[it_first_painted_region->parent].region); + + // Update the beginning PaintedRegion iterator for the next iteration. + it_painted_region_begin = it_first_painted_region; + + const BoundingBox parent_layer_region_bbox = get_extents(parent_layer_region.slices.surfaces); + bool self_trimmed = false; + int self_extruder_id = -1; // 1-based extruder ID + for (int extruder_id = 1; extruder_id <= int(by_extruder.size()); ++extruder_id) { + const ByExtruder &segmented = by_extruder[extruder_id - 1]; + if (!segmented.bbox.defined || !parent_layer_region_bbox.overlap(segmented.bbox)) + continue; + + // Find the first target region iterator. + auto it_target_region = std::find_if(it_painted_region_begin, layer_range.painted_regions.cend(), [extruder_id](const auto &painted_region) { + return int(painted_region.extruder_id) >= extruder_id; + }); + + assert(it_target_region != layer_range.painted_regions.end()); + assert(layer_range.volume_regions[it_target_region->parent].region == &parent_print_region && int(it_target_region->extruder_id) == extruder_id); + + // Update the beginning PaintedRegion iterator for the next iteration. + it_painted_region_begin = it_target_region; + + // FIXME: Don't trim by self, it is not reliable. + if (it_target_region->region == &parent_print_region) { + self_extruder_id = extruder_id; + continue; + } + + // Steal from this region. + int target_region_id = it_target_region->region->print_object_region_id(); + ExPolygons stolen = intersection_ex(parent_layer_region.slices.surfaces, segmented.expolygons); + if (!stolen.empty()) { + ByRegion &dst = by_region[target_region_id]; + if (dst.expolygons.empty()) { + dst.expolygons = std::move(stolen); + } else { + append(dst.expolygons, std::move(stolen)); + dst.needs_merge = true; } } } + + if (!self_trimmed) { + // Trim slices of this LayerRegion with all the MM regions. + Polygons mine = to_polygons(parent_layer_region.slices.surfaces); + for (auto &segmented : by_extruder) { + if (&segmented - by_extruder.data() + 1 != self_extruder_id && segmented.bbox.defined && parent_layer_region_bbox.overlap(segmented.bbox)) { + mine = diff(mine, segmented.expolygons); + if (mine.empty()) + break; + } + } + + // Filter out unprintable polygons produced by subtraction multi-material painted regions from layerm.region(). + // ExPolygon returned from multi-material segmentation does not precisely match ExPolygons in layerm.region() + // (because of preprocessing of the input regions in multi-material segmentation). Therefore, subtraction from + // layerm.region() could produce a huge number of small unprintable regions for the model's base extruder. + // This could, on some models, produce bulges with the model's base color (#7109). + if (!mine.empty()) { + mine = opening(union_ex(mine), scaled(5. * EPSILON), scaled(5. * EPSILON)); + } + + if (!mine.empty()) { + ByRegion &dst = by_region[parent_print_region.print_object_region_id()]; + if (dst.expolygons.empty()) { + dst.expolygons = union_ex(mine); + } else { + append(dst.expolygons, union_ex(mine)); + dst.needs_merge = true; + } + } + } + } + // Re-create Surfaces of LayerRegions. - for (size_t region_id = 0; region_id < layer->region_count(); ++ region_id) { + for (int region_id = 0; region_id < layer.region_count(); ++region_id) { ByRegion &src = by_region[region_id]; - if (src.needs_merge) + if (src.needs_merge) { // Multiple regions were merged into one. - src.expolygons = closing_ex(src.expolygons, float(scale_(10 * EPSILON))); - layer->get_region(region_id)->slices.set(std::move(src.expolygons), stInternal); + src.expolygons = closing_ex(src.expolygons, scaled(10. * EPSILON)); + } + + layer.get_region(region_id)->slices.set(std::move(src.expolygons), stInternal); } } }); } +template +void apply_fuzzy_skin_segmentation(PrintObject &print_object, ThrowOnCancel throw_on_cancel) +{ + // Returns fuzzy skin segmentation based on painting in the fuzzy skin painting gizmo. + std::vector> segmentation = fuzzy_skin_segmentation_by_painting(print_object, throw_on_cancel); + assert(segmentation.size() == print_object.layer_count()); + + struct ByRegion + { + ExPolygons expolygons; + bool needs_merge { false }; + }; + + tbb::parallel_for(tbb::blocked_range(0, segmentation.size(), std::max(segmentation.size() / 128, size_t(1))), [&print_object, &segmentation, throw_on_cancel](const tbb::blocked_range &range) { + const auto &layer_ranges = print_object.shared_regions()->layer_ranges; + auto it_layer_range = layer_range_first(layer_ranges, print_object.get_layer(int(range.begin()))->slice_z); + + for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { + throw_on_cancel(); + + Layer &layer = *print_object.get_layer(int(layer_idx)); + it_layer_range = layer_range_next(layer_ranges, it_layer_range, layer.slice_z); + const PrintObjectRegions::LayerRangeRegions &layer_range = *it_layer_range; + + assert(segmentation[layer_idx].size() == 1); + const ExPolygons &fuzzy_skin_segmentation = segmentation[layer_idx][0]; + const BoundingBox fuzzy_skin_segmentation_bbox = get_extents(fuzzy_skin_segmentation); + if (fuzzy_skin_segmentation.empty()) + continue; + + // Split LayerRegions by painted fuzzy skin regions. + // layer_range.fuzzy_skin_painted_regions are sorted by parent PrintObject region ID. + std::vector by_region(layer.region_count()); + auto it_fuzzy_skin_region_begin = layer_range.fuzzy_skin_painted_regions.cbegin(); + for (int parent_layer_region_idx = 0; parent_layer_region_idx < layer.region_count(); ++parent_layer_region_idx) { + if (it_fuzzy_skin_region_begin == layer_range.fuzzy_skin_painted_regions.cend()) + continue; + + const LayerRegion &parent_layer_region = *layer.get_region(parent_layer_region_idx); + const PrintRegion &parent_print_region = parent_layer_region.region(); + assert(parent_print_region.print_object_region_id() == parent_layer_region_idx); + if (parent_layer_region.slices.empty()) + continue; + + // Find the first FuzzySkinPaintedRegion, which overrides the parent PrintRegion. + auto it_fuzzy_skin_region = std::find_if(it_fuzzy_skin_region_begin, layer_range.fuzzy_skin_painted_regions.cend(), [&layer_range, &parent_print_region](const auto &fuzzy_skin_region) { + return fuzzy_skin_region.parent_print_object_region_id(layer_range) == parent_print_region.print_object_region_id(); + }); + + if (it_fuzzy_skin_region == layer_range.fuzzy_skin_painted_regions.cend()) + continue; // This LayerRegion isn't overrides by any FuzzySkinPaintedRegion. + + assert(it_fuzzy_skin_region->parent_print_object_region(layer_range) == &parent_print_region); + + // Update the beginning FuzzySkinPaintedRegion iterator for the next iteration. + it_fuzzy_skin_region_begin = std::next(it_fuzzy_skin_region); + + const BoundingBox parent_layer_region_bbox = get_extents(parent_layer_region.slices.surfaces); + Polygons layer_region_remaining_polygons = to_polygons(parent_layer_region.slices.surfaces); + // Don't trim by self, it is not reliable. + if (parent_layer_region_bbox.overlap(fuzzy_skin_segmentation_bbox) && it_fuzzy_skin_region->region != &parent_print_region) { + // Steal from this region. + const int target_region_id = it_fuzzy_skin_region->region->print_object_region_id(); + ExPolygons stolen = intersection_ex(parent_layer_region.slices.surfaces, fuzzy_skin_segmentation); + if (!stolen.empty()) { + ByRegion &dst = by_region[target_region_id]; + if (dst.expolygons.empty()) { + dst.expolygons = std::move(stolen); + } else { + append(dst.expolygons, std::move(stolen)); + dst.needs_merge = true; + } + } + + // Trim slices of this LayerRegion by the fuzzy skin region. + layer_region_remaining_polygons = diff(layer_region_remaining_polygons, fuzzy_skin_segmentation); + + // Filter out unprintable polygons. Detailed explanation is inside apply_mm_segmentation. + if (!layer_region_remaining_polygons.empty()) { + layer_region_remaining_polygons = opening(union_ex(layer_region_remaining_polygons), scaled(5. * EPSILON), scaled(5. * EPSILON)); + } + } + + if (!layer_region_remaining_polygons.empty()) { + ByRegion &dst = by_region[parent_print_region.print_object_region_id()]; + if (dst.expolygons.empty()) { + dst.expolygons = union_ex(layer_region_remaining_polygons); + } else { + append(dst.expolygons, union_ex(layer_region_remaining_polygons)); + dst.needs_merge = true; + } + } + } + + // Re-create Surfaces of LayerRegions. + for (int region_id = 0; region_id < layer.region_count(); ++region_id) { + ByRegion &src = by_region[region_id]; + if (src.needs_merge) { + // Multiple regions were merged into one. + src.expolygons = closing_ex(src.expolygons, scaled(10. * EPSILON)); + } + + layer.get_region(region_id)->slices.set(std::move(src.expolygons), stInternal); + } + } + }); // end of parallel_for +} // 1) Decides Z positions of the layers, // 2) Initializes layers and their regions @@ -1038,7 +1177,7 @@ void PrintObject::slice_volumes() this->apply_conical_overhang(); - // Is any ModelVolume MMU painted? + // Is any ModelVolume multi-material painted? if (const auto& volumes = this->model_object()->volumes; m_print->config().filament_diameter.size() > 1 && // BBS std::find_if(volumes.begin(), volumes.end(), [](const ModelVolume* v) { return !v->mmu_segmentation_facets.empty(); }) != volumes.end()) { @@ -1057,7 +1196,21 @@ void PrintObject::slice_volumes() apply_mm_segmentation(*this, [print]() { print->throw_if_canceled(); }); } - m_print->throw_if_canceled(); + // Is any ModelVolume fuzzy skin painted? + if (this->model_object()->is_fuzzy_skin_painted()) { + // If XY Size compensation is also enabled, notify the user that XY Size compensation + // would not be used because the object has custom fuzzy skin painted. + if (m_config.xy_hole_compensation.value != 0.f || m_config.xy_contour_compensation.value != 0.f) { + this->active_step_add_warning( + PrintStateBase::WarningLevel::CRITICAL, + _u8L("An object has enabled XY Size compensation which will not be used because it is also fuzzy skin painted.\nXY Size " + "compensation cannot be combined with fuzzy skin painting.") + + "\n" + (_u8L("Object name")) + ": " + this->model_object()->name); + } + + BOOST_LOG_TRIVIAL(debug) << "Slicing volumes - Fuzzy skin segmentation"; + apply_fuzzy_skin_segmentation(*this, [print]() { print->throw_if_canceled(); }); + } InterlockingGenerator::generate_interlocking_structure(this); m_print->throw_if_canceled(); diff --git a/src/libslic3r/TriangleSelector.hpp b/src/libslic3r/TriangleSelector.hpp index f6026b1697..464804c276 100644 --- a/src/libslic3r/TriangleSelector.hpp +++ b/src/libslic3r/TriangleSelector.hpp @@ -15,6 +15,8 @@ enum class EnforcerBlockerType : int8_t { NONE = 0, ENFORCER = 1, BLOCKER = 2, + // For the fuzzy skin, we use just two values (NONE and FUZZY_SKIN). + FUZZY_SKIN = ENFORCER, // Maximum is 15. The value is serialized in TriangleSelector into 6 bits using a 2 bit prefix code. Extruder1 = ENFORCER, Extruder2 = BLOCKER, diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index a71c26508a..923cf948d6 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -135,6 +135,8 @@ set(SLIC3R_GUI_SOURCES #GUI/Gizmos/GLGizmoSlaSupports.hpp GUI/Gizmos/GLGizmoFdmSupports.cpp GUI/Gizmos/GLGizmoFdmSupports.hpp + GUI/Gizmos/GLGizmoFuzzySkin.cpp + GUI/Gizmos/GLGizmoFuzzySkin.hpp GUI/Gizmos/GLGizmoFlatten.cpp GUI/Gizmos/GLGizmoFlatten.hpp GUI/Gizmos/GLGizmoCut.cpp diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 9818260b00..f8bc5393b9 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -787,14 +787,10 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_line("support_interface_not_for_body",config->opt_int("support_interface_filament")&&!config->opt_int("support_filament")); - bool has_fuzzy_skin = (config->opt_enum("fuzzy_skin") != FuzzySkinType::None); - for (auto el : { "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer", "fuzzy_skin_noise_type"}) - toggle_line(el, has_fuzzy_skin); - NoiseType fuzzy_skin_noise_type = config->opt_enum("fuzzy_skin_noise_type"); - toggle_line("fuzzy_skin_scale", has_fuzzy_skin && fuzzy_skin_noise_type != NoiseType::Classic); - toggle_line("fuzzy_skin_octaves", has_fuzzy_skin && fuzzy_skin_noise_type != NoiseType::Classic && fuzzy_skin_noise_type != NoiseType::Voronoi); - toggle_line("fuzzy_skin_persistence", has_fuzzy_skin && (fuzzy_skin_noise_type == NoiseType::Perlin || fuzzy_skin_noise_type == NoiseType::Billow)); + toggle_line("fuzzy_skin_scale", fuzzy_skin_noise_type != NoiseType::Classic); + toggle_line("fuzzy_skin_octaves", fuzzy_skin_noise_type != NoiseType::Classic && fuzzy_skin_noise_type != NoiseType::Voronoi); + toggle_line("fuzzy_skin_persistence", fuzzy_skin_noise_type == NoiseType::Perlin || fuzzy_skin_noise_type == NoiseType::Billow); bool have_arachne = config->opt_enum("wall_generator") == PerimeterGeneratorType::Arachne; for (auto el : { "wall_transition_length", "wall_transition_filter_deviation", "wall_transition_angle", diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index e8cf2235b0..90678a58f0 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1445,13 +1445,14 @@ void GLCanvas3D::toggle_model_objects_visibility(bool visible, const ModelObject auto gizmo_type = gm.get_current_type(); if ( (gizmo_type == GLGizmosManager::FdmSupports || gizmo_type == GLGizmosManager::Seam - || gizmo_type == GLGizmosManager::Cut) + || gizmo_type == GLGizmosManager::Cut + || gizmo_type == GLGizmosManager::FuzzySkin) && !vol->is_modifier) { vol->force_neutral_color = true; } else if (gizmo_type == GLGizmosManager::BrimEars) vol->force_neutral_color = false; - else if (gizmo_type == GLGizmosManager::MmuSegmentation) + else if (gizmo_type == GLGizmosManager::MmSegmentation) vol->is_active = false; else vol->force_native_color = true; @@ -1924,7 +1925,7 @@ void GLCanvas3D::render(bool only_init) //only_body = true; only_current = true; } - else if ((gizmo_type == GLGizmosManager::FdmSupports) || (gizmo_type == GLGizmosManager::Seam) || (gizmo_type == GLGizmosManager::MmuSegmentation)) + else if ((gizmo_type == GLGizmosManager::FdmSupports) || (gizmo_type == GLGizmosManager::Seam) || (gizmo_type == GLGizmosManager::MmSegmentation) || (gizmo_type == GLGizmosManager::FuzzySkin)) no_partplate = true; else if (gizmo_type == GLGizmosManager::BrimEars && !camera.is_looking_downward()) show_grid = false; @@ -3291,7 +3292,7 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) if (keyCode < '7') keyCode += 10; m_timer_set_color.Stop(); } - if (m_gizmos.get_current_type() != GLGizmosManager::MmuSegmentation) + if (m_gizmos.get_current_type() != GLGizmosManager::MmSegmentation) obj_list->set_extruder_for_selected_items(keyCode - '0'); break; } @@ -3834,7 +3835,7 @@ void GLCanvas3D::on_render_timer(wxTimerEvent& evt) void GLCanvas3D::on_set_color_timer(wxTimerEvent& evt) { auto obj_list = wxGetApp().obj_list(); - if (m_gizmos.get_current_type() != GLGizmosManager::MmuSegmentation) + if (m_gizmos.get_current_type() != GLGizmosManager::MmSegmentation) obj_list->set_extruder_for_selected_items(1); m_timer_set_color.Stop(); } @@ -3989,7 +3990,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_dirty = true; // do not return if dragging or tooltip not empty to allow for tooltip update // also, do not return if the mouse is moving and also is inside MM gizmo to allow update seed fill selection - if (!m_mouse.dragging && m_tooltip.is_empty() && (m_gizmos.get_current_type() != GLGizmosManager::MmuSegmentation || !evt.Moving())) + if (!m_mouse.dragging && m_tooltip.is_empty() && (m_gizmos.get_current_type() != GLGizmosManager::MmSegmentation || !evt.Moving())) return; } @@ -4179,7 +4180,8 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) &&*/ m_gizmos.get_current_type() != GLGizmosManager::FdmSupports && m_gizmos.get_current_type() != GLGizmosManager::Seam && m_gizmos.get_current_type() != GLGizmosManager::Cut - && m_gizmos.get_current_type() != GLGizmosManager::MmuSegmentation) { + && m_gizmos.get_current_type() != GLGizmosManager::MmSegmentation + && m_gizmos.get_current_type() != GLGizmosManager::FuzzySkin) { m_rectangle_selection.start_dragging(m_mouse.position, evt.ShiftDown() ? GLSelectionRectangle::Select : GLSelectionRectangle::Deselect); m_dirty = true; } @@ -4330,7 +4332,8 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) const double mult = mult_pref.empty() ? 1.0 : std::stod(mult_pref); const Vec3d rot = (Vec3d(pos.x(), pos.y(), 0.) - m_mouse.drag.start_position_3D) * (PI * TRACKBALLSIZE / 180.) * mult; if (this->m_canvas_type == ECanvasType::CanvasAssembleView || m_gizmos.get_current_type() == GLGizmosManager::FdmSupports || - m_gizmos.get_current_type() == GLGizmosManager::Seam || m_gizmos.get_current_type() == GLGizmosManager::MmuSegmentation) { + m_gizmos.get_current_type() == GLGizmosManager::Seam || m_gizmos.get_current_type() == GLGizmosManager::MmSegmentation || + m_gizmos.get_current_type() == GLGizmosManager::FuzzySkin) { Vec3d rotate_target = Vec3d::Zero(); if (!m_selection.is_empty()) rotate_target = m_selection.get_bounding_box().center(); @@ -7258,7 +7261,8 @@ void GLCanvas3D::_render_bed(const Transform3d& view_matrix, const Transform3d& && m_gizmos.get_current_type() != GLGizmosManager::SlaSupports && m_gizmos.get_current_type() != GLGizmosManager::Hollow && m_gizmos.get_current_type() != GLGizmosManager::Seam - && m_gizmos.get_current_type() != GLGizmosManager::MmuSegmentation); + && m_gizmos.get_current_type() != GLGizmosManager::MmSegmentation + && m_gizmos.get_current_type() != GLGizmosManager::FuzzySkin); */ //bool show_texture = true; //BBS set axes mode @@ -8513,7 +8517,7 @@ void GLCanvas3D::_render_assemble_control() GLVolume::explosion_ratio = m_explosion_ratio = 1.0; return; } - if (m_gizmos.get_current_type() == GLGizmosManager::EType::MmuSegmentation) { + if (m_gizmos.get_current_type() == GLGizmosManager::EType::MmSegmentation) { m_gizmos.m_assemble_view_data->model_objects_clipper()->set_position(0.0, true); return; } diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 07d1bbc006..ac4a2c3070 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -1290,8 +1290,8 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID(); if (node && node->HasColorPainting()) { GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager(); - if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::MmuSegmentation) - gizmos_mgr.open_gizmo(GLGizmosManager::EType::MmuSegmentation); + if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::MmSegmentation) + gizmos_mgr.open_gizmo(GLGizmosManager::EType::MmSegmentation); else gizmos_mgr.reset_all_states(); } @@ -2401,12 +2401,6 @@ void ObjectList::del_info_item(const int obj_idx, InfoItemType type) break; // BBS: remove CustomSeam - case InfoItemType::MmuSegmentation: - cnv->get_gizmos_manager().reset_all_states(); - Plater::TakeSnapshot(plater, "Remove color painting"); - for (ModelVolume* mv : (*m_objects)[obj_idx]->volumes) - mv->mmu_segmentation_facets.reset(); - break; case InfoItemType::CutConnectors: if (!del_from_cut_object(true)) { @@ -2415,6 +2409,20 @@ void ObjectList::del_info_item(const int obj_idx, InfoItemType type) } break; + case InfoItemType::MmSegmentation: + cnv->get_gizmos_manager().reset_all_states(); + Plater::TakeSnapshot(plater, "Remove color painting"); + for (ModelVolume* mv : (*m_objects)[obj_idx]->volumes) + mv->mmu_segmentation_facets.reset(); + break; + + case InfoItemType::FuzzySkin: + cnv->get_gizmos_manager().reset_all_states(); + Plater::TakeSnapshot(plater, _u8L("Remove paint-on fuzzy skin")); + for (ModelVolume* mv : (*m_objects)[obj_idx]->volumes) + mv->fuzzy_skin_facets.reset(); + break; + // BBS: remove Sinking case InfoItemType::Undef : assert(false); break; } @@ -3335,11 +3343,13 @@ void ObjectList::part_selection_changed() case InfoItemType::CustomSupports: // BBS: remove CustomSeam //case InfoItemType::CustomSeam: - case InfoItemType::MmuSegmentation: + case InfoItemType::MmSegmentation: + case InfoItemType::FuzzySkin: { GLGizmosManager::EType gizmo_type = info_type == InfoItemType::CustomSupports ? GLGizmosManager::EType::FdmSupports : /*info_type == InfoItemType::CustomSeam ? GLGizmosManager::EType::Seam :*/ - GLGizmosManager::EType::MmuSegmentation; + info_type == InfoItemType::FuzzySkin ? GLGizmosManager::EType::FuzzySkin : + GLGizmosManager::EType::MmSegmentation; GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager(); if (gizmos_mgr.get_current_type() != gizmo_type) gizmos_mgr.open_gizmo(gizmo_type); @@ -5607,8 +5617,8 @@ void ObjectList::OnEditingStarted(wxDataViewEvent &event) ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID(); if (node->HasColorPainting()) { GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager(); - if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::MmuSegmentation) - gizmos_mgr.open_gizmo(GLGizmosManager::EType::MmuSegmentation); + if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::MmSegmentation) + gizmos_mgr.open_gizmo(GLGizmosManager::EType::MmSegmentation); else gizmos_mgr.reset_all_states(); } @@ -5945,11 +5955,6 @@ ModelObject* ObjectList::object(const int obj_idx) const return (*m_objects)[obj_idx]; } -bool ObjectList::has_paint_on_segmentation() -{ - return m_objects_model->HasInfoItem(InfoItemType::MmuSegmentation); -} - void ObjectList::apply_object_instance_transfrom_to_all_volumes(ModelObject *model_object, bool need_update_assemble_matrix) { const Geometry::Transformation &instance_transformation = model_object->instances[0]->get_transformation(); diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index f8058dd701..9eff46f034 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -444,7 +444,6 @@ public: void set_extruder_for_selected_items(const int extruder); wxDataViewItemArray reorder_volumes_and_get_selection(int obj_idx, std::function add_to_selection = nullptr); void apply_volumes_order(); - bool has_paint_on_segmentation(); // BBS void on_plate_added(PartPlate* part_plate); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index 2d5213d263..3c831aa98c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -151,54 +151,6 @@ bool GLGizmoFdmSupports::on_key_down_select_tool_type(int keyCode) { return true; } -// BBS -void GLGizmoFdmSupports::render_triangles(const Selection& selection) const -{ - ClippingPlaneDataWrapper clp_data = this->get_clipping_plane_data(); - auto* shader = wxGetApp().get_shader("mm_gouraud"); - if (!shader) - return; - shader->start_using(); - shader->set_uniform("clipping_plane", clp_data.clp_dataf); - shader->set_uniform("z_range", clp_data.z_range); - ScopeGuard guard([shader]() { if (shader) shader->stop_using(); }); - - const ModelObject* mo = m_c->selection_info()->model_object(); - int mesh_id = -1; - for (const ModelVolume* mv : mo->volumes) { - if (!mv->is_model_part()) - continue; - - ++mesh_id; - - const Transform3d trafo_matrix = mo->instances[selection.get_instance_idx()]->get_transformation().get_matrix() * mv->get_matrix(); - - bool is_left_handed = trafo_matrix.matrix().determinant() < 0.; - if (is_left_handed) - glsafe(::glFrontFace(GL_CW)); - - const Camera& camera = wxGetApp().plater()->get_camera(); - const Transform3d& view_matrix = camera.get_view_matrix(); - shader->set_uniform("view_model_matrix", view_matrix * trafo_matrix); - shader->set_uniform("projection_matrix", camera.get_projection_matrix()); - const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * trafo_matrix.matrix().block(0, 0, 3, 3).inverse().transpose(); - shader->set_uniform("view_normal_matrix", view_normal_matrix); - - float normal_z = -::cos(Geometry::deg2rad(m_highlight_by_angle_threshold_deg)); - Matrix3f normal_matrix = static_cast(trafo_matrix.matrix().block(0, 0, 3, 3).inverse().transpose().cast()); - - shader->set_uniform("volume_world_matrix", trafo_matrix); - shader->set_uniform("volume_mirrored", is_left_handed); - shader->set_uniform("slope.actived", m_parent.is_using_slope()); - shader->set_uniform("slope.volume_world_normal_matrix", normal_matrix); - shader->set_uniform("slope.normal_z", normal_z); - m_triangle_selectors[mesh_id]->render(m_imgui, trafo_matrix); - - if (is_left_handed) - glsafe(::glFrontFace(GL_CCW)); - } -} - void GLGizmoFdmSupports::on_set_state() { GLGizmoPainterBase::on_set_state(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp index 306d1f13bb..ec0faeab80 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp @@ -32,8 +32,6 @@ protected: void on_render_input_window(float x, float y, float bottom_limit) override; std::string on_get_name() const override; - // BBS - void render_triangles(const Selection& selection) const override; void on_set_state() override; void show_tooltip_information(float caption_max, float x, float y); wxString handle_snapshot_action_name(bool shift_down, Button button_down) const override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp new file mode 100644 index 0000000000..49d8008df4 --- /dev/null +++ b/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp @@ -0,0 +1,390 @@ +#include "GLGizmoFuzzySkin.hpp" + +#include "libslic3r/Model.hpp" +#include "libslic3r/Print.hpp" + +#include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/GUI_ObjectList.hpp" +#include "slic3r/GUI/ImGuiWrapper.hpp" +#include "slic3r/GUI/MsgDialog.hpp" +#include "slic3r/GUI/Plater.hpp" +#include "slic3r/Utils/UndoRedo.hpp" + +#include +#include + +namespace Slic3r::GUI { + +void GLGizmoFuzzySkin::on_shutdown() +{ + m_parent.use_slope(false); + m_parent.toggle_model_objects_visibility(true); +} + +std::string GLGizmoFuzzySkin::on_get_name() const +{ + return _u8L("Paint-on fuzzy skin"); +} + +bool GLGizmoFuzzySkin::on_init() +{ + m_shortcut_key = WXK_CONTROL_H; + + m_desc["clipping_of_view_caption"] = _L("Alt + Mouse wheel"); + m_desc["clipping_of_view"] = _L("Section view"); + m_desc["reset_direction"] = _L("Reset direction"); + m_desc["cursor_size_caption"] = _L("Ctrl + Mouse wheel"); + m_desc["cursor_size"] = _L("Brush size"); + m_desc["cursor_type"] = _L("Brush shape") ; + m_desc["add_fuzzy_skin_caption"] = _L("Left mouse button"); + m_desc["add_fuzzy_skin"] = _L("Add fuzzy skin"); + m_desc["remove_fuzzy_skin_caption"] = _L("Shift + Left mouse button"); + m_desc["remove_fuzzy_skin"] = _L("Remove fuzzy skin"); + m_desc["remove_all"] = _L("Erase all painting"); + m_desc["circle"] = _L("Circle"); + m_desc["sphere"] = _L("Sphere"); + m_desc["pointer"] = _L("Triangles"); + m_desc["tool_type"] = _L("Tool type"); + m_desc["tool_brush"] = _L("Brush"); + m_desc["tool_smart_fill"] = _L("Smart fill"); + m_desc["smart_fill_angle_caption"] = _L("Ctrl + Mouse wheel"); + m_desc["smart_fill_angle"] = _L("Smart fill angle"); + + return true; +} + +GLGizmoFuzzySkin::GLGizmoFuzzySkin(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) + : GLGizmoPainterBase(parent, icon_filename, sprite_id), m_current_tool(ImGui::CircleButtonIcon) +{ +} + +void GLGizmoFuzzySkin::render_painter_gizmo() +{ + const Selection &selection = m_parent.get_selection(); + + glsafe(::glEnable(GL_BLEND)); + glsafe(::glEnable(GL_DEPTH_TEST)); + + render_triangles(selection); + m_c->object_clipper()->render_cut(); + m_c->instances_hider()->render_cut(); + render_cursor(); + + glsafe(::glDisable(GL_BLEND)); +} + +void GLGizmoFuzzySkin::show_tooltip_information(float caption_max, float x, float y) +{ + ImTextureID normal_id = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TOOLBAR_TOOLTIP); + ImTextureID hover_id = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TOOLBAR_TOOLTIP_HOVER); + + caption_max += m_imgui->calc_text_size(std::string_view{": "}).x + 15.f; + + float scale = m_parent.get_scale(); + ImVec2 button_size = ImVec2(25 * scale, 25 * scale); // ORCA: Use exact resolution will prevent blur on icon + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0, 0}); // ORCA: Dont add padding + ImGui::ImageButton3(normal_id, hover_id, button_size); + + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip2(ImVec2(x, y)); + auto draw_text_with_caption = [this, &caption_max](const wxString& caption, const wxString& text) { + m_imgui->text_colored(ImGuiWrapper::COL_ACTIVE, caption); + ImGui::SameLine(caption_max); + m_imgui->text_colored(ImGuiWrapper::COL_WINDOW_BG, text); + }; + + std::vector tip_items; + switch (m_tool_type) { + case ToolType::BRUSH: + if (m_cursor_type == TriangleSelector::POINTER) { + tip_items = {"add_fuzzy_skin", "remove_fuzzy_skin", "clipping_of_view"}; + } else { + tip_items = {"add_fuzzy_skin", "remove_fuzzy_skin", "cursor_size", "clipping_of_view"}; + } + break; + case ToolType::SMART_FILL: + tip_items = {"add_fuzzy_skin", "remove_fuzzy_skin", "smart_fill_angle", "clipping_of_view"}; + break; + default: + break; + } + for (const auto &t : tip_items) draw_text_with_caption(m_desc.at(t + "_caption") + ": ", m_desc.at(t)); + ImGui::EndTooltip(); + } + ImGui::PopStyleVar(2); +} + +void GLGizmoFuzzySkin::on_render_input_window(float x, float y, float bottom_limit) +{ + if (!m_c->selection_info()->model_object()) + return; + + const float approx_height = m_imgui->scaled(22.f); + y = std::min(y, bottom_limit - approx_height); + //BBS: GUI refactor: move gizmo to the right +#if BBS_TOOLBAR_ON_TOP + GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always, 0.0f, 0.0f); +#else + GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always, 1.0f, 0.0f); +#endif + //m_imgui->set_next_window_pos(x, y, ImGuiCond_Always); + + // BBS + ImGuiWrapper::push_toolbar_style(m_parent.get_scale()); + + GizmoImguiBegin(get_name(), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar); + + // First calculate width of all the texts that are could possibly be shown. We will decide set the dialog width based on that: + const float space_size = m_imgui->get_style_scaling() * 8; + const float clipping_slider_left = std::max(m_imgui->calc_text_size(m_desc.at("clipping_of_view")).x + m_imgui->scaled(1.5f), + m_imgui->calc_text_size(m_desc.at("reset_direction")).x + m_imgui->scaled(1.5f) + ImGui::GetStyle().FramePadding.x * 2); + const float cursor_slider_left = m_imgui->calc_text_size(m_desc.at("cursor_size")).x + m_imgui->scaled(1.5f); + const float smart_fill_slider_left = m_imgui->calc_text_size(m_desc.at("smart_fill_angle")).x + m_imgui->scaled(1.5f); + + const float cursor_type_radio_circle = m_imgui->calc_text_size(m_desc["circle"]).x + m_imgui->scaled(2.5f); + const float cursor_type_radio_sphere = m_imgui->calc_text_size(m_desc["sphere"]).x + m_imgui->scaled(2.5f); + const float cursor_type_radio_pointer = m_imgui->calc_text_size(m_desc["pointer"]).x + m_imgui->scaled(2.5f); + + const float button_width = m_imgui->calc_text_size(m_desc.at("remove_all")).x + m_imgui->scaled(1.f); + const float buttons_width = m_imgui->scaled(0.5f); + const float minimal_slider_width = m_imgui->scaled(4.f); + + const float tool_type_radio_left = m_imgui->calc_text_size(m_desc["tool_type"]).x + m_imgui->scaled(1.f); + const float tool_type_radio_brush = m_imgui->calc_text_size(m_desc["tool_brush"]).x + m_imgui->scaled(2.5f); + const float tool_type_radio_smart_fill = m_imgui->calc_text_size(m_desc["tool_smart_fill"]).x + m_imgui->scaled(2.5f); + + float caption_max = 0.f; + float total_text_max = 0.f; + for (const std::string t : {"add_fuzzy_skin", "remove_fuzzy_skin"}) { + caption_max = std::max(caption_max, m_imgui->calc_text_size(m_desc[t + "_caption"]).x); + total_text_max = std::max(total_text_max, m_imgui->calc_text_size(m_desc[t]).x); + } + total_text_max += caption_max + m_imgui->scaled(1.f); + caption_max += m_imgui->scaled(1.f); + + const float circle_max_width = std::max(clipping_slider_left, cursor_slider_left); + + const float sliders_left_width = std::max(smart_fill_slider_left, std::max(cursor_slider_left, clipping_slider_left)); + const float slider_icon_width = m_imgui->get_slider_icon_size().x; + float window_width = minimal_slider_width + sliders_left_width + slider_icon_width; + const float empty_button_width = m_imgui->calc_button_size("").x; + + window_width = std::max(window_width, total_text_max); + window_width = std::max(window_width, button_width); + window_width = std::max(window_width, cursor_type_radio_circle + cursor_type_radio_sphere + cursor_type_radio_pointer); + window_width = std::max(window_width, tool_type_radio_left + tool_type_radio_brush + tool_type_radio_smart_fill); + window_width = std::max(window_width, 2.f * buttons_width + m_imgui->scaled(1.f)); + + const float sliders_width = m_imgui->scaled(7.0f); + const float drag_left_width = ImGui::GetStyle().WindowPadding.x + sliders_width - space_size; + + const float max_tooltip_width = ImGui::GetFontSize() * 20.0f; + + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc["tool_type"]); + + std::array tool_ids; + tool_ids = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::TriangleButtonIcon, ImGui::FillButtonIcon }; + std::array icons; + if (m_is_dark_mode) + icons = { ImGui::CircleButtonDarkIcon, ImGui::SphereButtonDarkIcon, ImGui::TriangleButtonDarkIcon, ImGui::FillButtonDarkIcon }; + else + icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::TriangleButtonIcon, ImGui::FillButtonIcon }; + std::array tool_tips = { _L("Circle"), _L("Sphere"), _L("Triangle"), _L("Fill") }; + for (int i = 0; i < tool_ids.size(); i++) { + std::string str_label = std::string(""); + std::wstring btn_name = icons[i] + boost::nowide::widen(str_label); + + if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.5f)); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.f, 0.f, 0.f)); // ORCA Removes button background on dark mode + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA Fixes icon rendered without colors while using Light theme + if (m_current_tool == tool_ids[i]) { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); + } + bool btn_clicked = ImGui::Button(into_u8(btn_name).c_str()); + if (m_current_tool == tool_ids[i]) + { + ImGui::PopStyleColor(4); + ImGui::PopStyleVar(2); + } + ImGui::PopStyleColor(2); + ImGui::PopStyleVar(1); + + if (btn_clicked && m_current_tool != tool_ids[i]) { + m_current_tool = tool_ids[i]; + for (auto &triangle_selector : m_triangle_selectors) { + triangle_selector->seed_fill_unselect_all_triangles(); + triangle_selector->request_update_render_data(); + } + } + + if (ImGui::IsItemHovered()) { + m_imgui->tooltip(tool_tips[i], max_tooltip_width); + } + } + + ImGui::Dummy(ImVec2(0.0f, ImGui::GetFontSize() * 0.1)); + + if (m_current_tool == ImGui::CircleButtonIcon || m_current_tool == ImGui::SphereButtonIcon) { + if (m_current_tool == ImGui::CircleButtonIcon) + m_cursor_type = TriangleSelector::CursorType::CIRCLE; + else + m_cursor_type = TriangleSelector::CursorType::SPHERE; + m_tool_type = ToolType::BRUSH; + + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc.at("cursor_size")); + ImGui::SameLine(circle_max_width); + ImGui::PushItemWidth(sliders_width); + m_imgui->bbl_slider_float_style("##cursor_radius", &m_cursor_radius, CursorRadiusMin, CursorRadiusMax, "%.2f", 1.0f, true); + ImGui::SameLine(drag_left_width + circle_max_width); + ImGui::PushItemWidth(1.5 * slider_icon_width); + ImGui::BBLDragFloat("##cursor_radius_input", &m_cursor_radius, 0.05f, 0.0f, 0.0f, "%.2f"); + } else if (m_current_tool == ImGui::TriangleButtonIcon) { + m_cursor_type = TriangleSelector::CursorType::POINTER; + m_tool_type = ToolType::BRUSH; + } else { + assert(m_current_tool == ImGui::FillButtonIcon); + m_cursor_type = TriangleSelector::CursorType::POINTER; + m_tool_type = ToolType::SMART_FILL; + + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc["smart_fill_angle"]); + std::string format_str = std::string("%.f") + + I18N::translate_utf8("°", "Degree sign to use in the respective slider in fuzzy skin gizmo," + "placed after the number with no whitespace in between."); + ImGui::SameLine(sliders_left_width); + ImGui::PushItemWidth(sliders_width); + if (m_imgui->bbl_slider_float_style("##smart_fill_angle", &m_smart_fill_angle, SmartFillAngleMin, SmartFillAngleMax, format_str.data(), 1.0f, true)) + for (auto &triangle_selector : m_triangle_selectors) { + triangle_selector->seed_fill_unselect_all_triangles(); + triangle_selector->request_update_render_data(); + } + ImGui::SameLine(drag_left_width + sliders_left_width); + ImGui::PushItemWidth(1.5 * slider_icon_width); + ImGui::BBLDragFloat("##smart_fill_angle_input", &m_smart_fill_angle, 0.05f, 0.0f, 0.0f, "%.2f"); + } + + ImGui::Separator(); + if (m_c->object_clipper()->get_position() == 0.f) { + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc.at("clipping_of_view")); + } + else { + if (m_imgui->button(m_desc.at("reset_direction"))) { + wxGetApp().CallAfter([this](){ + m_c->object_clipper()->set_position_by_ratio(-1., false); + }); + } + } + + auto clp_dist = float(m_c->object_clipper()->get_position()); + ImGui::SameLine(sliders_left_width); + + ImGui::PushItemWidth(sliders_width); + bool slider_clp_dist = m_imgui->bbl_slider_float_style("##clp_dist", &clp_dist, 0.f, 1.f, "%.2f", 1.0f, true); + + ImGui::SameLine(drag_left_width + sliders_left_width); + ImGui::PushItemWidth(1.5 * slider_icon_width); + bool b_clp_dist_input = ImGui::BBLDragFloat("##clp_dist_input", &clp_dist, 0.05f, 0.0f, 0.0f, "%.2f"); + if (slider_clp_dist || b_clp_dist_input) { m_c->object_clipper()->set_position_by_ratio(clp_dist, true); } + + ImGui::Separator(); + + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(6.0f, 10.0f)); + float get_cur_y = ImGui::GetContentRegionMax().y + ImGui::GetFrameHeight() + y; + show_tooltip_information(caption_max, x, get_cur_y); + + float f_scale = m_parent.get_gizmos_manager().get_layout_scale(); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6.0f, 4.0f * f_scale)); + + ImGui::SameLine(); + + if (m_imgui->button(m_desc.at("remove_all"))) { + Plater::TakeSnapshot snapshot(wxGetApp().plater(), _u8L("Reset selection"), UndoRedo::SnapshotType::GizmoAction); + ModelObject *mo = m_c->selection_info()->model_object(); + int idx = -1; + for (ModelVolume *mv : mo->volumes) + if (mv->is_model_part()) { + ++idx; + m_triangle_selectors[idx]->reset(); + m_triangle_selectors[idx]->request_update_render_data(true); + } + + update_model_object(); + m_parent.set_as_dirty(); + } + ImGui::PopStyleVar(2); + GizmoImguiEnd(); + + // BBS + ImGuiWrapper::pop_toolbar_style(); +} + +void GLGizmoFuzzySkin::update_model_object() +{ + bool updated = false; + ModelObject *mo = m_c->selection_info()->model_object(); + int idx = -1; + for (ModelVolume *mv : mo->volumes) { + if (!mv->is_model_part()) + continue; + + ++idx; + updated |= mv->fuzzy_skin_facets.set(*m_triangle_selectors[idx]); + } + + if (updated) { + const ModelObjectPtrs &mos = wxGetApp().model().objects; + wxGetApp().obj_list()->update_info_items(std::find(mos.begin(), mos.end(), mo) - mos.begin()); + + m_parent.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); + } +} + +void GLGizmoFuzzySkin::update_from_model_object(bool first_update) +{ + wxBusyCursor wait; + + const ModelObject *mo = m_c->selection_info()->model_object(); + m_triangle_selectors.clear(); + + int volume_id = -1; + std::vector ebt_colors; + ebt_colors.push_back(GLVolume::NEUTRAL_COLOR); + ebt_colors.push_back(TriangleSelectorGUI::enforcers_color); + ebt_colors.push_back(TriangleSelectorGUI::blockers_color); + for (const ModelVolume *mv : mo->volumes) { + if (!mv->is_model_part()) + continue; + + ++volume_id; + + // This mesh does not account for the possible Z up SLA offset. + const TriangleMesh* mesh = &mv->mesh(); + m_triangle_selectors.emplace_back(std::make_unique(*mesh, ebt_colors)); + // Reset of TriangleSelector is done inside TriangleSelectorGUI's constructor, so we don't need it to perform it again in deserialize(). + m_triangle_selectors.back()->deserialize(mv->fuzzy_skin_facets.get_data(), false); + m_triangle_selectors.back()->request_update_render_data(); + } +} + +PainterGizmoType GLGizmoFuzzySkin::get_painter_type() const +{ + return PainterGizmoType::FUZZY_SKIN; +} + +wxString GLGizmoFuzzySkin::handle_snapshot_action_name(bool shift_down, GLGizmoPainterBase::Button button_down) const +{ + return shift_down ? _L("Remove fuzzy skin") : _L("Add fuzzy skin"); +} + +} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.hpp b/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.hpp new file mode 100644 index 0000000000..798ff670f3 --- /dev/null +++ b/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.hpp @@ -0,0 +1,52 @@ +#ifndef slic3r_GLGizmoFuzzySkin_hpp_ +#define slic3r_GLGizmoFuzzySkin_hpp_ + +#include "GLGizmoPainterBase.hpp" + +#include "slic3r/GUI/I18N.hpp" + +namespace Slic3r::GUI { + +class GLGizmoFuzzySkin : public GLGizmoPainterBase +{ +public: + GLGizmoFuzzySkin(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); + + void render_painter_gizmo() override; + +protected: + void on_render_input_window(float x, float y, float bottom_limit) override; + std::string on_get_name() const override; + + void show_tooltip_information(float caption_max, float x, float y); + + wxString handle_snapshot_action_name(bool shift_down, Button button_down) const override; + + std::string get_gizmo_entering_text() const override { return _u8L("Entering Paint-on fuzzy skin"); } + std::string get_gizmo_leaving_text() const override { return _u8L("Leaving Paint-on fuzzy skin"); } + std::string get_action_snapshot_name() const override { return _u8L("Paint-on fuzzy skin editing"); } + + EnforcerBlockerType get_left_button_state_type() const override { return EnforcerBlockerType::FUZZY_SKIN; } + EnforcerBlockerType get_right_button_state_type() const override { return EnforcerBlockerType::NONE; } + + // BBS + wchar_t m_current_tool = 0; + +private: + bool on_init() override; + + void update_model_object() override; + void update_from_model_object(bool first_update) override; + + void on_opening() override {} + void on_shutdown() override; + PainterGizmoType get_painter_type() const override; + + // This map holds all translated description texts, so they can be easily referenced during layout calculations + // etc. When language changes, GUI is recreated, and this class constructed again, so the change takes effect. + std::map m_desc; +}; + +} // namespace Slic3r::GUI + +#endif // slic3r_GLGizmoFuzzySkin_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index 34abc7ff73..cc43025df2 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -189,58 +189,6 @@ void GLGizmoMmuSegmentation::data_changed(bool is_serializing) } } -void GLGizmoMmuSegmentation::render_triangles(const Selection &selection) const -{ - ClippingPlaneDataWrapper clp_data = this->get_clipping_plane_data(); - auto* shader = wxGetApp().get_shader("mm_gouraud"); - if (!shader) - return; - shader->start_using(); - shader->set_uniform("clipping_plane", clp_data.clp_dataf); - shader->set_uniform("z_range", clp_data.z_range); - shader->set_uniform("slope.actived", m_parent.is_using_slope()); - ScopeGuard guard([shader]() { if (shader) shader->stop_using(); }); - - //BBS: to improve the random white pixel issue - glsafe(::glDisable(GL_CULL_FACE)); - - const ModelObject *mo = m_c->selection_info()->model_object(); - int mesh_id = -1; - for (const ModelVolume *mv : mo->volumes) { - if (!mv->is_model_part()) - continue; - - ++mesh_id; - - Transform3d trafo_matrix; - if (m_parent.get_canvas_type() == GLCanvas3D::CanvasAssembleView) { - trafo_matrix = mo->instances[selection.get_instance_idx()]->get_assemble_transformation().get_matrix() * mv->get_matrix(); - trafo_matrix.translate(mv->get_transformation().get_offset() * (GLVolume::explosion_ratio - 1.0) + mo->instances[selection.get_instance_idx()]->get_offset_to_assembly() * (GLVolume::explosion_ratio - 1.0)); - } - else { - trafo_matrix = mo->instances[selection.get_instance_idx()]->get_transformation().get_matrix()* mv->get_matrix(); - } - - const bool is_left_handed = trafo_matrix.matrix().determinant() < 0.0; - if (is_left_handed) - glsafe(::glFrontFace(GL_CW)); - - const Camera& camera = wxGetApp().plater()->get_camera(); - const Transform3d& view_matrix = camera.get_view_matrix(); - shader->set_uniform("view_model_matrix", view_matrix * trafo_matrix); - shader->set_uniform("projection_matrix", camera.get_projection_matrix()); - const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * trafo_matrix.matrix().block(0, 0, 3, 3).inverse().transpose(); - shader->set_uniform("view_normal_matrix", view_normal_matrix); - - shader->set_uniform("volume_world_matrix", trafo_matrix); - shader->set_uniform("volume_mirrored", is_left_handed); - m_triangle_selectors[mesh_id]->render(m_imgui, trafo_matrix); - - if (is_left_handed) - glsafe(::glFrontFace(GL_CCW)); - } -} - // BBS bool GLGizmoMmuSegmentation::on_number_key_down(int number) { @@ -869,7 +817,7 @@ void GLGizmoMmuSegmentation::tool_changed(wchar_t old_tool, wchar_t new_tool) PainterGizmoType GLGizmoMmuSegmentation::get_painter_type() const { - return PainterGizmoType::MMU_SEGMENTATION; + return PainterGizmoType::MM_SEGMENTATION; } // BBS diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp index d816735c68..c6c33ec90f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp @@ -71,8 +71,6 @@ public: void data_changed(bool is_serializing) override; - void render_triangles(const Selection& selection) const override; - // TriangleSelector::serialization/deserialization has a limit to store 19 different states. // EXTRUDER_LIMIT + 1 states are used to storing the painting because also uncolored triangles are stored. // When increasing EXTRUDER_LIMIT, it needs to ensure that TriangleSelector::serialization/deserialization diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index bcf65df700..319f3a57cf 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -75,23 +75,27 @@ GLGizmoPainterBase::ClippingPlaneDataWrapper GLGizmoPainterBase::get_clipping_pl void GLGizmoPainterBase::render_triangles(const Selection& selection) const { - auto* shader = wxGetApp().get_shader("gouraud"); - if (! shader) + auto* shader = wxGetApp().get_shader("mm_gouraud"); + if (!shader) return; shader->start_using(); - shader->set_uniform("slope.actived", false); - shader->set_uniform("print_volume.type", 0); - shader->set_uniform("clipping_plane", this->get_clipping_plane_data().clp_dataf); ScopeGuard guard([shader]() { if (shader) shader->stop_using(); }); - const ModelObject *mo = m_c->selection_info()->model_object(); + ClippingPlaneDataWrapper clp_data = this->get_clipping_plane_data(); + shader->set_uniform("clipping_plane", clp_data.clp_dataf); + shader->set_uniform("z_range", clp_data.z_range); + + // BBS: to improve the random white pixel issue + glsafe(::glDisable(GL_CULL_FACE)); + + const ModelObject* mo = m_c->selection_info()->model_object(); int mesh_id = -1; for (const ModelVolume* mv : mo->volumes) { - if (! mv->is_model_part()) + if (!mv->is_model_part()) continue; ++mesh_id; - + Transform3d trafo_matrix; if (m_parent.get_canvas_type() == GLCanvas3D::CanvasAssembleView) { trafo_matrix = mo->instances[selection.get_instance_idx()]->get_assemble_transformation().get_matrix() * mv->get_matrix(); @@ -112,13 +116,16 @@ void GLGizmoPainterBase::render_triangles(const Selection& selection) const const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * trafo_matrix.matrix().block(0, 0, 3, 3).inverse().transpose(); shader->set_uniform("view_normal_matrix", view_normal_matrix); - // For printers with multiple extruders, it is necessary to pass trafo_matrix - // to the shader input variable print_box.volume_world_matrix before - // rendering the painted triangles. When this matrix is not set, the - // wrong transformation matrix is used for "Clipping of view". - shader->set_uniform("volume_world_matrix", trafo_matrix); + float normal_z = -::cos(Geometry::deg2rad(m_highlight_by_angle_threshold_deg)); + Matrix3f normal_matrix = static_cast(trafo_matrix.matrix().block(0, 0, 3, 3).inverse().transpose().cast()); + shader->set_uniform("volume_world_matrix", trafo_matrix); + shader->set_uniform("volume_mirrored", is_left_handed); + shader->set_uniform("slope.actived", m_parent.is_using_slope()); + shader->set_uniform("slope.volume_world_normal_matrix", normal_matrix); + shader->set_uniform("slope.normal_z", normal_z); m_triangle_selectors[mesh_id]->render(m_imgui, trafo_matrix); + if (is_left_handed) glsafe(::glFrontFace(GL_CCW)); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp index 5273aa06dd..444f6609ff 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp @@ -26,7 +26,8 @@ class Selection; enum class PainterGizmoType { FDM_SUPPORTS, SEAM, - MMU_SEGMENTATION + MM_SEGMENTATION, + FUZZY_SKIN }; class TriangleSelectorGUI : public TriangleSelector { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp index 0f903a0aad..19f4efb9f6 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp @@ -95,53 +95,6 @@ bool GLGizmoSeam::on_key_down_select_tool_type(int keyCode) { return true; } -void GLGizmoSeam::render_triangles(const Selection& selection) const -{ - ClippingPlaneDataWrapper clp_data = this->get_clipping_plane_data(); - auto* shader = wxGetApp().get_shader("mm_gouraud"); - if (!shader) - return; - shader->start_using(); - shader->set_uniform("clipping_plane", clp_data.clp_dataf); - shader->set_uniform("z_range", clp_data.z_range); - ScopeGuard guard([shader]() { if (shader) shader->stop_using(); }); - - const ModelObject* mo = m_c->selection_info()->model_object(); - int mesh_id = -1; - for (const ModelVolume* mv : mo->volumes) { - if (!mv->is_model_part()) - continue; - - ++mesh_id; - - const Transform3d trafo_matrix = mo->instances[selection.get_instance_idx()]->get_transformation().get_matrix() * mv->get_matrix(); - - bool is_left_handed = trafo_matrix.matrix().determinant() < 0.; - if (is_left_handed) - glsafe(::glFrontFace(GL_CW)); - - const Camera& camera = wxGetApp().plater()->get_camera(); - const Transform3d& view_matrix = camera.get_view_matrix(); - shader->set_uniform("view_model_matrix", view_matrix * trafo_matrix); - shader->set_uniform("projection_matrix", camera.get_projection_matrix()); - const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * trafo_matrix.matrix().block(0, 0, 3, 3).inverse().transpose(); - shader->set_uniform("view_normal_matrix", view_normal_matrix); - - float normal_z = -::cos(Geometry::deg2rad(m_highlight_by_angle_threshold_deg)); - Matrix3f normal_matrix = static_cast(trafo_matrix.matrix().block(0, 0, 3, 3).inverse().transpose().cast()); - - shader->set_uniform("volume_world_matrix", trafo_matrix); - shader->set_uniform("volume_mirrored", is_left_handed); - shader->set_uniform("slope.actived", m_parent.is_using_slope()); - shader->set_uniform("slope.volume_world_normal_matrix", normal_matrix); - shader->set_uniform("slope.normal_z", normal_z); - m_triangle_selectors[mesh_id]->render(m_imgui, trafo_matrix); - - if (is_left_handed) - glsafe(::glFrontFace(GL_CCW)); - } -} - void GLGizmoSeam::show_tooltip_information(float caption_max, float x, float y) { ImTextureID normal_id = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TOOLBAR_TOOLTIP); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp index 4caa2dde63..73242d470e 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp @@ -24,8 +24,6 @@ protected: std::string on_get_name() const override; PainterGizmoType get_painter_type() const override; - void render_triangles(const Selection &selection) const override; - void show_tooltip_information(float caption_max, float x, float y); void tool_changed(wchar_t old_tool, wchar_t new_tool); diff --git a/src/slic3r/GUI/Gizmos/GLGizmos.hpp b/src/slic3r/GUI/Gizmos/GLGizmos.hpp index 9751c37232..1d1d036275 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmos.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmos.hpp @@ -32,6 +32,7 @@ enum class SLAGizmoEventType : unsigned char { #include "slic3r/GUI/Gizmos/GLGizmoFlatten.hpp" #include "slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp" #include "slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp" +#include "slic3r/GUI/Gizmos/GLGizmoFuzzySkin.hpp" #include "slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp" // BBS #include "slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index b6f8d6e5d5..762b371778 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -15,6 +15,7 @@ #include "slic3r/GUI/Gizmos/GLGizmoFlatten.hpp" //#include "slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp" #include "slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp" +#include "slic3r/GUI/Gizmos/GLGizmoFuzzySkin.hpp" #include "slic3r/GUI/Gizmos/GLGizmoBrimEars.hpp" #include "slic3r/GUI/Gizmos/GLGizmoCut.hpp" //#include "slic3r/GUI/Gizmos/GLGizmoFaceDetector.hpp" @@ -66,7 +67,7 @@ std::vector GLGizmosManager::get_selectable_idxs() const m_gizmos[i]->get_sprite_id() == (unsigned int) Rotate || m_gizmos[i]->get_sprite_id() == (unsigned int) Measure || m_gizmos[i]->get_sprite_id() == (unsigned int) Assembly || - m_gizmos[i]->get_sprite_id() == (unsigned int) MmuSegmentation) + m_gizmos[i]->get_sprite_id() == (unsigned int) MmSegmentation) out.push_back(i); } else { @@ -157,9 +158,12 @@ void GLGizmosManager::switch_gizmos_icon_filename() case(EType::Emboss): gizmo->set_icon_filename(m_is_dark ? "toolbar_text_dark.svg" : "toolbar_text.svg"); break; - case(EType::MmuSegmentation): + case(EType::MmSegmentation): gizmo->set_icon_filename(m_is_dark ? "mmu_segmentation_dark.svg" : "mmu_segmentation.svg"); break; + case(EType::FuzzySkin): + gizmo->set_icon_filename(m_is_dark ? "toolbar_fuzzy_skin_paint_dark.svg" : "toolbar_fuzzy_skin_paint.svg"); + break; case(EType::MeshBoolean): gizmo->set_icon_filename(m_is_dark ? "toolbar_meshboolean_dark.svg" : "toolbar_meshboolean.svg"); break; @@ -206,7 +210,8 @@ bool GLGizmosManager::init() m_gizmos.emplace_back(new GLGizmoMeshBoolean(m_parent, m_is_dark ? "toolbar_meshboolean_dark.svg" : "toolbar_meshboolean.svg", EType::MeshBoolean)); m_gizmos.emplace_back(new GLGizmoFdmSupports(m_parent, m_is_dark ? "toolbar_support_dark.svg" : "toolbar_support.svg", EType::FdmSupports)); m_gizmos.emplace_back(new GLGizmoSeam(m_parent, m_is_dark ? "toolbar_seam_dark.svg" : "toolbar_seam.svg", EType::Seam)); - m_gizmos.emplace_back(new GLGizmoMmuSegmentation(m_parent, m_is_dark ? "mmu_segmentation_dark.svg" : "mmu_segmentation.svg", EType::MmuSegmentation)); + m_gizmos.emplace_back(new GLGizmoFuzzySkin(m_parent, m_is_dark ? "toolbar_fuzzy_skin_paint_dark.svg" : "toolbar_fuzzy_skin_paint.svg", EType::FuzzySkin)); + m_gizmos.emplace_back(new GLGizmoMmuSegmentation(m_parent, m_is_dark ? "mmu_segmentation_dark.svg" : "mmu_segmentation.svg", EType::MmSegmentation)); m_gizmos.emplace_back(new GLGizmoEmboss(m_parent, m_is_dark ? "toolbar_text_dark.svg" : "toolbar_text.svg", EType::Emboss)); m_gizmos.emplace_back(new GLGizmoSVG(m_parent)); m_gizmos.emplace_back(new GLGizmoMeasure(m_parent, m_is_dark ? "toolbar_measure_dark.svg" : "toolbar_measure.svg", EType::Measure)); @@ -465,14 +470,16 @@ bool GLGizmosManager::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_p return dynamic_cast(m_gizmos[FdmSupports].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); else if (m_current == Seam) return dynamic_cast(m_gizmos[Seam].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); - else if (m_current == MmuSegmentation) - return dynamic_cast(m_gizmos[MmuSegmentation].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); + else if (m_current == MmSegmentation) + return dynamic_cast(m_gizmos[MmSegmentation].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); else if (m_current == Measure) return dynamic_cast(m_gizmos[Measure].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); else if (m_current == Assembly) return dynamic_cast(m_gizmos[Assembly].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); else if (m_current == Cut) return dynamic_cast(m_gizmos[Cut].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); + else if (m_current == FuzzySkin) + return dynamic_cast(m_gizmos[FuzzySkin].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); else if (m_current == MeshBoolean) return dynamic_cast(m_gizmos[MeshBoolean].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); else if (m_current == BrimEars) @@ -484,7 +491,8 @@ bool GLGizmosManager::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_p bool GLGizmosManager::is_paint_gizmo() { return m_current == EType::FdmSupports || - m_current == EType::MmuSegmentation || + m_current == EType::MmSegmentation || + m_current == EType::FuzzySkin || m_current == EType::Seam; } @@ -583,7 +591,7 @@ bool GLGizmosManager::on_mouse_wheel(const wxMouseEvent &evt) { bool processed = false; - if (/*m_current == SlaSupports || m_current == Hollow ||*/ m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation || m_current == BrimEars) { + if (/*m_current == SlaSupports || m_current == Hollow ||*/ m_current == FdmSupports || m_current == Seam || m_current == MmSegmentation || m_current == FuzzySkin || m_current == BrimEars) { float rot = (float)evt.GetWheelRotation() / (float)evt.GetWheelDelta(); if (gizmo_event((rot > 0.f ? SLAGizmoEventType::MouseWheelUp : SLAGizmoEventType::MouseWheelDown), Vec2d::Zero(), evt.ShiftDown(), evt.AltDown() // BBS @@ -781,7 +789,7 @@ bool GLGizmosManager::on_char(wxKeyEvent& evt) //case 'r' : //case 'R' : //{ - //if ((m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation) && gizmo_event(SLAGizmoEventType::ResetClippingPlane)) + //if ((m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmSegmentation || m_current == FuzzySkin) && gizmo_event(SLAGizmoEventType::ResetClippingPlane)) // processed = true; //break; @@ -890,7 +898,7 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) } } // BBS - if (m_current == MmuSegmentation && keyCode > '0' && keyCode <= '9') { + if (m_current == MmSegmentation && keyCode > '0' && keyCode <= '9') { // capture number key processed = true; } @@ -939,7 +947,7 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) processed = simplify->on_esc_key_down(); } // BBS - else if (m_current == MmuSegmentation) { + else if (m_current == MmSegmentation) { GLGizmoMmuSegmentation* mmu_seg = dynamic_cast(get_current()); if (mmu_seg != nullptr) { if (keyCode >= WXK_NUMPAD0 && keyCode <= WXK_NUMPAD9) { @@ -1002,7 +1010,7 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) void GLGizmosManager::on_set_color_timer(wxTimerEvent& evt) { - if (m_current == MmuSegmentation) { + if (m_current == MmSegmentation) { GLGizmoMmuSegmentation* mmu_seg = dynamic_cast(get_current()); mmu_seg->on_number_key_down(1); m_parent.set_as_dirty(); @@ -1415,8 +1423,10 @@ std::string get_name_from_gizmo_etype(GLGizmosManager::EType type) return "Seam"; case GLGizmosManager::EType::Emboss: return "Text"; - case GLGizmosManager::EType::MmuSegmentation: + case GLGizmosManager::EType::MmSegmentation: return "Color Painting"; + case GLGizmosManager::EType::FuzzySkin: + return "Fuzzy Skin Painting"; default: return ""; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp index 14654239c4..f68d4038ad 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -82,7 +82,8 @@ public: MeshBoolean, FdmSupports, Seam, - MmuSegmentation, + FuzzySkin, + MmSegmentation, Emboss, Svg, Measure, diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index c77458fe13..58ed58758f 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -259,6 +259,7 @@ void KBShortcutsDialog::fill_shortcuts() { "F", L("Gizmo place face on bed") }, { "C", L("Gizmo cut") }, { "B", L("Gizmo mesh boolean") }, + { "H", L("Gizmo FDM paint-on fuzzy skin") }, { "L", L("Gizmo SLA support points") }, { "P", L("Gizmo FDM paint-on seam") }, { "T", L("Gizmo text emboss/engrave") }, diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 09de590c8b..0ff7d4d3d1 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -1272,10 +1272,11 @@ void NotificationManager::UpdatedItemsInfoNotification::add_type(InfoItemType ty case InfoItemType::CustomSupports: text += format(_L_PLURAL("%1$d Object has custom supports.", "%1$d Objects have custom supports.", (*it).second), (*it).second) + "\n"; break; // BBS //case InfoItemType::CustomSeam: text += format(("%1$d Object has custom seam.", "%1$d Objects have custom seam.", (*it).second), (*it).second) + "\n"; break; - case InfoItemType::MmuSegmentation: text += format(_L_PLURAL("%1$d Object has color painting.", "%1$d Objects have color painting.",(*it).second), (*it).second) + "\n"; break; + case InfoItemType::MmSegmentation: text += format(_L_PLURAL("%1$d Object has color painting.", "%1$d Objects have color painting.",(*it).second), (*it).second) + "\n"; break; // BBS //case InfoItemType::Sinking: text += format(("%1$d Object has partial sinking.", "%1$d Objects have partial sinking.", (*it).second), (*it).second) + "\n"; break; case InfoItemType::CutConnectors: text += format(_L_PLURAL("%1$d object was loaded as a part of cut object.", "%1$d objects were loaded as parts of cut object.", (*it).second), (*it).second) + "\n"; break; + case InfoItemType::FuzzySkin: text += format(_L_PLURAL("%1$d object was loaded with fuzzy skin painting.", "%1$d objects were loaded with fuzzy skin painting.", (*it).second), (*it).second) + "\n"; break; default: BOOST_LOG_TRIVIAL(error) << "Unknown InfoItemType: " << (*it).second; break; } } diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index 89bf458b30..abeaa46b76 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -69,9 +69,10 @@ const std::map INFO_ITEMS{ // info_item Type info_item Name info_item BitmapName { InfoItemType::CustomSupports, {L("Support painting"), "toolbar_support" }, }, //{ InfoItemType::CustomSeam, {L("Paint-on seam"), "seam_" }, }, - { InfoItemType::MmuSegmentation, {L("Color painting"), "mmu_segmentation"}, }, + { InfoItemType::MmSegmentation, {L("Color painting"), "mmu_segmentation"}, }, //{ InfoItemType::Sinking, {L("Sinking"), "objlist_sinking"}, }, { InfoItemType::CutConnectors, {L("Cut connectors"), "cut_connectors" }, }, + { InfoItemType::FuzzySkin, {L("Paint-on fuzzy skin"), "objlist_fuzzy_skin_paint" }, }, }; ObjectDataViewModelNode::ObjectDataViewModelNode(ObjectDataViewModelNode* parent, diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp index 5cb4cf5ef2..9d84de7796 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.hpp +++ b/src/slic3r/GUI/ObjectDataViewModel.hpp @@ -60,7 +60,8 @@ enum class InfoItemType Undef, CustomSupports, //CustomSeam, - MmuSegmentation, + MmSegmentation, + FuzzySkin, //Sinking CutConnectors, }; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 1e16c5ff2a..be2f1b2ce5 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -5683,6 +5683,7 @@ bool Plater::priv::replace_volume_with_stl(int object_idx, int volume_idx, const new_volume->supported_facets.assign(old_volume->supported_facets); new_volume->seam_facets.assign(old_volume->seam_facets); new_volume->mmu_segmentation_facets.assign(old_volume->mmu_segmentation_facets); + new_volume->fuzzy_skin_facets.assign(old_volume->fuzzy_skin_facets); std::swap(old_model_object->volumes[volume_idx], old_model_object->volumes.back()); old_model_object->delete_volume(old_model_object->volumes.size() - 1); if (!sinking) @@ -13474,14 +13475,15 @@ void Plater::clear_before_change_mesh(int obj_idx) { ModelObject* mo = model().objects[obj_idx]; - // If there are custom supports/seams/mmu segmentation, remove them. Fixed mesh + // If there are custom supports/seams/mmu/fuzzy skin segmentation, remove them. Fixed mesh // may be different and they would make no sense. bool paint_removed = false; for (ModelVolume* mv : mo->volumes) { - paint_removed |= ! mv->supported_facets.empty() || ! mv->seam_facets.empty() || ! mv->mmu_segmentation_facets.empty(); + paint_removed |= ! mv->supported_facets.empty() || ! mv->seam_facets.empty() || ! mv->mmu_segmentation_facets.empty() || !mv->fuzzy_skin_facets.empty(); mv->supported_facets.reset(); mv->seam_facets.reset(); mv->mmu_segmentation_facets.reset(); + mv->fuzzy_skin_facets.reset(); } if (paint_removed) { // snapshot_time is captured by copy so the lambda knows where to undo/redo to. diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 9821add07a..994367d8da 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2452,6 +2452,7 @@ optgroup->append_single_option_line("skirt_loops", "others_settings_skirt#loops" optgroup->append_single_option_line("timelapse_type", "others_settings_special_mode#timelapse"); + optgroup = page->new_optgroup(L("Fuzzy Skin"), L"fuzzy_skin"); optgroup->append_single_option_line("fuzzy_skin", "others_settings_special_mode#fuzzy-skin"); optgroup->append_single_option_line("fuzzy_skin_noise_type", "others_settings_special_mode#fuzzy-skin-mode"); optgroup->append_single_option_line("fuzzy_skin_point_distance", "others_settings_special_mode#point-distance"); From e44ec1f27b362b3eaa72fb44d59fea1d81f05c0f Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Fri, 18 Jul 2025 16:09:34 +0800 Subject: [PATCH 13/13] Update 3mf key for fuzzy skin painting to match BBS (#10169) --- src/libslic3r/Format/bbs_3mf.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 67e20d81a8..f6aa224da4 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -274,9 +274,9 @@ static constexpr const char* OFFSET_ATTR = "offset"; static constexpr const char* PRINTABLE_ATTR = "printable"; static constexpr const char* INSTANCESCOUNT_ATTR = "instances_count"; static constexpr const char* CUSTOM_SUPPORTS_ATTR = "paint_supports"; +static constexpr const char* CUSTOM_FUZZY_SKIN_ATTR = "paint_fuzzy_skin"; static constexpr const char* CUSTOM_SEAM_ATTR = "paint_seam"; static constexpr const char* MMU_SEGMENTATION_ATTR = "paint_color"; -static constexpr const char* FUZZY_SKIN_ATTR = "paint_fuzzy"; // BBS static constexpr const char* FACE_PROPERTY_ATTR = "face_property"; @@ -3605,7 +3605,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_curr_object->geometry.custom_supports.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_SUPPORTS_ATTR)); m_curr_object->geometry.custom_seam.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_SEAM_ATTR)); m_curr_object->geometry.mmu_segmentation.push_back(bbs_get_attribute_value_string(attributes, num_attributes, MMU_SEGMENTATION_ATTR)); - m_curr_object->geometry.fuzzy_skin.push_back(bbs_get_attribute_value_string(attributes, num_attributes, FUZZY_SKIN_ATTR)); + m_curr_object->geometry.fuzzy_skin.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_FUZZY_SKIN_ATTR)); // BBS m_curr_object->geometry.face_properties.push_back(bbs_get_attribute_value_string(attributes, num_attributes, FACE_PROPERTY_ATTR)); } @@ -5247,7 +5247,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) current_object->geometry.custom_supports.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_SUPPORTS_ATTR)); current_object->geometry.custom_seam.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_SEAM_ATTR)); current_object->geometry.mmu_segmentation.push_back(bbs_get_attribute_value_string(attributes, num_attributes, MMU_SEGMENTATION_ATTR)); - current_object->geometry.fuzzy_skin.push_back(bbs_get_attribute_value_string(attributes, num_attributes, FUZZY_SKIN_ATTR)); + current_object->geometry.fuzzy_skin.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_FUZZY_SKIN_ATTR)); // BBS current_object->geometry.face_properties.push_back(bbs_get_attribute_value_string(attributes, num_attributes, FACE_PROPERTY_ATTR)); } @@ -7037,7 +7037,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::string fuzzy_skin_painting_data_string = volume->fuzzy_skin_facets.get_triangle_as_string(i); if (!fuzzy_skin_painting_data_string.empty()) { output_buffer += " "; - output_buffer += FUZZY_SKIN_ATTR; + output_buffer += CUSTOM_FUZZY_SKIN_ATTR; output_buffer += "=\""; output_buffer += fuzzy_skin_painting_data_string; output_buffer += "\"";