Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVojtech Bubnik <bubnikv@gmail.com>2021-09-07 16:42:50 +0300
committerVojtech Bubnik <bubnikv@gmail.com>2021-09-07 16:42:56 +0300
commit32733b7db943ccf823a27f9fca83a17c8aaae350 (patch)
tree1f7a13b3f6d5feec9ba89a3f11c89ab21b2114db /src/libslic3r
parent719c91514bd71cf04d4abec70a958fd3710f5f01 (diff)
GCodeProcessor collects positions of line ends for GCodeViewer,
GCodeViewer no more parses G-code just to extract line end positions. Removed start_mapping_gcode_window(), void stop_mapping_gcode_window(), they are no more needed.
Diffstat (limited to 'src/libslic3r')
-rw-r--r--src/libslic3r/GCode/GCodeProcessor.cpp16
-rw-r--r--src/libslic3r/GCode/GCodeProcessor.hpp4
2 files changed, 15 insertions, 5 deletions
diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp
index aa6912fc4..ec586dbef 100644
--- a/src/libslic3r/GCode/GCodeProcessor.cpp
+++ b/src/libslic3r/GCode/GCodeProcessor.cpp
@@ -354,7 +354,7 @@ struct FilePtr {
FILE* f = nullptr;
};
-void GCodeProcessor::TimeProcessor::post_process(const std::string& filename, std::vector<MoveVertex>& moves)
+void GCodeProcessor::TimeProcessor::post_process(const std::string& filename, std::vector<MoveVertex>& moves, std::vector<size_t>& lines_ends)
{
FilePtr in{ boost::nowide::fopen(filename.c_str(), "rb") };
if (in.f == nullptr)
@@ -567,13 +567,19 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename, st
};
// helper function to write to disk
- auto write_string = [&export_line, &out, &out_path](const std::string& str) {
+ size_t out_file_pos = 0;
+ lines_ends.clear();
+ auto write_string = [&export_line, &out, &out_path, &out_file_pos, &lines_ends](const std::string& str) {
fwrite((const void*)export_line.c_str(), 1, export_line.length(), out.f);
if (ferror(out.f)) {
out.close();
boost::nowide::remove(out_path.c_str());
throw Slic3r::RuntimeError(std::string("Time estimator post process export failed.\nIs the disk full?\n"));
}
+ for (size_t i = 0; i < export_line.size(); ++ i)
+ if (export_line[i] == '\n')
+ lines_ends.emplace_back(out_file_pos + i + 1);
+ out_file_pos += export_line.size();
export_line.clear();
};
@@ -736,7 +742,9 @@ void GCodeProcessor::Result::reset() {
}
#else
void GCodeProcessor::Result::reset() {
- moves = std::vector<GCodeProcessor::MoveVertex>();
+
+ moves.clear();
+ lines_ends.clear();
bed_shape = Pointfs();
settings_ids.reset();
extruders_count = 0;
@@ -1270,7 +1278,7 @@ void GCodeProcessor::process_file(const std::string& filename, bool apply_postpr
// post-process to add M73 lines into the gcode
if (apply_postprocess)
- m_time_processor.post_process(filename, m_result.moves);
+ m_time_processor.post_process(filename, m_result.moves, m_result.lines_ends);
#if ENABLE_GCODE_VIEWER_DATA_CHECKING
std::cout << "\n";
diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp
index 4fcdd8df3..bb9310888 100644
--- a/src/libslic3r/GCode/GCodeProcessor.hpp
+++ b/src/libslic3r/GCode/GCodeProcessor.hpp
@@ -306,7 +306,7 @@ namespace Slic3r {
// post process the file with the given filename to add remaining time lines M73
// and updates moves' gcode ids accordingly
- void post_process(const std::string& filename, std::vector<MoveVertex>& moves);
+ void post_process(const std::string& filename, std::vector<MoveVertex>& moves, std::vector<size_t>& lines_ends);
};
struct UsedFilaments // filaments per ColorChange
@@ -350,6 +350,8 @@ namespace Slic3r {
std::string filename;
unsigned int id;
std::vector<MoveVertex> moves;
+ // Positions of ends of lines of the final G-code this->filename after TimeProcessor::post_process() finalizes the G-code.
+ std::vector<size_t> lines_ends;
Pointfs bed_shape;
SettingsIds settings_ids;
size_t extruders_count;