From 1ab2964ee3b0357233a0a3747edefc12db51d46c Mon Sep 17 00:00:00 2001 From: "xun.zhang" Date: Wed, 10 Jul 2024 18:40:52 +0800 Subject: [PATCH] ENH: alternate multi-head printing sequence jira:NEW Signed-off-by: xun.zhang Change-Id: I739438e8c411b638571d5291f3e5ad3d54650a73 --- src/libslic3r/GCode/ToolOrdering.cpp | 27 ++++++++++++++++++++------- src/libslic3r/GCode/ToolOrdering.hpp | 4 ++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 6beaabe85..f0b5a53c0 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -145,12 +145,9 @@ int reorder_filaments_for_minimum_flush_volume(const std::vector&f { int cost = 0; - if (filament_sequences) { - filament_sequences->clear(); - filament_sequences->resize(layer_filaments.size()); - } - + //TODO: handle case with custom sequence std::vector>groups(2); + std::vector>> layer_sequences(2); for (int i = 0; i < filament_maps.size(); ++i) { if (filament_maps[i] == 0) groups[0].insert(filament_lists[i]); @@ -175,7 +172,7 @@ int reorder_filaments_for_minimum_flush_volume(const std::vector&f } assert(lf.size() == unsign_custom_extruder_seq.size()); if (filament_sequences) - (*filament_sequences)[layer] = unsign_custom_extruder_seq; + layer_sequences[idx].emplace_back(unsign_custom_extruder_seq); current_extruder_id = unsign_custom_extruder_seq.back(); continue; @@ -192,7 +189,7 @@ int reorder_filaments_for_minimum_flush_volume(const std::vector&f assert(sequence.size()==filament_used_in_group.size()); if (filament_sequences) - (*filament_sequences)[layer].insert((*filament_sequences)[layer].end(), sequence.begin(), sequence.end()); + layer_sequences[idx].emplace_back(sequence); if (!sequence.empty()) current_extruder_id = sequence.back(); @@ -201,6 +198,22 @@ int reorder_filaments_for_minimum_flush_volume(const std::vector&f } } + if (filament_sequences) { + filament_sequences->clear(); + filament_sequences->resize(layer_filaments.size()); + for (size_t layer = 0; layer < layer_filaments.size(); ++layer) { + auto& curr_layer_seq = (*filament_sequences)[layer]; + if (layer & 1) { + curr_layer_seq.insert(curr_layer_seq.end(), layer_sequences[1][layer].begin(), layer_sequences[1][layer].end()); + curr_layer_seq.insert(curr_layer_seq.end(), layer_sequences[0][layer].begin(), layer_sequences[0][layer].end()); + } + else { + curr_layer_seq.insert(curr_layer_seq.end(), layer_sequences[0][layer].begin(), layer_sequences[0][layer].end()); + curr_layer_seq.insert(curr_layer_seq.end(), layer_sequences[1][layer].begin(), layer_sequences[1][layer].end()); + } + } + } + return cost; } diff --git a/src/libslic3r/GCode/ToolOrdering.hpp b/src/libslic3r/GCode/ToolOrdering.hpp index 1dbe9f2cf..4b0b05edc 100644 --- a/src/libslic3r/GCode/ToolOrdering.hpp +++ b/src/libslic3r/GCode/ToolOrdering.hpp @@ -9,8 +9,8 @@ #include #include "../FilamentGroup.hpp" -#include "ExtrusionEntity.hpp" -#include "PrintConfig.hpp" +#include "../ExtrusionEntity.hpp" +#include "../PrintConfig.hpp" namespace Slic3r {