Made the support interface contact loops configurable.

This commit is contained in:
bubnikv 2016-11-30 17:33:55 +01:00
parent 38cb2842ac
commit 26a8017e99
5 changed files with 19 additions and 5 deletions

View File

@ -533,7 +533,7 @@ sub build {
support_material support_material_threshold support_material_enforce_layers support_material support_material_threshold support_material_enforce_layers
raft_layers raft_layers
support_material_pattern support_material_with_sheath support_material_spacing support_material_synchronize_layers support_material_angle support_material_pattern support_material_with_sheath support_material_spacing support_material_synchronize_layers support_material_angle
support_material_interface_layers support_material_interface_spacing support_material_interface_layers support_material_interface_spacing support_material_interface_contact_loops
support_material_contact_distance support_material_buildplate_only dont_support_bridges support_material_contact_distance support_material_buildplate_only dont_support_bridges
notes notes
complete_objects extruder_clearance_radius extruder_clearance_height complete_objects extruder_clearance_radius extruder_clearance_height
@ -646,6 +646,7 @@ sub build {
$optgroup->append_single_option_line('support_material_angle'); $optgroup->append_single_option_line('support_material_angle');
$optgroup->append_single_option_line('support_material_interface_layers'); $optgroup->append_single_option_line('support_material_interface_layers');
$optgroup->append_single_option_line('support_material_interface_spacing'); $optgroup->append_single_option_line('support_material_interface_spacing');
$optgroup->append_single_option_line('support_material_interface_contact_loops');
$optgroup->append_single_option_line('support_material_buildplate_only'); $optgroup->append_single_option_line('support_material_buildplate_only');
$optgroup->append_single_option_line('dont_support_bridges'); $optgroup->append_single_option_line('dont_support_bridges');
$optgroup->append_single_option_line('support_material_synchronize_layers'); $optgroup->append_single_option_line('support_material_synchronize_layers');
@ -916,7 +917,7 @@ sub _update {
support_material_extrusion_width support_material_contact_distance); support_material_extrusion_width support_material_contact_distance);
$self->get_field($_)->toggle($have_support_material && $have_support_interface) $self->get_field($_)->toggle($have_support_material && $have_support_interface)
for qw(support_material_interface_spacing support_material_interface_extruder for qw(support_material_interface_spacing support_material_interface_extruder
support_material_interface_speed); support_material_interface_speed support_material_interface_contact_loops);
$self->get_field('perimeter_extrusion_width')->toggle($have_perimeters || $have_skirt || $have_brim); $self->get_field('perimeter_extrusion_width')->toggle($have_perimeters || $have_skirt || $have_brim);
$self->get_field('support_material_extruder')->toggle($have_support_material || $have_skirt); $self->get_field('support_material_extruder')->toggle($have_support_material || $have_skirt);

View File

@ -640,7 +640,7 @@ sub generate_toolpaths {
my $interface_flow = $self->interface_flow; my $interface_flow = $self->interface_flow;
# shape of contact area # shape of contact area
my $contact_loops = 1; my $contact_loops = $self->object_config->support_material_interface_contact_loops ? 1 : 0;
my $circle_radius = 1.5 * $interface_flow->scaled_width; my $circle_radius = 1.5 * $interface_flow->scaled_width;
my $circle_distance = 3 * $circle_radius; my $circle_distance = 3 * $circle_radius;
my $circle = Slic3r::Polygon->new(map [ $circle_radius * cos $_, $circle_radius * sin $_ ], my $circle = Slic3r::Polygon->new(map [ $circle_radius * cos $_, $circle_radius * sin $_ ],
@ -704,7 +704,10 @@ sub generate_toolpaths {
# if no interface layers were requested we treat the contact layer # if no interface layers were requested we treat the contact layer
# exactly as a generic base layer # exactly as a generic base layer
push @$base, @$contact; push @$base, @$contact;
} elsif (@$contact && $contact_loops > 0) { } elsif ($contact_loops == 0) {
# No contact loops, but some interface layers. Print the contact layer as a normal interface layer.
push @$interface, @$contact;
} elsif (@$contact) {
# generate the outermost loop # generate the outermost loop
# find centerline of the external loop (or any other kind of extrusions should the loop be skipped) # find centerline of the external loop (or any other kind of extrusions should the loop be skipped)

View File

@ -1177,6 +1177,13 @@ PrintConfigDef::PrintConfigDef()
def->cli = "support-material-extrusion-width=s"; def->cli = "support-material-extrusion-width=s";
def->default_value = new ConfigOptionFloatOrPercent(0, false); def->default_value = new ConfigOptionFloatOrPercent(0, false);
def = this->add("support_material_interface_contact_loops", coBool);
def->label = "Interface circles";
def->category = "Support material";
def->tooltip = "Cover the top most interface layer with contact loops";
def->cli = "support-material-interface-contact-loops!";
def->default_value = new ConfigOptionBool(true);
def = this->add("support_material_interface_extruder", coInt); def = this->add("support_material_interface_extruder", coInt);
def->label = "Support material/raft interface extruder"; def->label = "Support material/raft interface extruder";
def->category = "Extruders"; def->category = "Extruders";
@ -1252,7 +1259,7 @@ PrintConfigDef::PrintConfigDef()
def->category = "Support material"; def->category = "Support material";
def->tooltip = "Synchronize support layers with the object print layers. This is useful with multi-material printers, where the extruder switch is expensive."; def->tooltip = "Synchronize support layers with the object print layers. This is useful with multi-material printers, where the extruder switch is expensive.";
def->cli = "support-material-synchronize-layers!"; def->cli = "support-material-synchronize-layers!";
def->default_value = new ConfigOptionBool(true); def->default_value = new ConfigOptionBool(false);
def = this->add("support_material_threshold", coInt); def = this->add("support_material_threshold", coInt);
def->label = "Overhang threshold"; def->label = "Overhang threshold";

View File

@ -153,6 +153,7 @@ class PrintObjectConfig : public virtual StaticPrintConfig
ConfigOptionInt support_material_enforce_layers; ConfigOptionInt support_material_enforce_layers;
ConfigOptionInt support_material_extruder; ConfigOptionInt support_material_extruder;
ConfigOptionFloatOrPercent support_material_extrusion_width; ConfigOptionFloatOrPercent support_material_extrusion_width;
ConfigOptionBool support_material_interface_contact_loops;
ConfigOptionInt support_material_interface_extruder; ConfigOptionInt support_material_interface_extruder;
ConfigOptionInt support_material_interface_layers; ConfigOptionInt support_material_interface_layers;
ConfigOptionFloat support_material_interface_spacing; ConfigOptionFloat support_material_interface_spacing;
@ -186,6 +187,7 @@ class PrintObjectConfig : public virtual StaticPrintConfig
OPT_PTR(support_material_buildplate_only); OPT_PTR(support_material_buildplate_only);
OPT_PTR(support_material_contact_distance); OPT_PTR(support_material_contact_distance);
OPT_PTR(support_material_enforce_layers); OPT_PTR(support_material_enforce_layers);
OPT_PTR(support_material_interface_contact_loops);
OPT_PTR(support_material_extruder); OPT_PTR(support_material_extruder);
OPT_PTR(support_material_extrusion_width); OPT_PTR(support_material_extrusion_width);
OPT_PTR(support_material_interface_extruder); OPT_PTR(support_material_interface_extruder);

View File

@ -197,6 +197,7 @@ PrintObject::invalidate_state_by_config_options(const std::vector<t_config_optio
|| *opt_key == "support_material_extruder" || *opt_key == "support_material_extruder"
|| *opt_key == "support_material_extrusion_width" || *opt_key == "support_material_extrusion_width"
|| *opt_key == "support_material_interface_layers" || *opt_key == "support_material_interface_layers"
|| *opt_key == "support_material_interface_contact_loops"
|| *opt_key == "support_material_interface_extruder" || *opt_key == "support_material_interface_extruder"
|| *opt_key == "support_material_interface_spacing" || *opt_key == "support_material_interface_spacing"
|| *opt_key == "support_material_interface_speed" || *opt_key == "support_material_interface_speed"