mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-19 19:33:47 +00:00
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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user