FIX: sync ams colors to m_cur_colors_in_thumbnail

jira: STUDIO-6793
Change-Id: I2f180f31f75eac8ea55db659370642721944cbbe
(cherry picked from commit 6b0ef9ba9fb62c0eef18d84f88309cd693564618)
This commit is contained in:
zhou.xu 2024-04-11 19:57:11 +08:00 committed by Lane.Wei
parent 5ced03779b
commit c248f81ba4
4 changed files with 29 additions and 8 deletions

View File

@ -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<FilamentInfo> filaments, std::vector<FilamentInfo>& result, std::vector<int> exclude_id)
void MachineObject::get_ams_colors(std::vector<wxColour> &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<FilamentInfo> filaments, std::vector<FilamentInfo> &result, std::vector<int> exclude_id)
{
if (filaments.empty())
return -1;

View File

@ -526,6 +526,7 @@ public:
bool can_unload_filament();
bool is_support_ams_mapping();
void get_ams_colors(std::vector<wxColour>& ams_colors);
int ams_filament_mapping(std::vector<FilamentInfo> filaments, std::vector<FilamentInfo> &result, std::vector<int> exclude_id = std::vector<int>());
bool is_valid_mapping_result(std::vector<FilamentInfo>& result, bool check_empty_slot = false);
// exceed index start with 0

View File

@ -5865,7 +5865,7 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const
std::array<float, 4> 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());

View File

@ -1840,7 +1840,7 @@ void print_ams_mapping_result(std::vector<FilamentInfo>& 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;