bool MergeInfillLines::mergeInfillLines(double speed, unsigned int& path_idx)
{ //Check for lots of small moves and combine them into one large line
    Point prev_middle;
    Point last_middle;
    int64_t line_width;

    if (isConvertible(path_idx, prev_middle, last_middle, line_width, false))
    {
        //   path_idx + 3 is the index of the second extrusion move to be converted in combination with the first
        {
            GCodePath& move_path = paths[path_idx];
            for(unsigned int point_idx = 0; point_idx < move_path.points.size() - 1; point_idx++)
            {
                gcode.writeMove(move_path.points[point_idx], speed, move_path.getExtrusionMM3perMM());
            }
            gcode.writeMove(prev_middle, travelConfig.getSpeed(), 0);
            GCodePath& last_path = paths[path_idx + 3];
            
            writeCompensatedMove(last_middle, speed, last_path, line_width);
        }
        
        path_idx += 2;
        extruder_plan.handleInserts(path_idx, gcode);
        for (; isConvertible(path_idx, prev_middle, last_middle, line_width, true); path_idx += 2)
        {
            extruder_plan.handleInserts(path_idx, gcode);
            GCodePath& last_path = paths[path_idx + 3];
            writeCompensatedMove(last_middle, speed, last_path, line_width);
        }
        path_idx = path_idx + 1; // means that the next path considered is the travel path after the converted extrusion path corresponding to the updated path_idx
        extruder_plan.handleInserts(path_idx, gcode);
        return true;
    }
    return false;
};
bool MergeInfillLines::mergeInfillLines(double speed, unsigned int& path_idx)
{ //Check for lots of small moves and combine them into one large line
    Point prev_middle;
    Point last_middle;
    int64_t line_width;
    
    MergeInfillLines merger(gcode, paths, travelConfig, nozzle_size);
    
    if (merger.isConvertible(path_idx, prev_middle, last_middle, line_width, false))
    {
        //   path_idx + 3 is the index of the second extrusion move to be converted in combination with the first
        {
            GCodePath& last_path = paths[path_idx + 3];
            gcode.writeMove(prev_middle, travelConfig.getSpeed(), 0);
            
            writeCompensatedMove(last_middle, speed, last_path, line_width);
        }
        
        path_idx += 2;
        for (; merger.isConvertible(path_idx, prev_middle, last_middle, line_width, true); path_idx += 2)
        {
            GCodePath& last_path = paths[path_idx + 3];
            writeCompensatedMove(last_middle, speed, last_path, line_width);
        }
        path_idx = path_idx + 1; // means that the next path considered is the travel path after the converted extrusion path corresponding to the updated path_idx
        return true;
    }
    return false;
};