OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::ReselectMachineDialog Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp>

Inheritance diagram for Slic3r::GUI::ReselectMachineDialog:
Collaboration diagram for Slic3r::GUI::ReselectMachineDialog:

Public Member Functions

 ReselectMachineDialog (wxWindow *parent)
 ~ReselectMachineDialog ()
void UpdateInfo (MachineObject *obj, const std::map< int, int > &best_pos_map, const std::vector< FilamentInfo > &ams_mapping, wxString save_time)

Private Member Functions

int CaculateSwitcherDistribution (MachineObject *obj, const std::map< int, int > &best_pos_map, const std::vector< FilamentInfo > &ams_mapping)
wxString getTrayID (MachineObject *obj, const std::string &amsID, const std::string &slotID)
void OnRefreshButton (wxCommandEvent &event)

Private Attributes

wxBoxSizer * mainSizer {nullptr}
wxPanel * textPanel {nullptr}
wxBoxSizer * textSizer {nullptr}
Label * suggestText {nullptr}
Label * linkwiki {nullptr}
Label * summaryText {nullptr}
UiStyledSwitchPanel * filamentSwitch {nullptr}
wxStaticText * filamentTips {nullptr}
std::vector< std::vector< DataAmsSlotInfo > > inAAMS {}
std::vector< std::vector< DataAmsSlotInfo > > inBAMS {}
wxPanel * statusBar {nullptr}
wxBoxSizer * btnSizer {nullptr}
Button * m_buttonClose {nullptr }
Button * m_buttonRefresh { nullptr }
std::vector< wxColour > colourAdjust {wxColour("#675AFF")}
std::vector< wxColour > colourOK {wxColour("#FF8181")}
std::vector< wxColour > colourUnused {wxColour("#FF818140")}

Detailed Description

Constructor & Destructor Documentation

◆ ReselectMachineDialog()

