mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-16 14:15:59 +08:00
Checks to see if config option has been changed before going any further for several config options.
N of 1 testing indicates that it may help with latency.
This commit is contained in:
parent
7457cfdac2
commit
c206ae77a3
@ -4,7 +4,7 @@ use warnings;
|
||||
use utf8;
|
||||
|
||||
use File::Basename qw(basename);
|
||||
use List::Util qw(first);
|
||||
use List::Util qw(first any);
|
||||
use Wx qw(:bookctrl :dialog :keycode :icon :id :misc :panel :sizer :treectrl :window
|
||||
:button wxTheApp);
|
||||
use Wx::Event qw(EVT_BUTTON EVT_CHOICE EVT_KEY_DOWN EVT_TREE_SEL_CHANGED EVT_CHECKBOX);
|
||||
@ -147,12 +147,11 @@ sub on_value_change {
|
||||
# propagate event to the parent
|
||||
sub _on_value_change {
|
||||
my ($self, $opt_key) = @_;
|
||||
|
||||
wxTheApp->CallAfter(sub {
|
||||
$self->current_preset->_dirty_config->apply($self->config);
|
||||
$self->{on_value_change}->($opt_key) if $self->{on_value_change};
|
||||
$self->load_presets;
|
||||
$self->_update;
|
||||
$self->_update($opt_key);
|
||||
});
|
||||
}
|
||||
|
||||
@ -794,10 +793,11 @@ sub reload_config {
|
||||
}
|
||||
|
||||
sub _update {
|
||||
my ($self) = @_;
|
||||
|
||||
my ($self, $key) = @_;
|
||||
my $opt_key = $key;
|
||||
$opt_key = "all_keys" if (length($key // '') == 0);
|
||||
my $config = $self->{config};
|
||||
|
||||
if (any { /$opt_key/ } qw(all_keys spiral_vase perimeters top_solid_layers fill_density support_material)) {
|
||||
if ($config->spiral_vase && !($config->perimeters == 1 && $config->top_solid_layers == 0 && $config->fill_density == 0 && $config->support_material == 0)) {
|
||||
my $dialog = Wx::MessageDialog->new($self,
|
||||
"The Spiral Vase mode requires:\n"
|
||||
@ -820,7 +820,9 @@ sub _update {
|
||||
$self->_load_config($new_conf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (any { /$opt_key/ } qw(all_keys support_material)) {
|
||||
if ($config->support_material) {
|
||||
# Ask only once.
|
||||
if (! $self->{support_material_overhangs_queried}) {
|
||||
@ -849,7 +851,9 @@ sub _update {
|
||||
} else {
|
||||
$self->{support_material_overhangs_queried} = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (any { /$opt_key/ } qw(all_keys fill_density fill_pattern top_infill_pattern)) {
|
||||
if ($config->fill_density == 100
|
||||
&& !first { $_ eq $config->fill_pattern } @{$Slic3r::Config::Options->{top_infill_pattern}{values}}) {
|
||||
my $dialog = Wx::MessageDialog->new($self,
|
||||
@ -865,36 +869,50 @@ sub _update {
|
||||
}
|
||||
$self->_load_config($new_conf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
my $have_perimeters = $config->perimeters > 0;
|
||||
if (any { /$opt_key/ } qw(all_keys perimeters)) {
|
||||
$self->get_field($_)->toggle($have_perimeters)
|
||||
for qw(extra_perimeters thin_walls overhangs seam_position external_perimeters_first
|
||||
external_perimeter_extrusion_width
|
||||
perimeter_speed small_perimeter_speed external_perimeter_speed);
|
||||
}
|
||||
|
||||
my $have_adaptive_slicing = $config->adaptive_slicing;
|
||||
if (any { /$opt_key/ } qw(all_keys adaptive_slicing)) {
|
||||
$self->get_field($_)->toggle($have_adaptive_slicing)
|
||||
for qw(adaptive_slicing_quality match_horizontal_surfaces);
|
||||
$self->get_field($_)->toggle(!$have_adaptive_slicing)
|
||||
for qw(layer_height);
|
||||
}
|
||||
|
||||
my $have_infill = $config->fill_density > 0;
|
||||
if (any { /$opt_key/ } qw(all_keys fill_density)) {
|
||||
# infill_extruder uses the same logic as in Print::extruders()
|
||||
$self->get_field($_)->toggle($have_infill)
|
||||
for qw(fill_pattern infill_every_layers infill_only_where_needed solid_infill_every_layers
|
||||
solid_infill_below_area infill_extruder);
|
||||
}
|
||||
|
||||
my $have_solid_infill = ($config->top_solid_layers > 0) || ($config->bottom_solid_layers > 0);
|
||||
if (any { /$opt_key/ } qw(all_keys top_solid_layers bottom_solid_layers)) {
|
||||
# solid_infill_extruder uses the same logic as in Print::extruders()
|
||||
$self->get_field($_)->toggle($have_solid_infill)
|
||||
for qw(top_infill_pattern bottom_infill_pattern infill_first solid_infill_extruder
|
||||
solid_infill_extrusion_width solid_infill_speed);
|
||||
}
|
||||
|
||||
if (any { /$opt_key/ } qw(all_keys top_solid_layers bottom_solid_layers fill_density)) {
|
||||
$self->get_field($_)->toggle($have_infill || $have_solid_infill)
|
||||
for qw(fill_angle infill_extrusion_width infill_speed bridge_speed);
|
||||
}
|
||||
|
||||
if (any { /$opt_key/ } qw(all_keys fill_density perimeters)) {
|
||||
$self->get_field('fill_gaps')->toggle($have_perimeters && $have_infill);
|
||||
$self->get_field('gap_fill_speed')->toggle($have_perimeters && $have_infill && $config->fill_gaps);
|
||||
}
|
||||
|
||||
my $have_top_solid_infill = $config->top_solid_layers > 0;
|
||||
$self->get_field($_)->toggle($have_top_solid_infill)
|
||||
|
Loading…
x
Reference in New Issue
Block a user