diff options
author | YuSanka <yusanka@gmail.com> | 2022-03-28 09:58:44 +0300 |
---|---|---|
committer | YuSanka <yusanka@gmail.com> | 2022-03-28 09:58:44 +0300 |
commit | 8394d766b78a8548a26edf9b090b2f0fceaf05d4 (patch) | |
tree | e350c1dc60de42776b064feaf06bca38ae0c7546 | |
parent | ea3e3f95b1578acc564eb7fdd5c34935fb5f0e1a (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.cpp | 2 | ||||
-rw-r--r-- | src/libslic3r/PrintConfig.cpp | 16 | ||||
-rw-r--r-- | src/libslic3r/PrintConfig.hpp | 3 | ||||
-rw-r--r-- | src/libslic3r/SLAPrint.cpp | 2 | ||||
-rw-r--r-- | src/libslic3r/SLAPrintSteps.cpp | 56 | ||||
-rw-r--r-- | src/slic3r/GUI/Tab.cpp | 1 |
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"); |