ENH: add tool order function

1.Use min cost max flow to solve the tool order

jira:NEW

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: I909845039b67c7fe3ddd42580ad3f1d71d52262d
(cherry picked from commit 0716b8518ef62e0eac7c45de8bafb1458d8f9a8e)
This commit is contained in:
xun.zhang 2024-08-08 11:23:29 +08:00 committed by Noisyfox
parent ec98375192
commit 5d4cb375b0
4 changed files with 159 additions and 18 deletions

View file

@ -852,29 +852,22 @@ std::vector<int> ToolOrdering::get_recommended_filament_maps(const std::vector<s
std::vector<int>ret(filament_nums,0);
// if mutli_extruder, calc group,otherwise set to 0
if (extruder_nums == 2)
{
if (extruder_nums == 2) {
std::vector<std::string> extruder_ams_count_str = print_config->extruder_ams_count.values;
auto extruder_ams_counts = get_extruder_ams_count(extruder_ams_count_str);
std::vector<int> group_size = { 16, 16 };
auto extruder_ams_counts = get_extruder_ams_count(extruder_ams_count_str);
std::vector<int> group_size = {16, 16};
if (extruder_ams_counts.size() > 0) {
assert(extruder_ams_counts.size() == 2);
for (int i = 0; i < extruder_ams_counts.size(); ++i) {
group_size[i] = 0;
const auto& ams_count = extruder_ams_counts[i];
for (auto iter = ams_count.begin(); iter != ams_count.end(); ++iter) {
group_size[i] += iter->first * iter->second;
}
group_size[i] = 0;
const auto &ams_count = extruder_ams_counts[i];
for (auto iter = ams_count.begin(); iter != ams_count.end(); ++iter) { group_size[i] += iter->first * iter->second; }
}
}
FilamentGroup fg(
nozzle_flush_mtx,
(int)filament_nums,
group_size
);
FilamentGroup fg(nozzle_flush_mtx, (int) filament_nums, group_size);
fg.get_custom_seq = get_custom_seq;
ret = fg.calc_filament_group(layer_filaments, FGStrategy::BestFit);
ret = fg.calc_filament_group(layer_filaments, FGStrategy::BestFit);
}
return ret;