Added a new switch: ensure_vertical_shell_thickness
This enables a zig-zag infill similar to Cura or Simplify3D on overhangs.
This commit is contained in:
parent
7d7f093120
commit
47cc9687a0
@ -240,6 +240,7 @@ The author of the Silk icon set is Mark James.
|
|||||||
|
|
||||||
Quality options (slower slicing):
|
Quality options (slower slicing):
|
||||||
--extra-perimeters Add more perimeters when needed (default: yes)
|
--extra-perimeters Add more perimeters when needed (default: yes)
|
||||||
|
--ensure_vertical_shell_thickness Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top+bottom solid layers). (default: no)
|
||||||
--avoid-crossing-perimeters Optimize travel moves so that no perimeters are crossed (default: no)
|
--avoid-crossing-perimeters Optimize travel moves so that no perimeters are crossed (default: no)
|
||||||
--thin-walls Detect single-width walls (default: yes)
|
--thin-walls Detect single-width walls (default: yes)
|
||||||
--overhangs Experimental option to use bridge flow, speed and fan for overhangs
|
--overhangs Experimental option to use bridge flow, speed and fan for overhangs
|
||||||
|
@ -229,9 +229,9 @@ sub make_fill {
|
|||||||
);
|
);
|
||||||
$f->spacing($internal_flow->spacing);
|
$f->spacing($internal_flow->spacing);
|
||||||
$using_internal_flow = 1;
|
$using_internal_flow = 1;
|
||||||
} elsif ($surface->surface_type == S_TYPE_INTERNALBRIDGE) {
|
# } elsif ($surface->surface_type == S_TYPE_INTERNALBRIDGE) {
|
||||||
# The internal bridging layer will be sparse.
|
# # The internal bridging layer will be sparse.
|
||||||
$f->spacing($flow->spacing * 2.);
|
# $f->spacing($flow->spacing * 2.);
|
||||||
} else {
|
} else {
|
||||||
$f->spacing($flow->spacing);
|
$f->spacing($flow->spacing);
|
||||||
}
|
}
|
||||||
@ -248,6 +248,11 @@ sub make_fill {
|
|||||||
$_,
|
$_,
|
||||||
density => $density/100,
|
density => $density/100,
|
||||||
layer_height => $h,
|
layer_height => $h,
|
||||||
|
#FIXME Vojtech disabled the automatic extrusion width adjustment as this feature quite often
|
||||||
|
# generated extrusions with excessive widths.
|
||||||
|
# The goal of the automatic line width adjustment was to fill in a region without a gap, but because
|
||||||
|
# the filled regions are mostly not aligned with the fill direction, very likely
|
||||||
|
# the extrusion width adjustment causes more harm than good.
|
||||||
dont_adjust => 1,
|
dont_adjust => 1,
|
||||||
), @{ $surface->offset(-scale($f->spacing)/2) };
|
), @{ $surface->offset(-scale($f->spacing)/2) };
|
||||||
|
|
||||||
|
@ -461,7 +461,7 @@ sub build {
|
|||||||
layer_height first_layer_height
|
layer_height first_layer_height
|
||||||
perimeters spiral_vase
|
perimeters spiral_vase
|
||||||
top_solid_layers bottom_solid_layers
|
top_solid_layers bottom_solid_layers
|
||||||
extra_perimeters avoid_crossing_perimeters thin_walls overhangs
|
extra_perimeters ensure_vertical_shell_thickness avoid_crossing_perimeters thin_walls overhangs
|
||||||
seam_position external_perimeters_first
|
seam_position external_perimeters_first
|
||||||
fill_density fill_pattern external_fill_pattern
|
fill_density fill_pattern external_fill_pattern
|
||||||
infill_every_layers infill_only_where_needed
|
infill_every_layers infill_only_where_needed
|
||||||
@ -523,6 +523,7 @@ sub build {
|
|||||||
{
|
{
|
||||||
my $optgroup = $page->new_optgroup('Quality (slower slicing)');
|
my $optgroup = $page->new_optgroup('Quality (slower slicing)');
|
||||||
$optgroup->append_single_option_line('extra_perimeters');
|
$optgroup->append_single_option_line('extra_perimeters');
|
||||||
|
$optgroup->append_single_option_line('ensure_vertical_shell_thickness');
|
||||||
$optgroup->append_single_option_line('avoid_crossing_perimeters');
|
$optgroup->append_single_option_line('avoid_crossing_perimeters');
|
||||||
$optgroup->append_single_option_line('thin_walls');
|
$optgroup->append_single_option_line('thin_walls');
|
||||||
$optgroup->append_single_option_line('overhangs');
|
$optgroup->append_single_option_line('overhangs');
|
||||||
@ -787,7 +788,7 @@ sub _update {
|
|||||||
|
|
||||||
my $have_perimeters = $config->perimeters > 0;
|
my $have_perimeters = $config->perimeters > 0;
|
||||||
$self->get_field($_)->toggle($have_perimeters)
|
$self->get_field($_)->toggle($have_perimeters)
|
||||||
for qw(extra_perimeters thin_walls overhangs seam_position external_perimeters_first
|
for qw(extra_perimeters ensure_vertical_shell_thickness thin_walls overhangs seam_position external_perimeters_first
|
||||||
external_perimeter_extrusion_width
|
external_perimeter_extrusion_width
|
||||||
perimeter_speed small_perimeter_speed external_perimeter_speed);
|
perimeter_speed small_perimeter_speed external_perimeter_speed);
|
||||||
|
|
||||||
|
@ -406,6 +406,7 @@ $j
|
|||||||
|
|
||||||
Quality options (slower slicing):
|
Quality options (slower slicing):
|
||||||
--extra-perimeters Add more perimeters when needed (default: yes)
|
--extra-perimeters Add more perimeters when needed (default: yes)
|
||||||
|
--ensure-vertical-shell-thickness Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top+bottom solid layers). (default: no)
|
||||||
--avoid-crossing-perimeters Optimize travel moves so that no perimeters are crossed (default: no)
|
--avoid-crossing-perimeters Optimize travel moves so that no perimeters are crossed (default: no)
|
||||||
--thin-walls Detect single-width walls (default: yes)
|
--thin-walls Detect single-width walls (default: yes)
|
||||||
--overhangs Experimental option to use bridge flow, speed and fan for overhangs
|
--overhangs Experimental option to use bridge flow, speed and fan for overhangs
|
||||||
|
@ -149,6 +149,13 @@ PrintConfigDef::PrintConfigDef()
|
|||||||
def->height = 120;
|
def->height = 120;
|
||||||
def->default_value = new ConfigOptionString("M104 S0 ; turn off temperature\nG28 X0 ; home X axis\nM84 ; disable motors\n");
|
def->default_value = new ConfigOptionString("M104 S0 ; turn off temperature\nG28 X0 ; home X axis\nM84 ; disable motors\n");
|
||||||
|
|
||||||
|
def = this->add("ensure_vertical_shell_thickness", coBool);
|
||||||
|
def->label = "Ensure vertical shell thickness";
|
||||||
|
def->category = "Layers and Perimeters";
|
||||||
|
def->tooltip = "Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top+bottom solid layers).";
|
||||||
|
def->cli = "ensure-vertical-shell-thickness!";
|
||||||
|
def->default_value = new ConfigOptionBool(false);
|
||||||
|
|
||||||
def = this->add("external_fill_pattern", coEnum);
|
def = this->add("external_fill_pattern", coEnum);
|
||||||
def->label = "Top/bottom fill pattern";
|
def->label = "Top/bottom fill pattern";
|
||||||
def->category = "Infill";
|
def->category = "Infill";
|
||||||
|
@ -206,6 +206,7 @@ class PrintRegionConfig : public virtual StaticPrintConfig
|
|||||||
ConfigOptionInt bottom_solid_layers;
|
ConfigOptionInt bottom_solid_layers;
|
||||||
ConfigOptionFloat bridge_flow_ratio;
|
ConfigOptionFloat bridge_flow_ratio;
|
||||||
ConfigOptionFloat bridge_speed;
|
ConfigOptionFloat bridge_speed;
|
||||||
|
ConfigOptionBool ensure_vertical_shell_thickness;
|
||||||
ConfigOptionEnum<InfillPattern> external_fill_pattern;
|
ConfigOptionEnum<InfillPattern> external_fill_pattern;
|
||||||
ConfigOptionFloatOrPercent external_perimeter_extrusion_width;
|
ConfigOptionFloatOrPercent external_perimeter_extrusion_width;
|
||||||
ConfigOptionFloatOrPercent external_perimeter_speed;
|
ConfigOptionFloatOrPercent external_perimeter_speed;
|
||||||
@ -245,6 +246,7 @@ class PrintRegionConfig : public virtual StaticPrintConfig
|
|||||||
OPT_PTR(bottom_solid_layers);
|
OPT_PTR(bottom_solid_layers);
|
||||||
OPT_PTR(bridge_flow_ratio);
|
OPT_PTR(bridge_flow_ratio);
|
||||||
OPT_PTR(bridge_speed);
|
OPT_PTR(bridge_speed);
|
||||||
|
OPT_PTR(ensure_vertical_shell_thickness);
|
||||||
OPT_PTR(external_fill_pattern);
|
OPT_PTR(external_fill_pattern);
|
||||||
OPT_PTR(external_perimeter_extrusion_width);
|
OPT_PTR(external_perimeter_extrusion_width);
|
||||||
OPT_PTR(external_perimeter_speed);
|
OPT_PTR(external_perimeter_speed);
|
||||||
|
@ -247,7 +247,8 @@ PrintObject::invalidate_state_by_config_options(const std::vector<t_config_optio
|
|||||||
|| *opt_key == "solid_infill_below_area"
|
|| *opt_key == "solid_infill_below_area"
|
||||||
|| *opt_key == "infill_extruder"
|
|| *opt_key == "infill_extruder"
|
||||||
|| *opt_key == "solid_infill_extruder"
|
|| *opt_key == "solid_infill_extruder"
|
||||||
|| *opt_key == "infill_extrusion_width") {
|
|| *opt_key == "infill_extrusion_width"
|
||||||
|
|| *opt_key == "ensure_vertical_shell_thickness") {
|
||||||
steps.insert(posPrepareInfill);
|
steps.insert(posPrepareInfill);
|
||||||
} else if (*opt_key == "external_fill_pattern"
|
} else if (*opt_key == "external_fill_pattern"
|
||||||
|| *opt_key == "fill_angle"
|
|| *opt_key == "fill_angle"
|
||||||
@ -359,6 +360,8 @@ void
|
|||||||
PrintObject::discover_vertical_shells()
|
PrintObject::discover_vertical_shells()
|
||||||
{
|
{
|
||||||
for (size_t idx_region = 0; idx_region < this->_print->regions.size(); ++ idx_region) {
|
for (size_t idx_region = 0; idx_region < this->_print->regions.size(); ++ idx_region) {
|
||||||
|
if (! this->_print->regions[idx_region]->config.ensure_vertical_shell_thickness.value)
|
||||||
|
continue;
|
||||||
for (size_t idx_layer = 0; idx_layer < this->layers.size(); ++ idx_layer) {
|
for (size_t idx_layer = 0; idx_layer < this->layers.size(); ++ idx_layer) {
|
||||||
Layer* layer = this->layers[idx_layer];
|
Layer* layer = this->layers[idx_layer];
|
||||||
LayerRegion* layerm = layer->get_region(idx_region);
|
LayerRegion* layerm = layer->get_region(idx_region);
|
||||||
|
@ -1,9 +1,13 @@
|
|||||||
#ifndef slic3r_SupportMaterial_hpp_
|
#ifndef slic3r_SupportMaterial_hpp_
|
||||||
#define slic3r_SupportMaterial_hpp_
|
#define slic3r_SupportMaterial_hpp_
|
||||||
|
|
||||||
|
#include "Flow.hpp"
|
||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
|
|
||||||
class PrintObject;
|
class PrintObject;
|
||||||
|
class PrintConfig;
|
||||||
|
class PrintObjectConfig;
|
||||||
|
|
||||||
// how much we extend support around the actual contact area
|
// how much we extend support around the actual contact area
|
||||||
#define SUPPORT_MATERIAL_MARGIN 1.5
|
#define SUPPORT_MATERIAL_MARGIN 1.5
|
||||||
|
Loading…
Reference in New Issue
Block a user