mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-07-13 19:31:52 +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:solid_over_perimeters
|
||||||
setting:enforce_full_fill_volume
|
setting:enforce_full_fill_volume
|
||||||
group:Quality
|
group:Quality
|
||||||
line:Only one perimeter on Top surfaces
|
line:Only one perimeter
|
||||||
setting:label$ :only_one_perimeter_top
|
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
|
setting:label$Minimum width:sidetext_width$7:min_width_top_surface
|
||||||
end_line
|
end_line
|
||||||
line:Extra perimeters
|
line:Extra perimeters
|
||||||
setting:extra_perimeters_overhangs
|
setting:label_width$8:extra_perimeters_overhangs
|
||||||
setting:extra_perimeters_odd_layers
|
setting:label_width$10:extra_perimeters_odd_layers
|
||||||
end_line
|
end_line
|
||||||
setting:ensure_vertical_shell_thickness
|
setting:ensure_vertical_shell_thickness
|
||||||
line:Avoid crossing perimeters
|
line:Avoid crossing perimeters
|
||||||
setting:label$_: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
|
setting:avoid_crossing_perimeters_max_detour
|
||||||
end_line
|
end_line
|
||||||
line:Overlapping external perimeter
|
line:Overlapping external perimeter
|
||||||
setting:label$_:thin_perimeters
|
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
|
end_line
|
||||||
line:Thin walls
|
line:Thin walls
|
||||||
setting:label$_:thin_walls
|
setting:label$_:thin_walls
|
||||||
|
@ -165,6 +165,7 @@ void Layer::make_perimeters()
|
|||||||
&& config.infill_dense == other_config.infill_dense
|
&& config.infill_dense == other_config.infill_dense
|
||||||
&& config.infill_dense_algo == other_config.infill_dense_algo
|
&& config.infill_dense_algo == other_config.infill_dense_algo
|
||||||
&& config.no_perimeter_unsupported_algo == other_config.no_perimeter_unsupported_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_config.only_one_perimeter_top
|
||||||
&& config.only_one_perimeter_top_other_algo == other_config.only_one_perimeter_top_other_algo
|
&& config.only_one_perimeter_top_other_algo == other_config.only_one_perimeter_top_other_algo
|
||||||
&& config.overhangs_width_speed == other_config.overhangs_width_speed
|
&& 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
|
int loop_number = this->config->perimeters + surface.extra_perimeters - 1 + extra_odd_perimeter; // 0-indexed loops
|
||||||
surface_idx++;
|
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;
|
loop_number = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -678,7 +678,7 @@ void PerimeterGenerator::process()
|
|||||||
last = std::move(next_onion);
|
last = std::move(next_onion);
|
||||||
|
|
||||||
//store surface for top infill if only_one_perimeter_top
|
//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) {
|
if (this->config->only_one_perimeter_top_other_algo) {
|
||||||
//split the polygons with top/not_top
|
//split the polygons with top/not_top
|
||||||
//get the offset from solid surface anchor
|
//get the offset from solid surface anchor
|
||||||
|
@ -451,6 +451,7 @@ const std::vector<std::string>& Preset::print_options()
|
|||||||
"extra_perimeters",
|
"extra_perimeters",
|
||||||
"extra_perimeters_odd_layers",
|
"extra_perimeters_odd_layers",
|
||||||
"extra_perimeters_overhangs",
|
"extra_perimeters_overhangs",
|
||||||
|
"only_one_perimeter_first_layer",
|
||||||
"only_one_perimeter_top",
|
"only_one_perimeter_top",
|
||||||
"only_one_perimeter_top_other_algo",
|
"only_one_perimeter_top_other_algo",
|
||||||
"ensure_vertical_shell_thickness",
|
"ensure_vertical_shell_thickness",
|
||||||
|
@ -1071,6 +1071,12 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionBool(false));
|
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 = this->add("only_one_perimeter_top", coBool);
|
||||||
def->label = L("Only one perimeter on Top surfaces");
|
def->label = L("Only one perimeter on Top surfaces");
|
||||||
def->category = OptionCategory::perimeter;
|
def->category = OptionCategory::perimeter;
|
||||||
@ -5742,6 +5748,7 @@ std::unordered_set<std::string> prusa_export_to_remove_keys = {
|
|||||||
"no_perimeter_unsupported_algo",
|
"no_perimeter_unsupported_algo",
|
||||||
"only_one_perimeter_top_other_algo",
|
"only_one_perimeter_top_other_algo",
|
||||||
"only_one_perimeter_top",
|
"only_one_perimeter_top",
|
||||||
|
"only_one_perimeter_first_layer",
|
||||||
"over_bridge_flow_ratio",
|
"over_bridge_flow_ratio",
|
||||||
"overhangs_reverse_threshold",
|
"overhangs_reverse_threshold",
|
||||||
"overhangs_reverse",
|
"overhangs_reverse",
|
||||||
|
@ -781,6 +781,7 @@ public:
|
|||||||
ConfigOptionBool extra_perimeters;
|
ConfigOptionBool extra_perimeters;
|
||||||
ConfigOptionBool extra_perimeters_odd_layers;
|
ConfigOptionBool extra_perimeters_odd_layers;
|
||||||
ConfigOptionBool extra_perimeters_overhangs;
|
ConfigOptionBool extra_perimeters_overhangs;
|
||||||
|
ConfigOptionBool only_one_perimeter_first_layer;
|
||||||
ConfigOptionBool only_one_perimeter_top;
|
ConfigOptionBool only_one_perimeter_top;
|
||||||
ConfigOptionBool only_one_perimeter_top_other_algo;
|
ConfigOptionBool only_one_perimeter_top_other_algo;
|
||||||
ConfigOptionFloat fill_angle;
|
ConfigOptionFloat fill_angle;
|
||||||
@ -898,6 +899,7 @@ protected:
|
|||||||
OPT_PTR(extra_perimeters);
|
OPT_PTR(extra_perimeters);
|
||||||
OPT_PTR(extra_perimeters_odd_layers);
|
OPT_PTR(extra_perimeters_odd_layers);
|
||||||
OPT_PTR(extra_perimeters_overhangs);
|
OPT_PTR(extra_perimeters_overhangs);
|
||||||
|
OPT_PTR(only_one_perimeter_first_layer);
|
||||||
OPT_PTR(only_one_perimeter_top);
|
OPT_PTR(only_one_perimeter_top);
|
||||||
OPT_PTR(only_one_perimeter_top_other_algo);
|
OPT_PTR(only_one_perimeter_top_other_algo);
|
||||||
OPT_PTR(fill_angle);
|
OPT_PTR(fill_angle);
|
||||||
|
@ -731,6 +731,7 @@ namespace Slic3r {
|
|||||||
opt_key == "gap_fill"
|
opt_key == "gap_fill"
|
||||||
|| opt_key == "gap_fill_last"
|
|| opt_key == "gap_fill_last"
|
||||||
|| opt_key == "gap_fill_min_area"
|
|| 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"
|
||||||
|| opt_key == "only_one_perimeter_top_other_algo"
|
|| opt_key == "only_one_perimeter_top_other_algo"
|
||||||
|| opt_key == "overhangs_width_speed"
|
|| opt_key == "overhangs_width_speed"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user