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

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libslic3r/GCode/GCodeProcessor.cpp26
-rw-r--r--src/libslic3r/Model.hpp1
-rw-r--r--src/libslic3r/PrintConfig.cpp3
-rw-r--r--src/libslic3r/PrintConfig.hpp27
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,