mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-11 08:47:52 -06:00
The G-code export was reshuffled a bit to reduce peak memory consumption.
Namely, the time estimate memory is released before the G-code preview data is created from the G-code analyser data.
This commit is contained in:
parent
e2d7fd941f
commit
8bc04e640a
2 changed files with 23 additions and 19 deletions
|
@ -435,9 +435,11 @@ void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_
|
||||||
if (file == nullptr)
|
if (file == nullptr)
|
||||||
throw std::runtime_error(std::string("G-code export to ") + path + " failed.\nCannot open the file for writing.\n");
|
throw std::runtime_error(std::string("G-code export to ") + path + " failed.\nCannot open the file for writing.\n");
|
||||||
|
|
||||||
|
m_enable_analyzer = preview_data != nullptr;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
m_placeholder_parser_failed_templates.clear();
|
m_placeholder_parser_failed_templates.clear();
|
||||||
this->_do_export(*print, file, preview_data);
|
this->_do_export(*print, file);
|
||||||
fflush(file);
|
fflush(file);
|
||||||
if (ferror(file)) {
|
if (ferror(file)) {
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
@ -453,15 +455,6 @@ void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_
|
||||||
}
|
}
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
||||||
if (print->config().remaining_times.value) {
|
|
||||||
BOOST_LOG_TRIVIAL(debug) << "Processing remaining times for normal mode";
|
|
||||||
m_normal_time_estimator.post_process_remaining_times(path_tmp, 60.0f);
|
|
||||||
if (m_silent_time_estimator_enabled) {
|
|
||||||
BOOST_LOG_TRIVIAL(debug) << "Processing remaining times for silent mode";
|
|
||||||
m_silent_time_estimator.post_process_remaining_times(path_tmp, 60.0f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! m_placeholder_parser_failed_templates.empty()) {
|
if (! m_placeholder_parser_failed_templates.empty()) {
|
||||||
// G-code export proceeded, but some of the PlaceholderParser substitutions failed.
|
// G-code export proceeded, but some of the PlaceholderParser substitutions failed.
|
||||||
std::string msg = std::string("G-code export to ") + path + " failed due to invalid custom G-code sections:\n\n";
|
std::string msg = std::string("G-code export to ") + path + " failed due to invalid custom G-code sections:\n\n";
|
||||||
|
@ -475,6 +468,24 @@ void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_
|
||||||
throw std::runtime_error(msg);
|
throw std::runtime_error(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (print->config().remaining_times.value) {
|
||||||
|
BOOST_LOG_TRIVIAL(debug) << "Processing remaining times for normal mode";
|
||||||
|
m_normal_time_estimator.post_process_remaining_times(path_tmp, 60.0f);
|
||||||
|
m_normal_time_estimator.reset();
|
||||||
|
if (m_silent_time_estimator_enabled) {
|
||||||
|
BOOST_LOG_TRIVIAL(debug) << "Processing remaining times for silent mode";
|
||||||
|
m_silent_time_estimator.post_process_remaining_times(path_tmp, 60.0f);
|
||||||
|
m_silent_time_estimator.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// starts analyzer calculations
|
||||||
|
if (m_enable_analyzer) {
|
||||||
|
BOOST_LOG_TRIVIAL(debug) << "Preparing G-code preview data";
|
||||||
|
m_analyzer.calc_gcode_preview_data(*preview_data);
|
||||||
|
m_analyzer.reset();
|
||||||
|
}
|
||||||
|
|
||||||
if (rename_file(path_tmp, path) != 0)
|
if (rename_file(path_tmp, path) != 0)
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
std::string("Failed to rename the output G-code file from ") + path_tmp + " to " + path + '\n' +
|
std::string("Failed to rename the output G-code file from ") + path_tmp + " to " + path + '\n' +
|
||||||
|
@ -488,7 +499,7 @@ void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_
|
||||||
PROFILE_OUTPUT(debug_out_path("gcode-export-profile.txt").c_str());
|
PROFILE_OUTPUT(debug_out_path("gcode-export-profile.txt").c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCode::_do_export(Print &print, FILE *file, GCodePreviewData *preview_data)
|
void GCode::_do_export(Print &print, FILE *file)
|
||||||
{
|
{
|
||||||
PROFILE_FUNC();
|
PROFILE_FUNC();
|
||||||
|
|
||||||
|
@ -558,7 +569,6 @@ void GCode::_do_export(Print &print, FILE *file, GCodePreviewData *preview_data)
|
||||||
|
|
||||||
// resets analyzer
|
// resets analyzer
|
||||||
m_analyzer.reset();
|
m_analyzer.reset();
|
||||||
m_enable_analyzer = preview_data != nullptr;
|
|
||||||
|
|
||||||
// resets analyzer's tracking data
|
// resets analyzer's tracking data
|
||||||
m_last_mm3_per_mm = GCodeAnalyzer::Default_mm3_per_mm;
|
m_last_mm3_per_mm = GCodeAnalyzer::Default_mm3_per_mm;
|
||||||
|
@ -1034,12 +1044,6 @@ void GCode::_do_export(Print &print, FILE *file, GCodePreviewData *preview_data)
|
||||||
_write(file, full_config);
|
_write(file, full_config);
|
||||||
}
|
}
|
||||||
print.throw_if_canceled();
|
print.throw_if_canceled();
|
||||||
|
|
||||||
// starts analyzer calculations
|
|
||||||
if (preview_data != nullptr) {
|
|
||||||
BOOST_LOG_TRIVIAL(debug) << "Preparing G-code preview data";
|
|
||||||
m_analyzer.calc_gcode_preview_data(*preview_data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GCode::placeholder_parser_process(const std::string &name, const std::string &templ, unsigned int current_extruder_id, const DynamicConfig *config_override)
|
std::string GCode::placeholder_parser_process(const std::string &name, const std::string &templ, unsigned int current_extruder_id, const DynamicConfig *config_override)
|
||||||
|
|
|
@ -180,7 +180,7 @@ public:
|
||||||
static void append_full_config(const Print& print, std::string& str);
|
static void append_full_config(const Print& print, std::string& str);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void _do_export(Print &print, FILE *file, GCodePreviewData *preview_data);
|
void _do_export(Print &print, FILE *file);
|
||||||
|
|
||||||
// Object and support extrusions of the same PrintObject at the same print_z.
|
// Object and support extrusions of the same PrintObject at the same print_z.
|
||||||
struct LayerToPrint
|
struct LayerToPrint
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue