apply precise_outer_wall for inner-outer wall seq only

This commit is contained in:
SoftFever 2024-02-22 21:31:51 +08:00
parent 40f17be21f
commit 099e496ce9
2 changed files with 9 additions and 5 deletions

View file

@ -1445,7 +1445,8 @@ void PerimeterGenerator::process_classic()
coord_t ext_perimeter_spacing = this->ext_perimeter_flow.scaled_spacing(); coord_t ext_perimeter_spacing = this->ext_perimeter_flow.scaled_spacing();
coord_t ext_perimeter_spacing2; coord_t ext_perimeter_spacing2;
if(config->precise_outer_wall) // Orca: ignore precise_outer_wall if wall_sequence is not InnerOuter
if(config->precise_outer_wall && this->config->wall_sequence == WallSequence::InnerOuter)
ext_perimeter_spacing2 = scaled<coord_t>(0.5f * (this->ext_perimeter_flow.width() + this->perimeter_flow.width())); ext_perimeter_spacing2 = scaled<coord_t>(0.5f * (this->ext_perimeter_flow.width() + this->perimeter_flow.width()));
else else
ext_perimeter_spacing2 = scaled<coord_t>(0.5f * (this->ext_perimeter_flow.spacing() + this->perimeter_flow.spacing())); ext_perimeter_spacing2 = scaled<coord_t>(0.5f * (this->ext_perimeter_flow.spacing() + this->perimeter_flow.spacing()));
@ -2173,9 +2174,11 @@ void PerimeterGenerator::process_arachne()
const bool is_topmost_layer = (this->upper_slices == nullptr) ? true : false; const bool is_topmost_layer = (this->upper_slices == nullptr) ? true : false;
if (is_topmost_layer && loop_number > 0 && config->only_one_wall_top) if (is_topmost_layer && loop_number > 0 && config->only_one_wall_top)
loop_number = 0; loop_number = 0;
auto apply_precise_outer_wall = config->precise_outer_wall && this->config->wall_sequence == WallSequence::InnerOuter;
// Orca: properly adjust offset for the outer wall if precise_outer_wall is enabled. // Orca: properly adjust offset for the outer wall if precise_outer_wall is enabled.
ExPolygons last = offset_ex(surface.expolygon.simplify_p(surface_simplify_resolution), ExPolygons last = offset_ex(surface.expolygon.simplify_p(surface_simplify_resolution),
config->precise_outer_wall ? -float(ext_perimeter_width - ext_perimeter_spacing ) apply_precise_outer_wall? -float(ext_perimeter_width - ext_perimeter_spacing )
: -float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.)); : -float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.));
Arachne::WallToolPathsParams input_params = Arachne::make_paths_params(this->layer_id, *object_config, *print_config); Arachne::WallToolPathsParams input_params = Arachne::make_paths_params(this->layer_id, *object_config, *print_config);
@ -2183,7 +2186,7 @@ void PerimeterGenerator::process_arachne()
input_params.is_top_or_bottom_layer = (is_bottom_layer || is_topmost_layer) ? true : false; input_params.is_top_or_bottom_layer = (is_bottom_layer || is_topmost_layer) ? true : false;
coord_t wall_0_inset = 0; coord_t wall_0_inset = 0;
if (config->precise_outer_wall) if (apply_precise_outer_wall)
wall_0_inset = -coord_t(ext_perimeter_width / 2 - ext_perimeter_spacing / 2); wall_0_inset = -coord_t(ext_perimeter_width / 2 - ext_perimeter_spacing / 2);
std::vector<Arachne::VariableWidthLines> out_shell; std::vector<Arachne::VariableWidthLines> out_shell;

View file

@ -895,9 +895,10 @@ void PrintConfigDef::init_fff_params()
def = this->add("precise_outer_wall",coBool); def = this->add("precise_outer_wall",coBool);
def->label = L("Precise wall(experimental)"); def->label = L("Precise wall");
def->category = L("Quality"); def->category = L("Quality");
def->tooltip = L("Improve shell precision by adjusting outer wall spacing. This also improves layer consistency."); def->tooltip = L("Improve shell precision by adjusting outer wall spacing. This also improves layer consistency.\nNote: This setting "
"will only take effect if the wall sequence is configured to Inner-Outer");
def->set_default_value(new ConfigOptionBool{false}); def->set_default_value(new ConfigOptionBool{false});
def = this->add("only_one_wall_top", coBool); def = this->add("only_one_wall_top", coBool);