Skip to content

Commit

Permalink
Fixed only one top perimeter for all top surfaces.
Browse files Browse the repository at this point in the history
  • Loading branch information
scottmudge committed Jun 21, 2023
1 parent 478d0ac commit ad8cd62
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
4 changes: 2 additions & 2 deletions src/libslic3r/PerimeterGenerator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1112,7 +1112,7 @@ void PerimeterGenerator::process_arachne(
int loop_number = params.config.perimeters + surface.extra_perimeters - 1; // 0-indexed loops

// Added by smudge
if ((params.layer_id == 0 && params.config.only_one_perimeter_first_layer) || (params.config.only_one_perimeter_top && loop_number > 0 && upper_slices == nullptr))
if ((params.layer_id == 0 && params.config.only_one_perimeter_first_layer) || (params.config.only_one_perimeter_top && loop_number > 0 && surface.is_top()))
loop_number = 0;

ExPolygons last = offset_ex(surface.expolygon.simplify_p(params.scaled_resolution), - float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.));
Expand Down Expand Up @@ -1379,7 +1379,7 @@ void PerimeterGenerator::process_classic(
int loop_number = params.config.perimeters + surface.extra_perimeters - 1; // 0-indexed loops

// Added by smudge
if ((params.layer_id == 0 && params.config.only_one_perimeter_first_layer) || (params.config.only_one_perimeter_top && loop_number > 0 && upper_slices == nullptr))
if ((params.layer_id == 0 && params.config.only_one_perimeter_first_layer) || (params.config.only_one_perimeter_top && loop_number > 0 && surface.is_top()))
loop_number = 0;

ExPolygons last = union_ex(surface.expolygon.simplify_p(params.scaled_resolution));
Expand Down
13 changes: 12 additions & 1 deletion src/libslic3r/PrintObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,9 @@ void PrintObject::make_perimeters()
}
m_typed_slices = false;
}


// Added by Mudge
bool need_check_layer_types = false;
// compare each layer to the one below, and mark those slices needing
// one additional inner perimeter, like the top of domed objects-

Expand All @@ -188,6 +190,8 @@ void PrintObject::make_perimeters()
// hollow objects
for (size_t region_id = 0; region_id < this->num_printing_regions(); ++ region_id) {
const PrintRegion &region = this->printing_region(region_id);
// Added by mudge
if (region.config().only_one_perimeter_top.value) need_check_layer_types = true;
if (! region.config().extra_perimeters || region.config().perimeters == 0 || region.config().fill_density == 0 || this->layer_count() < 2)
continue;

Expand Down Expand Up @@ -251,6 +255,13 @@ void PrintObject::make_perimeters()
BOOST_LOG_TRIVIAL(debug) << "Generating extra perimeters for region " << region_id << " in parallel - end";
}

if (need_check_layer_types) {
BOOST_LOG_TRIVIAL(debug) << "Detecting surface types for only_one_top_perimeter - start";
this->detect_surfaces_type();
m_print->throw_if_canceled();
BOOST_LOG_TRIVIAL(debug) << "Detecting surface types for only_one_top_perimeter - end";
}

BOOST_LOG_TRIVIAL(debug) << "Generating perimeters in parallel - start";
tbb::parallel_for(
tbb::blocked_range<size_t>(0, m_layers.size()),
Expand Down
2 changes: 1 addition & 1 deletion version.inc
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
set(SLIC3R_APP_NAME "PrusaSlicer")
set(SLIC3R_APP_KEY "PrusaSlicer")
set(SLIC3R_VERSION "2.6.0")
set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION} [Mudge Edition]")
set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION} [Enhanced]")
set(SLIC3R_RC_VERSION "2,6,0,0")
set(SLIC3R_RC_VERSION_DOTS "2.6.0.0")

0 comments on commit ad8cd62

Please sign in to comment.