diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 184f943551..44def97442 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -8004,6 +8004,10 @@ msgstr "" msgid "Ramming line spacing" msgstr "" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" + msgid "Auto-Calc" msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 5556cac3be..a26787651d 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8761,6 +8761,10 @@ msgstr "Ample de la línia de moldejat de punta( ramming )" msgid "Ramming line spacing" msgstr "Espai entre línies de Moldejat de punta( Ramming )" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" + msgid "Auto-Calc" msgstr "Calcular Automàticament" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 684613bbda..e2d4ebb816 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -8494,6 +8494,10 @@ msgstr "Šířka linky při rapidní extruzi" msgid "Ramming line spacing" msgstr "Rozestup linek při rapidní extruzi" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "Pro konstantní průtok stiskněte %1% při přetahování." + msgid "Auto-Calc" msgstr "Automatický výpočet" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index e9cbfdaab1..123232d948 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -8840,6 +8840,10 @@ msgstr "Ramming-Linienbreite" msgid "Ramming line spacing" msgstr "Ramming-Linienabstand" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "Um eine konstante Flussrate zu erhalten, halten Sie %1% gedrückt, während Sie ziehen." + msgid "Auto-Calc" msgstr "Automatisch berechnen" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index fadcdf48ff..7dc3822f51 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -8174,6 +8174,10 @@ msgstr "" msgid "Ramming line spacing" msgstr "" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" + msgid "Auto-Calc" msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 321cf83cae..cc9cd101db 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -8773,6 +8773,10 @@ msgstr "Ancho de línea de Moldeado de Extremo" msgid "Ramming line spacing" msgstr "Separación de línea de moldeado de extremo" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "Para un flujo constante, mantén pulsado %1% mientras arrastras." + msgid "Auto-Calc" msgstr "Calculado automático" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 2b692617fd..a98c7c4d9d 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -8868,6 +8868,10 @@ msgstr "Largeur de ligne du pilonnage" msgid "Ramming line spacing" msgstr "Espacement des lignes du pilonnage" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "Pour un débit constant, maintenez %1% tout en faisant glisser." + msgid "Auto-Calc" msgstr "Auto-Calc" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 39139e3a59..502ab5cad9 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -8406,6 +8406,10 @@ msgstr "Tömörítési vonal szélessége" msgid "Ramming line spacing" msgstr "Tömörítési vonal térköze" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" + msgid "Auto-Calc" msgstr "Automatikus számítás" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index c678181da2..18379c4f2e 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -8799,6 +8799,11 @@ msgstr "Larghezza linea di modellazione del filamento" msgid "Ramming line spacing" msgstr "Spaziatura tra linee di modellazione del filamento" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" +"Per ottenere un avanzamento costante, tieni premuto %1% mentre trascini." + msgid "Auto-Calc" msgstr "Calcolo automatico" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index b391cae343..7f3a4e0d29 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -8202,6 +8202,10 @@ msgstr "ラミング線幅" msgid "Ramming line spacing" msgstr "ラミング線間距離" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "流量を一定にするには、%1% を押したままドラッグします。" + msgid "Auto-Calc" msgstr "自動計算" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index db1ed58756..fe1a35ba8a 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -8474,6 +8474,10 @@ msgstr "채워넣기 선 너비" msgid "Ramming line spacing" msgstr "채워넣기 선 간격" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" + msgid "Auto-Calc" msgstr "자동 계산" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 4e69ab84f9..18ff455288 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -8738,6 +8738,10 @@ msgstr "Įspaudimo linijos plotis" msgid "Ramming line spacing" msgstr "Įspaudimo tarpai tarp linijų" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" + msgid "Auto-Calc" msgstr "Automatinis skaičiavimas" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 632d9ebd6b..aaf63e6f1a 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -8555,6 +8555,10 @@ msgstr "Lijnbreedte voor ramming" msgid "Ramming line spacing" msgstr "Lijnafstand voor ramming" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" + msgid "Auto-Calc" msgstr "Automatisch berekenen" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index 1f26741e65..f10512a9e8 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -8719,6 +8719,10 @@ msgstr "Szerokość linii wyciskania" msgid "Ramming line spacing" msgstr "Odstęp linii wyciskania" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "Aby uzyskać stałe natężenie przepływu, przytrzymaj %1% podczas przeciągania." + msgid "Auto-Calc" msgstr "Auto-obliczenia" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 8abbbcc195..0ed90b624f 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -8750,6 +8750,10 @@ msgstr "Largura da linha de moldeamento" msgid "Ramming line spacing" msgstr "Espaçamento da linha de moldeamento" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" + msgid "Auto-Calc" msgstr "Auto-Calc" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index a8178983d2..571284bb06 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -8845,6 +8845,10 @@ msgstr "Ширина линии при рэмминге" msgid "Ramming line spacing" msgstr "Расстояние между линиями при рэмминге" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "Для постоянного объёмного расхода удерживайте нажатой клавишу %1% при перетаскивании." + msgid "Auto-Calc" msgstr "Авторасчёт" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 7d252ca6fc..d1e5918ed2 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -8400,6 +8400,10 @@ msgstr "" msgid "Ramming line spacing" msgstr "" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" + msgid "Auto-Calc" msgstr "Autoberäkna" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index a25bb5dbec..355ff3abca 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -8660,6 +8660,10 @@ msgstr "Sıkıştırma hattı genişliği" msgid "Ramming line spacing" msgstr "Sıkıştırma hattı aralığı" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" + msgid "Auto-Calc" msgstr "Otomatik Hesaplama" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 75325c195c..6eda9c55a9 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -8744,6 +8744,10 @@ msgstr "Ширина ліній раммінгу" msgid "Ramming line spacing" msgstr "Проміжки між лініями раммінгу" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" + msgid "Auto-Calc" msgstr "Автокалькулятор" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 13d5f78cfe..603ad0194f 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -8263,6 +8263,10 @@ msgstr "尖端成型线宽" msgid "Ramming line spacing" msgstr "尖端成型线间距" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" + msgid "Auto-Calc" msgstr "自动计算" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index bd9ee60a19..38e66bde96 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -8299,6 +8299,10 @@ msgstr "尖端成型線寬" msgid "Ramming line spacing" msgstr "尖端成型線間距" +#. TRN: The placeholder expands to Ctrl or Cmd (on macOS). +msgid "For constant flow rate, hold %1% while dragging." +msgstr "" + msgid "Auto-Calc" msgstr "自動計算" diff --git a/src/slic3r/GUI/RammingChart.cpp b/src/slic3r/GUI/RammingChart.cpp index 4d4bcc5082..2b6b73155c 100644 --- a/src/slic3r/GUI/RammingChart.cpp +++ b/src/slic3r/GUI/RammingChart.cpp @@ -95,6 +95,40 @@ void Chart::draw() { label = _(L("Volumetric speed")) + " (" + _("mm³/s") + ")"; dc.GetTextExtent(label,&text_width,&text_height); dc.DrawRotatedText(label,wxPoint(0,0.5*(m_rect.GetBottom()+m_rect.GetTop())+text_width/2.f),90); + + // draw a label with the value above each button + for (auto& button : m_buttons) { + if (!visible_area.Contains(button.get_pos())) + continue; + + wxPoint button_screen_pos = math_to_screen(button.get_pos()); + wxString value_label = wxString().Format(wxT("%.1f"), button.get_pos().m_y); + + int label_width, label_height; + dc.GetTextExtent(value_label, &label_width, &label_height); + + const int padding = 4; + // Calculate label x position + int label_x = button_screen_pos.x - (label_width/2); // centered with button + label_x = std::clamp(label_x, m_rect.GetLeft() + (padding*2), m_rect.GetRight() - label_width - (padding*2)); // adjust to fit within chart bounds + + // Calculate label y position + int label_y = button_screen_pos.y - (side/2) - label_height - (padding*2); // above button + if (label_y - (padding*2) < m_rect.GetTop()) { // move below the button if there isn't enough space + label_y = button_screen_pos.y + (side/2) + (padding*2); + } + + // Draw label background + dc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#DBDBDB")), 1)); + wxColour bg_color = StateColor::darkModeColorFor(wxColour("#F1F1F1")); + dc.SetBrush(wxBrush(wxColour(bg_color.Red(), bg_color.Green(), bg_color.Blue(), 204))); // 80% opacity + wxRect label_rect(label_x - padding, label_y - padding, label_width + (2*padding), label_height + (2*padding)); + dc.DrawRoundedRectangle(label_rect, 2); + + // Draw the label text + dc.SetTextForeground(StateColor::darkModeColorFor("#363636")); + dc.DrawText(value_label, wxPoint(label_x, label_y)); + } } void Chart::mouse_right_button_clicked(wxMouseEvent& event) { @@ -111,6 +145,7 @@ void Chart::mouse_right_button_clicked(wxMouseEvent& event) { void Chart::mouse_clicked(wxMouseEvent& event) { + m_uniform = (event.GetModifiers() == wxMOD_CONTROL); wxPoint point = event.GetPosition(); int button_index = which_button_is_clicked(point); if ( button_index != -1) { @@ -136,7 +171,15 @@ void Chart::mouse_moved(wxMouseEvent& event) { } int delta_x = pos.x - m_previous_mouse.x; int delta_y = pos.y - m_previous_mouse.y; - m_dragged->move(fixed_x?0:double(delta_x)/m_rect.GetWidth() * visible_area.m_width,-double(delta_y)/m_rect.GetHeight() * visible_area.m_height); + + double new_y = m_dragged->get_pos().m_y - double(delta_y) / m_rect.GetHeight() * visible_area.m_height; + + if (m_uniform) + for (ButtonToDrag& b : m_buttons) + b.move(fixed_x?0:double(delta_x)/m_rect.GetWidth() * visible_area.m_width, new_y - b.get_pos().m_y); + else + m_dragged->move(fixed_x?0:double(delta_x)/m_rect.GetWidth() * visible_area.m_width, new_y - m_dragged->get_pos().m_y); + m_previous_mouse = pos; recalculate_line(); } diff --git a/src/slic3r/GUI/RammingChart.hpp b/src/slic3r/GUI/RammingChart.hpp index d3f40d4c7d..1517299aed 100644 --- a/src/slic3r/GUI/RammingChart.hpp +++ b/src/slic3r/GUI/RammingChart.hpp @@ -22,7 +22,7 @@ public: SetBackgroundColour(*wxWHITE); SetBackgroundStyle(wxBG_STYLE_PAINT); m_rect = wxRect(wxPoint(legend_side,0),rect.GetSize()-wxSize(legend_side,legend_side)); - visible_area = wxRect2DDouble(0.0, 0.0, sampling*ramming_speed_size, 20.); + visible_area = wxRect2DDouble(0.0, 0.0, sampling*ramming_speed_size, 60.); m_buttons.clear(); if (initial_buttons.size()>0) for (const auto& pair : initial_buttons) @@ -30,7 +30,7 @@ public: recalculate_line(); } void set_xy_range(float x,float y) { - x = int(x/0.5) * 0.5; + x = int(x/0.25) * 0.25; if (x>=0) visible_area.SetRight(x); if (y>=0) visible_area.SetBottom(y); recalculate_line(); @@ -116,6 +116,7 @@ private: wxRect2DDouble visible_area; ButtonToDrag* m_dragged = nullptr; float m_total_volume = 0.f; + bool m_uniform = false; }; diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index 58045c57b5..53b8e9e3b5 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -7,6 +7,7 @@ #include "I18N.hpp" #include "GUI_App.hpp" #include "MsgDialog.hpp" +#include "format.hpp" #include "libslic3r/Color.hpp" #include "Widgets/Button.hpp" #include "Widgets/StaticLine.hpp" @@ -14,6 +15,7 @@ #include "slic3r/Utils/ColorSpaceConvert.hpp" #include "MainFrame.hpp" #include "libslic3r/Config.hpp" +#include "Widgets/Label.hpp" using namespace Slic3r; using namespace Slic3r::GUI; @@ -115,10 +117,24 @@ RammingPanel::RammingPanel(wxWindow* parent, const std::string& parameters) update_ui(m_chart); sizer_chart->Add(m_chart, 0, wxALL, 5); - m_widget_time = new SpinInput(this, wxEmptyString, "ms" , wxDefaultPosition, wxSize(scale(120), -1), wxSP_ARROW_KEYS, 0 , 5000 , 3000, 500); + // Create help text for constant flow rate dragging + std::string ctrl_str = GUI::shortkey_ctrl_prefix(); + if (!ctrl_str.empty() && ctrl_str.back() == '+') + ctrl_str.pop_back(); // Remove trailing '+' + wxString message = format_wxstr(_L("For constant flow rate, hold %1% while dragging."), ctrl_str); + Label* label = new Label(this, wxEmptyString); + wxClientDC dc(label); + wxString multiline_message; + label->SetFont(Label::Body_14); + label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); + label->split_lines(dc, scale(470), message, multiline_message); + label->SetLabel(multiline_message); + sizer_chart->Add(label, 0, wxEXPAND | wxALL, 5); + + m_widget_time = new SpinInput(this, wxEmptyString, "ms" , wxDefaultPosition, wxSize(scale(120), -1), wxSP_ARROW_KEYS, 0 , 5000 , 3000, 250); m_widget_volume = new SpinInput(this, wxEmptyString, "mm³", wxDefaultPosition, wxSize(scale(120), -1), wxSP_ARROW_KEYS, 0 , 10000, 0 ); - m_widget_ramming_line_width_multiplicator = new SpinInput(this, wxEmptyString, "%" , wxDefaultPosition, wxSize(scale(120), -1), wxSP_ARROW_KEYS, 10, 200 , 100 ); - m_widget_ramming_step_multiplicator = new SpinInput(this, wxEmptyString, "%" , wxDefaultPosition, wxSize(scale(120), -1), wxSP_ARROW_KEYS, 10, 200 , 100 ); + m_widget_ramming_line_width_multiplicator = new SpinInput(this, wxEmptyString, "%" , wxDefaultPosition, wxSize(scale(120), -1), wxSP_ARROW_KEYS, 10, 300 , 100 ); + m_widget_ramming_step_multiplicator = new SpinInput(this, wxEmptyString, "%" , wxDefaultPosition, wxSize(scale(120), -1), wxSP_ARROW_KEYS, 10, 300 , 100 ); auto add_title = [this, sizer_param](wxString label){ auto title = new StaticLine(this, 0, label);