diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 5cebbf0d8..2342058e2 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -786,7 +786,20 @@ static float calc_color_distance(wxColour c1, wxColour c2) return DeltaE76(lab[0][0], lab[0][1], lab[0][2], lab[1][0], lab[1][1], lab[1][2]); } -int MachineObject::ams_filament_mapping(std::vector filaments, std::vector& result, std::vector exclude_id) +void MachineObject::get_ams_colors(std::vector &ams_colors) { + ams_colors.clear(); + ams_colors.reserve(amsList.size()); + for (auto ams = amsList.begin(); ams != amsList.end(); ams++) { + for (auto tray = ams->second->trayList.begin(); tray != ams->second->trayList.end(); tray++) { + if (tray->second->is_tray_info_ready()) { + auto ams_color = AmsTray::decode_color(tray->second->color); + ams_colors.emplace_back(ams_color); + } + } + } +} + +int MachineObject::ams_filament_mapping(std::vector filaments, std::vector &result, std::vector exclude_id) { if (filaments.empty()) return -1; diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index a90b0ffd9..ebc34e34a 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -526,6 +526,7 @@ public: bool can_unload_filament(); bool is_support_ams_mapping(); + void get_ams_colors(std::vector& ams_colors); int ams_filament_mapping(std::vector filaments, std::vector &result, std::vector exclude_id = std::vector()); bool is_valid_mapping_result(std::vector& result, bool check_empty_slot = false); // exceed index start with 0 diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 7a211cff4..003822814 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -5865,7 +5865,7 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const std::array new_color = adjust_color_for_rendering(curr_color); if (ban_light) { - new_color[3] =(255 - vol->extruder_id)/255.0f; + new_color[3] =(255 - (vol->extruder_id -1))/255.0f; } shader->set_uniform("uniform_color", new_color); shader->set_uniform("volume_world_matrix", vol->world_matrix()); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 1b5bf9ee4..c016b82dc 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1840,7 +1840,7 @@ void print_ams_mapping_result(std::vector& result) bool SelectMachineDialog::do_ams_mapping(MachineObject *obj_) { if (!obj_) return false; - + obj_->get_ams_colors(m_cur_colors_in_thumbnail); // try color and type mapping int result = obj_->ams_filament_mapping(m_filaments, m_ams_mapping_result); if (result == 0) { @@ -4077,15 +4077,12 @@ void SelectMachineDialog::clone_thumbnail_data() { if (m_preview_colors_in_thumbnail.size() != m_materialList.size()) { m_preview_colors_in_thumbnail.resize(m_materialList.size()); } - if (m_cur_colors_in_thumbnail.size() != m_materialList.size()) { - m_cur_colors_in_thumbnail.resize(m_materialList.size()); - } while (iter != m_materialList.end()) { int id = iter->first; Material * item = iter->second; MaterialItem *m = item->item; m_preview_colors_in_thumbnail[id] = m->m_material_coloul; - m_cur_colors_in_thumbnail[id] = m->m_ams_coloul; + m_cur_colors_in_thumbnail[item->id] = m->m_ams_coloul; iter++; } //copy data @@ -4243,8 +4240,18 @@ void SelectMachineDialog::updata_thumbnail_data_after_connected_printer() void SelectMachineDialog::change_default_normal(int old_filament_id, wxColour temp_ams_color) { + if (m_cur_colors_in_thumbnail.size() == 0) { + BOOST_LOG_TRIVIAL(error) << "SelectMachineDialog::change_default_normal:error:m_cur_colors_in_thumbnail.size() == 0"; + return; + } if (old_filament_id >= 0) { - m_cur_colors_in_thumbnail[old_filament_id] = temp_ams_color; + if (old_filament_id < m_cur_colors_in_thumbnail.size()) { + m_cur_colors_in_thumbnail[old_filament_id] = temp_ams_color; + } + else { + BOOST_LOG_TRIVIAL(error) << "SelectMachineDialog::change_default_normal:error:old_filament_id > m_cur_colors_in_thumbnail.size()"; + return; + } } ThumbnailData& data =m_plater->get_partplate_list().get_curr_plate()->thumbnail_data; ThumbnailData& no_light_data = m_plater->get_partplate_list().get_curr_plate()->no_light_thumbnail_data;