mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-14 00:52:04 +00:00
Allow printing even if nozzle info isn't reported by firmware. (#12814)
* Don't assume 0.4mm nozzle; format as "unknown" if not defined. * Skip nozzle diameter and hardness checks if nozzle info unknown. --------- Co-authored-by: SoftFever <softfeverever@gmail.com>
This commit is contained in:
@@ -15,7 +15,7 @@ namespace Slic3r
|
||||
int m_nozzle_id = -1;
|
||||
NozzleFlowType m_nozzle_flow = NozzleFlowType::S_FLOW;// 0-common 1-high flow
|
||||
NozzleType m_nozzle_type = NozzleType::ntUndefine;// 0-stainless_steel 1-hardened_steel 5-tungsten_carbide
|
||||
float m_diameter = 0.4f;// 0.2mm 0.4mm 0.6mm 0.8mm
|
||||
float m_diameter = 0.0f;// unknown until reported by the printer
|
||||
};
|
||||
|
||||
class DevNozzleSystem
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "GUI.hpp"
|
||||
#include "GUI_Utils.hpp"
|
||||
#include "GUI_App.hpp"
|
||||
#include "I18N.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
@@ -32,6 +33,15 @@ wxDEFINE_EVENT(EVT_VOLUME_ATTACHED, VolumeAttachedEvent);
|
||||
wxDEFINE_EVENT(EVT_VOLUME_DETACHED, VolumeDetachedEvent);
|
||||
#endif // _WIN32
|
||||
|
||||
wxString format_nozzle_diameter(float diameter)
|
||||
{
|
||||
if (diameter <= 0.0f) {
|
||||
return _L("Unknown");
|
||||
}
|
||||
|
||||
return wxString::Format("%smm", wxString::FromDouble(diameter));
|
||||
}
|
||||
|
||||
CopyFileResult copy_file_gui(const std::string &from, const std::string &to, std::string& error_message, const bool with_check)
|
||||
{
|
||||
#ifdef WIN32
|
||||
|
||||
@@ -66,6 +66,7 @@ wxDECLARE_EVENT(EVT_VOLUME_DETACHED, VolumeDetachedEvent);
|
||||
#endif /* _WIN32 */
|
||||
|
||||
wxTopLevelWindow* find_toplevel_parent(wxWindow *window);
|
||||
wxString format_nozzle_diameter(float diameter);
|
||||
|
||||
void on_window_geometry(wxTopLevelWindow *tlw, std::function<void()> callback);
|
||||
|
||||
|
||||
@@ -1345,7 +1345,7 @@ bool PrinterPartsDialog::Show(bool show)
|
||||
auto type = obj->GetExtderSystem()->GetNozzleType(MAIN_EXTRUDER_ID);
|
||||
auto diameter = obj->GetExtderSystem()->GetNozzleDiameter(MAIN_EXTRUDER_ID);
|
||||
nozzle_type_checkbox->SetValue(GetString(type));
|
||||
nozzle_diameter_checkbox->SetValue(GetString(diameter));
|
||||
nozzle_diameter_checkbox->SetValue(format_nozzle_diameter(diameter));
|
||||
|
||||
// nozzle flow type
|
||||
nozzle_flow_type_label->Show(obj->is_nozzle_flow_type_supported());
|
||||
@@ -1369,7 +1369,7 @@ bool PrinterPartsDialog::Show(bool show)
|
||||
auto diameter = obj->GetExtderSystem()->GetNozzleDiameter(DEPUTY_EXTRUDER_ID);
|
||||
auto flow_type = obj->GetExtderSystem()->GetNozzleFlowType(DEPUTY_EXTRUDER_ID);
|
||||
multiple_left_nozzle_type_checkbox->SetValue(GetString(type));
|
||||
multiple_left_nozzle_diameter_checkbox->SetValue(GetString(diameter));
|
||||
multiple_left_nozzle_diameter_checkbox->SetValue(format_nozzle_diameter(diameter));
|
||||
multiple_left_nozzle_flow_checkbox->SetValue(GetString(flow_type));
|
||||
|
||||
//right
|
||||
@@ -1377,7 +1377,7 @@ bool PrinterPartsDialog::Show(bool show)
|
||||
diameter = obj->GetExtderSystem()->GetNozzleDiameter(MAIN_EXTRUDER_ID);
|
||||
flow_type = obj->GetExtderSystem()->GetNozzleFlowType(MAIN_EXTRUDER_ID);
|
||||
multiple_right_nozzle_type_checkbox->SetValue(GetString(type));
|
||||
multiple_right_nozzle_diameter_checkbox->SetValue(GetString(diameter));
|
||||
multiple_right_nozzle_diameter_checkbox->SetValue(format_nozzle_diameter(diameter));
|
||||
multiple_right_nozzle_flow_checkbox->SetValue(GetString(flow_type));
|
||||
|
||||
if (obj->is_support_refresh_nozzle) {
|
||||
@@ -1421,7 +1421,7 @@ wxString PrinterPartsDialog::GetString(NozzleType nozzle_type) const {
|
||||
default: break;
|
||||
}
|
||||
|
||||
return wxEmptyString;
|
||||
return _L("Unknown");
|
||||
}
|
||||
|
||||
wxString PrinterPartsDialog::GetString(NozzleFlowType nozzle_flow_type) const {
|
||||
@@ -1483,7 +1483,7 @@ void PrinterPartsDialog::UpdateNozzleInfo(){
|
||||
auto type = obj->GetExtderSystem()->GetNozzleType(MAIN_EXTRUDER_ID);
|
||||
auto diameter = obj->GetExtderSystem()->GetNozzleDiameter(MAIN_EXTRUDER_ID);
|
||||
nozzle_type_checkbox->SetValue(GetString(type));
|
||||
nozzle_diameter_checkbox->SetValue(GetString(diameter));
|
||||
nozzle_diameter_checkbox->SetValue(format_nozzle_diameter(diameter));
|
||||
|
||||
// nozzle flow type
|
||||
nozzle_flow_type_label->Show(obj->is_nozzle_flow_type_supported());
|
||||
@@ -1499,7 +1499,7 @@ void PrinterPartsDialog::UpdateNozzleInfo(){
|
||||
auto diameter = obj->GetExtderSystem()->GetNozzleDiameter(DEPUTY_EXTRUDER_ID);
|
||||
auto flow_type = obj->GetExtderSystem()->GetNozzleFlowType(DEPUTY_EXTRUDER_ID);
|
||||
multiple_left_nozzle_type_checkbox->SetValue(GetString(type));
|
||||
multiple_left_nozzle_diameter_checkbox->SetValue(GetString(diameter));
|
||||
multiple_left_nozzle_diameter_checkbox->SetValue(format_nozzle_diameter(diameter));
|
||||
multiple_left_nozzle_flow_checkbox->SetValue(GetString(flow_type));
|
||||
|
||||
//right
|
||||
@@ -1507,7 +1507,7 @@ void PrinterPartsDialog::UpdateNozzleInfo(){
|
||||
diameter = obj->GetExtderSystem()->GetNozzleDiameter(MAIN_EXTRUDER_ID);
|
||||
flow_type = obj->GetExtderSystem()->GetNozzleFlowType(MAIN_EXTRUDER_ID);
|
||||
multiple_right_nozzle_type_checkbox->SetValue(GetString(type));
|
||||
multiple_right_nozzle_diameter_checkbox->SetValue(GetString(diameter));
|
||||
multiple_right_nozzle_diameter_checkbox->SetValue(format_nozzle_diameter(diameter));
|
||||
multiple_right_nozzle_flow_checkbox->SetValue(GetString(flow_type));
|
||||
}
|
||||
|
||||
|
||||
@@ -68,8 +68,7 @@ private:
|
||||
|
||||
wxString GetString(NozzleType nozzle_type) const;
|
||||
wxString GetString(NozzleFlowType nozzle_flow_type) const;
|
||||
wxString GetString(float diameter) const { return wxString::FromDouble(diameter); };
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class PrintOptionsDialog : public DPIDialog
|
||||
|
||||
@@ -1823,7 +1823,15 @@ static bool _is_same_nozzle_diameters(MachineObject* obj, float &tag_nozzle_diam
|
||||
}
|
||||
|
||||
tag_nozzle_diameter = float(opt_nozzle_diameters->get_at(used_nozzle_idx));
|
||||
if (tag_nozzle_diameter != obj->GetExtderSystem()->GetNozzleDiameter(used_nozzle_idx))
|
||||
auto machine_nozzle_diameter = obj->GetExtderSystem()->GetNozzleDiameter(used_nozzle_idx);
|
||||
|
||||
// Assume matching if diameter is unknown
|
||||
if (machine_nozzle_diameter == 0.0f)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tag_nozzle_diameter != machine_nozzle_diameter)
|
||||
{
|
||||
mismatch_nozzle_id = used_nozzle_idx;
|
||||
return false;
|
||||
@@ -1840,7 +1848,16 @@ static bool _is_same_nozzle_diameters(MachineObject* obj, float &tag_nozzle_diam
|
||||
|
||||
bool SelectMachineDialog::is_nozzle_hrc_matched(const DevExtder* extruder, std::string& filament_type) const
|
||||
{
|
||||
auto printer_nozzle_hrc = Print::get_hrc_by_nozzle_type(extruder->GetNozzleType());
|
||||
if (extruder == nullptr) return false;
|
||||
|
||||
auto printer_nozzle_type = extruder->GetNozzleType();
|
||||
|
||||
// Assume matching if nozzle type unknown
|
||||
if (printer_nozzle_type == NozzleType::ntUndefine) {
|
||||
return true;
|
||||
}
|
||||
|
||||
auto printer_nozzle_hrc = Print::get_hrc_by_nozzle_type(printer_nozzle_type);
|
||||
|
||||
auto preset_bundle = wxGetApp().preset_bundle;
|
||||
MaterialHash::const_iterator iter = m_materialList.begin();
|
||||
@@ -5154,13 +5171,11 @@ static wxString _get_tips(MachineObject* obj_)
|
||||
|
||||
wxString ext_diameter;
|
||||
if (obj_->GetExtderSystem()->GetTotalExtderCount() == 1) {
|
||||
ext_diameter += wxString::FromDouble(obj_->GetExtderSystem()->GetNozzleDiameter(0));
|
||||
ext_diameter += "mm";
|
||||
ext_diameter += format_nozzle_diameter(obj_->GetExtderSystem()->GetNozzleDiameter(0));
|
||||
} else if (obj_->GetExtderSystem()->GetTotalExtderCount() == 2) {
|
||||
ext_diameter += wxString::FromDouble(obj_->GetExtderSystem()->GetNozzleDiameter(1));//Left
|
||||
ext_diameter += format_nozzle_diameter(obj_->GetExtderSystem()->GetNozzleDiameter(1));//Left
|
||||
ext_diameter += "/";
|
||||
ext_diameter += wxString::FromDouble(obj_->GetExtderSystem()->GetNozzleDiameter(0));
|
||||
ext_diameter += "mm";
|
||||
ext_diameter += format_nozzle_diameter(obj_->GetExtderSystem()->GetNozzleDiameter(0));
|
||||
} else {
|
||||
assert(0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user