fix:wrong origin point on G92 && scarf seam

Change-Id: Ifc2306f5e7756874b627d3a37d3c7dc78cd31712
jira:none
This commit is contained in:
BBL\chuan.he 2024-10-11 19:26:19 +08:00 committed by Lane.Wei
parent 8214f92dc8
commit d3167336df
2 changed files with 41 additions and 17 deletions

View File

@ -17,6 +17,8 @@ const std::string Extrusion_Role_Tag = " FEATURE: ";
const std::string Width_Tag = " LINE_WIDTH: ";
const std::string Wipe_Start_Tag = " WIPE_START";
const std::string Wipe_End_Tag = " WIPE_END";
const std::string Wipe_Tower_Start_Tag = " WIPE_TOWER_START";
const std::string Wipe_Tower_End_Tag = " WIPE_TOWER_END";
const std::string Layer_Change_Tag = " CHANGE_LAYER";
const std::string Height_Tag = " LAYER_HEIGHT: ";
const std::string filament_flow_ratio_tag = " filament_flow_ratio";
@ -131,6 +133,12 @@ GCodeCheckResult GCodeChecker::parse_comment(GCodeLine& line)
m_wiping = true;
} else if (starts_with(comment, Wipe_End_Tag)) {
m_wiping = false;
}
else if (starts_with(comment, Wipe_Tower_Start_Tag)) {
is_wipe_tower = true;
}
else if (starts_with(comment, Wipe_Tower_End_Tag)) {
is_wipe_tower = false;
} else if (starts_with(comment, Height_Tag)) {
std::string str = comment.substr(Height_Tag.size());
if (!parse_double_from_str(str, m_height)) {
@ -417,20 +425,31 @@ GCodeCheckResult GCodeChecker::parse_G92(GCodeLine& gcode_line)
return GCodeCheckResult::ParseFailed;
}
if (gcode_line.has(X))
bool any_found = false;
if (gcode_line.has(X)){
m_origin[X] = m_end_position[X] - gcode_line.get(X);
any_found = true;
}
if (gcode_line.has(Y))
if (gcode_line.has(Y)){
m_origin[Y] = m_end_position[Y] - gcode_line.get(Y);
any_found = true;
}
if (gcode_line.has(Z))
if (gcode_line.has(Z)){
m_origin[Z] = m_end_position[Z] - gcode_line.get(Z);
any_found = true;
}
if (gcode_line.has(E))
if (gcode_line.has(E)){
m_end_position[E] = gcode_line.get(E);
any_found = true;
}
for (unsigned char a = X; a <= E; ++a) {
m_origin[a] = m_end_position[a];
if (!any_found) {
for (unsigned char a = X; a <= E; ++a) {
m_origin[a] = m_end_position[a];
}
}
return GCodeCheckResult::Success;
@ -512,10 +531,10 @@ GCodeCheckResult GCodeChecker::parse_M1020(const GCodeLine& gcode_line)
return GCodeCheckResult::ParseFailed;
}
}
else
{
else
{
std::cout << "Missing 'S' character in the G-code line!" << std::endl;
return GCodeCheckResult::ParseFailed;
return GCodeCheckResult::ParseFailed;
}
}
@ -643,15 +662,19 @@ GCodeCheckResult GCodeChecker::check_G0_G1_width(const GCodeLine& line)
std::array<double, 3> target = { m_end_position[X], m_end_position[Y], m_end_position[Z] };
bool is_bridge = m_role == erOverhangPerimeter || m_role == erBridgeInfill;
if (!is_bridge) {
if (!is_bridge && !is_wipe_tower) {
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);
if (line.has(Z) && has_scarf_joint_seam && line.get(Z) != 0)
{
if (line.get(Z) == z_height)
{
return GCodeCheckResult::Success;
}
if (line.get(Z) && line.get(E))
{
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) {

View File

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