diff options
author | supermerill <merill@free.fr> | 2022-03-11 19:51:37 +0300 |
---|---|---|
committer | supermerill <merill@free.fr> | 2022-03-11 19:51:37 +0300 |
commit | c8360385914077c4773dfec71b74734052c16a66 (patch) | |
tree | 3d943c8010fb74c71fea859e5059dca6ad033a63 | |
parent | d9e991e195fc34bd933d7cca8cbafb4eafcdafc7 (diff) |
Allow m117 & M73 at the same time
also fix M117
supermerill/SuperSlicer#1940
-rw-r--r-- | src/libslic3r/GCode/GCodeProcessor.cpp | 26 | ||||
-rw-r--r-- | src/libslic3r/Model.hpp | 1 | ||||
-rw-r--r-- | src/libslic3r/PrintConfig.cpp | 3 | ||||
-rw-r--r-- | src/libslic3r/PrintConfig.hpp | 27 |
4 files changed, 40 insertions, 17 deletions
diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index f9d41d2b9..4a69580e7 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -391,21 +391,21 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename, st //float machine_TO_last_time_elapsed[] = { 0,0 }; //float machine_TO_last_next_stop[] = { 0,0 }; - std::array<int32_t, static_cast<size_t>(PrintEstimatedStatistics::ETimeMode::Count)> machine_TO_last_time_elapsed { -1 }; - std::array<int32_t, static_cast<size_t>(PrintEstimatedStatistics::ETimeMode::Count)> machine_TO_last_time_left { -1 }; - std::array<int32_t, static_cast<size_t>(PrintEstimatedStatistics::ETimeMode::Count)> machine_TO_last_next_interaction { -1 }; + std::map<RemainingTimeType, std::array<int32_t, static_cast<size_t>(PrintEstimatedStatistics::ETimeMode::Count)>> machine_TO_last_time_elapsed{ {rtM73,{ -1 }},{rtM117,{ -1 }} }; + std::map<RemainingTimeType, std::array<int32_t, static_cast<size_t>(PrintEstimatedStatistics::ETimeMode::Count)>> machine_TO_last_time_left{ {rtM73,{ -1 }},{rtM117,{ -1 }} }; + std::map<RemainingTimeType, std::array<int32_t, static_cast<size_t>(PrintEstimatedStatistics::ETimeMode::Count)>> machine_TO_last_next_interaction{ {rtM73,{ -1 }},{rtM117,{ -1 }} }; auto print_M73 = [&](const TimeMachine& machine, const float time_elapsed_seconds, const float next_interaction_seconds, unsigned int& extra_lines_count) { std::string ret; - int32_t& last_time_elapsed = machine_TO_last_time_elapsed[(size_t)machine.time_mode]; - int32_t& last_time_left = machine_TO_last_time_left[(size_t)machine.time_mode]; - int32_t& last_next_interaction = machine_TO_last_next_interaction[(size_t)machine.time_mode]; const float total_time_seconds = machine.time; const float time_left_seconds = total_time_seconds - time_elapsed_seconds; // P Percent in normal mode ; R Time remaining in normal mode(minutes) ; C Time to change / pause / user interaction - if (machine.remaining_times_type == rtM73 || machine.remaining_times_type == rtM73_Quiet) { - auto m73_pr = machine.remaining_times_type == rtM73 ? "M73 P%1% R%2%\n" : "M73 Q%1% S%2%\n"; - auto m73_c = machine.remaining_times_type == rtM73 ? "M73 C%1%\n" : "M73 D%1%\n"; + if ((machine.remaining_times_type & rtM73) != 0 || (machine.remaining_times_type & rtM73_Quiet) != 0 ) { + int32_t& last_time_elapsed = machine_TO_last_time_elapsed[rtM73][(size_t)machine.time_mode]; + int32_t& last_time_left = machine_TO_last_time_left[rtM73][(size_t)machine.time_mode]; + int32_t& last_next_interaction = machine_TO_last_next_interaction[rtM73][(size_t)machine.time_mode]; + auto m73_pr = (machine.remaining_times_type & rtM73) != 0 ? "M73 P%1% R%2%\n" : "M73 Q%1% S%2%\n"; + auto m73_c = (machine.remaining_times_type & rtM73) != 0 ? "M73 C%1%\n" : "M73 D%1%\n"; int32_t time_elapsed = total_time_seconds == 0 ? 0 : int32_t(time_elapsed_seconds * 100 / total_time_seconds); int32_t time_left = time_in_minutes(time_left_seconds); int32_t next_interaction = time_in_minutes(next_interaction_seconds); @@ -422,8 +422,12 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename, st last_next_interaction = next_interaction; ++extra_lines_count; } - } else if (machine.remaining_times_type == rtM117) { - if (next_interaction_seconds <= 0 || total_time_seconds == 0) { + } + if ((machine.remaining_times_type & rtM117) != 0) { + int32_t& last_time_elapsed = machine_TO_last_time_elapsed[rtM117][(size_t)machine.time_mode]; + int32_t& last_time_left = machine_TO_last_time_left[rtM117][(size_t)machine.time_mode]; + int32_t& last_next_interaction = machine_TO_last_next_interaction[rtM117][(size_t)machine.time_mode]; + if (time_left_seconds <= 0 || total_time_seconds == 0) { ret += "M117 Time Left 0s\n"; } else { int32_t time_elapsed = int32_t(time_elapsed_seconds); diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index b6c90fbb8..baf9ed50d 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -13,7 +13,6 @@ #include "TriangleMesh.hpp" #include "Arrange.hpp" #include "CustomGCode.hpp" -#include "enum_bitmask.hpp" #include <map> #include <memory> diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index b1f19f0c3..78d6fa0d0 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -238,6 +238,7 @@ static const t_config_enum_values s_keys_map_RemainingTimeType{ { "m117", rtM117 }, { "m73", rtM73 }, { "m73q", rtM73_Quiet }, + { "m73m117", rtM73_M117 }, { "none", rtNone }, }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(RemainingTimeType) @@ -3112,8 +3113,10 @@ void PrintConfigDef::init_fff_params() def->enum_keys_map = &ConfigOptionEnum<RemainingTimeType>::get_enum_values(); def->enum_values.push_back("m117"); def->enum_values.push_back("m73"); + def->enum_values.push_back("m73m117"); def->enum_labels.push_back(L("M117")); def->enum_labels.push_back(L("M73")); + def->enum_labels.push_back(L("M73 & M117")); def->set_default_value(new ConfigOptionEnum<RemainingTimeType>(RemainingTimeType::rtM73)); def = this->add("silent_mode", coBool); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index e141e8a2f..747b6c0f2 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -195,12 +195,29 @@ enum InfillConnection { icConnected, icHoles, icOuterShell, icNotConnected, }; -enum RemainingTimeType { - rtM117, - rtM73, - rtM73_Quiet, - rtNone, +enum RemainingTimeType : uint8_t{ + rtNone = 0, + rtM117 = 1<<0, + rtM73 = 1<<1, + rtM73_Quiet = 1<<2, + rtM73_M117 = rtM73 | rtM117, }; +//note: check if the enum_bitmask can't be used (and improve it?) +inline RemainingTimeType operator|(RemainingTimeType a, RemainingTimeType b) { + return static_cast<RemainingTimeType>(static_cast<uint64_t>(a) | static_cast<uint64_t>(b)); +} +inline RemainingTimeType operator&(RemainingTimeType a, RemainingTimeType b) { + return static_cast<RemainingTimeType>(static_cast<uint64_t>(a) & static_cast<uint64_t>(b)); +} +inline RemainingTimeType operator^(RemainingTimeType a, RemainingTimeType b) { + return static_cast<RemainingTimeType>(static_cast<uint64_t>(a) ^ static_cast<uint64_t>(b)); +} +inline RemainingTimeType operator|=(RemainingTimeType& a, RemainingTimeType b) { + a = a | b; return a; +} +inline RemainingTimeType operator&=(RemainingTimeType& a, RemainingTimeType b) { + a = a & b; return a; +} enum SupportZDistanceType { zdFilament, zdPlane, zdNone, |