diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index f5680decef..c6e81e994f 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -123,6 +123,7 @@ static double calc_max_layer_height(const PrintConfig &config, double max_object // (print->config().print_sequence == PrintSequence::ByObject is true). ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extruder, bool prime_multi_material) { + m_is_BBL_printer = object.print()->is_BBL_printer(); m_print_object_ptr = &object; if (object.layers().empty()) return; @@ -162,6 +163,7 @@ ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extrude // (print->config().print_sequence == PrintSequence::ByObject is false). ToolOrdering::ToolOrdering(const Print &print, unsigned int first_extruder, bool prime_multi_material) { + m_is_BBL_printer = print.is_BBL_printer(); m_print_config_ptr = &print.config(); // Initialize the print layers for all objects and all layers. @@ -757,24 +759,23 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume() const unsigned int number_of_extruders = (unsigned int) (sqrt(flush_matrix.size()) + EPSILON); // Extract purging volumes for each extruder pair: std::vector> wipe_volumes; - if (m_print_config_ptr->purge_in_prime_tower) { + if (print_config->purge_in_prime_tower || m_is_BBL_printer) { for (unsigned int i = 0; i < number_of_extruders; ++i) - wipe_volumes.push_back( - std::vector(flush_matrix.begin() + i * number_of_extruders, flush_matrix.begin() + (i + 1) * number_of_extruders)); + wipe_volumes.push_back( std::vector(flush_matrix.begin() + i * number_of_extruders, + flush_matrix.begin() + (i + 1) * number_of_extruders)); } else { // populate wipe_volumes with prime_volume - for (unsigned int i = 0; i < number_of_extruders; ++i) { - wipe_volumes.push_back(std::vector(number_of_extruders, m_print_config_ptr->prime_volume)); - } + for (unsigned int i = 0; i < number_of_extruders; ++i) + wipe_volumes.push_back(std::vector(number_of_extruders, print_config->prime_volume)); } - + unsigned int current_extruder_id = -1; for (int i = 0; i < m_layer_tools.size(); ++i) { LayerTools& lt = m_layer_tools[i]; if (lt.extruders.empty()) continue; - // todo: The algorithm complexity is too high(o(n2)), currently only 8 colors are supported - if (i != 0 && lt.extruders.size() <= 8) { + // todo: The algorithm complexity is too high(o(n2)), currently only 12 colors are supported + if (i != 0 && lt.extruders.size() <= 12) { lt.extruders = get_extruders_order(wipe_volumes, lt.extruders, current_extruder_id); } current_extruder_id = lt.extruders.back(); diff --git a/src/libslic3r/GCode/ToolOrdering.hpp b/src/libslic3r/GCode/ToolOrdering.hpp index 728fa4e74b..1cc6f74c8a 100644 --- a/src/libslic3r/GCode/ToolOrdering.hpp +++ b/src/libslic3r/GCode/ToolOrdering.hpp @@ -210,6 +210,7 @@ private: const PrintConfig* m_print_config_ptr = nullptr; const PrintObject* m_print_object_ptr = nullptr; + bool m_is_BBL_printer = false; }; } // namespace SLic3r