Slic3r::GUI::ReselectMachineDialog::ReselectMachineDialog ( wxWindow * parent)
613 : wxDialog(parent, wxID_ANY, _L("Suggested rearrangement"),
614 wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX)
615{
616 SetBackgroundColour(wxColour("#FFFFFF"));
617 // SetSize(wxSize(FromDIP(630), FromDIP(719)));
618 SetMinSize(wxSize(FromDIP(630), -1));
619 SetMaxSize(wxSize(FromDIP(630), -1));
620
621 mainSizer = new wxBoxSizer(wxVERTICAL);
622
623
624 textPanel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize);
625 textSizer = new wxBoxSizer(wxVERTICAL);
626 suggestText = new Label(textPanel, wxEmptyString);
627
628 linkwiki = new Label(textPanel, _L("How to save time?→"));
629 linkwiki->SetForegroundColour(wxColour("#009688")); // Orca: accent green
630 linkwiki->SetBackgroundColour(wxColour("#FFFFFF"));
631 linkwiki->SetFont(Label::Body_14);
632 // Orca: no vendor wiki page for this feature; hide the placeholder link and drop the external URL.
633 linkwiki->Hide();
634 textSizer->Add(suggestText, 0, wxALIGN_LEFT | wxTOP, FromDIP(5));
635 textSizer->Add(linkwiki, 0, wxALIGN_LEFT | wxTOP, FromDIP(2));
636 textPanel->SetSizer(textSizer);
637
638 summaryText = new Label(this, wxEmptyString);
639 summaryText->SetFont(Label::Body_14);
640 // summaryText->SetFont(wxGetApp().normal_font());
641
642 filamentSwitch = new UiStyledSwitchPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, //wxSize(FromDIP(571), FromDIP(439)),
643 wxColour("#EEEEEE"), wxColour("#ffffff"), true, FromDIP(1), FromDIP(5), true);
644
645
646 filamentTips = new wxStaticText(this, wxID_ANY, _L("Filament Status:"));
647 filamentTips->SetFont(wxGetApp().normal_font());
648
649 // statusBar = new UiStatusContainer(this);
650 statusBar = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize);
651 statusBar->SetBackgroundColour(wxColour("#F8F8F8"));
652 statusBar->SetMinSize(wxSize(FromDIP(570), -1));
653 wxBoxSizer* statusBarSizer = new wxBoxSizer(wxHORIZONTAL);
654 statusBar->SetSizer(statusBarSizer);
655
656 wxBoxSizer* adjustGroupSizer = new wxBoxSizer(wxHORIZONTAL);
657 UiAMSSlot* amsSlotAdjust= new UiAMSSlot(statusBar, colourAdjust, wxString("Ax\nPLA"), DataStatusType::ADJUST, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(58), FromDIP(90)), 1.0, 1.0);
658 wxStaticText* adjustLabel = new wxStaticText(statusBar, wxID_ANY, _L("Position adjustment required"));
659 adjustLabel->SetFont(wxGetApp().normal_font());
660 adjustLabel->SetForegroundColour(wxColour("#6B6B6B"));
661
662 adjustGroupSizer->Add(amsSlotAdjust, 0, wxALIGN_CENTER);
663 adjustGroupSizer->Add(adjustLabel, 0, wxALIGN_CENTER | wxLEFT, FromDIP(8));
664
665 wxBoxSizer* okGroupSizer = new wxBoxSizer(wxHORIZONTAL);
666 UiAMSSlot* amsSlotOK= new UiAMSSlot(statusBar, colourOK, wxString("Ax\nPLA"), DataStatusType::OK, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(58), FromDIP(90)), 1.0, 1.0);
667 wxStaticText* okLabel = new wxStaticText(statusBar, wxID_ANY, _L_CONTEXT(L_CONTEXT("OK", "FilamentTrack"), "FilamentTrack"));
668 okLabel->SetFont(wxGetApp().normal_font());
669 okLabel->SetForegroundColour(wxColour("#6B6B6B"));
670
671 okGroupSizer->Add(amsSlotOK, 0, wxALIGN_CENTER);
672 okGroupSizer->Add(okLabel, 0, wxALIGN_CENTER | wxLEFT, FromDIP(8));
673
674 wxBoxSizer* unusedGroupSizer = new wxBoxSizer(wxHORIZONTAL);
675 UiAMSSlot* amsSlotUnused= new UiAMSSlot(statusBar, colourUnused, wxString("Ax\nPLA"), DataStatusType::UNMATCHED, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(58), FromDIP(90)), 0.2, 1.0);
676 wxStaticText* unusedLabel = new wxStaticText(statusBar, wxID_ANY, _L("Unused"));
677 unusedLabel->SetFont(wxGetApp().normal_font());
678 unusedLabel->SetForegroundColour(wxColour("#6B6B6B"));
679
680 unusedGroupSizer->Add(amsSlotUnused, 0, wxALIGN_CENTER);
681 unusedGroupSizer->Add(unusedLabel, 0, wxALIGN_CENTER | wxLEFT, FromDIP(8));
682
683 statusBarSizer->Add(adjustGroupSizer, 1, wxALIGN_CENTER | wxLEFT, FromDIP(10));
684 statusBarSizer->Add(okGroupSizer, 1, wxALIGN_CENTER | wxLEFT, FromDIP(30));
685 statusBarSizer->Add(unusedGroupSizer, 1, wxALIGN_CENTER | wxLEFT, FromDIP(40));
686
687 statusBarSizer->AddStretchSpacer(1);
688
689 btnSizer = new wxBoxSizer(wxHORIZONTAL);
690 m_buttonRefresh = new Button(this, _L("Refresh"));
691 m_buttonRefresh->SetMinSize(wxSize(FromDIP(80), FromDIP(32)));
692 m_buttonRefresh->SetMaxSize(wxSize(FromDIP(80), FromDIP(32)));
694 m_buttonRefresh->Hide();
695 m_buttonClose = new Button(this, _L("Close"));
696 m_buttonClose->SetMinSize(wxSize(FromDIP(80), FromDIP(32)));
697 m_buttonClose->SetMaxSize(wxSize(FromDIP(80), FromDIP(32)));
698 m_buttonClose->SetBackgroundColor(wxColour("#009688")); // Orca: accent green
699 m_buttonClose->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e){
700 this->Close();
701 });
702 btnSizer->Add(m_buttonRefresh, 0, wxALIGN_LEFT);
703 btnSizer->Add(m_buttonClose, 0, wxALIGN_LEFT | wxLEFT, FromDIP(10));
704 //btn
705
706 mainSizer->Add(0, FromDIP(20));
707 mainSizer->Add(textPanel, 0, wxALIGN_LEFT | wxLEFT, FromDIP(26));
708 mainSizer->Add(0, FromDIP(12));
709 mainSizer->Add(summaryText, 0, wxALIGN_LEFT | wxLEFT | wxEXPAND, FromDIP(30));
710 mainSizer->Add(0, FromDIP(15));
711 mainSizer->Add(filamentSwitch, 0, wxALIGN_LEFT | wxLEFT, FromDIP(26));
712 // mainSizer->Add(m_bitmapSelectMachine, 0, wxALIGN_LEFT | wxLEFT, FromDIP(214));
713 mainSizer->Add(0, FromDIP(8));
714 mainSizer->Add(filamentTips, 0, wxALIGN_LEFT | wxLEFT, FromDIP(23));
715 mainSizer->Add(0, FromDIP(7));
716 mainSizer->Add(statusBar, 0, wxALIGN_LEFT | wxLEFT, FromDIP(23));
717 mainSizer->Add(btnSizer, 0, wxALIGN_RIGHT | wxALL, FromDIP(23));
718 SetSizer(mainSizer);
719
720 this->Bind(wxEVT_DPI_CHANGED, [this](wxDPIChangedEvent& evt) {
721 m_buttonRefresh->SetMinSize(wxSize(FromDIP(80), FromDIP(32)));
722 m_buttonRefresh->SetMaxSize(wxSize(FromDIP(80), FromDIP(32)));
723 m_buttonClose->SetMinSize(wxSize(FromDIP(80), FromDIP(32)));
724 m_buttonClose->SetMaxSize(wxSize(FromDIP(80), FromDIP(32)));
725 Layout();
726 Refresh();
727 evt.Skip();
728 });
729
730 Fit();
731 Layout();
732 Centre();
733}
#define L_CONTEXT(s, context)
Definition DesignOffer.hpp:17
#define _L(s)
Definition OBJ.cpp:34
class WXDLLIMPEXP_FWD_CORE wxStaticText
Definition ProgressDialog.hpp:30
static wxFont Body_14
Definition Label.hpp:53
Label * summaryText
Definition uiAMSBestPositionPopup.hpp:221
std::vector< wxColour > colourUnused
Definition uiAMSBestPositionPopup.hpp:232
Label * linkwiki
Definition uiAMSBestPositionPopup.hpp:220
void OnRefreshButton(wxCommandEvent &event)
Definition uiAMSBestPositionPopup.cpp:1058
wxPanel * statusBar
Definition uiAMSBestPositionPopup.hpp:226
Button * m_buttonClose
Definition uiAMSBestPositionPopup.hpp:228
UiStyledSwitchPanel * filamentSwitch
Definition uiAMSBestPositionPopup.hpp:222
std::vector< wxColour > colourAdjust
Definition uiAMSBestPositionPopup.hpp:230
wxStaticText * filamentTips
Definition uiAMSBestPositionPopup.hpp:223
Label * suggestText
Definition uiAMSBestPositionPopup.hpp:218
Button * m_buttonRefresh
Definition uiAMSBestPositionPopup.hpp:229
wxPanel * textPanel
Definition uiAMSBestPositionPopup.hpp:216
wxBoxSizer * textSizer
Definition uiAMSBestPositionPopup.hpp:217
wxBoxSizer * btnSizer
Definition uiAMSBestPositionPopup.hpp:227
std::vector< wxColour > colourOK
Definition uiAMSBestPositionPopup.hpp:231
wxBoxSizer * mainSizer
Definition uiAMSBestPositionPopup.hpp:215
@ OK
Definition uiAMSBestPositionPopup.hpp:121
@ ADJUST
Definition uiAMSBestPositionPopup.hpp:120
@ UNMATCHED
Definition uiAMSBestPositionPopup.hpp:122
#define _L_CONTEXT(s, ctx)
Definition I18N.hpp:15

