WIP Extending the expressivity of ExtrusionRole
Changed GCodeExtrusionRole to enum class. Follow-up to5991850db1
e50e96bb26
This commit is contained in:
parent
e50e96bb26
commit
c64dbacf88
12 changed files with 216 additions and 213 deletions
src/libslic3r/GCode
|
@ -942,7 +942,7 @@ void GCodeProcessor::reset()
|
|||
m_fan_speed = 0.0f;
|
||||
m_z_offset = 0.0f;
|
||||
|
||||
m_extrusion_role = erNone;
|
||||
m_extrusion_role = GCodeExtrusionRole::None;
|
||||
m_extruder_id = 0;
|
||||
m_extruder_colors.resize(MIN_EXTRUDERS_COUNT);
|
||||
for (size_t i = 0; i < MIN_EXTRUDERS_COUNT; ++i) {
|
||||
|
@ -1646,7 +1646,7 @@ void GCodeProcessor::process_tags(const std::string_view comment, bool producers
|
|||
// extrusion role tag
|
||||
if (boost::starts_with(comment, reserved_tag(ETags::Role))) {
|
||||
set_extrusion_role(string_to_gcode_extrusion_role(comment.substr(reserved_tag(ETags::Role).length())));
|
||||
if (m_extrusion_role == erExternalPerimeter)
|
||||
if (m_extrusion_role == GCodeExtrusionRole::ExternalPerimeter)
|
||||
m_seams_detector.activate(true);
|
||||
return;
|
||||
}
|
||||
|
@ -1827,27 +1827,27 @@ bool GCodeProcessor::process_cura_tags(const std::string_view comment)
|
|||
if (pos != comment.npos) {
|
||||
const std::string_view type = comment.substr(pos + tag.length());
|
||||
if (type == "SKIRT")
|
||||
set_extrusion_role(erSkirt);
|
||||
set_extrusion_role(GCodeExtrusionRole::Skirt);
|
||||
else if (type == "WALL-OUTER")
|
||||
set_extrusion_role(erExternalPerimeter);
|
||||
set_extrusion_role(GCodeExtrusionRole::ExternalPerimeter);
|
||||
else if (type == "WALL-INNER")
|
||||
set_extrusion_role(erPerimeter);
|
||||
set_extrusion_role(GCodeExtrusionRole::Perimeter);
|
||||
else if (type == "SKIN")
|
||||
set_extrusion_role(erSolidInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::SolidInfill);
|
||||
else if (type == "FILL")
|
||||
set_extrusion_role(erInternalInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::InternalInfill);
|
||||
else if (type == "SUPPORT")
|
||||
set_extrusion_role(erSupportMaterial);
|
||||
set_extrusion_role(GCodeExtrusionRole::SupportMaterial);
|
||||
else if (type == "SUPPORT-INTERFACE")
|
||||
set_extrusion_role(erSupportMaterialInterface);
|
||||
set_extrusion_role(GCodeExtrusionRole::SupportMaterialInterface);
|
||||
else if (type == "PRIME-TOWER")
|
||||
set_extrusion_role(erWipeTower);
|
||||
set_extrusion_role(GCodeExtrusionRole::WipeTower);
|
||||
else {
|
||||
set_extrusion_role(erNone);
|
||||
set_extrusion_role(GCodeExtrusionRole::None);
|
||||
BOOST_LOG_TRIVIAL(warning) << "GCodeProcessor found unknown extrusion role: " << type;
|
||||
}
|
||||
|
||||
if (m_extrusion_role == erExternalPerimeter)
|
||||
if (m_extrusion_role == GCodeExtrusionRole::ExternalPerimeter)
|
||||
m_seams_detector.activate(true);
|
||||
|
||||
return true;
|
||||
|
@ -1906,14 +1906,14 @@ bool GCodeProcessor::process_simplify3d_tags(const std::string_view comment)
|
|||
// ; skirt
|
||||
pos = cmt.find(" skirt");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erSkirt);
|
||||
set_extrusion_role(GCodeExtrusionRole::Skirt);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; outer perimeter
|
||||
pos = cmt.find(" outer perimeter");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erExternalPerimeter);
|
||||
set_extrusion_role(GCodeExtrusionRole::ExternalPerimeter);
|
||||
m_seams_detector.activate(true);
|
||||
return true;
|
||||
}
|
||||
|
@ -1921,77 +1921,77 @@ bool GCodeProcessor::process_simplify3d_tags(const std::string_view comment)
|
|||
// ; inner perimeter
|
||||
pos = cmt.find(" inner perimeter");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erPerimeter);
|
||||
set_extrusion_role(GCodeExtrusionRole::Perimeter);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; gap fill
|
||||
pos = cmt.find(" gap fill");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erGapFill);
|
||||
set_extrusion_role(GCodeExtrusionRole::GapFill);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; infill
|
||||
pos = cmt.find(" infill");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erInternalInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::InternalInfill);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; solid layer
|
||||
pos = cmt.find(" solid layer");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erSolidInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::SolidInfill);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; bridge
|
||||
pos = cmt.find(" bridge");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erBridgeInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::BridgeInfill);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; support
|
||||
pos = cmt.find(" support");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erSupportMaterial);
|
||||
set_extrusion_role(GCodeExtrusionRole::SupportMaterial);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; dense support
|
||||
pos = cmt.find(" dense support");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erSupportMaterialInterface);
|
||||
set_extrusion_role(GCodeExtrusionRole::SupportMaterialInterface);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; prime pillar
|
||||
pos = cmt.find(" prime pillar");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erWipeTower);
|
||||
set_extrusion_role(GCodeExtrusionRole::WipeTower);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; ooze shield
|
||||
pos = cmt.find(" ooze shield");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erNone); // Missing mapping
|
||||
set_extrusion_role(GCodeExtrusionRole::None); // Missing mapping
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; raft
|
||||
pos = cmt.find(" raft");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erSupportMaterial);
|
||||
set_extrusion_role(GCodeExtrusionRole::SupportMaterial);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; internal single extrusion
|
||||
pos = cmt.find(" internal single extrusion");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erNone); // Missing mapping
|
||||
set_extrusion_role(GCodeExtrusionRole::None); // Missing mapping
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -2043,33 +2043,33 @@ bool GCodeProcessor::process_craftware_tags(const std::string_view comment)
|
|||
if (pos != comment.npos) {
|
||||
const std::string_view type = comment.substr(pos + tag.length());
|
||||
if (type == "Skirt")
|
||||
set_extrusion_role(erSkirt);
|
||||
set_extrusion_role(GCodeExtrusionRole::Skirt);
|
||||
else if (type == "Perimeter")
|
||||
set_extrusion_role(erExternalPerimeter);
|
||||
set_extrusion_role(GCodeExtrusionRole::ExternalPerimeter);
|
||||
else if (type == "HShell")
|
||||
set_extrusion_role(erNone); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
set_extrusion_role(GCodeExtrusionRole::None); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
else if (type == "InnerHair")
|
||||
set_extrusion_role(erNone); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
set_extrusion_role(GCodeExtrusionRole::None); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
else if (type == "Loop")
|
||||
set_extrusion_role(erNone); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
set_extrusion_role(GCodeExtrusionRole::None); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
else if (type == "Infill")
|
||||
set_extrusion_role(erInternalInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::InternalInfill);
|
||||
else if (type == "Raft")
|
||||
set_extrusion_role(erSkirt);
|
||||
set_extrusion_role(GCodeExtrusionRole::Skirt);
|
||||
else if (type == "Support")
|
||||
set_extrusion_role(erSupportMaterial);
|
||||
set_extrusion_role(GCodeExtrusionRole::SupportMaterial);
|
||||
else if (type == "SupportTouch")
|
||||
set_extrusion_role(erSupportMaterial);
|
||||
set_extrusion_role(GCodeExtrusionRole::SupportMaterial);
|
||||
else if (type == "SoftSupport")
|
||||
set_extrusion_role(erSupportMaterialInterface);
|
||||
set_extrusion_role(GCodeExtrusionRole::SupportMaterialInterface);
|
||||
else if (type == "Pillar")
|
||||
set_extrusion_role(erWipeTower);
|
||||
set_extrusion_role(GCodeExtrusionRole::WipeTower);
|
||||
else {
|
||||
set_extrusion_role(erNone);
|
||||
set_extrusion_role(GCodeExtrusionRole::None);
|
||||
BOOST_LOG_TRIVIAL(warning) << "GCodeProcessor found unknown extrusion role: " << type;
|
||||
}
|
||||
|
||||
if (m_extrusion_role == erExternalPerimeter)
|
||||
if (m_extrusion_role == GCodeExtrusionRole::ExternalPerimeter)
|
||||
m_seams_detector.activate(true);
|
||||
|
||||
return true;
|
||||
|
@ -2093,25 +2093,25 @@ bool GCodeProcessor::process_ideamaker_tags(const std::string_view comment)
|
|||
if (pos != comment.npos) {
|
||||
const std::string_view type = comment.substr(pos + tag.length());
|
||||
if (type == "RAFT")
|
||||
set_extrusion_role(erSkirt);
|
||||
set_extrusion_role(GCodeExtrusionRole::Skirt);
|
||||
else if (type == "WALL-OUTER")
|
||||
set_extrusion_role(erExternalPerimeter);
|
||||
set_extrusion_role(GCodeExtrusionRole::ExternalPerimeter);
|
||||
else if (type == "WALL-INNER")
|
||||
set_extrusion_role(erPerimeter);
|
||||
set_extrusion_role(GCodeExtrusionRole::Perimeter);
|
||||
else if (type == "SOLID-FILL")
|
||||
set_extrusion_role(erSolidInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::SolidInfill);
|
||||
else if (type == "FILL")
|
||||
set_extrusion_role(erInternalInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::InternalInfill);
|
||||
else if (type == "BRIDGE")
|
||||
set_extrusion_role(erBridgeInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::BridgeInfill);
|
||||
else if (type == "SUPPORT")
|
||||
set_extrusion_role(erSupportMaterial);
|
||||
set_extrusion_role(GCodeExtrusionRole::SupportMaterial);
|
||||
else {
|
||||
set_extrusion_role(erNone);
|
||||
set_extrusion_role(GCodeExtrusionRole::None);
|
||||
BOOST_LOG_TRIVIAL(warning) << "GCodeProcessor found unknown extrusion role: " << type;
|
||||
}
|
||||
|
||||
if (m_extrusion_role == erExternalPerimeter)
|
||||
if (m_extrusion_role == GCodeExtrusionRole::ExternalPerimeter)
|
||||
m_seams_detector.activate(true);
|
||||
|
||||
return true;
|
||||
|
@ -2153,35 +2153,35 @@ bool GCodeProcessor::process_kissslicer_tags(const std::string_view comment)
|
|||
// ; 'Raft Path'
|
||||
size_t pos = comment.find(" 'Raft Path'");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erSkirt);
|
||||
set_extrusion_role(GCodeExtrusionRole::Skirt);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; 'Support Interface Path'
|
||||
pos = comment.find(" 'Support Interface Path'");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erSupportMaterialInterface);
|
||||
set_extrusion_role(GCodeExtrusionRole::SupportMaterialInterface);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; 'Travel/Ironing Path'
|
||||
pos = comment.find(" 'Travel/Ironing Path'");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erIroning);
|
||||
set_extrusion_role(GCodeExtrusionRole::Ironing);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; 'Support (may Stack) Path'
|
||||
pos = comment.find(" 'Support (may Stack) Path'");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erSupportMaterial);
|
||||
set_extrusion_role(GCodeExtrusionRole::SupportMaterial);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; 'Perimeter Path'
|
||||
pos = comment.find(" 'Perimeter Path'");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erExternalPerimeter);
|
||||
set_extrusion_role(GCodeExtrusionRole::ExternalPerimeter);
|
||||
m_seams_detector.activate(true);
|
||||
return true;
|
||||
}
|
||||
|
@ -2189,56 +2189,56 @@ bool GCodeProcessor::process_kissslicer_tags(const std::string_view comment)
|
|||
// ; 'Pillar Path'
|
||||
pos = comment.find(" 'Pillar Path'");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erNone); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
set_extrusion_role(GCodeExtrusionRole::None); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; 'Destring/Wipe/Jump Path'
|
||||
pos = comment.find(" 'Destring/Wipe/Jump Path'");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erNone); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
set_extrusion_role(GCodeExtrusionRole::None); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; 'Prime Pillar Path'
|
||||
pos = comment.find(" 'Prime Pillar Path'");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erNone); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
set_extrusion_role(GCodeExtrusionRole::None); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; 'Loop Path'
|
||||
pos = comment.find(" 'Loop Path'");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erNone); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
set_extrusion_role(GCodeExtrusionRole::None); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; 'Crown Path'
|
||||
pos = comment.find(" 'Crown Path'");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erNone); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
set_extrusion_role(GCodeExtrusionRole::None); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; 'Solid Path'
|
||||
pos = comment.find(" 'Solid Path'");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erNone);
|
||||
set_extrusion_role(GCodeExtrusionRole::None);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; 'Stacked Sparse Infill Path'
|
||||
pos = comment.find(" 'Stacked Sparse Infill Path'");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erInternalInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::InternalInfill);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ; 'Sparse Infill Path'
|
||||
pos = comment.find(" 'Sparse Infill Path'");
|
||||
if (pos == 0) {
|
||||
set_extrusion_role(erSolidInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::SolidInfill);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -2263,45 +2263,45 @@ bool GCodeProcessor::process_bambustudio_tags(const std::string_view comment)
|
|||
if (pos != comment.npos) {
|
||||
const std::string_view type = comment.substr(pos + tag.length());
|
||||
if (type == "Custom")
|
||||
set_extrusion_role(erCustom);
|
||||
set_extrusion_role(GCodeExtrusionRole::Custom);
|
||||
else if (type == "Inner wall")
|
||||
set_extrusion_role(erPerimeter);
|
||||
set_extrusion_role(GCodeExtrusionRole::Perimeter);
|
||||
else if (type == "Outer wall")
|
||||
set_extrusion_role(erExternalPerimeter);
|
||||
set_extrusion_role(GCodeExtrusionRole::ExternalPerimeter);
|
||||
else if (type == "Overhang wall")
|
||||
set_extrusion_role(erOverhangPerimeter);
|
||||
set_extrusion_role(GCodeExtrusionRole::OverhangPerimeter);
|
||||
else if (type == "Gap infill")
|
||||
set_extrusion_role(erGapFill);
|
||||
set_extrusion_role(GCodeExtrusionRole::GapFill);
|
||||
else if (type == "Bridge")
|
||||
set_extrusion_role(erBridgeInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::BridgeInfill);
|
||||
else if (type == "Sparse infill")
|
||||
set_extrusion_role(erInternalInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::InternalInfill);
|
||||
else if (type == "Internal solid infill")
|
||||
set_extrusion_role(erSolidInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::SolidInfill);
|
||||
else if (type == "Top surface")
|
||||
set_extrusion_role(erTopSolidInfill);
|
||||
set_extrusion_role(GCodeExtrusionRole::TopSolidInfill);
|
||||
else if (type == "Bottom surface")
|
||||
set_extrusion_role(erNone);
|
||||
set_extrusion_role(GCodeExtrusionRole::None);
|
||||
else if (type == "Ironing")
|
||||
set_extrusion_role(erIroning);
|
||||
set_extrusion_role(GCodeExtrusionRole::Ironing);
|
||||
else if (type == "Skirt")
|
||||
set_extrusion_role(erSkirt);
|
||||
set_extrusion_role(GCodeExtrusionRole::Skirt);
|
||||
else if (type == "Brim")
|
||||
set_extrusion_role(erSkirt);
|
||||
set_extrusion_role(GCodeExtrusionRole::Skirt);
|
||||
else if (type == "Support")
|
||||
set_extrusion_role(erSupportMaterial);
|
||||
set_extrusion_role(GCodeExtrusionRole::SupportMaterial);
|
||||
else if (type == "Support interface")
|
||||
set_extrusion_role(erSupportMaterialInterface);
|
||||
set_extrusion_role(GCodeExtrusionRole::SupportMaterialInterface);
|
||||
else if (type == "Support transition")
|
||||
set_extrusion_role(erNone);
|
||||
set_extrusion_role(GCodeExtrusionRole::None);
|
||||
else if (type == "Prime tower")
|
||||
set_extrusion_role(erWipeTower);
|
||||
set_extrusion_role(GCodeExtrusionRole::WipeTower);
|
||||
else {
|
||||
set_extrusion_role(erNone);
|
||||
set_extrusion_role(GCodeExtrusionRole::None);
|
||||
BOOST_LOG_TRIVIAL(warning) << "GCodeProcessor found unknown extrusion role: " << type;
|
||||
}
|
||||
|
||||
if (m_extrusion_role == erExternalPerimeter)
|
||||
if (m_extrusion_role == GCodeExtrusionRole::ExternalPerimeter)
|
||||
m_seams_detector.activate(true);
|
||||
|
||||
return true;
|
||||
|
@ -2405,7 +2405,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
|
|||
if (m_height == 0.0f)
|
||||
m_height = DEFAULT_TOOLPATH_HEIGHT;
|
||||
|
||||
if (m_end_position[Z] == 0.0f || (m_extrusion_role == erCustom && m_layer_id == 0))
|
||||
if (m_end_position[Z] == 0.0f || (m_extrusion_role == GCodeExtrusionRole::Custom && m_layer_id == 0))
|
||||
m_end_position[Z] = m_height;
|
||||
|
||||
if (line.comment() != INTERNAL_G2G3_TAG)
|
||||
|
@ -2418,10 +2418,10 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
|
|||
|
||||
if (m_forced_width > 0.0f)
|
||||
m_width = m_forced_width;
|
||||
else if (m_extrusion_role == erExternalPerimeter)
|
||||
else if (m_extrusion_role == GCodeExtrusionRole::ExternalPerimeter)
|
||||
// cross section: rectangle
|
||||
m_width = delta_pos[E] * static_cast<float>(M_PI * sqr(1.05f * filament_radius)) / (delta_xyz * m_height);
|
||||
else if (m_extrusion_role == erBridgeInfill || m_extrusion_role == erNone)
|
||||
else if (m_extrusion_role == GCodeExtrusionRole::BridgeInfill || m_extrusion_role == GCodeExtrusionRole::None)
|
||||
// cross section: circle
|
||||
m_width = static_cast<float>(m_result.filament_diameters[m_extruder_id]) * std::sqrt(delta_pos[E] / delta_xyz);
|
||||
else
|
||||
|
@ -2605,10 +2605,10 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
|
|||
|
||||
if (m_seams_detector.is_active()) {
|
||||
// check for seam starting vertex
|
||||
if (type == EMoveType::Extrude && m_extrusion_role == erExternalPerimeter && !m_seams_detector.has_first_vertex())
|
||||
if (type == EMoveType::Extrude && m_extrusion_role == GCodeExtrusionRole::ExternalPerimeter && !m_seams_detector.has_first_vertex())
|
||||
m_seams_detector.set_first_vertex(m_result.moves.back().position - m_extruder_offsets[m_extruder_id]);
|
||||
// check for seam ending vertex and store the resulting move
|
||||
else if ((type != EMoveType::Extrude || (m_extrusion_role != erExternalPerimeter && m_extrusion_role != erOverhangPerimeter)) && m_seams_detector.has_first_vertex()) {
|
||||
else if ((type != EMoveType::Extrude || (m_extrusion_role != GCodeExtrusionRole::ExternalPerimeter && m_extrusion_role != GCodeExtrusionRole::OverhangPerimeter)) && m_seams_detector.has_first_vertex()) {
|
||||
auto set_end_position = [this](const Vec3f& pos) {
|
||||
m_end_position[X] = pos.x(); m_end_position[Y] = pos.y(); m_end_position[Z] = pos.z();
|
||||
};
|
||||
|
@ -2627,7 +2627,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
|
|||
m_seams_detector.activate(false);
|
||||
}
|
||||
}
|
||||
else if (type == EMoveType::Extrude && m_extrusion_role == erExternalPerimeter) {
|
||||
else if (type == EMoveType::Extrude && m_extrusion_role == GCodeExtrusionRole::ExternalPerimeter) {
|
||||
m_seams_detector.activate(true);
|
||||
m_seams_detector.set_first_vertex(m_result.moves.back().position - m_extruder_offsets[m_extruder_id]);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue