mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-07-13 05:01:47 +08:00
Add 'only one perimeter on first layer' as doing it manually via modifier wreck solid bottom layer count
supermerill/SuperSlicer#289 supermerill/SuperSlicer#584 supermerill/SuperSlicer#1566
This commit is contained in:
parent
092f7771c1
commit
51d5b71509
@ -17,23 +17,24 @@ group:Horizontal shells
|
||||
setting:solid_over_perimeters
|
||||
setting:enforce_full_fill_volume
|
||||
group:Quality
|
||||
line:Only one perimeter on Top surfaces
|
||||
setting:label$ :only_one_perimeter_top
|
||||
line:Only one perimeter
|
||||
setting:label_width$8:label$On first layer:only_one_perimeter_first_layer
|
||||
setting:label_width$10:label$On top surfaces:only_one_perimeter_top
|
||||
setting:label$Minimum width:sidetext_width$7:min_width_top_surface
|
||||
end_line
|
||||
line:Extra perimeters
|
||||
setting:extra_perimeters_overhangs
|
||||
setting:extra_perimeters_odd_layers
|
||||
setting:label_width$8:extra_perimeters_overhangs
|
||||
setting:label_width$10:extra_perimeters_odd_layers
|
||||
end_line
|
||||
setting:ensure_vertical_shell_thickness
|
||||
line:Avoid crossing perimeters
|
||||
setting:label$_:avoid_crossing_perimeters
|
||||
setting:label$Not on first layer:avoid_crossing_not_first_layer
|
||||
setting:label_width$12:label$Not on first layer:avoid_crossing_not_first_layer
|
||||
setting:avoid_crossing_perimeters_max_detour
|
||||
end_line
|
||||
line:Overlapping external perimeter
|
||||
setting:label$_:thin_perimeters
|
||||
setting:label$Also for all perimeters:thin_perimeters_all
|
||||
setting:label_width$12:label$Also for all perimeters:thin_perimeters_all
|
||||
end_line
|
||||
line:Thin walls
|
||||
setting:label$_:thin_walls
|
||||
|
@ -165,6 +165,7 @@ void Layer::make_perimeters()
|
||||
&& config.infill_dense == other_config.infill_dense
|
||||
&& config.infill_dense_algo == other_config.infill_dense_algo
|
||||
&& config.no_perimeter_unsupported_algo == other_config.no_perimeter_unsupported_algo
|
||||
&& (this->id() == 0 || config.only_one_perimeter_first_layer == other_config.only_one_perimeter_first_layer)
|
||||
&& config.only_one_perimeter_top == other_config.only_one_perimeter_top
|
||||
&& config.only_one_perimeter_top_other_algo == other_config.only_one_perimeter_top_other_algo
|
||||
&& config.overhangs_width_speed == other_config.overhangs_width_speed
|
||||
|
@ -364,7 +364,7 @@ void PerimeterGenerator::process()
|
||||
int loop_number = this->config->perimeters + surface.extra_perimeters - 1 + extra_odd_perimeter; // 0-indexed loops
|
||||
surface_idx++;
|
||||
|
||||
if (this->config->only_one_perimeter_top && loop_number > 0 && this->upper_slices == NULL){
|
||||
if ((layer->id() == 0 && this->config->only_one_perimeter_first_layer) || (this->config->only_one_perimeter_top && loop_number > 0 && this->upper_slices == NULL)){
|
||||
loop_number = 0;
|
||||
}
|
||||
|
||||
@ -678,7 +678,7 @@ void PerimeterGenerator::process()
|
||||
last = std::move(next_onion);
|
||||
|
||||
//store surface for top infill if only_one_perimeter_top
|
||||
if(i==0 && config->only_one_perimeter_top && this->upper_slices != NULL){
|
||||
if(i==0 && ((layer->id() == 0 && this->config->only_one_perimeter_first_layer) || (config->only_one_perimeter_top && this->upper_slices != NULL))){
|
||||
if (this->config->only_one_perimeter_top_other_algo) {
|
||||
//split the polygons with top/not_top
|
||||
//get the offset from solid surface anchor
|
||||
|
@ -451,6 +451,7 @@ const std::vector<std::string>& Preset::print_options()
|
||||
"extra_perimeters",
|
||||
"extra_perimeters_odd_layers",
|
||||
"extra_perimeters_overhangs",
|
||||
"only_one_perimeter_first_layer",
|
||||
"only_one_perimeter_top",
|
||||
"only_one_perimeter_top_other_algo",
|
||||
"ensure_vertical_shell_thickness",
|
||||
|
@ -1071,6 +1071,12 @@ void PrintConfigDef::init_fff_params()
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionBool(false));
|
||||
|
||||
def = this->add("only_one_perimeter_first_layer", coBool);
|
||||
def->label = L("Only one perimeter on First layer");
|
||||
def->category = OptionCategory::perimeter;
|
||||
def->tooltip = L("Use only one perimeter on first layer, to give more space to the top infill pattern.");
|
||||
def->set_default_value(new ConfigOptionBool(false));
|
||||
|
||||
def = this->add("only_one_perimeter_top", coBool);
|
||||
def->label = L("Only one perimeter on Top surfaces");
|
||||
def->category = OptionCategory::perimeter;
|
||||
@ -5742,6 +5748,7 @@ std::unordered_set<std::string> prusa_export_to_remove_keys = {
|
||||
"no_perimeter_unsupported_algo",
|
||||
"only_one_perimeter_top_other_algo",
|
||||
"only_one_perimeter_top",
|
||||
"only_one_perimeter_first_layer",
|
||||
"over_bridge_flow_ratio",
|
||||
"overhangs_reverse_threshold",
|
||||
"overhangs_reverse",
|
||||
|
@ -781,6 +781,7 @@ public:
|
||||
ConfigOptionBool extra_perimeters;
|
||||
ConfigOptionBool extra_perimeters_odd_layers;
|
||||
ConfigOptionBool extra_perimeters_overhangs;
|
||||
ConfigOptionBool only_one_perimeter_first_layer;
|
||||
ConfigOptionBool only_one_perimeter_top;
|
||||
ConfigOptionBool only_one_perimeter_top_other_algo;
|
||||
ConfigOptionFloat fill_angle;
|
||||
@ -898,6 +899,7 @@ protected:
|
||||
OPT_PTR(extra_perimeters);
|
||||
OPT_PTR(extra_perimeters_odd_layers);
|
||||
OPT_PTR(extra_perimeters_overhangs);
|
||||
OPT_PTR(only_one_perimeter_first_layer);
|
||||
OPT_PTR(only_one_perimeter_top);
|
||||
OPT_PTR(only_one_perimeter_top_other_algo);
|
||||
OPT_PTR(fill_angle);
|
||||
|
@ -731,6 +731,7 @@ namespace Slic3r {
|
||||
opt_key == "gap_fill"
|
||||
|| opt_key == "gap_fill_last"
|
||||
|| opt_key == "gap_fill_min_area"
|
||||
|| opt_key == "only_one_perimeter_first_layer"
|
||||
|| opt_key == "only_one_perimeter_top"
|
||||
|| opt_key == "only_one_perimeter_top_other_algo"
|
||||
|| opt_key == "overhangs_width_speed"
|
||||
|
Loading…
x
Reference in New Issue
Block a user