FIX:ui_and_3d_volume_map should consider obj_idx
jira: github 5195 Change-Id: I0726b183257604336c274e60d8cc76a3f81877b7
This commit is contained in:
parent
c74a769c14
commit
b82de541f5
|
@ -1287,7 +1287,7 @@ int GLVolumeCollection::load_object_volume(
|
||||||
GLVolume& v = *new_volume;
|
GLVolume& v = *new_volume;
|
||||||
v.set_color(color_from_model_volume(*model_volume));
|
v.set_color(color_from_model_volume(*model_volume));
|
||||||
v.name = model_volume->name;
|
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();
|
const TriangleMesh* mesh_ptr = model_volume->mesh_ptr();
|
||||||
new_volume->ori_mesh = mesh_ptr;
|
new_volume->ori_mesh = mesh_ptr;
|
||||||
|
|
|
@ -917,11 +917,8 @@ void ObjectList::update_filament_in_config(const wxDataViewItem& item)
|
||||||
const int ui_volume_idx = m_objects_model->GetVolumeIdByItem(item);
|
const int ui_volume_idx = m_objects_model->GetVolumeIdByItem(item);
|
||||||
if (obj_idx < 0 || ui_volume_idx < 0)
|
if (obj_idx < 0 || ui_volume_idx < 0)
|
||||||
return;
|
return;
|
||||||
auto &ui_and_3d_volume_map = m_objects_model->get_ui_and_3d_volume_map();
|
int volume_in3d_idx = m_objects_model->get_real_volume_index_in_3d(obj_idx,ui_volume_idx);
|
||||||
if (ui_and_3d_volume_map.find(ui_volume_idx) == ui_and_3d_volume_map.end()) {
|
m_config = &(*m_objects)[obj_idx]->volumes[volume_in3d_idx]->config;
|
||||||
return;
|
|
||||||
}
|
|
||||||
m_config = &(*m_objects)[obj_idx]->volumes[ui_and_3d_volume_map[ui_volume_idx]]->config;
|
|
||||||
}
|
}
|
||||||
else if (item_type & itLayer)
|
else if (item_type & itLayer)
|
||||||
m_config = &get_item_config(item);
|
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};
|
int volume_idx{-1};
|
||||||
auto& ui_and_3d_volume_map = m_objects_model->get_ui_and_3d_volume_map();
|
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;
|
int ui_volume_idx = 0;
|
||||||
for (const ModelVolume *volume : object->volumes) {
|
for (const ModelVolume *volume : object->volumes) {
|
||||||
++volume_idx;
|
++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()),
|
get_warning_icon_name(volume->mesh().stats()),
|
||||||
volume->config.has("extruder") ? volume->config.extruder() : 0,
|
volume->config.has("extruder") ? volume->config.extruder() : 0,
|
||||||
false);
|
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++;
|
ui_volume_idx++;
|
||||||
add_settings_item(vol_item, &volume->config.get());
|
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())
|
if (object(obj_idx)->volumes[vol_idx]->is_cut_connector())
|
||||||
sels.Add(m_objects_model->GetInfoItemByType(m_objects_model->GetItemById(obj_idx), InfoItemType::CutConnectors));
|
sels.Add(m_objects_model->GetInfoItemByType(m_objects_model->GetItemById(obj_idx), InfoItemType::CutConnectors));
|
||||||
else {
|
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));
|
sels.Add(m_objects_model->GetItemByVolumeId(obj_idx, vol_idx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4752,7 +4753,7 @@ void ObjectList::update_selections_on_canvas()
|
||||||
|
|
||||||
if (type == itVolume) {
|
if (type == itVolume) {
|
||||||
int vol_idx = m_objects_model->GetVolumeIdByItem(item);
|
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<unsigned int> idxs = selection.get_volume_idxs_from_volume(obj_idx, std::max(instance_idx, 0), vol_idx);
|
std::vector<unsigned int> 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());
|
volume_idxs.insert(volume_idxs.end(), idxs.begin(), idxs.end());
|
||||||
}
|
}
|
||||||
|
|
|
@ -354,26 +354,30 @@ class ObjectDataViewModel :public wxDataViewModel
|
||||||
wxDataViewCtrl* m_ctrl { nullptr };
|
wxDataViewCtrl* m_ctrl { nullptr };
|
||||||
std::vector<std::tuple<ObjectDataViewModelNode*, wxString, wxString>> assembly_name_list;
|
std::vector<std::tuple<ObjectDataViewModelNode*, wxString, wxString>> assembly_name_list;
|
||||||
std::vector<std::tuple<ObjectDataViewModelNode*, wxString, wxString>> search_found_list;
|
std::vector<std::tuple<ObjectDataViewModelNode*, wxString, wxString>> search_found_list;
|
||||||
std::map<int, int> m_ui_and_3d_volume_map;
|
std::map<int,std::map<int, int>> m_ui_and_3d_volume_maps;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ObjectDataViewModel();
|
ObjectDataViewModel();
|
||||||
~ObjectDataViewModel();
|
~ObjectDataViewModel();
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
std::map<int, int> &get_ui_and_3d_volume_map() { return m_ui_and_3d_volume_map; }
|
std::map<int, std::map<int, int>> &get_ui_and_3d_volume_map() { return m_ui_and_3d_volume_maps; }
|
||||||
int get_real_volume_index_in_3d(int ui_value)
|
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()) {
|
if (m_ui_and_3d_volume_maps.find(ui_object_value) != m_ui_and_3d_volume_maps.end()) {
|
||||||
return m_ui_and_3d_volume_map[ui_value];
|
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 (m_ui_and_3d_volume_maps.find(ui_object_value) != m_ui_and_3d_volume_maps.end()) {
|
||||||
if (item.second == _3d_value) {
|
auto cur_map = m_ui_and_3d_volume_maps[ui_object_value];
|
||||||
return item.first;
|
for (auto item : cur_map) {
|
||||||
|
if (item.second == _3d_value) {
|
||||||
|
return item.first;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _3d_value;
|
return _3d_value;
|
||||||
|
|
Loading…
Reference in New Issue