mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-20 11:53:48 +00:00
ENH: alternate multi-head printing sequence
jira:NEW Signed-off-by: xun.zhang <xun.zhang@bambulab.com> Change-Id: I739438e8c411b638571d5291f3e5ad3d54650a73 (cherry picked from commit 1ab2964ee3b0357233a0a3747edefc12db51d46c)
This commit is contained in:
@@ -146,12 +146,9 @@ int reorder_filaments_for_minimum_flush_volume(const std::vector<unsigned int>&f
|
|||||||
{
|
{
|
||||||
int cost = 0;
|
int cost = 0;
|
||||||
|
|
||||||
if (filament_sequences) {
|
//TODO: handle case with custom sequence
|
||||||
filament_sequences->clear();
|
|
||||||
filament_sequences->resize(layer_filaments.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<std::set<int>>groups(2);
|
std::vector<std::set<int>>groups(2);
|
||||||
|
std::vector<std::vector<std::vector<unsigned>>> layer_sequences(2);
|
||||||
for (int i = 0; i < filament_maps.size(); ++i) {
|
for (int i = 0; i < filament_maps.size(); ++i) {
|
||||||
if (filament_maps[i] == 0)
|
if (filament_maps[i] == 0)
|
||||||
groups[0].insert(filament_lists[i]);
|
groups[0].insert(filament_lists[i]);
|
||||||
@@ -176,7 +173,7 @@ int reorder_filaments_for_minimum_flush_volume(const std::vector<unsigned int>&f
|
|||||||
}
|
}
|
||||||
assert(lf.size() == unsign_custom_extruder_seq.size());
|
assert(lf.size() == unsign_custom_extruder_seq.size());
|
||||||
if (filament_sequences)
|
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();
|
current_extruder_id = unsign_custom_extruder_seq.back();
|
||||||
continue;
|
continue;
|
||||||
@@ -193,7 +190,7 @@ int reorder_filaments_for_minimum_flush_volume(const std::vector<unsigned int>&f
|
|||||||
assert(sequence.size()==filament_used_in_group.size());
|
assert(sequence.size()==filament_used_in_group.size());
|
||||||
|
|
||||||
if (filament_sequences)
|
if (filament_sequences)
|
||||||
(*filament_sequences)[layer].insert((*filament_sequences)[layer].end(), sequence.begin(), sequence.end());
|
layer_sequences[idx].emplace_back(sequence);
|
||||||
|
|
||||||
if (!sequence.empty())
|
if (!sequence.empty())
|
||||||
current_extruder_id = sequence.back();
|
current_extruder_id = sequence.back();
|
||||||
@@ -202,6 +199,22 @@ int reorder_filaments_for_minimum_flush_volume(const std::vector<unsigned int>&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;
|
return cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
|
|
||||||
#include <boost/container/small_vector.hpp>
|
#include <boost/container/small_vector.hpp>
|
||||||
#include "../FilamentGroup.hpp"
|
#include "../FilamentGroup.hpp"
|
||||||
#include "ExtrusionEntity.hpp"
|
#include "../ExtrusionEntity.hpp"
|
||||||
#include "PrintConfig.hpp"
|
#include "../PrintConfig.hpp"
|
||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user