References _L, _L_CONTEXT, Slic3r::GUI::ADJUST, Label::Body_14, btnSizer, colourAdjust, colourOK, colourUnused, filamentSwitch, filamentTips, L_CONTEXT, linkwiki, m_buttonClose, m_buttonRefresh, mainSizer, Slic3r::GUI::OK, OnRefreshButton(), statusBar, suggestText, summaryText, textPanel, textSizer, Slic3r::GUI::UNMATCHED, and wxStaticText.

Here is the call graph for this function:

◆ ~ReselectMachineDialog()

Slic3r::GUI::ReselectMachineDialog::~ReselectMachineDialog ( )
1067{
1068
1069}

Member Function Documentation

◆ CaculateSwitcherDistribution()

int Slic3r::GUI::ReselectMachineDialog::CaculateSwitcherDistribution ( MachineObject * obj,
const std::map< int, int > & best_pos_map,
const std::vector< FilamentInfo > & ams_mapping )
private
894{
895 if (!obj)
896 {
897 return 0;
898 }
899
900 const auto& ams_list = obj->GetFilaSystem()->GetAmsList();
901 std::map<DevFilaSwitch::SwitchPos, std::vector<AMSinfo>> ams_info; //all ams set
902 std::map<DevFilaSwitch::SwitchPos, std::vector<wxString>> ams_DisplayName;
903 int inAFourSlotNum = 0, inAOneSlotNum = 0;
904 int inBFourSlotNum = 0, inBOneSlotNum = 0;
905 for (auto ams = ams_list.begin(); ams != ams_list.end(); ams++) //not include extend ams
906 {
907 AMSinfo info;
908 info.ams_id = ams->first;
909 if (ams->second->IsExist() && info.parse_ams_info(obj, ams->second, obj->GetFilaSystem()->IsDetectRemainEnabled(), obj->is_support_ams_humidity))
910 {
911 auto pos = ams->second->GetSwitcherPos();
912 auto amsName = ams->second->GetDisplayName();
913 if (pos.has_value())
914 {
915 ams_info[pos.value()].push_back(info);
916 ams_DisplayName[pos.value()].push_back(amsName);
918 {
919 ams->second->GetSlotCount() == 4 ? ++inAFourSlotNum : ++inAOneSlotNum;
920 }
922 {
923 ams->second->GetSlotCount() == 4 ? ++inBFourSlotNum : ++inBOneSlotNum;
924 }
925 }
926 }
927 }
928 //ams id //slot id
929 using trayHelper = std::tuple<std::string, std::string>;
930 std::vector<trayHelper> posOK, posAdjust;
931 for (const auto& fila : ams_mapping)
932 {
933 auto it = std::find_if(best_pos_map.begin(), best_pos_map.end(), [&](const std::pair<int, int>& p){
934 return fila.id == p.first;
935 });
936 if (it != best_pos_map.end())
937 {
938 posAdjust.push_back({fila.ams_id, fila.slot_id});
939 }
940 else
941 {
942 posOK.push_back({fila.ams_id, fila.slot_id});
943 }
944 }
945
946
947 int inAHeight = (inAFourSlotNum + (inAOneSlotNum / 2 + inAOneSlotNum % 2)) * 150; //150 one AMS height and spacer
948 int inBHeight = (inBFourSlotNum + (inBOneSlotNum / 2 + inBOneSlotNum % 2)) * 150;
949
950 auto caculateAMSDistribution = [this, obj] (std::map<DevFilaSwitch::SwitchPos, std::vector<AMSinfo>>& amsInfo,
951 std::map<DevFilaSwitch::SwitchPos, std::vector<wxString>>& amsDisplayName,
952 const std::vector<trayHelper>& posOK, const std::vector<trayHelper>& posAdjust,
955 {
956 this->inAAMS.clear();
957 }
959 {
960 this->inBAMS.clear();
961 }
962 auto& AMSVector = amsInfo[dir];
963 auto& AMSNameVector = amsDisplayName[dir];
964 for (auto i = 0; i < AMSVector.size(); i++)
965 {
966 const auto& ams = AMSVector[i];
967 std::vector<DataAmsSlotInfo> allSlot;
968 for (auto j = 0; j < ams.cans.size(); j++)
969 {
970 const auto& can = ams.cans[j];
971 auto id = getTrayID(obj, ams.ams_id, can.can_id);
972 auto material = can.material_name;
973 if (can.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND ||
974 can.material_state == AMSCanType::AMS_CAN_TYPE_BRAND ||
975 can.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL)
976 {
977 if (can.material_name.empty())
978 {
979 material = L("?");
980 }
981 }
982 if (can.material_state == AMSCanType::AMS_CAN_TYPE_EMPTY)
983 {
984 material = L("Empty");
985 }
986
987 auto itOK = std::find_if(posOK.begin(), posOK.end(), [&](const trayHelper& tray){
988 auto amsID = std::get<0>(tray);
989 auto slotID = std::get<1>(tray);
990 return amsID == ams.ams_id && slotID == can.can_id;
991 });
992 auto itAdjust = std::find_if(posAdjust.begin(), posAdjust.end(), [&](const trayHelper& tray){
993 auto amsID = std::get<0>(tray);
994 auto slotID = std::get<1>(tray);
995 return amsID == ams.ams_id && slotID == can.can_id;
996 });
997 double colourFactor = itOK != posOK.end() ? 1.0 : 0.2;
999 if (itOK != posOK.end())
1000 {
1001 status = DataStatusType::OK;
1002 }
1003 if (itAdjust != posAdjust.end())
1004 {
1005 status = DataStatusType::ADJUST;
1006 }
1007 if (can.material_cols.empty()) {
1008 allSlot.push_back(DataAmsSlotInfo{ AMSNameVector[i], wxString(id + "\n" + material), {can.material_colour}, colourFactor, 1.0, status });
1009 } else {
1010 allSlot.push_back(DataAmsSlotInfo{ AMSNameVector[i], wxString(id + "\n" + material), can.material_cols, colourFactor, 1.0, status });
1011 }
1012 }
1014 {
1015 this->inAAMS.push_back(allSlot);
1016 }
1018 {
1019 this->inBAMS.push_back(allSlot);
1020 }
1021 }
1022 };
1023
1024 caculateAMSDistribution(ams_info, ams_DisplayName, posOK, posAdjust, DevFilaSwitch::SwitchPos::POS_IN_A);
1025 caculateAMSDistribution(ams_info, ams_DisplayName, posOK, posAdjust, DevFilaSwitch::SwitchPos::POS_IN_B);
1026 return std::max(inAHeight, inBHeight) + 32 + 90; //32 label height //184 * 90 selector width height
1027}
#define L(s)
Definition ExtrusionEntity.cpp:25
SwitchPos
Definition DevFilaSwitch.h:34
@ POS_IN_B
Definition DevFilaSwitch.h:35
@ POS_IN_A
Definition DevFilaSwitch.h:36
std::vector< std::vector< DataAmsSlotInfo > > inAAMS
Definition uiAMSBestPositionPopup.hpp:224
std::vector< std::vector< DataAmsSlotInfo > > inBAMS
Definition uiAMSBestPositionPopup.hpp:225
wxString getTrayID(MachineObject *obj, const std::string &amsID, const std::string &slotID)
Definition uiAMSBestPositionPopup.cpp:1029
@ AMS_CAN_TYPE_BRAND
Definition AMSItem.hpp:140
@ AMS_CAN_TYPE_THIRDBRAND
Definition AMSItem.hpp:141
@ AMS_CAN_TYPE_VIRTUAL
Definition AMSItem.hpp:143
@ AMS_CAN_TYPE_EMPTY
Definition AMSItem.hpp:142
DataStatusType
Definition uiAMSBestPositionPopup.hpp:119
Vec3d pos(const Pt &p)
Definition ReprojectPointsOnMesh.hpp:16

