Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pa calib: batch mode for pa pattern #7199

Open
wants to merge 37 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
5b5ee7e
pa calib: batch mode option
buzzhuzz Oct 22, 2024
47fce7a
pa pattern: support for batch mode
buzzhuzz Oct 22, 2024
10fa878
code cleanup
buzzhuzz Oct 23, 2024
692d910
pa pattern: clear destination vector on string parse
buzzhuzz Oct 24, 2024
09e002c
Put handle cube inside the test pattern
buzzhuzz Oct 24, 2024
21d1f7a
pa pattern: rework object manipulation to not use gizmos
buzzhuzz Oct 25, 2024
c1e375c
pa pattern: merge calib 'handle' with test pattern
buzzhuzz Oct 25, 2024
331e151
Remove debug print
buzzhuzz Oct 26, 2024
38003cc
fix cube position on cloned plates
buzzhuzz Oct 26, 2024
7993063
Merge remote-tracking branch 'upstream/main' into dbuzz/pa-pattern-ba…
buzzhuzz Oct 26, 2024
a0969d2
pa pattern: test generation for single and batch modes
buzzhuzz Oct 27, 2024
d06883f
pa pattern: work with object reference
buzzhuzz Oct 25, 2024
aaf78c6
CalibPressureAdvancePattern to privide anchro object offset
buzzhuzz Oct 27, 2024
8311321
pa pattern: multiple anchor object per plate
buzzhuzz Oct 27, 2024
cae30e2
pa pattern: multiple tests on single plate
buzzhuzz Oct 27, 2024
5058d88
pa pattern: force update flow and accel on each test layer pass
buzzhuzz Oct 27, 2024
00545f8
Merge remote-tracking branch 'upstream/main' into dbuzz/pa-pattern-ba…
buzzhuzz Oct 27, 2024
6d462ce
pa pattern: correctly assign object to the plate
buzzhuzz Oct 28, 2024
eaaabf6
pa pattern: re-generate custom test gcode on plate reslicing
buzzhuzz Oct 29, 2024
55620a3
pa pattern: multiple columns per plate
buzzhuzz Oct 29, 2024
2d7c948
pa pattern batch mode for Rect plates only
buzzhuzz Oct 29, 2024
138a233
pa pattern: arrange objects using arrangement::arrange
buzzhuzz Oct 30, 2024
0079855
Merge remote-tracking branch 'upstream/main' into dbuzz/pa-pattern-ba…
buzzhuzz Dec 1, 2024
ce7082e
pa calib: remove "batch mode" checkbox
buzzhuzz Dec 1, 2024
70e1c0e
pa pattern: show warning on default values
buzzhuzz Dec 1, 2024
41b31d8
Merge branch 'main' into dbuzz/pa-pattern-batch-mode
SoftFever Dec 24, 2024
2fb347c
Merge remote-tracking branch 'upstream/main' into dbuzz/pa-pattern-ba…
buzzhuzz Dec 29, 2024
2945bea
Add calib objects into the object list
buzzhuzz Dec 29, 2024
664d962
pa calib: use volumetric speed as input for a batch mode
buzzhuzz Dec 29, 2024
3c0d691
pa pattern batch mode: show warning if flow is higher than max
buzzhuzz Dec 29, 2024
08555bf
calib_dlg: make text fields wider
buzzhuzz Dec 29, 2024
2dfcbd1
Revert "pa pattern batch mode: show warning if flow is higher than max"
buzzhuzz Jan 12, 2025
335fe77
Revert "pa calib: use volumetric speed as input for a batch mode"
buzzhuzz Jan 12, 2025
4f44310
Merge remote-tracking branch 'upstream/main' into dbuzz/pa-pattern-ba…
buzzhuzz Jan 12, 2025
9db3fa1
pa batch: add special case for single object calib
buzzhuzz Jan 12, 2025
7a641f8
Merge remote-tracking branch 'upstream/main' into dbuzz/pa-pattern-ba…
buzzhuzz Jan 26, 2025
c8af0dc
Fix compilation error
buzzhuzz Jan 26, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
pa calib: batch mode option
Add option for batch mode calibration.
In this mode a number of tests shall be generated based on a set of
acceleration and speeds provided.
buzzhuzz committed Oct 23, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit 5b5ee7ecf8bc3919414c5fb8126b44a2018c4ca5
5 changes: 5 additions & 0 deletions src/libslic3r/calib.hpp
Original file line number Diff line number Diff line change
@@ -31,6 +31,11 @@ struct Calib_Params
Calib_Params() : mode(CalibMode::Calib_None){};
double start, end, step;
bool print_numbers;

