diff --git a/lib/Slic3r.pm b/lib/Slic3r.pm index 30d516217..e55e24a7a 100644 --- a/lib/Slic3r.pm +++ b/lib/Slic3r.pm @@ -43,6 +43,7 @@ use FindBin; # Let the XS module know where the GUI resources reside. set_resources_dir(decode_path($FindBin::Bin) . (($^O eq 'darwin') ? '/../Resources' : '/resources')); set_var_dir(resources_dir() . "/icons"); +set_local_dir(resources_dir() . "/localization/"); use Moo 1.003001; diff --git a/lib/Slic3r/GUI.pm b/lib/Slic3r/GUI.pm index 4063824e5..9d7adbc9d 100644 --- a/lib/Slic3r/GUI.pm +++ b/lib/Slic3r/GUI.pm @@ -68,6 +68,10 @@ our $medium_font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); $medium_font->SetPointSize(12); our $grey = Wx::Colour->new(200,200,200); +# Events to be sent from a C++ menu implementation: +# 1) To inform about a change of the application language. +our $LANGUAGE_CHANGE_EVENT = Wx::NewEventType; + sub OnInit { my ($self) = @_; @@ -81,6 +85,7 @@ sub OnInit { # Mac: "~/Library/Application Support/Slic3r" Slic3r::set_data_dir($datadir || Wx::StandardPaths::Get->GetUserDataDir); Slic3r::GUI::set_wxapp($self); + Slic3r::GUI::load_language(); $self->{notifier} = Slic3r::GUI::Notifier->new; $self->{app_config} = Slic3r::GUI::AppConfig->new; @@ -115,10 +120,12 @@ sub OnInit { # If set, the "Controller" tab for the control of the printer over serial line and the serial port settings are hidden. no_controller => $self->{app_config}->get('no_controller'), no_plater => $no_plater, + lang_ch_event => $LANGUAGE_CHANGE_EVENT, ); $self->SetTopWindow($frame); - EVT_IDLE($frame, sub { + #EVT_IDLE($frame, sub { + EVT_IDLE($self->{mainframe}, sub { while (my $cb = shift @cb) { $cb->(); } @@ -133,10 +140,42 @@ sub OnInit { $self->{mainframe}->config_wizard(1); }); } + + # The following event is emited by the C++ menu implementation of application language change. + EVT_COMMAND($self, -1, $LANGUAGE_CHANGE_EVENT, sub{ + $self->recreate_GUI; + }); return 1; } +sub recreate_GUI{ + my ($self) = @_; + my $topwindow = $self->GetTopWindow(); + $self->{mainframe} = my $frame = Slic3r::GUI::MainFrame->new( + # If set, the "Controller" tab for the control of the printer over serial line and the serial port settings are hidden. + no_controller => $self->{app_config}->get('no_controller'), + no_plater => $no_plater, + lang_ch_event => $LANGUAGE_CHANGE_EVENT, + ); + + if($topwindow) + { + $self->SetTopWindow($frame); + $topwindow->Destroy; + } + + my $run_wizard = 1 if $self->{preset_bundle}->has_defauls_only; + if ($run_wizard) { + # On OSX the UI was not initialized correctly if the wizard was called + # before the UI was up and running. + $self->CallAfter(sub { + # Run the config wizard, don't offer the "reset user profile" checkbox. + $self->{mainframe}->config_wizard(1); + }); + } +} + sub about { my ($self) = @_; my $about = Slic3r::GUI::AboutDialog->new(undef); diff --git a/lib/Slic3r/GUI/MainFrame.pm b/lib/Slic3r/GUI/MainFrame.pm index 35260011c..a3ebea0b8 100644 --- a/lib/Slic3r/GUI/MainFrame.pm +++ b/lib/Slic3r/GUI/MainFrame.pm @@ -11,13 +11,23 @@ use List::Util qw(min first); use Slic3r::Geometry qw(X Y); use Wx qw(:frame :bitmap :id :misc :notebook :panel :sizer :menu :dialog :filedialog :font :icon wxTheApp); -use Wx::Event qw(EVT_CLOSE EVT_MENU EVT_NOTEBOOK_PAGE_CHANGED); +use Wx::Event qw(EVT_CLOSE EVT_COMMAND EVT_MENU EVT_NOTEBOOK_PAGE_CHANGED); use base 'Wx::Frame'; our $qs_last_input_file; our $qs_last_output_file; our $last_config; +# Events to be sent from a C++ Tab implementation: +# 1) To inform about a change of a configuration value. +our $VALUE_CHANGE_EVENT = Wx::NewEventType; +# 2) To inform about a preset selection change or a "modified" status change. +our $PRESETS_CHANGED_EVENT = Wx::NewEventType; +# 3) To inform about a click on Browse button +our $BUTTON_BROWSE_EVENT = Wx::NewEventType; +# 4) To inform about a click on Test button +our $BUTTON_TEST_EVENT = Wx::NewEventType; + sub new { my ($class, %params) = @_; @@ -37,6 +47,7 @@ sub new { $self->{no_controller} = $params{no_controller}; $self->{no_plater} = $params{no_plater}; $self->{loaded} = 0; + $self->{lang_ch_event} = $params{lang_ch_event}; # initialize tabpanel and menubar $self->_init_tabpanel; @@ -106,33 +117,41 @@ sub _init_tabpanel { $panel->AddPage($self->{controller} = Slic3r::GUI::Controller->new($panel), "Controller"); } } - $self->{options_tabs} = {}; - for my $tab_name (qw(print filament printer)) { - my $tab; - $tab = $self->{options_tabs}{$tab_name} = ("Slic3r::GUI::Tab::" . ucfirst $tab_name)->new( - $panel, - no_controller => $self->{no_controller}); - # Callback to be executed after any of the configuration fields (Perl class Slic3r::GUI::OptionsGroup::Field) change their value. - $tab->on_value_change(sub { - my ($opt_key, $value) = @_; - my $config = $tab->{presets}->get_current_preset->config; - if ($self->{plater}) { - $self->{plater}->on_config_change($config); # propagate config change events to the plater - $self->{plater}->on_extruders_change($value) if $opt_key eq 'extruders_count'; + #TODO this is an example of a Slic3r XS interface call to add a new preset editor page to the main view. + # The following event is emited by the C++ Tab implementation on config value change. + EVT_COMMAND($self, -1, $VALUE_CHANGE_EVENT, sub { + my ($self, $event) = @_; + my $str = $event->GetString; + my ($opt_key, $name) = ($str =~ /(.*) (.*)/); + #print "VALUE_CHANGE_EVENT: ", $opt_key, "\n"; + my $tab = Slic3r::GUI::get_preset_tab($name); + my $config = $tab->get_config; + if ($self->{plater}) { + $self->{plater}->on_config_change($config); # propagate config change events to the plater + if ($opt_key eq 'extruders_count'){ + my $value = $event->GetInt(); + $self->{plater}->on_extruders_change($value); } - # don't save while loading for the first time - $self->config->save($Slic3r::GUI::autosave) if $Slic3r::GUI::autosave && $self->{loaded}; - }); - # Install a callback for the tab to update the platter and print controller presets, when - # a preset changes at Slic3r::GUI::Tab. - $tab->on_presets_changed(sub { - if ($self->{plater}) { - # Update preset combo boxes (Print settings, Filament, Printer) from their respective tabs. - $self->{plater}->update_presets($tab_name, @_); + } + # don't save while loading for the first time + $self->config->save($Slic3r::GUI::autosave) if $Slic3r::GUI::autosave && $self->{loaded}; + }); + # The following event is emited by the C++ Tab implementation on preset selection, + # or when the preset's "modified" status changes. + EVT_COMMAND($self, -1, $PRESETS_CHANGED_EVENT, sub { + my ($self, $event) = @_; + my $tab_name = $event->GetString; + + my $tab = Slic3r::GUI::get_preset_tab($tab_name); + if ($self->{plater}) { + # Update preset combo boxes (Print settings, Filament, Printer) from their respective tabs. + my $presets = $tab->get_presets; + if (defined $presets){ + my $reload_dependent_tabs = $tab->get_dependent_tabs; + $self->{plater}->update_presets($tab_name, $reload_dependent_tabs, $presets); if ($tab_name eq 'printer') { # Printer selected at the Printer tab, update "compatible" marks at the print and filament selectors. - my ($presets, $reload_dependent_tabs) = @_; for my $tab_name_other (qw(print filament)) { # If the printer tells us that the print or filament preset has been switched or invalidated, # refresh the print or filament tab page. Otherwise just refresh the combo box. @@ -141,23 +160,76 @@ sub _init_tabpanel { $self->{options_tabs}{$tab_name_other}->$update_action; } # Update the controller printers. - $self->{controller}->update_presets(@_) if $self->{controller}; + $self->{controller}->update_presets($presets) if $self->{controller}; } - $self->{plater}->on_config_change($tab->{presets}->get_current_preset->config); + $self->{plater}->on_config_change($tab->get_config); } - }); - # Load the currently selected preset into the GUI, update the preset selection box. - $tab->load_current_preset; - $panel->AddPage($tab, $tab->title); - } + } + }); + # The following event is emited by the C++ Tab implementation , + # when the Browse button was clicked + EVT_COMMAND($self, -1, $BUTTON_BROWSE_EVENT, sub { + my ($self, $event) = @_; + my $msg = $event->GetString; + print "BUTTON_BROWSE_EVENT: ", $msg, "\n"; -#TODO this is an example of a Slic3r XS interface call to add a new preset editor page to the main view. -# Slic3r::GUI::create_preset_tab("print"); + # look for devices + my $entries; + { + my $res = Net::Bonjour->new('http'); + $res->discover; + $entries = [ $res->entries ]; + } + if (@{$entries}) { + my $dlg = Slic3r::GUI::BonjourBrowser->new($self, $entries); + my $tab = Slic3r::GUI::get_preset_tab("printer"); + $tab->load_key_value('octoprint_host', $dlg->GetValue . ":" . $dlg->GetPort) + if $dlg->ShowModal == wxID_OK; + } else { + Wx::MessageDialog->new($self, 'No Bonjour device found', 'Device Browser', wxOK | wxICON_INFORMATION)->ShowModal; + } + }); + # The following event is emited by the C++ Tab implementation , + # when the Test button was clicked + EVT_COMMAND($self, -1, $BUTTON_TEST_EVENT, sub { + my ($self, $event) = @_; + my $msg = $event->GetString; + print "BUTTON_TEST_EVENT: ", $msg, "\n"; + + my $ua = LWP::UserAgent->new; + $ua->timeout(10); + + my $config = Slic3r::GUI::get_preset_tab("printer")->get_config; + my $res = $ua->get( + "http://" . $config->octoprint_host . "/api/version", + 'X-Api-Key' => $config->octoprint_apikey, + ); + if ($res->is_success) { + Slic3r::GUI::show_info($self, "Connection to OctoPrint works correctly.", "Success!"); + } else { + Slic3r::GUI::show_error($self, + "I wasn't able to connect to OctoPrint (" . $res->status_line . "). " + . "Check hostname and OctoPrint version (at least 1.1.0 is required)."); + } + }); + # A variable to inform C++ Tab implementation about disabling of Browse button + $self->{is_disabled_button_browse} = (!eval "use Net::Bonjour; 1") ? 1 : 0 ; + # A variable to inform C++ Tab implementation about user_agent + $self->{is_user_agent} = (eval "use LWP::UserAgent; 1") ? 1 : 0 ; + Slic3r::GUI::create_preset_tabs(wxTheApp->{preset_bundle}, wxTheApp->{app_config}, + $self->{no_controller}, $self->{is_disabled_button_browse}, + $self->{is_user_agent}, + $VALUE_CHANGE_EVENT, $PRESETS_CHANGED_EVENT, + $BUTTON_BROWSE_EVENT, $BUTTON_TEST_EVENT); + $self->{options_tabs} = {}; + for my $tab_name (qw(print filament printer)) { + $self->{options_tabs}{$tab_name} = Slic3r::GUI::get_preset_tab("$tab_name"); + } if ($self->{plater}) { $self->{plater}->on_select_preset(sub { my ($group, $name) = @_; - $self->{options_tabs}{$group}->select_preset($name); + $self->{options_tabs}{$group}->select_preset($name); }); # load initial config my $full_config = wxTheApp->{preset_bundle}->full_config; @@ -344,9 +416,11 @@ sub _init_menubar { $menubar->Append($self->{object_menu}, "&Object") if $self->{object_menu}; $menubar->Append($windowMenu, "&Window"); $menubar->Append($self->{viewMenu}, "&View") if $self->{viewMenu}; + # Add an optional debug menu + # (Select application language from the list of installed languages) + # In production code, the add_debug_menu() call should do nothing. + Slic3r::GUI::add_debug_menu($menubar, $self->{lang_ch_event}); $menubar->Append($helpMenu, "&Help"); - # Add an optional debug menu. In production code, the add_debug_menu() call should do nothing. - Slic3r::GUI::add_debug_menu($menubar); $self->SetMenuBar($menubar); } } @@ -614,7 +688,7 @@ sub load_configbundle { # 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, $config) = @_; + my ($self, $config) = @_; $_->load_config($config) foreach values %{$self->{options_tabs}}; $self->{plater}->on_config_change($config) if $self->{plater}; } @@ -664,7 +738,7 @@ sub check_unsaved_changes { my @dirty = (); foreach my $tab (values %{$self->{options_tabs}}) { - push @dirty, $tab->title if $tab->{presets}->current_is_dirty; + push @dirty, $tab->title if $tab->current_preset_is_dirty; } if (@dirty) { diff --git a/lib/Slic3r/GUI/OptionsGroup.pm b/lib/Slic3r/GUI/OptionsGroup.pm index 7ffb2067b..962e6ffc0 100644 --- a/lib/Slic3r/GUI/OptionsGroup.pm +++ b/lib/Slic3r/GUI/OptionsGroup.pm @@ -158,7 +158,9 @@ sub _build_field { my $opt_id = $opt->opt_id; my $on_change = sub { + #! This function will be called from Field. my ($opt_id, $value) = @_; + #! Call OptionGroup._on_change(...) $self->_on_change($opt_id, $value) unless $self->_disabled; }; @@ -213,6 +215,8 @@ sub _build_field { } return undef if !$field; + #! setting up a function that will be triggered when the field changes + #! think of it as $field->on_change = ($on_change) $field->on_change($on_change); $field->on_kill_focus($on_kill_focus); $self->_fields->{$opt_id} = $field; diff --git a/lib/Slic3r/Print.pm b/lib/Slic3r/Print.pm index fa3d4a101..8300fdbed 100644 --- a/lib/Slic3r/Print.pm +++ b/lib/Slic3r/Print.pm @@ -93,6 +93,8 @@ sub export_gcode { $self->status_cb->(95, "Running post-processing scripts"); $self->config->setenv; for my $script (@{$self->config->post_process}) { + # Ignore empty post processing script lines. + next if $script =~ /^\s*$/; Slic3r::debugf " '%s' '%s'\n", $script, $output_file; # -x doesn't return true on Windows except for .exe files if (($^O eq 'MSWin32') ? !(-e $script) : !(-x $script)) { diff --git a/resources/localization/cs_CZ/Slic3rPE.mo b/resources/localization/cs_CZ/Slic3rPE.mo new file mode 100644 index 000000000..b333ae0c9 Binary files /dev/null and b/resources/localization/cs_CZ/Slic3rPE.mo differ diff --git a/resources/localization/cs_CZ/Slic3rPE_cs.po b/resources/localization/cs_CZ/Slic3rPE_cs.po new file mode 100644 index 000000000..28d150758 --- /dev/null +++ b/resources/localization/cs_CZ/Slic3rPE_cs.po @@ -0,0 +1,2714 @@ +# Copyright (C) 2018 THE Slic3rPE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Slic3rPE package. +# Oleksandra Iushchenko , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: SLIC3R PE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-13 17:18+0100\n" +"PO-Revision-Date: 2018-02-15 16:08+0100\n" +"Last-Translator: Oleksandra Iushchenko \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.6\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Language: cs_CZ\n" +"X-Poedit-KeywordsList: _L\n" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:50 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1188 +msgid "Size" +msgstr "Rozměr" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:51 +msgid "Size in X and Y of the rectangular plate." +msgstr "Rozměr tiskové podložky v ose X a Y." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:57 +msgid "Origin" +msgstr "Origin" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:58 +msgid "" +"Distance of the 0,0 G-code coordinate from the front left corner of the " +"rectangle." +msgstr "Vzdálenost souřadnice 0,0 G-kódu od předního levého rohu obdélníku." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:65 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:133 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:204 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:215 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:329 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:340 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:359 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:438 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:783 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:803 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:862 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:880 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:898 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1046 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1054 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1096 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1105 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1115 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1123 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1131 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1217 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1423 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1493 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1529 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1706 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1713 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1720 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1729 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1739 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1749 +msgid "mm" +msgstr "mm" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:66 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:435 +msgid "Diameter" +msgstr "Průměr" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:67 +msgid "" +"Diameter of the print bed. It is assumed that origin (0,0) is located in the " +"center." +msgstr "" +"Průměr tiskové podložky.Přepokládaná souřadnice 0,0 je umístěna uprostřed." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:965 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:312 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:704 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:960 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1274 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1447 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1473 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:432 +msgid "Extruders" +msgstr "Extrudér" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:966 +msgid "Number of extruders of the printer." +msgstr "Počet extrudérů tiskárny." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:30 +msgid "Avoid crossing perimeters" +msgstr "Vyhnout se přejíždění perimetrů" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:31 +msgid "" +"Optimize travel moves in order to minimize the crossing of perimeters. This " +"is mostly useful with Bowden extruders which suffer from oozing. This " +"feature slows down both the print and the G-code generation." +msgstr "" +"Optimalizovat přesuny do pořadí aby se minimalizovalo přejíždění perimetrů. " +"Nejvíce užitečné u Bowdenových extruderů které trpí na vytékáné filamentu. " +"Toto nastavení zpomaluje tisk i generování G-kódu." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:38 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:939 +msgid "Bed shape" +msgstr "Tvar tiskové podložky" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:42 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1574 +msgid "Other layers" +msgstr "Ostatní vrstvy" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:43 +msgid "" +"Bed temperature for layers after the first one. Set this to zero to disable " +"bed temperature control commands in the output." +msgstr "" +"Teplota tiskové podložky pro další vrstvy po první vrstvě. Nastavením na " +"hodnotu nula vypnete ovládací příkazy teploty tiskové podložky ve výstupu." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:46 +msgid "Bed temperature" +msgstr "Teplota tiskové podložky" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:52 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1131 +msgid "Before layer change G-code" +msgstr "Before layer change G-code" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:53 +msgid "" +"This custom code is inserted at every layer change, right before the Z move. " +"Note that you can use placeholder variables for all Slic3r settings as well " +"as [layer_num] and [layer_z]." +msgstr "" +"Tento upravený kód je vložen pro každou změnu vrstvy, předtím než se pohne " +"Z. Můžete přidávat zástupné proměnné pro veškeré nastavení Slic3ru stejně " +"tak jako [layer_num] a [layer_z]." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:63 +msgid "Between objects G-code" +msgstr "G-kód mezi objekty" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:64 +msgid "" +"This code is inserted between objects when using sequential printing. By " +"default extruder and bed temperature are reset using non-wait command; " +"however if M104, M109, M140 or M190 are detected in this custom code, Slic3r " +"will not add temperature commands. Note that you can use placeholder " +"variables for all Slic3r settings, so you can put a \"M109 " +"S[first_layer_temperature]\" command wherever you want." +msgstr "" +"Tento kód je vložen mezi objekty, pokud je použit sekvenční tisk. Ve " +"výchozím nastavení je resetován extrudér a tisková podložka pomocí non-wait " +"(nečekacím) příkazem; nicméně pokud jsou příkazy M104, M109, 140 nebo M190 " +"detekovány v tomto upraveném kódu, Slic3r nebude přidávat teplotní příkazy. " +"Můžete přidávat zástupné proměnné pro veškeré nastavení Slic3ru, takže " +"můžete vložit příkaz “M109 S[first_layer_temperature]” kamkoliv chcete." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:72 +msgid "Bottom" +msgstr "Spodek" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:73 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:243 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:294 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:302 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:606 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:764 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:780 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:943 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:991 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1154 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1585 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1641 +msgid "Layers and Perimeters" +msgstr "Vrstvy a perimetry" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:74 +msgid "Number of solid layers to generate on bottom surfaces." +msgstr "Počet plných vrstev." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:76 +msgid "Bottom solid layers" +msgstr "Plné spodní vrstvy" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:81 +msgid "Bridge" +msgstr "Most" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:82 +msgid "" +"This is the acceleration your printer will use for bridges. Set zero to " +"disable acceleration control for bridges." +msgstr "" +"Nastavení akcelerace tiskárny při vytváření mostů. Nastavením na nulu " +"vypnete ovládání akcelerace pro mosty." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:84 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:178 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:578 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:686 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:954 +msgid "mm/s\\u00B2" +msgstr "mm/s\\u00B2" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:90 +msgid "Bridging angle" +msgstr "Úhel vytváření mostů" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:91 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:251 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:492 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:506 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:544 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:683 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:693 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:711 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:729 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:748 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1265 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1282 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:347 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:348 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:664 +msgid "Infill" +msgstr "Výplň" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:92 +msgid "" +"Bridging angle override. If left to zero, the bridging angle will be " +"calculated automatically. Otherwise the provided angle will be used for all " +"bridges. Use 180\\u00B0 for zero angle." +msgstr "" +"Přepsání úhlu vytváření mostů. Nastavením hodnoty na nulu se bude úhel " +"vytváření mostů vypočítávat automaticky. Při zadání jiného úhlu, bude pro " +"všechny mosty použitý zadaný úhel. Pro nulový úhel zadejte 180\\u00B0." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:95 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:496 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1172 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1183 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1403 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1559 +msgid "\\u00B0" +msgstr "\\u00B0" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:101 +msgid "Bridges fan speed" +msgstr "Rychlost ventilátoru při vytváření mostů" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:102 +msgid "This fan speed is enforced during all bridges and overhangs." +msgstr "" +"Nastavená rychlost ventilátoru je využita vždy při vytváření mostů a přesahů." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:103 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:508 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:791 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:852 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1062 +msgid "%" +msgstr "%" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:110 +msgid "Bridge flow ratio" +msgstr "Poměr průtoku při vytváření mostů" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:111 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:212 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:738 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1735 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:343 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:357 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:450 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:453 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:830 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1112 +msgid "Advanced" +msgstr "Pokročilé" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:112 +msgid "" +"This factor affects the amount of plastic for bridging. You can decrease it " +"slightly to pull the extrudates and prevent sagging, although default " +"settings are usually good and you should experiment with cooling (use a fan) " +"before tweaking this." +msgstr "" +"Tato hodnota určuje množství vytlačeného plastu při vytváření mostů. Mírným " +"šnížením této hodnoty můžete předejít pronášení ikdyž, přednastavené hodnoty " +"jsou většinou dobré a je lepší experimentovat s chlazením (využitím " +"ventilátoru), než s touto hodnotou." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:121 +msgid "Bridges" +msgstr "Mosty" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:122 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:282 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:637 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:749 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:981 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1203 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1253 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1304 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1627 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:399 +msgid "Speed" +msgstr "Rychlost" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:123 +msgid "Speed for printing bridges." +msgstr "Rychlost pro vytváření mostů." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:124 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:640 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:751 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:813 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:870 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:983 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1139 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1148 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1538 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1651 +msgid "mm/s" +msgstr "mm/s" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:131 +msgid "Brim width" +msgstr "Okraj první vrstvy" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:132 +msgid "" +"Horizontal width of the brim that will be printed around each object on the " +"first layer." +msgstr "Šírka okraje první vrsty která bude vytištěna okolo každého objektu." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:139 +msgid "Clip multi-part objects" +msgstr "Připnutí objektů z více částí k sobě" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:140 +msgid "" +"When printing multi-material objects, this settings will make slic3r to clip " +"the overlapping object parts one by the other (2nd part will be clipped by " +"the 1st, 3rd part will be clipped by the 1st and 2nd etc)." +msgstr "" +"Připnutí překrývajících se objektů jednek druhému při multi-materiálovém " +"tisku. (Druhá část se připne k první, třetí část k první a druhé, atd)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:147 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:510 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:868 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1673 +msgid "Compatible printers" +msgstr "Kompatibilní tiskárny" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:151 +msgid "Compatible printers condition" +msgstr "Stav kompatibilních tiskáren" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:152 +msgid "" +"A boolean expression using the configuration values of an active printer " +"profile. If this expression evaluates to true, this profile is considered " +"compatible with the active printer profile." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:158 +msgid "Complete individual objects" +msgstr "Dokončení individuálních objektů" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:159 +msgid "" +"When printing multiple objects or copies, this feature will complete each " +"object before moving onto next one (and starting it from its bottom layer). " +"This feature is useful to avoid the risk of ruined prints. Slic3r should " +"warn and prevent you from extruder collisions, but beware." +msgstr "" +"Při tisku více objektů nebo kopií tiskárna kompletně dokončí jeden objekt, " +"předtím než začne tisknout druhý (začíná od spodní vstvy). Tato vlastnost je " +"výhodná z důvodů snížení rizika zničených výtisků. Slic3r by měl varovat při " +"možné kolizi extrudéru s objektem a zabránit mu, přesto doporučujeme " +"obezřetnost." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:167 +msgid "Enable auto cooling" +msgstr "Zapnutí automatického chlazení" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:168 +msgid "" +"This flag enables the automatic cooling logic that adjusts print speed and " +"fan speed according to layer printing time." +msgstr "" +"Zapíná výpočet automatického chlazení který upravuje rychlost tisku a " +"ventilátoru v závislosti na délce tisku jedné vstvy." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:174 +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:293 +msgid "Default" +msgstr "Výchozí" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:175 +msgid "" +"This is the acceleration your printer will be reset to after the role-" +"specific acceleration values are used (perimeter/infill). Set zero to " +"prevent resetting acceleration at all." +msgstr "" +"Toto je hodnota akcelerace na kterou se tiskárna vrátí po specifických " +"úpravách akcelerace například při tisku (perimetru/výplně). Nastavením na " +"nulu zabráníte návratu rychlostí zcela." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:184 +msgid "Disable fan for the first" +msgstr "Vypnutí chlazení pro prvních" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:185 +msgid "" +"You can set this to a positive value to disable fan at all during the first " +"layers, so that it does not make adhesion worse." +msgstr "" +"Nastavením počtu prvních vstev s vypnutým chlazením pro nezhoršování " +"přilnavosti." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:187 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:696 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1035 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1226 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1287 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1439 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1484 +msgid "layers" +msgstr "vrstev" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:194 +msgid "Don't support bridges" +msgstr "Nevytvářet podpory pod mosty" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:195 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1032 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1382 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1389 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1401 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1411 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1419 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1434 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1455 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1466 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1482 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1491 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1500 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1511 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1527 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1535 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1536 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1545 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1553 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1567 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:375 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:376 +msgid "Support material" +msgstr "Podpory" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:196 +msgid "" +"Experimental option for preventing support material from being generated " +"under bridged areas." +msgstr "" +"Experimentální nastavení pro zabránění tvorbě podpěr v oblastech po mosty." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:202 +msgid "Distance between copies" +msgstr "Vzdálenost mezi kopiemi" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:203 +msgid "Distance used for the auto-arrange feature of the plater." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:211 +msgid "Elefant foot compensation" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:213 +msgid "" +"The first layer will be shrunk in the XY plane by the configured value to " +"compensate for the 1st layer squish aka an Elefant Foot effect." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:221 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:231 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:852 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1125 +msgid "End G-code" +msgstr "Konec G-code" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:222 +msgid "" +"This end procedure is inserted at the end of the output file. Note that you " +"can use placeholder variables for all Slic3r settings." +msgstr "" +"Tato ukončovací procedůra je vložena na konec výstupního souboru. Můžete " +"přidávat zástupné proměnné pro veškeré nastavení Slic3ru." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:232 +msgid "" +"This end procedure is inserted at the end of the output file, before the " +"printer end gcode. Note that you can use placeholder variables for all " +"Slic3r settings. If you have multiple extruders, the gcode is processed in " +"extruder order." +msgstr "" +"Tato ukončovací procedůra je vložena na konec výstupního souboru, před " +"konečným g-kódem tiskárny. Můžete přidávat zástupné proměnné pro veškeré " +"nastavení Slic3ru. Pokud máte tiskárnu s více extrudéry, g-kód je zpracován " +"v pořadí extrudérů." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:242 +msgid "Ensure vertical shell thickness" +msgstr "Zajistit vertikální tloušťku obalu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:244 +msgid "" +"Add solid infill near sloping surfaces to guarantee the vertical shell " +"thickness (top+bottom solid layers)." +msgstr "" +"Přidá plnou výplň u šikmých ploch pro garanci vertikální tloušťku obalu " +"(vrchní a podní plné vrstvy)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:250 +msgid "Top/bottom fill pattern" +msgstr "Vzor výplně vrchních/spodních vrstev" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:252 +#, fuzzy +msgid "" +"Fill pattern for top/bottom infill. This only affects the external visible " +"layer, and not its adjacent solid shells." +msgstr "" +"Vzor výplně pro vrchní/spodní vrstvy. Ovlivňuje pouze vnější viditelné " +"vrstvy. Neovlivňuje přilehlé plné obaly." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:271 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:281 +msgid "External perimeters" +msgstr "Vnější perimetry" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:272 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:381 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:594 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:712 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:969 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1294 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1456 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1616 +msgid "Extrusion Width" +msgstr "Šíře extruze" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:273 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for external " +"perimeters. If left zero, default extrusion width will be used if set, " +"otherwise 1.125 x nozzle diameter will be used. If expressed as percentage " +"(for example 200%), it will be computed over layer height." +msgstr "" +"Nastavení na kladnou hodnotu, definuje šířku manuální extruze pro vnější " +"obvod. Pokud je ponechána nula, použije se výchozí šířka extruze, pokud je " +"nastavena, jinak se použije průměr trysky 1,125 x. Pokud je hodnota " +"vyjádřena jako procento (například 200%), vypočítá se podle výšky vrstvy." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:276 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:599 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:717 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:974 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1298 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1460 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1621 +msgid "mm or % (leave 0 for default)" +msgstr "mm nebo % (ponechte 0 jako výchozí)" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:283 +msgid "" +"This separate setting will affect the speed of external perimeters (the " +"visible ones). If expressed as percentage (for example: 80%) it will be " +"calculated on the perimeters speed setting above. Set to zero for auto." +msgstr "" +"Toto oddělené nastavení ovlivní rychlost tisku vnějších perimetrů (těch " +"viditelných). Pokud je hodnota vyjádřena procenty (například: 80%), bude " +"rychlost vypočítána z hodnoty rychlosti tisku perimetrů, nastavené výše. " +"Nastavte nulu pro automatický výpočet." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:286 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:621 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1257 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1308 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1503 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1633 +msgid "mm/s or %" +msgstr "mm nebo %" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:293 +msgid "External perimeters first" +msgstr "Nejprve tisknout vnější perimetry" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:295 +msgid "" +"Print contour perimeters from the outermost one to the innermost one instead " +"of the default inverse order." +msgstr "" +"Tisk obrysových perimetrů od vnějších po vnitřní namísto opačného výchozího " +"pořadí." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:301 +msgid "Extra perimeters if needed" +msgstr "Extra perimetry pokud jsou potřeba" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:303 +#, fuzzy, c-format +msgid "" +"Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r " +"keeps adding perimeters, until more than 70% of the loop immediately above " +"is supported." +msgstr "" +"Přidání více perimetrů, pokud je potřeba, pro vyvarování se tvorbě mezer v " +"šikmých plochách. Slic3r pokračuje v přidávání perimetrů, dokud není " +"podepřeno více než 70% perimetrů v následující vrstvě." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:311 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:794 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1231 +msgid "Extruder" +msgstr "Extrudér" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:313 +msgid "" +"The extruder to use (unless more specific extruder settings are specified). " +"This value overrides perimeter and infill extruders, but not the support " +"extruders." +msgstr "" +"Extrudér, který chcete použít (pokud nejsou zvoleny specifičtější nastavení " +"extruderu). Tato hodnota přepíše nastavení perimetrového a výplňového " +"exrtuderu, ale ne nastavení extrudéru pro podpory." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:324 +msgid "Height" +msgstr "Výška" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:325 +msgid "" +"Set this to the vertical distance between your nozzle tip and (usually) the " +"X carriage rods. In other words, this is the height of the clearance " +"cylinder around your extruder, and it represents the maximum depth the " +"extruder can peek before colliding with other printed objects." +msgstr "" +"Zadejte vertikální vzdálenost mezi tryskou a (obvykle) tyčemi osy X. Jinými " +"slovy, je to výška kolizního prostoru okolo extrudéru a představuje " +"maximální hloubku, které může extrudér dosáhnout před kolizí s jinými, již " +"vytištěnými, objekty." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:335 +msgid "Radius" +msgstr "Rádius" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:336 +#, fuzzy +msgid "" +"Set this to the clearance radius around your extruder. If the extruder is " +"not centered, choose the largest value for safety. This setting is used to " +"check for collisions and to display the graphical preview in the plater." +msgstr "" +"Zadejte horizontální rádius kolizního prostoru okolo extrudéru. Pokud tryska " +"není v centru tohoto rádiusu, zvolte nejdelší vzdálenost. Toto nastavení " +"slouží ke kontrole kolizí a zobrazení grafického náhledu v Plater." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:346 +msgid "Extruder Color" +msgstr "Barva extrudéru" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:347 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:410 +#, fuzzy +msgid "This is only used in the Slic3r interface as a visual help." +msgstr "Toto je ve Slic3ru jako názorná pomoc." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:354 +msgid "Extruder offset" +msgstr "Odsazení extrudéru" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:355 +msgid "" +"If your firmware doesn't handle the extruder displacement you need the G-" +"code to take it into account. This option lets you specify the displacement " +"of each extruder with respect to the first one. It expects positive " +"coordinates (they will be subtracted from the XY coordinate)." +msgstr "" +"Pokud firmware nezpracovává umístění extrudéru správně, potřebujete aby to " +"vzal G-kód v úvahu. Toto nastavení umožňuje určit odsazení každého extruderu " +"vzhledem k prvnímu. Očekávají se pozitivní souřadnice (budou odečteny od " +"souřadnice XY)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:364 +msgid "Extrusion axis" +msgstr "Osa extrudéru" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:365 +msgid "" +"Use this option to set the axis letter associated to your printer's extruder " +"(usually E but some printers use A)." +msgstr "" +"Touto volbou nastavíte písmeno osy přidružené k extruderu tiskárny (obvykle " +"E, ale některé tiskárny používají A)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:371 +msgid "Extrusion multiplier" +msgstr "Násobič extruze" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:372 +msgid "" +"This factor changes the amount of flow proportionally. You may need to tweak " +"this setting to get nice surface finish and correct single wall widths. " +"Usual values are between 0.9 and 1.1. If you think you need to change this " +"more, check filament diameter and your firmware E steps." +msgstr "" +"Tento faktor mění poměrné množství toku. Možná bude třeba toto nastavení " +"vyladit, pro dosažení hezkého povrchu a správné šířky jednotlivých stěn. " +"Obvyklé hodnoty jsou mezi 0,9 a 1,1. Pokud si myslíte, že hodnotu " +"potřebujete změnit více, zkontrolujte průměr vlákna a E kroky ve firmwaru." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:380 +msgid "Default extrusion width" +msgstr "Výchozí šířka extruze" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:382 +msgid "" +"Set this to a non-zero value to allow a manual extrusion width. If left to " +"zero, Slic3r derives extrusion widths from the nozzle diameter (see the " +"tooltips for perimeter extrusion width, infill extrusion width etc). If " +"expressed as percentage (for example: 230%), it will be computed over layer " +"height." +msgstr "" +"Nastavením kladné hodnoty povolíte manuální šířku extruze. Pokud je hodnota " +"ponechána na nule, Slic3r odvozuje šířku extruze z průměru trysky (viz " +"nápovědy pro šířku extruze perimetru, šířku extruze výplně apod.). Pokud je " +"hodnota vyjádřena procenty (například: 230%), vypočítá se z výšky vrstvy." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:386 +msgid "mm or % (leave 0 for auto)" +msgstr "mm or % (pro automatické ponechte 0)" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:391 +msgid "Keep fan always on" +msgstr "Ventilátor vždy zapnutý" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:392 +msgid "" +"If this is enabled, fan will never be disabled and will be kept running at " +"least at its minimum speed. Useful for PLA, harmful for ABS." +msgstr "" +"Pokud je tato funkce zapnutá, ventilátor nebude nikdy vypnut a bude udržován " +"v chodu alespoň rychlostí která je nastavena jako minimální rychlost. " +"Užitečné pro PLA, škodlivé pro ABS." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:398 +msgid "Enable fan if layer print time is below" +msgstr "Zapnout ventilátor pokud je doba tisku vrstvy kratší než" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:399 +msgid "" +"If layer print time is estimated below this number of seconds, fan will be " +"enabled and its speed will be calculated by interpolating the minimum and " +"maximum speeds." +msgstr "" +"Pokud je doba tisku vrstvy odhadnuta jako kratší než tato nastavená hodnota " +"ve vteřinách, ventilátor bude aktivován a jeho rychlost bude vypočtena " +"interpolací minimální a maximální rychlosti." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:401 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1244 +msgid "approximate seconds" +msgstr "vteřin přibližně" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:409 +msgid "Color" +msgstr "Barva" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:416 +msgid "Filament notes" +msgstr "Poznámky k filamentu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:417 +msgid "You can put your notes regarding the filament here." +msgstr "Zde můžete vložit poznámky týkající se filamentu." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:425 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:819 +msgid "Max volumetric speed" +msgstr "Maximální objemová rychlost" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:426 +msgid "" +"Maximum volumetric speed allowed for this filament. Limits the maximum " +"volumetric speed of a print to the minimum of print and filament volumetric " +"speed. Set to zero for no limit." +msgstr "" +"Maximální povolený objem průtoku pro tento filament. Omezuje maximální " +"rychlost průtoku pro tisk až na minimální rychlost průtoku pro tisk a " +"filament. Zadejte nulu pro nastavení bez omezení." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:429 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:822 +msgid "mm\\u00B3/s" +msgstr "mm\\u00B3/s" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:436 +msgid "" +"Enter your filament diameter here. Good precision is required, so use a " +"caliper and do multiple measurements along the filament, then compute the " +"average." +msgstr "" +"Zde zadejte průměr filamentu. Je zapotřebí správné přesnosti, proto použijte " +"šupleru a proveďte několik měření podél vlákna, poté vypočtete průměr." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:444 +msgid "Density" +msgstr "Hustota" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:445 +#, fuzzy +msgid "" +"Enter your filament density here. This is only for statistical information. " +"A decent way is to weigh a known length of filament and compute the ratio of " +"the length to volume. Better is to calculate the volume directly through " +"displacement." +msgstr "" +"Zde zadejte hustotu filamentu. Toto je pouze pro statistické informace. " +"Přípustný způsob je zvážit známou délku vlákna a vypočítat poměr délky k " +"objemu. Je lepší vypočítat objem přímo přes posun." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:448 +msgid "g/cm^3" +msgstr "g/cm^3" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:454 +msgid "Filament type" +msgstr "Typ filamentu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:455 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1004 +#, fuzzy +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and they can access the Slic3r config settings by reading " +"environment variables." +msgstr "" +"Pokud chcete zpracovat výstupní G-kód pomocí vlastních skriptů, stačí zde " +"uvést jejich absolutní cesty. Oddělte více skriptů středníkem. Skripty " +"předají absolutní cestu k souboru G-kódu jako první argument a mohou " +"přistupovat k nastavení konfigurace Slic3ru čtením proměnných prostředí." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:474 +msgid "Soluble material" +msgstr "Rozpustný materiál" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:475 +msgid "Soluble material is most likely used for a soluble support." +msgstr "Rozpustný materiál je převážně používán pro tisk rozpustných podpor." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:480 +msgid "Cost" +msgstr "Náklady" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:481 +msgid "" +"Enter your filament cost per kg here. This is only for statistical " +"information." +msgstr "" +"Zde zadejte cenu filamentu za kg. Slouží pouze pro statistické informace." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:482 +msgid "money/kg" +msgstr "korun/kg" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:491 +msgid "Fill angle" +msgstr "Úhel výplně" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:493 +#, fuzzy +msgid "" +"Default base angle for infill orientation. Cross-hatching will be applied to " +"this. Bridges will be infilled using the best direction Slic3r can detect, " +"so this setting does not affect them." +msgstr "" +"Výchozí základní úhel pro orientaci výplně. Na toto bude použito křížové " +"šrafování. Mosty budou vyplněny nejlepším směrem, který Slic3r dokáže " +"rozpoznat, takže toto nastavení je neovlivní." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:505 +msgid "Fill density" +msgstr "Hustota výplně" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:507 +#, c-format +msgid "Density of internal infill, expressed in the range 0% - 100%." +msgstr "Hustota vnitřní výplně, vyjádřená v rozmezí 0% až 100%." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:543 +msgid "Fill pattern" +msgstr "Vzor výplně" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:545 +msgid "Fill pattern for general low-density infill." +msgstr "Vzor výplně pro obecnou výplň s nízkou hustotou." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:575 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:584 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:593 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:627 +msgid "First layer" +msgstr "První vrstva" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:576 +msgid "" +"This is the acceleration your printer will use for first layer. Set zero to " +"disable acceleration control for first layer." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:585 +msgid "" +"Heated build plate temperature for the first layer. Set this to zero to " +"disable bed temperature control commands in the output." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:595 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for first " +"layer. You can use this to force fatter extrudates for better adhesion. If " +"expressed as percentage (for example 120%) it will be computed over first " +"layer height. If set to zero, it will use the default extrusion width." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:605 +msgid "First layer height" +msgstr "Výška první vrstvy" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:607 +msgid "" +"When printing with very low layer heights, you might still want to print a " +"thicker bottom layer to improve adhesion and tolerance for non perfect build " +"plates. This can be expressed as an absolute value or as a percentage (for " +"example: 150%) over the default layer height." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:611 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:742 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1392 +msgid "mm or %" +msgstr "mm nebo %" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:617 +msgid "First layer speed" +msgstr "Rychlost první vrstvy" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:618 +msgid "" +"If expressed as absolute value in mm/s, this speed will be applied to all " +"the print moves of the first layer, regardless of their type. If expressed " +"as a percentage (for example: 40%) it will scale the default speeds." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:628 +msgid "" +"Extruder temperature for first layer. If you want to control temperature " +"manually during print, set this to zero to disable temperature control " +"commands in the output file." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:636 +msgid "Gap fill" +msgstr "Výplň mezer" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:638 +msgid "" +"Speed for filling small gaps using short zigzag moves. Keep this reasonably " +"low to avoid too much shaking and resonance issues. Set zero to disable gaps " +"filling." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:646 +#, fuzzy +msgid "Verbose G-code" +msgstr "Verbose G-code" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:647 +msgid "" +"Enable this to get a commented G-code file, with each line explained by a " +"descriptive text. If you print from SD card, the additional weight of the " +"file could make your firmware slow down." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:654 +msgid "G-code flavor" +msgstr "Druh G-kódu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:655 +msgid "" +"Some G/M-code commands, including temperature control and others, are not " +"universal. Set this option to your printer's firmware to get a compatible " +"output. The \"No extrusion\" flavor prevents Slic3r from exporting any " +"extrusion value at all." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:684 +msgid "" +"This is the acceleration your printer will use for infill. Set zero to " +"disable acceleration control for infill." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:692 +msgid "Combine infill every" +msgstr "Kombinovat výplň každou" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:694 +msgid "" +"This feature allows to combine infill and speed up your print by extruding " +"thicker infill layers while preserving thin perimeters, thus accuracy." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:698 +msgid "Combine infill every n layers" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:703 +msgid "Infill extruder" +msgstr "Extruder pro výplň" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:705 +msgid "The extruder to use when printing infill." +msgstr "Extruder který se použije pro tisk výplní." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:713 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for infill. If " +"left zero, default extrusion width will be used if set, otherwise 1.125 x " +"nozzle diameter will be used. You may want to use fatter extrudates to speed " +"up the infill and make your parts stronger. If expressed as percentage (for " +"example 90%) it will be computed over layer height." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:722 +msgid "Infill before perimeters" +msgstr "Tisknout výplň před tiskem perimetrů" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:723 +msgid "" +"This option will switch the print order of perimeters and infill, making the " +"latter first." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:728 +msgid "Only infill where needed" +msgstr "Výplň pouze kde je potřeba" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:730 +msgid "" +"This option will limit infill to the areas actually needed for supporting " +"ceilings (it will act as internal support material). If enabled, slows down " +"the G-code generation due to the multiple checks involved." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:737 +msgid "Infill/perimeters overlap" +msgstr "Přesah pro výplň/perimetry" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:739 +msgid "" +"This setting applies an additional overlap between infill and perimeters for " +"better bonding. Theoretically this shouldn't be needed, but backlash might " +"cause gaps. If expressed as percentage (example: 15%) it is calculated over " +"perimeter extrusion width." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:750 +msgid "Speed for printing the internal fill. Set to zero for auto." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:759 +msgid "Interface shells" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:760 +msgid "" +"Force the generation of solid shells between adjacent materials/volumes. " +"Useful for multi-extruder prints with translucent materials or manual " +"soluble support material." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:768 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1137 +msgid "After layer change G-code" +msgstr "After layer change G-code" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:769 +msgid "" +"This custom code is inserted at every layer change, right after the Z move " +"and before the extruder moves to the first layer point. Note that you can " +"use placeholder variables for all Slic3r settings as well as [layer_num] and " +"[layer_z]." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:779 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:315 +msgid "Layer height" +msgstr "Výška vrstvy" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:781 +msgid "" +"This setting controls the height (and thus the total number) of the slices/" +"layers. Thinner layers give better accuracy but take more time to print." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:789 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:798 +msgid "Max" +msgstr "Maximálně" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:790 +msgid "This setting represents the maximum speed of your fan." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:799 +#, c-format +msgid "" +"This is the highest printable layer height for this extruder, used to cap " +"the variable layer height and support layer height. Maximum recommended " +"layer height is 75% of the extrusion width to achieve reasonable inter-layer " +"adhesion. If set to 0, layer height is limited to 75% of the nozzle diameter." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:809 +msgid "Max print speed" +msgstr "Maximální rychlost tisku" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:810 +msgid "" +"When setting other speed settings to 0 Slic3r will autocalculate the optimal " +"speed in order to keep constant extruder pressure. This experimental setting " +"is used to set the highest print speed you want to allow." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:820 +msgid "" +"This experimental setting is used to set the maximum volumetric speed your " +"extruder supports." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:828 +msgid "Max volumetric slope positive" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:829 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:840 +msgid "" +"This experimental setting is used to limit the speed of change in extrusion " +"rate. A value of 1.8 mm\\u00B3/s\\u00B2 ensures, that a change from the " +"extrusion rate of 1.8 mm\\u00B3/s (0.45mm extrusion width, 0.2mm extrusion " +"height, feedrate 20 mm/s) to 5.4 mm\\u00B3/s (feedrate 60 mm/s) will take at " +"least 2 seconds." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:833 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:844 +msgid "mm\\u00B3/s\\u00B2" +msgstr "mm\\u00B3/s\\u00B2" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:839 +msgid "Max volumetric slope negative" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:850 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:859 +msgid "Min" +msgstr "Minimálně" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:851 +msgid "This setting represents the minimum PWM your fan needs to work." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:860 +msgid "" +"This is the lowest printable layer height for this extruder and limits the " +"resolution for variable layer height. Typical values are between 0.05 mm and " +"0.1 mm." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:868 +msgid "Min print speed" +msgstr "Minimální rychlost tisku" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:869 +msgid "Slic3r will not scale speed down below this speed." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:876 +msgid "Minimum extrusion length" +msgstr "Minimální délka extruze" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:877 +msgid "" +"Generate no less than the number of skirt loops required to consume the " +"specified amount of filament on the bottom layer. For multi-extruder " +"machines, this minimum applies to each extruder." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:886 +msgid "Configuration notes" +msgstr "Configurační poznámky" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:887 +msgid "" +"You can put here your personal notes. This text will be added to the G-code " +"header comments." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:896 +msgid "Nozzle diameter" +msgstr "Průměr trysky" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:897 +msgid "" +"This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:903 +msgid "API Key" +msgstr "Klíč API" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:904 +msgid "" +"Slic3r can upload G-code files to OctoPrint. This field should contain the " +"API Key required for authentication." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:910 +msgid "Host or IP" +msgstr "Host nebo IP" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:911 +msgid "" +"Slic3r can upload G-code files to OctoPrint. This field should contain the " +"hostname or IP address of the OctoPrint instance." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:917 +msgid "Only retract when crossing perimeters" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:918 +msgid "" +"Disables retraction when the travel path does not exceed the upper layer's " +"perimeters (and thus any ooze will be probably invisible)." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:924 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1697 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:805 +msgid "Enable" +msgstr "Zapnout" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:925 +msgid "" +"This option will drop the temperature of the inactive extruders to prevent " +"oozing. It will enable a tall skirt automatically and move extruders outside " +"such skirt when changing temperatures." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:932 +msgid "Output filename format" +msgstr "Formát výstupního názvu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:933 +msgid "" +"You can use all configuration options as variables inside this template. For " +"example: [layer_height], [fill_density] etc. You can also use [timestamp], " +"[year], [month], [day], [hour], [minute], [second], [version], " +"[input_filename], [input_filename_base]." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:942 +msgid "Detect bridging perimeters" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:944 +msgid "" +"Experimental option to adjust flow for overhangs (bridge flow will be used), " +"to apply bridge speed to them and enable fan." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:950 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:968 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:980 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:990 +msgid "Perimeters" +msgstr "Perimetry" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:951 +msgid "" +"This is the acceleration your printer will use for perimeters. A high value " +"like 9000 usually gives good results if your hardware is up to the job. Set " +"zero to disable acceleration control for perimeters." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:959 +msgid "Perimeter extruder" +msgstr "Extruder pro perimetry" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:961 +msgid "" +"The extruder to use when printing perimeters and brim. First extruder is 1." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:970 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for perimeters. " +"You may want to use thinner extrudates to get more accurate surfaces. If " +"left zero, default extrusion width will be used if set, otherwise 1.125 x " +"nozzle diameter will be used. If expressed as percentage (for example 200%) " +"it will be computed over layer height." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:982 +msgid "" +"Speed for perimeters (contours, aka vertical shells). Set to zero for auto." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:992 +msgid "" +"This option sets the number of perimeters to generate for each layer. Note " +"that Slic3r may increase this number automatically when it detects sloping " +"surfaces which benefit from a higher number of perimeters if the Extra " +"Perimeters option is enabled." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:996 +msgid "(minimum)" +msgstr "(minimálně)" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1003 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:495 +msgid "Post-processing scripts" +msgstr "Post-processing scripts" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1016 +msgid "Printer notes" +msgstr "Poznámky o tiskárně" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1017 +msgid "You can put your notes regarding the printer here." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1031 +msgid "Raft layers" +msgstr "Vrstev raftu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1033 +msgid "" +"The object will be raised by this number of layers, and support material " +"will be generated under it." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1041 +msgid "Resolution" +msgstr "Rozlišení" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1042 +msgid "" +"Minimum detail resolution, used to simplify the input file for speeding up " +"the slicing job and reducing memory usage. High-resolution models often " +"carry more detail than printers can render. Set to zero to disable any " +"simplification and use full resolution from input." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1052 +msgid "Minimum travel after retraction" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1053 +msgid "" +"Retraction is not triggered when travel moves are shorter than this length." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1059 +msgid "Retract amount before wipe" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1060 +msgid "" +"With bowden extruders, it may be wise to do some amount of quick retract " +"before doing the wipe movement." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1067 +msgid "Retract on layer change" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1068 +msgid "This flag enforces a retraction whenever a Z move is done." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1073 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1082 +msgid "Length" +msgstr "Vzdálenost" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1074 +msgid "Retraction Length" +msgstr "Vzdálenost retrakce" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1075 +msgid "" +"When retraction is triggered, filament is pulled back by the specified " +"amount (the length is measured on raw filament, before it enters the " +"extruder)." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1077 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1087 +msgid "mm (zero to disable)" +msgstr "mm (nula pro vypnutí)" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1083 +msgid "Retraction Length (Toolchange)" +msgstr "Vzdálenost retrakce (při změně nástroje)" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1084 +msgid "" +"When retraction is triggered before changing tool, filament is pulled back " +"by the specified amount (the length is measured on raw filament, before it " +"enters the extruder)." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1092 +msgid "Lift Z" +msgstr "Zvednout Z" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1093 +msgid "" +"If you set this to a positive value, Z is quickly raised every time a " +"retraction is triggered. When using multiple extruders, only the setting for " +"the first extruder will be considered." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1101 +msgid "Above Z" +msgstr "Nad Z" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1102 +msgid "Only lift Z above" +msgstr "Zvednout Z pouze nad" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1103 +msgid "" +"If you set this to a positive value, Z lift will only take place above the " +"specified absolute Z. You can tune this setting for skipping lift on the " +"first layers." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1110 +msgid "Below Z" +msgstr "Pod Z" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1111 +msgid "Only lift Z below" +msgstr "Zvednout Z pouze pod" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1112 +msgid "" +"If you set this to a positive value, Z lift will only take place below the " +"specified absolute Z. You can tune this setting for limiting lift to the " +"first layers." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1120 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1128 +msgid "Extra length on restart" +msgstr "Extra vzdálenost při restartu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1121 +msgid "" +"When the retraction is compensated after the travel move, the extruder will " +"push this additional amount of filament. This setting is rarely needed." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1129 +msgid "" +"When the retraction is compensated after changing tool, the extruder will " +"push this additional amount of filament." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1136 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1137 +msgid "Retraction Speed" +msgstr "Rychlost retrakce" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1138 +msgid "The speed for retractions (it only applies to the extruder motor)." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1144 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1145 +msgid "Deretraction Speed" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1146 +msgid "" +"The speed for loading of a filament into extruder after retraction (it only " +"applies to the extruder motor). If left to zero, the retraction speed is " +"used." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1153 +msgid "Seam position" +msgstr "Pozice švu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1155 +msgid "Position of perimeters starting points." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1171 +msgid "Direction" +msgstr "Směr" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1173 +msgid "Preferred direction of the seam" +msgstr "Preferovaný směr švu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1174 +msgid "Seam preferred direction" +msgstr "Preferovaný směr švu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1182 +msgid "Jitter" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1184 +msgid "Seam preferred direction jitter" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1185 +msgid "Preferred direction of the seam - jitter" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1195 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:989 +msgid "Serial port" +msgstr "Sériový port" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1196 +msgid "USB/serial port for printer connection." +msgstr "USB/sériový port pro připojení tiskárny." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1204 +msgid "Serial port speed" +msgstr "Rychlost sériového portu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1205 +msgid "Speed (baud) of USB/serial port for printer connection." +msgstr "Rychlost (baud) USB/sériového portu pro připojení tiskárny." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1214 +msgid "Distance from object" +msgstr "Vzdálenost od objektu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1215 +msgid "" +"Distance between skirt and object(s). Set this to zero to attach the skirt " +"to the object(s) and get a brim for better adhesion." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1223 +msgid "Skirt height" +msgstr "Výška skirtu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1224 +msgid "" +"Height of skirt expressed in layers. Set this to a tall value to use skirt " +"as a shield against drafts." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1231 +msgid "Loops (minimum)" +msgstr "Smyček (minimálně)" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1232 +msgid "Skirt Loops" +msgstr "Smyček skirtu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1233 +msgid "" +"Number of loops for the skirt. If the Minimum Extrusion Length option is " +"set, the number of loops might be greater than the one configured here. Set " +"this to zero to disable skirt completely." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1241 +msgid "Slow down if layer print time is below" +msgstr "Zpomalit tisk pokud je doba tisku kratší než" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1242 +msgid "" +"If layer print time is estimated below this number of seconds, print moves " +"speed will be scaled down to extend duration to this value." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1252 +msgid "Small perimeters" +msgstr "Malé perimetry" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1254 +msgid "" +"This separate setting will affect the speed of perimeters having radius <= " +"6.5mm (usually holes). If expressed as percentage (for example: 80%) it will " +"be calculated on the perimeters speed setting above. Set to zero for auto." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1264 +msgid "Solid infill threshold area" +msgstr "Prahová hodnota plochy pro plnou výplň" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1266 +msgid "" +"Force solid infill for regions having a smaller area than the specified " +"threshold." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1267 +msgid "mm\\u00B2" +msgstr "mm\\u00B2" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1273 +msgid "Solid infill extruder" +msgstr "Extrudér pro plnou výplň" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1275 +msgid "The extruder to use when printing solid infill." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1281 +msgid "Solid infill every" +msgstr "Plná výplň každou" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1283 +msgid "" +"This feature allows to force a solid layer every given number of layers. " +"Zero to disable. You can set this to any value (for example 9999); Slic3r " +"will automatically choose the maximum possible number of layers to combine " +"according to nozzle diameter and layer height." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1293 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1303 +msgid "Solid infill" +msgstr "Plná výplň" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1295 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for infill for " +"solid surfaces. If left zero, default extrusion width will be used if set, " +"otherwise 1.125 x nozzle diameter will be used. If expressed as percentage " +"(for example 90%) it will be computed over layer height." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1305 +msgid "" +"Speed for printing solid regions (top/bottom/internal horizontal shells). " +"This can be expressed as a percentage (for example: 80%) over the default " +"infill speed above. Set to zero for auto." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1316 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:331 +msgid "Solid layers" +msgstr "Plných vrstev" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1317 +msgid "Number of solid layers to generate on top and bottom surfaces." +msgstr "Počet plných vstev generovaných vrchních a spodních površích." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1324 +msgid "Spiral vase" +msgstr "Spirálová váza" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1325 +msgid "" +"This feature will raise Z gradually while printing a single-walled object in " +"order to remove any visible seam. This option requires a single perimeter, " +"no infill, no top solid layers and no support material. You can still set " +"any number of bottom solid layers as well as skirt/brim loops. It won't work " +"when printing more than an object." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1334 +msgid "Temperature variation" +msgstr "Temperature variation" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1335 +msgid "" +"Temperature difference to be applied when an extruder is not active. Enables " +"a full-height \"sacrificial\" skirt on which the nozzles are periodically " +"wiped." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1344 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1359 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:846 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1119 +msgid "Start G-code" +msgstr "Začátek G-kódu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1345 +msgid "" +"This start procedure is inserted at the beginning, after bed has reached the " +"target temperature and extruder just started heating, and before extruder " +"has finished heating. If Slic3r detects M104 or M190 in your custom codes, " +"such commands will not be prepended automatically so you're free to " +"customize the order of heating commands and other custom actions. Note that " +"you can use placeholder variables for all Slic3r settings, so you can put a " +"\"M109 S[first_layer_temperature]\" command wherever you want." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1360 +msgid "" +"This start procedure is inserted at the beginning, after any printer start " +"gcode. This is used to override settings for a specific filament. If Slic3r " +"detects M104, M109, M140 or M190 in your custom codes, such commands will " +"not be prepended automatically so you're free to customize the order of " +"heating commands and other custom actions. Note that you can use placeholder " +"variables for all Slic3r settings, so you can put a \"M109 " +"S[first_layer_temperature]\" command wherever you want. If you have multiple " +"extruders, the gcode is processed in extruder order." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1375 +msgid "Single Extruder Multi Material" +msgstr "Multi Materiálový tisk s jedním extrudérem" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1376 +msgid "The printer multiplexes filaments into a single hot end." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1381 +msgid "Generate support material" +msgstr "Generovat podpory" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1383 +msgid "Enable support material generation." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1388 +msgid "XY separation between an object and its support" +msgstr "XY vzdálenost mezi objektem a podporami" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1390 +msgid "" +"XY separation between an object and its support. If expressed as percentage " +"(for example 50%), it will be calculated over external perimeter width." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1400 +msgid "Pattern angle" +msgstr "Úhel vzoru" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1402 +msgid "" +"Use this setting to rotate the support material pattern on the horizontal " +"plane." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1410 +msgid "Support on build plate only" +msgstr "Podpory pouze na tiskové ploše" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1412 +msgid "" +"Only create support if it lies on a build plate. Don't create support on a " +"print." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1418 +msgid "Contact Z distance" +msgstr "Kontaktní vzdálenost Z" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1420 +msgid "" +"The vertical distance between object and support material interface. Setting " +"this to 0 will also prevent Slic3r from using bridge flow and speed for the " +"first object layer." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1433 +#, fuzzy +msgid "Enforce support for the first" +msgstr "Zesílit podpory pro prvních" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1435 +msgid "" +"Generate support material for the specified number of layers counting from " +"bottom, regardless of whether normal support material is enabled or not and " +"regardless of any angle threshold. This is useful for getting more adhesion " +"of objects having a very thin or poor footprint on the build plate." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1441 +msgid "Enforce support for the first n layers" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1446 +msgid "Support material/raft/skirt extruder" +msgstr "Support material/raft/skirt extruder" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1448 +msgid "" +"The extruder to use when printing support material, raft and skirt (1+, 0 to " +"use the current extruder to minimize tool changes)." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1457 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for support " +"material. If left zero, default extrusion width will be used if set, " +"otherwise nozzle diameter will be used. If expressed as percentage (for " +"example 90%) it will be computed over layer height." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1465 +msgid "Interface loops" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1467 +msgid "" +"Cover the top contact layer of the supports with loops. Disabled by default." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1472 +msgid "Support material/raft interface extruder" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1474 +msgid "" +"The extruder to use when printing support material interface (1+, 0 to use " +"the current extruder to minimize tool changes). This affects raft too." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1481 +msgid "Interface layers" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1483 +msgid "" +"Number of interface layers to insert between the object(s) and support " +"material." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1490 +msgid "Interface pattern spacing" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1492 +msgid "Spacing between interface lines. Set zero to get a solid interface." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1499 +msgid "Support material interface" +msgstr "Support material interface" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1501 +msgid "" +"Speed for printing support material interface layers. If expressed as " +"percentage (for example 50%) it will be calculated over support material " +"speed." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1510 +msgid "Pattern" +msgstr "Vzor" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1512 +msgid "Pattern used to generate support material." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1526 +msgid "Pattern spacing" +msgstr "Vzdálenost vzoru" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1528 +msgid "Spacing between support material lines." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1537 +msgid "Speed for printing support material." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1544 +msgid "Synchronize with object layers" +msgstr "Synchronizovat s vrstvami objektu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1546 +msgid "" +"Synchronize support layers with the object print layers. This is useful with " +"multi-material printers, where the extruder switch is expensive." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1552 +msgid "Overhang threshold" +msgstr "Práh přesahu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1554 +msgid "" +"Support material will not be generated for overhangs whose slope angle " +"(90\\u00B0 = vertical) is above the given threshold. In other words, this " +"value represent the most horizontal slope (measured from the horizontal " +"plane) that you can print without support material. Set to zero for " +"automatic detection (recommended)." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1566 +msgid "With sheath around the support" +msgstr "S pouzdrem okolo podpor" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1568 +msgid "" +"Add a sheath (a single perimeter line) around the base support. This makes " +"the support more reliable, but also more difficult to remove." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1575 +msgid "" +"Extruder temperature for layers after the first one. Set this to zero to " +"disable temperature control commands in the output." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1578 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:793 +msgid "Temperature" +msgstr "Teplota" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1584 +msgid "Detect thin walls" +msgstr "Detekovat tenké zdi" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1586 +msgid "" +"Detect single-width walls (parts where two extrusions don't fit and we need " +"to collapse them into a single trace)." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1592 +msgid "Threads" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1593 +msgid "" +"Threads are used to parallelize long-running tasks. Optimal threads number " +"is slightly above the number of available cores/processors." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1604 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1143 +msgid "Tool change G-code" +msgstr "Tool change G-code" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1605 +msgid "" +"This custom code is inserted right before every extruder change. Note that " +"you can use placeholder variables for all Slic3r settings as well as " +"[previous_extruder] and [next_extruder]." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1615 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1626 +msgid "Top solid infill" +msgstr "Vrchní plná výplň" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1617 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for infill for " +"top surfaces. You may want to use thinner extrudates to fill all narrow " +"regions and get a smoother finish. If left zero, default extrusion width " +"will be used if set, otherwise nozzle diameter will be used. If expressed as " +"percentage (for example 90%) it will be computed over layer height." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1628 +msgid "" +"Speed for printing top solid layers (it only applies to the uppermost " +"external layers and not to their internal solid layers). You may want to " +"slow down this to get a nicer surface finish. This can be expressed as a " +"percentage (for example: 80%) over the solid infill speed above. Set to zero " +"for auto." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1640 +msgid "Top" +msgstr "Vrchní" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1642 +msgid "Number of solid layers to generate on top surfaces." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1644 +msgid "Top solid layers" +msgstr "Vrchních plných vrstev" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1649 +msgid "Travel" +msgstr "Přesun" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1650 +msgid "Speed for travel moves (jumps between distant extrusion points)." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1658 +msgid "Use firmware retraction" +msgstr "Použít retrakce z firmware" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1659 +msgid "" +"This experimental setting uses G10 and G11 commands to have the firmware " +"handle the retraction. This is only supported in recent Marlin." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1665 +msgid "Use relative E distances" +msgstr "Použít relativní E vzdálenosti" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1666 +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Most firmwares use absolute values." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1672 +msgid "Use volumetric E" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1673 +msgid "" +"This experimental setting uses outputs the E values in cubic millimeters " +"instead of linear millimeters. If your firmware doesn't already know " +"filament diameter(s), you can put commands like 'M200 D[filament_diameter_0] " +"T0' in your start G-code in order to turn volumetric mode on and use the " +"filament diameter associated to the filament selected in Slic3r. This is " +"only supported in recent Marlin." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1683 +msgid "Enable variable layer height feature" +msgstr "Zapnout variabilní výšku vrstev" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1684 +msgid "" +"Some printers or printer setups may have difficulties printing with a " +"variable layer height. Enabled by default." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1690 +msgid "Wipe while retracting" +msgstr "Očistit při retrakci" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1691 +msgid "" +"This flag will move the nozzle while retracting to minimize the possible " +"blob on leaky extruders." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1698 +msgid "" +"Multi material printers may need to prime or purge extruders on tool " +"changes. Extrude the excess material into the wipe tower." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1704 +msgid "Position X" +msgstr "Pozice X" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1705 +msgid "X coordinate of the left front corner of a wipe tower" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1711 +msgid "Position Y" +msgstr "Pozice Y" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1712 +msgid "Y coordinate of the left front corner of a wipe tower" +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1718 +msgid "Width" +msgstr "Šířka" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1719 +msgid "Width of a wipe tower" +msgstr "Šířka čistící věže" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1725 +msgid "Per color change depth" +msgstr "Hloubka výměny pro barvu" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1726 +msgid "" +"Depth of a wipe color per color change. For N colors, there will be maximum " +"(N-1) tool switches performed, therefore the total depth of the wipe tower " +"will be (N-1) times this value." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1734 +msgid "XY Size Compensation" +msgstr "Kompenzace XY rozměrů" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1736 +msgid "" +"The object will be grown/shrunk in the XY plane by the configured value " +"(negative = inwards, positive = outwards). This might be useful for fine-" +"tuning hole sizes." +msgstr "" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1744 +msgid "Z offset" +msgstr "Odsazení Z" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1745 +msgid "" +"This value will be added (or subtracted) from all the Z coordinates in the " +"output G-code. It is used to compensate for bad Z endstop position: for " +"example, if your endstop zero actually leaves the nozzle 0.3mm far from the " +"print bed, set this to -0.3 (or fix your endstop)." +msgstr "" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:39 +msgid "Shape" +msgstr "Tvar" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:46 +msgid "Rectangular" +msgstr "Obdélníkový" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:62 +msgid "Circular" +msgstr "Kruhový" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:75 +msgid "Load shape from STL..." +msgstr "Načíst tvar ze souboru STL…" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:120 +msgid "Settings" +msgstr "Nastavení" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:298 +msgid "Choose a file to import bed shape from (STL/OBJ/AMF/PRUSA):" +msgstr "Výběr souboru pro import tvaru tiskové podložky (STL/OBJ/AMF/PRUSA):" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:315 +msgid "Error! " +msgstr "Chyba! " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:324 +msgid "The selected file contains no geometry." +msgstr "Vybraný soubor neobsahuje geometrii." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:328 +msgid "" +"The selected file contains several disjoint areas. This is not supported." +msgstr "" +"Vybraný soubor obsahuje několik nespojených ploch. Tato možnost není " +"podporována." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.hpp:42 +msgid "Bed Shape" +msgstr "Tvar tiskové podložky" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:468 +msgid "Error" +msgstr "Chyba" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:473 +msgid "Notice" +msgstr "Oznámení" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:50 +msgid "Save current " +msgstr "Uložit stávající " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:51 +msgid "Delete this preset" +msgstr "Smazat přednastavení" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:330 +msgid "Horizontal shells" +msgstr "Horizontal shells" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:336 +msgid "Quality (slower slicing)" +msgstr "Kvalita (pomalejší slicing)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:353 +msgid "Reducing printing time" +msgstr "Zkracování tiskového času" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:365 +msgid "Skirt and brim" +msgstr "Skirt and brim" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:381 +msgid "Raft" +msgstr "Raft" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:412 +msgid "Speed for non-print moves" +msgstr "Speed for non-print moves" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:415 +msgid "Modifiers" +msgstr "Modifikátory" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:418 +msgid "Acceleration control (advanced)" +msgstr "Kontrola akcelerací (pokročilé)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:425 +msgid "Autospeed (advanced)" +msgstr "Automatická rychlost (pokročilé)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:431 +msgid "Multiple Extruders" +msgstr "Multiple Extruders" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:439 +msgid "Ooze prevention" +msgstr "Ooze prevention" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:464 +msgid "Overlap" +msgstr "Překrytí" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:467 +msgid "Flow" +msgstr "Průtok" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:470 +msgid "Other" +msgstr "Ostatní" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:477 +msgid "Output options" +msgstr "Možnosti výstupu" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:478 +msgid "Sequential printing" +msgstr "Sekvenční tisk" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:501 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:502 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:858 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:859 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1155 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1156 +msgid "Notes" +msgstr "Poznámky" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:508 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:866 +msgid "Dependencies" +msgstr "Závislosti" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:509 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:867 +msgid "Profile dependencies" +msgstr "Profilové závislosti" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:799 +msgid "Bed" +msgstr "Tisková podložka" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:804 +msgid "Cooling" +msgstr "Chlazení" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:816 +msgid "Fan settings" +msgstr "Nastavení ventilátoru" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:835 +msgid "Print speed override" +msgstr "Přepsání rychlosti tisku" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:845 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1118 +msgid "Custom G-code" +msgstr "Upravený G-kód" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:936 +msgid "General" +msgstr "Obecné" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:937 +msgid "Size and coordinates" +msgstr "Rozměr a souřadnice" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:941 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1642 +msgid "Set" +msgstr "Nastavit" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:961 +msgid "Capabilities" +msgstr "Možnosti" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1003 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1071 +msgid "Test" +msgstr "Test" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1016 +msgid "Connection to printer works correctly." +msgstr "Připojení k tiskárně pracuje správně." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1016 +msgid "Success!" +msgstr "Úspěch!" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1019 +msgid "Connection failed." +msgstr "Připojení selhalo." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1031 +msgid "OctoPrint upload" +msgstr "OctoPrint nahrávání" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1034 +msgid "Browse" +msgstr "Procházet" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1046 +msgid "Button BROWSE was clicked!" +msgstr "Tlačítko PROCHÁZET bylo stisknuto!" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1081 +msgid "Button TEST was clicked!" +msgstr "Tlačítko TEST bylo stisknuto!" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1109 +msgid "Firmware" +msgstr "Firmware" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1191 +msgid "Layer height limits" +msgstr "Výskové limity vrstvy" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1196 +msgid "Position (for multi-extruder printers)" +msgstr "Position (for multi-extruder printers)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1215 +msgid "" +"Retraction when tool is disabled (advanced settings for multi-extruder " +"setups)" +msgstr "" +"Retraction when tool is disabled (advanced settings for multi-extruder " +"setups)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1219 +msgid "Preview" +msgstr "Náhled" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1310 +msgid "" +"The Wipe option is not available when using the Firmware Retraction mode.\n" +"\n" +"Shall I disable it in order to enable Firmware Retraction?" +msgstr "" +"The Wipe option is not available when using the Firmware Retraction mode.\n" +"\n" +"Shall I disable it in order to enable Firmware Retraction?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1558 +msgid "The supplied name is empty. It can't be saved." +msgstr "The supplied name is empty. It can't be saved." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1569 +msgid "Something is wrong. It can't be saved." +msgstr "Něco se pokazilo. Nemůže být uloženo." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1586 +msgid "remove" +msgstr "odebrat" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1586 +msgid "delete" +msgstr "smazat" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1587 +msgid "Are you sure you want to " +msgstr "Jste si jistý že chcete " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1587 +msgid " the selected preset?" +msgstr " zvolené přednastavení?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1588 +msgid "Remove" +msgstr "Odebrat" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1588 +msgid "Delete" +msgstr "Smazat" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1589 +msgid " Preset" +msgstr " Přednastavení" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1641 +msgid "All" +msgstr "Vše" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1672 +msgid "Select the printers this profile is compatible with." +msgstr "Select the printers this profile is compatible with." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1756 +msgid "Save " +msgstr "Uložit " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1756 +msgid " as:" +msgstr " jako:" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1790 +msgid "" +"The supplied name is not valid; the following characters are not allowed:" +msgstr "" +"The supplied name is not valid; the following characters are not allowed:" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1793 +msgid "The supplied name is not available." +msgstr "The supplied name is not available." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:182 +msgid "Print Settings" +msgstr "Nastavení tisku" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:202 +msgid "Filament Settings" +msgstr "Nastavení Filamentu" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:248 +msgid "Save preset" +msgstr "Uložit přednastavení" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Field.cpp:35 +msgid "default" +msgstr "výchozí" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:71 +msgid "Custom" +msgstr "Upravený" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:212 +msgid "Array of language names and identifiers should have the same size." +msgstr "" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:223 +msgid "Select the language" +msgstr "Výběr jazyka" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:223 +msgid "Language" +msgstr "Jazyk" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:321 +msgid "Change Application Language" +msgstr "Změnit Jazyk Aplikace" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:314 +msgid "Layers and perimeters" +msgstr "Vrstvy a perimetry" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:319 +msgid "Vertical shells" +msgstr "Vertical shells" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:366 +msgid "Skirt" +msgstr "Skirt" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:372 +msgid "Brim" +msgstr "Brim" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:385 +msgid "Options for support material and raft" +msgstr "Options for support material and raft" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:400 +msgid "Speed for print moves" +msgstr "Speed for print moves" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:443 +msgid "Wipe tower" +msgstr "Čistící věž" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:454 +msgid "Extrusion width" +msgstr "Šířka extruze" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:480 +msgid "Extruder clearance (mm)" +msgstr "" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:489 +msgid "Output file" +msgstr "Výstupní soubor" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:534 +#, c-format +msgid "" +"The Spiral Vase mode requires:\n" +"- one perimeter\n" +"- no top solid layers\n" +"- 0% fill density\n" +"- no support material\n" +"- no ensure_vertical_shell_thickness\n" +"\n" +"Shall I adjust those settings in order to enable Spiral Vase?" +msgstr "" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:541 +msgid "Spiral Vase" +msgstr "Spirálová váza" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:560 +msgid "" +"The Wipe Tower currently supports only:\n" +"- first layer height 0.2mm\n" +"- layer height from 0.15mm to 0.35mm\n" +"\n" +"Shall I adjust those settings in order to enable the Wipe Tower?" +msgstr "" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:564 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:585 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:602 +msgid "Wipe Tower" +msgstr "Čistící věž" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:581 +msgid "" +"The Wipe Tower currently supports the non-soluble supports only\n" +"if they are printed with the current extruder without triggering a tool " +"change.\n" +"(both support_material_extruder and support_material_interface_extruder need " +"to be set to 0).\n" +"\n" +"Shall I adjust those settings in order to enable the Wipe Tower?" +msgstr "" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:599 +msgid "" +"For the Wipe Tower to work with the soluble supports, the support layers\n" +"need to be synchronized with the object layers.\n" +"\n" +"Shall I synchronize support layers in order to enable the Wipe Tower?" +msgstr "" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:617 +msgid "" +"Supports work better, if the following feature is enabled:\n" +"- Detect bridging perimeters\n" +"\n" +"Shall I adjust those settings for supports?" +msgstr "" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:620 +msgid "Support Generator" +msgstr "Generátor Podpor" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:662 +msgid "The " +msgstr "" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:662 +#, c-format +msgid "" +" infill pattern is not supposed to work at 100% density.\n" +"\n" +"Shall I switch to rectilinear fill pattern?" +msgstr "" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:785 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:786 +msgid "Filament" +msgstr "Filament" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:817 +msgid "Fan speed" +msgstr "Rychlost ventilátoru" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:825 +msgid "Cooling thresholds" +msgstr "Práh chlazení" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:831 +msgid "Filament properties" +msgstr "Vlastnosti filamentu" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:988 +msgid "USB/Serial connection" +msgstr "USB/Sériové připojení" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:994 +msgid "Rescan serial ports" +msgstr "Znovu prohledat sériové porty" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1149 +msgid "Between objects G-code (for sequential printing)" +msgstr "Between objects G-code (for sequential printing)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1185 +msgid "Extruder " +msgstr "Extrudér " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1199 +msgid "Retraction" +msgstr "Retrakce" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1202 +msgid "Only lift Z" +msgstr "Pouze zvednout Z" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1312 +msgid "Firmware Retraction" +msgstr "Firmware Retrakce" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1467 +msgid "Default " +msgstr "Výchozí " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1467 +msgid " preset" +msgstr " přednastavení" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1468 +msgid " preset\n" +msgstr " přednastavení\n" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1486 +msgid "" +"\n" +"\n" +"is not compatible with printer\n" +msgstr "" +"\n" +"\n" +"není kompatibilní s tiskárnou\n" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1486 +msgid "" +"\n" +"\n" +"and it has the following unsaved changes:" +msgstr "" +"\n" +"\n" +"a má neuložené následující změny:" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1487 +msgid "" +"\n" +"\n" +"has the following unsaved changes:" +msgstr "" +"\n" +"\n" +"má neuložené následující změny:" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1489 +msgid "" +"\n" +"\n" +"Discard changes and continue anyway?" +msgstr "" +"\n" +"\n" +"Zahodit změny a přesto pokračovat?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1490 +msgid "Unsaved Changes" +msgstr "Neuložené Změny" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:228 +msgid "Printer Settings" +msgstr "Nastavení tiskárny" diff --git a/resources/localization/en_US/Slic3rPE.mo b/resources/localization/en_US/Slic3rPE.mo new file mode 100644 index 000000000..3db8f8203 Binary files /dev/null and b/resources/localization/en_US/Slic3rPE.mo differ diff --git a/resources/localization/en_US/Slic3rPE_en.po b/resources/localization/en_US/Slic3rPE_en.po new file mode 100644 index 000000000..d9ea2a69d --- /dev/null +++ b/resources/localization/en_US/Slic3rPE_en.po @@ -0,0 +1,3016 @@ +# Copyright (C) 2018 THE Slic3rPE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Slic3rPE package. +# Oleksandra Iushchenko , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: SLIC3R PE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-13 17:18+0100\n" +"PO-Revision-Date: 2018-02-14 16:16+0100\n" +"Last-Translator: Oleksandra Iushchenko \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.6\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: en_US\n" +"X-Poedit-KeywordsList: _L\n" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:50 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1188 +msgid "Size" +msgstr "Size" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:51 +msgid "Size in X and Y of the rectangular plate." +msgstr "Size in X and Y of the rectangular plate." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:57 +msgid "Origin" +msgstr "Origin" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:58 +msgid "" +"Distance of the 0,0 G-code coordinate from the front left corner of the " +"rectangle." +msgstr "" +"Distance of the 0,0 G-code coordinate from the front left corner of the " +"rectangle." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:65 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:133 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:204 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:215 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:329 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:340 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:359 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:438 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:783 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:803 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:862 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:880 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:898 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1046 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1054 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1096 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1105 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1115 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1123 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1131 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1217 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1423 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1493 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1529 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1706 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1713 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1720 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1729 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1739 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1749 +msgid "mm" +msgstr "mm" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:66 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:435 +msgid "Diameter" +msgstr "Diameter" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:67 +msgid "" +"Diameter of the print bed. It is assumed that origin (0,0) is located in the " +"center." +msgstr "" +"Diameter of the print bed. It is assumed that origin (0,0) is located in the " +"center." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:965 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:312 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:704 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:960 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1274 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1447 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1473 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:432 +msgid "Extruders" +msgstr "Extruders" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:966 +msgid "Number of extruders of the printer." +msgstr "Number of extruders of the printer." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:30 +msgid "Avoid crossing perimeters" +msgstr "Avoid crossing perimeters" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:31 +msgid "" +"Optimize travel moves in order to minimize the crossing of perimeters. This " +"is mostly useful with Bowden extruders which suffer from oozing. This " +"feature slows down both the print and the G-code generation." +msgstr "" +"Optimize travel moves in order to minimize the crossing of perimeters. This " +"is mostly useful with Bowden extruders which suffer from oozing. This " +"feature slows down both the print and the G-code generation." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:38 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:939 +msgid "Bed shape" +msgstr "Bed shape" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:42 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1574 +msgid "Other layers" +msgstr "Other layers" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:43 +msgid "" +"Bed temperature for layers after the first one. Set this to zero to disable " +"bed temperature control commands in the output." +msgstr "" +"Bed temperature for layers after the first one. Set this to zero to disable " +"bed temperature control commands in the output." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:46 +msgid "Bed temperature" +msgstr "Bed temperature" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:52 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1131 +msgid "Before layer change G-code" +msgstr "Before layer change G-code" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:53 +msgid "" +"This custom code is inserted at every layer change, right before the Z move. " +"Note that you can use placeholder variables for all Slic3r settings as well " +"as [layer_num] and [layer_z]." +msgstr "" +"This custom code is inserted at every layer change, right before the Z move. " +"Note that you can use placeholder variables for all Slic3r settings as well " +"as [layer_num] and [layer_z]." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:63 +msgid "Between objects G-code" +msgstr "Between objects G-code" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:64 +msgid "" +"This code is inserted between objects when using sequential printing. By " +"default extruder and bed temperature are reset using non-wait command; " +"however if M104, M109, M140 or M190 are detected in this custom code, Slic3r " +"will not add temperature commands. Note that you can use placeholder " +"variables for all Slic3r settings, so you can put a \"M109 " +"S[first_layer_temperature]\" command wherever you want." +msgstr "" +"This code is inserted between objects when using sequential printing. By " +"default extruder and bed temperature are reset using non-wait command; " +"however if M104, M109, M140 or M190 are detected in this custom code, Slic3r " +"will not add temperature commands. Note that you can use placeholder " +"variables for all Slic3r settings, so you can put a \"M109 " +"S[first_layer_temperature]\" command wherever you want." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:72 +msgid "Bottom" +msgstr "Bottom" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:73 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:243 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:294 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:302 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:606 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:764 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:780 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:943 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:991 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1154 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1585 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1641 +msgid "Layers and Perimeters" +msgstr "Layers and perimeters" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:74 +msgid "Number of solid layers to generate on bottom surfaces." +msgstr "Number of solid layers to generate on bottom surfaces." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:76 +msgid "Bottom solid layers" +msgstr "Bottom solid layers" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:81 +msgid "Bridge" +msgstr "Bridge" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:82 +msgid "" +"This is the acceleration your printer will use for bridges. Set zero to " +"disable acceleration control for bridges." +msgstr "" +"This is the acceleration your printer will use for bridges. Set zero to " +"disable acceleration control for bridges." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:84 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:178 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:578 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:686 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:954 +msgid "mm/s\\u00B2" +msgstr "mm/s\\u00B2" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:90 +msgid "Bridging angle" +msgstr "Bridging angle" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:91 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:251 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:492 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:506 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:544 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:683 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:693 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:711 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:729 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:748 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1265 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1282 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:347 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:348 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:664 +msgid "Infill" +msgstr "Infill" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:92 +msgid "" +"Bridging angle override. If left to zero, the bridging angle will be " +"calculated automatically. Otherwise the provided angle will be used for all " +"bridges. Use 180\\u00B0 for zero angle." +msgstr "" +"Bridging angle override. If left to zero, the bridging angle will be " +"calculated automatically. Otherwise the provided angle will be used for all " +"bridges. Use 180\\u00B0 for zero angle." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:95 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:496 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1172 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1183 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1403 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1559 +msgid "\\u00B0" +msgstr "\\u00B0" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:101 +msgid "Bridges fan speed" +msgstr "Bridges fan speed" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:102 +msgid "This fan speed is enforced during all bridges and overhangs." +msgstr "This fan speed is enforced during all bridges and overhangs." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:103 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:508 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:791 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:852 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1062 +msgid "%" +msgstr "%" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:110 +msgid "Bridge flow ratio" +msgstr "Bridge flow ratio" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:111 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:212 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:738 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1735 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:343 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:357 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:450 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:453 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:830 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1112 +msgid "Advanced" +msgstr "Advanced" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:112 +msgid "" +"This factor affects the amount of plastic for bridging. You can decrease it " +"slightly to pull the extrudates and prevent sagging, although default " +"settings are usually good and you should experiment with cooling (use a fan) " +"before tweaking this." +msgstr "" +"This factor affects the amount of plastic for bridging. You can decrease it " +"slightly to pull the extrudates and prevent sagging, although default " +"settings are usually good and you should experiment with cooling (use a fan) " +"before tweaking this." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:121 +msgid "Bridges" +msgstr "Bridges" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:122 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:282 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:637 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:749 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:981 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1203 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1253 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1304 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1627 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:399 +msgid "Speed" +msgstr "Speed" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:123 +msgid "Speed for printing bridges." +msgstr "Speed for printing bridges." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:124 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:640 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:751 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:813 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:870 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:983 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1139 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1148 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1538 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1651 +msgid "mm/s" +msgstr "mm/s" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:131 +msgid "Brim width" +msgstr "Brim width" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:132 +msgid "" +"Horizontal width of the brim that will be printed around each object on the " +"first layer." +msgstr "" +"Horizontal width of the brim that will be printed around each object on the " +"first layer." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:139 +msgid "Clip multi-part objects" +msgstr "Clip multi-part objects" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:140 +msgid "" +"When printing multi-material objects, this settings will make slic3r to clip " +"the overlapping object parts one by the other (2nd part will be clipped by " +"the 1st, 3rd part will be clipped by the 1st and 2nd etc)." +msgstr "" +"When printing multi-material objects, this settings will make slic3r to clip " +"the overlapping object parts one by the other (2nd part will be clipped by " +"the 1st, 3rd part will be clipped by the 1st and 2nd etc)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:147 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:510 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:868 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1673 +msgid "Compatible printers" +msgstr "Compatible printers" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:151 +msgid "Compatible printers condition" +msgstr "Compatible printers condition" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:152 +msgid "" +"A boolean expression using the configuration values of an active printer " +"profile. If this expression evaluates to true, this profile is considered " +"compatible with the active printer profile." +msgstr "" +"A boolean expression using the configuration values of an active printer " +"profile. If this expression evaluates to true, this profile is considered " +"compatible with the active printer profile." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:158 +msgid "Complete individual objects" +msgstr "Complete individual objects" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:159 +msgid "" +"When printing multiple objects or copies, this feature will complete each " +"object before moving onto next one (and starting it from its bottom layer). " +"This feature is useful to avoid the risk of ruined prints. Slic3r should " +"warn and prevent you from extruder collisions, but beware." +msgstr "" +"When printing multiple objects or copies, this feature will complete each " +"object before moving onto next one (and starting it from its bottom layer). " +"This feature is useful to avoid the risk of ruined prints. Slic3r should " +"warn and prevent you from extruder collisions, but beware." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:167 +msgid "Enable auto cooling" +msgstr "Enable auto cooling" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:168 +msgid "" +"This flag enables the automatic cooling logic that adjusts print speed and " +"fan speed according to layer printing time." +msgstr "" +"This flag enables the automatic cooling logic that adjusts print speed and " +"fan speed according to layer printing time." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:174 +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:293 +msgid "Default" +msgstr "Default" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:175 +msgid "" +"This is the acceleration your printer will be reset to after the role-" +"specific acceleration values are used (perimeter/infill). Set zero to " +"prevent resetting acceleration at all." +msgstr "" +"This is the acceleration your printer will be reset to after the role-" +"specific acceleration values are used (perimeter/infill). Set zero to " +"prevent resetting acceleration at all." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:184 +msgid "Disable fan for the first" +msgstr "Disable fan for the first" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:185 +msgid "" +"You can set this to a positive value to disable fan at all during the first " +"layers, so that it does not make adhesion worse." +msgstr "" +"You can set this to a positive value to disable fan at all during the first " +"layers, so that it does not make adhesion worse." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:187 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:696 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1035 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1226 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1287 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1439 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1484 +msgid "layers" +msgstr "layers" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:194 +msgid "Don't support bridges" +msgstr "Don't support bridges" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:195 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1032 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1382 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1389 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1401 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1411 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1419 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1434 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1455 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1466 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1482 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1491 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1500 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1511 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1527 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1535 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1536 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1545 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1553 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1567 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:375 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:376 +msgid "Support material" +msgstr "Support material" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:196 +msgid "" +"Experimental option for preventing support material from being generated " +"under bridged areas." +msgstr "" +"Experimental option for preventing support material from being generated " +"under bridged areas." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:202 +msgid "Distance between copies" +msgstr "Distance between copies" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:203 +msgid "Distance used for the auto-arrange feature of the plater." +msgstr "Distance used for the auto-arrange feature of the plater." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:211 +msgid "Elefant foot compensation" +msgstr "Elefant foot compensation" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:213 +msgid "" +"The first layer will be shrunk in the XY plane by the configured value to " +"compensate for the 1st layer squish aka an Elefant Foot effect." +msgstr "" +"The first layer will be shrunk in the XY plane by the configured value to " +"compensate for the 1st layer squish aka an Elefant Foot effect." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:221 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:231 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:852 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1125 +msgid "End G-code" +msgstr "End G-code" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:222 +msgid "" +"This end procedure is inserted at the end of the output file. Note that you " +"can use placeholder variables for all Slic3r settings." +msgstr "" +"This end procedure is inserted at the end of the output file. Note that you " +"can use placeholder variables for all Slic3r settings." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:232 +msgid "" +"This end procedure is inserted at the end of the output file, before the " +"printer end gcode. Note that you can use placeholder variables for all " +"Slic3r settings. If you have multiple extruders, the gcode is processed in " +"extruder order." +msgstr "" +"This end procedure is inserted at the end of the output file, before the " +"printer end gcode. Note that you can use placeholder variables for all " +"Slic3r settings. If you have multiple extruders, the gcode is processed in " +"extruder order." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:242 +msgid "Ensure vertical shell thickness" +msgstr "Ensure vertical shell thickness" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:244 +msgid "" +"Add solid infill near sloping surfaces to guarantee the vertical shell " +"thickness (top+bottom solid layers)." +msgstr "" +"Add solid infill near sloping surfaces to guarantee the vertical shell " +"thickness (top+bottom solid layers)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:250 +msgid "Top/bottom fill pattern" +msgstr "Top/bottom fill pattern" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:252 +msgid "" +"Fill pattern for top/bottom infill. This only affects the external visible " +"layer, and not its adjacent solid shells." +msgstr "" +"Fill pattern for top/bottom infill. This only affects the external visible " +"layer, and not its adjacent solid shells." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:271 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:281 +msgid "External perimeters" +msgstr "External perimeters" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:272 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:381 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:594 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:712 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:969 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1294 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1456 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1616 +msgid "Extrusion Width" +msgstr "Extrusion width" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:273 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for external " +"perimeters. If left zero, default extrusion width will be used if set, " +"otherwise 1.125 x nozzle diameter will be used. If expressed as percentage " +"(for example 200%), it will be computed over layer height." +msgstr "" +"Set this to a non-zero value to set a manual extrusion width for external " +"perimeters. If left zero, default extrusion width will be used if set, " +"otherwise 1.125 x nozzle diameter will be used. If expressed as percentage " +"(for example 200%), it will be computed over layer height." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:276 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:599 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:717 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:974 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1298 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1460 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1621 +msgid "mm or % (leave 0 for default)" +msgstr "mm or % (leave 0 for default)" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:283 +msgid "" +"This separate setting will affect the speed of external perimeters (the " +"visible ones). If expressed as percentage (for example: 80%) it will be " +"calculated on the perimeters speed setting above. Set to zero for auto." +msgstr "" +"This separate setting will affect the speed of external perimeters (the " +"visible ones). If expressed as percentage (for example: 80%) it will be " +"calculated on the perimeters speed setting above. Set to zero for auto." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:286 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:621 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1257 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1308 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1503 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1633 +msgid "mm/s or %" +msgstr "mm/s or %" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:293 +msgid "External perimeters first" +msgstr "External perimeters first" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:295 +msgid "" +"Print contour perimeters from the outermost one to the innermost one instead " +"of the default inverse order." +msgstr "" +"Print contour perimeters from the outermost one to the innermost one instead " +"of the default inverse order." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:301 +msgid "Extra perimeters if needed" +msgstr "Extra perimeters if needed" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:303 +#, c-format +msgid "" +"Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r " +"keeps adding perimeters, until more than 70% of the loop immediately above " +"is supported." +msgstr "" +"Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r " +"keeps adding perimeters, until more than 70% of the loop immediately above " +"is supported." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:311 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:794 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1231 +msgid "Extruder" +msgstr "Extruder" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:313 +msgid "" +"The extruder to use (unless more specific extruder settings are specified). " +"This value overrides perimeter and infill extruders, but not the support " +"extruders." +msgstr "" +"The extruder to use (unless more specific extruder settings are specified). " +"This value overrides perimeter and infill extruders, but not the support " +"extruders." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:324 +msgid "Height" +msgstr "Height" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:325 +msgid "" +"Set this to the vertical distance between your nozzle tip and (usually) the " +"X carriage rods. In other words, this is the height of the clearance " +"cylinder around your extruder, and it represents the maximum depth the " +"extruder can peek before colliding with other printed objects." +msgstr "" +"Set this to the vertical distance between your nozzle tip and (usually) the " +"X carriage rods. In other words, this is the height of the clearance " +"cylinder around your extruder, and it represents the maximum depth the " +"extruder can peek before colliding with other printed objects." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:335 +msgid "Radius" +msgstr "Radius" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:336 +msgid "" +"Set this to the clearance radius around your extruder. If the extruder is " +"not centered, choose the largest value for safety. This setting is used to " +"check for collisions and to display the graphical preview in the plater." +msgstr "" +"Set this to the clearance radius around your extruder. If the extruder is " +"not centered, choose the largest value for safety. This setting is used to " +"check for collisions and to display the graphical preview in the plater." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:346 +msgid "Extruder Color" +msgstr "Extruder Color" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:347 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:410 +msgid "This is only used in the Slic3r interface as a visual help." +msgstr "This is only used in the Slic3r interface as a visual help." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:354 +msgid "Extruder offset" +msgstr "Extruders offset" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:355 +msgid "" +"If your firmware doesn't handle the extruder displacement you need the G-" +"code to take it into account. This option lets you specify the displacement " +"of each extruder with respect to the first one. It expects positive " +"coordinates (they will be subtracted from the XY coordinate)." +msgstr "" +"If your firmware doesn't handle the extruder displacement you need the G-" +"code to take it into account. This option lets you specify the displacement " +"of each extruder with respect to the first one. It expects positive " +"coordinates (they will be subtracted from the XY coordinate)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:364 +msgid "Extrusion axis" +msgstr "Extrusion axis" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:365 +msgid "" +"Use this option to set the axis letter associated to your printer's extruder " +"(usually E but some printers use A)." +msgstr "" +"Use this option to set the axis letter associated to your printer's extruder " +"(usually E but some printers use A)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:371 +msgid "Extrusion multiplier" +msgstr "Extrusion multiplier" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:372 +msgid "" +"This factor changes the amount of flow proportionally. You may need to tweak " +"this setting to get nice surface finish and correct single wall widths. " +"Usual values are between 0.9 and 1.1. If you think you need to change this " +"more, check filament diameter and your firmware E steps." +msgstr "" +"This factor changes the amount of flow proportionally. You may need to tweak " +"this setting to get nice surface finish and correct single wall widths. " +"Usual values are between 0.9 and 1.1. If you think you need to change this " +"more, check filament diameter and your firmware E steps." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:380 +msgid "Default extrusion width" +msgstr "Default extrusion width" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:382 +msgid "" +"Set this to a non-zero value to allow a manual extrusion width. If left to " +"zero, Slic3r derives extrusion widths from the nozzle diameter (see the " +"tooltips for perimeter extrusion width, infill extrusion width etc). If " +"expressed as percentage (for example: 230%), it will be computed over layer " +"height." +msgstr "" +"Set this to a non-zero value to allow a manual extrusion width. If left to " +"zero, Slic3r derives extrusion widths from the nozzle diameter (see the " +"tooltips for perimeter extrusion width, infill extrusion width etc). If " +"expressed as percentage (for example: 230%), it will be computed over layer " +"height." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:386 +msgid "mm or % (leave 0 for auto)" +msgstr "mm or % (leave 0 for auto)" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:391 +msgid "Keep fan always on" +msgstr "Keep fan always on" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:392 +msgid "" +"If this is enabled, fan will never be disabled and will be kept running at " +"least at its minimum speed. Useful for PLA, harmful for ABS." +msgstr "" +"If this is enabled, fan will never be disabled and will be kept running at " +"least at its minimum speed. Useful for PLA, harmful for ABS." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:398 +msgid "Enable fan if layer print time is below" +msgstr "Enable fan if layer print time is below" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:399 +msgid "" +"If layer print time is estimated below this number of seconds, fan will be " +"enabled and its speed will be calculated by interpolating the minimum and " +"maximum speeds." +msgstr "" +"If layer print time is estimated below this number of seconds, fan will be " +"enabled and its speed will be calculated by interpolating the minimum and " +"maximum speeds." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:401 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1244 +msgid "approximate seconds" +msgstr "approximate seconds" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:409 +msgid "Color" +msgstr "Color" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:416 +msgid "Filament notes" +msgstr "Filament notes" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:417 +msgid "You can put your notes regarding the filament here." +msgstr "You can put your notes regarding the filament here." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:425 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:819 +msgid "Max volumetric speed" +msgstr "Max volumetric speed" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:426 +msgid "" +"Maximum volumetric speed allowed for this filament. Limits the maximum " +"volumetric speed of a print to the minimum of print and filament volumetric " +"speed. Set to zero for no limit." +msgstr "" +"Maximum volumetric speed allowed for this filament. Limits the maximum " +"volumetric speed of a print to the minimum of print and filament volumetric " +"speed. Set to zero for no limit." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:429 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:822 +msgid "mm\\u00B3/s" +msgstr "mm\\u00B3/s" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:436 +msgid "" +"Enter your filament diameter here. Good precision is required, so use a " +"caliper and do multiple measurements along the filament, then compute the " +"average." +msgstr "" +"Enter your filament diameter here. Good precision is required, so use a " +"caliper and do multiple measurements along the filament, then compute the " +"average." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:444 +msgid "Density" +msgstr "Density" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:445 +msgid "" +"Enter your filament density here. This is only for statistical information. " +"A decent way is to weigh a known length of filament and compute the ratio of " +"the length to volume. Better is to calculate the volume directly through " +"displacement." +msgstr "" +"Enter your filament density here. This is only for statistical information. " +"A decent way is to weigh a known length of filament and compute the ratio of " +"the length to volume. Better is to calculate the volume directly through " +"displacement." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:448 +msgid "g/cm^3" +msgstr "g/cm^3" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:454 +msgid "Filament type" +msgstr "Filament type" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:455 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1004 +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and they can access the Slic3r config settings by reading " +"environment variables." +msgstr "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and they can access the Slic3r config settings by reading " +"environment variables." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:474 +msgid "Soluble material" +msgstr "Soluble material" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:475 +msgid "Soluble material is most likely used for a soluble support." +msgstr "Soluble material is most likely used for a soluble support." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:480 +msgid "Cost" +msgstr "Cost" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:481 +msgid "" +"Enter your filament cost per kg here. This is only for statistical " +"information." +msgstr "" +"Enter your filament cost per kg here. This is only for statistical " +"information." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:482 +msgid "money/kg" +msgstr "money/kg" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:491 +msgid "Fill angle" +msgstr "Fill angle" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:493 +msgid "" +"Default base angle for infill orientation. Cross-hatching will be applied to " +"this. Bridges will be infilled using the best direction Slic3r can detect, " +"so this setting does not affect them." +msgstr "" +"Default base angle for infill orientation. Cross-hatching will be applied to " +"this. Bridges will be infilled using the best direction Slic3r can detect, " +"so this setting does not affect them." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:505 +msgid "Fill density" +msgstr "Fill density" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:507 +#, c-format +msgid "Density of internal infill, expressed in the range 0% - 100%." +msgstr "Density of internal infill, expressed in the range 0% - 100%." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:543 +msgid "Fill pattern" +msgstr "Fill pattern" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:545 +msgid "Fill pattern for general low-density infill." +msgstr "Fill pattern for general low-density infill." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:575 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:584 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:593 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:627 +msgid "First layer" +msgstr "First layers" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:576 +msgid "" +"This is the acceleration your printer will use for first layer. Set zero to " +"disable acceleration control for first layer." +msgstr "" +"This is the acceleration your printer will use for first layer. Set zero to " +"disable acceleration control for first layer." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:585 +msgid "" +"Heated build plate temperature for the first layer. Set this to zero to " +"disable bed temperature control commands in the output." +msgstr "" +"Heated build plate temperature for the first layer. Set this to zero to " +"disable bed temperature control commands in the output." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:595 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for first " +"layer. You can use this to force fatter extrudates for better adhesion. If " +"expressed as percentage (for example 120%) it will be computed over first " +"layer height. If set to zero, it will use the default extrusion width." +msgstr "" +"Set this to a non-zero value to set a manual extrusion width for first " +"layer. You can use this to force fatter extrudates for better adhesion. If " +"expressed as percentage (for example 120%) it will be computed over first " +"layer height. If set to zero, it will use the default extrusion width." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:605 +msgid "First layer height" +msgstr "First layer height" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:607 +msgid "" +"When printing with very low layer heights, you might still want to print a " +"thicker bottom layer to improve adhesion and tolerance for non perfect build " +"plates. This can be expressed as an absolute value or as a percentage (for " +"example: 150%) over the default layer height." +msgstr "" +"When printing with very low layer heights, you might still want to print a " +"thicker bottom layer to improve adhesion and tolerance for non perfect build " +"plates. This can be expressed as an absolute value or as a percentage (for " +"example: 150%) over the default layer height." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:611 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:742 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1392 +msgid "mm or %" +msgstr "mm or %" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:617 +msgid "First layer speed" +msgstr "First layer speed" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:618 +msgid "" +"If expressed as absolute value in mm/s, this speed will be applied to all " +"the print moves of the first layer, regardless of their type. If expressed " +"as a percentage (for example: 40%) it will scale the default speeds." +msgstr "" +"If expressed as absolute value in mm/s, this speed will be applied to all " +"the print moves of the first layer, regardless of their type. If expressed " +"as a percentage (for example: 40%) it will scale the default speeds." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:628 +msgid "" +"Extruder temperature for first layer. If you want to control temperature " +"manually during print, set this to zero to disable temperature control " +"commands in the output file." +msgstr "" +"Extruder temperature for first layer. If you want to control temperature " +"manually during print, set this to zero to disable temperature control " +"commands in the output file." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:636 +msgid "Gap fill" +msgstr "Gap fill" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:638 +msgid "" +"Speed for filling small gaps using short zigzag moves. Keep this reasonably " +"low to avoid too much shaking and resonance issues. Set zero to disable gaps " +"filling." +msgstr "" +"Speed for filling small gaps using short zigzag moves. Keep this reasonably " +"low to avoid too much shaking and resonance issues. Set zero to disable gaps " +"filling." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:646 +msgid "Verbose G-code" +msgstr "Verbose G-code" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:647 +msgid "" +"Enable this to get a commented G-code file, with each line explained by a " +"descriptive text. If you print from SD card, the additional weight of the " +"file could make your firmware slow down." +msgstr "" +"Enable this to get a commented G-code file, with each line explained by a " +"descriptive text. If you print from SD card, the additional weight of the " +"file could make your firmware slow down." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:654 +msgid "G-code flavor" +msgstr "G-code flavor" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:655 +msgid "" +"Some G/M-code commands, including temperature control and others, are not " +"universal. Set this option to your printer's firmware to get a compatible " +"output. The \"No extrusion\" flavor prevents Slic3r from exporting any " +"extrusion value at all." +msgstr "" +"Some G/M-code commands, including temperature control and others, are not " +"universal. Set this option to your printer's firmware to get a compatible " +"output. The \"No extrusion\" flavor prevents Slic3r from exporting any " +"extrusion value at all." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:684 +msgid "" +"This is the acceleration your printer will use for infill. Set zero to " +"disable acceleration control for infill." +msgstr "" +"This is the acceleration your printer will use for infill. Set zero to " +"disable acceleration control for infill." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:692 +msgid "Combine infill every" +msgstr "Combine infill every" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:694 +msgid "" +"This feature allows to combine infill and speed up your print by extruding " +"thicker infill layers while preserving thin perimeters, thus accuracy." +msgstr "" +"This feature allows to combine infill and speed up your print by extruding " +"thicker infill layers while preserving thin perimeters, thus accuracy." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:698 +msgid "Combine infill every n layers" +msgstr "Combine infill every n layers" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:703 +msgid "Infill extruder" +msgstr "Infill extruder" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:705 +msgid "The extruder to use when printing infill." +msgstr "The extruder to use when printing infill." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:713 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for infill. If " +"left zero, default extrusion width will be used if set, otherwise 1.125 x " +"nozzle diameter will be used. You may want to use fatter extrudates to speed " +"up the infill and make your parts stronger. If expressed as percentage (for " +"example 90%) it will be computed over layer height." +msgstr "" +"Set this to a non-zero value to set a manual extrusion width for infill. If " +"left zero, default extrusion width will be used if set, otherwise 1.125 x " +"nozzle diameter will be used. You may want to use fatter extrudates to speed " +"up the infill and make your parts stronger. If expressed as percentage (for " +"example 90%) it will be computed over layer height." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:722 +msgid "Infill before perimeters" +msgstr "Infill before perimeters" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:723 +msgid "" +"This option will switch the print order of perimeters and infill, making the " +"latter first." +msgstr "" +"This option will switch the print order of perimeters and infill, making the " +"latter first." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:728 +msgid "Only infill where needed" +msgstr "Only infill where needed" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:730 +msgid "" +"This option will limit infill to the areas actually needed for supporting " +"ceilings (it will act as internal support material). If enabled, slows down " +"the G-code generation due to the multiple checks involved." +msgstr "" +"This option will limit infill to the areas actually needed for supporting " +"ceilings (it will act as internal support material). If enabled, slows down " +"the G-code generation due to the multiple checks involved." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:737 +msgid "Infill/perimeters overlap" +msgstr "Infill/perimeters overlap" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:739 +msgid "" +"This setting applies an additional overlap between infill and perimeters for " +"better bonding. Theoretically this shouldn't be needed, but backlash might " +"cause gaps. If expressed as percentage (example: 15%) it is calculated over " +"perimeter extrusion width." +msgstr "" +"This setting applies an additional overlap between infill and perimeters for " +"better bonding. Theoretically this shouldn't be needed, but backlash might " +"cause gaps. If expressed as percentage (example: 15%) it is calculated over " +"perimeter extrusion width." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:750 +msgid "Speed for printing the internal fill. Set to zero for auto." +msgstr "Speed for printing the internal fill. Set to zero for auto." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:759 +msgid "Interface shells" +msgstr "Interface shells" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:760 +msgid "" +"Force the generation of solid shells between adjacent materials/volumes. " +"Useful for multi-extruder prints with translucent materials or manual " +"soluble support material." +msgstr "" +"Force the generation of solid shells between adjacent materials/volumes. " +"Useful for multi-extruder prints with translucent materials or manual " +"soluble support material." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:768 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1137 +msgid "After layer change G-code" +msgstr "After layer change G-code" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:769 +msgid "" +"This custom code is inserted at every layer change, right after the Z move " +"and before the extruder moves to the first layer point. Note that you can " +"use placeholder variables for all Slic3r settings as well as [layer_num] and " +"[layer_z]." +msgstr "" +"This custom code is inserted at every layer change, right after the Z move " +"and before the extruder moves to the first layer point. Note that you can " +"use placeholder variables for all Slic3r settings as well as [layer_num] and " +"[layer_z]." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:779 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:315 +msgid "Layer height" +msgstr "Layer height" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:781 +msgid "" +"This setting controls the height (and thus the total number) of the slices/" +"layers. Thinner layers give better accuracy but take more time to print." +msgstr "" +"This setting controls the height (and thus the total number) of the slices/" +"layers. Thinner layers give better accuracy but take more time to print." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:789 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:798 +msgid "Max" +msgstr "Max" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:790 +msgid "This setting represents the maximum speed of your fan." +msgstr "This setting represents the maximum speed of your fan." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:799 +#, c-format +msgid "" +"This is the highest printable layer height for this extruder, used to cap " +"the variable layer height and support layer height. Maximum recommended " +"layer height is 75% of the extrusion width to achieve reasonable inter-layer " +"adhesion. If set to 0, layer height is limited to 75% of the nozzle diameter." +msgstr "" +"This is the highest printable layer height for this extruder, used to cap " +"the variable layer height and support layer height. Maximum recommended " +"layer height is 75% of the extrusion width to achieve reasonable inter-layer " +"adhesion. If set to 0, layer height is limited to 75% of the nozzle diameter." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:809 +msgid "Max print speed" +msgstr "Max print speed" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:810 +msgid "" +"When setting other speed settings to 0 Slic3r will autocalculate the optimal " +"speed in order to keep constant extruder pressure. This experimental setting " +"is used to set the highest print speed you want to allow." +msgstr "" +"When setting other speed settings to 0 Slic3r will autocalculate the optimal " +"speed in order to keep constant extruder pressure. This experimental setting " +"is used to set the highest print speed you want to allow." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:820 +msgid "" +"This experimental setting is used to set the maximum volumetric speed your " +"extruder supports." +msgstr "" +"This experimental setting is used to set the maximum volumetric speed your " +"extruder supports." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:828 +msgid "Max volumetric slope positive" +msgstr "Max volumetric slope positive" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:829 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:840 +msgid "" +"This experimental setting is used to limit the speed of change in extrusion " +"rate. A value of 1.8 mm\\u00B3/s\\u00B2 ensures, that a change from the " +"extrusion rate of 1.8 mm\\u00B3/s (0.45mm extrusion width, 0.2mm extrusion " +"height, feedrate 20 mm/s) to 5.4 mm\\u00B3/s (feedrate 60 mm/s) will take at " +"least 2 seconds." +msgstr "" +"This experimental setting is used to limit the speed of change in extrusion " +"rate. A value of 1.8 mm\\u00B3/s\\u00B2 ensures, that a change from the " +"extrusion rate of 1.8 mm\\u00B3/s (0.45mm extrusion width, 0.2mm extrusion " +"height, feedrate 20 mm/s) to 5.4 mm\\u00B3/s (feedrate 60 mm/s) will take at " +"least 2 seconds." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:833 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:844 +msgid "mm\\u00B3/s\\u00B2" +msgstr "mm\\u00B3/s\\u00B2" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:839 +msgid "Max volumetric slope negative" +msgstr "Max volumetric slope negative" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:850 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:859 +msgid "Min" +msgstr "Min" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:851 +msgid "This setting represents the minimum PWM your fan needs to work." +msgstr "This setting represents the minimum PWM your fan needs to work." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:860 +msgid "" +"This is the lowest printable layer height for this extruder and limits the " +"resolution for variable layer height. Typical values are between 0.05 mm and " +"0.1 mm." +msgstr "" +"This is the lowest printable layer height for this extruder and limits the " +"resolution for variable layer height. Typical values are between 0.05 mm and " +"0.1 mm." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:868 +msgid "Min print speed" +msgstr "Min print speed" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:869 +msgid "Slic3r will not scale speed down below this speed." +msgstr "Slic3r will not scale speed down below this speed." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:876 +msgid "Minimum extrusion length" +msgstr "Minimum extrusion length" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:877 +msgid "" +"Generate no less than the number of skirt loops required to consume the " +"specified amount of filament on the bottom layer. For multi-extruder " +"machines, this minimum applies to each extruder." +msgstr "" +"Generate no less than the number of skirt loops required to consume the " +"specified amount of filament on the bottom layer. For multi-extruder " +"machines, this minimum applies to each extruder." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:886 +msgid "Configuration notes" +msgstr "Configuration notes" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:887 +msgid "" +"You can put here your personal notes. This text will be added to the G-code " +"header comments." +msgstr "" +"You can put here your personal notes. This text will be added to the G-code " +"header comments." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:896 +msgid "Nozzle diameter" +msgstr "Nozzle diameter" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:897 +msgid "" +"This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)" +msgstr "" +"This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:903 +msgid "API Key" +msgstr "API Key" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:904 +msgid "" +"Slic3r can upload G-code files to OctoPrint. This field should contain the " +"API Key required for authentication." +msgstr "" +"Slic3r can upload G-code files to OctoPrint. This field should contain the " +"API Key required for authentication." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:910 +msgid "Host or IP" +msgstr "Host or IP" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:911 +msgid "" +"Slic3r can upload G-code files to OctoPrint. This field should contain the " +"hostname or IP address of the OctoPrint instance." +msgstr "" +"Slic3r can upload G-code files to OctoPrint. This field should contain the " +"hostname or IP address of the OctoPrint instance." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:917 +msgid "Only retract when crossing perimeters" +msgstr "Only retract when crossing perimeters" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:918 +msgid "" +"Disables retraction when the travel path does not exceed the upper layer's " +"perimeters (and thus any ooze will be probably invisible)." +msgstr "" +"Disables retraction when the travel path does not exceed the upper layer's " +"perimeters (and thus any ooze will be probably invisible)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:924 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1697 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:805 +msgid "Enable" +msgstr "Enable" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:925 +msgid "" +"This option will drop the temperature of the inactive extruders to prevent " +"oozing. It will enable a tall skirt automatically and move extruders outside " +"such skirt when changing temperatures." +msgstr "" +"This option will drop the temperature of the inactive extruders to prevent " +"oozing. It will enable a tall skirt automatically and move extruders outside " +"such skirt when changing temperatures." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:932 +msgid "Output filename format" +msgstr "Output filename format" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:933 +msgid "" +"You can use all configuration options as variables inside this template. For " +"example: [layer_height], [fill_density] etc. You can also use [timestamp], " +"[year], [month], [day], [hour], [minute], [second], [version], " +"[input_filename], [input_filename_base]." +msgstr "" +"You can use all configuration options as variables inside this template. For " +"example: [layer_height], [fill_density] etc. You can also use [timestamp], " +"[year], [month], [day], [hour], [minute], [second], [version], " +"[input_filename], [input_filename_base]." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:942 +msgid "Detect bridging perimeters" +msgstr "Detect bridging perimeters" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:944 +msgid "" +"Experimental option to adjust flow for overhangs (bridge flow will be used), " +"to apply bridge speed to them and enable fan." +msgstr "" +"Experimental option to adjust flow for overhangs (bridge flow will be used), " +"to apply bridge speed to them and enable fan." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:950 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:968 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:980 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:990 +msgid "Perimeters" +msgstr "Perimeters" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:951 +msgid "" +"This is the acceleration your printer will use for perimeters. A high value " +"like 9000 usually gives good results if your hardware is up to the job. Set " +"zero to disable acceleration control for perimeters." +msgstr "" +"This is the acceleration your printer will use for perimeters. A high value " +"like 9000 usually gives good results if your hardware is up to the job. Set " +"zero to disable acceleration control for perimeters." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:959 +msgid "Perimeter extruder" +msgstr "Perimeter extruder" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:961 +msgid "" +"The extruder to use when printing perimeters and brim. First extruder is 1." +msgstr "" +"The extruder to use when printing perimeters and brim. First extruder is 1." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:970 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for perimeters. " +"You may want to use thinner extrudates to get more accurate surfaces. If " +"left zero, default extrusion width will be used if set, otherwise 1.125 x " +"nozzle diameter will be used. If expressed as percentage (for example 200%) " +"it will be computed over layer height." +msgstr "" +"Set this to a non-zero value to set a manual extrusion width for perimeters. " +"You may want to use thinner extrudates to get more accurate surfaces. If " +"left zero, default extrusion width will be used if set, otherwise 1.125 x " +"nozzle diameter will be used. If expressed as percentage (for example 200%) " +"it will be computed over layer height." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:982 +msgid "" +"Speed for perimeters (contours, aka vertical shells). Set to zero for auto." +msgstr "" +"Speed for perimeters (contours, aka vertical shells). Set to zero for auto." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:992 +msgid "" +"This option sets the number of perimeters to generate for each layer. Note " +"that Slic3r may increase this number automatically when it detects sloping " +"surfaces which benefit from a higher number of perimeters if the Extra " +"Perimeters option is enabled." +msgstr "" +"This option sets the number of perimeters to generate for each layer. Note " +"that Slic3r may increase this number automatically when it detects sloping " +"surfaces which benefit from a higher number of perimeters if the Extra " +"Perimeters option is enabled." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:996 +msgid "(minimum)" +msgstr "(minimum)" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1003 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:495 +msgid "Post-processing scripts" +msgstr "Post-processing scripts" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1016 +msgid "Printer notes" +msgstr "Printer notes" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1017 +msgid "You can put your notes regarding the printer here." +msgstr "You can put your notes regarding the printer here." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1031 +msgid "Raft layers" +msgstr "Raft layers" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1033 +msgid "" +"The object will be raised by this number of layers, and support material " +"will be generated under it." +msgstr "" +"The object will be raised by this number of layers, and support material " +"will be generated under it." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1041 +msgid "Resolution" +msgstr "Resolution" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1042 +msgid "" +"Minimum detail resolution, used to simplify the input file for speeding up " +"the slicing job and reducing memory usage. High-resolution models often " +"carry more detail than printers can render. Set to zero to disable any " +"simplification and use full resolution from input." +msgstr "" +"Minimum detail resolution, used to simplify the input file for speeding up " +"the slicing job and reducing memory usage. High-resolution models often " +"carry more detail than printers can render. Set to zero to disable any " +"simplification and use full resolution from input." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1052 +msgid "Minimum travel after retraction" +msgstr "Minimum travel after retraction" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1053 +msgid "" +"Retraction is not triggered when travel moves are shorter than this length." +msgstr "" +"Retraction is not triggered when travel moves are shorter than this length." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1059 +msgid "Retract amount before wipe" +msgstr "Retract amount before wipe" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1060 +msgid "" +"With bowden extruders, it may be wise to do some amount of quick retract " +"before doing the wipe movement." +msgstr "" +"With bowden extruders, it may be wise to do some amount of quick retract " +"before doing the wipe movement." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1067 +msgid "Retract on layer change" +msgstr "Retract on layer change" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1068 +msgid "This flag enforces a retraction whenever a Z move is done." +msgstr "This flag enforces a retraction whenever a Z move is done." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1073 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1082 +msgid "Length" +msgstr "Length" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1074 +msgid "Retraction Length" +msgstr "Retraction Length" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1075 +msgid "" +"When retraction is triggered, filament is pulled back by the specified " +"amount (the length is measured on raw filament, before it enters the " +"extruder)." +msgstr "" +"When retraction is triggered, filament is pulled back by the specified " +"amount (the length is measured on raw filament, before it enters the " +"extruder)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1077 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1087 +msgid "mm (zero to disable)" +msgstr "mm (zero to disable)" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1083 +msgid "Retraction Length (Toolchange)" +msgstr "Retraction Length (Toolchange)" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1084 +msgid "" +"When retraction is triggered before changing tool, filament is pulled back " +"by the specified amount (the length is measured on raw filament, before it " +"enters the extruder)." +msgstr "" +"When retraction is triggered before changing tool, filament is pulled back " +"by the specified amount (the length is measured on raw filament, before it " +"enters the extruder)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1092 +msgid "Lift Z" +msgstr "Lift Z" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1093 +msgid "" +"If you set this to a positive value, Z is quickly raised every time a " +"retraction is triggered. When using multiple extruders, only the setting for " +"the first extruder will be considered." +msgstr "" +"If you set this to a positive value, Z is quickly raised every time a " +"retraction is triggered. When using multiple extruders, only the setting for " +"the first extruder will be considered." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1101 +msgid "Above Z" +msgstr "Above Z" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1102 +msgid "Only lift Z above" +msgstr "Only lift Z above" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1103 +msgid "" +"If you set this to a positive value, Z lift will only take place above the " +"specified absolute Z. You can tune this setting for skipping lift on the " +"first layers." +msgstr "" +"If you set this to a positive value, Z lift will only take place above the " +"specified absolute Z. You can tune this setting for skipping lift on the " +"first layers." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1110 +msgid "Below Z" +msgstr "Below Z" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1111 +msgid "Only lift Z below" +msgstr "Only lift Z below" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1112 +msgid "" +"If you set this to a positive value, Z lift will only take place below the " +"specified absolute Z. You can tune this setting for limiting lift to the " +"first layers." +msgstr "" +"If you set this to a positive value, Z lift will only take place below the " +"specified absolute Z. You can tune this setting for limiting lift to the " +"first layers." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1120 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1128 +msgid "Extra length on restart" +msgstr "Extra length on restart" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1121 +msgid "" +"When the retraction is compensated after the travel move, the extruder will " +"push this additional amount of filament. This setting is rarely needed." +msgstr "" +"When the retraction is compensated after the travel move, the extruder will " +"push this additional amount of filament. This setting is rarely needed." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1129 +msgid "" +"When the retraction is compensated after changing tool, the extruder will " +"push this additional amount of filament." +msgstr "" +"When the retraction is compensated after changing tool, the extruder will " +"push this additional amount of filament." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1136 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1137 +msgid "Retraction Speed" +msgstr "Retraction Speed" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1138 +msgid "The speed for retractions (it only applies to the extruder motor)." +msgstr "The speed for retractions (it only applies to the extruder motor)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1144 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1145 +msgid "Deretraction Speed" +msgstr "Deretraction Speed" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1146 +msgid "" +"The speed for loading of a filament into extruder after retraction (it only " +"applies to the extruder motor). If left to zero, the retraction speed is " +"used." +msgstr "" +"The speed for loading of a filament into extruder after retraction (it only " +"applies to the extruder motor). If left to zero, the retraction speed is " +"used." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1153 +msgid "Seam position" +msgstr "Seam position" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1155 +msgid "Position of perimeters starting points." +msgstr "Position of perimeters starting points." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1171 +msgid "Direction" +msgstr "Direction" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1173 +msgid "Preferred direction of the seam" +msgstr "Preferred direction of the seam" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1174 +msgid "Seam preferred direction" +msgstr "Seam preferred direction" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1182 +msgid "Jitter" +msgstr "Jitter" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1184 +msgid "Seam preferred direction jitter" +msgstr "Seam preferred direction jitter" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1185 +msgid "Preferred direction of the seam - jitter" +msgstr "Preferred direction of the seam - jitter" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1195 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:989 +msgid "Serial port" +msgstr "Serial port" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1196 +msgid "USB/serial port for printer connection." +msgstr "USB/serial port for printer connection." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1204 +msgid "Serial port speed" +msgstr "Serial port speed" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1205 +msgid "Speed (baud) of USB/serial port for printer connection." +msgstr "Speed (baud) of USB/serial port for printer connection." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1214 +msgid "Distance from object" +msgstr "Distance from object" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1215 +msgid "" +"Distance between skirt and object(s). Set this to zero to attach the skirt " +"to the object(s) and get a brim for better adhesion." +msgstr "" +"Distance between skirt and object(s). Set this to zero to attach the skirt " +"to the object(s) and get a brim for better adhesion." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1223 +msgid "Skirt height" +msgstr "Skirt height" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1224 +msgid "" +"Height of skirt expressed in layers. Set this to a tall value to use skirt " +"as a shield against drafts." +msgstr "" +"Height of skirt expressed in layers. Set this to a tall value to use skirt " +"as a shield against drafts." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1231 +msgid "Loops (minimum)" +msgstr "Loops (minimum)" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1232 +msgid "Skirt Loops" +msgstr "Skirt Loops" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1233 +msgid "" +"Number of loops for the skirt. If the Minimum Extrusion Length option is " +"set, the number of loops might be greater than the one configured here. Set " +"this to zero to disable skirt completely." +msgstr "" +"Number of loops for the skirt. If the Minimum Extrusion Length option is " +"set, the number of loops might be greater than the one configured here. Set " +"this to zero to disable skirt completely." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1241 +msgid "Slow down if layer print time is below" +msgstr "Slow down if layer print time is below" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1242 +msgid "" +"If layer print time is estimated below this number of seconds, print moves " +"speed will be scaled down to extend duration to this value." +msgstr "" +"If layer print time is estimated below this number of seconds, print moves " +"speed will be scaled down to extend duration to this value." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1252 +msgid "Small perimeters" +msgstr "Small perimeters" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1254 +msgid "" +"This separate setting will affect the speed of perimeters having radius <= " +"6.5mm (usually holes). If expressed as percentage (for example: 80%) it will " +"be calculated on the perimeters speed setting above. Set to zero for auto." +msgstr "" +"This separate setting will affect the speed of perimeters having radius <= " +"6.5mm (usually holes). If expressed as percentage (for example: 80%) it will " +"be calculated on the perimeters speed setting above. Set to zero for auto." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1264 +msgid "Solid infill threshold area" +msgstr "Solid infill threshold area" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1266 +msgid "" +"Force solid infill for regions having a smaller area than the specified " +"threshold." +msgstr "" +"Force solid infill for regions having a smaller area than the specified " +"threshold." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1267 +msgid "mm\\u00B2" +msgstr "mm\\u00B2" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1273 +msgid "Solid infill extruder" +msgstr "Solid infill extruder" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1275 +msgid "The extruder to use when printing solid infill." +msgstr "The extruder to use when printing solid infill." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1281 +msgid "Solid infill every" +msgstr "Solid infill every" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1283 +msgid "" +"This feature allows to force a solid layer every given number of layers. " +"Zero to disable. You can set this to any value (for example 9999); Slic3r " +"will automatically choose the maximum possible number of layers to combine " +"according to nozzle diameter and layer height." +msgstr "" +"This feature allows to force a solid layer every given number of layers. " +"Zero to disable. You can set this to any value (for example 9999); Slic3r " +"will automatically choose the maximum possible number of layers to combine " +"according to nozzle diameter and layer height." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1293 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1303 +msgid "Solid infill" +msgstr "Solid infill" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1295 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for infill for " +"solid surfaces. If left zero, default extrusion width will be used if set, " +"otherwise 1.125 x nozzle diameter will be used. If expressed as percentage " +"(for example 90%) it will be computed over layer height." +msgstr "" +"Set this to a non-zero value to set a manual extrusion width for infill for " +"solid surfaces. If left zero, default extrusion width will be used if set, " +"otherwise 1.125 x nozzle diameter will be used. If expressed as percentage " +"(for example 90%) it will be computed over layer height." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1305 +msgid "" +"Speed for printing solid regions (top/bottom/internal horizontal shells). " +"This can be expressed as a percentage (for example: 80%) over the default " +"infill speed above. Set to zero for auto." +msgstr "" +"Speed for printing solid regions (top/bottom/internal horizontal shells). " +"This can be expressed as a percentage (for example: 80%) over the default " +"infill speed above. Set to zero for auto." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1316 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:331 +msgid "Solid layers" +msgstr "Solid layers" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1317 +msgid "Number of solid layers to generate on top and bottom surfaces." +msgstr "Number of solid layers to generate on top and bottom surfaces." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1324 +msgid "Spiral vase" +msgstr "Spiral vase" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1325 +msgid "" +"This feature will raise Z gradually while printing a single-walled object in " +"order to remove any visible seam. This option requires a single perimeter, " +"no infill, no top solid layers and no support material. You can still set " +"any number of bottom solid layers as well as skirt/brim loops. It won't work " +"when printing more than an object." +msgstr "" +"This feature will raise Z gradually while printing a single-walled object in " +"order to remove any visible seam. This option requires a single perimeter, " +"no infill, no top solid layers and no support material. You can still set " +"any number of bottom solid layers as well as skirt/brim loops. It won't work " +"when printing more than an object." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1334 +msgid "Temperature variation" +msgstr "Temperature variation" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1335 +msgid "" +"Temperature difference to be applied when an extruder is not active. Enables " +"a full-height \"sacrificial\" skirt on which the nozzles are periodically " +"wiped." +msgstr "" +"Temperature difference to be applied when an extruder is not active. Enables " +"a full-height \"sacrificial\" skirt on which the nozzles are periodically " +"wiped." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1344 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1359 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:846 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1119 +msgid "Start G-code" +msgstr "Start G-code" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1345 +msgid "" +"This start procedure is inserted at the beginning, after bed has reached the " +"target temperature and extruder just started heating, and before extruder " +"has finished heating. If Slic3r detects M104 or M190 in your custom codes, " +"such commands will not be prepended automatically so you're free to " +"customize the order of heating commands and other custom actions. Note that " +"you can use placeholder variables for all Slic3r settings, so you can put a " +"\"M109 S[first_layer_temperature]\" command wherever you want." +msgstr "" +"This start procedure is inserted at the beginning, after bed has reached the " +"target temperature and extruder just started heating, and before extruder " +"has finished heating. If Slic3r detects M104 or M190 in your custom codes, " +"such commands will not be prepended automatically so you're free to " +"customize the order of heating commands and other custom actions. Note that " +"you can use placeholder variables for all Slic3r settings, so you can put a " +"\"M109 S[first_layer_temperature]\" command wherever you want." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1360 +msgid "" +"This start procedure is inserted at the beginning, after any printer start " +"gcode. This is used to override settings for a specific filament. If Slic3r " +"detects M104, M109, M140 or M190 in your custom codes, such commands will " +"not be prepended automatically so you're free to customize the order of " +"heating commands and other custom actions. Note that you can use placeholder " +"variables for all Slic3r settings, so you can put a \"M109 " +"S[first_layer_temperature]\" command wherever you want. If you have multiple " +"extruders, the gcode is processed in extruder order." +msgstr "" +"This start procedure is inserted at the beginning, after any printer start " +"gcode. This is used to override settings for a specific filament. If Slic3r " +"detects M104, M109, M140 or M190 in your custom codes, such commands will " +"not be prepended automatically so you're free to customize the order of " +"heating commands and other custom actions. Note that you can use placeholder " +"variables for all Slic3r settings, so you can put a \"M109 " +"S[first_layer_temperature]\" command wherever you want. If you have multiple " +"extruders, the gcode is processed in extruder order." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1375 +msgid "Single Extruder Multi Material" +msgstr "Single Extruder Multi Material" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1376 +msgid "The printer multiplexes filaments into a single hot end." +msgstr "The printer multiplexes filaments into a single hot end." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1381 +msgid "Generate support material" +msgstr "Generate support material" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1383 +msgid "Enable support material generation." +msgstr "Enable support material generation." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1388 +msgid "XY separation between an object and its support" +msgstr "XY separation between an object and its support" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1390 +msgid "" +"XY separation between an object and its support. If expressed as percentage " +"(for example 50%), it will be calculated over external perimeter width." +msgstr "" +"XY separation between an object and its support. If expressed as percentage " +"(for example 50%), it will be calculated over external perimeter width." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1400 +msgid "Pattern angle" +msgstr "Pattern angle" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1402 +msgid "" +"Use this setting to rotate the support material pattern on the horizontal " +"plane." +msgstr "" +"Use this setting to rotate the support material pattern on the horizontal " +"plane." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1410 +msgid "Support on build plate only" +msgstr "Support on build plate only" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1412 +msgid "" +"Only create support if it lies on a build plate. Don't create support on a " +"print." +msgstr "" +"Only create support if it lies on a build plate. Don't create support on a " +"print." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1418 +msgid "Contact Z distance" +msgstr "Contact Z distance" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1420 +msgid "" +"The vertical distance between object and support material interface. Setting " +"this to 0 will also prevent Slic3r from using bridge flow and speed for the " +"first object layer." +msgstr "" +"The vertical distance between object and support material interface. Setting " +"this to 0 will also prevent Slic3r from using bridge flow and speed for the " +"first object layer." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1433 +msgid "Enforce support for the first" +msgstr "Enforce support for the first" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1435 +msgid "" +"Generate support material for the specified number of layers counting from " +"bottom, regardless of whether normal support material is enabled or not and " +"regardless of any angle threshold. This is useful for getting more adhesion " +"of objects having a very thin or poor footprint on the build plate." +msgstr "" +"Generate support material for the specified number of layers counting from " +"bottom, regardless of whether normal support material is enabled or not and " +"regardless of any angle threshold. This is useful for getting more adhesion " +"of objects having a very thin or poor footprint on the build plate." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1441 +msgid "Enforce support for the first n layers" +msgstr "Enforce support for the first n layers" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1446 +msgid "Support material/raft/skirt extruder" +msgstr "Support material/raft/skirt extruder" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1448 +msgid "" +"The extruder to use when printing support material, raft and skirt (1+, 0 to " +"use the current extruder to minimize tool changes)." +msgstr "" +"The extruder to use when printing support material, raft and skirt (1+, 0 to " +"use the current extruder to minimize tool changes)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1457 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for support " +"material. If left zero, default extrusion width will be used if set, " +"otherwise nozzle diameter will be used. If expressed as percentage (for " +"example 90%) it will be computed over layer height." +msgstr "" +"Set this to a non-zero value to set a manual extrusion width for support " +"material. If left zero, default extrusion width will be used if set, " +"otherwise nozzle diameter will be used. If expressed as percentage (for " +"example 90%) it will be computed over layer height." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1465 +msgid "Interface loops" +msgstr "Interface loops" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1467 +msgid "" +"Cover the top contact layer of the supports with loops. Disabled by default." +msgstr "" +"Cover the top contact layer of the supports with loops. Disabled by default." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1472 +msgid "Support material/raft interface extruder" +msgstr "Support material/raft interface extruder" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1474 +msgid "" +"The extruder to use when printing support material interface (1+, 0 to use " +"the current extruder to minimize tool changes). This affects raft too." +msgstr "" +"The extruder to use when printing support material interface (1+, 0 to use " +"the current extruder to minimize tool changes). This affects raft too." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1481 +msgid "Interface layers" +msgstr "Interface layers" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1483 +msgid "" +"Number of interface layers to insert between the object(s) and support " +"material." +msgstr "" +"Number of interface layers to insert between the object(s) and support " +"material." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1490 +msgid "Interface pattern spacing" +msgstr "Interface pattern spacing" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1492 +msgid "Spacing between interface lines. Set zero to get a solid interface." +msgstr "Spacing between interface lines. Set zero to get a solid interface." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1499 +msgid "Support material interface" +msgstr "Support material interface" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1501 +msgid "" +"Speed for printing support material interface layers. If expressed as " +"percentage (for example 50%) it will be calculated over support material " +"speed." +msgstr "" +"Speed for printing support material interface layers. If expressed as " +"percentage (for example 50%) it will be calculated over support material " +"speed." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1510 +msgid "Pattern" +msgstr "Pattern" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1512 +msgid "Pattern used to generate support material." +msgstr "Pattern used to generate support material." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1526 +msgid "Pattern spacing" +msgstr "Pattern spacing" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1528 +msgid "Spacing between support material lines." +msgstr "Spacing between support material lines." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1537 +msgid "Speed for printing support material." +msgstr "Speed for printing support material." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1544 +msgid "Synchronize with object layers" +msgstr "Synchronize with object layers" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1546 +msgid "" +"Synchronize support layers with the object print layers. This is useful with " +"multi-material printers, where the extruder switch is expensive." +msgstr "" +"Synchronize support layers with the object print layers. This is useful with " +"multi-material printers, where the extruder switch is expensive." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1552 +msgid "Overhang threshold" +msgstr "Overhang threshold" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1554 +msgid "" +"Support material will not be generated for overhangs whose slope angle " +"(90\\u00B0 = vertical) is above the given threshold. In other words, this " +"value represent the most horizontal slope (measured from the horizontal " +"plane) that you can print without support material. Set to zero for " +"automatic detection (recommended)." +msgstr "" +"Support material will not be generated for overhangs whose slope angle " +"(90\\u00B0 = vertical) is above the given threshold. In other words, this " +"value represent the most horizontal slope (measured from the horizontal " +"plane) that you can print without support material. Set to zero for " +"automatic detection (recommended)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1566 +msgid "With sheath around the support" +msgstr "With sheath around the support" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1568 +msgid "" +"Add a sheath (a single perimeter line) around the base support. This makes " +"the support more reliable, but also more difficult to remove." +msgstr "" +"Add a sheath (a single perimeter line) around the base support. This makes " +"the support more reliable, but also more difficult to remove." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1575 +msgid "" +"Extruder temperature for layers after the first one. Set this to zero to " +"disable temperature control commands in the output." +msgstr "" +"Extruder temperature for layers after the first one. Set this to zero to " +"disable temperature control commands in the output." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1578 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:793 +msgid "Temperature" +msgstr "Temperature" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1584 +msgid "Detect thin walls" +msgstr "Detect thin walls" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1586 +msgid "" +"Detect single-width walls (parts where two extrusions don't fit and we need " +"to collapse them into a single trace)." +msgstr "" +"Detect single-width walls (parts where two extrusions don't fit and we need " +"to collapse them into a single trace)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1592 +msgid "Threads" +msgstr "Threads" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1593 +msgid "" +"Threads are used to parallelize long-running tasks. Optimal threads number " +"is slightly above the number of available cores/processors." +msgstr "" +"Threads are used to parallelize long-running tasks. Optimal threads number " +"is slightly above the number of available cores/processors." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1604 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1143 +msgid "Tool change G-code" +msgstr "Tool change G-code" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1605 +msgid "" +"This custom code is inserted right before every extruder change. Note that " +"you can use placeholder variables for all Slic3r settings as well as " +"[previous_extruder] and [next_extruder]." +msgstr "" +"This custom code is inserted right before every extruder change. Note that " +"you can use placeholder variables for all Slic3r settings as well as " +"[previous_extruder] and [next_extruder]." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1615 +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1626 +msgid "Top solid infill" +msgstr "Top solid infill" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1617 +msgid "" +"Set this to a non-zero value to set a manual extrusion width for infill for " +"top surfaces. You may want to use thinner extrudates to fill all narrow " +"regions and get a smoother finish. If left zero, default extrusion width " +"will be used if set, otherwise nozzle diameter will be used. If expressed as " +"percentage (for example 90%) it will be computed over layer height." +msgstr "" +"Set this to a non-zero value to set a manual extrusion width for infill for " +"top surfaces. You may want to use thinner extrudates to fill all narrow " +"regions and get a smoother finish. If left zero, default extrusion width " +"will be used if set, otherwise nozzle diameter will be used. If expressed as " +"percentage (for example 90%) it will be computed over layer height." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1628 +msgid "" +"Speed for printing top solid layers (it only applies to the uppermost " +"external layers and not to their internal solid layers). You may want to " +"slow down this to get a nicer surface finish. This can be expressed as a " +"percentage (for example: 80%) over the solid infill speed above. Set to zero " +"for auto." +msgstr "" +"Speed for printing top solid layers (it only applies to the uppermost " +"external layers and not to their internal solid layers). You may want to " +"slow down this to get a nicer surface finish. This can be expressed as a " +"percentage (for example: 80%) over the solid infill speed above. Set to zero " +"for auto." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1640 +msgid "Top" +msgstr "Top" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1642 +msgid "Number of solid layers to generate on top surfaces." +msgstr "Number of solid layers to generate on top surfaces." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1644 +msgid "Top solid layers" +msgstr "Top solid layers" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1649 +msgid "Travel" +msgstr "Travel" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1650 +msgid "Speed for travel moves (jumps between distant extrusion points)." +msgstr "Speed for travel moves (jumps between distant extrusion points)." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1658 +msgid "Use firmware retraction" +msgstr "Use firmware retraction" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1659 +msgid "" +"This experimental setting uses G10 and G11 commands to have the firmware " +"handle the retraction. This is only supported in recent Marlin." +msgstr "" +"This experimental setting uses G10 and G11 commands to have the firmware " +"handle the retraction. This is only supported in recent Marlin." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1665 +msgid "Use relative E distances" +msgstr "Use relative E distances" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1666 +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Most firmwares use absolute values." +msgstr "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Most firmwares use absolute values." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1672 +msgid "Use volumetric E" +msgstr "Use volumetric E" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1673 +msgid "" +"This experimental setting uses outputs the E values in cubic millimeters " +"instead of linear millimeters. If your firmware doesn't already know " +"filament diameter(s), you can put commands like 'M200 D[filament_diameter_0] " +"T0' in your start G-code in order to turn volumetric mode on and use the " +"filament diameter associated to the filament selected in Slic3r. This is " +"only supported in recent Marlin." +msgstr "" +"This experimental setting uses outputs the E values in cubic millimeters " +"instead of linear millimeters. If your firmware doesn't already know " +"filament diameter(s), you can put commands like 'M200 D[filament_diameter_0] " +"T0' in your start G-code in order to turn volumetric mode on and use the " +"filament diameter associated to the filament selected in Slic3r. This is " +"only supported in recent Marlin." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1683 +msgid "Enable variable layer height feature" +msgstr "Enable variable layer height feature" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1684 +msgid "" +"Some printers or printer setups may have difficulties printing with a " +"variable layer height. Enabled by default." +msgstr "" +"Some printers or printer setups may have difficulties printing with a " +"variable layer height. Enabled by default." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1690 +msgid "Wipe while retracting" +msgstr "Wipe while retracting" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1691 +msgid "" +"This flag will move the nozzle while retracting to minimize the possible " +"blob on leaky extruders." +msgstr "" +"This flag will move the nozzle while retracting to minimize the possible " +"blob on leaky extruders." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1698 +msgid "" +"Multi material printers may need to prime or purge extruders on tool " +"changes. Extrude the excess material into the wipe tower." +msgstr "" +"Multi material printers may need to prime or purge extruders on tool " +"changes. Extrude the excess material into the wipe tower." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1704 +msgid "Position X" +msgstr "Position X" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1705 +msgid "X coordinate of the left front corner of a wipe tower" +msgstr "X coordinate of the left front corner of a wipe tower" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1711 +msgid "Position Y" +msgstr "Position Y" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1712 +msgid "Y coordinate of the left front corner of a wipe tower" +msgstr "Y coordinate of the left front corner of a wipe tower" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1718 +msgid "Width" +msgstr "Width" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1719 +msgid "Width of a wipe tower" +msgstr "Width of a wipe tower" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1725 +msgid "Per color change depth" +msgstr "Per color change depth" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1726 +msgid "" +"Depth of a wipe color per color change. For N colors, there will be maximum " +"(N-1) tool switches performed, therefore the total depth of the wipe tower " +"will be (N-1) times this value." +msgstr "" +"Depth of a wipe color per color change. For N colors, there will be maximum " +"(N-1) tool switches performed, therefore the total depth of the wipe tower " +"will be (N-1) times this value." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1734 +msgid "XY Size Compensation" +msgstr "XY Size Compensation" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1736 +msgid "" +"The object will be grown/shrunk in the XY plane by the configured value " +"(negative = inwards, positive = outwards). This might be useful for fine-" +"tuning hole sizes." +msgstr "" +"The object will be grown/shrunk in the XY plane by the configured value " +"(negative = inwards, positive = outwards). This might be useful for fine-" +"tuning hole sizes." + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1744 +msgid "Z offset" +msgstr "Z offset" + +#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1745 +msgid "" +"This value will be added (or subtracted) from all the Z coordinates in the " +"output G-code. It is used to compensate for bad Z endstop position: for " +"example, if your endstop zero actually leaves the nozzle 0.3mm far from the " +"print bed, set this to -0.3 (or fix your endstop)." +msgstr "" +"This value will be added (or subtracted) from all the Z coordinates in the " +"output G-code. It is used to compensate for bad Z endstop position: for " +"example, if your endstop zero actually leaves the nozzle 0.3mm far from the " +"print bed, set this to -0.3 (or fix your endstop)." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:39 +msgid "Shape" +msgstr "Shape" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:46 +msgid "Rectangular" +msgstr "Rectangular" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:62 +msgid "Circular" +msgstr "Circular" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:75 +msgid "Load shape from STL..." +msgstr "Load shape from STL..." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:120 +msgid "Settings" +msgstr "Settings" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:298 +msgid "Choose a file to import bed shape from (STL/OBJ/AMF/PRUSA):" +msgstr "Choose a file to import bed shape from (STL/OBJ/AMF/PRUSA):" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:315 +msgid "Error! " +msgstr "Error! " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:324 +msgid "The selected file contains no geometry." +msgstr "The selected file contains no geometry." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:328 +msgid "" +"The selected file contains several disjoint areas. This is not supported." +msgstr "" +"The selected file contains several disjoint areas. This is not supported." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.hpp:42 +msgid "Bed Shape" +msgstr "Bed Shape" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:468 +msgid "Error" +msgstr "Error" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:473 +msgid "Notice" +msgstr "Notice" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:50 +msgid "Save current " +msgstr "Save current " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:51 +msgid "Delete this preset" +msgstr "Delete this preset" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:330 +msgid "Horizontal shells" +msgstr "Horizontal shells" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:336 +msgid "Quality (slower slicing)" +msgstr "Quality (slower slicing)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:353 +msgid "Reducing printing time" +msgstr "Reducing printing time" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:365 +msgid "Skirt and brim" +msgstr "Skirt and brim" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:381 +msgid "Raft" +msgstr "Raft" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:412 +msgid "Speed for non-print moves" +msgstr "Speed for non-print moves" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:415 +msgid "Modifiers" +msgstr "Modifiers" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:418 +msgid "Acceleration control (advanced)" +msgstr "Acceleration control (advanced)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:425 +msgid "Autospeed (advanced)" +msgstr "Autospeed (advanced)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:431 +msgid "Multiple Extruders" +msgstr "Multiple Extruders" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:439 +msgid "Ooze prevention" +msgstr "Ooze prevention" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:464 +msgid "Overlap" +msgstr "Overlap" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:467 +msgid "Flow" +msgstr "Flow" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:470 +msgid "Other" +msgstr "Other" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:477 +msgid "Output options" +msgstr "Output options" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:478 +msgid "Sequential printing" +msgstr "Sequential printing" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:501 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:502 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:858 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:859 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1155 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1156 +msgid "Notes" +msgstr "Notes" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:508 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:866 +msgid "Dependencies" +msgstr "Dependencies" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:509 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:867 +msgid "Profile dependencies" +msgstr "Profile dependencies" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:799 +msgid "Bed" +msgstr "Bed" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:804 +msgid "Cooling" +msgstr "Cooling" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:816 +msgid "Fan settings" +msgstr "Fan settings" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:835 +msgid "Print speed override" +msgstr "Print speed override" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:845 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1118 +msgid "Custom G-code" +msgstr "Custom G-code" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:936 +msgid "General" +msgstr "General" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:937 +msgid "Size and coordinates" +msgstr "Size and coordinates" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:941 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1642 +msgid "Set" +msgstr "Set" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:961 +msgid "Capabilities" +msgstr "Capabilities" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1003 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1071 +msgid "Test" +msgstr "Test" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1016 +msgid "Connection to printer works correctly." +msgstr "Connection to printer works correctly." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1016 +msgid "Success!" +msgstr "Success!" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1019 +msgid "Connection failed." +msgstr "Connection failed." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1031 +msgid "OctoPrint upload" +msgstr "OctoPrint upload" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1034 +msgid "Browse" +msgstr "Browse" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1046 +msgid "Button BROWSE was clicked!" +msgstr "Button BROWSE was clicked!" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1081 +msgid "Button TEST was clicked!" +msgstr "Button TEST was clicked!" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1109 +msgid "Firmware" +msgstr "Firmware" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1191 +msgid "Layer height limits" +msgstr "Layer height limits" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1196 +msgid "Position (for multi-extruder printers)" +msgstr "Position (for multi-extruder printers)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1215 +msgid "" +"Retraction when tool is disabled (advanced settings for multi-extruder " +"setups)" +msgstr "" +"Retraction when tool is disabled (advanced settings for multi-extruder " +"setups)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1219 +msgid "Preview" +msgstr "Preview" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1310 +msgid "" +"The Wipe option is not available when using the Firmware Retraction mode.\n" +"\n" +"Shall I disable it in order to enable Firmware Retraction?" +msgstr "" +"The Wipe option is not available when using the Firmware Retraction mode.\n" +"\n" +"Shall I disable it in order to enable Firmware Retraction?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1558 +msgid "The supplied name is empty. It can't be saved." +msgstr "The supplied name is empty. It can't be saved." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1569 +msgid "Something is wrong. It can't be saved." +msgstr "Something is wrong. It can't be saved." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1586 +msgid "remove" +msgstr "remove" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1586 +msgid "delete" +msgstr "delete" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1587 +msgid "Are you sure you want to " +msgstr "Are you sure you want to " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1587 +msgid " the selected preset?" +msgstr " the selected preset?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1588 +msgid "Remove" +msgstr "Remove" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1588 +msgid "Delete" +msgstr "Delete" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1589 +msgid " Preset" +msgstr " Preset" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1641 +msgid "All" +msgstr "All" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1672 +msgid "Select the printers this profile is compatible with." +msgstr "Select the printers this profile is compatible with." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1756 +msgid "Save " +msgstr "Save " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1756 +msgid " as:" +msgstr " as:" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1790 +msgid "" +"The supplied name is not valid; the following characters are not allowed:" +msgstr "" +"The supplied name is not valid; the following characters are not allowed:" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1793 +msgid "The supplied name is not available." +msgstr "The supplied name is not available." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:182 +msgid "Print Settings" +msgstr "Print Settings" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:202 +msgid "Filament Settings" +msgstr "Filament Settings" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:248 +msgid "Save preset" +msgstr "Save preset" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Field.cpp:35 +msgid "default" +msgstr "default" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:71 +msgid "Custom" +msgstr "Custom" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:212 +msgid "Array of language names and identifiers should have the same size." +msgstr "Array of language names and identifiers should have the same size." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:223 +msgid "Select the language" +msgstr "Select the language" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:223 +msgid "Language" +msgstr "Language" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:321 +msgid "Change Application Language" +msgstr "Change Application Language" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:314 +msgid "Layers and perimeters" +msgstr "Layers and perimeters" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:319 +msgid "Vertical shells" +msgstr "Vertical shells" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:366 +msgid "Skirt" +msgstr "Skirt" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:372 +msgid "Brim" +msgstr "Brim" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:385 +msgid "Options for support material and raft" +msgstr "Options for support material and raft" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:400 +msgid "Speed for print moves" +msgstr "Speed for print moves" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:443 +msgid "Wipe tower" +msgstr "Wipe tower" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:454 +msgid "Extrusion width" +msgstr "Extrusion width" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:480 +msgid "Extruder clearance (mm)" +msgstr "Extruder clearance (mm)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:489 +msgid "Output file" +msgstr "Output file" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:534 +#, c-format +msgid "" +"The Spiral Vase mode requires:\n" +"- one perimeter\n" +"- no top solid layers\n" +"- 0% fill density\n" +"- no support material\n" +"- no ensure_vertical_shell_thickness\n" +"\n" +"Shall I adjust those settings in order to enable Spiral Vase?" +msgstr "" +"The Spiral Vase mode requires:\n" +"- one perimeter\n" +"- no top solid layers\n" +"- 0% fill density\n" +"- no support material\n" +"- no ensure_vertical_shell_thickness\n" +"\n" +"Shall I adjust those settings in order to enable Spiral Vase?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:541 +msgid "Spiral Vase" +msgstr "Spiral Vase" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:560 +msgid "" +"The Wipe Tower currently supports only:\n" +"- first layer height 0.2mm\n" +"- layer height from 0.15mm to 0.35mm\n" +"\n" +"Shall I adjust those settings in order to enable the Wipe Tower?" +msgstr "" +"The Wipe Tower currently supports only:\n" +"- first layer height 0.2mm\n" +"- layer height from 0.15mm to 0.35mm\n" +"\n" +"Shall I adjust those settings in order to enable the Wipe Tower?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:564 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:585 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:602 +msgid "Wipe Tower" +msgstr "Wipe tower" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:581 +msgid "" +"The Wipe Tower currently supports the non-soluble supports only\n" +"if they are printed with the current extruder without triggering a tool " +"change.\n" +"(both support_material_extruder and support_material_interface_extruder need " +"to be set to 0).\n" +"\n" +"Shall I adjust those settings in order to enable the Wipe Tower?" +msgstr "" +"The Wipe Tower currently supports the non-soluble supports only\n" +"if they are printed with the current extruder without triggering a tool " +"change.\n" +"(both support_material_extruder and support_material_interface_extruder need " +"to be set to 0).\n" +"\n" +"Shall I adjust those settings in order to enable the Wipe Tower?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:599 +msgid "" +"For the Wipe Tower to work with the soluble supports, the support layers\n" +"need to be synchronized with the object layers.\n" +"\n" +"Shall I synchronize support layers in order to enable the Wipe Tower?" +msgstr "" +"For the Wipe Tower to work with the soluble supports, the support layers\n" +"need to be synchronized with the object layers.\n" +"\n" +"Shall I synchronize support layers in order to enable the Wipe Tower?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:617 +msgid "" +"Supports work better, if the following feature is enabled:\n" +"- Detect bridging perimeters\n" +"\n" +"Shall I adjust those settings for supports?" +msgstr "" +"Supports work better, if the following feature is enabled:\n" +"- Detect bridging perimeters\n" +"\n" +"Shall I adjust those settings for supports?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:620 +msgid "Support Generator" +msgstr "Support Generator" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:662 +msgid "The " +msgstr "The " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:662 +#, c-format +msgid "" +" infill pattern is not supposed to work at 100% density.\n" +"\n" +"Shall I switch to rectilinear fill pattern?" +msgstr "" +" infill pattern is not supposed to work at 100% density.\n" +"\n" +"Shall I switch to rectilinear fill pattern?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:785 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:786 +msgid "Filament" +msgstr "Filament" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:817 +msgid "Fan speed" +msgstr "Fan speed" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:825 +msgid "Cooling thresholds" +msgstr "Cooling thresholds" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:831 +msgid "Filament properties" +msgstr "Filament properties" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:988 +msgid "USB/Serial connection" +msgstr "USB/Serial connection" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:994 +msgid "Rescan serial ports" +msgstr "Rescan serial ports" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1149 +msgid "Between objects G-code (for sequential printing)" +msgstr "Between objects G-code (for sequential printing)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1185 +msgid "Extruder " +msgstr "Extruder " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1199 +msgid "Retraction" +msgstr "Retraction" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1202 +msgid "Only lift Z" +msgstr "Only lift Z" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1312 +msgid "Firmware Retraction" +msgstr "Firmware Retraction" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1467 +msgid "Default " +msgstr "Default " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1467 +msgid " preset" +msgstr " preset" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1468 +msgid " preset\n" +msgstr " preset\n" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1486 +msgid "" +"\n" +"\n" +"is not compatible with printer\n" +msgstr "" +"\n" +"\n" +"is not compatible with printer\n" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1486 +msgid "" +"\n" +"\n" +"and it has the following unsaved changes:" +msgstr "" +"\n" +"\n" +"and it has the following unsaved changes:" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1487 +msgid "" +"\n" +"\n" +"has the following unsaved changes:" +msgstr "" +"\n" +"\n" +"has the following unsaved changes:" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1489 +msgid "" +"\n" +"\n" +"Discard changes and continue anyway?" +msgstr "" +"\n" +"\n" +"Discard changes and continue anyway?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1490 +msgid "Unsaved Changes" +msgstr "Unsaved Changes" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:228 +msgid "Printer Settings" +msgstr "Printer Settings" diff --git a/resources/localization/uk/Slic3rPE.mo b/resources/localization/uk/Slic3rPE.mo new file mode 100644 index 000000000..40e32c81e Binary files /dev/null and b/resources/localization/uk/Slic3rPE.mo differ diff --git a/resources/localization/uk/Slic3rPE_uk.po b/resources/localization/uk/Slic3rPE_uk.po new file mode 100644 index 000000000..6166632e2 --- /dev/null +++ b/resources/localization/uk/Slic3rPE_uk.po @@ -0,0 +1,538 @@ +# This file is distributed under the same license as the Slic3rPE package. +# Oleksandra Iushchenko , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-07 20:20+0100\n" +"PO-Revision-Date: 2018-02-08 01:41+0100\n" +"Last-Translator: Oleksandra Iushchenko \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.6\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Language: uk\n" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:81 +msgid "Default" +msgstr "За замовчуванням" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:109 +msgid "Shape" +msgstr "Вигляд (Форма)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:116 +msgid "Rectangular" +msgstr "Прямокутний" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:132 +msgid "Circular" +msgstr "Круговий" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:141 +msgid "Custom" +msgstr "Користувацький" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:145 +msgid "Load shape from STL..." +msgstr "Завантажте форму з STL ..." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:190 +msgid "Settings" +msgstr "Налаштування" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:368 +msgid "Choose a file to import bed shape from (STL/OBJ/AMF/PRUSA):" +msgstr "Виберіть файл, щоб імпортувати форму подложки з (STL/OBJ/AMF/PRUSA):" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:385 +msgid "Error! " +msgstr "Помилка! " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:394 +msgid "The selected file contains no geometry." +msgstr "Обратний файл не містить геометрії." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:398 +msgid "" +"The selected file contains several disjoint areas. This is not supported." +msgstr "Обраний файл містить декілька непересічних областей. Не підтримується." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.hpp:45 +msgid "Bed Shape" +msgstr "Форма полотна" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:318 +msgid "Error" +msgstr "Помилка" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:323 +msgid "Notice" +msgstr "Зауваження" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:51 +msgid "Save current " +msgstr "Зберегти поточний " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:52 +msgid "Delete this preset" +msgstr "Видалити це налаштування" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:324 +msgid "Layers and perimeters" +msgstr "Шари та периметри" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:325 +msgid "Layer height" +msgstr "Висота шару" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:329 +msgid "Vertical shells" +msgstr "Вертикальні оболонки" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:340 +msgid "Horizontal shells" +msgstr "Горизонтальні оболонки" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:341 +msgid "Solid layers" +msgstr "Тверді шари" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:346 +msgid "Quality (slower slicing)" +msgstr "Якість (повільне нарізання)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:353 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:367 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:460 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:463 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:839 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1122 +msgid "Advanced" +msgstr "Розширений" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:357 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:358 +msgid "Infill" +msgstr "Заповнення" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:363 +msgid "Reducing printing time" +msgstr "Зниження часу друку" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:375 +msgid "Skirt and brim" +msgstr "Плінтус та край" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:376 +msgid "Skirt" +msgstr "Плінтус" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:382 +msgid "Brim" +msgstr "Край" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:385 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:386 +msgid "Support material" +msgstr "Опорний матеріал" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:391 +msgid "Raft" +msgstr "Пліт" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:395 +msgid "Options for support material and raft" +msgstr "Варіанти для опорного матеріалу та плоту" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:409 +msgid "Speed" +msgstr "Швидкість" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:410 +msgid "Speed for print moves" +msgstr "Швидкість друкарських рухів" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:422 +msgid "Speed for non-print moves" +msgstr "Швидкість недрукарських рухів" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:425 +msgid "Modifiers" +msgstr "Модифікатори" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:428 +msgid "Acceleration control (advanced)" +msgstr "Контроль прискорення (розширений)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:435 +msgid "Autospeed (advanced)" +msgstr "Автоматична швидкість (розширена)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:441 +msgid "Multiple Extruders" +msgstr "Кілька екструдерів" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:442 +msgid "Extruders" +msgstr "Екструдери" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:449 +msgid "Ooze prevention" +msgstr "Профілактика ?Ooze?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:453 +msgid "Wipe tower" +msgstr "Вежа очищення" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:464 +msgid "Extrusion width" +msgstr "Ширина екструзії" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:474 +msgid "Overlap" +msgstr "Перекриття" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:477 +msgid "Flow" +msgstr "Потік" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:480 +msgid "Other" +msgstr "Інше" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:487 +msgid "Output options" +msgstr "Параметри виводу" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:488 +msgid "Sequential printing" +msgstr "Послідовне друкування" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:499 +msgid "Output file" +msgstr "Вихідний файл" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:505 +msgid "Post-processing scripts" +msgstr "Скрипти пост-обробки" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:511 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:512 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:867 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:868 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1165 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1166 +msgid "Notes" +msgstr "Примітки" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:518 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:875 +msgid "Dependencies" +msgstr "Залежності" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:519 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:876 +msgid "Profile dependencies" +msgstr "Залежності профілю" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:794 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:795 +msgid "Filament" +msgstr "Філаметн" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:802 +msgid "Temperature" +msgstr "Температура" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:803 +msgid "Extruder" +msgstr "Екструдер" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:808 +msgid "Bed" +msgstr "Полотно" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:813 +msgid "Cooling" +msgstr "Охолодження" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:814 +msgid "Enable" +msgstr "Увімкнути" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:825 +msgid "Fan settings" +msgstr "Налаштування вентилятора" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:834 +msgid "Cooling thresholds" +msgstr "Пороги охолодження" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:840 +msgid "Filament properties" +msgstr "Властивості філаменту" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:844 +msgid "Print speed override" +msgstr "Перевизначення швидкості друку" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:854 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1128 +msgid "Custom G-code" +msgstr "Користувацький G-код" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:855 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1129 +msgid "Start G-code" +msgstr "Початок G-коду" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:861 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1135 +msgid "End G-code" +msgstr "Закінчення G-коду" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:945 +msgid "General" +msgstr "Загальне" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:946 +msgid "Size and coordinates" +msgstr "Розмір і координати" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:948 +msgid "Bed shape" +msgstr "Форма полотна" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:950 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1649 +msgid "Set" +msgstr "Встановити" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:971 +msgid "Capabilities" +msgstr "Можливості" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:998 +msgid "USB/Serial connection" +msgstr "USB/послідовне з'єднання" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1004 +msgid "Rescan serial ports" +msgstr "Сканувати ще раз послідовні порти" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1013 +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1081 +msgid "Test" +msgstr "Перевірити" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1026 +msgid "Connection to printer works correctly." +msgstr "Підключення до принтера працює коректно." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1026 +msgid "Success!" +msgstr "Успіх!" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1029 +msgid "Connection failed." +msgstr "Підключення не вдалося." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1041 +msgid "OctoPrint upload" +msgstr "Завантаження OctoPrint" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1044 +msgid "Browse" +msgstr "Переглянути" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1119 +msgid "Firmware" +msgstr "Прошивка" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1141 +msgid "Before layer change G-code" +msgstr "G-код перед зміною шару " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1147 +msgid "After layer change G-code" +msgstr "G-код після зміни шару" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1153 +msgid "Tool change G-code" +msgstr "G-код зміни інструменту " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1159 +msgid "Between objects G-code (for sequential printing)" +msgstr "G-код між об'єктами (для послідовного друку)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1195 +msgid "Extruder " +msgstr "Екструдер " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1198 +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:120 +msgid "Size" +msgstr "Розмір" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1201 +msgid "Layer height limits" +msgstr "Межі висоти шару" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1206 +msgid "Position (for multi-extruder printers)" +msgstr "Позиція (для мульти-екструдерних принтерів)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1209 +msgid "Retraction" +msgstr "Утягування/відкликання" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1212 +msgid "Only lift Z" +msgstr "Межі підняття Z" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1225 +msgid "" +"Retraction when tool is disabled (advanced settings for multi-extruder " +"setups)" +msgstr "" +"Утягування/відкликання при відключенні інструмента (додаткові налаштування " +"для налагодження мульти-екструдерів)" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1229 +msgid "Preview" +msgstr "Попередній перегляд" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1320 +msgid "" +"The Wipe option is not available when using the Firmware Retraction mode.\n" +"\n" +"Shall I disable it in order to enable Firmware Retraction?" +msgstr "" +"Параметр «Очистити» недоступний при використанні режиму програмного " +"утягування/відкликання.\n" +"\n" +"Відключити його для увімкнення програмного утягування/відкликання?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1322 +msgid "Firmware Retraction" +msgstr "Програмне утягування/відкликання" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1565 +msgid "The supplied name is empty. It can't be saved." +msgstr "Надане ім'я порожнє. Не вдається зберегти." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1576 +msgid "Something is wrong. It can't be saved." +msgstr "Щось не так. Не вдається зберегти." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1593 +msgid "remove" +msgstr "перемістити" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1593 +msgid "delete" +msgstr "видалити" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1594 +msgid "Are you sure you want to " +msgstr "Ви впевнені, що хочете " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1594 +msgid " the selected preset?" +msgstr "вибране налаштування?" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1595 +msgid "Remove" +msgstr "Перемістити" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1595 +msgid "Delete" +msgstr "Видалити" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1596 +msgid " Preset" +msgstr " Налаштування" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1648 +msgid "All" +msgstr "Всі" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1679 +msgid "Select the printers this profile is compatible with." +msgstr "Оберіть принтери, сумісні з цим профілем." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1680 +msgid "Compatible printers" +msgstr "Сумісні принтери" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1763 +msgid "Save " +msgstr "Зберегти " + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1763 +msgid " as:" +msgstr " як:" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1797 +msgid "" +"The supplied name is not valid; the following characters are not allowed:" +msgstr "Надане ім'я недійсне; такі символи не допускаються:" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1800 +msgid "The supplied name is not available." +msgstr "Надане ім'я недійсне." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:178 +msgid "Print Settings" +msgstr "Налаштування друку" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:198 +msgid "Filament Settings" +msgstr "Налаштування філаменту" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:224 +msgid "Printer Settings" +msgstr "Налаштування принтеру" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:244 +msgid "Save preset" +msgstr "Зберегти налаштування" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\Field.cpp:35 +msgid "default" +msgstr "за замовчуванням" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:121 +msgid "Size in X and Y of the rectangular plate." +msgstr "Розмір прямокутної подложки за X та Y." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:127 +msgid "Origin" +msgstr "Початок координат" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:128 +msgid "" +"Distance of the 0,0 G-code coordinate from the front left corner of the " +"rectangle." +msgstr "Відстань координат 0,0 G-коду від нижнього лівого кута прямокутника." + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:135 +msgid "mm" +msgstr "мм" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:136 +msgid "Diameter" +msgstr "Діаметр" + +#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:137 +msgid "" +"Diameter of the print bed. It is assumed that origin (0,0) is located in the " +"center." +msgstr "" +"Діаметр подложки. Передбачається, що початок координат (0,0) знаходиться в " +"центрі." diff --git a/xs/CMakeLists.txt b/xs/CMakeLists.txt index 62e86de34..41bf9de26 100644 --- a/xs/CMakeLists.txt +++ b/xs/CMakeLists.txt @@ -181,6 +181,18 @@ add_library(libslic3r_gui STATIC ${LIBDIR}/slic3r/GUI/PresetHints.hpp ${LIBDIR}/slic3r/GUI/GUI.cpp ${LIBDIR}/slic3r/GUI/GUI.hpp + ${LIBDIR}/slic3r/GUI/Tab.cpp + ${LIBDIR}/slic3r/GUI/Tab.hpp + ${LIBDIR}/slic3r/GUI/TabIface.cpp + ${LIBDIR}/slic3r/GUI/TabIface.hpp + ${LIBDIR}/slic3r/GUI/Field.cpp + ${LIBDIR}/slic3r/GUI/Field.hpp + ${LIBDIR}/slic3r/GUI/OptionsGroup.cpp + ${LIBDIR}/slic3r/GUI/OptionsGroup.hpp + ${LIBDIR}/slic3r/GUI/BedShapeDialog.cpp + ${LIBDIR}/slic3r/GUI/BedShapeDialog.hpp + ${LIBDIR}/slic3r/GUI/2DBed.cpp + ${LIBDIR}/slic3r/GUI/2DBed.hpp ${LIBDIR}/slic3r/GUI/wxExtensions.cpp ${LIBDIR}/slic3r/GUI/wxExtensions.hpp ) @@ -307,6 +319,7 @@ set(XS_XSP_FILES ${XSP_DIR}/GUI_AppConfig.xsp ${XSP_DIR}/GUI_3DScene.xsp ${XSP_DIR}/GUI_Preset.xsp + ${XSP_DIR}/GUI_Tab.xsp ${XSP_DIR}/Layer.xsp ${XSP_DIR}/Line.xsp ${XSP_DIR}/Model.xsp diff --git a/xs/lib/Slic3r/XS.pm b/xs/lib/Slic3r/XS.pm index 26c8befe2..c43b80eea 100644 --- a/xs/lib/Slic3r/XS.pm +++ b/xs/lib/Slic3r/XS.pm @@ -283,6 +283,7 @@ for my $class (qw( Slic3r::GUI::_3DScene::GLVolume Slic3r::GUI::Preset Slic3r::GUI::PresetCollection + Slic3r::GUI::Tab2 Slic3r::Layer Slic3r::Layer::Region Slic3r::Layer::Support diff --git a/xs/src/libslic3r/Polygon.hpp b/xs/src/libslic3r/Polygon.hpp index f36abc185..1a02d78b7 100644 --- a/xs/src/libslic3r/Polygon.hpp +++ b/xs/src/libslic3r/Polygon.hpp @@ -24,6 +24,12 @@ public: explicit Polygon(const Points &points): MultiPoint(points) {} Polygon(const Polygon &other) : MultiPoint(other.points) {} Polygon(Polygon &&other) : MultiPoint(std::move(other.points)) {} + static Polygon new_scale(std::vector points) { + Points int_points; + for (auto pt : points) + int_points.push_back(Point::new_scale(pt.x, pt.y)); + return Polygon(int_points); + } Polygon& operator=(const Polygon &other) { points = other.points; return *this; } Polygon& operator=(Polygon &&other) { points = std::move(other.points); return *this; } diff --git a/xs/src/libslic3r/Polyline.hpp b/xs/src/libslic3r/Polyline.hpp index a1d777692..b64743d84 100644 --- a/xs/src/libslic3r/Polyline.hpp +++ b/xs/src/libslic3r/Polyline.hpp @@ -21,6 +21,14 @@ public: Polyline(Polyline &&other) : MultiPoint(std::move(other.points)) {} Polyline& operator=(const Polyline &other) { points = other.points; return *this; } Polyline& operator=(Polyline &&other) { points = std::move(other.points); return *this; } + static Polyline new_scale(std::vector points) { + Polyline pl; + Points int_points; + for (auto pt : points) + int_points.push_back(Point::new_scale(pt.x, pt.y)); + pl.append(int_points); + return pl; + } void append(const Point &point) { this->points.push_back(point); } void append(const Points &src) { this->append(src.begin(), src.end()); } diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index 5bbf20c4c..177ee3d21 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -9,6 +9,10 @@ namespace Slic3r { +//! macro used to mark string used at localization, +//! return same string +#define _L(s) s + PrintConfigDef::PrintConfigDef() { t_optiondef_map &Options = this->options; @@ -17,34 +21,39 @@ PrintConfigDef::PrintConfigDef() // Maximum extruder temperature, bumped to 1500 to support printing of glass. const int max_temp = 1500; + + //! On purpose of localization there is that changes at text of tooltip and sidetext: + //! - ° -> \u00B0 + //! - ² -> \u00B2 + //! - ³ -> \u00B3 def = this->add("avoid_crossing_perimeters", coBool); - def->label = "Avoid crossing perimeters"; - def->tooltip = "Optimize travel moves in order to minimize the crossing of perimeters. " + def->label = _L("Avoid crossing perimeters"); + def->tooltip = _L("Optimize travel moves in order to minimize the crossing of perimeters. " "This is mostly useful with Bowden extruders which suffer from oozing. " - "This feature slows down both the print and the G-code generation."; + "This feature slows down both the print and the G-code generation."); def->cli = "avoid-crossing-perimeters!"; def->default_value = new ConfigOptionBool(false); def = this->add("bed_shape", coPoints); - def->label = "Bed shape"; + def->label = _L("Bed shape"); def->default_value = new ConfigOptionPoints { Pointf(0,0), Pointf(200,0), Pointf(200,200), Pointf(0,200) }; def = this->add("bed_temperature", coInts); - def->label = "Other layers"; - def->tooltip = "Bed temperature for layers after the first one. " - "Set this to zero to disable bed temperature control commands in the output."; + def->label = _L("Other layers"); + def->tooltip = _L("Bed temperature for layers after the first one. " + "Set this to zero to disable bed temperature control commands in the output."); def->cli = "bed-temperature=i@"; - def->full_label = "Bed temperature"; + def->full_label = _L("Bed temperature"); def->min = 0; def->max = 300; def->default_value = new ConfigOptionInts { 0 }; def = this->add("before_layer_gcode", coString); - def->label = "Before layer change G-code"; - def->tooltip = "This custom code is inserted at every layer change, right before the Z move. " + def->label = _L("Before layer change G-code"); + def->tooltip = _L("This custom code is inserted at every layer change, right before the Z move. " "Note that you can use placeholder variables for all Slic3r settings as well " - "as [layer_num] and [layer_z]."; + "as [layer_num] and [layer_z]."); def->cli = "before-layer-gcode=s"; def->multiline = true; def->full_width = true; @@ -52,8 +61,8 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionString(""); def = this->add("between_objects_gcode", coString); - def->label = "Between objects G-code"; - def->tooltip = "This code is inserted between objects when using sequential printing. By default extruder and bed temperature are reset using non-wait command; however if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not add temperature commands. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."; + def->label = _L("Between objects G-code"); + def->tooltip = _L("This code is inserted between objects when using sequential printing. By default extruder and bed temperature are reset using non-wait command; however if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not add temperature commands. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."); def->cli = "between-objects-gcode=s"; def->multiline = true; def->full_width = true; @@ -61,158 +70,158 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionString(""); def = this->add("bottom_solid_layers", coInt); - def->label = "Bottom"; - def->category = "Layers and Perimeters"; - def->tooltip = "Number of solid layers to generate on bottom surfaces."; + def->label = _L("Bottom"); + def->category = _L("Layers and Perimeters"); + def->tooltip = _L("Number of solid layers to generate on bottom surfaces."); def->cli = "bottom-solid-layers=i"; - def->full_label = "Bottom solid layers"; + def->full_label = _L("Bottom solid layers"); def->min = 0; def->default_value = new ConfigOptionInt(3); def = this->add("bridge_acceleration", coFloat); - def->label = "Bridge"; - def->tooltip = "This is the acceleration your printer will use for bridges. " - "Set zero to disable acceleration control for bridges."; - def->sidetext = "mm/s²"; + def->label = _L("Bridge"); + def->tooltip = _L("This is the acceleration your printer will use for bridges. " + "Set zero to disable acceleration control for bridges."); + def->sidetext = _L("mm/s\u00B2"); def->cli = "bridge-acceleration=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("bridge_angle", coFloat); - def->label = "Bridging angle"; - def->category = "Infill"; - def->tooltip = "Bridging angle override. If left to zero, the bridging angle will be calculated " + def->label = _L("Bridging angle"); + def->category = _L("Infill"); + def->tooltip = _L("Bridging angle override. If left to zero, the bridging angle will be calculated " "automatically. Otherwise the provided angle will be used for all bridges. " - "Use 180° for zero angle."; - def->sidetext = "°"; + "Use 180\u00B0 for zero angle."); + def->sidetext = _L("\u00B0"); def->cli = "bridge-angle=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0.); def = this->add("bridge_fan_speed", coInts); - def->label = "Bridges fan speed"; - def->tooltip = "This fan speed is enforced during all bridges and overhangs."; - def->sidetext = "%"; + def->label = _L("Bridges fan speed"); + def->tooltip = _L("This fan speed is enforced during all bridges and overhangs."); + def->sidetext = _L("%"); def->cli = "bridge-fan-speed=i@"; def->min = 0; def->max = 100; def->default_value = new ConfigOptionInts { 100 }; def = this->add("bridge_flow_ratio", coFloat); - def->label = "Bridge flow ratio"; - def->category = "Advanced"; - def->tooltip = "This factor affects the amount of plastic for bridging. " + def->label = _L("Bridge flow ratio"); + def->category = _L("Advanced"); + def->tooltip = _L("This factor affects the amount of plastic for bridging. " "You can decrease it slightly to pull the extrudates and prevent sagging, " "although default settings are usually good and you should experiment " - "with cooling (use a fan) before tweaking this."; + "with cooling (use a fan) before tweaking this."); def->cli = "bridge-flow-ratio=f"; def->min = 0; def->default_value = new ConfigOptionFloat(1); def = this->add("bridge_speed", coFloat); - def->label = "Bridges"; - def->category = "Speed"; - def->tooltip = "Speed for printing bridges."; - def->sidetext = "mm/s"; + def->label = _L("Bridges"); + def->category = _L("Speed"); + def->tooltip = _L("Speed for printing bridges."); + def->sidetext = _L("mm/s"); def->cli = "bridge-speed=f"; def->aliases.push_back("bridge_feed_rate"); def->min = 0; def->default_value = new ConfigOptionFloat(60); def = this->add("brim_width", coFloat); - def->label = "Brim width"; - def->tooltip = "Horizontal width of the brim that will be printed around each object on the first layer."; - def->sidetext = "mm"; + def->label = _L("Brim width"); + def->tooltip = _L("Horizontal width of the brim that will be printed around each object on the first layer."); + def->sidetext = _L("mm"); def->cli = "brim-width=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("clip_multipart_objects", coBool); - def->label = "Clip multi-part objects"; - def->tooltip = "When printing multi-material objects, this settings will make slic3r " + def->label = _L("Clip multi-part objects"); + def->tooltip = _L("When printing multi-material objects, this settings will make slic3r " "to clip the overlapping object parts one by the other " - "(2nd part will be clipped by the 1st, 3rd part will be clipped by the 1st and 2nd etc)."; + "(2nd part will be clipped by the 1st, 3rd part will be clipped by the 1st and 2nd etc)."); def->cli = "clip-multipart-objects!"; def->default_value = new ConfigOptionBool(false); def = this->add("compatible_printers", coStrings); - def->label = "Compatible printers"; + def->label = _L("Compatible printers"); def->default_value = new ConfigOptionStrings(); def = this->add("compatible_printers_condition", coString); - def->label = "Compatible printers condition"; - def->tooltip = "A boolean expression using the configuration values of an active printer profile. " + def->label = _L("Compatible printers condition"); + def->tooltip = _L("A boolean expression using the configuration values of an active printer profile. " "If this expression evaluates to true, this profile is considered compatible " - "with the active printer profile."; + "with the active printer profile."); def->default_value = new ConfigOptionString(); def = this->add("complete_objects", coBool); - def->label = "Complete individual objects"; - def->tooltip = "When printing multiple objects or copies, this feature will complete " + def->label = _L("Complete individual objects"); + def->tooltip = _L("When printing multiple objects or copies, this feature will complete " "each object before moving onto next one (and starting it from its bottom layer). " "This feature is useful to avoid the risk of ruined prints. " - "Slic3r should warn and prevent you from extruder collisions, but beware."; + "Slic3r should warn and prevent you from extruder collisions, but beware."); def->cli = "complete-objects!"; def->default_value = new ConfigOptionBool(false); def = this->add("cooling", coBools); - def->label = "Enable auto cooling"; - def->tooltip = "This flag enables the automatic cooling logic that adjusts print speed " - "and fan speed according to layer printing time."; + def->label = _L("Enable auto cooling"); + def->tooltip = _L("This flag enables the automatic cooling logic that adjusts print speed " + "and fan speed according to layer printing time."); def->cli = "cooling!"; def->default_value = new ConfigOptionBools { true }; def = this->add("default_acceleration", coFloat); - def->label = "Default"; - def->tooltip = "This is the acceleration your printer will be reset to after " + def->label = _L("Default"); + def->tooltip = _L("This is the acceleration your printer will be reset to after " "the role-specific acceleration values are used (perimeter/infill). " - "Set zero to prevent resetting acceleration at all."; - def->sidetext = "mm/s²"; + "Set zero to prevent resetting acceleration at all."); + def->sidetext = _L("mm/s\u00B2"); def->cli = "default-acceleration=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("disable_fan_first_layers", coInts); - def->label = "Disable fan for the first"; - def->tooltip = "You can set this to a positive value to disable fan at all " - "during the first layers, so that it does not make adhesion worse."; - def->sidetext = "layers"; + def->label = _L("Disable fan for the first"); + def->tooltip = _L("You can set this to a positive value to disable fan at all " + "during the first layers, so that it does not make adhesion worse."); + def->sidetext = _L("layers"); def->cli = "disable-fan-first-layers=i@"; def->min = 0; def->max = 1000; def->default_value = new ConfigOptionInts { 3 }; def = this->add("dont_support_bridges", coBool); - def->label = "Don't support bridges"; - def->category = "Support material"; - def->tooltip = "Experimental option for preventing support material from being generated " - "under bridged areas."; + def->label = _L("Don't support bridges"); + def->category = _L("Support material"); + def->tooltip = _L("Experimental option for preventing support material from being generated " + "under bridged areas."); def->cli = "dont-support-bridges!"; def->default_value = new ConfigOptionBool(true); def = this->add("duplicate_distance", coFloat); - def->label = "Distance between copies"; - def->tooltip = "Distance used for the auto-arrange feature of the plater."; - def->sidetext = "mm"; + def->label = _L("Distance between copies"); + def->tooltip = _L("Distance used for the auto-arrange feature of the plater."); + def->sidetext = _L("mm"); def->cli = "duplicate-distance=f"; def->aliases.push_back("multiply_distance"); def->min = 0; def->default_value = new ConfigOptionFloat(6); def = this->add("elefant_foot_compensation", coFloat); - def->label = "Elephant foot compensation"; - def->category = "Advanced"; - def->tooltip = "The first layer will be shrunk in the XY plane by the configured value " - "to compensate for the 1st layer squish aka an Elephant Foot effect."; - def->sidetext = "mm"; + def->label = _L("Elephant foot compensation"); + def->category = _L("Advanced"); + def->tooltip = _L("The first layer will be shrunk in the XY plane by the configured value " + "to compensate for the 1st layer squish aka an Elephant Foot effect."); + def->sidetext = _L("mm"); def->cli = "elefant-foot-compensation=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("end_gcode", coString); - def->label = "End G-code"; - def->tooltip = "This end procedure is inserted at the end of the output file. " - "Note that you can use placeholder variables for all Slic3r settings."; + def->label = _L("End G-code"); + def->tooltip = _L("This end procedure is inserted at the end of the output file. " + "Note that you can use placeholder variables for all Slic3r settings."); def->cli = "end-gcode=s"; def->multiline = true; def->full_width = true; @@ -220,10 +229,10 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionString("M104 S0 ; turn off temperature\nG28 X0 ; home X axis\nM84 ; disable motors\n"); def = this->add("end_filament_gcode", coStrings); - def->label = "End G-code"; - def->tooltip = "This end procedure is inserted at the end of the output file, before the printer end gcode. " + def->label = _L("End G-code"); + def->tooltip = _L("This end procedure is inserted at the end of the output file, before the printer end gcode. " "Note that you can use placeholder variables for all Slic3r settings. " - "If you have multiple extruders, the gcode is processed in extruder order."; + "If you have multiple extruders, the gcode is processed in extruder order."); def->cli = "end-filament-gcode=s@"; def->multiline = true; def->full_width = true; @@ -231,18 +240,18 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionStrings { "; Filament-specific end gcode \n;END gcode for filament\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->label = _L("Ensure vertical shell thickness"); + def->category = _L("Layers and Perimeters"); + def->tooltip = _L("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->label = "Top/bottom fill pattern"; - def->category = "Infill"; - def->tooltip = "Fill pattern for top/bottom infill. This only affects the external visible layer, " - "and not its adjacent solid shells."; + def->label = _L("Top/bottom fill pattern"); + def->category = _L("Infill"); + def->tooltip = _L("Fill pattern for top/bottom infill. This only affects the external visible layer, " + "and not its adjacent solid shells."); def->cli = "external-fill-pattern|solid-fill-pattern=s"; def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("rectilinear"); @@ -260,50 +269,50 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionEnum(ipRectilinear); def = this->add("external_perimeter_extrusion_width", coFloatOrPercent); - def->label = "External perimeters"; - def->category = "Extrusion Width"; - def->tooltip = "Set this to a non-zero value to set a manual extrusion width for external perimeters. " + def->label = _L("External perimeters"); + def->category = _L("Extrusion Width"); + def->tooltip = _L("Set this to a non-zero value to set a manual extrusion width for external perimeters. " "If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. " - "If expressed as percentage (for example 200%), it will be computed over layer height."; - def->sidetext = "mm or % (leave 0 for default)"; + "If expressed as percentage (for example 200%), it will be computed over layer height."); + def->sidetext = _L("mm or % (leave 0 for default)"); def->cli = "external-perimeter-extrusion-width=s"; def->default_value = new ConfigOptionFloatOrPercent(0, false); def = this->add("external_perimeter_speed", coFloatOrPercent); - def->label = "External perimeters"; - def->category = "Speed"; - def->tooltip = "This separate setting will affect the speed of external perimeters (the visible ones). " + def->label = _L("External perimeters"); + def->category = _L("Speed"); + def->tooltip = _L("This separate setting will affect the speed of external perimeters (the visible ones). " "If expressed as percentage (for example: 80%) it will be calculated " - "on the perimeters speed setting above. Set to zero for auto."; - def->sidetext = "mm/s or %"; + "on the perimeters speed setting above. Set to zero for auto."); + def->sidetext = _L("mm/s or %"); def->cli = "external-perimeter-speed=s"; def->ratio_over = "perimeter_speed"; def->min = 0; def->default_value = new ConfigOptionFloatOrPercent(50, true); def = this->add("external_perimeters_first", coBool); - def->label = "External perimeters first"; - def->category = "Layers and Perimeters"; - def->tooltip = "Print contour perimeters from the outermost one to the innermost one " - "instead of the default inverse order."; + def->label = _L("External perimeters first"); + def->category = _L("Layers and Perimeters"); + def->tooltip = _L("Print contour perimeters from the outermost one to the innermost one " + "instead of the default inverse order."); def->cli = "external-perimeters-first!"; def->default_value = new ConfigOptionBool(false); def = this->add("extra_perimeters", coBool); - def->label = "Extra perimeters if needed"; - def->category = "Layers and Perimeters"; - def->tooltip = "Add more perimeters when needed for avoiding gaps in sloping walls. " + def->label = _L("Extra perimeters if needed"); + def->category = _L("Layers and Perimeters"); + def->tooltip = _L("Add more perimeters when needed for avoiding gaps in sloping walls. " "Slic3r keeps adding perimeters, until more than 70% of the loop immediately above " - "is supported."; + "is supported."); def->cli = "extra-perimeters!"; def->default_value = new ConfigOptionBool(true); def = this->add("extruder", coInt); def->gui_type = "i_enum_open"; - def->label = "Extruder"; - def->category = "Extruders"; - def->tooltip = "The extruder to use (unless more specific extruder settings are specified). " - "This value overrides perimeter and infill extruders, but not the support extruders."; + def->label = _L("Extruder"); + def->category = _L("Extruders"); + def->tooltip = _L("The extruder to use (unless more specific extruder settings are specified). " + "This value overrides perimeter and infill extruders, but not the support extruders."); def->cli = "extruder=i"; def->min = 0; // 0 = inherit defaults def->enum_labels.push_back("default"); // override label for item 0 @@ -313,84 +322,84 @@ PrintConfigDef::PrintConfigDef() def->enum_labels.push_back("4"); def = this->add("extruder_clearance_height", coFloat); - def->label = "Height"; - def->tooltip = "Set this to the vertical distance between your nozzle tip and (usually) the X carriage rods. " + def->label = _L("Height"); + def->tooltip = _L("Set this to the vertical distance between your nozzle tip and (usually) the X carriage rods. " "In other words, this is the height of the clearance cylinder around your extruder, " "and it represents the maximum depth the extruder can peek before colliding with " - "other printed objects."; - def->sidetext = "mm"; + "other printed objects."); + def->sidetext = _L("mm"); def->cli = "extruder-clearance-height=f"; def->min = 0; def->default_value = new ConfigOptionFloat(20); def = this->add("extruder_clearance_radius", coFloat); - def->label = "Radius"; - def->tooltip = "Set this to the clearance radius around your extruder. " + def->label = _L("Radius"); + def->tooltip = _L("Set this to the clearance radius around your extruder. " "If the extruder is not centered, choose the largest value for safety. " "This setting is used to check for collisions and to display the graphical preview " - "in the plater."; - def->sidetext = "mm"; + "in the plater."); + def->sidetext = _L("mm"); def->cli = "extruder-clearance-radius=f"; def->min = 0; def->default_value = new ConfigOptionFloat(20); def = this->add("extruder_colour", coStrings); - def->label = "Extruder Color"; - def->tooltip = "This is only used in the Slic3r interface as a visual help."; + def->label = _L("Extruder Color"); + def->tooltip = _L("This is only used in the Slic3r interface as a visual help."); def->cli = "extruder-color=s@"; def->gui_type = "color"; // Empty string means no color assigned yet. def->default_value = new ConfigOptionStrings { "" }; def = this->add("extruder_offset", coPoints); - def->label = "Extruder offset"; - def->tooltip = "If your firmware doesn't handle the extruder displacement you need the G-code " + def->label = _L("Extruder offset"); + def->tooltip = _L("If your firmware doesn't handle the extruder displacement you need the G-code " "to take it into account. This option lets you specify the displacement of each extruder " "with respect to the first one. It expects positive coordinates (they will be subtracted " - "from the XY coordinate)."; - def->sidetext = "mm"; + "from the XY coordinate)."); + def->sidetext = _L("mm"); def->cli = "extruder-offset=s@"; def->default_value = new ConfigOptionPoints { Pointf(0,0) }; def = this->add("extrusion_axis", coString); - def->label = "Extrusion axis"; - def->tooltip = "Use this option to set the axis letter associated to your printer's extruder " - "(usually E but some printers use A)."; + def->label = _L("Extrusion axis"); + def->tooltip = _L("Use this option to set the axis letter associated to your printer's extruder " + "(usually E but some printers use A)."); def->cli = "extrusion-axis=s"; def->default_value = new ConfigOptionString("E"); def = this->add("extrusion_multiplier", coFloats); - def->label = "Extrusion multiplier"; - def->tooltip = "This factor changes the amount of flow proportionally. You may need to tweak " + def->label = _L("Extrusion multiplier"); + def->tooltip = _L("This factor changes the amount of flow proportionally. You may need to tweak " "this setting to get nice surface finish and correct single wall widths. " "Usual values are between 0.9 and 1.1. If you think you need to change this more, " - "check filament diameter and your firmware E steps."; + "check filament diameter and your firmware E steps."); def->cli = "extrusion-multiplier=f@"; def->default_value = new ConfigOptionFloats { 1. }; def = this->add("extrusion_width", coFloatOrPercent); - def->label = "Default extrusion width"; - def->category = "Extrusion Width"; - def->tooltip = "Set this to a non-zero value to allow a manual extrusion width. " + def->label = _L("Default extrusion width"); + def->category = _L("Extrusion Width"); + def->tooltip = _L("Set this to a non-zero value to allow a manual extrusion width. " "If left to zero, Slic3r derives extrusion widths from the nozzle diameter " "(see the tooltips for perimeter extrusion width, infill extrusion width etc). " - "If expressed as percentage (for example: 230%), it will be computed over layer height."; - def->sidetext = "mm or % (leave 0 for auto)"; + "If expressed as percentage (for example: 230%), it will be computed over layer height."); + def->sidetext = _L("mm or % (leave 0 for auto)"); def->cli = "extrusion-width=s"; def->default_value = new ConfigOptionFloatOrPercent(0, false); def = this->add("fan_always_on", coBools); - def->label = "Keep fan always on"; - def->tooltip = "If this is enabled, fan will never be disabled and will be kept running at least " - "at its minimum speed. Useful for PLA, harmful for ABS."; + def->label = _L("Keep fan always on"); + def->tooltip = _L("If this is enabled, fan will never be disabled and will be kept running at least " + "at its minimum speed. Useful for PLA, harmful for ABS."); def->cli = "fan-always-on!"; def->default_value = new ConfigOptionBools { false }; def = this->add("fan_below_layer_time", coInts); - def->label = "Enable fan if layer print time is below"; - def->tooltip = "If layer print time is estimated below this number of seconds, fan will be enabled " - "and its speed will be calculated by interpolating the minimum and maximum speeds."; - def->sidetext = "approximate seconds"; + def->label = _L("Enable fan if layer print time is below"); + def->tooltip = _L("If layer print time is estimated below this number of seconds, fan will be enabled " + "and its speed will be calculated by interpolating the minimum and maximum speeds."); + def->sidetext = _L("approximate seconds"); def->cli = "fan-below-layer-time=i@"; def->width = 60; def->min = 0; @@ -398,15 +407,15 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionInts { 60 }; def = this->add("filament_colour", coStrings); - def->label = "Color"; - def->tooltip = "This is only used in the Slic3r interface as a visual help."; + def->label = _L("Color"); + def->tooltip = _L("This is only used in the Slic3r interface as a visual help."); def->cli = "filament-color=s@"; def->gui_type = "color"; def->default_value = new ConfigOptionStrings { "#29b2b2" }; def = this->add("filament_notes", coStrings); - def->label = "Filament notes"; - def->tooltip = "You can put your notes regarding the filament here."; + def->label = _L("Filament notes"); + def->tooltip = _L("You can put your notes regarding the filament here."); def->cli = "filament-notes=s@"; def->multiline = true; def->full_width = true; @@ -414,40 +423,40 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionStrings { "" }; def = this->add("filament_max_volumetric_speed", coFloats); - def->label = "Max volumetric speed"; - def->tooltip = "Maximum volumetric speed allowed for this filament. Limits the maximum volumetric " + def->label = _L("Max volumetric speed"); + def->tooltip = _L("Maximum volumetric speed allowed for this filament. Limits the maximum volumetric " "speed of a print to the minimum of print and filament volumetric speed. " - "Set to zero for no limit."; - def->sidetext = "mm³/s"; + "Set to zero for no limit."); + def->sidetext = _L("mm\u00B3/s"); def->cli = "filament-max-volumetric-speed=f@"; def->min = 0; def->default_value = new ConfigOptionFloats { 0. }; def = this->add("filament_diameter", coFloats); - def->label = "Diameter"; - def->tooltip = "Enter your filament diameter here. Good precision is required, so use a caliper " - "and do multiple measurements along the filament, then compute the average."; - def->sidetext = "mm"; + def->label = _L("Diameter"); + def->tooltip = _L("Enter your filament diameter here. Good precision is required, so use a caliper " + "and do multiple measurements along the filament, then compute the average."); + def->sidetext = _L("mm"); def->cli = "filament-diameter=f@"; def->min = 0; def->default_value = new ConfigOptionFloats { 3. }; def = this->add("filament_density", coFloats); - def->label = "Density"; - def->tooltip = "Enter your filament density here. This is only for statistical information. " + def->label = _L("Density"); + def->tooltip = _L("Enter your filament density here. This is only for statistical information. " "A decent way is to weigh a known length of filament and compute the ratio " - "of the length to volume. Better is to calculate the volume directly through displacement."; - def->sidetext = "g/cm^3"; + "of the length to volume. Better is to calculate the volume directly through displacement."); + def->sidetext = _L("g/cm^3"); def->cli = "filament-density=f@"; def->min = 0; def->default_value = new ConfigOptionFloats { 0. }; def = this->add("filament_type", coStrings); - def->label = "Filament type"; - def->tooltip = "If you want to process the output G-code through custom scripts, just list their " + def->label = _L("Filament type"); + def->tooltip = _L("If you want to process the output G-code through custom scripts, just list their " "absolute paths here. Separate multiple scripts with a semicolon. Scripts will be passed " "the absolute path to the G-code file as the first argument, and they can access " - "the Slic3r config settings by reading environment variables."; + "the Slic3r config settings by reading environment variables."); def->cli = "filament_type=s@"; def->gui_type = "f_enum_open"; def->gui_flags = "show_value"; @@ -463,15 +472,15 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionStrings { "PLA" }; def = this->add("filament_soluble", coBools); - def->label = "Soluble material"; - def->tooltip = "Soluble material is most likely used for a soluble support."; + def->label = _L("Soluble material"); + def->tooltip = _L("Soluble material is most likely used for a soluble support."); def->cli = "filament-soluble!"; def->default_value = new ConfigOptionBools { false }; def = this->add("filament_cost", coFloats); - def->label = "Cost"; - def->tooltip = "Enter your filament cost per kg here. This is only for statistical information."; - def->sidetext = "money/kg"; + def->label = _L("Cost"); + def->tooltip = _L("Enter your filament cost per kg here. This is only for statistical information."); + def->sidetext = _L("money/kg"); def->cli = "filament-cost=f@"; def->min = 0; def->default_value = new ConfigOptionFloats { 0. }; @@ -480,12 +489,12 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionStrings { "" }; def = this->add("fill_angle", coFloat); - def->label = "Fill angle"; - def->category = "Infill"; - def->tooltip = "Default base angle for infill orientation. Cross-hatching will be applied to this. " + def->label = _L("Fill angle"); + def->category = _L("Infill"); + def->tooltip = _L("Default base angle for infill orientation. Cross-hatching will be applied to this. " "Bridges will be infilled using the best direction Slic3r can detect, so this setting " - "does not affect them."; - def->sidetext = "°"; + "does not affect them."); + def->sidetext = _L("\u00B0"); def->cli = "fill-angle=f"; def->min = 0; def->max = 360; @@ -494,10 +503,10 @@ PrintConfigDef::PrintConfigDef() def = this->add("fill_density", coPercent); def->gui_type = "f_enum_open"; def->gui_flags = "show_value"; - def->label = "Fill density"; - def->category = "Infill"; - def->tooltip = "Density of internal infill, expressed in the range 0% - 100%."; - def->sidetext = "%"; + def->label = _L("Fill density"); + def->category = _L("Infill"); + def->tooltip = _L("Density of internal infill, expressed in the range 0% - 100%."); + def->sidetext = _L("%"); def->cli = "fill-density=s"; def->min = 0; def->max = 100; @@ -532,9 +541,9 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionPercent(20); def = this->add("fill_pattern", coEnum); - def->label = "Fill pattern"; - def->category = "Infill"; - def->tooltip = "Fill pattern for general low-density infill."; + def->label = _L("Fill pattern"); + def->category = _L("Infill"); + def->tooltip = _L("Fill pattern for general low-density infill."); def->cli = "fill-pattern=s"; def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("rectilinear"); @@ -564,89 +573,89 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionEnum(ipStars); def = this->add("first_layer_acceleration", coFloat); - def->label = "First layer"; - def->tooltip = "This is the acceleration your printer will use for first layer. Set zero " - "to disable acceleration control for first layer."; - def->sidetext = "mm/s²"; + def->label = _L("First layer"); + def->tooltip = _L("This is the acceleration your printer will use for first layer. Set zero " + "to disable acceleration control for first layer."); + def->sidetext = _L("mm/s\u00B2"); def->cli = "first-layer-acceleration=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("first_layer_bed_temperature", coInts); - def->label = "First layer"; - def->tooltip = "Heated build plate temperature for the first layer. Set this to zero to disable " - "bed temperature control commands in the output."; + def->label = _L("First layer"); + def->tooltip = _L("Heated build plate temperature for the first layer. Set this to zero to disable " + "bed temperature control commands in the output."); def->cli = "first-layer-bed-temperature=i@"; def->max = 0; def->max = 300; def->default_value = new ConfigOptionInts { 0 }; def = this->add("first_layer_extrusion_width", coFloatOrPercent); - def->label = "First layer"; - def->category = "Extrusion Width"; - def->tooltip = "Set this to a non-zero value to set a manual extrusion width for first layer. " + def->label = _L("First layer"); + def->category = _L("Extrusion Width"); + def->tooltip = _L("Set this to a non-zero value to set a manual extrusion width for first layer. " "You can use this to force fatter extrudates for better adhesion. If expressed " "as percentage (for example 120%) it will be computed over first layer height. " - "If set to zero, it will use the default extrusion width."; - def->sidetext = "mm or % (leave 0 for default)"; + "If set to zero, it will use the default extrusion width."); + def->sidetext = _L("mm or % (leave 0 for default)"); def->cli = "first-layer-extrusion-width=s"; def->ratio_over = "first_layer_height"; def->default_value = new ConfigOptionFloatOrPercent(200, true); def = this->add("first_layer_height", coFloatOrPercent); - def->label = "First layer height"; - def->category = "Layers and Perimeters"; - def->tooltip = "When printing with very low layer heights, you might still want to print a thicker " + def->label = _L("First layer height"); + def->category = _L("Layers and Perimeters"); + def->tooltip = _L("When printing with very low layer heights, you might still want to print a thicker " "bottom layer to improve adhesion and tolerance for non perfect build plates. " "This can be expressed as an absolute value or as a percentage (for example: 150%) " - "over the default layer height."; - def->sidetext = "mm or %"; + "over the default layer height."); + def->sidetext = _L("mm or %"); def->cli = "first-layer-height=s"; def->ratio_over = "layer_height"; def->default_value = new ConfigOptionFloatOrPercent(0.35, false); def = this->add("first_layer_speed", coFloatOrPercent); - def->label = "First layer speed"; - def->tooltip = "If expressed as absolute value in mm/s, this speed will be applied to all the print moves " + def->label = _L("First layer speed"); + def->tooltip = _L("If expressed as absolute value in mm/s, this speed will be applied to all the print moves " "of the first layer, regardless of their type. If expressed as a percentage " - "(for example: 40%) it will scale the default speeds."; - def->sidetext = "mm/s or %"; + "(for example: 40%) it will scale the default speeds."); + def->sidetext = _L("mm/s or %"); def->cli = "first-layer-speed=s"; def->min = 0; def->default_value = new ConfigOptionFloatOrPercent(30, false); def = this->add("first_layer_temperature", coInts); - def->label = "First layer"; - def->tooltip = "Extruder temperature for first layer. If you want to control temperature manually " - "during print, set this to zero to disable temperature control commands in the output file."; + def->label = _L("First layer"); + def->tooltip = _L("Extruder temperature for first layer. If you want to control temperature manually " + "during print, set this to zero to disable temperature control commands in the output file."); def->cli = "first-layer-temperature=i@"; def->min = 0; def->max = max_temp; def->default_value = new ConfigOptionInts { 200 }; def = this->add("gap_fill_speed", coFloat); - def->label = "Gap fill"; - def->category = "Speed"; - def->tooltip = "Speed for filling small gaps using short zigzag moves. Keep this reasonably low " - "to avoid too much shaking and resonance issues. Set zero to disable gaps filling."; - def->sidetext = "mm/s"; + def->label = _L("Gap fill"); + def->category = _L("Speed"); + def->tooltip = _L("Speed for filling small gaps using short zigzag moves. Keep this reasonably low " + "to avoid too much shaking and resonance issues. Set zero to disable gaps filling."); + def->sidetext = _L("mm/s"); def->cli = "gap-fill-speed=f"; def->min = 0; def->default_value = new ConfigOptionFloat(20); def = this->add("gcode_comments", coBool); - def->label = "Verbose G-code"; - def->tooltip = "Enable this to get a commented G-code file, with each line explained by a descriptive text. " + def->label = _L("Verbose G-code"); + def->tooltip = _L("Enable this to get a commented G-code file, with each line explained by a descriptive text. " "If you print from SD card, the additional weight of the file could make your firmware " - "slow down."; + "slow down."); def->cli = "gcode-comments!"; def->default_value = new ConfigOptionBool(0); def = this->add("gcode_flavor", coEnum); - def->label = "G-code flavor"; - def->tooltip = "Some G/M-code commands, including temperature control and others, are not universal. " + def->label = _L("G-code flavor"); + def->tooltip = _L("Some G/M-code commands, including temperature control and others, are not universal. " "Set this option to your printer's firmware to get a compatible output. " - "The \"No extrusion\" flavor prevents Slic3r from exporting any extrusion value at all."; + "The \"No extrusion\" flavor prevents Slic3r from exporting any extrusion value at all."); def->cli = "gcode-flavor=s"; def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("reprap"); @@ -672,75 +681,75 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionEnum(gcfMarlin); def = this->add("infill_acceleration", coFloat); - def->label = "Infill"; - def->tooltip = "This is the acceleration your printer will use for infill. Set zero to disable " - "acceleration control for infill."; - def->sidetext = "mm/s²"; + def->label = _L("Infill"); + def->tooltip = _L("This is the acceleration your printer will use for infill. Set zero to disable " + "acceleration control for infill."); + def->sidetext = _L("mm/s\u00B2"); def->cli = "infill-acceleration=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("infill_every_layers", coInt); - def->label = "Combine infill every"; - def->category = "Infill"; - def->tooltip = "This feature allows to combine infill and speed up your print by extruding thicker " - "infill layers while preserving thin perimeters, thus accuracy."; - def->sidetext = "layers"; + def->label = _L("Combine infill every"); + def->category = _L("Infill"); + def->tooltip = _L("This feature allows to combine infill and speed up your print by extruding thicker " + "infill layers while preserving thin perimeters, thus accuracy."); + def->sidetext = _L("layers"); def->cli = "infill-every-layers=i"; - def->full_label = "Combine infill every n layers"; + def->full_label = _L("Combine infill every n layers"); def->min = 1; def->default_value = new ConfigOptionInt(1); def = this->add("infill_extruder", coInt); - def->label = "Infill extruder"; - def->category = "Extruders"; - def->tooltip = "The extruder to use when printing infill."; + def->label = _L("Infill extruder"); + def->category = _L("Extruders"); + def->tooltip = _L("The extruder to use when printing infill."); def->cli = "infill-extruder=i"; def->min = 1; def->default_value = new ConfigOptionInt(1); def = this->add("infill_extrusion_width", coFloatOrPercent); - def->label = "Infill"; - def->category = "Extrusion Width"; - def->tooltip = "Set this to a non-zero value to set a manual extrusion width for infill. " + def->label = _L("Infill"); + def->category = _L("Extrusion Width"); + def->tooltip = _L("Set this to a non-zero value to set a manual extrusion width for infill. " "If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. " "You may want to use fatter extrudates to speed up the infill and make your parts stronger. " - "If expressed as percentage (for example 90%) it will be computed over layer height."; - def->sidetext = "mm or % (leave 0 for default)"; + "If expressed as percentage (for example 90%) it will be computed over layer height."); + def->sidetext = _L("mm or % (leave 0 for default)"); def->cli = "infill-extrusion-width=s"; def->default_value = new ConfigOptionFloatOrPercent(0, false); def = this->add("infill_first", coBool); - def->label = "Infill before perimeters"; - def->tooltip = "This option will switch the print order of perimeters and infill, making the latter first."; + def->label = _L("Infill before perimeters"); + def->tooltip = _L("This option will switch the print order of perimeters and infill, making the latter first."); def->cli = "infill-first!"; def->default_value = new ConfigOptionBool(false); def = this->add("infill_only_where_needed", coBool); - def->label = "Only infill where needed"; - def->category = "Infill"; - def->tooltip = "This option will limit infill to the areas actually needed for supporting ceilings " + def->label = _L("Only infill where needed"); + def->category = _L("Infill"); + def->tooltip = _L("This option will limit infill to the areas actually needed for supporting ceilings " "(it will act as internal support material). If enabled, slows down the G-code generation " - "due to the multiple checks involved."; + "due to the multiple checks involved."); def->cli = "infill-only-where-needed!"; def->default_value = new ConfigOptionBool(false); def = this->add("infill_overlap", coFloatOrPercent); - def->label = "Infill/perimeters overlap"; - def->category = "Advanced"; - def->tooltip = "This setting applies an additional overlap between infill and perimeters for better bonding. " + def->label = _L("Infill/perimeters overlap"); + def->category = _L("Advanced"); + def->tooltip = _L("This setting applies an additional overlap between infill and perimeters for better bonding. " "Theoretically this shouldn't be needed, but backlash might cause gaps. If expressed " - "as percentage (example: 15%) it is calculated over perimeter extrusion width."; - def->sidetext = "mm or %"; + "as percentage (example: 15%) it is calculated over perimeter extrusion width."); + def->sidetext = _L("mm or %"); def->cli = "infill-overlap=s"; def->ratio_over = "perimeter_extrusion_width"; def->default_value = new ConfigOptionFloatOrPercent(25, true); def = this->add("infill_speed", coFloat); - def->label = "Infill"; - def->category = "Speed"; - def->tooltip = "Speed for printing the internal fill. Set to zero for auto."; - def->sidetext = "mm/s"; + def->label = _L("Infill"); + def->category = _L("Speed"); + def->tooltip = _L("Speed for printing the internal fill. Set to zero for auto."); + def->sidetext = _L("mm/s"); def->cli = "infill-speed=f"; def->aliases.push_back("print_feed_rate"); def->aliases.push_back("infill_feed_rate"); @@ -748,19 +757,19 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloat(80); def = this->add("interface_shells", coBool); - def->label = "Interface shells"; - def->tooltip = "Force the generation of solid shells between adjacent materials/volumes. " + def->label = _L("Interface shells"); + def->tooltip = _L("Force the generation of solid shells between adjacent materials/volumes. " "Useful for multi-extruder prints with translucent materials or manual soluble " - "support material."; + "support material."); def->cli = "interface-shells!"; - def->category = "Layers and Perimeters"; + def->category = _L("Layers and Perimeters"); def->default_value = new ConfigOptionBool(false); def = this->add("layer_gcode", coString); - def->label = "After layer change G-code"; - def->tooltip = "This custom code is inserted at every layer change, right after the Z move " + def->label = _L("After layer change G-code"); + def->tooltip = _L("This custom code is inserted at every layer change, right after the Z move " "and before the extruder moves to the first layer point. Note that you can use " - "placeholder variables for all Slic3r settings as well as [layer_num] and [layer_z]."; + "placeholder variables for all Slic3r settings as well as [layer_num] and [layer_z]."); def->cli = "after-layer-gcode|layer-gcode=s"; def->multiline = true; def->full_width = true; @@ -768,116 +777,116 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionString(""); def = this->add("layer_height", coFloat); - def->label = "Layer height"; - def->category = "Layers and Perimeters"; - def->tooltip = "This setting controls the height (and thus the total number) of the slices/layers. " - "Thinner layers give better accuracy but take more time to print."; - def->sidetext = "mm"; + def->label = _L("Layer height"); + def->category = _L("Layers and Perimeters"); + def->tooltip = _L("This setting controls the height (and thus the total number) of the slices/layers. " + "Thinner layers give better accuracy but take more time to print."); + def->sidetext = _L("mm"); def->cli = "layer-height=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0.3); def = this->add("max_fan_speed", coInts); - def->label = "Max"; - def->tooltip = "This setting represents the maximum speed of your fan."; - def->sidetext = "%"; + def->label = _L("Max"); + def->tooltip = _L("This setting represents the maximum speed of your fan."); + def->sidetext = _L("%"); def->cli = "max-fan-speed=i@"; def->min = 0; def->max = 100; def->default_value = new ConfigOptionInts { 100 }; def = this->add("max_layer_height", coFloats); - def->label = "Max"; - def->tooltip = "This is the highest printable layer height for this extruder, used to cap " + def->label = _L("Max"); + def->tooltip = _L("This is the highest printable layer height for this extruder, used to cap " "the variable layer height and support layer height. Maximum recommended layer height " "is 75% of the extrusion width to achieve reasonable inter-layer adhesion. " - "If set to 0, layer height is limited to 75% of the nozzle diameter."; - def->sidetext = "mm"; + "If set to 0, layer height is limited to 75% of the nozzle diameter."); + def->sidetext = _L("mm"); def->cli = "max-layer-height=f@"; def->min = 0; def->default_value = new ConfigOptionFloats { 0. }; def = this->add("max_print_speed", coFloat); - def->label = "Max print speed"; - def->tooltip = "When setting other speed settings to 0 Slic3r will autocalculate the optimal speed " + def->label = _L("Max print speed"); + def->tooltip = _L("When setting other speed settings to 0 Slic3r will autocalculate the optimal speed " "in order to keep constant extruder pressure. This experimental setting is used " - "to set the highest print speed you want to allow."; - def->sidetext = "mm/s"; + "to set the highest print speed you want to allow."); + def->sidetext = _L("mm/s"); def->cli = "max-print-speed=f"; def->min = 1; def->default_value = new ConfigOptionFloat(80); def = this->add("max_volumetric_speed", coFloat); - def->label = "Max volumetric speed"; - def->tooltip = "This experimental setting is used to set the maximum volumetric speed your " - "extruder supports."; - def->sidetext = "mm³/s"; + def->label = _L("Max volumetric speed"); + def->tooltip = _L("This experimental setting is used to set the maximum volumetric speed your " + "extruder supports."); + def->sidetext = _L("mm\u00B3/s"); def->cli = "max-volumetric-speed=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("max_volumetric_extrusion_rate_slope_positive", coFloat); - def->label = "Max volumetric slope positive"; - def->tooltip = "This experimental setting is used to limit the speed of change in extrusion rate. " - "A value of 1.8 mm³/s² ensures, that a change from the extrusion rate " - "of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) " - "to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds."; - def->sidetext = "mm³/s²"; + def->label = _L("Max volumetric slope positive"); + def->tooltip = _L("This experimental setting is used to limit the speed of change in extrusion rate. " + "A value of 1.8 mm\u00B3/s\u00B2 ensures, that a change from the extrusion rate " + "of 1.8 mm\u00B3/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) " + "to 5.4 mm\u00B3/s (feedrate 60 mm/s) will take at least 2 seconds."); + def->sidetext = _L("mm\u00B3/s\u00B2"); def->cli = "max-volumetric-extrusion-rate-slope-positive=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("max_volumetric_extrusion_rate_slope_negative", coFloat); - def->label = "Max volumetric slope negative"; - def->tooltip = "This experimental setting is used to limit the speed of change in extrusion rate. " - "A value of 1.8 mm³/s² ensures, that a change from the extrusion rate " - "of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) " - "to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds."; - def->sidetext = "mm³/s²"; + def->label = _L("Max volumetric slope negative"); + def->tooltip = _L("This experimental setting is used to limit the speed of change in extrusion rate. " + "A value of 1.8 mm\u00B3/s\u00B2 ensures, that a change from the extrusion rate " + "of 1.8 mm\u00B3/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) " + "to 5.4 mm\u00B3/s (feedrate 60 mm/s) will take at least 2 seconds."); + def->sidetext = _L("mm\u00B3/s\u00B2"); def->cli = "max-volumetric-extrusion-rate-slope-negative=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("min_fan_speed", coInts); - def->label = "Min"; - def->tooltip = "This setting represents the minimum PWM your fan needs to work."; - def->sidetext = "%"; + def->label = _L("Min"); + def->tooltip = _L("This setting represents the minimum PWM your fan needs to work."); + def->sidetext = _L("%"); def->cli = "min-fan-speed=i@"; def->min = 0; def->max = 100; def->default_value = new ConfigOptionInts { 35 }; def = this->add("min_layer_height", coFloats); - def->label = "Min"; - def->tooltip = "This is the lowest printable layer height for this extruder and limits " - "the resolution for variable layer height. Typical values are between 0.05 mm and 0.1 mm."; - def->sidetext = "mm"; + def->label = _L("Min"); + def->tooltip = _L("This is the lowest printable layer height for this extruder and limits " + "the resolution for variable layer height. Typical values are between 0.05 mm and 0.1 mm."); + def->sidetext = _L("mm"); def->cli = "min-layer-height=f@"; def->min = 0; def->default_value = new ConfigOptionFloats { 0.07 }; def = this->add("min_print_speed", coFloats); - def->label = "Min print speed"; - def->tooltip = "Slic3r will not scale speed down below this speed."; - def->sidetext = "mm/s"; + def->label = _L("Min print speed"); + def->tooltip = _L("Slic3r will not scale speed down below this speed."); + def->sidetext = _L("mm/s"); def->cli = "min-print-speed=f@"; def->min = 0; def->default_value = new ConfigOptionFloats { 10. }; def = this->add("min_skirt_length", coFloat); - def->label = "Minimum extrusion length"; - def->tooltip = "Generate no less than the number of skirt loops required to consume " + def->label = _L("Minimum extrusion length"); + def->tooltip = _L("Generate no less than the number of skirt loops required to consume " "the specified amount of filament on the bottom layer. For multi-extruder machines, " - "this minimum applies to each extruder."; - def->sidetext = "mm"; + "this minimum applies to each extruder."); + def->sidetext = _L("mm"); def->cli = "min-skirt-length=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("notes", coString); - def->label = "Configuration notes"; - def->tooltip = "You can put here your personal notes. This text will be added to the G-code " - "header comments."; + def->label = _L("Configuration notes"); + def->tooltip = _L("You can put here your personal notes. This text will be added to the G-code " + "header comments."); def->cli = "notes=s"; def->multiline = true; def->full_width = true; @@ -885,127 +894,128 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionString(""); def = this->add("nozzle_diameter", coFloats); - def->label = "Nozzle diameter"; - def->tooltip = "This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)"; - def->sidetext = "mm"; + def->label = _L("Nozzle diameter"); + def->tooltip = _L("This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)"); + def->sidetext = _L("mm"); def->cli = "nozzle-diameter=f@"; def->default_value = new ConfigOptionFloats { 0.5 }; def = this->add("octoprint_apikey", coString); - def->label = "API Key"; - def->tooltip = "Slic3r can upload G-code files to OctoPrint. This field should contain " - "the API Key required for authentication."; + def->label = _L("API Key"); + def->tooltip = _L("Slic3r can upload G-code files to OctoPrint. This field should contain " + "the API Key required for authentication."); def->cli = "octoprint-apikey=s"; def->default_value = new ConfigOptionString(""); def = this->add("octoprint_host", coString); - def->label = "Host or IP"; - def->tooltip = "Slic3r can upload G-code files to OctoPrint. This field should contain " - "the hostname or IP address of the OctoPrint instance."; + def->label = _L("Host or IP"); + def->tooltip = _L("Slic3r can upload G-code files to OctoPrint. This field should contain " + "the hostname or IP address of the OctoPrint instance."); def->cli = "octoprint-host=s"; def->default_value = new ConfigOptionString(""); def = this->add("only_retract_when_crossing_perimeters", coBool); - def->label = "Only retract when crossing perimeters"; - def->tooltip = "Disables retraction when the travel path does not exceed the upper layer's perimeters " - "(and thus any ooze will be probably invisible)."; + def->label = _L("Only retract when crossing perimeters"); + def->tooltip = _L("Disables retraction when the travel path does not exceed the upper layer's perimeters " + "(and thus any ooze will be probably invisible)."); def->cli = "only-retract-when-crossing-perimeters!"; def->default_value = new ConfigOptionBool(true); def = this->add("ooze_prevention", coBool); - def->label = "Enable"; - def->tooltip = "This option will drop the temperature of the inactive extruders to prevent oozing. " + def->label = _L("Enable"); + def->tooltip = _L("This option will drop the temperature of the inactive extruders to prevent oozing. " "It will enable a tall skirt automatically and move extruders outside such " - "skirt when changing temperatures."; + "skirt when changing temperatures."); def->cli = "ooze-prevention!"; def->default_value = new ConfigOptionBool(false); def = this->add("output_filename_format", coString); - def->label = "Output filename format"; - def->tooltip = "You can use all configuration options as variables inside this template. " + def->label = _L("Output filename format"); + def->tooltip = _L("You can use all configuration options as variables inside this template. " "For example: [layer_height], [fill_density] etc. You can also use [timestamp], " "[year], [month], [day], [hour], [minute], [second], [version], [input_filename], " - "[input_filename_base]."; + "[input_filename_base]."); def->cli = "output-filename-format=s"; def->full_width = true; def->default_value = new ConfigOptionString("[input_filename_base].gcode"); def = this->add("overhangs", coBool); - def->label = "Detect bridging perimeters"; - def->category = "Layers and Perimeters"; - def->tooltip = "Experimental option to adjust flow for overhangs (bridge flow will be used), " - "to apply bridge speed to them and enable fan."; + def->label = _L("Detect bridging perimeters"); + def->category = _L("Layers and Perimeters"); + def->tooltip = _L("Experimental option to adjust flow for overhangs (bridge flow will be used), " + "to apply bridge speed to them and enable fan."); def->cli = "overhangs!"; def->default_value = new ConfigOptionBool(true); def = this->add("perimeter_acceleration", coFloat); - def->label = "Perimeters"; - def->tooltip = "This is the acceleration your printer will use for perimeters. " + def->label = _L("Perimeters"); + def->tooltip = _L("This is the acceleration your printer will use for perimeters. " "A high value like 9000 usually gives good results if your hardware is up to the job. " - "Set zero to disable acceleration control for perimeters."; - def->sidetext = "mm/s²"; + "Set zero to disable acceleration control for perimeters."); + def->sidetext = _L("mm/s\u00B2"); def->cli = "perimeter-acceleration=f"; def->default_value = new ConfigOptionFloat(0); def = this->add("perimeter_extruder", coInt); - def->label = "Perimeter extruder"; - def->category = "Extruders"; - def->tooltip = "The extruder to use when printing perimeters and brim. First extruder is 1."; + def->label = _L("Perimeter extruder"); + def->category = _L("Extruders"); + def->tooltip = _L("The extruder to use when printing perimeters and brim. First extruder is 1."); def->cli = "perimeter-extruder=i"; def->aliases.push_back("perimeters_extruder"); def->min = 1; def->default_value = new ConfigOptionInt(1); def = this->add("perimeter_extrusion_width", coFloatOrPercent); - def->label = "Perimeters"; - def->category = "Extrusion Width"; - def->tooltip = "Set this to a non-zero value to set a manual extrusion width for perimeters. " + def->label = _L("Perimeters"); + def->category = _L("Extrusion Width"); + def->tooltip = _L("Set this to a non-zero value to set a manual extrusion width for perimeters. " "You may want to use thinner extrudates to get more accurate surfaces. " "If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. " - "If expressed as percentage (for example 200%) it will be computed over layer height."; - def->sidetext = "mm or % (leave 0 for default)"; + "If expressed as percentage (for example 200%) it will be computed over layer height."); + def->sidetext = _L("mm or % (leave 0 for default)"); def->cli = "perimeter-extrusion-width=s"; def->aliases.push_back("perimeters_extrusion_width"); def->default_value = new ConfigOptionFloatOrPercent(0, false); def = this->add("perimeter_speed", coFloat); - def->label = "Perimeters"; - def->category = "Speed"; - def->tooltip = "Speed for perimeters (contours, aka vertical shells). Set to zero for auto."; - def->sidetext = "mm/s"; + def->label = _L("Perimeters"); + def->category = _L("Speed"); + def->tooltip = _L("Speed for perimeters (contours, aka vertical shells). Set to zero for auto."); + def->sidetext = _L("mm/s"); def->cli = "perimeter-speed=f"; def->aliases.push_back("perimeter_feed_rate"); def->min = 0; def->default_value = new ConfigOptionFloat(60); def = this->add("perimeters", coInt); - def->label = "Perimeters"; - def->category = "Layers and Perimeters"; - def->tooltip = "This option sets the number of perimeters to generate for each layer. " + def->label = _L("Perimeters"); + def->category = _L("Layers and Perimeters"); + def->tooltip = _L("This option sets the number of perimeters to generate for each layer. " "Note that Slic3r may increase this number automatically when it detects " "sloping surfaces which benefit from a higher number of perimeters " - "if the Extra Perimeters option is enabled."; - def->sidetext = "(minimum)"; + "if the Extra Perimeters option is enabled."); + def->sidetext = _L("(minimum)"); def->cli = "perimeters=i"; def->aliases.push_back("perimeter_offsets"); def->min = 0; def->default_value = new ConfigOptionInt(3); def = this->add("post_process", coStrings); - def->label = "Post-processing scripts"; - def->tooltip = "If you want to process the output G-code through custom scripts, " + def->label = _L("Post-processing scripts"); + def->tooltip = _L("If you want to process the output G-code through custom scripts, " "just list their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first argument, " - "and they can access the Slic3r config settings by reading environment variables."; + "and they can access the Slic3r config settings by reading environment variables."); def->cli = "post-process=s@"; def->gui_flags = "serialized"; def->multiline = true; def->full_width = true; - def->height = 60; + def->height = 60; + def->default_value = new ConfigOptionStrings{ "" }; def = this->add("printer_notes", coString); - def->label = "Printer notes"; - def->tooltip = "You can put your notes regarding the printer here."; + def->label = _L("Printer notes"); + def->tooltip = _L("You can put your notes regarding the printer here."); def->cli = "printer-notes=s"; def->multiline = true; def->full_width = true; @@ -1019,131 +1029,131 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionString(""); def = this->add("raft_layers", coInt); - def->label = "Raft layers"; - def->category = "Support material"; - def->tooltip = "The object will be raised by this number of layers, and support material " - "will be generated under it."; - def->sidetext = "layers"; + def->label = _L("Raft layers"); + def->category = _L("Support material"); + def->tooltip = _L("The object will be raised by this number of layers, and support material " + "will be generated under it."); + def->sidetext = _L("layers"); def->cli = "raft-layers=i"; def->min = 0; def->default_value = new ConfigOptionInt(0); def = this->add("resolution", coFloat); - def->label = "Resolution"; - def->tooltip = "Minimum detail resolution, used to simplify the input file for speeding up " + def->label = _L("Resolution"); + def->tooltip = _L("Minimum detail resolution, used to simplify the input file for speeding up " "the slicing job and reducing memory usage. High-resolution models often carry " "more detail than printers can render. Set to zero to disable any simplification " - "and use full resolution from input."; - def->sidetext = "mm"; + "and use full resolution from input."); + def->sidetext = _L("mm"); def->cli = "resolution=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("retract_before_travel", coFloats); - def->label = "Minimum travel after retraction"; - def->tooltip = "Retraction is not triggered when travel moves are shorter than this length."; - def->sidetext = "mm"; + def->label = _L("Minimum travel after retraction"); + def->tooltip = _L("Retraction is not triggered when travel moves are shorter than this length."); + def->sidetext = _L("mm"); def->cli = "retract-before-travel=f@"; def->default_value = new ConfigOptionFloats { 2. }; def = this->add("retract_before_wipe", coPercents); - def->label = "Retract amount before wipe"; - def->tooltip = "With bowden extruders, it may be wise to do some amount of quick retract " - "before doing the wipe movement."; - def->sidetext = "%"; + def->label = _L("Retract amount before wipe"); + def->tooltip = _L("With bowden extruders, it may be wise to do some amount of quick retract " + "before doing the wipe movement."); + def->sidetext = _L("%"); def->cli = "retract-before-wipe=s@"; def->default_value = new ConfigOptionPercents { 0. }; def = this->add("retract_layer_change", coBools); - def->label = "Retract on layer change"; - def->tooltip = "This flag enforces a retraction whenever a Z move is done."; + def->label = _L("Retract on layer change"); + def->tooltip = _L("This flag enforces a retraction whenever a Z move is done."); def->cli = "retract-layer-change!"; def->default_value = new ConfigOptionBools { false }; def = this->add("retract_length", coFloats); - def->label = "Length"; - def->full_label = "Retraction Length"; - def->tooltip = "When retraction is triggered, filament is pulled back by the specified amount " - "(the length is measured on raw filament, before it enters the extruder)."; - def->sidetext = "mm (zero to disable)"; + def->label = _L("Length"); + def->full_label = _L("Retraction Length"); + def->tooltip = _L("When retraction is triggered, filament is pulled back by the specified amount " + "(the length is measured on raw filament, before it enters the extruder)."); + def->sidetext = _L("mm (zero to disable)"); def->cli = "retract-length=f@"; def->default_value = new ConfigOptionFloats { 2. }; def = this->add("retract_length_toolchange", coFloats); - def->label = "Length"; - def->full_label = "Retraction Length (Toolchange)"; - def->tooltip = "When retraction is triggered before changing tool, filament is pulled back " + def->label = _L("Length"); + def->full_label = _L("Retraction Length (Toolchange)"); + def->tooltip = _L("When retraction is triggered before changing tool, filament is pulled back " "by the specified amount (the length is measured on raw filament, before it enters " - "the extruder)."; - def->sidetext = "mm (zero to disable)"; + "the extruder)."); + def->sidetext = _L("mm (zero to disable)"); def->cli = "retract-length-toolchange=f@"; def->default_value = new ConfigOptionFloats { 10. }; def = this->add("retract_lift", coFloats); - def->label = "Lift Z"; - def->tooltip = "If you set this to a positive value, Z is quickly raised every time a retraction " + def->label = _L("Lift Z"); + def->tooltip = _L("If you set this to a positive value, Z is quickly raised every time a retraction " "is triggered. When using multiple extruders, only the setting for the first extruder " - "will be considered."; - def->sidetext = "mm"; + "will be considered."); + def->sidetext = _L("mm"); def->cli = "retract-lift=f@"; def->default_value = new ConfigOptionFloats { 0. }; def = this->add("retract_lift_above", coFloats); - def->label = "Above Z"; - def->full_label = "Only lift Z above"; - def->tooltip = "If you set this to a positive value, Z lift will only take place above the specified " - "absolute Z. You can tune this setting for skipping lift on the first layers."; - def->sidetext = "mm"; + def->label = _L("Above Z"); + def->full_label = _L("Only lift Z above"); + def->tooltip = _L("If you set this to a positive value, Z lift will only take place above the specified " + "absolute Z. You can tune this setting for skipping lift on the first layers."); + def->sidetext = _L("mm"); def->cli = "retract-lift-above=f@"; def->default_value = new ConfigOptionFloats { 0. }; def = this->add("retract_lift_below", coFloats); - def->label = "Below Z"; - def->full_label = "Only lift Z below"; - def->tooltip = "If you set this to a positive value, Z lift will only take place below " + def->label = _L("Below Z"); + def->full_label = _L("Only lift Z below"); + def->tooltip = _L("If you set this to a positive value, Z lift will only take place below " "the specified absolute Z. You can tune this setting for limiting lift " - "to the first layers."; - def->sidetext = "mm"; + "to the first layers."); + def->sidetext = _L("mm"); def->cli = "retract-lift-below=f@"; def->default_value = new ConfigOptionFloats { 0. }; def = this->add("retract_restart_extra", coFloats); - def->label = "Extra length on restart"; - def->tooltip = "When the retraction is compensated after the travel move, the extruder will push " - "this additional amount of filament. This setting is rarely needed."; - def->sidetext = "mm"; + def->label = _L("Extra length on restart"); + def->tooltip = _L("When the retraction is compensated after the travel move, the extruder will push " + "this additional amount of filament. This setting is rarely needed."); + def->sidetext = _L("mm"); def->cli = "retract-restart-extra=f@"; def->default_value = new ConfigOptionFloats { 0. }; def = this->add("retract_restart_extra_toolchange", coFloats); - def->label = "Extra length on restart"; - def->tooltip = "When the retraction is compensated after changing tool, the extruder will push " - "this additional amount of filament."; - def->sidetext = "mm"; + def->label = _L("Extra length on restart"); + def->tooltip = _L("When the retraction is compensated after changing tool, the extruder will push " + "this additional amount of filament."); + def->sidetext = _L("mm"); def->cli = "retract-restart-extra-toolchange=f@"; def->default_value = new ConfigOptionFloats { 0. }; def = this->add("retract_speed", coFloats); - def->label = "Retraction Speed"; - def->full_label = "Retraction Speed"; - def->tooltip = "The speed for retractions (it only applies to the extruder motor)."; - def->sidetext = "mm/s"; + def->label = _L("Retraction Speed"); + def->full_label = _L("Retraction Speed"); + def->tooltip = _L("The speed for retractions (it only applies to the extruder motor)."); + def->sidetext = _L("mm/s"); def->cli = "retract-speed=f@"; def->default_value = new ConfigOptionFloats { 40. }; def = this->add("deretract_speed", coFloats); - def->label = "Deretraction Speed"; - def->full_label = "Deretraction Speed"; - def->tooltip = "The speed for loading of a filament into extruder after retraction " - "(it only applies to the extruder motor). If left to zero, the retraction speed is used."; - def->sidetext = "mm/s"; + def->label = _L("Deretraction Speed"); + def->full_label = _L("Deretraction Speed"); + def->tooltip = _L("The speed for loading of a filament into extruder after retraction " + "(it only applies to the extruder motor). If left to zero, the retraction speed is used."); + def->sidetext = _L("mm/s"); def->cli = "retract-speed=f@"; def->default_value = new ConfigOptionFloats { 0. }; def = this->add("seam_position", coEnum); - def->label = "Seam position"; - def->category = "Layers and Perimeters"; - def->tooltip = "Position of perimeters starting points."; + def->label = _L("Seam position"); + def->category = _L("Layers and Perimeters"); + def->tooltip = _L("Position of perimeters starting points."); def->cli = "seam-position=s"; def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("random"); @@ -1159,10 +1169,10 @@ PrintConfigDef::PrintConfigDef() #if 0 def = this->add("seam_preferred_direction", coFloat); // def->gui_type = "slider"; - def->label = "Direction"; - def->sidetext = "°"; - def->full_label = "Preferred direction of the seam"; - def->tooltip = "Seam preferred direction"; + def->label = _L("Direction"); + def->sidetext = _L("\u00B0"); + def->full_label = _L("Preferred direction of the seam"); + def->tooltip = _L("Seam preferred direction"); def->cli = "seam-preferred-direction=f"; def->min = 0; def->max = 360; @@ -1170,10 +1180,10 @@ PrintConfigDef::PrintConfigDef() def = this->add("seam_preferred_direction_jitter", coFloat); // def->gui_type = "slider"; - def->label = "Jitter"; - def->sidetext = "°"; - def->full_label = "Seam preferred direction jitter"; - def->tooltip = "Preferred direction of the seam - jitter"; + def->label = _L("Jitter"); + def->sidetext = _L("\u00B0"); + def->full_label = _L("Seam preferred direction jitter"); + def->tooltip = _L("Preferred direction of the seam - jitter"); def->cli = "seam-preferred-direction-jitter=f"; def->min = 0; def->max = 360; @@ -1183,17 +1193,17 @@ PrintConfigDef::PrintConfigDef() def = this->add("serial_port", coString); def->gui_type = "select_open"; def->label = ""; - def->full_label = "Serial port"; - def->tooltip = "USB/serial port for printer connection."; + def->full_label = _L("Serial port"); + def->tooltip = _L("USB/serial port for printer connection."); def->cli = "serial-port=s"; def->width = 200; def->default_value = new ConfigOptionString(""); def = this->add("serial_speed", coInt); def->gui_type = "i_enum_open"; - def->label = "Speed"; - def->full_label = "Serial port speed"; - def->tooltip = "Speed (baud) of USB/serial port for printer connection."; + def->label = _L("Speed"); + def->full_label = _L("Serial port speed"); + def->tooltip = _L("Speed (baud) of USB/serial port for printer connection."); def->cli = "serial-speed=i"; def->min = 1; def->max = 300000; @@ -1202,37 +1212,37 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionInt(250000); def = this->add("skirt_distance", coFloat); - def->label = "Distance from object"; - def->tooltip = "Distance between skirt and object(s). Set this to zero to attach the skirt " - "to the object(s) and get a brim for better adhesion."; - def->sidetext = "mm"; + def->label = _L("Distance from object"); + def->tooltip = _L("Distance between skirt and object(s). Set this to zero to attach the skirt " + "to the object(s) and get a brim for better adhesion."); + def->sidetext = _L("mm"); def->cli = "skirt-distance=f"; def->min = 0; def->default_value = new ConfigOptionFloat(6); def = this->add("skirt_height", coInt); - def->label = "Skirt height"; - def->tooltip = "Height of skirt expressed in layers. Set this to a tall value to use skirt " - "as a shield against drafts."; - def->sidetext = "layers"; + def->label = _L("Skirt height"); + def->tooltip = _L("Height of skirt expressed in layers. Set this to a tall value to use skirt " + "as a shield against drafts."); + def->sidetext = _L("layers"); def->cli = "skirt-height=i"; def->default_value = new ConfigOptionInt(1); def = this->add("skirts", coInt); - def->label = "Loops (minimum)"; - def->full_label = "Skirt Loops"; - def->tooltip = "Number of loops for the skirt. If the Minimum Extrusion Length option is set, " + def->label = _L("Loops (minimum)"); + def->full_label = _L("Skirt Loops"); + def->tooltip = _L("Number of loops for the skirt. If the Minimum Extrusion Length option is set, " "the number of loops might be greater than the one configured here. Set this to zero " - "to disable skirt completely."; + "to disable skirt completely."); def->cli = "skirts=i"; def->min = 0; def->default_value = new ConfigOptionInt(1); def = this->add("slowdown_below_layer_time", coInts); - def->label = "Slow down if layer print time is below"; - def->tooltip = "If layer print time is estimated below this number of seconds, print moves " - "speed will be scaled down to extend duration to this value."; - def->sidetext = "approximate seconds"; + def->label = _L("Slow down if layer print time is below"); + def->tooltip = _L("If layer print time is estimated below this number of seconds, print moves " + "speed will be scaled down to extend duration to this value."); + def->sidetext = _L("approximate seconds"); def->cli = "slowdown-below-layer-time=i@"; def->width = 60; def->min = 0; @@ -1240,63 +1250,63 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionInts { 5 }; def = this->add("small_perimeter_speed", coFloatOrPercent); - def->label = "Small perimeters"; - def->category = "Speed"; - def->tooltip = "This separate setting will affect the speed of perimeters having radius <= 6.5mm " + def->label = _L("Small perimeters"); + def->category = _L("Speed"); + def->tooltip = _L("This separate setting will affect the speed of perimeters having radius <= 6.5mm " "(usually holes). If expressed as percentage (for example: 80%) it will be calculated " - "on the perimeters speed setting above. Set to zero for auto."; - def->sidetext = "mm/s or %"; + "on the perimeters speed setting above. Set to zero for auto."); + def->sidetext = _L("mm/s or %"); def->cli = "small-perimeter-speed=s"; def->ratio_over = "perimeter_speed"; def->min = 0; def->default_value = new ConfigOptionFloatOrPercent(15, false); def = this->add("solid_infill_below_area", coFloat); - def->label = "Solid infill threshold area"; - def->category = "Infill"; - def->tooltip = "Force solid infill for regions having a smaller area than the specified threshold."; - def->sidetext = "mm²"; + def->label = _L("Solid infill threshold area"); + def->category = _L("Infill"); + def->tooltip = _L("Force solid infill for regions having a smaller area than the specified threshold."); + def->sidetext = _L("mm\u00B2"); def->cli = "solid-infill-below-area=f"; def->min = 0; def->default_value = new ConfigOptionFloat(70); def = this->add("solid_infill_extruder", coInt); - def->label = "Solid infill extruder"; - def->category = "Extruders"; - def->tooltip = "The extruder to use when printing solid infill."; + def->label = _L("Solid infill extruder"); + def->category = _L("Extruders"); + def->tooltip = _L("The extruder to use when printing solid infill."); def->cli = "solid-infill-extruder=i"; def->min = 1; def->default_value = new ConfigOptionInt(1); def = this->add("solid_infill_every_layers", coInt); - def->label = "Solid infill every"; - def->category = "Infill"; - def->tooltip = "This feature allows to force a solid layer every given number of layers. " + def->label = _L("Solid infill every"); + def->category = _L("Infill"); + def->tooltip = _L("This feature allows to force a solid layer every given number of layers. " "Zero to disable. You can set this to any value (for example 9999); " "Slic3r will automatically choose the maximum possible number of layers " - "to combine according to nozzle diameter and layer height."; - def->sidetext = "layers"; + "to combine according to nozzle diameter and layer height."); + def->sidetext = _L("layers"); def->cli = "solid-infill-every-layers=i"; def->min = 0; def->default_value = new ConfigOptionInt(0); def = this->add("solid_infill_extrusion_width", coFloatOrPercent); - def->label = "Solid infill"; - def->category = "Extrusion Width"; - def->tooltip = "Set this to a non-zero value to set a manual extrusion width for infill for solid surfaces. " + def->label = _L("Solid infill"); + def->category = _L("Extrusion Width"); + def->tooltip = _L("Set this to a non-zero value to set a manual extrusion width for infill for solid surfaces. " "If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. " - "If expressed as percentage (for example 90%) it will be computed over layer height."; - def->sidetext = "mm or % (leave 0 for default)"; + "If expressed as percentage (for example 90%) it will be computed over layer height."); + def->sidetext = _L("mm or % (leave 0 for default)"); def->cli = "solid-infill-extrusion-width=s"; def->default_value = new ConfigOptionFloatOrPercent(0, false); def = this->add("solid_infill_speed", coFloatOrPercent); - def->label = "Solid infill"; - def->category = "Speed"; - def->tooltip = "Speed for printing solid regions (top/bottom/internal horizontal shells). " + def->label = _L("Solid infill"); + def->category = _L("Speed"); + def->tooltip = _L("Speed for printing solid regions (top/bottom/internal horizontal shells). " "This can be expressed as a percentage (for example: 80%) over the default " - "infill speed above. Set to zero for auto."; - def->sidetext = "mm/s or %"; + "infill speed above. Set to zero for auto."); + def->sidetext = _L("mm/s or %"); def->cli = "solid-infill-speed=s"; def->ratio_over = "infill_speed"; def->aliases.push_back("solid_infill_feed_rate"); @@ -1304,42 +1314,42 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloatOrPercent(20, false); def = this->add("solid_layers", coInt); - def->label = "Solid layers"; - def->tooltip = "Number of solid layers to generate on top and bottom surfaces."; + def->label = _L("Solid layers"); + def->tooltip = _L("Number of solid layers to generate on top and bottom surfaces."); def->cli = "solid-layers=i"; def->shortcut.push_back("top_solid_layers"); def->shortcut.push_back("bottom_solid_layers"); def->min = 0; def = this->add("spiral_vase", coBool); - def->label = "Spiral vase"; - def->tooltip = "This feature will raise Z gradually while printing a single-walled object " + def->label = _L("Spiral vase"); + def->tooltip = _L("This feature will raise Z gradually while printing a single-walled object " "in order to remove any visible seam. This option requires a single perimeter, " "no infill, no top solid layers and no support material. You can still set " "any number of bottom solid layers as well as skirt/brim loops. " - "It won't work when printing more than an object."; + "It won't work when printing more than an object."); def->cli = "spiral-vase!"; def->default_value = new ConfigOptionBool(false); def = this->add("standby_temperature_delta", coInt); - def->label = "Temperature variation"; - def->tooltip = "Temperature difference to be applied when an extruder is not active. " - "Enables a full-height \"sacrificial\" skirt on which the nozzles are periodically wiped."; - def->sidetext = "∆°C"; + def->label = _L("Temperature variation"); + def->tooltip = _L("Temperature difference to be applied when an extruder is not active. " + "Enables a full-height \"sacrificial\" skirt on which the nozzles are periodically wiped."); + def->sidetext = "∆°C"; def->cli = "standby-temperature-delta=i"; def->min = -max_temp; def->max = max_temp; def->default_value = new ConfigOptionInt(-5); def = this->add("start_gcode", coString); - def->label = "Start G-code"; - def->tooltip = "This start procedure is inserted at the beginning, after bed has reached " + def->label = _L("Start G-code"); + def->tooltip = _L("This start procedure is inserted at the beginning, after bed has reached " "the target temperature and extruder just started heating, and before extruder " "has finished heating. If Slic3r detects M104 or M190 in your custom codes, " "such commands will not be prepended automatically so you're free to customize " "the order of heating commands and other custom actions. Note that you can use " "placeholder variables for all Slic3r settings, so you can put " - "a \"M109 S[first_layer_temperature]\" command wherever you want."; + "a \"M109 S[first_layer_temperature]\" command wherever you want."); def->cli = "start-gcode=s"; def->multiline = true; def->full_width = true; @@ -1347,15 +1357,15 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionString("G28 ; home all axes\nG1 Z5 F5000 ; lift nozzle\n"); def = this->add("start_filament_gcode", coStrings); - def->label = "Start G-code"; - def->tooltip = "This start procedure is inserted at the beginning, after any printer start gcode. " + def->label = _L("Start G-code"); + def->tooltip = _L("This start procedure is inserted at the beginning, after any printer start gcode. " "This is used to override settings for a specific filament. If Slic3r detects " "M104, M109, M140 or M190 in your custom codes, such commands will " "not be prepended automatically so you're free to customize the order " "of heating commands and other custom actions. Note that you can use placeholder variables " "for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command " "wherever you want. If you have multiple extruders, the gcode is processed " - "in extruder order."; + "in extruder order."); def->cli = "start-filament-gcode=s@"; def->multiline = true; def->full_width = true; @@ -1363,24 +1373,24 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionStrings { "; Filament gcode\n" }; def = this->add("single_extruder_multi_material", coBool); - def->label = "Single Extruder Multi Material"; - def->tooltip = "The printer multiplexes filaments into a single hot end."; + def->label = _L("Single Extruder Multi Material"); + def->tooltip = _L("The printer multiplexes filaments into a single hot end."); def->cli = "single-extruder-multi-material!"; def->default_value = new ConfigOptionBool(false); def = this->add("support_material", coBool); - def->label = "Generate support material"; - def->category = "Support material"; - def->tooltip = "Enable support material generation."; + def->label = _L("Generate support material"); + def->category = _L("Support material"); + def->tooltip = _L("Enable support material generation."); def->cli = "support-material!"; def->default_value = new ConfigOptionBool(false); def = this->add("support_material_xy_spacing", coFloatOrPercent); - def->label = "XY separation between an object and its support"; - def->category = "Support material"; - def->tooltip = "XY separation between an object and its support. If expressed as percentage " - "(for example 50%), it will be calculated over external perimeter width."; - def->sidetext = "mm or %"; + def->label = _L("XY separation between an object and its support"); + def->category = _L("Support material"); + def->tooltip = _L("XY separation between an object and its support. If expressed as percentage " + "(for example 50%), it will be calculated over external perimeter width."); + def->sidetext = _L("mm or %"); def->cli = "support-material-xy-spacing=s"; def->ratio_over = "external_perimeter_extrusion_width"; def->min = 0; @@ -1388,30 +1398,30 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloatOrPercent(50, true); def = this->add("support_material_angle", coFloat); - def->label = "Pattern angle"; - def->category = "Support material"; - def->tooltip = "Use this setting to rotate the support material pattern on the horizontal plane."; - def->sidetext = "°"; + def->label = _L("Pattern angle"); + def->category = _L("Support material"); + def->tooltip = _L("Use this setting to rotate the support material pattern on the horizontal plane."); + def->sidetext = _L("\u00B0"); def->cli = "support-material-angle=f"; def->min = 0; def->max = 359; def->default_value = new ConfigOptionFloat(0); def = this->add("support_material_buildplate_only", coBool); - def->label = "Support on build plate only"; - def->category = "Support material"; - def->tooltip = "Only create support if it lies on a build plate. Don't create support on a print."; + def->label = _L("Support on build plate only"); + def->category = _L("Support material"); + def->tooltip = _L("Only create support if it lies on a build plate. Don't create support on a print."); def->cli = "support-material-buildplate-only!"; def->default_value = new ConfigOptionBool(false); def = this->add("support_material_contact_distance", coFloat); def->gui_type = "f_enum_open"; - def->label = "Contact Z distance"; - def->category = "Support material"; - def->tooltip = "The vertical distance between object and support material interface. " + def->label = _L("Contact Z distance"); + def->category = _L("Support material"); + def->tooltip = _L("The vertical distance between object and support material interface. " "Setting this to 0 will also prevent Slic3r from using bridge flow and speed " - "for the first object layer."; - def->sidetext = "mm"; + "for the first object layer."); + def->sidetext = _L("mm"); def->cli = "support-material-contact-distance=f"; def->min = 0; def->enum_values.push_back("0"); @@ -1421,86 +1431,86 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionFloat(0.2); def = this->add("support_material_enforce_layers", coInt); - def->label = "Enforce support for the first"; - def->category = "Support material"; - def->tooltip = "Generate support material for the specified number of layers counting from bottom, " + def->label = _L("Enforce support for the first"); + def->category = _L("Support material"); + def->tooltip = _L("Generate support material for the specified number of layers counting from bottom, " "regardless of whether normal support material is enabled or not and regardless " "of any angle threshold. This is useful for getting more adhesion of objects " - "having a very thin or poor footprint on the build plate."; - def->sidetext = "layers"; + "having a very thin or poor footprint on the build plate."); + def->sidetext = _L("layers"); def->cli = "support-material-enforce-layers=f"; - def->full_label = "Enforce support for the first n layers"; + def->full_label = _L("Enforce support for the first n layers"); def->min = 0; def->default_value = new ConfigOptionInt(0); def = this->add("support_material_extruder", coInt); - def->label = "Support material/raft/skirt extruder"; - def->category = "Extruders"; - def->tooltip = "The extruder to use when printing support material, raft and skirt " - "(1+, 0 to use the current extruder to minimize tool changes)."; + def->label = _L("Support material/raft/skirt extruder"); + def->category = _L("Extruders"); + def->tooltip = _L("The extruder to use when printing support material, raft and skirt " + "(1+, 0 to use the current extruder to minimize tool changes)."); def->cli = "support-material-extruder=i"; def->min = 0; def->default_value = new ConfigOptionInt(1); def = this->add("support_material_extrusion_width", coFloatOrPercent); - def->label = "Support material"; - def->category = "Extrusion Width"; - def->tooltip = "Set this to a non-zero value to set a manual extrusion width for support material. " + def->label = _L("Support material"); + def->category = _L("Extrusion Width"); + def->tooltip = _L("Set this to a non-zero value to set a manual extrusion width for support material. " "If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. " - "If expressed as percentage (for example 90%) it will be computed over layer height."; - def->sidetext = "mm or % (leave 0 for default)"; + "If expressed as percentage (for example 90%) it will be computed over layer height."); + def->sidetext = _L("mm or % (leave 0 for default)"); def->cli = "support-material-extrusion-width=s"; def->default_value = new ConfigOptionFloatOrPercent(0, false); def = this->add("support_material_interface_contact_loops", coBool); - def->label = "Interface loops"; - def->category = "Support material"; - def->tooltip = "Cover the top contact layer of the supports with loops. Disabled by default."; + def->label = _L("Interface loops"); + def->category = _L("Support material"); + def->tooltip = _L("Cover the top contact layer of the supports with loops. Disabled by default."); def->cli = "support-material-interface-contact-loops!"; def->default_value = new ConfigOptionBool(false); def = this->add("support_material_interface_extruder", coInt); - def->label = "Support material/raft interface extruder"; - def->category = "Extruders"; - def->tooltip = "The extruder to use when printing support material interface " - "(1+, 0 to use the current extruder to minimize tool changes). This affects raft too."; + def->label = _L("Support material/raft interface extruder"); + def->category = _L("Extruders"); + def->tooltip = _L("The extruder to use when printing support material interface " + "(1+, 0 to use the current extruder to minimize tool changes). This affects raft too."); def->cli = "support-material-interface-extruder=i"; def->min = 0; def->default_value = new ConfigOptionInt(1); def = this->add("support_material_interface_layers", coInt); - def->label = "Interface layers"; - def->category = "Support material"; - def->tooltip = "Number of interface layers to insert between the object(s) and support material."; - def->sidetext = "layers"; + def->label = _L("Interface layers"); + def->category = _L("Support material"); + def->tooltip = _L("Number of interface layers to insert between the object(s) and support material."); + def->sidetext = _L("layers"); def->cli = "support-material-interface-layers=i"; def->min = 0; def->default_value = new ConfigOptionInt(3); def = this->add("support_material_interface_spacing", coFloat); - def->label = "Interface pattern spacing"; - def->category = "Support material"; - def->tooltip = "Spacing between interface lines. Set zero to get a solid interface."; - def->sidetext = "mm"; + def->label = _L("Interface pattern spacing"); + def->category = _L("Support material"); + def->tooltip = _L("Spacing between interface lines. Set zero to get a solid interface."); + def->sidetext = _L("mm"); def->cli = "support-material-interface-spacing=f"; def->min = 0; def->default_value = new ConfigOptionFloat(0); def = this->add("support_material_interface_speed", coFloatOrPercent); - def->label = "Support material interface"; - def->category = "Support material"; - def->tooltip = "Speed for printing support material interface layers. If expressed as percentage " - "(for example 50%) it will be calculated over support material speed."; - def->sidetext = "mm/s or %"; + def->label = _L("Support material interface"); + def->category = _L("Support material"); + def->tooltip = _L("Speed for printing support material interface layers. If expressed as percentage " + "(for example 50%) it will be calculated over support material speed."); + def->sidetext = _L("mm/s or %"); def->cli = "support-material-interface-speed=s"; def->ratio_over = "support_material_speed"; def->min = 0; def->default_value = new ConfigOptionFloatOrPercent(100, true); def = this->add("support_material_pattern", coEnum); - def->label = "Pattern"; - def->category = "Support material"; - def->tooltip = "Pattern used to generate support material."; + def->label = _L("Pattern"); + def->category = _L("Support material"); + def->tooltip = _L("Pattern used to generate support material."); def->cli = "support-material-pattern=s"; def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("rectilinear"); @@ -1514,75 +1524,75 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionEnum(smpPillars); def = this->add("support_material_spacing", coFloat); - def->label = "Pattern spacing"; - def->category = "Support material"; - def->tooltip = "Spacing between support material lines."; - def->sidetext = "mm"; + def->label = _L("Pattern spacing"); + def->category = _L("Support material"); + def->tooltip = _L("Spacing between support material lines."); + def->sidetext = _L("mm"); def->cli = "support-material-spacing=f"; def->min = 0; def->default_value = new ConfigOptionFloat(2.5); def = this->add("support_material_speed", coFloat); - def->label = "Support material"; - def->category = "Support material"; - def->tooltip = "Speed for printing support material."; - def->sidetext = "mm/s"; + def->label = _L("Support material"); + def->category = _L("Support material"); + def->tooltip = _L("Speed for printing support material."); + def->sidetext = _L("mm/s"); def->cli = "support-material-speed=f"; def->min = 0; def->default_value = new ConfigOptionFloat(60); def = this->add("support_material_synchronize_layers", coBool); - def->label = "Synchronize with object layers"; - 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->label = _L("Synchronize with object layers"); + def->category = _L("Support material"); + def->tooltip = _L("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->default_value = new ConfigOptionBool(false); def = this->add("support_material_threshold", coInt); - def->label = "Overhang threshold"; - def->category = "Support material"; - def->tooltip = "Support material will not be generated for overhangs whose slope angle " - "(90° = vertical) is above the given threshold. In other words, this value " + def->label = _L("Overhang threshold"); + def->category = _L("Support material"); + def->tooltip = _L("Support material will not be generated for overhangs whose slope angle " + "(90\u00B0 = vertical) is above the given threshold. In other words, this value " "represent the most horizontal slope (measured from the horizontal plane) " "that you can print without support material. Set to zero for automatic detection " - "(recommended)."; - def->sidetext = "°"; + "(recommended)."); + def->sidetext = _L("\u00B0"); def->cli = "support-material-threshold=i"; def->min = 0; def->max = 90; def->default_value = new ConfigOptionInt(0); def = this->add("support_material_with_sheath", coBool); - def->label = "With sheath around the support"; - def->category = "Support material"; - def->tooltip = "Add a sheath (a single perimeter line) around the base support. This makes " - "the support more reliable, but also more difficult to remove."; + def->label = _L("With sheath around the support"); + def->category = _L("Support material"); + def->tooltip = _L("Add a sheath (a single perimeter line) around the base support. This makes " + "the support more reliable, but also more difficult to remove."); def->cli = "support-material-with-sheath!"; def->default_value = new ConfigOptionBool(true); def = this->add("temperature", coInts); - def->label = "Other layers"; - def->tooltip = "Extruder temperature for layers after the first one. Set this to zero to disable " - "temperature control commands in the output."; + def->label = _L("Other layers"); + def->tooltip = _L("Extruder temperature for layers after the first one. Set this to zero to disable " + "temperature control commands in the output."); def->cli = "temperature=i@"; - def->full_label = "Temperature"; + def->full_label = _L("Temperature"); def->max = 0; def->max = max_temp; def->default_value = new ConfigOptionInts { 200 }; def = this->add("thin_walls", coBool); - def->label = "Detect thin walls"; - def->category = "Layers and Perimeters"; - def->tooltip = "Detect single-width walls (parts where two extrusions don't fit and we need " - "to collapse them into a single trace)."; + def->label = _L("Detect thin walls"); + def->category = _L("Layers and Perimeters"); + def->tooltip = _L("Detect single-width walls (parts where two extrusions don't fit and we need " + "to collapse them into a single trace)."); def->cli = "thin-walls!"; def->default_value = new ConfigOptionBool(true); def = this->add("threads", coInt); - def->label = "Threads"; - def->tooltip = "Threads are used to parallelize long-running tasks. Optimal threads number " - "is slightly above the number of available cores/processors."; + def->label = _L("Threads"); + def->tooltip = _L("Threads are used to parallelize long-running tasks. Optimal threads number " + "is slightly above the number of available cores/processors."); def->cli = "threads|j=i"; def->readonly = true; def->min = 1; @@ -1592,10 +1602,10 @@ PrintConfigDef::PrintConfigDef() } def = this->add("toolchange_gcode", coString); - def->label = "Tool change G-code"; - def->tooltip = "This custom code is inserted right before every extruder change. " + def->label = _L("Tool change G-code"); + def->tooltip = _L("This custom code is inserted right before every extruder change. " "Note that you can use placeholder variables for all Slic3r settings as well " - "as [previous_extruder] and [next_extruder]."; + "as [previous_extruder] and [next_extruder]."); def->cli = "toolchange-gcode=s"; def->multiline = true; def->full_width = true; @@ -1603,141 +1613,141 @@ PrintConfigDef::PrintConfigDef() def->default_value = new ConfigOptionString(""); def = this->add("top_infill_extrusion_width", coFloatOrPercent); - def->label = "Top solid infill"; - def->category = "Extrusion Width"; - def->tooltip = "Set this to a non-zero value to set a manual extrusion width for infill for top surfaces. " + def->label = _L("Top solid infill"); + def->category = _L("Extrusion Width"); + def->tooltip = _L("Set this to a non-zero value to set a manual extrusion width for infill for top surfaces. " "You may want to use thinner extrudates to fill all narrow regions and get a smoother finish. " "If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. " - "If expressed as percentage (for example 90%) it will be computed over layer height."; - def->sidetext = "mm or % (leave 0 for default)"; + "If expressed as percentage (for example 90%) it will be computed over layer height."); + def->sidetext = _L("mm or % (leave 0 for default)"); def->cli = "top-infill-extrusion-width=s"; def->default_value = new ConfigOptionFloatOrPercent(0, false); def = this->add("top_solid_infill_speed", coFloatOrPercent); - def->label = "Top solid infill"; - def->category = "Speed"; - def->tooltip = "Speed for printing top solid layers (it only applies to the uppermost " + def->label = _L("Top solid infill"); + def->category = _L("Speed"); + def->tooltip = _L("Speed for printing top solid layers (it only applies to the uppermost " "external layers and not to their internal solid layers). You may want " "to slow down this to get a nicer surface finish. This can be expressed " "as a percentage (for example: 80%) over the solid infill speed above. " - "Set to zero for auto."; - def->sidetext = "mm/s or %"; + "Set to zero for auto."); + def->sidetext = _L("mm/s or %"); def->cli = "top-solid-infill-speed=s"; def->ratio_over = "solid_infill_speed"; def->min = 0; def->default_value = new ConfigOptionFloatOrPercent(15, false); def = this->add("top_solid_layers", coInt); - def->label = "Top"; - def->category = "Layers and Perimeters"; - def->tooltip = "Number of solid layers to generate on top surfaces."; + def->label = _L("Top"); + def->category = _L("Layers and Perimeters"); + def->tooltip = _L("Number of solid layers to generate on top surfaces."); def->cli = "top-solid-layers=i"; - def->full_label = "Top solid layers"; + def->full_label = _L("Top solid layers"); def->min = 0; def->default_value = new ConfigOptionInt(3); def = this->add("travel_speed", coFloat); - def->label = "Travel"; - def->tooltip = "Speed for travel moves (jumps between distant extrusion points)."; - def->sidetext = "mm/s"; + def->label = _L("Travel"); + def->tooltip = _L("Speed for travel moves (jumps between distant extrusion points)."); + def->sidetext = _L("mm/s"); def->cli = "travel-speed=f"; def->aliases.push_back("travel_feed_rate"); def->min = 1; def->default_value = new ConfigOptionFloat(130); def = this->add("use_firmware_retraction", coBool); - def->label = "Use firmware retraction"; - def->tooltip = "This experimental setting uses G10 and G11 commands to have the firmware " - "handle the retraction. This is only supported in recent Marlin."; + def->label = _L("Use firmware retraction"); + def->tooltip = _L("This experimental setting uses G10 and G11 commands to have the firmware " + "handle the retraction. This is only supported in recent Marlin."); def->cli = "use-firmware-retraction!"; def->default_value = new ConfigOptionBool(false); def = this->add("use_relative_e_distances", coBool); - def->label = "Use relative E distances"; - def->tooltip = "If your firmware requires relative E values, check this, " - "otherwise leave it unchecked. Most firmwares use absolute values."; + def->label = _L("Use relative E distances"); + def->tooltip = _L("If your firmware requires relative E values, check this, " + "otherwise leave it unchecked. Most firmwares use absolute values."); def->cli = "use-relative-e-distances!"; def->default_value = new ConfigOptionBool(false); def = this->add("use_volumetric_e", coBool); - def->label = "Use volumetric E"; - def->tooltip = "This experimental setting uses outputs the E values in cubic millimeters " + def->label = _L("Use volumetric E"); + def->tooltip = _L("This experimental setting uses outputs the E values in cubic millimeters " "instead of linear millimeters. If your firmware doesn't already know " "filament diameter(s), you can put commands like 'M200 D[filament_diameter_0] T0' " "in your start G-code in order to turn volumetric mode on and use the filament " "diameter associated to the filament selected in Slic3r. This is only supported " - "in recent Marlin."; + "in recent Marlin."); def->cli = "use-volumetric-e!"; def->default_value = new ConfigOptionBool(false); def = this->add("variable_layer_height", coBool); - def->label = "Enable variable layer height feature"; - def->tooltip = "Some printers or printer setups may have difficulties printing " - "with a variable layer height. Enabled by default."; + def->label = _L("Enable variable layer height feature"); + def->tooltip = _L("Some printers or printer setups may have difficulties printing " + "with a variable layer height. Enabled by default."); def->cli = "variable-layer-height!"; def->default_value = new ConfigOptionBool(true); def = this->add("wipe", coBools); - def->label = "Wipe while retracting"; - def->tooltip = "This flag will move the nozzle while retracting to minimize the possible blob " - "on leaky extruders."; + def->label = _L("Wipe while retracting"); + def->tooltip = _L("This flag will move the nozzle while retracting to minimize the possible blob " + "on leaky extruders."); def->cli = "wipe!"; def->default_value = new ConfigOptionBools { false }; def = this->add("wipe_tower", coBool); - def->label = "Enable"; - def->tooltip = "Multi material printers may need to prime or purge extruders on tool changes. " - "Extrude the excess material into the wipe tower."; + def->label = _L("Enable"); + def->tooltip = _L("Multi material printers may need to prime or purge extruders on tool changes. " + "Extrude the excess material into the wipe tower."); def->cli = "wipe-tower!"; def->default_value = new ConfigOptionBool(false); def = this->add("wipe_tower_x", coFloat); - def->label = "Position X"; - def->tooltip = "X coordinate of the left front corner of a wipe tower"; - def->sidetext = "mm"; + def->label = _L("Position X"); + def->tooltip = _L("X coordinate of the left front corner of a wipe tower"); + def->sidetext = _L("mm"); def->cli = "wipe-tower-x=f"; def->default_value = new ConfigOptionFloat(180.); def = this->add("wipe_tower_y", coFloat); - def->label = "Position Y"; - def->tooltip = "Y coordinate of the left front corner of a wipe tower"; - def->sidetext = "mm"; + def->label = _L("Position Y"); + def->tooltip = _L("Y coordinate of the left front corner of a wipe tower"); + def->sidetext = _L("mm"); def->cli = "wipe-tower-y=f"; def->default_value = new ConfigOptionFloat(140.); def = this->add("wipe_tower_width", coFloat); - def->label = "Width"; - def->tooltip = "Width of a wipe tower"; - def->sidetext = "mm"; + def->label = _L("Width"); + def->tooltip = _L("Width of a wipe tower"); + def->sidetext = _L("mm"); def->cli = "wipe-tower-width=f"; def->default_value = new ConfigOptionFloat(60.); def = this->add("wipe_tower_per_color_wipe", coFloat); - def->label = "Per color change depth"; - def->tooltip = "Depth of a wipe color per color change. For N colors, there will be " + def->label = _L("Per color change depth"); + def->tooltip = _L("Depth of a wipe color per color change. For N colors, there will be " "maximum (N-1) tool switches performed, therefore the total depth " - "of the wipe tower will be (N-1) times this value."; - def->sidetext = "mm"; + "of the wipe tower will be (N-1) times this value."); + def->sidetext = _L("mm"); def->cli = "wipe-tower-per-color-wipe=f"; def->default_value = new ConfigOptionFloat(15.); def = this->add("xy_size_compensation", coFloat); - def->label = "XY Size Compensation"; - def->category = "Advanced"; - def->tooltip = "The object will be grown/shrunk in the XY plane by the configured value " + def->label = _L("XY Size Compensation"); + def->category = _L("Advanced"); + def->tooltip = _L("The object will be grown/shrunk in the XY plane by the configured value " "(negative = inwards, positive = outwards). This might be useful " - "for fine-tuning hole sizes."; - def->sidetext = "mm"; + "for fine-tuning hole sizes."); + def->sidetext = _L("mm"); def->cli = "xy-size-compensation=f"; def->default_value = new ConfigOptionFloat(0); def = this->add("z_offset", coFloat); - def->label = "Z offset"; - def->tooltip = "This value will be added (or subtracted) from all the Z coordinates " + def->label = _L("Z offset"); + def->tooltip = _L("This value will be added (or subtracted) from all the Z coordinates " "in the output G-code. It is used to compensate for bad Z endstop position: " "for example, if your endstop zero actually leaves the nozzle 0.3mm far " - "from the print bed, set this to -0.3 (or fix your endstop)."; - def->sidetext = "mm"; + "from the print bed, set this to -0.3 (or fix your endstop)."); + def->sidetext = _L("mm"); def->cli = "z-offset=f"; def->default_value = new ConfigOptionFloat(0); } diff --git a/xs/src/libslic3r/Utils.hpp b/xs/src/libslic3r/Utils.hpp index fd60cf91a..27e7fad6b 100644 --- a/xs/src/libslic3r/Utils.hpp +++ b/xs/src/libslic3r/Utils.hpp @@ -20,6 +20,11 @@ void set_resources_dir(const std::string &path); // Return a full path to the resources directory. const std::string& resources_dir(); +// Set a path with GUI localization files. +void set_local_dir(const std::string &path); +// Return a full path to the localization directory. +const std::string& localization_dir(); + // Set a path with preset files. void set_data_dir(const std::string &path); // Return a full path to the GUI resource files. diff --git a/xs/src/libslic3r/utils.cpp b/xs/src/libslic3r/utils.cpp index 1a7e16f11..34b9eaa9f 100644 --- a/xs/src/libslic3r/utils.cpp +++ b/xs/src/libslic3r/utils.cpp @@ -103,6 +103,18 @@ const std::string& resources_dir() return g_resources_dir; } +static std::string g_local_dir; + +void set_local_dir(const std::string &dir) +{ + g_local_dir = dir; +} + +const std::string& localization_dir() +{ + return g_local_dir; +} + static std::string g_data_dir; void set_data_dir(const std::string &dir) diff --git a/xs/src/perlglue.cpp b/xs/src/perlglue.cpp index 5f3b5f691..f7b4bf0c0 100644 --- a/xs/src/perlglue.cpp +++ b/xs/src/perlglue.cpp @@ -63,6 +63,7 @@ REGISTER_CLASS(Preset, "GUI::Preset"); REGISTER_CLASS(PresetCollection, "GUI::PresetCollection"); REGISTER_CLASS(PresetBundle, "GUI::PresetBundle"); REGISTER_CLASS(PresetHints, "GUI::PresetHints"); +REGISTER_CLASS(TabIface, "GUI::Tab2"); SV* ConfigBase__as_hash(ConfigBase* THIS) { diff --git a/xs/src/slic3r/GUI/2DBed.cpp b/xs/src/slic3r/GUI/2DBed.cpp new file mode 100644 index 000000000..c5d68400d --- /dev/null +++ b/xs/src/slic3r/GUI/2DBed.cpp @@ -0,0 +1,189 @@ +#include "2DBed.hpp"; + +#include +#include "BoundingBox.hpp" +#include "Geometry.hpp" +#include "ClipperUtils.hpp" + +namespace Slic3r { +namespace GUI { + +void Bed_2D::repaint() +{ + wxAutoBufferedPaintDC dc(this); + auto cw = GetSize().GetWidth(); + auto ch = GetSize().GetHeight(); + // when canvas is not rendered yet, size is 0, 0 + if (cw == 0) return ; + + if (m_user_drawn_background) { + // On all systems the AutoBufferedPaintDC() achieves double buffering. + // On MacOS the background is erased, on Windows the background is not erased + // and on Linux / GTK the background is erased to gray color. + // Fill DC with the background on Windows & Linux / GTK. + auto color = wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT); //GetSystemColour + dc.SetPen(*new wxPen(color, 1, wxPENSTYLE_SOLID)); + dc.SetBrush(*new wxBrush(color, wxBRUSHSTYLE_SOLID)); + auto rect = GetUpdateRegion().GetBox(); + dc.DrawRectangle(rect.GetLeft(), rect.GetTop(), rect.GetWidth(), rect.GetHeight()); + } + + // turn cw and ch from sizes to max coordinates + cw--; + ch--; + + auto cbb = BoundingBoxf(Pointf(0, 0),Pointf(cw, ch)); + // leave space for origin point + cbb.min.translate(4, 0); + cbb.max.translate(-4, -4); + + // leave space for origin label + cbb.max.translate(0, -13); + + // read new size + cw = cbb.size().x; + ch = cbb.size().y; + + auto ccenter = cbb.center(); + + // get bounding box of bed shape in G - code coordinates + auto bed_shape = m_bed_shape; + auto bed_polygon = Polygon::new_scale(m_bed_shape); + auto bb = BoundingBoxf(m_bed_shape); + bb.merge(Pointf(0, 0)); // origin needs to be in the visible area + auto bw = bb.size().x; + auto bh = bb.size().y; + auto bcenter = bb.center(); + + // calculate the scaling factor for fitting bed shape in canvas area + auto sfactor = std::min(cw/bw, ch/bh); + auto shift = Pointf( + ccenter.x - bcenter.x * sfactor, + ccenter.y - bcenter.y * sfactor + ); + m_scale_factor = sfactor; + m_shift = Pointf(shift.x + cbb.min.x, + shift.y - (cbb.max.y - GetSize().GetHeight())); + + // draw bed fill + dc.SetBrush(*new wxBrush(*new wxColour(255, 255, 255), wxSOLID)); + wxPointList pt_list; + for (auto pt: m_bed_shape) + { + Point pt_pix = to_pixels(pt); + pt_list.push_back(new wxPoint(pt_pix.x, pt_pix.y)); + } + dc.DrawPolygon(&pt_list, 0, 0); + + // draw grid + auto step = 10; // 1cm grid + Polylines polylines; + for (auto x = bb.min.x - fmod(bb.min.x, step) + step; x < bb.max.x; x += step) { + Polyline pl = Polyline::new_scale({ Pointf(x, bb.min.y), Pointf(x, bb.max.y) }); + polylines.push_back(pl); + } + for (auto y = bb.min.y - fmod(bb.min.y, step) + step; y < bb.max.y; y += step) { + polylines.push_back(Polyline::new_scale({ Pointf(bb.min.x, y), Pointf(bb.max.x, y) })); + } + polylines = intersection_pl(polylines, bed_polygon); + + dc.SetPen(*new wxPen(*new wxColour(230, 230, 230), 1, wxSOLID)); + for (auto pl : polylines) + { + for (size_t i = 0; i < pl.points.size()-1; i++){ + Point pt1 = to_pixels(Pointf::new_unscale(pl.points[i])); + Point pt2 = to_pixels(Pointf::new_unscale(pl.points[i+1])); + dc.DrawLine(pt1.x, pt1.y, pt2.x, pt2.y); + } + } + + // draw bed contour + dc.SetPen(*new wxPen(*new wxColour(0, 0, 0), 1, wxSOLID)); + dc.SetBrush(*new wxBrush(*new wxColour(0, 0, 0), wxTRANSPARENT)); + dc.DrawPolygon(&pt_list, 0, 0); + + auto origin_px = to_pixels(Pointf(0, 0)); + + // draw axes + auto axes_len = 50; + auto arrow_len = 6; + auto arrow_angle = Geometry::deg2rad(45.0); + dc.SetPen(*new wxPen(*new wxColour(255, 0, 0), 2, wxSOLID)); // red + auto x_end = Pointf(origin_px.x + axes_len, origin_px.y); + dc.DrawLine(wxPoint(origin_px.x, origin_px.y), wxPoint(x_end.x, x_end.y)); + for (auto angle : { -arrow_angle, arrow_angle }){ + auto end = x_end; + end.translate(-arrow_len, 0); + end.rotate(angle, x_end); + dc.DrawLine(wxPoint(x_end.x, x_end.y), wxPoint(end.x, end.y)); + } + + dc.SetPen(*new wxPen(*new wxColour(0, 255, 0), 2, wxSOLID)); // green + auto y_end = Pointf(origin_px.x, origin_px.y - axes_len); + dc.DrawLine(wxPoint(origin_px.x, origin_px.y), wxPoint(y_end.x, y_end.y)); + for (auto angle : { -arrow_angle, arrow_angle }) { + auto end = y_end; + end.translate(0, +arrow_len); + end.rotate(angle, y_end); + dc.DrawLine(wxPoint(y_end.x, y_end.y), wxPoint(end.x, end.y)); + } + + // draw origin + dc.SetPen(*new wxPen(*new wxColour(0, 0, 0), 1, wxSOLID)); + dc.SetBrush(*new wxBrush(*new wxColour(0, 0, 0), wxSOLID)); + dc.DrawCircle(origin_px.x, origin_px.y, 3); + + dc.SetTextForeground(*new wxColour(0, 0, 0)); + dc.SetFont(*new wxFont(10, wxDEFAULT, wxNORMAL, wxNORMAL)); + dc.DrawText("(0,0)", origin_px.x + 1, origin_px.y + 2); + + // draw current position + if (m_pos!= Pointf(0, 0)) { + auto pos_px = to_pixels(m_pos); + dc.SetPen(*new wxPen(*new wxColour(200, 0, 0), 2, wxSOLID)); + dc.SetBrush(*new wxBrush(*new wxColour(200, 0, 0), wxTRANSPARENT)); + dc.DrawCircle(pos_px.x, pos_px.y, 5); + + dc.DrawLine(pos_px.x - 15, pos_px.y, pos_px.x + 15, pos_px.y); + dc.DrawLine(pos_px.x, pos_px.y - 15, pos_px.x, pos_px.y + 15); + } + + m_painted = true; +} + +// convert G - code coordinates into pixels +Point Bed_2D::to_pixels(Pointf point){ + auto p = Pointf(point); + p.scale(m_scale_factor); + p.translate(m_shift); + return Point(p.x, GetSize().GetHeight() - p.y); +} + +void Bed_2D::mouse_event(wxMouseEvent event){ + if (!m_interactive) return; + if (!m_painted) return; + + auto pos = event.GetPosition(); + auto point = to_units(Point(pos.x, pos.y)); + if (event.LeftDown() || event.Dragging()) { + if (m_on_move) + m_on_move(point) ; + Refresh(); + } +} + +// convert pixels into G - code coordinates +Pointf Bed_2D::to_units(Point point){ + auto p = Pointf(point.x, GetSize().GetHeight() - point.y); + p.translate(m_shift.negative()); + p.scale(1 / m_scale_factor); + return p; +} + +void Bed_2D::set_pos(Pointf pos){ + m_pos = pos; + Refresh(); +} + +} // GUI +} // Slic3r \ No newline at end of file diff --git a/xs/src/slic3r/GUI/2DBed.hpp b/xs/src/slic3r/GUI/2DBed.hpp new file mode 100644 index 000000000..859417efb --- /dev/null +++ b/xs/src/slic3r/GUI/2DBed.hpp @@ -0,0 +1,45 @@ +#include +#include "Config.hpp" + +namespace Slic3r { +namespace GUI { + +class Bed_2D : public wxPanel +{ + bool m_user_drawn_background = false; + + bool m_painted = false; + bool m_interactive = false; + double m_scale_factor; + Pointf m_shift; + Pointf m_pos; + std::function m_on_move = nullptr; + + Point to_pixels(Pointf point); + Pointf to_units(Point point); + void repaint(); + void mouse_event(wxMouseEvent event); + void set_pos(Pointf pos); + +public: + Bed_2D(wxWindow* parent) + { + Create(parent, wxID_ANY, wxDefaultPosition, wxSize(250, -1), wxTAB_TRAVERSAL); +// m_user_drawn_background = $^O ne 'darwin'; + m_user_drawn_background = true; + Bind(wxEVT_PAINT, ([this](wxPaintEvent e) { repaint(); })); +// EVT_ERASE_BACKGROUND($self, sub{}) if $self->{user_drawn_background}; +// Bind(EVT_MOUSE_EVENTS, ([this](wxMouseEvent event){/*mouse_event()*/; })); + Bind(wxEVT_LEFT_DOWN, ([this](wxMouseEvent event){ mouse_event(event); })); + Bind(wxEVT_MOTION, ([this](wxMouseEvent event){ mouse_event(event); })); + Bind(wxEVT_SIZE, ([this](wxSizeEvent e) { Refresh(); })); + } + ~Bed_2D(){} + + std::vector m_bed_shape; + +}; + + +} // GUI +} // Slic3r diff --git a/xs/src/slic3r/GUI/BedShapeDialog.cpp b/xs/src/slic3r/GUI/BedShapeDialog.cpp new file mode 100644 index 000000000..5ee0c1f8b --- /dev/null +++ b/xs/src/slic3r/GUI/BedShapeDialog.cpp @@ -0,0 +1,341 @@ +#include "BedShapeDialog.hpp" + +#include +#include +#include +#include "Polygon.hpp" +#include "BoundingBox.hpp" +#include +#include "Model.hpp" +#include "boost/nowide/iostream.hpp" + +namespace Slic3r { +namespace GUI { + +void BedShapeDialog::build_dialog(ConfigOptionPoints* default_pt) +{ + m_panel = new BedShapePanel(this); + m_panel->build_panel(default_pt); + + auto main_sizer = new wxBoxSizer(wxVERTICAL); + main_sizer->Add(m_panel, 1, wxEXPAND); + main_sizer->Add(CreateButtonSizer(wxOK | wxCANCEL), 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM, 10); + + SetSizer(main_sizer); + SetMinSize(GetSize()); + main_sizer->SetSizeHints(this); + + // needed to actually free memory + this->Bind(wxEVT_CLOSE_WINDOW, ([this](wxCloseEvent e){ + EndModal(wxID_OK); + Destroy(); + })); +} + +void BedShapePanel::build_panel(ConfigOptionPoints* default_pt) +{ +// on_change(nullptr); + + auto box = new wxStaticBox(this, wxID_ANY, _L("Shape")); + auto sbsizer = new wxStaticBoxSizer(box, wxVERTICAL); + + // shape options + m_shape_options_book = new wxChoicebook(this, wxID_ANY, wxDefaultPosition, wxSize(300, -1), wxCHB_TOP); + sbsizer->Add(m_shape_options_book); + + auto optgroup = init_shape_options_page(_L("Rectangular")); + ConfigOptionDef def; + def.type = coPoints; + def.default_value = new ConfigOptionPoints{ Pointf(200, 200) }; + def.label = _LU8("Size"); + def.tooltip = _LU8("Size in X and Y of the rectangular plate."); + Option option(def, "rect_size"); + optgroup->append_single_option_line(option); + + def.type = coPoints; + def.default_value = new ConfigOptionPoints{ Pointf(0, 0) }; + def.label = _LU8("Origin"); + def.tooltip = _LU8("Distance of the 0,0 G-code coordinate from the front left corner of the rectangle."); + option = Option(def, "rect_origin"); + optgroup->append_single_option_line(option); + + optgroup = init_shape_options_page(_L("Circular")); + def.type = coFloat; + def.default_value = new ConfigOptionFloat(200); + def.sidetext = _LU8("mm"); + def.label = _LU8("Diameter"); + def.tooltip = _LU8("Diameter of the print bed. It is assumed that origin (0,0) is located in the center."); + option = Option(def, "diameter"); + optgroup->append_single_option_line(option); + + optgroup = init_shape_options_page(_L("Custom")); + Line line{ "", "" }; + line.full_width = 1; + line.widget = [this](wxWindow* parent) { + auto btn = new wxButton(parent, wxID_ANY, _L("Load shape from STL..."), wxDefaultPosition, wxDefaultSize); + + auto sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(btn); + + btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) + { + load_stl(); + })); + + return sizer; + }; + optgroup->append_line(line); + + Bind(wxEVT_CHOICEBOOK_PAGE_CHANGED, ([this](wxCommandEvent e) + { + update_shape(); + })); + + // right pane with preview canvas + m_canvas = new Bed_2D(this); + m_canvas->m_bed_shape = default_pt->values; + + // main sizer + auto top_sizer = new wxBoxSizer(wxHORIZONTAL); + top_sizer->Add(sbsizer, 0, wxEXPAND | wxLeft | wxTOP | wxBOTTOM, 10); + if (m_canvas) + top_sizer->Add(m_canvas, 1, wxEXPAND | wxALL, 10) ; + + SetSizerAndFit(top_sizer); + + set_shape(default_pt); + update_preview(); +} + +#define SHAPE_RECTANGULAR 0 +#define SHAPE_CIRCULAR 1 +#define SHAPE_CUSTOM 2 + +// Called from the constructor. +// Create a panel for a rectangular / circular / custom bed shape. +ConfigOptionsGroupShp BedShapePanel::init_shape_options_page(wxString title){ + + auto panel = new wxPanel(m_shape_options_book); + ConfigOptionsGroupShp optgroup; + optgroup = std::make_shared(panel, _L("Settings")); + + optgroup->label_width = 100; + optgroup->m_on_change = [this](t_config_option_key opt_key, boost::any value){ + update_shape(); + }; + + m_optgroups.push_back(optgroup); + panel->SetSizerAndFit(optgroup->sizer); + m_shape_options_book->AddPage(panel, title); + + return optgroup; +} + +// Called from the constructor. +// Set the initial bed shape from a list of points. +// Deduce the bed shape type(rect, circle, custom) +// This routine shall be smart enough if the user messes up +// with the list of points in the ini file directly. +void BedShapePanel::set_shape(ConfigOptionPoints* points) +{ + auto polygon = Polygon::new_scale(points->values); + + // is this a rectangle ? + if (points->size() == 4) { + auto lines = polygon.lines(); + if (lines[0].parallel_to(lines[2]) && lines[1].parallel_to(lines[3])) { + // okay, it's a rectangle + // find origin + // the || 0 hack prevents "-0" which might confuse the user + int x_min, x_max, y_min, y_max; + x_max = x_min = points->values[0].x; + y_max = y_min = points->values[0].y; + for (auto pt : points->values){ + if (x_min > pt.x) x_min = pt.x; + if (x_max < pt.x) x_max = pt.x; + if (y_min > pt.y) y_min = pt.y; + if (y_max < pt.y) y_max = pt.y; + } + if (x_min < 0) x_min = 0; + if (x_max < 0) x_max = 0; + if (y_min < 0) y_min = 0; + if (y_max < 0) y_max = 0; + auto origin = new ConfigOptionPoints{ Pointf(-x_min, -y_min) }; + + m_shape_options_book->SetSelection(SHAPE_RECTANGULAR); + auto optgroup = m_optgroups[SHAPE_RECTANGULAR]; + optgroup->set_value("rect_size", new ConfigOptionPoints{ Pointf(x_max - x_min, y_max - y_min) });//[x_max - x_min, y_max - y_min]); + optgroup->set_value("rect_origin", origin); + update_shape(); + return; + } + } + + // is this a circle ? + { + // Analyze the array of points.Do they reside on a circle ? + auto center = polygon.bounding_box().center(); + std::vector vertex_distances; + double avg_dist = 0; + for (auto pt: polygon.points) + { + double distance = center.distance_to(pt); + vertex_distances.push_back(distance); + avg_dist += distance; + } + + bool defined_value = true; + for (auto el: vertex_distances) + { + if (abs(el - avg_dist) > 10 * SCALED_EPSILON) + defined_value = false; + break; + } + if (defined_value) { + // all vertices are equidistant to center + m_shape_options_book->SetSelection(SHAPE_CIRCULAR); + auto optgroup = m_optgroups[SHAPE_CIRCULAR]; + boost::any ret = wxNumberFormatter::ToString(unscale(avg_dist * 2), 0); + optgroup->set_value("diameter", ret); + update_shape(); + return; + } + } + + if (points->size() < 3) { + // Invalid polygon.Revert to default bed dimensions. + m_shape_options_book->SetSelection(SHAPE_RECTANGULAR); + auto optgroup = m_optgroups[SHAPE_RECTANGULAR]; + optgroup->set_value("rect_size", new ConfigOptionPoints{ Pointf(200, 200) }); + optgroup->set_value("rect_origin", new ConfigOptionPoints{ Pointf(0, 0) }); + update_shape(); + return; + } + + // This is a custom bed shape, use the polygon provided. + m_shape_options_book->SetSelection(SHAPE_CUSTOM); + // Copy the polygon to the canvas, make a copy of the array. + m_canvas->m_bed_shape = points->values; + update_shape(); +} + +void BedShapePanel::update_preview() +{ + if (m_canvas) m_canvas->Refresh(); + Refresh(); +} + +// Update the bed shape from the dialog fields. +void BedShapePanel::update_shape() +{ + auto page_idx = m_shape_options_book->GetSelection(); + if (page_idx == SHAPE_RECTANGULAR) { + Pointf rect_size, rect_origin; + try{ + rect_size = boost::any_cast(m_optgroups[SHAPE_RECTANGULAR]->get_value("rect_size")); } + catch (const std::exception &e){ + return;} + try{ + rect_origin = boost::any_cast(m_optgroups[SHAPE_RECTANGULAR]->get_value("rect_origin")); + } + catch (const std::exception &e){ + return;} + + auto x = rect_size.x; + auto y = rect_size.y; + // empty strings or '-' or other things + if (x == 0 || y == 0) return; + double x0 = 0.0; + double y0 = 0.0; + double x1 = x; + double y1 = y; + + auto dx = rect_origin.x; + auto dy = rect_origin.y; + + x0 -= dx; + x1 -= dx; + y0 -= dy; + y1 -= dy; + m_canvas->m_bed_shape = { Pointf(x0, y0), + Pointf(x1, y0), + Pointf(x1, y1), + Pointf(x0, y1)}; + } + else if(page_idx == SHAPE_CIRCULAR) { + double diameter; + try{ + diameter = boost::any_cast(m_optgroups[SHAPE_CIRCULAR]->get_value("diameter")); + } + catch (const std::exception &e){ + return; + } + if (diameter == 0.0) return ; + auto r = diameter / 2; + auto twopi = 2 * PI; + auto edges = 60; + std::vector points; + for (size_t i = 1; i <= 60; ++i){ + auto angle = i * twopi / edges; + points.push_back(Pointf(r*cos(angle), r*sin(angle))); + } + m_canvas->m_bed_shape = points; + } + +// $self->{on_change}->(); + update_preview(); +} + +// Loads an stl file, projects it to the XY plane and calculates a polygon. +void BedShapePanel::load_stl() +{ + t_file_wild_card vec_FILE_WILDCARDS = get_file_wild_card(); + std::vector file_types = { "known", "stl", "obj", "amf", "prusa"}; + wxString MODEL_WILDCARD; + for (auto file_type: file_types) + MODEL_WILDCARD += vec_FILE_WILDCARDS.at(file_type) + "|"; + + auto dialog = new wxFileDialog(this, _L("Choose a file to import bed shape from (STL/OBJ/AMF/PRUSA):"), "", "", + MODEL_WILDCARD, wxFD_OPEN | wxFD_FILE_MUST_EXIST); + if (dialog->ShowModal() != wxID_OK) { + dialog->Destroy(); + return; + } + wxArrayString input_file; + dialog->GetPaths(input_file); + dialog->Destroy(); + + std::string file_name = input_file[0].ToStdString(); + + Model model; + try { + model = Model::read_from_file(file_name); + } + catch (std::exception &e) { + auto msg = _L("Error! ") + file_name + " : " + e.what() + "."; + show_error(this, msg); + exit(1); + } + + auto mesh = model.mesh(); + auto expolygons = mesh.horizontal_projection(); + + if (expolygons.size() == 0) { + show_error(this, _L("The selected file contains no geometry.")); + return; + } + if (expolygons.size() > 1) { + show_error(this, _L("The selected file contains several disjoint areas. This is not supported.")); + return; + } + + auto polygon = expolygons[0].contour; + std::vector points; + for (auto pt : polygon.points) + points.push_back(Pointf::new_unscale(pt)); + m_canvas->m_bed_shape = points; + update_preview(); +} + +} // GUI +} // Slic3r diff --git a/xs/src/slic3r/GUI/BedShapeDialog.hpp b/xs/src/slic3r/GUI/BedShapeDialog.hpp new file mode 100644 index 000000000..81b0a41e3 --- /dev/null +++ b/xs/src/slic3r/GUI/BedShapeDialog.hpp @@ -0,0 +1,51 @@ +// The bed shape dialog. +// The dialog opens from Print Settins tab->Bed Shape : Set... + +#include "OptionsGroup.hpp" +#include "2DBed.hpp" + + +#include +#include + +namespace Slic3r { +namespace GUI { + +using ConfigOptionsGroupShp = std::shared_ptr; +class BedShapePanel : public wxPanel +{ + wxChoicebook* m_shape_options_book; + Bed_2D* m_canvas; + + std::vector m_optgroups; + +public: + BedShapePanel(wxWindow* parent) : wxPanel(parent, wxID_ANY){} + ~BedShapePanel(){} + + void build_panel(ConfigOptionPoints* default_pt); + + ConfigOptionsGroupShp init_shape_options_page(wxString title); + void set_shape(ConfigOptionPoints* points); + void update_preview(); + void update_shape(); + void load_stl(); + + // Returns the resulting bed shape polygon. This value will be stored to the ini file. + std::vector GetValue() { return m_canvas->m_bed_shape; } +}; + +class BedShapeDialog : public wxDialog +{ + BedShapePanel* m_panel; +public: + BedShapeDialog(wxWindow* parent) : wxDialog(parent, wxID_ANY, _L("Bed Shape"), + wxDefaultPosition, wxSize(350, 700), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER){} + ~BedShapeDialog(){ } + + void build_dialog(ConfigOptionPoints* default_pt); + std::vector GetValue() { return m_panel->GetValue(); } +}; + +} // GUI +} // Slic3r diff --git a/xs/src/slic3r/GUI/ConfigExceptions.hpp b/xs/src/slic3r/GUI/ConfigExceptions.hpp new file mode 100644 index 000000000..9038d3445 --- /dev/null +++ b/xs/src/slic3r/GUI/ConfigExceptions.hpp @@ -0,0 +1,15 @@ +#include +namespace Slic3r { + +class ConfigError : public std::runtime_error { +using std::runtime_error::runtime_error; +}; + +namespace GUI { + +class ConfigGUITypeError : public ConfigError { +using ConfigError::ConfigError; +}; +} + +} diff --git a/xs/src/slic3r/GUI/Field.cpp b/xs/src/slic3r/GUI/Field.cpp new file mode 100644 index 000000000..330af6d0a --- /dev/null +++ b/xs/src/slic3r/GUI/Field.cpp @@ -0,0 +1,570 @@ +#include "GUI.hpp"//"slic3r_gui.hpp" +#include "Field.hpp" + +//#include +#include +#include +#include +#include "PrintConfig.hpp" +#include + +namespace Slic3r { namespace GUI { + + void Field::on_kill_focus(wxEvent& event) { + // Without this, there will be nasty focus bugs on Windows. + // Also, docs for wxEvent::Skip() say "In general, it is recommended to skip all + // non-command events to allow the default handling to take place." + event.Skip(); + std::cerr << "calling Field::on_kill_focus from " << m_opt_id<< "\n"; + // call the registered function if it is available + if (m_on_kill_focus!=nullptr) + m_on_kill_focus(); + } + void Field::on_change_field() + { +// std::cerr << "calling Field::_on_change \n"; + if (m_on_change != nullptr && !m_disable_change_event) + m_on_change(m_opt_id, get_value()); + } + + wxString Field::get_tooltip_text(const wxString& default_string) + { + wxString tooltip_text(""); + wxString tooltip = wxString::FromUTF8(m_opt.tooltip.c_str()); + if (tooltip.length() > 0) + tooltip_text = tooltip + "(" + _L("default") + ": " + + (boost::iends_with(m_opt_id, "_gcode") ? "\n" : "") + + default_string + ")"; + + return tooltip_text; + } + + bool Field::is_matched(std::string string, std::string pattern) + { + std::regex regex_pattern(pattern, std::regex_constants::icase); // use ::icase to make the matching case insensitive like /i in perl + return std::regex_match(string, regex_pattern); + } + + boost::any Field::get_value_by_opt_type(wxString str, ConfigOptionType type) + { + boost::any ret_val; + switch (m_opt.type){ + case coInt: + ret_val = wxAtoi(str); + break; + case coPercent: + case coPercents: + case coFloats: + case coFloat:{ + if (m_opt.type == coPercent) str.RemoveLast(); + double val; + str.ToCDouble(&val); + ret_val = val; + break; } + case coString: + case coStrings: + ret_val = str.ToStdString(); + break; + case coFloatOrPercent:{ + if (str.Last() == '%') + str.RemoveLast(); + double val; + str.ToCDouble(&val); + ret_val = val; + break; + } + default: + break; + } + + return ret_val; + } + + void TextCtrl::BUILD() { + auto size = wxSize(wxDefaultSize); + if (m_opt.height >= 0) size.SetHeight(m_opt.height); + if (m_opt.width >= 0) size.SetWidth(m_opt.width); + + wxString text_value = wxString(""); + + switch (m_opt.type) { + case coFloatOrPercent: + { + if (static_cast(m_opt.default_value)->percent) + { + text_value = wxString::Format(_T("%i"), int(m_opt.default_value->getFloat())); + text_value += "%"; + } + else + text_value = wxNumberFormatter::ToString(m_opt.default_value->getFloat(), 2); + break; + } + case coPercent: + { + text_value = wxString::Format(_T("%i"), int(m_opt.default_value->getFloat())); + text_value += "%"; + break; + } + case coPercents: + { + const ConfigOptionPercents *vec = static_cast(m_opt.default_value); + if (vec == nullptr || vec->empty()) break; + if (vec->size() > 1) + break; + double val = vec->get_at(0); + text_value = val - int(val) == 0 ? wxString::Format(_T("%i"), int(val)) : wxNumberFormatter::ToString(val, 2, wxNumberFormatter::Style_None); + break; + } + case coFloat: + { + double val = m_opt.default_value->getFloat(); + text_value = (val - int(val)) == 0 ? wxString::Format(_T("%i"), int(val)) : wxNumberFormatter::ToString(val, 2, wxNumberFormatter::Style_None); + break; + } + case coFloats: + { + const ConfigOptionFloats *vec = static_cast(m_opt.default_value); + if (vec == nullptr || vec->empty()) break; + if (vec->size() > 1) + break; + double val = vec->get_at(0); + text_value = val - int(val) == 0 ? wxString::Format(_T("%i"), int(val)) : wxNumberFormatter::ToString(val, 2, wxNumberFormatter::Style_None); + break; + } + case coString: + text_value = static_cast(m_opt.default_value)->value; + break; + case coStrings: + { + const ConfigOptionStrings *vec = static_cast(m_opt.default_value); + if (vec == nullptr || vec->empty()) break; + if (vec->size() > 1) + break; + text_value = vec->values.at(0); + break; + } + default: + break; + } + + auto temp = new wxTextCtrl(m_parent, wxID_ANY, text_value, wxDefaultPosition, size, (m_opt.multiline ? wxTE_MULTILINE : 0)); + + temp->SetToolTip(get_tooltip_text(text_value)); + + temp->Bind(wxEVT_LEFT_DOWN, ([temp](wxEvent& event) + { + //! to allow the default handling + event.Skip(); + //! eliminating the g-code pop up text description + temp->GetToolTip()->Enable(false); + }), temp->GetId()); + + temp->Bind(wxEVT_KILL_FOCUS, ([this, temp](wxEvent& e) + { + on_kill_focus(e); + temp->GetToolTip()->Enable(true); + }), temp->GetId()); + + temp->Bind(wxEVT_TEXT, ([this](wxCommandEvent) { on_change_field(); }), temp->GetId()); + + // recast as a wxWindow to fit the calling convention + window = dynamic_cast(temp); + } + + boost::any TextCtrl::get_value() + { + wxString ret_str = static_cast(window)->GetValue(); + boost::any ret_val = get_value_by_opt_type(ret_str, m_opt.type); + + return ret_val; + } + + void TextCtrl::enable() { dynamic_cast(window)->Enable(); dynamic_cast(window)->SetEditable(true); } + void TextCtrl::disable() { dynamic_cast(window)->Disable(); dynamic_cast(window)->SetEditable(false); } + +void CheckBox::BUILD() { + auto size = wxSize(wxDefaultSize); + if (m_opt.height >= 0) size.SetHeight(m_opt.height); + if (m_opt.width >= 0) size.SetWidth(m_opt.width); + + bool check_value = m_opt.type == coBool ? + m_opt.default_value->getBool() : m_opt.type == coBools ? + static_cast(m_opt.default_value)->values.at(0) : + false; + + auto temp = new wxCheckBox(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size); + temp->SetValue(check_value); + if (m_opt.readonly) temp->Disable(); + + temp->Bind(wxEVT_CHECKBOX, ([this](wxCommandEvent e) { on_change_field(); }), temp->GetId()); + + temp->SetToolTip(get_tooltip_text(check_value ? "true" : "false")); + + // recast as a wxWindow to fit the calling convention + window = dynamic_cast(temp); +} + +int undef_spin_val = -9999; //! Probably, It's not necessary + +void SpinCtrl::BUILD() { + auto size = wxSize(wxDefaultSize); + if (m_opt.height >= 0) size.SetHeight(m_opt.height); + if (m_opt.width >= 0) size.SetWidth(m_opt.width); + + wxString text_value = wxString(""); + int default_value = 0; + + switch (m_opt.type) { + case coInt: + default_value = m_opt.default_value->getInt(); + text_value = wxString::Format(_T("%i"), default_value); + break; + case coInts: + { + const ConfigOptionInts *vec = static_cast(m_opt.default_value); + if (vec == nullptr || vec->empty()) break; + for (size_t id = 0; id < vec->size(); ++id) + { + default_value = vec->get_at(id); + text_value += wxString::Format(_T("%i"), default_value); + } + break; + } + default: + break; + } + + auto temp = new wxSpinCtrl(m_parent, wxID_ANY, text_value, wxDefaultPosition, size, + 0, m_opt.min >0 ? m_opt.min : 0, m_opt.max < 2147483647 ? m_opt.max : 2147483647, default_value); + + temp->Bind(wxEVT_SPINCTRL, ([this](wxCommandEvent e) { tmp_value = undef_spin_val; on_change_field(); }), temp->GetId()); + temp->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) { tmp_value = undef_spin_val; on_kill_focus(e); }), temp->GetId()); + temp->Bind(wxEVT_TEXT, ([this](wxCommandEvent e) + { +// # On OSX / Cocoa, wxSpinCtrl::GetValue() doesn't return the new value +// # when it was changed from the text control, so the on_change callback +// # gets the old one, and on_kill_focus resets the control to the old value. +// # As a workaround, we get the new value from $event->GetString and store +// #here temporarily so that we can return it from $self->get_value + std::string value = e.GetString().utf8_str().data(); + if (is_matched(value, "^\\d+$")) + tmp_value = std::stoi(value); + on_change_field(); +// # We don't reset tmp_value here because _on_change might put callbacks +// # in the CallAfter queue, and we want the tmp value to be available from +// # them as well. + }), temp->GetId()); + + temp->SetToolTip(get_tooltip_text(text_value)); + + // recast as a wxWindow to fit the calling convention + window = dynamic_cast(temp); +} + +void Choice::BUILD() { + auto size = wxSize(wxDefaultSize); + if (m_opt.height >= 0) size.SetHeight(m_opt.height); + if (m_opt.width >= 0) size.SetWidth(m_opt.width); + + wxComboBox* temp; + if (!m_opt.gui_type.empty() && m_opt.gui_type.compare("select_open") != 0) + temp = new wxComboBox(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size); + else + temp = new wxComboBox(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, NULL, wxCB_READONLY); + + // recast as a wxWindow to fit the calling convention + window = dynamic_cast(temp); + + if (m_opt.enum_labels.empty() && m_opt.enum_values.empty()){ + } + else{ + for (auto el : m_opt.enum_labels.empty() ? m_opt.enum_values : m_opt.enum_labels) + temp->Append(wxString(el)); + set_selection(); + } + temp->Bind(wxEVT_TEXT, ([this](wxCommandEvent e) { on_change_field(); }), temp->GetId()); + temp->Bind(wxEVT_COMBOBOX, ([this](wxCommandEvent e) { on_change_field(); }), temp->GetId()); + + temp->SetToolTip(get_tooltip_text(temp->GetValue())); +} + +void Choice::set_selection() +{ + wxString text_value = wxString(""); + switch (m_opt.type){ + case coFloat: + case coPercent: { + double val = m_opt.default_value->getFloat(); + text_value = val - int(val) == 0 ? wxString::Format(_T("%i"), int(val)) : wxNumberFormatter::ToString(val, 1); + size_t idx = 0; + for (auto el : m_opt.enum_values) + { + if (el.compare(text_value) == 0) + break; + ++idx; + } + if (m_opt.type == coPercent) text_value += "%"; + idx == m_opt.enum_values.size() ? + dynamic_cast(window)->SetValue(text_value) : + dynamic_cast(window)->SetSelection(idx); + break; + } + case coEnum:{ + int id_value = static_cast*>(m_opt.default_value)->value; //!! + dynamic_cast(window)->SetSelection(id_value); + break; + } + case coInt:{ + int val = m_opt.default_value->getInt(); //!! + text_value = wxString::Format(_T("%i"), int(val)); + size_t idx = 0; + for (auto el : m_opt.enum_values) + { + if (el.compare(text_value) == 0) + break; + ++idx; + } + idx == m_opt.enum_values.size() ? + dynamic_cast(window)->SetValue(text_value) : + dynamic_cast(window)->SetSelection(idx); + break; + } + case coStrings:{ + text_value = static_cast(m_opt.default_value)->values.at(0); + + size_t idx = 0; + for (auto el : m_opt.enum_values) + { + if (el.compare(text_value) == 0) + break; + ++idx; + } + idx == m_opt.enum_values.size() ? + dynamic_cast(window)->SetValue(text_value) : + dynamic_cast(window)->SetSelection(idx); + break; + } + } +} + +void Choice::set_value(const std::string value) //! Redundant? +{ + m_disable_change_event = true; + + size_t idx=0; + for (auto el : m_opt.enum_values) + { + if (el.compare(value) == 0) + break; + ++idx; + } + + idx == m_opt.enum_values.size() ? + dynamic_cast(window)->SetValue(value) : + dynamic_cast(window)->SetSelection(idx); + + m_disable_change_event = false; +} + +void Choice::set_value(boost::any value) +{ + m_disable_change_event = true; + + switch (m_opt.type){ + case coInt: + case coFloat: + case coPercent: + case coStrings:{ + wxString text_value; + if (m_opt.type == coInt) + text_value = wxString::Format(_T("%i"), int(boost::any_cast(value))); + else + text_value = boost::any_cast(value); + auto idx = 0; + for (auto el : m_opt.enum_values) + { + if (el.compare(text_value) == 0) + break; + ++idx; + } + if (m_opt.type == coPercent) text_value += "%"; + idx == m_opt.enum_values.size() ? + dynamic_cast(window)->SetValue(text_value) : + dynamic_cast(window)->SetSelection(idx); + break; + } + case coEnum:{ + dynamic_cast(window)->SetSelection(boost::any_cast(value)); + break; + } + default: + break; + } + + m_disable_change_event = false; +} + +//! it's needed for _update_serial_ports() +void Choice::set_values(const std::vector values) +{ + if (values.empty()) + return; + m_disable_change_event = true; + +// #it looks that Clear() also clears the text field in recent wxWidgets versions, +// # but we want to preserve it + auto ww = dynamic_cast(window); + auto value = ww->GetValue(); + ww->Clear(); + for (auto el : values) + ww->Append(wxString(el)); + ww->SetValue(value); + + m_disable_change_event = false; +} + +boost::any Choice::get_value() +{ + boost::any ret_val; + wxString ret_str = static_cast(window)->GetValue(); + + if (m_opt.type != coEnum) + ret_val = get_value_by_opt_type(ret_str, m_opt.type); + else + { + int ret_enum = static_cast(window)->GetSelection(); + if (m_opt_id.compare("external_fill_pattern") == 0) + { + if (!m_opt.enum_values.empty()){ + std::string key = m_opt.enum_values[ret_enum]; + t_config_enum_values map_names = ConfigOptionEnum::get_enum_values(); + int value = map_names.at(key); + + ret_val = static_cast(value); + } + else + ret_val = static_cast(0); + } + if (m_opt_id.compare("fill_pattern") == 0) + ret_val = static_cast(ret_enum); + else if (m_opt_id.compare("gcode_flavor") == 0) + ret_val = static_cast(ret_enum); + else if (m_opt_id.compare("support_material_pattern") == 0) + ret_val = static_cast(ret_enum); + else if (m_opt_id.compare("seam_position") == 0) + ret_val = static_cast(ret_enum); + } + + return ret_val; +} + +void ColourPicker::BUILD() +{ + auto size = wxSize(wxDefaultSize); + if (m_opt.height >= 0) size.SetHeight(m_opt.height); + if (m_opt.width >= 0) size.SetWidth(m_opt.width); + + wxString clr(static_cast(m_opt.default_value)->values.at(0)); + auto temp = new wxColourPickerCtrl(m_parent, wxID_ANY, clr, wxDefaultPosition, size); + + // // recast as a wxWindow to fit the calling convention + window = dynamic_cast(temp); + + temp->Bind(wxEVT_COLOURPICKER_CHANGED, ([this](wxCommandEvent e) { on_change_field(); }), temp->GetId()); + + temp->SetToolTip(get_tooltip_text(clr)); +} + +boost::any ColourPicker::get_value(){ + boost::any ret_val; + + auto colour = static_cast(window)->GetColour(); + auto clr_str = wxString::Format(wxT("#%02X%02X%02X"), colour.Red(), colour.Green(), colour.Blue()); + ret_val = clr_str.ToStdString(); + + return ret_val; +} + +void PointCtrl::BUILD() +{ + auto size = wxSize(wxDefaultSize); + if (m_opt.height >= 0) size.SetHeight(m_opt.height); + if (m_opt.width >= 0) size.SetWidth(m_opt.width); + + auto temp = new wxBoxSizer(wxHORIZONTAL); + // $self->wxSizer($sizer); + // + wxSize field_size(40, -1); + + auto default_pt = static_cast(m_opt.default_value)->values.at(0); + double val = default_pt.x; + wxString X = val - int(val) == 0 ? wxString::Format(_T("%i"), int(val)) : wxNumberFormatter::ToString(val, 2, wxNumberFormatter::Style_None); + val = default_pt.y; + wxString Y = val - int(val) == 0 ? wxString::Format(_T("%i"), int(val)) : wxNumberFormatter::ToString(val, 2, wxNumberFormatter::Style_None); + + x_textctrl = new wxTextCtrl(m_parent, wxID_ANY, X, wxDefaultPosition, field_size); + y_textctrl = new wxTextCtrl(m_parent, wxID_ANY, Y, wxDefaultPosition, field_size); + + temp->Add(new wxStaticText(m_parent, wxID_ANY, "x : "), 0, wxALIGN_CENTER_VERTICAL, 0); + temp->Add(x_textctrl); + temp->Add(new wxStaticText(m_parent, wxID_ANY, " y : "), 0, wxALIGN_CENTER_VERTICAL, 0); + temp->Add(y_textctrl); + + x_textctrl->Bind(wxEVT_TEXT, ([this](wxCommandEvent e) { on_change_field(); }), x_textctrl->GetId()); + y_textctrl->Bind(wxEVT_TEXT, ([this](wxCommandEvent e) { on_change_field(); }), y_textctrl->GetId()); + + // // recast as a wxWindow to fit the calling convention + sizer = dynamic_cast(temp); + + x_textctrl->SetToolTip(get_tooltip_text(X+", "+Y)); + y_textctrl->SetToolTip(get_tooltip_text(X+", "+Y)); +} + +void PointCtrl::set_value(const Pointf value) +{ + m_disable_change_event = true; + + double val = value.x; + x_textctrl->SetValue(val - int(val) == 0 ? wxString::Format(_T("%i"), int(val)) : wxNumberFormatter::ToString(val, 2, wxNumberFormatter::Style_None)); + val = value.y; + y_textctrl->SetValue(val - int(val) == 0 ? wxString::Format(_T("%i"), int(val)) : wxNumberFormatter::ToString(val, 2, wxNumberFormatter::Style_None)); + + m_disable_change_event = false; +} + +void PointCtrl::set_value(boost::any value) +{ + Pointf pt; + try + { + pt = boost::any_cast(value)->values.at(0); + } + catch (const std::exception &e) + { + try{ + pt = boost::any_cast(value); + } + catch (const std::exception &e) + { + std::cerr << "Error! Can't cast PointCtrl value" << m_opt_id << "\n"; + return; + } + } + set_value(pt); +} + +boost::any PointCtrl::get_value() +{ + Pointf ret_point; + double val; + x_textctrl->GetValue().ToDouble(&val); + ret_point.x = val; + y_textctrl->GetValue().ToDouble(&val); + ret_point.y = val; + return ret_point; +} + +} // GUI +} // Slic3r + + diff --git a/xs/src/slic3r/GUI/Field.hpp b/xs/src/slic3r/GUI/Field.hpp new file mode 100644 index 000000000..93ba32efd --- /dev/null +++ b/xs/src/slic3r/GUI/Field.hpp @@ -0,0 +1,270 @@ +#ifndef SLIC3R_GUI_FIELD_HPP +#define SLIC3R_GUI_FIELD_HPP + +#include +#ifndef WX_PRECOMP + #include +#endif + +#include +#include +#include + +#include +#include + +#include "../../libslic3r/libslic3r.h" +#include "../../libslic3r/Config.hpp" + +//#include "slic3r_gui.hpp" +#include "GUI.hpp" + +namespace Slic3r { namespace GUI { + +class Field; +using t_field = std::unique_ptr; +using t_kill_focus = std::function; +using t_change = std::function; + +class Field { +protected: + // factory function to defer and enforce creation of derived type. + virtual void PostInitialize() { BUILD(); } + + /// Finish constructing the Field's wxWidget-related properties, including setting its own sizer, etc. + virtual void BUILD() = 0; + + /// Call the attached on_kill_focus method. + //! It's important to use wxEvent instead of wxFocusEvent, + //! in another case we can't unfocused control at all + void on_kill_focus(wxEvent& event); + /// Call the attached on_change method. + void on_change_field(); + +public: + /// parent wx item, opportunity to refactor (probably not necessary - data duplication) + wxWindow* m_parent {nullptr}; + + /// Function object to store callback passed in from owning object. + t_kill_focus m_on_kill_focus {nullptr}; + + /// Function object to store callback passed in from owning object. + t_change m_on_change {nullptr}; + + // This is used to avoid recursive invocation of the field change/update by wxWidgets. + bool m_disable_change_event {false}; + + /// Copy of ConfigOption for deduction purposes + const ConfigOptionDef m_opt {ConfigOptionDef()}; + const t_config_option_key m_opt_id;//! {""}; + + /// Sets a value for this control. + /// subclasses should overload with a specific version + /// Postcondition: Method does not fire the on_change event. + virtual void set_value(boost::any value) = 0; + + /// Gets a boost::any representing this control. + /// subclasses should overload with a specific version + virtual boost::any get_value() = 0; + + virtual void enable() = 0; + virtual void disable() = 0; + + /// Fires the enable or disable function, based on the input. + inline void toggle(bool en) { en ? enable() : disable(); } + + virtual wxString get_tooltip_text(const wxString& default_string); + + Field(const ConfigOptionDef& opt, const t_config_option_key& id) : m_opt(opt), m_opt_id(id) {}; + Field(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : m_parent(parent), m_opt(opt), m_opt_id(id) {}; + + /// If you don't know what you are getting back, check both methods for nullptr. + virtual wxSizer* getSizer() { return nullptr; } + virtual wxWindow* getWindow() { return nullptr; } + + bool is_matched(std::string string, std::string pattern); + boost::any get_value_by_opt_type(wxString str, ConfigOptionType type); + + /// Factory method for generating new derived classes. + template + static t_field Create(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) // interface for creating shared objects + { + auto p = Slic3r::make_unique(parent, opt, id); + p->PostInitialize(); + return std::move(p); //!p; + } +}; + +/// Convenience function, accepts a const reference to t_field and checks to see whether +/// or not both wx pointers are null. +inline bool is_bad_field(const t_field& obj) { return obj->getSizer() == nullptr && obj->getWindow() == nullptr; } + +/// Covenience function to determine whether this field is a valid window field. +inline bool is_window_field(const t_field& obj) { return !is_bad_field(obj) && obj->getWindow() != nullptr; } + +/// Covenience function to determine whether this field is a valid sizer field. +inline bool is_sizer_field(const t_field& obj) { return !is_bad_field(obj) && obj->getSizer() != nullptr; } + +class TextCtrl : public Field { + using Field::Field; +public: + TextCtrl(const ConfigOptionDef& opt, const t_config_option_key& id) : Field(opt, id) {} + TextCtrl(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : Field(parent, opt, id) {} + + void BUILD(); + wxWindow* window {nullptr}; + + virtual void set_value(std::string value) { + m_disable_change_event = true; + dynamic_cast(window)->SetValue(wxString(value)); + m_disable_change_event = false; + } + virtual void set_value(boost::any value) { + m_disable_change_event = true; + dynamic_cast(window)->SetValue(boost::any_cast(value)); + m_disable_change_event = false; + } + + boost::any get_value() override; + + virtual void enable(); + virtual void disable(); + virtual wxWindow* getWindow() { return window; } +}; + +class CheckBox : public Field { + using Field::Field; +public: + CheckBox(const ConfigOptionDef& opt, const t_config_option_key& id) : Field(opt, id) {} + CheckBox(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : Field(parent, opt, id) {} + + wxWindow* window{ nullptr }; + void BUILD() override; + + void set_value(const bool value) { + m_disable_change_event = true; + dynamic_cast(window)->SetValue(value); + m_disable_change_event = false; + } + void set_value(boost::any value) { + m_disable_change_event = true; + dynamic_cast(window)->SetValue(boost::any_cast(value)); + m_disable_change_event = false; + } + boost::any get_value() override { + return boost::any(dynamic_cast(window)->GetValue()); + } + + void enable() override { dynamic_cast(window)->Enable(); } + void disable() override { dynamic_cast(window)->Disable(); } + wxWindow* getWindow() override { return window; } +}; + +class SpinCtrl : public Field { + using Field::Field; +public: + SpinCtrl(const ConfigOptionDef& opt, const t_config_option_key& id) : Field(opt, id), tmp_value(-9999) {} + SpinCtrl(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : Field(parent, opt, id), tmp_value(-9999) {} + + int tmp_value; + + wxWindow* window{ nullptr }; + void BUILD() override; + + void set_value(const std::string value) { + m_disable_change_event = true; + dynamic_cast(window)->SetValue(value); + m_disable_change_event = false; + } + void set_value(boost::any value) { + m_disable_change_event = true; + dynamic_cast(window)->SetValue(boost::any_cast(value)); + m_disable_change_event = false; + } + boost::any get_value() override { + return boost::any(dynamic_cast(window)->GetValue()); + } + + void enable() override { dynamic_cast(window)->Enable(); } + void disable() override { dynamic_cast(window)->Disable(); } + wxWindow* getWindow() override { return window; } +}; + +class Choice : public Field { + using Field::Field; +public: + Choice(const ConfigOptionDef& opt, const t_config_option_key& id) : Field(opt, id) {} + Choice(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : Field(parent, opt, id) {} + + wxWindow* window{ nullptr }; + void BUILD() override; + + void set_selection(); + void set_value(const std::string value); + void set_value(boost::any value); + void set_values(const std::vector values); + boost::any get_value() override; + + void enable() override { dynamic_cast(window)->Enable(); }; + void disable() override{ dynamic_cast(window)->Disable(); }; + wxWindow* getWindow() override { return window; } +}; + +class ColourPicker : public Field { + using Field::Field; +public: + ColourPicker(const ConfigOptionDef& opt, const t_config_option_key& id) : Field(opt, id) {} + ColourPicker(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : Field(parent, opt, id) {} + + wxWindow* window{ nullptr }; + void BUILD() override; + + void set_value(const std::string value) { + m_disable_change_event = true; + dynamic_cast(window)->SetColour(value); + m_disable_change_event = false; + } + void set_value(boost::any value) { + m_disable_change_event = true; + dynamic_cast(window)->SetColour(boost::any_cast(value)); + m_disable_change_event = false; + } + + boost::any get_value() override; + + void enable() override { dynamic_cast(window)->Enable(); }; + void disable() override{ dynamic_cast(window)->Disable(); }; + wxWindow* getWindow() override { return window; } +}; + +class PointCtrl : public Field { + using Field::Field; +public: + PointCtrl(const ConfigOptionDef& opt, const t_config_option_key& id) : Field(opt, id) {} + PointCtrl(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : Field(parent, opt, id) {} + + wxSizer* sizer{ nullptr }; + wxTextCtrl* x_textctrl; + wxTextCtrl* y_textctrl; + + void BUILD() override; + + void set_value(const Pointf value); + void set_value(boost::any value); + boost::any get_value() override; + + void enable() override { + x_textctrl->Enable(); + y_textctrl->Enable(); }; + void disable() override{ + x_textctrl->Disable(); + y_textctrl->Disable(); }; + wxSizer* getSizer() override { return sizer; } +}; + + +#endif +} // GUI +} // Slic3r + + diff --git a/xs/src/slic3r/GUI/GUI.cpp b/xs/src/slic3r/GUI/GUI.cpp index 809ee8508..0d7d58e0f 100644 --- a/xs/src/slic3r/GUI/GUI.cpp +++ b/xs/src/slic3r/GUI/GUI.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -12,21 +13,39 @@ #import #elif _WIN32 #include +// Undefine min/max macros incompatible with the standard library +// For example, std::numeric_limits::max() +// produces some weird errors +#ifdef min +#undef min +#endif +#ifdef max +#undef max +#endif #include "boost/nowide/convert.hpp" #pragma comment(lib, "user32.lib") #endif #include #include +#include +#include +#include #include #include #include #include #include #include +#include #include "wxExtensions.hpp" +#include "Tab.hpp" +#include "TabIface.hpp" +#include "AppConfig.hpp" +#include "Utils.hpp" + namespace Slic3r { namespace GUI { #if __APPLE__ @@ -153,6 +172,10 @@ wxApp *g_wxApp = nullptr; wxFrame *g_wxMainFrame = nullptr; wxNotebook *g_wxTabPanel = nullptr; +std::vector g_tabs_list; + +wxLocale* g_wxLocale; + void set_wxapp(wxApp *app) { g_wxApp = app; @@ -168,25 +191,292 @@ void set_tab_panel(wxNotebook *tab_panel) g_wxTabPanel = tab_panel; } -void add_debug_menu(wxMenuBar *menu) +std::vector& get_tabs_list() { -#if 0 - auto debug_menu = new wxMenu(); - debug_menu->Append(wxWindow::NewControlId(1), "Some debug"); - menu->Append(debug_menu, _T("&Debug")); -#endif + return g_tabs_list; } -void create_preset_tab(const char *name) +bool checked_tab(Tab* tab) { - auto *panel = new wxPanel(g_wxTabPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBK_LEFT | wxTAB_TRAVERSAL); - // Vertical sizer to hold the choice menu and the rest of the page. - auto *sizer = new wxBoxSizer(wxVERTICAL); - sizer->SetSizeHints(panel); - panel->SetSizer(sizer); - auto *button = new wxButton(panel, wxID_ANY, "Hello World", wxDefaultPosition, wxDefaultSize, 0); - sizer->Add(button, 0, 0, 0); - g_wxTabPanel->AddPage(panel, name); + bool ret = true; + if (find(g_tabs_list.begin(), g_tabs_list.end(), tab) == g_tabs_list.end()) + ret = false; + return ret; +} + +void delete_tab_from_list(Tab* tab) +{ + std::vector::iterator itr = find(g_tabs_list.begin(), g_tabs_list.end(), tab); + if (itr != g_tabs_list.end()) + g_tabs_list.erase(itr); +} + +bool select_language(wxArrayString & names, + wxArrayLong & identifiers) +{ + wxCHECK_MSG(names.Count() == identifiers.Count(), false, + _L("Array of language names and identifiers should have the same size.")); + int init_selection = 0; + long current_language = g_wxLocale ? g_wxLocale->GetLanguage() : wxLANGUAGE_UNKNOWN; + for (auto lang : identifiers){ + if (lang == current_language) + break; + else + ++init_selection; + } + if (init_selection == identifiers.size()) + init_selection = 0; + long index = wxGetSingleChoiceIndex(_L("Select the language"), _L("Language"), + names, init_selection); + if (index != -1) + { + g_wxLocale = new wxLocale; + g_wxLocale->Init(identifiers[index]); + g_wxLocale->AddCatalogLookupPathPrefix(wxPathOnly(localization_dir())); + g_wxLocale->AddCatalog(g_wxApp->GetAppName()); + return true; + } + return false; +} + +bool load_language() +{ + wxConfig config(g_wxApp->GetAppName()); + long language; + if (!config.Read(wxT("wxTranslation_Language"), + &language, wxLANGUAGE_UNKNOWN)) + { + language = wxLANGUAGE_UNKNOWN; + } + if (language == wxLANGUAGE_UNKNOWN) + return false; + wxArrayString names; + wxArrayLong identifiers; + get_installed_languages(names, identifiers); + for (size_t i = 0; i < identifiers.Count(); i++) + { + if (identifiers[i] == language) + { + g_wxLocale = new wxLocale; + g_wxLocale->Init(identifiers[i]); + g_wxLocale->AddCatalogLookupPathPrefix(wxPathOnly(localization_dir())); + g_wxLocale->AddCatalog(g_wxApp->GetAppName()); + return true; + } + } + return false; +} + +void save_language() +{ + wxConfig config(g_wxApp->GetAppName()); + long language = wxLANGUAGE_UNKNOWN; + if (g_wxLocale) { + language = g_wxLocale->GetLanguage(); + } + config.Write(wxT("wxTranslation_Language"), language); + config.Flush(); +} + +void get_installed_languages(wxArrayString & names, + wxArrayLong & identifiers) +{ + names.Clear(); + identifiers.Clear(); + + wxDir dir(wxPathOnly(localization_dir())); + wxString filename; + const wxLanguageInfo * langinfo; + wxString name = wxLocale::GetLanguageName(wxLANGUAGE_DEFAULT); + if (!name.IsEmpty()) + { + names.Add(_L("Default")); + identifiers.Add(wxLANGUAGE_DEFAULT); + } + for (bool cont = dir.GetFirst(&filename, wxEmptyString, wxDIR_DIRS); + cont; cont = dir.GetNext(&filename)) + { + wxLogTrace(wxTraceMask(), + "L10n: Directory found = \"%s\"", + filename.GetData()); + langinfo = wxLocale::FindLanguageInfo(filename); + if (langinfo != NULL) + { + auto full_file_name = dir.GetName() + wxFileName::GetPathSeparator() + + filename + wxFileName::GetPathSeparator() + + g_wxApp->GetAppName() + wxT(".mo"); + if (wxFileExists(full_file_name)) + { + names.Add(langinfo->Description); + identifiers.Add(langinfo->Language); + } + } + } +} + +void add_debug_menu(wxMenuBar *menu, int event_language_change) +{ +//#if 0 + auto local_menu = new wxMenu(); + local_menu->Append(wxWindow::NewControlId(1), _L("Change Application Language")); + local_menu->Bind(wxEVT_MENU, [event_language_change](wxEvent&){ + wxArrayString names; + wxArrayLong identifiers; + get_installed_languages(names, identifiers); + if (select_language(names, identifiers)){ + save_language(); + show_info(g_wxTabPanel, "Application will be restarted", "Attention!"); + if (event_language_change > 0) { + wxCommandEvent event(event_language_change); + g_wxApp->ProcessEvent(event); + } + } + }); + menu->Append(local_menu, _T("&Localization")); +//#endif +} + +void create_preset_tabs(PresetBundle *preset_bundle, AppConfig *app_config, + bool no_controller, bool is_disabled_button_browse, bool is_user_agent, + int event_value_change, int event_presets_changed, + int event_button_browse, int event_button_test) +{ + add_created_tab(new TabPrint (g_wxTabPanel, no_controller), preset_bundle, app_config); + add_created_tab(new TabFilament (g_wxTabPanel, no_controller), preset_bundle, app_config); + add_created_tab(new TabPrinter (g_wxTabPanel, no_controller, is_disabled_button_browse, is_user_agent), + preset_bundle, app_config); + for (size_t i = 0; i < g_wxTabPanel->GetPageCount(); ++ i) { + Tab *tab = dynamic_cast(g_wxTabPanel->GetPage(i)); + if (! tab) + continue; + tab->set_event_value_change(wxEventType(event_value_change)); + tab->set_event_presets_changed(wxEventType(event_presets_changed)); + if (tab->name() == "printer"){ + TabPrinter* tab_printer = static_cast(tab); + tab_printer->set_event_button_browse(wxEventType(event_button_browse)); + tab_printer->set_event_button_test(wxEventType(event_button_test)); + } + } +} + +TabIface* get_preset_tab_iface(char *name) +{ + for (size_t i = 0; i < g_wxTabPanel->GetPageCount(); ++ i) { + Tab *tab = dynamic_cast(g_wxTabPanel->GetPage(i)); + if (! tab) + continue; + if (tab->name() == name) { + return new TabIface(tab); + } + } + return new TabIface(nullptr); +} + +// opt_index = 0, by the reason of zero-index in ConfigOptionVector by default (in case only one element) +void change_opt_value(DynamicPrintConfig& config, t_config_option_key opt_key, boost::any value, int opt_index /*= 0*/) +{ + try{ + switch (config.def()->get(opt_key)->type){ + case coFloatOrPercent:{ + const auto &val = *config.option(opt_key); + config.set_key_value(opt_key, new ConfigOptionFloatOrPercent(boost::any_cast(value), val.percent)); + break;} + case coPercent: + config.set_key_value(opt_key, new ConfigOptionPercent(boost::any_cast(value))); + break; + case coFloat:{ + double& val = config.opt_float(opt_key); + val = boost::any_cast(value); + break; + } + case coPercents: + case coFloats:{ + double& val = config.opt_float(opt_key, 0); + val = boost::any_cast(value); + break; + } + case coString: + config.set_key_value(opt_key, new ConfigOptionString(boost::any_cast(value))); + break; + case coStrings:{ + if (opt_key.compare("compatible_printers") == 0){ + config.option(opt_key)->values.resize(0); + for (auto el : boost::any_cast>(value)) + config.option(opt_key)->values.push_back(el); + } + else{ + ConfigOptionStrings* vec_new = new ConfigOptionStrings{ boost::any_cast(value) }; + config.option(opt_key)->set_at(vec_new, opt_index, opt_index); + } + } + break; + case coBool: + config.set_key_value(opt_key, new ConfigOptionBool(boost::any_cast(value))); + break; + case coBools:{ + ConfigOptionBools* vec_new = new ConfigOptionBools{ boost::any_cast(value) }; + config.option(opt_key)->set_at(vec_new, opt_index, opt_index); + break;} + case coInt: + config.set_key_value(opt_key, new ConfigOptionInt(boost::any_cast(value))); + break; + case coInts:{ + ConfigOptionInts* vec_new = new ConfigOptionInts{ boost::any_cast(value) }; + config.option(opt_key)->set_at(vec_new, opt_index, opt_index); + } + break; + case coEnum:{ + if (opt_key.compare("external_fill_pattern") == 0 || + opt_key.compare("fill_pattern") == 0) + config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); + else if (opt_key.compare("gcode_flavor") == 0) + config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); + else if (opt_key.compare("support_material_pattern") == 0) + config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); + else if (opt_key.compare("seam_position") == 0) + config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); + } + break; + case coPoints:{ + ConfigOptionPoints points; + points.values = boost::any_cast>(value); + config.set_key_value(opt_key, new ConfigOptionPoints(points)); + } + break; + case coNone: + break; + default: + break; + } + } + catch (const std::exception &e) + { + int i = 0;//no reason, just experiment + } +} + +void add_created_tab(Tab* panel, PresetBundle *preset_bundle, AppConfig *app_config) +{ + panel->m_show_btn_incompatible_presets = app_config->get("show_incompatible_presets").empty(); + panel->create_preset_tab(preset_bundle); + + // Load the currently selected preset into the GUI, update the preset selection box. + panel->load_current_preset(); + g_wxTabPanel->AddPage(panel, panel->title()); +} + +void show_error(wxWindow* parent, wxString message){ + auto msg_wingow = new wxMessageDialog(parent, message, _L("Error"), wxOK | wxICON_ERROR); + msg_wingow->ShowModal(); +} + +void show_info(wxWindow* parent, wxString message, wxString title){ + auto msg_wingow = new wxMessageDialog(parent, message, title.empty() ? _L("Notice") : title, wxOK | wxICON_INFORMATION); + msg_wingow->ShowModal(); +} + +wxApp* get_app(){ + return g_wxApp; } void create_combochecklist(wxComboCtrl* comboCtrl, std::string text, std::string items, bool initial_value) diff --git a/xs/src/slic3r/GUI/GUI.hpp b/xs/src/slic3r/GUI/GUI.hpp index f15ba15d6..14f429713 100644 --- a/xs/src/slic3r/GUI/GUI.hpp +++ b/xs/src/slic3r/GUI/GUI.hpp @@ -3,14 +3,50 @@ #include #include +#include "Config.hpp" class wxApp; class wxFrame; +class wxWindow; class wxMenuBar; class wxNotebook; class wxComboCtrl; +class wxString; +class wxArrayString; +class wxArrayLong; -namespace Slic3r { namespace GUI { +namespace Slic3r { + +class PresetBundle; +class PresetCollection; +class AppConfig; +class DynamicPrintConfig; +class TabIface; + +//! macro used to localization, return wxString +#define _L(s) wxGetTranslation(s) +//! macro used to localization, return const CharType * +#define _LU8(s) wxGetTranslation(s).ToUTF8().data() + +namespace GUI { + +class Tab; +// Map from an file_type name to full file wildcard name. +typedef std::map t_file_wild_card; +inline t_file_wild_card& get_file_wild_card() { + static t_file_wild_card FILE_WILDCARDS; + if (FILE_WILDCARDS.empty()){ + FILE_WILDCARDS["known"] = "Known files (*.stl, *.obj, *.amf, *.xml, *.prusa)|*.stl;*.STL;*.obj;*.OBJ;*.amf;*.AMF;*.xml;*.XML;*.prusa;*.PRUSA"; + FILE_WILDCARDS["stl"] = "STL files (*.stl)|*.stl;*.STL"; + FILE_WILDCARDS["obj"] = "OBJ files (*.obj)|*.obj;*.OBJ"; + FILE_WILDCARDS["amf"] = "AMF files (*.amf)|*.amf;*.AMF;*.xml;*.XML"; + FILE_WILDCARDS["prusa"] = "Prusa Control files (*.prusa)|*.prusa;*.PRUSA"; + FILE_WILDCARDS["ini"] = "INI files *.ini|*.ini;*.INI"; + FILE_WILDCARDS["gcode"] = "G-code files (*.gcode, *.gco, *.g, *.ngc)|*.gcode;*.GCODE;*.gco;*.GCO;*.g;*.G;*.ngc;*.NGC"; + FILE_WILDCARDS["svg"] = "SVG files *.svg|*.svg;*.SVG"; + } + return FILE_WILDCARDS; +} void disable_screensaver(); void enable_screensaver(); @@ -23,10 +59,34 @@ void set_wxapp(wxApp *app); void set_main_frame(wxFrame *main_frame); void set_tab_panel(wxNotebook *tab_panel); -void add_debug_menu(wxMenuBar *menu); -// Create a new preset tab (print, filament or printer), +void add_debug_menu(wxMenuBar *menu, int event_language_change); +// Create a new preset tab (print, filament and printer), +void create_preset_tabs(PresetBundle *preset_bundle, AppConfig *app_config, + bool no_controller, bool is_disabled_button_browse, bool is_user_agent, + int event_value_change, int event_presets_changed, + int event_button_browse, int event_button_test); +TabIface* get_preset_tab_iface(char *name); + // add it at the end of the tab panel. -void create_preset_tab(const char *name); +void add_created_tab(Tab* panel, PresetBundle *preset_bundle, AppConfig *app_config); +// Change option value in config +void change_opt_value(DynamicPrintConfig& config, t_config_option_key opt_key, boost::any value, int opt_index = 0); + +void show_error(wxWindow* parent, wxString message); +void show_info(wxWindow* parent, wxString message, wxString title); + +// load language saved at application config +bool load_language(); +// save language at application config +void save_language(); +// get list of installed languages +void get_installed_languages(wxArrayString & names, wxArrayLong & identifiers); +// select language from the list of installed languages +bool select_language(wxArrayString & names, wxArrayLong & identifiers); + +std::vector& get_tabs_list(); +bool checked_tab(Tab* tab); +void delete_tab_from_list(Tab* tab); // Creates a wxCheckListBoxComboPopup inside the given wxComboCtrl, filled with the given text and items. // Items are all initialized to the given value. diff --git a/xs/src/slic3r/GUI/OptionsGroup.cpp b/xs/src/slic3r/GUI/OptionsGroup.cpp new file mode 100644 index 000000000..a6d91cfc1 --- /dev/null +++ b/xs/src/slic3r/GUI/OptionsGroup.cpp @@ -0,0 +1,410 @@ +#include "OptionsGroup.hpp" +#include "ConfigExceptions.hpp" + +#include +#include +#include + +namespace Slic3r { namespace GUI { + +const t_field& OptionsGroup::build_field(const Option& opt) { + return build_field(opt.opt_id, opt.opt); +} +const t_field& OptionsGroup::build_field(const t_config_option_key& id) { + const ConfigOptionDef& opt = m_options.at(id).opt; + return build_field(id, opt); +} + +const t_field& OptionsGroup::build_field(const t_config_option_key& id, const ConfigOptionDef& opt) { + // Check the gui_type field first, fall through + // is the normal type. + if (opt.gui_type.compare("select") == 0) { + } else if (opt.gui_type.compare("select_open") == 0) { + m_fields.emplace(id, STDMOVE(Choice::Create(m_parent, opt, id))); + } else if (opt.gui_type.compare("color") == 0) { + m_fields.emplace(id, STDMOVE(ColourPicker::Create(m_parent, opt, id))); + } else if (opt.gui_type.compare("f_enum_open") == 0 || + opt.gui_type.compare("i_enum_open") == 0 || + opt.gui_type.compare("i_enum_closed") == 0) { + m_fields.emplace(id, STDMOVE(Choice::Create(m_parent, opt, id))); + } else if (opt.gui_type.compare("slider") == 0) { + } else if (opt.gui_type.compare("i_spin") == 0) { // Spinctrl + } else { + switch (opt.type) { + case coFloatOrPercent: + case coFloat: + case coFloats: + case coPercent: + case coPercents: + case coString: + case coStrings: + m_fields.emplace(id, STDMOVE(TextCtrl::Create(m_parent, opt, id))); + break; + case coBool: + case coBools: + m_fields.emplace(id, STDMOVE(CheckBox::Create(m_parent, opt, id))); + break; + case coInt: + case coInts: + m_fields.emplace(id, STDMOVE(SpinCtrl::Create(m_parent, opt, id))); + break; + case coEnum: + m_fields.emplace(id, STDMOVE(Choice::Create(m_parent, opt, id))); + break; + case coPoints: + m_fields.emplace(id, STDMOVE(PointCtrl::Create(m_parent, opt, id))); + break; + case coNone: break; + default: + throw /*//!ConfigGUITypeError("")*/std::logic_error("This control doesn't exist till now"); break; + } + } + // Grab a reference to fields for convenience + const t_field& field = m_fields[id]; + field->m_on_change = [this](std::string opt_id, boost::any value){ + //! This function will be called from Field. + //! Call OptionGroup._on_change(...) + if (!this->m_disabled) + this->on_change_OG(opt_id, value); + }; + field->m_on_kill_focus = [this](){ + //! This function will be called from Field. + if (!this->m_disabled) + this->on_kill_focus(); + }; + field->m_parent = parent(); + // assign function objects for callbacks, etc. + return field; +} + +void OptionsGroup::append_line(const Line& line) { +//! if (line.sizer != nullptr || (line.widget != nullptr && line.full_width > 0)){ + if ( (line.sizer != nullptr || line.widget != nullptr) && line.full_width){ + if (line.sizer != nullptr) { + sizer->Add(line.sizer, 0, wxEXPAND | wxALL, wxOSX ? 0 : 15); + return; + } + if (line.widget != nullptr) { + sizer->Add(line.widget(m_parent), 0, wxEXPAND | wxALL, wxOSX ? 0 : 15); + return; + } + } + + auto option_set = line.get_options(); + for (auto opt : option_set) + m_options.emplace(opt.opt_id, opt); + + // if we have a single option with no label, no sidetext just add it directly to sizer + if (option_set.size() == 1 && label_width == 0 && option_set.front().opt.full_width && + option_set.front().opt.sidetext.size() == 0 && option_set.front().side_widget == nullptr && + line.get_extra_widgets().size() == 0) { + const auto& option = option_set.front(); + const auto& field = build_field(option); + + if (is_window_field(field)) + sizer->Add(field->getWindow(), 0, wxEXPAND | wxALL, wxOSX ? 0 : 5); + if (is_sizer_field(field)) + sizer->Add(field->getSizer(), 0, wxEXPAND | wxALL, wxOSX ? 0 : 5); + return; + } + + auto grid_sizer = m_grid_sizer; + + // Build a label if we have it + if (label_width != 0) { + auto label = new wxStaticText(parent(), wxID_ANY, line.label + (line.label.IsEmpty() ? "" : ":"), + wxDefaultPosition, wxSize(label_width, -1)); + label->SetFont(label_font); + label->Wrap(label_width); // avoid a Linux/GTK bug + grid_sizer->Add(label, 0, wxALIGN_CENTER_VERTICAL,0); + if (line.label_tooltip.compare("") != 0) + label->SetToolTip(line.label_tooltip); + } + + // If there's a widget, build it and add the result to the sizer. + if (line.widget != nullptr) { + auto wgt = line.widget(parent()); + grid_sizer->Add(wgt, 0, wxEXPAND | wxBOTTOM | wxTOP, wxOSX ? 0 : 5); + return; + } + + // if we have a single option with no sidetext just add it directly to the grid sizer + if (option_set.size() == 1 && option_set.front().opt.sidetext.size() == 0 && + option_set.front().side_widget == nullptr && line.get_extra_widgets().size() == 0) { + const auto& option = option_set.front(); + const auto& field = build_field(option); +//! std::cerr << "single option, no sidetext.\n"; +//! std::cerr << "field parent is not null?: " << (field->parent != nullptr) << "\n"; + + if (is_window_field(field)) + grid_sizer->Add(field->getWindow(), 0, (option.opt.full_width ? wxEXPAND : 0) | + wxBOTTOM | wxTOP | wxALIGN_CENTER_VERTICAL, wxOSX ? 0 : 2); + if (is_sizer_field(field)) + grid_sizer->Add(field->getSizer(), 0, (option.opt.full_width ? wxEXPAND : 0) | wxALIGN_CENTER_VERTICAL, 0); + return; + } + + // if we're here, we have more than one option or a single option with sidetext + // so we need a horizontal sizer to arrange these things + auto sizer = new wxBoxSizer(wxHORIZONTAL); + grid_sizer->Add(sizer, 0, wxEXPAND | wxALL, 0); + for (auto opt : option_set) { + ConfigOptionDef option = opt.opt; + // add label if any + if (option.label != "") { + auto field_label = new wxStaticText(parent(), wxID_ANY, wxString::FromUTF8(option.label.c_str()) + ":", wxDefaultPosition, wxDefaultSize); + field_label->SetFont(label_font); + sizer->Add(field_label, 0, wxALIGN_CENTER_VERTICAL, 0); + } + + // add field + const Option& opt_ref = opt; + auto& field = build_field(opt_ref); + is_sizer_field(field) ? + sizer->Add(field->getSizer(), 0, wxALIGN_CENTER_VERTICAL, 0) : + sizer->Add(field->getWindow(), 0, wxALIGN_CENTER_VERTICAL, 0); + + // add sidetext if any + if (option.sidetext != "") { + auto sidetext = new wxStaticText(parent(), wxID_ANY, wxString::FromUTF8(option.sidetext.c_str()), wxDefaultPosition, wxDefaultSize); + sidetext->SetFont(sidetext_font); + sizer->Add(sidetext, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 4); + } + + // add side widget if any + if (opt.side_widget != nullptr) { + sizer->Add(opt.side_widget(parent())/*!.target()*/, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 1); //! requires verification + } + + if (opt.opt_id != option_set.back().opt_id) //! istead of (opt != option_set.back()) + { + sizer->AddSpacer(6); + } + } + // add extra sizers if any + for (auto extra_widget : line.get_extra_widgets()) { + sizer->Add(extra_widget(parent())/*!.target()*/, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 4); //! requires verification + } +} + +Line OptionsGroup::create_single_option_line(const Option& option) const { + Line retval{ wxString::FromUTF8(option.opt.label.c_str()), wxString::FromUTF8(option.opt.tooltip.c_str()) }; + Option tmp(option); + tmp.opt.label = std::string(""); + retval.append_option(tmp); + return retval; +} + +void OptionsGroup::on_change_OG(t_config_option_key id, /*config_value*/boost::any value) { + if (m_on_change != nullptr) + m_on_change(id, value); +} + +Option ConfigOptionsGroup::get_option(const std::string opt_key, int opt_index /*= -1*/) +{ + if (!m_config->has(opt_key)) { + //! exception ("No $opt_key in ConfigOptionsGroup config"); + } + + std::string opt_id = opt_index == -1 ? opt_key : opt_key + "#" + std::to_string(opt_index); + std::pair pair(opt_key, opt_index); + m_opt_map.emplace(opt_id, pair); + + return Option(*m_config->def()->get(opt_key), opt_id); +} + +void ConfigOptionsGroup::on_change_OG(t_config_option_key opt_id, boost::any value) +{ + if (!m_opt_map.empty()) + { + auto it = m_opt_map.find(opt_id); + if (it == m_opt_map.end()) + { + OptionsGroup::on_change_OG(opt_id, value); + return; + } + + auto itOption = it->second; + std::string opt_key = itOption.first; + int opt_index = itOption.second; + + auto option = m_options.at(opt_id).opt; + + // get value +//! auto field_value = get_value(opt_id); + if (option.gui_flags.compare("serialized")==0) { + if (opt_index != -1){ + // die "Can't set serialized option indexed value" ; + } + // # Split a string to multiple strings by a semi - colon.This is the old way of storing multi - string values. + // # Currently used for the post_process config value only. + // my @values = split / ; / , $field_value; + // $self->config->set($opt_key, \@values); + } + else { + if (opt_index == -1) { + // change_opt_value(*m_config, opt_key, field_value); + //!? why field_value?? in this case changed value will be lose! No? + change_opt_value(*m_config, opt_key, value); + } + else { + change_opt_value(*m_config, opt_key, value, opt_index); +// auto value = m_config->get($opt_key); +// $value->[$opt_index] = $field_value; +// $self->config->set($opt_key, $value); + } + } + } + + OptionsGroup::on_change_OG(opt_id, value); //!? Why doing this +} + +void ConfigOptionsGroup::reload_config(){ + for (std::map< std::string, std::pair >::iterator it = m_opt_map.begin(); it != m_opt_map.end(); ++it) { + auto opt_id = it->first; + std::string opt_key = m_opt_map.at(opt_id).first; + int opt_index = m_opt_map.at(opt_id).second; + auto option = m_options.at(opt_id).opt; + set_value(opt_id, config_value(opt_key, opt_index, option.gui_flags.compare("serialized") == 0 )); + } + +} + +boost::any ConfigOptionsGroup::config_value(std::string opt_key, int opt_index, bool deserialize){ + + if (deserialize) { + // Want to edit a vector value(currently only multi - strings) in a single edit box. + // Aggregate the strings the old way. + // Currently used for the post_process config value only. + if (opt_index != -1) + throw std::out_of_range("Can't deserialize option indexed value"); +// return join(';', m_config->get(opt_key)}); + return get_config_value(*m_config, opt_key); + } + else { +// return opt_index == -1 ? m_config->get(opt_key) : m_config->get_at(opt_key, opt_index); + return get_config_value(*m_config, opt_key, opt_index); + } +} + +wxString double_to_string(double const value) +{ + int precision = 10 * value - int(10 * value) == 0 ? 1 : 2; + return value - int(value) == 0 ? + wxString::Format(_T("%i"), int(value)) : + wxNumberFormatter::ToString(value, precision, wxNumberFormatter::Style_None); +} + +boost::any ConfigOptionsGroup::get_config_value(DynamicPrintConfig& config, std::string opt_key, int opt_index/* = -1*/) +{ + size_t idx = opt_index == -1 ? 0 : opt_index; + + boost::any ret; + wxString text_value = wxString(""); + const ConfigOptionDef* opt = config.def()->get(opt_key); + switch (opt->type){ + case coFloatOrPercent:{ + const auto &value = *config.option(opt_key); + if (value.percent) + { + text_value = wxString::Format(_T("%i"), int(value.value)); + text_value += "%"; + } + else + text_value = double_to_string(value.value); + ret = text_value; + break; + } + case coPercent:{ + double val = config.option(opt_key)->value; + text_value = wxString::Format(_T("%i"), int(val)); + ret = text_value;// += "%"; + } + break; + case coPercents: + case coFloats: + case coFloat:{ + double val = opt->type == coFloats ? + config.opt_float(opt_key, idx/*0opt_index*/) : + opt->type == coFloat ? config.opt_float(opt_key) : + config.option(opt_key)->values.at(idx/*0*/); + ret = double_to_string(val); + } + break; + case coString: + ret = static_cast(config.opt_string(opt_key)); + break; + case coStrings: + if (config.option(opt_key)->values.empty()) + ret = text_value; + else + ret = static_cast(config.opt_string(opt_key, static_cast(idx/*0*/)/*opt_index*/)); + break; + case coBool: + ret = config.opt_bool(opt_key); + break; + case coBools: + ret = config.opt_bool(opt_key, idx/*0opt_index*/); + break; + case coInt: + ret = config.opt_int(opt_key); + break; + case coInts: + ret = config.opt_int(opt_key, idx/*0/*opt_index*/); + break; + case coEnum:{ + if (opt_key.compare("external_fill_pattern") == 0 || + opt_key.compare("fill_pattern") == 0 ){ + ret = static_cast(config.option>(opt_key)->value); + } + else if (opt_key.compare("gcode_flavor") == 0 ){ + ret = static_cast(config.option>(opt_key)->value); + } + else if (opt_key.compare("support_material_pattern") == 0){ + ret = static_cast(config.option>(opt_key)->value); + } + else if (opt_key.compare("seam_position") == 0) + ret = static_cast(config.option>(opt_key)->value); + } + break; + case coPoints:{ + const auto &value = *config.option(opt_key); + ret = value.values.at(idx/*0*/); + } + break; + case coNone: + default: + break; + } + return ret; +} + +Field* ConfigOptionsGroup::get_fieldc(t_config_option_key opt_key, int opt_index){ + std::string opt_id = ""; + for (std::map< std::string, std::pair >::iterator it = m_opt_map.begin(); it != m_opt_map.end(); ++it) { + if (opt_key == m_opt_map.at(it->first).first && opt_index == m_opt_map.at(it->first).second){ + opt_id = it->first; + break; + } + } + return opt_id.empty() ? nullptr : get_field(opt_id); +} + +void ogStaticText::SetText(wxString value) +{ + SetLabel(value); + Wrap(400); + GetParent()->Layout(); +} + +void Option::translate() +{ + opt.label = _LU8(opt.label); + opt.tooltip = _LU8(opt.tooltip); + opt.sidetext = _LU8(opt.sidetext); + opt.full_label = _LU8(opt.full_label); + opt.category = _LU8(opt.category); +} + +} // GUI +} // Slic3r diff --git a/xs/src/slic3r/GUI/OptionsGroup.hpp b/xs/src/slic3r/GUI/OptionsGroup.hpp new file mode 100644 index 000000000..becc62d71 --- /dev/null +++ b/xs/src/slic3r/GUI/OptionsGroup.hpp @@ -0,0 +1,181 @@ +#include +#include +#include +//#include + +#include +#include + +#include "libslic3r/Config.hpp" +#include "libslic3r/PrintConfig.hpp" +#include "libslic3r/libslic3r.h" + +#include "Field.hpp" + +// Translate the ifdef +#ifdef __WXOSX__ + #define wxOSX true +#else + #define wxOSX false +#endif + +#define BORDER(a, b) ((wxOSX ? a : b)) + +namespace Slic3r { namespace GUI { + +/// Widget type describes a function object that returns a wxWindow (our widget) and accepts a wxWidget (parent window). +using widget_t = std::function;//!std::function; +using column_t = std::function; + +/// Wraps a ConfigOptionDef and adds function object for creating a side_widget. +struct Option { + ConfigOptionDef opt { ConfigOptionDef() }; + t_config_option_key opt_id;//! {""}; + widget_t side_widget {nullptr}; + bool readonly {false}; + + Option(const ConfigOptionDef& _opt, t_config_option_key id) : + opt(_opt), opt_id(id) { translate(); } + void translate(); +}; +using t_option = std::unique_ptr