From f30a18d6586d5be4ed78d273c303f4dc07f9bea2 Mon Sep 17 00:00:00 2001 From: igiannakas <59056762+igiannakas@users.noreply.github.com> Date: Sun, 10 Sep 2023 13:26:07 +0100 Subject: [PATCH] Preparing to add curled extrusions identification --- src/libslic3r/GCode.cpp | 11 +++-------- src/libslic3r/GCode/ExtrusionProcessor.hpp | 4 ++++ src/libslic3r/Layer.hpp | 3 +++ src/libslic3r/Line.hpp | 12 ++++++++++++ 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index e9d94e04f1..9f6181f713 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -4529,7 +4529,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, std::vector new_points {}; if (m_config.enable_overhang_speed && !m_config.overhang_speed_classic && !this->on_first_layer() && - is_perimeter(path.role())) { + (is_bridge(path.role()) || is_perimeter(path.role()))) { double out_wall_ref_speed = m_config.get_abs_value("outer_wall_speed"); ConfigOptionPercents overhang_overlap_levels({75, 50, 25, 13, 12.99, 0}); ConfigOptionFloatsOrPercents dynamic_overhang_speeds( @@ -4545,13 +4545,8 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, (m_config.get_abs_value("overhang_4_4_speed") < 0.5) ? FloatOrPercent{100, true} : FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed") * 100 / out_wall_ref_speed, true}, - (m_config.get_abs_value("overhang_4_4_speed") < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed") * 100 / out_wall_ref_speed, true}, - (m_config.get_abs_value("overhang_4_4_speed") < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed") * 100 / out_wall_ref_speed, true} - }); + FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / out_wall_ref_speed, true}, + FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / out_wall_ref_speed, true}}); if (out_wall_ref_speed == 0) out_wall_ref_speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm; diff --git a/src/libslic3r/GCode/ExtrusionProcessor.hpp b/src/libslic3r/GCode/ExtrusionProcessor.hpp index 967620b407..199032ec43 100644 --- a/src/libslic3r/GCode/ExtrusionProcessor.hpp +++ b/src/libslic3r/GCode/ExtrusionProcessor.hpp @@ -247,6 +247,8 @@ class ExtrusionQualityEstimator { std::unordered_map> prev_layer_boundaries; std::unordered_map> next_layer_boundaries; + std::unordered_map> prev_curled_extrusions; + std::unordered_map> next_curled_extrusions; const PrintObject *current_object; public: @@ -258,6 +260,8 @@ public: const PrintObject *object = obj; prev_layer_boundaries[object] = next_layer_boundaries[object]; next_layer_boundaries[object] = AABBTreeLines::LinesDistancer{to_unscaled_linesf(layer->lslices)}; + prev_curled_extrusions[object] = next_curled_extrusions[object]; + next_curled_extrusions[object] = AABBTreeLines::LinesDistancer{layer->curled_lines}; } std::vector estimate_extrusion_quality(const ExtrusionPath &path, diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index 3bb10bad7d..a72d427692 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -132,6 +132,9 @@ public: coordf_t height; // layer height in unscaled coordinates coordf_t bottom_z() const { return this->print_z - this->height; } + //Extrusions estimated to be seriously malformed, estimated during "Estimating curled extrusions" step. These lines should be avoided during fast travels. + CurledLines curled_lines; + // BBS mutable ExPolygons sharp_tails; mutable ExPolygons cantilevers; diff --git a/src/libslic3r/Line.hpp b/src/libslic3r/Line.hpp index dbb5ff8ee0..5c39f25faa 100644 --- a/src/libslic3r/Line.hpp +++ b/src/libslic3r/Line.hpp @@ -209,6 +209,18 @@ public: double a_width, b_width; }; +class CurledLine : public Line +{ +public: + CurledLine() : curled_height(0.0f) {} + CurledLine(const Point& a, const Point& b) : Line(a, b), curled_height(0.0f) {} + CurledLine(const Point& a, const Point& b, float curled_height) : Line(a, b), curled_height(curled_height) {} + + float curled_height; +}; + +using CurledLines = std::vector; + class Line3 { public: