Print time in output G-code: fill in the time if the file export
dialog is open after the slicing finished.
This commit is contained in:
parent
f60a767ed9
commit
b8939ed7df
@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
#include "PrintExport.hpp"
|
#include "PrintExport.hpp"
|
||||||
|
|
||||||
|
#include <boost/filesystem/path.hpp>
|
||||||
|
|
||||||
//! macro used to mark string used at localization,
|
//! macro used to mark string used at localization,
|
||||||
//! return same string
|
//! return same string
|
||||||
#define L(s) Slic3r::I18N::translate(s)
|
#define L(s) Slic3r::I18N::translate(s)
|
||||||
@ -1864,14 +1866,54 @@ std::string Print::output_filename() const
|
|||||||
{
|
{
|
||||||
// Set the placeholders for the data know first after the G-code export is finished.
|
// Set the placeholders for the data know first after the G-code export is finished.
|
||||||
// These values will be just propagated into the output file name.
|
// These values will be just propagated into the output file name.
|
||||||
|
DynamicConfig config = this->finished() ? this->print_statistics().config() : this->print_statistics().placeholders();
|
||||||
|
return this->PrintBase::output_filename(m_config.output_filename_format.value, "gcode", &config);
|
||||||
|
}
|
||||||
|
|
||||||
|
DynamicConfig PrintStatistics::config() const
|
||||||
|
{
|
||||||
|
DynamicConfig config;
|
||||||
|
std::string normal_print_time = this->estimated_normal_print_time;
|
||||||
|
std::string silent_print_time = this->estimated_silent_print_time;
|
||||||
|
normal_print_time.erase(std::remove_if(normal_print_time.begin(), normal_print_time.end(), std::isspace), normal_print_time.end());
|
||||||
|
silent_print_time.erase(std::remove_if(silent_print_time.begin(), silent_print_time.end(), std::isspace), silent_print_time.end());
|
||||||
|
config.set_key_value("print_time", new ConfigOptionString(normal_print_time));
|
||||||
|
config.set_key_value("normal_print_time", new ConfigOptionString(normal_print_time));
|
||||||
|
config.set_key_value("silent_print_time", new ConfigOptionString(silent_print_time));
|
||||||
|
config.set_key_value("used_filament", new ConfigOptionFloat (this->total_used_filament));
|
||||||
|
config.set_key_value("extruded_volume", new ConfigOptionFloat (this->total_extruded_volume));
|
||||||
|
config.set_key_value("total_cost", new ConfigOptionFloat (this->total_cost));
|
||||||
|
config.set_key_value("total_weight", new ConfigOptionFloat (this->total_weight));
|
||||||
|
config.set_key_value("total_wipe_tower_cost", new ConfigOptionFloat (this->total_wipe_tower_cost));
|
||||||
|
config.set_key_value("total_wipe_tower_filament", new ConfigOptionFloat (this->total_wipe_tower_filament));
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
DynamicConfig PrintStatistics::placeholders()
|
||||||
|
{
|
||||||
DynamicConfig config;
|
DynamicConfig config;
|
||||||
for (const std::string &key : {
|
for (const std::string &key : {
|
||||||
"print_time", "normal_print_time", "silent_print_time",
|
"print_time", "normal_print_time", "silent_print_time",
|
||||||
"used_filament", "extruded_volume", "total_cost", "total_weight",
|
"used_filament", "extruded_volume", "total_cost", "total_weight",
|
||||||
"total_wipe_tower_cost", "total_wipe_tower_filament"})
|
"total_wipe_tower_cost", "total_wipe_tower_filament"})
|
||||||
config.set_key_value(key, new ConfigOptionString(std::string("{") + key + "}"));
|
config.set_key_value(key, new ConfigOptionString(std::string("{") + key + "}"));
|
||||||
return this->PrintBase::output_filename(m_config.output_filename_format.value, "gcode", &config);
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string PrintStatistics::finalize_output_path(const std::string &path_in) const
|
||||||
|
{
|
||||||
|
std::string final_path;
|
||||||
|
try {
|
||||||
|
boost::filesystem::path path(path_in);
|
||||||
|
DynamicConfig cfg = this->config();
|
||||||
|
PlaceholderParser pp;
|
||||||
|
std::string new_stem = pp.process(path.stem().string(), 0, &cfg);
|
||||||
|
final_path = (path.parent_path() / (new_stem + path.extension().string())).string();
|
||||||
|
} catch (const std::exception &ex) {
|
||||||
|
BOOST_LOG_TRIVIAL(error) << "Failed to apply the print statistics to the export file name: " << ex.what();
|
||||||
|
final_path = path_in;
|
||||||
|
}
|
||||||
|
return final_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Slic3r
|
} // namespace Slic3r
|
||||||
|
|
||||||
|
@ -249,6 +249,13 @@ struct PrintStatistics
|
|||||||
double total_wipe_tower_filament;
|
double total_wipe_tower_filament;
|
||||||
std::map<size_t, float> filament_stats;
|
std::map<size_t, float> filament_stats;
|
||||||
|
|
||||||
|
// Config with the filled in print statistics.
|
||||||
|
DynamicConfig config() const;
|
||||||
|
// Config with the statistics keys populated with placeholder strings.
|
||||||
|
static DynamicConfig placeholders();
|
||||||
|
// Replace the print statistics placeholders in the path.
|
||||||
|
std::string finalize_output_path(const std::string &path_in) const;
|
||||||
|
|
||||||
void clear() {
|
void clear() {
|
||||||
estimated_normal_print_time.clear();
|
estimated_normal_print_time.clear();
|
||||||
estimated_silent_print_time.clear();
|
estimated_silent_print_time.clear();
|
||||||
|
@ -82,32 +82,7 @@ void BackgroundSlicingProcess::process_fff()
|
|||||||
if (! m_export_path.empty()) {
|
if (! m_export_path.empty()) {
|
||||||
//FIXME localize the messages
|
//FIXME localize the messages
|
||||||
// Perform the final post-processing of the export path by applying the print statistics over the file name.
|
// Perform the final post-processing of the export path by applying the print statistics over the file name.
|
||||||
std::string export_path;
|
std::string export_path = m_fff_print->print_statistics().finalize_output_path(m_export_path);
|
||||||
{
|
|
||||||
const PrintStatistics &stats = m_fff_print->print_statistics();
|
|
||||||
PlaceholderParser pp;
|
|
||||||
std::string normal_print_time = stats.estimated_normal_print_time;
|
|
||||||
std::string silent_print_time = stats.estimated_silent_print_time;
|
|
||||||
normal_print_time.erase(std::remove_if(normal_print_time.begin(), normal_print_time.end(), isspace), normal_print_time.end());
|
|
||||||
silent_print_time.erase(std::remove_if(silent_print_time.begin(), silent_print_time.end(), isspace), silent_print_time.end());
|
|
||||||
pp.set("print_time", new ConfigOptionString(normal_print_time));
|
|
||||||
pp.set("normal_print_time", new ConfigOptionString(normal_print_time));
|
|
||||||
pp.set("silent_print_time", new ConfigOptionString(silent_print_time));
|
|
||||||
pp.set("used_filament", new ConfigOptionFloat (stats.total_used_filament));
|
|
||||||
pp.set("extruded_volume", new ConfigOptionFloat (stats.total_extruded_volume));
|
|
||||||
pp.set("total_cost", new ConfigOptionFloat (stats.total_cost));
|
|
||||||
pp.set("total_weight", new ConfigOptionFloat (stats.total_weight));
|
|
||||||
pp.set("total_wipe_tower_cost", new ConfigOptionFloat (stats.total_wipe_tower_cost));
|
|
||||||
pp.set("total_wipe_tower_filament", new ConfigOptionFloat (stats.total_wipe_tower_filament));
|
|
||||||
boost::filesystem::path path(m_export_path);
|
|
||||||
try {
|
|
||||||
std::string new_stem = pp.process(path.stem().string(), 0);
|
|
||||||
export_path = (path.parent_path() / (new_stem + path.extension().string())).string();
|
|
||||||
} catch (const std::exception &ex) {
|
|
||||||
BOOST_LOG_TRIVIAL(error) << "Failed to apply the print statistics to the export file name: " << ex.what();
|
|
||||||
export_path = m_export_path;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (copy_file(m_temp_output_path, export_path) != 0)
|
if (copy_file(m_temp_output_path, export_path) != 0)
|
||||||
throw std::runtime_error("Copying of the temporary G-code to the output G-code failed");
|
throw std::runtime_error("Copying of the temporary G-code to the output G-code failed");
|
||||||
m_print->set_status(95, "Running post-processing scripts");
|
m_print->set_status(95, "Running post-processing scripts");
|
||||||
|
Loading…
Reference in New Issue
Block a user