diff --git a/lib/Slic3r/GUI/MainFrame.pm b/lib/Slic3r/GUI/MainFrame.pm index 1f27a9724..ad2eca91d 100644 --- a/lib/Slic3r/GUI/MainFrame.pm +++ b/lib/Slic3r/GUI/MainFrame.pm @@ -326,6 +326,7 @@ sub is_loaded { return $self->{loaded}; } +# Selection of a 3D object changed on the platter. sub on_plater_selection_changed { my ($self, $have_selection) = @_; @@ -523,10 +524,9 @@ sub export_config { $dlg->Destroy; } +# Load a config file containing a Print, Filament & Printer preset. sub load_config_file { - my $self = shift; - my ($file) = @_; - + my ($self, $file) = @_; if (!$file) { return unless $self->check_unsaved_changes; my $dir = $last_config ? dirname($last_config) : $Slic3r::GUI::Settings->{recent}{config_directory} || $Slic3r::GUI::Settings->{recent}{skein_directory} || ''; @@ -638,6 +638,8 @@ sub load_configbundle { Slic3r::GUI::show_info($self, $message); } +# Load a provied DynamicConfig into the Print / Filament / Printer tabs, thus modifying the active preset. +# Also update the platter with the new presets. sub load_config { my $self = shift; my ($config) = @_; diff --git a/lib/Slic3r/GUI/Plater/ObjectPartsPanel.pm b/lib/Slic3r/GUI/Plater/ObjectPartsPanel.pm index a8628a634..707929e33 100644 --- a/lib/Slic3r/GUI/Plater/ObjectPartsPanel.pm +++ b/lib/Slic3r/GUI/Plater/ObjectPartsPanel.pm @@ -17,8 +17,7 @@ use constant ICON_SOLIDMESH => 1; use constant ICON_MODIFIERMESH => 2; sub new { - my $class = shift; - my ($parent, %params) = @_; + my ($class, $parent, %params) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); # C++ type Slic3r::ModelObject diff --git a/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm b/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm index 971d688cb..908d5eff7 100644 --- a/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm +++ b/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm @@ -15,8 +15,7 @@ use base 'Wx::Dialog'; # %params{object} of a Perl type Slic3r::GUI::Plater::Object # %params{model_object} of a C++ type Slic3r::ModelObject sub new { - my $class = shift; - my ($parent, %params) = @_; + my ($class, $parent, %params) = @_; my $self = $class->SUPER::new($parent, -1, "Settings for " . $params{object}->name, wxDefaultPosition, [700,500], wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); $self->{$_} = $params{$_} for keys %params; diff --git a/lib/Slic3r/GUI/Plater/OverrideSettingsPanel.pm b/lib/Slic3r/GUI/Plater/OverrideSettingsPanel.pm index d99b470db..2f8b8ce73 100644 --- a/lib/Slic3r/GUI/Plater/OverrideSettingsPanel.pm +++ b/lib/Slic3r/GUI/Plater/OverrideSettingsPanel.pm @@ -29,8 +29,7 @@ my %icons = ( ); sub new { - my $class = shift; - my ($parent, %params) = @_; + my ($class, $parent, %params) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); # C++ class Slic3r::DynamicPrintConfig, initially empty. $self->{default_config} = Slic3r::Config->new; diff --git a/lib/Slic3r/GUI/Tab.pm b/lib/Slic3r/GUI/Tab.pm index c2de563e2..db1521499 100644 --- a/lib/Slic3r/GUI/Tab.pm +++ b/lib/Slic3r/GUI/Tab.pm @@ -384,9 +384,10 @@ sub update_tree { } } +# Update the combo box label of the selected preset based on its "dirty" state, +# comparing the selected preset config with $self->{config}. sub update_dirty { - my $self = shift; - + my ($self) = @_; my $list_updated; foreach my $i ($self->{default_suppressed}..$#{$self->{presets}}) { my $preset = $self->get_preset($i); @@ -401,20 +402,23 @@ sub update_dirty { $self->_on_presets_changed; } +# Has the selected preset been modified? sub is_dirty { - my $self = shift; + my ($self) = @_; return @{$self->dirty_options} > 0; } +# Which options of the selected preset were modified? sub dirty_options { - my $self = shift; - + my ($self) = @_; return [] if !defined $self->current_preset; # happens during initialization return $self->get_preset_config($self->get_current_preset)->diff($self->{config}); } +# Search all ini files in the presets directory, add them into the list of $self->{presets} in the form of Slic3r::GUI::Tab::Preset. +# Initialize the drop down list box. sub load_presets { - my $self = shift; + my ($self) = @_; $self->{presets} = [ Slic3r::GUI::Tab::Preset->new( @@ -445,10 +449,9 @@ sub load_presets { $self->_on_presets_changed; } +# Load a config file containing a Print, Filament & Printer preset. sub load_config_file { - my $self = shift; - my ($file) = @_; - + my ($self, $file) = @_; # look for the loaded config among the existing menu items my $i = first { $self->{presets}[$_]{file} eq $file && $self->{presets}[$_]{external} } 1..$#{$self->{presets}}; if (!$i) { @@ -470,9 +473,10 @@ sub load_config_file { return 1; } +# Load a provied DynamicConfig into the tab, modifying the active preset. +# This could be used for example by setting a Wipe Tower position by interactive manipulation in the 3D view. sub load_config { - my $self = shift; - my ($config) = @_; + my ($self, $config) = @_; my %keys_modified = (); foreach my $opt_key (@{$self->{config}->diff($config)}) { @@ -487,6 +491,7 @@ sub load_config { } } +# Load and return a config from the file associated with the $preset (Perl type Slic3r::GUI::Tab::Preset). sub get_preset_config { my ($self, $preset) = @_; return $preset->config($self->{config}->get_keys); @@ -1705,6 +1710,7 @@ sub on_preset_loaded { } } +# Load a config file containing a Print, Filament & Printer preset. sub load_config_file { my $self = shift; if ($self->SUPER::load_config_file(@_)) { @@ -1847,6 +1853,8 @@ has 'external' => (is => 'ro', default => sub { 0 }); has 'name' => (is => 'rw', required => 1); has 'file' => (is => 'rw'); +# Load a config file, return a C++ class Slic3r::DynamicPrintConfig with $keys initialized from the config file. +# In case of a "default" config item, return the default values. sub config { my ($self, $keys) = @_; diff --git a/xs/src/libslic3r/PerimeterGenerator.cpp b/xs/src/libslic3r/PerimeterGenerator.cpp index e5e4c5d60..bffd46d0f 100644 --- a/xs/src/libslic3r/PerimeterGenerator.cpp +++ b/xs/src/libslic3r/PerimeterGenerator.cpp @@ -511,11 +511,10 @@ PerimeterGenerator::_variable_width(const ThickPolylines &polylines, ExtrusionRo // append paths to collection if (!paths.empty()) { - if (paths.front().first_point().coincides_with(paths.back().last_point())) { + if (paths.front().first_point().coincides_with(paths.back().last_point())) coll.append(ExtrusionLoop(paths)); - } else { + else coll.append(paths); - } } }