mirror of
https://git.mirrors.martin98.com/https://github.com/bambulab/BambuStudio.git
synced 2025-08-19 12:59:12 +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};
|
||||
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) {
|
||||
++volume_idx;
|
||||
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()),
|
||||
volume->config.has("extruder") ? volume->config.extruder() : 0,
|
||||
false);
|
||||
ui_and_3d_volume_map[ui_volume_idx] = volume_idx;
|
||||
ui_volume_idx++;
|
||||
add_settings_item(vol_item, &volume->config.get());
|
||||
|
||||
if (add_to_selection && add_to_selection(volume))
|
||||
@ -4495,10 +4500,12 @@ void ObjectList::update_selections()
|
||||
assert(obj_idx >= 0 && vol_idx >= 0);
|
||||
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
|
||||
else {
|
||||
vol_idx = m_objects_model->get_real_volume_index_in_ui(vol_idx);
|
||||
sels.Add(m_objects_model->GetItemByVolumeId(obj_idx, vol_idx));
|
||||
}
|
||||
}
|
||||
}
|
||||
m_selection_mode = smVolume; }
|
||||
}
|
||||
else if (selection.is_single_full_instance() || selection.is_multiple_full_instance())
|
||||
@ -4600,7 +4607,8 @@ void ObjectList::update_selections_on_canvas()
|
||||
const int obj_idx = m_objects_model->GetObjectIdByItem(item);
|
||||
|
||||
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);
|
||||
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;
|
||||
|
||||
object->sort_volumes(true);
|
||||
|
||||
wxDataViewItem object_item = m_objects_model->GetItemById(obj_idx);
|
||||
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);
|
||||
}
|
||||
update_info_items(obj_idx, nullptr, true);
|
||||
items = add_volumes_to_object_in_list(obj_idx, std::move(add_to_selection));
|
||||
|
||||
changed_object(obj_idx);
|
||||
return items;
|
||||
|
@ -332,13 +332,30 @@ class ObjectDataViewModel :public wxDataViewModel
|
||||
wxDataViewCtrl* m_ctrl { nullptr };
|
||||
std::vector<std::pair<ObjectDataViewModelNode*, wxString>> assembly_name_list;
|
||||
std::vector<std::pair<ObjectDataViewModelNode*, wxString>> search_found_list;
|
||||
std::map<int, int> m_ui_and_3d_volume_map;
|
||||
|
||||
public:
|
||||
ObjectDataViewModel();
|
||||
~ObjectDataViewModel();
|
||||
|
||||
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 AddObject(ModelObject* model_object, std::string warning_bitmap, bool has_lock = false, bool refresh = true);
|
||||
wxDataViewItem AddVolumeChild( const wxDataViewItem &parent_item,
|
||||
|
Loading…
x
Reference in New Issue
Block a user