From e8573d723a3e599a70e441e8746b61bdfc47183a Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 12 Dec 2023 22:36:48 +0800 Subject: [PATCH] FIX: slice error: WipeTowerIntegration::append_tcr when print by object with multi-color Jira: XXXX Change-Id: Ic9ee2f6de45abb4a118fdb4cf89dea9ca7335094 --- src/libslic3r/GCode/ToolOrdering.cpp | 10 ++++++++-- src/libslic3r/GCode/ToolOrdering.hpp | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) 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