From 2dc2d8252d91ccbc832da94bab60947a322b34c6 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Wed, 31 Aug 2022 16:32:56 +0800 Subject: [PATCH 01/76] NEW: support software limit of axis control Change-Id: I0d241aeddeed112b21ed576ce793c3e9f061c923 Signed-off-by: Stone Li --- resources/images/monitor_axis_home_icon.svg | 3 + src/slic3r/CMakeLists.txt | 2 + src/slic3r/GUI/DeviceManager.cpp | 25 ++- src/slic3r/GUI/DeviceManager.hpp | 3 + src/slic3r/GUI/RecenterDialog.cpp | 183 ++++++++++++++++++++ src/slic3r/GUI/RecenterDialog.hpp | 38 ++++ src/slic3r/GUI/StatusPanel.cpp | 66 ++++++- src/slic3r/GUI/StatusPanel.hpp | 2 + 8 files changed, 315 insertions(+), 7 deletions(-) create mode 100644 resources/images/monitor_axis_home_icon.svg create mode 100644 src/slic3r/GUI/RecenterDialog.cpp create mode 100644 src/slic3r/GUI/RecenterDialog.hpp diff --git a/resources/images/monitor_axis_home_icon.svg b/resources/images/monitor_axis_home_icon.svg new file mode 100644 index 0000000000..99a5a5b3bf --- /dev/null +++ b/resources/images/monitor_axis_home_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 2b6a3bb7b7..208bcc9695 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -340,6 +340,8 @@ set(SLIC3R_GUI_SOURCES GUI/DesktopIntegrationDialog.hpp GUI/PublishDialog.cpp GUI/PublishDialog.hpp + GUI/RecenterDialog.cpp + GUI/RecenterDialog.hpp GUI/BindDialog.cpp GUI/BindDialog.hpp GUI/SelectMachine.hpp diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 18d23148f8..3d80fa8962 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -356,6 +356,7 @@ MachineObject::MachineObject(NetworkAgent* agent, std::string name, std::string mc_print_percent = 0; mc_print_sub_stage = 0; mc_left_time = 0; + home_flag = -1; printing_speed_lvl = PrintingSpeedLevel::SPEED_LEVEL_INVALID; } @@ -1026,6 +1027,22 @@ bool MachineObject::is_system_printing() return false; } +bool MachineObject::is_axis_at_home(std::string axis) +{ + if (home_flag < 0) + return true; + + if (axis == "X") { + return home_flag & 1 == 1; + } else if (axis == "Y") { + return home_flag >> 1 & 1 == 1; + } else if (axis == "Z") { + return home_flag >> 2 & 1 == 1; + } else { + return true; + } +} + wxString MachineObject::get_curr_stage() { if (stage_list_info.empty()) { @@ -1399,11 +1416,11 @@ int MachineObject::command_set_printing_speed(PrintingSpeedLevel lvl) int MachineObject::command_axis_control(std::string axis, double unit, double value, int speed) { - char cmd[64]; + char cmd[256]; if (axis.compare("X") == 0 || axis.compare("Y") == 0 || axis.compare("Z") == 0) { - sprintf(cmd, "G91 \nG0 %s%0.1f F%d\n", axis.c_str(), value * unit, speed); + sprintf(cmd, "M211 S \nM211 X1 Y1 Z1\nM1002 push_ref_mode\nG91 \nG1 %s%0.1f F%d\nM1002 pop_ref_mode\nM211 R\n", axis.c_str(), value * unit, speed); } else if (axis.compare("E") == 0) { sprintf(cmd, "M83 \nG0 %s%0.1f F%d\n", axis.c_str(), value * unit, speed); @@ -1799,6 +1816,10 @@ int MachineObject::parse_json(std::string payload) print_type = jj["print_type"].get(); } + if (jj.contains("home_flag")) { + home_flag = jj["home_flag"].get(); + } + if (jj.contains("mc_remaining_time")) { if (jj["mc_remaining_time"].is_string()) mc_left_time = stoi(j["print"]["mc_remaining_time"].get()) * 60; diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 8b769791c2..65c0e2dd02 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -459,6 +459,7 @@ public: int mc_print_percent; /* left print progess in percent */ int mc_left_time; /* left time in seconds */ int last_mc_print_stage; + int home_flag; bool is_system_printing(); int print_error; @@ -467,6 +468,8 @@ public: int m_push_count = 0; bool calibration_done { false }; + bool is_axis_at_home(std::string axis); + wxString get_curr_stage(); // return curr stage index of stage list int get_curr_stage_idx(); diff --git a/src/slic3r/GUI/RecenterDialog.cpp b/src/slic3r/GUI/RecenterDialog.cpp new file mode 100644 index 0000000000..a3545c82ca --- /dev/null +++ b/src/slic3r/GUI/RecenterDialog.cpp @@ -0,0 +1,183 @@ +#include "RecenterDialog.hpp" +#include +#include +#include +#include + +#define BORDER FromDIP(25) +#define DRAW_PANEL_SIZE wxSize(FromDIP(475), FromDIP(100)) + +wxString hint1 = _L("Please perform \"recenter "); +wxString hint2 = _L("\" action to locate the current position of the extruder to prevent device breakdown by moving the axis out of line."); + +namespace Slic3r { namespace GUI { +RecenterDialog::RecenterDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) + : DPIDialog(parent, id, _L("Reminder"), pos, size, style) +{ + std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + init_bitmap(); + + auto* main_sizer = new wxBoxSizer(wxVERTICAL); + auto* button_sizer = new wxBoxSizer(wxHORIZONTAL); + + wxPanel* m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); + + m_button_confirm = new Button(this, _L("Center")); + m_button_confirm->SetFont(Label::Body_12); + m_button_confirm->SetMinSize(wxSize(-1, FromDIP(24))); + m_button_confirm->SetCornerRadius(FromDIP(12)); + StateColor confirm_btn_bg(std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); + m_button_confirm->SetBackgroundColor(confirm_btn_bg); + m_button_confirm->SetBorderColor(wxColour(0, 174, 66)); + m_button_confirm->SetTextColor(*wxWHITE); + + m_button_close = new Button(this, _L("Close")); + m_button_close->SetFont(Label::Body_12); + m_button_close->SetMinSize(wxSize(-1, FromDIP(24))); + m_button_close->SetCornerRadius(FromDIP(12)); + StateColor close_btn_bg(std::pair(wxColour(206, 206, 206), StateColor::Hovered), + std::pair(*wxWHITE, StateColor::Normal)); + m_button_close->SetBackgroundColor(close_btn_bg); + m_button_close->SetBorderColor(wxColour(38, 46, 48)); + m_button_close->SetTextColor(wxColour(38, 46, 48)); + + button_sizer->AddStretchSpacer(); + button_sizer->Add(m_button_confirm); + button_sizer->AddSpacer(FromDIP(20)); + button_sizer->Add(m_button_close); + + main_sizer->Add(m_line_top, 0, wxEXPAND, 0); + main_sizer->AddSpacer(DRAW_PANEL_SIZE.y); + main_sizer->Add(button_sizer, 0, wxBOTTOM | wxRIGHT | wxEXPAND, BORDER); + + SetSizer(main_sizer); + + CenterOnParent(); + + this->SetSize(wxSize(DRAW_PANEL_SIZE.x, -1)); + this->SetMinSize(wxSize(DRAW_PANEL_SIZE.x, -1)); + Fit(); + this->Bind(wxEVT_PAINT, &RecenterDialog::OnPaint, this); + m_button_confirm->Bind(wxEVT_BUTTON, &RecenterDialog::on_button_confirm, this); + m_button_close->Bind(wxEVT_BUTTON, &RecenterDialog::on_button_close, this); +} + +RecenterDialog::~RecenterDialog() {} + +void RecenterDialog::init_bitmap() { + m_home_bmp = ScalableBitmap(this, "monitor_axis_home_icon", 30); +} + +void RecenterDialog::OnPaint(wxPaintEvent& event){ + wxPaintDC dc(this); + wxGCDC dc2(dc); + render(dc2); +} + +void RecenterDialog::render(wxDC& dc) { + wxSize size = GetSize(); + + dc.SetFont(Label::Body_14); + dc.SetTextForeground(*wxBLACK); + wxPoint pos_start = wxPoint(BORDER, BORDER); + + wxSize hint1_size = dc.GetTextExtent(hint1); + wxPoint pos_hint1 = pos_start; + pos_hint1.y += (m_home_bmp.GetBmpWidth() - hint1_size.y) / 2; + dc.DrawText(hint1, pos_hint1); + + wxPoint pos_bmp = pos_start; + pos_bmp.x += hint1_size.x; + dc.DrawBitmap(m_home_bmp.bmp(), pos_bmp); + + wxSize hint2_size = dc.GetTextExtent(hint2); + wxPoint pos_hint2 = pos_hint1; + pos_hint2.x = pos_hint2.x + hint1_size.x + m_home_bmp.GetBmpWidth(); + + if (hint2_size.x + pos_hint2.x + BORDER > DRAW_PANEL_SIZE.x) { + bool is_ch = false; + if (hint2[0] > 0x80 && hint2[1] > 0x80) + is_ch = true; + + wxString fisrt_line; + wxString remaining_line; + + wxString count_txt; + int new_line_pos = 0; + for (int i = 0; i < hint2.length(); i++) { + count_txt += hint2[i]; + auto text_size = dc.GetTextExtent(count_txt); + if (text_size.x + pos_hint2.x + BORDER < DRAW_PANEL_SIZE.x) + { + if (hint2[i] == ' ' || hint2[i] == '\n') + new_line_pos = i; + } + else { + if (!is_ch) { + fisrt_line = hint2.SubString(0, new_line_pos); + remaining_line = hint2.SubString(new_line_pos + 1, hint2.length()); + break; + } + else { + fisrt_line = hint2.SubString(0, i); + remaining_line = hint2.SubString(i, hint2.length()); + break; + } + count_txt = ""; + } + } + dc.DrawText(fisrt_line, pos_hint2); + + + count_txt = ""; + new_line_pos = 0; + for (int i = 0; i < remaining_line.length(); i++) { + count_txt += remaining_line[i]; + auto text_size = dc.GetTextExtent(count_txt); + if (text_size.x + BORDER + BORDER < DRAW_PANEL_SIZE.x) + { + if (remaining_line[i] == ' ' || remaining_line[i] == '\n') + new_line_pos = i; + } + else { + if (!is_ch){ + remaining_line[new_line_pos] = '\n'; + } + else { + remaining_line.insert(i, '\n'); + } + count_txt = ""; + } + } + wxPoint pos_txt = pos_hint1; + pos_txt.y += dc.GetCharHeight(); + dc.DrawText(remaining_line, pos_txt); + } + else + dc.DrawText(hint2, pos_hint2); +} + +void RecenterDialog::on_button_confirm(wxCommandEvent& event) { + if (this->IsModal()) + this->EndModal(wxID_OK); + else + this->Close(); +} + +void RecenterDialog::on_button_close(wxCommandEvent& event) { + this->Close(); +} + +void RecenterDialog::on_dpi_changed(const wxRect& suggested_rect) { + init_bitmap(); + m_button_confirm->SetMinSize(wxSize(-1, FromDIP(24))); + m_button_confirm->SetCornerRadius(FromDIP(12)); + m_button_close->SetMinSize(wxSize(-1, FromDIP(24))); + m_button_close->SetCornerRadius(FromDIP(12)); +} + +}} // namespace Slic3r::GUI \ No newline at end of file diff --git a/src/slic3r/GUI/RecenterDialog.hpp b/src/slic3r/GUI/RecenterDialog.hpp new file mode 100644 index 0000000000..566c1d9892 --- /dev/null +++ b/src/slic3r/GUI/RecenterDialog.hpp @@ -0,0 +1,38 @@ +#ifndef slic3r_GUI_RecenterDialog_hpp_ +#define slic3r_GUI_RecenterDialog_hpp_ + +#include "GUI_Utils.hpp" +#include +#include "Widgets/Button.hpp" +#include + +namespace Slic3r { namespace GUI { +class RecenterDialog : public DPIDialog +{ +private: + wxStaticText* m_staticText_hint; + Button* m_button_confirm; + Button* m_button_close; + wxStaticBitmap* m_bitmap_home; + ScalableBitmap m_home_bmp; + + void init_bitmap(); + void OnPaint(wxPaintEvent& event); + void render(wxDC& dc); + void on_button_confirm(wxCommandEvent& event); + void on_button_close(wxCommandEvent& event); + void on_dpi_changed(const wxRect& suggested_rect) override; + +public: + RecenterDialog(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxString& title = wxEmptyString, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxCLOSE_BOX | wxCAPTION); + + ~RecenterDialog(); +}; +}} // namespace Slic3r::GUI + +#endif \ No newline at end of file diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 0544e4f4c5..cc6c81c106 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -9,7 +9,7 @@ #include "slic3r/Utils/Http.hpp" #include "libslic3r/Thread.hpp" - +#include "RecenterDialog.hpp" namespace Slic3r { namespace GUI { @@ -1355,6 +1355,12 @@ void StatusPanel::update(MachineObject *obj) m_machine_ctrl_panel->Thaw(); } +void StatusPanel::show_recenter_dialog() { + RecenterDialog dlg(this); + if (dlg.ShowModal() == wxID_OK) + obj->command_go_home(); +} + void StatusPanel::show_error_message(wxString msg) { m_error_text->SetLabel(msg); @@ -1944,6 +1950,27 @@ void StatusPanel::reset_printing_values() void StatusPanel::on_axis_ctrl_xy(wxCommandEvent &event) { if (!obj) return; + + //check is at home + if (event.GetInt() == 1 + || event.GetInt() == 3 + || event.GetInt() == 5 + || event.GetInt() == 7) { + if (!obj->is_axis_at_home("X")) { + BOOST_LOG_TRIVIAL(info) << "axis x is not at home"; + show_recenter_dialog(); + return; + } + } else if (event.GetInt() == 0 + || event.GetInt() == 2 + || event.GetInt() == 4 + || event.GetInt() == 6) { + if (!obj->is_axis_at_home("Y")) { + BOOST_LOG_TRIVIAL(info) << "axis y is not at home"; + show_recenter_dialog(); + return; + } + } if (event.GetInt() == 0) { obj->command_axis_control("Y", 1.0, 10.0f, 3000); } if (event.GetInt() == 1) { obj->command_axis_control("X", 1.0, -10.0f, 3000); } if (event.GetInt() == 2) { obj->command_axis_control("Y", 1.0, -10.0f, 3000); } @@ -1955,24 +1982,53 @@ void StatusPanel::on_axis_ctrl_xy(wxCommandEvent &event) if (event.GetInt() == 8) { obj->command_go_home(); } } +bool StatusPanel::check_axis_z_at_home(MachineObject* obj) +{ + if (obj) { + if (!obj->is_axis_at_home("Z")) { + BOOST_LOG_TRIVIAL(info) << "axis z is not at home"; + show_recenter_dialog(); + return false; + } + return true; + } + return false; +} + void StatusPanel::on_axis_ctrl_z_up_10(wxCommandEvent &event) { - if (obj) obj->command_axis_control("Z", 1.0, -10.0f, 900); + if (obj) { + if (!check_axis_z_at_home(obj)) + return; + obj->command_axis_control("Z", 1.0, -10.0f, 900); + } } void StatusPanel::on_axis_ctrl_z_up_1(wxCommandEvent &event) { - if (obj) obj->command_axis_control("Z", 1.0, -1.0f, 900); + if (obj) { + if (!check_axis_z_at_home(obj)) + return; + obj->command_axis_control("Z", 1.0, -1.0f, 900); + } } void StatusPanel::on_axis_ctrl_z_down_1(wxCommandEvent &event) { - if (obj) obj->command_axis_control("Z", 1.0, 1.0f, 900); + if (obj) { + if (!check_axis_z_at_home(obj)) + return; + obj->command_axis_control("Z", 1.0, 1.0f, 900); + } } void StatusPanel::on_axis_ctrl_z_down_10(wxCommandEvent &event) { - if (obj) obj->command_axis_control("Z", 1.0, 10.0f, 900); + if (obj) { + if (!check_axis_z_at_home(obj)) + return; + obj->command_axis_control("Z", 1.0, 10.0f, 900); + } } void StatusPanel::on_axis_ctrl_e_up_10(wxCommandEvent &event) diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 39d1efea5f..4d4f4e4485 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -277,8 +277,10 @@ protected: void on_subtask_clean(wxCommandEvent &event); void show_error_message(wxString msg); void error_info_reset(); + void show_recenter_dialog(); /* axis control */ + bool check_axis_z_at_home(MachineObject* obj); void on_axis_ctrl_xy(wxCommandEvent &event); void on_axis_ctrl_z_up_10(wxCommandEvent &event); void on_axis_ctrl_z_up_1(wxCommandEvent &event); From 63d7d05f682aefa1a8bee1fbc42c8fb723e51fb1 Mon Sep 17 00:00:00 2001 From: "zorro.zhang" Date: Fri, 26 Aug 2022 19:34:51 +0800 Subject: [PATCH 02/76] ENH: new default recentfile image Change-Id: Ibb46b5a754e42f40b4d3ea773ca551208e0aef46 (cherry picked from commit b3a66ec1a387426842b8c43f38986ef8ada59d6f) --- resources/web/homepage/css/home.css | 3 ++- resources/web/homepage/img/d.png | Bin 18531 -> 5454 bytes resources/web/homepage/index.html | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index e25c9570f6..64aff2bcec 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -341,7 +341,7 @@ body .FileImg { text-align: center; - background-color: #E4E4E4; + background-color: #F5F5F5; border-radius: 8px; width: 184px; height: 184px; @@ -371,6 +371,7 @@ body border: 1px solid #C5C5C5; border-radius: 6px; background-color: #fff; + display: none; } .CT_Item diff --git a/resources/web/homepage/img/d.png b/resources/web/homepage/img/d.png index 830743a6d01b508df0341946431c9005124255ac..bddeb8cc4d1e2dd0fbebab29c5a0583c129cd4c9 100644 GIT binary patch literal 5454 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 diff --git a/resources/web/homepage/index.html b/resources/web/homepage/index.html index 9f562225b8..772cf1b435 100644 --- a/resources/web/homepage/index.html +++ b/resources/web/homepage/index.html @@ -76,7 +76,7 @@
+
--> From 2f59e77ca9a42e50ff0fa5f012ed05fbb63bfb61 Mon Sep 17 00:00:00 2001 From: "zorro.zhang" Date: Thu, 1 Sep 2022 10:01:10 +0800 Subject: [PATCH 03/76] ENH: Adjust Homepage UI Change-Id: I6d2556241d7a3eb68f4e73ef905c12d07a8ad77f (cherry picked from commit 8ebcf2de6991d4aaad1f49571493fd9d99fdd9cc) --- resources/web/homepage/css/home.css | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index 64aff2bcec..b5bdd30a3b 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -471,40 +471,40 @@ body flex-wrap: wrap; align-content: flex-start; overflow-y: auto; - padding: 50px; + padding: 50px 80px; } .GuideBlock { - width: 320px; - margin: 0px; - margin: 0px 12px 30px 12px; + width: 400px; + margin: 0px 20px 40px 20px; cursor: pointer; } .UG_IMG { - width: 320px; - height: 200px; + width: 400px; + height: 250px; } .UG_IMG img { - width: 320px; - height: 200px; + width: 400px; + height: 250px; } .UG_TITLE { font-size: 16px; line-height: 20px; - width: 320px; - margin-top: 6px; + width: 400px; + margin-top: 20px; + margin-bottom: 10px; } .UG_DESC { - width: 320px; + width: 400px; line-height: 18px; color: #C4C4C4; font-size: 14px; From aae2a0484a128d0ee99428e1532564632954680b Mon Sep 17 00:00:00 2001 From: "zorro.zhang" Date: Fri, 2 Sep 2022 15:05:15 +0800 Subject: [PATCH 04/76] ENH: Adjust Homepage UI 1, User Guide Image, Top add round corner 2, Change Guide description text color 3, New UI of Mouse Right Button Menu Change-Id: I82cf82a97e35f16478020fabada17b5637cff625 (cherry picked from commit a3a56392788a9eabc9bb0cc20ecb48050869476b) --- resources/web/homepage/css/home.css | 36 +++++++++++++++----------- resources/web/homepage/img/delete.png | Bin 4023 -> 620 bytes resources/web/homepage/img/folder.png | Bin 2721 -> 1641 bytes 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index b5bdd30a3b..ee6af87b8c 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -291,16 +291,20 @@ body #RecentClearAllBtn { - border: 1px solid #C4C4C4; + border: 1px solid #000; padding: 0px 10px; border-radius: 6px; line-height: 26px; height: 26px; margin-left: 20px; cursor: pointer; - background-color: #00AE42; - color: #fff; - display: inline; + color: #000; + display: none; +} + +#RecentClearAllBtn:hover +{ + background-color:#CDCECE; } #RecentTitle @@ -341,7 +345,7 @@ body .FileImg { text-align: center; - background-color: #F5F5F5; + background-color: #E4E4E4; border-radius: 8px; width: 184px; height: 184px; @@ -368,26 +372,26 @@ body border: 0px; min-width: 100px; top: 800px; - border: 1px solid #C5C5C5; - border-radius: 6px; + border: 1px solid #C3C3C3; + color: #323A3D; background-color: #fff; - display: none; + display: none; } .CT_Item { - line-height:30px; - padding: 0px 10px; + padding: 2px 10px; display: flex; flex-direction: row; align-content: center; align-items: center; + border: 2px solid #fff; } .CT_Item:hover { - background-color: #E9E9E9; cursor: pointer; + border: 2px solid #00AE42; } @@ -490,23 +494,25 @@ body .UG_IMG img { width: 400px; - height: 250px; + height: 250px; + border-radius: 5px 5px 0px 0px; } .UG_TITLE { - font-size: 16px; + font-size: 18px; + font-weight: 700; line-height: 20px; width: 400px; margin-top: 20px; - margin-bottom: 10px; + margin-bottom: 4px; } .UG_DESC { width: 400px; line-height: 18px; - color: #C4C4C4; + color: #4E5454; font-size: 14px; } diff --git a/resources/web/homepage/img/delete.png b/resources/web/homepage/img/delete.png index 3f857a1a2889479cd60d427268048f55c992e564..8a5d100c39b9cc08e28d808e7ccad581381bc4dd 100644 GIT binary patch literal 620 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 diff --git a/resources/web/homepage/img/folder.png b/resources/web/homepage/img/folder.png index cc5b3453206742a6e04c0311a2ec01536c1f9dee..48cd0f42893423a4d0f78410314bb361c38b6bd1 100644 GIT binary patch literal 1641 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 E0u>;!g8%>k From 6792b42992a3e1e9fed7bc65d4f61fbef108fd76 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Fri, 2 Sep 2022 16:39:02 +0800 Subject: [PATCH 05/76] ENH: hide media file and upgrade panel Change-Id: If953e2261fbc031382f42cc47e5c8beecb626f85 --- src/slic3r/GUI/Monitor.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index a005cf7714..cc286218c9 100644 --- a/src/slic3r/GUI/Monitor.cpp +++ b/src/slic3r/GUI/Monitor.cpp @@ -198,14 +198,16 @@ MonitorPanel::~MonitorPanel() }); //m_status_add_machine_panel = new AddMachinePanel(m_tabpanel); - m_status_info_panel = new StatusPanel(m_tabpanel); + m_status_info_panel = new StatusPanel(m_tabpanel); m_tabpanel->AddPage(m_status_info_panel, _L("Status"), "", true); +#if !BBL_RELEASE_TO_PUBLIC m_media_file_panel = new MediaFilePanel(m_tabpanel); m_tabpanel->AddPage(m_media_file_panel, _L("Media"), "", false); - + m_upgrade_panel = new UpgradePanel(m_tabpanel); m_tabpanel->AddPage(m_upgrade_panel, _L("Update"), "", false); +#endif m_hms_panel = new HMSPanel(m_tabpanel); m_tabpanel->AddPage(m_hms_panel, _L("HMS"),"", false); @@ -225,8 +227,10 @@ void MonitorPanel::set_default() /* reset side tool*/ //m_bitmap_wifi_signal->SetBitmap(wxNullBitmap); +#if !BBL_RELEASE_TO_PUBLIC /* reset time lapse panel */ m_media_file_panel->SetMachineObject(nullptr); +#endif wxGetApp().sidebar().load_ams_list({}); } @@ -255,8 +259,10 @@ void MonitorPanel::msw_rescale() m_tabpanel->Rescale(); //m_status_add_machine_panel->msw_rescale(); m_status_info_panel->msw_rescale(); +#if !BBL_RELEASE_TO_PUBLIC m_media_file_panel->Rescale(); m_upgrade_panel->msw_rescale(); +#endif m_hms_panel->msw_rescale(); m_connection_info->SetCornerRadius(0); @@ -399,11 +405,16 @@ void MonitorPanel::update_all() } m_status_info_panel->obj = obj; +#if !BBL_RELEASE_TO_PUBLIC m_upgrade_panel->update(obj); +#endif m_status_info_panel->m_media_play_ctrl->SetMachineObject(obj); +#if !BBL_RELEASE_TO_PUBLIC m_media_file_panel->SetMachineObject(obj); +#endif + update_status(obj); if (!obj) { @@ -436,9 +447,11 @@ void MonitorPanel::update_all() if (m_hms_panel->IsShown()) { m_hms_panel->update(obj); } +#if !BBL_RELEASE_TO_PUBLIC if (m_upgrade_panel->IsShown()) { m_upgrade_panel->update(obj); } +#endif } bool MonitorPanel::Show(bool show) From 8f28474ed23c01ec3f26daee05b27d11cfd2dbc4 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Fri, 2 Sep 2022 16:25:05 +0800 Subject: [PATCH 06/76] FIX: hide checkbox/label/tips of use_ams Change-Id: Ifce452f0776bbe02bf2446e952b1ac0b474a6d72 --- src/slic3r/GUI/SelectMachine.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 47f815902b..190df5a496 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1909,9 +1909,9 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event) void SelectMachineDialog::update_ams_check(MachineObject* obj) { if (obj && obj->ams_support_use_ams) { - ams_check->Show(); + select_use_ams->Show(); } else { - ams_check->Hide(); + select_use_ams->Hide(); } } From ac0b3838581ee56580129a25c25069b6cca77bae Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Wed, 31 Aug 2022 12:03:21 +0800 Subject: [PATCH 07/76] FIX: add 16 colors Change-Id: I5e24e8ea95f85a9ffdef4c3871ea4b30e9711d23 --- src/libslic3r/Model.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index ac78f5c981..2ce1123241 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -574,7 +574,7 @@ enum class EnforcerBlockerType : int8_t { Extruder13, Extruder14, Extruder15, - ExtruderMax = Extruder15, + ExtruderMax }; enum class ConversionType : int { From a66aa0a259253ee3578bb1de37f7984b21193983 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Fri, 2 Sep 2022 17:09:39 +0800 Subject: [PATCH 08/76] FIX: add text link to bed type Change-Id: Ic051bc37f87ec355865c3ce5fb857ad0a38c1d32 (cherry picked from commit 5573fdca645ba3721df25ae538c76b2f0abb2149) --- src/slic3r/GUI/Plater.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 64e21ea61f..fc783375df 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -520,6 +520,24 @@ Sidebar::Sidebar(Plater *parent) m_bed_type_list->AppendString(_L(item.first)); } + bed_type_title->Bind(wxEVT_ENTER_WINDOW, [bed_type_title, this](wxMouseEvent &e) { + e.Skip(); + auto font = bed_type_title->GetFont(); + font.SetUnderlined(true); + bed_type_title->SetFont(font); + SetCursor(wxCURSOR_HAND); + }); + bed_type_title->Bind(wxEVT_LEAVE_WINDOW, [bed_type_title, this](wxMouseEvent &e) { + e.Skip(); + auto font = bed_type_title->GetFont(); + font.SetUnderlined(false); + bed_type_title->SetFont(font); + SetCursor(wxCURSOR_ARROW); + }); + bed_type_title->Bind(wxEVT_LEFT_UP, [bed_type_title, this](wxMouseEvent &e) { + wxLaunchDefaultBrowser("https://wiki.bambulab.com/en/x1/manual/compatibility-and-parameter-settings-of-filaments"); + }); + m_bed_type_list->Select(0); bed_type_sizer->Add(bed_type_title, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); bed_type_sizer->Add(m_bed_type_list, 1, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(10)); From db83a1c19319721a13435bb3a0d9efcd4347b91d Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Fri, 2 Sep 2022 10:04:04 +0800 Subject: [PATCH 09/76] FIX: STUDIO-795 crash in painting mode with Ctrl+A Change-Id: I10e49eb704b4b2bf6b4059242b2cb6374ec91ded (cherry picked from commit 44089d5a783121d1c8c0c98b53f5d78d868567af) --- src/slic3r/GUI/GLCanvas3D.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 6334d6edb1..34be261ae1 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2264,6 +2264,12 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) return; } + bool is_in_painting_mode = false; + GLGizmoPainterBase *current_gizmo_painter = dynamic_cast(get_gizmos_manager().get_current()); + if (current_gizmo_painter != nullptr) { + is_in_painting_mode = true; + } + //BBS: add orient deactivate logic if (keyCode == WXK_ESCAPE && (_deactivate_arrange_menu() || _deactivate_orient_menu())) @@ -2281,7 +2287,8 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) #else /* __APPLE__ */ case WXK_CONTROL_A: #endif /* __APPLE__ */ - post_event(SimpleEvent(EVT_GLCANVAS_SELECT_ALL)); + if (!is_in_painting_mode) + post_event(SimpleEvent(EVT_GLCANVAS_SELECT_ALL)); break; #ifdef __APPLE__ case 'c': @@ -2289,7 +2296,8 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) #else /* __APPLE__ */ case WXK_CONTROL_C: #endif /* __APPLE__ */ - post_event(SimpleEvent(EVT_GLTOOLBAR_COPY)); + if (!is_in_painting_mode) + post_event(SimpleEvent(EVT_GLTOOLBAR_COPY)); break; #ifdef __APPLE__ case 'm': @@ -2325,7 +2333,8 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) #else /* __APPLE__ */ case WXK_CONTROL_V: #endif /* __APPLE__ */ - post_event(SimpleEvent(EVT_GLTOOLBAR_PASTE)); + if (!is_in_painting_mode) + post_event(SimpleEvent(EVT_GLTOOLBAR_PASTE)); break; #ifdef __APPLE__ @@ -2334,7 +2343,8 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) #else /* __APPLE__ */ case WXK_CONTROL_X: #endif /* __APPLE__ */ - post_event(SimpleEvent(EVT_GLTOOLBAR_CUT)); + if (!is_in_painting_mode) + post_event(SimpleEvent(EVT_GLTOOLBAR_CUT)); break; #ifdef __APPLE__ From 612204b443ca716b9a9936386327b1e45120d06b Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Fri, 2 Sep 2022 16:51:17 +0800 Subject: [PATCH 10/76] FIX: STUDIO-787 & STUDIO-786 lion face model problem 1. memory explosion when enable timelapse. 2. Models with only one color become multicolor after slicing. Change-Id: Iab3ace70c08d03ab612158d52ff67eef8d5bc718 --- src/libslic3r/GCode/ToolOrdering.cpp | 7 ++++++- src/libslic3r/Print.cpp | 3 +-- src/libslic3r/PrintConfig.cpp | 9 ++++++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index f20b3091fa..b302cd1394 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -175,8 +175,13 @@ ToolOrdering::ToolOrdering(const Print &print, unsigned int first_extruder, bool this->collect_extruders(*object, per_layer_extruder_switches); // Reorder the extruders to minimize tool switches. + std::vector first_layer_tool_order; if (first_extruder == (unsigned int)-1) { - this->reorder_extruders(generate_first_layer_tool_order(print)); + first_layer_tool_order = generate_first_layer_tool_order(print); + } + + if (!first_layer_tool_order.empty()) { + this->reorder_extruders(first_layer_tool_order); } else { this->reorder_extruders(first_extruder); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index e56223216c..3b7a42b259 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1777,11 +1777,10 @@ void Print::_make_wipe_tower() // BBS: priming logic is removed, so don't consider it in tool ordering m_wipe_tower_data.tool_ordering = ToolOrdering(*this, (unsigned int)-1, false); - // if enable_timelapse_print(), update all layer_tools parameters(has_wipe_tower, wipe_tower_partitions) + // if enable_timelapse_print(), update all layer_tools parameters: wipe_tower_partitions if (enable_timelapse_print()) { std::vector& layer_tools_array = m_wipe_tower_data.tool_ordering.layer_tools(); for (LayerTools& layer_tools : layer_tools_array) { - layer_tools.has_wipe_tower = true; if (layer_tools.wipe_tower_partitions == 0) { layer_tools.wipe_tower_partitions = 1; } diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index f72a71b703..42f1ef8453 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3521,9 +3521,12 @@ void DynamicPrintConfig::normalize_fdm(int used_filaments) ConfigOptionBool* islh_opt = this->option("independent_support_layer_height", true); ConfigOptionBool* alh_opt = this->option("adaptive_layer_height"); ConfigOptionEnum* ps_opt = this->option>("print_sequence"); - - if (used_filaments == 1 || ps_opt->value == PrintSequence::ByObject) - ept_opt->value = false; + + ConfigOptionBool *timelapse_opt = this->option("timelapse_no_toolhead"); + if (timelapse_opt && timelapse_opt->value == false) { + if (used_filaments == 1 || ps_opt->value == PrintSequence::ByObject) + ept_opt->value = false; + } if (ept_opt->value) { if (islh_opt) From a744f7d60c73007c05e85ba4199ea8b90d311e5e Mon Sep 17 00:00:00 2001 From: "yifan.wu" Date: Fri, 2 Sep 2022 21:13:00 +0800 Subject: [PATCH 11/76] ENH: support to show object labels in 3D scene Signed-off-by: yifan.wu Change-Id: If2267b13ab15d2c18175dc54cfda605f8f062cf8 --- src/slic3r/GUI/MainFrame.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index a0123df25e..a72d365696 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1935,6 +1935,12 @@ void MainFrame::init_menubar_as_editor() viewMenu->Check(wxID_CAMERA_PERSPECTIVE + camera_id_base, true); else viewMenu->Check(wxID_CAMERA_ORTHOGONAL + camera_id_base, true); + + viewMenu->AppendSeparator(); + append_menu_check_item(viewMenu, wxID_ANY, _L("Show &Labels"), _L("Show object labels in 3D scene"), + [this](wxCommandEvent&) { m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); }, this, + [this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->are_view3D_labels_shown(); }, this); + //viewMenu->AppendSeparator(); ////BBS orthogonal view //append_menu_check_item(viewMenu, wxID_ANY, _L("Show Edges(TODO)"), _L("Show Edges"), From 0d432bf89ff908366c6c60a8c8659e7fb72ce6f7 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Fri, 2 Sep 2022 17:19:20 +0800 Subject: [PATCH 12/76] FIX:adjust text of home dialog Change-Id: I4e6412ae2828d2918f44d6442a7fd2efc21970cf --- src/slic3r/GUI/RecenterDialog.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/RecenterDialog.cpp b/src/slic3r/GUI/RecenterDialog.cpp index a3545c82ca..0ba7c9b40a 100644 --- a/src/slic3r/GUI/RecenterDialog.cpp +++ b/src/slic3r/GUI/RecenterDialog.cpp @@ -7,12 +7,14 @@ #define BORDER FromDIP(25) #define DRAW_PANEL_SIZE wxSize(FromDIP(475), FromDIP(100)) -wxString hint1 = _L("Please perform \"recenter "); -wxString hint2 = _L("\" action to locate the current position of the extruder to prevent device breakdown by moving the axis out of line."); +const wxColour text_color(107, 107, 107); + +wxString hint1 = _L("Please home all axes (click "); +wxString hint2 = _L(") to locate the toolhead's position. This prevents device moving beyond the printable boundary and causing equipment wear."); namespace Slic3r { namespace GUI { RecenterDialog::RecenterDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) - : DPIDialog(parent, id, _L("Reminder"), pos, size, style) + : DPIDialog(parent, id, _L("Confirm"), pos, size, style) { std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); @@ -25,8 +27,8 @@ RecenterDialog::RecenterDialog(wxWindow* parent, wxWindowID id, const wxString& wxPanel* m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); - m_button_confirm = new Button(this, _L("Center")); - m_button_confirm->SetFont(Label::Body_12); + m_button_confirm = new Button(this, _L("Home")); + m_button_confirm->SetFont(Label::Body_14); m_button_confirm->SetMinSize(wxSize(-1, FromDIP(24))); m_button_confirm->SetCornerRadius(FromDIP(12)); StateColor confirm_btn_bg(std::pair(wxColour(61, 203, 115), StateColor::Hovered), @@ -36,7 +38,7 @@ RecenterDialog::RecenterDialog(wxWindow* parent, wxWindowID id, const wxString& m_button_confirm->SetTextColor(*wxWHITE); m_button_close = new Button(this, _L("Close")); - m_button_close->SetFont(Label::Body_12); + m_button_close->SetFont(Label::Body_14); m_button_close->SetMinSize(wxSize(-1, FromDIP(24))); m_button_close->SetCornerRadius(FromDIP(12)); StateColor close_btn_bg(std::pair(wxColour(206, 206, 206), StateColor::Hovered), @@ -60,6 +62,7 @@ RecenterDialog::RecenterDialog(wxWindow* parent, wxWindowID id, const wxString& this->SetSize(wxSize(DRAW_PANEL_SIZE.x, -1)); this->SetMinSize(wxSize(DRAW_PANEL_SIZE.x, -1)); + Layout(); Fit(); this->Bind(wxEVT_PAINT, &RecenterDialog::OnPaint, this); m_button_confirm->Bind(wxEVT_BUTTON, &RecenterDialog::on_button_confirm, this); @@ -69,20 +72,19 @@ RecenterDialog::RecenterDialog(wxWindow* parent, wxWindowID id, const wxString& RecenterDialog::~RecenterDialog() {} void RecenterDialog::init_bitmap() { - m_home_bmp = ScalableBitmap(this, "monitor_axis_home_icon", 30); + m_home_bmp = ScalableBitmap(this, "monitor_axis_home_icon", 24); } void RecenterDialog::OnPaint(wxPaintEvent& event){ wxPaintDC dc(this); - wxGCDC dc2(dc); - render(dc2); + render(dc); } void RecenterDialog::render(wxDC& dc) { wxSize size = GetSize(); dc.SetFont(Label::Body_14); - dc.SetTextForeground(*wxBLACK); + dc.SetTextForeground(text_color); wxPoint pos_start = wxPoint(BORDER, BORDER); wxSize hint1_size = dc.GetTextExtent(hint1); @@ -178,6 +180,7 @@ void RecenterDialog::on_dpi_changed(const wxRect& suggested_rect) { m_button_confirm->SetCornerRadius(FromDIP(12)); m_button_close->SetMinSize(wxSize(-1, FromDIP(24))); m_button_close->SetCornerRadius(FromDIP(12)); + Layout(); } }} // namespace Slic3r::GUI \ No newline at end of file From 83b427b7e23d180cf16b39aaa26cac49eff78f8c Mon Sep 17 00:00:00 2001 From: tao wang Date: Sat, 3 Sep 2022 16:29:13 +0800 Subject: [PATCH 13/76] FIX:synchronize the add and import actions Change-Id: I3fbd52d5d554001af4bea27bbf6bb6feee6e230d --- src/slic3r/GUI/Plater.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index fc783375df..11ac4958a9 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -5276,9 +5276,9 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt) void Plater::priv::on_action_add(SimpleEvent&) { if (q != nullptr) { - //q->add_model(); + q->add_model(); //BBS open file in toolbar add - q->add_file(); + //q->add_file(); } } From 43e69fee35ce45e6710c30aa8f359b6d022760d3 Mon Sep 17 00:00:00 2001 From: tao wang Date: Wed, 31 Aug 2022 15:13:07 +0800 Subject: [PATCH 14/76] FIX:refine objecttable layout and interaction Change-Id: If7639decffc994bfbbef3461fd02de0c06758b89 --- src/slic3r/GUI/GUI_Factories.cpp | 2 +- src/slic3r/GUI/GUI_ObjectTable.cpp | 347 +++++++++++++++++------------ src/slic3r/GUI/GUI_ObjectTable.hpp | 6 +- src/slic3r/GUI/ParamsPanel.cpp | 8 +- 4 files changed, 212 insertions(+), 151 deletions(-) diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 38c54f5c31..b5f404e936 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -1271,7 +1271,7 @@ void MenuFactory::append_menu_item_simplify(wxMenu* menu) void MenuFactory::append_menu_item_per_object_settings(wxMenu* menu) { - const std::vector names = { _L("Per object edit"), _L("Edit print parameters for a single object") }; + const std::vector names = { _L("Edit in Parameter Table"), _L("Edit print parameters for a single object") }; // Delete old menu item for (const wxString& name : names) { const int item_id = menu->FindItem(name); diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 9ea452e2d8..74206d62f2 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -672,8 +672,6 @@ void GridCellSupportRenderer::Draw(wxGrid& grid, #endif // __WXOSX_MAC__ dc.DrawBitmap(check_on, rect.x + offsetx, rect.y + offsety); - //dc.SetBrush(wxBrush(wxColour(0x00, 0xAE, 0x42))); - //dc.DrawBitmap(check_on, (width - check_on.GetSize().x) / 2, (height - check_on.GetSize().y) / 2); } else { auto check_off = create_scaled_bitmap("check_off_focused", nullptr, 18); dc.SetPen(*wxTRANSPARENT_PEN); @@ -689,11 +687,7 @@ void GridCellSupportRenderer::Draw(wxGrid& grid, offsety = (height - check_off.GetSize().y) / 2; #endif // __WXOSX_MAC__ - - dc.DrawBitmap(check_off, rect.x + offsetx, rect.y + offsety); - //dc.SetBrush(wxBrush(wxColour(0x00, 0xAE, 0x42))); - //dc.DrawBitmap(check_off, (width - check_off.GetSize().x) / 2, (height - check_off.GetSize().y) / 2); } } @@ -734,6 +728,7 @@ wxEND_EVENT_TABLE() bool ObjectGrid::OnCellLeftClick(wxGridEvent& event, int row, int col, ConfigOptionType type) { + input_string = wxEmptyString; if (type != coBool) return false; @@ -838,6 +833,87 @@ void ObjectGrid::OnColHeadLeftClick(wxGridEvent& event) void ObjectGrid::OnKeyDown( wxKeyEvent& event ) { + // see include/wx/defs.h enum wxKeyCode + int keyCode = event.GetKeyCode(); + int ctrlMask = wxMOD_CONTROL; + int shiftMask = wxMOD_SHIFT; + // Coordinates of the selected block to copy to clipboard. + wxGridBlockCoords selection; + wxTextDataObject text_data; + + if ((event.GetModifiers() & ctrlMask) != 0) { + // CTRL is pressed + switch (keyCode) { + case 'c': + case 'C': + { + // Check if we have any selected blocks and if we don't + // have too many of them. + const wxGridBlocks blocks = GetSelectedBlocks(); + wxGridBlocks::iterator iter = blocks.begin(); + if (iter == blocks.end()) + { + // No selection, copy just the current cell. + if (m_currentCellCoords == wxGridNoCellCoords) + { + // But we don't even have it -- nothing to do then. + event.Skip(); + break; + } + + selection = wxGridBlockCoords(GetGridCursorRow(), + GetGridCursorCol(), + GetGridCursorRow(), + GetGridCursorCol()); + } + else // We do have at least one selected block. + { + selection = *blocks.begin(); + + } + m_selected_block = selection; + + ObjectGridTable* table = dynamic_cast(this->GetTable()); + + if (GetGridCursorCol() == ObjectGridTable::col_printable || + GetGridCursorCol() == ObjectGridTable::col_enable_support) { + m_cell_data = table->GetValueAsBool(GetGridCursorRow(), GetGridCursorCol()) ? wxT("1") : wxT("0"); + } + else if (GetGridCursorCol() == ObjectGridTable::col_filaments) { + m_cell_data = table->GetValue(GetGridCursorRow(), GetGridCursorCol()); + } + else { + m_cell_data = table->GetValue(GetGridCursorRow(), GetGridCursorCol()); + } + + break; + } + + case 'v': + case 'V': { + wxTheClipboard->GetData(text_data); + + if (!m_cell_data.empty()) { + text_data.SetText(m_cell_data); + } + + paste_data(text_data); + break; + } + case 'f': + case 'F': + //TODO: search + break; + + case 'z': + case 'Z': + //TODO: + break; + + default: + event.Skip(); + } + } event.Skip(); } @@ -942,20 +1018,21 @@ void ObjectGrid::paste_data( wxTextDataObject& text_data ) wxLogWarning(_L("one cell can only be copied to one or multiple cells in the same column")); } else { - split(buf, string_array); - wxString source_string = string_array[0]; - if (string_array.GetCount() <= 0) { - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(", can not split pasted data %1%")%buf; - return; - } - for ( int i = 0; i < dst_row_cnt; i++ ) - { - if (!this->IsReadOnly(dst_top_row+i, dst_left_col)) { - grid_table->SetValue(dst_top_row+i, dst_left_col, source_string); - grid_table->OnCellValueChanged(dst_top_row+i, dst_left_col); - } - } + split(buf, string_array); + wxString source_string = string_array[0]; + if (string_array.GetCount() <= 0) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(", can not split pasted data %1%") % buf; + return; + } + for (int i = 0; i < dst_row_cnt; i++) + { + if (!this->IsReadOnly(dst_top_row + i, dst_left_col)) { + grid_table->SetValue(dst_top_row + i, dst_left_col, source_string); + grid_table->OnCellValueChanged(dst_top_row + i, dst_left_col); + } + } } + } else { wxLogWarning(_L("multiple cells copy is not supported")); @@ -983,74 +1060,14 @@ void ObjectGrid::paste_data( wxTextDataObject& text_data ) void ObjectGrid::OnKeyUp( wxKeyEvent& event ) { - // see include/wx/defs.h enum wxKeyCode - int keyCode = event.GetKeyCode(); - int ctrlMask = wxMOD_CONTROL; - int shiftMask = wxMOD_SHIFT; - // Coordinates of the selected block to copy to clipboard. - wxGridBlockCoords selection; - wxTextDataObject text_data; - - if ((event.GetModifiers() & ctrlMask) != 0) { - // CTRL is pressed - switch (keyCode) { - case 'c': - case 'C': - { - // Check if we have any selected blocks and if we don't - // have too many of them. - const wxGridBlocks blocks = GetSelectedBlocks(); - wxGridBlocks::iterator iter = blocks.begin(); - if (iter == blocks.end()) - { - // No selection, copy just the current cell. - if (m_currentCellCoords == wxGridNoCellCoords) - { - // But we don't even have it -- nothing to do then. - event.Skip(); - break; - } - - selection = wxGridBlockCoords(GetGridCursorRow(), - GetGridCursorCol(), - GetGridCursorRow(), - GetGridCursorCol()); - } - else // We do have at least one selected block. - { - selection = *blocks.begin(); - - } - m_selected_block = selection; - break; - } - - case 'v': - case 'V': - // - wxTheClipboard->GetData(text_data); - paste_data(text_data); - - break; - - case 'f': - case 'F': - //TODO: search - break; - - case 'z': - case 'Z': - //TODO: - break; - - default: - event.Skip(); - } - } + event.Skip(); } -void ObjectGrid::OnChar( wxKeyEvent& event ) -{ +void ObjectGrid::OnChar( wxKeyEvent& event ) { + auto keycode = event.GetKeyCode(); + if (keycode >= 0x20 && keycode <= 0x7F) { + input_string = event.GetUnicodeKey(); + } event.Skip(); } @@ -1387,7 +1404,7 @@ void ObjectGridTable::update_volume_values_from_object(int row, int col) } else part_row->filaments = grid_row->filaments; - part_row->ori_filaments = grid_row->filaments; + //part_row->ori_filaments = grid_row->filaments; } else reload_part_data(part_row, grid_row, m_col_data[col]->category, global_config); @@ -1725,7 +1742,7 @@ wxString ObjectGridTable::convert_filament_string(int index, wxString& filament_ else result_str = filament_str; - result_str = ""; + //result_str = ""; return result_str; } @@ -1762,7 +1779,7 @@ void ObjectGridTable::init_cols(ObjectGrid *object_grid) //3th column: for object/volume name col = new ObjectGridCol(coString, "name", ObjectGridTable::category_all, false, false, true, false, wxALIGN_LEFT); - col->size = 200; + //col->size = 200; m_col_data.push_back(col); //object/volume extruder_id @@ -1774,7 +1791,7 @@ void ObjectGridTable::init_cols(ObjectGrid *object_grid) m_col_data.push_back(col); //reset icon for extruder_id - col = new ObjectGridCol(coEnum, "extruder_reset", ObjectGridTable::category_all, false, true, false, false, wxALIGN_CENTRE); + col = new ObjectGridCol(coString, "extruder_reset", ObjectGridTable::category_all, false, false, false, false, wxALIGN_CENTRE); m_col_data.push_back(col); //object layer height @@ -1825,8 +1842,8 @@ void ObjectGridTable::init_cols(ObjectGrid *object_grid) m_col_data.push_back(col); //object/volume speed - col = new ObjectGridCol(coFloat, "inner_wall_speed", L("Speed"), false, false, true, true, wxALIGN_LEFT); - col->size = object_grid->GetTextExtent(L("Inner wall speed")).x; + col = new ObjectGridCol(coFloat, "outer_wall_speed", L("Speed"), false, false, true, true, wxALIGN_LEFT); + col->size = object_grid->GetTextExtent(L("Outer wall speed")).x; m_col_data.push_back(col); //reset icon for speed @@ -1886,7 +1903,7 @@ void ObjectGridTable::construct_object_configs(ObjectGrid *object_grid) object_grid->filaments.value = 1; object_grid->config->set_key_value(m_col_data[col_filaments]->key, object_grid->filaments.clone()); } - object_grid->ori_filaments.value = 1; + //object_grid->ori_filaments.value = 1; object_grid->layer_height = *(get_object_config_value(global_config, object_grid->config, m_col_data[col_layer_height]->key)); object_grid->ori_layer_height = *(global_config.option(m_col_data[col_layer_height]->key)); @@ -1936,7 +1953,7 @@ void ObjectGridTable::construct_object_configs(ObjectGrid *object_grid) } else volume_grid->filaments = object_grid->filaments; - volume_grid->ori_filaments = object_grid->filaments; + //volume_grid->ori_filaments = object_grid->filaments; volume_grid->layer_height = *(get_volume_config_value(global_config, object_grid->config, volume_grid->config, m_col_data[col_layer_height]->key)); volume_grid->ori_layer_height = object_grid->layer_height; volume_grid->wall_loops = *(get_volume_config_value(global_config, object_grid->config, volume_grid->config, m_col_data[col_wall_loops]->key)); @@ -2179,10 +2196,17 @@ void ObjectGridTable::update_row_properties() //new wxGridCellChoiceEditor(grid_col->choice_count, grid_col->choices)); } break; - case coFloat: - grid_table->SetCellEditor(row, col, new GridCellTextEditor()); - grid_table->SetCellRenderer(row, col, new wxGridCellFloatRenderer(6,1)); - break; + case coFloat: { + grid_table->SetCellEditor(row, col, new GridCellTextEditor()); + if (col == ObjectGridTable::col_speed_perimeter) { + grid_table->SetCellRenderer(row, col, new wxGridCellFloatRenderer(6, 0)); + } + else { + grid_table->SetCellRenderer(row, col, new wxGridCellFloatRenderer(6, 2)); + } + + break; + } case coPercent: { grid_table->SetCellEditor(row, col, new GridCellTextEditor()); @@ -2195,7 +2219,7 @@ void ObjectGridTable::update_row_properties() } } else if (col == ObjectGridTable::col_name) { - grid_table->SetCellFont(row, col, Label::Body_13); + grid_table->SetCellFont(row, col, Label::Body_12); /*if (grid_row->row_type == ObjectGridTable::row_object) grid_table->SetCellFont(row, col, Label::Head_14); else @@ -2443,7 +2467,7 @@ void ObjectGridTable::OnSelectCell(int row, int col) { m_selected_cells.clear(); m_panel->m_side_window->Freeze(); - if (row == 0) { + if (row == 0 || col == col_filaments) { m_panel->m_object_settings->UpdateAndShow(row, false, false, false, nullptr, nullptr, std::string()); } else { @@ -2762,12 +2786,12 @@ void ObjectTablePanel::load_data() //m_object_grid->CreateGrid(rows, cols, wxGridSelectCells); #if HAS_COL_HEADER m_object_grid->SetColLabelAlignment(wxALIGN_LEFT, wxALIGN_CENTER); - + m_object_grid->SetColLabelValue(ObjectGridTable::col_printable, _L("Printable")); m_object_grid->SetColLabelValue(ObjectGridTable::col_printable_reset, ""); - m_object_grid->SetColLabelValue(ObjectGridTable::col_plate_index, _L("Plate")); + m_object_grid->SetColLabelValue(ObjectGridTable::col_plate_index, wxString::Format("%S%S", _L("Plate"), _L("(Sort)"))); /*m_object_grid->SetColLabelValue(ObjectGridTable::col_assemble_name, L("Module"));*/ - m_object_grid->SetColLabelValue(ObjectGridTable::col_name, _L("Name")); + m_object_grid->SetColLabelValue(ObjectGridTable::col_name, wxString::Format("%S%S", _L("Name"), _L("(Sort)"))); m_object_grid->SetColLabelValue(ObjectGridTable::col_filaments, _L("Filament")); m_object_grid->SetColLabelValue(ObjectGridTable::col_filaments_reset, ""); m_object_grid->SetColLabelValue(ObjectGridTable::col_layer_height, _L("Layer height")); @@ -2780,7 +2804,7 @@ void ObjectTablePanel::load_data() m_object_grid->SetColLabelValue(ObjectGridTable::col_enable_support_reset, ""); m_object_grid->SetColLabelValue(ObjectGridTable::col_brim_type, _L("Brim")); m_object_grid->SetColLabelValue(ObjectGridTable::col_brim_type_reset, ""); - m_object_grid->SetColLabelValue(ObjectGridTable::col_speed_perimeter, _L("Inner wall speed")); + m_object_grid->SetColLabelValue(ObjectGridTable::col_speed_perimeter, _L("Outer wall speed")); m_object_grid->SetColLabelValue(ObjectGridTable::col_speed_perimeter_reset, ""); m_object_grid->SetLabelFont(Label::Head_13); m_object_grid->SetLabelTextColour(wxColour(0x30,0x3a,0x3c)); @@ -2795,6 +2819,7 @@ void ObjectTablePanel::load_data() m_object_grid->EnableDragGridSize(false); m_object_grid->EnableDragRowSize(false); + /*set the first row as label*/ //format wxGridCellAttr *attr; @@ -2878,10 +2903,17 @@ void ObjectTablePanel::load_data() m_object_grid->SetCellRenderer(row, col, new wxGridCellChoiceRenderer()); } break; - case coFloat: - m_object_grid->SetCellEditor(row, col, new GridCellTextEditor()); - m_object_grid->SetCellRenderer(row, col, new wxGridCellFloatRenderer(6,1)); - break; + case coFloat: { + m_object_grid->SetCellEditor(row, col, new GridCellTextEditor()); + if (col == ObjectGridTable::col_speed_perimeter) { + m_object_grid->SetCellRenderer(row, col, new wxGridCellFloatRenderer(6, 0)); + } + else { + m_object_grid->SetCellRenderer(row, col, new wxGridCellFloatRenderer(6, 2)); + } + + break; + } case coPercent: { m_object_grid->SetCellEditor(row, col, new GridCellTextEditor()); @@ -2914,25 +2946,25 @@ void ObjectTablePanel::load_data() for (int i = 0; i < ObjectGridTable::col_max; i++) { switch (i) { - case ObjectGridTable::col_printable: { - m_object_grid->SetColSize(i, m_object_grid->GetColSize(i) - FromDIP(28)); - break; - } + /* case ObjectGridTable::col_printable: { + m_object_grid->SetColSize(i, m_object_grid->GetColSize(i) - FromDIP(28) - FromDIP(5)); + break; + }*/ - case ObjectGridTable::col_printable_reset: - m_object_grid->SetColSize(i, FromDIP(28)); - break; + case ObjectGridTable::col_printable_reset: + m_object_grid->SetColSize(i, FromDIP(0)); + break; case ObjectGridTable::col_name: - m_object_grid->SetColSize(i, FromDIP(100)); + m_object_grid->SetColSize(i, FromDIP(140)); break; - case ObjectGridTable::col_filaments: - m_object_grid->SetColSize(i, FromDIP(52)); - break; + /* case ObjectGridTable::col_filaments: + m_object_grid->SetColSize(i, FromDIP(55)); + break;*/ case ObjectGridTable::col_filaments_reset: - m_object_grid->SetColSize(i, FromDIP(28)); + m_object_grid->SetColSize(i, FromDIP(0)); break; case ObjectGridTable::col_layer_height: { @@ -3021,17 +3053,17 @@ void ObjectTablePanel::OnCellLeftClick( wxGridEvent& ev ) int row = ev.GetRow(); int col = ev.GetCol(); - ConfigOptionType type = coNone; - bool consumed = m_object_grid_table->OnCellLeftClick(row, col, type); + ConfigOptionType type = coNone; + bool consumed = m_object_grid_table->OnCellLeftClick(row, col, type); if (consumed) { - //m_object_grid->ClearSelection(); - //m_object_grid->SelectBlock(row, col-1, row, col-1, true); - return; + m_object_grid->ClearSelection(); + m_object_grid->SelectBlock(row, col-1, row, col-1, true); + //return; } - - consumed = m_object_grid->OnCellLeftClick(ev, row, col, type); - if (!consumed) - ev.Skip(); + m_object_grid->input_string = wxEmptyString; + ev.Skip(); + //consumed = m_object_grid->OnCellLeftClick(ev, row, col, type); + //if (!consumed) ev.Skip(); } void ObjectTablePanel::OnRowSize( wxGridSizeEvent& ev) @@ -3189,7 +3221,7 @@ ObjectTableDialog::ObjectTableDialog(wxWindow* parent, Plater* platerObj, Model m_main_sizer->Add(m_line_top, 0, wxEXPAND, 0); m_obj_panel = new ObjectTablePanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxEmptyString, m_plater, m_model); - m_obj_panel->SetBackgroundColour(wxColour(0x00,0xAE,0x42)); + m_obj_panel->SetBackgroundColour(*wxWHITE); //m_top_sizer->Add(m_obj_panel, 1, wxALL | wxEXPAND, 5); wxSize panel_size = m_obj_panel->get_init_size(); @@ -3211,12 +3243,13 @@ ObjectTableDialog::ObjectTableDialog(wxWindow* parent, Plater* platerObj, Model g_dialog_max_width = (panel_size.GetWidth() > g_max_size_from_parent.GetWidth())?g_max_size_from_parent.GetWidth():panel_size.GetWidth(); g_dialog_max_height = g_max_size_from_parent.GetHeight(); //g_dialog_max_height = (panel_size.GetHeight() > g_max_size_from_parent.GetHeight()) ? g_max_size_from_parent.GetHeight() : panel_size.GetHeight(); - this->SetMaxSize(wxSize(g_dialog_max_width, g_dialog_max_height)); + //this->SetMaxSize(wxSize(g_dialog_max_width, g_dialog_max_height)); //m_top_sizer->SetSizeHints(this); //this->SetSizer(m_top_sizer); //SetClientSize(m_panel->GetSize()); Bind(wxEVT_CLOSE_WINDOW, &ObjectTableDialog::OnClose, this); Bind(wxEVT_SIZE, &ObjectTableDialog::OnSize, this); + Bind(wxEVT_CHAR_HOOK, &ObjectTableDialog::OnText, this); //this->Layout(); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", created, this %1%, m_obj_panel %2%") %this % m_obj_panel; @@ -3283,19 +3316,22 @@ void ObjectTableDialog::OnClose(wxCloseEvent &evt) #endif } +void ObjectTableDialog::OnText(wxKeyEvent &evt) +{ + if (evt.GetKeyCode() != WXK_ESCAPE) { + evt.Skip(); + } +} + void ObjectTableDialog::OnSize(wxSizeEvent& event) { - //SetSize(wxSize(-1, FromDIP(480))); - //SetMinSize(wxSize(-1, FromDIP(480))); - //SetMaxSize(wxSize(-1, FromDIP(480))); - //return; - //wxSize new_size = event.GetSize(); - //if ((new_size.GetWidth() > g_dialog_max_width) || (new_size.GetHeight() > g_dialog_max_height)) { - // int width = (new_size.GetWidth() > g_dialog_max_width)?new_size.GetWidth():g_dialog_max_width; - // int height = (new_size.GetHeight() > g_dialog_max_height)?new_size.GetHeight():g_dialog_max_height; - // this->SetMaxSize(wxSize(width, height)); - //} - //event.Skip(); + wxSize new_size = event.GetSize(); + if ((new_size.GetWidth() > g_dialog_max_width) || (new_size.GetHeight() > g_dialog_max_height)) { + int width = (new_size.GetWidth() > g_dialog_max_width) ? new_size.GetWidth() : g_dialog_max_width; + int height = (new_size.GetHeight() > g_dialog_max_height) ? new_size.GetHeight() : g_dialog_max_height; + this->SetMaxSize(wxSize(width, height)); + } + event.Skip(); } // ---------------------------------------------------------------------------- @@ -3324,8 +3360,33 @@ void GridCellTextEditor::BeginEdit(int row, int col, wxGrid *grid) ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); auto val = table->GetValue(row, col); - Text()->GetTextCtrl()->SetValue(val); - Text()->SetFocus(); + + ObjectGrid* ogrid = dynamic_cast(grid); + + + if (!ogrid->input_string.empty()) { + Text()->GetTextCtrl()->SetValue(ogrid->input_string); + } + else { + Text()->GetTextCtrl()->SetValue(val); + } + Text()->SetFocus(); + Text()->GetTextCtrl()->SetInsertionPointEnd(); + + + m_control->Bind(wxEVT_TEXT_ENTER, [this, row, col, grid](wxCommandEvent &e) { + grid->HideCellEditControl(); + grid->SaveEditControlValue(); + e.Skip(); + }); + + m_control->Bind(wxEVT_CHAR_HOOK, [this, row, col, grid](wxKeyEvent &e) { + if (e.GetKeyCode() == WXK_ESCAPE) { + grid->HideCellEditControl(); + grid->SaveEditControlValue(); + } + e.Skip(); + }); } bool GridCellTextEditor::EndEdit(int row, int col, const wxGrid *grid, const wxString &WXUNUSED(oldval), wxString *newval) diff --git a/src/slic3r/GUI/GUI_ObjectTable.hpp b/src/slic3r/GUI/GUI_ObjectTable.hpp index 794ce4b876..b3a76dc6ef 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.hpp +++ b/src/slic3r/GUI/GUI_ObjectTable.hpp @@ -250,6 +250,10 @@ public: //set ObjectGridTable and ObjectTablePanel as friend friend class ObjectGridTable; friend class ObjectTablePanel; + + wxString input_string; + wxString m_cell_data; + protected: //void OnSize( wxSizeEvent& ); void OnKeyDown( wxKeyEvent& ); @@ -258,7 +262,6 @@ protected: private: wxDECLARE_EVENT_TABLE(); - wxGridBlockCoords m_selected_block; void paste_data( wxTextDataObject& text_data ); }; @@ -628,6 +631,7 @@ public: ~ObjectTableDialog(); void Popup(int obj_idx = -1, int vol_idx = -1, wxPoint position = wxDefaultPosition); void OnClose(wxCloseEvent &evt); + void OnText(wxKeyEvent &evt); void OnSize(wxSizeEvent& event); protected: diff --git a/src/slic3r/GUI/ParamsPanel.cpp b/src/slic3r/GUI/ParamsPanel.cpp index ed1d4a718e..2922f7bc99 100644 --- a/src/slic3r/GUI/ParamsPanel.cpp +++ b/src/slic3r/GUI/ParamsPanel.cpp @@ -232,11 +232,10 @@ ParamsPanel::ParamsPanel( wxWindow* parent, wxWindowID id, const wxPoint& pos, c m_compare_btn = new ScalableButton(m_top_panel, wxID_ANY, "compare", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true); m_compare_btn->SetToolTip(_L("Compare presets")); m_compare_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) { wxGetApp().mainframe->diff_dialog.show(); })); -#if !BBL_RELEASE_TO_PUBLIC + m_setting_btn = new ScalableButton(m_top_panel, wxID_ANY, "table", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true); m_setting_btn->SetToolTip(_L("View all object's settings")); m_setting_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { wxGetApp().plater()->PopupObjectTable(-1, -1, {0, 0}); }); -#endif m_highlighter.set_timer_owner(this, 0); this->Bind(wxEVT_TIMER, [this](wxTimerEvent &) @@ -331,10 +330,9 @@ void ParamsPanel::create_layout() m_mode_sizer->Add( m_title_view, 0, wxALIGN_CENTER ); m_mode_sizer->AddSpacer(FromDIP(9)); m_mode_sizer->Add( m_mode_view, 0, wxALIGN_CENTER ); -#if !BBL_RELEASE_TO_PUBLIC m_mode_sizer->AddSpacer(FromDIP(16)); m_mode_sizer->Add( m_setting_btn, 0, wxALIGN_CENTER ); -#endif + m_mode_sizer->AddSpacer(FromDIP(16)); m_mode_sizer->Add( m_compare_btn, 0, wxALIGN_CENTER ); @@ -591,9 +589,7 @@ void ParamsPanel::update_mode() void ParamsPanel::msw_rescale() { if (m_process_icon) m_process_icon->msw_rescale(); -#if !BBL_RELEASE_TO_PUBLIC if (m_setting_btn) m_setting_btn->msw_rescale(); -#endif if (m_search_btn) m_search_btn->msw_rescale(); if (m_compare_btn) m_compare_btn->msw_rescale(); m_left_sizer->SetMinSize(wxSize(40 * em_unit(this), -1)); From f5c7919424fc5ad296baa39b07a6cf3a8a668107 Mon Sep 17 00:00:00 2001 From: tao wang Date: Sat, 3 Sep 2022 16:13:03 +0800 Subject: [PATCH 15/76] FIX:update new icon of print operation Change-Id: I0ae3402710c37875d5443f4ea70e0d8da8572c44 --- resources/images/print_control_pause.svg | 6 +++--- resources/images/print_control_pause_hover.svg | 6 +++--- resources/images/print_control_resume.svg | 4 ++-- resources/images/print_control_resume_hover.svg | 11 ++--------- resources/images/print_control_stop.svg | 4 ++-- resources/images/print_control_stop_hover.svg | 4 ++-- 6 files changed, 14 insertions(+), 21 deletions(-) diff --git a/resources/images/print_control_pause.svg b/resources/images/print_control_pause.svg index 7625ec8020..6f2759b089 100644 --- a/resources/images/print_control_pause.svg +++ b/resources/images/print_control_pause.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/resources/images/print_control_pause_hover.svg b/resources/images/print_control_pause_hover.svg index 27be647ccb..0753b08c7f 100644 --- a/resources/images/print_control_pause_hover.svg +++ b/resources/images/print_control_pause_hover.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/resources/images/print_control_resume.svg b/resources/images/print_control_resume.svg index 292da3d3b3..bae96c65e4 100644 --- a/resources/images/print_control_resume.svg +++ b/resources/images/print_control_resume.svg @@ -1,3 +1,3 @@ - - + + diff --git a/resources/images/print_control_resume_hover.svg b/resources/images/print_control_resume_hover.svg index bd25d224d8..9ee11ccc66 100644 --- a/resources/images/print_control_resume_hover.svg +++ b/resources/images/print_control_resume_hover.svg @@ -1,10 +1,3 @@ - - - - - - - - - + + diff --git a/resources/images/print_control_stop.svg b/resources/images/print_control_stop.svg index 8fd730fc63..1201928163 100644 --- a/resources/images/print_control_stop.svg +++ b/resources/images/print_control_stop.svg @@ -1,3 +1,3 @@ - - + + diff --git a/resources/images/print_control_stop_hover.svg b/resources/images/print_control_stop_hover.svg index b75770370c..267d913ebc 100644 --- a/resources/images/print_control_stop_hover.svg +++ b/resources/images/print_control_stop_hover.svg @@ -1,3 +1,3 @@ - - + + From fbb9dfc41a998cab604b6c1bdcd99b3eb84b048e Mon Sep 17 00:00:00 2001 From: tao wang Date: Sat, 3 Sep 2022 18:19:45 +0800 Subject: [PATCH 16/76] FIX:amsmappingpop dialog adjustments on macos Change-Id: Ideeb1b8536efeaf0fedefa0acf91c386a2c76b96 --- src/slic3r/GUI/AmsMappingPopup.cpp | 10 ++++++---- src/slic3r/GUI/SelectMachine.cpp | 15 +++++++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index d24338c9d0..6999ce0658 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -526,7 +526,7 @@ AmsMapingTipPopup::AmsMapingTipPopup(wxWindow *parent) m_sizer_body->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(20)); - m_panel_enable_ams = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(200, -1), wxTAB_TRAVERSAL); + m_panel_enable_ams = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(220), -1), wxTAB_TRAVERSAL); m_panel_enable_ams->SetBackgroundColour(*wxWHITE); wxBoxSizer *sizer_enable_ams = new wxBoxSizer(wxVERTICAL); @@ -536,8 +536,9 @@ AmsMapingTipPopup::AmsMapingTipPopup(wxWindow *parent) sizer_enable_ams->Add(m_title_enable_ams, 0, 0, 0); m_tip_enable_ams = new wxStaticText(m_panel_enable_ams, wxID_ANY, _L("Print with filaments in the AMS"), wxDefaultPosition, wxDefaultSize, 0); + m_tip_enable_ams->SetMinSize(wxSize(FromDIP(200), FromDIP(50))); + m_tip_enable_ams->Wrap(FromDIP(200)); m_tip_enable_ams->SetBackgroundColour(*wxWHITE); - m_tip_enable_ams->Wrap(-1); sizer_enable_ams->Add(m_tip_enable_ams, 0, wxTOP, 8); wxBoxSizer *sizer_enable_ams_img; @@ -558,7 +559,7 @@ AmsMapingTipPopup::AmsMapingTipPopup(wxWindow *parent) m_sizer_body->Add(m_split_lines, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, FromDIP(10)); - m_panel_disable_ams = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(200, -1), wxTAB_TRAVERSAL); + m_panel_disable_ams = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(220), -1), wxTAB_TRAVERSAL); m_panel_disable_ams->SetBackgroundColour(*wxWHITE); wxBoxSizer *sizer_disable_ams; sizer_disable_ams = new wxBoxSizer(wxVERTICAL); @@ -569,8 +570,9 @@ AmsMapingTipPopup::AmsMapingTipPopup(wxWindow *parent) sizer_disable_ams->Add(m_title_disable_ams, 0, 0, 0); m_tip_disable_ams = new wxStaticText(m_panel_disable_ams, wxID_ANY, _L("Print with the filament mounted on the back of chassis"), wxDefaultPosition, wxDefaultSize, 0); + m_tip_disable_ams->SetMinSize(wxSize(FromDIP(200), FromDIP(50))); + m_tip_disable_ams->Wrap(FromDIP(200)); m_tip_disable_ams->SetBackgroundColour(*wxWHITE); - m_tip_disable_ams->Wrap(-1); sizer_disable_ams->Add(m_tip_disable_ams, 0, wxTOP, FromDIP(8)); wxBoxSizer *sizer_disable_ams_img; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 190df5a496..d22677c95f 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -931,7 +931,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_statictext_printer_msg->SetFont(::Label::Body_13); m_statictext_printer_msg->Hide(); - m_sizer_select = new wxGridSizer(1, 2, 0, 0); + m_sizer_select = new wxGridSizer(0, 2, 0, 0); select_bed = create_item_checkbox(_L("Bed Leveling"), this, _L("Bed Leveling"), "bed_leveling"); select_flow = create_item_checkbox(_L("Flow Calibration"), this, _L("Flow Calibration"), "flow_cali"); select_use_ams = create_ams_checkbox(_L("Enable AMS"), this, _L("Enable AMS")); @@ -1081,13 +1081,20 @@ wxWindow *SelectMachineDialog::create_ams_checkbox(wxString title, wxWindow *par img_ams_tip->Bind(wxEVT_ENTER_WINDOW, [this, img_ams_tip](auto &e) { wxPoint pos = img_ams_tip->ClientToScreen(wxPoint(0, 0)); pos.y += img_ams_tip->GetRect().height; - m_mapping_tip_popup.Position(pos, wxSize(0, 0)); + m_mapping_tip_popup.Position(pos, wxSize(0,0)); m_mapping_tip_popup.Popup(); }); + img_ams_tip->Bind(wxEVT_LEAVE_WINDOW, [this, img_ams_tip](wxMouseEvent &e) { + auto region = m_mapping_tip_popup.GetClientRect(); - img_ams_tip->Bind(wxEVT_LEAVE_WINDOW, [this, img_ams_tip](auto &e) { - m_mapping_tip_popup.Dismiss(); + if(e.GetPosition().x > region.GetLeftTop().x && e.GetPosition().y > region.GetLeftTop().y && e.GetPosition().x < region.GetRightBottom().x && e.GetPosition().x < region.GetRightBottom().y) + ; + else + m_mapping_tip_popup.Dismiss(); }); + m_mapping_tip_popup.Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) { + m_mapping_tip_popup.Dismiss(); + }); checkbox->SetSizer(sizer_checkbox); checkbox->Layout(); From 53be2ee55457c1684be2adbb63427db28fbb4a3b Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Fri, 2 Sep 2022 10:29:08 +0800 Subject: [PATCH 17/76] FIX: fix the topmost iron issue Signed-off-by: qing.zhang Change-Id: I79a034f188aaa1ef4528b944c725008f926b7b1f --- src/libslic3r/GCode/GCodeProcessor.cpp | 16 +++++++--------- src/libslic3r/GCode/GCodeProcessor.hpp | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index f3ec275291..a7dc0c369f 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -2469,7 +2469,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) AxisCoords delta_pos; for (unsigned char a = X; a <= E; ++a) { delta_pos[a] = m_end_position[a] - m_start_position[a]; - max_abs_delta = std::max(max_abs_delta, std::abs(delta_pos[a])); + max_abs_delta = std::max(max_abs_delta, std::abs(delta_pos[a])); } // no displacement, return @@ -2575,7 +2575,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) minimum_feedrate(static_cast(i), m_feedrate); //BBS: calculeta enter and exit direction - curr.enter_direction = { delta_pos[X], delta_pos[Y], delta_pos[Z] }; + curr.enter_direction = { static_cast(delta_pos[X]), static_cast(delta_pos[Y]), static_cast(delta_pos[Z]) }; float norm = curr.enter_direction.norm(); if (!is_extrusion_only_move(delta_pos)) curr.enter_direction = curr.enter_direction / norm; @@ -2624,8 +2624,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) curr.abs_axis_feedrate[a] = std::abs(curr.axis_feedrate[a]); if (curr.abs_axis_feedrate[a] != 0.0f) { float axis_max_feedrate = get_axis_max_feedrate(static_cast(i), static_cast(a)); - if (axis_max_feedrate != 0.0f) - min_feedrate_factor = std::min(min_feedrate_factor, axis_max_feedrate / curr.abs_axis_feedrate[a]); + if (axis_max_feedrate != 0.0f) min_feedrate_factor = std::min(min_feedrate_factor, axis_max_feedrate / curr.abs_axis_feedrate[a]); } } //BBS: update curr.feedrate @@ -2914,6 +2913,7 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line) EMoveType type = move_type(delta_pos[E]); + float delta_xyz = std::sqrt(sqr(arc_length) + sqr(delta_pos[Z])); if (type == EMoveType::Extrude) { float volume_extruded_filament = area_filament_cross_section * delta_pos[E]; @@ -3020,8 +3020,7 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line) curr.abs_axis_feedrate[a] = std::abs(curr.axis_feedrate[a]); if (curr.abs_axis_feedrate[a] != 0.0f) { float axis_max_feedrate = get_axis_max_feedrate(static_cast(i), static_cast(a)); - if (axis_max_feedrate != 0.0f) - min_feedrate_factor = std::min(min_feedrate_factor, axis_max_feedrate / curr.abs_axis_feedrate[a]); + if (axis_max_feedrate != 0.0f) min_feedrate_factor = std::min(min_feedrate_factor, axis_max_feedrate / curr.abs_axis_feedrate[a]); } } curr.feedrate *= min_feedrate_factor; @@ -3048,8 +3047,7 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line) if (axis_acc[a] != 0.0f) { float axis_max_acceleration = get_axis_max_acceleration(static_cast(i), static_cast(a)); - if (axis_max_acceleration != 0.0f && axis_acc[a] > axis_max_acceleration) - min_acc_factor = std::min(min_acc_factor, axis_max_acceleration / axis_acc[a]); + if (axis_max_acceleration != 0.0f && axis_acc[a] > axis_max_acceleration) min_acc_factor = std::min(min_acc_factor, axis_max_acceleration / axis_acc[a]); } } block.acceleration = acceleration * min_acc_factor; @@ -3697,7 +3695,7 @@ void GCodeProcessor::store_move_vertex(EMoveType type, EMovePathType path_type) m_cp_color.current, //BBS: add plate's offset to the rendering vertices Vec3f(m_end_position[X] + m_x_offset, m_end_position[Y] + m_y_offset, m_processing_start_custom_gcode ? m_first_layer_height : m_end_position[Z]) + m_extruder_offsets[m_extruder_id], - m_end_position[E] - m_start_position[E], + static_cast(m_end_position[E] - m_start_position[E]), m_feedrate, m_width, m_height, diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index abfe6054eb..52bcf66ca5 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -219,7 +219,7 @@ namespace Slic3r { #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING private: - using AxisCoords = std::array; + using AxisCoords = std::array; using ExtruderColors = std::vector; using ExtruderTemps = std::vector; From 65cbccb2199edfbddea3c12ce93e72280357b5ff Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Thu, 1 Sep 2022 14:43:15 +0800 Subject: [PATCH 18/76] NEW:add custom-gcode before first layer Change-Id: I168e3038cb7d6850a5d6c568f348fed8000a915a --- src/libslic3r/GCode/GCodeProcessor.cpp | 3 +- src/libslic3r/GCode/GCodeProcessor.hpp | 1 + src/slic3r/GUI/IMSlider.cpp | 43 ++++++++++++++++++++------ src/slic3r/GUI/IMSlider.hpp | 1 + 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index a7dc0c369f..ca2111d913 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -1192,6 +1192,7 @@ void GCodeProcessor::reset() } m_extruded_last_z = 0.0f; + m_zero_layer_height = 0.0f; m_first_layer_height = 0.0f; m_processing_start_custom_gcode = false; m_g1_line_id = 0; @@ -3694,7 +3695,7 @@ void GCodeProcessor::store_move_vertex(EMoveType type, EMovePathType path_type) m_extruder_id, m_cp_color.current, //BBS: add plate's offset to the rendering vertices - Vec3f(m_end_position[X] + m_x_offset, m_end_position[Y] + m_y_offset, m_processing_start_custom_gcode ? m_first_layer_height : m_end_position[Z]) + m_extruder_offsets[m_extruder_id], + Vec3f(m_end_position[X] + m_x_offset, m_end_position[Y] + m_y_offset, m_processing_start_custom_gcode ? m_zero_layer_height : m_end_position[Z]) + m_extruder_offsets[m_extruder_id], static_cast(m_end_position[E] - m_start_position[E]), m_feedrate, m_width, diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 52bcf66ca5..686c861606 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -595,6 +595,7 @@ namespace Slic3r { ExtruderTemps m_extruder_temps; float m_extruded_last_z; float m_first_layer_height; // mm + float m_zero_layer_height; // mm bool m_processing_start_custom_gcode; unsigned int m_g1_line_id; unsigned int m_layer_id; diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index 7bda99eb88..b9aab59c13 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -824,12 +824,14 @@ void IMSlider::draw_colored_band(const ImRect& groove, const ImRect& slideable_r //cover round corner ImGui::RenderFrame(ImVec2(band_rc.Min.x, band_rc.Max.y - band_rc.GetWidth() * 0.5), band_rc.Max, clr, false); }; - //draw colored band - ImRect band_rect(main_band); + auto draw_main_band = [&main_band, this](const ImU32& clr) { + ImGui::RenderFrame(main_band.Min, main_band.Max, clr, false, main_band.GetWidth() * 0.5); + }; + //draw main colored band const int default_color_idx = m_mode == MultiAsSingle ? std::max(m_only_extruder - 1, 0) : 0; std::arrayrgba = decode_color_to_float_array(m_extruder_colors[default_color_idx]); ImU32 band_clr = IM_COL32(rgba[0] * 255.0f, rgba[1] * 255.0f, rgba[2] * 255.0f, rgba[3] * 255.0f); - ImGui::RenderFrame(band_rect.Min, band_rect.Max, band_clr, false, band_rect.GetWidth() * 0.5); + draw_main_band(band_clr); static float tick_pos; std::set::const_iterator tick_it = m_ticks.ticks.begin(); @@ -841,15 +843,17 @@ void IMSlider::draw_colored_band(const ImRect& groove, const ImRect& slideable_r if (tick_it->type == ToolChange) { if ((m_mode == SingleExtruder) || (m_mode == MultiAsSingle)) { - //TODO:band_rect width need to be ajusted - band_rect = ImRect(main_band.Min, ImVec2(main_band.Max.x, tick_pos)); + ImRect band_rect = ImRect(main_band.Min, ImVec2(main_band.Max.x, tick_pos)); const std::string clr_str = m_mode == SingleExtruder ? tick_it->color : get_color_for_tool_change_tick(tick_it); if (!clr_str.empty()) { std::arrayrgba = decode_color_to_float_array(clr_str); ImU32 band_clr = IM_COL32(rgba[0] * 255.0f, rgba[1] * 255.0f, rgba[2] * 255.0f, rgba[3] * 255.0f); - draw_band(band_clr, band_rect); + if (tick_it->tick == 0) + draw_main_band(band_clr); + else + draw_band(band_clr, band_rect); } } } @@ -1255,7 +1259,15 @@ void IMSlider::render_menu() ImGui::PushStyleVar(ImGuiStyleVar_::ImGuiStyleVar_ChildRounding, 4.0f * m_scale); if (ImGui::BeginPopup("slider_menu_popup")) { - if(menu_item_with_icon(_u8L("Add Pause").c_str(), "")) { add_code_as_tick(PausePrint); } + if ((m_selection == ssLower && GetLowerValueD() == m_zero_layer_height) || (m_selection == ssHigher && GetHigherValueD() == m_zero_layer_height)) + { + menu_item_with_icon(_u8L("Add Pause").c_str(), "", ImVec2(0, 0), 0, false, false); + }else + { + if (menu_item_with_icon(_u8L("Add Pause").c_str(), "")) { + add_code_as_tick(PausePrint); + } + } //BBS render this menu item only when extruder_num > 1 if (extruder_num > 1) { @@ -1348,12 +1360,23 @@ std::string IMSlider::get_label(int tick, LabelType label_type) } char layer_height[64]; - ::sprintf(layer_height, "%.2f", m_values.empty() ? m_label_koef * value : m_values[value]); + m_values[value] == m_zero_layer_height ? + ::sprintf(layer_height, "") : + ::sprintf(layer_height, "%.2f", m_values.empty() ? m_label_koef * value : m_values[value]); if (label_type == ltHeight) return std::string(layer_height); if (label_type == ltHeightWithLayer) { - size_t layer_number = m_is_wipe_tower ? get_layer_number(value, label_type) + 1 : (m_values.empty() ? value : value + 1); char buffer[64]; - ::sprintf(buffer, "%5s\n%5s", std::to_string(layer_number).c_str(), layer_height); + size_t layer_number; + if (m_values[GetMinValueD()] == m_zero_layer_height) { + layer_number = m_is_wipe_tower ? get_layer_number(value, label_type): (m_values.empty() ? value : value); + m_values[value] == m_zero_layer_height ? + ::sprintf(buffer, "%5s", std::to_string(layer_number).c_str()) : + ::sprintf(buffer, "%5s\n%5s", std::to_string(layer_number).c_str(), layer_height); + } + else { + layer_number = m_is_wipe_tower ? get_layer_number(value, label_type) + 1 : (m_values.empty() ? value : value + 1); + ::sprintf(buffer, "%5s\n%5s", std::to_string(layer_number).c_str(), layer_height); + } return std::string(buffer); } } diff --git a/src/slic3r/GUI/IMSlider.hpp b/src/slic3r/GUI/IMSlider.hpp index c30c7451cf..0fffbb2a69 100644 --- a/src/slic3r/GUI/IMSlider.hpp +++ b/src/slic3r/GUI/IMSlider.hpp @@ -355,6 +355,7 @@ private: long m_extra_style; float m_label_koef{1.0}; + float m_zero_layer_height = 0.0f; std::vector m_values; TickCodeInfo m_ticks; std::vector m_layers_times; From ee16e75a9c2751b898223162f3322772ed87aa87 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Mon, 5 Sep 2022 10:04:37 +0800 Subject: [PATCH 19/76] ENH: move overhang fan speed to advanced group Show these two settings in advanced mode Signed-off-by: salt.wei Change-Id: Ic7ef16ef3a9940d81839cce15de05bf6e32d9315 --- src/libslic3r/PrintConfig.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 42f1ef8453..ad4b89715d 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -476,7 +476,7 @@ void PrintConfigDef::init_fff_params() def->sidetext = L("%"); def->min = 0; def->max = 100; - def->mode = comDevelop; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionInts { 100 }); def = this->add("overhang_fan_threshold", coEnums); @@ -485,7 +485,7 @@ void PrintConfigDef::init_fff_params() "Expressed as percentage which indicides how much width of the line without support from lower layer"); def->sidetext = L(""); def->enum_keys_map = &s_keys_map_OverhangFanThreshold; - def->mode = comDevelop; + def->mode = comAdvanced; def->enum_values.emplace_back("5%"); def->enum_values.emplace_back("25%"); def->enum_values.emplace_back("50%"); From 93b26be0249b2238afa91b554b9909d2aa1218d7 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Mon, 5 Sep 2022 09:59:31 +0800 Subject: [PATCH 20/76] ENH: update ams mapping result after changing use_ams checkbox popup axis tips after axis action Change-Id: Iadae7e645d4718dc80264f5d1f98b16edcfb9cbb --- src/slic3r/GUI/SelectMachine.cpp | 17 +++++++++++++--- src/slic3r/GUI/StatusPanel.cpp | 35 ++++++++++++++++---------------- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index d22677c95f..50933a9727 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1103,7 +1103,7 @@ wxWindow *SelectMachineDialog::create_ams_checkbox(wxString title, wxWindow *par checkbox->SetToolTip(tooltip); text->SetToolTip(tooltip); - text->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &) { + text->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent & event) { ams_check->SetValue(ams_check->GetValue() ? false : true); }); return checkbox; @@ -1200,6 +1200,16 @@ void SelectMachineDialog::finish_mode() void SelectMachineDialog::sync_ams_mapping_result(std::vector &result) { + if (result.empty()) { + BOOST_LOG_TRIVIAL(trace) << "ams_mapping result is empty"; + for (auto it = m_materialList.begin(); it != m_materialList.end(); it++) { + wxString ams_id = "-"; + wxColour ams_col = wxColour(0xCE, 0xCE, 0xCE); + it->second->item->set_ams_info(ams_col, ams_id); + } + return; + } + for (auto f = result.begin(); f != result.end(); f++) { BOOST_LOG_TRIVIAL(trace) << "ams_mapping f id = " << f->id << ", tray_id = " << f->tray_id << ", color = " << f->color << ", type = " << f->type; @@ -1470,7 +1480,7 @@ void SelectMachineDialog::show_status(PrintDialogStatus status, std::vectorams_support_use_ams) { if (!ams_check->GetValue()) { m_ams_mapping_result.clear(); + sync_ams_mapping_result(m_ams_mapping_result); show_status(PrintDialogStatus::PrintStatusDisableAms); return; } @@ -2259,7 +2270,7 @@ void SelectMachineDialog::set_default() pos.y += item->GetRect().height; m_mapping_popup.Position(pos, wxSize(0, 0)); - if (obj_ && obj_->has_ams()) { + if (obj_ && obj_->has_ams() && ams_check->GetValue()) { m_mapping_popup.set_current_filament_id(extruder); m_mapping_popup.set_tag_texture(materials[extruder]); m_mapping_popup.update_ams_data(obj_->amsList); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index cc6c81c106..b70311bd7d 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1950,6 +1950,15 @@ void StatusPanel::reset_printing_values() void StatusPanel::on_axis_ctrl_xy(wxCommandEvent &event) { if (!obj) return; + if (event.GetInt() == 0) { obj->command_axis_control("Y", 1.0, 10.0f, 3000); } + if (event.GetInt() == 1) { obj->command_axis_control("X", 1.0, -10.0f, 3000); } + if (event.GetInt() == 2) { obj->command_axis_control("Y", 1.0, -10.0f, 3000); } + if (event.GetInt() == 3) { obj->command_axis_control("X", 1.0, 10.0f, 3000); } + if (event.GetInt() == 4) { obj->command_axis_control("Y", 1.0, 1.0f, 3000); } + if (event.GetInt() == 5) { obj->command_axis_control("X", 1.0, -1.0f, 3000); } + if (event.GetInt() == 6) { obj->command_axis_control("Y", 1.0, -1.0f, 3000); } + if (event.GetInt() == 7) { obj->command_axis_control("X", 1.0, 1.0f, 3000); } + if (event.GetInt() == 8) { obj->command_go_home(); } //check is at home if (event.GetInt() == 1 @@ -1961,25 +1970,17 @@ void StatusPanel::on_axis_ctrl_xy(wxCommandEvent &event) show_recenter_dialog(); return; } - } else if (event.GetInt() == 0 - || event.GetInt() == 2 - || event.GetInt() == 4 - || event.GetInt() == 6) { + } + else if (event.GetInt() == 0 + || event.GetInt() == 2 + || event.GetInt() == 4 + || event.GetInt() == 6) { if (!obj->is_axis_at_home("Y")) { BOOST_LOG_TRIVIAL(info) << "axis y is not at home"; show_recenter_dialog(); return; } } - if (event.GetInt() == 0) { obj->command_axis_control("Y", 1.0, 10.0f, 3000); } - if (event.GetInt() == 1) { obj->command_axis_control("X", 1.0, -10.0f, 3000); } - if (event.GetInt() == 2) { obj->command_axis_control("Y", 1.0, -10.0f, 3000); } - if (event.GetInt() == 3) { obj->command_axis_control("X", 1.0, 10.0f, 3000); } - if (event.GetInt() == 4) { obj->command_axis_control("Y", 1.0, 1.0f, 3000); } - if (event.GetInt() == 5) { obj->command_axis_control("X", 1.0, -1.0f, 3000); } - if (event.GetInt() == 6) { obj->command_axis_control("Y", 1.0, -1.0f, 3000); } - if (event.GetInt() == 7) { obj->command_axis_control("X", 1.0, 1.0f, 3000); } - if (event.GetInt() == 8) { obj->command_go_home(); } } bool StatusPanel::check_axis_z_at_home(MachineObject* obj) @@ -1998,36 +1999,36 @@ bool StatusPanel::check_axis_z_at_home(MachineObject* obj) void StatusPanel::on_axis_ctrl_z_up_10(wxCommandEvent &event) { if (obj) { + obj->command_axis_control("Z", 1.0, -10.0f, 900); if (!check_axis_z_at_home(obj)) return; - obj->command_axis_control("Z", 1.0, -10.0f, 900); } } void StatusPanel::on_axis_ctrl_z_up_1(wxCommandEvent &event) { if (obj) { + obj->command_axis_control("Z", 1.0, -1.0f, 900); if (!check_axis_z_at_home(obj)) return; - obj->command_axis_control("Z", 1.0, -1.0f, 900); } } void StatusPanel::on_axis_ctrl_z_down_1(wxCommandEvent &event) { if (obj) { + obj->command_axis_control("Z", 1.0, 1.0f, 900); if (!check_axis_z_at_home(obj)) return; - obj->command_axis_control("Z", 1.0, 1.0f, 900); } } void StatusPanel::on_axis_ctrl_z_down_10(wxCommandEvent &event) { if (obj) { + obj->command_axis_control("Z", 1.0, 10.0f, 900); if (!check_axis_z_at_home(obj)) return; - obj->command_axis_control("Z", 1.0, 10.0f, 900); } } From 0a1f3df697e1347f3d2179ae3254397dc4076aef Mon Sep 17 00:00:00 2001 From: Stone Li Date: Mon, 5 Sep 2022 15:03:43 +0800 Subject: [PATCH 21/76] FIX: fix display error in UpgradePanel set to default value when monitor status is DISCONNECTED or NO_PRINTER Change-Id: I48b9f44e9744794cfaaed32c316b7f3866cf76fd Signed-off-by: Stone Li --- src/slic3r/GUI/Monitor.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index cc286218c9..245ca07bda 100644 --- a/src/slic3r/GUI/Monitor.cpp +++ b/src/slic3r/GUI/Monitor.cpp @@ -518,6 +518,9 @@ void MonitorPanel::show_status(int status) m_connection_info->Show(); m_connection_info->SetBackgroundColor(wxColour(255, 111, 0)); m_connection_info->SetBorderColor(wxColour(255, 111, 0)); +#if !BBL_RELEASE_TO_PUBLIC + m_upgrade_panel->update(nullptr); +#endif } else if ((status & (int) MonitorStatus::MONITOR_NORMAL) != 0) { m_connection_info->Hide(); } else if ((status & (int) MonitorStatus::MONITOR_CONNECTING) != 0) { @@ -535,6 +538,9 @@ void MonitorPanel::show_status(int status) m_status_info_panel->show_status(status); m_tabpanel->Refresh(); m_tabpanel->Layout(); +#if !BBL_RELEASE_TO_PUBLIC + m_upgrade_panel->update(nullptr); +#endif } else if (((status & (int)MonitorStatus::MONITOR_NORMAL) != 0) || ((status & (int)MonitorStatus::MONITOR_DISCONNECTED) != 0) || ((status & (int) MonitorStatus::MONITOR_DISCONNECTED_SERVER) != 0) From 3fb942077c1d75e9e06b0f9343bd1cf1bc9296af Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 5 Sep 2022 15:07:57 +0800 Subject: [PATCH 22/76] FIX:AMSMaterialSetting dialog 1.Set dialog readonly when printing 2.replace comboBox with text when set readonly Change-Id: Ic9d9570f3984088550b70628f4acb33c83108dde --- src/slic3r/GUI/AMSMaterialsSetting.cpp | 144 ++++++++++++------------- src/slic3r/GUI/AMSMaterialsSetting.hpp | 2 +- 2 files changed, 73 insertions(+), 73 deletions(-) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 9105b74b44..1cf168ce94 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -44,6 +44,16 @@ void AMSMaterialsSetting::create() #endif m_sizer_filament->Add(COMBOBOX_FILAMENT, 1, wxALIGN_CENTER, 0); + + m_readonly_filament = new TextInput(this, wxEmptyString, "", "", wxDefaultPosition, AMS_MATERIALS_SETTING_COMBOX_WIDTH, wxTE_READONLY); + m_readonly_filament->SetBorderColor(StateColor(std::make_pair(0xDBDBDB, (int)StateColor::Focused), std::make_pair(0x00AE42, (int)StateColor::Hovered), + std::make_pair(0xDBDBDB, (int)StateColor::Normal))); + m_readonly_filament->GetTextCtrl()->Bind(wxEVT_SET_FOCUS, [](auto& e) { + ; + }); + m_sizer_filament->Add(m_readonly_filament, 1, wxALIGN_CENTER, 0); + m_readonly_filament->Hide(); + wxBoxSizer *m_sizer_colour = new wxBoxSizer(wxHORIZONTAL); m_title_colour = new wxStaticText(this, wxID_ANY, _L("Colour"), wxDefaultPosition, wxSize(AMS_MATERIALS_SETTING_LABEL_WIDTH, -1), 0); @@ -284,21 +294,12 @@ void AMSMaterialsSetting::update() void AMSMaterialsSetting::enable_confirm_button(bool en) { - if (m_is_third) m_button_confirm->Show(en); - - //if (!en) { - // if (m_button_confirm->IsEnabled()) { - // m_button_confirm->Disable(); - // m_button_confirm->SetBackgroundColor(wxColour(0x90, 0x90, 0x90)); - // m_button_confirm->SetBorderColor(wxColour(0x90, 0x90, 0x90)); - // } - //} else { - // if (!m_button_confirm->IsEnabled()) { - // m_button_confirm->Enable(); - // m_button_confirm->SetBackgroundColor(m_btn_bg_green); - // m_button_confirm->SetBorderColor(m_btn_bg_green); - // } - //} + if (!m_is_third) return; + else { + m_button_confirm->Show(en); + COMBOBOX_FILAMENT->Show(en); + m_readonly_filament->Show(!en); + } } void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) @@ -351,7 +352,7 @@ void AMSMaterialsSetting::set_color(wxColour color) void AMSMaterialsSetting::on_clr_picker(wxCommandEvent & event) { - if(!m_is_third) + if(!m_is_third || obj->is_in_printing() || obj->can_resume()) return; auto clr_dialog = new wxColourDialog(this, m_clrData); show_flag = true; @@ -379,26 +380,23 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi m_button_confirm->Hide(); m_sn_number->SetLabel(sn); m_panel_SN->Show(); - -#ifdef __APPLE__ - wxArrayString filament_only; - filament_only.push_back(filament); - COMBOBOX_FILAMENT->Set(filament_only); -#else - COMBOBOX_FILAMENT->Set(wxArrayString()); -#endif - COMBOBOX_FILAMENT->SetValue(filament); - + COMBOBOX_FILAMENT->Hide(); + m_readonly_filament->Show(); + m_readonly_filament->GetTextCtrl()->SetLabel("Bambu " + filament); m_input_nozzle_min->GetTextCtrl()->SetValue(temp_min); m_input_nozzle_max->GetTextCtrl()->SetValue(temp_max); Layout(); Fit(); + update(); ShowModal(); return; } + m_button_confirm->Show(); m_panel_SN->Hide(); + COMBOBOX_FILAMENT->Show(); + m_readonly_filament->Hide(); Layout(); Fit(); @@ -407,66 +405,68 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi wxArrayString filament_items; std::set filament_id_set; - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - if (preset_bundle) { - BOOST_LOG_TRIVIAL(trace) << "system_preset_bundle filament number=" << preset_bundle->filaments.size(); - for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + if (preset_bundle) { + BOOST_LOG_TRIVIAL(trace) << "system_preset_bundle filament number=" << preset_bundle->filaments.size(); + for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { + // filter by system preset + if (!filament_it->is_system) continue; + + for (auto printer_it = preset_bundle->printers.begin(); printer_it != preset_bundle->printers.end(); printer_it++) { // filter by system preset - if (!filament_it->is_system) continue; + if (!printer_it->is_system) continue; + // get printer_model + ConfigOption* printer_model_opt = printer_it->config.option("printer_model"); + ConfigOptionString* printer_model_str = dynamic_cast(printer_model_opt); + if (!printer_model_str || !obj) + continue; - for (auto printer_it = preset_bundle->printers.begin(); printer_it != preset_bundle->printers.end(); printer_it++) { - // filter by system preset - if (!printer_it->is_system) continue; - // get printer_model - ConfigOption* printer_model_opt = printer_it->config.option("printer_model"); - ConfigOptionString* printer_model_str = dynamic_cast(printer_model_opt); - if (!printer_model_str || !obj) - continue; + // use printer_model as printer type + if (printer_model_str->value != MachineObject::get_preset_printer_model_name(obj->printer_type)) + continue; + ConfigOption* printer_opt = filament_it->config.option("compatible_printers"); + ConfigOptionStrings* printer_strs = dynamic_cast(printer_opt); + for (auto printer_str : printer_strs->values) { + if (printer_it->name == printer_str) { + if (filament_id_set.find(filament_it->filament_id) != filament_id_set.end()) { + continue; + } + else { + filament_id_set.insert(filament_it->filament_id); + // name matched + filament_items.push_back(filament_it->alias); + if (filament_it->filament_id == ams_filament_id) { + selection_idx = idx; - // use printer_model as printer type - if (printer_model_str->value != MachineObject::get_preset_printer_model_name(obj->printer_type)) - continue; - ConfigOption* printer_opt = filament_it->config.option("compatible_printers"); - ConfigOptionStrings* printer_strs = dynamic_cast(printer_opt); - for (auto printer_str : printer_strs->values) { - if (printer_it->name == printer_str) { - if (filament_id_set.find(filament_it->filament_id) != filament_id_set.end()) { - continue; - } else { - filament_id_set.insert(filament_it->filament_id); - // name matched - filament_items.push_back(filament_it->alias); - if (filament_it->filament_id == ams_filament_id) { - selection_idx = idx; - - // update if nozzle_temperature_range is found - ConfigOption* opt_min = filament_it->config.option("nozzle_temperature_range_low"); - if(opt_min) { - ConfigOptionInts* opt_min_ints = dynamic_cast(opt_min); - if (opt_min_ints) { - wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); - m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); - } - } - ConfigOption* opt_max = filament_it->config.option("nozzle_temperature_range_high"); - if (opt_max) { - ConfigOptionInts* opt_max_ints = dynamic_cast(opt_max); - if (opt_max_ints) { - wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); - m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); - } + // update if nozzle_temperature_range is found + ConfigOption* opt_min = filament_it->config.option("nozzle_temperature_range_low"); + if (opt_min) { + ConfigOptionInts* opt_min_ints = dynamic_cast(opt_min); + if (opt_min_ints) { + wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); + m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); + } + } + ConfigOption* opt_max = filament_it->config.option("nozzle_temperature_range_high"); + if (opt_max) { + ConfigOptionInts* opt_max_ints = dynamic_cast(opt_max); + if (opt_max_ints) { + wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); + m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); } } - idx++; } + idx++; } } } } + } COMBOBOX_FILAMENT->Set(filament_items); COMBOBOX_FILAMENT->SetSelection(selection_idx); post_select_event(); } + update(); ShowModal(); } diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index a93e6ed621..7324e79ece 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -84,12 +84,12 @@ protected: Button * m_button_close; Button * m_clr_picker; wxColourData * m_clrData; - #ifdef __APPLE__ wxComboBox *m_comboBox_filament_mac; #else ComboBox *m_comboBox_filament; #endif + TextInput* m_readonly_filament; }; }} // namespace Slic3r::GUI From 0ed1d2ed3476fc5d20ec28cb556f86af3c41849f Mon Sep 17 00:00:00 2001 From: Tao Wang Date: Mon, 5 Sep 2022 15:52:23 +0800 Subject: [PATCH 23/76] FIX:fixed crashed when starting Studio on secondary display Change-Id: I0392607479a25b5e2b2704f5569d6b8b94ba7e3d --- src/slic3r/GUI/GLCanvas3D.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 34be261ae1..04ca892f29 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -5855,14 +5855,14 @@ void GLCanvas3D::_check_and_update_toolbar_icon_scale() { #if ENABLE_RETINA_GL - IMSlider *m_layers_slider = get_gcode_viewer().get_layers_slider(); - IMSlider *m_moves_slider = get_gcode_viewer().get_moves_slider(); + IMSlider* m_layers_slider = get_gcode_viewer().get_layers_slider(); + IMSlider* m_moves_slider = get_gcode_viewer().get_moves_slider(); const float sc = m_retina_helper->get_scale_factor(); m_layers_slider->set_scale(sc); m_moves_slider->set_scale(sc); m_gcode_viewer.set_scale(sc); - auto *m_notification = wxGetApp().plater()->get_notification_manager(); + auto* m_notification = wxGetApp().plater()->get_notification_manager(); m_notification->set_scale(sc); #endif @@ -5887,7 +5887,7 @@ void GLCanvas3D::_check_and_update_toolbar_icon_scale() collapse_toolbar.set_scale(sc); size *= m_retina_helper->get_scale_factor(); - auto *m_notification = wxGetApp().plater()->get_notification_manager(); + auto* m_notification = wxGetApp().plater()->get_notification_manager(); m_notification->set_scale(sc); #else //BBS: GUI refactor: GLToolbar @@ -5902,12 +5902,20 @@ void GLCanvas3D::_check_and_update_toolbar_icon_scale() float collapse_toolbar_width = collapse_toolbar.is_enabled() ? collapse_toolbar.get_width() : GLToolbar::Default_Icons_Size; float top_tb_width = m_main_toolbar.get_width() + m_gizmos.get_scaled_total_width() + m_assemble_view_toolbar.get_width() + m_separator_toolbar.get_width() + collapse_toolbar_width; - int items_cnt = m_main_toolbar.get_visible_items_cnt() + m_gizmos.get_selectable_icons_cnt() + m_assemble_view_toolbar.get_visible_items_cnt() + m_separator_toolbar.get_visible_items_cnt() + collapse_toolbar.get_visible_items_cnt(); + int items_cnt = m_main_toolbar.get_visible_items_cnt() + m_gizmos.get_selectable_icons_cnt() + m_assemble_view_toolbar.get_visible_items_cnt() + m_separator_toolbar.get_visible_items_cnt() + collapse_toolbar.get_visible_items_cnt(); float noitems_width = top_tb_width - size * items_cnt; // width of separators and borders in top toolbars // calculate scale needed for items in all top toolbars +#ifdef __WINDOWS__ + cnv_size.set_width(cnv_size.get_width() + m_separator_toolbar.get_width() + collapse_toolbar_width); +#endif float new_h_scale = (cnv_size.get_width() - noitems_width) / (items_cnt * GLToolbar::Default_Icons_Size); + //for protect + if (new_h_scale <= 0) { + new_h_scale = 1; + } + //use the same value as horizon float new_v_scale = new_h_scale; #else From b8846f675f6b3b1d29516503ebb3bd49aefb2458 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 5 Sep 2022 19:36:09 +0800 Subject: [PATCH 24/76] ENH: do not change relative pos for multi object copy Change-Id: Id54e119ebb72ca90989c13b221b9be72e4ac2f86 --- src/slic3r/GUI/Selection.cpp | 41 +++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index 964a9a03eb..6f0ecd9b02 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -2615,20 +2615,45 @@ void Selection::paste_objects_from_clipboard() std::vector object_idxs; const ModelObjectPtrs& src_objects = m_clipboard.get_objects(); + PartPlate * plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); + + //BBS: if multiple objects are selected, move them as a whole after copy + Vec2d shift_all = {0, 0}; + if (src_objects.size() > 1) { + BoundingBoxf3 bbox_all; + for (const ModelObject *src_object : src_objects) { + BoundingBoxf3 bbox = src_object->instance_convex_hull_bounding_box(0); + bbox_all.merge(bbox); + } + auto bsize = bbox_all.size(); + if (bsize.x() < bsize.y()) + shift_all = {bbox_all.size().x(), 0}; + else + shift_all = {0, bbox_all.size().y()}; + } + for (const ModelObject* src_object : src_objects) { ModelObject* dst_object = m_model->add_object(*src_object); - + // BBS: find an empty cell to put the copied object BoundingBoxf3 bbox = src_object->instance_convex_hull_bounding_box(0); - PartPlate* plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); - bool in_current = plate->intersects(bbox); - auto start_offset = in_current?src_object->instances.front()->get_offset():plate->get_build_volume().center(); - auto start_point = in_current?bbox.center():plate->get_build_volume().center(); - auto point_offset = start_offset - start_point; - auto empty_cell = wxGetApp().plater()->canvas3D()->get_nearest_empty_cell({start_point(0), start_point(1)}); - Vec3d displacement = { empty_cell.x() + point_offset.x(), empty_cell.y() + point_offset.y(), start_point(2) }; + Vec3d displacement; + if (shift_all(0) != 0 || shift_all(1) != 0) { + // BBS: if multiple objects are selected, move them as a whole after copy + auto start_point = bbox.center(); + displacement = {shift_all.x() + start_point.x(), shift_all.y() + start_point.y(), start_point(2)}; + } else { + // BBS: if only one object is copied, find an empty cell to put it + bool in_current = plate->intersects(bbox); + auto start_point = in_current ? bbox.center() : plate->get_build_volume().center(); + auto start_offset = in_current ? src_object->instances.front()->get_offset() : plate->get_build_volume().center(); + auto point_offset = start_offset - start_point; + auto empty_cell = wxGetApp().plater()->canvas3D()->get_nearest_empty_cell({start_point(0), start_point(1)}); + displacement = {empty_cell.x() + point_offset.x(), empty_cell.y() + point_offset.y(), start_point(2)}; + } + for (ModelInstance* inst : dst_object->instances) inst->set_offset(displacement); From 77e4599c4a9809bbda3a33ba180e66ab88c776d1 Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 6 Sep 2022 14:21:06 +0800 Subject: [PATCH 25/76] FIX:add few extra function for objecttable 1.supports filament sort 2.printable supports batch selection Change-Id: I231b8add4f43550f4854796cfd804f86251604e7 --- src/slic3r/GUI/GUI_ObjectTable.cpp | 75 ++++++++++++++++++++++++------ src/slic3r/GUI/GUI_ObjectTable.hpp | 13 ++++-- 2 files changed, 71 insertions(+), 17 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 74206d62f2..620875845c 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -540,6 +540,29 @@ wxString GridCellSupportEditor::ms_stringValues[2] = { wxT(""), wxT("") }; void GridCellSupportEditor::DoActivate(int row, int col, wxGrid* grid) { + ObjectGrid* local_table = dynamic_cast(grid); + wxGridBlocks cell_array = grid->GetSelectedBlocks(); + + auto left_col = cell_array.begin()->GetLeftCol(); + auto right_col = cell_array.begin()->GetRightCol(); + auto top_row = cell_array.begin()->GetTopRow(); + auto bottom_row = cell_array.begin()->GetBottomRow(); + + if ((left_col == right_col) && + (top_row == bottom_row)) { + wxGridCellBoolEditor::DoActivate(row, col, grid); + grid->SelectBlock(row, col, row, col, true); + return; + } + else if( (left_col == right_col) && + (top_row != bottom_row)){ + + for (auto i = top_row; i <= bottom_row; i++) { + //grid->GetTable()->SetValueAsBool(i, left_col, false); + wxGridCellBoolEditor::DoActivate(i, left_col, grid); + } + } + wxGridCellBoolEditor::DoActivate(row, col, grid); grid->SelectBlock(row, col, row, col, true); } @@ -724,11 +747,13 @@ wxBEGIN_EVENT_TABLE( ObjectGrid, wxGrid ) EVT_KEY_UP( ObjectGrid::OnKeyUp ) EVT_CHAR ( ObjectGrid::OnChar ) EVT_GRID_LABEL_LEFT_CLICK ( ObjectGrid::OnColHeadLeftClick ) + EVT_GRID_RANGE_SELECTED(ObjectGrid::OnRangeSelected) wxEND_EVENT_TABLE() bool ObjectGrid::OnCellLeftClick(wxGridEvent& event, int row, int col, ConfigOptionType type) { input_string = wxEmptyString; + if (type != coBool) return false; @@ -814,6 +839,11 @@ bool ObjectGrid::OnCellLeftClick(wxGridEvent& event, int row, int col, ConfigOpt return consumed; } +void ObjectGrid::OnRangeSelected(wxGridRangeSelectEvent& ev) +{ + ev.Skip(); +} + void ObjectGrid::OnColHeadLeftClick(wxGridEvent& event) { bool consumed = false; @@ -1795,7 +1825,7 @@ void ObjectGridTable::init_cols(ObjectGrid *object_grid) m_col_data.push_back(col); //object layer height - col = new ObjectGridCol(coFloat, "layer_height", L("Quality"), true, false, true, true, wxALIGN_CENTRE); + col = new ObjectGridCol(coFloat, "layer_height", L("Quality"), true, false, true, true, wxALIGN_LEFT); col->size = object_grid->GetTextExtent(L("Layer height")).x - 28; m_col_data.push_back(col); @@ -2325,6 +2355,22 @@ void ObjectGridTable::sort_by_col(int col) m_sort_col = col; } } + else if (col == col_filaments) { + if (m_sort_col == col) { + auto sort_func = [](ObjectGridRow* row1, ObjectGridRow* row2) { + return (std::to_string(row2->filaments.value).compare(std::to_string(row1->filaments.value)) < 0); + }; + sort_row_data(sort_func); + m_sort_col = -1; + } + else { + auto sort_func = [](ObjectGridRow* row1, ObjectGridRow* row2) { + return (std::to_string(row1->filaments.value).compare(std::to_string(row2->filaments.value)) < 0); + }; + sort_row_data(sort_func); + m_sort_col = col; + } + } //else if (col == col_assemble_name) { // if (m_sort_col == col) { // compare_row_func sort_func = [](ObjectGridRow* row1, ObjectGridRow* row2) { @@ -2789,10 +2835,10 @@ void ObjectTablePanel::load_data() m_object_grid->SetColLabelValue(ObjectGridTable::col_printable, _L("Printable")); m_object_grid->SetColLabelValue(ObjectGridTable::col_printable_reset, ""); - m_object_grid->SetColLabelValue(ObjectGridTable::col_plate_index, wxString::Format("%S%S", _L("Plate"), _L("(Sort)"))); + m_object_grid->SetColLabelValue(ObjectGridTable::col_plate_index, wxString::Format("%S%S", _L("Plate"), wxString::FromUTF8("\xe2\x87\x85\x20"))); /*m_object_grid->SetColLabelValue(ObjectGridTable::col_assemble_name, L("Module"));*/ - m_object_grid->SetColLabelValue(ObjectGridTable::col_name, wxString::Format("%S%S", _L("Name"), _L("(Sort)"))); - m_object_grid->SetColLabelValue(ObjectGridTable::col_filaments, _L("Filament")); + m_object_grid->SetColLabelValue(ObjectGridTable::col_name, wxString::Format("%S%S", _L("Name"), wxString::FromUTF8("\xe2\x87\x85\x20"))); + m_object_grid->SetColLabelValue(ObjectGridTable::col_filaments, wxString::Format("%S%S", _L("Filament"), wxString::FromUTF8("\xe2\x87\x85\x20"))); m_object_grid->SetColLabelValue(ObjectGridTable::col_filaments_reset, ""); m_object_grid->SetColLabelValue(ObjectGridTable::col_layer_height, _L("Layer height")); m_object_grid->SetColLabelValue(ObjectGridTable::col_layer_height_reset, ""); @@ -2980,10 +3026,14 @@ void ObjectTablePanel::load_data() m_object_grid->SetColSize(i, FromDIP(28)); break; - case ObjectGridTable::col_wall_loops: - m_object_grid->SetColSize(i, m_object_grid->GetColSize(i) - FromDIP(28)); + case ObjectGridTable::col_wall_loops: { + auto width = m_object_grid->GetColSize(i) - FromDIP(28); + if (width < m_object_grid->GetTextExtent(("000.00")).x) { + width = m_object_grid->GetTextExtent(("000.00")).x; + } + m_object_grid->SetColSize(i, width); break; - + } case ObjectGridTable::col_wall_loops_reset: m_object_grid->SetColSize(i, FromDIP(28)); break; @@ -3128,13 +3178,10 @@ void ObjectTablePanel::OnCellValueChanged( wxGridEvent& ev ) void ObjectTablePanel::OnRangeSelected( wxGridRangeSelectEvent& ev ) { - int left_col = ev.GetLeftCol(); - int right_col = ev.GetRightCol(); - int top_row = ev.GetTopRow(); - int bottom_row = ev.GetBottomRow(); - - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format("cell from (%1%, %2%) to (%3%, %4%) selected") %top_row %left_col %bottom_row %right_col; - + range_select_left_col = ev.GetLeftCol(); + range_select_right_col = ev.GetRightCol(); + range_select_top_row = ev.GetTopRow(); + range_select_bottom_row = ev.GetBottomRow(); ev.Skip(); } diff --git a/src/slic3r/GUI/GUI_ObjectTable.hpp b/src/slic3r/GUI/GUI_ObjectTable.hpp index b3a76dc6ef..0abe00545d 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.hpp +++ b/src/slic3r/GUI/GUI_ObjectTable.hpp @@ -242,6 +242,7 @@ public: }*/ bool OnCellLeftClick(wxGridEvent& event, int row, int col, ConfigOptionType type); + void OnRangeSelected(wxGridRangeSelectEvent& ev); void OnColHeadLeftClick(wxGridEvent& event); virtual void DrawColLabels( wxDC& dc, const wxArrayInt& cols ); @@ -252,8 +253,7 @@ public: friend class ObjectTablePanel; wxString input_string; - wxString m_cell_data; - + wxString m_cell_data; protected: //void OnSize( wxSizeEvent& ); void OnKeyDown( wxKeyEvent& ); @@ -522,8 +522,9 @@ public: int m_icon_col_width{ 0 }; int m_icon_row_height{ 0 }; + ObjectTablePanel* m_panel{ nullptr }; + private: - ObjectTablePanel* m_panel{nullptr}; std::vector m_grid_data; std::vector m_col_data; bool m_data_valid{false}; @@ -547,6 +548,12 @@ private: //the main panel class ObjectTablePanel : public wxPanel { +public: + int range_select_left_col; + int range_select_right_col; + int range_select_top_row; + int range_select_bottom_row; + void OnCellLeftClick( wxGridEvent& ); void OnRowSize( wxGridSizeEvent& ); void OnColSize( wxGridSizeEvent& ); From 0471c7d427e48e0896d54e6a2317ce7c997cdc60 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Fri, 2 Sep 2022 19:02:45 +0800 Subject: [PATCH 26/76] ENH: open new process on MacOS Change-Id: I0bc4069f9ff14ac86d9edf800134f04a26a650f2 --- src/libslic3r/AppConfig.cpp | 8 +------- src/slic3r/GUI/GUI_App.cpp | 6 ++++++ src/slic3r/GUI/MainFrame.cpp | 29 +++++++++++++++++------------ src/slic3r/Utils/MacDarkMode.mm | 2 +- src/slic3r/Utils/Process.cpp | 14 ++++++++------ 5 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index c8a5b274fe..03b42cfe5d 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -130,13 +130,7 @@ void AppConfig::set_defaults() #endif if (get("single_instance").empty()) - set_bool("single_instance", -#ifdef __APPLE__ - true -#else // __APPLE__ - false -#endif // __APPLE__ - ); + set_bool("single_instance", false); #ifdef SUPPORT_REMEMBER_OUTPUT_PATH if (get("remember_output_path").empty()) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 5c04befe91..70c2efccbe 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4483,6 +4483,12 @@ void GUI_App::OSXStoreOpenFiles(const wxArrayString &fileNames) // wxWidgets override to get an event on open files. void GUI_App::MacOpenFiles(const wxArrayString &fileNames) { + if (m_post_initialized) { + std::vector names; + for (auto & n : fileNames) names.push_back(n); + start_new_slicer(names); + return; + } std::vector files; std::vector gcode_files; std::vector non_gcode_files; diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index a72d365696..3b1e1708c8 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -84,19 +84,18 @@ class BambuStudioTaskBarIcon : public wxTaskBarIcon { public: BambuStudioTaskBarIcon(wxTaskBarIconType iconType = wxTBI_DEFAULT_TYPE) : wxTaskBarIcon(iconType) {} - //wxMenu *CreatePopupMenu() override { - //wxMenu *menu = new wxMenu; - //BBS do not support multi instances in mac - //if(wxGetApp().app_config->get("single_instance") == "0") { - // // Only allow opening a new PrusaSlicer instance on OSX if "single_instance" is disabled, - // // as starting new instances would interfere with the locking mechanism of "single_instance" support. - // append_menu_item(menu, wxID_ANY, _L("Open new instance"), _L("Open a new PrusaSlicer instance"), - // [](wxCommandEvent&) { start_new_slicer(); }, "", nullptr); + wxMenu *CreatePopupMenu() override { + wxMenu *menu = new wxMenu; + //if (wxGetApp().app_config->get("single_instance") == "false") { + // Only allow opening a new PrusaSlicer instance on OSX if "single_instance" is disabled, + // as starting new instances would interfere with the locking mechanism of "single_instance" support. + append_menu_item(menu, wxID_ANY, _L("New Window"), _L("Open a new window"), + [](wxCommandEvent&) { start_new_slicer(); }, "", nullptr); //} - //append_menu_item(menu, wxID_ANY, _L("G-code Viewer") + dots, _L("Open G-code Viewer"), - // [](wxCommandEvent&) { start_new_gcodeviewer_open_file(); }, "", nullptr); - //return menu; - //} +// append_menu_item(menu, wxID_ANY, _L("G-code Viewer") + dots, _L("Open G-code Viewer"), +// [](wxCommandEvent&) { start_new_gcodeviewer_open_file(); }, "", nullptr); + return menu; + } }; /*class GCodeViewerTaskBarIcon : public wxTaskBarIcon { @@ -1680,6 +1679,12 @@ void MainFrame::init_menubar_as_editor() // File menu wxMenu* fileMenu = new wxMenu; { +#ifdef __APPLE__ + // New Window + append_menu_item(fileMenu, wxID_ANY, _L("New Window") + "\tCtrl+N", _L("Start a new window"), + [](wxCommandEvent&) { start_new_slicer(); }, "", nullptr, + []{ return true; }, this); +#endif // New Project append_menu_item(fileMenu, wxID_ANY, _L("New Project") + "\tCtrl+N", _L("Start a new project"), [this](wxCommandEvent&) { if (m_plater) m_plater->new_project(); }, "", nullptr, diff --git a/src/slic3r/Utils/MacDarkMode.mm b/src/slic3r/Utils/MacDarkMode.mm index e28067fc13..5750358dda 100644 --- a/src/slic3r/Utils/MacDarkMode.mm +++ b/src/slic3r/Utils/MacDarkMode.mm @@ -286,7 +286,7 @@ namespace GUI { void initGestures(void * view, wxEvtHandler * handler) { - NSOpenGLView * glView = (NSOpenGLView *) view; + wxNSCustomOpenGLView * glView = (wxNSCustomOpenGLView *) view; [glView initGesturesWithHandler: handler]; } diff --git a/src/slic3r/Utils/Process.cpp b/src/slic3r/Utils/Process.cpp index fdd922c007..c25910574e 100644 --- a/src/slic3r/Utils/Process.cpp +++ b/src/slic3r/Utils/Process.cpp @@ -60,17 +60,19 @@ static void start_new_slicer_or_gcodeviewer(const NewSlicerInstanceType instance boost::filesystem::path bin_path = into_path(wxStandardPaths::Get().GetExecutablePath()); #if defined(__APPLE__) { - bin_path = bin_path.parent_path() / "BambuStudio"; + //bin_path = bin_path.parent_path() / "BambuStudio"; + bin_path = "/usr/bin/open"; // On Apple the wxExecute fails, thus we use boost::process instead. BOOST_LOG_TRIVIAL(info) << "Trying to spawn a new slicer \"" << bin_path.string() << "\""; try { - std::vector args; + std::vector args = { "-n", "-a", "BambuStudio"}; + if (!paths_to_open.empty()) { + for (const auto& file : paths_to_open) + args.emplace_back(into_u8(file)); + } + args.emplace_back("--args"); if (instance_type == NewSlicerInstanceType::GCodeViewer) args.emplace_back("--gcodeviewer"); - if (!paths_to_open.empty()) { - for (const auto& file : paths_to_open) - args.emplace_back(into_u8(file)); - } if (instance_type == NewSlicerInstanceType::Slicer && single_instance) args.emplace_back("--single-instance"); boost::process::spawn(bin_path, args); From b03a16054b85f3dffb57bb970fe295673fc62c94 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 5 Sep 2022 10:28:44 +0800 Subject: [PATCH 27/76] FIX: add authors to param links Change-Id: Ibcbd1d58e6201e1a668f350891eb1beda9fe4d12 --- src/slic3r/GUI/Tab.cpp | 46 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index c8d0f77c22..98305ab445 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1847,40 +1847,40 @@ void TabPrint::build() page = add_options_page(L("Support"), "support"); optgroup = page->new_optgroup(L("Support")); optgroup->append_single_option_line("enable_support", "support"); - optgroup->append_single_option_line("support_type", "support"); - optgroup->append_single_option_line("support_threshold_angle", "support"); + optgroup->append_single_option_line("support_type", "support#support-types"); + optgroup->append_single_option_line("support_threshold_angle", "support#threshold-angle"); optgroup->append_single_option_line("support_on_build_plate_only"); //optgroup->append_single_option_line("enforce_support_layers"); optgroup = page->new_optgroup(L("Support filament")); - optgroup->append_single_option_line("support_filament", "support"); - optgroup->append_single_option_line("support_interface_filament", "support"); + optgroup->append_single_option_line("support_filament", "support#support-filament"); + optgroup->append_single_option_line("support_interface_filament", "support#support-filament"); //optgroup = page->new_optgroup(L("Options for support material and raft")); //optgroup->append_single_option_line("support_style"); //BBS optgroup = page->new_optgroup(L("Advanced")); - optgroup->append_single_option_line("tree_support_branch_distance", "support"); - optgroup->append_single_option_line("tree_support_branch_diameter", "support"); - optgroup->append_single_option_line("tree_support_branch_angle", "support"); + optgroup->append_single_option_line("tree_support_branch_distance", "support#tree-support-only-options"); + optgroup->append_single_option_line("tree_support_branch_diameter", "support#tree-support-only-options"); + optgroup->append_single_option_line("tree_support_branch_angle", "support#tree-support-only-options"); optgroup->append_single_option_line("tree_support_wall_count"); optgroup->append_single_option_line("tree_support_with_infill"); - optgroup->append_single_option_line("support_top_z_distance", "support"); - optgroup->append_single_option_line("support_base_pattern", "support"); - optgroup->append_single_option_line("support_base_pattern_spacing", "support"); + optgroup->append_single_option_line("support_top_z_distance", "support#top-z-distance"); + optgroup->append_single_option_line("support_base_pattern", "support#base-pattern"); + optgroup->append_single_option_line("support_base_pattern_spacing", "support#base-pattern"); //optgroup->append_single_option_line("support_angle"); - optgroup->append_single_option_line("support_interface_top_layers", "support"); - optgroup->append_single_option_line("support_interface_bottom_layers", "support"); - optgroup->append_single_option_line("support_interface_pattern", "support"); - optgroup->append_single_option_line("support_interface_spacing", "support"); + optgroup->append_single_option_line("support_interface_top_layers", "support#base-pattern"); + optgroup->append_single_option_line("support_interface_bottom_layers", "support#base-pattern"); + optgroup->append_single_option_line("support_interface_pattern", "support#base-pattern"); + optgroup->append_single_option_line("support_interface_spacing", "support#base-pattern"); optgroup->append_single_option_line("support_bottom_interface_spacing"); //optgroup->append_single_option_line("support_interface_loop_pattern"); - optgroup->append_single_option_line("support_object_xy_distance", "support"); - optgroup->append_single_option_line("bridge_no_support", "support"); - optgroup->append_single_option_line("max_bridge_length", "support"); - optgroup->append_single_option_line("thick_bridges", "support"); + optgroup->append_single_option_line("support_object_xy_distance", "support#supportobject-xy-distance"); + optgroup->append_single_option_line("bridge_no_support", "support#base-pattern"); + optgroup->append_single_option_line("max_bridge_length", "support#base-pattern"); + optgroup->append_single_option_line("thick_bridges", "support#base-pattern"); //optgroup->append_single_option_line("independent_support_layer_height"); page = add_options_page(L("Others"), "advanced"); @@ -1889,8 +1889,8 @@ void TabPrint::build() optgroup->append_single_option_line("skirt_distance"); //optgroup->append_single_option_line("draft_shield"); optgroup->append_single_option_line("brim_type", "auto-brim"); - optgroup->append_single_option_line("brim_width", "auto-brim"); - optgroup->append_single_option_line("brim_object_gap", "auto-brim"); + optgroup->append_single_option_line("brim_width", "auto-brim#manual"); + optgroup->append_single_option_line("brim_object_gap", "auto-brim#brim-object-gap"); optgroup->append_single_option_line("raft_layers"); //optgroup->append_single_option_line("raft_first_layer_density"); //optgroup->append_single_option_line("raft_first_layer_expansion"); @@ -1902,9 +1902,9 @@ void TabPrint::build() optgroup->append_single_option_line("prime_tower_brim_width"); optgroup = page->new_optgroup(L("Flush options")); - optgroup->append_single_option_line("flush_into_infill", "reduce-wasting-during-filament-change"); - optgroup->append_single_option_line("flush_into_objects", "reduce-wasting-during-filament-change"); - optgroup->append_single_option_line("flush_into_support", "reduce-wasting-during-filament-change"); + optgroup->append_single_option_line("flush_into_infill", "reduce-wasting-during-filament-change#wipe-into-infill"); + optgroup->append_single_option_line("flush_into_objects", "reduce-wasting-during-filament-change#wipe-into-object"); + optgroup->append_single_option_line("flush_into_support", "reduce-wasting-during-filament-change#wipe-into-support-enabled-by-default"); optgroup = page->new_optgroup(L("Special mode")); optgroup->append_single_option_line("print_sequence"); From dd0ccfb6e974309baa595cabc8b7c606114bf28d Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 5 Sep 2022 17:24:32 +0800 Subject: [PATCH 28/76] FIX: StaticBox background color Change-Id: Ifbb0bc4ac3e0a69675f16dc3234b4190fff698fb --- src/slic3r/GUI/Widgets/StaticBox.cpp | 5 ++++- src/slic3r/GUI/Widgets/StepCtrl.cpp | 11 ++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/Widgets/StaticBox.cpp b/src/slic3r/GUI/Widgets/StaticBox.cpp index e98d931c52..538a812249 100644 --- a/src/slic3r/GUI/Widgets/StaticBox.cpp +++ b/src/slic3r/GUI/Widgets/StaticBox.cpp @@ -169,7 +169,10 @@ void StaticBox::doRender(wxDC& dc) } else { dc.SetPen(wxPen(background_color.colorForStates(states))); } - dc.SetBrush(wxBrush(background_color.colorForStates(states))); + if (background_color.count() > 0) + dc.SetBrush(wxBrush(background_color.colorForStates(states))); + else + dc.SetBrush(wxBrush(GetBackgroundColour())); if (radius == 0) { dc.DrawRectangle(rc); } diff --git a/src/slic3r/GUI/Widgets/StepCtrl.cpp b/src/slic3r/GUI/Widgets/StepCtrl.cpp index 44847c8405..c52f47c30b 100644 --- a/src/slic3r/GUI/Widgets/StepCtrl.cpp +++ b/src/slic3r/GUI/Widgets/StepCtrl.cpp @@ -144,7 +144,13 @@ void StepCtrl::mouseMove(wxMouseEvent &event) wxPoint pt; event.GetPosition(&pt.x, &pt.y); pos_thumb.x = pt.x + drag_offset.x; - Refresh(); + wxSize size = GetSize(); + int itemWidth = size.x / steps.size(); + int index = pos_thumb.x / itemWidth; + if (index != pos_thumb.y) { + pos_thumb.y = index; + Refresh(); + } } void StepCtrl::mouseUp(wxMouseEvent &event) @@ -160,7 +166,6 @@ void StepCtrl::mouseUp(wxMouseEvent &event) void StepCtrl::doRender(wxDC &dc) { if (steps.empty()) return; - StaticBox::doRender(dc); wxSize size = GetSize(); @@ -177,7 +182,7 @@ void StepCtrl::doRender(wxDC &dc) dc.SetPen(wxPen(clr_step.colorForStates(states))); dc.SetBrush(wxBrush(clr_step.colorForStates(states))); for (int i = 0; i < steps.size(); ++i) { - bool check = pos_thumb == wxPoint{0, 0} ? step == i : (pos_thumb.x >= circleX - itemWidth / 2 && pos_thumb.x < circleX + itemWidth / 2); + bool check = (pos_thumb == wxPoint{0, 0} ? step : pos_thumb.y) == i; dc.DrawEllipse(circleX - radius, circleY - radius, radius * 2, radius * 2); dc.SetFont(GetFont()); dc.SetTextForeground(clr_text.colorForStates(states | (check ? StateColor::Checked : 0))); From 63448d91267637e87b5a8a600c47a36a33063750 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Fri, 2 Sep 2022 10:58:00 +0800 Subject: [PATCH 29/76] FIX: modify ui styles in media file panel Change-Id: I064858975fc39618339cf4fe0e577fa3d2e5085f --- src/slic3r/GUI/ImageGrid.cpp | 64 +++++++++----------- src/slic3r/GUI/ImageGrid.h | 9 ++- src/slic3r/GUI/MediaFilePanel.cpp | 6 ++ src/slic3r/GUI/Printer/PrinterFileSystem.cpp | 5 +- 4 files changed, 41 insertions(+), 43 deletions(-) diff --git a/src/slic3r/GUI/ImageGrid.cpp b/src/slic3r/GUI/ImageGrid.cpp index 1a1751fb8f..617a7438b1 100644 --- a/src/slic3r/GUI/ImageGrid.cpp +++ b/src/slic3r/GUI/ImageGrid.cpp @@ -60,6 +60,9 @@ void ImageGrid::SetFileSystem(boost::shared_ptr file_sys) m_file_sys->Bind(EVT_THUMBNAIL, &ImageGrid::changedEvent, this); m_file_sys->Bind(EVT_DOWNLOAD, &ImageGrid::changedEvent, this); } + m_row_count = 0; + m_col_count = 1; + m_row_offset = 0; UpdateFileSystem(); } @@ -109,12 +112,11 @@ void Slic3r::GUI::ImageGrid::Rescale() { UpdateFileSystem(); auto em = em_unit(this); - wxSize size1{256 * em / 10, 4 * em}; + wxSize size1{384 * em / 10, 4 * em}; m_buttons_background = createAlphaBitmap(size1, *wxBLACK, 77, 77); + m_buttons_background_checked = createAlphaBitmap(size1, wxColor("#FF2002"), 77, 77); //wxSize size2{128 * m_buttonBackgroundColor.count() * em_unit(this) / 10, 4 * em_unit(this)}; //m_button_background = createAlphaBitmap(size2, *wxBLACK, 77, 77); - wxSize size_p{8 * em, 8 * em}; - m_progress_background = createCircleBitmap(size_p, em, m_background_progress, wxTransparentColour, *wxWHITE); } void Slic3r::GUI::ImageGrid::Select(size_t index) @@ -131,6 +133,7 @@ void Slic3r::GUI::ImageGrid::Select(size_t index) m_row_offset = index / m_col_count * 4; if (m_row_offset >= m_row_count) m_row_offset = m_row_count == 0 ? 0 : m_row_count - 1; + Refresh(); } void Slic3r::GUI::ImageGrid::DoAction(size_t index, int action) @@ -168,8 +171,8 @@ void Slic3r::GUI::ImageGrid::UpdateFileSystem() if (!m_file_sys) return; wxSize mask_size{0, 60}; if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { - m_image_size.Set(256, 144); - m_cell_size.Set(272, 160); + m_image_size.Set(384, 216); + m_cell_size.Set(396, 228); } else { m_image_size.Set(480, 270); @@ -474,48 +477,33 @@ void ImageGrid::render(wxDC& dc) pt + wxPoint{10, m_image_size.GetHeight() - m_checked_icon.GetBmpHeight() - 10}); // can' handle alpha // dc.GradientFillLinear({pt.x, pt.y, m_image_size.GetWidth(), 60}, wxColour(0x6F, 0x6F, 0x6F, 0x99), wxColour(0x6F, 0x6F, 0x6F, 0), wxBOTTOM); - if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { + else if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { + wxString nonHoverText; wxString secondAction = _L("Download"); + int states = 0; // Draw download progress if (file.IsDownload()) { if (file.progress == -1) { secondAction = _L("Cancel"); - dc.DrawText(_L("Waiting"), pt + wxPoint{24, m_image_size.GetHeight() - 64}); + nonHoverText = _L("Download waiting..."); } else if (file.progress < 0) { secondAction = _L("Retry"); - dc.DrawText(_L("Failed"), pt + wxPoint{24, m_image_size.GetHeight() - 64}); + nonHoverText = _L("Download failed"); + states = StateColor::Checked; } else if (file.progress >= 100) { secondAction = _L("Open"); - dc.DrawText(_L("Finished"), pt + wxPoint{24, m_image_size.GetHeight() - 64}); + nonHoverText = _L("Download finished"); } else { secondAction = _L("Cancel"); - if (file.progress != m_background_progress) { - auto em = em_unit(this); - wxSize size_p{8 * em, 8 * em}; - m_background_progress = file.progress; - m_progress_background = createCircleBitmap(size_p, em, m_background_progress, wxTransparentColour, *wxWHITE); - } - auto pos = (m_image_size - m_progress_background.GetSize()) / 2; - dc.DrawBitmap(m_progress_background, pt + wxPoint{pos.x, pos.y}); - // draw progress text - auto p = wxString::Format("%d", m_background_progress); - dc.SetFont(Label::sysFont(30)); - wxSize s1 = dc.GetTextExtent(p); - dc.SetFont(Label::sysFont(20)); - wxSize s2 = dc.GetTextExtent(L"%"); - wxRect rt = wxRect(0, 0, s1.x + s2.x, s1.y).CenterIn(wxRect(pt, m_image_size)); - dc.SetTextForeground(*wxWHITE); - dc.SetFont(Label::sysFont(30)); - dc.DrawText(p, rt.GetTopLeft()); - dc.SetFont(Label::sysFont(20)); - dc.DrawText(L"%", rt.GetTopLeft() + wxSize{s1.x, s1.y - s2.y}); - dc.SetFont(GetFont()); + nonHoverText = wxString::Format(_L("Downloading %d%%..."), file.progress); } } // Draw buttons on hovered item + wxRect rect{pt.x, pt.y + m_image_size.y - m_buttons_background.GetHeight(), m_image_size.GetWidth(), m_buttons_background.GetHeight()}; if (hit_image == index) { - wxRect rect{pt.x, pt.y + m_image_size.y - m_buttons_background.GetHeight(), m_image_size.GetWidth(), m_buttons_background.GetHeight()}; - renderButtons(dc, {_L("Delete"), (wxChar const*)secondAction, nullptr}, rect, m_hit_type == HIT_ACTION ? m_hit_item & 1 : -1); + renderButtons(dc, {_L("Delete"), (wxChar const *) secondAction, nullptr}, rect, m_hit_type == HIT_ACTION ? m_hit_item & 1 : -1, states); + } else if (!nonHoverText.IsEmpty()) { + renderButtons(dc, {(wxChar const *) nonHoverText, nullptr}, rect, -1, states); } } else { auto date = wxDateTime((time_t) file.time).Format(_L(formats[m_file_sys->GetGroupMode()])); @@ -558,11 +546,13 @@ void ImageGrid::render(wxDC& dc) } } -void Slic3r::GUI::ImageGrid::renderButtons(wxDC &dc, wxStringList const &texts, wxRect const &rect2, size_t hit) +void Slic3r::GUI::ImageGrid::renderButtons(wxDC &dc, wxStringList const &texts, wxRect const &rect2, size_t hit, int states) { - wxMemoryDC mdc(m_buttons_background); // Draw background - dc.Blit(rect2.GetTopLeft(), rect2.GetSize(), &mdc, {0, 0}); + { + wxMemoryDC mdc(states & StateColor::Checked ? m_buttons_background_checked : m_buttons_background); + dc.Blit(rect2.GetTopLeft(), rect2.GetSize(), &mdc, {0, 0}); + } // Draw buttons wxRect rect(rect2); rect.SetWidth(rect.GetWidth() / texts.size()); @@ -570,7 +560,7 @@ void Slic3r::GUI::ImageGrid::renderButtons(wxDC &dc, wxStringList const &texts, dc.SetFont(Label::Body_14); //mdc.SelectObject(m_button_background); for (size_t i = 0; i < texts.size(); ++i) { - int states = hit == i ? state : 0; + int states2 = hit == i ? state : 0; // Draw button background rect.Deflate(10, 5); //dc.Blit(rect.GetTopLeft(), rect.GetSize(), &mdc, {m_buttonBackgroundColor.colorIndexForStates(states) * 128, 0}); @@ -578,7 +568,7 @@ void Slic3r::GUI::ImageGrid::renderButtons(wxDC &dc, wxStringList const &texts, // Draw button splitter if (i > 0) dc.DrawLine(rect.GetLeftTop(), rect.GetLeftBottom()); // Draw button text - renderText(dc, texts[i], rect, states); + renderText(dc, texts[i], rect, states | states2); rect.Inflate(10, 5); rect.Offset(rect.GetWidth(), 0); } diff --git a/src/slic3r/GUI/ImageGrid.h b/src/slic3r/GUI/ImageGrid.h index d49d4191ad..f6d07c5427 100644 --- a/src/slic3r/GUI/ImageGrid.h +++ b/src/slic3r/GUI/ImageGrid.h @@ -76,9 +76,9 @@ protected: void render(wxDC &dc); - void renderButtons(wxDC &dc, wxStringList const &texts, wxRect const &rect, size_t hit); + void renderButtons(wxDC &dc, wxStringList const &texts, wxRect const &rect, size_t hit, int states); - void renderText(wxDC &dc, wxString const & text, wxRect const & rect, int state); + void renderText(wxDC &dc, wxString const & text, wxRect const & rect, int states); // some useful events void mouseMoved(wxMouseEvent& event); @@ -108,10 +108,9 @@ private: wxTimer m_timer; wxBitmap m_mask; - wxBitmap m_buttons_background; + wxBitmap m_buttons_background; + wxBitmap m_buttons_background_checked; // wxBitmap m_button_background; - wxBitmap m_progress_background; - int m_background_progress = 0; bool m_selecting = false; diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp index de4ee7970d..a4cb719b72 100644 --- a/src/slic3r/GUI/MediaFilePanel.cpp +++ b/src/slic3r/GUI/MediaFilePanel.cpp @@ -31,6 +31,7 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) m_button_year = new ::Button(m_time_panel, _L("Year"), "", wxBORDER_NONE); m_button_month = new ::Button(m_time_panel, _L("Month"), "", wxBORDER_NONE); m_button_all = new ::Button(m_time_panel, _L("All Files"), "", wxBORDER_NONE); + m_button_all->SetFont(Label::Head_14); // sync with m_last_mode for (auto b : {m_button_year, m_button_month, m_button_all}) { b->SetBackgroundColor(StateColor()); b->SetTextColor(StateColor( @@ -67,10 +68,13 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) m_manage_panel = new ::StaticBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); m_manage_panel->SetBackgroundColor(StateColor()); m_button_delete = new ::Button(m_manage_panel, _L("Delete")); + m_button_delete->SetBackgroundColor(StateColor()); m_button_delete->SetCanFocus(false); m_button_download = new ::Button(m_manage_panel, _L("Download")); + m_button_download->SetBackgroundColor(StateColor()); m_button_download->SetCanFocus(false); m_button_management = new ::Button(m_manage_panel, _L("Management")); + m_button_management->SetBackgroundColor(StateColor()); wxBoxSizer *manage_sizer = new wxBoxSizer(wxHORIZONTAL); manage_sizer->AddStretchSpacer(1); @@ -243,9 +247,11 @@ void MediaFilePanel::modeChanged(wxCommandEvent& e1) ::Button* buttons[] = {m_button_all, m_button_month, m_button_year}; wxCommandEvent e(wxEVT_CHECKBOX); auto b = buttons[m_last_mode]; + b->SetFont(Label::Body_14); e.SetEventObject(b); b->GetEventHandler()->ProcessEvent(e); b = buttons[mode]; + b->SetFont(Label::Head_14); e.SetEventObject(b); b->GetEventHandler()->ProcessEvent(e); m_last_mode = mode; diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index 5bcf37da69..431cac5210 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -540,7 +540,10 @@ void PrinterFileSystem::SendChangedEvent(wxEventType type, size_t index, std::st if (!str.empty()) event.SetString(wxString::FromUTF8(str.c_str())); event.SetExtraLong(extra); - wxPostEvent(this, event); + if (wxThread::IsMain()) + ProcessEventLocally(event); + else + wxPostEvent(this, event); } void PrinterFileSystem::DumpLog(Bambu_Session *session, int level, Bambu_Message const *msg) From a64fc3918a987197ac494585499e61c17a02ad05 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 6 Sep 2022 17:03:58 +0800 Subject: [PATCH 30/76] FIX: scroll direction of DropDown Change-Id: Id5abf74e099586810ac9a5ec2b43e6050381a3c3 --- src/slic3r/GUI/Widgets/DropDown.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Widgets/DropDown.cpp b/src/slic3r/GUI/Widgets/DropDown.cpp index 8095969edb..a7ed6be9fb 100644 --- a/src/slic3r/GUI/Widgets/DropDown.cpp +++ b/src/slic3r/GUI/Widgets/DropDown.cpp @@ -422,7 +422,7 @@ void DropDown::mouseMove(wxMouseEvent &event) void DropDown::mouseWheelMoved(wxMouseEvent &event) { - auto delta = (event.GetWheelRotation() < 0 == event.IsWheelInverted()) ? rowSize.y : -rowSize.y; + auto delta = event.GetWheelRotation() > 0 ? rowSize.y : -rowSize.y; wxPoint pt2 = offset + wxPoint{0, delta}; if (pt2.y > 0) pt2.y = 0; From 5f7e945473349e5bc2f0db40e692324d8c7b5195 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Tue, 6 Sep 2022 17:14:17 +0800 Subject: [PATCH 31/76] NEW: add com.bambulab.bambu-studio as CFBundleIdentifier Change-Id: Iaff1bb8791a2d62fa1ace8ad716e449cd4c1096d --- cmake/modules/MacOSXBundleInfo.plist.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/modules/MacOSXBundleInfo.plist.in b/cmake/modules/MacOSXBundleInfo.plist.in index a899a86974..ac2b87880b 100644 --- a/cmake/modules/MacOSXBundleInfo.plist.in +++ b/cmake/modules/MacOSXBundleInfo.plist.in @@ -11,7 +11,7 @@ CFBundleIconFile ${MACOSX_BUNDLE_ICON_FILE} CFBundleIdentifier - ${MACOSX_BUNDLE_GUI_IDENTIFIER} + com.bambulab.bambu-studio CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString From 264aad9b4bf7aec62c5fc6e2a77e082909df6593 Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 6 Sep 2022 18:31:24 +0800 Subject: [PATCH 32/76] FIX:add new effect of disabling print operations Change-Id: I19cd39205785fc2d4321016746a2dc19cff98c5b --- resources/images/monitor_bed_down_disable.svg | 4 ++++ resources/images/monitor_bed_up_disable.svg | 4 ++++ .../images/monitor_extrduer_down_disable.svg | 3 +++ resources/images/monitor_extruder_up_disable.svg | 3 +++ src/slic3r/GUI/StatusPanel.cpp | 16 ++++++++++++++++ 5 files changed, 30 insertions(+) create mode 100644 resources/images/monitor_bed_down_disable.svg create mode 100644 resources/images/monitor_bed_up_disable.svg create mode 100644 resources/images/monitor_extrduer_down_disable.svg create mode 100644 resources/images/monitor_extruder_up_disable.svg diff --git a/resources/images/monitor_bed_down_disable.svg b/resources/images/monitor_bed_down_disable.svg new file mode 100644 index 0000000000..2551512d0a --- /dev/null +++ b/resources/images/monitor_bed_down_disable.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/monitor_bed_up_disable.svg b/resources/images/monitor_bed_up_disable.svg new file mode 100644 index 0000000000..4e69a78c3c --- /dev/null +++ b/resources/images/monitor_bed_up_disable.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/monitor_extrduer_down_disable.svg b/resources/images/monitor_extrduer_down_disable.svg new file mode 100644 index 0000000000..80beaf8126 --- /dev/null +++ b/resources/images/monitor_extrduer_down_disable.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/monitor_extruder_up_disable.svg b/resources/images/monitor_extruder_up_disable.svg new file mode 100644 index 0000000000..ba1be74c07 --- /dev/null +++ b/resources/images/monitor_extruder_up_disable.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index b70311bd7d..156fa4e50b 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1405,6 +1405,14 @@ void StatusPanel::show_printing_status(bool ctrl_area, bool temp_area) m_bpButton_z_down_10->Enable(false); m_bpButton_e_10->Enable(false); m_bpButton_e_down_10->Enable(false); + + m_bpButton_z_10->SetIcon("monitor_bed_up_disable"); + m_bpButton_z_1->SetIcon("monitor_bed_up_disable"); + m_bpButton_z_down_1->SetIcon("monitor_bed_down_disable"); + m_bpButton_z_down_10->SetIcon("monitor_bed_down_disable"); + m_bpButton_e_10->SetIcon("monitor_extruder_up_disable"); + m_bpButton_e_down_10->SetIcon("monitor_extrduer_down_disable"); + m_staticText_z_tip->SetForegroundColour(DISCONNECT_TEXT_COL); m_staticText_e->SetForegroundColour(DISCONNECT_TEXT_COL); m_button_unload->Enable(false); @@ -1422,6 +1430,14 @@ void StatusPanel::show_printing_status(bool ctrl_area, bool temp_area) m_bpButton_z_down_10->Enable(); m_bpButton_e_10->Enable(); m_bpButton_e_down_10->Enable(); + + m_bpButton_z_10->SetIcon("monitor_bed_up"); + m_bpButton_z_1->SetIcon("monitor_bed_up"); + m_bpButton_z_down_1->SetIcon("monitor_bed_down"); + m_bpButton_z_down_10->SetIcon("monitor_bed_down"); + m_bpButton_e_10->SetIcon("monitor_extruder_up"); + m_bpButton_e_down_10->SetIcon("monitor_extrduer_down"); + m_staticText_z_tip->SetForegroundColour(TEXT_LIGHT_FONT_COL); m_staticText_e->SetForegroundColour(TEXT_LIGHT_FONT_COL); m_button_unload->Enable(); From e5c31275173bb0edaf2b041e368b3a3af2f09d65 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 6 Sep 2022 18:20:59 +0800 Subject: [PATCH 33/76] FIX: keep only one repeated opt_key keep only one repeated opt_key when old software open new 3mf file Change-Id: I4f35d2f15e0cb9e5fa4a7523cfcba7b601afd795 (cherry picked from commit a25c42f31437b4562b8fe71a836a421c014c6cf9) --- src/libslic3r/Config.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index 2b98ddff6c..3800aefb81 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -534,8 +534,10 @@ bool ConfigBase::set_deserialize_nothrow(const t_config_option_key &opt_key_src, this->handle_legacy(opt_key, value); if (opt_key.empty()) { // Ignore the option. - //BBS: record these options - substitutions_ctxt.unrecogized_keys.push_back(opt_key_src); + //BBS: record these options, keep only one repeated opt_key + auto iter = std::find(substitutions_ctxt.unrecogized_keys.begin(), substitutions_ctxt.unrecogized_keys.end(), opt_key_src); + if (iter == substitutions_ctxt.unrecogized_keys.end()) + substitutions_ctxt.unrecogized_keys.push_back(opt_key_src); return true; } return this->set_deserialize_raw(opt_key, value, substitutions_ctxt, append); From a4e89ab1f5b34286be967738760374c35188c15b Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 6 Sep 2022 12:26:12 +0800 Subject: [PATCH 34/76] FIX: model moves when adding negative volume Change-Id: I49fdfa8324751874203bde42a692c3babc901623 (cherry picked from commit 550286d7314cc20da5ea590e3dd19772daceda16) --- src/slic3r/GUI/GUI_ObjectList.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 944a8b8ecc..80971189bb 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -5052,9 +5052,7 @@ void ObjectList::apply_object_instance_transfrom_to_all_volumes(ModelObject *mod model_object->ensure_on_bed(); // keep new instance center the same as the original center model_object->translate(-original_instance_center); - model_object->origin_translation += original_instance_center; - model_object->translate_instances(model_object->origin_translation); - model_object->origin_translation = Vec3d::Zero(); + model_object->translate_instances(original_instance_center); // update the cache data in selection to keep the data of ModelVolume and GLVolume are consistent wxGetApp().plater()->update(); From 664672b74214be8467e0721a283e2011a9b6add9 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Tue, 6 Sep 2022 16:03:35 +0800 Subject: [PATCH 35/76] FIX:Gcodeviewer:arc type render bug on first layer Change-Id: Id047e9c6ef39fa95af800bc1b218c14bc6efb7ab --- src/libslic3r/GCode/GCodeProcessor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index ca2111d913..9848154d69 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -3684,7 +3684,7 @@ void GCodeProcessor::store_move_vertex(EMoveType type, EMovePathType path_type) m_interpolation_points[i] = Vec3f(m_interpolation_points[i].x() + m_x_offset, m_interpolation_points[i].y() + m_y_offset, - m_processing_start_custom_gcode ? m_first_layer_height : m_interpolation_points[i].z()) + + m_processing_start_custom_gcode ? m_zero_layer_height : m_interpolation_points[i].z()) + m_extruder_offsets[m_extruder_id]; } From 55e12ef8b7318158d3d9b4ddc7169eefb5f49b55 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Tue, 6 Sep 2022 19:58:01 +0800 Subject: [PATCH 36/76] ENH: refine ams user settings display Change-Id: Ie205824cf6f60f6acd8b07a2b89c1220eebdfb83 Signed-off-by: Stone Li --- src/slic3r/GUI/AMSSetting.cpp | 4 ++++ src/slic3r/GUI/DeviceManager.cpp | 21 +++++++++++++++------ src/slic3r/GUI/DeviceManager.hpp | 1 + 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/AMSSetting.cpp b/src/slic3r/GUI/AMSSetting.cpp index 28f7624e60..8048b92cb7 100644 --- a/src/slic3r/GUI/AMSSetting.cpp +++ b/src/slic3r/GUI/AMSSetting.cpp @@ -253,6 +253,8 @@ void AMSSetting::on_insert_material_read(wxCommandEvent &event) m_sizer_Insert_material_tip_inline->Layout(); Layout(); Fit(); + + event.Skip(); } void AMSSetting::on_starting_read(wxCommandEvent &event) @@ -276,6 +278,8 @@ void AMSSetting::on_starting_read(wxCommandEvent &event) m_sizer_starting_tip_inline->Layout(); Layout(); Fit(); + + event.Skip(); } wxString AMSSetting::append_title(wxString text) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 3d80fa8962..00a2081ccb 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1332,6 +1332,10 @@ int MachineObject::command_ams_user_settings(int ams_id, bool start_read_opt, bo j["print"]["startup_read_option"] = start_read_opt; j["print"]["tray_read_option"] = tray_read_opt; + ams_insert_flag = tray_read_opt; + ams_power_on_flag = start_read_opt; + ams_user_setting_hold_count = HOLD_COUNT_MAX; + return this->publish_json(j.dump()); } @@ -2282,16 +2286,21 @@ int MachineObject::parse_json(std::string payload) if (jj["ams"].contains("tray_tar")) { m_tray_tar = jj["ams"]["tray_tar"].get(); } - if (jj["ams"].contains("insert_flag")) { - ams_insert_flag = jj["ams"]["insert_flag"].get(); - } if (jj["ams"].contains("ams_rfid_status")) ams_rfid_status = jj["ams"]["ams_rfid_status"].get(); - if (jj["ams"].contains("power_on_flag")) { - ams_power_on_flag = jj["ams"]["power_on_flag"].get(); + if (jj["ams"].contains("insert_flag") || jj["ams"].contains("power_on_flag")) { + if (ams_user_setting_hold_count > 0) { + ams_user_setting_hold_count--; + } else { + if (jj["ams"].contains("insert_flag")) { + ams_insert_flag = jj["ams"]["insert_flag"].get(); + } + if (jj["ams"].contains("power_on_flag")) { + ams_power_on_flag = jj["ams"]["power_on_flag"].get(); + } + } } - if (ams_exist_bits != last_ams_exist_bits || last_tray_exist_bits != last_tray_exist_bits || tray_is_bbl_bits != last_is_bbl_bits diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 65c0e2dd02..39cbd3a04d 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -364,6 +364,7 @@ public: bool ams_insert_flag { false }; bool ams_power_on_flag { false }; bool ams_support_use_ams { false }; + int ams_user_setting_hold_count = 0; AmsStatusMain ams_status_main; int ams_status_sub; int ams_version = 0; From 7b2d83964271189e63f40cd502ab24d79d6462fb Mon Sep 17 00:00:00 2001 From: "yifan.wu" Date: Tue, 6 Sep 2022 20:37:59 +0800 Subject: [PATCH 37/76] ENH: update user manual covers Signed-off-by: yifan.wu Change-Id: I24eb5f391ebf2b350afafa4062e11852a7a3c669 --- resources/web/homepage/img/3d_text.png | Bin 0 -> 138465 bytes .../img/high_speed_print_at_quality.png | Bin 0 -> 152345 bytes .../web/homepage/img/multi_color_printing.png | Bin 0 -> 329163 bytes .../homepage/img/project_based_workflow.png | Bin 0 -> 25909 bytes resources/web/homepage/img/quick_start.png | Bin 0 -> 13096 bytes .../img/remote_control_and_monitoring.png | Bin 0 -> 110028 bytes .../setting_guide_of_slicing_parameters.png | Bin 0 -> 69971 bytes resources/web/homepage/img/step.png | Bin 0 -> 27163 bytes resources/web/homepage/index.html | 16 ++++++++-------- 9 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 resources/web/homepage/img/3d_text.png create mode 100644 resources/web/homepage/img/high_speed_print_at_quality.png create mode 100644 resources/web/homepage/img/multi_color_printing.png create mode 100644 resources/web/homepage/img/project_based_workflow.png create mode 100644 resources/web/homepage/img/quick_start.png create mode 100644 resources/web/homepage/img/remote_control_and_monitoring.png create mode 100644 resources/web/homepage/img/setting_guide_of_slicing_parameters.png create mode 100644 resources/web/homepage/img/step.png diff --git a/resources/web/homepage/img/3d_text.png b/resources/web/homepage/img/3d_text.png new file mode 100644 index 0000000000000000000000000000000000000000..037f5c138f9b5305c3ec2e58740d665238ebf050 GIT binary patch literal 138465 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 literal 0 HcmV?d00001 diff --git a/resources/web/homepage/img/high_speed_print_at_quality.png b/resources/web/homepage/img/high_speed_print_at_quality.png new file mode 100644 index 0000000000000000000000000000000000000000..900ee5d78be121e606c4dba13f9a26b2c9f5c48b GIT binary patch literal 152345 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

    j`5?cR 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