From 519bcaf1a23633d7c4342834b969fb68c98640c8 Mon Sep 17 00:00:00 2001 From: remi durand Date: Fri, 19 Mar 2021 12:36:38 +0100 Subject: [PATCH] #922 Infill bridge issues --- src/libslic3r/ExtrusionEntity.cpp | 2 +- src/libslic3r/ExtrusionEntity.hpp | 5 ++++- src/libslic3r/Fill/FillBase.cpp | 2 +- src/libslic3r/Fill/FillBase.hpp | 2 +- src/libslic3r/Fill/FillConcentric.cpp | 2 +- src/libslic3r/GCode.cpp | 2 +- src/libslic3r/GCode/GCodeProcessor.cpp | 2 +- src/libslic3r/SupportMaterial.cpp | 2 +- 8 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/ExtrusionEntity.cpp b/src/libslic3r/ExtrusionEntity.cpp index e668b50bd..445d1bc5b 100644 --- a/src/libslic3r/ExtrusionEntity.cpp +++ b/src/libslic3r/ExtrusionEntity.cpp @@ -312,7 +312,7 @@ ExtrusionRole ExtrusionEntity::string_to_role(const std::string_view role) else if (role == L("Bridge infill")) return erBridgeInfill; else if (role == L("Internal bridge infill")) - return erBridgeInfill; + return erInternalBridgeInfill; else if (role == L("Thin wall")) return erThinWall; else if (role == L("Gap fill")) diff --git a/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp index 2f55d51fc..3d2221cf3 100644 --- a/src/libslic3r/ExtrusionEntity.hpp +++ b/src/libslic3r/ExtrusionEntity.hpp @@ -104,6 +104,7 @@ inline bool is_perimeter(ExtrusionRole role) inline bool is_infill(ExtrusionRole role) { return role == erBridgeInfill + || role == erInternalBridgeInfill || role == erInternalInfill || role == erSolidInfill || role == erTopSolidInfill @@ -113,13 +114,15 @@ inline bool is_infill(ExtrusionRole role) inline bool is_solid_infill(ExtrusionRole role) { return role == erBridgeInfill + || role == erInternalBridgeInfill || role == erSolidInfill || role == erTopSolidInfill || role == erIroning; } inline bool is_bridge(ExtrusionRole role) { - return role == erBridgeInfill; + return role == erBridgeInfill + || role == erInternalBridgeInfill; } diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index 527d41165..226e7f610 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -252,7 +252,7 @@ Fill::do_gap_fill(const ExPolygons& gapfill_areas, const FillParams& params, Ext MedialAxis{ ex, params.flow.scaled_width() * 2, params.flow.scaled_width() / 5, coord_t(params.flow.height) }.build(polylines_gapfill); } } - if (!polylines_gapfill.empty() && params.role != erBridgeInfill && params.role != erInternalBridgeInfill) { + if (!polylines_gapfill.empty() && !is_bridge(params.role)) { //test #ifdef _DEBUG for (ThickPolyline poly : polylines_gapfill) { diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp index 65548ea73..1d97fb38c 100644 --- a/src/libslic3r/Fill/FillBase.hpp +++ b/src/libslic3r/Fill/FillBase.hpp @@ -164,7 +164,7 @@ protected: ExtrusionRole getRoleFromSurfaceType(const FillParams ¶ms, const Surface *surface) const { if (params.role == erNone || params.role == erCustom) { return params.flow.bridge ? - (surface->has_pos_bottom() ? erBridgeInfill :erInternalBridgeInfill) : + (surface->has_pos_bottom() ? erBridgeInfill : erInternalBridgeInfill) : (surface->has_fill_solid() ? ((surface->has_pos_top()) ? erTopSolidInfill : erSolidInfill) : erInternalInfill); diff --git a/src/libslic3r/Fill/FillConcentric.cpp b/src/libslic3r/Fill/FillConcentric.cpp index 4a80dd028..10b76c357 100644 --- a/src/libslic3r/Fill/FillConcentric.cpp +++ b/src/libslic3r/Fill/FillConcentric.cpp @@ -153,7 +153,7 @@ FillConcentricWGapFill::fill_surface_extrusion( MedialAxis{ ex, coord_t(max), coord_t(min), coord_t(params.flow.height) }.build(polylines); } } - if (!polylines.empty() && good_role != erBridgeInfill && good_role != erInternalBridgeInfill) { + if (!polylines.empty() && !is_bridge(good_role)) { ExtrusionEntityCollection gap_fill = thin_variable_width(polylines, erGapFill, params.flow); //set role if needed if (good_role != erSolidInfill) { diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index f0305dd60..6db84d030 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -3719,7 +3719,7 @@ std::string GCode::_before_extrude(const ExtrusionPath &path, const std::string throw Slic3r::InvalidArgument("Invalid speed"); } //don't modify bridge speed - if (factor < 1 && !(path.role() == erOverhangPerimeter || path.role() == erBridgeInfill || path.role() == erInternalBridgeInfill)) { + if (factor < 1 && !(path.role() == erOverhangPerimeter || is_bridge(path.role()))) { float small_speed = m_config.small_perimeter_speed.get_abs_value(m_config.perimeter_speed); //apply factor between feature speed and small speed speed = speed * factor + (1.f - factor) * small_speed; diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 5049e457c..cb6958b7e 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -1909,7 +1909,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) #endif // ENABLE_TOOLPATHS_WIDTH_HEIGHT_FROM_GCODE // cross section: rectangle m_width = delta_pos[E] * static_cast(M_PI * sqr(1.05f * filament_radius)) / (delta_xyz * m_height); - else if (m_extrusion_role == erBridgeInfill || m_extrusion_role == erNone) + else if (is_bridge(m_extrusion_role) || m_extrusion_role == erNone) // cross section: circle m_width = static_cast(m_filament_diameters[m_extruder_id]) * std::sqrt(delta_pos[E] / delta_xyz); else diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index 56d590e2f..dfdac2fe8 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -808,7 +808,7 @@ namespace SupportMaterialInternal { return true; } else { assert(! ee->is_loop()); - if (ee->role() == erBridgeInfill || ee->role() == erInternalBridgeInfill) + if (is_bridge(ee->role())) return true; } }