mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-10 00:07:52 -06:00
Random extruder sequence for MMU.
Related to https://github.com/prusa3d/PrusaSlicer/issues/1866
This commit is contained in:
parent
a2788f3a73
commit
0b5ea8f429
4 changed files with 65 additions and 13 deletions
|
@ -5,6 +5,7 @@
|
|||
#include <wx/dialog.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/bmpcbox.h>
|
||||
#include <wx/checkbox.h>
|
||||
|
||||
#include <vector>
|
||||
#include <set>
|
||||
|
@ -138,6 +139,18 @@ ExtruderSequenceDialog::ExtruderSequenceDialog(const DoubleSlider::ExtrudersSequ
|
|||
intervals_box_sizer->Add(m_intervals_grid_sizer, 0, wxLEFT, em);
|
||||
option_sizer->Add(intervals_box_sizer, 0, wxEXPAND);
|
||||
|
||||
m_random_sequence = new wxCheckBox(this, wxID_ANY, "Random sequence");
|
||||
m_random_sequence->SetValue(m_sequence.random_sequence);
|
||||
m_random_sequence->SetToolTip(_L("If enabled, random sequence of the selected extruders will be used."));
|
||||
m_random_sequence->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent& e) {
|
||||
m_sequence.random_sequence = e.IsChecked();
|
||||
m_color_repetition->Enable(m_sequence.random_sequence);
|
||||
});
|
||||
|
||||
m_color_repetition = new wxCheckBox(this, wxID_ANY, "Allow next color repetition");
|
||||
m_color_repetition->SetValue(m_sequence.color_repetition);
|
||||
m_color_repetition->SetToolTip(_L("If enabled, a repetition of the next random color will be allowed."));
|
||||
m_color_repetition->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent& e) {m_sequence.color_repetition = e.IsChecked(); });
|
||||
|
||||
auto extruders_box = new wxStaticBox(this, wxID_ANY, _(L("Set extruder(tool) sequence"))+ ": ");
|
||||
auto extruders_box_sizer = new wxStaticBoxSizer(extruders_box, wxVERTICAL);
|
||||
|
@ -147,6 +160,8 @@ ExtruderSequenceDialog::ExtruderSequenceDialog(const DoubleSlider::ExtrudersSequ
|
|||
apply_extruder_sequence();
|
||||
|
||||
extruders_box_sizer->Add(m_extruders_grid_sizer, 0, wxALL, em);
|
||||
extruders_box_sizer->Add(m_random_sequence, 0, wxLEFT | wxBOTTOM, em);
|
||||
extruders_box_sizer->Add(m_color_repetition, 0, wxLEFT | wxBOTTOM, em);
|
||||
option_sizer->Add(extruders_box_sizer, 0, wxEXPAND | wxTOP, em);
|
||||
|
||||
main_sizer->Add(option_sizer, 0, wxEXPAND | wxALL, em);
|
||||
|
@ -197,8 +212,11 @@ void ExtruderSequenceDialog::apply_extruder_sequence()
|
|||
auto add_btn = new ScalableButton(this, wxID_ANY, m_bmp_add);
|
||||
add_btn->SetToolTip(_(L("Add extruder to sequence")));
|
||||
|
||||
add_btn->Bind(wxEVT_BUTTON, [this, extruder](wxEvent&) {
|
||||
m_sequence.add_extruder(extruder);
|
||||
add_btn->Bind(wxEVT_BUTTON, [this, extruder, extruder_selector](wxEvent&) {
|
||||
size_t extr_cnt = (size_t)extruder_selector->GetCount();
|
||||
size_t seq_extr_cnt = m_sequence.extruders.size();
|
||||
size_t extr_id = seq_extr_cnt - size_t(seq_extr_cnt / extr_cnt) * extr_cnt;
|
||||
m_sequence.add_extruder(extruder, std::min(extr_id, extr_cnt-1));
|
||||
apply_extruder_sequence();
|
||||
});
|
||||
|
||||
|
@ -208,6 +226,10 @@ void ExtruderSequenceDialog::apply_extruder_sequence()
|
|||
}
|
||||
m_extruders_grid_sizer->ShowItems(true); // show items hidden in apply_extruder_selector()
|
||||
|
||||
bool show_checkboxes = m_sequence.extruders.size() > 1;
|
||||
m_random_sequence->Enable(show_checkboxes);
|
||||
m_color_repetition->Enable(show_checkboxes && m_sequence.random_sequence);
|
||||
|
||||
Fit();
|
||||
Refresh();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue