FIX: add set to Optimal button

2. modify the manual mode of filament_dialog
jira: none
Change-Id: I2ce6834eb65de2da70e7649346fc88b90f280b29

Change-Id: I18448e800fe3338f045d35f7a1fa6c3e3c8eef79
This commit is contained in:
zhimin.zeng 2024-10-16 11:33:25 +08:00 committed by lane.wei
parent 21379e1336
commit 5dce0ebc06
3 changed files with 50 additions and 3 deletions

View File

@ -6,8 +6,10 @@
namespace Slic3r { namespace GUI {
const wxString manual_tips = _L("You can drag the filaments to change which extruder they are assigned to,\n"
"and we will slice according to this grouping method.\n"
const wxString manual_tips = _L("we will slice according to this grouping method:");
const wxString manual_below_tips = _L("Tips:\n"
"You can drag the filaments to change which extruder they are assigned to.\n"
"But your filament arrangement may not be the most filament-efficient.");
const wxString auto_tips = _L("Automatic filament grouping will be performed to reduce flushing consumption\n"
@ -146,10 +148,15 @@ FilamentMapDialog::FilamentMapDialog(wxWindow *parent,
main_sizer->Add(m_extruder_panel_sizer, 1, wxEXPAND | wxALL, 10);
m_below_tip_text = new wxStaticText(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
m_below_tip_text->SetLabel(manual_below_tips);
main_sizer->Add(m_below_tip_text, 0, wxALIGN_LEFT | wxLEFT, 15);
if (is_auto) {
m_manual_left_panel->Hide();
m_manual_right_panel->Hide();
m_switch_filament_btn->Hide();
m_below_tip_text->Hide();
if (m_has_auto_result) {
m_tip_text->SetLabel(auto_tips_with_result);
}
@ -165,6 +172,7 @@ FilamentMapDialog::FilamentMapDialog(wxWindow *parent,
m_auto_right_panel->Hide();
m_switch_filament_btn_auto->Hide();
m_tip_text->SetLabel(manual_tips);
m_below_tip_text->Show();
}
wxBoxSizer *button_sizer = new wxBoxSizer(wxHORIZONTAL);
@ -222,6 +230,7 @@ void FilamentMapDialog::on_switch_mode(wxCommandEvent &event)
m_manual_left_panel->Hide();
m_manual_right_panel->Hide();
m_switch_filament_btn->Hide();
m_below_tip_text->Hide();
if (m_has_auto_result) {
m_auto_left_panel->Show();
m_auto_right_panel->Show();
@ -238,6 +247,7 @@ void FilamentMapDialog::on_switch_mode(wxCommandEvent &event)
m_manual_left_panel->Show();
m_manual_right_panel->Show();
m_switch_filament_btn->Show();
m_below_tip_text->Show();
m_auto_left_panel->Hide();
m_auto_right_panel->Hide();

View File

@ -39,6 +39,7 @@ private:
private:
wxStaticText * m_tip_text;
wxStaticText * m_below_tip_text;
SwitchButton * m_mode_switch_btn;
wxBoxSizer * m_extruder_panel_sizer;
DragDropPanel* m_manual_left_panel;

View File

@ -4630,6 +4630,36 @@ void GCodeViewer::render_legend_color_arr_recommen(float window_padding)
}
};
auto link_text_set_to_optional = [&](const std::string &label) {
ImVec2 wiki_part_size = ImGui::CalcTextSize(label.c_str());
ImColor HyperColor = ImColor(48, 221, 114, 255).Value;
ImGui::PushStyleColor(ImGuiCol_Text, HyperColor.Value);
imgui.text(label.c_str());
ImGui::PopStyleColor();
// click behavior
if (ImGui::IsMouseHoveringRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), true)) {
// underline
ImVec2 lineEnd = ImGui::GetItemRectMax();
lineEnd.y -= 2.0f;
ImVec2 lineStart = lineEnd;
lineStart.x = ImGui::GetItemRectMin().x;
ImGui::GetWindowDrawList()->AddLine(lineStart, lineEnd, HyperColor);
if (ImGui::IsMouseClicked(ImGuiMouseButton_Left)) {
MessageDialog msg_dlg(nullptr, _L("Automatically re-slice according to the optimal filament arrangement, and the arrangement results will be displayed after slicing."), wxEmptyString, wxOK | wxCANCEL);
if (msg_dlg.ShowModal() == wxID_OK) {
PartPlateList &partplate_list = wxGetApp().plater()->get_partplate_list();
PartPlate *plate = partplate_list.get_curr_plate();
plate->set_filament_map_mode(FilamentMapMode::fmmAuto);
Plater *plater = wxGetApp().plater();
wxPostEvent(plater, SimpleEvent(EVT_GLTOOLBAR_SLICE_PLATE));
}
}
}
};
////BBS Color Arrangement Recommendation
auto config = wxGetApp().plater()->get_partplate_list().get_current_fff_print().config();
@ -4704,6 +4734,7 @@ void GCodeViewer::render_legend_color_arr_recommen(float window_padding)
ImGui::PopStyleVar(1);
ImGui::Dummy({window_padding, window_padding});
bool is_optimal_group = true;
if (filament_map_mode == fmmAuto) {
float saved_flush_weight = stats_by_extruder.stats_by_single_extruder.filament_flush_weight - stats_by_extruder.stats_by_multi_extruder_auto.filament_flush_weight;
int saved_filament_changed_time = stats_by_extruder.stats_by_single_extruder.filament_change_count - stats_by_extruder.stats_by_multi_extruder_auto.filament_change_count;
@ -4716,6 +4747,7 @@ void GCodeViewer::render_legend_color_arr_recommen(float window_padding)
int more_time = stats_by_extruder.stats_by_multi_extruder_manual.filament_change_count - stats_by_extruder.stats_by_multi_extruder_auto.filament_change_count;
if (more_cost > EPSILON || more_time > 0) {
is_optimal_group = false;
ImVec4 orangeColor = ImVec4(1.0f, 0.5f, 0.0f, 1.0f);
ImGui::PushStyleColor(ImGuiCol_Text, orangeColor);
imgui.text(_u8L("This arrangement is not optimal."));
@ -4732,6 +4764,10 @@ void GCodeViewer::render_legend_color_arr_recommen(float window_padding)
}
ImGui::Dummy({window_padding, window_padding});
if (!is_optimal_group) {
link_text_set_to_optional(_u8L("Set to Optimal"));
ImGui::SameLine();
}
link_text(_u8L("Rearrange filament"));
ImGui::EndChild();