Make Overhang Printable (#1615)

* First working conical overhang impl

* Add settings for Make overhang printable

* Added an Advanced setting to the Quality menu for Make overhang printable
* Allow toggling the feature and adjusting the angle threshold

* Retain recesses in the bottom of the model when "Make Overhangs Printable" is turned on

* Add settings for Make overhang printable hole size

* Allow disabling conical overhang per modifier

* Should check upper layer instead

* Skip unnecessary layers

* Apply conical overhang before any size compensation
which fixs the `lslices` not being updated issue and also the elephant foot compensation

* 1. Fix an issue that changing make_overhang_printable related parameters won't clear caches properly.
2. Tweak the logic of make_overhang_printable parameter so that it works for per region/object/print level. Remove make_overhang_printable_disable parameter.

* Change default make_overhang_printable_angle to 55

* One more missing commit

* 1. Skip checking default_region_config()->make_overhang_printable
2. Handle make_overhang_printable_angle and make_overhang_printable_hole_size value change

---------

Co-authored-by: David Bern <odie5533@users.noreply.github.com>
Co-authored-by: SoftFever <softfeverever@gmail.com>
This commit is contained in:
Noisyfox
2023-07-30 20:20:43 +08:00
committed by GitHub
parent ab6649da8a
commit b571318be8
11 changed files with 164 additions and 5 deletions

View File

@@ -2371,6 +2371,35 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionString("{input_filename_base}_{filament_type[0]}_{print_time}.gcode"));
def = this->add("make_overhang_printable", coBool);
def->label = L("Make overhang printable");
def->category = L("Quality");
def->tooltip = L("Modify the geometry to print overhangs without support material.");
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionBool(false));
def = this->add("make_overhang_printable_angle", coFloat);
def->label = L("Make overhang printable maximum angle");
def->category = L("Quality");
def->tooltip = L("Maximum angle of overhangs to allow after making more steep overhangs printable."
"90° will not change the model at all and allow any overhang, while 0 will "
"replace all overhangs with conical material.");
def->sidetext = L("°");
def->mode = comAdvanced;
def->min = 0.;
def->max = 90.;
def->set_default_value(new ConfigOptionFloat(55.));
def = this->add("make_overhang_printable_hole_size", coFloat);
def->label = L("Make overhang printable hole area");
def->category = L("Quality");
def->tooltip = L("Maximum area of a hole in the base of the model before it's filled by conical material."
"A value of 0 will fill all the holes in the model base.");
def->sidetext = L("mm²");
def->mode = comAdvanced;
def->min = 0.;
def->set_default_value(new ConfigOptionFloat(0.));
def = this->add("detect_overhang_wall", coBool);
def->label = L("Detect overhang wall");
def->category = L("Quality");