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:
authorVojtech Bubnik <bubnikv@gmail.com>2021-09-22 11:50:04 +0300
committerVojtech Bubnik <bubnikv@gmail.com>2021-09-22 11:50:12 +0300
commit96b88f5b29f14d23f022d627b62e7c64883dcef8 (patch)
treec39fd2995ca61e0ab06a5f110c1feae60ade9389 /src/libslic3r
parent30d13c99b7c30cc5cde966bbdf7a869fad3b593e (diff)
Fixed crash with zero support base spacing.
Zero support base spacing is newly allowed, switching from the "support base" infill pattern to rectilinar infill pattern. Why someone would want to use a solid infill for support base eludes me, but it is simpler to support it instead of working out some rules on minimum support base density. Fixes Support patern spacing set to zero causing crash #6989
Diffstat (limited to 'src/libslic3r')
-rw-r--r--src/libslic3r/SupportMaterial.cpp11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp
index f727d334d..2bcf99c57 100644
--- a/src/libslic3r/SupportMaterial.cpp
+++ b/src/libslic3r/SupportMaterial.cpp
@@ -721,9 +721,9 @@ public:
#ifdef SUPPORT_USE_AGG_RASTERIZER
m_bbox = bbox;
// Oversample the grid to avoid leaking of supports through or around the object walls.
- int oversampling = std::min(8, int(scale_(m_support_spacing) / (scale_(params.extrusion_width) + 100)));
- m_pixel_size = scale_(m_support_spacing / oversampling);
- assert(scale_(params.extrusion_width) + 20 < m_pixel_size);
+ int extrusion_width_scaled = scale_(params.extrusion_width);
+ int oversampling = std::clamp(int(scale_(m_support_spacing) / (extrusion_width_scaled + 100)), 1, 8);
+ m_pixel_size = std::max<double>(extrusion_width_scaled + 21, scale_(m_support_spacing / oversampling));
// Add one empty column / row boundaries.
m_bbox.offset(m_pixel_size);
// Grid size fitting the support polygons plus one pixel boundary around the polygons.
@@ -2600,8 +2600,6 @@ void PrintObjectSupportMaterial::generate_base_layers(
// No top contacts -> no intermediate layers will be produced.
return;
- // coordf_t fillet_radius_scaled = scale_(m_object_config->support_material_spacing);
-
BOOST_LOG_TRIVIAL(debug) << "PrintObjectSupportMaterial::generate_base_layers() in parallel - start";
tbb::parallel_for(
tbb::blocked_range<size_t>(0, intermediate_layers.size()),
@@ -2696,6 +2694,7 @@ void PrintObjectSupportMaterial::generate_base_layers(
layer_intermediate.layer_type = sltBase;
#if 0
+ // coordf_t fillet_radius_scaled = scale_(m_object_config->support_material_spacing);
// Fillet the base polygons and trim them again with the top, interface and contact layers.
$base->{$i} = diff(
offset2(
@@ -3784,7 +3783,7 @@ void PrintObjectSupportMaterial::generate_toolpaths(
// Prepare fillers.
SupportMaterialPattern support_pattern = m_object_config->support_material_pattern;
bool with_sheath = m_object_config->support_material_with_sheath;
- InfillPattern infill_pattern = (support_pattern == smpHoneycomb ? ipHoneycomb : ipSupportBase);
+ InfillPattern infill_pattern = support_pattern == smpHoneycomb ? ipHoneycomb : (support_density < 1.05 ? ipRectilinear : ipSupportBase);
std::vector<float> angles;
angles.push_back(base_angle);