diff --git a/src/slic3r/GUI/BedShapeDialog.cpp b/src/slic3r/GUI/BedShapeDialog.cpp index 166127b68..98a5178df 100644 --- a/src/slic3r/GUI/BedShapeDialog.cpp +++ b/src/slic3r/GUI/BedShapeDialog.cpp @@ -16,7 +16,7 @@ namespace Slic3r { namespace GUI { -void BedShapeDialog::build_dialog(ConfigOptionPoints* default_pt) +void BedShapeDialog::build_dialog(const ConfigOptionPoints& default_pt) { SetFont(wxGetApp().normal_font()); m_panel = new BedShapePanel(this); @@ -51,7 +51,7 @@ void BedShapeDialog::on_dpi_changed(const wxRect &suggested_rect) Refresh(); } -void BedShapePanel::build_panel(ConfigOptionPoints* default_pt) +void BedShapePanel::build_panel(const ConfigOptionPoints& default_pt) { auto sbsizer = new wxStaticBoxSizer(wxVERTICAL, this, _(L("Shape"))); sbsizer->GetStaticBox()->SetFont(wxGetApp().bold_font()); @@ -113,7 +113,7 @@ void BedShapePanel::build_panel(ConfigOptionPoints* default_pt) // right pane with preview canvas m_canvas = new Bed_2D(this); - m_canvas->m_bed_shape = default_pt->values; + m_canvas->m_bed_shape = default_pt.values; // main sizer auto top_sizer = new wxBoxSizer(wxHORIZONTAL); @@ -155,20 +155,20 @@ ConfigOptionsGroupShp BedShapePanel::init_shape_options_page(const wxString& tit // Deduce the bed shape type(rect, circle, custom) // This routine shall be smart enough if the user messes up // with the list of points in the ini file directly. -void BedShapePanel::set_shape(ConfigOptionPoints* points) +void BedShapePanel::set_shape(const ConfigOptionPoints& points) { - auto polygon = Polygon::new_scale(points->values); + auto polygon = Polygon::new_scale(points.values); // is this a rectangle ? - if (points->size() == 4) { - auto lines = polygon.lines(); + if (points.size() == 4) { + auto lines = polygon.lines(); if (lines[0].parallel_to(lines[2]) && lines[1].parallel_to(lines[3])) { // okay, it's a rectangle // find origin coordf_t x_min, x_max, y_min, y_max; - x_max = x_min = points->values[0](0); - y_max = y_min = points->values[0](1); - for (auto pt : points->values) + x_max = x_min = points.values[0](0); + y_max = y_min = points.values[0](1); + for (auto pt : points.values) { x_min = std::min(x_min, pt(0)); x_max = std::max(x_max, pt(0)); @@ -219,8 +219,8 @@ void BedShapePanel::set_shape(ConfigOptionPoints* points) } } - if (points->size() < 3) { - // Invalid polygon.Revert to default bed dimensions. + if (points.size() < 3) { + // Invalid polygon.Revert to default bed dimensions. m_shape_options_book->SetSelection(SHAPE_RECTANGULAR); auto optgroup = m_optgroups[SHAPE_RECTANGULAR]; optgroup->set_value("rect_size", new ConfigOptionPoints{ Vec2d(200, 200) }); @@ -232,7 +232,7 @@ void BedShapePanel::set_shape(ConfigOptionPoints* points) // This is a custom bed shape, use the polygon provided. m_shape_options_book->SetSelection(SHAPE_CUSTOM); // Copy the polygon to the canvas, make a copy of the array. - m_loaded_bed_shape = points->values; + m_loaded_bed_shape = points.values; update_shape(); } @@ -324,7 +324,7 @@ void BedShapePanel::load_stl() try { model = Model::read_from_file(file_name); } - catch (std::exception &e) { + catch (std::exception &) { show_error(this, _(L("Error! Invalid model"))); return; } diff --git a/src/slic3r/GUI/BedShapeDialog.hpp b/src/slic3r/GUI/BedShapeDialog.hpp index d2c67a7c7..81d47320d 100644 --- a/src/slic3r/GUI/BedShapeDialog.hpp +++ b/src/slic3r/GUI/BedShapeDialog.hpp @@ -23,15 +23,15 @@ public: BedShapePanel(wxWindow* parent) : wxPanel(parent, wxID_ANY) {} ~BedShapePanel() {} - void build_panel(ConfigOptionPoints* default_pt); - + void build_panel(const ConfigOptionPoints& default_pt); + // Returns the resulting bed shape polygon. This value will be stored to the ini file. - std::vector GetValue() { return m_canvas->m_bed_shape; } + std::vector get_bed_shape() { return m_canvas->m_bed_shape; } private: ConfigOptionsGroupShp init_shape_options_page(const wxString& title); - void set_shape(ConfigOptionPoints* points); - void update_preview(); + void set_shape(const ConfigOptionPoints& points); + void update_preview(); void update_shape(); void load_stl(); @@ -49,8 +49,8 @@ public: wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) {} ~BedShapeDialog() {} - void build_dialog(ConfigOptionPoints* default_pt); - std::vector GetValue() { return m_panel->GetValue(); } + void build_dialog(const ConfigOptionPoints& default_pt); + std::vector get_bed_shape() { return m_panel->get_bed_shape(); } protected: void on_dpi_changed(const wxRect &suggested_rect) override; diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index 8b08f6f7f..59ba93677 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -532,15 +532,14 @@ PageBedShape::PageBedShape(ConfigWizard *parent) { append_text(_(L("Set the shape of your printer's bed."))); - shape_panel->build_panel(wizard_p()->custom_config->option("bed_shape")); + shape_panel->build_panel(*wizard_p()->custom_config->option("bed_shape")); append(shape_panel); } void PageBedShape::apply_custom_config(DynamicPrintConfig &config) { - const auto points(shape_panel->GetValue()); - auto *opt = new ConfigOptionPoints(points); - config.set_key_value("bed_shape", opt); + const auto points(shape_panel->get_bed_shape()); + config.set_key_value("bed_shape", new ConfigOptionPoints(points)); } PageDiameters::PageDiameters(ConfigWizard *parent) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 7ab564beb..a30736220 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1856,9 +1856,9 @@ void TabPrinter::build_fff() btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) { BedShapeDialog dlg(this); - dlg.build_dialog(m_config->option("bed_shape")); + dlg.build_dialog(*m_config->option("bed_shape")); if (dlg.ShowModal() == wxID_OK) { - std::vector shape = dlg.GetValue(); + std::vector shape = dlg.get_bed_shape(); if (!shape.empty()) { load_key_value("bed_shape", shape); @@ -2062,9 +2062,9 @@ void TabPrinter::build_sla() btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) { BedShapeDialog dlg(this); - dlg.build_dialog(m_config->option("bed_shape")); + dlg.build_dialog(*m_config->option("bed_shape")); if (dlg.ShowModal() == wxID_OK) { - std::vector shape = dlg.GetValue(); + std::vector shape = dlg.get_bed_shape(); if (!shape.empty()) { load_key_value("bed_shape", shape);