mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-08-10 07:15:08 -06:00
Optimization of the configuration layer:
The values of StaticPrintConfig derived objects were searched by a name walking through a huge chained if. Now they are being mapped with a std::map. Also initialization of StaticPrintConfig classes from their ConfigOptionDef defaults is done by maintaining a single global definition of each StaticPrintConfig derived class, and a new instance is initialized from this static copy. Also the ConfigOption instances are casted using static_cast wherever possible, and their types are verified by a virtual type() method. This approach avoids insiginificant performance penalty of a dynamic_cast. Also the compare and clone methods were added to ConfigOption, and the cloning & compare work on binary values, not by serialization.
This commit is contained in:
parent
a91d7cb2f7
commit
3731820c48
14 changed files with 1475 additions and 934 deletions
|
@ -31,10 +31,9 @@ $Options->{threads}{readonly} = !$Slic3r::have_threads;
|
|||
|
||||
# Fill in the underlying C++ Slic3r::DynamicPrintConfig with the content of the defaults
|
||||
# provided by the C++ class Slic3r::FullPrintConfig.
|
||||
# Used by the UI.
|
||||
sub new_from_defaults {
|
||||
my $class = shift;
|
||||
my (@opt_keys) = @_;
|
||||
|
||||
my ($class, @opt_keys) = @_;
|
||||
my $self = $class->new;
|
||||
# Instantiating the C++ class Slic3r::FullPrintConfig.
|
||||
my $defaults = Slic3r::Config::Full->new;
|
||||
|
@ -47,7 +46,7 @@ sub new_from_defaults {
|
|||
return $self;
|
||||
}
|
||||
|
||||
# From command line parameters
|
||||
# From command line parameters, used by slic3r.pl
|
||||
sub new_from_cli {
|
||||
my $class = shift;
|
||||
my %args = @_;
|
||||
|
@ -112,12 +111,6 @@ sub load {
|
|||
}
|
||||
}
|
||||
|
||||
# Save the content of the underlying C++ Slic3r::DynamicPrintConfig as a flat ini file without any category.
|
||||
sub save {
|
||||
my ($self, $file) = @_;
|
||||
return $self->_save($file);
|
||||
}
|
||||
|
||||
# Deserialize a perl hash into the underlying C++ Slic3r::DynamicConfig class,
|
||||
# convert legacy configuration names.
|
||||
# Used to load a config bundle.
|
||||
|
@ -309,6 +302,7 @@ sub validate {
|
|||
# CLASS METHODS:
|
||||
|
||||
# Write a "Windows" style ini file with categories enclosed in squre brackets.
|
||||
# Used by config-bundle-to-config.pl and to save slic3r.ini.
|
||||
sub write_ini {
|
||||
my $class = shift;
|
||||
my ($file, $ini) = @_;
|
||||
|
@ -331,6 +325,7 @@ sub write_ini {
|
|||
# Returns a hash of hashes over strings.
|
||||
# {category}{name}=value
|
||||
# Non-categorized entries are stored under a category '_'.
|
||||
# Used by config-bundle-to-config.pl and to read slic3r.ini.
|
||||
sub read_ini {
|
||||
my $class = shift;
|
||||
my ($file) = @_;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue