mirror of
https://git.mirrors.martin98.com/https://github.com/bambulab/BambuStudio.git
synced 2025-08-19 20:29:06 +08:00
FIX:make sort_volumes right
Jira: STUDIO-5645 Change-Id: If324c9115bfaaf0c1b7b4be7c7ee96ba6b8ac890
This commit is contained in:
parent
d87d9f9270
commit
5b1db7f45e
@ -3766,6 +3766,9 @@ 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();
|
||||||
|
ui_and_3d_volume_map.clear();
|
||||||
|
int ui_volume_idx = 0;
|
||||||
for (const ModelVolume *volume : object->volumes) {
|
for (const ModelVolume *volume : object->volumes) {
|
||||||
++volume_idx;
|
++volume_idx;
|
||||||
if (object->is_cut() && volume->is_cut_connector())
|
if (object->is_cut() && volume->is_cut_connector())
|
||||||
@ -3778,6 +3781,8 @@ 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_volume_idx++;
|
||||||
add_settings_item(vol_item, &volume->config.get());
|
add_settings_item(vol_item, &volume->config.get());
|
||||||
|
|
||||||
if (add_to_selection && add_to_selection(volume))
|
if (add_to_selection && add_to_selection(volume))
|
||||||
@ -4495,8 +4500,10 @@ void ObjectList::update_selections()
|
|||||||
assert(obj_idx >= 0 && vol_idx >= 0);
|
assert(obj_idx >= 0 && vol_idx >= 0);
|
||||||
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);
|
||||||
sels.Add(m_objects_model->GetItemByVolumeId(obj_idx, vol_idx));
|
sels.Add(m_objects_model->GetItemByVolumeId(obj_idx, vol_idx));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_selection_mode = smVolume; }
|
m_selection_mode = smVolume; }
|
||||||
@ -4600,7 +4607,8 @@ void ObjectList::update_selections_on_canvas()
|
|||||||
const int obj_idx = m_objects_model->GetObjectIdByItem(item);
|
const int obj_idx = m_objects_model->GetObjectIdByItem(item);
|
||||||
|
|
||||||
if (type == itVolume) {
|
if (type == itVolume) {
|
||||||
const 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);
|
||||||
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());
|
||||||
}
|
}
|
||||||
@ -5814,22 +5822,8 @@ wxDataViewItemArray ObjectList::reorder_volumes_and_get_selection(int obj_idx, s
|
|||||||
return items;
|
return items;
|
||||||
|
|
||||||
object->sort_volumes(true);
|
object->sort_volumes(true);
|
||||||
|
update_info_items(obj_idx, nullptr, true);
|
||||||
wxDataViewItem object_item = m_objects_model->GetItemById(obj_idx);
|
items = add_volumes_to_object_in_list(obj_idx, std::move(add_to_selection));
|
||||||
m_objects_model->DeleteVolumeChildren(object_item);
|
|
||||||
|
|
||||||
for (const ModelVolume* volume : object->volumes) {
|
|
||||||
wxDataViewItem vol_item = m_objects_model->AddVolumeChild(object_item, from_u8(volume->name),
|
|
||||||
volume->type(),
|
|
||||||
get_warning_icon_name(volume->mesh().stats()),
|
|
||||||
volume->config.has("extruder") ? volume->config.extruder() : 0,
|
|
||||||
false);
|
|
||||||
// add settings to the part, if it has those
|
|
||||||
add_settings_item(vol_item, &volume->config.get());
|
|
||||||
|
|
||||||
if (add_to_selection && add_to_selection(volume))
|
|
||||||
items.Add(vol_item);
|
|
||||||
}
|
|
||||||
|
|
||||||
changed_object(obj_idx);
|
changed_object(obj_idx);
|
||||||
return items;
|
return items;
|
||||||
|
@ -332,13 +332,30 @@ class ObjectDataViewModel :public wxDataViewModel
|
|||||||
wxDataViewCtrl* m_ctrl { nullptr };
|
wxDataViewCtrl* m_ctrl { nullptr };
|
||||||
std::vector<std::pair<ObjectDataViewModelNode*, wxString>> assembly_name_list;
|
std::vector<std::pair<ObjectDataViewModelNode*, wxString>> assembly_name_list;
|
||||||
std::vector<std::pair<ObjectDataViewModelNode*, wxString>> search_found_list;
|
std::vector<std::pair<ObjectDataViewModelNode*, wxString>> search_found_list;
|
||||||
|
std::map<int, int> m_ui_and_3d_volume_map;
|
||||||
|
|
||||||
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; }
|
||||||
|
int get_real_volume_index_in_3d(int ui_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];
|
||||||
|
}
|
||||||
|
return ui_value;
|
||||||
|
}
|
||||||
|
int get_real_volume_index_in_ui(int _3d_value)
|
||||||
|
{
|
||||||
|
for (auto item: m_ui_and_3d_volume_map) {
|
||||||
|
if (item.second == _3d_value) {
|
||||||
|
return item.first;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _3d_value;
|
||||||
|
}
|
||||||
wxDataViewItem AddPlate(PartPlate* part_plate, wxString name = wxEmptyString, bool refresh = true);
|
wxDataViewItem AddPlate(PartPlate* part_plate, wxString name = wxEmptyString, bool refresh = true);
|
||||||
wxDataViewItem AddObject(ModelObject* model_object, std::string warning_bitmap, bool has_lock = false, bool refresh = true);
|
wxDataViewItem AddObject(ModelObject* model_object, std::string warning_bitmap, bool has_lock = false, bool refresh = true);
|
||||||
wxDataViewItem AddVolumeChild( const wxDataViewItem &parent_item,
|
wxDataViewItem AddVolumeChild( const wxDataViewItem &parent_item,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user