FIX: Incorrect color of a layer after slicing
Change-Id: I8b53d4cdf23d8f3389b1063ec84572ede3706ca2 (cherry picked from commit 608150a1b823e5c728540dc62df9a03571acfe9a)
This commit is contained in:
parent
e2d65994f9
commit
92a59a60b4
|
@ -46,17 +46,24 @@ void dfs_get_all_sorted_extruders(const std::vector<std::vector<float>>&
|
||||||
{
|
{
|
||||||
if (sorted_extruders.size() == all_extruders.size()) {
|
if (sorted_extruders.size() == all_extruders.size()) {
|
||||||
volumes_to_extruder_order.insert(std::pair(flush_volume, sorted_extruders));
|
volumes_to_extruder_order.insert(std::pair(flush_volume, sorted_extruders));
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto extruder_id : all_extruders) {
|
for (auto extruder_id : all_extruders) {
|
||||||
auto itor = std::find(sorted_extruders.begin(), sorted_extruders.end(), extruder_id);
|
if (sorted_extruders.empty()) {
|
||||||
if (itor == sorted_extruders.end()) {
|
|
||||||
float delta_flush_volume = wipe_volumes[sorted_extruders.back()][extruder_id];
|
|
||||||
flush_volume += delta_flush_volume;
|
|
||||||
sorted_extruders.push_back(extruder_id);
|
sorted_extruders.push_back(extruder_id);
|
||||||
dfs_get_all_sorted_extruders(wipe_volumes, all_extruders, sorted_extruders, flush_volume, volumes_to_extruder_order);
|
dfs_get_all_sorted_extruders(wipe_volumes, all_extruders, sorted_extruders, flush_volume, volumes_to_extruder_order);
|
||||||
flush_volume -= delta_flush_volume;
|
|
||||||
sorted_extruders.pop_back();
|
sorted_extruders.pop_back();
|
||||||
|
} else {
|
||||||
|
auto itor = std::find(sorted_extruders.begin(), sorted_extruders.end(), extruder_id);
|
||||||
|
if (itor == sorted_extruders.end()) {
|
||||||
|
float delta_flush_volume = wipe_volumes[sorted_extruders.back()][extruder_id];
|
||||||
|
flush_volume += delta_flush_volume;
|
||||||
|
sorted_extruders.push_back(extruder_id);
|
||||||
|
dfs_get_all_sorted_extruders(wipe_volumes, all_extruders, sorted_extruders, flush_volume, volumes_to_extruder_order);
|
||||||
|
flush_volume -= delta_flush_volume;
|
||||||
|
sorted_extruders.pop_back();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -65,10 +72,13 @@ std::vector<unsigned int> get_extruders_order(const std::vector<std::vector<floa
|
||||||
std::vector<unsigned int> all_extruders,
|
std::vector<unsigned int> all_extruders,
|
||||||
unsigned int start_extruder_id)
|
unsigned int start_extruder_id)
|
||||||
{
|
{
|
||||||
std::vector<unsigned int> sorted_extruders;
|
|
||||||
sorted_extruders.push_back(start_extruder_id);
|
|
||||||
std::map<float, std::vector<unsigned int>> volumes_to_extruder_order;
|
|
||||||
if (all_extruders.size() > 1) {
|
if (all_extruders.size() > 1) {
|
||||||
|
std::vector<unsigned int> sorted_extruders;
|
||||||
|
auto iter = std::find(all_extruders.begin(), all_extruders.end(), start_extruder_id);
|
||||||
|
if (iter != all_extruders.end()) {
|
||||||
|
sorted_extruders.push_back(start_extruder_id);
|
||||||
|
}
|
||||||
|
std::map<float, std::vector<unsigned int>> volumes_to_extruder_order;
|
||||||
dfs_get_all_sorted_extruders(wipe_volumes, all_extruders, sorted_extruders, 0, volumes_to_extruder_order);
|
dfs_get_all_sorted_extruders(wipe_volumes, all_extruders, sorted_extruders, 0, volumes_to_extruder_order);
|
||||||
if(volumes_to_extruder_order.size() > 0)
|
if(volumes_to_extruder_order.size() > 0)
|
||||||
return volumes_to_extruder_order.begin()->second;
|
return volumes_to_extruder_order.begin()->second;
|
||||||
|
|
Loading…
Reference in New Issue