diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 00dfb90607..5ed1404736 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1845,7 +1845,10 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu int extruder_size = m_print->config().nozzle_diameter.values.size(); if (extruder_size > 1) { std::vector extruder_unprintable_polys = m_print->get_extruder_unprintable_polygons(); - m_processor.check_multi_extruder_gcode_valid(extruder_unprintable_polys, m_print->get_extruder_printable_height(), m_print->get_filament_maps()); + m_processor.check_multi_extruder_gcode_valid(extruder_unprintable_polys, + m_print->get_extruder_printable_height(), + m_print->get_filament_maps(), + m_print->get_physical_unprintable_filaments(m_print->get_slice_used_filaments(false))); } m_processor.finalize(true); diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 61955dd4bd..7883e1ae30 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -1664,7 +1664,10 @@ void GCodeProcessor::register_commands() } } -bool GCodeProcessor::check_multi_extruder_gcode_valid(const std::vector &unprintable_areas, const std::vector& printable_heights, const std::vector &filament_map) +bool GCodeProcessor::check_multi_extruder_gcode_valid(const std::vector &unprintable_areas, + const std::vector &printable_heights, + const std::vector &filament_map, + const std::vector> &unprintable_filament_types) { m_result.limit_filament_maps.clear(); m_result.gcode_check_result.reset(); @@ -1743,6 +1746,14 @@ bool GCodeProcessor::check_multi_extruder_gcode_valid(const std::vector &filament_ids = unprintable_filament_types[extruder_id]; + for (int filament_id : filament_ids) { + m_result.limit_filament_maps[filament_id] |= (1 << extruder_id); + } + }; + return valid; } diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 1642488a16..cca4c59433 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -840,7 +840,10 @@ class Print; GCodeProcessor(); // check whether the gcode path meets the filament_map grouping requirements - bool check_multi_extruder_gcode_valid(const std::vector &unprintable_areas, const std::vector& printable_heights, const std::vector& filament_map); + bool check_multi_extruder_gcode_valid(const std::vector &unprintable_areas, + const std::vector &printable_heights, + const std::vector &filament_map, + const std::vector>& unprintable_filament_types ); void apply_config(const PrintConfig& config); void set_print(Print* print) { m_print = print; } void enable_stealth_time_estimator(bool enabled);