Skip to content

Commit

Permalink
Ony one perimeter on first layer
Browse files Browse the repository at this point in the history
  • Loading branch information
Vovodroid authored and vovodroid committed Feb 14, 2024
1 parent 3dd7a59 commit b9317f3
Show file tree
Hide file tree
Showing 8 changed files with 20 additions and 2 deletions.
7 changes: 7 additions & 0 deletions src/libslic3r/PerimeterGenerator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1115,6 +1115,10 @@ void PerimeterGenerator::process_arachne(
// extra perimeters for each one
// detect how many perimeters must be generated for this island
int loop_number = params.config.perimeters + surface.extra_perimeters - 1; // 0-indexed loops

if (params.config.only_one_perimeter_first && params.layer_id == 0)
loop_number = 0;

ExPolygons last = offset_ex(surface.expolygon.simplify_p(params.scaled_resolution), - float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.));
Polygons last_p = to_polygons(last);

Expand Down Expand Up @@ -1376,6 +1380,9 @@ void PerimeterGenerator::process_classic(
// extra perimeters for each one
// detect how many perimeters must be generated for this island
int loop_number = params.config.perimeters + surface.extra_perimeters - 1; // 0-indexed loops

if (params.config.only_one_perimeter_first && params.layer_id == 0)
loop_number = 0;
ExPolygons last = union_ex(surface.expolygon.simplify_p(params.scaled_resolution));
ExPolygons gaps;
if (loop_number >= 0) {
Expand Down
1 change: 1 addition & 0 deletions src/libslic3r/Preset.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,7 @@ void Preset::set_visible_from_appconfig(const AppConfig &app_config)

static std::vector<std::string> s_Preset_print_options {
"layer_height", "first_layer_height", "perimeters", "spiral_vase", "slice_closing_radius", "slicing_mode",
"only_one_perimeter_first",
"top_solid_layers", "top_solid_min_thickness", "bottom_solid_layers", "bottom_solid_min_thickness",
"extra_perimeters", "extra_perimeters_on_overhangs", "avoid_crossing_curled_overhangs", "avoid_crossing_perimeters", "thin_walls", "overhangs",
"seam_position","staggered_inner_seams", "external_perimeters_first", "fill_density", "fill_pattern", "top_fill_pattern", "bottom_fill_pattern",
Expand Down
6 changes: 6 additions & 0 deletions src/libslic3r/PrintConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -618,6 +618,12 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(1));

def = this->add("only_one_perimeter_first", coBool);
def->label = L("on first layer");
def->category = L("Layers and Perimeters");
def->tooltip = L("Print one perimeter on first layer to leave more space for infill. Could be usefull for small details and better look.");
def->set_default_value(new ConfigOptionBool(false));

def = this->add("bridge_speed", coFloat);
def->label = L("Bridges");
def->category = L("Speed");
Expand Down
1 change: 1 addition & 0 deletions src/libslic3r/PrintConfig.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -666,6 +666,7 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionFloat, top_solid_min_thickness))
((ConfigOptionFloatOrPercent, top_solid_infill_speed))
((ConfigOptionBool, wipe_into_infill))
((ConfigOptionBool, only_one_perimeter_first))
)

PRINT_CONFIG_CLASS_DEFINE(
Expand Down
1 change: 1 addition & 0 deletions src/libslic3r/PrintObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -714,6 +714,7 @@ bool PrintObject::invalidate_state_by_config_options(
steps.emplace_back(posSupportMaterial);
} else if (
opt_key == "perimeters"
|| opt_key == "only_one_perimeter_first"
|| opt_key == "extra_perimeters"
|| opt_key == "extra_perimeters_on_overhangs"
|| opt_key == "first_layer_extrusion_width"
Expand Down
3 changes: 2 additions & 1 deletion src/slic3r/GUI/ConfigManipulation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,8 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig* config)
for (auto el : { "extra_perimeters","extra_perimeters_on_overhangs", "thin_walls", "overhangs",
"seam_position","staggered_inner_seams", "external_perimeters_first", "external_perimeter_extrusion_width",
"perimeter_speed", "small_perimeter_speed", "external_perimeter_speed", "enable_dynamic_overhang_speeds"
"bridge_fan_internal_perimeter", "bridge_fan_external_perimeter"})
"bridge_fan_internal_perimeter", "bridge_fan_external_perimeter",
"only_one_perimeter_first"})
toggle_field(el, have_perimeters);

for (size_t i = 0; i < 4; i++) {
Expand Down
2 changes: 1 addition & 1 deletion src/slic3r/GUI/Plater.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2131,7 +2131,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
"extruder_colour", "filament_colour", "material_colour", "max_print_height", "printer_model", "printer_notes", "printer_technology",
// These values are necessary to construct SlicingParameters by the Canvas3D variable layer height editor.
"layer_height", "first_layer_height", "min_layer_height", "max_layer_height",
"brim_width", "perimeters", "perimeter_extruder", "fill_density", "infill_extruder", "top_solid_layers",
"brim_width", "perimeters", "only_one_perimeter_first", "perimeter_extruder", "fill_density", "infill_extruder", "top_solid_layers",
"support_material", "support_material_extruder", "support_material_interface_extruder",
"support_material_contact_distance", "support_material_bottom_contact_distance", "raft_layers"
}))
Expand Down
1 change: 1 addition & 0 deletions src/slic3r/GUI/Tab.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1472,6 +1472,7 @@ void TabPrint::build()
optgroup->append_line(line);

optgroup = page->new_optgroup(L("Quality (slower slicing)"));
line.append_option(optgroup->get_option("only_one_perimeter_first"));
optgroup->append_single_option_line("extra_perimeters", category_path + "extra-perimeters-if-needed");
optgroup->append_single_option_line("extra_perimeters_on_overhangs", category_path + "extra-perimeters-on-overhangs");
optgroup->append_single_option_line("avoid_crossing_curled_overhangs", category_path + "avoid-crossing-curled-overhangs");
Expand Down

0 comments on commit b9317f3

Please sign in to comment.