References Slic3r::GUI::ADJUST, Slic3r::GUI::AMS_CAN_TYPE_BRAND, Slic3r::GUI::AMS_CAN_TYPE_EMPTY, Slic3r::GUI::AMS_CAN_TYPE_THIRDBRAND, Slic3r::GUI::AMS_CAN_TYPE_VIRTUAL, Slic3r::GUI::AMSinfo::ams_id, Slic3r::MachineObject::GetFilaSystem(), getTrayID(), inAAMS, inBAMS, Slic3r::MachineObject::is_support_ams_humidity, L, Slic3r::GUI::OK, Slic3r::GUI::AMSinfo::parse_ams_info(), Slic3r::DevFilaSwitch::POS_IN_A, Slic3r::DevFilaSwitch::POS_IN_B, and Slic3r::GUI::UNMATCHED.

Referenced by UpdateInfo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getTrayID()

wxString Slic3r::GUI::ReselectMachineDialog::getTrayID ( MachineObject * obj,
const std::string & amsID,
const std::string & slotID )
private
1030{
1031 if (!amsID.empty() && !slotID.empty())
1032 {
1033 if (obj)
1034 {
1035 auto filaSys = obj->GetFilaSystem();
1036 if (filaSys)
1037 {
1038 DevAms* ams = filaSys->GetAmsById(amsID);
1039 if (!ams) { return ""; }
1040 int ams_id_int = atoi(amsID.c_str());
1041 int slot_id_int = atoi(slotID.c_str());
1042 int tray_id = 0;
1043 if (ams->GetAmsType() == DevAmsType::AMS || ams->GetAmsType() == DevAmsType::AMS_LITE || ams->GetAmsType() == DevAmsType::N3F) {
1044 tray_id = ams_id_int * 4 + slot_id_int;
1045 } else if (ams->GetAmsType() == DevAmsType::N3S) {
1046 tray_id = ams_id_int + slot_id_int;
1047 } else if (ams->GetAmsType() == DevAmsType::EXT_SPOOL) {
1048 tray_id = slot_id_int;
1049 }
1050 return wxGetApp().transition_tridid(tray_id);
1051 }
1052 }
1053 }
1054 return "";
1055}
@ AMS
Definition DevDefs.h:60
@ N3F
Definition DevDefs.h:62
@ AMS_LITE
Definition DevDefs.h:61
@ EXT_SPOOL
Definition DevDefs.h:59
@ N3S
Definition DevDefs.h:63

