ENH: Add buried points for calibration

jira: 6304
Change-Id: If5518919658afeaeef6cf97d18495e98fd52ed43
This commit is contained in:
zhimin.zeng 2024-02-20 18:42:20 +08:00 committed by Lane.Wei
parent f4028927f2
commit 356e4d825e
6 changed files with 192 additions and 2 deletions

View File

@ -577,6 +577,8 @@ NewCalibrationHistoryDialog::NewCalibrationHistoryDialog(wxWindow *parent, const
if (!obj)
return;
curr_obj = obj;
this->SetBackgroundColour(*wxWHITE);
auto main_sizer = new wxBoxSizer(wxVERTICAL);
@ -737,6 +739,17 @@ void NewCalibrationHistoryDialog::on_ok(wxCommandEvent &event)
}
}
try {
json js;
js["cali_type"] = "cali_new_pa";
js["nozzle_diameter"] = m_new_result.nozzle_diameter;
js["filament_id"] = m_new_result.filament_id;
js["printer_type"] = curr_obj->printer_type;
NetworkAgent *agent = GUI::wxGetApp().getAgent();
if (agent) agent->track_event("cali", js.dump());
} catch (...) {}
CalibUtils::set_PA_calib_result({m_new_result}, true);
EndModal(wxID_OK);

View File

@ -74,6 +74,7 @@ protected:
protected:
PACalibResult m_new_result;
std::vector<PACalibResult> m_history_results;
MachineObject * curr_obj;
TextInput *m_name_value{nullptr};
TextInput *m_k_value{nullptr};

View File

