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

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuSanka <yusanka@gmail.com>2022-03-28 09:58:44 +0300
committerYuSanka <yusanka@gmail.com>2022-03-28 09:58:44 +0300
commit8394d766b78a8548a26edf9b090b2f0fceaf05d4 (patch)
treee350c1dc60de42776b064feaf06bca38ae0c7546
parentea3e3f95b1578acc564eb7fdd5c34935fb5f0e1a (diff)
SLA estimation time: WIP:ys_sla_et
* A calculation of the remained time is ported from the FW * Some missed parameters are added to the Printer Presets
-rw-r--r--src/libslic3r/Preset.cpp2
-rw-r--r--src/libslic3r/PrintConfig.cpp16
-rw-r--r--src/libslic3r/PrintConfig.hpp3
-rw-r--r--src/libslic3r/SLAPrint.cpp2
-rw-r--r--src/libslic3r/SLAPrintSteps.cpp56
-rw-r--r--src/slic3r/GUI/Tab.cpp1
6 files changed, 76 insertions, 4 deletions
diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp
index 2e630b9c8..e5f0d800c 100644
--- a/src/libslic3r/Preset.cpp
+++ b/src/libslic3r/Preset.cpp
@@ -565,7 +565,7 @@ static std::vector<std::string> s_Preset_sla_printer_options {
"display_width", "display_height", "display_pixels_x", "display_pixels_y",
"display_mirror_x", "display_mirror_y",
"display_orientation",
- "fast_tilt_time", "slow_tilt_time", "area_fill",
+ "fast_tilt_time", "slow_tilt_time", "high_viscosity_tilt_time", "area_fill",
"relative_correction",
"relative_correction_x",
"relative_correction_y",
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index b21ed5631..31e7c3afb 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -168,8 +168,9 @@ static const t_config_enum_values s_keys_map_SLAPillarConnectionMode = {
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SLAPillarConnectionMode)
static const t_config_enum_values s_keys_map_SLAMaterialSpeed = {
- {"slow", slamsSlow},
- {"fast", slamsFast}
+ {"slow", slamsSlow},
+ {"fast", slamsFast},
+ {"high_viscosity", slamsHighViscosity}
};
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SLAMaterialSpeed);
@@ -3183,6 +3184,15 @@ void PrintConfigDef::init_sla_params()
def->mode = comExpert;
def->set_default_value(new ConfigOptionFloat(8.));
+ def = this->add("high_viscosity_tilt_time", coFloat);
+ def->label = L("High viscosity");
+ def->full_label = L("High viscosity tilt");
+ def->tooltip = L("Time of the super slow tilt");
+ def->sidetext = L("s");
+ def->min = 0;
+ def->mode = comExpert;
+ def->set_default_value(new ConfigOptionFloat(10.));
+
def = this->add("area_fill", coFloat);
def->label = L("Area fill");
def->tooltip = L("The percentage of the bed area. \nIf the print area exceeds the specified value, \nthen a slow tilt will be used, otherwise - a fast tilt");
@@ -3790,8 +3800,10 @@ void PrintConfigDef::init_sla_params()
def->enum_keys_map = &ConfigOptionEnum<SLAMaterialSpeed>::get_enum_values();
def->enum_values.push_back("slow");
def->enum_values.push_back("fast");
+ def->enum_values.push_back("high_viscosity");
def->enum_labels.push_back(L("Slow"));
def->enum_labels.push_back(L("Fast"));
+ def->enum_labels.push_back(L("High Viscosity"));
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionEnum<SLAMaterialSpeed>(slamsFast));
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index 950816fa9..8f2654aca 100644
--- a/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
@@ -931,7 +931,7 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionFloat, hollowing_closing_distance))
)
-enum SLAMaterialSpeed { slamsSlow, slamsFast };
+enum SLAMaterialSpeed { slamsFast, slamsSlow, slamsHighViscosity };
PRINT_CONFIG_CLASS_DEFINE(
SLAMaterialConfig,
@@ -973,6 +973,7 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionFloat, gamma_correction))
((ConfigOptionFloat, fast_tilt_time))
((ConfigOptionFloat, slow_tilt_time))
+ ((ConfigOptionFloat, high_viscosity_tilt_time))
((ConfigOptionFloat, area_fill))
((ConfigOptionFloat, min_exposure_time))
((ConfigOptionFloat, max_exposure_time))
diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp
index 81ce0d6cb..81fd2fbf7 100644
--- a/src/libslic3r/SLAPrint.cpp
+++ b/src/libslic3r/SLAPrint.cpp
@@ -809,6 +809,7 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector<t_config_opt
"material_correction_x",
"material_correction_y",
"material_correction_z",
+ "material_print_speed",
"relative_correction",
"relative_correction_x",
"relative_correction_y",
@@ -846,6 +847,7 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector<t_config_opt
"output_filename_format",
"fast_tilt_time",
"slow_tilt_time",
+ "high_viscosity_tilt_time",
"area_fill",
"bottle_cost",
"bottle_volume",
diff --git a/src/libslic3r/SLAPrintSteps.cpp b/src/libslic3r/SLAPrintSteps.cpp
index 435e8c8e3..cf843aa9c 100644
--- a/src/libslic3r/SLAPrintSteps.cpp
+++ b/src/libslic3r/SLAPrintSteps.cpp
@@ -880,10 +880,12 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() {
const double area_fill = printer_config.area_fill.getFloat()*0.01;// 0.5 (50%);
const double fast_tilt = printer_config.fast_tilt_time.getFloat();// 5.0;
const double slow_tilt = printer_config.slow_tilt_time.getFloat();// 8.0;
+ const double hv_tilt = printer_config.high_viscosity_tilt_time.getFloat();// 10.0;
const double init_exp_time = material_config.initial_exposure_time.getFloat();
const double exp_time = material_config.exposure_time.getFloat();
+ const double layer_height = m_print->m_default_object_config.layer_height.getFloat();
const int fade_layers_cnt = m_print->m_default_object_config.faded_layers.getInt();// 10 // [3;20]
const auto width = scaled<double>(printer_config.display_width.getFloat());
@@ -906,6 +908,60 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() {
sla::ccr::SpinningMutex mutex;
using Lock = std::lock_guard<sla::ccr::SpinningMutex>;
+ //---------------------------------------------------------------------------
+ // This code relates to the code for FW of SL1S
+ // See https://gitlab.com/prusa3d/sl1/sla-fw/-/blob/1.7/slafw/project/project.py#L485
+
+ int layers_done{ 0 };
+ int slow_layers_done{ 0 };
+ int super_slow_layers_done{ 0 };
+
+ int self_layers_slow = 0; //?
+
+ int time_remain_ms = 0;// sum(sum(x.times_ms) for x in self.layers[layers_done:])
+ int total_layers = printer_input.size();// len(self.layers)
+ // TODO count forced slow layers at the beginning and forced slow layers after slow layer
+ int slow_layers_ = self_layers_slow - slow_layers_done;
+ if (slow_layers_ < 0)
+ slow_layers_ = 0;
+ int fast_layers_ = total_layers - layers_done - slow_layers_ - super_slow_layers_done;
+ // If we are using superSlow profile, there should not be any other
+ int superslow_layers = total_layers - super_slow_layers_done;
+
+ // Fast and slow tilt times
+ if (hv_tilt > 0)
+ if (material_config.material_print_speed == slamsSlow)
+ time_remain_ms += (fast_layers + slow_layers) * slow_tilt * 1000;
+ else if (material_config.material_print_speed == slamsHighViscosity)
+ time_remain_ms += superslow_layers * hv_tilt * 1000;
+ else { // slamsFast
+ time_remain_ms += fast_layers * fast_tilt * 1000;
+ time_remain_ms += slow_layers * slow_tilt * 1000;
+ }
+
+ // Per layer times
+ double exposure_safe_delay_before{ 0.0 };
+ double exposure_high_viscosity_delay_before{ 0.0 };
+ double exposure_slow_move_delay_before{ 0.0 };
+ double delay_before_exposure = 0.0;// self._hw.config.delayBeforeExposure
+ if (material_config.material_print_speed == slamsSlow)
+ delay_before_exposure = exposure_safe_delay_before;
+ else if (material_config.material_print_speed == slamsHighViscosity)
+ delay_before_exposure = exposure_high_viscosity_delay_before;
+ else // slamsFast
+ time_remain_ms += slow_layers * exposure_slow_move_delay_before * 100;
+
+ double delayAfterExposure{ 0.0 };// self._hw.config.delayAfterExposure
+ double exposure_screen_parameters__refresh_delay_ms{ 0.0 };
+ time_remain_ms += (total_layers - layers_done) * (
+ layer_height * 5/*000*/ / 1000 / 1000 // tower move
+ + delay_before_exposure * 100
+ + delayAfterExposure * 100
+ + exposure_screen_parameters__refresh_delay_ms * 5 // ~ 5x frame display wait
+ + 120 // Magical constant to compensate remaining computation delay in exposure thread
+ );
+ //---------------------------------------------------------------------------
+
// Going to parallel:
auto printlayerfn = [this,
// functions and read only vars
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index dc254d1af..41f0e79f9 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -2497,6 +2497,7 @@ void TabPrinter::build_sla()
line = { L("Tilt time"), "" };
line.append_option(optgroup->get_option("fast_tilt_time"));
line.append_option(optgroup->get_option("slow_tilt_time"));
+ line.append_option(optgroup->get_option("high_viscosity_tilt_time"));
optgroup->append_line(line);
optgroup->append_single_option_line("area_fill");