diff options
author | YuSanka <yusanka@gmail.com> | 2020-05-20 21:07:31 +0300 |
---|---|---|
committer | YuSanka <yusanka@gmail.com> | 2020-05-20 21:07:31 +0300 |
commit | 8afd273c4bb035b0b6ea04269697bc0bd91b307f (patch) | |
tree | 9a18515556c2590ba4609617a978f40976c1a84d /src/slic3r/GUI/GUI_ObjectList.cpp | |
parent | 0b60d45cf38d29c0e3df71e8a7804b383617525d (diff) |
Implemented "from/to imperial units conversation" for loaded objects and volumes
Diffstat (limited to 'src/slic3r/GUI/GUI_ObjectList.cpp')
-rw-r--r-- | src/slic3r/GUI/GUI_ObjectList.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index b2283ba4a..419f64567 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -333,6 +333,34 @@ void ObjectList::get_selected_item_indexes(int& obj_idx, int& vol_idx, const wxD vol_idx = type & itVolume ? m_objects_model->GetVolumeIdByItem(item) : -1; } +void ObjectList::get_selection_indexes(std::vector<int>& obj_idxs, std::vector<int>& vol_idxs) +{ + wxDataViewItemArray sels; + GetSelections(sels); + assert(!sels.IsEmpty()); + + if (m_objects_model->GetItemType(sels[0]) & itVolume) { + for (wxDataViewItem item : sels) { + obj_idxs.emplace_back(m_objects_model->GetIdByItem(m_objects_model->GetTopParent(item))); + + assert(m_objects_model->GetItemType(item) & itVolume); + vol_idxs.emplace_back(m_objects_model->GetVolumeIdByItem(item)); + } + } + else { + for (wxDataViewItem item : sels) { + const ItemType type = m_objects_model->GetItemType(item); + assert(type & itObject | itInstance | itInstanceRoot); + + obj_idxs.emplace_back(type & itObject ? m_objects_model->GetIdByItem(item) : + m_objects_model->GetIdByItem(m_objects_model->GetTopParent(item))); + } + } + + std::sort(obj_idxs.begin(), obj_idxs.end(), std::greater<int>()); + obj_idxs.erase(std::unique(obj_idxs.begin(), obj_idxs.end()), obj_idxs.end()); +} + int ObjectList::get_mesh_errors_count(const int obj_idx, const int vol_idx /*= -1*/) const { if (obj_idx < 0) @@ -1744,6 +1772,15 @@ void ObjectList::append_menu_item_scale_selection_to_fit_print_volume(wxMenu* me [](wxCommandEvent&) { wxGetApp().plater()->scale_selection_to_fit_print_volume(); }, "", menu); } +void ObjectList::append_menu_items_convert_unit(wxMenu* menu) +{ + append_menu_item(menu, wxID_ANY, _L("Convert from imperial unit"), _L("Convert from imperial unit"), + [](wxCommandEvent&) { wxGetApp().plater()->convert_unit(true); }, "", menu); + + append_menu_item(menu, wxID_ANY, _L("Convert to imperial unit"), _L("Convert to imperial unit"), + [](wxCommandEvent&) { wxGetApp().plater()->convert_unit(false); }, "", menu); +} + void ObjectList::create_object_popupmenu(wxMenu *menu) { #ifdef __WXOSX__ @@ -1751,6 +1788,7 @@ void ObjectList::create_object_popupmenu(wxMenu *menu) #endif // __WXOSX__ append_menu_item_reload_from_disk(menu); + append_menu_items_convert_unit(menu); append_menu_item_export_stl(menu); append_menu_item_fix_through_netfabb(menu); append_menu_item_scale_selection_to_fit_print_volume(menu); @@ -1775,6 +1813,7 @@ void ObjectList::create_sla_object_popupmenu(wxMenu *menu) #endif // __WXOSX__ append_menu_item_reload_from_disk(menu); + append_menu_items_convert_unit(menu); append_menu_item_export_stl(menu); append_menu_item_fix_through_netfabb(menu); // rest of a object_sla_menu will be added later in: @@ -1788,6 +1827,7 @@ void ObjectList::create_part_popupmenu(wxMenu *menu) #endif // __WXOSX__ append_menu_item_reload_from_disk(menu); + append_menu_items_convert_unit(menu); append_menu_item_export_stl(menu); append_menu_item_fix_through_netfabb(menu); @@ -4050,6 +4090,8 @@ void ObjectList::show_multi_selection_menu() return wxGetApp().plater()->can_reload_from_disk(); }, wxGetApp().plater()); + append_menu_items_convert_unit(menu); + wxGetApp().plater()->PopupMenu(menu); } |