fix:gcode line width check support scarf seam

Change-Id: I502c82d8f6e9481cadedca4e830cd4545e67f21f
jira:none
This commit is contained in:
BBL\chuan.he 2024-08-27 18:09:43 +08:00 committed by Lane.Wei
parent a1c3a99011
commit e3b774c9de
2 changed files with 17 additions and 1 deletions

View File

@ -20,6 +20,7 @@ const std::string Wipe_End_Tag = " WIPE_END";
const std::string Layer_Change_Tag = " CHANGE_LAYER"; const std::string Layer_Change_Tag = " CHANGE_LAYER";
const std::string Height_Tag = " LAYER_HEIGHT: "; const std::string Height_Tag = " LAYER_HEIGHT: ";
const std::string filament_flow_ratio_tag = " filament_flow_ratio"; const std::string filament_flow_ratio_tag = " filament_flow_ratio";
const std::string has_scarf_joint_seam_tag = " has_scarf_joint_seam";
const std::string nozzle_temperature_Tag = " nozzle_temperature ="; const std::string nozzle_temperature_Tag = " nozzle_temperature =";
const std::string nozzle_temperature_initial_layer_Tag = " nozzle_temperature_initial_layer"; const std::string nozzle_temperature_initial_layer_Tag = " nozzle_temperature_initial_layer";
const std::string Z_HEIGHT_TAG = " Z_HEIGHT: "; const std::string Z_HEIGHT_TAG = " Z_HEIGHT: ";
@ -162,6 +163,11 @@ GCodeCheckResult GCodeChecker::parse_comment(GCodeLine& line)
return GCodeCheckResult::ParseFailed; return GCodeCheckResult::ParseFailed;
} }
} }
else if (starts_with(comment, has_scarf_joint_seam_tag))
{
std::string str = comment.substr(has_scarf_joint_seam_tag.size() + 3);
has_scarf_joint_seam = (str == "1");
}
else if (starts_with(comment, nozzle_temperature_Tag)) { else if (starts_with(comment, nozzle_temperature_Tag)) {
std::string str = comment.substr(nozzle_temperature_Tag.size() + 1); std::string str = comment.substr(nozzle_temperature_Tag.size() + 1);
if (!parse_double_from_str(str, nozzle_temperature)) { if (!parse_double_from_str(str, nozzle_temperature)) {
@ -638,7 +644,16 @@ GCodeCheckResult GCodeChecker::check_G0_G1_width(const GCodeLine& line)
bool is_bridge = m_role == erOverhangPerimeter || m_role == erBridgeInfill; bool is_bridge = m_role == erOverhangPerimeter || m_role == erBridgeInfill;
if (!is_bridge) { if (!is_bridge) {
double width_real = calculate_G1_width(source, target, delta_pos[E], m_height, is_bridge); double real_height = m_height;
if (line.has(Z) && has_scarf_joint_seam && line.get(Z) != 0)
{
if (line.get(Z) == z_height)
{
return GCodeCheckResult::Success;
}
real_height = line.get(Z) - (z_height - m_height);
}
double width_real = calculate_G1_width(source, target, delta_pos[E], real_height, is_bridge);
if (fabs(width_real - m_width) > WIDTH_THRESHOLD) { if (fabs(width_real - m_width) > WIDTH_THRESHOLD) {
std::cout << "Invalid G0_G1 because has abnormal line width." << std::endl; std::cout << "Invalid G0_G1 because has abnormal line width." << std::endl;
std::cout << "Width: " << m_width << " Width_real: " << width_real << std::endl; std::cout << "Width: " << m_width << " Width_real: " << width_real << std::endl;

View File

@ -218,6 +218,7 @@ private:
std::vector<double> filament_flow_ratio; std::vector<double> filament_flow_ratio;
std::vector<double> nozzle_temperature; std::vector<double> nozzle_temperature;
std::vector<double> nozzle_temperature_initial_layer; std::vector<double> nozzle_temperature_initial_layer;
bool has_scarf_joint_seam = false;
}; };
} }