@ -2124,6 +2124,7 @@ int MachineObject::command_start_pa_calibration(const X1CCalibInfos &pa_data, in
j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(pa_data.calib_datas[0].nozzle_diameter);
j["print"]["mode"] = mode;
std::string filament_ids;
for (int i = 0; i < pa_data.calib_datas.size(); ++i) {
j["print"]["filaments"][i]["tray_id"] = pa_data.calib_datas[i].tray_id;
j["print"]["filaments"][i]["bed_temp"] = pa_data.calib_datas[i].bed_temp;
@ -2131,9 +2132,25 @@ int MachineObject::command_start_pa_calibration(const X1CCalibInfos &pa_data, in
j["print"]["filaments"][i]["setting_id"] = pa_data.calib_datas[i].setting_id;
j["print"]["filaments"][i]["nozzle_temp"] = pa_data.calib_datas[i].nozzle_temp;
j["print"]["filaments"][i]["max_volumetric_speed"] = std::to_string(pa_data.calib_datas[i].max_volumetric_speed);
if (i > 0)
filament_ids += ",";
filament_ids += pa_data.calib_datas[i].filament_id;
}
BOOST_LOG_TRIVIAL(trace) << "extrusion_cali: " << j.dump();
try {
json js;
js["cali_type"] = "cali_pa_auto";
js["nozzle_diameter"] = pa_data.calib_datas[0].nozzle_diameter;
js["filament_id"] = filament_ids;
js["printer_type"] = this->printer_type;
NetworkAgent *agent = GUI::wxGetApp().getAgent();
if (agent)
agent->track_event("cali", js.dump());
} catch (...) {}
return this->publish_json(j.dump());
}
return -1;
@ -2247,6 +2264,7 @@ int MachineObject::command_start_flow_ratio_calibration(const X1CCalibInfos& cal
j["print"]["tray_id"] = calib_data.calib_datas[0].tray_id;
j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(calib_data.calib_datas[0].nozzle_diameter);
std::string filament_ids;
for (int i = 0; i < calib_data.calib_datas.size(); ++i) {
j["print"]["filaments"][i]["tray_id"] = calib_data.calib_datas[i].tray_id;
j["print"]["filaments"][i]["bed_temp"] = calib_data.calib_datas[i].bed_temp;
@ -2255,8 +2273,22 @@ int MachineObject::command_start_flow_ratio_calibration(const X1CCalibInfos& cal
j["print"]["filaments"][i]["nozzle_temp"] = calib_data.calib_datas[i].nozzle_temp;
j["print"]["filaments"][i]["def_flow_ratio"] = std::to_string(calib_data.calib_datas[i].flow_rate);
j["print"]["filaments"][i]["max_volumetric_speed"] = std::to_string(calib_data.calib_datas[i].max_volumetric_speed);
if (i > 0)
filament_ids += ",";
filament_ids += calib_data.calib_datas[i].filament_id;
}
try {
json js;
js["cali_type"] = "cali_flow_rate_auto";
js["nozzle_diameter"] = calib_data.calib_datas[0].nozzle_diameter;
js["filament_id"] = filament_ids;
js["printer_type"] = this->printer_type;
NetworkAgent *agent = GUI::wxGetApp().getAgent();
if (agent) agent->track_event("cali", js.dump());
} catch (...) {}
BOOST_LOG_TRIVIAL(trace) << "flowrate_cali: " << j.dump();
return this->publish_json(j.dump());
}

View File

@ -2867,7 +2867,15 @@ void MainFrame::init_menubar_as_editor()
// help
append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Tutorial"), _L("Calibration help"),
[this](wxCommandEvent&) { wxLaunchDefaultBrowser("https://wiki.bambulab.com/e/en/staging/bambu-studio/Calibration", wxBROWSER_NEW_WINDOW); }, "", nullptr,
[this](wxCommandEvent&) {
try {
json js;
js["cali_type"] = "third_cali_tutorial";
NetworkAgent *agent = GUI::wxGetApp().getAgent();
if (agent) agent->track_event("third_cali", js.dump());
} catch (...) {}
wxLaunchDefaultBrowser("https://wiki.bambulab.com/en/bambu-studio/Calibration", wxBROWSER_NEW_WINDOW);
}, "", nullptr,
[this]() {return m_plater->is_view3D_shown();; }, this);
}
@ -2989,7 +2997,15 @@ void MainFrame::init_menubar_as_editor()
// help
append_menu_item(
m_calib_menu, wxID_ANY, _L("Tutorial"), _L("Calibration help"),
[this](wxCommandEvent &) { wxLaunchDefaultBrowser("https://wiki.bambulab.com/en/bambu-studio/Calibration", wxBROWSER_NEW_WINDOW); }, "", nullptr,
[this](wxCommandEvent &) {
try {
json js;
js["cali_type"] = "third_cali_tutorial";
NetworkAgent *agent = GUI::wxGetApp().getAgent();
if (agent) agent->track_event("third_cali", js.dump());
} catch (...) {}
wxLaunchDefaultBrowser("https://wiki.bambulab.com/en/bambu-studio/Calibration", wxBROWSER_NEW_WINDOW);
}, "", nullptr,
[this]() {
return m_plater->is_view3D_shown();
;

View File

@ -9053,6 +9053,23 @@ void Plater::calib_pa(const Calib_Params &params)
default: break;
}
try {
json js;
if (params.mode == CalibMode::Calib_PA_Line)
js["cali_type"] = "third_cali_pa_line";
else if (params.mode == CalibMode::Calib_PA_Pattern)
js["cali_type"] = "third_cali_pa_pattern";
else if (params.mode == CalibMode::Calib_PA_Tower)
js["cali_type"] = "third_cali_pa_tower";
std::string filament_id = wxGetApp().preset_bundle->filaments.get_edited_preset().filament_id;
js["filament_id"] = filament_id;
NetworkAgent *agent = GUI::wxGetApp().getAgent();
if (agent)
agent->track_event("third_cali", js.dump());
} catch (...) {}
p->background_process.fff_print()->set_calib_params(params);
}
@ -9259,6 +9276,20 @@ void Plater::calib_flowrate(int pass)
wxGetApp().get_tab(Preset::TYPE_FILAMENT)->reload_config();
wxGetApp().get_tab(Preset::TYPE_PRINTER)->reload_config();
try {
json js;
if (pass == 1)
js["cali_type"] = "third_cali_flow_rate_1";
if (pass == 2)
js["cali_type"] = "third_cali_flow_rate_2";
std::string filament_id = wxGetApp().preset_bundle->filaments.get_edited_preset().filament_id;
js["filament_id"] = filament_id;
NetworkAgent *agent = GUI::wxGetApp().getAgent();
if (agent) agent->track_event("third_cali", js.dump());
} catch (...) {}
Calib_Params params;
params.mode = CalibMode::Calib_Flow_Rate;
p->background_process.fff_print()->set_calib_params(params);
@ -9266,6 +9297,16 @@ void Plater::calib_flowrate(int pass)
void Plater::calib_temp(const Calib_Params &params)
{
try {
json js;
js["cali_type"] = "third_cali_temp";
std::string filament_id = wxGetApp().preset_bundle->filaments.get_edited_preset().filament_id;
js["filament_id"] = filament_id;
NetworkAgent *agent = GUI::wxGetApp().getAgent();
if (agent) agent->track_event("third_cali", js.dump());
} catch (...) {}
const auto calib_temp_name = wxString::Format(L"Nozzle temperature test");
if (new_project(false, false, calib_temp_name) == wxID_CANCEL)
return;
@ -9316,6 +9357,16 @@ void Plater::calib_temp(const Calib_Params &params)
void Plater::calib_max_vol_speed(const Calib_Params &params)
{
try {
json js;
js["cali_type"] = "third_cali_max_flowrate";
std::string filament_id = wxGetApp().preset_bundle->filaments.get_edited_preset().filament_id;
js["filament_id"] = filament_id;
NetworkAgent *agent = GUI::wxGetApp().getAgent();
if (agent) agent->track_event("third_cali", js.dump());
} catch (...) {}
const auto calib_vol_speed_name = wxString::Format(L"Max volumetric speed test");
if (new_project(false, false, calib_vol_speed_name) == wxID_CANCEL)
return;
@ -9387,6 +9438,16 @@ void Plater::calib_max_vol_speed(const Calib_Params &params)
void Plater::calib_retraction(const Calib_Params &params)
{
try {
json js;
js["cali_type"] = "third_cali_retraction";
std::string filament_id = wxGetApp().preset_bundle->filaments.get_edited_preset().filament_id;
js["filament_id"] = filament_id;
NetworkAgent *agent = GUI::wxGetApp().getAgent();
if (agent) agent->track_event("third_cali", js.dump());
} catch (...) {}
const auto calib_retraction_name = wxString::Format(L"Retraction test");
if (new_project(false, false, calib_retraction_name) == wxID_CANCEL)
return;
@ -9427,6 +9488,16 @@ void Plater::calib_retraction(const Calib_Params &params)
void Plater::calib_VFA(const Calib_Params &params)
{
try {
json js;
js["cali_type"] = "third_cali_VFA";
std::string filament_id = wxGetApp().preset_bundle->filaments.get_edited_preset().filament_id;
js["filament_id"] = filament_id;
NetworkAgent *agent = GUI::wxGetApp().getAgent();
if (agent) agent->track_event("third_cali", js.dump());
} catch (...) {}
const auto calib_vfa_name = wxString::Format(L"VFA test");
if (new_project(false, false, calib_vfa_name) == wxID_CANCEL)
return;

View File

@ -566,6 +566,32 @@ bool CalibUtils::calib_flowrate(int pass, const CalibInfo &calib_info, wxString
if (!process_and_store_3mf(&model, full_config, params, error_message))
return false;
DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (!dev) {
error_message = _L("Need select printer");
return false;
}
MachineObject *obj_ = dev->get_selected_machine();
if (obj_ == nullptr) {
error_message = _L("Need select printer");
return false;
}
try {
json js;
if (pass == 1)
js["cali_type"] = "cali_flow_rate_1";
else if (pass == 2)
js["cali_type"] = "cali_flow_rate_2";
js["nozzle_diameter"] = nozzle_diameter;
js["filament_id"] = calib_info.filament_prest->filament_id;
js["printer_type"] = obj_->printer_type;
NetworkAgent *agent = GUI::wxGetApp().getAgent();
if (agent)
agent->track_event("cali", js.dump());
} catch (...) {}
send_to_print(calib_info, error_message, pass);
return true;
}
@ -657,6 +683,37 @@ bool CalibUtils::calib_generic_PA(const CalibInfo &calib_info, wxString &error_m
if (!process_and_store_3mf(&model, full_config, params, error_message))
return false;
DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (!dev) {
error_message = _L("Need select printer");
return false;
}
MachineObject *obj_ = dev->get_selected_machine();
if (obj_ == nullptr) {
error_message = _L("Need select printer");
return false;
}
try {
json js;
if (params.mode == CalibMode::Calib_PA_Line)
js["cali_type"] = "cali_pa_line";
else if (params.mode == CalibMode::Calib_PA_Pattern)
js["cali_type"] = "cali_pa_pattern";
const ConfigOptionFloats *nozzle_diameter_config = printer_config.option<ConfigOptionFloats>("nozzle_diameter");
assert(nozzle_diameter_config->values.size() > 0);
float nozzle_diameter = nozzle_diameter_config->values[0];
js["nozzle_diameter"] = nozzle_diameter;
js["filament_id"] = calib_info.filament_prest->filament_id;
js["printer_type"] = obj_->printer_type;
NetworkAgent *agent = GUI::wxGetApp().getAgent();
if (agent)
agent->track_event("cali", js.dump());
} catch (...) {}
send_to_print(calib_info, error_message);
return true;
}