bool batch_mode;
std::vector<double> accelerations;
std::vector<double> speeds;

CalibMode mode;
};

74 changes: 73 additions & 1 deletion src/slic3r/GUI/calib_dlg.cpp
Original file line number Diff line number Diff line change
@@ -6,7 +6,19 @@
#include "MainFrame.hpp"
#include <string>
namespace Slic3r { namespace GUI {


namespace {

void ParseStringValues(std::string str, std::vector<double> &vec)
{
std::replace(str.begin(), str.end(), ',', ' ');
std::istringstream inss(str);
std::copy_if(std::istream_iterator<int>(inss), std::istream_iterator<int>(), std::back_inserter(vec),
[](int x){ fprintf(stderr, "copy_if: %i", x); return x > 0; });
}

}

wxBoxSizer* create_item_checkbox(wxString title, wxWindow* parent, bool* value, CheckBox*& checkbox)
{
wxBoxSizer* m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL);
@@ -59,9 +71,13 @@ PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater*
wxString start_pa_str = _L("Start PA: ");
wxString end_pa_str = _L("End PA: ");
wxString PA_step_str = _L("PA step: ");
wxString sp_accel_str = _L("Accelerations: ");
wxString sp_speed_str = _L("Speeds: ");
auto text_size = wxWindow::GetTextExtent(start_pa_str);
text_size.IncTo(wxWindow::GetTextExtent(end_pa_str));
text_size.IncTo(wxWindow::GetTextExtent(PA_step_str));
text_size.IncTo(wxWindow::GetTextExtent(sp_accel_str));
text_size.IncTo(wxWindow::GetTextExtent(sp_speed_str));
text_size.x = text_size.x * 1.5;
wxStaticBoxSizer* settings_sizer = new wxStaticBoxSizer(wxVERTICAL, this, _L("Settings"));

@@ -98,6 +114,30 @@ PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater*
settings_sizer->Add(create_item_checkbox(_L("Print numbers"), this, &m_params.print_numbers, m_cbPrintNum));
m_cbPrintNum->SetValue(false);

settings_sizer->Add(create_item_checkbox(_L("Batch mode"), this, &m_params.batch_mode, m_cbBatchMode));
m_cbBatchMode->SetValue(false);

wxTextValidator val_list_validator(wxFILTER_INCLUDE_CHAR_LIST);
val_list_validator.SetCharIncludes(wxString("0123456789,"));

auto sp_accel_sizer = new wxBoxSizer(wxHORIZONTAL);
auto sp_accel_text = new wxStaticText(this, wxID_ANY, sp_accel_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
m_tiBMAccels = new TextInput(this, "", "", "", wxDefaultPosition, ti_size, wxTE_PROCESS_ENTER);
m_tiBMAccels->SetToolTip(_L("Comma-separated list of printing accelerations"));
m_tiBMAccels->GetTextCtrl()->SetValidator(val_list_validator);
sp_accel_sizer->Add(sp_accel_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
sp_accel_sizer->Add(m_tiBMAccels, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
settings_sizer->Add(sp_accel_sizer);

auto sp_speed_sizer = new wxBoxSizer(wxHORIZONTAL);
auto sp_speed_text = new wxStaticText(this, wxID_ANY, sp_speed_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
m_tiBMSpeeds = new TextInput(this, "", "", "", wxDefaultPosition, ti_size, wxTE_PROCESS_ENTER);
m_tiBMSpeeds->SetToolTip(_L("Comma-separated list of printing speeds"));
m_tiBMSpeeds->GetTextCtrl()->SetValidator(val_list_validator);
sp_speed_sizer->Add(sp_speed_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
sp_speed_sizer->Add(m_tiBMSpeeds, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
settings_sizer->Add(sp_speed_sizer);

v_sizer->Add(settings_sizer);
v_sizer->Add(0, FromDIP(10), 0, wxEXPAND, 5);
m_btnStart = new Button(this, _L("OK"));
@@ -119,6 +159,7 @@ PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater*
// Connect Events
m_rbExtruderType->Connect(wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler(PA_Calibration_Dlg::on_extruder_type_changed), NULL, this);
m_rbMethod->Connect(wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler(PA_Calibration_Dlg::on_method_changed), NULL, this);
m_cbBatchMode->Connect(wxEVT_TOGGLEBUTTON, wxCommandEventHandler(PA_Calibration_Dlg::on_batch_mode_changed), NULL, this);
this->Connect(wxEVT_SHOW, wxShowEventHandler(PA_Calibration_Dlg::on_show));
//wxGetApp().UpdateDlgDarkUI(this);

@@ -130,6 +171,7 @@ PA_Calibration_Dlg::~PA_Calibration_Dlg() {
// Disconnect Events
m_rbExtruderType->Disconnect(wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler(PA_Calibration_Dlg::on_extruder_type_changed), NULL, this);
m_rbMethod->Disconnect(wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler(PA_Calibration_Dlg::on_method_changed), NULL, this);
m_cbBatchMode->Disconnect(wxEVT_TOGGLEBUTTON, wxCommandEventHandler(PA_Calibration_Dlg::on_batch_mode_changed), NULL, this);
m_btnStart->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PA_Calibration_Dlg::on_start), NULL, this);
}

@@ -146,23 +188,32 @@ void PA_Calibration_Dlg::reset_params() {
m_tiPAStep->GetTextCtrl()->SetValue(wxString::FromDouble(0.002));
m_cbPrintNum->SetValue(true);
m_cbPrintNum->Enable(true);
m_cbBatchMode->SetValue(false);
m_cbBatchMode->Enable(false);
break;
case 2:
m_params.mode = CalibMode::Calib_PA_Pattern;
m_tiEndPA->GetTextCtrl()->SetValue(wxString::FromDouble(0.08));
m_tiPAStep->GetTextCtrl()->SetValue(wxString::FromDouble(0.005));
m_cbPrintNum->SetValue(true);
m_cbPrintNum->Enable(false);
m_cbBatchMode->SetValue(false);
m_cbBatchMode->Enable(true);
break;
default:
m_params.mode = CalibMode::Calib_PA_Tower;
m_tiEndPA->GetTextCtrl()->SetValue(wxString::FromDouble(0.1));
m_tiPAStep->GetTextCtrl()->SetValue(wxString::FromDouble(0.002));
m_cbPrintNum->SetValue(false);
m_cbPrintNum->Enable(false);
m_cbBatchMode->SetValue(false);
m_cbBatchMode->Enable(false);
break;
}

m_tiBMAccels->Enable(m_cbBatchMode->GetValue());
m_tiBMSpeeds->Enable(m_cbBatchMode->GetValue());

if (!isDDE) {
m_tiEndPA->GetTextCtrl()->SetValue(wxString::FromDouble(1.0));

@@ -197,6 +248,17 @@ void PA_Calibration_Dlg::on_start(wxCommandEvent& event) {
}

m_params.print_numbers = m_cbPrintNum->GetValue();
m_params.batch_mode = m_cbBatchMode->GetValue();
if (m_params.batch_mode) {
ParseStringValues(m_tiBMAccels->GetTextCtrl()->GetValue().ToStdString(), m_params.accelerations);
ParseStringValues(m_tiBMSpeeds->GetTextCtrl()->GetValue().ToStdString(), m_params.speeds);

if (m_params.speeds.empty() || m_params.accelerations.empty()) {
MessageDialog msg_dlg(nullptr, _L("Accelerations and speeds must contain at least 1 element each.\n"), wxEmptyString, wxICON_WARNING | wxOK);
msg_dlg.ShowModal();
return;
}
}

m_plater->calib_pa(m_params);
EndModal(wxID_OK);
@@ -211,6 +273,16 @@ void PA_Calibration_Dlg::on_method_changed(wxCommandEvent& event) {
event.Skip();
}

void PA_Calibration_Dlg::on_batch_mode_changed(wxCommandEvent &event)
{
bool val = m_cbBatchMode->GetValue();

m_tiBMAccels->Enable(val);
m_tiBMSpeeds->Enable(val);

event.Skip();
}

void PA_Calibration_Dlg::on_dpi_changed(const wxRect& suggested_rect) {
this->Refresh();
Fit();
4 changes: 4 additions & 0 deletions src/slic3r/GUI/calib_dlg.hpp
Original file line number Diff line number Diff line change
@@ -29,6 +29,7 @@ class PA_Calibration_Dlg : public DPIDialog
virtual void on_start(wxCommandEvent& event);
virtual void on_extruder_type_changed(wxCommandEvent& event);
virtual void on_method_changed(wxCommandEvent& event);
virtual void on_batch_mode_changed(wxCommandEvent& event);

protected:
bool m_bDDE;
@@ -41,6 +42,9 @@ class PA_Calibration_Dlg : public DPIDialog
TextInput* m_tiEndPA;
TextInput* m_tiPAStep;
CheckBox* m_cbPrintNum;
CheckBox* m_cbBatchMode;
TextInput* m_tiBMAccels;
TextInput* m_tiBMSpeeds;
Button* m_btnStart;

Plater* m_plater;