FIX: invalid unprintable limits in enum algorithm

1.Should use idx in used filaments in filament group algorithm

jira:NONE

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: I5acc849827d84db090e61a45e80a3df2866b2724
(cherry picked from commit 84c55c10edfda91df16843f317ebc7912205b202)
(cherry picked from commit daaca0368626e68ba5bdb0ce6a90111292454119)
This commit is contained in:
xun.zhang
2024-12-26 11:06:55 +08:00
committed by Noisyfox
parent 904b1217f4
commit da0e624bd0

View File

@@ -649,8 +649,8 @@ namespace Slic3r
return count; return count;
}; };
std::map<int, int>unplaceable_limits; std::map<int, int>unplaceable_limit_indices;
extract_unprintable_limit_indices(ctx.model_info.unprintable_filaments, used_filaments, unplaceable_limits); extract_unprintable_limit_indices(ctx.model_info.unprintable_filaments, used_filaments, unplaceable_limit_indices);
int used_filament_num = used_filaments.size(); int used_filament_num = used_filaments.size();
uint64_t max_group_num = (static_cast<uint64_t>(1) << used_filament_num); uint64_t max_group_num = (static_cast<uint64_t>(1) << used_filament_num);
@@ -663,14 +663,14 @@ namespace Slic3r
std::vector<std::set<int>>groups(2); std::vector<std::set<int>>groups(2);
for (int j = 0; j < used_filament_num; ++j) { for (int j = 0; j < used_filament_num; ++j) {
if (i & (static_cast<uint64_t>(1) << j)) if (i & (static_cast<uint64_t>(1) << j))
groups[1].insert(used_filaments[j]); groups[1].insert(j);
else else
groups[0].insert(used_filaments[j]); groups[0].insert(j);
} }
int prefer_level = 0; int prefer_level = 0;
if (check_printable(groups, unplaceable_limits)) if (check_printable(groups, unplaceable_limit_indices))
prefer_level += UNPLACEABLE_LIMIT_REWARD; prefer_level += UNPLACEABLE_LIMIT_REWARD;
if (groups[0].size() <= ctx.machine_info.max_group_size[0] && groups[1].size() <= ctx.machine_info.max_group_size[1]) if (groups[0].size() <= ctx.machine_info.max_group_size[0] && groups[1].size() <= ctx.machine_info.max_group_size[1])
prefer_level += MAX_SIZE_LIMIT_REWARD; prefer_level += MAX_SIZE_LIMIT_REWARD;
@@ -679,9 +679,9 @@ namespace Slic3r
std::vector<int>filament_maps(used_filament_num); std::vector<int>filament_maps(used_filament_num);
for (int i = 0; i < used_filament_num; ++i) { for (int i = 0; i < used_filament_num; ++i) {
if (groups[0].find(used_filaments[i]) != groups[0].end()) if (groups[0].find(i) != groups[0].end())
filament_maps[i] = 0; filament_maps[i] = 0;
if (groups[1].find(used_filaments[i]) != groups[1].end()) if (groups[1].find(i) != groups[1].end())
filament_maps[i] = 1; filament_maps[i] = 1;
} }