ENH: add printable filament types for extruder

jira: none

Change-Id: Ie6ada223bc11a53b975c8c20b4a41e7cdc2d524c
(cherry picked from commit c64270f506a4d004f66aef3ff31760f793eca489)
This commit is contained in:
zhimin.zeng
2025-04-01 18:44:30 +08:00
committed by Noisyfox
parent eb75a325ca
commit 0926dc46fb
7 changed files with 94 additions and 25 deletions

View File

@@ -1744,15 +1744,35 @@ bool PartPlate::check_filament_printable(const DynamicPrintConfig &config, wxStr
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_types = config.option<ConfigOptionStrings>("unprintable_filament_types")->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;
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;
}
}
}
}
}