Make sure the shells for the "ensure verticall wall thickness" feature

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.
This commit is contained in:
bubnikv 2016-10-22 22:25:00 +02:00
parent b28d31d0fe
commit cc8b7390ee

View File

@ -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;