508{
510 return;
511
512 std::map<int, DynamicPrintConfig> old_full_filament_ams_list = wxGetApp().sidebar().build_filament_ams_list(
m_obj);
513 std::map<int, DynamicPrintConfig> full_filament_ams_list;
514 for (auto ams_item : old_full_filament_ams_list) {
515 int key = ams_item.first & 0x0FFFF;
516 full_filament_ams_list[key] = std::move(ams_item.second);
517 }
518
520 bool part_failed = false;
521 if (cali_result.empty())
522 part_failed = true;
523
526 for (auto &item : cali_result) {
527 if (item.confidence == 0) {
528 PACalibResult result = item;
529 result.tray_id = 4 * item.ams_id + item.slot_id;
531 result.tray_id = item.ams_id;
532 }
534 }
535 }
537 auto grid_sizer = new wxBoxSizer(wxHORIZONTAL);
538 const int COLUMN_GAP = FromDIP(10);
539 const int ROW_GAP = FromDIP(10);
540
543
544 const std::string& cwsp_pt =
m_obj->printer_type;
547 grid_sizer->Add(left_sizer);
548 grid_sizer->AddSpacer(COLUMN_GAP);
549 grid_sizer->Add(right_sizer);
550
551 wxFlexGridSizer *left_grid_sizer = new wxFlexGridSizer(3, COLUMN_GAP, ROW_GAP);
552
553
554 auto ns =
m_obj->GetNozzleSystem();
555 auto rack = ns ? ns->GetNozzleRack() : nullptr;
556 bool has_rack = rack && rack->IsSupported();
557
558 wxFlexGridSizer *right_grid_sizer = new wxFlexGridSizer(has_rack ? 4 : 3, COLUMN_GAP, ROW_GAP);
559 left_sizer->Add(left_grid_sizer);
560 right_sizer->Add(right_grid_sizer);
561
562
563 {
565
568 left_grid_sizer->Add(brand_title, 1, wxALIGN_CENTER);
569
572 left_grid_sizer->Add(k_title, 1, wxALIGN_CENTER);
573 }
574
575
576 {
578
581 right_grid_sizer->Add(brand_title, 1, wxALIGN_CENTER);
582
585 right_grid_sizer->Add(k_title, 1, wxALIGN_CENTER);
586
587 if (has_rack) {
590 right_grid_sizer->Add(nozzle_title, 1, wxALIGN_CENTER);
591 }
592 }
593
594
595 std::vector<std::pair<std::pair<int, int>, std::string>> preset_names;
596 int i = 1;
597 std::unordered_set<std::string>
set;
598 for (
auto &info :
m_obj->selected_cali_preset) {
599 std::string default_name;
600
601
602 int extruder_id = 0;
604 extruder_id = 0;
606 extruder_id = 1;
607 } else {
608 int ams_id = info.tray_id / 4;
609 extruder_id =
m_obj->get_extruder_id_by_ams_id(std::to_string(ams_id));
610 }
611 {
614 if (has_rack) {
615 default_name += "_";
616 if (info.nozzle_pos_id == 0) {
617 default_name += "R";
618 } else if (info.nozzle_pos_id >= 0x10) {
619 default_name += std::to_string((info.nozzle_pos_id & 0x0f) + 1);
620 } else {
621 default_name += "N/A";
622 }
623 }
626 }
627 }
628
629
630 {
631 default_name += "_";
633 default_name +=
L(
"Standard");
634 }
636 default_name +=
L(
"High Flow");
637 }
638 }
639
640
641 {
642 default_name += "_";
644 if (!
set.insert(default_name).second) {
645 default_name += "_" + std::to_string(i);
646 i++;
647 }
648 }
649
650 preset_names.push_back({{extruder_id, info.tray_id}, default_name});
651 }
652
653 bool left_first_add_item = true;
654 bool right_first_add_item = true;
655 std::vector<PACalibResult> sorted_cali_result = cali_result;
656 if (
m_obj &&
m_obj->is_support_new_auto_cali_method) {
657 for (auto &res : sorted_cali_result) {
659 res.tray_id = res.ams_id;
660 } else {
661 res.tray_id = res.ams_id * 4 + res.slot_id;
662 }
663 }
664 }
665
666 std::sort(sorted_cali_result.begin(), sorted_cali_result.end(), [](const PACalibResult &left, const PACalibResult &right) {
667 return left.tray_id < right.tray_id;
668 });
669 for (auto &item : sorted_cali_result) {
670 bool result_failed = false;
671 if (item.confidence != 0) {
672 result_failed = true;
673 part_failed = true;
674 } else {
676 }
677
680 tray_title->SetBackgroundColour(*wxWHITE);
681 tray_title->SetBitmap(*
get_extruder_color_icon(full_filament_ams_list[item.tray_id].opt_string(
"filament_colour", 0u), tray_name.ToStdString(), FromDIP(20), FromDIP(20)));
682 tray_title->SetToolTip("");
683
686 k_value->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
687 n_value->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
690
692 nozzle_id_value->SetMinSize(wxSize(FromDIP(180), FromDIP(24)));
693 nozzle_id_value->Wrap(-1);
695
698 wxArrayString selections;
699 static std::vector<PACalibResult> filtered_results;
700 filtered_results.clear();
701 for (auto history : history_result) {
702 if (history.filament_id == item.filament_id
703 && history.extruder_id == item.extruder_id
704 && history.nozzle_volume_type == item.nozzle_volume_type
705 && history.nozzle_diameter == item.nozzle_diameter) {
706 filtered_results.push_back(history);
707 selections.push_back(
from_u8(history.name));
708 }
709 }
710 comboBox_tray_name->Set(selections);
711
712 auto set_edit_mode = [this, k_value, n_value, k_value_failed, n_value_failed, nozzle_id_value, nozzle_id_failed, comboBox_tray_name, tray_name_failed](std::string str, bool display_nozzle) {
713 if (str == "normal") {
714 comboBox_tray_name->Show();
715 tray_name_failed->Show(false);
716 k_value->Show();
717 n_value->Show();
718 nozzle_id_value->Show(display_nozzle);
719 k_value_failed->Show(false);
720 n_value_failed->Show(false);
721 nozzle_id_failed->Show(false);
722 }
723 if (str == "failed") {
724 comboBox_tray_name->Show(false);
725 tray_name_failed->Show();
726 k_value->Show(false);
727 n_value->Show(false);
728 nozzle_id_value->Show(false);
729 k_value_failed->Show();
730 n_value_failed->Show();
731 nozzle_id_failed->Show(display_nozzle);
732 }
733
734
735 n_value->Hide();
736 n_value_failed->Hide();
737
740 };
741
742 if (!result_failed) {
744
745 auto k_str = wxString::Format("%.3f", item.k_value);
746 auto n_str = wxString::Format("%.3f", item.n_coef);
747 k_value->GetTextCtrl()->SetValue(k_str);
748 n_value->GetTextCtrl()->SetValue(n_str);
749
751 wxString nozzle_id_str;
752 if (item.nozzle_pos_id == 0) {
753 nozzle_id_str += "R | ";
754 } else if (item.nozzle_pos_id >= 0x10) {
755 nozzle_id_str += wxString::Format("%d | ", (item.nozzle_pos_id & 0x0f) + 1);
756 } else {
757 nozzle_id_str += "N/A | ";
758 BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << "Nozzle position id is -1 or invalid.";
759 }
760 nozzle_id_str += wxString::Format("%.1f mm ", item.nozzle_diameter);
761 switch (item.nozzle_volume_type) {
766 default: break;
767 }
768 nozzle_id_value->SetLabel(nozzle_id_str);
769 }
770
771 for (auto &name : preset_names) {
772 int extruder_id = name.first.first;
773 int tray_id = name.first.second;
774 if (item.tray_id == tray_id && item.extruder_id == extruder_id) {
775 comboBox_tray_name->SetValue(
from_u8(name.second));
776 }
777 }
778
779 comboBox_tray_name->Bind(wxEVT_COMBOBOX, [comboBox_tray_name](auto &e) {
780 int selection = comboBox_tray_name->GetSelection();
781 auto history = filtered_results[selection];
782 });
783 } else {
785 }
786
787 if ((
m_obj->is_main_extruder_on_left() && item.extruder_id == 0)
788 || (!
m_obj->is_main_extruder_on_left() && item.extruder_id == 1)) {
789 if (left_first_add_item) {
790 wxString title_name = left_sizer->GetStaticBox()->GetLabel();
791 title_name += " - ";
793 left_sizer->GetStaticBox()->SetLabel(title_name);
794 left_first_add_item = false;
795 }
796
797 left_grid_sizer->Add(tray_title, 1, wxEXPAND);
798
799 if (comboBox_tray_name->IsShown()) {
800 left_grid_sizer->Add(comboBox_tray_name, 1, wxEXPAND);
801 } else {
802 left_grid_sizer->Add(tray_name_failed, 1, wxEXPAND);
803 }
804
805 if (k_value->IsShown()) {
806 left_grid_sizer->Add(k_value, 1, wxEXPAND);
807 } else {
808 left_grid_sizer->Add(k_value_failed, 1, wxEXPAND);
809 }
810 }
811 else {
812 if (right_first_add_item) {
813 wxString title_name = right_sizer->GetStaticBox()->GetLabel();
814 title_name += " - ";
816 right_sizer->GetStaticBox()->SetLabel(title_name);
817 right_first_add_item = false;
818 }
819 right_grid_sizer->Add(tray_title, 1, wxEXPAND);
820
821 if (comboBox_tray_name->IsShown()) {
822 right_grid_sizer->Add(comboBox_tray_name, 1, wxEXPAND);
823 } else {
824 right_grid_sizer->Add(tray_name_failed, 1, wxEXPAND);
825 }
826
827 if (k_value->IsShown()) {
828 right_grid_sizer->Add(k_value, 1, wxEXPAND);
829 } else {
830 right_grid_sizer->Add(k_value_failed, 1, wxEXPAND);
831 }
832
833 if (has_rack) {
834 if (nozzle_id_value->IsShown()) {
835 right_grid_sizer->Add(nozzle_id_value, 1, wxEXPAND);
836 } else {
837 right_grid_sizer->Add(nozzle_id_failed, 1, wxEXPAND);
838 }
839 }
840 }
841 }
842
843 if (left_first_add_item)
844 left_sizer->Show(false);
845 if (right_first_add_item)
846 right_sizer->Show(false);
847
848 if (part_failed) {
853 }
854 } else {
857 }
858
859 wxGetApp().UpdateDarkUIWin(this);
860
861 Layout();
862}
#define CALIBRATION_SAVE_NUMBER_INPUT_SIZE
Definition CalibrationWizardSavePage.cpp:44
#define DEPUTY_EXTRUDER_ID
Definition DevDefs.h:102
#define MAIN_EXTRUDER_ID
Definition DevDefs.h:101
#define L(s)
Definition ExtrusionEntity.cpp:25
class WXDLLIMPEXP_FWD_CORE wxButton
Definition ProgressDialog.hpp:27
class WXDLLIMPEXP_FWD_CORE wxStaticText
Definition ProgressDialog.hpp:30
static std::string get_toolhead_display_name(const std::string &type_str, int ext_id, ToolHeadComponent component, ToolHeadNameCase name_case=ToolHeadNameCase::TitleCase, bool short_name=false)
Definition DevConfigUtil.cpp:379
wxString get_nozzle_volume_type_name(NozzleVolumeType type)
Definition CalibUtils.cpp:138
@ nvtE3DHighFlow
Definition PrintConfig.hpp:626
@ nvtHighFlow
Definition PrintConfig.hpp:620
@ nvtTPUHighFlow
Definition PrintConfig.hpp:624
@ nvtStandard
Definition PrintConfig.hpp:619
@ Extruder
Definition DevConfigUtil.h:34
@ Nozzle
Definition DevConfigUtil.h:35
@ SentenceCase
Definition DevConfigUtil.h:42
@ TitleCase
Definition DevConfigUtil.h:41
wxBitmap * get_extruder_color_icon(std::vector< std::string > colors, bool is_gradient, std::string label, int icon_width, int icon_height, const std::vector< wxColour > *ramp)
Definition wxExtensions.cpp:633