FIX: compatible with one extruder reorder

jira:NEW

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: I7e350ba8728ac4b3dd34093ff4e9647d0a2ba671
(cherry picked from commit cc81e57ac947375a525281e7cbf52437c740a746)
This commit is contained in:
xun.zhang
2024-07-12 14:40:25 +08:00
committed by Noisyfox
parent 400ff4d007
commit df1e125e1d

View File

@@ -157,10 +157,12 @@ int reorder_filaments_for_minimum_flush_volume(const std::vector<unsigned int>&f
} }
for (size_t idx = 0; idx < groups.size();++idx) { for (size_t idx = 0; idx < groups.size();++idx) {
// case with one group
if (groups[idx].empty())
continue;
std::optional<unsigned int>current_extruder_id; std::optional<unsigned int>current_extruder_id;
int layer = 0; int layer = 0;
for (const auto& lf : layer_filaments) { for (const auto& lf : layer_filaments) {
std::vector<int>custom_filament_seq; std::vector<int>custom_filament_seq;
if (get_custom_seq && (*get_custom_seq)(layer, custom_filament_seq) && !custom_filament_seq.empty()) { if (get_custom_seq && (*get_custom_seq)(layer, custom_filament_seq) && !custom_filament_seq.empty()) {
std::vector<unsigned int> unsign_custom_extruder_seq; std::vector<unsigned int> unsign_custom_extruder_seq;
@@ -199,18 +201,23 @@ int reorder_filaments_for_minimum_flush_volume(const std::vector<unsigned int>&f
} }
} }
// if only have one group,we need to check whether layer sequence[idx] is valid
if (filament_sequences) { if (filament_sequences) {
filament_sequences->clear(); filament_sequences->clear();
filament_sequences->resize(layer_filaments.size()); filament_sequences->resize(layer_filaments.size());
for (size_t layer = 0; layer < layer_filaments.size(); ++layer) { for (size_t layer = 0; layer < layer_filaments.size(); ++layer) {
auto& curr_layer_seq = (*filament_sequences)[layer]; auto& curr_layer_seq = (*filament_sequences)[layer];
if (layer & 1) { if (layer & 1) {
curr_layer_seq.insert(curr_layer_seq.end(), layer_sequences[1][layer].begin(), layer_sequences[1][layer].end()); if (!layer_sequences[1].empty())
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());
if (!layer_sequences[0].empty())
curr_layer_seq.insert(curr_layer_seq.end(), layer_sequences[0][layer].begin(), layer_sequences[0][layer].end());
} }
else { else {
curr_layer_seq.insert(curr_layer_seq.end(), layer_sequences[0][layer].begin(), layer_sequences[0][layer].end()); if (!layer_sequences[0].empty())
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());
if (!layer_sequences[1].empty())
curr_layer_seq.insert(curr_layer_seq.end(), layer_sequences[1][layer].begin(), layer_sequences[1][layer].end());
} }
} }
} }
@@ -1020,20 +1027,25 @@ std::vector<int> ToolOrdering::get_recommended_filament_maps(const std::vector<s
} }
std::sort(used_filaments.begin(), used_filaments.end()); std::sort(used_filaments.begin(), used_filaments.end());
FilamentGroup fg( std::vector<int>ret(number_of_extruders,0);
nozzle_flush_mtx, // if mutli_extruder, calc group,otherwise set to 0
used_filaments.size(), if (nozzle_nums == 2)
{ 16,16 } {
); FilamentGroup fg(
fg.get_custom_seq = get_custom_seq; nozzle_flush_mtx,
fg.calc_filament_group(layer_filaments); used_filaments.size(),
{ 16,16 }
);
fg.get_custom_seq = get_custom_seq;
fg.calc_filament_group(layer_filaments);
std::vector<int>ret(number_of_extruders); auto filament_map = fg.get_filament_map();
auto filament_map = fg.get_filament_map(); for (size_t idx = 0; idx < filament_map.size(); ++idx) {
for (size_t idx = 0; idx < filament_map.size(); ++idx) { if (filament_map[idx])
if (filament_map[idx]) ret[used_filaments[idx]] = 1;
ret[used_filaments[idx]] = 1; }
} }
return ret; return ret;
} }