diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index d6fc56799..7ad296414 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_print_object_ptr = &object; if (object.layers().empty()) return; @@ -737,11 +738,16 @@ void ToolOrdering::collect_extruder_statistics(bool prime_multi_material) void ToolOrdering::reorder_extruders_for_minimum_flush_volume() { - if (!m_print_config_ptr || m_layer_tools.empty()) + const PrintConfig *print_config = m_print_config_ptr; + if (!print_config && m_print_object_ptr) { + print_config = &(m_print_object_ptr->print()->config()); + } + + if (!print_config || m_layer_tools.empty()) return; // Get wiping matrix to get number of extruders and convert vector to vector: - std::vector flush_matrix(cast(m_print_config_ptr->flush_volumes_matrix.values)); + std::vector flush_matrix(cast(print_config->flush_volumes_matrix.values)); const unsigned int number_of_extruders = (unsigned int) (sqrt(flush_matrix.size()) + EPSILON); // Extract purging volumes for each extruder pair: std::vector> wipe_volumes; diff --git a/src/libslic3r/GCode/ToolOrdering.hpp b/src/libslic3r/GCode/ToolOrdering.hpp index 53c6603c6..728fa4e74 100644 --- a/src/libslic3r/GCode/ToolOrdering.hpp +++ b/src/libslic3r/GCode/ToolOrdering.hpp @@ -209,6 +209,7 @@ private: std::vector m_all_printing_extruders; const PrintConfig* m_print_config_ptr = nullptr; + const PrintObject* m_print_object_ptr = nullptr; }; } // namespace SLic3r