Show and arrange alignment only for XL (MINI currentl

This commit is contained in:
tamasmeszaros 2023-02-27 18:10:14 +01:00
parent 2a69dda9da
commit aab6299458
4 changed files with 72 additions and 40 deletions

View file

@ -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<int>(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;

View file

@ -550,8 +550,10 @@ private:
PrinterTechnology current_printer_technology() const;
static bool is_arrange_alignment_enabled();
template<class Self>
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

View file

@ -292,7 +292,7 @@ arrangement::ArrangePolygon get_arrange_poly(ModelInstance *inst,
arrangement::ArrangeParams get_arrange_params(Plater *p)
{
const GLCanvas3D::ArrangeSettings &settings =
static_cast<const GLCanvas3D*>(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<int>(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());

View file

@ -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, &params] {
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<const GLCanvas3D*>(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]() {