Implemented "from/to imperial units conversation" for loaded objects and volumes

This commit is contained in:
YuSanka 2020-05-20 20:07:31 +02:00
parent 0b60d45cf3
commit 8afd273c4b
6 changed files with 131 additions and 2 deletions
src/slic3r/GUI

View file

@ -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);
}