References Slic3r::AMS, Slic3r::AMS_LITE, Slic3r::EXT_SPOOL, Slic3r::DevAms::GetAmsType(), Slic3r::MachineObject::GetFilaSystem(), Slic3r::N3F, and Slic3r::N3S.

Referenced by CaculateSwitcherDistribution(), and UpdateInfo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ OnRefreshButton()

void Slic3r::GUI::ReselectMachineDialog::OnRefreshButton ( wxCommandEvent & event)
private
1059{
1060 // EndModal(wxID_CANCEL);
1061 wxCommandEvent evt(wxEVT_REFRESH_DATA, GetId());
1062 evt.SetEventObject(this);
1063 GetParent()->ProcessWindowEvent(evt);
1064}

Referenced by ReselectMachineDialog().

Here is the caller graph for this function:

◆ UpdateInfo()

void Slic3r::GUI::ReselectMachineDialog::UpdateInfo ( MachineObject * obj,
const std::map< int, int > & best_pos_map,
const std::vector< FilamentInfo > & ams_mapping,
wxString save_time )
736{
737
738 if (suggestText)
739 {
740 suggestText->SetLabel(wxString::Format(_L("Based on the diagram below, rearrange the filaments on the printer for optimal results to save approximately %s."), (save_time.empty() ? "0s" : save_time)));
741 suggestText->Wrap(FromDIP(600));
742 suggestText->SetBackgroundColour(wxColour("#FFFFFF"));
743 suggestText->SetFont(Label::Body_14);
744 suggestText->Show();
745 }
746
747 if (summaryText)
748 {
749 wxString summaryInfo;
750 if (!save_time.empty()) {
751 summaryInfo = wxString::Format(_L("Summary:"));
752
753 for (const auto& pair : best_pos_map) {
754 for (auto fila : ams_mapping) {
755 if (fila.id == pair.first) {
756 const auto& ams_opt = obj->GetFilaSystem()->GetAmsById(fila.ams_id);
757 if (ams_opt && ams_opt->GetSwitcherPos() != pair.second) {
758 summaryInfo += "\n";
759 const auto& recommned_pos = (pair.second == DevFilaSwitch::SwitchPos::POS_IN_A) ? _L("AMS on Filament Inlet A") : _L("AMS on Filament Inlet B");
760 summaryInfo += wxString::Format(_L("The No.%d slicing filament is matched to '%s'. Assigning it to '%s' can save printing time."),
761 pair.first + 1, getTrayID(obj, fila.ams_id, fila.slot_id), recommned_pos);
762 }
763
764 break;
765 }
766 }
767 }
768
769 summaryInfo += "\n\n";
770 summaryInfo += _L("*Tips: If you have moved the spool position on the machine, please close this page and re‑match the filament.");
771
772 } else {
773 summaryInfo = wxString::Format(_L("Summary: This is currently the most suitable position for placement."));
774 }
775
776 summaryText->SetLabel(summaryInfo);
777 summaryText->Wrap(FromDIP(571));
778 summaryText->Layout();
779 summaryText->Fit();
780 }
781
782 auto switchHight = CaculateSwitcherDistribution(obj, best_pos_map, ams_mapping);
783 wxSize switchSize;
784 if (122 == switchHight) //32 + 90 fixed size
785 {
786 switchSize = wxSize(FromDIP(571), FromDIP(439));
787 }
788 else
789 {
790 switchSize = wxSize(FromDIP(571), FromDIP(switchHight));
791 }
792 if (filamentSwitch)
793 {
794 filamentSwitch->Clear(true);
795 filamentSwitch->SetMinSize(switchSize);
796 filamentSwitch->SetMaxSize(switchSize);
797 filamentSwitch->SetSize(switchSize);
798 std::sort(inAAMS.begin(), inAAMS.end(), [](const auto& a, const auto& b) {
799 return a.size() > b.size();
800 });
801 std::sort(inBAMS.begin(), inBAMS.end(), [](const auto& a, const auto& b) {
802 return a.size() > b.size();
803 });
804
805 auto addToSwitchFun = [this] (DevFilaSwitch::SwitchPos dir) {
806 const auto& INAMS = (dir == DevFilaSwitch::SwitchPos::POS_IN_A ? inAAMS : inBAMS);
807 for (size_t i = 0; i < INAMS.size(); ++i)
808 {
809 const auto& slots = INAMS[i];
810 if (slots.size() == 4)
811 {
812 UiAMS* ams = new UiAMS(this->filamentSwitch, slots, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(92), FromDIP(134)));
814 {
815 this->filamentSwitch->AddToLeft(ams, 0, wxALL, FromDIP(10));
816 this->filamentSwitch->GetLeftSizer()->Add(0, FromDIP(20));
817
818 }
820 {
821 this->filamentSwitch->AddToRight(ams, 0, wxALL, FromDIP(10));
822 this->filamentSwitch->GetRightSizer()->Add(0, FromDIP(20));
823 }
824 }
825 if (slots.size() == 1)
826 {
827 if (i + 1 < INAMS.size())
828 {
829 const auto& slots2 = INAMS[i + 1];
830
831 wxPanel* pairPanel = new wxPanel(this->filamentSwitch);
832 wxBoxSizer* pairSizer = new wxBoxSizer(wxHORIZONTAL);
833
834 UiAMS* ams1 = new UiAMS(pairPanel, slots, wxID_ANY,
835 wxDefaultPosition, wxSize(FromDIP(92), FromDIP(134)));
836 pairSizer->Add(ams1, 0, wxALL, FromDIP(5));
837
838 UiAMS* ams2 = new UiAMS(pairPanel, slots2, wxID_ANY,
839 wxDefaultPosition, wxSize(FromDIP(92), FromDIP(134)));
840 pairSizer->Add(ams2, 0, wxALL, FromDIP(5));
841
842 pairPanel->SetSizer(pairSizer);
844 {
845 this->filamentSwitch->AddToLeft(pairPanel, 0, wxALL, FromDIP(10));
846 }
848 {
849 this->filamentSwitch->AddToRight(pairPanel, 0, wxALL, FromDIP(10));
850 }
851
852 ++i;
853 }
854 else
855 {
856 UiAMS* ams = new UiAMS(this->filamentSwitch, slots, wxID_ANY,
857 wxDefaultPosition, wxSize(FromDIP(92), FromDIP(134)));
859 {
860 this->filamentSwitch->AddToLeft(ams, 0, wxALL, FromDIP(10));
861 }
863 {
864 this->filamentSwitch->AddToRight(ams, 0, wxALL, FromDIP(10));
865 }
866 }
867
869 {
870 this->filamentSwitch->GetLeftSizer()->Add(0, FromDIP(20));
871 }
873 {
874 this->filamentSwitch->GetRightSizer()->Add(0, FromDIP(20));
875 }
876 }
877 }
878 };
881 filamentSwitch->LayoutAndFit();
882 }
883
884 //FilamentInfo
885 mainSizer->Layout();
886
887 Layout();
888 Fit();
889 Refresh(true);
890 // wxDialog::Update();
891}
int CaculateSwitcherDistribution(MachineObject *obj, const std::map< int, int > &best_pos_map, const std::vector< FilamentInfo > &ams_mapping)
Definition uiAMSBestPositionPopup.cpp:893

