From 184cb7afd9d2def98a08fde50534e61c70d2611d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= <hejl.lukas@gmail.com>
Date: Thu, 3 Sep 2020 14:28:25 +0200
Subject: [PATCH] Fix bug in lines merging

---
 src/libslic3r/Fill/FillAdaptive.cpp | 30 +++++++++++++----------------
 src/libslic3r/Fill/FillAdaptive.hpp |  2 +-
 2 files changed, 14 insertions(+), 18 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index d3246dc18..030debad6 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -145,35 +145,31 @@ void FillAdaptive::generate_infill_lines(
     }
 }
 
-void FillAdaptive::connect_lines(Lines &lines, const Line &new_line)
+void FillAdaptive::connect_lines(Lines &lines, Line new_line)
 {
     int eps = scale_(0.10);
-    bool modified = false;
-
-    for (Line &line : lines)
+    for (size_t i = 0; i < lines.size(); ++i)
     {
-        if (std::abs(new_line.a.x() - line.b.x()) < eps && std::abs(new_line.a.y() - line.b.y()) < eps)
+        if (std::abs(new_line.a.x() - lines[i].b.x()) < eps && std::abs(new_line.a.y() - lines[i].b.y()) < eps)
         {
-            line.b.x() = new_line.b.x();
-            line.b.y() = new_line.b.y();
-            modified = true;
+            new_line.a = lines[i].a;
+            lines.erase(lines.begin() + i);
+            --i;
+            continue;
         }
 
-        if (std::abs(new_line.b.x() - line.a.x()) < eps && std::abs(new_line.b.y() - line.a.y()) < eps)
+        if (std::abs(new_line.b.x() - lines[i].a.x()) < eps && std::abs(new_line.b.y() - lines[i].a.y()) < eps)
         {
-            line.a.x() = new_line.a.x();
-            line.a.y() = new_line.a.y();
-            modified = true;
+            new_line.b = lines[i].b;
+            lines.erase(lines.begin() + i);
+            --i;
+            continue;
         }
     }
 
-    if(!modified)
-    {
-        lines.push_back(new_line);
-    }
+    lines.emplace_back(new_line.a, new_line.b);
 }
 
-
 std::unique_ptr<FillAdaptive_Internal::Octree> FillAdaptive::build_octree(
     TriangleMesh &triangle_mesh,
     coordf_t line_spacing,
diff --git a/src/libslic3r/Fill/FillAdaptive.hpp b/src/libslic3r/Fill/FillAdaptive.hpp
index 570318aa4..44a2536f0 100644
--- a/src/libslic3r/Fill/FillAdaptive.hpp
+++ b/src/libslic3r/Fill/FillAdaptive.hpp
@@ -62,7 +62,7 @@ protected:
 
     void generate_infill_lines(FillAdaptive_Internal::Cube *cube, double z_position, const Vec3d &origin, std::vector<Lines> &dir_lines_out);
 
-    void connect_lines(Lines &lines, const Line &new_line);
+    static void connect_lines(Lines &lines, Line new_line);
 
 public:
     static std::unique_ptr<FillAdaptive_Internal::Octree> build_octree(