mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-17 10:32:20 +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) {
|
||||
|
||||
@@ -2922,9 +2922,9 @@ std::map<int, DynamicPrintConfig> Sidebar::build_filament_ams_list(MachineObject
|
||||
tray_config.set_key_value("filament_type", new ConfigOptionStrings{tray.type});
|
||||
tray_config.set_key_value("tray_name", new ConfigOptionStrings{ name });
|
||||
tray_config.set_key_value("filament_colour", new ConfigOptionStrings{into_u8(wxColour("#" + tray.color).GetAsString(wxC2S_HTML_SYNTAX))});
|
||||
tray_config.set_key_value("filament_exist", new ConfigOptionBools{tray.is_exists});
|
||||
tray_config.set_key_value("filament_multi_colour", new ConfigOptionStrings{});
|
||||
tray_config.set_key_value("filament_colour_type", new ConfigOptionStrings{std::to_string(tray.ctype)});
|
||||
tray_config.set_key_value("filament_exist", new ConfigOptionBools{tray.is_exists});
|
||||
std::optional<FilamentBaseInfo> info;
|
||||
if (wxGetApp().preset_bundle) {
|
||||
info = wxGetApp().preset_bundle->get_filament_by_filament_id(tray.setting_id);
|
||||
|
||||
@@ -1404,8 +1404,7 @@ FilamentColor PlaterPresetComboBox::get_cur_color_info()
|
||||
std::vector<std::string> filament_color_type = Slic3r::GUI::wxGetApp().plater()->get_filament_color_render_type();
|
||||
std::string filament_color_info = filaments_multi_color[m_filament_idx];
|
||||
std::vector<std::string> colors;
|
||||
boost::split(colors, filament_color_info, boost::is_any_of(" "));
|
||||
|
||||
colors = Slic3r::split_string(filament_color_info, ' ');
|
||||
FilamentColor fila_color;
|
||||
for (const std::string& color_str : colors) {
|
||||
if (!color_str.empty()) {
|
||||
|
||||
Reference in New Issue
Block a user