References _L, Label::Body_14, CaculateSwitcherDistribution(), filamentSwitch, Slic3r::MachineObject::GetFilaSystem(), getTrayID(), inAAMS, inBAMS, mainSizer, Slic3r::DevFilaSwitch::POS_IN_A, Slic3r::DevFilaSwitch::POS_IN_B, suggestText, and summaryText.

Here is the call graph for this function:

Member Data Documentation

◆ btnSizer

wxBoxSizer* Slic3r::GUI::ReselectMachineDialog::btnSizer {nullptr}
private
227{nullptr};

Referenced by ReselectMachineDialog().

◆ colourAdjust

std::vector<wxColour> Slic3r::GUI::ReselectMachineDialog::colourAdjust {wxColour("#675AFF")}
private
230{wxColour("#675AFF")};

Referenced by ReselectMachineDialog().

◆ colourOK

std::vector<wxColour> Slic3r::GUI::ReselectMachineDialog::colourOK {wxColour("#FF8181")}
private
231{wxColour("#FF8181")};

Referenced by ReselectMachineDialog().

◆ colourUnused

std::vector<wxColour> Slic3r::GUI::ReselectMachineDialog::colourUnused {wxColour("#FF818140")}
private
232{wxColour("#FF818140")};

Referenced by ReselectMachineDialog().

