Initial port of the new ensure vertical thickness algorithm from PrusaSlicer (#2382)

* Initial port of the new ensure vertical thickness algorithm from PrusaSlicer.

Based on prusa3d/PrusaSlicer@1a0d8f5130

* Remove code related to "Detect narrow internal solid infill" as it's handled by the new ensuring code

* Support different internal solid infill pattern

* Ignore removed options

---------

Co-authored-by: Pavel Mikuš <pavel.mikus.mail@seznam.cz>
Co-authored-by: SoftFever <softfeverever@gmail.com>
This commit is contained in:
Noisyfox
2023-10-19 06:55:05 -05:00
committed by GitHub
parent ef831ab8b1
commit 075a08bca8
37 changed files with 3792 additions and 489 deletions

View File

@@ -23,6 +23,35 @@
namespace Slic3r::Arachne
{
WallToolPathsParams make_paths_params(const int layer_id, const PrintObjectConfig &print_object_config, const PrintConfig &print_config)
{
WallToolPathsParams input_params;
{
const double min_nozzle_diameter = *std::min_element(print_config.nozzle_diameter.values.begin(), print_config.nozzle_diameter.values.end());
if (const auto &min_feature_size_opt = print_object_config.min_feature_size)
input_params.min_feature_size = min_feature_size_opt.value * 0.01 * min_nozzle_diameter;
if (layer_id == 0) {
if (const auto &initial_layer_min_bead_width_opt = print_object_config.initial_layer_min_bead_width)
input_params.min_bead_width = initial_layer_min_bead_width_opt.value * 0.01 * min_nozzle_diameter;
} else {
if (const auto &min_bead_width_opt = print_object_config.min_bead_width)
input_params.min_bead_width = min_bead_width_opt.value * 0.01 * min_nozzle_diameter;
}
if (const auto &wall_transition_filter_deviation_opt = print_object_config.wall_transition_filter_deviation)
input_params.wall_transition_filter_deviation = wall_transition_filter_deviation_opt.value * 0.01 * min_nozzle_diameter;
if (const auto &wall_transition_length_opt = print_object_config.wall_transition_length)
input_params.wall_transition_length = wall_transition_length_opt.value * 0.01 * min_nozzle_diameter;
input_params.wall_transition_angle = print_object_config.wall_transition_angle.value;
input_params.wall_distribution_count = print_object_config.wall_distribution_count.value;
}
return input_params;
}
WallToolPaths::WallToolPaths(const Polygons& outline, const coord_t bead_width_0, const coord_t bead_width_x,
const size_t inset_count, const coord_t wall_0_inset, const coordf_t layer_height, const WallToolPathsParams &params)
: outline(outline)

View File

@@ -31,6 +31,8 @@ public:
int wall_distribution_count;
};
WallToolPathsParams make_paths_params(const int layer_id, const PrintObjectConfig &print_object_config, const PrintConfig &print_config);
class WallToolPaths
{
public: