FIX: parts file download failed && canvas display error

Jira: [STUDIO-13253]
Change-Id: I6ce11c0ceb1c4f7ed49c41eb9c6d7a6d96e866f9
(cherry picked from commit 37f742007bc168d8a3365ca617c7bd27bafca038)
This commit is contained in:
hemai
2025-07-08 19:23:38 +08:00
committed by Noisyfox
parent 1928add5a1
commit 7d147cc550
8 changed files with 379 additions and 376 deletions

View File

@@ -5216,6 +5216,7 @@ void MachineObject::update_slice_info(std::string project_id, std::string profil
if (plate_idx >= 0) {
plate_index = plate_idx;
this->m_plate_index = plate_idx;
}
else {
std::string subtask_json;
@@ -5278,8 +5279,7 @@ void MachineObject::update_slice_info(std::string project_id, std::string profil
BOOST_LOG_TRIVIAL(error) << "task_info: get subtask id failed!";
}
}
this->m_plate_index = plate_index;
// this->m_plate_index = plate_index;
});
}
}

View File

@@ -27,14 +27,12 @@
#include "SkipPartCanvas.hpp"
#include "MediaPlayCtrl.h"
namespace Slic3r { namespace GUI {
extern wxString hide_passwd(wxString url, std::vector<wxString> const &passwords);
extern void refresh_agora_url(char const *device, char const *dev_ver, char const *channel, void *context, void (*callback)(void *context, char const *url));
PartSkipDialog::PartSkipDialog(wxWindow* parent): DPIDialog(parent, wxID_ANY, _L("Skip Objects"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX)
PartSkipDialog::PartSkipDialog(wxWindow *parent) : DPIDialog(parent, wxID_ANY, _L("Skip Objects"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX)
{
std::time_t t = std::time(0);
std::stringstream buf;
@@ -45,34 +43,32 @@ PartSkipDialog::PartSkipDialog(wxWindow* parent): DPIDialog(parent, wxID_ANY, _L
SetIcon(wxIcon(Slic3r::encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO));
SetBackgroundColour(*wxWHITE);
m_sizer = new wxBoxSizer( wxVERTICAL );
m_sizer = new wxBoxSizer(wxVERTICAL);
m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL);
m_line_top->SetMinSize(wxSize(-1, 1));
m_line_top->SetBackgroundColour(wxColour(0xA6, 0xa9, 0xAA));
m_sizer->Add(m_line_top, 0, wxEXPAND | wxTOP, FromDIP(5));
m_sizer->Add(m_line_top, 0, wxEXPAND | wxTOP, FromDIP(0));
m_simplebook = new wxSimplebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0);
m_simplebook->SetMinSize(wxSize(FromDIP(720), FromDIP(535)));
m_simplebook->SetMaxSize(wxSize(FromDIP(720), FromDIP(535)));
m_book_first_panel = new wxPanel(m_simplebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_book_first_panel = new wxPanel(m_simplebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
m_book_third_panel = new wxPanel(m_simplebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
m_book_third_panel->SetBackgroundColour(*wxWHITE);
m_dlg_sizer = new wxBoxSizer( wxVERTICAL );
m_dlg_content_sizer = new wxBoxSizer( wxHORIZONTAL );
m_canvas_sizer = new wxBoxSizer( wxVERTICAL );
m_dlg_sizer = new wxBoxSizer(wxVERTICAL);
m_dlg_content_sizer = new wxBoxSizer(wxHORIZONTAL);
m_canvas_sizer = new wxBoxSizer(wxVERTICAL);
// page 3
wxGLAttributes canvasAttrs;
canvasAttrs.PlatformDefaults().Defaults().Stencil(8).EndList();
m_canvas = new SkipPartCanvas(m_book_third_panel, canvasAttrs);
m_canvas->SetMinSize( wxSize( FromDIP(400),FromDIP(400) ) );
m_canvas->SetMaxSize( wxSize( FromDIP(400),FromDIP(400) ) );
m_canvas->SetMinSize(wxSize(FromDIP(400), FromDIP(400)));
m_canvas->SetMaxSize(wxSize(FromDIP(400), FromDIP(400)));
m_canvas_btn_sizer = new wxBoxSizer( wxHORIZONTAL );
m_canvas_btn_sizer->SetMinSize( wxSize( -1,FromDIP(28)));
m_canvas_btn_sizer = new wxBoxSizer(wxHORIZONTAL);
m_canvas_btn_sizer->SetMinSize(wxSize(-1, FromDIP(28)));
StateColor zoom_bg(std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Disabled), std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(238, 238, 238), StateColor::Hovered), std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Enabled),
@@ -89,7 +85,6 @@ PartSkipDialog::PartSkipDialog(wxWindow* parent): DPIDialog(parent, wxID_ANY, _L
m_zoom_out_btn->SetCornerRadius(0);
m_zoom_out_btn->SetMinSize(wxSize(FromDIP(56), FromDIP(28)));
StateColor percent_bg(std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Disabled), std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Hovered), std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Enabled),
std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Normal));
@@ -112,16 +107,16 @@ PartSkipDialog::PartSkipDialog(wxWindow* parent): DPIDialog(parent, wxID_ANY, _L
m_switch_drag_btn->SetToolTip(_L("Drag"));
m_switch_drag_btn->SetBackgroundColor(*wxWHITE);
m_switch_drag_btn->SetBorderColor(wxColour(238, 238, 238));
m_switch_drag_btn->SetMinSize(wxSize(FromDIP(56),FromDIP(28)));
m_switch_drag_btn->SetMinSize(wxSize(FromDIP(56), FromDIP(28)));
m_switch_drag_btn->SetCornerRadius(0);
m_canvas_btn_sizer->Add(m_zoom_out_btn, 0, wxEXPAND | wxLEFT, FromDIP(105));
m_canvas_btn_sizer->Add( m_percent_label, 0, wxEXPAND, 0 );
m_canvas_btn_sizer->Add(m_percent_label, 0, wxEXPAND, 0);
m_canvas_btn_sizer->Add(m_zoom_in_btn, 0, wxEXPAND, 0);
m_canvas_btn_sizer->Add( m_switch_drag_btn, 0, wxEXPAND | wxRIGHT, FromDIP(88) );
m_canvas_btn_sizer->Add(m_switch_drag_btn, 0, wxEXPAND | wxRIGHT, FromDIP(88));
m_list_sizer = new wxBoxSizer( wxVERTICAL );
m_list_sizer->SetMinSize( wxSize( FromDIP(267),FromDIP(422) ) );
m_list_sizer = new wxBoxSizer(wxVERTICAL);
m_list_sizer->SetMinSize(wxSize(FromDIP(267), FromDIP(422)));
auto all_checkbox_sizer = new wxBoxSizer(wxHORIZONTAL);
m_all_checkbox = new CheckBox(m_book_third_panel, wxID_ANY);
@@ -136,16 +131,16 @@ PartSkipDialog::PartSkipDialog(wxWindow* parent): DPIDialog(parent, wxID_ANY, _L
m_all_label->SetMinSize(wxSize(267, -1));
m_all_label->SetMaxSize(wxSize(267, -1));
all_checkbox_sizer->Add(m_all_checkbox, 0, wxALIGN_CENTER_VERTICAL, 0);
all_checkbox_sizer->Add(m_all_label, 0, wxLEFT| wxALIGN_CENTER_VERTICAL, FromDIP(8));
all_checkbox_sizer->Add(m_all_label, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(8));
m_line = new wxPanel(m_book_third_panel, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(267), FromDIP(1)), wxTAB_TRAVERSAL);
m_line->SetMinSize(wxSize(FromDIP(267), 1));
m_line->SetMaxSize(wxSize(FromDIP(267), 1));
m_line->SetBackgroundColour( wxColor(238, 238, 238) );
m_line->SetBackgroundColour(wxColor(238, 238, 238));
m_list_view = new wxScrolledWindow( m_book_third_panel, wxID_ANY, wxDefaultPosition, wxSize( 267,-1 ), wxHSCROLL|wxVSCROLL );
m_list_view->SetScrollRate( 5, 5 );
m_list_view->SetMinSize( wxSize( FromDIP(267),FromDIP(378)));
m_list_view = new wxScrolledWindow(m_book_third_panel, wxID_ANY, wxDefaultPosition, wxSize(267, -1), wxHSCROLL | wxVSCROLL);
m_list_view->SetScrollRate(5, 5);
m_list_view->SetMinSize(wxSize(FromDIP(267), FromDIP(378)));
m_list_view->SetMaxSize(wxSize(FromDIP(267), FromDIP(378)));
m_list_view->SetBackgroundColour(*wxWHITE);
@@ -153,19 +148,19 @@ PartSkipDialog::PartSkipDialog(wxWindow* parent): DPIDialog(parent, wxID_ANY, _L
m_list_view->SetSizer(m_scroll_sizer);
m_list_view->Layout();
m_dlg_btn_sizer = new wxBoxSizer( wxHORIZONTAL );
m_dlg_btn_sizer = new wxBoxSizer(wxHORIZONTAL);
m_dlg_btn_sizer->SetMinSize(wxSize(-1, FromDIP(54)));
m_cnt_label = new Label(m_book_third_panel, wxEmptyString);
m_cnt_label->Wrap( -1 );
m_cnt_label->Wrap(-1);
m_cnt_label->SetBackgroundColour(*wxWHITE);
m_cnt_label->SetForegroundColour(wxColour(0, 174, 66));
m_cnt_label->SetFont(Label::Head_15);
m_cnt_label->SetFont(Label::Head_16);
m_cnt_label->SetSize(wxSize(-1, FromDIP(20)));
m_cnt_label->SetMaxSize(wxSize(-1, FromDIP(20)));
m_tot_label = new Label(m_book_third_panel, wxEmptyString);
m_tot_label->Wrap( -1 );
m_tot_label->Wrap(-1);
m_tot_label->SetBackgroundColour(*wxWHITE);
m_tot_label->SetMinSize(wxSize(FromDIP(200), FromDIP(20)));
@@ -184,55 +179,54 @@ PartSkipDialog::PartSkipDialog(wxWindow* parent): DPIDialog(parent, wxID_ANY, _L
m_apply_btn->SetMinSize(wxSize(FromDIP(80), FromDIP(32)));
m_apply_btn->SetCornerRadius(FromDIP(16));
m_canvas_sizer->Add( m_canvas, 0, wxLEFT | wxTOP | wxEXPAND, FromDIP(17) );
m_canvas_sizer->Add(m_canvas_btn_sizer, 0, wxTOP , FromDIP(8));
m_canvas_sizer->Add(m_canvas, 0, wxLEFT | wxTOP | wxEXPAND, FromDIP(17));
m_canvas_sizer->Add(m_canvas_btn_sizer, 0, wxTOP, FromDIP(8));
m_list_sizer->Add(0, 0, 1, wxEXPAND, 0);
m_list_sizer->Add(0, 0, 0, wxTOP , FromDIP(27));
m_list_sizer->Add(all_checkbox_sizer, 0, wxLEFT , FromDIP(0));
m_list_sizer->Add(0, 0, 0, wxTOP, FromDIP(27));
m_list_sizer->Add(all_checkbox_sizer, 0, wxLEFT, FromDIP(0));
m_list_sizer->Add(m_line, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(12));
m_list_sizer->Add(m_list_view, 0, wxEXPAND, 0);
m_list_sizer->Add(0, 0, 1, wxEXPAND, 0);
m_dlg_content_sizer->Add( m_canvas_sizer, 0, wxEXPAND, FromDIP(0) );
m_dlg_content_sizer->Add( 0, 0, 0, wxEXPAND | wxLEFT, FromDIP(22) );
m_dlg_content_sizer->Add( m_list_sizer, 0, wxRIGHT | wxEXPAND, FromDIP(14) );
m_dlg_content_sizer->Add(m_canvas_sizer, 0, wxEXPAND, FromDIP(0));
m_dlg_content_sizer->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(22));
m_dlg_content_sizer->Add(m_list_sizer, 0, wxRIGHT | wxEXPAND, FromDIP(14));
m_dlg_btn_sizer->Add(0, 0, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(21));
m_dlg_btn_sizer->Add(m_cnt_label, 0, wxALIGN_CENTER_VERTICAL, FromDIP(0) );
#ifdef __WXMSW__
m_dlg_btn_sizer->Add(m_tot_label, 0, wxLEFT |wxTOP| wxALIGN_CENTER_VERTICAL, FromDIP(2));
#else
m_dlg_btn_sizer->Add(m_tot_label, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 0);
m_dlg_btn_sizer->Add(m_tot_label, 0, wxALIGN_CENTER_VERTICAL, 0);
#endif
m_dlg_btn_sizer->Add(0, 0, 1, wxEXPAND | wxALIGN_CENTER_VERTICAL, FromDIP(0));
m_dlg_btn_sizer->Add(m_apply_btn, 0, wxALIGN_CENTER_VERTICAL, FromDIP(0));
m_dlg_btn_sizer->Add(0, 0, 0, wxLEFT | wxEXPAND| wxALIGN_CENTER_VERTICAL, FromDIP(24));
m_dlg_btn_sizer->Add(0, 0, 0, wxLEFT | wxEXPAND | wxALIGN_CENTER_VERTICAL, FromDIP(24));
m_dlg_placeholder = new wxPanel(m_book_third_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
m_dlg_placeholder->SetMinSize(wxSize(-1, FromDIP(15)));
m_dlg_placeholder->SetMaxSize(wxSize(-1, FromDIP(15)));
m_dlg_placeholder->SetBackgroundColour(*wxWHITE);
m_dlg_sizer->Add( m_dlg_content_sizer, 1, wxEXPAND, FromDIP(0) );
m_dlg_sizer->Add(m_dlg_content_sizer, 1, wxEXPAND, FromDIP(0));
// m_dlg_sizer->Add( 0, 0, 1, wxEXPAND, FromDIP(0));
m_dlg_sizer->Add( m_dlg_btn_sizer, 0, wxEXPAND, FromDIP(0));
m_dlg_sizer->Add( m_dlg_placeholder, 0, 0, wxEXPAND, 0);
m_dlg_sizer->Add(m_dlg_btn_sizer, 0, wxEXPAND, FromDIP(0));
m_dlg_sizer->Add(m_dlg_placeholder, 0, 0, wxEXPAND, 0);
m_book_third_panel->SetSizer( m_dlg_sizer );
m_book_third_panel->SetSizer(m_dlg_sizer);
m_book_third_panel->Layout();
m_dlg_sizer->Fit( m_book_third_panel );
m_dlg_sizer->Fit(m_book_third_panel);
// page 2
m_book_second_panel = new wxPanel( m_simplebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_book_second_panel = new wxPanel(m_simplebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
m_book_second_panel->SetBackgroundColour(*wxWHITE);
m_book_second_sizer = new wxBoxSizer( wxVERTICAL );
m_book_second_btn_sizer = new wxBoxSizer( wxHORIZONTAL );
m_book_second_sizer = new wxBoxSizer(wxVERTICAL);
m_book_second_btn_sizer = new wxBoxSizer(wxHORIZONTAL);
m_retry_bitmap = new wxStaticBitmap(m_book_second_panel, -1, create_scaled_bitmap("partskip_retry", m_book_second_panel, 200), wxDefaultPosition, wxDefaultSize);
m_retry_label = new Label( m_book_second_panel, _L("Load skipping objects information failed. Please try again."));
m_retry_label->Wrap( -1 );
m_retry_label = new Label(m_book_second_panel, _L("Load skipping objects information failed. Please try again."));
m_retry_label->Wrap(-1);
m_retry_label->SetBackgroundColour(*wxWHITE);
m_book_second_sizer->Add(0, 0, 1, wxEXPAND, 0);
m_book_second_sizer->Add(m_retry_bitmap, 0, wxALIGN_CENTER_HORIZONTAL, 0);
@@ -251,13 +245,13 @@ PartSkipDialog::PartSkipDialog(wxWindow* parent): DPIDialog(parent, wxID_ANY, _L
m_book_second_btn_sizer->Add(m_second_retry_btn, 0, wxALL, FromDIP(24));
m_book_second_sizer->Add(m_book_second_btn_sizer, 0, wxALIGN_RIGHT, 0);
m_book_second_panel->SetSizer( m_book_second_sizer );
m_book_second_panel->SetSizer(m_book_second_sizer);
m_book_second_panel->Layout();
m_book_second_sizer->Fit( m_book_second_panel );
m_book_second_sizer->Fit(m_book_second_panel);
// page 1
m_book_first_panel = new wxPanel( m_simplebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_book_first_sizer = new wxBoxSizer( wxVERTICAL );
m_book_first_panel = new wxPanel(m_simplebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
m_book_first_sizer = new wxBoxSizer(wxVERTICAL);
// m_book_first_sizer->SetMinSize(wxSize(FromDIP(720), FromDIP(500)));
auto m_loading_sizer = new wxBoxSizer(wxHORIZONTAL);
@@ -265,28 +259,27 @@ PartSkipDialog::PartSkipDialog(wxWindow* parent): DPIDialog(parent, wxID_ANY, _L
m_loading_icon = new AnimaIcon(m_book_first_panel, wxID_ANY, list, "refresh_printer", 100);
m_loading_icon->SetMinSize(wxSize(FromDIP(25), FromDIP(25)));
m_loading_label = new Label( m_book_first_panel, _L("Loading ..."));
m_loading_label->Wrap( -1 );
m_loading_label = new Label(m_book_first_panel, _L("Loading ..."));
m_loading_label->Wrap(-1);
m_loading_label->SetBackgroundColour(*wxWHITE);
m_loading_sizer->Add(m_loading_icon, 0, wxALL, FromDIP(5));
m_loading_sizer->Add(m_loading_label, 0, wxALL, FromDIP(5));
m_loading_sizer->Add(m_loading_icon, 0, wxALIGN_CENTER_VERTICAL, FromDIP(0));
m_loading_sizer->Add(m_loading_label, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(5));
m_book_first_sizer->Add(0, 0, 1, wxEXPAND, 0);
m_book_first_sizer->Add( m_loading_sizer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 0);
m_book_first_sizer->Add(m_loading_sizer, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_CENTER_HORIZONTAL, 0);
m_book_first_sizer->Add(0, 0, 1, wxEXPAND, 0);
m_book_first_panel->SetSizer( m_book_first_sizer );
m_book_first_panel->SetSizer(m_book_first_sizer);
m_book_first_panel->Layout();
m_book_first_sizer->Fit( m_book_first_panel );
m_book_first_sizer->Fit(m_book_first_panel);
m_simplebook->AddPage( m_book_first_panel, _("loading page"), false );
m_simplebook->AddPage( m_book_second_panel, _("retry page"), false );
m_simplebook->AddPage( m_book_third_panel, _("dialog page"), false );
m_sizer->Add( m_simplebook, 1, wxEXPAND | wxALL, 5 );
m_simplebook->AddPage(m_book_first_panel, _("loading page"), false);
m_simplebook->AddPage(m_book_second_panel, _("retry page"), false);
m_simplebook->AddPage(m_book_third_panel, _("dialog page"), false);
m_sizer->Add(m_simplebook, 1, wxEXPAND | wxALL, 5);
SetSizer( m_sizer );
SetSizer(m_sizer);
m_zoom_in_btn->Bind(wxEVT_BUTTON, &PartSkipDialog::OnZoomIn, this);
m_zoom_out_btn->Bind(wxEVT_BUTTON, &PartSkipDialog::OnZoomOut, this);
m_switch_drag_btn->Bind(wxEVT_BUTTON, &PartSkipDialog::OnSwitchDrag, this);
@@ -296,14 +289,15 @@ PartSkipDialog::PartSkipDialog(wxWindow* parent): DPIDialog(parent, wxID_ANY, _L
m_apply_btn->Bind(wxEVT_BUTTON, &PartSkipDialog::OnApplyDialog, this);
m_all_checkbox->Bind(wxEVT_TOGGLEBUTTON, &PartSkipDialog::OnAllCheckbox, this);
Fit();
Layout();
Fit();
CentreOnParent();
}
PartSkipDialog::~PartSkipDialog() {}
void PartSkipDialog::on_dpi_changed(const wxRect& suggested_rect) {
void PartSkipDialog::on_dpi_changed(const wxRect &suggested_rect)
{
m_canvas->LoadPickImage(m_local_paths[0]);
m_loading_icon->SetMinSize(wxSize(FromDIP(25), FromDIP(25)));
@@ -332,7 +326,6 @@ void PartSkipDialog::on_dpi_changed(const wxRect& suggested_rect) {
m_line->SetMinSize(wxSize(FromDIP(267), 1));
m_line->SetMaxSize(wxSize(FromDIP(267), 1));
m_apply_btn->SetMinSize(wxSize(FromDIP(80), FromDIP(32)));
m_apply_btn->SetCornerRadius(FromDIP(16));
m_apply_btn->Rescale();
@@ -345,17 +338,15 @@ void PartSkipDialog::on_dpi_changed(const wxRect& suggested_rect) {
m_second_retry_btn->SetCornerRadius(FromDIP(16));
m_second_retry_btn->Rescale();
m_all_checkbox->SetMinSize(wxSize(FromDIP(18), FromDIP(18)));
m_all_checkbox->Rescale();
for (auto it = m_scroll_sizer->GetChildren().begin(); it != m_scroll_sizer->GetChildren().end(); ++it) {
wxSizerItem *item = *it;
if (item && item->IsSizer()) {
wxSizer* sizer = item->GetSizer();
auto check_item = sizer->GetItem((size_t)0);
if (check_item && check_item->IsWindow())
{
wxSizer *sizer = item->GetSizer();
auto check_item = sizer->GetItem((size_t) 0);
if (check_item && check_item->IsWindow()) {
wxWindow *window = check_item->GetWindow();
CheckBox *checkbox = dynamic_cast<CheckBox *>(window);
checkbox->SetMinSize(wxSize(FromDIP(18), FromDIP(18)));
@@ -373,8 +364,8 @@ void PartSkipDialog::on_dpi_changed(const wxRect& suggested_rect) {
Layout();
}
std::string PartSkipDialog::create_tmp_path(){
std::string PartSkipDialog::create_tmp_path()
{
boost::filesystem::path parent_path(temporary_dir());
std::stringstream buf;
@@ -386,53 +377,52 @@ std::string PartSkipDialog::create_tmp_path(){
} else {
buf << 1 << "_" << 1 << "/";
}
std::string tmp_path = (parent_path / buf.str() ).string();
std::string tmp_path = (parent_path / buf.str()).string();
if (!std::filesystem::exists(tmp_path + "Metadata/") && !fs::create_directories(tmp_path + "Metadata/")) {
wxMessageBox("create file failed.");
}
if (!std::filesystem::exists(tmp_path + "Metadata/") && !fs::create_directories(tmp_path + "Metadata/")) { wxMessageBox("create file failed."); }
return tmp_path;
}
bool PartSkipDialog::is_local_file_existed(const std::vector<string> &local_paths)
{
for (auto path : local_paths) {
if (!std::filesystem::exists(path)) {
return false;
}
if (!std::filesystem::exists(path)) { return false; }
}
return true;
}
void PartSkipDialog::DownloadPartsFile()
{
m_tmp_path = create_tmp_path(); //wxGetApp().app_config->get("download_path");
m_tmp_path = create_tmp_path(); // wxGetApp().app_config->get("download_path");
m_local_paths.clear();
m_target_paths.clear();
int plate_idx = m_obj ? m_obj->m_plate_index : 1;
m_plate_idx = m_obj ? m_obj->m_plate_index : -1;
if (m_plate_idx < 0) {
m_plate_idx = 1;
BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << "part skip: printer plate index is invalid.";
}
m_local_paths.push_back(m_tmp_path + "Metadata/pick_" + std::to_string(plate_idx) + ".png");
m_local_paths.push_back(m_tmp_path + "Metadata/pick_" + std::to_string(m_plate_idx) + ".png");
m_local_paths.push_back(m_tmp_path + "Metadata/model_settings.config");
m_local_paths.push_back(m_tmp_path + "Metadata/slice_info.config");
m_target_paths.push_back("Metadata/pick_" + std::to_string(plate_idx) + ".png");
m_target_paths.push_back("Metadata/pick_" + std::to_string(m_plate_idx) + ".png");
m_target_paths.push_back("Metadata/model_settings.config");
m_target_paths.push_back("Metadata/slice_info.config");
if (!is_local_file_existed(m_local_paths)) {
if(!m_file_sys){
if (!m_file_sys) {
m_file_sys = boost::make_shared<PrinterFileSystem>();
m_file_sys->Attached();
m_file_sys->Bind(EVT_STATUS_CHANGED, &PartSkipDialog::OnFileSystemEvent, this);
m_file_sys->Bind(EVT_RAMDOWNLOAD, &PartSkipDialog::OnFileSystemResult, this);
m_file_sys->Start();
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ <<"part skip: print file system start.";
}else{
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "part skip: print file system start.";
} else {
m_file_sys->Retry();
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ <<"part skip: print file system retry.";
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "part skip: print file system retry.";
}
} else {
m_file_sys->SendExistedFile();
@@ -459,9 +449,7 @@ void PartSkipDialog::fetchUrl(boost::weak_ptr<PrinterFileSystem> wfs)
std::string agent_version = agent ? agent->get_version() : "";
auto url_state = m_url_state;
if(obj->is_lan_mode_printer()){
url_state = URL_TCP;
}
if (obj->is_lan_mode_printer()) { url_state = URL_TCP; }
if (agent) {
switch (url_state) {
@@ -528,11 +516,11 @@ void PartSkipDialog::OnFileSystemEvent(wxCommandEvent &e)
}
case PrinterFileSystem::Failed: {
m_file_sys->Stop();
if( m_url_state == URL_TCP){
if (m_url_state == URL_TCP) {
m_url_state = URL_TUTK;
m_file_sys->Retry();
BOOST_LOG_TRIVIAL(info) << "part skip: print file system connnect failed first.";
}else{
} else {
m_file_sys->SendConnectFail();
BOOST_LOG_TRIVIAL(info) << "part skip: print file system connnect failed second.";
}
@@ -551,60 +539,61 @@ void PartSkipDialog::OnFileSystemEvent(wxCommandEvent &e)
}
// reseter: [TCP -> TUTK(TCP)] -> [TCP -> TUTK(TCP)]
void PartSkipDialog::OnFileSystemResult(wxCommandEvent &event){
void PartSkipDialog::OnFileSystemResult(wxCommandEvent &event)
{
int result = event.GetInt();
m_loading_icon->Stop();
if (result == 0) {
InitDialogUI();
SetSimplebookPage(2);
m_file_sys->Stop();
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ <<"part skip: on file system result success.";
}else{
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "part skip: on file system result success.";
} else {
m_url_state = URL_TCP;
SetSimplebookPage(1);
m_file_sys->Stop();
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ <<"part skip: on file system result failed.";
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "part skip: on file system result failed.";
}
}
void PartSkipDialog::InitSchedule(MachineObject *obj){
void PartSkipDialog::InitSchedule(MachineObject *obj)
{
m_obj = obj;
SetSimplebookPage(0);
m_loading_icon->Play();
DownloadPartsFile();
}
void PartSkipDialog::OnRetryButton(wxCommandEvent &event) {
void PartSkipDialog::OnRetryButton(wxCommandEvent &event)
{
event.Skip();
InitSchedule(m_obj);
Refresh();
}
bool PartSkipDialog::is_drag_mode() { return m_is_drag == true; }
bool PartSkipDialog::is_drag_mode(){
return m_is_drag == true;
}
PartsInfo PartSkipDialog::GetPartsInfo(){
PartsInfo PartSkipDialog::GetPartsInfo()
{
PartsInfo parts_info;
for (auto [part_id, part_state] : this->m_parts_state)
{
parts_info.push_back(std::pair<int, PartState>(part_id, part_state));
}
for (auto [part_id, part_state] : this->m_parts_state) { parts_info.push_back(std::pair<int, PartState>(part_id, part_state)); }
return parts_info;
}
void PartSkipDialog::OnZoomIn(wxCommandEvent &event){
void PartSkipDialog::OnZoomIn(wxCommandEvent &event)
{
m_canvas->ZoomIn(20);
UpdateZoomPercent();
}
void PartSkipDialog::OnZoomOut(wxCommandEvent &event){
void PartSkipDialog::OnZoomOut(wxCommandEvent &event)
{
m_canvas->ZoomOut(20);
UpdateZoomPercent();
}
void PartSkipDialog::OnSwitchDrag(wxCommandEvent& event){
void PartSkipDialog::OnSwitchDrag(wxCommandEvent &event)
{
if (this->is_drag_mode()) {
m_is_drag = false;
m_switch_drag_btn->SetBackgroundColor(*wxWHITE);
@@ -617,7 +606,8 @@ void PartSkipDialog::OnSwitchDrag(wxCommandEvent& event){
m_canvas->SwitchDrag(m_is_drag);
}
void PartSkipDialog::OnZoomPercent(wxCommandEvent &event) {
void PartSkipDialog::OnZoomPercent(wxCommandEvent &event)
{
m_zoom_percent = event.GetInt();
if (m_zoom_percent >= 1000) {
m_zoom_percent = 1000;
@@ -637,25 +627,21 @@ void PartSkipDialog::OnZoomPercent(wxCommandEvent &event) {
UpdateZoomPercent();
}
void PartSkipDialog::UpdatePartsStateFromCanvas(wxCommandEvent &event) {
void PartSkipDialog::UpdatePartsStateFromCanvas(wxCommandEvent &event)
{
int part_id = event.GetExtraLong();
PartState part_state = PartState(event.GetInt());
m_parts_state[part_id] = part_state;
if(part_state == psUnCheck){
m_all_checkbox->SetValue(false);
}
if(IsAllChecked()){
m_all_checkbox->SetValue(true);
}
if (part_state == psUnCheck) { m_all_checkbox->SetValue(false); }
if (IsAllChecked()) { m_all_checkbox->SetValue(true); }
UpdateDialogUI();
}
void PartSkipDialog::UpdateZoomPercent() {
m_percent_label->SetLabel(wxString::Format(_L("%d%%"), m_zoom_percent));
}
void PartSkipDialog::UpdateZoomPercent() { m_percent_label->SetLabel(wxString::Format(_L("%d%%"), m_zoom_percent)); }
void PartSkipDialog::UpdateCountLabel() {
void PartSkipDialog::UpdateCountLabel()
{
int check_cnt = 0;
int tot_cnt = 0;
for (auto [part_id, part_state] : m_parts_state) {
@@ -678,7 +664,8 @@ bool PartSkipDialog::Show(bool show)
return DPIDialog::Show(show);
}
void PartSkipDialog::InitDialogUI() {
void PartSkipDialog::InitDialogUI()
{
m_print_lock = true;
BOOST_LOG_TRIVIAL(info) << "part skip: lock parts info from printer.";
m_scroll_sizer->Clear(true);
@@ -702,40 +689,40 @@ void PartSkipDialog::InitDialogUI() {
ModelSettingHelper helper(slice_info);
if (helper.Parse()) {
int plate_idx = m_obj ? m_obj->m_plate_index : 0;
auto parse_result = helper.GetPlates()[plate_idx - 1].objects;
for (const auto& part : parse_result) {
auto parse_result = helper.GetPlateObjects(m_plate_idx);
for (const auto &part : parse_result) {
m_parts_state[part.identify_id] = part.state;
m_parts_name[part.identify_id] = part.name;
}
if (m_obj) {
std::vector<int> partskip_ids = m_obj->m_partskip_ids;
for (auto part_id : partskip_ids) {
m_parts_state[part_id] = PartState::psSkipped;
}
for (auto part_id : partskip_ids) { m_parts_state[part_id] = PartState::psSkipped; }
}
for(const auto& [part_id, part_state] : m_parts_state) {
for (const auto &[part_id, part_state] : m_parts_state) {
auto line_sizer = new wxBoxSizer(wxHORIZONTAL);
auto checkbox = new CheckBox(m_list_view);
auto label = new Label(m_list_view, wxEmptyString);
checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, part_id=part_id](wxCommandEvent& event) {
checkbox->Bind(
wxEVT_TOGGLEBUTTON,
[this, part_id = part_id](wxCommandEvent &event) {
m_parts_state[part_id] = event.IsChecked() ? PartState::psChecked : PartState::psUnCheck;
if(!event.IsChecked()){
if (!event.IsChecked()) {
m_all_checkbox->SetValue(false);
}else if(IsAllChecked()){
} else if (IsAllChecked()) {
m_all_checkbox->SetValue(true);
}
m_canvas->UpdatePartsInfo(GetPartsInfo());
UpdateCountLabel();
event.Skip();
}, checkbox->GetId());
},
checkbox->GetId());
if (part_state == PartState::psChecked) {
checkbox->SetValue(true);
checkbox->Enable(true);
} else if(part_state == PartState::psUnCheck) {
} else if (part_state == PartState::psUnCheck) {
checkbox->SetValue(false);
checkbox->Enable(true);
} else if (part_state == PartState::psSkipped) {
@@ -744,7 +731,7 @@ void PartSkipDialog::InitDialogUI() {
}
label->SetLabel(wxString::FromUTF8(m_parts_name[part_id]));
label->SetBackgroundColour(*wxWHITE);
label->SetForegroundColour(wxColor(107,107,107));
label->SetForegroundColour(wxColor(107, 107, 107));
label->Wrap(-1);
label->SetMinSize(wxSize(-1, FromDIP(18)));
checkbox->SetBackgroundColour(*wxWHITE);
@@ -766,7 +753,8 @@ void PartSkipDialog::InitDialogUI() {
BOOST_LOG_TRIVIAL(info) << "part skip: unlock parts info from printer.";
}
void PartSkipDialog::UpdatePartsStateFromPrinter(MachineObject *obj) {
void PartSkipDialog::UpdatePartsStateFromPrinter(MachineObject *obj)
{
if (m_print_lock) {
BOOST_LOG_TRIVIAL(info) << "part skip: parts info from printer is locked.";
return;
@@ -775,22 +763,22 @@ void PartSkipDialog::UpdatePartsStateFromPrinter(MachineObject *obj) {
if (m_obj) {
bool update_flag = false;
std::vector<int> partskip_ids = m_obj->m_partskip_ids;
for(auto part_id : partskip_ids) {
if(m_parts_state[part_id] != PartState::psSkipped){
for (auto part_id : partskip_ids) {
if (m_parts_state[part_id] != PartState::psSkipped) {
m_parts_state[part_id] = PartState::psSkipped;
update_flag = true;
}
}
if(update_flag){
if (update_flag) {
m_canvas->UpdatePartsInfo(GetPartsInfo());
UpdateDialogUI();
}
}
}
void PartSkipDialog::UpdateDialogUI(){
if(m_parts_state.size() != m_scroll_sizer->GetItemCount()){
void PartSkipDialog::UpdateDialogUI()
{
if (m_parts_state.size() != m_scroll_sizer->GetItemCount()) {
BOOST_LOG_TRIVIAL(warning) << "part skip: m_parts_state and m_scroll_sizer mismatch.";
return;
}
@@ -801,11 +789,10 @@ void PartSkipDialog::UpdateDialogUI(){
wxSizerItem *item = m_scroll_sizer->GetItem(idx);
if (item && item->IsSizer()) {
wxSizer* sizer = item->GetSizer();
auto check_item = sizer->GetItem((size_t)0);
wxSizer *sizer = item->GetSizer();
auto check_item = sizer->GetItem((size_t) 0);
if (check_item && check_item->IsWindow())
{
if (check_item && check_item->IsWindow()) {
wxWindow *window = check_item->GetWindow();
CheckBox *checkbox = dynamic_cast<CheckBox *>(window);
if (part_state == PartState::psChecked) {
@@ -824,14 +811,12 @@ void PartSkipDialog::UpdateDialogUI(){
Refresh();
}
void PartSkipDialog::SetSimplebookPage(int page) {
m_simplebook->SetSelection(page);
}
void PartSkipDialog::SetSimplebookPage(int page) { m_simplebook->SetSelection(page); }
bool PartSkipDialog::IsAllChecked() {
for (auto& [part_id, part_state] : m_parts_state) {
if (part_state == PartState::psUnCheck)
return false;
bool PartSkipDialog::IsAllChecked()
{
for (auto &[part_id, part_state] : m_parts_state) {
if (part_state == PartState::psUnCheck) return false;
}
return true;
}
@@ -839,15 +824,12 @@ bool PartSkipDialog::IsAllChecked() {
void PartSkipDialog::OnAllCheckbox(wxCommandEvent &event)
{
if (m_all_checkbox->GetValue()) {
for (auto& [part_id, part_state] : m_parts_state) {
if (part_state == PartState::psUnCheck)
part_state = PartState::psChecked;
for (auto &[part_id, part_state] : m_parts_state) {
if (part_state == PartState::psUnCheck) part_state = PartState::psChecked;
}
}
else{
for (auto& [part_id, part_state] : m_parts_state) {
if (part_state == PartState::psChecked)
part_state = PartState::psUnCheck;
} else {
for (auto &[part_id, part_state] : m_parts_state) {
if (part_state == PartState::psChecked) part_state = PartState::psUnCheck;
}
}
m_canvas->UpdatePartsInfo(GetPartsInfo());
@@ -855,15 +837,12 @@ void PartSkipDialog::OnAllCheckbox(wxCommandEvent &event)
event.Skip();
}
void PartSkipDialog::OnApplyDialog(wxCommandEvent &event)
{
event.Skip();
m_partskip_ids.clear();
for (const auto& [part_id, part_state] : m_parts_state) {
if (part_state == PartState::psChecked) {
m_partskip_ids.push_back(part_id);
}
for (const auto &[part_id, part_state] : m_parts_state) {
if (part_state == PartState::psChecked) { m_partskip_ids.push_back(part_id); }
}
bool all_skipped = true;
@@ -872,17 +851,17 @@ void PartSkipDialog::OnApplyDialog(wxCommandEvent &event)
}
PartSkipConfirmDialog confirm_dialog(this);
if (all_skipped){
if (all_skipped) {
confirm_dialog.SetMsgLabel(_L("Skipping all objects."));
confirm_dialog.SetTipLabel(_L("The printing job will be stopped. Continue?"));
}else{
} else {
confirm_dialog.SetMsgLabel(wxString::Format(_L("Skipping %d objects."), m_partskip_ids.size()));
confirm_dialog.SetTipLabel(_L("This action cannot be undone. Continue?"));
}
if(confirm_dialog.ShowModal() == wxID_OK){
if (confirm_dialog.ShowModal() == wxID_OK) {
if (m_obj) {
BOOST_LOG_TRIVIAL(info) << "part skip: skipping "<< m_partskip_ids.size() <<" objects.";
BOOST_LOG_TRIVIAL(info) << "part skip: skipping " << m_partskip_ids.size() << " objects.";
if (all_skipped) {
m_obj->command_task_abort();
@@ -898,11 +877,11 @@ void PartSkipDialog::OnApplyDialog(wxCommandEvent &event)
}
}
int PartSkipDialog::GetAllSkippedPartsNum() {
int PartSkipDialog::GetAllSkippedPartsNum()
{
int skipped_cnt = 0;
for (auto& [part_id, part_state] : m_parts_state) {
if (part_state == PartState::psSkipped || part_state == PartState::psChecked)
skipped_cnt++;
for (auto &[part_id, part_state] : m_parts_state) {
if (part_state == PartState::psSkipped || part_state == PartState::psChecked) skipped_cnt++;
}
return skipped_cnt;
}
@@ -915,8 +894,8 @@ PartSkipConfirmDialog::PartSkipConfirmDialog(wxWindow *parent) : DPIDialog(paren
SetMinSize(wxSize(FromDIP(480), FromDIP(215)));
SetSizeHints(wxDefaultSize, wxDefaultSize);
wxBoxSizer* m_sizer;
m_sizer = new wxBoxSizer( wxVERTICAL );
wxBoxSizer *m_sizer;
m_sizer = new wxBoxSizer(wxVERTICAL);
auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL);
m_line_top->SetMinSize(wxSize(FromDIP(480), 1));
@@ -925,25 +904,24 @@ PartSkipConfirmDialog::PartSkipConfirmDialog(wxWindow *parent) : DPIDialog(paren
m_sizer->Add(m_line_top, 0, wxEXPAND, 0);
m_sizer->Add(0, 0, 0, wxALL, FromDIP(15));
m_msg_label = new Label( this, _L("Skipping objects."));
m_msg_label->Wrap( -1 );
m_msg_label = new Label(this, _L("Skipping objects."));
m_msg_label->Wrap(-1);
m_msg_label->SetBackgroundColour(*wxWHITE);
m_tip_label = new Label(this, _L("This action cannot be undone. Continue?"));
m_tip_label->Wrap(-1);
m_tip_label->SetBackgroundColour(*wxWHITE);
m_tip_label->SetForegroundColour(wxColor(92,92,92));
m_tip_label->SetForegroundColour(wxColor(92, 92, 92));
m_sizer->Add(m_msg_label, 0, wxLEFT, FromDIP(29));
m_sizer->Add(0, 0, 0, wxTOP, FromDIP(9));
m_sizer->Add(m_tip_label, 0, wxLEFT, FromDIP(29));
wxBoxSizer* m_button_sizer;
wxBoxSizer *m_button_sizer;
m_button_sizer = new wxBoxSizer(wxHORIZONTAL);
m_button_sizer->SetMinSize(wxSize(FromDIP(480), FromDIP(54)));
m_button_sizer->Add(0, 0, 1, wxEXPAND, 0);
StateColor btn_bg_white(std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Pressed), std::pair<wxColour, int>(wxColour(238, 238, 238), StateColor::Hovered),
std::pair<wxColour, int>(*wxWHITE, StateColor::Normal));
@@ -958,23 +936,21 @@ PartSkipConfirmDialog::PartSkipConfirmDialog(wxWindow *parent) : DPIDialog(paren
m_apply_button->SetSize(wxSize(FromDIP(80), FromDIP(32)));
m_apply_button->SetMinSize(wxSize(FromDIP(80), FromDIP(32)));
m_apply_button->SetCornerRadius(FromDIP(16));
m_apply_button->Bind(wxEVT_BUTTON, [this](auto& e){
m_apply_button->Bind(wxEVT_BUTTON, [this](auto &e) {
EndModal(wxID_OK);
e.Skip();
});
m_button_sizer->Add(m_apply_button, 0, wxRIGHT | wxBOTTOM, FromDIP(24));
m_sizer->Add(m_button_sizer, 1, wxEXPAND, FromDIP(5));
m_sizer->Fit( this );
m_sizer->Fit(this);
SetSizer( m_sizer );
SetSizer(m_sizer);
Layout();
Fit();
}
PartSkipConfirmDialog::~PartSkipConfirmDialog()
{
}
PartSkipConfirmDialog::~PartSkipConfirmDialog() {}
bool PartSkipConfirmDialog::Show(bool show)
{
@@ -988,7 +964,8 @@ bool PartSkipConfirmDialog::Show(bool show)
return DPIDialog::Show(show);
}
void PartSkipConfirmDialog::on_dpi_changed(const wxRect& suggested_rect) {
void PartSkipConfirmDialog::on_dpi_changed(const wxRect &suggested_rect)
{
m_apply_button->SetMinSize(wxSize(FromDIP(80), FromDIP(32)));
m_apply_button->SetCornerRadius(FromDIP(16));
m_apply_button->Rescale();
@@ -996,20 +973,10 @@ void PartSkipConfirmDialog::on_dpi_changed(const wxRect& suggested_rect) {
Fit();
}
Button *PartSkipConfirmDialog::GetConfirmButton() { return m_apply_button; }
Button* PartSkipConfirmDialog::GetConfirmButton()
{
return m_apply_button;
}
void PartSkipConfirmDialog::SetMsgLabel(wxString msg) { m_msg_label->SetLabel(msg); }
void PartSkipConfirmDialog::SetMsgLabel(wxString msg){
m_msg_label->SetLabel(msg);
}
void PartSkipConfirmDialog::SetTipLabel(wxString msg) { m_tip_label->SetLabel(msg); }
void PartSkipConfirmDialog::SetTipLabel(wxString msg){
m_tip_label->SetLabel(msg);
}
}
} // namespace Slic3r::GUI
}} // namespace Slic3r::GUI

View File

@@ -47,7 +47,7 @@ public:
~PartSkipConfirmDialog();
void on_dpi_changed(const wxRect &suggested_rect);
Button* GetConfirmButton();
Button *GetConfirmButton();
void SetMsgLabel(wxString msg);
void SetTipLabel(wxString msg);
bool Show(bool show);
@@ -69,48 +69,49 @@ public:
MachineObject *m_obj{nullptr};
wxSimplebook* m_simplebook;
wxPanel* m_book_third_panel;
wxPanel* m_book_second_panel;
wxPanel* m_book_first_panel;
wxSimplebook *m_simplebook;
wxPanel *m_book_third_panel;
wxPanel *m_book_second_panel;
wxPanel *m_book_first_panel;
SkipPartCanvas* m_canvas;
Button* m_zoom_in_btn;
Button* m_zoom_out_btn;
Button* m_switch_drag_btn;
CheckBox* m_all_checkbox;
Button* m_percent_label;
Label* m_all_label;
wxPanel* m_line;
wxPanel* m_line_top;
wxScrolledWindow* m_list_view;
SkipPartCanvas *m_canvas;
Button *m_zoom_in_btn;
Button *m_zoom_out_btn;
Button *m_switch_drag_btn;
CheckBox *m_all_checkbox;
Button *m_percent_label;
Label *m_all_label;
wxPanel *m_line;
wxPanel *m_line_top;
wxScrolledWindow *m_list_view;
wxPanel* m_dlg_placeholder;
Label* m_cnt_label;
Label* m_tot_label;
wxPanel *m_dlg_placeholder;
Label *m_cnt_label;
Label *m_tot_label;
Button* m_apply_btn;
Button *m_apply_btn;
Label* m_loading_label;
Label* m_retry_label;
ScalableBitmap* m_retry_icon;
wxStaticBitmap* m_retry_bitmap;
Label *m_loading_label;
Label *m_retry_label;
ScalableBitmap *m_retry_icon;
wxStaticBitmap *m_retry_bitmap;
wxBoxSizer* m_sizer;
wxBoxSizer* m_dlg_sizer;
wxBoxSizer* m_dlg_content_sizer;
wxBoxSizer* m_dlg_btn_sizer;
wxBoxSizer* m_canvas_sizer;
wxBoxSizer* m_canvas_btn_sizer;
wxBoxSizer* m_list_sizer;
wxBoxSizer* m_scroll_sizer;
wxBoxSizer* m_book_first_sizer;
wxBoxSizer* m_book_second_sizer;
wxBoxSizer* m_book_second_btn_sizer;
Button* m_second_retry_btn;
AnimaIcon* m_loading_icon;
wxBoxSizer *m_sizer;
wxBoxSizer *m_dlg_sizer;
wxBoxSizer *m_dlg_content_sizer;
wxBoxSizer *m_dlg_btn_sizer;
wxBoxSizer *m_canvas_sizer;
wxBoxSizer *m_canvas_btn_sizer;
wxBoxSizer *m_list_sizer;
wxBoxSizer *m_scroll_sizer;
wxBoxSizer *m_book_first_sizer;
wxBoxSizer *m_book_second_sizer;
wxBoxSizer *m_book_second_btn_sizer;
Button *m_second_retry_btn;
AnimaIcon *m_loading_icon;
private:
int m_plate_idx{-1};
int m_zoom_percent{100};
bool m_is_drag{false};
bool m_print_lock{true};
@@ -139,7 +140,6 @@ private:
void OnFileSystemResult(wxCommandEvent &event);
void fetchUrl(boost::weak_ptr<PrinterFileSystem> wfs);
void OnZoomIn(wxCommandEvent &event);
void OnZoomOut(wxCommandEvent &event);
void OnSwitchDrag(wxCommandEvent &event);
@@ -156,4 +156,4 @@ private:
void OnApplyDialog(wxCommandEvent &event);
};
}}
}} // namespace Slic3r::GUI

View File

@@ -252,6 +252,7 @@ struct PrinterFileSystem::Download : Progress
void PrinterFileSystem::GetPickImages(const std::vector<std::string> &local_paths, const std::vector<std::string> &targetpaths)
{
m_download_states.clear();
GetPickImage(1, local_paths[0], targetpaths[0]);
GetPickImage(2, local_paths[1], targetpaths[1]);
@@ -303,6 +304,9 @@ void PrinterFileSystem::DownloadRamFile(int index, const std::string &local_path
wxLogWarning("Download failed: result = 1");
return ERROR_JSON;
}
if(mem_dl_json.contains("size") && mem_dl_json["size"] == 0 )
return FILE_SIZE_ERR;
return CONTINUE;
}
@@ -355,13 +359,27 @@ void PrinterFileSystem::DownloadRamFile(int index, const std::string &local_path
if (result == CONTINUE) { return; }
std::string msg;
if (result == SUCCESS) {
wxLogMessage("DownloadImageFromRam finished: %s", download->local_path);
msg = "SUCCESS";
SendChangedEvent(EVT_RAMDOWNLOAD, result, result ? download->error : download->local_path);
if (std::filesystem::exists(download->local_path)) {
m_download_states.emplace_back(true);
BOOST_LOG_TRIVIAL(info) <<"DownloadImageFromRam finished: " << download->local_path << "result = " << result;
}else{
m_download_states.emplace_back(false);
BOOST_LOG_TRIVIAL(warning) <<"DownloadImageFromRam finished, but file not exist: " << download->local_path << "result = " << result;
}
} else if (result != CONTINUE) {
wxLogWarning("DownloadImageFromRam failed: %s", download->error);
msg = "ERROR";
SendChangedEvent(EVT_RAMDOWNLOAD, result, result ? download->error : download->local_path);
m_download_states.emplace_back(false);
BOOST_LOG_TRIVIAL(warning) << "DownloadImageFromRam failed: " << download->error << "result = " << result;
}
if(m_download_states.size() == 3){
if(m_download_states[0] && m_download_states[1] && m_download_states[2]){
SendChangedEvent(EVT_RAMDOWNLOAD, SUCCESS);
}else{
// FILE_NO_EXIST is not really error_code
SendChangedEvent(EVT_RAMDOWNLOAD, FILE_NO_EXIST);
}
}else{
BOOST_LOG_TRIVIAL(warning) << "m_download_states current size is : " << m_download_states.size();
}
},param);
}

View File

@@ -317,6 +317,8 @@ private:
size_t m_lock_end = 0;
int m_task_flags = 0;
std::vector<bool> m_download_states;
private:
struct Session
{

View File

@@ -9,6 +9,7 @@
#include <expat.h>
#include <earcut/earcut.hpp>
#include <libslic3r/Color.hpp>
#include <filesystem>
wxDEFINE_EVENT(EVT_ZOOM_PERCENT, wxCommandEvent);
wxDEFINE_EVENT(EVT_CANVAS_PART, wxCommandEvent);
@@ -32,6 +33,8 @@ SkipPartCanvas::SkipPartCanvas(wxWindow *parent, const wxGLAttributes& dispAttrs
void SkipPartCanvas::LoadPickImage(const std::string & path)
{
if(!std::filesystem::exists(path)) return;
auto ParseShapeId = [](cv::Mat image, const std::vector<std::vector<cv::Point>> &contours, const std::vector<cv::Vec4i> &hierarchy, int root_idx) -> uint32_t {
cv::Mat mask = cv::Mat::zeros(image.size(), CV_8UC1);
@@ -249,8 +252,12 @@ void SkipPartCanvas::Render()
int w, h;
GetClientSize(&w, &h);
#if defined(__APPLE__)
double scale = GetDPIScaleFactor();
glViewport(0, 0, w * scale, h * scale);
#else
glViewport(0, 0, w, h);
#endif
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
auto view_rect = ViewPtToImagePt(wxPoint(w, h));
@@ -661,7 +668,14 @@ void XMLCALL ModelSettingHelper::EndElementHandler(void *userData, const XML_Cha
}
}
std::vector<PlateInfo> ModelSettingHelper::GetPlates() { return context_.plates; }
std::vector<ObjectInfo> ModelSettingHelper::GetPlateObjects(int plate_idx) {
for (const auto &plate : context_.plates) {
if (plate.index == plate_idx) {
return plate.objects;
}
}
return std::vector<ObjectInfo>();
}
void ModelSettingHelper::DataHandler(const XML_Char *s, int len)
{

View File

@@ -150,7 +150,7 @@ public:
ModelSettingHelper(const std::string &path);
bool Parse();
std::vector<PlateInfo> GetPlates();
std::vector<ObjectInfo> GetPlateObjects(int plate_idx);
private:
std::string path_;

View File

@@ -9,12 +9,13 @@
AnimaIcon::AnimaIcon(wxWindow *parent, wxWindowID id, std::vector<std::string> img_list, std::string img_enable, int ivt)
: wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize), m_ivt(ivt)
{
auto sizer = new wxBoxSizer(wxHORIZONTAL);
SetBackgroundColour((wxColour(255, 255, 255)));
m_size = 20;
m_size = 25;
//add ScalableBitmap
for (const auto &filename : img_list) m_images.emplace_back(create_scaled_bitmap(filename, this, FromDIP(m_size)));
m_image_enable = create_scaled_bitmap(img_enable, this, FromDIP(m_size-8));
for (const auto &filename : img_list) m_images.emplace_back(create_scaled_bitmap(filename, this, m_size));
m_image_enable = create_scaled_bitmap(img_enable, this, m_size-8);
// show first wxStaticBitmap
if (!m_images.empty()) m_bitmap = new wxStaticBitmap(this, wxID_ANY, m_images[0], wxDefaultPosition, wxSize(FromDIP(m_size), FromDIP(m_size)));
@@ -47,12 +48,13 @@ AnimaIcon::AnimaIcon(wxWindow *parent, wxWindowID id, std::vector<std::string> i
SetCursor(wxCursor(wxCURSOR_ARROW));
e.Skip();
});
sizer->Add(m_bitmap, 0, wxALIGN_CENTER, 0);
SetSizer(sizer);
SetSize(wxSize(FromDIP(m_size), FromDIP(m_size)));
SetMaxSize(wxSize(FromDIP(m_size), FromDIP(m_size)));
SetMinSize(wxSize(FromDIP(m_size), FromDIP(m_size)));
Refresh();
Layout();
Fit();
Play();
}