◆ filamentSwitch

UiStyledSwitchPanel* Slic3r::GUI::ReselectMachineDialog::filamentSwitch {nullptr}
private
222{nullptr};

Referenced by ReselectMachineDialog(), and UpdateInfo().

◆ filamentTips

wxStaticText* Slic3r::GUI::ReselectMachineDialog::filamentTips {nullptr}
private
223{nullptr};

Referenced by ReselectMachineDialog().

◆ inAAMS

std::vector<std::vector<DataAmsSlotInfo> > Slic3r::GUI::ReselectMachineDialog::inAAMS {}
private
224{};

Referenced by CaculateSwitcherDistribution(), and UpdateInfo().

◆ inBAMS

std::vector<std::vector<DataAmsSlotInfo> > Slic3r::GUI::ReselectMachineDialog::inBAMS {}
private
225{};

Referenced by CaculateSwitcherDistribution(), and UpdateInfo().

◆ linkwiki

Label* Slic3r::GUI::ReselectMachineDialog::linkwiki {nullptr}
private
220{nullptr};

Referenced by ReselectMachineDialog().

◆ m_buttonClose

Button* Slic3r::GUI::ReselectMachineDialog::m_buttonClose {nullptr }
private
228{nullptr };

Referenced by ReselectMachineDialog().

