mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-17 02:22:17 +00:00
FIX: Correct virtual tray loading and multi-color material display
- Fixed incorrect is_array() check on vtray["cols"], causing virtual tray init failure. - Rewrote AMS grouping logic using iterators and set<int> for cleaner and safer traversal. jira: STUDIO-12955 Change-Id: I09a68e259b56864260abb6c59ff9b1bf7ec2823c (cherry picked from commit 60c47473047a3fba20d59cd974179537c116524d)
This commit is contained in:
@@ -2225,20 +2225,20 @@ unsigned int PresetBundle::sync_ams_list(std::vector<std::pair<DynamicPrintConfi
|
||||
ConfigOptionInts * filament_map = project_config.option<ConfigOptionInts>("filament_map");
|
||||
if (use_map) {
|
||||
auto check_has_merge_info = [](std::map<int, AMSMapInfo> &maps, MergeFilamentInfo &merge_info, int exist_colors_size) {
|
||||
std::map<int, bool> done;
|
||||
for (int i = 0; i < maps.size(); i++) {
|
||||
std::set<int> done;
|
||||
for (auto it_i = maps.begin(); it_i != maps.end(); ++it_i) {
|
||||
std::vector<int> same_ams;
|
||||
same_ams.emplace_back(i);
|
||||
for (size_t j = i + 1; j < maps.size(); j++) {
|
||||
if (done.find(j) != done.end()) {
|
||||
same_ams.emplace_back(it_i->first);
|
||||
for (auto it_j = std::next(it_i); it_j != maps.end(); ++it_j) {
|
||||
if (done.find(it_j->first) != done.end()) {
|
||||
continue;
|
||||
}
|
||||
if (maps[i].slot_id == "" || maps[i].ams_id == ""){//reserve
|
||||
if (it_i->second.slot_id == "" || it_i->second.ams_id == ""){
|
||||
continue;
|
||||
}
|
||||
if (maps[i].slot_id == maps[j].slot_id && maps[i].ams_id == maps[j].ams_id) {
|
||||
same_ams.emplace_back(j);
|
||||
done[j] =true;
|
||||
if (it_i->second.slot_id == it_j->second.slot_id && it_i->second.ams_id == it_j->second.ams_id) {
|
||||
same_ams.emplace_back(it_j->first);
|
||||
done.insert(it_j->first);
|
||||
}
|
||||
}
|
||||
if (same_ams.size() > 1) {
|
||||
|
||||
Reference in New Issue
Block a user