From b82de541f5860553a4ec3d88396676f4cbca0b2e Mon Sep 17 00:00:00 2001 From: "zhou.xu" Date: Thu, 14 Nov 2024 21:08:19 +0800 Subject: [PATCH] FIX:ui_and_3d_volume_map should consider obj_idx jira: github 5195 Change-Id: I0726b183257604336c274e60d8cc76a3f81877b7 --- src/slic3r/GUI/3DScene.cpp | 2 +- src/slic3r/GUI/GUI_ObjectList.cpp | 19 ++++++++++--------- src/slic3r/GUI/ObjectDataViewModel.hpp | 24 ++++++++++++++---------- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index 4034c5628..9a7861eef 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -1287,7 +1287,7 @@ int GLVolumeCollection::load_object_volume( GLVolume& v = *new_volume; v.set_color(color_from_model_volume(*model_volume)); v.name = model_volume->name; - v.is_text_shape = model_volume->get_text_info().m_text.empty(); + v.is_text_shape = model_volume->is_text(); const TriangleMesh* mesh_ptr = model_volume->mesh_ptr(); new_volume->ori_mesh = mesh_ptr; diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 827e9937e..c589435ac 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -917,11 +917,8 @@ void ObjectList::update_filament_in_config(const wxDataViewItem& item) const int ui_volume_idx = m_objects_model->GetVolumeIdByItem(item); if (obj_idx < 0 || ui_volume_idx < 0) return; - auto &ui_and_3d_volume_map = m_objects_model->get_ui_and_3d_volume_map(); - if (ui_and_3d_volume_map.find(ui_volume_idx) == ui_and_3d_volume_map.end()) { - return; - } - m_config = &(*m_objects)[obj_idx]->volumes[ui_and_3d_volume_map[ui_volume_idx]]->config; + int volume_in3d_idx = m_objects_model->get_real_volume_index_in_3d(obj_idx,ui_volume_idx); + m_config = &(*m_objects)[obj_idx]->volumes[volume_in3d_idx]->config; } else if (item_type & itLayer) m_config = &get_item_config(item); @@ -3904,7 +3901,11 @@ wxDataViewItemArray ObjectList::add_volumes_to_object_in_list(size_t obj_idx, st int volume_idx{-1}; auto& ui_and_3d_volume_map = m_objects_model->get_ui_and_3d_volume_map(); - ui_and_3d_volume_map.clear(); + for (auto item : ui_and_3d_volume_map) { + if (item.first == obj_idx) { + item.second.clear(); + } + } int ui_volume_idx = 0; for (const ModelVolume *volume : object->volumes) { ++volume_idx; @@ -3919,7 +3920,7 @@ wxDataViewItemArray ObjectList::add_volumes_to_object_in_list(size_t obj_idx, st get_warning_icon_name(volume->mesh().stats()), volume->config.has("extruder") ? volume->config.extruder() : 0, false); - ui_and_3d_volume_map[ui_volume_idx] = volume_idx; + ui_and_3d_volume_map[obj_idx][ui_volume_idx] = volume_idx; ui_volume_idx++; add_settings_item(vol_item, &volume->config.get()); @@ -4645,7 +4646,7 @@ void ObjectList::update_selections() if (object(obj_idx)->volumes[vol_idx]->is_cut_connector()) sels.Add(m_objects_model->GetInfoItemByType(m_objects_model->GetItemById(obj_idx), InfoItemType::CutConnectors)); else { - vol_idx = m_objects_model->get_real_volume_index_in_ui(vol_idx); + vol_idx = m_objects_model->get_real_volume_index_in_ui(obj_idx,vol_idx); sels.Add(m_objects_model->GetItemByVolumeId(obj_idx, vol_idx)); } } @@ -4752,7 +4753,7 @@ void ObjectList::update_selections_on_canvas() if (type == itVolume) { int vol_idx = m_objects_model->GetVolumeIdByItem(item); - vol_idx = m_objects_model->get_real_volume_index_in_3d(vol_idx); + vol_idx = m_objects_model->get_real_volume_index_in_3d(obj_idx,vol_idx); std::vector idxs = selection.get_volume_idxs_from_volume(obj_idx, std::max(instance_idx, 0), vol_idx); volume_idxs.insert(volume_idxs.end(), idxs.begin(), idxs.end()); } diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp index 84cbfcd21..3dce96d6c 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.hpp +++ b/src/slic3r/GUI/ObjectDataViewModel.hpp @@ -354,26 +354,30 @@ class ObjectDataViewModel :public wxDataViewModel wxDataViewCtrl* m_ctrl { nullptr }; std::vector> assembly_name_list; std::vector> search_found_list; - std::map m_ui_and_3d_volume_map; + std::map> m_ui_and_3d_volume_maps; public: ObjectDataViewModel(); ~ObjectDataViewModel(); void Init(); - std::map &get_ui_and_3d_volume_map() { return m_ui_and_3d_volume_map; } - int get_real_volume_index_in_3d(int ui_value) + std::map> &get_ui_and_3d_volume_map() { return m_ui_and_3d_volume_maps; } + int get_real_volume_index_in_3d(int ui_object_value, int ui_volume_value) { - if (m_ui_and_3d_volume_map.find(ui_value) != m_ui_and_3d_volume_map.end()) { - return m_ui_and_3d_volume_map[ui_value]; + if (m_ui_and_3d_volume_maps.find(ui_object_value) != m_ui_and_3d_volume_maps.end()) { + auto cur_map = m_ui_and_3d_volume_maps[ui_object_value]; + if (cur_map.find(ui_volume_value) != cur_map.end()) { return cur_map[ui_volume_value]; } } - return ui_value; + return ui_volume_value; } - int get_real_volume_index_in_ui(int _3d_value) + int get_real_volume_index_in_ui(int ui_object_value, int _3d_value) { - for (auto item: m_ui_and_3d_volume_map) { - if (item.second == _3d_value) { - return item.first; + if (m_ui_and_3d_volume_maps.find(ui_object_value) != m_ui_and_3d_volume_maps.end()) { + auto cur_map = m_ui_and_3d_volume_maps[ui_object_value]; + for (auto item : cur_map) { + if (item.second == _3d_value) { + return item.first; + } } } return _3d_value;