mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-08 07:27:41 -06:00
NEW: add calibration options
add calibration option of xcam_cali, bed_leveling and vibration. Change-Id: I63dc47e08ac89554f0e45db35eecd72be484647d Signed-off-by: Stone Li <stone.li@bambulab.com>
This commit is contained in:
parent
73242280ef
commit
3a9397307d
4 changed files with 94 additions and 13 deletions
|
@ -11,6 +11,9 @@
|
||||||
#include "Widgets/RoundedRectangle.hpp"
|
#include "Widgets/RoundedRectangle.hpp"
|
||||||
#include "Widgets/StaticBox.hpp"
|
#include "Widgets/StaticBox.hpp"
|
||||||
|
|
||||||
|
static wxColour FG_COLOR = wxColour(0x32, 0x3A, 0x3D);
|
||||||
|
static wxColour BG_COLOR = wxColour(0xF8, 0xF8, 0xF8);
|
||||||
|
|
||||||
namespace Slic3r { namespace GUI {
|
namespace Slic3r { namespace GUI {
|
||||||
|
|
||||||
CalibrationDialog::CalibrationDialog(Plater *plater)
|
CalibrationDialog::CalibrationDialog(Plater *plater)
|
||||||
|
@ -31,17 +34,39 @@ CalibrationDialog::CalibrationDialog(Plater *plater)
|
||||||
|
|
||||||
body_panel->SetBackgroundColour(*wxWHITE);
|
body_panel->SetBackgroundColour(*wxWHITE);
|
||||||
auto cali_left_panel = new StaticBox(body_panel, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(303), FromDIP(243)));
|
auto cali_left_panel = new StaticBox(body_panel, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(303), FromDIP(243)));
|
||||||
cali_left_panel->SetBackgroundColor(wxColour(0xF8, 0xF8, 0xF8));
|
cali_left_panel->SetBackgroundColor(BG_COLOR);
|
||||||
cali_left_panel->SetBorderColor(wxColour(0xF8, 0xF8, 0xF8));
|
cali_left_panel->SetBorderColor(BG_COLOR);
|
||||||
|
|
||||||
wxBoxSizer *cali_left_sizer = new wxBoxSizer(wxVERTICAL);
|
wxBoxSizer *cali_left_sizer = new wxBoxSizer(wxVERTICAL);
|
||||||
cali_left_sizer->Add(0, 0, 0, wxTOP, FromDIP(25));
|
cali_left_sizer->Add(0, 0, 0, wxTOP, FromDIP(25));
|
||||||
|
|
||||||
|
// calibration step selection
|
||||||
|
auto cali_step_select_title = new wxStaticText(cali_left_panel, wxID_ANY, _L("Calibration step selection"), wxDefaultPosition, wxDefaultSize, 0);
|
||||||
|
cali_step_select_title->SetFont(::Label::Head_14);
|
||||||
|
cali_step_select_title->Wrap(-1);
|
||||||
|
cali_step_select_title->SetForegroundColour(FG_COLOR);
|
||||||
|
cali_step_select_title->SetBackgroundColour(BG_COLOR);
|
||||||
|
cali_left_sizer->Add(cali_step_select_title, 0, wxLEFT, FromDIP(15));
|
||||||
|
|
||||||
|
select_xcam_cali = create_check_option(_L("Micro lidar calibration"), cali_left_panel, _L("Micro lidar calibration"), "xcam_cali");
|
||||||
|
select_bed_leveling = create_check_option(_L("Bed leveling"), cali_left_panel, _L("Bed leveling"), "bed_leveling");
|
||||||
|
select_vibration = create_check_option(_L("Resonance frequency identification"), cali_left_panel, _L("Resonance frequency identification"), "vibration");
|
||||||
|
|
||||||
|
m_checkbox_list["xcam_cali"]->SetValue(true);
|
||||||
|
m_checkbox_list["bed_leveling"]->SetValue(true);
|
||||||
|
m_checkbox_list["vibration"]->SetValue(true);
|
||||||
|
|
||||||
|
cali_left_sizer->Add(0, FromDIP(18), 0, wxEXPAND, 0);
|
||||||
|
cali_left_sizer->Add(select_xcam_cali, 0, wxLEFT, FromDIP(15));
|
||||||
|
cali_left_sizer->Add(select_bed_leveling, 0, wxLEFT, FromDIP(15));
|
||||||
|
cali_left_sizer->Add(select_vibration, 0, wxLEFT, FromDIP(15));
|
||||||
|
cali_left_sizer->Add(0, FromDIP(30), 0, wxEXPAND, 0);
|
||||||
|
|
||||||
auto cali_left_text_top = new wxStaticText(cali_left_panel, wxID_ANY, _L("Calibration program"), wxDefaultPosition, wxDefaultSize, 0);
|
auto cali_left_text_top = new wxStaticText(cali_left_panel, wxID_ANY, _L("Calibration program"), wxDefaultPosition, wxDefaultSize, 0);
|
||||||
cali_left_text_top->SetFont(::Label::Head_14);
|
cali_left_text_top->SetFont(::Label::Head_14);
|
||||||
cali_left_text_top->Wrap(-1);
|
cali_left_text_top->Wrap(-1);
|
||||||
cali_left_text_top->SetForegroundColour(wxColour(0x32, 0x3A, 0x3D));
|
cali_left_text_top->SetForegroundColour(FG_COLOR);
|
||||||
cali_left_text_top->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8));
|
cali_left_text_top->SetBackgroundColour(BG_COLOR);
|
||||||
|
|
||||||
cali_left_sizer->Add(cali_left_text_top, 0, wxLEFT, FromDIP(15));
|
cali_left_sizer->Add(cali_left_text_top, 0, wxLEFT, FromDIP(15));
|
||||||
|
|
||||||
|
@ -53,7 +78,7 @@ CalibrationDialog::CalibrationDialog(Plater *plater)
|
||||||
wxDefaultPosition, wxSize(FromDIP(260), -1), 0);
|
wxDefaultPosition, wxSize(FromDIP(260), -1), 0);
|
||||||
cali_left_text_body->Wrap(FromDIP(260));
|
cali_left_text_body->Wrap(FromDIP(260));
|
||||||
cali_left_text_body->SetForegroundColour(wxColour(0x6B, 0x6B, 0x6B));
|
cali_left_text_body->SetForegroundColour(wxColour(0x6B, 0x6B, 0x6B));
|
||||||
cali_left_text_body->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8));
|
cali_left_text_body->SetBackgroundColour(BG_COLOR);
|
||||||
cali_left_text_body->SetFont(::Label::Body_13);
|
cali_left_text_body->SetFont(::Label::Body_13);
|
||||||
cali_left_sizer->Add(cali_left_text_body, 0, wxLEFT, FromDIP(15));
|
cali_left_sizer->Add(cali_left_text_body, 0, wxLEFT, FromDIP(15));
|
||||||
|
|
||||||
|
@ -86,25 +111,25 @@ CalibrationDialog::CalibrationDialog(Plater *plater)
|
||||||
wxBoxSizer *cali_right_sizer_v = new wxBoxSizer(wxVERTICAL);
|
wxBoxSizer *cali_right_sizer_v = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
auto cali_right_panel = new StaticBox(body_panel, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(182), FromDIP(160)));
|
auto cali_right_panel = new StaticBox(body_panel, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(182), FromDIP(160)));
|
||||||
cali_right_panel->SetBackgroundColor(wxColour(0xF8, 0xF8, 0xF8));
|
cali_right_panel->SetBackgroundColor(BG_COLOR);
|
||||||
cali_right_panel->SetBorderColor(wxColour(0xF8, 0xF8, 0xF8));
|
cali_right_panel->SetBorderColor(BG_COLOR);
|
||||||
|
|
||||||
auto cali_text_right_top = new wxStaticText(cali_right_panel, wxID_ANY, _L("Calibration Flow"), wxDefaultPosition, wxDefaultSize, 0);
|
auto cali_text_right_top = new wxStaticText(cali_right_panel, wxID_ANY, _L("Calibration Flow"), wxDefaultPosition, wxDefaultSize, 0);
|
||||||
cali_text_right_top->Wrap(-1);
|
cali_text_right_top->Wrap(-1);
|
||||||
cali_text_right_top->SetFont(::Label::Head_14);
|
cali_text_right_top->SetFont(::Label::Head_14);
|
||||||
cali_text_right_top->SetForegroundColour(wxColour(0x00, 0xAE, 0x42));
|
cali_text_right_top->SetForegroundColour(wxColour(0x00, 0xAE, 0x42));
|
||||||
cali_text_right_top->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8));
|
cali_text_right_top->SetBackgroundColour(BG_COLOR);
|
||||||
|
|
||||||
auto staticline = new ::StaticLine(cali_right_panel);
|
auto staticline = new ::StaticLine(cali_right_panel);
|
||||||
staticline->SetLineColour(wxColour(0x00, 0xAE, 0x42));
|
staticline->SetLineColour(wxColour(0x00, 0xAE, 0x42));
|
||||||
auto calibration_panel = new wxPanel(cali_right_panel);
|
auto calibration_panel = new wxPanel(cali_right_panel);
|
||||||
calibration_panel->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8));
|
calibration_panel->SetBackgroundColour(BG_COLOR);
|
||||||
auto calibration_sizer = new wxBoxSizer(wxVERTICAL);
|
auto calibration_sizer = new wxBoxSizer(wxVERTICAL);
|
||||||
calibration_panel->SetMinSize(wxSize(FromDIP(170), FromDIP(160)));
|
calibration_panel->SetMinSize(wxSize(FromDIP(170), FromDIP(160)));
|
||||||
calibration_panel->SetSize(wxSize(FromDIP(170), FromDIP(160)));
|
calibration_panel->SetSize(wxSize(FromDIP(170), FromDIP(160)));
|
||||||
|
|
||||||
m_calibration_flow = new StepIndicator(calibration_panel, wxID_ANY);
|
m_calibration_flow = new StepIndicator(calibration_panel, wxID_ANY);
|
||||||
StateColor bg_color(std::pair<wxColour, int>(wxColour(248, 248, 248), StateColor::Normal));
|
StateColor bg_color(std::pair<wxColour, int>(BG_COLOR, StateColor::Normal));
|
||||||
m_calibration_flow->SetBackgroundColor(bg_color);
|
m_calibration_flow->SetBackgroundColor(bg_color);
|
||||||
m_calibration_flow->SetFont(Label::Body_12);
|
m_calibration_flow->SetFont(Label::Body_12);
|
||||||
|
|
||||||
|
@ -155,9 +180,48 @@ CalibrationDialog::~CalibrationDialog() {}
|
||||||
|
|
||||||
void CalibrationDialog::on_dpi_changed(const wxRect &suggested_rect) {}
|
void CalibrationDialog::on_dpi_changed(const wxRect &suggested_rect) {}
|
||||||
|
|
||||||
|
wxWindow* CalibrationDialog::create_check_option(wxString title, wxWindow* parent, wxString tooltip, std::string param)
|
||||||
|
{
|
||||||
|
auto checkbox = new wxWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
|
||||||
|
checkbox->SetBackgroundColour(BG_COLOR);
|
||||||
|
|
||||||
|
wxBoxSizer* sizer_checkbox = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
wxBoxSizer* sizer_check = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
|
auto check = new ::CheckBox(checkbox);
|
||||||
|
|
||||||
|
sizer_check->Add(check, 0, wxBOTTOM | wxEXPAND | wxTOP, FromDIP(5));
|
||||||
|
|
||||||
|
sizer_checkbox->Add(sizer_check, 0, wxEXPAND, FromDIP(5));
|
||||||
|
sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(11));
|
||||||
|
|
||||||
|
auto text = new wxStaticText(checkbox, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END);
|
||||||
|
text->SetFont(::Label::Body_13);
|
||||||
|
text->SetForegroundColour(wxColour(107, 107, 107));
|
||||||
|
text->Wrap(-1);
|
||||||
|
sizer_checkbox->Add(text, 0, wxBOTTOM | wxEXPAND | wxTOP, FromDIP(5));
|
||||||
|
|
||||||
|
checkbox->SetSizer(sizer_checkbox);
|
||||||
|
checkbox->Layout();
|
||||||
|
sizer_checkbox->Fit(checkbox);
|
||||||
|
|
||||||
|
checkbox->SetToolTip(tooltip);
|
||||||
|
text->SetToolTip(tooltip);
|
||||||
|
|
||||||
|
text->Bind(wxEVT_LEFT_DOWN, [this, check](wxMouseEvent&) { check->SetValue(check->GetValue() ? false : true); });
|
||||||
|
m_checkbox_list[param] = check;
|
||||||
|
return checkbox;
|
||||||
|
}
|
||||||
|
|
||||||
void CalibrationDialog::update_cali(MachineObject *obj)
|
void CalibrationDialog::update_cali(MachineObject *obj)
|
||||||
{
|
{
|
||||||
if (!obj) return;
|
if (!obj) return;
|
||||||
|
if (obj->is_function_supported(PrinterFunction::FUNC_AI_MONITORING)) {
|
||||||
|
select_xcam_cali->Show();
|
||||||
|
} else {
|
||||||
|
select_xcam_cali->Hide();
|
||||||
|
}
|
||||||
|
|
||||||
if (obj->is_calibration_running() || obj->is_calibration_done()) {
|
if (obj->is_calibration_running() || obj->is_calibration_done()) {
|
||||||
if (obj->is_calibration_done()) {
|
if (obj->is_calibration_done()) {
|
||||||
m_calibration_btn->Enable();
|
m_calibration_btn->Enable();
|
||||||
|
@ -218,8 +282,11 @@ void CalibrationDialog::on_start_calibration(wxMouseEvent &event)
|
||||||
Close();
|
Close();
|
||||||
} else {
|
} else {
|
||||||
BOOST_LOG_TRIVIAL(info) << "on_start_calibration";
|
BOOST_LOG_TRIVIAL(info) << "on_start_calibration";
|
||||||
//TODO set checkbox value here
|
m_obj->command_start_calibration(
|
||||||
m_obj->command_start_calibration(true, true, true);
|
m_checkbox_list["vibration"]->GetValue(),
|
||||||
|
m_checkbox_list["bed_leveling"]->GetValue(),
|
||||||
|
m_checkbox_list["xcam_cali"]->GetValue()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,11 +30,21 @@
|
||||||
#include "Widgets/Label.hpp"
|
#include "Widgets/Label.hpp"
|
||||||
#include "Widgets/Button.hpp"
|
#include "Widgets/Button.hpp"
|
||||||
#include "Widgets/StepCtrl.hpp"
|
#include "Widgets/StepCtrl.hpp"
|
||||||
|
#include "Widgets/CheckBox.hpp"
|
||||||
|
|
||||||
namespace Slic3r { namespace GUI {
|
namespace Slic3r { namespace GUI {
|
||||||
|
|
||||||
class CalibrationDialog : public DPIDialog
|
class CalibrationDialog : public DPIDialog
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
std::map<std::string, ::CheckBox*> m_checkbox_list;
|
||||||
|
|
||||||
|
wxWindow* select_xcam_cali { nullptr };
|
||||||
|
wxWindow* select_bed_leveling { nullptr };
|
||||||
|
wxWindow* select_vibration { nullptr };
|
||||||
|
|
||||||
|
wxWindow* create_check_option(wxString title, wxWindow *parent, wxString tooltip, std::string param);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CalibrationDialog(Plater *plater = nullptr);
|
CalibrationDialog(Plater *plater = nullptr);
|
||||||
~CalibrationDialog();
|
~CalibrationDialog();
|
||||||
|
|
|
@ -1491,6 +1491,7 @@ int MachineObject::command_set_printing_option(bool auto_recovery)
|
||||||
j["print"]["command"] = "print_option";
|
j["print"]["command"] = "print_option";
|
||||||
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||||
j["print"]["option"] = print_option;
|
j["print"]["option"] = print_option;
|
||||||
|
j["print"]["auto_recovery"] = auto_recovery;
|
||||||
|
|
||||||
return this->publish_json(j.dump());
|
return this->publish_json(j.dump());
|
||||||
}
|
}
|
||||||
|
@ -2750,6 +2751,9 @@ int MachineObject::parse_json(std::string payload)
|
||||||
_parse_print_option_ack(option);
|
_parse_print_option_ack(option);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (jj.contains("auto_recovery")) {
|
||||||
|
xcam_auto_recovery_step_loss = jj["auto_recovery"].get<bool>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch(...) {
|
catch(...) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -1322,7 +1322,7 @@ wxWindow *SelectMachineDialog::create_ams_checkbox(wxString title, wxWindow *par
|
||||||
|
|
||||||
wxWindow *SelectMachineDialog::create_item_checkbox(wxString title, wxWindow *parent, wxString tooltip, std::string param)
|
wxWindow *SelectMachineDialog::create_item_checkbox(wxString title, wxWindow *parent, wxString tooltip, std::string param)
|
||||||
{
|
{
|
||||||
auto checkbox = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
|
auto checkbox = new wxWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
|
||||||
checkbox->SetBackgroundColour(m_colour_def_color);
|
checkbox->SetBackgroundColour(m_colour_def_color);
|
||||||
|
|
||||||
wxBoxSizer *sizer_checkbox = new wxBoxSizer(wxHORIZONTAL);
|
wxBoxSizer *sizer_checkbox = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue