From aab62994584a93b4ee63eb78f5b0d2accaea9e0a Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Mon, 27 Feb 2023 18:10:14 +0100 Subject: [PATCH] Show and arrange alignment only for XL (MINI currentl --- src/slic3r/GUI/GLCanvas3D.cpp | 58 ++++++++++++++++++++++-------- src/slic3r/GUI/GLCanvas3D.hpp | 31 +++++++++------- src/slic3r/GUI/Jobs/ArrangeJob.cpp | 6 ++-- src/slic3r/GUI/Jobs/FillBedJob.cpp | 17 ++++----- 4 files changed, 72 insertions(+), 40 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 8096bc312b..dda3f6b4b5 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -999,14 +999,18 @@ void GLCanvas3D::load_arrange_settings() std::string en_rot_sla_str = wxGetApp().app_config->get("arrange", "enable_rotation_sla"); - std::string alignment_fff_str = - wxGetApp().app_config->get("arrange", "alignment_fff"); +// std::string alignment_fff_str = +// wxGetApp().app_config->get("arrange", "alignment_fff"); - std::string alignment_fff_seqp_str = - wxGetApp().app_config->get("arrange", "alignment_fff_seq_pring"); +// std::string alignment_fff_seqp_str = +// wxGetApp().app_config->get("arrange", "alignment_fff_seq_pring"); - std::string alignment_sla_str = - wxGetApp().app_config->get("arrange", "alignment_sla"); +// std::string alignment_sla_str = +// wxGetApp().app_config->get("arrange", "alignment_sla"); + + // Override default alignment and save save/load it to a temporary slot "alignment_xl" + std::string alignment_xl_str = + wxGetApp().app_config->get("arrange", "alignment_xl"); if (!dist_fff_str.empty()) m_arrange_settings_fff.distance = string_to_float_decimal_point(dist_fff_str); @@ -1035,14 +1039,23 @@ void GLCanvas3D::load_arrange_settings() if (!en_rot_sla_str.empty()) m_arrange_settings_sla.enable_rotation = (en_rot_sla_str == "1" || en_rot_sla_str == "yes"); - if (!alignment_sla_str.empty()) - m_arrange_settings_sla.alignment = std::stoi(alignment_sla_str); +// if (!alignment_sla_str.empty()) +// m_arrange_settings_sla.alignment = std::stoi(alignment_sla_str); - if (!alignment_fff_str.empty()) - m_arrange_settings_fff.alignment = std::stoi(alignment_fff_str); +// if (!alignment_fff_str.empty()) +// m_arrange_settings_fff.alignment = std::stoi(alignment_fff_str); - if (!alignment_fff_seqp_str.empty()) - m_arrange_settings_fff_seq_print.alignment = std::stoi(alignment_fff_seqp_str); +// if (!alignment_fff_seqp_str.empty()) +// m_arrange_settings_fff_seq_print.alignment = std::stoi(alignment_fff_seqp_str); + + // Override default alignment and save save/load it to a temporary slot "alignment_xl" + int arr_alignment = static_cast(arrangement::Pivots::BottomLeft); + if (!alignment_xl_str.empty()) + arr_alignment = std::stoi(alignment_xl_str); + + m_arrange_settings_sla.alignment = arr_alignment ; + m_arrange_settings_fff.alignment = arr_alignment ; + m_arrange_settings_fff_seq_print.alignment = arr_alignment ; } PrinterTechnology GLCanvas3D::current_printer_technology() const @@ -1050,6 +1063,21 @@ PrinterTechnology GLCanvas3D::current_printer_technology() const return m_process->current_printer_technology(); } +bool GLCanvas3D::is_arrange_alignment_enabled() +{ + static constexpr const char *ALIGN_ONLY_FOR = "MINI"; + + bool ret = false; + + const Preset &preset = wxGetApp().preset_bundle->get_presets(Preset::TYPE_PRINTER).get_selected_preset(); + + auto *printermodel = PresetUtils::system_printer_model(preset); + if (printermodel) + ret = printermodel->family == ALIGN_ONLY_FOR; + + return ret; +} + GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D &bed) : m_canvas(canvas) , m_context(nullptr) @@ -4152,7 +4180,7 @@ bool GLCanvas3D::_render_arrange_menu(float pos_x) imgui->begin(_L("Arrange options"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); ArrangeSettings settings = get_arrange_settings(); - ArrangeSettings &settings_out = get_arrange_settings(); + ArrangeSettings &settings_out = get_arrange_settings_ref(this); auto &appcfg = wxGetApp().app_config; PrinterTechnology ptech = current_printer_technology(); @@ -4206,9 +4234,9 @@ bool GLCanvas3D::_render_arrange_menu(float pos_x) settings_changed = true; } - Points bed = m_config ? get_bed_shape(*m_config) : Points{}; + Points bed = m_config ? get_bed_shape(*m_config) : Points{}; - if (arrangement::is_box(bed) && imgui->combo(_("Alignment"), {"Center", "Top left", "Bottom left", "Bottom right", "Top right", "Random"}, settings.alignment)) { + if (arrangement::is_box(bed) && settings.alignment >= 0 && imgui->combo(_("Alignment"), {"Center", "Top left", "Bottom left", "Bottom right", "Top right", "Random"}, settings.alignment)) { settings_out.alignment = settings.alignment; appcfg->set("arrange", align_key.c_str(), std::to_string(settings_out.alignment)); settings_changed = true; diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 55b403c9f7..20ab6b7338 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -550,8 +550,10 @@ private: PrinterTechnology current_printer_technology() const; + static bool is_arrange_alignment_enabled(); + template - static auto & get_arrange_settings(Self *self) { + static auto & get_arrange_settings_ref(Self *self) { PrinterTechnology ptech = self->current_printer_technology(); auto *ptr = &self->m_arrange_settings_fff; @@ -569,8 +571,22 @@ private: return *ptr; } - ArrangeSettings &get_arrange_settings() { return get_arrange_settings(this); } +public: + ArrangeSettings get_arrange_settings() const { + const ArrangeSettings &settings = get_arrange_settings_ref(this); + ArrangeSettings ret = settings; + if (&settings == &m_arrange_settings_fff_seq_print) { + ret.distance = std::max(ret.distance, + float(min_object_distance(*m_config))); + } + if (!is_arrange_alignment_enabled()) + ret.alignment = -1; + + return ret; + } + +private: void load_arrange_settings(); class SequentialPrintClearance @@ -902,17 +918,6 @@ public: void highlight_toolbar_item(const std::string& item_name); void highlight_gizmo(const std::string& gizmo_name); - ArrangeSettings get_arrange_settings() const { - const ArrangeSettings &settings = get_arrange_settings(this); - ArrangeSettings ret = settings; - if (&settings == &m_arrange_settings_fff_seq_print) { - ret.distance = std::max(ret.distance, - float(min_object_distance(*m_config))); - } - - return ret; - } - // Timestamp for FPS calculation and notification fade-outs. static int64_t timestamp_now() { #ifdef _WIN32 diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index fa1de2203d..2b954108b9 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -292,7 +292,7 @@ arrangement::ArrangePolygon get_arrange_poly(ModelInstance *inst, arrangement::ArrangeParams get_arrange_params(Plater *p) { const GLCanvas3D::ArrangeSettings &settings = - static_cast(p->canvas3D())->get_arrange_settings(); + p->canvas3D()->get_arrange_settings(); arrangement::ArrangeParams params; params.allow_rotations = settings.enable_rotation; @@ -302,7 +302,9 @@ arrangement::ArrangeParams get_arrange_params(Plater *p) arrangement::Pivots pivot = arrangement::Pivots::Center; int pivot_max = static_cast(arrangement::Pivots::TopRight); - if (settings.alignment > pivot_max) { + if (settings.alignment < 0) { + pivot = arrangement::Pivots::Center; + } else if (settings.alignment > pivot_max) { // means it should be random std::random_device rd{}; std::mt19937 rng(rd()); diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp index 5eefc14b6f..6a173683f6 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.cpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp @@ -106,18 +106,15 @@ void FillBedJob::prepare() void FillBedJob::process(Ctl &ctl) { auto statustxt = _u8L("Filling bed"); - ctl.call_on_main_thread([this] { prepare(); }).wait(); + arrangement::ArrangeParams params; + ctl.call_on_main_thread([this, ¶ms] { + prepare(); + params = get_arrange_params(m_plater); + }).wait(); ctl.update_status(0, statustxt); - if (m_object_idx == -1 || m_selected.empty()) return; - - const GLCanvas3D::ArrangeSettings &settings = - static_cast(m_plater->canvas3D())->get_arrange_settings(); - - arrangement::ArrangeParams params; - params.allow_rotations = settings.enable_rotation; - params.min_obj_distance = scaled(settings.distance); - params.min_bed_distance = scaled(settings.distance_from_bed); + if (m_object_idx == -1 || m_selected.empty()) + return; bool do_stop = false; params.stopcondition = [&ctl, &do_stop]() {