mirror of
https://github.com/QIDITECH/QIDISlicer.git
synced 2026-01-30 15:38:43 +03:00
add "precise_outer_wall"
This commit is contained in:
@@ -41,8 +41,8 @@ BeadingStrategyPtr BeadingStrategyFactory::makeStrategy(const coord_t preferred_
|
||||
BOOST_LOG_TRIVIAL(trace) << "Applying the Widening Beading meta-strategy with minimum input width " << min_feature_size << " and minimum output width " << min_bead_width << ".";
|
||||
ret = std::make_unique<WideningBeadingStrategy>(std::move(ret), min_feature_size, min_bead_width);
|
||||
}
|
||||
|
||||
if (outer_wall_offset > 0) {
|
||||
//w39
|
||||
if (outer_wall_offset != 0){//if (outer_wall_offset > 0) {
|
||||
BOOST_LOG_TRIVIAL(trace) << "Applying the OuterWallOffset meta-strategy with offset = " << outer_wall_offset << ".";
|
||||
ret = std::make_unique<OuterWallInsetBeadingStrategy>(outer_wall_offset, std::move(ret));
|
||||
}
|
||||
|
||||
@@ -1298,15 +1298,27 @@ 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
|
||||
ExPolygons last = offset_ex(surface.expolygon.simplify_p(params.scaled_resolution), - float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.));
|
||||
//w39
|
||||
//ExPolygons last = offset_ex(surface.expolygon.simplify_p(params.scaled_resolution), - float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.));
|
||||
double surface_simplify_resolution = (params.print_config.arc_fitting != ArcFittingType::Disabled &&
|
||||
params.config.fuzzy_skin == FuzzySkinType::None) ?
|
||||
0.2 * scale_(params.print_config.resolution) :
|
||||
params.print_config.resolution;
|
||||
auto apply_precise_outer_wall = params.config.precise_outer_wall && !params.config.external_perimeters_first;
|
||||
ExPolygons last = apply_precise_outer_wall? offset_ex(surface.expolygon.simplify_p(surface_simplify_resolution),
|
||||
-float(ext_perimeter_width - ext_perimeter_spacing) ) :offset_ex(surface.expolygon.simplify_p(params.scaled_resolution),
|
||||
-float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.));
|
||||
coord_t wall_0_inset = 0;
|
||||
if (apply_precise_outer_wall)
|
||||
wall_0_inset = -coord_t(ext_perimeter_width / 2 - ext_perimeter_spacing / 2);
|
||||
Polygons last_p = to_polygons(last);
|
||||
|
||||
//w16
|
||||
//w23
|
||||
if ((upper_slices == nullptr && params.object_config.top_one_wall_type == TopOneWallType::Onlytopmost)||(params.object_config.only_one_wall_first_layer && layer_id == 0))
|
||||
loop_number = 0;
|
||||
|
||||
Arachne::WallToolPaths wallToolPaths(last_p, ext_perimeter_spacing, perimeter_spacing, coord_t(loop_number + 1), 0, params.layer_height, params.object_config, params.print_config);
|
||||
//w39
|
||||
Arachne::WallToolPaths wallToolPaths(last_p, ext_perimeter_spacing, perimeter_spacing, coord_t(loop_number + 1), wall_0_inset, params.layer_height, params.object_config, params.print_config);
|
||||
std::vector<Arachne::VariableWidthLines> perimeters = wallToolPaths.getToolPaths();
|
||||
loop_number = int(perimeters.size()) - 1;
|
||||
|
||||
@@ -1583,7 +1595,20 @@ void PerimeterGenerator::process_with_one_wall_arachne(
|
||||
//w23
|
||||
if (params.object_config.only_one_wall_first_layer && 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.));
|
||||
//w39
|
||||
//ExPolygons last = offset_ex(surface.expolygon.simplify_p(params.scaled_resolution), - float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.));
|
||||
double surface_simplify_resolution = (params.print_config.arc_fitting != ArcFittingType::Disabled &&
|
||||
params.config.fuzzy_skin == FuzzySkinType::None) ?
|
||||
0.2 * scale_(params.print_config.resolution) :
|
||||
params.print_config.resolution;
|
||||
auto apply_precise_outer_wall = params.config.precise_outer_wall && !params.config.external_perimeters_first;
|
||||
ExPolygons last = apply_precise_outer_wall ? offset_ex(surface.expolygon.simplify_p(surface_simplify_resolution),
|
||||
-float(ext_perimeter_width - ext_perimeter_spacing)) :
|
||||
offset_ex(surface.expolygon.simplify_p(params.scaled_resolution),
|
||||
-float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.));
|
||||
coord_t wall_0_inset = 0;
|
||||
if (apply_precise_outer_wall)
|
||||
wall_0_inset = -coord_t(ext_perimeter_width / 2 - ext_perimeter_spacing / 2);
|
||||
Polygons last_p = to_polygons(last);
|
||||
|
||||
int remain_loops = -1;
|
||||
@@ -1593,8 +1618,8 @@ void PerimeterGenerator::process_with_one_wall_arachne(
|
||||
|
||||
loop_number = 0;
|
||||
}
|
||||
|
||||
Arachne::WallToolPaths wallToolPaths(last_p, ext_perimeter_spacing, perimeter_spacing, coord_t(loop_number + 1), 0, params.layer_height, params.object_config, params.print_config);
|
||||
//w39
|
||||
Arachne::WallToolPaths wallToolPaths(last_p, ext_perimeter_spacing, perimeter_spacing, coord_t(loop_number + 1), wall_0_inset, params.layer_height, params.object_config, params.print_config);
|
||||
std::vector<Arachne::VariableWidthLines> perimeters = wallToolPaths.getToolPaths();
|
||||
loop_number = int(perimeters.size()) - 1;
|
||||
|
||||
@@ -1952,7 +1977,13 @@ void PerimeterGenerator::process_classic(
|
||||
// external perimeters
|
||||
coord_t ext_perimeter_width = params.ext_perimeter_flow.scaled_width();
|
||||
coord_t ext_perimeter_spacing = params.ext_perimeter_flow.scaled_spacing();
|
||||
coord_t ext_perimeter_spacing2 = scaled<coord_t>(0.5f * (params.ext_perimeter_flow.spacing() + params.perimeter_flow.spacing()));
|
||||
coord_t ext_perimeter_spacing2; //= scaled<coord_t>(0.5f * (params.ext_perimeter_flow.spacing() + params.perimeter_flow.spacing()));
|
||||
//w39
|
||||
if (params.config.precise_outer_wall && !params.config.external_perimeters_first)
|
||||
ext_perimeter_spacing2 = scaled<coord_t>(0.5f * (params.ext_perimeter_flow.width() + params.perimeter_flow.width()));
|
||||
else
|
||||
ext_perimeter_spacing2 = scaled<coord_t>(0.5f * (params.ext_perimeter_flow.spacing() + params.perimeter_flow.spacing()));
|
||||
|
||||
// solid infill
|
||||
coord_t solid_infill_spacing = params.solid_infill_flow.scaled_spacing();
|
||||
|
||||
|
||||
@@ -496,7 +496,9 @@ static std::vector<std::string> s_Preset_print_options {
|
||||
//w33
|
||||
,"ironing_pattern"
|
||||
//w38
|
||||
,"overhang_reverse","overhang_reverse_internal_only","overhang_reverse_threshold"};
|
||||
,"overhang_reverse","overhang_reverse_internal_only","overhang_reverse_threshold"
|
||||
//w39
|
||||
,"precise_outer_wall"};
|
||||
|
||||
static std::vector<std::string> s_Preset_filament_options {
|
||||
"filament_colour", "filament_diameter", "filament_type", "filament_soluble", "filament_notes", "filament_max_volumetric_speed",
|
||||
|
||||
@@ -332,6 +332,13 @@ void PrintConfigDef::init_common_params()
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionBool(0));
|
||||
|
||||
//w39
|
||||
def = this->add("precise_outer_wall", coBool);
|
||||
def->label = L("Precise wall");
|
||||
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 = this->add("thumbnails", coString);
|
||||
def->label = L("G-code thumbnails");
|
||||
def->tooltip = L("Picture sizes to be stored into a .gcode / .bgcode and .sl1 / .sl1s files, in the following format: \"XxY/EXT, XxY/EXT, ...\"\n"
|
||||
|
||||
@@ -680,7 +680,8 @@ PRINT_CONFIG_CLASS_DEFINE(
|
||||
((ConfigOptionBool, overhang_reverse))
|
||||
((ConfigOptionBool, overhang_reverse_internal_only))
|
||||
((ConfigOptionFloatOrPercent, overhang_reverse_threshold))
|
||||
)
|
||||
//w39
|
||||
((ConfigOptionBool, precise_outer_wall)))
|
||||
|
||||
PRINT_CONFIG_CLASS_DEFINE(
|
||||
MachineEnvelopeConfig,
|
||||
|
||||
@@ -852,7 +852,9 @@ bool PrintObject::invalidate_state_by_config_options(
|
||||
|| opt_key == "fuzzy_skin_point_dist"
|
||||
|| opt_key == "overhangs"
|
||||
|| opt_key == "thin_walls"
|
||||
|| opt_key == "thick_bridges") {
|
||||
|| opt_key == "thick_bridges"
|
||||
//w39
|
||||
|| opt_key == "precise_outer_wall") {
|
||||
steps.emplace_back(posPerimeters);
|
||||
steps.emplace_back(posSupportMaterial);
|
||||
} else if (opt_key == "bridge_flow_ratio") {
|
||||
|
||||
@@ -1708,6 +1708,7 @@ void TabPrint::build()
|
||||
optgroup->append_single_option_line("elefant_foot_compensation_layers");
|
||||
//w27
|
||||
optgroup->append_single_option_line("precise_z_height");
|
||||
optgroup->append_single_option_line("precise_outer_wall", "Precise-wall");
|
||||
|
||||
optgroup = page->new_optgroup(L("Arachne perimeter generator"));
|
||||
optgroup->append_single_option_line("wall_transition_angle");
|
||||
@@ -3032,6 +3033,8 @@ void TabPrinter::build_sla()
|
||||
optgroup->append_single_option_line("elefant_foot_min_width");
|
||||
//w27
|
||||
optgroup->append_single_option_line("precise_z_height");
|
||||
//w39
|
||||
optgroup->append_single_option_line("precise_outer_wall", "Precise-wall");
|
||||
|
||||
optgroup->append_single_option_line("gamma_correction");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user