Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuSanka <yusanka@gmail.com>2020-05-20 21:07:31 +0300
committerYuSanka <yusanka@gmail.com>2020-05-20 21:07:31 +0300
commit8afd273c4bb035b0b6ea04269697bc0bd91b307f (patch)
tree9a18515556c2590ba4609617a978f40976c1a84d /src/slic3r/GUI/GUI_ObjectList.cpp
parent0b60d45cf38d29c0e3df71e8a7804b383617525d (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.cpp42
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);
}