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:
authorbubnikv <bubnikv@gmail.com>2016-10-22 23:25:00 +0300
committerbubnikv <bubnikv@gmail.com>2016-10-22 23:25:00 +0300
commitcc8b7390eedb6d1d2df87a55bb77fda279703f32 (patch)
treec7ee988ef46e1a81dd22616caadba61ce9a0d975
parentb28d31d0fedf4413018ce722e5336030ed7dde80 (diff)
Make sure the shells for the "ensure verticall wall thickness" featureversion_1.31.1
are thick enough to be actually filled by the rectilinear fill. Otherwise gaps would be left in the sparse infill, causing missing bond to the perimeters.
-rw-r--r--xs/src/libslic3r/PrintObject.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/xs/src/libslic3r/PrintObject.cpp b/xs/src/libslic3r/PrintObject.cpp
index fa13bfe82..0d1148a22 100644
--- a/xs/src/libslic3r/PrintObject.cpp
+++ b/xs/src/libslic3r/PrintObject.cpp
@@ -341,11 +341,15 @@ PrintObject::discover_vertical_shells()
if (! this->_print->regions[idx_region]->config.ensure_vertical_shell_thickness.value)
continue;
for (size_t idx_layer = 0; idx_layer < this->layers.size(); ++ idx_layer) {
- Layer* layer = this->layers[idx_layer];
- LayerRegion* layerm = layer->get_region(idx_region);
+ Layer *layer = this->layers[idx_layer];
+ LayerRegion *layerm = layer->get_region(idx_region);
+ Flow solid_infill_flow = layerm->flow(frSolidInfill);
+ coord_t infill_line_spacing = solid_infill_flow.scaled_spacing();
// Find a union of perimeters below / above this surface to guarantee a minimum shell thickness.
Polygons shell;
+#ifdef SLIC3R_DEBUG_SLICE_PROCESSING
ExPolygons shell_ex;
+#endif /* SLIC3R_DEBUG_SLICE_PROCESSING */
if (1)
{
#ifdef SLIC3R_DEBUG_SLICE_PROCESSING
@@ -390,11 +394,21 @@ PrintObject::discover_vertical_shells()
}
#endif /* SLIC3R_DEBUG_SLICE_PROCESSING */
shell = union_(shell, true);
+ if (! shell.empty()) {
+ // These regions will be filled by a rectilinear full infill. Currently this type of infill
+ // will only fill regions, which will fit at least a single line. To avoid gaps in the sparse infill,
+ // make sure that this region does not contain narrow parts.
+ coord_t min_perimeter_infill_spacing = coord_t(double(infill_line_spacing) * (1. - INSET_OVERLAP_TOLERANCE));
+ shell = offset2(shell, -min_perimeter_infill_spacing/2, min_perimeter_infill_spacing/2);
+ }
#ifdef SLIC3R_DEBUG_SLICE_PROCESSING
shell_ex = union_ex(shell, true);
#endif /* SLIC3R_DEBUG_SLICE_PROCESSING */
}
+ if (shell.empty())
+ continue;
+
#ifdef SLIC3R_DEBUG_SLICE_PROCESSING
{
static size_t idx = 0;