◆ m_buttonRefresh

Button* Slic3r::GUI::ReselectMachineDialog::m_buttonRefresh { nullptr }
private
229{ nullptr };

Referenced by ReselectMachineDialog().

◆ mainSizer

wxBoxSizer* Slic3r::GUI::ReselectMachineDialog::mainSizer {nullptr}
private
215{nullptr};

Referenced by ReselectMachineDialog(), and UpdateInfo().

◆ statusBar

wxPanel* Slic3r::GUI::ReselectMachineDialog::statusBar {nullptr}
private
226{nullptr};

Referenced by ReselectMachineDialog().

◆ suggestText

Label* Slic3r::GUI::ReselectMachineDialog::suggestText {nullptr}
private
218{nullptr};

Referenced by ReselectMachineDialog(), and UpdateInfo().

◆ summaryText

Label* Slic3r::GUI::ReselectMachineDialog::summaryText {nullptr}
private
221{nullptr};

Referenced by ReselectMachineDialog(), and UpdateInfo().

◆ textPanel

wxPanel* Slic3r::GUI::ReselectMachineDialog::textPanel {nullptr}
private
216{nullptr};

Referenced by ReselectMachineDialog().

◆ textSizer

wxBoxSizer* Slic3r::GUI::ReselectMachineDialog::textSizer {nullptr}
private
217{nullptr};

Referenced by ReselectMachineDialog().


The documentation for this class was generated from the following files: