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

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuSanka <yusanka@gmail.com>2019-05-28 17:38:04 +0300
committerYuSanka <yusanka@gmail.com>2019-05-28 17:38:04 +0300
commit765d4264ae9380a549bd84bd8d79d776858d8816 (patch)
tree83ecb976b75d45b6a900be852338d5d6d3ca0cd7 /src/slic3r/GUI/GUI_ObjectLayers.cpp
parent9d19e3d2a72742fd3398174b01be7e1ad583407b (diff)
Implemented ObjectLayers class
+ some code refactoring
Diffstat (limited to 'src/slic3r/GUI/GUI_ObjectLayers.cpp')
-rw-r--r--src/slic3r/GUI/GUI_ObjectLayers.cpp150
1 files changed, 150 insertions, 0 deletions
diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp
new file mode 100644
index 000000000..31a17bbf6
--- /dev/null
+++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp
@@ -0,0 +1,150 @@
+#include "GUI_ObjectLayers.hpp"
+#include "GUI_ObjectList.hpp"
+
+#include "OptionsGroup.hpp"
+#include "PresetBundle.hpp"
+#include "libslic3r/Model.hpp"
+
+#include <boost/algorithm/string.hpp>
+
+#include "I18N.hpp"
+
+#include <wx/wupdlock.h>
+
+namespace Slic3r
+{
+namespace GUI
+{
+
+ObjectLayers::ObjectLayers(wxWindow* parent) :
+ OG_Settings(parent, true)
+{
+ m_og->label_width = 0;
+ m_og->set_grid_vgap(5);
+
+ // Legend for object layers
+ Line line = Line{ "", "" };
+
+ ConfigOptionDef def;
+ def.label = "";
+ def.gui_type = "legend";
+ def.type = coString;
+ def.width = field_width;
+
+ for (const std::string axis : { "Min Z", "Max Z", "Layer height" }) {
+ def.set_default_value(new ConfigOptionString{ axis });
+ std::string label = boost::algorithm::replace_all_copy(axis, " ", "_");
+ boost::algorithm::to_lower(label);
+ line.append_option(Option(def, label + "_legend"));
+ }
+
+ m_og->append_line(line);
+
+ m_bmp_delete = ScalableBitmap(parent, "cross");
+ m_bmp_add = ScalableBitmap(parent, "add_copies");
+}
+
+void ObjectLayers::update_layers_list()
+{
+ ObjectList* objects_ctrl = wxGetApp().obj_list();
+ if (objects_ctrl->multiple_selection()) return;
+
+ const auto item = objects_ctrl->GetSelection();
+ if (!item) return;
+
+ const int obj_idx = objects_ctrl->get_selected_obj_idx();
+ if (obj_idx < 0) return;
+
+ const ItemType type = objects_ctrl->GetModel()->GetItemType(item);
+ if (!(type & (itLayerRoot | itLayer))) return;
+
+ ModelObject* object = objects_ctrl->object(obj_idx);
+ if (!object || object->layer_height_ranges.empty()) return;
+
+ auto grid_sizer = m_og->get_grid_sizer();
+
+ const int cols = grid_sizer->GetCols();
+ const int rows = grid_sizer->GetRows();
+ for (int idx = cols*rows-1; idx >= cols; idx--) {
+ grid_sizer->Remove(idx);
+ }
+
+ ConfigOptionDef def;
+ def.label = "";
+ def.gui_type = "";
+ def.type = coFloat;
+ def.width = field_width;
+
+ if (type & itLayerRoot)
+ {
+ auto create_btns = [this](wxWindow* parent) {
+ auto sizer = new wxBoxSizer(wxHORIZONTAL);
+ auto del_btn = new ScalableButton(parent, wxID_ANY, m_bmp_delete);
+ del_btn->SetToolTip(_(L("Remove layer")));
+
+ sizer->Add(del_btn, 0, wxRIGHT, em_unit(parent));
+
+ del_btn->Bind(wxEVT_BUTTON, [this](wxEvent &event) {
+ del_layer();
+// wxTheApp->CallAfter([this]() {
+// wxWindowUpdateLocker noUpdates(m_parent);
+// update_layers_list();
+// m_parent->Layout();
+// });
+ });
+
+ auto add_btn = new ScalableButton(parent, wxID_ANY, m_bmp_add);
+ add_btn->SetToolTip(_(L("Add layer")));
+
+ sizer->Add(add_btn, 0, wxRIGHT, em_unit(parent));
+
+ add_btn->Bind(wxEVT_BUTTON, [this](wxEvent &event) {
+ add_layer();
+// wxTheApp->CallAfter([this]() {
+// wxWindowUpdateLocker noUpdates(m_parent);
+// update_layers_list();
+// m_parent->Layout();
+// });
+ });
+
+ return sizer;
+ };
+
+ Line line{"",""};
+ for (const auto layer : object->layer_height_ranges)
+ {
+ std::string label = (boost::format("min_z_%.2f") % layer.first.first).str();
+ def.set_default_value(new ConfigOptionFloat(layer.first.first));
+ line.append_option(Option(def, label));
+
+ label = (boost::format("max_z_%.2f") % layer.first.second).str();
+ def.set_default_value(new ConfigOptionFloat(layer.first.second));
+ line.append_option(Option(def, label));
+
+ label = (boost::format("layer_height_%.2f_%.2f") % layer.first.first % layer.first.second).str();
+ def.set_default_value(new ConfigOptionFloat(layer.second));
+ line.append_option(Option(def, label));
+
+ line.append_widget(create_btns);
+ }
+
+ m_og->append_line(line);
+ }
+}
+
+void ObjectLayers::UpdateAndShow(const bool show)
+{
+ if (show)
+ update_layers_list();
+
+ OG_Settings::UpdateAndShow(show);
+}
+
+void ObjectLayers::msw_rescale()
+{
+ m_bmp_delete.msw_rescale();
+ m_bmp_add.msw_rescale();
+}
+
+} //namespace GUI
+} //namespace Slic3r \ No newline at end of file