ENH: add filament_printable and delete unprintable and printable list

jira: none

Change-Id: I643ab11831ceac1fe0793510f64b288cbd16415a
(cherry picked from commit 3dd5a601547485bfcc4188727343a52c30bb6a73)
This commit is contained in:
zhimin.zeng
2025-04-12 15:58:50 +08:00
committed by Noisyfox
parent 0926dc46fb
commit 119f16c565
14 changed files with 121 additions and 177 deletions

View File

@@ -1741,38 +1741,13 @@ bool PartPlate::check_filament_printable(const DynamicPrintConfig &config, wxStr
for (auto filament_idx : used_filaments) {
int filament_id = filament_idx - 1;
std::string filament_type = config.option<ConfigOptionStrings>("filament_type")->values.at(filament_id);
int filament_printable_status = config.option<ConfigOptionInts>("filament_printable")->values.at(filament_id);
std::vector<int> filament_map = get_real_filament_maps(config);
int extruder_idx = filament_map[filament_id] - 1;
std::string filament_types_str;
auto unprintable_filament_opt = config.option<ConfigOptionStrings>("unprintable_filament_types");
if (unprintable_filament_opt) {
auto unprintable_filament_types = unprintable_filament_opt->values;
if (extruder_idx < unprintable_filament_types.size())
filament_types_str = unprintable_filament_types.at(extruder_idx);
std::vector<string> filament_types = split_string(filament_types_str, ',');
auto iter = std::find(filament_types.begin(), filament_types.end(), filament_type);
if (iter != filament_types.end()) {
wxString extruder_name = extruder_idx == 0 ? _L("left") : _L("right");
error_message = wxString::Format(_L("The %s nozzle can not print %s."), extruder_name, filament_type);
return false;
}
}
filament_types_str.clear();
auto printable_filament_opt = config.option<ConfigOptionStrings>("printable_filament_types");
if (printable_filament_opt) {
auto printable_filament_types = printable_filament_opt->values;
if (extruder_idx < printable_filament_types.size())
filament_types_str = printable_filament_types.at(extruder_idx);
std::vector<string> filament_types = split_string(filament_types_str, ',');
if (!filament_types.empty()) {
auto iter = std::find(filament_types.begin(), filament_types.end(), filament_type);
if (iter == filament_types.end()) {
wxString extruder_name = extruder_idx == 0 ? _L("left") : _L("right");
error_message = wxString::Format(_L("The %s nozzle can not print %s."), extruder_name, filament_type);
return false;
}
}
if (!(filament_printable_status >> extruder_idx & 1)) {
wxString extruder_name = extruder_idx == 0 ? _L("left") : _L("right");
error_message = wxString::Format(_L("The %s nozzle can not print %s."), extruder_name, filament_type);
return false;
}
}
}