From c93d345d2a189d6507e1143dfdebceee79c741ec Mon Sep 17 00:00:00 2001 From: "weizhen.xie" Date: Mon, 29 Sep 2025 10:02:05 +0800 Subject: [PATCH] Fix: Modify the method of obtaining the first_layer_time. Jira: None Change-Id: I0ef83d8f47f9d7b235b88caaa8b895367729f3e9 (cherry picked from commit 1de8d5c0d3bb6742219963bd7297286a937e0ed5) --- src/libslic3r/GCode.cpp | 6 ------ src/libslic3r/GCode.hpp | 2 -- src/libslic3r/GCode/GCodeProcessor.cpp | 4 +++- src/libslic3r/GCode/GCodeProcessor.hpp | 1 + 4 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index a66681f0f4..1fc08820cb 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1987,7 +1987,6 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu if(is_BBL_Printer()) result->label_object_enabled = m_enable_exclude_object; - result->initial_layer_time = m_initial_layer_time; // Write the profiler measurements to file PROFILE_UPDATE(); PROFILE_OUTPUT(debug_out_path("gcode-export-profile.txt").c_str()); @@ -3430,11 +3429,6 @@ void GCode::process_layers( else tbb::parallel_pipeline(12, generator & cooling & fan_mover & pa_processor_filter & output); - for (auto& layer_res : layers_results) { - if (layer_res.layer_id == 0) - m_initial_layer_time = layer_res.layer_time; - } - } // Process all layers of a single object instance (sequential mode) with a parallel pipeline: diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 7886ff3316..2827f9c2ad 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -618,8 +618,6 @@ private: std::vector m_printed_objects; - float m_initial_layer_time; - // Processor GCodeProcessor m_processor; diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 337b25d169..f35a4ec705 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -2524,11 +2524,13 @@ void GCodeProcessor::finalize(bool post_process) auto it = std::find_if(time_mode.roles_times.begin(), time_mode.roles_times.end(), [](const std::pair& item) { return erCustom == item.first; }); auto prepare_time = (it != time_mode.roles_times.end()) ? it->second : 0.0f; + std::vector& layer_times = m_result.print_statistics.modes[static_cast(PrintEstimatedStatistics::ETimeMode::Normal)].layers_times; + m_result.initial_layer_time = layer_times.size() > 0 ? std::max(float(0.0), layer_times[0] - prepare_time) : 0; + //update times for results for (size_t i = 0; i < m_result.moves.size(); i++) { //field layer_duration contains the layer id for the move in which the layer_duration has to be set. size_t layer_id = size_t(m_result.moves[i].layer_duration); - std::vector& layer_times = m_result.print_statistics.modes[static_cast(PrintEstimatedStatistics::ETimeMode::Normal)].layers_times; if (layer_times.size() > layer_id - 1 && layer_id > 0) m_result.moves[i].layer_duration = layer_id == 1 ? std::max(0.f,layer_times[layer_id - 1] - prepare_time) : layer_times[layer_id - 1]; else diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 962d5ee28a..080906da42 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -301,6 +301,7 @@ class Print; filament_printable_reuslt = other.filament_printable_reuslt; layer_filaments = other.layer_filaments; filament_change_count_map = other.filament_change_count_map; + initial_layer_time = other.initial_layer_time; #if ENABLE_GCODE_VIEWER_STATISTICS time = other.time; #endif