diff --git a/Build.PL b/Build.PL index 31ec9cf82..e006d11eb 100644 --- a/Build.PL +++ b/Build.PL @@ -40,10 +40,7 @@ if ($gui) { Socket 2.016 ); %recommends = qw( - Growl::GNTP 0.15 Wx::GLCanvas 0 - LWP::UserAgent 0 - Net::Bonjour 0 ); if ($^O eq 'MSWin32') { $recommends{"Win32::TieRegistry"} = 0; diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b860068b..cb3d6dfd6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,18 +52,21 @@ endif() add_subdirectory(xs) +get_filename_component(PERL_BIN_PATH "${PERL_EXECUTABLE}" DIRECTORY) if (MSVC) # By default the startup project in MSVC is the 'ALL_BUILD' cmake-created project, # but we want 'slic3r' as the startup one because debugging run command is associated with it. # (Unfortunatelly it cannot be associated with ALL_BUILD using CMake.) # Note: For some reason this needs to be set in the top-level CMakeLists.txt set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT XS) + set(PERL_PROVE "${PERL_BIN_PATH}/prove.bat") +else () + set(PERL_PROVE "${PERL_BIN_PATH}/prove") endif () enable_testing () -get_filename_component(PERL_BIN_PATH "${PERL_EXECUTABLE}" DIRECTORY) -add_test (NAME xs COMMAND "${PERL_EXECUTABLE}" ${PERL_BIN_PATH}/prove -I ${PROJECT_SOURCE_DIR}/local-lib/lib/perl5 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/xs) -add_test (NAME integration COMMAND "${PERL_EXECUTABLE}" ${PERL_BIN_PATH}/prove WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) +add_test (NAME xs COMMAND "${PERL_EXECUTABLE}" ${PERL_PROVE} -I ${PROJECT_SOURCE_DIR}/local-lib/lib/perl5 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/xs) +add_test (NAME integration COMMAND "${PERL_EXECUTABLE}" ${PERL_PROVE} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) install(PROGRAMS slic3r.pl DESTINATION bin RENAME slic3r-prusa3d) diff --git a/doc/deps-build/unix-static/Makefile b/doc/deps-build/unix-static/Makefile index 71e46320b..21740bc53 100644 --- a/doc/deps-build/unix-static/Makefile +++ b/doc/deps-build/unix-static/Makefile @@ -67,13 +67,17 @@ $(TBB).tar.gz: curl -L -o $@ https://github.com/wjakob/tbb/archive/$(TBB_SHA).tar.gz +# Note: libcurl build system seems to be a bit wonky about finding openssl (cf. #2378). +# It seems that currently the only working option is to set a prefix in the openssl build +# and use the `--with-ssl=...` option in libcurl. +# Additionally, pkg-config needs to be installed and openssl libs need to NOT be installed on the build system. libopenssl: $(OPENSSL).tar.gz tar -zxvf $(OPENSSL).tar.gz - cd $(OPENSSL) && ./config --openssldir=/etc/ssl shared no-ssl3-method no-dynamic-engine '-Wa,--noexecstack' - make -C $(OPENSSL) depend - make -C $(OPENSSL) -j$(NPROC) - make -C $(OPENSSL) install DESTDIR=$(DESTDIR) + cd $(OPENSSL) && ./config --prefix=$(DESTDIR)/usr/local no-shared no-ssl3-method no-dynamic-engine '-Wa,--noexecstack' + $(MAKE) -C $(OPENSSL) depend + $(MAKE) -C $(OPENSSL) -j$(NPROC) + $(MAKE) -C $(OPENSSL) install_sw $(OPENSSL).tar.gz: curl -L -o $@ 'https://github.com/openssl/openssl/archive/OpenSSL_1_1_0g.tar.gz' @@ -82,10 +86,9 @@ $(OPENSSL).tar.gz: libcurl: libopenssl $(CURL).tar.gz tar -zxvf $(CURL).tar.gz -# Note: It seems setting custom openssl path doesn't work when pkg-config and system openssl devel libs are installed cd $(CURL) && ./configure \ --enable-static \ - --enable-shared \ + --disable-shared \ --with-ssl=$(DESTDIR)/usr/local \ --with-pic \ --enable-ipv6 \ diff --git a/lib/Slic3r/GUI.pm b/lib/Slic3r/GUI.pm index 7a3b30a6b..5ade026af 100644 --- a/lib/Slic3r/GUI.pm +++ b/lib/Slic3r/GUI.pm @@ -15,7 +15,6 @@ use Slic3r::GUI::Controller; use Slic3r::GUI::Controller::ManualControlDialog; use Slic3r::GUI::Controller::PrinterPanel; use Slic3r::GUI::MainFrame; -use Slic3r::GUI::Notifier; use Slic3r::GUI::Plater; use Slic3r::GUI::Plater::2D; use Slic3r::GUI::Plater::2DToolpaths; @@ -34,7 +33,6 @@ use Slic3r::GUI::SystemInfo; use Wx::Locale gettext => 'L'; our $have_OpenGL = eval "use Slic3r::GUI::3DScene; 1"; -our $have_LWP = eval "use LWP::UserAgent; 1"; use Wx 0.9901 qw(:bitmap :dialog :icon :id :misc :systemsettings :toplevelwindow :filedialog :font); use Wx::Event qw(EVT_IDLE EVT_COMMAND EVT_MENU); @@ -88,7 +86,6 @@ sub OnInit { Slic3r::set_data_dir($datadir || Wx::StandardPaths::Get->GetUserDataDir); Slic3r::GUI::set_wxapp($self); - $self->{notifier} = Slic3r::GUI::Notifier->new; $self->{app_config} = Slic3r::GUI::AppConfig->new; $self->{preset_bundle} = Slic3r::GUI::PresetBundle->new; @@ -117,6 +114,8 @@ sub OnInit { } eval { $self->{preset_bundle}->load_selections($self->{app_config}) }; $run_wizard = 1 if $self->{preset_bundle}->has_defauls_only; + + Slic3r::GUI::set_preset_bundle($self->{preset_bundle}); # application frame Wx::Image::FindHandlerType(wxBITMAP_TYPE_PNG) || Wx::Image::AddHandler(Wx::PNGHandler->new); @@ -270,7 +269,9 @@ sub notify { $frame->RequestUserAttention(&Wx::wxMAC ? wxUSER_ATTENTION_ERROR : wxUSER_ATTENTION_INFO) unless ($frame->IsActive); - $self->{notifier}->notify($message); + # There used to be notifier using a Growl application for OSX, but Growl is dead. + # The notifier also supported the Linux X D-bus notifications, but that support was broken. + #TODO use wxNotificationMessage? } # Called after the Preferences dialog is closed and the program settings are saved. diff --git a/lib/Slic3r/GUI/3DScene.pm b/lib/Slic3r/GUI/3DScene.pm index f9e9e668d..75a154281 100644 --- a/lib/Slic3r/GUI/3DScene.pm +++ b/lib/Slic3r/GUI/3DScene.pm @@ -68,6 +68,7 @@ __PACKAGE__->mk_accessors( qw(_quat _dirty init _zoom _legend_enabled + _warning_enabled _apply_zoom_to_volumes_filter ) ); @@ -142,6 +143,7 @@ sub new { $self->_sphi(45); $self->_zoom(1); $self->_legend_enabled(0); + $self->_warning_enabled(0); $self->use_plain_shader(0); $self->_apply_zoom_to_volumes_filter(0); @@ -217,7 +219,12 @@ sub new { sub set_legend_enabled { my ($self, $value) = @_; - $self->_legend_enabled($value); + $self->_legend_enabled($value); +} + +sub set_warning_enabled { + my ($self, $value) = @_; + $self->_warning_enabled($value); } sub Destroy { @@ -400,6 +407,10 @@ sub mouse_event { $self->Refresh; $self->Update; } else { + # The mouse_to_3d gets the Z coordinate from the Z buffer at the screen coordinate $pos->x,y, + # an converts the screen space coordinate to unscaled object space. + my $pos3d = ($volume_idx == -1) ? undef : $self->mouse_to_3d(@$pos); + # Select volume in this 3D canvas. # Don't deselect a volume if layer editing is enabled. We want the object to stay selected # during the scene manipulation. @@ -427,9 +438,6 @@ sub mouse_event { if ($volume_idx != -1) { if ($e->LeftDown && $self->enable_moving) { - # The mouse_to_3d gets the Z coordinate from the Z buffer at the screen coordinate $pos->x,y, - # an converts the screen space coordinate to unscaled object space. - my $pos3d = $self->mouse_to_3d(@$pos); # Only accept the initial position, if it is inside the volume bounding box. my $volume_bbox = $self->volumes->[$volume_idx]->transformed_bounding_box; $volume_bbox->offset(1.); @@ -948,6 +956,9 @@ sub mulquats { sub mouse_to_3d { my ($self, $x, $y, $z) = @_; + return unless $self->GetContext; + $self->SetCurrent($self->GetContext); + my @viewport = glGetIntegerv_p(GL_VIEWPORT); # 4 items my @mview = glGetDoublev_p(GL_MODELVIEW_MATRIX); # 16 items my @proj = glGetDoublev_p(GL_PROJECTION_MATRIX); # 16 items @@ -1296,11 +1307,16 @@ sub Render { } glEnable(GL_LIGHTING); - + # draw objects if (! $self->use_plain_shader) { $self->draw_volumes; } elsif ($self->UseVBOs) { + if ($self->enable_picking) { + $self->mark_volumes_for_layer_height; + $self->volumes->set_print_box($self->bed_bounding_box->x_min, $self->bed_bounding_box->y_min, 0.0, $self->bed_bounding_box->x_max, $self->bed_bounding_box->y_max, $self->{config}->get('max_print_height')); + $self->volumes->update_outside_state($self->{config}, 0); + } $self->{plain_shader}->enable if $self->{plain_shader}; $self->volumes->render_VBOs; $self->{plain_shader}->disable; @@ -1327,6 +1343,9 @@ sub Render { glDisable(GL_BLEND); } + # draw warning message + $self->draw_warning; + # draw gcode preview legend $self->draw_legend; @@ -1345,36 +1364,10 @@ sub draw_volumes { glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); - my $z_cursor_relative = $self->_variable_layer_thickness_bar_mouse_cursor_z_relative; foreach my $volume_idx (0..$#{$self->volumes}) { my $volume = $self->volumes->[$volume_idx]; - my $shader_active = 0; - my $object_id = int($volume->select_group_id / 1000000); - if ($self->layer_editing_enabled && ! $fakecolor && $volume->selected && $self->{layer_height_edit_shader} && - $volume->has_layer_height_texture && $object_id < $self->{print}->object_count) { - # Update the height texture if the ModelObject::layer_height_texture is invalid. - $volume->generate_layer_height_texture($self->{print}->get_object($object_id), 0); - $self->{layer_height_edit_shader}->enable; - $self->{layer_height_edit_shader}->set_uniform('z_to_texture_row', $volume->layer_height_texture_z_to_row_id); - $self->{layer_height_edit_shader}->set_uniform('z_texture_row_to_normalized', 1. / $volume->layer_height_texture_height); - $self->{layer_height_edit_shader}->set_uniform('z_cursor', $volume->bounding_box->z_max * $z_cursor_relative); - $self->{layer_height_edit_shader}->set_uniform('z_cursor_band_width', $self->{layer_height_edit_band_width}); - glBindTexture(GL_TEXTURE_2D, $self->{layer_preview_z_texture_id}); -# glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_LEVEL, 0); -# glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1); - glTexImage2D_c(GL_TEXTURE_2D, 0, GL_RGBA8, $volume->layer_height_texture_width, $volume->layer_height_texture_height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); - glTexImage2D_c(GL_TEXTURE_2D, 1, GL_RGBA8, $volume->layer_height_texture_width / 2, $volume->layer_height_texture_height / 2, - 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); -# glPixelStorei(GL_UNPACK_ALIGNMENT, 1); -# glPixelStorei(GL_UNPACK_ROW_LENGTH, $self->{layer_preview_z_texture_width}); - glTexSubImage2D_c(GL_TEXTURE_2D, 0, 0, 0, $volume->layer_height_texture_width, $volume->layer_height_texture_height, - GL_RGBA, GL_UNSIGNED_BYTE, $volume->layer_height_texture_data_ptr_level0); - glTexSubImage2D_c(GL_TEXTURE_2D, 1, 0, 0, $volume->layer_height_texture_width / 2, $volume->layer_height_texture_height / 2, - GL_RGBA, GL_UNSIGNED_BYTE, $volume->layer_height_texture_data_ptr_level1); - $shader_active = 1; - } elsif ($fakecolor) { + if ($fakecolor) { # Object picking mode. Render the object with a color encoding the object index. my $r = ($volume_idx & 0x000000FF) >> 0; my $g = ($volume_idx & 0x0000FF00) >> 8; @@ -1389,11 +1382,6 @@ sub draw_volumes { } $volume->render; - - if ($shader_active) { - glBindTexture(GL_TEXTURE_2D, 0); - $self->{layer_height_edit_shader}->disable; - } } glDisableClientState(GL_NORMAL_ARRAY); glDisable(GL_BLEND); @@ -1408,6 +1396,22 @@ sub draw_volumes { glDisableClientState(GL_VERTEX_ARRAY); } +sub mark_volumes_for_layer_height { + my ($self) = @_; + + foreach my $volume_idx (0..$#{$self->volumes}) { + my $volume = $self->volumes->[$volume_idx]; + my $object_id = int($volume->select_group_id / 1000000); + if ($self->layer_editing_enabled && $volume->selected && $self->{layer_height_edit_shader} && + $volume->has_layer_height_texture && $object_id < $self->{print}->object_count) { + $volume->set_layer_height_texture_data($self->{layer_preview_z_texture_id}, $self->{layer_height_edit_shader}->shader_program_id, + $self->{print}->get_object($object_id), $self->_variable_layer_thickness_bar_mouse_cursor_z_relative, $self->{layer_height_edit_band_width}); + } else { + $volume->reset_layer_height_texture_data(); + } + } +} + sub _load_image_set_texture { my ($self, $file_name) = @_; # Load a PNG with an alpha channel. @@ -1599,31 +1603,65 @@ sub draw_active_object_annotations { sub draw_legend { my ($self) = @_; - if ($self->_legend_enabled) - { - # If the legend texture has not been loaded into the GPU, do it now. - my $tex_id = Slic3r::GUI::_3DScene::finalize_legend_texture; - if ($tex_id > 0) - { - my $tex_w = Slic3r::GUI::_3DScene::get_legend_texture_width; - my $tex_h = Slic3r::GUI::_3DScene::get_legend_texture_height; - if (($tex_w > 0) && ($tex_h > 0)) - { - glDisable(GL_DEPTH_TEST); - glPushMatrix(); - glLoadIdentity(); - - my ($cw, $ch) = $self->GetSizeWH; - - my $l = (-0.5 * $cw) / $self->_zoom; - my $t = (0.5 * $ch) / $self->_zoom; - my $r = $l + $tex_w / $self->_zoom; - my $b = $t - $tex_h / $self->_zoom; - $self->_render_texture($tex_id, $l, $r, $b, $t); + if (!$self->_legend_enabled) { + return; + } - glPopMatrix(); - glEnable(GL_DEPTH_TEST); - } + # If the legend texture has not been loaded into the GPU, do it now. + my $tex_id = Slic3r::GUI::_3DScene::finalize_legend_texture; + if ($tex_id > 0) + { + my $tex_w = Slic3r::GUI::_3DScene::get_legend_texture_width; + my $tex_h = Slic3r::GUI::_3DScene::get_legend_texture_height; + if (($tex_w > 0) && ($tex_h > 0)) + { + glDisable(GL_DEPTH_TEST); + glPushMatrix(); + glLoadIdentity(); + + my ($cw, $ch) = $self->GetSizeWH; + + my $l = (-0.5 * $cw) / $self->_zoom; + my $t = (0.5 * $ch) / $self->_zoom; + my $r = $l + $tex_w / $self->_zoom; + my $b = $t - $tex_h / $self->_zoom; + $self->_render_texture($tex_id, $l, $r, $b, $t); + + glPopMatrix(); + glEnable(GL_DEPTH_TEST); + } + } +} + +sub draw_warning { + my ($self) = @_; + + if (!$self->_warning_enabled) { + return; + } + + # If the warning texture has not been loaded into the GPU, do it now. + my $tex_id = Slic3r::GUI::_3DScene::finalize_warning_texture; + if ($tex_id > 0) + { + my $tex_w = Slic3r::GUI::_3DScene::get_warning_texture_width; + my $tex_h = Slic3r::GUI::_3DScene::get_warning_texture_height; + if (($tex_w > 0) && ($tex_h > 0)) + { + glDisable(GL_DEPTH_TEST); + glPushMatrix(); + glLoadIdentity(); + + my ($cw, $ch) = $self->GetSizeWH; + + my $l = (-0.5 * $tex_w) / $self->_zoom; + my $t = (-0.5 * $ch + $tex_h) / $self->_zoom; + my $r = $l + $tex_w / $self->_zoom; + my $b = $t - $tex_h / $self->_zoom; + $self->_render_texture($tex_id, $l, $r, $b, $t); + + glPopMatrix(); + glEnable(GL_DEPTH_TEST); } } } @@ -1692,57 +1730,77 @@ sub _vertex_shader_Gouraud { return <<'VERTEX'; #version 110 -#define INTENSITY_CORRECTION 0.7 +#define INTENSITY_CORRECTION 0.6 -#define LIGHT_TOP_DIR -0.6/1.31, 0.6/1.31, 1./1.31 +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); #define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) -#define LIGHT_TOP_SPECULAR (0.5 * INTENSITY_CORRECTION) -#define LIGHT_TOP_SHININESS 50. +#define LIGHT_TOP_SPECULAR (0.25 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 200.0 -#define LIGHT_FRONT_DIR 1./1.43, 0.2/1.43, 1./1.43 +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); #define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) -#define LIGHT_FRONT_SPECULAR (0.0 * INTENSITY_CORRECTION) -#define LIGHT_FRONT_SHININESS 50. +//#define LIGHT_FRONT_SPECULAR (0.0 * INTENSITY_CORRECTION) +//#define LIGHT_FRONT_SHININESS 5.0 #define INTENSITY_AMBIENT 0.3 -varying float intensity_specular; -varying float intensity_tainted; +const vec3 ZERO = vec3(0.0, 0.0, 0.0); + +struct PrintBoxDetection +{ + vec3 min; + vec3 max; + // xyz contains the offset, if w == 1.0 detection needs to be performed + vec4 volume_origin; +}; + +uniform PrintBoxDetection print_box; + +// x = tainted, y = specular; +varying vec2 intensity; + +varying vec3 delta_box_min; +varying vec3 delta_box_max; void main() { - vec3 eye, normal, lightDir, viewVector, halfVector; - float NdotL, NdotHV; + vec3 eye = -normalize((gl_ModelViewMatrix * gl_Vertex).xyz); - eye = vec3(0., 0., 1.); - - // First transform the normal into eye space and normalize the result. - normal = normalize(gl_NormalMatrix * gl_Normal); + // First transform the normal into camera space and normalize the result. + vec3 normal = normalize(gl_NormalMatrix * gl_Normal); // Now normalize the light's direction. Note that according to the OpenGL specification, the light is stored in eye space. // Also since we're talking about a directional light, the position field is actually direction. - lightDir = vec3(LIGHT_TOP_DIR); - halfVector = normalize(lightDir + eye); + vec3 halfVector = normalize(LIGHT_TOP_DIR + eye); // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. - NdotL = max(dot(normal, lightDir), 0.0); + float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); - intensity_tainted = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; - intensity_specular = 0.; + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + intensity.y = 0.0; if (NdotL > 0.0) - intensity_specular = LIGHT_TOP_SPECULAR * pow(max(dot(normal, halfVector), 0.0), LIGHT_TOP_SHININESS); + intensity.y += LIGHT_TOP_SPECULAR * pow(max(dot(normal, halfVector), 0.0), LIGHT_TOP_SHININESS); - // Perform the same lighting calculation for the 2nd light source. - lightDir = vec3(LIGHT_FRONT_DIR); -// halfVector = normalize(lightDir + eye); - NdotL = max(dot(normal, lightDir), 0.0); - intensity_tainted += NdotL * LIGHT_FRONT_DIFFUSE; + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; - // compute the specular term if NdotL is larger than zero -// if (NdotL > 0.0) -// intensity_specular += LIGHT_FRONT_SPECULAR * pow(max(dot(normal, halfVector), 0.0), LIGHT_FRONT_SHININESS); + // compute deltas for out of print volume detection (world coordinates) + if (print_box.volume_origin.w == 1.0) + { + vec3 v = gl_Vertex.xyz + print_box.volume_origin.xyz; + delta_box_min = v - print_box.min; + delta_box_max = v - print_box.max; + } + else + { + delta_box_min = ZERO; + delta_box_max = ZERO; + } gl_Position = ftransform(); } @@ -1754,16 +1812,25 @@ sub _fragment_shader_Gouraud { return <<'FRAGMENT'; #version 110 -varying float intensity_specular; -varying float intensity_tainted; +const vec3 ZERO = vec3(0.0, 0.0, 0.0); + +// x = tainted, y = specular; +varying vec2 intensity; + +varying vec3 delta_box_min; +varying vec3 delta_box_max; uniform vec4 uniform_color; void main() { - gl_FragColor = - vec4(intensity_specular, intensity_specular, intensity_specular, 0.) + uniform_color * intensity_tainted; - gl_FragColor.a = uniform_color.a; + gl_FragColor = vec4(intensity.y, intensity.y, intensity.y, 0.0) + uniform_color * intensity.x; + + // if the fragment is outside the print volume darken it and set it as transparent + if (any(lessThan(delta_box_min, ZERO)) || any(greaterThan(delta_box_max, ZERO))) + gl_FragColor = vec4(mix(gl_FragColor.xyz, ZERO, 0.5), 0.5 * uniform_color.a); + else + gl_FragColor.a = uniform_color.a; } FRAGMENT @@ -1828,6 +1895,7 @@ void main() { // compute the specular term into spec // intensity_specular += LIGHT_FRONT_SPECULAR * pow(max(dot(h,normal), 0.0), LIGHT_FRONT_SHININESS); } + gl_FragColor = max( vec4(intensity_specular, intensity_specular, intensity_specular, 0.) + uniform_color * intensity_tainted, INTENSITY_AMBIENT * uniform_color); @@ -1840,61 +1908,55 @@ sub _vertex_shader_variable_layer_height { return <<'VERTEX'; #version 110 -#define LIGHT_TOP_DIR 0., 1., 0. -#define LIGHT_TOP_DIFFUSE 0.2 -#define LIGHT_TOP_SPECULAR 0.3 -#define LIGHT_TOP_SHININESS 50. +#define INTENSITY_CORRECTION 0.6 -#define LIGHT_FRONT_DIR 0., 0., 1. -#define LIGHT_FRONT_DIFFUSE 0.5 -#define LIGHT_FRONT_SPECULAR 0.3 -#define LIGHT_FRONT_SHININESS 50. +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.25 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 200.0 -#define INTENSITY_AMBIENT 0.1 +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) +//#define LIGHT_FRONT_SPECULAR (0.0 * INTENSITY_CORRECTION) +//#define LIGHT_FRONT_SHININESS 5.0 + +#define INTENSITY_AMBIENT 0.3 uniform float z_to_texture_row; -varying float intensity_specular; -varying float intensity_tainted; + +// x = tainted, y = specular; +varying vec2 intensity; + varying float object_z; void main() { - vec3 eye, normal, lightDir, viewVector, halfVector; - float NdotL, NdotHV; + vec3 eye = -normalize((gl_ModelViewMatrix * gl_Vertex).xyz); -// eye = gl_ModelViewMatrixInverse[3].xyz; - eye = vec3(0., 0., 1.); - - // First transform the normal into eye space and normalize the result. - normal = normalize(gl_NormalMatrix * gl_Normal); + // First transform the normal into camera space and normalize the result. + vec3 normal = normalize(gl_NormalMatrix * gl_Normal); // Now normalize the light's direction. Note that according to the OpenGL specification, the light is stored in eye space. // Also since we're talking about a directional light, the position field is actually direction. - lightDir = vec3(LIGHT_TOP_DIR); - halfVector = normalize(lightDir + eye); + vec3 halfVector = normalize(LIGHT_TOP_DIR + eye); // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. - NdotL = max(dot(normal, lightDir), 0.0); + float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); - intensity_tainted = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; - intensity_specular = 0.; + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + intensity.y = 0.0; -// if (NdotL > 0.0) -// intensity_specular = LIGHT_TOP_SPECULAR * pow(max(dot(normal, halfVector), 0.0), LIGHT_TOP_SHININESS); - - // Perform the same lighting calculation for the 2nd light source. - lightDir = vec3(LIGHT_FRONT_DIR); - halfVector = normalize(lightDir + eye); - NdotL = max(dot(normal, lightDir), 0.0); - intensity_tainted += NdotL * LIGHT_FRONT_DIFFUSE; - - // compute the specular term if NdotL is larger than zero if (NdotL > 0.0) - intensity_specular += LIGHT_FRONT_SPECULAR * pow(max(dot(normal, halfVector), 0.0), LIGHT_FRONT_SHININESS); + intensity.y += LIGHT_TOP_SPECULAR * pow(max(dot(normal, halfVector), 0.0), LIGHT_TOP_SHININESS); + // Perform the same lighting calculation for the 2nd light source (no specular) + NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); + + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + // Scaled to widths of the Z texture. - object_z = gl_Vertex.z / gl_Vertex.w; + object_z = gl_Vertex.z; gl_Position = ftransform(); } @@ -1913,13 +1975,14 @@ uniform sampler2D z_texture; // Scaling from the Z texture rows coordinate to the normalized texture row coordinate. uniform float z_to_texture_row; uniform float z_texture_row_to_normalized; - -varying float intensity_specular; -varying float intensity_tainted; -varying float object_z; uniform float z_cursor; uniform float z_cursor_band_width; +// x = tainted, y = specular; +varying vec2 intensity; + +varying float object_z; + void main() { float object_z_row = z_to_texture_row * object_z; @@ -1938,15 +2001,12 @@ void main() float lod = clamp(0.5 * log2(max(dx_vtc*dx_vtc, dy_vtc*dy_vtc)), 0., 1.); // Sample the Z texture. Texture coordinates are normalized to <0, 1>. vec4 color = - (1. - lod) * texture2D(z_texture, vec2(z_texture_col, z_texture_row_to_normalized * (z_texture_row + 0.5 )), -10000.) + - lod * texture2D(z_texture, vec2(z_texture_col, z_texture_row_to_normalized * (z_texture_row * 2. + 1.)), 10000.); + mix(texture2D(z_texture, vec2(z_texture_col, z_texture_row_to_normalized * (z_texture_row + 0.5 )), -10000.), + texture2D(z_texture, vec2(z_texture_col, z_texture_row_to_normalized * (z_texture_row * 2. + 1.)), 10000.), lod); + // Mix the final color. gl_FragColor = - vec4(intensity_specular, intensity_specular, intensity_specular, 1.) + - (1. - z_blend) * intensity_tainted * color + - z_blend * vec4(1., 1., 0., 0.); - // and reset the transparency. - gl_FragColor.a = 1.; + vec4(intensity.y, intensity.y, intensity.y, 1.0) + intensity.x * mix(color, vec4(1.0, 1.0, 0.0, 1.0), z_blend); } FRAGMENT diff --git a/lib/Slic3r/GUI/MainFrame.pm b/lib/Slic3r/GUI/MainFrame.pm index 442d0abc9..4868ed7e2 100644 --- a/lib/Slic3r/GUI/MainFrame.pm +++ b/lib/Slic3r/GUI/MainFrame.pm @@ -25,10 +25,6 @@ our $last_config; 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) = @_; @@ -169,59 +165,7 @@ sub _init_tabpanel { } } }); - # 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; - - # 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, L('No Bonjour device found'), L('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; - - 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, L("Connection to OctoPrint works correctly."), _L("Success!")); - } else { - Slic3r::GUI::show_error($self, - L("I wasn't able to connect to OctoPrint (") . $res->status_line . - L("). 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}, $self->{no_controller}, - $self->{is_disabled_button_browse}, - $self->{is_user_agent}, - $VALUE_CHANGE_EVENT, $PRESETS_CHANGED_EVENT, - $BUTTON_BROWSE_EVENT, $BUTTON_TEST_EVENT); + Slic3r::GUI::create_preset_tabs($self->{no_controller}, $VALUE_CHANGE_EVENT, $PRESETS_CHANGED_EVENT); $self->{options_tabs} = {}; for my $tab_name (qw(print filament printer)) { $self->{options_tabs}{$tab_name} = Slic3r::GUI::get_preset_tab("$tab_name"); diff --git a/lib/Slic3r/GUI/Notifier.pm b/lib/Slic3r/GUI/Notifier.pm deleted file mode 100644 index 54afffae0..000000000 --- a/lib/Slic3r/GUI/Notifier.pm +++ /dev/null @@ -1,46 +0,0 @@ -# Notify about the end of slicing. -# The notifications are sent out using the Growl protocol if installed, and using DBus XWindow protocol. - -package Slic3r::GUI::Notifier; -use Moo; - -has 'growler' => (is => 'rw'); - -my $icon = Slic3r::var("Slic3r.png"); - -sub BUILD { - my ($self) = @_; - - if (eval 'use Growl::GNTP; 1') { - # register with growl - eval { - $self->growler(Growl::GNTP->new(AppName => 'Slic3r', AppIcon => $icon)); - $self->growler->register([{Name => 'SKEIN_DONE', DisplayName => 'Slicing Done'}]); - }; - # if register() fails (for example because of a timeout), disable growler at all - $self->growler(undef) if $@; - } -} - -sub notify { - my ($self, $message) = @_; - my $title = 'Slicing Done!'; - - eval { - $self->growler->notify(Event => 'SKEIN_DONE', Title => $title, Message => $message) - if $self->growler; - }; - # Net::DBus is broken in multithreaded environment - if (0 && eval 'use Net::DBus; 1') { - eval { - my $session = Net::DBus->session; - my $serv = $session->get_service('org.freedesktop.Notifications'); - my $notifier = $serv->get_object('/org/freedesktop/Notifications', - 'org.freedesktop.Notifications'); - $notifier->Notify('Slic3r', 0, $icon, $title, $message, [], {}, -1); - undef $Net::DBus::bus_session; - }; - } -} - -1; diff --git a/lib/Slic3r/GUI/Plater.pm b/lib/Slic3r/GUI/Plater.pm index d48e31462..d3513897f 100644 --- a/lib/Slic3r/GUI/Plater.pm +++ b/lib/Slic3r/GUI/Plater.pm @@ -8,7 +8,6 @@ use utf8; use File::Basename qw(basename dirname); use List::Util qw(sum first max); use Slic3r::Geometry qw(X Y Z scale unscale deg2rad rad2deg); -use LWP::UserAgent; use threads::shared qw(shared_clone); use Wx qw(:button :colour :cursor :dialog :filedialog :keycode :icon :font :id :listctrl :misc :panel :sizer :toolbar :window wxTheApp :notebook :combobox wxNullBitmap); @@ -55,6 +54,7 @@ sub new { serial_port serial_speed octoprint_host octoprint_apikey octoprint_cafile nozzle_diameter single_extruder_multi_material wipe_tower wipe_tower_x wipe_tower_y wipe_tower_width wipe_tower_per_color_wipe extruder_colour filament_colour + max_print_height )]); # C++ Slic3r::Model with Perl extensions in Slic3r/Model.pm $self->{model} = Slic3r::Model->new; @@ -113,6 +113,7 @@ sub new { $self->{canvas3D}->set_on_decrease_objects(sub { $self->decrease() }); $self->{canvas3D}->set_on_remove_object(sub { $self->remove() }); $self->{canvas3D}->set_on_instances_moved($on_instances_moved); + $self->{canvas3D}->use_plain_shader(1); $self->{canvas3D}->set_on_wipe_tower_moved(sub { my ($new_pos_3f) = @_; my $cfg = Slic3r::Config->new; @@ -389,9 +390,12 @@ sub new { }); }); $presets->Add($text, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); - $presets->Add($choice, 1, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxBOTTOM, 0); + $presets->Add($choice, 1, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxBOTTOM, 1); } } + + my $frequently_changed_parameters_sizer = Wx::BoxSizer->new(wxHORIZONTAL); + Slic3r::GUI::add_frequently_changed_parameters($self, $frequently_changed_parameters_sizer, $presets); my $object_info_sizer; { @@ -473,14 +477,15 @@ sub new { my $right_sizer = Wx::BoxSizer->new(wxVERTICAL); $right_sizer->Add($presets, 0, wxEXPAND | wxTOP, 10) if defined $presets; + $right_sizer->Add($frequently_changed_parameters_sizer, 0, wxEXPAND | wxTOP, 10) if defined $frequently_changed_parameters_sizer; $right_sizer->Add($buttons_sizer, 0, wxEXPAND | wxBOTTOM, 5); $right_sizer->Add($self->{list}, 1, wxEXPAND, 5); $right_sizer->Add($object_info_sizer, 0, wxEXPAND, 0); $right_sizer->Add($print_info_sizer, 0, wxEXPAND, 0); # Callback for showing / hiding the print info box. $self->{"print_info_box_show"} = sub { - if ($right_sizer->IsShown(4) != $_[0]) { - $right_sizer->Show(4, $_[0]); + if ($right_sizer->IsShown(5) != $_[0]) { + $right_sizer->Show(5, $_[0]); $self->Layout } }; @@ -1328,6 +1333,9 @@ sub export_gcode { } else { my $default_output_file = eval { $self->{print}->output_filepath($main::opt{output} // '') }; Slic3r::GUI::catch_error($self) and return; + # If possible, remove accents from accented latin characters. + # This function is useful for generating file names to be processed by legacy firmwares. + $default_output_file = Slic3r::GUI::fold_utf8_to_ascii($default_output_file); my $dlg = Wx::FileDialog->new($self, L('Save G-code file as:'), wxTheApp->{app_config}->get_last_output_dir(dirname($default_output_file)), basename($default_output_file), &Slic3r::GUI::FILE_WILDCARDS->{gcode}, wxFD_SAVE | wxFD_OVERWRITE_PROMPT); @@ -1737,6 +1745,8 @@ sub on_config_change { $update_scheduled = 1; my $extruder_colors = $config->get('extruder_colour'); $self->{preview3D}->set_number_extruders(scalar(@{$extruder_colors})); + } elsif ($opt_key eq 'max_print_height') { + $update_scheduled = 1; } } @@ -1934,6 +1944,7 @@ sub selection_changed { $self->{object_info_manifold_warning_icon}->SetToolTipString($message); } else { $self->{object_info_manifold}->SetLabel(L("Yes")); + $self->{object_info_manifold_warning_icon}->Hide; } } else { $self->{object_info_facets}->SetLabel($object->facets); diff --git a/lib/Slic3r/GUI/Plater/3D.pm b/lib/Slic3r/GUI/Plater/3D.pm index 1c123e741..37e1321ae 100644 --- a/lib/Slic3r/GUI/Plater/3D.pm +++ b/lib/Slic3r/GUI/Plater/3D.pm @@ -8,6 +8,8 @@ use Wx qw(:misc :pen :brush :sizer :font :cursor :keycode wxTAB_TRAVERSAL); use Wx::Event qw(EVT_KEY_DOWN EVT_CHAR); use base qw(Slic3r::GUI::3DScene Class::Accessor); +use Wx::Locale gettext => 'L'; + __PACKAGE__->mk_accessors(qw( on_arrange on_rotate_object_left on_rotate_object_right on_scale_object_uniformly on_remove_object on_increase_objects on_decrease_objects)); @@ -208,6 +210,19 @@ sub reload_scene { $self->{model}->bounding_box->z_max, $self->UseVBOs); } } + + # checks for geometry outside the print volume to render it accordingly + if (scalar @{$self->volumes} > 0) + { + if (!$self->{model}->fits_print_volume($self->{config})) { + $self->set_warning_enabled(1); + Slic3r::GUI::_3DScene::generate_warning_texture(L("Detected object outside print volume")); + } else { + $self->set_warning_enabled(0); + $self->volumes->update_outside_state($self->{config}, 1); + Slic3r::GUI::_3DScene::reset_warning_texture(); + } + } } sub update_bed_size { diff --git a/lib/Slic3r/GUI/Plater/3DPreview.pm b/lib/Slic3r/GUI/Plater/3DPreview.pm index d86615218..8f3fa49f5 100644 --- a/lib/Slic3r/GUI/Plater/3DPreview.pm +++ b/lib/Slic3r/GUI/Plater/3DPreview.pm @@ -253,19 +253,19 @@ sub new { # sets colors for gcode preview extrusion roles my @extrusion_roles_colors = ( - 'Perimeter' => 'FFA500', - 'External perimeter' => 'FFFF66', + 'Perimeter' => 'FFFF66', + 'External perimeter' => 'FFA500', 'Overhang perimeter' => '0000FF', - 'Internal infill' => 'FF0000', - 'Solid infill' => 'CD00CD', - 'Top solid infill' => 'FF3333', + 'Internal infill' => 'B1302A', + 'Solid infill' => 'D732D7', + 'Top solid infill' => 'FF1A1A', 'Bridge infill' => '9999FF', 'Gap fill' => 'FFFFFF', - 'Skirt' => '7F0000', + 'Skirt' => '845321', 'Support material' => '00FF00', 'Support material interface' => '008000', 'Wipe tower' => 'B3E3AB', - 'Custom' => 'FFFF00', + 'Custom' => '28CC94', ); $self->gcode_preview_data->set_extrusion_paths_colors(\@extrusion_roles_colors); diff --git a/lib/Slic3r/Test.pm b/lib/Slic3r/Test.pm index 53d6d1024..6471ae123 100644 --- a/lib/Slic3r/Test.pm +++ b/lib/Slic3r/Test.pm @@ -7,7 +7,6 @@ require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw(_eq); -use IO::Scalar; use List::Util qw(first); use Slic3r::Geometry qw(epsilon X Y Z); diff --git a/resources/icons/action_undo.png b/resources/icons/action_undo.png new file mode 100644 index 000000000..866ae9773 Binary files /dev/null and b/resources/icons/action_undo.png differ diff --git a/resources/icons/arrow_undo.png b/resources/icons/arrow_undo.png new file mode 100644 index 000000000..6972c5e59 Binary files /dev/null and b/resources/icons/arrow_undo.png differ diff --git a/resources/localization/Slic3rPE.pot b/resources/localization/Slic3rPE.pot index b70c92257..0282e7aae 100644 --- a/resources/localization/Slic3rPE.pot +++ b/resources/localization/Slic3rPE.pot @@ -1,419 +1,389 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" -"Project-Id-Version: Slic3rPE\n" +"Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-28 13:53+0100\n" +"POT-Creation-Date: 2018-03-14 15:32+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:39 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:39 msgid "Shape" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:46 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:46 msgid "Rectangular" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:50 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1191 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:408 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:50 xs/src/slic3r/GUI/Tab.cpp:1270 +#: lib/Slic3r/GUI/Plater.pm:411 msgid "Size" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:51 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:51 msgid "Size in X and Y of the rectangular plate." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:57 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:57 msgid "Origin" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:58 +#: 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 "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:62 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:62 msgid "Circular" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:65 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:129 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:200 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:211 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:325 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:336 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:355 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:434 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:781 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:801 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:860 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:878 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:896 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1044 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1052 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1094 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1103 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1113 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1121 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1129 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1215 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1421 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1491 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1527 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1704 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1711 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1718 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1727 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1737 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1747 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:65 xs/src/libslic3r/PrintConfig.cpp:129 +#: xs/src/libslic3r/PrintConfig.cpp:200 xs/src/libslic3r/PrintConfig.cpp:211 +#: xs/src/libslic3r/PrintConfig.cpp:325 xs/src/libslic3r/PrintConfig.cpp:336 +#: xs/src/libslic3r/PrintConfig.cpp:355 xs/src/libslic3r/PrintConfig.cpp:434 +#: xs/src/libslic3r/PrintConfig.cpp:781 xs/src/libslic3r/PrintConfig.cpp:801 +#: xs/src/libslic3r/PrintConfig.cpp:860 xs/src/libslic3r/PrintConfig.cpp:878 +#: xs/src/libslic3r/PrintConfig.cpp:896 xs/src/libslic3r/PrintConfig.cpp:1051 +#: xs/src/libslic3r/PrintConfig.cpp:1059 xs/src/libslic3r/PrintConfig.cpp:1101 +#: xs/src/libslic3r/PrintConfig.cpp:1110 xs/src/libslic3r/PrintConfig.cpp:1120 +#: xs/src/libslic3r/PrintConfig.cpp:1128 xs/src/libslic3r/PrintConfig.cpp:1136 +#: xs/src/libslic3r/PrintConfig.cpp:1222 xs/src/libslic3r/PrintConfig.cpp:1428 +#: xs/src/libslic3r/PrintConfig.cpp:1498 xs/src/libslic3r/PrintConfig.cpp:1534 +#: xs/src/libslic3r/PrintConfig.cpp:1711 xs/src/libslic3r/PrintConfig.cpp:1718 +#: xs/src/libslic3r/PrintConfig.cpp:1725 xs/src/libslic3r/PrintConfig.cpp:1734 +#: xs/src/libslic3r/PrintConfig.cpp:1744 xs/src/libslic3r/PrintConfig.cpp:1754 msgid "mm" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:66 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:431 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:66 xs/src/libslic3r/PrintConfig.cpp:431 msgid "Diameter" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:67 +#: 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 "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:71 -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:150 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:92 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:71 +#: xs/src/libslic3r/GCode/PreviewData.cpp:150 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:92 msgid "Custom" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:75 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:75 msgid "Load shape from STL..." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:120 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:120 msgid "Settings" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:298 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:298 msgid "Choose a file to import bed shape from (STL/OBJ/AMF/3MF/PRUSA):" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:315 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:315 msgid "Error! " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:324 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:324 msgid "The selected file contains no geometry." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.cpp:328 +#: xs/src/slic3r/GUI/BedShapeDialog.cpp:328 msgid "" "The selected file contains several disjoint areas. This is not supported." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\BedShapeDialog.hpp:42 +#: xs/src/slic3r/GUI/BedShapeDialog.hpp:42 msgid "Bed Shape" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:224 +#: xs/src/slic3r/GUI/GUI.cpp:234 msgid "Array of language names and identifiers should have the same size." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:235 +#: xs/src/slic3r/GUI/GUI.cpp:245 msgid "Select the language" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:235 +#: xs/src/slic3r/GUI/GUI.cpp:245 msgid "Language" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:300 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:170 +#: xs/src/slic3r/GUI/GUI.cpp:312 xs/src/libslic3r/PrintConfig.cpp:170 msgid "Default" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:325 +#: xs/src/slic3r/GUI/GUI.cpp:337 msgid "Change Application Language" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:332 +#: xs/src/slic3r/GUI/GUI.cpp:344 msgid "Application will be restarted" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:332 +#: xs/src/slic3r/GUI/GUI.cpp:344 msgid "Attention!" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:339 +#: xs/src/slic3r/GUI/GUI.cpp:351 msgid "&Localization" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:488 -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:470 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1300 +#: xs/src/slic3r/GUI/GUI.cpp:494 lib/Slic3r/GUI/MainFrame.pm:465 +#: lib/Slic3r/GUI/Plater.pm:1304 msgid "Error" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:493 +#: xs/src/slic3r/GUI/GUI.cpp:499 msgid "Notice" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:498 +#: xs/src/slic3r/GUI/GUI.cpp:504 msgid "GLUquadricObjPtr | Attempt to free unreferenced scalar" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\GUI.cpp:500 +#: xs/src/slic3r/GUI/GUI.cpp:506 msgid "Warning" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:50 -msgid "Save current " +#: xs/src/slic3r/GUI/GUI.cpp:655 +msgid "Support" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:51 -msgid "Delete this preset" +#: xs/src/slic3r/GUI/GUI.cpp:658 +msgid "Select what kind of support do you need" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:313 -msgid "Layers and perimeters" +#: xs/src/slic3r/GUI/GUI.cpp:659 xs/src/libslic3r/GCode/PreviewData.cpp:137 +msgid "None" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:314 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:777 -msgid "Layer height" +#: xs/src/slic3r/GUI/GUI.cpp:660 xs/src/libslic3r/PrintConfig.cpp:1415 +msgid "Support on build plate only" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:318 -msgid "Vertical shells" +#: xs/src/slic3r/GUI/GUI.cpp:661 +msgid "Everywhere" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:329 -msgid "Horizontal shells" -msgstr "" - -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:330 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1314 -msgid "Solid layers" -msgstr "" - -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:335 -msgid "Quality (slower slicing)" -msgstr "" - -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:342 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:356 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:449 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:452 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:831 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1113 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:107 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:208 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:736 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1733 -msgid "Advanced" -msgstr "" - -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:346 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:347 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:664 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:87 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:247 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:488 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:502 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:540 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:681 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:691 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:709 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:727 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:746 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1263 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1280 -msgid "Infill" -msgstr "" - -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:352 -msgid "Reducing printing time" -msgstr "" - -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:364 -msgid "Skirt and brim" -msgstr "" - -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:365 -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:146 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:88 -msgid "Skirt" -msgstr "" - -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:371 +#: xs/src/slic3r/GUI/GUI.cpp:673 xs/src/slic3r/GUI/Tab.cpp:441 msgid "Brim" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:374 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:375 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:191 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1030 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1380 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1387 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1399 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1409 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1417 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1432 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1453 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1464 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1480 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1489 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1498 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1509 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1525 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1533 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1534 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1543 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1551 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1565 -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:147 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:89 +#: xs/src/slic3r/GUI/GUI.cpp:675 +msgid "" +"This flag enables the brim that will be printed around each object on the " +"first layer." +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:57 +msgid "Save current " +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:58 +msgid "Delete this preset" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:383 +msgid "Layers and perimeters" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:384 xs/src/libslic3r/PrintConfig.cpp:777 +msgid "Layer height" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:388 +msgid "Vertical shells" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:399 +msgid "Horizontal shells" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:400 xs/src/libslic3r/PrintConfig.cpp:1321 +msgid "Solid layers" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:405 +msgid "Quality (slower slicing)" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:412 xs/src/slic3r/GUI/Tab.cpp:426 +#: xs/src/slic3r/GUI/Tab.cpp:519 xs/src/slic3r/GUI/Tab.cpp:522 +#: xs/src/slic3r/GUI/Tab.cpp:905 xs/src/slic3r/GUI/Tab.cpp:1191 +#: xs/src/libslic3r/PrintConfig.cpp:107 xs/src/libslic3r/PrintConfig.cpp:208 +#: xs/src/libslic3r/PrintConfig.cpp:736 xs/src/libslic3r/PrintConfig.cpp:1740 +msgid "Advanced" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:416 xs/src/slic3r/GUI/Tab.cpp:417 +#: xs/src/slic3r/GUI/Tab.cpp:735 xs/src/libslic3r/PrintConfig.cpp:87 +#: xs/src/libslic3r/PrintConfig.cpp:247 xs/src/libslic3r/PrintConfig.cpp:488 +#: xs/src/libslic3r/PrintConfig.cpp:502 xs/src/libslic3r/PrintConfig.cpp:540 +#: xs/src/libslic3r/PrintConfig.cpp:681 xs/src/libslic3r/PrintConfig.cpp:691 +#: xs/src/libslic3r/PrintConfig.cpp:709 xs/src/libslic3r/PrintConfig.cpp:727 +#: xs/src/libslic3r/PrintConfig.cpp:746 xs/src/libslic3r/PrintConfig.cpp:1270 +#: xs/src/libslic3r/PrintConfig.cpp:1287 +msgid "Infill" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:422 +msgid "Reducing printing time" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:434 +msgid "Skirt and brim" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:435 xs/src/libslic3r/GCode/PreviewData.cpp:146 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:88 +msgid "Skirt" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:444 xs/src/slic3r/GUI/Tab.cpp:445 +#: xs/src/libslic3r/PrintConfig.cpp:191 xs/src/libslic3r/PrintConfig.cpp:1037 +#: xs/src/libslic3r/PrintConfig.cpp:1387 xs/src/libslic3r/PrintConfig.cpp:1394 +#: xs/src/libslic3r/PrintConfig.cpp:1406 xs/src/libslic3r/PrintConfig.cpp:1416 +#: xs/src/libslic3r/PrintConfig.cpp:1424 xs/src/libslic3r/PrintConfig.cpp:1439 +#: xs/src/libslic3r/PrintConfig.cpp:1460 xs/src/libslic3r/PrintConfig.cpp:1471 +#: xs/src/libslic3r/PrintConfig.cpp:1487 xs/src/libslic3r/PrintConfig.cpp:1496 +#: xs/src/libslic3r/PrintConfig.cpp:1505 xs/src/libslic3r/PrintConfig.cpp:1516 +#: xs/src/libslic3r/PrintConfig.cpp:1532 xs/src/libslic3r/PrintConfig.cpp:1540 +#: xs/src/libslic3r/PrintConfig.cpp:1541 xs/src/libslic3r/PrintConfig.cpp:1550 +#: xs/src/libslic3r/PrintConfig.cpp:1558 xs/src/libslic3r/PrintConfig.cpp:1572 +#: xs/src/libslic3r/GCode/PreviewData.cpp:147 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:89 msgid "Support material" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:380 +#: xs/src/slic3r/GUI/Tab.cpp:450 msgid "Raft" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:384 +#: xs/src/slic3r/GUI/Tab.cpp:454 msgid "Options for support material and raft" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:398 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:118 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:278 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:635 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:747 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:979 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1201 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1251 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1302 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1625 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:71 +#: xs/src/slic3r/GUI/Tab.cpp:468 xs/src/libslic3r/PrintConfig.cpp:118 +#: xs/src/libslic3r/PrintConfig.cpp:278 xs/src/libslic3r/PrintConfig.cpp:635 +#: xs/src/libslic3r/PrintConfig.cpp:747 xs/src/libslic3r/PrintConfig.cpp:986 +#: xs/src/libslic3r/PrintConfig.cpp:1208 xs/src/libslic3r/PrintConfig.cpp:1258 +#: xs/src/libslic3r/PrintConfig.cpp:1309 xs/src/libslic3r/PrintConfig.cpp:1632 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:71 msgid "Speed" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:399 +#: xs/src/slic3r/GUI/Tab.cpp:469 msgid "Speed for print moves" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:411 +#: xs/src/slic3r/GUI/Tab.cpp:481 msgid "Speed for non-print moves" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:414 +#: xs/src/slic3r/GUI/Tab.cpp:484 msgid "Modifiers" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:417 +#: xs/src/slic3r/GUI/Tab.cpp:487 msgid "Acceleration control (advanced)" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:424 +#: xs/src/slic3r/GUI/Tab.cpp:494 msgid "Autospeed (advanced)" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:430 +#: xs/src/slic3r/GUI/Tab.cpp:500 msgid "Multiple Extruders" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:431 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:966 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:308 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:702 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:958 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1272 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1445 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1471 +#: xs/src/slic3r/GUI/Tab.cpp:501 xs/src/slic3r/GUI/Tab.cpp:1040 +#: xs/src/libslic3r/PrintConfig.cpp:308 xs/src/libslic3r/PrintConfig.cpp:702 +#: xs/src/libslic3r/PrintConfig.cpp:965 xs/src/libslic3r/PrintConfig.cpp:1279 +#: xs/src/libslic3r/PrintConfig.cpp:1452 xs/src/libslic3r/PrintConfig.cpp:1478 msgid "Extruders" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:438 +#: xs/src/slic3r/GUI/Tab.cpp:508 msgid "Ooze prevention" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:442 -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:149 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:91 +#: xs/src/slic3r/GUI/Tab.cpp:512 xs/src/libslic3r/GCode/PreviewData.cpp:149 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:91 msgid "Wipe tower" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:453 +#: xs/src/slic3r/GUI/Tab.cpp:523 msgid "Extrusion width" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:463 +#: xs/src/slic3r/GUI/Tab.cpp:533 msgid "Overlap" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:466 +#: xs/src/slic3r/GUI/Tab.cpp:536 msgid "Flow" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:469 +#: xs/src/slic3r/GUI/Tab.cpp:539 msgid "Other" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:476 +#: xs/src/slic3r/GUI/Tab.cpp:546 msgid "Output options" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:477 +#: xs/src/slic3r/GUI/Tab.cpp:547 msgid "Sequential printing" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:479 +#: xs/src/slic3r/GUI/Tab.cpp:549 msgid "Extruder clearance (mm)" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:488 +#: xs/src/slic3r/GUI/Tab.cpp:558 msgid "Output file" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:494 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1001 +#: xs/src/slic3r/GUI/Tab.cpp:564 xs/src/libslic3r/PrintConfig.cpp:1008 msgid "Post-processing scripts" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:500 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:501 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:859 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:860 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1156 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1157 +#: xs/src/slic3r/GUI/Tab.cpp:570 xs/src/slic3r/GUI/Tab.cpp:571 +#: xs/src/slic3r/GUI/Tab.cpp:933 xs/src/slic3r/GUI/Tab.cpp:934 +#: xs/src/slic3r/GUI/Tab.cpp:1234 xs/src/slic3r/GUI/Tab.cpp:1235 msgid "Notes" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:507 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:867 +#: xs/src/slic3r/GUI/Tab.cpp:577 xs/src/slic3r/GUI/Tab.cpp:941 msgid "Dependencies" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:508 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:868 +#: xs/src/slic3r/GUI/Tab.cpp:578 xs/src/slic3r/GUI/Tab.cpp:942 msgid "Profile dependencies" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:509 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:869 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1668 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:143 +#: xs/src/slic3r/GUI/Tab.cpp:579 xs/src/slic3r/GUI/Tab.cpp:943 +#: xs/src/slic3r/GUI/Tab.cpp:1746 xs/src/libslic3r/PrintConfig.cpp:143 msgid "Compatible printers" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:533 -#, no-c-format +#: xs/src/slic3r/GUI/Tab.cpp:603 +#, possible-c-format msgid "" "The Spiral Vase mode requires:\n" "- one perimeter\n" @@ -425,11 +395,11 @@ msgid "" "Shall I adjust those settings in order to enable Spiral Vase?" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:540 +#: xs/src/slic3r/GUI/Tab.cpp:610 msgid "Spiral Vase" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:560 +#: xs/src/slic3r/GUI/Tab.cpp:630 msgid "" "The Wipe Tower currently supports only:\n" "- first layer height 0.2mm\n" @@ -438,13 +408,12 @@ msgid "" "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 +#: xs/src/slic3r/GUI/Tab.cpp:634 xs/src/slic3r/GUI/Tab.cpp:656 +#: xs/src/slic3r/GUI/Tab.cpp:673 msgid "Wipe Tower" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:581 +#: xs/src/slic3r/GUI/Tab.cpp:652 msgid "" "The Wipe Tower currently supports the non-soluble supports only\n" "if they are printed with the current extruder without triggering a tool " @@ -455,7 +424,7 @@ msgid "" "Shall I adjust those settings in order to enable the Wipe Tower?" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:599 +#: xs/src/slic3r/GUI/Tab.cpp:670 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" "need to be synchronized with the object layers.\n" @@ -463,7 +432,7 @@ msgid "" "Shall I synchronize support layers in order to enable the Wipe Tower?" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:617 +#: xs/src/slic3r/GUI/Tab.cpp:688 msgid "" "Supports work better, if the following feature is enabled:\n" "- Detect bridging perimeters\n" @@ -471,351 +440,356 @@ msgid "" "Shall I adjust those settings for supports?" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:620 +#: xs/src/slic3r/GUI/Tab.cpp:691 msgid "Support Generator" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:662 +#: xs/src/slic3r/GUI/Tab.cpp:733 msgid "The " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:662 -#, no-c-format +#: xs/src/slic3r/GUI/Tab.cpp:733 +#, possible-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:786 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:787 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:368 +#: xs/src/slic3r/GUI/Tab.cpp:860 xs/src/slic3r/GUI/Tab.cpp:861 +#: lib/Slic3r/GUI/Plater.pm:368 msgid "Filament" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:794 +#: xs/src/slic3r/GUI/Tab.cpp:868 msgid "Temperature " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:795 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1234 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:307 +#: xs/src/slic3r/GUI/Tab.cpp:869 xs/src/slic3r/GUI/Tab.cpp:1313 +#: xs/src/libslic3r/PrintConfig.cpp:307 msgid "Extruder" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:800 +#: xs/src/slic3r/GUI/Tab.cpp:874 msgid "Bed" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:805 +#: xs/src/slic3r/GUI/Tab.cpp:879 msgid "Cooling" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:806 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:922 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1695 +#: xs/src/slic3r/GUI/Tab.cpp:880 xs/src/libslic3r/PrintConfig.cpp:929 +#: xs/src/libslic3r/PrintConfig.cpp:1702 msgid "Enable" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:817 +#: xs/src/slic3r/GUI/Tab.cpp:891 msgid "Fan settings" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:818 +#: xs/src/slic3r/GUI/Tab.cpp:892 msgid "Fan speed" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:826 +#: xs/src/slic3r/GUI/Tab.cpp:900 msgid "Cooling thresholds" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:832 +#: xs/src/slic3r/GUI/Tab.cpp:906 msgid "Filament properties" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:836 +#: xs/src/slic3r/GUI/Tab.cpp:910 msgid "Print speed override" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:846 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1119 +#: xs/src/slic3r/GUI/Tab.cpp:920 xs/src/slic3r/GUI/Tab.cpp:1197 msgid "Custom G-code" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:847 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1120 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1342 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1357 +#: xs/src/slic3r/GUI/Tab.cpp:921 xs/src/slic3r/GUI/Tab.cpp:1198 +#: xs/src/libslic3r/PrintConfig.cpp:1349 xs/src/libslic3r/PrintConfig.cpp:1364 msgid "Start G-code" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:853 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1126 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:217 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:227 +#: xs/src/slic3r/GUI/Tab.cpp:927 xs/src/slic3r/GUI/Tab.cpp:1204 +#: xs/src/libslic3r/PrintConfig.cpp:217 xs/src/libslic3r/PrintConfig.cpp:227 msgid "End G-code" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:937 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:11 +#: xs/src/slic3r/GUI/Tab.cpp:1011 xs/src/slic3r/GUI/Preferences.cpp:11 msgid "General" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:938 +#: xs/src/slic3r/GUI/Tab.cpp:1012 msgid "Size and coordinates" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:940 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:34 +#: xs/src/slic3r/GUI/Tab.cpp:1014 xs/src/libslic3r/PrintConfig.cpp:34 msgid "Bed shape" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:942 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1637 +#: xs/src/slic3r/GUI/Tab.cpp:1016 xs/src/slic3r/GUI/Tab.cpp:1715 msgid " Set " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:962 +#: xs/src/slic3r/GUI/Tab.cpp:1036 msgid "Capabilities" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:967 +#: xs/src/slic3r/GUI/Tab.cpp:1041 msgid "Number of extruders of the printer." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:989 +#: xs/src/slic3r/GUI/Tab.cpp:1063 msgid "USB/Serial connection" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:990 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1193 +#: xs/src/slic3r/GUI/Tab.cpp:1064 xs/src/libslic3r/PrintConfig.cpp:1200 msgid "Serial port" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:995 +#: xs/src/slic3r/GUI/Tab.cpp:1069 msgid "Rescan serial ports" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1004 -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1072 +#: xs/src/slic3r/GUI/Tab.cpp:1078 xs/src/slic3r/GUI/Tab.cpp:1125 msgid "Test" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1017 +#: xs/src/slic3r/GUI/Tab.cpp:1091 msgid "Connection to printer works correctly." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1017 +#: xs/src/slic3r/GUI/Tab.cpp:1091 xs/src/slic3r/GUI/Tab.cpp:1135 msgid "Success!" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1020 +#: xs/src/slic3r/GUI/Tab.cpp:1094 msgid "Connection failed." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1032 +#: xs/src/slic3r/GUI/Tab.cpp:1106 msgid "OctoPrint upload" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1035 +#: xs/src/slic3r/GUI/Tab.cpp:1109 xs/src/slic3r/GUI/Tab.cpp:1156 msgid " Browse " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1110 +#: xs/src/slic3r/GUI/Tab.cpp:1135 lib/Slic3r/GUI/MainFrame.pm:209 +msgid "Connection to OctoPrint works correctly." +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:1138 +msgid "Could not connect to OctoPrint" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:1138 +msgid "Note: OctoPrint version at least 1.1.0 is required." +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:1162 +msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:1163 +msgid "Open CA certificate file" +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:1177 +msgid "" +"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" +"signed certificate." +msgstr "" + +#: xs/src/slic3r/GUI/Tab.cpp:1188 msgid "Firmware" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1132 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:48 +#: xs/src/slic3r/GUI/Tab.cpp:1210 xs/src/libslic3r/PrintConfig.cpp:48 msgid "Before layer change G-code" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1138 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:766 +#: xs/src/slic3r/GUI/Tab.cpp:1216 xs/src/libslic3r/PrintConfig.cpp:766 msgid "After layer change G-code" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1144 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1602 +#: xs/src/slic3r/GUI/Tab.cpp:1222 xs/src/libslic3r/PrintConfig.cpp:1609 msgid "Tool change G-code" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1150 +#: xs/src/slic3r/GUI/Tab.cpp:1228 msgid "Between objects G-code (for sequential printing)" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1187 -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:400 +#: xs/src/slic3r/GUI/Tab.cpp:1266 xs/src/libslic3r/GCode/PreviewData.cpp:400 #, possible-c-format msgid "Extruder %d" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1194 +#: xs/src/slic3r/GUI/Tab.cpp:1273 msgid "Layer height limits" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1199 +#: xs/src/slic3r/GUI/Tab.cpp:1278 msgid "Position (for multi-extruder printers)" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1202 +#: xs/src/slic3r/GUI/Tab.cpp:1281 msgid "Retraction" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1205 +#: xs/src/slic3r/GUI/Tab.cpp:1284 msgid "Only lift Z" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1218 +#: xs/src/slic3r/GUI/Tab.cpp:1297 msgid "" "Retraction when tool is disabled (advanced settings for multi-extruder " "setups)" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1222 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:150 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2125 +#: xs/src/slic3r/GUI/Tab.cpp:1301 lib/Slic3r/GUI/Plater.pm:150 +#: lib/Slic3r/GUI/Plater.pm:2095 msgid "Preview" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1312 +#: xs/src/slic3r/GUI/Tab.cpp:1386 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 "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1314 +#: xs/src/slic3r/GUI/Tab.cpp:1388 msgid "Firmware Retraction" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1469 +#: xs/src/slic3r/GUI/Tab.cpp:1547 msgid "Default " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1469 +#: xs/src/slic3r/GUI/Tab.cpp:1547 msgid " preset" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1470 +#: xs/src/slic3r/GUI/Tab.cpp:1548 msgid " preset\n" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1488 +#: xs/src/slic3r/GUI/Tab.cpp:1566 msgid "" "\n" "\n" "is not compatible with printer\n" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1488 +#: xs/src/slic3r/GUI/Tab.cpp:1566 msgid "" "\n" "\n" "and it has the following unsaved changes:" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1489 +#: xs/src/slic3r/GUI/Tab.cpp:1567 msgid "" "\n" "\n" "has the following unsaved changes:" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1491 +#: xs/src/slic3r/GUI/Tab.cpp:1569 msgid "" "\n" "\n" "Discard changes and continue anyway?" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1492 +#: xs/src/slic3r/GUI/Tab.cpp:1570 msgid "Unsaved Changes" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1560 +#: xs/src/slic3r/GUI/Tab.cpp:1638 msgid "The supplied name is empty. It can't be saved." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1580 +#: xs/src/slic3r/GUI/Tab.cpp:1658 msgid "remove" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1580 +#: xs/src/slic3r/GUI/Tab.cpp:1658 msgid "delete" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1581 +#: xs/src/slic3r/GUI/Tab.cpp:1659 msgid "Are you sure you want to " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1581 +#: xs/src/slic3r/GUI/Tab.cpp:1659 msgid " the selected preset?" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1582 +#: xs/src/slic3r/GUI/Tab.cpp:1660 msgid "Remove" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1582 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:178 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:196 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2021 +#: xs/src/slic3r/GUI/Tab.cpp:1660 lib/Slic3r/GUI/Plater.pm:178 +#: lib/Slic3r/GUI/Plater.pm:196 lib/Slic3r/GUI/Plater.pm:1991 msgid "Delete" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1583 +#: xs/src/slic3r/GUI/Tab.cpp:1661 msgid " Preset" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1636 +#: xs/src/slic3r/GUI/Tab.cpp:1714 msgid "All" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1667 +#: xs/src/slic3r/GUI/Tab.cpp:1745 msgid "Select the printers this profile is compatible with." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1751 -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:514 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1645 +#: xs/src/slic3r/GUI/Tab.cpp:1834 lib/Slic3r/GUI/MainFrame.pm:509 +#: lib/Slic3r/GUI/Plater.pm:1615 msgid "Save " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1751 +#: xs/src/slic3r/GUI/Tab.cpp:1834 msgid " as:" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1785 +#: xs/src/slic3r/GUI/Tab.cpp:1868 msgid "" "The supplied name is not valid; the following characters are not allowed:" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.cpp:1788 +#: xs/src/slic3r/GUI/Tab.cpp:1871 msgid "The supplied name is not available." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:182 +#: xs/src/slic3r/GUI/Tab.hpp:185 msgid "Print Settings" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:202 +#: xs/src/slic3r/GUI/Tab.hpp:205 msgid "Filament Settings" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:228 +#: xs/src/slic3r/GUI/Tab.hpp:226 msgid "Printer Settings" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Tab.hpp:248 +#: xs/src/slic3r/GUI/Tab.hpp:240 msgid "Save preset" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Field.cpp:42 +#: xs/src/slic3r/GUI/Field.cpp:59 msgid "default" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:26 +#: xs/src/slic3r/GUI/PresetHints.cpp:27 #, possible-c-format msgid "" "If estimated layer time is below ~%ds, fan will run at %d%% and print speed " @@ -823,7 +797,7 @@ msgid "" "speed will never be reduced below %dmm/s)." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:30 +#: xs/src/slic3r/GUI/PresetHints.cpp:31 #, possible-c-format msgid "" "\n" @@ -831,330 +805,355 @@ msgid "" "proportionally decreasing speed between %d%% and %d%%." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:34 +#: xs/src/slic3r/GUI/PresetHints.cpp:35 msgid "" "\n" "During the other layers, fan " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:36 +#: xs/src/slic3r/GUI/PresetHints.cpp:37 msgid "Fan " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:41 +#: xs/src/slic3r/GUI/PresetHints.cpp:42 #, possible-c-format msgid "will always run at %d%% " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:44 +#: xs/src/slic3r/GUI/PresetHints.cpp:45 #, possible-c-format msgid "except for the first %d layers" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:48 +#: xs/src/slic3r/GUI/PresetHints.cpp:49 msgid "except for the first layer" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:50 +#: xs/src/slic3r/GUI/PresetHints.cpp:51 msgid "will be turned off." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:151 +#: xs/src/slic3r/GUI/PresetHints.cpp:152 msgid "external perimeters" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:160 +#: xs/src/slic3r/GUI/PresetHints.cpp:161 msgid "perimeters" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:169 +#: xs/src/slic3r/GUI/PresetHints.cpp:170 msgid "infill" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:179 +#: xs/src/slic3r/GUI/PresetHints.cpp:180 msgid "solid infill" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:187 +#: xs/src/slic3r/GUI/PresetHints.cpp:188 msgid "top solid infill" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:198 +#: xs/src/slic3r/GUI/PresetHints.cpp:199 msgid "support" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:208 +#: xs/src/slic3r/GUI/PresetHints.cpp:209 msgid "support interface" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:214 +#: xs/src/slic3r/GUI/PresetHints.cpp:215 msgid "First layer volumetric" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:214 +#: xs/src/slic3r/GUI/PresetHints.cpp:215 msgid "Bridging volumetric" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:214 +#: xs/src/slic3r/GUI/PresetHints.cpp:215 msgid "Volumetric" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:215 +#: xs/src/slic3r/GUI/PresetHints.cpp:216 msgid " flow rate is maximized " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:218 +#: xs/src/slic3r/GUI/PresetHints.cpp:219 msgid "by the print profile maximum" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:219 +#: xs/src/slic3r/GUI/PresetHints.cpp:220 msgid "when printing " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:220 +#: xs/src/slic3r/GUI/PresetHints.cpp:221 msgid " with a volumetric rate " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:224 +#: xs/src/slic3r/GUI/PresetHints.cpp:225 #, possible-c-format msgid "%3.2f mm³/s" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:226 +#: xs/src/slic3r/GUI/PresetHints.cpp:227 #, possible-c-format msgid " at filament speed %3.2f mm/s." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:245 +#: xs/src/slic3r/GUI/PresetHints.cpp:246 msgid "" "Recommended object thin wall thickness: Not available due to invalid layer " "height." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:262 +#: xs/src/slic3r/GUI/PresetHints.cpp:263 #, possible-c-format msgid "Recommended object thin wall thickness for layer height %.2f and " msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\PresetHints.cpp:269 +#: xs/src/slic3r/GUI/PresetHints.cpp:270 #, possible-c-format msgid "%d lines: %.2lf mm" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.hpp:17 +#: xs/src/slic3r/GUI/Preferences.hpp:17 msgid "Preferences" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:27 +#: xs/src/slic3r/GUI/Preferences.cpp:27 msgid "Remember output directory" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:29 +#: xs/src/slic3r/GUI/Preferences.cpp:29 msgid "" "If this is enabled, Slic3r will prompt the last output directory instead of " "the one containing the input files." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:35 +#: xs/src/slic3r/GUI/Preferences.cpp:35 msgid "Auto-center parts" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:37 +#: xs/src/slic3r/GUI/Preferences.cpp:37 msgid "" "If this is enabled, Slic3r will auto-center objects around the print bed " "center." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:43 +#: xs/src/slic3r/GUI/Preferences.cpp:43 msgid "Background processing" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:45 +#: xs/src/slic3r/GUI/Preferences.cpp:45 msgid "" "If this is enabled, Slic3r will pre-process objects as soon as they're " "loaded in order to save time when exporting G-code." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:51 +#: xs/src/slic3r/GUI/Preferences.cpp:51 msgid "Disable USB/serial connection" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:53 +#: xs/src/slic3r/GUI/Preferences.cpp:53 msgid "" "Disable communication with the printer over a serial / USB cable. This " "simplifies the user interface in case the printer is never attached to the " "computer." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:59 +#: xs/src/slic3r/GUI/Preferences.cpp:59 msgid "Suppress \" - default - \" presets" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:61 +#: xs/src/slic3r/GUI/Preferences.cpp:61 msgid "" "Suppress \" - default - \" presets in the Print / Filament / Printer " "selections once there are any other valid presets available." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:67 +#: xs/src/slic3r/GUI/Preferences.cpp:67 msgid "Show incompatible print and filament presets" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:69 +#: xs/src/slic3r/GUI/Preferences.cpp:69 msgid "" "When checked, the print and filament presets are shown in the preset editor " "even if they are marked as incompatible with the active printer" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:75 +#: xs/src/slic3r/GUI/Preferences.cpp:75 msgid "Use legacy OpenGL 1.1 rendering" msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:77 +#: xs/src/slic3r/GUI/Preferences.cpp:77 msgid "" "If you have rendering issues caused by a buggy OpenGL 2.0 driver, you may " "try to check this checkbox. This will disable the layer height editing and " "anti aliasing, so it is likely better to upgrade your graphics driver." msgstr "" -#: c:\src\Slic3r\xs\src\slic3r\GUI\Preferences.cpp:101 +#: xs/src/slic3r/GUI/Preferences.cpp:101 msgid "You need to restart Slic3r to make the changes effective." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:26 +#: xs/src/slic3r/GUI/BonjourDialog.cpp:53 +msgid "Network lookup" +msgstr "" + +#: xs/src/slic3r/GUI/BonjourDialog.cpp:66 +msgid "Address" +msgstr "" + +#: xs/src/slic3r/GUI/BonjourDialog.cpp:67 +msgid "Hostname" +msgstr "" + +#: xs/src/slic3r/GUI/BonjourDialog.cpp:68 +msgid "Service name" +msgstr "" + +#: xs/src/slic3r/GUI/BonjourDialog.cpp:69 +msgid "OctoPrint version" +msgstr "" + +#: xs/src/slic3r/GUI/BonjourDialog.cpp:187 +msgid "Searching for devices" +msgstr "" + +#: xs/src/slic3r/GUI/BonjourDialog.cpp:194 +msgid "Finished." +msgstr "" + +#: xs/src/slic3r/Utils/OctoPrint.cpp:53 +msgid "G-code file successfully uploaded to the OctoPrint server" +msgstr "" + +#: xs/src/slic3r/Utils/OctoPrint.cpp:67 +msgid "Error while uploading to the OctoPrint server" +msgstr "" + +#: xs/src/slic3r/Utils/OctoPrint.cpp:102 +msgid "Invalid API key" +msgstr "" + +#: xs/src/libslic3r/PrintConfig.cpp:26 msgid "Avoid crossing perimeters" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:27 +#: xs/src/libslic3r/PrintConfig.cpp:27 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:38 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1572 +#: xs/src/libslic3r/PrintConfig.cpp:38 xs/src/libslic3r/PrintConfig.cpp:1579 msgid "Other layers" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:39 +#: xs/src/libslic3r/PrintConfig.cpp:39 msgid "" "Bed temperature for layers after the first one. Set this to zero to disable " "bed temperature control commands in the output." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:42 +#: xs/src/libslic3r/PrintConfig.cpp:42 msgid "Bed temperature" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:49 +#: xs/src/libslic3r/PrintConfig.cpp:49 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:59 +#: xs/src/libslic3r/PrintConfig.cpp:59 msgid "Between objects G-code" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:60 +#: xs/src/libslic3r/PrintConfig.cpp:60 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." +"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:68 -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:370 +#: xs/src/libslic3r/PrintConfig.cpp:68 lib/Slic3r/GUI/MainFrame.pm:364 msgid "Bottom" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:69 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:239 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:290 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:298 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:604 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:762 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:778 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:941 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:989 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1152 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1583 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1639 +#: xs/src/libslic3r/PrintConfig.cpp:69 xs/src/libslic3r/PrintConfig.cpp:239 +#: xs/src/libslic3r/PrintConfig.cpp:290 xs/src/libslic3r/PrintConfig.cpp:298 +#: xs/src/libslic3r/PrintConfig.cpp:604 xs/src/libslic3r/PrintConfig.cpp:762 +#: xs/src/libslic3r/PrintConfig.cpp:778 xs/src/libslic3r/PrintConfig.cpp:948 +#: xs/src/libslic3r/PrintConfig.cpp:996 xs/src/libslic3r/PrintConfig.cpp:1159 +#: xs/src/libslic3r/PrintConfig.cpp:1590 xs/src/libslic3r/PrintConfig.cpp:1646 msgid "Layers and Perimeters" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:70 +#: xs/src/libslic3r/PrintConfig.cpp:70 msgid "Number of solid layers to generate on bottom surfaces." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:72 +#: xs/src/libslic3r/PrintConfig.cpp:72 msgid "Bottom solid layers" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:77 +#: xs/src/libslic3r/PrintConfig.cpp:77 msgid "Bridge" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:78 +#: xs/src/libslic3r/PrintConfig.cpp:78 msgid "" "This is the acceleration your printer will use for bridges. Set zero to " "disable acceleration control for bridges." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:80 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:174 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:576 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:684 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:952 +#: xs/src/libslic3r/PrintConfig.cpp:80 xs/src/libslic3r/PrintConfig.cpp:174 +#: xs/src/libslic3r/PrintConfig.cpp:576 xs/src/libslic3r/PrintConfig.cpp:684 +#: xs/src/libslic3r/PrintConfig.cpp:959 msgid "mm/s²" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:86 +#: xs/src/libslic3r/PrintConfig.cpp:86 msgid "Bridging angle" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:88 +#: xs/src/libslic3r/PrintConfig.cpp:88 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° for zero angle." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:91 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:492 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1170 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1181 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1401 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1557 +#: xs/src/libslic3r/PrintConfig.cpp:91 xs/src/libslic3r/PrintConfig.cpp:492 +#: xs/src/libslic3r/PrintConfig.cpp:1177 xs/src/libslic3r/PrintConfig.cpp:1188 +#: xs/src/libslic3r/PrintConfig.cpp:1408 xs/src/libslic3r/PrintConfig.cpp:1564 msgid "°" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:97 +#: xs/src/libslic3r/PrintConfig.cpp:97 msgid "Bridges fan speed" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:98 +#: xs/src/libslic3r/PrintConfig.cpp:98 msgid "This fan speed is enforced during all bridges and overhangs." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:99 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:504 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:789 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:850 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1060 +#: xs/src/libslic3r/PrintConfig.cpp:99 xs/src/libslic3r/PrintConfig.cpp:504 +#: xs/src/libslic3r/PrintConfig.cpp:789 xs/src/libslic3r/PrintConfig.cpp:850 +#: xs/src/libslic3r/PrintConfig.cpp:1067 msgid "%" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:106 +#: xs/src/libslic3r/PrintConfig.cpp:106 msgid "Bridge flow ratio" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:108 +#: xs/src/libslic3r/PrintConfig.cpp:108 msgid "" "This factor affects the amount of plastic for bridging. You can decrease it " "slightly to pull the extrudates and prevent sagging, although default " @@ -1162,64 +1161,59 @@ msgid "" "before tweaking this." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:117 +#: xs/src/libslic3r/PrintConfig.cpp:117 msgid "Bridges" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:119 +#: xs/src/libslic3r/PrintConfig.cpp:119 msgid "Speed for printing bridges." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:120 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:638 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:749 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:811 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:868 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:981 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1137 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1146 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1536 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1649 +#: xs/src/libslic3r/PrintConfig.cpp:120 xs/src/libslic3r/PrintConfig.cpp:638 +#: xs/src/libslic3r/PrintConfig.cpp:749 xs/src/libslic3r/PrintConfig.cpp:811 +#: xs/src/libslic3r/PrintConfig.cpp:868 xs/src/libslic3r/PrintConfig.cpp:988 +#: xs/src/libslic3r/PrintConfig.cpp:1144 xs/src/libslic3r/PrintConfig.cpp:1153 +#: xs/src/libslic3r/PrintConfig.cpp:1543 xs/src/libslic3r/PrintConfig.cpp:1656 msgid "mm/s" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:127 +#: xs/src/libslic3r/PrintConfig.cpp:127 msgid "Brim width" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:128 +#: xs/src/libslic3r/PrintConfig.cpp:128 msgid "" "Horizontal width of the brim that will be printed around each object on the " "first layer." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:135 +#: xs/src/libslic3r/PrintConfig.cpp:135 msgid "Clip multi-part objects" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:136 +#: xs/src/libslic3r/PrintConfig.cpp:136 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:147 +#: xs/src/libslic3r/PrintConfig.cpp:147 msgid "Compatible printers condition" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:148 +#: xs/src/libslic3r/PrintConfig.cpp:148 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:154 +#: xs/src/libslic3r/PrintConfig.cpp:154 msgid "Complete individual objects" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:155 +#: xs/src/libslic3r/PrintConfig.cpp:155 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). " @@ -1227,78 +1221,75 @@ msgid "" "warn and prevent you from extruder collisions, but beware." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:163 +#: xs/src/libslic3r/PrintConfig.cpp:163 msgid "Enable auto cooling" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:164 +#: xs/src/libslic3r/PrintConfig.cpp:164 msgid "" "This flag enables the automatic cooling logic that adjusts print speed and " "fan speed according to layer printing time." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:171 +#: xs/src/libslic3r/PrintConfig.cpp:171 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:180 +#: xs/src/libslic3r/PrintConfig.cpp:180 msgid "Disable fan for the first" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:181 +#: xs/src/libslic3r/PrintConfig.cpp:181 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:183 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:694 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1033 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1224 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1285 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1437 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1482 +#: xs/src/libslic3r/PrintConfig.cpp:183 xs/src/libslic3r/PrintConfig.cpp:694 +#: xs/src/libslic3r/PrintConfig.cpp:1040 xs/src/libslic3r/PrintConfig.cpp:1231 +#: xs/src/libslic3r/PrintConfig.cpp:1292 xs/src/libslic3r/PrintConfig.cpp:1444 +#: xs/src/libslic3r/PrintConfig.cpp:1489 msgid "layers" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:190 +#: xs/src/libslic3r/PrintConfig.cpp:190 msgid "Don't support bridges" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:192 +#: xs/src/libslic3r/PrintConfig.cpp:192 msgid "" "Experimental option for preventing support material from being generated " "under bridged areas." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:198 +#: xs/src/libslic3r/PrintConfig.cpp:198 msgid "Distance between copies" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:199 +#: xs/src/libslic3r/PrintConfig.cpp:199 msgid "Distance used for the auto-arrange feature of the plater." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:207 +#: xs/src/libslic3r/PrintConfig.cpp:207 msgid "Elephant foot compensation" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:209 +#: xs/src/libslic3r/PrintConfig.cpp:209 msgid "" "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." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:218 +#: xs/src/libslic3r/PrintConfig.cpp:218 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:228 +#: xs/src/libslic3r/PrintConfig.cpp:228 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 " @@ -1306,43 +1297,38 @@ msgid "" "extruder order." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:238 +#: xs/src/libslic3r/PrintConfig.cpp:238 msgid "Ensure vertical shell thickness" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:240 +#: xs/src/libslic3r/PrintConfig.cpp:240 msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " "thickness (top+bottom solid layers)." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:246 +#: xs/src/libslic3r/PrintConfig.cpp:246 msgid "Top/bottom fill pattern" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:248 +#: xs/src/libslic3r/PrintConfig.cpp:248 msgid "" "Fill pattern for top/bottom infill. This only affects the external visible " "layer, and not its adjacent solid shells." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:267 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:277 +#: xs/src/libslic3r/PrintConfig.cpp:267 xs/src/libslic3r/PrintConfig.cpp:277 msgid "External perimeters" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:268 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:377 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:592 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:710 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:967 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1292 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1454 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1614 +#: xs/src/libslic3r/PrintConfig.cpp:268 xs/src/libslic3r/PrintConfig.cpp:377 +#: xs/src/libslic3r/PrintConfig.cpp:592 xs/src/libslic3r/PrintConfig.cpp:710 +#: xs/src/libslic3r/PrintConfig.cpp:974 xs/src/libslic3r/PrintConfig.cpp:1299 +#: xs/src/libslic3r/PrintConfig.cpp:1461 xs/src/libslic3r/PrintConfig.cpp:1621 msgid "Extrusion Width" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:269 +#: xs/src/libslic3r/PrintConfig.cpp:269 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, " @@ -1350,67 +1336,60 @@ msgid "" "(for example 200%), it will be computed over layer height." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:272 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:597 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:715 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:972 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1296 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1458 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1619 +#: xs/src/libslic3r/PrintConfig.cpp:272 xs/src/libslic3r/PrintConfig.cpp:597 +#: xs/src/libslic3r/PrintConfig.cpp:715 xs/src/libslic3r/PrintConfig.cpp:979 +#: xs/src/libslic3r/PrintConfig.cpp:1303 xs/src/libslic3r/PrintConfig.cpp:1465 +#: xs/src/libslic3r/PrintConfig.cpp:1626 msgid "mm or % (leave 0 for default)" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:279 +#: xs/src/libslic3r/PrintConfig.cpp:279 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:282 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:619 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1255 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1306 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1501 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1631 +#: xs/src/libslic3r/PrintConfig.cpp:282 xs/src/libslic3r/PrintConfig.cpp:619 +#: xs/src/libslic3r/PrintConfig.cpp:1262 xs/src/libslic3r/PrintConfig.cpp:1313 +#: xs/src/libslic3r/PrintConfig.cpp:1508 xs/src/libslic3r/PrintConfig.cpp:1638 msgid "mm/s or %" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:289 +#: xs/src/libslic3r/PrintConfig.cpp:289 msgid "External perimeters first" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:291 +#: xs/src/libslic3r/PrintConfig.cpp:291 msgid "" "Print contour perimeters from the outermost one to the innermost one instead " "of the default inverse order." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:297 +#: xs/src/libslic3r/PrintConfig.cpp:297 msgid "Extra perimeters if needed" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:299 -#, no-c-format +#: xs/src/libslic3r/PrintConfig.cpp:299 +#, possible-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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:309 +#: xs/src/libslic3r/PrintConfig.cpp:309 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:320 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:69 +#: xs/src/libslic3r/PrintConfig.cpp:320 lib/Slic3r/GUI/Plater/3DPreview.pm:69 msgid "Height" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:321 +#: xs/src/libslic3r/PrintConfig.cpp:321 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 " @@ -1418,31 +1397,30 @@ msgid "" "extruder can peek before colliding with other printed objects." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:331 +#: xs/src/libslic3r/PrintConfig.cpp:331 msgid "Radius" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:332 +#: xs/src/libslic3r/PrintConfig.cpp:332 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:342 +#: xs/src/libslic3r/PrintConfig.cpp:342 msgid "Extruder Color" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:343 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:406 +#: xs/src/libslic3r/PrintConfig.cpp:343 xs/src/libslic3r/PrintConfig.cpp:406 msgid "This is only used in the Slic3r interface as a visual help." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:350 +#: xs/src/libslic3r/PrintConfig.cpp:350 msgid "Extruder offset" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:351 +#: xs/src/libslic3r/PrintConfig.cpp:351 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 " @@ -1450,21 +1428,21 @@ msgid "" "coordinates (they will be subtracted from the XY coordinate)." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:360 +#: xs/src/libslic3r/PrintConfig.cpp:360 msgid "Extrusion axis" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:361 +#: xs/src/libslic3r/PrintConfig.cpp:361 msgid "" "Use this option to set the axis letter associated to your printer's extruder " "(usually E but some printers use A)." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:367 +#: xs/src/libslic3r/PrintConfig.cpp:367 msgid "Extrusion multiplier" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:368 +#: xs/src/libslic3r/PrintConfig.cpp:368 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. " @@ -1472,11 +1450,11 @@ msgid "" "more, check filament diameter and your firmware E steps." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:376 +#: xs/src/libslic3r/PrintConfig.cpp:376 msgid "Default extrusion width" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:378 +#: xs/src/libslic3r/PrintConfig.cpp:378 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 " @@ -1485,77 +1463,74 @@ msgid "" "height." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:382 +#: xs/src/libslic3r/PrintConfig.cpp:382 msgid "mm or % (leave 0 for auto)" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:387 +#: xs/src/libslic3r/PrintConfig.cpp:387 msgid "Keep fan always on" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:388 +#: xs/src/libslic3r/PrintConfig.cpp:388 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:394 +#: xs/src/libslic3r/PrintConfig.cpp:394 msgid "Enable fan if layer print time is below" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:395 +#: xs/src/libslic3r/PrintConfig.cpp:395 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:397 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1242 +#: xs/src/libslic3r/PrintConfig.cpp:397 xs/src/libslic3r/PrintConfig.cpp:1249 msgid "approximate seconds" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:405 +#: xs/src/libslic3r/PrintConfig.cpp:405 msgid "Color" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:412 +#: xs/src/libslic3r/PrintConfig.cpp:412 msgid "Filament notes" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:413 +#: xs/src/libslic3r/PrintConfig.cpp:413 msgid "You can put your notes regarding the filament here." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:421 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:817 +#: xs/src/libslic3r/PrintConfig.cpp:421 xs/src/libslic3r/PrintConfig.cpp:817 msgid "Max volumetric speed" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:422 +#: xs/src/libslic3r/PrintConfig.cpp:422 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:425 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:820 +#: xs/src/libslic3r/PrintConfig.cpp:425 xs/src/libslic3r/PrintConfig.cpp:820 msgid "mm³/s" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:432 +#: xs/src/libslic3r/PrintConfig.cpp:432 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:440 +#: xs/src/libslic3r/PrintConfig.cpp:440 msgid "Density" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:441 +#: xs/src/libslic3r/PrintConfig.cpp:441 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 " @@ -1563,16 +1538,15 @@ msgid "" "displacement." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:444 +#: xs/src/libslic3r/PrintConfig.cpp:444 msgid "g/cm³" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:450 +#: xs/src/libslic3r/PrintConfig.cpp:450 msgid "Filament type" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:451 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1002 +#: xs/src/libslic3r/PrintConfig.cpp:451 xs/src/libslic3r/PrintConfig.cpp:1009 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. " @@ -1581,77 +1555,73 @@ msgid "" "environment variables." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:470 +#: xs/src/libslic3r/PrintConfig.cpp:470 msgid "Soluble material" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:471 +#: xs/src/libslic3r/PrintConfig.cpp:471 msgid "Soluble material is most likely used for a soluble support." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:476 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:450 +#: xs/src/libslic3r/PrintConfig.cpp:476 lib/Slic3r/GUI/Plater.pm:453 msgid "Cost" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:477 +#: xs/src/libslic3r/PrintConfig.cpp:477 msgid "" "Enter your filament cost per kg here. This is only for statistical " "information." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:478 +#: xs/src/libslic3r/PrintConfig.cpp:478 msgid "money/kg" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:487 +#: xs/src/libslic3r/PrintConfig.cpp:487 msgid "Fill angle" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:489 +#: xs/src/libslic3r/PrintConfig.cpp:489 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 "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:501 +#: xs/src/libslic3r/PrintConfig.cpp:501 msgid "Fill density" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:503 -#, no-c-format +#: xs/src/libslic3r/PrintConfig.cpp:503 msgid "Density of internal infill, expressed in the range 0% - 100%." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:539 +#: xs/src/libslic3r/PrintConfig.cpp:539 msgid "Fill pattern" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:541 +#: xs/src/libslic3r/PrintConfig.cpp:541 msgid "Fill pattern for general low-density infill." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:573 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:582 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:591 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:625 +#: xs/src/libslic3r/PrintConfig.cpp:573 xs/src/libslic3r/PrintConfig.cpp:582 +#: xs/src/libslic3r/PrintConfig.cpp:591 xs/src/libslic3r/PrintConfig.cpp:625 msgid "First layer" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:574 +#: xs/src/libslic3r/PrintConfig.cpp:574 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:583 +#: xs/src/libslic3r/PrintConfig.cpp:583 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:593 +#: xs/src/libslic3r/PrintConfig.cpp:593 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 " @@ -1659,11 +1629,11 @@ msgid "" "layer height. If set to zero, it will use the default extrusion width." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:603 +#: xs/src/libslic3r/PrintConfig.cpp:603 msgid "First layer height" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:605 +#: xs/src/libslic3r/PrintConfig.cpp:605 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 " @@ -1671,59 +1641,58 @@ msgid "" "example: 150%) over the default layer height." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:609 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:740 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1390 +#: xs/src/libslic3r/PrintConfig.cpp:609 xs/src/libslic3r/PrintConfig.cpp:740 +#: xs/src/libslic3r/PrintConfig.cpp:1397 msgid "mm or %" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:615 +#: xs/src/libslic3r/PrintConfig.cpp:615 msgid "First layer speed" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:616 +#: xs/src/libslic3r/PrintConfig.cpp:616 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:626 +#: xs/src/libslic3r/PrintConfig.cpp:626 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:634 -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:145 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:87 +#: xs/src/libslic3r/PrintConfig.cpp:634 +#: xs/src/libslic3r/GCode/PreviewData.cpp:145 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:87 msgid "Gap fill" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:636 +#: xs/src/libslic3r/PrintConfig.cpp:636 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:644 +#: xs/src/libslic3r/PrintConfig.cpp:644 msgid "Verbose G-code" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:645 +#: xs/src/libslic3r/PrintConfig.cpp:645 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:652 +#: xs/src/libslic3r/PrintConfig.cpp:652 msgid "G-code flavor" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:653 +#: xs/src/libslic3r/PrintConfig.cpp:653 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 " @@ -1731,35 +1700,35 @@ msgid "" "extrusion value at all." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:682 +#: xs/src/libslic3r/PrintConfig.cpp:682 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:690 +#: xs/src/libslic3r/PrintConfig.cpp:690 msgid "Combine infill every" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:692 +#: xs/src/libslic3r/PrintConfig.cpp:692 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:696 +#: xs/src/libslic3r/PrintConfig.cpp:696 msgid "Combine infill every n layers" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:701 +#: xs/src/libslic3r/PrintConfig.cpp:701 msgid "Infill extruder" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:703 +#: xs/src/libslic3r/PrintConfig.cpp:703 msgid "The extruder to use when printing infill." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:711 +#: xs/src/libslic3r/PrintConfig.cpp:711 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 " @@ -1768,32 +1737,32 @@ msgid "" "example 90%) it will be computed over layer height." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:720 +#: xs/src/libslic3r/PrintConfig.cpp:720 msgid "Infill before perimeters" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:721 +#: xs/src/libslic3r/PrintConfig.cpp:721 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:726 +#: xs/src/libslic3r/PrintConfig.cpp:726 msgid "Only infill where needed" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:728 +#: xs/src/libslic3r/PrintConfig.cpp:728 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:735 +#: xs/src/libslic3r/PrintConfig.cpp:735 msgid "Infill/perimeters overlap" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:737 +#: xs/src/libslic3r/PrintConfig.cpp:737 msgid "" "This setting applies an additional overlap between infill and perimeters for " "better bonding. Theoretically this shouldn't be needed, but backlash might " @@ -1801,22 +1770,22 @@ msgid "" "perimeter extrusion width." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:748 +#: xs/src/libslic3r/PrintConfig.cpp:748 msgid "Speed for printing the internal fill. Set to zero for auto." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:757 +#: xs/src/libslic3r/PrintConfig.cpp:757 msgid "Interface shells" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:758 +#: xs/src/libslic3r/PrintConfig.cpp:758 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:767 +#: xs/src/libslic3r/PrintConfig.cpp:767 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 " @@ -1824,23 +1793,22 @@ msgid "" "[layer_z]." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:779 +#: xs/src/libslic3r/PrintConfig.cpp:779 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:787 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:796 +#: xs/src/libslic3r/PrintConfig.cpp:787 xs/src/libslic3r/PrintConfig.cpp:796 msgid "Max" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:788 +#: xs/src/libslic3r/PrintConfig.cpp:788 msgid "This setting represents the maximum speed of your fan." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:797 -#, no-c-format +#: xs/src/libslic3r/PrintConfig.cpp:797 +#, possible-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 " @@ -1848,29 +1816,28 @@ msgid "" "adhesion. If set to 0, layer height is limited to 75% of the nozzle diameter." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:807 +#: xs/src/libslic3r/PrintConfig.cpp:807 msgid "Max print speed" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:808 +#: xs/src/libslic3r/PrintConfig.cpp:808 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:818 +#: xs/src/libslic3r/PrintConfig.cpp:818 msgid "" "This experimental setting is used to set the maximum volumetric speed your " "extruder supports." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:826 +#: xs/src/libslic3r/PrintConfig.cpp:826 msgid "Max volumetric slope positive" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:827 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:838 +#: xs/src/libslic3r/PrintConfig.cpp:827 xs/src/libslic3r/PrintConfig.cpp:838 msgid "" "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 " @@ -1878,111 +1845,109 @@ msgid "" "s) to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:831 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:842 +#: xs/src/libslic3r/PrintConfig.cpp:831 xs/src/libslic3r/PrintConfig.cpp:842 msgid "mm³/s²" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:837 +#: xs/src/libslic3r/PrintConfig.cpp:837 msgid "Max volumetric slope negative" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:848 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:857 +#: xs/src/libslic3r/PrintConfig.cpp:848 xs/src/libslic3r/PrintConfig.cpp:857 msgid "Min" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:849 +#: xs/src/libslic3r/PrintConfig.cpp:849 msgid "This setting represents the minimum PWM your fan needs to work." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:858 +#: xs/src/libslic3r/PrintConfig.cpp:858 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:866 +#: xs/src/libslic3r/PrintConfig.cpp:866 msgid "Min print speed" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:867 +#: xs/src/libslic3r/PrintConfig.cpp:867 msgid "Slic3r will not scale speed down below this speed." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:874 +#: xs/src/libslic3r/PrintConfig.cpp:874 msgid "Minimum extrusion length" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:875 +#: xs/src/libslic3r/PrintConfig.cpp:875 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:884 +#: xs/src/libslic3r/PrintConfig.cpp:884 msgid "Configuration notes" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:885 +#: xs/src/libslic3r/PrintConfig.cpp:885 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:894 +#: xs/src/libslic3r/PrintConfig.cpp:894 msgid "Nozzle diameter" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:895 +#: xs/src/libslic3r/PrintConfig.cpp:895 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:901 +#: xs/src/libslic3r/PrintConfig.cpp:901 msgid "API Key" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:902 +#: xs/src/libslic3r/PrintConfig.cpp:902 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:908 -msgid "Host or IP" +#: xs/src/libslic3r/PrintConfig.cpp:915 +msgid "Hostname, IP or URL" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:909 +#: xs/src/libslic3r/PrintConfig.cpp:916 msgid "" "Slic3r can upload G-code files to OctoPrint. This field should contain the " -"hostname or IP address of the OctoPrint instance." +"hostname, IP address or URL of the OctoPrint instance." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:915 +#: xs/src/libslic3r/PrintConfig.cpp:922 msgid "Only retract when crossing perimeters" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:916 +#: xs/src/libslic3r/PrintConfig.cpp:923 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:923 +#: xs/src/libslic3r/PrintConfig.cpp:930 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:930 +#: xs/src/libslic3r/PrintConfig.cpp:937 msgid "Output filename format" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:931 +#: xs/src/libslic3r/PrintConfig.cpp:938 msgid "" "You can use all configuration options as variables inside this template. For " "example: [layer_height], [fill_density] etc. You can also use [timestamp], " @@ -1990,40 +1955,38 @@ msgid "" "[input_filename], [input_filename_base]." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:940 +#: xs/src/libslic3r/PrintConfig.cpp:947 msgid "Detect bridging perimeters" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:942 +#: xs/src/libslic3r/PrintConfig.cpp:949 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:948 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:966 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:978 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:988 +#: xs/src/libslic3r/PrintConfig.cpp:955 xs/src/libslic3r/PrintConfig.cpp:973 +#: xs/src/libslic3r/PrintConfig.cpp:985 xs/src/libslic3r/PrintConfig.cpp:995 msgid "Perimeters" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:949 +#: xs/src/libslic3r/PrintConfig.cpp:956 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:957 +#: xs/src/libslic3r/PrintConfig.cpp:964 msgid "Perimeter extruder" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:959 +#: xs/src/libslic3r/PrintConfig.cpp:966 msgid "" "The extruder to use when printing perimeters and brim. First extruder is 1." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:968 +#: xs/src/libslic3r/PrintConfig.cpp:975 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 " @@ -2032,12 +1995,12 @@ msgid "" "it will be computed over layer height." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:980 +#: xs/src/libslic3r/PrintConfig.cpp:987 msgid "" "Speed for perimeters (contours, aka vertical shells). Set to zero for auto." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:990 +#: xs/src/libslic3r/PrintConfig.cpp:997 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 " @@ -2045,33 +2008,33 @@ msgid "" "Perimeters option is enabled." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:994 +#: xs/src/libslic3r/PrintConfig.cpp:1001 msgid "(minimum)" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1014 +#: xs/src/libslic3r/PrintConfig.cpp:1021 msgid "Printer notes" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1015 +#: xs/src/libslic3r/PrintConfig.cpp:1022 msgid "You can put your notes regarding the printer here." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1029 +#: xs/src/libslic3r/PrintConfig.cpp:1036 msgid "Raft layers" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1031 +#: xs/src/libslic3r/PrintConfig.cpp:1038 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:1039 +#: xs/src/libslic3r/PrintConfig.cpp:1046 msgid "Resolution" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1040 +#: xs/src/libslic3r/PrintConfig.cpp:1047 msgid "" "Minimum detail resolution, used to simplify the input file for speeding up " "the slicing job and reducing memory usage. High-resolution models often " @@ -2079,271 +2042,266 @@ msgid "" "simplification and use full resolution from input." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1050 +#: xs/src/libslic3r/PrintConfig.cpp:1057 msgid "Minimum travel after retraction" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1051 +#: xs/src/libslic3r/PrintConfig.cpp:1058 msgid "" "Retraction is not triggered when travel moves are shorter than this length." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1057 +#: xs/src/libslic3r/PrintConfig.cpp:1064 msgid "Retract amount before wipe" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1058 +#: xs/src/libslic3r/PrintConfig.cpp:1065 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:1065 +#: xs/src/libslic3r/PrintConfig.cpp:1072 msgid "Retract on layer change" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1066 +#: xs/src/libslic3r/PrintConfig.cpp:1073 msgid "This flag enforces a retraction whenever a Z move is done." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1071 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1080 +#: xs/src/libslic3r/PrintConfig.cpp:1078 xs/src/libslic3r/PrintConfig.cpp:1087 msgid "Length" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1072 +#: xs/src/libslic3r/PrintConfig.cpp:1079 msgid "Retraction Length" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1073 +#: xs/src/libslic3r/PrintConfig.cpp:1080 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:1075 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1085 +#: xs/src/libslic3r/PrintConfig.cpp:1082 xs/src/libslic3r/PrintConfig.cpp:1092 msgid "mm (zero to disable)" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1081 +#: xs/src/libslic3r/PrintConfig.cpp:1088 msgid "Retraction Length (Toolchange)" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1082 +#: xs/src/libslic3r/PrintConfig.cpp:1089 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:1090 +#: xs/src/libslic3r/PrintConfig.cpp:1097 msgid "Lift Z" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1091 +#: xs/src/libslic3r/PrintConfig.cpp:1098 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:1099 +#: xs/src/libslic3r/PrintConfig.cpp:1106 msgid "Above Z" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1100 +#: xs/src/libslic3r/PrintConfig.cpp:1107 msgid "Only lift Z above" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1101 +#: xs/src/libslic3r/PrintConfig.cpp:1108 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:1108 +#: xs/src/libslic3r/PrintConfig.cpp:1115 msgid "Below Z" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1109 +#: xs/src/libslic3r/PrintConfig.cpp:1116 msgid "Only lift Z below" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1110 +#: xs/src/libslic3r/PrintConfig.cpp:1117 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:1118 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1126 +#: xs/src/libslic3r/PrintConfig.cpp:1125 xs/src/libslic3r/PrintConfig.cpp:1133 msgid "Extra length on restart" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1119 +#: xs/src/libslic3r/PrintConfig.cpp:1126 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:1127 +#: xs/src/libslic3r/PrintConfig.cpp:1134 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:1134 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1135 +#: xs/src/libslic3r/PrintConfig.cpp:1141 xs/src/libslic3r/PrintConfig.cpp:1142 msgid "Retraction Speed" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1136 +#: xs/src/libslic3r/PrintConfig.cpp:1143 msgid "The speed for retractions (it only applies to the extruder motor)." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1142 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1143 +#: xs/src/libslic3r/PrintConfig.cpp:1149 xs/src/libslic3r/PrintConfig.cpp:1150 msgid "Deretraction Speed" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1144 +#: xs/src/libslic3r/PrintConfig.cpp:1151 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:1151 +#: xs/src/libslic3r/PrintConfig.cpp:1158 msgid "Seam position" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1153 +#: xs/src/libslic3r/PrintConfig.cpp:1160 msgid "Position of perimeters starting points." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1169 +#: xs/src/libslic3r/PrintConfig.cpp:1176 msgid "Direction" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1171 +#: xs/src/libslic3r/PrintConfig.cpp:1178 msgid "Preferred direction of the seam" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1172 +#: xs/src/libslic3r/PrintConfig.cpp:1179 msgid "Seam preferred direction" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1180 +#: xs/src/libslic3r/PrintConfig.cpp:1187 msgid "Jitter" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1182 +#: xs/src/libslic3r/PrintConfig.cpp:1189 msgid "Seam preferred direction jitter" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1183 +#: xs/src/libslic3r/PrintConfig.cpp:1190 msgid "Preferred direction of the seam - jitter" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1194 +#: xs/src/libslic3r/PrintConfig.cpp:1201 msgid "USB/serial port for printer connection." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1202 +#: xs/src/libslic3r/PrintConfig.cpp:1209 msgid "Serial port speed" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1203 +#: xs/src/libslic3r/PrintConfig.cpp:1210 msgid "Speed (baud) of USB/serial port for printer connection." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1212 +#: xs/src/libslic3r/PrintConfig.cpp:1219 msgid "Distance from object" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1213 +#: xs/src/libslic3r/PrintConfig.cpp:1220 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:1221 +#: xs/src/libslic3r/PrintConfig.cpp:1228 msgid "Skirt height" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1222 +#: xs/src/libslic3r/PrintConfig.cpp:1229 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:1229 +#: xs/src/libslic3r/PrintConfig.cpp:1236 msgid "Loops (minimum)" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1230 +#: xs/src/libslic3r/PrintConfig.cpp:1237 msgid "Skirt Loops" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1231 +#: xs/src/libslic3r/PrintConfig.cpp:1238 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:1239 +#: xs/src/libslic3r/PrintConfig.cpp:1246 msgid "Slow down if layer print time is below" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1240 +#: xs/src/libslic3r/PrintConfig.cpp:1247 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:1250 +#: xs/src/libslic3r/PrintConfig.cpp:1257 msgid "Small perimeters" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1252 +#: xs/src/libslic3r/PrintConfig.cpp:1259 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:1262 +#: xs/src/libslic3r/PrintConfig.cpp:1269 msgid "Solid infill threshold area" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1264 +#: xs/src/libslic3r/PrintConfig.cpp:1271 msgid "" "Force solid infill for regions having a smaller area than the specified " "threshold." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1265 +#: xs/src/libslic3r/PrintConfig.cpp:1272 msgid "mm²" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1271 +#: xs/src/libslic3r/PrintConfig.cpp:1278 msgid "Solid infill extruder" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1273 +#: xs/src/libslic3r/PrintConfig.cpp:1280 msgid "The extruder to use when printing solid infill." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1279 +#: xs/src/libslic3r/PrintConfig.cpp:1286 msgid "Solid infill every" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1281 +#: xs/src/libslic3r/PrintConfig.cpp:1288 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 " @@ -2351,14 +2309,13 @@ msgid "" "according to nozzle diameter and layer height." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1291 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1301 -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:142 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:84 +#: xs/src/libslic3r/PrintConfig.cpp:1298 xs/src/libslic3r/PrintConfig.cpp:1308 +#: xs/src/libslic3r/GCode/PreviewData.cpp:142 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:84 msgid "Solid infill" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1293 +#: xs/src/libslic3r/PrintConfig.cpp:1300 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, " @@ -2366,22 +2323,22 @@ msgid "" "(for example 90%) it will be computed over layer height." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1303 +#: xs/src/libslic3r/PrintConfig.cpp:1310 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:1315 +#: xs/src/libslic3r/PrintConfig.cpp:1322 msgid "Number of solid layers to generate on top and bottom surfaces." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1322 +#: xs/src/libslic3r/PrintConfig.cpp:1329 msgid "Spiral vase" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1323 +#: xs/src/libslic3r/PrintConfig.cpp:1330 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, " @@ -2390,18 +2347,18 @@ msgid "" "when printing more than an object." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1332 +#: xs/src/libslic3r/PrintConfig.cpp:1339 msgid "Temperature variation" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1333 +#: xs/src/libslic3r/PrintConfig.cpp:1340 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:1343 +#: xs/src/libslic3r/PrintConfig.cpp:1350 msgid "" "This start procedure is inserted at the beginning, after bed has reached the " "target temperature and extruder just started heating, and before extruder " @@ -2412,80 +2369,76 @@ msgid "" "\"M109 S[first_layer_temperature]\" command wherever you want." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1358 +#: xs/src/libslic3r/PrintConfig.cpp:1365 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 " +"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:1373 +#: xs/src/libslic3r/PrintConfig.cpp:1380 msgid "Single Extruder Multi Material" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1374 +#: xs/src/libslic3r/PrintConfig.cpp:1381 msgid "The printer multiplexes filaments into a single hot end." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1379 +#: xs/src/libslic3r/PrintConfig.cpp:1386 msgid "Generate support material" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1381 +#: xs/src/libslic3r/PrintConfig.cpp:1388 msgid "Enable support material generation." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1386 +#: xs/src/libslic3r/PrintConfig.cpp:1393 msgid "XY separation between an object and its support" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1388 +#: xs/src/libslic3r/PrintConfig.cpp:1395 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:1398 +#: xs/src/libslic3r/PrintConfig.cpp:1405 msgid "Pattern angle" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1400 +#: xs/src/libslic3r/PrintConfig.cpp:1407 msgid "" "Use this setting to rotate the support material pattern on the horizontal " "plane." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1408 -msgid "Support on build plate only" -msgstr "" - -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1410 +#: xs/src/libslic3r/PrintConfig.cpp:1417 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:1416 +#: xs/src/libslic3r/PrintConfig.cpp:1423 msgid "Contact Z distance" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1418 +#: xs/src/libslic3r/PrintConfig.cpp:1425 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:1431 +#: xs/src/libslic3r/PrintConfig.cpp:1438 msgid "Enforce support for the first" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1433 +#: xs/src/libslic3r/PrintConfig.cpp:1440 msgid "" "Generate support material for the specified number of layers counting from " "bottom, regardless of whether normal support material is enabled or not and " @@ -2493,21 +2446,21 @@ msgid "" "of objects having a very thin or poor footprint on the build plate." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1439 +#: xs/src/libslic3r/PrintConfig.cpp:1446 msgid "Enforce support for the first n layers" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1444 +#: xs/src/libslic3r/PrintConfig.cpp:1451 msgid "Support material/raft/skirt extruder" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1446 +#: xs/src/libslic3r/PrintConfig.cpp:1453 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:1455 +#: xs/src/libslic3r/PrintConfig.cpp:1462 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, " @@ -2515,91 +2468,91 @@ msgid "" "example 90%) it will be computed over layer height." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1463 +#: xs/src/libslic3r/PrintConfig.cpp:1470 msgid "Interface loops" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1465 +#: xs/src/libslic3r/PrintConfig.cpp:1472 msgid "" "Cover the top contact layer of the supports with loops. Disabled by default." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1470 +#: xs/src/libslic3r/PrintConfig.cpp:1477 msgid "Support material/raft interface extruder" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1472 +#: xs/src/libslic3r/PrintConfig.cpp:1479 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:1479 +#: xs/src/libslic3r/PrintConfig.cpp:1486 msgid "Interface layers" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1481 +#: xs/src/libslic3r/PrintConfig.cpp:1488 msgid "" "Number of interface layers to insert between the object(s) and support " "material." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1488 +#: xs/src/libslic3r/PrintConfig.cpp:1495 msgid "Interface pattern spacing" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1490 +#: xs/src/libslic3r/PrintConfig.cpp:1497 msgid "Spacing between interface lines. Set zero to get a solid interface." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1497 -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:148 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:90 +#: xs/src/libslic3r/PrintConfig.cpp:1504 +#: xs/src/libslic3r/GCode/PreviewData.cpp:148 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:90 msgid "Support material interface" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1499 +#: xs/src/libslic3r/PrintConfig.cpp:1506 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:1508 +#: xs/src/libslic3r/PrintConfig.cpp:1515 msgid "Pattern" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1510 +#: xs/src/libslic3r/PrintConfig.cpp:1517 msgid "Pattern used to generate support material." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1524 +#: xs/src/libslic3r/PrintConfig.cpp:1531 msgid "Pattern spacing" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1526 +#: xs/src/libslic3r/PrintConfig.cpp:1533 msgid "Spacing between support material lines." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1535 +#: xs/src/libslic3r/PrintConfig.cpp:1542 msgid "Speed for printing support material." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1542 +#: xs/src/libslic3r/PrintConfig.cpp:1549 msgid "Synchronize with object layers" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1544 +#: xs/src/libslic3r/PrintConfig.cpp:1551 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:1550 +#: xs/src/libslic3r/PrintConfig.cpp:1557 msgid "Overhang threshold" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1552 +#: xs/src/libslic3r/PrintConfig.cpp:1559 msgid "" "Support material will not be generated for overhangs whose slope angle (90° " "= vertical) is above the given threshold. In other words, this value " @@ -2608,61 +2561,60 @@ msgid "" "detection (recommended)." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1564 +#: xs/src/libslic3r/PrintConfig.cpp:1571 msgid "With sheath around the support" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1566 +#: xs/src/libslic3r/PrintConfig.cpp:1573 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:1573 +#: xs/src/libslic3r/PrintConfig.cpp:1580 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:1576 +#: xs/src/libslic3r/PrintConfig.cpp:1583 msgid "Temperature" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1582 +#: xs/src/libslic3r/PrintConfig.cpp:1589 msgid "Detect thin walls" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1584 +#: xs/src/libslic3r/PrintConfig.cpp:1591 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:1590 +#: xs/src/libslic3r/PrintConfig.cpp:1597 msgid "Threads" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1591 +#: xs/src/libslic3r/PrintConfig.cpp:1598 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:1603 +#: xs/src/libslic3r/PrintConfig.cpp:1610 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:1613 -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1624 -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:143 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:85 +#: xs/src/libslic3r/PrintConfig.cpp:1620 xs/src/libslic3r/PrintConfig.cpp:1631 +#: xs/src/libslic3r/GCode/PreviewData.cpp:143 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:85 msgid "Top solid infill" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1615 +#: xs/src/libslic3r/PrintConfig.cpp:1622 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 " @@ -2671,7 +2623,7 @@ msgid "" "percentage (for example 90%) it will be computed over layer height." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1626 +#: xs/src/libslic3r/PrintConfig.cpp:1633 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 " @@ -2680,53 +2632,51 @@ msgid "" "for auto." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1638 -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:369 +#: xs/src/libslic3r/PrintConfig.cpp:1645 lib/Slic3r/GUI/MainFrame.pm:363 msgid "Top" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1640 +#: xs/src/libslic3r/PrintConfig.cpp:1647 msgid "Number of solid layers to generate on top surfaces." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1642 +#: xs/src/libslic3r/PrintConfig.cpp:1649 msgid "Top solid layers" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1647 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:95 +#: xs/src/libslic3r/PrintConfig.cpp:1654 lib/Slic3r/GUI/Plater/3DPreview.pm:95 msgid "Travel" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1648 +#: xs/src/libslic3r/PrintConfig.cpp:1655 msgid "Speed for travel moves (jumps between distant extrusion points)." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1656 +#: xs/src/libslic3r/PrintConfig.cpp:1663 msgid "Use firmware retraction" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1657 +#: xs/src/libslic3r/PrintConfig.cpp:1664 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:1663 +#: xs/src/libslic3r/PrintConfig.cpp:1670 msgid "Use relative E distances" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1664 +#: xs/src/libslic3r/PrintConfig.cpp:1671 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:1670 +#: xs/src/libslic3r/PrintConfig.cpp:1677 msgid "Use volumetric E" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1671 +#: xs/src/libslic3r/PrintConfig.cpp:1678 msgid "" "This experimental setting uses outputs the E values in cubic millimeters " "instead of linear millimeters. If your firmware doesn't already know " @@ -2736,84 +2686,83 @@ msgid "" "only supported in recent Marlin." msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1681 +#: xs/src/libslic3r/PrintConfig.cpp:1688 msgid "Enable variable layer height feature" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1682 +#: xs/src/libslic3r/PrintConfig.cpp:1689 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:1688 +#: xs/src/libslic3r/PrintConfig.cpp:1695 msgid "Wipe while retracting" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1689 +#: xs/src/libslic3r/PrintConfig.cpp:1696 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:1696 +#: xs/src/libslic3r/PrintConfig.cpp:1703 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:1702 +#: xs/src/libslic3r/PrintConfig.cpp:1709 msgid "Position X" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1703 +#: xs/src/libslic3r/PrintConfig.cpp:1710 msgid "X coordinate of the left front corner of a wipe tower" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1709 +#: xs/src/libslic3r/PrintConfig.cpp:1716 msgid "Position Y" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1710 +#: xs/src/libslic3r/PrintConfig.cpp:1717 msgid "Y coordinate of the left front corner of a wipe tower" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1716 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:70 +#: xs/src/libslic3r/PrintConfig.cpp:1723 lib/Slic3r/GUI/Plater/3DPreview.pm:70 msgid "Width" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1717 +#: xs/src/libslic3r/PrintConfig.cpp:1724 msgid "Width of a wipe tower" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1723 +#: xs/src/libslic3r/PrintConfig.cpp:1730 msgid "Per color change depth" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1724 +#: xs/src/libslic3r/PrintConfig.cpp:1731 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:1732 +#: xs/src/libslic3r/PrintConfig.cpp:1739 msgid "XY Size Compensation" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1734 +#: xs/src/libslic3r/PrintConfig.cpp:1741 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:1742 +#: xs/src/libslic3r/PrintConfig.cpp:1749 msgid "Z offset" msgstr "" -#: C:\src\Slic3r\xs\src\libslic3r\PrintConfig.cpp:1743 +#: xs/src/libslic3r/PrintConfig.cpp:1750 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 " @@ -2821,1063 +2770,1015 @@ msgid "" "print bed, set this to -0.3 (or fix your endstop)." msgstr "" -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:137 -msgid "None" -msgstr "" - -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:138 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:80 +#: xs/src/libslic3r/GCode/PreviewData.cpp:138 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:80 msgid "Perimeter" msgstr "" -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:139 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:81 +#: xs/src/libslic3r/GCode/PreviewData.cpp:139 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:81 msgid "External perimeter" msgstr "" -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:140 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:82 +#: xs/src/libslic3r/GCode/PreviewData.cpp:140 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:82 msgid "Overhang perimeter" msgstr "" -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:141 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:83 +#: xs/src/libslic3r/GCode/PreviewData.cpp:141 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:83 msgid "Internal infill" msgstr "" -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:144 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:86 +#: xs/src/libslic3r/GCode/PreviewData.cpp:144 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:86 msgid "Bridge infill" msgstr "" -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:151 +#: xs/src/libslic3r/GCode/PreviewData.cpp:151 msgid "Mixed" msgstr "" -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:330 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:68 +#: xs/src/libslic3r/GCode/PreviewData.cpp:330 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:68 msgid "Feature type" msgstr "" -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:332 +#: xs/src/libslic3r/GCode/PreviewData.cpp:332 msgid "Height (mm)" msgstr "" -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:334 +#: xs/src/libslic3r/GCode/PreviewData.cpp:334 msgid "Width (mm)" msgstr "" -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:336 +#: xs/src/libslic3r/GCode/PreviewData.cpp:336 msgid "Speed (mm/s)" msgstr "" -#: c:\src\Slic3r\xs\src\libslic3r\GCode\PreviewData.cpp:338 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:72 +#: xs/src/libslic3r/GCode/PreviewData.cpp:338 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:72 msgid "Tool" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI.pm:286 -msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" -msgstr "" - -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:66 +#: lib/Slic3r/GUI/MainFrame.pm:66 msgid "Version " msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:66 +#: lib/Slic3r/GUI/MainFrame.pm:66 msgid "" " - Remember to check for updates at http://github.com/prusa3d/slic3r/releases" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:118 +#: lib/Slic3r/GUI/MainFrame.pm:118 msgid "Plater" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:120 +#: lib/Slic3r/GUI/MainFrame.pm:120 msgid "Controller" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:192 +#: lib/Slic3r/GUI/MainFrame.pm:191 msgid "No Bonjour device found" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:192 +#: lib/Slic3r/GUI/MainFrame.pm:191 msgid "Device Browser" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:211 -msgid "Connection to OctoPrint works correctly." -msgstr "" - -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:214 +#: lib/Slic3r/GUI/MainFrame.pm:212 msgid "I wasn't able to connect to OctoPrint (" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:215 +#: lib/Slic3r/GUI/MainFrame.pm:213 msgid "). Check hostname and OctoPrint version (at least 1.1.0 is required)." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:251 +#: lib/Slic3r/GUI/MainFrame.pm:245 msgid "Open STL/OBJ/AMF…\tCtrl+O" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:251 +#: lib/Slic3r/GUI/MainFrame.pm:245 msgid "Open a model" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:254 +#: lib/Slic3r/GUI/MainFrame.pm:248 msgid "&Load Config…\tCtrl+L" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:254 +#: lib/Slic3r/GUI/MainFrame.pm:248 msgid "Load exported configuration file" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:257 +#: lib/Slic3r/GUI/MainFrame.pm:251 msgid "&Export Config…\tCtrl+E" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:257 +#: lib/Slic3r/GUI/MainFrame.pm:251 msgid "Export current configuration to file" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:260 +#: lib/Slic3r/GUI/MainFrame.pm:254 msgid "&Load Config Bundle…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:260 +#: lib/Slic3r/GUI/MainFrame.pm:254 msgid "Load presets from a bundle" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:263 +#: lib/Slic3r/GUI/MainFrame.pm:257 msgid "&Export Config Bundle…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:263 +#: lib/Slic3r/GUI/MainFrame.pm:257 msgid "Export all presets to file" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:268 +#: lib/Slic3r/GUI/MainFrame.pm:262 msgid "Q&uick Slice…\tCtrl+U" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:268 +#: lib/Slic3r/GUI/MainFrame.pm:262 msgid "Slice a file into a G-code" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:274 +#: lib/Slic3r/GUI/MainFrame.pm:268 msgid "Quick Slice and Save &As…\tCtrl+Alt+U" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:274 +#: lib/Slic3r/GUI/MainFrame.pm:268 msgid "Slice a file into a G-code, save as" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:280 +#: lib/Slic3r/GUI/MainFrame.pm:274 msgid "&Repeat Last Quick Slice\tCtrl+Shift+U" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:280 +#: lib/Slic3r/GUI/MainFrame.pm:274 msgid "Repeat last quick slice" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:287 +#: lib/Slic3r/GUI/MainFrame.pm:281 msgid "Slice to SV&G…\tCtrl+G" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:287 +#: lib/Slic3r/GUI/MainFrame.pm:281 msgid "Slice file to a multi-layer SVG" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:291 +#: lib/Slic3r/GUI/MainFrame.pm:285 msgid "(&Re)Slice Now\tCtrl+S" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:291 +#: lib/Slic3r/GUI/MainFrame.pm:285 msgid "Start new slicing process" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:294 +#: lib/Slic3r/GUI/MainFrame.pm:288 msgid "Repair STL file…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:294 +#: lib/Slic3r/GUI/MainFrame.pm:288 msgid "Automatically repair an STL file" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:299 +#: lib/Slic3r/GUI/MainFrame.pm:293 msgid "Preferences…\tCtrl+," msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:299 +#: lib/Slic3r/GUI/MainFrame.pm:293 msgid "Application preferences" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:304 +#: lib/Slic3r/GUI/MainFrame.pm:298 msgid "&Quit" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:304 +#: lib/Slic3r/GUI/MainFrame.pm:298 msgid "Quit Slic3r" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:314 +#: lib/Slic3r/GUI/MainFrame.pm:308 msgid "Export G-code..." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:314 +#: lib/Slic3r/GUI/MainFrame.pm:308 msgid "Export current plate as G-code" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:317 +#: lib/Slic3r/GUI/MainFrame.pm:311 msgid "Export plate as STL..." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:317 +#: lib/Slic3r/GUI/MainFrame.pm:311 msgid "Export current plate as STL" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:320 +#: lib/Slic3r/GUI/MainFrame.pm:314 msgid "Export plate as AMF..." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:320 +#: lib/Slic3r/GUI/MainFrame.pm:314 msgid "Export current plate as AMF" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:323 +#: lib/Slic3r/GUI/MainFrame.pm:317 msgid "Export plate as 3MF..." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:323 +#: lib/Slic3r/GUI/MainFrame.pm:317 msgid "Export current plate as 3MF" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:336 +#: lib/Slic3r/GUI/MainFrame.pm:330 msgid "Select &Plater Tab\tCtrl+1" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:336 +#: lib/Slic3r/GUI/MainFrame.pm:330 msgid "Show the plater" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:342 +#: lib/Slic3r/GUI/MainFrame.pm:336 msgid "Select &Controller Tab\tCtrl+T" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:342 +#: lib/Slic3r/GUI/MainFrame.pm:336 msgid "Show the printer controller" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:350 +#: lib/Slic3r/GUI/MainFrame.pm:344 msgid "Select P&rint Settings Tab\tCtrl+2" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:350 +#: lib/Slic3r/GUI/MainFrame.pm:344 msgid "Show the print settings" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:353 +#: lib/Slic3r/GUI/MainFrame.pm:347 msgid "Select &Filament Settings Tab\tCtrl+3" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:353 +#: lib/Slic3r/GUI/MainFrame.pm:347 msgid "Show the filament settings" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:356 +#: lib/Slic3r/GUI/MainFrame.pm:350 msgid "Select Print&er Settings Tab\tCtrl+4" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:356 +#: lib/Slic3r/GUI/MainFrame.pm:350 msgid "Show the printer settings" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:368 +#: lib/Slic3r/GUI/MainFrame.pm:362 msgid "Iso" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:368 +#: lib/Slic3r/GUI/MainFrame.pm:362 msgid "Iso View" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:369 +#: lib/Slic3r/GUI/MainFrame.pm:363 msgid "Top View" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:370 +#: lib/Slic3r/GUI/MainFrame.pm:364 msgid "Bottom View" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:371 +#: lib/Slic3r/GUI/MainFrame.pm:365 msgid "Front" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:371 +#: lib/Slic3r/GUI/MainFrame.pm:365 msgid "Front View" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:372 +#: lib/Slic3r/GUI/MainFrame.pm:366 msgid "Rear" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:372 +#: lib/Slic3r/GUI/MainFrame.pm:366 msgid "Rear View" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:373 +#: lib/Slic3r/GUI/MainFrame.pm:367 msgid "Left" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:373 +#: lib/Slic3r/GUI/MainFrame.pm:367 msgid "Left View" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:374 +#: lib/Slic3r/GUI/MainFrame.pm:368 msgid "Right" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:374 +#: lib/Slic3r/GUI/MainFrame.pm:368 msgid "Right View" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:380 +#: lib/Slic3r/GUI/MainFrame.pm:374 msgid "&Configuration " msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:380 +#: lib/Slic3r/GUI/MainFrame.pm:374 msgid "Run Configuration " msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:385 +#: lib/Slic3r/GUI/MainFrame.pm:379 msgid "Prusa 3D Drivers" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:385 +#: lib/Slic3r/GUI/MainFrame.pm:379 msgid "Open the Prusa3D drivers download page in your browser" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:388 +#: lib/Slic3r/GUI/MainFrame.pm:382 msgid "Prusa Edition Releases" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:388 +#: lib/Slic3r/GUI/MainFrame.pm:382 msgid "Open the Prusa Edition releases page in your browser" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:395 +#: lib/Slic3r/GUI/MainFrame.pm:389 msgid "Slic3r &Website" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:395 +#: lib/Slic3r/GUI/MainFrame.pm:389 msgid "Open the Slic3r website in your browser" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:398 +#: lib/Slic3r/GUI/MainFrame.pm:392 msgid "Slic3r &Manual" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:398 +#: lib/Slic3r/GUI/MainFrame.pm:392 msgid "Open the Slic3r manual in your browser" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:402 +#: lib/Slic3r/GUI/MainFrame.pm:396 msgid "System Info" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:402 +#: lib/Slic3r/GUI/MainFrame.pm:396 msgid "Show system information" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:405 +#: lib/Slic3r/GUI/MainFrame.pm:399 msgid "Report an Issue" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:405 +#: lib/Slic3r/GUI/MainFrame.pm:399 msgid "Report an issue on the Slic3r Prusa Edition" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:408 +#: lib/Slic3r/GUI/MainFrame.pm:402 msgid "&About Slic3r" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:408 +#: lib/Slic3r/GUI/MainFrame.pm:402 msgid "Show about dialog" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:418 +#: lib/Slic3r/GUI/MainFrame.pm:412 msgid "&File" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:419 +#: lib/Slic3r/GUI/MainFrame.pm:413 msgid "&Plater" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:420 +#: lib/Slic3r/GUI/MainFrame.pm:414 msgid "&Object" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:421 +#: lib/Slic3r/GUI/MainFrame.pm:415 msgid "&Window" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:422 +#: lib/Slic3r/GUI/MainFrame.pm:416 msgid "&View" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:426 +#: lib/Slic3r/GUI/MainFrame.pm:420 msgid "&Help" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:457 +#: lib/Slic3r/GUI/MainFrame.pm:452 msgid "Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:469 +#: lib/Slic3r/GUI/MainFrame.pm:464 msgid "No previously sliced file." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:474 +#: lib/Slic3r/GUI/MainFrame.pm:469 msgid "Previously sliced file (" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:474 +#: lib/Slic3r/GUI/MainFrame.pm:469 msgid ") not found." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:475 +#: lib/Slic3r/GUI/MainFrame.pm:470 msgid "File Not Found" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:514 +#: lib/Slic3r/GUI/MainFrame.pm:509 msgid "SVG" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:514 +#: lib/Slic3r/GUI/MainFrame.pm:509 msgid "G-code" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:514 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1645 +#: lib/Slic3r/GUI/MainFrame.pm:509 lib/Slic3r/GUI/Plater.pm:1615 msgid " file as:" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:528 +#: lib/Slic3r/GUI/MainFrame.pm:523 msgid "Slicing…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:528 +#: lib/Slic3r/GUI/MainFrame.pm:523 msgid "Processing " msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:548 +#: lib/Slic3r/GUI/MainFrame.pm:543 msgid " was successfully sliced." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:550 +#: lib/Slic3r/GUI/MainFrame.pm:545 msgid "Slicing Done!" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:566 +#: lib/Slic3r/GUI/MainFrame.pm:561 msgid "Select the STL file to repair:" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:580 +#: lib/Slic3r/GUI/MainFrame.pm:575 msgid "Save OBJ file (less prone to coordinate errors than STL) as:" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:594 +#: lib/Slic3r/GUI/MainFrame.pm:589 msgid "Your file was repaired." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:594 +#: lib/Slic3r/GUI/MainFrame.pm:589 msgid "Repair" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:605 +#: lib/Slic3r/GUI/MainFrame.pm:600 msgid "Save configuration as:" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:623 -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:667 +#: lib/Slic3r/GUI/MainFrame.pm:618 lib/Slic3r/GUI/MainFrame.pm:662 msgid "Select configuration to load:" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:646 +#: lib/Slic3r/GUI/MainFrame.pm:641 msgid "Save presets bundle as:" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:687 +#: lib/Slic3r/GUI/MainFrame.pm:682 #, possible-perl-format msgid "%d presets successfully imported." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:749 +#: lib/Slic3r/GUI/MainFrame.pm:744 msgid "You have unsaved changes " msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:749 +#: lib/Slic3r/GUI/MainFrame.pm:744 msgid ". Discard changes and continue anyway?" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\MainFrame.pm:750 +#: lib/Slic3r/GUI/MainFrame.pm:745 msgid "Unsaved Presets" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:104 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2124 +#: lib/Slic3r/GUI/Plater.pm:104 lib/Slic3r/GUI/Plater.pm:2094 msgid "3D" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:138 +#: lib/Slic3r/GUI/Plater.pm:138 msgid "2D" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:157 +#: lib/Slic3r/GUI/Plater.pm:157 msgid "Layers" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:177 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:195 +#: lib/Slic3r/GUI/Plater.pm:177 lib/Slic3r/GUI/Plater.pm:195 msgid "Add…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:179 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:197 +#: lib/Slic3r/GUI/Plater.pm:179 lib/Slic3r/GUI/Plater.pm:197 msgid "Delete All" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:180 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:198 +#: lib/Slic3r/GUI/Plater.pm:180 lib/Slic3r/GUI/Plater.pm:198 msgid "Arrange" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:182 +#: lib/Slic3r/GUI/Plater.pm:182 msgid "More" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:183 +#: lib/Slic3r/GUI/Plater.pm:183 msgid "Fewer" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:185 +#: lib/Slic3r/GUI/Plater.pm:185 msgid "45° ccw" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:186 +#: lib/Slic3r/GUI/Plater.pm:186 msgid "45° cw" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:187 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:203 +#: lib/Slic3r/GUI/Plater.pm:187 lib/Slic3r/GUI/Plater.pm:203 msgid "Scale…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:188 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:204 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2099 +#: lib/Slic3r/GUI/Plater.pm:188 lib/Slic3r/GUI/Plater.pm:204 +#: lib/Slic3r/GUI/Plater.pm:2069 msgid "Split" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:189 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:205 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2102 +#: lib/Slic3r/GUI/Plater.pm:189 lib/Slic3r/GUI/Plater.pm:205 +#: lib/Slic3r/GUI/Plater.pm:2072 msgid "Cut…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:191 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:206 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2106 +#: lib/Slic3r/GUI/Plater.pm:191 lib/Slic3r/GUI/Plater.pm:206 +#: lib/Slic3r/GUI/Plater.pm:2076 msgid "Settings…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:192 +#: lib/Slic3r/GUI/Plater.pm:192 msgid "Layer Editing" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:207 +#: lib/Slic3r/GUI/Plater.pm:207 msgid "Layer editing" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:220 +#: lib/Slic3r/GUI/Plater.pm:220 msgid "Name" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:221 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:900 +#: lib/Slic3r/GUI/Plater.pm:221 lib/Slic3r/GUI/Plater.pm:904 msgid "Copies" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:222 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1056 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1061 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2068 +#: lib/Slic3r/GUI/Plater.pm:222 lib/Slic3r/GUI/Plater.pm:1060 +#: lib/Slic3r/GUI/Plater.pm:1065 lib/Slic3r/GUI/Plater.pm:2038 msgid "Scale" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:236 +#: lib/Slic3r/GUI/Plater.pm:236 msgid "Export G-code…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:237 +#: lib/Slic3r/GUI/Plater.pm:237 msgid "Slice now" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:238 +#: lib/Slic3r/GUI/Plater.pm:238 msgid "Print…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:239 +#: lib/Slic3r/GUI/Plater.pm:239 msgid "Send to printer" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:240 +#: lib/Slic3r/GUI/Plater.pm:240 msgid "Export STL…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:367 +#: lib/Slic3r/GUI/Plater.pm:367 msgid "Print settings" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:369 +#: lib/Slic3r/GUI/Plater.pm:369 msgid "Printer" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:398 +#: lib/Slic3r/GUI/Plater.pm:401 msgid "Info" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:409 +#: lib/Slic3r/GUI/Plater.pm:412 msgid "Volume" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:410 +#: lib/Slic3r/GUI/Plater.pm:413 msgid "Facets" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:411 +#: lib/Slic3r/GUI/Plater.pm:414 msgid "Materials" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:412 +#: lib/Slic3r/GUI/Plater.pm:415 msgid "Manifold" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:438 +#: lib/Slic3r/GUI/Plater.pm:441 msgid "Sliced Info" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:447 +#: lib/Slic3r/GUI/Plater.pm:450 msgid "Used Filament (m)" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:448 +#: lib/Slic3r/GUI/Plater.pm:451 msgid "Used Filament (mm³)" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:449 +#: lib/Slic3r/GUI/Plater.pm:452 msgid "Used Filament (g)" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:451 +#: lib/Slic3r/GUI/Plater.pm:454 msgid "Estimated printing time" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:629 +#: lib/Slic3r/GUI/Plater.pm:633 msgid "Loading…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:629 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:643 +#: lib/Slic3r/GUI/Plater.pm:633 lib/Slic3r/GUI/Plater.pm:647 msgid "Processing input file\n" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:663 +#: lib/Slic3r/GUI/Plater.pm:667 msgid "" "This file contains several objects positioned at multiple heights. Instead " "of considering them as multiple objects, should I consider\n" "this file as a single object having multiple parts?\n" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:666 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:683 +#: lib/Slic3r/GUI/Plater.pm:670 lib/Slic3r/GUI/Plater.pm:687 msgid "Multi-part object detected" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:680 +#: lib/Slic3r/GUI/Plater.pm:684 msgid "" "Multiple objects were loaded for a multi-material printer.\n" "Instead of considering them as multiple objects, should I consider\n" "these files to represent a single object having multiple parts?\n" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:692 +#: lib/Slic3r/GUI/Plater.pm:696 msgid "Loaded " msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:744 +#: lib/Slic3r/GUI/Plater.pm:748 msgid "" "Your object appears to be too large, so it was automatically scaled down to " "fit your print bed." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:745 +#: lib/Slic3r/GUI/Plater.pm:749 msgid "Object too large?" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:900 +#: lib/Slic3r/GUI/Plater.pm:904 msgid "Enter the number of copies of the selected object:" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:927 +#: lib/Slic3r/GUI/Plater.pm:931 msgid "" "\n" "Non-positive value." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:928 +#: lib/Slic3r/GUI/Plater.pm:932 msgid "" "\n" "Not a numeric value." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:929 +#: lib/Slic3r/GUI/Plater.pm:933 msgid "Slic3r Error" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:950 -msgid "Enter the rotation angle:" -msgstr "" - -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:950 -msgid "Rotate around " -msgstr "" - -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:950 -msgid "Invalid rotation angle entered" -msgstr "" - -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1030 +#: lib/Slic3r/GUI/Plater.pm:1034 #, possible-perl-format msgid "Enter the new size for the selected object (print bed: %smm):" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1031 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1035 +#: lib/Slic3r/GUI/Plater.pm:1035 lib/Slic3r/GUI/Plater.pm:1039 msgid "Scale along " msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1031 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1035 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1056 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1061 +#: lib/Slic3r/GUI/Plater.pm:1035 lib/Slic3r/GUI/Plater.pm:1039 +#: lib/Slic3r/GUI/Plater.pm:1060 lib/Slic3r/GUI/Plater.pm:1065 msgid "Invalid scaling value entered" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1035 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1061 -#, no-perl-format +#: lib/Slic3r/GUI/Plater.pm:1039 lib/Slic3r/GUI/Plater.pm:1065 +#, possible-perl-format msgid "Enter the scale % for the selected object:" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1056 +#: lib/Slic3r/GUI/Plater.pm:1060 msgid "Enter the new max size for the selected object:" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1112 +#: lib/Slic3r/GUI/Plater.pm:1116 msgid "" "The selected object can't be split because it contains more than one volume/" "material." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1121 +#: lib/Slic3r/GUI/Plater.pm:1125 msgid "" "The selected object couldn't be split because it contains only one part." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1286 +#: lib/Slic3r/GUI/Plater.pm:1290 msgid "Slicing cancelled" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1300 +#: lib/Slic3r/GUI/Plater.pm:1304 msgid "Another export job is currently running." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1445 +#: lib/Slic3r/GUI/Plater.pm:1335 +msgid "Save G-code file as:" +msgstr "" + +#: lib/Slic3r/GUI/Plater.pm:1352 +msgid "Export cancelled" +msgstr "" + +#: lib/Slic3r/GUI/Plater.pm:1449 msgid "File added to print queue" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1448 +#: lib/Slic3r/GUI/Plater.pm:1452 msgid "Sending G-code file to the OctoPrint server..." msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1451 +#: lib/Slic3r/GUI/Plater.pm:1455 msgid "G-code file exported to " msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1454 +#: lib/Slic3r/GUI/Plater.pm:1458 msgid "Export failed" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1524 -msgid "G-code file successfully uploaded to the OctoPrint server" -msgstr "" - -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1526 -msgid "Error while uploading to the OctoPrint server: " -msgstr "" - -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1539 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1581 +#: lib/Slic3r/GUI/Plater.pm:1509 lib/Slic3r/GUI/Plater.pm:1551 msgid "STL file exported to " msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1592 +#: lib/Slic3r/GUI/Plater.pm:1562 msgid "AMF file exported to " msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1596 +#: lib/Slic3r/GUI/Plater.pm:1566 msgid "Error exporting AMF file " msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1608 +#: lib/Slic3r/GUI/Plater.pm:1578 msgid "3MF file exported to " msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1612 +#: lib/Slic3r/GUI/Plater.pm:1582 msgid "Error exporting 3MF file " msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1958 +#: lib/Slic3r/GUI/Plater.pm:1818 +msgid "" +"Please install the OpenGL modules to use this feature (see build " +"instructions)." +msgstr "" + +#: lib/Slic3r/GUI/Plater.pm:1928 #, possible-perl-format msgid "%d (%d shells)" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1960 +#: lib/Slic3r/GUI/Plater.pm:1930 #, possible-perl-format msgid "Auto-repaired (%d errors)" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1965 +#: lib/Slic3r/GUI/Plater.pm:1935 #, possible-perl-format msgid "" "%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d " "facets reversed, %d backwards edges" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:1970 +#: lib/Slic3r/GUI/Plater.pm:1940 msgid "Yes" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2021 +#: lib/Slic3r/GUI/Plater.pm:1991 msgid "Remove the selected object" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2024 +#: lib/Slic3r/GUI/Plater.pm:1994 msgid "Increase copies" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2024 +#: lib/Slic3r/GUI/Plater.pm:1994 msgid "Place one more copy of the selected object" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2027 +#: lib/Slic3r/GUI/Plater.pm:1997 msgid "Decrease copies" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2027 +#: lib/Slic3r/GUI/Plater.pm:1997 msgid "Remove one copy of the selected object" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2030 +#: lib/Slic3r/GUI/Plater.pm:2000 msgid "Set number of copies…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2030 +#: lib/Slic3r/GUI/Plater.pm:2000 msgid "Change the number of copies of the selected object" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2034 +#: lib/Slic3r/GUI/Plater.pm:2004 msgid "Rotate 45° clockwise" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2034 +#: lib/Slic3r/GUI/Plater.pm:2004 msgid "Rotate the selected object by 45° clockwise" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2037 +#: lib/Slic3r/GUI/Plater.pm:2007 msgid "Rotate 45° counter-clockwise" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2037 +#: lib/Slic3r/GUI/Plater.pm:2007 msgid "Rotate the selected object by 45° counter-clockwise" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2042 +#: lib/Slic3r/GUI/Plater.pm:2012 msgid "Rotate" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2042 +#: lib/Slic3r/GUI/Plater.pm:2012 msgid "Rotate the selected object by an arbitrary angle" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2044 +#: lib/Slic3r/GUI/Plater.pm:2014 msgid "Around X axis…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2044 +#: lib/Slic3r/GUI/Plater.pm:2014 msgid "Rotate the selected object by an arbitrary angle around X axis" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2047 +#: lib/Slic3r/GUI/Plater.pm:2017 msgid "Around Y axis…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2047 +#: lib/Slic3r/GUI/Plater.pm:2017 msgid "Rotate the selected object by an arbitrary angle around Y axis" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2050 +#: lib/Slic3r/GUI/Plater.pm:2020 msgid "Around Z axis…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2050 +#: lib/Slic3r/GUI/Plater.pm:2020 msgid "Rotate the selected object by an arbitrary angle around Z axis" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2055 +#: lib/Slic3r/GUI/Plater.pm:2025 msgid "Mirror" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2055 +#: lib/Slic3r/GUI/Plater.pm:2025 msgid "Mirror the selected object" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2057 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2073 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2089 +#: lib/Slic3r/GUI/Plater.pm:2027 lib/Slic3r/GUI/Plater.pm:2043 +#: lib/Slic3r/GUI/Plater.pm:2059 msgid "Along X axis…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2057 +#: lib/Slic3r/GUI/Plater.pm:2027 msgid "Mirror the selected object along the X axis" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2060 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2076 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2092 +#: lib/Slic3r/GUI/Plater.pm:2030 lib/Slic3r/GUI/Plater.pm:2046 +#: lib/Slic3r/GUI/Plater.pm:2062 msgid "Along Y axis…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2060 +#: lib/Slic3r/GUI/Plater.pm:2030 msgid "Mirror the selected object along the Y axis" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2063 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2079 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2095 +#: lib/Slic3r/GUI/Plater.pm:2033 lib/Slic3r/GUI/Plater.pm:2049 +#: lib/Slic3r/GUI/Plater.pm:2065 msgid "Along Z axis…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2063 +#: lib/Slic3r/GUI/Plater.pm:2033 msgid "Mirror the selected object along the Z axis" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2068 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2084 +#: lib/Slic3r/GUI/Plater.pm:2038 lib/Slic3r/GUI/Plater.pm:2054 msgid "Scale the selected object along a single axis" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2070 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2086 +#: lib/Slic3r/GUI/Plater.pm:2040 lib/Slic3r/GUI/Plater.pm:2056 msgid "Uniformly…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2070 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2086 +#: lib/Slic3r/GUI/Plater.pm:2040 lib/Slic3r/GUI/Plater.pm:2056 msgid "Scale the selected object along the XYZ axes" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2073 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2089 +#: lib/Slic3r/GUI/Plater.pm:2043 lib/Slic3r/GUI/Plater.pm:2059 msgid "Scale the selected object along the X axis" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2076 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2092 +#: lib/Slic3r/GUI/Plater.pm:2046 lib/Slic3r/GUI/Plater.pm:2062 msgid "Scale the selected object along the Y axis" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2079 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2095 +#: lib/Slic3r/GUI/Plater.pm:2049 lib/Slic3r/GUI/Plater.pm:2065 msgid "Scale the selected object along the Z axis" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2084 +#: lib/Slic3r/GUI/Plater.pm:2054 msgid "Scale to size" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2099 +#: lib/Slic3r/GUI/Plater.pm:2069 msgid "Split the selected object into individual parts" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2102 +#: lib/Slic3r/GUI/Plater.pm:2072 msgid "Open the 3D cutting tool" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2106 +#: lib/Slic3r/GUI/Plater.pm:2076 msgid "Open the object editor dialog" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2110 +#: lib/Slic3r/GUI/Plater.pm:2080 msgid "Reload from Disk" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2110 +#: lib/Slic3r/GUI/Plater.pm:2080 msgid "Reload the selected file from Disk" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2113 +#: lib/Slic3r/GUI/Plater.pm:2083 msgid "Export object as STL…" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater.pm:2113 +#: lib/Slic3r/GUI/Plater.pm:2083 msgid "Export this single object as STL file" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\2D.pm:131 +#: lib/Slic3r/GUI/Plater/2D.pm:131 msgid "What do you want to print today? â„¢" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\2D.pm:132 +#: lib/Slic3r/GUI/Plater/2D.pm:132 msgid "Drag your objects here" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:63 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:63 msgid "1 Layer" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:65 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:65 msgid "View" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:75 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:75 msgid "Show" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:78 -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:79 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:78 lib/Slic3r/GUI/Plater/3DPreview.pm:79 msgid "Feature types" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:96 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:96 msgid "Retractions" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:97 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:97 msgid "Unretractions" msgstr "" -#: c:\src\Slic3r\lib\Slic3r\GUI\Plater\3DPreview.pm:98 +#: lib/Slic3r/GUI/Plater/3DPreview.pm:98 msgid "Shells" msgstr "" diff --git a/resources/localization/list.txt b/resources/localization/list.txt index 5a6965d6a..292549545 100644 --- a/resources/localization/list.txt +++ b/resources/localization/list.txt @@ -9,6 +9,8 @@ xs/src/slic3r/GUI/2DBed.cpp xs/src/slic3r/GUI/PresetHints.cpp xs/src/slic3r/GUI/Preferences.hpp xs/src/slic3r/GUI/Preferences.cpp +xs/src/slic3r/GUI/BonjourDialog.cpp +xs/src/slic3r/Utils/OctoPrint.cpp xs/src/libslic3r/PrintConfig.cpp xs/src/libslic3r/GCode/PreviewData.cpp lib/Slic3r/GUI.pm diff --git a/resources/localization/uk/Slic3rPE_.mo b/resources/localization/uk/Slic3rPE_.mo new file mode 100644 index 000000000..c980ae64d Binary files /dev/null and b/resources/localization/uk/Slic3rPE_.mo differ diff --git a/resources/profiles/Original Prusa i3 MK2 and MK2S.ini b/resources/profiles/Original Prusa i3 MK2 and MK2S.ini deleted file mode 100644 index a186c3775..000000000 --- a/resources/profiles/Original Prusa i3 MK2 and MK2S.ini +++ /dev/null @@ -1,3376 +0,0 @@ -# generated by Slic3r Prusa Edition 1.39.0 on 2018-01-06 at 15:10:57 - -[print:0.05mm DETAIL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 10 -bridge_acceleration = 300 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1 -complete_objects = 0 -default_acceleration = 500 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 25% -fill_pattern = cubic -first_layer_acceleration = 500 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 20 -gcode_comments = 0 -infill_acceleration = 800 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.5 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 30 -interface_shells = 0 -layer_height = 0.05 -max_print_speed = 80 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 300 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 30 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 15 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 30 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.3 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1.5 -support_material_speed = 30 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 20 -top_solid_layers = 15 -travel_speed = 180 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.05mm DETAIL 0.25 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 10 -bridge_acceleration = 300 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 and num_extruders==1 -complete_objects = 0 -default_acceleration = 500 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.28 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 500 -first_layer_extrusion_width = 0.3 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 20 -gcode_comments = 0 -infill_acceleration = 800 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 20 -interface_shells = 0 -layer_height = 0.05 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 300 -perimeter_extruder = 1 -perimeter_extrusion_width = 0 -perimeter_speed = 20 -perimeters = 4 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 10 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0 -solid_infill_speed = 20 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.18 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 0 -support_material_interface_spacing = 0.15 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1 -support_material_speed = 20 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 150% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0 -top_solid_infill_speed = 20 -top_solid_layers = 15 -travel_speed = 200 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.05mm DETAIL MK3] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 10 -bridge_acceleration = 300 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ -complete_objects = 0 -default_acceleration = 500 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 25% -fill_pattern = grid -first_layer_acceleration = 500 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 20 -gcode_comments = 0 -infill_acceleration = 800 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 30 -interface_shells = 0 -layer_height = 0.05 -max_print_speed = 80 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 300 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 30 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 15 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 30 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.3 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1.5 -support_material_speed = 30 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 20 -top_solid_layers = 15 -travel_speed = 180 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.10mm DETAIL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 7 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.1 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 40 -top_solid_layers = 9 -travel_speed = 120 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.10mm DETAIL 0.25 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 7 -bridge_acceleration = 600 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.25 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.25 -fill_angle = 45 -fill_density = 15% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.25 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 1600 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.25 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 40 -interface_shells = 0 -layer_height = 0.1 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 600 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.25 -perimeter_speed = 25 -perimeters = 4 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 10 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.25 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.18 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 0 -support_material_interface_spacing = 0.15 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 150% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.25 -top_solid_infill_speed = 30 -top_solid_layers = 9 -travel_speed = 120 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.10mm DETAIL MK3] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 30 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 35 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = grid -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 3500 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 200 -interface_shells = 0 -layer_height = 0.1 -max_print_speed = 250 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 45 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 200 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 50 -top_solid_layers = 5 -travel_speed = 250 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm 100mms Linear Advance] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 50 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 100 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 150 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 60 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 30 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 100 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 60 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 70 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 40 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL 0.25 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 600 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.25 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.25 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.25 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 1600 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.25 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 40 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 600 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.25 -perimeter_speed = 25 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 10 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.25 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.2 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 0 -support_material_interface_spacing = 0.15 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 35 -support_material_with_sheath = 0 -support_material_xy_spacing = 150% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.25 -top_solid_infill_speed = 30 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.61 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.6 -top_solid_infill_speed = 40 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL MK3] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 30 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 35 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = grid -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 3500 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 200 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 250 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 45 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 200 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 50 -top_solid_layers = 5 -travel_speed = 250 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL SOLUBLE FULL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 25 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 40 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 4 -support_material_extrusion_width = 0.45 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.1 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 1 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 30 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL SOLUBLE INTERFACE] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 25 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 40 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.45 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 3 -support_material_interface_spacing = 0.1 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 0 -support_material_xy_spacing = 120% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 30 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm 100mms Linear Advance] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 50 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 100 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 150 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 60 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 30 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 100 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 60 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 70 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm FAST MK3] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 30 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 35 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = grid -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 3500 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 200 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 250 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 45 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 200 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 50 -top_solid_layers = 5 -travel_speed = 250 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm NORMAL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 50 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 40 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm NORMAL 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.61 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.6 -top_solid_infill_speed = 40 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm NORMAL SOLUBLE FULL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 30 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 40 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 4 -support_material_extrusion_width = 0.45 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.1 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 1 -support_material_xy_spacing = 120% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 30 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm NORMAL SOLUBLE INTERFACE] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 30 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 40 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.45 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 3 -support_material_interface_spacing = 0.1 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 0 -support_material_xy_spacing = 120% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 30 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.35mm FAST] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 3 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.6 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.7 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.35 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.43 -perimeter_speed = 50 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.7 -solid_infill_speed = 60 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.43 -top_solid_infill_speed = 50 -top_solid_layers = 4 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.35mm FAST 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 7 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.61 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.35 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 60 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.6 -top_solid_infill_speed = 50 -top_solid_layers = 9 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.35mm FAST sol full 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 3 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.6 -external_perimeter_speed = 30 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.35 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 40 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 60 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 4 -support_material_extrusion_width = 0.55 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 3 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 0 -support_material_xy_spacing = 120% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.57 -top_solid_infill_speed = 50 -top_solid_layers = 4 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.35mm FAST sol int 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 3 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.6 -external_perimeter_speed = 30 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.35 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 40 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 60 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.55 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 0 -support_material_xy_spacing = 150% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.57 -top_solid_infill_speed = 50 -top_solid_layers = 4 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[filament:ColorFabb Brass Bronze] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = nozzle_diameter[0]>0.35 -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.3 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #804040 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 210 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 210 - -[filament:ColorFabb HT] -bed_temperature = 105 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 10 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 105 -first_layer_temperature = 270 -max_fan_speed = 20 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 270 - -[filament:ColorFabb PLA-PHA] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #FF3232 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 15 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 215 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 210 - -[filament:ColorFabb Woodfil] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = nozzle_diameter[0]>0.35 -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.2 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #804040 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 200 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 200 - -[filament:ColorFabb XT] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 90 -first_layer_temperature = 260 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 270 - -[filament:ColorFabb XT-CF20] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.2 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #804040 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 1 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 90 -first_layer_temperature = 260 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 260 - -[filament:ColorFabb nGen] -bed_temperature = 85 -bridge_fan_speed = 40 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 10 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = NGEN -first_layer_bed_temperature = 85 -first_layer_temperature = 240 -max_fan_speed = 35 -min_fan_speed = 20 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 240 - -[filament:ColorFabb nGen flex] -bed_temperature = 85 -bridge_fan_speed = 40 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 10 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 5 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = FLEX -first_layer_bed_temperature = 85 -first_layer_temperature = 260 -max_fan_speed = 35 -min_fan_speed = 20 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 260 - -[filament:E3D Edge] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of manufacturers tested with standart PET print settings for MK2:\n\nE3D Edge\nFillamentum CPE GH100\nPlasty MladeÄ PETG" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 85 -first_layer_temperature = 230 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 240 - -[filament:E3D PC-ABS] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 100 -first_layer_temperature = 270 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 270 - -[filament:Fillamentum ABS] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = ABS -first_layer_bed_temperature = 100 -first_layer_temperature = 240 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 240 - -[filament:Fillamentum ASA] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 100 -first_layer_temperature = 265 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 265 - -[filament:Fillamentum CPE HG100 HM100] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "CPE HG100 , CPE HM100" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 90 -first_layer_temperature = 260 -max_fan_speed = 80 -min_fan_speed = 80 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 260 - -[filament:Fillamentum Timberfil] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = nozzle_diameter[0]>0.35 -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.2 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #804040 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 190 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 190 - -[filament:Generic ABS] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "List of materials tested with standart ABS print settings for MK2:\n\nEsun ABS\nFil-A-Gehr ABS\nHatchboxABS\nPlasty MladeÄ ABS" -filament_settings_id = -filament_soluble = 0 -filament_type = ABS -first_layer_bed_temperature = 100 -first_layer_temperature = 255 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 255 - -[filament:Generic PET] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of manufacturers tested with standart PET print settings for MK2:\n\nE3D Edge\nFillamentum CPE GH100\nPlasty MladeÄ PETG" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 85 -first_layer_temperature = 230 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 240 - -[filament:Generic PLA] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #FF3232 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 15 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 215 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 210 - -[filament:Polymaker PC-Max] -bed_temperature = 120 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "List of materials tested with standart ABS print settings for MK2:\n\nEsun ABS\nFil-A-Gehr ABS\nHatchboxABS\nPlasty MladeÄ ABS" -filament_settings_id = -filament_soluble = 0 -filament_type = ABS -first_layer_bed_temperature = 120 -first_layer_temperature = 270 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 270 - -[filament:Primavalue PVA] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 100 -filament_colour = #FFFFD7 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of materials tested with standart PVA print settings for MK2:\n\nPrimaSelect PVA+\nICE FILAMENTS PVA 'NAUGHTY NATURAL'\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 1 -filament_type = PVA -first_layer_bed_temperature = 60 -first_layer_temperature = 195 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 195 - -[filament:Prusa ABS] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "List of materials tested with standart ABS print settings for MK2:\n\nEsun ABS\nFil-A-Gehr ABS\nHatchboxABS\nPlasty MladeÄ ABS" -filament_settings_id = -filament_soluble = 0 -filament_type = ABS -first_layer_bed_temperature = 100 -first_layer_temperature = 255 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 255 - -[filament:Prusa HIPS] -bed_temperature = 100 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 0.9 -fan_always_on = 1 -fan_below_layer_time = 10 -filament_colour = #FFFFD7 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "" -filament_settings_id = -filament_soluble = 1 -filament_type = HIPS -first_layer_bed_temperature = 100 -first_layer_temperature = 220 -max_fan_speed = 20 -min_fan_speed = 20 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 220 - -[filament:Prusa PET] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of manufacturers tested with standart PET print settings for MK2:\n\nE3D Edge\nFillamentum CPE GH100\nPlasty MladeÄ PETG" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 85 -first_layer_temperature = 230 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 240 - -[filament:Prusa PLA] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #FF3232 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 15 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 215 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 210 - -[filament:SemiFlex or Flexfill 98A] -bed_temperature = 50 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = nozzle_diameter[0]>0.35 and num_extruders==1 -cooling = 0 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.2 -fan_always_on = 0 -fan_below_layer_time = 100 -filament_colour = #00CA0A -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 2.5 -filament_notes = "List of materials tested with FLEX print settings & FLEX material settings for MK2:\n\nFillamentum Flex 98A\nFillamentum Flex 92A\nPlasty MladeÄ PP\nPlasty MladeÄ TPE32 \nPlasty MladeÄ TPE88" -filament_settings_id = -filament_soluble = 0 -filament_type = FLEX -first_layer_bed_temperature = 50 -first_layer_temperature = 220 -max_fan_speed = 90 -min_fan_speed = 70 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 230 - -[filament:Taulman Bridge] -bed_temperature = 50 -bridge_fan_speed = 40 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #DEE0E6 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 90 -first_layer_temperature = 240 -max_fan_speed = 5 -min_fan_speed = 0 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 250 - -[filament:Taulman T-Glase] -bed_temperature = 90 -bridge_fan_speed = 40 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 90 -first_layer_temperature = 240 -max_fan_speed = 5 -min_fan_speed = 0 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 240 - -[filament:Verbatim BVOH] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 100 -filament_colour = #FFFFD7 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 1 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 215 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 210 - -[filament:Verbatim PP] -bed_temperature = 100 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 2 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #DEE0E6 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 5 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nEsun PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nEUMAKERS PLA" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 100 -first_layer_temperature = 220 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 220 - -[printer:Original Prusa i3 MK2] -bed_shape = 0x0,250x0,250x210,0x210 -before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n -between_objects_gcode = -deretract_speed = 0 -end_gcode = G4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200; home X axis\nM84 ; disable motors -extruder_colour = #FFFF00 -extruder_offset = 0x0 -gcode_flavor = marlin -layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] -max_layer_height = 0.25 -min_layer_height = 0.07 -nozzle_diameter = 0.4 -octoprint_apikey = -octoprint_host = -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK2\n -printer_settings_id = -retract_before_travel = 1 -retract_before_wipe = 0% -retract_layer_change = 1 -retract_length = 0.8 -retract_length_toolchange = 3 -retract_lift = 0.6 -retract_lift_above = 0 -retract_lift_below = 199 -retract_restart_extra = 0 -retract_restart_extra_toolchange = 0 -retract_speed = 35 -serial_port = -serial_speed = 250000 -single_extruder_multi_material = 0 -start_gcode = M115 U3.1.0 ; tell printer latest fw version\nM201 X9000 Y9000 Z500 E10000 ; sets maximum accelerations, mm/sec^2\nM203 X500 Y500 Z12 E120 ; sets maximum feedrates, mm/sec\nM204 S1500 T1500 ; sets acceleration (S) and retract acceleration (T)\nM205 X10 Y10 Z0.2 E2.5 ; sets the jerk limits, mm/sec\nM205 S0 T0 ; sets the minimum extruding and travel feed rate, mm/sec\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0 -toolchange_gcode = -use_firmware_retraction = 0 -use_relative_e_distances = 1 -use_volumetric_e = 0 -variable_layer_height = 1 -wipe = 1 -z_offset = 0 - -[printer:Original Prusa i3 MK2 0.25 nozzle] -bed_shape = 0x0,250x0,250x210,0x210 -before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n -between_objects_gcode = -deretract_speed = 0 -end_gcode = G4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200; home X axis\nM84 ; disable motors -extruder_colour = #FFFF00 -extruder_offset = 0x0 -gcode_flavor = marlin -layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] -max_layer_height = 0.1 -min_layer_height = 0.05 -nozzle_diameter = 0.25 -octoprint_apikey = -octoprint_host = -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK2\n -printer_settings_id = -retract_before_travel = 1 -retract_before_wipe = 0% -retract_layer_change = 1 -retract_length = 1 -retract_length_toolchange = 3 -retract_lift = 0.6 -retract_lift_above = 0 -retract_lift_below = 199 -retract_restart_extra = 0 -retract_restart_extra_toolchange = 0 -retract_speed = 50 -serial_port = -serial_speed = 250000 -single_extruder_multi_material = 0 -start_gcode = M115 U3.1.0 ; tell printer latest fw version\nM201 X9000 Y9000 Z500 E10000 ; sets maximum accelerations, mm/sec^2\nM203 X500 Y500 Z12 E120 ; sets maximum feedrates, mm/sec\nM204 S1500 T1500 ; sets acceleration (S) and retract acceleration (T)\nM205 X10 Y10 Z0.2 E2.5 ; sets the jerk limits, mm/sec\nM205 S0 T0 ; sets the minimum extruding and travel feed rate, mm/sec\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0 -toolchange_gcode = -use_firmware_retraction = 0 -use_relative_e_distances = 1 -use_volumetric_e = 0 -variable_layer_height = 0 -wipe = 1 -z_offset = 0 - -[printer:Original Prusa i3 MK2 0.6 nozzle] -bed_shape = 0x0,250x0,250x210,0x210 -before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n -between_objects_gcode = -deretract_speed = 0 -end_gcode = G4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200; home X axis\nM84 ; disable motors -extruder_colour = #FFFF00 -extruder_offset = 0x0 -gcode_flavor = marlin -layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] -max_layer_height = 0.35 -min_layer_height = 0.1 -nozzle_diameter = 0.6 -octoprint_apikey = -octoprint_host = -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK2\n -printer_settings_id = -retract_before_travel = 1 -retract_before_wipe = 0% -retract_layer_change = 1 -retract_length = 0.8 -retract_length_toolchange = 3 -retract_lift = 0.6 -retract_lift_above = 0 -retract_lift_below = 199 -retract_restart_extra = 0 -retract_restart_extra_toolchange = 0 -retract_speed = 35 -serial_port = -serial_speed = 250000 -single_extruder_multi_material = 0 -start_gcode = M115 U3.1.0 ; tell printer latest fw version\nM201 X9000 Y9000 Z500 E10000 ; sets maximum accelerations, mm/sec^2\nM203 X500 Y500 Z12 E120 ; sets maximum feedrates, mm/sec\nM204 S1500 T1500 ; sets acceleration (S) and retract acceleration (T)\nM205 X10 Y10 Z0.2 E2.5 ; sets the jerk limits, mm/sec\nM205 S0 T0 ; sets the minimum extruding and travel feed rate, mm/sec\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0 -toolchange_gcode = -use_firmware_retraction = 0 -use_relative_e_distances = 1 -use_volumetric_e = 0 -variable_layer_height = 1 -wipe = 1 -z_offset = 0 - -[presets] -print = 0.15mm OPTIMAL -printer = Original Prusa i3 MK2 -filament = Prusa PLA diff --git a/resources/profiles/Original Prusa i3 MK2MM.ini b/resources/profiles/Original Prusa i3 MK2MM.ini deleted file mode 100644 index 035d15515..000000000 --- a/resources/profiles/Original Prusa i3 MK2MM.ini +++ /dev/null @@ -1,3419 +0,0 @@ -# generated by Slic3r Prusa Edition 1.39.0 on 2018-01-06 at 15:12:06 - -[print:0.05mm DETAIL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 10 -bridge_acceleration = 300 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1 -complete_objects = 0 -default_acceleration = 500 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 25% -fill_pattern = cubic -first_layer_acceleration = 500 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 20 -gcode_comments = 0 -infill_acceleration = 800 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.5 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 30 -interface_shells = 0 -layer_height = 0.05 -max_print_speed = 80 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 300 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 30 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 15 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 30 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.3 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1.5 -support_material_speed = 30 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 20 -top_solid_layers = 15 -travel_speed = 180 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.05mm DETAIL 0.25 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 10 -bridge_acceleration = 300 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 and num_extruders==1 -complete_objects = 0 -default_acceleration = 500 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.28 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 500 -first_layer_extrusion_width = 0.3 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 20 -gcode_comments = 0 -infill_acceleration = 800 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 20 -interface_shells = 0 -layer_height = 0.05 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 300 -perimeter_extruder = 1 -perimeter_extrusion_width = 0 -perimeter_speed = 20 -perimeters = 4 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 10 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0 -solid_infill_speed = 20 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.18 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 0 -support_material_interface_spacing = 0.15 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1 -support_material_speed = 20 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 150% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0 -top_solid_infill_speed = 20 -top_solid_layers = 15 -travel_speed = 200 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.05mm DETAIL MK3] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 10 -bridge_acceleration = 300 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ -complete_objects = 0 -default_acceleration = 500 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 25% -fill_pattern = grid -first_layer_acceleration = 500 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 20 -gcode_comments = 0 -infill_acceleration = 800 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 30 -interface_shells = 0 -layer_height = 0.05 -max_print_speed = 80 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 300 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 30 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 15 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 30 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.3 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1.5 -support_material_speed = 30 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 20 -top_solid_layers = 15 -travel_speed = 180 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.10mm DETAIL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 7 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.1 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 40 -top_solid_layers = 9 -travel_speed = 120 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.10mm DETAIL 0.25 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 7 -bridge_acceleration = 600 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.25 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.25 -fill_angle = 45 -fill_density = 15% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.25 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 1600 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.25 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 40 -interface_shells = 0 -layer_height = 0.1 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 600 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.25 -perimeter_speed = 25 -perimeters = 4 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 10 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.25 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.18 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 0 -support_material_interface_spacing = 0.15 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 150% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.25 -top_solid_infill_speed = 30 -top_solid_layers = 9 -travel_speed = 120 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.10mm DETAIL MK3] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 30 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 35 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = grid -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 3500 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 200 -interface_shells = 0 -layer_height = 0.1 -max_print_speed = 250 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 45 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 200 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 50 -top_solid_layers = 5 -travel_speed = 250 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm 100mms Linear Advance] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 50 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 100 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 150 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 60 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 30 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 100 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 60 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 70 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 40 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL 0.25 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 600 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.25 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.25 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.25 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 1600 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.25 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 40 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 600 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.25 -perimeter_speed = 25 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 10 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.25 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.2 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 0 -support_material_interface_spacing = 0.15 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 35 -support_material_with_sheath = 0 -support_material_xy_spacing = 150% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.25 -top_solid_infill_speed = 30 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.61 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.6 -top_solid_infill_speed = 40 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL MK3] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 30 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 35 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = grid -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 3500 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 200 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 250 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 45 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 200 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 50 -top_solid_layers = 5 -travel_speed = 250 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL SOLUBLE FULL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 25 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 40 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 4 -support_material_extrusion_width = 0.45 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.1 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 1 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 30 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL SOLUBLE INTERFACE] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 25 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 40 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.45 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 3 -support_material_interface_spacing = 0.1 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 0 -support_material_xy_spacing = 120% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 30 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm 100mms Linear Advance] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 50 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 100 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 150 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 60 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 30 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 100 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 60 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 70 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm FAST MK3] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 30 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 35 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = grid -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 3500 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 200 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 250 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 45 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 200 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 50 -top_solid_layers = 5 -travel_speed = 250 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm NORMAL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 50 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 40 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm NORMAL 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.61 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.6 -top_solid_infill_speed = 40 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm NORMAL SOLUBLE FULL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 30 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 40 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 4 -support_material_extrusion_width = 0.45 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.1 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 1 -support_material_xy_spacing = 120% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 30 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm NORMAL SOLUBLE INTERFACE] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 30 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 40 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.45 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 3 -support_material_interface_spacing = 0.1 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 0 -support_material_xy_spacing = 120% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 30 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.35mm FAST] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 3 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.6 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.7 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.35 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.43 -perimeter_speed = 50 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.7 -solid_infill_speed = 60 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.43 -top_solid_infill_speed = 50 -top_solid_layers = 4 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.35mm FAST 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 7 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.61 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.35 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 60 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.6 -top_solid_infill_speed = 50 -top_solid_layers = 9 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.35mm FAST sol full 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 3 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.6 -external_perimeter_speed = 30 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.35 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 40 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 60 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 4 -support_material_extrusion_width = 0.55 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 3 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 0 -support_material_xy_spacing = 120% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.57 -top_solid_infill_speed = 50 -top_solid_layers = 4 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.35mm FAST sol int 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 3 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.6 -external_perimeter_speed = 30 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.35 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 40 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 60 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.55 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 0 -support_material_xy_spacing = 150% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.57 -top_solid_infill_speed = 50 -top_solid_layers = 4 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[filament:ColorFabb Brass Bronze] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = nozzle_diameter[0]>0.35 -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.3 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #804040 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 210 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 210 - -[filament:ColorFabb HT] -bed_temperature = 105 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 10 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 105 -first_layer_temperature = 270 -max_fan_speed = 20 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 270 - -[filament:ColorFabb PLA-PHA] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #FF3232 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 15 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 215 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 210 - -[filament:ColorFabb Woodfil] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = nozzle_diameter[0]>0.35 -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.2 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #804040 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 200 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 200 - -[filament:ColorFabb XT] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 90 -first_layer_temperature = 260 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 270 - -[filament:ColorFabb XT-CF20] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.2 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #804040 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 1 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 90 -first_layer_temperature = 260 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 260 - -[filament:ColorFabb nGen] -bed_temperature = 85 -bridge_fan_speed = 40 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 10 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = NGEN -first_layer_bed_temperature = 85 -first_layer_temperature = 240 -max_fan_speed = 35 -min_fan_speed = 20 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 240 - -[filament:ColorFabb nGen flex] -bed_temperature = 85 -bridge_fan_speed = 40 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 10 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 5 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = FLEX -first_layer_bed_temperature = 85 -first_layer_temperature = 260 -max_fan_speed = 35 -min_fan_speed = 20 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 260 - -[filament:E3D Edge] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of manufacturers tested with standart PET print settings for MK2:\n\nE3D Edge\nFillamentum CPE GH100\nPlasty MladeÄ PETG" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 85 -first_layer_temperature = 230 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 240 - -[filament:E3D PC-ABS] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 100 -first_layer_temperature = 270 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 270 - -[filament:Fillamentum ABS] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = ABS -first_layer_bed_temperature = 100 -first_layer_temperature = 240 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 240 - -[filament:Fillamentum ASA] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 100 -first_layer_temperature = 265 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 265 - -[filament:Fillamentum CPE HG100 HM100] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "CPE HG100 , CPE HM100" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 90 -first_layer_temperature = 260 -max_fan_speed = 80 -min_fan_speed = 80 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 260 - -[filament:Fillamentum Timberfil] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = nozzle_diameter[0]>0.35 -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.2 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #804040 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 190 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 190 - -[filament:Generic ABS] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "List of materials tested with standart ABS print settings for MK2:\n\nEsun ABS\nFil-A-Gehr ABS\nHatchboxABS\nPlasty MladeÄ ABS" -filament_settings_id = -filament_soluble = 0 -filament_type = ABS -first_layer_bed_temperature = 100 -first_layer_temperature = 255 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 255 - -[filament:Generic PET] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of manufacturers tested with standart PET print settings for MK2:\n\nE3D Edge\nFillamentum CPE GH100\nPlasty MladeÄ PETG" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 85 -first_layer_temperature = 230 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 240 - -[filament:Generic PLA] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #FF3232 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 15 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 215 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 210 - -[filament:Polymaker PC-Max] -bed_temperature = 120 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "List of materials tested with standart ABS print settings for MK2:\n\nEsun ABS\nFil-A-Gehr ABS\nHatchboxABS\nPlasty MladeÄ ABS" -filament_settings_id = -filament_soluble = 0 -filament_type = ABS -first_layer_bed_temperature = 120 -first_layer_temperature = 270 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 270 - -[filament:Primavalue PVA] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 100 -filament_colour = #FFFFD7 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of materials tested with standart PVA print settings for MK2:\n\nPrimaSelect PVA+\nICE FILAMENTS PVA 'NAUGHTY NATURAL'\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 1 -filament_type = PVA -first_layer_bed_temperature = 60 -first_layer_temperature = 195 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 195 - -[filament:Prusa ABS] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "List of materials tested with standart ABS print settings for MK2:\n\nEsun ABS\nFil-A-Gehr ABS\nHatchboxABS\nPlasty MladeÄ ABS" -filament_settings_id = -filament_soluble = 0 -filament_type = ABS -first_layer_bed_temperature = 100 -first_layer_temperature = 255 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 255 - -[filament:Prusa HIPS] -bed_temperature = 100 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 0.9 -fan_always_on = 1 -fan_below_layer_time = 10 -filament_colour = #FFFFD7 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "" -filament_settings_id = -filament_soluble = 1 -filament_type = HIPS -first_layer_bed_temperature = 100 -first_layer_temperature = 220 -max_fan_speed = 20 -min_fan_speed = 20 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 220 - -[filament:Prusa PET] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of manufacturers tested with standart PET print settings for MK2:\n\nE3D Edge\nFillamentum CPE GH100\nPlasty MladeÄ PETG" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 85 -first_layer_temperature = 230 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 240 - -[filament:Prusa PLA] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #FF3232 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 15 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 215 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 210 - -[filament:SemiFlex or Flexfill 98A] -bed_temperature = 50 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = nozzle_diameter[0]>0.35 and num_extruders==1 -cooling = 0 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.2 -fan_always_on = 0 -fan_below_layer_time = 100 -filament_colour = #00CA0A -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 2.5 -filament_notes = "List of materials tested with FLEX print settings & FLEX material settings for MK2:\n\nFillamentum Flex 98A\nFillamentum Flex 92A\nPlasty MladeÄ PP\nPlasty MladeÄ TPE32 \nPlasty MladeÄ TPE88" -filament_settings_id = -filament_soluble = 0 -filament_type = FLEX -first_layer_bed_temperature = 50 -first_layer_temperature = 220 -max_fan_speed = 90 -min_fan_speed = 70 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 230 - -[filament:Taulman Bridge] -bed_temperature = 50 -bridge_fan_speed = 40 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #DEE0E6 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 90 -first_layer_temperature = 240 -max_fan_speed = 5 -min_fan_speed = 0 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 250 - -[filament:Taulman T-Glase] -bed_temperature = 90 -bridge_fan_speed = 40 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 90 -first_layer_temperature = 240 -max_fan_speed = 5 -min_fan_speed = 0 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 240 - -[filament:Verbatim BVOH] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 100 -filament_colour = #FFFFD7 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 1 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 215 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 210 - -[filament:Verbatim PP] -bed_temperature = 100 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 2 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #DEE0E6 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 5 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nEsun PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nEUMAKERS PLA" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 100 -first_layer_temperature = 220 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 220 - -[printer:Original Prusa i3 MK2 MM Single Mode] -bed_shape = 0x0,250x0,250x210,0x210 -before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n -between_objects_gcode = -deretract_speed = 50 -end_gcode = G1 E-4 F2100.00000\nG91\nG1 Z1 F7200.000\nG90\nG1 X245 Y1\nG1 X240 E4\nG1 F4000\nG1 X190 E2.7 \nG1 F4600\nG1 X110 E2.8\nG1 F5200\nG1 X40 E3 \nG1 E-15.0000 F5000\nG1 E-50.0000 F5400\nG1 E-15.0000 F3000\nG1 E-12.0000 F2000\nG1 F1600\nG1 X0 Y1 E3.0000\nG1 X50 Y1 E-5.0000\nG1 F2000\nG1 X0 Y1 E5.0000\nG1 X50 Y1 E-5.0000\nG1 F2400\nG1 X0 Y1 E5.0000\nG1 X50 Y1 E-5.0000\nG1 F2400\nG1 X0 Y1 E5.0000\nG1 X50 Y1 E-3.0000\nG4 S0\nM107 ; fan off\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nG28 X0 ; home X axis\nM84 ; disable motors\n\n -extruder_colour = #FFAA55 -extruder_offset = 0x0 -gcode_flavor = marlin -layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] -max_layer_height = 0.25 -min_layer_height = 0.07 -nozzle_diameter = 0.4 -octoprint_apikey = -octoprint_host = -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK2\nPRINTER_HAS_BOWDEN -printer_settings_id = -retract_before_travel = 3 -retract_before_wipe = 60% -retract_layer_change = 0 -retract_length = 4 -retract_length_toolchange = 6 -retract_lift = 0.6 -retract_lift_above = 0 -retract_lift_below = 199 -retract_restart_extra = 0 -retract_restart_extra_toolchange = 0 -retract_speed = 80 -serial_port = -serial_speed = 250000 -single_extruder_multi_material = 1 -start_gcode = M115 U3.1.0 ; tell printer latest fw version\nM201 X9000 Y9000 Z500 E10000 ; sets maximum accelerations, mm/sec^2\nM203 X500 Y500 Z12 E120 ; sets maximum feedrates, mm/sec\nM204 S1500 T1500 ; sets acceleration (S) and retract acceleration (T)\nM205 X10 Y10 Z0.2 E2.5 ; sets the jerk limits, mm/sec\nM205 S0 T0 ; sets the minimum extruding and travel feed rate, mm/sec\n; Start G-Code sequence START\nT?\nM104 S[first_layer_temperature]\nM140 S[first_layer_bed_temperature]\nM109 S[first_layer_temperature]\nM190 S[first_layer_bed_temperature]\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG28 W\nG80\nG92 E0.0\nM203 E100\nM92 E140\nG1 Z0.250 F7200.000\nG1 X50.0 E80.0 F1000.0\nG1 X160.0 E20.0 F1000.0\nG1 Z0.200 F7200.000\nG1 X220.0 E13 F1000.0\nG1 X240.0 E0 F1000.0\nG1 E-4 F1000.0\nG92 E0.0 -toolchange_gcode = -use_firmware_retraction = 0 -use_relative_e_distances = 1 -use_volumetric_e = 0 -variable_layer_height = 1 -wipe = 1 -z_offset = 0 - -[printer:Original Prusa i3 MK2 MM Single Mode 0.6 nozzle] -bed_shape = 0x0,250x0,250x210,0x210 -before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n -between_objects_gcode = -deretract_speed = 50 -end_gcode = G1 E-4 F2100.00000\nG91\nG1 Z1 F7200.000\nG90\nG1 X245 Y1\nG1 X240 E4\nG1 F4000\nG1 X190 E2.7 \nG1 F4600\nG1 X110 E2.8\nG1 F5200\nG1 X40 E3 \nG1 E-15.0000 F5000\nG1 E-50.0000 F5400\nG1 E-15.0000 F3000\nG1 E-12.0000 F2000\nG1 F1600\nG1 X0 Y1 E3.0000\nG1 X50 Y1 E-5.0000\nG1 F2000\nG1 X0 Y1 E5.0000\nG1 X50 Y1 E-5.0000\nG1 F2400\nG1 X0 Y1 E5.0000\nG1 X50 Y1 E-5.0000\nG1 F2400\nG1 X0 Y1 E5.0000\nG1 X50 Y1 E-3.0000\nG4 S0\nM107 ; fan off\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nG28 X0 ; home X axis\nM84 ; disable motors\n\n -extruder_colour = #FFAA55 -extruder_offset = 0x0 -gcode_flavor = marlin -layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] -max_layer_height = 0.25 -min_layer_height = 0.07 -nozzle_diameter = 0.6 -octoprint_apikey = -octoprint_host = -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK2\nPRINTER_HAS_BOWDEN -printer_settings_id = -retract_before_travel = 3 -retract_before_wipe = 60% -retract_layer_change = 0 -retract_length = 4 -retract_length_toolchange = 6 -retract_lift = 0.6 -retract_lift_above = 0 -retract_lift_below = 199 -retract_restart_extra = 0 -retract_restart_extra_toolchange = 0 -retract_speed = 80 -serial_port = -serial_speed = 250000 -single_extruder_multi_material = 1 -start_gcode = M115 U3.1.0 ; tell printer latest fw version\nM201 X9000 Y9000 Z500 E10000 ; sets maximum accelerations, mm/sec^2\nM203 X500 Y500 Z12 E120 ; sets maximum feedrates, mm/sec\nM204 S1500 T1500 ; sets acceleration (S) and retract acceleration (T)\nM205 X10 Y10 Z0.2 E2.5 ; sets the jerk limits, mm/sec\nM205 S0 T0 ; sets the minimum extruding and travel feed rate, mm/sec\n; Start G-Code sequence START\nT?\nM104 S[first_layer_temperature]\nM140 S[first_layer_bed_temperature]\nM109 S[first_layer_temperature]\nM190 S[first_layer_bed_temperature]\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG28 W\nG80\nG92 E0.0\nM203 E100\nM92 E140\nG1 Z0.250 F7200.000\nG1 X50.0 E80.0 F1000.0\nG1 X160.0 E20.0 F1000.0\nG1 Z0.200 F7200.000\nG1 X220.0 E13 F1000.0\nG1 X240.0 E0 F1000.0\nG1 E-4 F1000.0\nG92 E0.0 -toolchange_gcode = -use_firmware_retraction = 0 -use_relative_e_distances = 1 -use_volumetric_e = 0 -variable_layer_height = 1 -wipe = 1 -z_offset = 0 - -[printer:Original Prusa i3 MK2 MultiMaterial] -bed_shape = 0x0,250x0,250x210,0x210 -before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n -between_objects_gcode = -deretract_speed = 50,50,50,50 -end_gcode = {if not has_wipe_tower}\n; Pull the filament into the cooling tubes.\nG1 E-4 F2100.00000\nG91\nG1 Z1 F7200.000\nG90\nG1 X245 Y1\nG1 X240 E4\nG1 F4000\nG1 X190 E2.7 \nG1 F4600\nG1 X110 E2.8\nG1 F5200\nG1 X40 E3 \nG1 E-15.0000 F5000\nG1 E-50.0000 F5400\nG1 E-15.0000 F3000\nG1 E-12.0000 F2000\nG1 F1600\nG1 X0 Y1 E3.0000\nG1 X50 Y1 E-5.0000\nG1 F2000\nG1 X0 Y1 E5.0000\nG1 X50 Y1 E-5.0000\nG1 F2400\nG1 X0 Y1 E5.0000\nG1 X50 Y1 E-5.0000\nG1 F2400\nG1 X0 Y1 E5.0000\nG1 X50 Y1 E-3.0000\nG4 S0\n{endif}\nM107 ; fan off\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nG28 X0 ; home X axis\nM84 ; disable motors -extruder_colour = #FFAA55;#5182DB;#4ECDD3;#FB7259 -extruder_offset = 0x0,0x0,0x0,0x0 -gcode_flavor = marlin -layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] -max_layer_height = 0.25,0.25,0.25,0.25 -min_layer_height = 0.07,0.07,0.07,0.07 -nozzle_diameter = 0.4,0.4,0.4,0.4 -octoprint_apikey = -octoprint_host = -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK2\nPRINTER_HAS_BOWDEN -printer_settings_id = -retract_before_travel = 3,3,3,3 -retract_before_wipe = 60%,60%,60%,60% -retract_layer_change = 0,0,0,0 -retract_length = 4,4,4,4 -retract_length_toolchange = 4,4,4,4 -retract_lift = 0.6,0.6,0.6,0.6 -retract_lift_above = 0,0,0,0 -retract_lift_below = 199,199,199,199 -retract_restart_extra = 0,0,0,0 -retract_restart_extra_toolchange = 0,0,0,0 -retract_speed = 80,80,80,80 -serial_port = -serial_speed = 250000 -single_extruder_multi_material = 1 -start_gcode = M115 U3.1.0 ; tell printer latest fw version\nM201 X9000 Y9000 Z500 E10000 ; sets maximum accelerations, mm/sec^2\nM203 X500 Y500 Z12 E120 ; sets maximum feedrates, mm/sec\nM204 S1500 T1500 ; sets acceleration (S) and retract acceleration (T)\nM205 X10 Y10 Z0.2 E2.5 ; sets the jerk limits, mm/sec\nM205 S0 T0 ; sets the minimum extruding and travel feed rate, mm/sec\n; Start G-Code sequence START\nT[initial_tool]\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG28 W\nG80\nG92 E0.0\nM203 E100 ; set max feedrate\nM92 E140 ; E-steps per filament milimeter\n{if not has_wipe_tower}\nG1 Z0.250 F7200.000\nG1 X50.0 E80.0 F1000.0\nG1 X160.0 E20.0 F1000.0\nG1 Z0.200 F7200.000\nG1 X220.0 E13 F1000.0\nG1 X240.0 E0 F1000.0\nG1 E-4 F1000.0\n{endif}\nG92 E0.0 -toolchange_gcode = -use_firmware_retraction = 0 -use_relative_e_distances = 1 -use_volumetric_e = 0 -variable_layer_height = 0 -wipe = 1,1,1,1 -z_offset = 0 - -[printer:Original Prusa i3 MK2 MultiMaterial 0.6 nozzle] -bed_shape = 0x0,250x0,250x210,0x210 -before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n -between_objects_gcode = -deretract_speed = 50,50,50,50 -end_gcode = {if not has_wipe_tower}\nG1 E-4 F2100.00000\nG91\nG1 Z1 F7200.000\nG90\nG1 X245 Y1\nG1 X240 E4\nG1 F4000\nG1 X190 E2.7 \nG1 F4600\nG1 X110 E2.8\nG1 F5200\nG1 X40 E3 \nG1 E-15.0000 F5000\nG1 E-50.0000 F5400\nG1 E-15.0000 F3000\nG1 E-12.0000 F2000\nG1 F1600\nG1 X0 Y1 E3.0000\nG1 X50 Y1 E-5.0000\nG1 F2000\nG1 X0 Y1 E5.0000\nG1 X50 Y1 E-5.0000\nG1 F2400\nG1 X0 Y1 E5.0000\nG1 X50 Y1 E-5.0000\nG1 F2400\nG1 X0 Y1 E5.0000\nG1 X50 Y1 E-3.0000\nG4 S0\n{endif}\nM107 ; fan off\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nG28 X0 ; home X axis\nM84 ; disable motors\n -extruder_colour = #FFAA55;#5182DB;#4ECDD3;#FB7259 -extruder_offset = 0x0,0x0,0x0,0x0 -gcode_flavor = marlin -layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] -max_layer_height = 0.25,0.25,0.25,0.25 -min_layer_height = 0.07,0.07,0.07,0.07 -nozzle_diameter = 0.6,0.6,0.6,0.6 -octoprint_apikey = -octoprint_host = -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK2\nPRINTER_HAS_BOWDEN -printer_settings_id = -retract_before_travel = 3,3,3,3 -retract_before_wipe = 60%,60%,60%,60% -retract_layer_change = 0,0,0,0 -retract_length = 4,4,4,4 -retract_length_toolchange = 4,4,4,4 -retract_lift = 0.6,0.6,0.6,0.6 -retract_lift_above = 0,0,0,0 -retract_lift_below = 199,199,199,199 -retract_restart_extra = 0,0,0,0 -retract_restart_extra_toolchange = 0,0,0,0 -retract_speed = 80,80,80,80 -serial_port = -serial_speed = 250000 -single_extruder_multi_material = 1 -start_gcode = M115 U3.1.0 ; tell printer latest fw version\nM201 X9000 Y9000 Z500 E10000 ; sets maximum accelerations, mm/sec^2\nM203 X500 Y500 Z12 E120 ; sets maximum feedrates, mm/sec\nM204 S1500 T1500 ; sets acceleration (S) and retract acceleration (T)\nM205 X10 Y10 Z0.2 E2.5 ; sets the jerk limits, mm/sec\nM205 S0 T0 ; sets the minimum extruding and travel feed rate, mm/sec\n; Start G-Code sequence START\nT[initial_tool]\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nG28 W\nG80\nG92 E0.0\nM203 E100\nM92 E140\n{if not has_wipe_tower}\nG1 Z0.250 F7200.000\nG1 X50.0 E80.0 F1000.0\nG1 X160.0 E20.0 F1000.0\nG1 Z0.200 F7200.000\nG1 X220.0 E13 F1000.0\nG1 X240.0 E0 F1000.0\nG1 E-4 F1000.0\n{endif}\nG92 E0.0 -toolchange_gcode = -use_firmware_retraction = 0 -use_relative_e_distances = 1 -use_volumetric_e = 0 -variable_layer_height = 0 -wipe = 1,1,1,1 -z_offset = 0 - -[presets] -print = 0.15mm OPTIMAL -printer = Original Prusa i3 MK2 MultiMaterial -filament = Prusa PLA -filament_1 = Prusa PLA -filament_2 = Prusa PLA -filament_3 = Prusa PLA diff --git a/resources/profiles/Original Prusa i3 MK3.ini b/resources/profiles/Original Prusa i3 MK3.ini deleted file mode 100644 index b53006b0f..000000000 --- a/resources/profiles/Original Prusa i3 MK3.ini +++ /dev/null @@ -1,3295 +0,0 @@ -# generated by Slic3r Prusa Edition 1.39.0 on 2018-02-02 at 10:48:46 - -[print:0.05mm DETAIL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 10 -bridge_acceleration = 300 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1 -complete_objects = 0 -default_acceleration = 500 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 25% -fill_pattern = cubic -first_layer_acceleration = 500 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 20 -gcode_comments = 0 -infill_acceleration = 800 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.5 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 30 -interface_shells = 0 -layer_height = 0.05 -max_print_speed = 80 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 300 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 30 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 15 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 30 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.3 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1.5 -support_material_speed = 30 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 20 -top_solid_layers = 15 -travel_speed = 180 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.05mm DETAIL 0.25 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 10 -bridge_acceleration = 300 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 and num_extruders==1 -complete_objects = 0 -default_acceleration = 500 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.28 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 500 -first_layer_extrusion_width = 0.3 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 20 -gcode_comments = 0 -infill_acceleration = 800 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 20 -interface_shells = 0 -layer_height = 0.05 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 300 -perimeter_extruder = 1 -perimeter_extrusion_width = 0 -perimeter_speed = 20 -perimeters = 4 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 10 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0 -solid_infill_speed = 20 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.18 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 0 -support_material_interface_spacing = 0.15 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1 -support_material_speed = 20 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 150% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0 -top_solid_infill_speed = 20 -top_solid_layers = 15 -travel_speed = 200 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.05mm DETAIL MK3] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 10 -bridge_acceleration = 300 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ -complete_objects = 0 -default_acceleration = 500 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 25% -fill_pattern = grid -first_layer_acceleration = 500 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 20 -gcode_comments = 0 -infill_acceleration = 800 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 30 -interface_shells = 0 -layer_height = 0.05 -max_print_speed = 80 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 300 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 30 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 15 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 30 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.3 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1.5 -support_material_speed = 30 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 20 -top_solid_layers = 15 -travel_speed = 180 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.10mm DETAIL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 7 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.1 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 40 -top_solid_layers = 9 -travel_speed = 120 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.10mm DETAIL 0.25 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 7 -bridge_acceleration = 600 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.25 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.25 -fill_angle = 45 -fill_density = 15% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.25 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 1600 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.25 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 40 -interface_shells = 0 -layer_height = 0.1 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 600 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.25 -perimeter_speed = 25 -perimeters = 4 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 10 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.25 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.18 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 0 -support_material_interface_spacing = 0.15 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 150% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.25 -top_solid_infill_speed = 30 -top_solid_layers = 9 -travel_speed = 120 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.10mm DETAIL MK3] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 7 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 30 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 35 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = grid -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 1500 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 170 -interface_shells = 0 -layer_height = 0.1 -max_print_speed = 170 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 45 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 170 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 50 -top_solid_layers = 9 -travel_speed = 170 -wipe_tower = 0 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm 100mms Linear Advance] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 50 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 100 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 150 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 60 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 30 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 100 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 60 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 70 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 40 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL 0.25 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 600 -bridge_angle = 0 -bridge_flow_ratio = 0.7 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.25 -external_perimeter_speed = 20 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.25 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.25 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 1600 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.25 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 40 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 600 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.25 -perimeter_speed = 25 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 10 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.25 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.2 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 0 -support_material_interface_spacing = 0.15 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 1 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 35 -support_material_with_sheath = 0 -support_material_xy_spacing = 150% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.25 -top_solid_infill_speed = 30 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.61 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.6 -top_solid_infill_speed = 40 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL MK3] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 30 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 35 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = grid -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 1500 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 170 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 170 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 45 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 170 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 50 -top_solid_layers = 7 -travel_speed = 170 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL SOLUBLE FULL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 25 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 40 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 4 -support_material_extrusion_width = 0.45 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.1 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 1 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 30 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.15mm OPTIMAL SOLUBLE INTERFACE] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 5 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 25 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.15 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 40 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.45 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 3 -support_material_interface_spacing = 0.1 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 0 -support_material_xy_spacing = 120% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 30 -top_solid_layers = 7 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm 100mms Linear Advance] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 50 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 100 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 150 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 60 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 30 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 100 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 60 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 70 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm FAST MK3] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 30 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 35 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = grid -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 1500 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 170 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 170 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 45 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 170 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 50 -top_solid_layers = 5 -travel_speed = 170 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm NORMAL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 50 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 0 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 40 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm NORMAL 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.61 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 50 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.6 -top_solid_infill_speed = 40 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm NORMAL SOLUBLE FULL] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 30 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 40 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 4 -support_material_extrusion_width = 0.45 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.1 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 1 -support_material_xy_spacing = 120% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 30 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.20mm NORMAL SOLUBLE INTERFACE] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 4 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 30 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.45 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.2 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.45 -perimeter_speed = 40 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.45 -solid_infill_speed = 40 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.45 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 3 -support_material_interface_spacing = 0.1 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 0 -support_material_xy_spacing = 120% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.4 -top_solid_infill_speed = 30 -top_solid_layers = 5 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.35mm FAST] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 3 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.95 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.6 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.45 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.42 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.7 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.35 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.43 -perimeter_speed = 50 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.7 -solid_infill_speed = 60 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.43 -top_solid_infill_speed = 50 -top_solid_layers = 4 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.35mm FAST 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 7 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.61 -external_perimeter_speed = 40 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.35 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 0 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 50 -perimeters = 3 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 1 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 60 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 0 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0.15 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.35 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 1 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 0 -support_material_threshold = 45 -support_material_with_sheath = 0 -support_material_xy_spacing = 60% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.6 -top_solid_infill_speed = 50 -top_solid_layers = 9 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 15 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.35mm FAST sol full 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 3 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.6 -external_perimeter_speed = 30 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.35 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 40 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 60 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 4 -support_material_extrusion_width = 0.55 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 3 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 0 -support_material_xy_spacing = 120% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.57 -top_solid_infill_speed = 50 -top_solid_layers = 4 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[print:0.35mm FAST sol int 0.6 nozzle] -avoid_crossing_perimeters = 0 -bottom_solid_layers = 3 -bridge_acceleration = 1000 -bridge_angle = 0 -bridge_flow_ratio = 0.8 -bridge_speed = 20 -brim_width = 0 -clip_multipart_objects = 1 -compatible_printers = -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 and num_extruders>1 -complete_objects = 0 -default_acceleration = 1000 -dont_support_bridges = 1 -elefant_foot_compensation = 0 -ensure_vertical_shell_thickness = 1 -external_fill_pattern = rectilinear -external_perimeter_extrusion_width = 0.6 -external_perimeter_speed = 30 -external_perimeters_first = 0 -extra_perimeters = 0 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extrusion_width = 0.67 -fill_angle = 45 -fill_density = 20% -fill_pattern = cubic -first_layer_acceleration = 1000 -first_layer_extrusion_width = 0.65 -first_layer_height = 0.2 -first_layer_speed = 30 -gap_fill_speed = 40 -gcode_comments = 0 -infill_acceleration = 2000 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0.75 -infill_first = 0 -infill_only_where_needed = 0 -infill_overlap = 25% -infill_speed = 60 -interface_shells = 0 -layer_height = 0.35 -max_print_speed = 100 -max_volumetric_extrusion_rate_slope_negative = 0 -max_volumetric_extrusion_rate_slope_positive = 0 -max_volumetric_speed = 0 -min_skirt_length = 4 -notes = Set your solluble extruder in Multiple Extruders > Support material/raft interface extruder -only_retract_when_crossing_perimeters = 0 -ooze_prevention = 0 -output_filename_format = [input_filename_base].gcode -overhangs = 1 -perimeter_acceleration = 800 -perimeter_extruder = 1 -perimeter_extrusion_width = 0.65 -perimeter_speed = 40 -perimeters = 2 -post_process = -print_settings_id = -raft_layers = 0 -resolution = 0 -seam_position = nearest -skirt_distance = 2 -skirt_height = 3 -skirts = 0 -small_perimeter_speed = 20 -solid_infill_below_area = 0 -solid_infill_every_layers = 0 -solid_infill_extruder = 1 -solid_infill_extrusion_width = 0.65 -solid_infill_speed = 60 -spiral_vase = 0 -standby_temperature_delta = -5 -support_material = 1 -support_material_angle = 0 -support_material_buildplate_only = 0 -support_material_contact_distance = 0 -support_material_enforce_layers = 0 -support_material_extruder = 0 -support_material_extrusion_width = 0.55 -support_material_interface_contact_loops = 0 -support_material_interface_extruder = 4 -support_material_interface_layers = 2 -support_material_interface_spacing = 0.2 -support_material_interface_speed = 100% -support_material_pattern = rectilinear -support_material_spacing = 2 -support_material_speed = 50 -support_material_synchronize_layers = 1 -support_material_threshold = 80 -support_material_with_sheath = 0 -support_material_xy_spacing = 150% -thin_walls = 0 -threads = 4 -top_infill_extrusion_width = 0.57 -top_solid_infill_speed = 50 -top_solid_layers = 4 -travel_speed = 120 -wipe_tower = 1 -wipe_tower_per_color_wipe = 20 -wipe_tower_width = 60 -wipe_tower_x = 180 -wipe_tower_y = 140 -xy_size_compensation = 0 - -[filament:ColorFabb Brass Bronze] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = nozzle_diameter[0]>0.35 -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.3 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #804040 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 210 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 210 - -[filament:ColorFabb HT] -bed_temperature = 105 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 10 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 105 -first_layer_temperature = 270 -max_fan_speed = 20 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 270 - -[filament:ColorFabb PLA-PHA] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #FF3232 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 15 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 215 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 210 - -[filament:ColorFabb Woodfil] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = nozzle_diameter[0]>0.35 -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.2 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #804040 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 200 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 200 - -[filament:ColorFabb XT] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 90 -first_layer_temperature = 260 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 270 - -[filament:ColorFabb XT-CF20] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.2 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #804040 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 1 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 90 -first_layer_temperature = 260 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 260 - -[filament:ColorFabb nGen] -bed_temperature = 85 -bridge_fan_speed = 40 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 10 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = NGEN -first_layer_bed_temperature = 85 -first_layer_temperature = 240 -max_fan_speed = 35 -min_fan_speed = 20 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 240 - -[filament:ColorFabb nGen flex] -bed_temperature = 85 -bridge_fan_speed = 40 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 10 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 5 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = FLEX -first_layer_bed_temperature = 85 -first_layer_temperature = 260 -max_fan_speed = 35 -min_fan_speed = 20 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 260 - -[filament:E3D Edge] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of manufacturers tested with standart PET print settings for MK2:\n\nE3D Edge\nFillamentum CPE GH100\nPlasty MladeÄ PETG" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 85 -first_layer_temperature = 230 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 240 - -[filament:E3D PC-ABS] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 100 -first_layer_temperature = 270 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 270 - -[filament:Fillamentum ABS] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = ABS -first_layer_bed_temperature = 100 -first_layer_temperature = 240 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 240 - -[filament:Fillamentum ASA] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 100 -first_layer_temperature = 265 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 265 - -[filament:Fillamentum CPE HG100 HM100] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "CPE HG100 , CPE HM100" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 90 -first_layer_temperature = 275 -max_fan_speed = 50 -min_fan_speed = 50 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 275 - -[filament:Fillamentum Timberfil] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = nozzle_diameter[0]>0.35 -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.2 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #804040 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 190 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 190 - -[filament:Generic ABS] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "List of materials tested with standart ABS print settings for MK2:\n\nEsun ABS\nFil-A-Gehr ABS\nHatchboxABS\nPlasty MladeÄ ABS" -filament_settings_id = -filament_soluble = 0 -filament_type = ABS -first_layer_bed_temperature = 100 -first_layer_temperature = 255 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 255 - -[filament:Generic PET] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of manufacturers tested with standart PET print settings for MK2:\n\nE3D Edge\nFillamentum CPE GH100\nPlasty MladeÄ PETG" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 85 -first_layer_temperature = 230 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 240 - -[filament:Generic PLA] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #FF3232 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 15 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 215 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 210 - -[filament:Polymaker PC-Max] -bed_temperature = 120 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "List of materials tested with standart ABS print settings for MK2:\n\nEsun ABS\nFil-A-Gehr ABS\nHatchboxABS\nPlasty MladeÄ ABS" -filament_settings_id = -filament_soluble = 0 -filament_type = ABS -first_layer_bed_temperature = 120 -first_layer_temperature = 270 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 270 - -[filament:Primavalue PVA] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 100 -filament_colour = #FFFFD7 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of materials tested with standart PVA print settings for MK2:\n\nPrimaSelect PVA+\nICE FILAMENTS PVA 'NAUGHTY NATURAL'\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 1 -filament_type = PVA -first_layer_bed_temperature = 60 -first_layer_temperature = 195 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 195 - -[filament:Prusa ABS] -bed_temperature = 100 -bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #3A80CA -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "List of materials tested with standart ABS print settings for MK2:\n\nEsun ABS\nFil-A-Gehr ABS\nHatchboxABS\nPlasty MladeÄ ABS" -filament_settings_id = -filament_soluble = 0 -filament_type = ABS -first_layer_bed_temperature = 100 -first_layer_temperature = 255 -max_fan_speed = 30 -min_fan_speed = 10 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 255 - -[filament:Prusa HIPS] -bed_temperature = 100 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 0.9 -fan_always_on = 1 -fan_below_layer_time = 10 -filament_colour = #FFFFD7 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 13 -filament_notes = "" -filament_settings_id = -filament_soluble = 1 -filament_type = HIPS -first_layer_bed_temperature = 100 -first_layer_temperature = 220 -max_fan_speed = 20 -min_fan_speed = 20 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 220 - -[filament:Prusa PET] -bed_temperature = 90 -bridge_fan_speed = 50 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of manufacturers tested with standart PET print settings for MK2:\n\nE3D Edge\nFillamentum CPE GH100\nPlasty MladeÄ PETG" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 85 -first_layer_temperature = 230 -max_fan_speed = 50 -min_fan_speed = 30 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" -temperature = 240 - -[filament:Prusa PLA] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #FF3232 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 15 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 215 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 210 - -[filament:SemiFlex or Flexfill 98A] -bed_temperature = 50 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = nozzle_diameter[0]>0.35 and num_extruders==1 -cooling = 0 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1.2 -fan_always_on = 0 -fan_below_layer_time = 100 -filament_colour = #00CA0A -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 1.5 -filament_notes = "List of materials tested with FLEX print settings & FLEX material settings for MK2:\n\nFillamentum Flex 98A\nFillamentum Flex 92A\nPlasty MladeÄ PP\nPlasty MladeÄ TPE32 \nPlasty MladeÄ TPE88" -filament_settings_id = -filament_soluble = 0 -filament_type = FLEX -first_layer_bed_temperature = 50 -first_layer_temperature = 240 -max_fan_speed = 90 -min_fan_speed = 70 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 240 - -[filament:Taulman Bridge] -bed_temperature = 50 -bridge_fan_speed = 40 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #DEE0E6 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 90 -first_layer_temperature = 240 -max_fan_speed = 5 -min_fan_speed = 0 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 250 - -[filament:Taulman T-Glase] -bed_temperature = 90 -bridge_fan_speed = 40 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 20 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PET -first_layer_bed_temperature = 90 -first_layer_temperature = 240 -max_fan_speed = 5 -min_fan_speed = 0 -min_print_speed = 5 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" -temperature = 240 - -[filament:Verbatim BVOH] -bed_temperature = 60 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 0 -disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 0 -fan_below_layer_time = 100 -filament_colour = #FFFFD7 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" -filament_settings_id = -filament_soluble = 1 -filament_type = PLA -first_layer_bed_temperature = 60 -first_layer_temperature = 215 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 210 - -[filament:Verbatim PP] -bed_temperature = 100 -bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = -cooling = 1 -disable_fan_first_layers = 2 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 -fan_always_on = 1 -fan_below_layer_time = 100 -filament_colour = #DEE0E6 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 5 -filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nEsun PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nEUMAKERS PLA" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 100 -first_layer_temperature = 220 -max_fan_speed = 100 -min_fan_speed = 100 -min_print_speed = 15 -slowdown_below_layer_time = 20 -start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" -temperature = 220 - -[printer:Original Prusa i3 MK3] -bed_shape = 0x0,250x0,250x210,0x210 -before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n -between_objects_gcode = -deretract_speed = 0 -end_gcode = G4 ; wait\nM221 S100\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200; home X axis\nM84 ; disable motors -extruder_colour = #FFFF00 -extruder_offset = 0x0 -gcode_flavor = marlin -layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] -max_layer_height = 0.25 -min_layer_height = 0.07 -nozzle_diameter = 0.4 -octoprint_apikey = -octoprint_host = -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK3\n -retract_before_travel = 1 -retract_before_wipe = 0% -retract_layer_change = 1 -retract_length = 0.8 -retract_length_toolchange = 3 -retract_lift = 0.6 -retract_lift_above = 0 -retract_lift_below = 209 -retract_restart_extra = 0 -retract_restart_extra_toolchange = 0 -retract_speed = 35 -serial_port = -serial_speed = 250000 -single_extruder_multi_material = 0 -start_gcode = M115 U3.1.1-RC5 ; tell printer latest fw version\nM201 X1000 Y1000 Z200 E5000 ; sets maximum accelerations, mm/sec^2\nM203 X200 Y200 Z12 E120 ; sets maximum feedrates, mm/sec\nM204 S1250 T1250 ; sets acceleration (S) and retract acceleration (T)\nM205 X10 Y10 Z0.4 E2.5 ; sets the jerk limits, mm/sec\nM205 S0 T0 ; sets the minimum extruding and travel feed rate, mm/sec\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height==0.05}100{else}95{endif} -toolchange_gcode = -use_firmware_retraction = 0 -use_relative_e_distances = 1 -use_volumetric_e = 0 -variable_layer_height = 1 -wipe = 1 -z_offset = 0 - -[presets] -print = 0.15mm OPTIMAL MK3 -printer = Original Prusa i3 MK3 -filament = Prusa PLA diff --git a/resources/profiles/Original Prusa i3 MK2, MK2S, MK2MM and MK3.ini b/resources/profiles/PrusaResearch.ini similarity index 80% rename from resources/profiles/Original Prusa i3 MK2, MK2S, MK2MM and MK3.ini rename to resources/profiles/PrusaResearch.ini index 3c3602edb..43d2ecbd1 100644 --- a/resources/profiles/Original Prusa i3 MK2, MK2S, MK2MM and MK3.ini +++ b/resources/profiles/PrusaResearch.ini @@ -1,4 +1,28 @@ -# generated by Slic3r Prusa Edition 1.39.0.29-prusa3d-win64 on 2018-01-22 at 14:53:14 +# Print profiles for the Prusa Research printers. + +[vendor] +# Vendor name will be shown by the Config Wizard. +name = Prusa Research +# Configuration version of this file. Config file will only be installed, if the config_version differs. +# This means, the server may force the Slic3r configuration to be downgraded. +config_version = 0.1 +# Where to get the updates from? +config_update_url = https://raw.githubusercontent.com/prusa3d/Slic3r-settings/master/live/PrusaResearch.ini + +# The printer models will be shown by the Configuration Wizard in this order, +# also the first model installed & the first nozzle installed will be activated after install. +#TODO: One day we may differentiate variants of the nozzles / hot ends, +#for example by the melt zone size, or whether the nozzle is hardened. +[printer_model:MK3] +variants = 0.4; 0.25; 0.6 + +[printer_model:MK2S] +variants = 0.4; 0.25; 0.6 + +[printer_model:MK2SMM] +# Printer model name will be shown by the installation wizard. +name = MK2S Multi Material +variants = 0.4; 0.6 # All presets starting with asterisk, for example *common*, are intermediate and they will # not make it into the user interface. @@ -52,6 +76,7 @@ overhangs = 0 only_retract_when_crossing_perimeters = 0 ooze_prevention = 0 output_filename_format = [input_filename_base].gcode +perimeters = 2 perimeter_extruder = 1 perimeter_extrusion_width = 0.45 post_process = @@ -76,10 +101,13 @@ support_material_interface_extruder = 0 support_material_angle = 0 support_material_buildplate_only = 0 support_material_enforce_layers = 0 +support_material_contact_distance = 0.15 support_material_interface_contact_loops = 0 support_material_interface_layers = 2 +support_material_interface_spacing = 0.2 support_material_interface_speed = 100% support_material_pattern = rectilinear +support_material_spacing = 2 support_material_speed = 50 support_material_synchronize_layers = 0 support_material_threshold = 45 @@ -116,7 +144,7 @@ support_material_xy_spacing = 150% external_perimeter_extrusion_width = 0.61 extrusion_width = 0.67 first_layer_extrusion_width = 0.65 -infill_extrusion_width = 0.75 +infill_extrusion_width = 0.7 perimeter_extrusion_width = 0.65 solid_infill_extrusion_width = 0.65 top_infill_extrusion_width = 0.6 @@ -133,7 +161,6 @@ support_material_interface_spacing = 0.1 support_material_synchronize_layers = 1 support_material_threshold = 80 support_material_with_sheath = 1 -support_material_xy_spacing = 120% wipe_tower = 1 [print:*0.05mm*] @@ -143,7 +170,7 @@ bridge_acceleration = 300 bridge_flow_ratio = 0.7 default_acceleration = 500 external_perimeter_speed = 20 -fill_density = 25% +fill_density = 20% first_layer_acceleration = 500 gap_fill_speed = 20 infill_acceleration = 800 @@ -152,30 +179,28 @@ max_print_speed = 80 small_perimeter_speed = 15 solid_infill_speed = 30 support_material_extrusion_width = 0.3 -support_material_interface_spacing = 0.2 support_material_spacing = 1.5 layer_height = 0.05 perimeter_acceleration = 300 perimeter_speed = 30 perimeters = 3 -support_material_contact_distance = 0.15 support_material_speed = 30 top_solid_infill_speed = 20 top_solid_layers = 15 -[print:0.05mm DETAIL] +[print:0.05mm ULTRADETAIL] inherits = *0.05mm* compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1 infill_extrusion_width = 0.5 -[print:0.05mm DETAIL MK3] +[print:0.05mm ULTRADETAIL MK3] inherits = *0.05mm* -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 fill_pattern = grid top_infill_extrusion_width = 0.4 -[print:0.05mm DETAIL 0.25 nozzle] -inherits = *0.05mm*; *0.25nozzle* +[print:0.05mm ULTRADETAIL 0.25 nozzle] +inherits = *0.05mm* compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 and num_extruders==1 external_perimeter_extrusion_width = 0 extrusion_width = 0.28 @@ -186,13 +211,18 @@ infill_speed = 20 max_print_speed = 100 perimeter_extrusion_width = 0 perimeter_speed = 20 -perimeters = 4 small_perimeter_speed = 10 solid_infill_extrusion_width = 0 solid_infill_speed = 20 support_material_speed = 20 top_infill_extrusion_width = 0 +[print:0.05mm ULTRADETAIL 0.25 nozzle MK3] +inherits = *0.05mm*; *0.25nozzle* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.25 and num_extruders==1 +fill_pattern = grid +top_infill_extrusion_width = 0.4 + [print:*0.10mm*] inherits = *common* bottom_solid_layers = 7 @@ -200,9 +230,6 @@ bridge_flow_ratio = 0.7 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1 layer_height = 0.1 perimeter_acceleration = 800 -support_material_contact_distance = 0.15 -support_material_interface_spacing = 0.2 -support_material_spacing = 2 top_solid_layers = 9 [print:0.10mm DETAIL] @@ -212,40 +239,63 @@ external_perimeter_speed = 40 infill_acceleration = 2000 infill_speed = 60 perimeter_speed = 50 -perimeters = 3 solid_infill_speed = 50 [print:0.10mm DETAIL MK3] inherits = *0.10mm* -bridge_flow_ratio = 0.8 bridge_speed = 30 -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 external_perimeter_speed = 35 fill_pattern = grid infill_acceleration = 1500 infill_speed = 170 -max_print_speed = 170 +max_print_speed = 200 perimeter_speed = 45 -perimeters = 2 solid_infill_speed = 170 top_infill_extrusion_width = 0.4 top_solid_infill_speed = 50 [print:0.10mm DETAIL 0.25 nozzle] -inherits = *0.10mm*; *0.25nozzle* +inherits = *0.10mm* bridge_acceleration = 600 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 external_perimeter_speed = 20 -fill_density = 15% infill_acceleration = 1600 infill_speed = 40 perimeter_acceleration = 600 perimeter_speed = 25 -perimeters = 4 small_perimeter_speed = 10 solid_infill_speed = 40 top_solid_infill_speed = 30 +[print:0.10mm DETAIL 0.25 nozzle MK3] +inherits = *0.10mm* +bridge_speed = 30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.25 +external_perimeter_speed = 35 +fill_pattern = grid +infill_acceleration = 1500 +infill_speed = 170 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 170 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 50 + +[print:0.10mm DETAIL 0.6 nozzle MK3] +inherits = *0.10mm* +bridge_speed = 30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +fill_pattern = grid +infill_acceleration = 1500 +infill_speed = 170 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 170 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 50 + [print:*0.15mm*] inherits = *common* bottom_solid_layers = 5 @@ -255,29 +305,22 @@ infill_speed = 60 layer_height = 0.15 perimeter_acceleration = 800 perimeter_speed = 50 -perimeters = 3 solid_infill_speed = 50 -support_material_contact_distance = 0.15 -support_material_interface_spacing = 0.2 -support_material_spacing = 2 top_infill_extrusion_width = 0.4 top_solid_layers = 7 [print:0.15mm 100mms Linear Advance] inherits = *0.15mm* -bottom_solid_layers = 4 bridge_flow_ratio = 0.95 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 external_perimeter_speed = 50 infill_speed = 100 max_print_speed = 150 perimeter_speed = 60 -perimeters = 2 small_perimeter_speed = 30 solid_infill_speed = 100 support_material_speed = 60 top_solid_infill_speed = 70 -top_solid_layers = 5 [print:0.15mm OPTIMAL] inherits = *0.15mm* @@ -294,44 +337,38 @@ infill_acceleration = 1600 infill_speed = 40 perimeter_acceleration = 600 perimeter_speed = 25 -perimeters = 2 small_perimeter_speed = 10 solid_infill_speed = 40 support_material_extrusion_width = 0.2 -support_material_threshold = 35 top_solid_infill_speed = 30 [print:0.15mm OPTIMAL 0.6 nozzle] inherits = *0.15mm*; *0.6nozzle* compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 -wipe_tower = 1 [print:0.15mm OPTIMAL MK3] inherits = *0.15mm* bridge_speed = 30 -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 external_perimeter_speed = 35 fill_pattern = grid infill_acceleration = 1500 infill_speed = 170 max_print_speed = 170 perimeter_speed = 45 -perimeters = 2 solid_infill_speed = 170 top_solid_infill_speed = 50 -wipe_tower = 1 [print:0.15mm OPTIMAL SOLUBLE FULL] inherits = *0.15mm*; *soluble_support* -bottom_solid_layers = 5 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders>1 external_perimeter_speed = 25 notes = Set your solluble extruder in Multiple Extruders > Support material/raft/skirt extruder & Support material/raft interface extruder perimeter_speed = 40 solid_infill_speed = 40 -support_material_xy_spacing = 60% top_infill_extrusion_width = 0.45 top_solid_infill_speed = 30 +wipe_tower = 1 [print:0.15mm OPTIMAL SOLUBLE INTERFACE] inherits = 0.15mm OPTIMAL SOLUBLE FULL @@ -339,8 +376,20 @@ notes = Set your solluble extruder in Multiple Extruders > Support material/raf support_material_extruder = 0 support_material_interface_layers = 3 support_material_with_sheath = 0 -support_material_xy_spacing = 120% +support_material_xy_spacing = 80% +[print:0.15mm OPTIMAL 0.25 nozzle MK3] +inherits = *0.15mm* +bridge_speed = 30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.25 +external_perimeter_speed = 35 +fill_pattern = grid +infill_acceleration = 1500 +infill_speed = 170 +max_print_speed = 170 +perimeter_speed = 45 +solid_infill_speed = 170 +top_solid_infill_speed = 50 [print:*0.20mm*] inherits = *common* bottom_solid_layers = 4 @@ -351,14 +400,22 @@ infill_speed = 60 layer_height = 0.2 perimeter_acceleration = 800 perimeter_speed = 50 -perimeters = 2 solid_infill_speed = 50 -support_material_contact_distance = 0.15 -support_material_interface_spacing = 0.2 -support_material_spacing = 2 top_infill_extrusion_width = 0.4 top_solid_layers = 5 -wipe_tower = 1 + +[print:0.15mm OPTIMAL 0.6 nozzle MK3] +inherits = *0.15mm* +bridge_speed = 30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +fill_pattern = grid +infill_acceleration = 1500 +infill_speed = 170 +max_print_speed = 170 +perimeter_speed = 45 +solid_infill_speed = 170 +top_solid_infill_speed = 50 [print:0.20mm 100mms Linear Advance] inherits = *0.20mm* @@ -375,8 +432,7 @@ top_solid_infill_speed = 70 [print:0.20mm FAST MK3] inherits = *0.20mm* bridge_speed = 30 -bridge_flow_ratio = 0.8 -compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 external_perimeter_speed = 35 fill_pattern = grid infill_acceleration = 1500 @@ -392,9 +448,7 @@ compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and [print:0.20mm NORMAL 0.6 nozzle] inherits = *0.20mm*; *0.6nozzle* -bridge_flow_ratio = 0.8 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 -perimeters = 3 [print:0.20mm NORMAL SOLUBLE FULL] inherits = *0.20mm*; *soluble_support* @@ -411,6 +465,20 @@ notes = Set your solluble extruder in Multiple Extruders > Support material/raf support_material_extruder = 0 support_material_interface_layers = 3 support_material_with_sheath = 0 +support_material_xy_spacing = 80% + +[print:0.20mm FAST 0.6 nozzle MK3] +inherits = *0.20mm* +bridge_speed = 30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +fill_pattern = grid +infill_acceleration = 1500 +infill_speed = 170 +max_print_speed = 170 +perimeter_speed = 45 +solid_infill_speed = 170 +top_solid_infill_speed = 50 [print:*0.35mm*] inherits = *common* @@ -419,38 +487,28 @@ external_perimeter_extrusion_width = 0.6 external_perimeter_speed = 40 first_layer_extrusion_width = 0.75 infill_acceleration = 2000 -infill_extrusion_width = 0.75 infill_speed = 60 layer_height = 0.35 perimeter_acceleration = 800 perimeter_extrusion_width = 0.65 perimeter_speed = 50 -perimeters = 2 solid_infill_extrusion_width = 0.65 solid_infill_speed = 60 -support_material_contact_distance = 0.15 -support_material_interface_spacing = 0.2 -support_material_spacing = 2 top_solid_infill_speed = 50 top_solid_layers = 4 -wipe_tower = 1 [print:0.35mm FAST] inherits = *0.35mm* bridge_flow_ratio = 0.95 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 first_layer_extrusion_width = 0.42 -infill_extrusion_width = 0.7 perimeter_extrusion_width = 0.43 solid_infill_extrusion_width = 0.7 top_infill_extrusion_width = 0.43 [print:0.35mm FAST 0.6 nozzle] inherits = *0.35mm*; *0.6nozzle* -bottom_solid_layers = 7 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6 -perimeters = 3 -top_solid_layers = 9 [print:0.35mm FAST sol full 0.6 nozzle] inherits = *0.35mm*; *0.6nozzle*; *soluble_support* @@ -461,14 +519,14 @@ notes = Set your solluble extruder in Multiple Extruders > Support material/raf perimeter_speed = 40 support_material_extrusion_width = 0.55 support_material_interface_layers = 3 -support_material_interface_spacing = 0.2 -support_material_with_sheath = 0 +support_material_xy_spacing = 120% top_infill_extrusion_width = 0.57 [print:0.35mm FAST sol int 0.6 nozzle] inherits = 0.35mm FAST sol full 0.6 nozzle support_material_extruder = 0 support_material_interface_layers = 2 +support_material_with_sheath = 0 support_material_xy_spacing = 150% [filament:*common*] @@ -480,6 +538,7 @@ extrusion_multiplier = 1 filament_cost = 0 filament_density = 0 filament_diameter = 1.75 +filament_notes = "" filament_settings_id = filament_soluble = 0 min_print_speed = 5 @@ -510,7 +569,7 @@ disable_fan_first_layers = 3 fan_always_on = 1 fan_below_layer_time = 20 filament_colour = #FF8000 -filament_max_volumetric_speed = 10 +filament_max_volumetric_speed = 8 filament_type = PET first_layer_bed_temperature = 85 first_layer_temperature = 230 @@ -521,19 +580,19 @@ temperature = 240 [filament:*ABS*] inherits = *common* -bed_temperature = 100 +bed_temperature = 110 bridge_fan_speed = 30 cooling = 0 disable_fan_first_layers = 3 fan_always_on = 0 fan_below_layer_time = 20 filament_colour = #3A80CA -filament_max_volumetric_speed = 13 +filament_max_volumetric_speed = 11 filament_type = ABS first_layer_bed_temperature = 100 first_layer_temperature = 255 max_fan_speed = 30 -min_fan_speed = 10 +min_fan_speed = 20 temperature = 255 [filament:*FLEX*] @@ -545,6 +604,7 @@ disable_fan_first_layers = 1 extrusion_multiplier = 1.2 fan_always_on = 0 fan_below_layer_time = 100 +filament_colour = #00CA0A filament_max_volumetric_speed = 1.5 filament_type = FLEX first_layer_bed_temperature = 50 @@ -557,43 +617,28 @@ temperature = 240 [filament:ColorFabb Brass Bronze] inherits = *PLA* compatible_printers_condition = nozzle_diameter[0]>0.35 -extrusion_multiplier = 1.3 +extrusion_multiplier = 1.2 filament_colour = #804040 filament_max_volumetric_speed = 10 -min_print_speed = 5 [filament:ColorFabb HT] -bed_temperature = 105 +inherits = *PET* +bed_temperature = 110 bridge_fan_speed = 30 -compatible_printers = -compatible_printers_condition = cooling = 1 disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 fan_always_on = 0 fan_below_layer_time = 10 -filament_colour = #FF8000 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 -filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = -filament_soluble = 0 -filament_type = PLA first_layer_bed_temperature = 105 first_layer_temperature = 270 max_fan_speed = 20 min_fan_speed = 10 min_print_speed = 5 -slowdown_below_layer_time = 20 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode" temperature = 270 [filament:ColorFabb PLA-PHA] inherits = *PLA* -filament_colour = #FF3232 [filament:ColorFabb Woodfil] inherits = *PLA* @@ -608,7 +653,6 @@ temperature = 200 [filament:ColorFabb XT] inherits = *PET* -filament_colour = #FF8000 filament_type = PLA first_layer_bed_temperature = 90 first_layer_temperature = 260 @@ -629,21 +673,19 @@ inherits = *PET* bridge_fan_speed = 40 fan_always_on = 0 fan_below_layer_time = 10 -filament_colour = #FF8000 filament_type = NGEN first_layer_temperature = 240 max_fan_speed = 35 min_fan_speed = 20 [filament:ColorFabb nGen flex] -inherits = *flex* +inherits = *FLEX* bed_temperature = 85 bridge_fan_speed = 40 cooling = 1 disable_fan_first_layers = 3 extrusion_multiplier = 1 fan_below_layer_time = 10 -filament_colour = #FF8000 filament_max_volumetric_speed = 5 first_layer_bed_temperature = 85 first_layer_temperature = 260 @@ -653,31 +695,26 @@ temperature = 260 [filament:E3D Edge] inherits = *PET* -filament_colour = #FF8000 filament_notes = "List of manufacturers tested with standart PET print settings for MK2:\n\nE3D Edge\nFillamentum CPE GH100\nPlasty MladeÄ PETG" [filament:E3D PC-ABS] inherits = *ABS* -filament_colour = #3A80CA first_layer_temperature = 270 temperature = 270 [filament:Fillamentum ABS] inherits = *ABS* -filament_colour = #3A80CA first_layer_temperature = 240 temperature = 240 [filament:Fillamentum ASA] +inherits = *ABS* fan_always_on = 1 -filament_colour = #3A80CA first_layer_temperature = 265 temperature = 265 [filament:Fillamentum CPE HG100 HM100] inherits = *PET* -disable_fan_first_layers = 1 -filament_colour = #FF8000 filament_notes = "CPE HG100 , CPE HM100" first_layer_bed_temperature = 90 first_layer_temperature = 275 @@ -709,9 +746,9 @@ filament_notes = "List of materials tested with standart PLA print settings for [filament:Polymaker PC-Max] inherits = *ABS* -bed_temperature = 120 +bed_temperature = 115 filament_colour = #3A80CA -first_layer_bed_temperature = 120 +first_layer_bed_temperature = 100 first_layer_temperature = 270 temperature = 270 @@ -754,38 +791,28 @@ filament_notes = "List of manufacturers tested with standart PET print settings [filament:Prusa PLA] inherits = *PLA* -filament_colour = #FF3232 filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" [filament:SemiFlex or Flexfill 98A] -inherits = *flex* +inherits = *FLEX* [filament:Taulman Bridge] -bed_temperature = 50 +inherits = *common* +bed_temperature = 90 bridge_fan_speed = 40 -compatible_printers = -compatible_printers_condition = cooling = 0 disable_fan_first_layers = 3 -end_filament_gcode = "; Filament-specific end gcode" -extrusion_multiplier = 1 fan_always_on = 0 fan_below_layer_time = 20 filament_colour = #DEE0E6 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 filament_max_volumetric_speed = 10 -filament_notes = "" -filament_settings_id = filament_soluble = 0 -filament_type = PLA -first_layer_bed_temperature = 90 +filament_type = PET +first_layer_bed_temperature = 60 first_layer_temperature = 240 max_fan_speed = 5 min_fan_speed = 0 min_print_speed = 5 -slowdown_below_layer_time = 20 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" temperature = 250 @@ -794,7 +821,6 @@ inherits = *PET* bridge_fan_speed = 40 cooling = 0 fan_always_on = 0 -filament_colour = #FF8000 first_layer_bed_temperature = 90 first_layer_temperature = 240 max_fan_speed = 5 @@ -802,23 +828,17 @@ min_fan_speed = 0 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode" [filament:Verbatim BVOH] +inherits = *common* bed_temperature = 60 bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = cooling = 0 disable_fan_first_layers = 1 -end_filament_gcode = "; Filament-specific end gcode" extrusion_multiplier = 1 fan_always_on = 0 fan_below_layer_time = 100 filament_colour = #FFFFD7 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 filament_max_volumetric_speed = 10 filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH" -filament_settings_id = filament_soluble = 1 filament_type = PLA first_layer_bed_temperature = 60 @@ -826,36 +846,27 @@ first_layer_temperature = 215 max_fan_speed = 100 min_fan_speed = 100 min_print_speed = 15 -slowdown_below_layer_time = 20 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" temperature = 210 [filament:Verbatim PP] +inherits = *common* bed_temperature = 100 bridge_fan_speed = 100 -compatible_printers = -compatible_printers_condition = cooling = 1 disable_fan_first_layers = 2 -end_filament_gcode = "; Filament-specific end gcode" extrusion_multiplier = 1 fan_always_on = 1 fan_below_layer_time = 100 filament_colour = #DEE0E6 -filament_cost = 0 -filament_density = 0 -filament_diameter = 1.75 filament_max_volumetric_speed = 5 filament_notes = "List of materials tested with standart PLA print settings for MK2:\n\nEsun PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty MladeÄ PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nEUMAKERS PLA" -filament_settings_id = -filament_soluble = 0 filament_type = PLA first_layer_bed_temperature = 100 first_layer_temperature = 220 max_fan_speed = 100 min_fan_speed = 100 min_print_speed = 15 -slowdown_below_layer_time = 20 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode" temperature = 220 @@ -880,7 +891,7 @@ retract_before_travel = 1 retract_before_wipe = 0% retract_layer_change = 1 retract_length = 0.8 -retract_length_toolchange = 3 +retract_length_toolchange = 4 retract_lift = 0.6 retract_lift_above = 0 retract_lift_below = 199 @@ -898,6 +909,10 @@ use_volumetric_e = 0 variable_layer_height = 1 wipe = 1 z_offset = 0 +#printer_model = MK2S +#printer_variant = 0.4 +#default_print_profile = 0.15mm OPTIMAL +#default_filament_profile = Prusa PLA [printer:*multimaterial*] inherits = *common* @@ -906,7 +921,6 @@ retract_before_travel = 3 retract_before_wipe = 60% retract_layer_change = 0 retract_length = 4 -retract_length_toolchange = 4 retract_lift = 0.6 retract_lift_above = 0 retract_lift_below = 199 @@ -914,6 +928,7 @@ retract_restart_extra = 0 retract_restart_extra_toolchange = 0 retract_speed = 80 single_extruder_multi_material = 1 +#printer_model = MK2SMM [printer:*mm-single*] inherits = *multimaterial* @@ -941,12 +956,15 @@ nozzle_diameter = 0.25 retract_length = 1 retract_speed = 50 variable_layer_height = 0 +#printer_variant = 0.25 +#default_print_profile = 0.10mm DETAIL 0.25 nozzle [printer:Original Prusa i3 MK2 0.6 nozzle] inherits = *common* max_layer_height = 0.35 min_layer_height = 0.1 nozzle_diameter = 0.6 +#printer_variant = 0.6 [printer:Original Prusa i3 MK2 MM Single Mode] inherits = *mm-single* @@ -954,6 +972,7 @@ inherits = *mm-single* [printer:Original Prusa i3 MK2 MM Single Mode 0.6 nozzle] inherits = *mm-single* nozzle_diameter = 0.6 +#printer_variant = 0.6 [printer:Original Prusa i3 MK2 MultiMaterial] inherits = *mm-multi* @@ -962,6 +981,7 @@ nozzle_diameter = 0.4,0.4,0.4,0.4 [printer:Original Prusa i3 MK2 MultiMaterial 0.6 nozzle] inherits = *mm-multi* nozzle_diameter = 0.6,0.6,0.6,0.6 +#printer_variant = 0.6 [printer:Original Prusa i3 MK3] inherits = *common* @@ -969,6 +989,28 @@ end_gcode = G4 ; wait\nM221 S100\nM104 S0 ; turn off temperature\nM140 S0 ; turn printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK3\n retract_lift_below = 209 start_gcode = M115 U3.1.1-RC5 ; tell printer latest fw version\nM201 X1000 Y1000 Z200 E5000 ; sets maximum accelerations, mm/sec^2\nM203 X200 Y200 Z12 E120 ; sets maximum feedrates, mm/sec\nM204 S1250 T1250 ; sets acceleration (S) and retract acceleration (T)\nM205 X10 Y10 Z0.4 E2.5 ; sets the jerk limits, mm/sec\nM205 S0 T0 ; sets the minimum extruding and travel feed rate, mm/sec\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height==0.05}100{else}95{endif} +#printer_model = MK3 +#default_print_profile = 0.15mm OPTIMAL MK3 + +[printer:Original Prusa i3 MK3 0.25 nozzle] +inherits = *common* +nozzle_diameter = 0.25 +end_gcode = G4 ; wait\nM221 S100\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200; home X axis\nM84 ; disable motors +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK3\n +retract_lift_below = 209 +start_gcode = M115 U3.1.1-RC5 ; tell printer latest fw version\nM201 X1000 Y1000 Z200 E5000 ; sets maximum accelerations, mm/sec^2\nM203 X200 Y200 Z12 E120 ; sets maximum feedrates, mm/sec\nM204 S1250 T1250 ; sets acceleration (S) and retract acceleration (T)\nM205 X10 Y10 Z0.4 E2.5 ; sets the jerk limits, mm/sec\nM205 S0 T0 ; sets the minimum extruding and travel feed rate, mm/sec\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height==0.05}100{else}95{endif} +#printer_model = MK3 +#default_print_profile = 0.10mm DETAIL MK3 + +[printer:Original Prusa i3 MK3 0.6 nozzle] +inherits = *common* +nozzle_diameter = 0.6 +end_gcode = G4 ; wait\nM221 S100\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200; home X axis\nM84 ; disable motors +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK3\n +retract_lift_below = 209 +start_gcode = M115 U3.1.1-RC5 ; tell printer latest fw version\nM201 X1000 Y1000 Z200 E5000 ; sets maximum accelerations, mm/sec^2\nM203 X200 Y200 Z12 E120 ; sets maximum feedrates, mm/sec\nM204 S1250 T1250 ; sets acceleration (S) and retract acceleration (T)\nM205 X10 Y10 Z0.4 E2.5 ; sets the jerk limits, mm/sec\nM205 S0 T0 ; sets the minimum extruding and travel feed rate, mm/sec\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height==0.05}100{else}95{endif} +#printer_model = MK3 +#default_print_profile = 0.15mm OPTIMAL MK3 [presets] print = 0.15mm OPTIMAL MK3 diff --git a/slic3r.pl b/slic3r.pl index a3cc3cfc2..d9bed0ab6 100755 --- a/slic3r.pl +++ b/slic3r.pl @@ -12,7 +12,7 @@ BEGIN { use File::Basename qw(basename); use Getopt::Long qw(:config no_auto_abbrev); use List::Util qw(first); -use POSIX qw(setlocale LC_NUMERIC); +#use POSIX qw(setlocale LC_NUMERIC); use Slic3r; use Slic3r::Geometry qw(deg2rad); use Time::HiRes qw(gettimeofday tv_interval); @@ -112,7 +112,7 @@ if ((!@ARGV || $opt{gui}) && !$opt{no_gui} && !$opt{save} && eval "require Slic3 $Slic3r::GUI::autosave = $opt{autosave}; } $gui = Slic3r::GUI->new; - setlocale(LC_NUMERIC, 'C'); + #setlocale(LC_NUMERIC, 'C'); $gui->{mainframe}->load_config_file($_) for @{$opt{load}}; $gui->{mainframe}->load_config($cli_config); my @input_files = @ARGV; diff --git a/t/svg.t b/t/svg.t index 6092efe24..47d24ceb8 100644 --- a/t/svg.t +++ b/t/svg.t @@ -10,6 +10,7 @@ BEGIN { use Slic3r; use Slic3r::Test; +use IO::Scalar; { my $print = Slic3r::Test::init_print('20mm_cube'); diff --git a/utils/gcode_sectioncut.pl b/utils/gcode_sectioncut.pl index afc011ce8..e83f3fcda 100644 --- a/utils/gcode_sectioncut.pl +++ b/utils/gcode_sectioncut.pl @@ -11,7 +11,6 @@ BEGIN { } use Getopt::Long qw(:config no_auto_abbrev); -use IO::All; use List::Util qw(max); use Slic3r; use Slic3r::Geometry qw(X Y); diff --git a/xs/CMakeLists.txt b/xs/CMakeLists.txt index ce16a08f5..63b99a835 100644 --- a/xs/CMakeLists.txt +++ b/xs/CMakeLists.txt @@ -199,6 +199,10 @@ add_library(libslic3r_gui STATIC ${LIBDIR}/slic3r/GUI/2DBed.hpp ${LIBDIR}/slic3r/GUI/wxExtensions.cpp ${LIBDIR}/slic3r/GUI/wxExtensions.hpp + ${LIBDIR}/slic3r/GUI/BonjourDialog.cpp + ${LIBDIR}/slic3r/GUI/BonjourDialog.hpp + ${LIBDIR}/slic3r/Utils/ASCIIFolding.cpp + ${LIBDIR}/slic3r/Utils/ASCIIFolding.hpp ${LIBDIR}/slic3r/Utils/Http.cpp ${LIBDIR}/slic3r/Utils/Http.hpp ${LIBDIR}/slic3r/Utils/OctoPrint.cpp diff --git a/xs/src/libslic3r/BoundingBox.hpp b/xs/src/libslic3r/BoundingBox.hpp index a7334308c..92a2bd451 100644 --- a/xs/src/libslic3r/BoundingBox.hpp +++ b/xs/src/libslic3r/BoundingBox.hpp @@ -94,6 +94,14 @@ public: void translate(const Pointf3 &pos) { this->translate(pos.x, pos.y, pos.z); } void offset(coordf_t delta); PointClass center() const; + + bool contains(const PointClass &point) const { + return BoundingBoxBase::contains(point) && point.z >= this->min.z && point.z <= this->max.z; + } + + bool contains(const BoundingBox3Base& other) const { + return contains(other.min) && contains(other.max); + } }; class BoundingBox : public BoundingBoxBase diff --git a/xs/src/libslic3r/Fill/FillRectilinear2.cpp b/xs/src/libslic3r/Fill/FillRectilinear2.cpp index 58d9093af..ddd785101 100644 --- a/xs/src/libslic3r/Fill/FillRectilinear2.cpp +++ b/xs/src/libslic3r/Fill/FillRectilinear2.cpp @@ -1427,10 +1427,12 @@ Polylines FillTriangles::fill_surface(const Surface *surface, const FillParams & // Each linear fill covers 1/3 of the target coverage. FillParams params2 = params; params2.density *= 0.333333333f; + FillParams params3 = params2; + params3.dont_connect = true; Polylines polylines_out; if (! fill_surface_by_lines(surface, params2, 0.f, 0., polylines_out) || ! fill_surface_by_lines(surface, params2, float(M_PI / 3.), 0., polylines_out) || - ! fill_surface_by_lines(surface, params2, float(2. * M_PI / 3.), 0., polylines_out)) { + ! fill_surface_by_lines(surface, params3, float(2. * M_PI / 3.), 0., polylines_out)) { printf("FillTriangles::fill_surface() failed to fill a region.\n"); } return polylines_out; @@ -1441,10 +1443,12 @@ Polylines FillStars::fill_surface(const Surface *surface, const FillParams ¶ // Each linear fill covers 1/3 of the target coverage. FillParams params2 = params; params2.density *= 0.333333333f; + FillParams params3 = params2; + params3.dont_connect = true; Polylines polylines_out; if (! fill_surface_by_lines(surface, params2, 0.f, 0., polylines_out) || ! fill_surface_by_lines(surface, params2, float(M_PI / 3.), 0., polylines_out) || - ! fill_surface_by_lines(surface, params2, float(2. * M_PI / 3.), 0.5 * this->spacing / params2.density, polylines_out)) { + ! fill_surface_by_lines(surface, params3, float(2. * M_PI / 3.), 0.5 * this->spacing / params2.density, polylines_out)) { printf("FillStars::fill_surface() failed to fill a region.\n"); } return polylines_out; @@ -1455,12 +1459,14 @@ Polylines FillCubic::fill_surface(const Surface *surface, const FillParams ¶ // Each linear fill covers 1/3 of the target coverage. FillParams params2 = params; params2.density *= 0.333333333f; + FillParams params3 = params2; + params3.dont_connect = true; Polylines polylines_out; coordf_t dx = sqrt(0.5) * z; if (! fill_surface_by_lines(surface, params2, 0.f, dx, polylines_out) || ! fill_surface_by_lines(surface, params2, float(M_PI / 3.), - dx, polylines_out) || // Rotated by PI*2/3 + PI to achieve reverse sloping wall. - ! fill_surface_by_lines(surface, params2, float(M_PI * 2. / 3.), dx, polylines_out)) { + ! fill_surface_by_lines(surface, params3, float(M_PI * 2. / 3.), dx, polylines_out)) { printf("FillCubic::fill_surface() failed to fill a region.\n"); } return polylines_out; diff --git a/xs/src/libslic3r/Format/3mf.cpp b/xs/src/libslic3r/Format/3mf.cpp index 029debf72..b34b8989e 100644 --- a/xs/src/libslic3r/Format/3mf.cpp +++ b/xs/src/libslic3r/Format/3mf.cpp @@ -21,7 +21,8 @@ const std::string MODEL_EXTENSION = ".model"; const std::string MODEL_FILE = "3D/3dmodel.model"; // << this is the only format of the string which works with CURA const std::string CONTENT_TYPES_FILE = "[Content_Types].xml"; const std::string RELATIONSHIPS_FILE = "_rels/.rels"; -const std::string CONFIG_FILE = "Metadata/Slic3r_PE.config"; +const std::string PRINT_CONFIG_FILE = "Metadata/Slic3r_PE.config"; +const std::string MODEL_CONFIG_FILE = "Metadata/Slic3r_PE_model.config"; const char* MODEL_TAG = "model"; const char* RESOURCES_TAG = "resources"; @@ -36,6 +37,10 @@ const char* COMPONENT_TAG = "component"; const char* BUILD_TAG = "build"; const char* ITEM_TAG = "item"; +const char* CONFIG_TAG = "config"; +const char* METADATA_TAG = "metadata"; +const char* VOLUME_TAG = "volume"; + const char* UNIT_ATTR = "unit"; const char* NAME_ATTR = "name"; const char* TYPE_ATTR = "type"; @@ -49,6 +54,17 @@ const char* V3_ATTR = "v3"; const char* OBJECTID_ATTR = "objectid"; const char* TRANSFORM_ATTR = "transform"; +const char* KEY_ATTR = "key"; +const char* VALUE_ATTR = "value"; +const char* FIRST_TRIANGLE_ID_ATTR = "firstid"; +const char* LAST_TRIANGLE_ID_ATTR = "lastid"; + +const char* OBJECT_TYPE = "object"; +const char* VOLUME_TYPE = "volume"; + +const char* NAME_KEY = "name"; +const char* MODIFIER_KEY = "modifier"; + const unsigned int VALID_OBJECT_TYPES_COUNT = 1; const char* VALID_OBJECT_TYPES[] = { @@ -188,32 +204,63 @@ namespace Slic3r { int object_id; Matrix4x4 matrix; - explicit Component(int object_id); - Component(int object_id, const Matrix4x4& matrix); + explicit Component(int object_id) + : object_id(object_id) + , matrix(Matrix4x4::Identity()) + { + } + + Component(int object_id, const Matrix4x4& matrix) + : object_id(object_id) + , matrix(matrix) + { + } }; typedef std::vector ComponentsList; + struct Geometry + { + std::vector vertices; + std::vector triangles; + + bool empty() + { + return vertices.empty() || triangles.empty(); + } + + void reset() + { + vertices.clear(); + triangles.clear(); + } + }; + struct CurrentObject { - struct Geometry - { - std::vector vertices; - std::vector triangles; - - bool empty(); - void reset(); - }; - int id; Geometry geometry; ModelObject* object; - TriangleMesh mesh; ComponentsList components; - CurrentObject(); + CurrentObject() + { + reset(); + } - void reset(); + void reset() + { + id = -1; + geometry.reset(); + object = nullptr; + components.clear(); + } + }; + + struct CurrentConfig + { + int object_id; + int volume_id; }; struct Instance @@ -221,12 +268,53 @@ namespace Slic3r { ModelInstance* instance; Matrix4x4 matrix; - Instance(ModelInstance* instance, const Matrix4x4& matrix); + Instance(ModelInstance* instance, const Matrix4x4& matrix) + : instance(instance) + , matrix(matrix) + { + } + }; + + struct Metadata + { + std::string key; + std::string value; + + Metadata(const std::string& key, const std::string& value) + : key(key) + , value(value) + { + } + }; + + typedef std::vector MetadataList; + + struct ObjectMetadata + { + struct VolumeMetadata + { + unsigned int first_triangle_id; + unsigned int last_triangle_id; + MetadataList metadata; + + VolumeMetadata(unsigned int first_triangle_id, unsigned int last_triangle_id) + : first_triangle_id(first_triangle_id) + , last_triangle_id(last_triangle_id) + { + } + }; + + typedef std::vector VolumeMetadataList; + + MetadataList metadata; + VolumeMetadataList volumes; }; typedef std::map IdToModelObjectMap; typedef std::map IdToAliasesMap; typedef std::vector InstancesList; + typedef std::map IdToMetadataMap; + typedef std::map IdToGeometryMap; XML_Parser m_xml_parser; Model* m_model; @@ -235,6 +323,9 @@ namespace Slic3r { IdToModelObjectMap m_objects; IdToAliasesMap m_objects_aliases; InstancesList m_instances; + IdToGeometryMap m_geometries; + CurrentConfig m_curr_config; + IdToMetadataMap m_objects_metadata; public: _3MF_Importer(); @@ -248,10 +339,16 @@ namespace Slic3r { bool _load_model_from_file(const std::string& filename, Model& model, PresetBundle& bundle); bool _extract_model_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat); - bool _extract_config_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat, PresetBundle& bundle, const std::string& archive_filename); + bool _extract_print_config_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat, PresetBundle& bundle, const std::string& archive_filename); + bool _extract_model_config_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat, Model& model); - void _handle_start_xml_element(const char* name, const char** attributes); - void _handle_end_xml_element(const char* name); + // handlers to parse the .model file + void _handle_start_model_xml_element(const char* name, const char** attributes); + void _handle_end_model_xml_element(const char* name); + + // handlers to parse the MODEL_CONFIG_FILE file + void _handle_start_config_xml_element(const char* name, const char** attributes); + void _handle_end_config_xml_element(const char* name); bool _handle_start_model(const char** attributes, unsigned int num_attributes); bool _handle_end_model(); @@ -294,53 +391,29 @@ namespace Slic3r { void _apply_transform(ModelObject& object, const Matrix4x4& matrix); void _apply_transform(ModelInstance& instance, const Matrix4x4& matrix); - static void XMLCALL _handle_start_xml_element(void* userData, const char* name, const char** attributes); - static void XMLCALL _handle_end_xml_element(void* userData, const char* name); + bool _handle_start_config(const char** attributes, unsigned int num_attributes); + bool _handle_end_config(); + + bool _handle_start_config_object(const char** attributes, unsigned int num_attributes); + bool _handle_end_config_object(); + + bool _handle_start_config_volume(const char** attributes, unsigned int num_attributes); + bool _handle_end_config_volume(); + + bool _handle_start_config_metadata(const char** attributes, unsigned int num_attributes); + bool _handle_end_config_metadata(); + + bool _generate_volumes(ModelObject& object, const Geometry& geometry, const ObjectMetadata::VolumeMetadataList& volumes); + + // callbacks to parse the .model file + static void XMLCALL _handle_start_model_xml_element(void* userData, const char* name, const char** attributes); + static void XMLCALL _handle_end_model_xml_element(void* userData, const char* name); + + // callbacks to parse the MODEL_CONFIG_FILE file + static void XMLCALL _handle_start_config_xml_element(void* userData, const char* name, const char** attributes); + static void XMLCALL _handle_end_config_xml_element(void* userData, const char* name); }; - _3MF_Importer::Component::Component(int object_id) - : object_id(object_id) - , matrix(Matrix4x4::Identity()) - { - } - - _3MF_Importer::Component::Component(int object_id, const Matrix4x4& matrix) - : object_id(object_id) - , matrix(matrix) - { - } - - bool _3MF_Importer::CurrentObject::Geometry::empty() - { - return vertices.empty() || triangles.empty(); - } - - void _3MF_Importer::CurrentObject::Geometry::reset() - { - vertices.clear(); - triangles.clear(); - } - - _3MF_Importer::CurrentObject::CurrentObject() - { - reset(); - } - - void _3MF_Importer::CurrentObject::reset() - { - id = -1; - geometry.reset(); - object = nullptr; - mesh = TriangleMesh(); - components.clear(); - } - - _3MF_Importer::Instance::Instance(ModelInstance* instance, const Matrix4x4& matrix) - : instance(instance) - , matrix(matrix) - { - } - _3MF_Importer::_3MF_Importer() : m_xml_parser(nullptr) , m_model(nullptr) @@ -361,6 +434,10 @@ namespace Slic3r { m_objects.clear(); m_objects_aliases.clear(); m_instances.clear(); + m_geometries.clear(); + m_curr_config.object_id = -1; + m_curr_config.volume_id = -1; + m_objects_metadata.clear(); clear_errors(); return _load_model_from_file(filename, model, bundle); @@ -413,13 +490,23 @@ namespace Slic3r { return false; } } - else if (boost::algorithm::iequals(name, CONFIG_FILE)) + else if (boost::algorithm::iequals(name, PRINT_CONFIG_FILE)) { - // extract slic3r config file - if (!_extract_config_from_archive(archive, stat, bundle, filename)) + // extract slic3r print config file + if (!_extract_print_config_from_archive(archive, stat, bundle, filename)) { mz_zip_reader_end(&archive); - add_error("Archive does not contain a valid config"); + add_error("Archive does not contain a valid print config"); + return false; + } + } + else if (boost::algorithm::iequals(name, MODEL_CONFIG_FILE)) + { + // extract slic3r model config file + if (!_extract_model_config_from_archive(archive, stat, model)) + { + mz_zip_reader_end(&archive); + add_error("Archive does not contain a valid model config"); return false; } } @@ -427,6 +514,67 @@ namespace Slic3r { } mz_zip_reader_end(&archive); + + for (const IdToModelObjectMap::value_type& object : m_objects) + { + ObjectMetadata::VolumeMetadataList volumes; + ObjectMetadata::VolumeMetadataList* volumes_ptr = nullptr; + + IdToGeometryMap::const_iterator obj_geometry = m_geometries.find(object.first); + if (obj_geometry == m_geometries.end()) + { + add_error("Unable to find object geometry"); + return false; + } + + IdToMetadataMap::iterator obj_metadata = m_objects_metadata.find(object.first); + if (obj_metadata != m_objects_metadata.end()) + { + // config data has been found, this model was saved using slic3r pe + + // apply object's name and config data + for (const Metadata& metadata : obj_metadata->second.metadata) + { + if (metadata.key == "name") + object.second->name = metadata.value; + else + object.second->config.set_deserialize(metadata.key, metadata.value); + } + + // select object's detected volumes + volumes_ptr = &obj_metadata->second.volumes; + } + else + { + // config data not found, this model was not saved using slic3r pe + + // add the entire geometry as the single volume to generate + volumes.emplace_back(0, (int)obj_geometry->second.triangles.size() / 3 - 1); + + // select as volumes + volumes_ptr = &volumes; + } + + if (!_generate_volumes(*object.second, obj_geometry->second, *volumes_ptr)) + return false; + + // apply transformation if the object contains a single instance + if (object.second->instances.size() == 1) + { + for (const Instance& instance : m_instances) + { + if (object.second->instances[0] == instance.instance) + { + _apply_transform(*object.second, instance.matrix); + break; + } + } + } + } + + // fixes the min z of the model if negative + model.adjust_min_z(); + return true; } @@ -448,7 +596,7 @@ namespace Slic3r { } XML_SetUserData(m_xml_parser, (void*)this); - XML_SetElementHandler(m_xml_parser, _3MF_Importer::_handle_start_xml_element, _3MF_Importer::_handle_end_xml_element); + XML_SetElementHandler(m_xml_parser, _3MF_Importer::_handle_start_model_xml_element, _3MF_Importer::_handle_end_model_xml_element); void* parser_buffer = XML_GetBuffer(m_xml_parser, (int)stat.m_uncomp_size); if (parser_buffer == nullptr) @@ -475,7 +623,7 @@ namespace Slic3r { return true; } - bool _3MF_Importer::_extract_config_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat, PresetBundle& bundle, const std::string& archive_filename) + bool _3MF_Importer::_extract_print_config_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat, PresetBundle& bundle, const std::string& archive_filename) { if (stat.m_uncomp_size > 0) { @@ -494,7 +642,52 @@ namespace Slic3r { return true; } - void _3MF_Importer::_handle_start_xml_element(const char* name, const char** attributes) + bool _3MF_Importer::_extract_model_config_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat, Model& model) + { + if (stat.m_uncomp_size == 0) + { + add_error("Found invalid size"); + return false; + } + + _destroy_xml_parser(); + + m_xml_parser = XML_ParserCreate(nullptr); + if (m_xml_parser == nullptr) + { + add_error("Unable to create parser"); + return false; + } + + XML_SetUserData(m_xml_parser, (void*)this); + XML_SetElementHandler(m_xml_parser, _3MF_Importer::_handle_start_config_xml_element, _3MF_Importer::_handle_end_config_xml_element); + + void* parser_buffer = XML_GetBuffer(m_xml_parser, (int)stat.m_uncomp_size); + if (parser_buffer == nullptr) + { + add_error("Unable to create buffer"); + return false; + } + + mz_bool res = mz_zip_reader_extract_file_to_mem(&archive, stat.m_filename, parser_buffer, (size_t)stat.m_uncomp_size, 0); + if (res == 0) + { + add_error("Error while reading config data to buffer"); + return false; + } + + if (!XML_ParseBuffer(m_xml_parser, (int)stat.m_uncomp_size, 1)) + { + char error_buf[1024]; + ::sprintf(error_buf, "Error (%s) while parsing xml file at line %d", XML_ErrorString(XML_GetErrorCode(m_xml_parser)), XML_GetCurrentLineNumber(m_xml_parser)); + add_error(error_buf); + return false; + } + + return true; + } + + void _3MF_Importer::_handle_start_model_xml_element(const char* name, const char** attributes) { if (m_xml_parser == nullptr) return; @@ -531,7 +724,7 @@ namespace Slic3r { _stop_xml_parser(); } - void _3MF_Importer::_handle_end_xml_element(const char* name) + void _3MF_Importer::_handle_end_model_xml_element(const char* name) { if (m_xml_parser == nullptr) return; @@ -567,6 +760,47 @@ namespace Slic3r { _stop_xml_parser(); } + void _3MF_Importer::_handle_start_config_xml_element(const char* name, const char** attributes) + { + if (m_xml_parser == nullptr) + return; + + bool res = true; + unsigned int num_attributes = (unsigned int)XML_GetSpecifiedAttributeCount(m_xml_parser); + + if (::strcmp(CONFIG_TAG, name) == 0) + res = _handle_start_config(attributes, num_attributes); + else if (::strcmp(OBJECT_TAG, name) == 0) + res = _handle_start_config_object(attributes, num_attributes); + else if (::strcmp(VOLUME_TAG, name) == 0) + res = _handle_start_config_volume(attributes, num_attributes); + else if (::strcmp(METADATA_TAG, name) == 0) + res = _handle_start_config_metadata(attributes, num_attributes); + + if (!res) + _stop_xml_parser(); + } + + void _3MF_Importer::_handle_end_config_xml_element(const char* name) + { + if (m_xml_parser == nullptr) + return; + + bool res = true; + + if (::strcmp(CONFIG_TAG, name) == 0) + res = _handle_end_config(); + else if (::strcmp(OBJECT_TAG, name) == 0) + res = _handle_end_config_object(); + else if (::strcmp(VOLUME_TAG, name) == 0) + res = _handle_end_config_volume(); + else if (::strcmp(METADATA_TAG, name) == 0) + res = _handle_end_config_metadata(); + + if (!res) + _stop_xml_parser(); + } + bool _3MF_Importer::_handle_start_model(const char** attributes, unsigned int num_attributes) { m_unit_factor = get_unit_factor(get_attribute_value_string(attributes, num_attributes, UNIT_ATTR)); @@ -588,18 +822,11 @@ namespace Slic3r { if (instance.instance != nullptr) { ModelObject* object = instance.instance->get_object(); - if (object != nullptr) + if ((object != nullptr) && (object->instances.size() > 1)) { - if (object->instances.size() == 1) - { - // single instance -> apply the matrix to object geometry - _apply_transform(*object, instance.matrix); - } - else - { - // multiple instances -> apply the matrix to the instance - _apply_transform(*instance.instance, instance.matrix); - } + // multiple instances -> apply the matrix to the instance + // (for single instance the transformation can be applied only after the volumes have been generated) + _apply_transform(*instance.instance, instance.matrix); } } } @@ -669,30 +896,8 @@ namespace Slic3r { } else { - // geometry defined, add it to the object - - ModelVolume* volume = m_curr_object.object->add_volume(m_curr_object.mesh); - if (volume == nullptr) - { - add_error("Unable to add volume"); - return false; - } - - stl_file& stl = volume->mesh.stl; - stl.stats.type = inmemory; - stl.stats.number_of_facets = (uint32_t)m_curr_object.geometry.triangles.size() / 3; - stl.stats.original_num_facets = (int)stl.stats.number_of_facets; - stl_allocate(&stl); - for (size_t i = 0; i < m_curr_object.geometry.triangles.size(); /*nothing*/) - { - stl_facet& facet = stl.facet_start[i / 3]; - for (unsigned int v = 0; v < 3; ++v) - { - ::memcpy((void*)&facet.vertex[v].x, (const void*)&m_curr_object.geometry.vertices[m_curr_object.geometry.triangles[i++] * 3], 3 * sizeof(float)); - } - } - stl_get_size(&stl); - volume->mesh.repair(); + // geometry defined, store it for later use + m_geometries.insert(IdToGeometryMap::value_type(m_curr_object.id, std::move(m_curr_object.geometry))); // stores the object for later use if (m_objects.find(m_curr_object.id) == m_objects.end()) @@ -1014,18 +1219,181 @@ namespace Slic3r { instance.rotation = angle_z; } - void XMLCALL _3MF_Importer::_handle_start_xml_element(void* userData, const char* name, const char** attributes) + bool _3MF_Importer::_handle_start_config(const char** attributes, unsigned int num_attributes) { - _3MF_Importer* importer = (_3MF_Importer*)userData; - if (importer != nullptr) - importer->_handle_start_xml_element(name, attributes); + // do nothing + return true; } - void XMLCALL _3MF_Importer::_handle_end_xml_element(void* userData, const char* name) + bool _3MF_Importer::_handle_end_config() + { + // do nothing + return true; + } + + bool _3MF_Importer::_handle_start_config_object(const char** attributes, unsigned int num_attributes) + { + int object_id = get_attribute_value_int(attributes, num_attributes, ID_ATTR); + IdToMetadataMap::iterator object_item = m_objects_metadata.find(object_id); + if (object_item != m_objects_metadata.end()) + { + add_error("Found duplicated object id"); + return false; + } + + m_objects_metadata.insert(IdToMetadataMap::value_type(object_id, ObjectMetadata())); + m_curr_config.object_id = object_id; + return true; + } + + bool _3MF_Importer::_handle_end_config_object() + { + // do nothing + return true; + } + + bool _3MF_Importer::_handle_start_config_volume(const char** attributes, unsigned int num_attributes) + { + IdToMetadataMap::iterator object = m_objects_metadata.find(m_curr_config.object_id); + if (object == m_objects_metadata.end()) + { + add_error("Cannot assign volume to a valid object"); + return false; + } + + m_curr_config.volume_id = object->second.volumes.size(); + + unsigned int first_triangle_id = (unsigned int)get_attribute_value_int(attributes, num_attributes, FIRST_TRIANGLE_ID_ATTR); + unsigned int last_triangle_id = (unsigned int)get_attribute_value_int(attributes, num_attributes, LAST_TRIANGLE_ID_ATTR); + + object->second.volumes.emplace_back(first_triangle_id, last_triangle_id); + return true; + } + + bool _3MF_Importer::_handle_end_config_volume() + { + // do nothing + return true; + } + + bool _3MF_Importer::_handle_start_config_metadata(const char** attributes, unsigned int num_attributes) + { + IdToMetadataMap::iterator object = m_objects_metadata.find(m_curr_config.object_id); + if (object == m_objects_metadata.end()) + { + add_error("Cannot assign metadata to valid object id"); + return false; + } + + std::string type = get_attribute_value_string(attributes, num_attributes, TYPE_ATTR); + std::string key = get_attribute_value_string(attributes, num_attributes, KEY_ATTR); + std::string value = get_attribute_value_string(attributes, num_attributes, VALUE_ATTR); + + if (type == OBJECT_TYPE) + object->second.metadata.emplace_back(key, value); + else if (type == VOLUME_TYPE) + { + if (m_curr_config.volume_id < object->second.volumes.size()) + object->second.volumes[m_curr_config.volume_id].metadata.emplace_back(key, value); + } + else + { + add_error("Found invalid metadata type"); + return false; + } + + return true; + } + + bool _3MF_Importer::_handle_end_config_metadata() + { + // do nothing + return true; + } + + bool _3MF_Importer::_generate_volumes(ModelObject& object, const Geometry& geometry, const ObjectMetadata::VolumeMetadataList& volumes) + { + if (!object.volumes.empty()) + { + add_error("Found invalid volumes count"); + return false; + } + + unsigned int geo_tri_count = geometry.triangles.size() / 3; + + for (const ObjectMetadata::VolumeMetadata& volume_data : volumes) + { + if ((geo_tri_count <= volume_data.first_triangle_id) || (geo_tri_count <= volume_data.last_triangle_id) || (volume_data.last_triangle_id < volume_data.first_triangle_id)) + { + add_error("Found invalid triangle id"); + return false; + } + + // splits volume out of imported geometry + unsigned int triangles_count = volume_data.last_triangle_id - volume_data.first_triangle_id + 1; + ModelVolume* volume = object.add_volume(TriangleMesh()); + stl_file& stl = volume->mesh.stl; + stl.stats.type = inmemory; + stl.stats.number_of_facets = (uint32_t)triangles_count; + stl.stats.original_num_facets = (int)stl.stats.number_of_facets; + stl_allocate(&stl); + + unsigned int src_start_id = volume_data.first_triangle_id * 3; + + for (size_t i = 0; i < triangles_count; ++i) + { + unsigned int ii = i * 3; + stl_facet& facet = stl.facet_start[i]; + for (unsigned int v = 0; v < 3; ++v) + { + ::memcpy((void*)&facet.vertex[v].x, (const void*)&geometry.vertices[geometry.triangles[src_start_id + ii + v] * 3], 3 * sizeof(float)); + } + } + + stl_get_size(&stl); + volume->mesh.repair(); + + // apply volume's name and config data + for (const Metadata& metadata : volume_data.metadata) + { + if (metadata.key == NAME_KEY) + volume->name = metadata.value; + else if ((metadata.key == MODIFIER_KEY) && (metadata.value == "1")) + volume->modifier = true; + else + volume->config.set_deserialize(metadata.key, metadata.value); + } + } + + return true; + } + + void XMLCALL _3MF_Importer::_handle_start_model_xml_element(void* userData, const char* name, const char** attributes) { _3MF_Importer* importer = (_3MF_Importer*)userData; if (importer != nullptr) - importer->_handle_end_xml_element(name); + importer->_handle_start_model_xml_element(name, attributes); + } + + void XMLCALL _3MF_Importer::_handle_end_model_xml_element(void* userData, const char* name) + { + _3MF_Importer* importer = (_3MF_Importer*)userData; + if (importer != nullptr) + importer->_handle_end_model_xml_element(name); + } + + void XMLCALL _3MF_Importer::_handle_start_config_xml_element(void* userData, const char* name, const char** attributes) + { + _3MF_Importer* importer = (_3MF_Importer*)userData; + if (importer != nullptr) + importer->_handle_start_config_xml_element(name, attributes); + } + + void XMLCALL _3MF_Importer::_handle_end_config_xml_element(void* userData, const char* name) + { + _3MF_Importer* importer = (_3MF_Importer*)userData; + if (importer != nullptr) + importer->_handle_end_config_xml_element(name); } class _3MF_Exporter : public _3MF_Base @@ -1035,10 +1403,44 @@ namespace Slic3r { unsigned int id; Matrix4x4 matrix; - BuildItem(unsigned int id, const Matrix4x4& matrix); + BuildItem(unsigned int id, const Matrix4x4& matrix) + : id(id) + , matrix(matrix) + { + } + }; + + struct Offsets + { + unsigned int first_vertex_id; + unsigned int first_triangle_id; + unsigned int last_triangle_id; + + Offsets(unsigned int first_vertex_id) + : first_vertex_id(first_vertex_id) + , first_triangle_id(-1) + , last_triangle_id(-1) + { + } + }; + + typedef std::map VolumeToOffsetsMap; + + struct ObjectData + { + ModelObject* object; + VolumeToOffsetsMap volumes_offsets; + + explicit ObjectData(ModelObject* object) + : object(object) + { + } }; typedef std::vector BuildItemsList; + typedef std::map IdToObjectDataMap; + + IdToObjectDataMap m_objects_data; public: bool save_model_to_file(const std::string& filename, Model& model, const Print& print); @@ -1048,18 +1450,13 @@ namespace Slic3r { bool _add_content_types_file_to_archive(mz_zip_archive& archive); bool _add_relationships_file_to_archive(mz_zip_archive& archive); bool _add_model_file_to_archive(mz_zip_archive& archive, Model& model); - bool _add_object_to_model_stream(std::stringstream& stream, unsigned int& object_id, ModelObject& object, BuildItemsList& build_items); - bool _add_mesh_to_object_stream(std::stringstream& stream, ModelObject& object); + bool _add_object_to_model_stream(std::stringstream& stream, unsigned int& object_id, ModelObject& object, BuildItemsList& build_items, VolumeToOffsetsMap& volumes_offsets); + bool _add_mesh_to_object_stream(std::stringstream& stream, ModelObject& object, VolumeToOffsetsMap& volumes_offsets); bool _add_build_to_model_stream(std::stringstream& stream, const BuildItemsList& build_items); - bool _add_config_file_to_archive(mz_zip_archive& archive, const Print& print); + bool _add_print_config_file_to_archive(mz_zip_archive& archive, const Print& print); + bool _add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model); }; - _3MF_Exporter::BuildItem::BuildItem(unsigned int id, const Matrix4x4& matrix) - : id(id) - , matrix(matrix) - { - } - bool _3MF_Exporter::save_model_to_file(const std::string& filename, Model& model, const Print& print) { clear_errors(); @@ -1071,6 +1468,8 @@ namespace Slic3r { mz_zip_archive archive; mz_zip_zero_struct(&archive); + m_objects_data.clear(); + mz_bool res = mz_zip_writer_init_file(&archive, filename.c_str(), 0); if (res == 0) { @@ -1102,8 +1501,16 @@ namespace Slic3r { return false; } - // adds slic3r config file - if (!_add_config_file_to_archive(archive, print)) + // adds slic3r print config file + if (!_add_print_config_file_to_archive(archive, print)) + { + mz_zip_writer_end(&archive); + boost::filesystem::remove(filename); + return false; + } + + // adds slic3r model config file + if (!_add_model_config_file_to_archive(archive, model)) { mz_zip_writer_end(&archive); boost::filesystem::remove(filename); @@ -1166,8 +1573,8 @@ namespace Slic3r { { std::stringstream stream; stream << "\n"; - stream << "\n"; - stream << " \n"; + stream << "<" << MODEL_TAG << " unit=\"millimeter\" xml:lang=\"en-US\" xmlns=\"http://schemas.microsoft.com/3dmanufacturing/core/2015/02\">\n"; + stream << " <" << RESOURCES_TAG << ">\n"; BuildItemsList build_items; @@ -1177,15 +1584,17 @@ namespace Slic3r { if (obj == nullptr) continue; - if (!_add_object_to_model_stream(stream, object_id, *obj, build_items)) + unsigned int curr_id = object_id; + IdToObjectDataMap::iterator object_it = m_objects_data.insert(IdToObjectDataMap::value_type(curr_id, ObjectData(obj))).first; + + if (!_add_object_to_model_stream(stream, object_id, *obj, build_items, object_it->second.volumes_offsets)) { add_error("Unable to add object to archive"); return false; } } - - stream << " \n"; + stream << " \n"; if (!_add_build_to_model_stream(stream, build_items)) { @@ -1193,7 +1602,7 @@ namespace Slic3r { return false; } - stream << "\n"; + stream << "\n"; std::string out = stream.str(); @@ -1206,7 +1615,7 @@ namespace Slic3r { return true; } - bool _3MF_Exporter::_add_object_to_model_stream(std::stringstream& stream, unsigned int& object_id, ModelObject& object, BuildItemsList& build_items) + bool _3MF_Exporter::_add_object_to_model_stream(std::stringstream& stream, unsigned int& object_id, ModelObject& object, BuildItemsList& build_items, VolumeToOffsetsMap& volumes_offsets) { unsigned int id = 0; for (const ModelInstance* instance : object.instances) @@ -1215,11 +1624,11 @@ namespace Slic3r { continue; unsigned int instance_id = object_id + id; - stream << " \n"; + stream << " <" << OBJECT_TAG << " id=\"" << instance_id << "\" type=\"model\">\n"; if (id == 0) { - if (!_add_mesh_to_object_stream(stream, object)) + if (!_add_mesh_to_object_stream(stream, object, volumes_offsets)) { add_error("Unable to add mesh to archive"); return false; @@ -1227,9 +1636,9 @@ namespace Slic3r { } else { - stream << " \n"; - stream << " \n"; - stream << " \n"; + stream << " <" << COMPONENTS_TAG << ">\n"; + stream << " <" << COMPONENT_TAG << " objectid=\"" << object_id << "\" />\n"; + stream << " \n"; } Eigen::Affine3f transform; @@ -1238,7 +1647,7 @@ namespace Slic3r { * Eigen::Scaling((float)instance->scaling_factor); build_items.emplace_back(instance_id, transform.matrix()); - stream << " \n"; + stream << " \n"; ++id; } @@ -1247,20 +1656,18 @@ namespace Slic3r { return true; } - bool _3MF_Exporter::_add_mesh_to_object_stream(std::stringstream& stream, ModelObject& object) + bool _3MF_Exporter::_add_mesh_to_object_stream(std::stringstream& stream, ModelObject& object, VolumeToOffsetsMap& volumes_offsets) { - stream << " \n"; - stream << " \n"; + stream << " <" << MESH_TAG << ">\n"; + stream << " <" << VERTICES_TAG << ">\n"; - typedef std::map VolumeToOffsetMap; - VolumeToOffsetMap volumes_offset; unsigned int vertices_count = 0; for (ModelVolume* volume : object.volumes) { if (volume == nullptr) continue; - volumes_offset.insert(VolumeToOffsetMap::value_type(volume, vertices_count)); + VolumeToOffsetsMap::iterator volume_it = volumes_offsets.insert(VolumeToOffsetsMap::value_type(volume, Offsets(vertices_count))).first; if (!volume->mesh.repaired) volume->mesh.repair(); @@ -1279,7 +1686,7 @@ namespace Slic3r { for (int i = 0; i < stl.stats.shared_vertices; ++i) { - stream << " \n"; - stream << " \n"; + stream << " \n"; + stream << " <" << TRIANGLES_TAG << ">\n"; + unsigned int triangles_count = 0; for (ModelVolume* volume : object.volumes) { if (volume == nullptr) continue; - VolumeToOffsetMap::const_iterator offset_it = volumes_offset.find(volume); - assert(offset_it != volumes_offset.end()); + VolumeToOffsetsMap::iterator volume_it = volumes_offsets.find(volume); + assert(volume_it != volumes_offsets.end()); stl_file& stl = volume->mesh.stl; + // updates triangle offsets + volume_it->second.first_triangle_id = triangles_count; + triangles_count += stl.stats.number_of_facets; + volume_it->second.last_triangle_id = triangles_count - 1; + for (uint32_t i = 0; i < stl.stats.number_of_facets; ++i) { - stream << " second << "\" "; + stream << "v" << j + 1 << "=\"" << stl.v_indices[i].vertex[j] + volume_it->second.first_vertex_id << "\" "; } stream << "/>\n"; } - } - stream << " \n"; - stream << " \n"; + stream << " \n"; + stream << " \n"; return true; } @@ -1326,11 +1738,11 @@ namespace Slic3r { return false; } - stream << " \n"; + stream << " <" << BUILD_TAG << ">\n"; for (const BuildItem& item : build_items) { - stream << " \n"; } - stream << " \n"; + stream << " \n"; return true; } - bool _3MF_Exporter::_add_config_file_to_archive(mz_zip_archive& archive, const Print& print) + bool _3MF_Exporter::_add_print_config_file_to_archive(mz_zip_archive& archive, const Print& print) { char buffer[1024]; sprintf(buffer, "; %s\n\n", header_slic3r_generated().c_str()); @@ -1356,9 +1768,81 @@ namespace Slic3r { GCode::append_full_config(print, out); - if (!mz_zip_writer_add_mem(&archive, CONFIG_FILE.c_str(), (const void*)out.data(), out.length(), MZ_DEFAULT_COMPRESSION)) + if (!mz_zip_writer_add_mem(&archive, PRINT_CONFIG_FILE.c_str(), (const void*)out.data(), out.length(), MZ_DEFAULT_COMPRESSION)) { - add_error("Unable to add config file to archive"); + add_error("Unable to add print config file to archive"); + return false; + } + + return true; + } + + bool _3MF_Exporter::_add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model) + { + std::stringstream stream; + stream << "\n"; + stream << "<" << CONFIG_TAG << ">\n"; + + for (const IdToObjectDataMap::value_type& obj_metadata : m_objects_data) + { + const ModelObject* obj = obj_metadata.second.object; + if (obj != nullptr) + { + stream << " <" << OBJECT_TAG << " id=\"" << obj_metadata.first << "\">\n"; + + // stores object's name + if (!obj->name.empty()) + stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << OBJECT_TYPE << "\" " << KEY_ATTR << "=\"name\" " << VALUE_ATTR << "=\"" << obj->name << "\"/>\n"; + + // stores object's config data + for (const std::string& key : obj->config.keys()) + { + stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << OBJECT_TYPE << "\" " << KEY_ATTR << "=\"" << key << "\" " << VALUE_ATTR << "=\"" << obj->config.serialize(key) << "\"/>\n"; + } + + for (const ModelVolume* volume : obj_metadata.second.object->volumes) + { + if (volume != nullptr) + { + const VolumeToOffsetsMap& offsets = obj_metadata.second.volumes_offsets; + VolumeToOffsetsMap::const_iterator it = offsets.find(volume); + if (it != offsets.end()) + { + // stores volume's offsets + stream << " <" << VOLUME_TAG << " "; + stream << FIRST_TRIANGLE_ID_ATTR << "=\"" << it->second.first_triangle_id << "\" "; + stream << LAST_TRIANGLE_ID_ATTR << "=\"" << it->second.last_triangle_id << "\">\n"; + + // stores volume's name + if (!volume->name.empty()) + stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << VOLUME_TYPE << "\" " << KEY_ATTR << "=\"" << NAME_KEY << "\" " << VALUE_ATTR << "=\"" << volume->name << "\"/>\n"; + + // stores volume's modifier field + if (volume->modifier) + stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << VOLUME_TYPE << "\" " << KEY_ATTR << "=\"" << MODIFIER_KEY << "\" " << VALUE_ATTR << "=\"1\"/>\n"; + + // stores volume's config data + for (const std::string& key : volume->config.keys()) + { + stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << VOLUME_TYPE << "\" " << KEY_ATTR << "=\"" << key << "\" " << VALUE_ATTR << "=\"" << volume->config.serialize(key) << "\"/>\n"; + } + + stream << " \n"; + } + } + } + + stream << " \n"; + } + } + + stream << "\n"; + + std::string out = stream.str(); + + if (!mz_zip_writer_add_mem(&archive, MODEL_CONFIG_FILE.c_str(), (const void*)out.data(), out.length(), MZ_DEFAULT_COMPRESSION)) + { + add_error("Unable to add model config file to archive"); return false; } @@ -1392,5 +1876,4 @@ namespace Slic3r { return res; } - } // namespace Slic3r diff --git a/xs/src/libslic3r/GCode/CoolingBuffer.cpp b/xs/src/libslic3r/GCode/CoolingBuffer.cpp index bf56f449c..cd2baeffb 100644 --- a/xs/src/libslic3r/GCode/CoolingBuffer.cpp +++ b/xs/src/libslic3r/GCode/CoolingBuffer.cpp @@ -107,9 +107,11 @@ std::string CoolingBuffer::process_layer(const std::string &gcode, size_t layer_ TYPE_G1 = 1 << 5, TYPE_ADJUSTABLE = 1 << 6, TYPE_EXTERNAL_PERIMETER = 1 << 7, - TYPE_WIPE = 1 << 8, - TYPE_G4 = 1 << 9, - TYPE_G92 = 1 << 10, + // The line sets a feedrate. + TYPE_HAS_F = 1 << 8, + TYPE_WIPE = 1 << 9, + TYPE_G4 = 1 << 10, + TYPE_G92 = 1 << 11, }; Line(unsigned int type, size_t line_start, size_t line_end) : @@ -187,9 +189,13 @@ std::string CoolingBuffer::process_layer(const std::string &gcode, size_t layer_ (*c == extrusion_axis) ? 3 : (*c == 'F') ? 4 : size_t(-1); if (axis != size_t(-1)) { new_pos[axis] = float(atof(++c)); - if (axis == 4) + if (axis == 4) { // Convert mm/min to mm/sec. new_pos[4] /= 60.f; + if ((line.type & Adjustment::Line::TYPE_G92) == 0) + // This is G0 or G1 line and it sets the feedrate. This mark is used for reducing the duplicate F calls. + line.type |= Adjustment::Line::TYPE_HAS_F; + } } // Skip this word. for (; *c != ' ' && *c != '\t' && *c != 0; ++ c); @@ -227,6 +233,8 @@ std::string CoolingBuffer::process_layer(const std::string &gcode, size_t layer_ if ((line.type & Adjustment::Line::TYPE_ADJUSTABLE) || active_speed_modifier != size_t(-1)) line.time_max = (min_print_speed == 0.f) ? FLT_MAX : std::max(line.time, line.length / min_print_speed); if (active_speed_modifier < adjustment->lines.size() && (line.type & Adjustment::Line::TYPE_G1)) { + // Inside the ";_EXTRUDE_SET_SPEED" blocks, there must not be a G1 Fxx entry. + assert((line.type & Adjustment::Line::TYPE_HAS_F) == 0); Adjustment::Line &sm = adjustment->lines[active_speed_modifier]; sm.length += line.length; sm.time += line.time; @@ -415,17 +423,20 @@ std::string CoolingBuffer::process_layer(const std::string &gcode, size_t layer_ }; change_extruder_set_fan(); - size_t pos = 0; + const char *pos = gcode.c_str(); + int current_feedrate = 0; for (const Adjustment::Line *line : lines) { - if (line->line_start > pos) - new_gcode.append(gcode.c_str() + pos, line->line_start - pos); + const char *line_start = gcode.c_str() + line->line_start; + const char *line_end = gcode.c_str() + line->line_end; + if (line_start > pos) + new_gcode.append(pos, line_start - pos); if (line->type & Adjustment::Line::TYPE_SET_TOOL) { - unsigned int new_extruder = (unsigned int)atoi(gcode.c_str() + line->line_start + toolchange_prefix.size()); + unsigned int new_extruder = (unsigned int)atoi(line_start + toolchange_prefix.size()); if (new_extruder != m_current_extruder) { m_current_extruder = new_extruder; change_extruder_set_fan(); } - new_gcode.append(gcode.c_str() + line->line_start, line->line_end - line->line_start); + new_gcode.append(line_start, line_end - line_start); } else if (line->type & Adjustment::Line::TYPE_BRIDGE_FAN_START) { if (bridge_fan_control) new_gcode += m_gcodegen.writer().set_fan(bridge_fan_speed, true); @@ -434,40 +445,80 @@ std::string CoolingBuffer::process_layer(const std::string &gcode, size_t layer_ new_gcode += m_gcodegen.writer().set_fan(fan_speed, true); } else if (line->type & Adjustment::Line::TYPE_EXTRUDE_END) { // Just remove this comment. - } else if (line->type & (Adjustment::Line::TYPE_ADJUSTABLE | Adjustment::Line::TYPE_EXTERNAL_PERIMETER | Adjustment::Line::TYPE_WIPE)) { - // Start of the comment. The line type indicates there must be some comment present. - const char *end = strchr(gcode.c_str() + line->line_start, ';'); + } else if (line->type & (Adjustment::Line::TYPE_ADJUSTABLE | Adjustment::Line::TYPE_EXTERNAL_PERIMETER | Adjustment::Line::TYPE_WIPE | Adjustment::Line::TYPE_HAS_F)) { + // Find the start of a comment, or roll to the end of line. + const char *end = line_start; + for (; end < line_end && *end != ';'; ++ end); + // Find the 'F' word. + const char *fpos = strstr(line_start + 2, " F") + 2; + int new_feedrate = current_feedrate; + bool modify = false; + assert(fpos != nullptr); if (line->slowdown) { - // Replace the feedrate. - const char *pos = strstr(gcode.c_str() + line->line_start + 2, " F") + 2; - new_gcode.append(gcode.c_str() + line->line_start, pos - gcode.c_str() - line->line_start); - char buf[64]; - sprintf(buf, "%d", int(floor(60. * (line->length / line->time) + 0.5))); - new_gcode += buf; - // Skip the non-whitespaces up to the comment. - for (; *pos != ' ' && *pos != ';'; ++ pos); - // Append the rest of the line without the comment. - if (pos < end) - new_gcode.append(pos, end - pos); + modify = true; + new_feedrate = int(floor(60. * (line->length / line->time) + 0.5)); } else { - // Append the line without the comment. - new_gcode.append(gcode.c_str() + line->line_start, end - gcode.c_str() - line->line_start); + new_feedrate = atoi(fpos); + if (new_feedrate != current_feedrate) { + // Append the line without the comment. + new_gcode.append(line_start, end - line_start); + current_feedrate = new_feedrate; + } else if ((line->type & (Adjustment::Line::TYPE_ADJUSTABLE | Adjustment::Line::TYPE_EXTERNAL_PERIMETER | Adjustment::Line::TYPE_WIPE)) || line->length == 0.) { + // Feedrate does not change and this line does not move the print head. Skip the complete G-code line including the G-code comment. + end = line_end; + } else { + // Remove the feedrate from the G0/G1 line. + modify = true; + } + } + if (modify) { + if (new_feedrate != current_feedrate) { + // Replace the feedrate. + new_gcode.append(line_start, fpos - line_start); + current_feedrate = new_feedrate; + char buf[64]; + sprintf(buf, "%d", int(current_feedrate)); + new_gcode += buf; + } else { + // Remove the feedrate word. + const char *f = fpos; + // Roll the pointer before the 'F' word. + for (f -= 2; f > line_start && (*f == ' ' || *f == '\t'); -- f); + // Append up to the F word, without the trailing whitespace. + new_gcode.append(line_start, f - line_start + 1); + } + // Skip the non-whitespaces of the F parameter up the comment or end of line. + for (; fpos != end && *fpos != ' ' && *fpos != ';' && *fpos != '\n'; ++fpos); + // Append the rest of the line without the comment. + if (fpos < end) + new_gcode.append(fpos, end - fpos); + // There should never be an empty G1 statement emited by the filter. Such lines should be removed completely. + assert(new_gcode.size() < 4 || new_gcode.substr(new_gcode.size() - 4) != "G1 \n"); + } + // Process the rest of the line. + if (end < line_end) { + if (line->type & (Adjustment::Line::TYPE_ADJUSTABLE | Adjustment::Line::TYPE_EXTERNAL_PERIMETER | Adjustment::Line::TYPE_WIPE)) { + // Process comments, remove ";_EXTRUDE_SET_SPEED", ";_EXTERNAL_PERIMETER", ";_WIPE" + std::string comment(end, line_end); + boost::replace_all(comment, ";_EXTRUDE_SET_SPEED", ""); + if (line->type & Adjustment::Line::TYPE_EXTERNAL_PERIMETER) + boost::replace_all(comment, ";_EXTERNAL_PERIMETER", ""); + if (line->type & Adjustment::Line::TYPE_WIPE) + boost::replace_all(comment, ";_WIPE", ""); + new_gcode += comment; + } else { + // Just attach the rest of the source line. + new_gcode.append(end, line_end - end); + } } - // Process the comments, remove ";_EXTRUDE_SET_SPEED", ";_EXTERNAL_PERIMETER", ";_WIPE" - std::string comment(end, gcode.c_str() + line->line_end); - boost::replace_all(comment, ";_EXTRUDE_SET_SPEED", ""); - if (line->type & Adjustment::Line::TYPE_EXTERNAL_PERIMETER) - boost::replace_all(comment, ";_EXTERNAL_PERIMETER", ""); - if (line->type & Adjustment::Line::TYPE_WIPE) - boost::replace_all(comment, ";_WIPE", ""); - new_gcode += comment; } else { - new_gcode.append(gcode.c_str() + line->line_start, line->line_end - line->line_start); + new_gcode.append(line_start, line_end - line_start); } - pos = line->line_end; + pos = line_end; } - if (pos < gcode.size()) - new_gcode.append(gcode.c_str() + pos, gcode.size() - pos); + const char *gcode_end = gcode.c_str() + gcode.size(); + if (pos < gcode_end) + new_gcode.append(pos, gcode_end - pos); return new_gcode; } diff --git a/xs/src/libslic3r/Model.cpp b/xs/src/libslic3r/Model.cpp index 1de99bbf8..6f1ce1ce5 100644 --- a/xs/src/libslic3r/Model.cpp +++ b/xs/src/libslic3r/Model.cpp @@ -222,7 +222,7 @@ bool Model::add_default_instances() } // this returns the bounding box of the *transformed* instances -BoundingBoxf3 Model::bounding_box() +BoundingBoxf3 Model::bounding_box() const { BoundingBoxf3 bb; for (ModelObject *o : this->objects) @@ -230,6 +230,14 @@ BoundingBoxf3 Model::bounding_box() return bb; } +BoundingBoxf3 Model::transformed_bounding_box() const +{ + BoundingBoxf3 bb; + for (const ModelObject* obj : this->objects) + bb.merge(obj->tight_bounding_box(false)); + return bb; +} + void Model::center_instances_around_point(const Pointf &point) { // BoundingBoxf3 bb = this->bounding_box(); @@ -409,6 +417,51 @@ void Model::convert_multipart_object() this->objects.push_back(object); } +void Model::adjust_min_z() +{ + if (objects.empty()) + return; + + if (bounding_box().min.z < 0.0) + { + for (ModelObject* obj : objects) + { + if (obj != nullptr) + { + coordf_t obj_min_z = obj->bounding_box().min.z; + if (obj_min_z < 0.0) + obj->translate(0.0, 0.0, -obj_min_z); + } + } + } +} + +bool Model::fits_print_volume(const DynamicPrintConfig* config) const +{ + if (config == nullptr) + return false; + + if (objects.empty()) + return true; + + const ConfigOptionPoints* opt = dynamic_cast(config->option("bed_shape")); + if (opt == nullptr) + return false; + + BoundingBox bed_box_2D = get_extents(Polygon::new_scale(opt->values)); + BoundingBoxf3 print_volume(Pointf3(unscale(bed_box_2D.min.x), unscale(bed_box_2D.min.y), 0.0), Pointf3(unscale(bed_box_2D.max.x), unscale(bed_box_2D.max.y), config->opt_float("max_print_height"))); + return print_volume.contains(transformed_bounding_box()); +} + +bool Model::fits_print_volume(const FullPrintConfig &config) const +{ + if (objects.empty()) + return true; + BoundingBox bed_box_2D = get_extents(Polygon::new_scale(config.bed_shape.values)); + BoundingBoxf3 print_volume(Pointf3(unscale(bed_box_2D.min.x), unscale(bed_box_2D.min.y), 0.0), Pointf3(unscale(bed_box_2D.max.x), unscale(bed_box_2D.max.y), config.max_print_height)); + return print_volume.contains(transformed_bounding_box()); +} + ModelObject::ModelObject(Model *model, const ModelObject &other, bool copy_volumes) : name(other.name), input_file(other.input_file), @@ -539,7 +592,7 @@ void ModelObject::clear_instances() // Returns the bounding box of the transformed instances. // This bounding box is approximate and not snug. -BoundingBoxf3 ModelObject::bounding_box() +const BoundingBoxf3& ModelObject::bounding_box() { if (! m_bounding_box_valid) { BoundingBoxf3 raw_bbox; @@ -555,6 +608,54 @@ BoundingBoxf3 ModelObject::bounding_box() return m_bounding_box; } +BoundingBoxf3 ModelObject::tight_bounding_box(bool include_modifiers) const +{ + BoundingBoxf3 bb; + + for (const ModelVolume* vol : this->volumes) + { + if (include_modifiers || !vol->modifier) + { + for (const ModelInstance* inst : this->instances) + { + double c = cos(inst->rotation); + double s = sin(inst->rotation); + + for (int f = 0; f < vol->mesh.stl.stats.number_of_facets; ++f) + { + const stl_facet& facet = vol->mesh.stl.facet_start[f]; + + for (int i = 0; i < 3; ++i) + { + // original point + const stl_vertex& v = facet.vertex[i]; + Pointf3 p((double)v.x, (double)v.y, (double)v.z); + + // scale + p.x *= inst->scaling_factor; + p.y *= inst->scaling_factor; + p.z *= inst->scaling_factor; + + // rotate Z + double x = p.x; + double y = p.y; + p.x = c * x - s * y; + p.y = s * x + c * y; + + // translate + p.x += inst->offset.x; + p.y += inst->offset.y; + + bb.merge(p); + } + } + } + } + } + + return bb; +} + // A mesh containing all transformed instances of this object. TriangleMesh ModelObject::mesh() const { @@ -671,7 +772,7 @@ void ModelObject::transform(const float* matrix3x4) v->mesh.transform(matrix3x4); } - origin_translation = Pointf3(0.0f, 0.0f, 0.0f); + origin_translation = Pointf3(0.0, 0.0, 0.0); invalidate_bounding_box(); } diff --git a/xs/src/libslic3r/Model.hpp b/xs/src/libslic3r/Model.hpp index cf9bfd85a..bf7f60e36 100644 --- a/xs/src/libslic3r/Model.hpp +++ b/xs/src/libslic3r/Model.hpp @@ -102,8 +102,12 @@ public: // Returns the bounding box of the transformed instances. // This bounding box is approximate and not snug. - BoundingBoxf3 bounding_box(); + // This bounding box is being cached. + const BoundingBoxf3& bounding_box(); void invalidate_bounding_box() { m_bounding_box_valid = false; } + // Returns a snug bounding box of the transformed instances. + // This bounding box is not being cached. + BoundingBoxf3 tight_bounding_box(bool include_modifiers) const; // A mesh containing all transformed instances of this object. TriangleMesh mesh() const; @@ -260,7 +264,10 @@ public: void delete_material(t_model_material_id material_id); void clear_materials(); bool add_default_instances(); - BoundingBoxf3 bounding_box(); + // Returns approximate axis aligned bounding box of this model + BoundingBoxf3 bounding_box() const; + // Returns tight axis aligned bounding box of this model + BoundingBoxf3 transformed_bounding_box() const; void center_instances_around_point(const Pointf &point); void translate(coordf_t x, coordf_t y, coordf_t z) { for (ModelObject *o : this->objects) o->translate(x, y, z); } TriangleMesh mesh() const; @@ -273,6 +280,13 @@ public: bool looks_like_multipart_object() const; void convert_multipart_object(); + // Ensures that the min z of the model is not negative + void adjust_min_z(); + + // Returs true if this model is contained into the print volume defined inside the given config + bool fits_print_volume(const DynamicPrintConfig* config) const; + bool fits_print_volume(const FullPrintConfig &config) const; + void print_info() const { for (const ModelObject *o : this->objects) o->print_info(); } }; diff --git a/xs/src/libslic3r/Print.cpp b/xs/src/libslic3r/Print.cpp index c689929c6..a3f5e231f 100644 --- a/xs/src/libslic3r/Print.cpp +++ b/xs/src/libslic3r/Print.cpp @@ -120,6 +120,7 @@ bool Print::invalidate_state_by_config_options(const std::vectorobjects) { + if (! print_volume.contains(po->model_object()->tight_bounding_box(false))) + return "Some objects are outside of the print volume."; + } + if (this->config.complete_objects) { // Check horizontal clearance. { diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index 2b95ffa84..d7ee1e591 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -803,6 +803,13 @@ PrintConfigDef::PrintConfigDef() def->min = 0; def->default_value = new ConfigOptionFloats { 0. }; + def = this->add("max_print_height", coFloat); + def->label = L("Max print height"); + def->tooltip = L("Set this to the maximum height that can be reached by your extruder while printing."); + def->sidetext = L("mm"); + def->cli = "max-print-height=f"; + def->default_value = new ConfigOptionFloat(200.0); + def = this->add("max_print_speed", coFloat); def->label = L("Max print speed"); def->tooltip = L("When setting other speed settings to 0 Slic3r will autocalculate the optimal speed " @@ -1520,12 +1527,10 @@ PrintConfigDef::PrintConfigDef() def->enum_values.push_back("rectilinear"); def->enum_values.push_back("rectilinear-grid"); def->enum_values.push_back("honeycomb"); - def->enum_values.push_back("pillars"); def->enum_labels.push_back("rectilinear"); def->enum_labels.push_back("rectilinear grid"); def->enum_labels.push_back("honeycomb"); - def->enum_labels.push_back("pillars"); - def->default_value = new ConfigOptionEnum(smpPillars); + def->default_value = new ConfigOptionEnum(smpRectilinear); def = this->add("support_material_spacing", coFloat); def->label = L("Pattern spacing"); @@ -1797,6 +1802,9 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va values is a dirty hack and will need to be removed sometime in the future, but it will avoid lots of complaints for now. */ value = "0"; + } else if (opt_key == "support_material_pattern" && value == "pillars") { + // Slic3r PE does not support the pillars. They never worked well. + value = "rectilinear"; } else if (opt_key == "support_material_threshold" && value == "0") { // 0 used to be automatic threshold, but we introduced percent values so let's // transform it into the default value diff --git a/xs/src/libslic3r/PrintConfig.hpp b/xs/src/libslic3r/PrintConfig.hpp index c589d917a..cb94a7921 100644 --- a/xs/src/libslic3r/PrintConfig.hpp +++ b/xs/src/libslic3r/PrintConfig.hpp @@ -33,7 +33,7 @@ enum InfillPattern { }; enum SupportMaterialPattern { - smpRectilinear, smpRectilinearGrid, smpHoneycomb, smpPillars, + smpRectilinear, smpRectilinearGrid, smpHoneycomb, }; enum SeamPosition { @@ -87,7 +87,6 @@ template<> inline t_config_enum_values& ConfigOptionEnum keys_map["rectilinear"] = smpRectilinear; keys_map["rectilinear-grid"] = smpRectilinearGrid; keys_map["honeycomb"] = smpHoneycomb; - keys_map["pillars"] = smpPillars; } return keys_map; } @@ -583,6 +582,7 @@ public: ConfigOptionFloats max_layer_height; ConfigOptionInts min_fan_speed; ConfigOptionFloats min_layer_height; + ConfigOptionFloat max_print_height; ConfigOptionFloats min_print_speed; ConfigOptionFloat min_skirt_length; ConfigOptionString notes; @@ -647,6 +647,7 @@ protected: OPT_PTR(max_layer_height); OPT_PTR(min_fan_speed); OPT_PTR(min_layer_height); + OPT_PTR(max_print_height); OPT_PTR(min_print_speed); OPT_PTR(min_skirt_length); OPT_PTR(notes); diff --git a/xs/src/libslic3r/SupportMaterial.cpp b/xs/src/libslic3r/SupportMaterial.cpp index b8df67ba6..0cecf0014 100644 --- a/xs/src/libslic3r/SupportMaterial.cpp +++ b/xs/src/libslic3r/SupportMaterial.cpp @@ -2491,7 +2491,6 @@ void PrintObjectSupportMaterial::generate_toolpaths( infill_pattern = ipRectilinear; break; case smpHoneycomb: - case smpPillars: infill_pattern = ipHoneycomb; break; } diff --git a/xs/src/libslic3r/TriangleMesh.cpp b/xs/src/libslic3r/TriangleMesh.cpp index ffbe507ef..aecb39662 100644 --- a/xs/src/libslic3r/TriangleMesh.cpp +++ b/xs/src/libslic3r/TriangleMesh.cpp @@ -987,101 +987,227 @@ void TriangleMeshSlicer::make_loops(std::vector &lines, Polygo } } } - - // Build a map of lines by edge_a_id and a_id. - std::vector by_edge_a_id; - std::vector by_a_id; - by_edge_a_id.reserve(lines.size()); - by_a_id.reserve(lines.size()); - for (IntersectionLines::iterator line = lines.begin(); line != lines.end(); ++ line) { - if (! line->skip) { - if (line->edge_a_id != -1) - by_edge_a_id.push_back(&(*line)); // [line->edge_a_id].push_back(); - if (line->a_id != -1) - by_a_id.push_back(&(*line)); // [line->a_id].push_back(&(*line)); + + struct OpenPolyline { + OpenPolyline() {}; + OpenPolyline(const IntersectionReference &start, const IntersectionReference &end, Points &&points) : + start(start), end(end), points(std::move(points)), consumed(false) {} + void reverse() { + std::swap(start, end); + std::reverse(points.begin(), points.end()); + } + IntersectionReference start; + IntersectionReference end; + Points points; + bool consumed; + }; + std::vector open_polylines; + { + // Build a map of lines by edge_a_id and a_id. + std::vector by_edge_a_id; + std::vector by_a_id; + by_edge_a_id.reserve(lines.size()); + by_a_id.reserve(lines.size()); + for (IntersectionLine &line : lines) { + if (! line.skip) { + if (line.edge_a_id != -1) + by_edge_a_id.emplace_back(&line); + if (line.a_id != -1) + by_a_id.emplace_back(&line); + } + } + auto by_edge_lower = [](const IntersectionLine* il1, const IntersectionLine *il2) { return il1->edge_a_id < il2->edge_a_id; }; + auto by_vertex_lower = [](const IntersectionLine* il1, const IntersectionLine *il2) { return il1->a_id < il2->a_id; }; + std::sort(by_edge_a_id.begin(), by_edge_a_id.end(), by_edge_lower); + std::sort(by_a_id.begin(), by_a_id.end(), by_vertex_lower); + // Chain the segments with a greedy algorithm, collect the loops and unclosed polylines. + IntersectionLines::iterator it_line_seed = lines.begin(); + for (;;) { + // take first spare line and start a new loop + IntersectionLine *first_line = nullptr; + for (; it_line_seed != lines.end(); ++ it_line_seed) + if (! it_line_seed->skip) { + first_line = &(*it_line_seed ++); + break; + } + if (first_line == nullptr) + break; + first_line->skip = true; + Points loop_pts; + loop_pts.emplace_back(first_line->a); + IntersectionLine *last_line = first_line; + + /* + printf("first_line edge_a_id = %d, edge_b_id = %d, a_id = %d, b_id = %d, a = %d,%d, b = %d,%d\n", + first_line->edge_a_id, first_line->edge_b_id, first_line->a_id, first_line->b_id, + first_line->a.x, first_line->a.y, first_line->b.x, first_line->b.y); + */ + + IntersectionLine key; + for (;;) { + // find a line starting where last one finishes + IntersectionLine* next_line = nullptr; + if (last_line->edge_b_id != -1) { + key.edge_a_id = last_line->edge_b_id; + auto it_begin = std::lower_bound(by_edge_a_id.begin(), by_edge_a_id.end(), &key, by_edge_lower); + if (it_begin != by_edge_a_id.end()) { + auto it_end = std::upper_bound(it_begin, by_edge_a_id.end(), &key, by_edge_lower); + for (auto it_line = it_begin; it_line != it_end; ++ it_line) + if (! (*it_line)->skip) { + next_line = *it_line; + break; + } + } + } + if (next_line == nullptr && last_line->b_id != -1) { + key.a_id = last_line->b_id; + auto it_begin = std::lower_bound(by_a_id.begin(), by_a_id.end(), &key, by_vertex_lower); + if (it_begin != by_a_id.end()) { + auto it_end = std::upper_bound(it_begin, by_a_id.end(), &key, by_vertex_lower); + for (auto it_line = it_begin; it_line != it_end; ++ it_line) + if (! (*it_line)->skip) { + next_line = *it_line; + break; + } + } + } + if (next_line == nullptr) { + // Check whether we closed this loop. + if ((first_line->edge_a_id != -1 && first_line->edge_a_id == last_line->edge_b_id) || + (first_line->a_id != -1 && first_line->a_id == last_line->b_id)) { + // The current loop is complete. Add it to the output. + loops->emplace_back(std::move(loop_pts)); + #ifdef SLIC3R_TRIANGLEMESH_DEBUG + printf(" Discovered %s polygon of %d points\n", (p.is_counter_clockwise() ? "ccw" : "cw"), (int)p.points.size()); + #endif + } else { + // This is an open polyline. Add it to the list of open polylines. These open polylines will processed later. + loop_pts.emplace_back(last_line->b); + open_polylines.emplace_back(OpenPolyline( + IntersectionReference(first_line->a_id, first_line->edge_a_id), + IntersectionReference(last_line->b_id, last_line->edge_b_id), std::move(loop_pts))); + } + break; + } + /* + printf("next_line edge_a_id = %d, edge_b_id = %d, a_id = %d, b_id = %d, a = %d,%d, b = %d,%d\n", + next_line->edge_a_id, next_line->edge_b_id, next_line->a_id, next_line->b_id, + next_line->a.x, next_line->a.y, next_line->b.x, next_line->b.y); + */ + loop_pts.emplace_back(next_line->a); + last_line = next_line; + next_line->skip = true; + } } } - auto by_edge_lower = [](const IntersectionLine* il1, const IntersectionLine *il2) { return il1->edge_a_id < il2->edge_a_id; }; - auto by_vertex_lower = [](const IntersectionLine* il1, const IntersectionLine *il2) { return il1->a_id < il2->a_id; }; - std::sort(by_edge_a_id.begin(), by_edge_a_id.end(), by_edge_lower); - std::sort(by_a_id.begin(), by_a_id.end(), by_vertex_lower); - IntersectionLines::iterator it_line_seed = lines.begin(); - CYCLE: while (1) { - // take first spare line and start a new loop - IntersectionLine *first_line = nullptr; - for (; it_line_seed != lines.end(); ++ it_line_seed) - if (! it_line_seed->skip) { - first_line = &(*it_line_seed ++); - break; - } - if (first_line == nullptr) - break; - first_line->skip = true; - Points loop_pts; - loop_pts.push_back(first_line->a); - IntersectionLine *last_line = first_line; - - /* - printf("first_line edge_a_id = %d, edge_b_id = %d, a_id = %d, b_id = %d, a = %d,%d, b = %d,%d\n", - first_line->edge_a_id, first_line->edge_b_id, first_line->a_id, first_line->b_id, - first_line->a.x, first_line->a.y, first_line->b.x, first_line->b.y); - */ - - IntersectionLine key; - for (;;) { - // find a line starting where last one finishes - IntersectionLine* next_line = nullptr; - if (last_line->edge_b_id != -1) { - key.edge_a_id = last_line->edge_b_id; - auto it_begin = std::lower_bound(by_edge_a_id.begin(), by_edge_a_id.end(), &key, by_edge_lower); - if (it_begin != by_edge_a_id.end()) { - auto it_end = std::upper_bound(it_begin, by_edge_a_id.end(), &key, by_edge_lower); - for (auto it_line = it_begin; it_line != it_end; ++ it_line) - if (! (*it_line)->skip) { - next_line = *it_line; - break; - } + // Now process the open polylines. + if (! open_polylines.empty()) { + // Store the end points of open_polylines into vectors sorted + struct OpenPolylineEnd { + OpenPolylineEnd(OpenPolyline *polyline, bool start) : polyline(polyline), start(start) {} + OpenPolyline *polyline; + // Is it the start or end point? + bool start; + const IntersectionReference& ipref() const { return start ? polyline->start : polyline->end; } + int point_id() const { return ipref().point_id; } + int edge_id () const { return ipref().edge_id; } + }; + auto by_edge_lower = [](const OpenPolylineEnd &ope1, const OpenPolylineEnd &ope2) { return ope1.edge_id() < ope2.edge_id(); }; + auto by_point_lower = [](const OpenPolylineEnd &ope1, const OpenPolylineEnd &ope2) { return ope1.point_id() < ope2.point_id(); }; + std::vector by_edge_id; + std::vector by_point_id; + by_edge_id.reserve(2 * open_polylines.size()); + by_point_id.reserve(2 * open_polylines.size()); + for (OpenPolyline &opl : open_polylines) { + if (opl.start.edge_id != -1) + by_edge_id .emplace_back(OpenPolylineEnd(&opl, true)); + if (opl.end.edge_id != -1) + by_edge_id .emplace_back(OpenPolylineEnd(&opl, false)); + if (opl.start.point_id != -1) + by_point_id.emplace_back(OpenPolylineEnd(&opl, true)); + if (opl.end.point_id != -1) + by_point_id.emplace_back(OpenPolylineEnd(&opl, false)); + } + std::sort(by_edge_id .begin(), by_edge_id .end(), by_edge_lower); + std::sort(by_point_id.begin(), by_point_id.end(), by_point_lower); + + // Try to connect the loops. + for (OpenPolyline &opl : open_polylines) { + if (opl.consumed) + continue; + opl.consumed = true; + OpenPolylineEnd end(&opl, false); + for (;;) { + // find a line starting where last one finishes + OpenPolylineEnd* next_start = nullptr; + if (end.edge_id() != -1) { + auto it_begin = std::lower_bound(by_edge_id.begin(), by_edge_id.end(), end, by_edge_lower); + if (it_begin != by_edge_id.end()) { + auto it_end = std::upper_bound(it_begin, by_edge_id.end(), end, by_edge_lower); + for (auto it_edge = it_begin; it_edge != it_end; ++ it_edge) + if (! it_edge->polyline->consumed) { + next_start = &(*it_edge); + break; + } + } } - } - if (next_line == nullptr && last_line->b_id != -1) { - key.a_id = last_line->b_id; - auto it_begin = std::lower_bound(by_a_id.begin(), by_a_id.end(), &key, by_vertex_lower); - if (it_begin != by_a_id.end()) { - auto it_end = std::upper_bound(it_begin, by_a_id.end(), &key, by_vertex_lower); - for (auto it_line = it_begin; it_line != it_end; ++ it_line) - if (! (*it_line)->skip) { - next_line = *it_line; - break; - } + if (next_start == nullptr && end.point_id() != -1) { + auto it_begin = std::lower_bound(by_point_id.begin(), by_point_id.end(), end, by_point_lower); + if (it_begin != by_point_id.end()) { + auto it_end = std::upper_bound(it_begin, by_point_id.end(), end, by_point_lower); + for (auto it_point = it_begin; it_point != it_end; ++ it_point) + if (! it_point->polyline->consumed) { + next_start = &(*it_point); + break; + } + } } - } - if (next_line == nullptr) { - // check whether we closed this loop - if ((first_line->edge_a_id != -1 && first_line->edge_a_id == last_line->edge_b_id) || - (first_line->a_id != -1 && first_line->a_id == last_line->b_id)) { - // loop is complete - loops->emplace_back(std::move(loop_pts)); - #ifdef SLIC3R_TRIANGLEMESH_DEBUG - printf(" Discovered %s polygon of %d points\n", (p.is_counter_clockwise() ? "ccw" : "cw"), (int)p.points.size()); - #endif - goto CYCLE; + if (next_start == nullptr) { + // The current loop could not be closed. Unmark the segment. + opl.consumed = false; + break; + } + // Attach this polyline to the end of the initial polyline. + if (next_start->start) { + auto it = next_start->polyline->points.begin(); + std::copy(++ it, next_start->polyline->points.end(), back_inserter(opl.points)); + //opl.points.insert(opl.points.back(), ++ it, next_start->polyline->points.end()); + } else { + auto it = next_start->polyline->points.rbegin(); + std::copy(++ it, next_start->polyline->points.rend(), back_inserter(opl.points)); + //opl.points.insert(opl.points.back(), ++ it, next_start->polyline->points.rend()); } - // we can't close this loop! - //// push @failed_loops, [@loop]; - //#ifdef SLIC3R_TRIANGLEMESH_DEBUG - printf(" Unable to close this loop having %d points\n", (int)loop_pts.size()); - //#endif - goto CYCLE; + end = *next_start; + end.start = !end.start; + next_start->polyline->points.clear(); + next_start->polyline->consumed = true; + // Check whether we closed this loop. + const IntersectionReference &ip1 = opl.start; + const IntersectionReference &ip2 = end.ipref(); + if ((ip1.edge_id != -1 && ip1.edge_id == ip2.edge_id) || + (ip1.point_id != -1 && ip1.point_id == ip2.point_id)) { + // The current loop is complete. Add it to the output. + assert(opl.points.front().point_id == opl.points.back().point_id); + assert(opl.points.front().edge_id == opl.points.back().edge_id); + // Remove the duplicate last point. + opl.points.pop_back(); + if (opl.points.size() >= 3) { + // The closed polygon is patched from pieces with messed up orientation, therefore + // the orientation of the patched up polygon is not known. + // Orient the patched up polygons CCW. This heuristic may close some holes and cavities. + double area = 0.; + for (size_t i = 0, j = opl.points.size() - 1; i < opl.points.size(); j = i ++) + area += double(opl.points[j].x + opl.points[i].x) * double(opl.points[i].y - opl.points[j].y); + if (area < 0) + std::reverse(opl.points.begin(), opl.points.end()); + loops->emplace_back(std::move(opl.points)); + } + opl.points.clear(); + break; + } + // Continue with the current loop. } - /* - printf("next_line edge_a_id = %d, edge_b_id = %d, a_id = %d, b_id = %d, a = %d,%d, b = %d,%d\n", - next_line->edge_a_id, next_line->edge_b_id, next_line->a_id, next_line->b_id, - next_line->a.x, next_line->a.y, next_line->b.x, next_line->b.y); - */ - loop_pts.push_back(next_line->a); - last_line = next_line; - next_line->skip = true; } } } diff --git a/xs/src/libslic3r/TriangleMesh.hpp b/xs/src/libslic3r/TriangleMesh.hpp index 3192c90b6..c700784a5 100644 --- a/xs/src/libslic3r/TriangleMesh.hpp +++ b/xs/src/libslic3r/TriangleMesh.hpp @@ -85,11 +85,11 @@ enum FacetEdgeType { feHorizontal }; -class IntersectionPoint : public Point +class IntersectionReference { public: - IntersectionPoint() : point_id(-1), edge_id(-1) {}; - // Inherits coord_t x, y + IntersectionReference() : point_id(-1), edge_id(-1) {}; + IntersectionReference(int point_id, int edge_id) : point_id(point_id), edge_id(edge_id) {} // Where is this intersection point located? On mesh vertex or mesh edge? // Only one of the following will be set, the other will remain set to -1. // Index of the mesh vertex. @@ -98,6 +98,15 @@ public: int edge_id; }; +class IntersectionPoint : public Point, public IntersectionReference +{ +public: + IntersectionPoint() {}; + IntersectionPoint(int point_id, int edge_id, const Point &pt) : IntersectionReference(point_id, edge_id), Point(pt) {} + IntersectionPoint(const IntersectionReference &ir, const Point &pt) : IntersectionReference(ir), Point(pt) {} + // Inherits coord_t x, y +}; + class IntersectionLine : public Line { public: diff --git a/xs/src/slic3r/GUI/3DScene.cpp b/xs/src/slic3r/GUI/3DScene.cpp index 8a1b19c51..4762fa54c 100644 --- a/xs/src/slic3r/GUI/3DScene.cpp +++ b/xs/src/slic3r/GUI/3DScene.cpp @@ -46,6 +46,25 @@ void GLIndexedVertexArray::load_mesh_flat_shading(const TriangleMesh &mesh) } } +void GLIndexedVertexArray::load_mesh_full_shading(const TriangleMesh &mesh) +{ + assert(triangle_indices.empty() && vertices_and_normals_interleaved_size == 0); + assert(quad_indices.empty() && triangle_indices_size == 0); + assert(vertices_and_normals_interleaved.size() % 6 == 0 && quad_indices_size == vertices_and_normals_interleaved.size()); + + this->vertices_and_normals_interleaved.reserve(this->vertices_and_normals_interleaved.size() + 3 * 3 * 2 * mesh.facets_count()); + + unsigned int vertices_count = 0; + for (int i = 0; i < mesh.stl.stats.number_of_facets; ++i) { + const stl_facet &facet = mesh.stl.facet_start[i]; + for (int j = 0; j < 3; ++j) + this->push_geometry(facet.vertex[j].x, facet.vertex[j].y, facet.vertex[j].z, facet.normal.x, facet.normal.y, facet.normal.z); + + this->push_triangle(vertices_count, vertices_count + 1, vertices_count + 2); + vertices_count += 3; + } +} + void GLIndexedVertexArray::finalize_geometry(bool use_VBOs) { assert(this->vertices_and_normals_interleaved_VBO_id == 0); @@ -173,6 +192,45 @@ void GLIndexedVertexArray::render( glDisableClientState(GL_NORMAL_ARRAY); } +const float GLVolume::SELECTED_COLOR[4] = { 0.0f, 1.0f, 0.0f, 1.0f }; +const float GLVolume::HOVER_COLOR[4] = { 0.4f, 0.9f, 0.1f, 1.0f }; +const float GLVolume::OUTSIDE_COLOR[4] = { 0.75f, 0.0f, 0.75f, 1.0f }; +const float GLVolume::SELECTED_OUTSIDE_COLOR[4] = { 1.0f, 0.0f, 1.0f, 1.0f }; + +void GLVolume::set_render_color(float r, float g, float b, float a) +{ + render_color[0] = r; + render_color[1] = g; + render_color[2] = b; + render_color[3] = a; +} + +void GLVolume::set_render_color(const float* rgba, unsigned int size) +{ + size = std::min((unsigned int)4, size); + for (int i = 0; i < size; ++i) + { + render_color[i] = rgba[i]; + } +} + +void GLVolume::set_render_color() +{ + if (selected) + { + if (is_outside) + set_render_color(SELECTED_OUTSIDE_COLOR, 4); + else + set_render_color(SELECTED_COLOR, 4); + } + else if (hover) + set_render_color(HOVER_COLOR, 4); + else if (is_outside) + set_render_color(OUTSIDE_COLOR, 4); + else + set_render_color(color, 4); +} + void GLVolume::set_range(double min_z, double max_z) { this->qverts_range.first = 0; @@ -223,6 +281,51 @@ void GLVolume::render() const glPopMatrix(); } +void GLVolume::render_using_layer_height() const +{ + if (!is_active) + return; + + GLint current_program_id; + glGetIntegerv(GL_CURRENT_PROGRAM, ¤t_program_id); + + if ((layer_height_texture_data.shader_id > 0) && (layer_height_texture_data.shader_id != current_program_id)) + glUseProgram(layer_height_texture_data.shader_id); + + GLint z_to_texture_row_id = (layer_height_texture_data.shader_id > 0) ? glGetUniformLocation(layer_height_texture_data.shader_id, "z_to_texture_row") : -1; + GLint z_texture_row_to_normalized_id = (layer_height_texture_data.shader_id > 0) ? glGetUniformLocation(layer_height_texture_data.shader_id, "z_texture_row_to_normalized") : -1; + GLint z_cursor_id = (layer_height_texture_data.shader_id > 0) ? glGetUniformLocation(layer_height_texture_data.shader_id, "z_cursor") : -1; + GLint z_cursor_band_width_id = (layer_height_texture_data.shader_id > 0) ? glGetUniformLocation(layer_height_texture_data.shader_id, "z_cursor_band_width") : -1; + + if (z_to_texture_row_id >= 0) + glUniform1f(z_to_texture_row_id, (GLfloat)layer_height_texture_z_to_row_id()); + + if (z_texture_row_to_normalized_id >= 0) + glUniform1f(z_texture_row_to_normalized_id, (GLfloat)(1.0f / layer_height_texture_height())); + + if (z_cursor_id >= 0) + glUniform1f(z_cursor_id, (GLfloat)(bounding_box.max.z * layer_height_texture_data.z_cursor_relative)); + + if (z_cursor_band_width_id >= 0) + glUniform1f(z_cursor_band_width_id, (GLfloat)layer_height_texture_data.edit_band_width); + + unsigned int w = layer_height_texture_width(); + unsigned int h = layer_height_texture_height(); + + glBindTexture(GL_TEXTURE_2D, layer_height_texture_data.texture_id); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); + glTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA8, w / 2, h / 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, layer_height_texture_data_ptr_level0()); + glTexSubImage2D(GL_TEXTURE_2D, 1, 0, 0, w / 2, h / 2, GL_RGBA, GL_UNSIGNED_BYTE, layer_height_texture_data_ptr_level1()); + + render(); + + glBindTexture(GL_TEXTURE_2D, 0); + + if ((current_program_id > 0) && (layer_height_texture_data.shader_id != current_program_id)) + glUseProgram(current_program_id); +} + void GLVolume::generate_layer_height_texture(PrintObject *print_object, bool force) { GLTexture *tex = this->layer_height_texture.get(); @@ -288,7 +391,11 @@ std::vector GLVolumeCollection::load_object( color[3] = model_volume->modifier ? 0.5f : 1.f; this->volumes.emplace_back(new GLVolume(color)); GLVolume &v = *this->volumes.back(); - v.indexed_vertex_array.load_mesh_flat_shading(mesh); + if (use_VBOs) + v.indexed_vertex_array.load_mesh_full_shading(mesh); + else + v.indexed_vertex_array.load_mesh_flat_shading(mesh); + // finalize_geometry() clears the vertex arrays, therefore the bounding box has to be computed before finalize_geometry(). v.bounding_box = v.indexed_vertex_array.bounding_box(); v.indexed_vertex_array.finalize_geometry(use_VBOs); @@ -319,7 +426,11 @@ int GLVolumeCollection::load_wipe_tower_preview( this->volumes.emplace_back(new GLVolume(color)); GLVolume &v = *this->volumes.back(); auto mesh = make_cube(width, depth, height); - v.indexed_vertex_array.load_mesh_flat_shading(mesh); + if (use_VBOs) + v.indexed_vertex_array.load_mesh_full_shading(mesh); + else + v.indexed_vertex_array.load_mesh_flat_shading(mesh); + v.origin = Pointf3(pos_x, pos_y, 0.); // finalize_geometry() clears the vertex arrays, therefore the bounding box has to be computed before finalize_geometry(). v.bounding_box = v.indexed_vertex_array.bounding_box(); @@ -332,15 +443,19 @@ int GLVolumeCollection::load_wipe_tower_preview( void GLVolumeCollection::render_VBOs() const { -// glEnable(GL_BLEND); -// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glCullFace(GL_BACK); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_NORMAL_ARRAY); + ::glEnable(GL_BLEND); + ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + ::glCullFace(GL_BACK); + ::glEnableClientState(GL_VERTEX_ARRAY); + ::glEnableClientState(GL_NORMAL_ARRAY); GLint current_program_id; - glGetIntegerv(GL_CURRENT_PROGRAM, ¤t_program_id); + ::glGetIntegerv(GL_CURRENT_PROGRAM, ¤t_program_id); GLint color_id = (current_program_id > 0) ? glGetUniformLocation(current_program_id, "uniform_color") : -1; + GLint print_box_min_id = (current_program_id > 0) ? glGetUniformLocation(current_program_id, "print_box.min") : -1; + GLint print_box_max_id = (current_program_id > 0) ? glGetUniformLocation(current_program_id, "print_box.max") : -1; + GLint print_box_origin_id = (current_program_id > 0) ? glGetUniformLocation(current_program_id, "print_box.volume_origin") : -1; for (GLVolume *volume : this->volumes) { if (!volume->is_active) @@ -348,61 +463,110 @@ void GLVolumeCollection::render_VBOs() const if (!volume->indexed_vertex_array.vertices_and_normals_interleaved_VBO_id) continue; + + if (volume->layer_height_texture_data.can_use()) + { + ::glDisableClientState(GL_VERTEX_ARRAY); + ::glDisableClientState(GL_NORMAL_ARRAY); + volume->generate_layer_height_texture(volume->layer_height_texture_data.print_object, false); + volume->render_using_layer_height(); + ::glEnableClientState(GL_VERTEX_ARRAY); + ::glEnableClientState(GL_NORMAL_ARRAY); + continue; + } + + volume->set_render_color(); + GLsizei n_triangles = GLsizei(std::min(volume->indexed_vertex_array.triangle_indices_size, volume->tverts_range.second - volume->tverts_range.first)); GLsizei n_quads = GLsizei(std::min(volume->indexed_vertex_array.quad_indices_size, volume->qverts_range.second - volume->qverts_range.first)); if (n_triangles + n_quads == 0) { - if (_render_interleaved_only_volumes.enabled) + ::glDisableClientState(GL_VERTEX_ARRAY); + ::glDisableClientState(GL_NORMAL_ARRAY); + + if (color_id >= 0) { - ::glDisableClientState(GL_VERTEX_ARRAY); - ::glDisableClientState(GL_NORMAL_ARRAY); - ::glEnable(GL_BLEND); - ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - if (color_id >= 0) - { - float color[4]; - ::memcpy((void*)color, (const void*)volume->color, 3 * sizeof(float)); - color[3] = _render_interleaved_only_volumes.alpha; - ::glUniform4fv(color_id, 1, (const GLfloat*)color); - } - else - ::glColor4f(volume->color[0], volume->color[1], volume->color[2], _render_interleaved_only_volumes.alpha); - - volume->render(); - - ::glDisable(GL_BLEND); - ::glEnableClientState(GL_VERTEX_ARRAY); - ::glEnableClientState(GL_NORMAL_ARRAY); + float color[4]; + ::memcpy((void*)color, (const void*)volume->render_color, 4 * sizeof(float)); + ::glUniform4fv(color_id, 1, (const GLfloat*)color); } + else + ::glColor4f(volume->render_color[0], volume->render_color[1], volume->render_color[2], volume->render_color[3]); + + if (print_box_min_id != -1) + ::glUniform3fv(print_box_min_id, 1, (const GLfloat*)print_box_min); + + if (print_box_max_id != -1) + ::glUniform3fv(print_box_max_id, 1, (const GLfloat*)print_box_max); + + if (print_box_origin_id != -1) + { + float origin[4] = { (float)volume->origin.x, (float)volume->origin.y, (float)volume->origin.z, volume->outside_printer_detection_enabled ? 1.0f : 0.0f }; + ::glUniform4fv(print_box_origin_id, 1, (const GLfloat*)origin); + } + + volume->render(); + + ::glEnableClientState(GL_VERTEX_ARRAY); + ::glEnableClientState(GL_NORMAL_ARRAY); + continue; } + if (color_id >= 0) - glUniform4fv(color_id, 1, (const GLfloat*)volume->color); + ::glUniform4fv(color_id, 1, (const GLfloat*)volume->render_color); else - glColor4f(volume->color[0], volume->color[1], volume->color[2], volume->color[3]); - glBindBuffer(GL_ARRAY_BUFFER, volume->indexed_vertex_array.vertices_and_normals_interleaved_VBO_id); - glVertexPointer(3, GL_FLOAT, 6 * sizeof(float), (const void*)(3 * sizeof(float))); - glNormalPointer(GL_FLOAT, 6 * sizeof(float), nullptr); + ::glColor4f(volume->render_color[0], volume->render_color[1], volume->render_color[2], volume->render_color[3]); + + if (print_box_min_id != -1) + ::glUniform3fv(print_box_min_id, 1, (const GLfloat*)print_box_min); + + if (print_box_max_id != -1) + ::glUniform3fv(print_box_max_id, 1, (const GLfloat*)print_box_max); + + if (print_box_origin_id != -1) + { + float origin[4] = { (float)volume->origin.x, (float)volume->origin.y, (float)volume->origin.z, volume->outside_printer_detection_enabled ? 1.0f : 0.0f }; + ::glUniform4fv(print_box_origin_id, 1, (const GLfloat*)origin); + } + + ::glBindBuffer(GL_ARRAY_BUFFER, volume->indexed_vertex_array.vertices_and_normals_interleaved_VBO_id); + ::glVertexPointer(3, GL_FLOAT, 6 * sizeof(float), (const void*)(3 * sizeof(float))); + ::glNormalPointer(GL_FLOAT, 6 * sizeof(float), nullptr); + + bool has_offset = (volume->origin.x != 0) || (volume->origin.y != 0) || (volume->origin.z != 0); + if (has_offset) { + ::glPushMatrix(); + ::glTranslated(volume->origin.x, volume->origin.y, volume->origin.z); + } + if (n_triangles > 0) { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, volume->indexed_vertex_array.triangle_indices_VBO_id); - glDrawElements(GL_TRIANGLES, n_triangles, GL_UNSIGNED_INT, (const void*)(volume->tverts_range.first * 4)); + ::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, volume->indexed_vertex_array.triangle_indices_VBO_id); + ::glDrawElements(GL_TRIANGLES, n_triangles, GL_UNSIGNED_INT, (const void*)(volume->tverts_range.first * 4)); } if (n_quads > 0) { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, volume->indexed_vertex_array.quad_indices_VBO_id); - glDrawElements(GL_QUADS, n_quads, GL_UNSIGNED_INT, (const void*)(volume->qverts_range.first * 4)); + ::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, volume->indexed_vertex_array.quad_indices_VBO_id); + ::glDrawElements(GL_QUADS, n_quads, GL_UNSIGNED_INT, (const void*)(volume->qverts_range.first * 4)); } + + if (has_offset) + ::glPopMatrix(); } - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_NORMAL_ARRAY); -// glDisable(GL_BLEND); + ::glBindBuffer(GL_ARRAY_BUFFER, 0); + ::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + ::glDisableClientState(GL_VERTEX_ARRAY); + ::glDisableClientState(GL_NORMAL_ARRAY); + + ::glDisable(GL_BLEND); } void GLVolumeCollection::render_legacy() const { + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glCullFace(GL_BACK); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); @@ -412,27 +576,25 @@ void GLVolumeCollection::render_legacy() const if (!volume->is_active) continue; + volume->set_render_color(); + GLsizei n_triangles = GLsizei(std::min(volume->indexed_vertex_array.triangle_indices_size, volume->tverts_range.second - volume->tverts_range.first)); GLsizei n_quads = GLsizei(std::min(volume->indexed_vertex_array.quad_indices_size, volume->qverts_range.second - volume->qverts_range.first)); if (n_triangles + n_quads == 0) { - if (_render_interleaved_only_volumes.enabled) - { - ::glDisableClientState(GL_VERTEX_ARRAY); - ::glDisableClientState(GL_NORMAL_ARRAY); - ::glEnable(GL_BLEND); - ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + ::glDisableClientState(GL_VERTEX_ARRAY); + ::glDisableClientState(GL_NORMAL_ARRAY); - ::glColor4f(volume->color[0], volume->color[1], volume->color[2], _render_interleaved_only_volumes.alpha); - volume->render(); + ::glColor4f(volume->render_color[0], volume->render_color[1], volume->render_color[2], volume->render_color[3]); + volume->render(); + + ::glEnableClientState(GL_VERTEX_ARRAY); + ::glEnableClientState(GL_NORMAL_ARRAY); - ::glDisable(GL_BLEND); - ::glEnableClientState(GL_VERTEX_ARRAY); - ::glEnableClientState(GL_NORMAL_ARRAY); - } continue; } - glColor4f(volume->color[0], volume->color[1], volume->color[2], volume->color[3]); + + glColor4f(volume->render_color[0], volume->render_color[1], volume->render_color[2], volume->render_color[3]); glVertexPointer(3, GL_FLOAT, 6 * sizeof(float), volume->indexed_vertex_array.vertices_and_normals_interleaved.data() + 3); glNormalPointer(GL_FLOAT, 6 * sizeof(float), volume->indexed_vertex_array.vertices_and_normals_interleaved.data()); bool has_offset = volume->origin.x != 0 || volume->origin.y != 0 || volume->origin.z != 0; @@ -445,11 +607,37 @@ void GLVolumeCollection::render_legacy() const if (n_quads > 0) glDrawElements(GL_QUADS, n_quads, GL_UNSIGNED_INT, volume->indexed_vertex_array.quad_indices.data() + volume->qverts_range.first); if (has_offset) - glPushMatrix(); + glPopMatrix(); } glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); + + glDisable(GL_BLEND); +} + +void GLVolumeCollection::update_outside_state(const DynamicPrintConfig* config, bool all_inside) +{ + if (config == nullptr) + return; + + const ConfigOptionPoints* opt = dynamic_cast(config->option("bed_shape")); + if (opt == nullptr) + return; + + BoundingBox bed_box_2D = get_extents(Polygon::new_scale(opt->values)); + BoundingBoxf3 print_volume(Pointf3(unscale(bed_box_2D.min.x), unscale(bed_box_2D.min.y), 0.0), Pointf3(unscale(bed_box_2D.max.x), unscale(bed_box_2D.max.y), config->opt_float("max_print_height"))); + + for (GLVolume* volume : this->volumes) + { + if (all_inside) + { + volume->is_outside = false; + continue; + } + + volume->is_outside = !print_volume.contains(volume->transformed_bounding_box()); + } } std::vector GLVolumeCollection::get_current_print_zs() const @@ -1133,6 +1321,100 @@ static void point3_to_verts(const Point3& point, double width, double height, GL _3DScene::GCodePreviewVolumeIndex _3DScene::s_gcode_preview_volume_index; _3DScene::LegendTexture _3DScene::s_legend_texture; +_3DScene::WarningTexture _3DScene::s_warning_texture; + +unsigned int _3DScene::TextureBase::finalize() +{ + if (!m_data.empty()) { + // sends buffer to gpu + ::glGenTextures(1, &m_tex_id); + ::glBindTexture(GL_TEXTURE_2D, m_tex_id); + ::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, (GLsizei)m_tex_width, (GLsizei)m_tex_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const GLvoid*)m_data.data()); + ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1); + ::glBindTexture(GL_TEXTURE_2D, 0); + m_data.clear(); + } + return (m_tex_width > 0 && m_tex_height > 0) ? m_tex_id : 0; +} + +void _3DScene::TextureBase::_destroy_texture() +{ + if (m_tex_id > 0) + { + ::glDeleteTextures(1, &m_tex_id); + m_tex_id = 0; + m_tex_height = 0; + m_tex_width = 0; + } + m_data.clear(); +} + + +const unsigned char _3DScene::WarningTexture::Background_Color[3] = { 9, 91, 134 }; +const unsigned char _3DScene::WarningTexture::Opacity = 255; + +// Generate a texture data, but don't load it into the GPU yet, as the GPU context may not yet be valid. +bool _3DScene::WarningTexture::generate(const std::string& msg) +{ + // Mark the texture as released, but don't release the texture from the GPU yet. + m_tex_width = m_tex_height = 0; + m_data.clear(); + + if (msg.empty()) + return false; + + wxMemoryDC memDC; + // select default font + memDC.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); + + // calculates texture size + wxCoord w, h; + memDC.GetTextExtent(msg, &w, &h); + m_tex_width = (unsigned int)w; + m_tex_height = (unsigned int)h; + + // generates bitmap + wxBitmap bitmap(m_tex_width, m_tex_height); + +#if defined(__APPLE__) || defined(_MSC_VER) + bitmap.UseAlpha(); +#endif + + memDC.SelectObject(bitmap); + memDC.SetBackground(wxBrush(wxColour(Background_Color[0], Background_Color[1], Background_Color[2]))); + memDC.Clear(); + + memDC.SetTextForeground(*wxWHITE); + + // draw message + memDC.DrawText(msg, 0, 0); + + memDC.SelectObject(wxNullBitmap); + + // Convert the bitmap into a linear data ready to be loaded into the GPU. + { + wxImage image = bitmap.ConvertToImage(); + image.SetMaskColour(Background_Color[0], Background_Color[1], Background_Color[2]); + + // prepare buffer + m_data.assign(4 * m_tex_width * m_tex_height, 0); + for (unsigned int h = 0; h < m_tex_height; ++h) + { + unsigned int hh = h * m_tex_width; + unsigned char* px_ptr = m_data.data() + 4 * hh; + for (unsigned int w = 0; w < m_tex_width; ++w) + { + *px_ptr++ = image.GetRed(w, h); + *px_ptr++ = image.GetGreen(w, h); + *px_ptr++ = image.GetBlue(w, h); + *px_ptr++ = image.IsTransparent(w, h) ? 0 : Opacity; + } + } + } + return true; +} const unsigned char _3DScene::LegendTexture::Squares_Border_Color[3] = { 64, 64, 64 }; const unsigned char _3DScene::LegendTexture::Background_Color[3] = { 9, 91, 134 }; @@ -1276,34 +1558,6 @@ bool _3DScene::LegendTexture::generate(const GCodePreviewData& preview_data, con return true; } -unsigned int _3DScene::LegendTexture::finalize() -{ - if (! m_data.empty()) { - // sends buffer to gpu - ::glGenTextures(1, &m_tex_id); - ::glBindTexture(GL_TEXTURE_2D, m_tex_id); - ::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, (GLsizei)m_tex_width, (GLsizei)m_tex_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const GLvoid*)m_data.data()); - ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1); - ::glBindTexture(GL_TEXTURE_2D, 0); - m_data.clear(); - } - return (m_tex_width > 0 && m_tex_height > 0) ? m_tex_id : 0; -} - -void _3DScene::LegendTexture::_destroy_texture() -{ - if (m_tex_id > 0) - { - ::glDeleteTextures(1, &m_tex_id); - m_tex_id = 0; - m_tex_height = 0; - m_tex_width = 0; - } - m_data.clear(); -} - void _3DScene::_glew_init() { glewInit(); @@ -1353,27 +1607,17 @@ void _3DScene::load_gcode_preview(const Print* print, const GCodePreviewData* pr _load_gcode_unretractions(*preview_data, *volumes, use_VBOs); if (volumes->empty()) - { reset_legend_texture(); - volumes->set_render_interleaved_only_volumes(GLVolumeCollection::RenderInterleavedOnlyVolumes(false, 0.0f)); - } else { _generate_legend_texture(*preview_data, tool_colors); - _load_shells(*print, *volumes, use_VBOs); - volumes->set_render_interleaved_only_volumes(GLVolumeCollection::RenderInterleavedOnlyVolumes(true, 0.25f)); } } _update_gcode_volumes_visibility(*preview_data, *volumes); } -unsigned int _3DScene::get_legend_texture_id() -{ - return s_legend_texture.get_texture_id(); -} - unsigned int _3DScene::get_legend_texture_width() { return s_legend_texture.get_texture_width(); @@ -1389,6 +1633,36 @@ void _3DScene::reset_legend_texture() s_legend_texture.reset_texture(); } +unsigned int _3DScene::finalize_legend_texture() +{ + return s_legend_texture.finalize(); +} + +unsigned int _3DScene::get_warning_texture_width() +{ + return s_warning_texture.get_texture_width(); +} + +unsigned int _3DScene::get_warning_texture_height() +{ + return s_warning_texture.get_texture_height(); +} + +void _3DScene::generate_warning_texture(const std::string& msg) +{ + s_warning_texture.generate(msg); +} + +void _3DScene::reset_warning_texture() +{ + s_warning_texture.reset_texture(); +} + +unsigned int _3DScene::finalize_warning_texture() +{ + return s_warning_texture.finalize(); +} + // Create 3D thick extrusion lines for a skirt and brim. // Adds a new Slic3r::GUI::3DScene::Volume to volumes. void _3DScene::_load_print_toolpaths( @@ -1501,6 +1775,7 @@ void _3DScene::_load_print_object_toolpaths( auto new_volume = [volumes, &new_volume_mutex](const float *color) -> GLVolume* { auto *volume = new GLVolume(color); new_volume_mutex.lock(); + volume->outside_printer_detection_enabled = false; volumes->volumes.emplace_back(volume); new_volume_mutex.unlock(); return volume; @@ -1651,6 +1926,7 @@ void _3DScene::_load_wipe_tower_toolpaths( auto new_volume = [volumes, &new_volume_mutex](const float *color) -> GLVolume* { auto *volume = new GLVolume(color); new_volume_mutex.lock(); + volume->outside_printer_detection_enabled = false; volumes->volumes.emplace_back(volume); new_volume_mutex.unlock(); return volume; @@ -2221,6 +2497,7 @@ void _3DScene::_update_gcode_volumes_visibility(const GCodePreviewData& preview_ for (std::vector::iterator it = begin; it != end; ++it) { GLVolume* volume = *it; + volume->outside_printer_detection_enabled = false; switch (s_gcode_preview_volume_index.first_volumes[i].type) { @@ -2253,6 +2530,7 @@ void _3DScene::_update_gcode_volumes_visibility(const GCodePreviewData& preview_ case GCodePreviewVolumeIndex::Shell: { volume->is_active = preview_data.shell.is_visible; + volume->color[3] = 0.25f; volume->zoom_to_volumes = false; break; } @@ -2272,11 +2550,6 @@ void _3DScene::_generate_legend_texture(const GCodePreviewData& preview_data, co s_legend_texture.generate(preview_data, tool_colors); } -unsigned int _3DScene::finalize_legend_texture() -{ - return s_legend_texture.finalize(); -} - void _3DScene::_load_shells(const Print& print, GLVolumeCollection& volumes, bool use_VBOs) { size_t initial_volumes_count = volumes.volumes.size(); diff --git a/xs/src/slic3r/GUI/3DScene.hpp b/xs/src/slic3r/GUI/3DScene.hpp index 3e26bf6d3..0fd31d8d6 100644 --- a/xs/src/slic3r/GUI/3DScene.hpp +++ b/xs/src/slic3r/GUI/3DScene.hpp @@ -16,6 +16,7 @@ class PrintObject; class Model; class ModelObject; class GCodePreviewData; +class DynamicPrintConfig; // A container for interleaved arrays of 3D vertices and normals, // possibly indexed by triangles and / or quads. @@ -85,6 +86,7 @@ public: unsigned int quad_indices_VBO_id; void load_mesh_flat_shading(const TriangleMesh &mesh); + void load_mesh_full_shading(const TriangleMesh &mesh); inline bool has_VBOs() const { return vertices_and_normals_interleaved_VBO_id != 0; } @@ -208,7 +210,38 @@ public: }; class GLVolume { + struct LayerHeightTextureData + { + // ID of the layer height texture + unsigned int texture_id; + // ID of the shader used to render with the layer height texture + unsigned int shader_id; + // The print object to update when generating the layer height texture + PrintObject* print_object; + + float z_cursor_relative; + float edit_band_width; + + LayerHeightTextureData() { reset(); } + + void reset() + { + texture_id = 0; + shader_id = 0; + print_object = nullptr; + z_cursor_relative = 0.0f; + edit_band_width = 0.0f; + } + + bool can_use() { return (texture_id > 0) && (shader_id > 0) && (print_object != nullptr); } + }; + public: + static const float SELECTED_COLOR[4]; + static const float HOVER_COLOR[4]; + static const float OUTSIDE_COLOR[4]; + static const float SELECTED_OUTSIDE_COLOR[4]; + GLVolume(float r = 1.f, float g = 1.f, float b = 1.f, float a = 1.f) : composite_id(-1), select_group_id(-1), @@ -216,6 +249,8 @@ public: selected(false), is_active(true), zoom_to_volumes(true), + outside_printer_detection_enabled(true), + is_outside(false), hover(false), tverts_range(0, size_t(-1)), qverts_range(0, size_t(-1)) @@ -224,6 +259,7 @@ public: color[1] = g; color[2] = b; color[3] = a; + set_render_color(r, g, b, a); } GLVolume(const float *rgba) : GLVolume(rgba[0], rgba[1], rgba[2], rgba[3]) {} @@ -243,7 +279,8 @@ public: Pointf3 origin; // Color of the triangles / quads held by this volume. float color[4]; - + // Color used to render this volume. + float render_color[4]; // An ID containing the object ID, volume ID and instance ID. int composite_id; // An ID for group selection. It may be the same for all meshes of all object instances, or for just a single object instance. @@ -256,6 +293,10 @@ public: bool is_active; // Whether or not to use this volume when applying zoom_to_volumes() bool zoom_to_volumes; + // Wheter or not this volume is enabled for outside print volume detection. + bool outside_printer_detection_enabled; + // Wheter or not this volume is outside print volume. + bool is_outside; // Boolean: Is mouse over this object? bool hover; @@ -271,6 +312,10 @@ public: // Offset into qverts & tverts, or offsets into indices stored into an OpenGL name_index_buffer. std::vector offsets; + void set_render_color(float r, float g, float b, float a); + void set_render_color(const float* rgba, unsigned int size); + // Sets render color in dependence of current state + void set_render_color(); int object_idx() const { return this->composite_id / 1000000; } int volume_idx() const { return (this->composite_id / 1000) % 1000; } @@ -282,11 +327,14 @@ public: void set_range(coordf_t low, coordf_t high); void render() const; + void render_using_layer_height() const; void finalize_geometry(bool use_VBOs) { this->indexed_vertex_array.finalize_geometry(use_VBOs); } void release_geometry() { this->indexed_vertex_array.release_geometry(); } /************************************************ Layer height texture ****************************************************/ std::shared_ptr layer_height_texture; + // Data to render this volume using the layer height texture + LayerHeightTextureData layer_height_texture_data; bool has_layer_height_texture() const { return this->layer_height_texture.get() != nullptr; } @@ -296,11 +344,11 @@ public: { return (this->layer_height_texture.get() == nullptr) ? 0 : this->layer_height_texture->height; } size_t layer_height_texture_cells() const { return (this->layer_height_texture.get() == nullptr) ? 0 : this->layer_height_texture->cells; } - void* layer_height_texture_data_ptr_level0() { + void* layer_height_texture_data_ptr_level0() const { return (layer_height_texture.get() == nullptr) ? 0 : (void*)layer_height_texture->data.data(); } - void* layer_height_texture_data_ptr_level1() { + void* layer_height_texture_data_ptr_level1() const { return (layer_height_texture.get() == nullptr) ? 0 : (void*)(layer_height_texture->data.data() + layer_height_texture->width * layer_height_texture->height * 4); } @@ -309,31 +357,24 @@ public: double(this->layer_height_texture->cells - 1) / (double(this->layer_height_texture->width) * bounding_box.max.z); } void generate_layer_height_texture(PrintObject *print_object, bool force); + + void set_layer_height_texture_data(unsigned int texture_id, unsigned int shader_id, PrintObject* print_object, float z_cursor_relative, float edit_band_width) + { + layer_height_texture_data.texture_id = texture_id; + layer_height_texture_data.shader_id = shader_id; + layer_height_texture_data.print_object = print_object; + layer_height_texture_data.z_cursor_relative = z_cursor_relative; + layer_height_texture_data.edit_band_width = edit_band_width; + } + + void reset_layer_height_texture_data() { layer_height_texture_data.reset(); } }; class GLVolumeCollection { -public: - struct RenderInterleavedOnlyVolumes - { - bool enabled; - float alpha; // [0..1] - - RenderInterleavedOnlyVolumes() - : enabled(false) - , alpha(0.0f) - { - } - - RenderInterleavedOnlyVolumes(bool enabled, float alpha) - : enabled(enabled) - , alpha(alpha) - { - } - }; - -private: - RenderInterleavedOnlyVolumes _render_interleaved_only_volumes; + // min and max vertex of the print box volume + float print_box_min[3]; + float print_box_max[3]; public: std::vector volumes; @@ -370,7 +411,12 @@ public: bool empty() const { return volumes.empty(); } void set_range(double low, double high) { for (GLVolume *vol : this->volumes) vol->set_range(low, high); } - void set_render_interleaved_only_volumes(const RenderInterleavedOnlyVolumes& render_interleaved_only_volumes) { _render_interleaved_only_volumes = render_interleaved_only_volumes; } + void set_print_box(float min_x, float min_y, float min_z, float max_x, float max_y, float max_z) { + print_box_min[0] = min_x; print_box_min[1] = min_y; print_box_min[2] = min_z; + print_box_max[0] = max_x; print_box_max[1] = max_y; print_box_max[2] = max_z; + } + + void update_outside_state(const DynamicPrintConfig* config, bool all_inside); // Returns a vector containing the sorted list of all the print_zs of the volumes contained in this collection std::vector get_current_print_zs() const; @@ -411,27 +457,20 @@ class _3DScene static GCodePreviewVolumeIndex s_gcode_preview_volume_index; - class LegendTexture + class TextureBase { - static const unsigned int Px_Title_Offset = 5; - static const unsigned int Px_Text_Offset = 5; - static const unsigned int Px_Square = 20; - static const unsigned int Px_Square_Contour = 1; - static const unsigned int Px_Border = Px_Square / 2; - static const unsigned char Squares_Border_Color[3]; - static const unsigned char Background_Color[3]; - static const unsigned char Opacity; - + protected: unsigned int m_tex_id; unsigned int m_tex_width; unsigned int m_tex_height; + // generate() fills in m_data with the pixels, while finalize() moves the data to the GPU before rendering. + std::vector m_data; + public: - LegendTexture() : m_tex_id(0), m_tex_width(0), m_tex_height(0) {} - ~LegendTexture() { _destroy_texture(); } - - // Generate a texture data, but don't load it into the GPU yet, as the glcontext may not be valid yet. - bool generate(const GCodePreviewData& preview_data, const std::vector& tool_colors); + TextureBase() : m_tex_id(0), m_tex_width(0), m_tex_height(0) {} + virtual ~TextureBase() { _destroy_texture(); } + // If not loaded, load the texture data into the GPU. Return a texture ID or 0 if the texture has zero size. unsigned int finalize(); @@ -442,26 +481,61 @@ class _3DScene void reset_texture() { _destroy_texture(); } private: - bool _create_texture(const GCodePreviewData& preview_data, const wxBitmap& bitmap); void _destroy_texture(); - // generate() fills in m_data with the pixels, while finalize() moves the data to the GPU before rendering. - std::vector m_data; + }; + + class WarningTexture : public TextureBase + { + static const unsigned char Background_Color[3]; + static const unsigned char Opacity; + + public: + WarningTexture() : TextureBase() {} + + // Generate a texture data, but don't load it into the GPU yet, as the glcontext may not be valid yet. + bool generate(const std::string& msg); + }; + + class LegendTexture : public TextureBase + { + static const unsigned int Px_Title_Offset = 5; + static const unsigned int Px_Text_Offset = 5; + static const unsigned int Px_Square = 20; + static const unsigned int Px_Square_Contour = 1; + static const unsigned int Px_Border = Px_Square / 2; + static const unsigned char Squares_Border_Color[3]; + static const unsigned char Background_Color[3]; + static const unsigned char Opacity; + + public: + LegendTexture() : TextureBase() {} + + // Generate a texture data, but don't load it into the GPU yet, as the glcontext may not be valid yet. + bool generate(const GCodePreviewData& preview_data, const std::vector& tool_colors); }; static LegendTexture s_legend_texture; + static WarningTexture s_warning_texture; public: static void _glew_init(); static void load_gcode_preview(const Print* print, const GCodePreviewData* preview_data, GLVolumeCollection* volumes, const std::vector& str_tool_colors, bool use_VBOs); - static unsigned int get_legend_texture_id(); static unsigned int get_legend_texture_width(); static unsigned int get_legend_texture_height(); static void reset_legend_texture(); static unsigned int finalize_legend_texture(); + static unsigned int get_warning_texture_width(); + static unsigned int get_warning_texture_height(); + + // generates a warning texture containing the given message + static void generate_warning_texture(const std::string& msg); + static void reset_warning_texture(); + static unsigned int finalize_warning_texture(); + static void _load_print_toolpaths( const Print *print, GLVolumeCollection *volumes, diff --git a/xs/src/slic3r/GUI/BonjourDialog.cpp b/xs/src/slic3r/GUI/BonjourDialog.cpp new file mode 100644 index 000000000..34fac9a91 --- /dev/null +++ b/xs/src/slic3r/GUI/BonjourDialog.cpp @@ -0,0 +1,200 @@ +#include "slic3r/Utils/Bonjour.hpp" // On Windows, boost needs to be included before wxWidgets headers + +#include "BonjourDialog.hpp" + +#include +#include + +#include +#include +#include +#include +#include + +#include "slic3r/GUI/GUI.hpp" +#include "slic3r/Utils/Bonjour.hpp" + + +namespace Slic3r { + + +struct BonjourReplyEvent : public wxEvent +{ + BonjourReply reply; + + BonjourReplyEvent(wxEventType eventType, int winid, BonjourReply &&reply) : + wxEvent(winid, eventType), + reply(std::move(reply)) + {} + + virtual wxEvent *Clone() const + { + return new BonjourReplyEvent(*this); + } +}; + +wxDEFINE_EVENT(EVT_BONJOUR_REPLY, BonjourReplyEvent); + +wxDECLARE_EVENT(EVT_BONJOUR_COMPLETE, wxCommandEvent); +wxDEFINE_EVENT(EVT_BONJOUR_COMPLETE, wxCommandEvent); + +class ReplySet: public std::set {}; + +struct LifetimeGuard +{ + std::mutex mutex; + BonjourDialog *dialog; + + LifetimeGuard(BonjourDialog *dialog) : dialog(dialog) {} +}; + + +BonjourDialog::BonjourDialog(wxWindow *parent) : + wxDialog(parent, wxID_ANY, _(L("Network lookup"))), + list(new wxListView(this, wxID_ANY, wxDefaultPosition, wxSize(800, 300))), + replies(new ReplySet), + label(new wxStaticText(this, wxID_ANY, "")), + timer(new wxTimer()), + timer_state(0) +{ + wxBoxSizer *vsizer = new wxBoxSizer(wxVERTICAL); + + vsizer->Add(label, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 10); + + list->SetSingleStyle(wxLC_SINGLE_SEL); + list->SetSingleStyle(wxLC_SORT_DESCENDING); + list->AppendColumn(_(L("Address")), wxLIST_FORMAT_LEFT, 50); + list->AppendColumn(_(L("Hostname")), wxLIST_FORMAT_LEFT, 100); + list->AppendColumn(_(L("Service name")), wxLIST_FORMAT_LEFT, 200); + list->AppendColumn(_(L("OctoPrint version")), wxLIST_FORMAT_LEFT, 50); + + vsizer->Add(list, 1, wxEXPAND | wxALL, 10); + + wxBoxSizer *button_sizer = new wxBoxSizer(wxHORIZONTAL); + button_sizer->Add(new wxButton(this, wxID_OK, "OK"), 0, wxALL, 10); + button_sizer->Add(new wxButton(this, wxID_CANCEL, "Cancel"), 0, wxALL, 10); + // ^ Note: The Ok/Cancel labels are translated by wxWidgets + + vsizer->Add(button_sizer, 0, wxALIGN_CENTER); + SetSizerAndFit(vsizer); + + Bind(EVT_BONJOUR_REPLY, &BonjourDialog::on_reply, this); + + Bind(EVT_BONJOUR_COMPLETE, [this](wxCommandEvent &) { + this->timer_state = 0; + }); + + Bind(wxEVT_TIMER, &BonjourDialog::on_timer, this); +} + +BonjourDialog::~BonjourDialog() +{ + // Needed bacuse of forward defs +} + +bool BonjourDialog::show_and_lookup() +{ + Show(); // Because we need GetId() to work before ShowModal() + + timer->Stop(); + timer->SetOwner(this); + timer_state = 1; + timer->Start(1000); + wxTimerEvent evt_dummy; + on_timer(evt_dummy); + + // The background thread needs to queue messages for this dialog + // and for that it needs a valid pointer to it (mandated by the wxWidgets API). + // Here we put the pointer under a shared_ptr and protect it by a mutex, + // so that both threads can access it safely. + auto dguard = std::make_shared(this); + + bonjour = std::move(Bonjour("octoprint") + .set_retries(3) + .set_timeout(4) + .on_reply([dguard](BonjourReply &&reply) { + std::lock_guard lock_guard(dguard->mutex); + auto dialog = dguard->dialog; + if (dialog != nullptr) { + auto evt = new BonjourReplyEvent(EVT_BONJOUR_REPLY, dialog->GetId(), std::move(reply)); + wxQueueEvent(dialog, evt); + } + }) + .on_complete([dguard]() { + std::lock_guard lock_guard(dguard->mutex); + auto dialog = dguard->dialog; + if (dialog != nullptr) { + auto evt = new wxCommandEvent(EVT_BONJOUR_COMPLETE, dialog->GetId()); + wxQueueEvent(dialog, evt); + } + }) + .lookup() + ); + + bool res = ShowModal() == wxID_OK && list->GetFirstSelected() >= 0; + { + // Tell the background thread the dialog is going away... + std::lock_guard lock_guard(dguard->mutex); + dguard->dialog = nullptr; + } + return res; +} + +wxString BonjourDialog::get_selected() const +{ + auto sel = list->GetFirstSelected(); + return sel >= 0 ? list->GetItemText(sel) : wxString(); +} + + +// Private + +void BonjourDialog::on_reply(BonjourReplyEvent &e) +{ + if (replies->find(e.reply) != replies->end()) { + // We already have this reply + return; + } + + replies->insert(std::move(e.reply)); + + auto selected = get_selected(); + list->DeleteAllItems(); + + // The whole list is recreated so that we benefit from it already being sorted in the set. + // (And also because wxListView's sorting API is bananas.) + for (const auto &reply : *replies) { + auto item = list->InsertItem(0, reply.full_address); + list->SetItem(item, 1, reply.hostname); + list->SetItem(item, 2, reply.service_name); + list->SetItem(item, 3, reply.version); + } + + for (int i = 0; i < 4; i++) { + this->list->SetColumnWidth(i, wxLIST_AUTOSIZE); + if (this->list->GetColumnWidth(i) < 100) { this->list->SetColumnWidth(i, 100); } + } + + if (!selected.IsEmpty()) { + // Attempt to preserve selection + auto hit = list->FindItem(-1, selected); + if (hit >= 0) { list->SetItemState(hit, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); } + } +} + +void BonjourDialog::on_timer(wxTimerEvent &) +{ + const auto search_str = _(L("Searching for devices")); + + if (timer_state > 0) { + const std::string dots(timer_state, '.'); + label->SetLabel(wxString::Format("%s %s", search_str, dots)); + timer_state = (timer_state) % 3 + 1; + } else { + label->SetLabel(wxString::Format("%s: %s", search_str, _(L("Finished.")))); + timer->Stop(); + } +} + + +} diff --git a/xs/src/slic3r/GUI/BonjourDialog.hpp b/xs/src/slic3r/GUI/BonjourDialog.hpp new file mode 100644 index 000000000..e3f53790b --- /dev/null +++ b/xs/src/slic3r/GUI/BonjourDialog.hpp @@ -0,0 +1,49 @@ +#ifndef slic3r_BonjourDialog_hpp_ +#define slic3r_BonjourDialog_hpp_ + +#include + +#include + +class wxListView; +class wxStaticText; +class wxTimer; +class wxTimerEvent; + + +namespace Slic3r { + +class Bonjour; +class BonjourReplyEvent; +class ReplySet; + + +class BonjourDialog: public wxDialog +{ +public: + BonjourDialog(wxWindow *parent); + BonjourDialog(BonjourDialog &&) = delete; + BonjourDialog(const BonjourDialog &) = delete; + BonjourDialog &operator=(BonjourDialog &&) = delete; + BonjourDialog &operator=(const BonjourDialog &) = delete; + ~BonjourDialog(); + + bool show_and_lookup(); + wxString get_selected() const; +private: + wxListView *list; + std::unique_ptr replies; + wxStaticText *label; + std::shared_ptr bonjour; + std::unique_ptr timer; + unsigned timer_state; + + void on_reply(BonjourReplyEvent &); + void on_timer(wxTimerEvent &); +}; + + + +} + +#endif diff --git a/xs/src/slic3r/GUI/Field.cpp b/xs/src/slic3r/GUI/Field.cpp index 045c55d96..c2fc5e4e4 100644 --- a/xs/src/slic3r/GUI/Field.cpp +++ b/xs/src/slic3r/GUI/Field.cpp @@ -18,6 +18,17 @@ namespace Slic3r { namespace GUI { wxNumberFormatter::ToString(value, precision, wxNumberFormatter::Style_None); } + void Field::PostInitialize(){ + m_Undo_btn = new wxButton(m_parent, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT | wxNO_BORDER); + // use bouth of temporary_icons till don't have "undo_icon" + auto color = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); + if (wxMSW) m_Undo_btn->SetBackgroundColour(color); + m_Undo_btn->SetBitmap(wxBitmap(from_u8(var("bullet_white.png")), wxBITMAP_TYPE_PNG)); + m_Undo_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent){ on_back_to_initial_value(); })); + + BUILD(); + } + 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 @@ -34,6 +45,12 @@ namespace Slic3r { namespace GUI { m_on_change(m_opt_id, get_value()); } + void Field::on_back_to_initial_value() + { + if (m_back_to_initial_value != nullptr && m_is_modified_value) + m_back_to_initial_value(m_opt_id); + } + wxString Field::get_tooltip_text(const wxString& default_string) { wxString tooltip_text(""); @@ -187,6 +204,17 @@ void CheckBox::BUILD() { window = dynamic_cast(temp); } +boost::any CheckBox::get_value() +{ + boost::any ret_val; + bool value = dynamic_cast(window)->GetValue(); + if (m_opt.type == coBool) + ret_val = static_cast(value); + else + ret_val = static_cast(value); + return ret_val; +} + int undef_spin_val = -9999; //! Probably, It's not necessary void SpinCtrl::BUILD() { @@ -217,8 +245,13 @@ void SpinCtrl::BUILD() { break; } + const int min_val = m_opt_id == "standby_temperature_delta" ? + -500 : m_opt.min > 0 ? + m_opt.min : 0; + const int max_val = m_opt.max < 2147483647 ? m_opt.max : 2147483647; + 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); + 0, min_val, max_val, 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()); @@ -228,7 +261,7 @@ void SpinCtrl::BUILD() { // # 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 +// # 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); @@ -261,8 +294,10 @@ void Choice::BUILD() { 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)); + for (auto el : m_opt.enum_labels.empty() ? m_opt.enum_values : m_opt.enum_labels){ + const wxString& str = m_opt_id == "support" ? L_str(el) : el; + temp->Append(str); + } set_selection(); } temp->Bind(wxEVT_TEXT, ([this](wxCommandEvent e) { on_change_field(); }), temp->GetId()); @@ -330,9 +365,9 @@ void Choice::set_selection() } } -void Choice::set_value(const std::string value) //! Redundant? +void Choice::set_value(const std::string value, bool change_event) //! Redundant? { - m_disable_change_event = true; + m_disable_change_event = !change_event; size_t idx=0; for (auto el : m_opt.enum_values) @@ -349,9 +384,9 @@ void Choice::set_value(const std::string value) //! Redundant? m_disable_change_event = false; } -void Choice::set_value(boost::any value) +void Choice::set_value(boost::any value, bool change_event) { - m_disable_change_event = true; + m_disable_change_event = !change_event; switch (m_opt.type){ case coInt: @@ -394,7 +429,7 @@ void Choice::set_values(const std::vector values) return; m_disable_change_event = true; -// # it looks that Clear() also clears the text field in recent wxWidgets versions, +// # 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(); @@ -411,6 +446,9 @@ boost::any Choice::get_value() boost::any ret_val; wxString ret_str = static_cast(window)->GetValue(); + if (m_opt_id == "support") + return ret_str; + if (m_opt.type != coEnum) ret_val = get_value_by_opt_type(ret_str); else @@ -503,9 +541,9 @@ void PointCtrl::BUILD() y_textctrl->SetToolTip(get_tooltip_text(X+", "+Y)); } -void PointCtrl::set_value(const Pointf value) +void PointCtrl::set_value(const Pointf value, bool change_event) { - m_disable_change_event = true; + m_disable_change_event = !change_event; double val = value.x; x_textctrl->SetValue(val - int(val) == 0 ? wxString::Format(_T("%i"), int(val)) : wxNumberFormatter::ToString(val, 2, wxNumberFormatter::Style_None)); @@ -515,7 +553,7 @@ void PointCtrl::set_value(const Pointf value) m_disable_change_event = false; } -void PointCtrl::set_value(boost::any value) +void PointCtrl::set_value(boost::any value, bool change_event) { Pointf pt; Pointf *ptf = boost::any_cast(&value); @@ -541,7 +579,7 @@ void PointCtrl::set_value(boost::any value) // return; // } // } - set_value(pt); + set_value(pt, change_event); } boost::any PointCtrl::get_value() diff --git a/xs/src/slic3r/GUI/Field.hpp b/xs/src/slic3r/GUI/Field.hpp index 492629b41..2ddb5d9f8 100644 --- a/xs/src/slic3r/GUI/Field.hpp +++ b/xs/src/slic3r/GUI/Field.hpp @@ -18,6 +18,13 @@ //#include "slic3r_gui.hpp" #include "GUI.hpp" +#include "Utils.hpp" + +#ifdef __WXMSW__ +#define wxMSW true +#else +#define wxMSW false +#endif namespace Slic3r { namespace GUI { @@ -25,13 +32,14 @@ class Field; using t_field = std::unique_ptr; using t_kill_focus = std::function; using t_change = std::function; +using t_back_to_init = std::function; wxString double_to_string(double const value); class Field { protected: // factory function to defer and enforce creation of derived type. - virtual void PostInitialize() { BUILD(); } + virtual void PostInitialize(); /// Finish constructing the Field's wxWidget-related properties, including setting its own sizer, etc. virtual void BUILD() = 0; @@ -42,6 +50,8 @@ protected: void on_kill_focus(wxEvent& event); /// Call the attached on_change method. void on_change_field(); + /// Call the attached m_back_to_initial_value method. + void on_back_to_initial_value(); public: /// parent wx item, opportunity to refactor (probably not necessary - data duplication) @@ -53,8 +63,13 @@ public: /// Function object to store callback passed in from owning object. t_change m_on_change {nullptr}; + /// Function object to store callback passed in from owning object. + t_back_to_init m_back_to_initial_value{ nullptr }; + // This is used to avoid recursive invocation of the field change/update by wxWidgets. bool m_disable_change_event {false}; + // This is used to avoid recursive invocation of the field change/update by wxWidgets. + bool m_is_modified_value {false}; /// Copy of ConfigOption for deduction purposes const ConfigOptionDef m_opt {ConfigOptionDef()}; @@ -63,7 +78,7 @@ public: /// 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; + virtual void set_value(boost::any value, bool change_event) = 0; /// Gets a boost::any representing this control. /// subclasses should overload with a specific version @@ -72,6 +87,9 @@ public: virtual void enable() = 0; virtual void disable() = 0; + wxStaticText* m_Label = nullptr; + wxButton* m_Undo_btn = nullptr; + /// Fires the enable or disable function, based on the input. inline void toggle(bool en) { en ? enable() : disable(); } @@ -85,7 +103,7 @@ public: virtual wxWindow* getWindow() { return nullptr; } bool is_matched(std::string string, std::string pattern); - boost::any get_value_by_opt_type(wxString str); + boost::any get_value_by_opt_type(wxString str); /// Factory method for generating new derived classes. template @@ -116,13 +134,13 @@ public: void BUILD(); wxWindow* window {nullptr}; - virtual void set_value(std::string value) { - m_disable_change_event = true; + virtual void set_value(std::string value, bool change_event = false) { + m_disable_change_event = !change_event; dynamic_cast(window)->SetValue(wxString(value)); m_disable_change_event = false; } - virtual void set_value(boost::any value) { - m_disable_change_event = true; + virtual void set_value(boost::any value, bool change_event = false) { + m_disable_change_event = !change_event; dynamic_cast(window)->SetValue(boost::any_cast(value)); m_disable_change_event = false; } @@ -143,19 +161,17 @@ public: wxWindow* window{ nullptr }; void BUILD() override; - void set_value(const bool value) { - m_disable_change_event = true; + void set_value(const bool value, bool change_event = false) { + m_disable_change_event = !change_event; dynamic_cast(window)->SetValue(value); m_disable_change_event = false; } - void set_value(boost::any value) { - m_disable_change_event = true; + void set_value(boost::any value, bool change_event = false) { + m_disable_change_event = !change_event; 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()); - } + boost::any get_value() override; void enable() override { dynamic_cast(window)->Enable(); } void disable() override { dynamic_cast(window)->Disable(); } @@ -173,13 +189,13 @@ public: wxWindow* window{ nullptr }; void BUILD() override; - void set_value(const std::string value) { - m_disable_change_event = true; + void set_value(const std::string value, bool change_event = false) { + m_disable_change_event = !change_event; dynamic_cast(window)->SetValue(value); m_disable_change_event = false; } - void set_value(boost::any value) { - m_disable_change_event = true; + void set_value(boost::any value, bool change_event = false) { + m_disable_change_event = !change_event; dynamic_cast(window)->SetValue(boost::any_cast(value)); m_disable_change_event = false; } @@ -202,8 +218,8 @@ public: void BUILD() override; void set_selection(); - void set_value(const std::string value); - void set_value(boost::any value); + void set_value(const std::string value, bool change_event = false); + void set_value(boost::any value, bool change_event = false); void set_values(const std::vector values); boost::any get_value() override; @@ -221,13 +237,13 @@ public: wxWindow* window{ nullptr }; void BUILD() override; - void set_value(const std::string value) { - m_disable_change_event = true; + void set_value(const std::string value, bool change_event = false) { + m_disable_change_event = !change_event; dynamic_cast(window)->SetColour(value); m_disable_change_event = false; } - void set_value(boost::any value) { - m_disable_change_event = true; + void set_value(boost::any value, bool change_event = false) { + m_disable_change_event = !change_event; dynamic_cast(window)->SetColour(boost::any_cast(value)); m_disable_change_event = false; } @@ -251,8 +267,8 @@ public: void BUILD() override; - void set_value(const Pointf value); - void set_value(boost::any value); + void set_value(const Pointf value, bool change_event = false); + void set_value(boost::any value, bool change_event = false); boost::any get_value() override; void enable() override { diff --git a/xs/src/slic3r/GUI/GUI.cpp b/xs/src/slic3r/GUI/GUI.cpp index 6b8613cb0..0410b7969 100644 --- a/xs/src/slic3r/GUI/GUI.cpp +++ b/xs/src/slic3r/GUI/GUI.cpp @@ -45,6 +45,7 @@ #include "AppConfig.hpp" #include "Utils.hpp" #include "Preferences.hpp" +#include "PresetBundle.hpp" namespace Slic3r { namespace GUI { @@ -172,11 +173,15 @@ wxApp *g_wxApp = nullptr; wxFrame *g_wxMainFrame = nullptr; wxNotebook *g_wxTabPanel = nullptr; AppConfig *g_AppConfig = nullptr; +PresetBundle *g_PresetBundle= nullptr; std::vector g_tabs_list; wxLocale* g_wxLocale; +std::shared_ptr m_optgroup; +double m_brim_width = 0.0; + void set_wxapp(wxApp *app) { g_wxApp = app; @@ -197,6 +202,11 @@ void set_app_config(AppConfig *app_config) g_AppConfig = app_config; } +void set_preset_bundle(PresetBundle *preset_bundle) +{ + g_PresetBundle = preset_bundle; +} + std::vector& get_tabs_list() { return g_tabs_list; @@ -240,6 +250,7 @@ bool select_language(wxArrayString & names, g_wxLocale->Init(identifiers[index]); g_wxLocale->AddCatalogLookupPathPrefix(wxPathOnly(localization_dir())); g_wxLocale->AddCatalog(g_wxApp->GetAppName()); + wxSetlocale(LC_NUMERIC, "C"); return true; } return false; @@ -268,6 +279,7 @@ bool load_language() g_wxLocale->Init(identifiers[i]); g_wxLocale->AddCatalogLookupPathPrefix(wxPathOnly(localization_dir())); g_wxLocale->AddCatalog(g_wxApp->GetAppName()); + wxSetlocale(LC_NUMERIC, "C"); return true; } } @@ -346,26 +358,17 @@ void open_preferences_dialog(int event_preferences) dlg->ShowModal(); } -void create_preset_tabs(PresetBundle *preset_bundle, - 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) +void create_preset_tabs(bool no_controller, int event_value_change, int event_presets_changed) { - add_created_tab(new TabPrint (g_wxTabPanel, no_controller), preset_bundle); - add_created_tab(new TabFilament (g_wxTabPanel, no_controller), preset_bundle); - add_created_tab(new TabPrinter (g_wxTabPanel, no_controller, is_disabled_button_browse, is_user_agent), - preset_bundle); + add_created_tab(new TabPrint (g_wxTabPanel, no_controller)); + add_created_tab(new TabFilament (g_wxTabPanel, no_controller)); + add_created_tab(new TabPrinter (g_wxTabPanel, no_controller)); 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)); - } } } @@ -419,9 +422,13 @@ void change_opt_value(DynamicPrintConfig& config, t_config_option_key opt_key, b config.set_key_value(opt_key, new ConfigOptionString(boost::any_cast(value))); break; case coStrings:{ - if (opt_key.compare("compatible_printers") == 0){ + if (opt_key.compare("compatible_printers") == 0 || + config.def()->get(opt_key)->gui_flags.compare("serialized") == 0){ config.option(opt_key)->values.resize(0); - for (auto el : boost::any_cast>(value)) + std::vector values = boost::any_cast>(value); + if (values.size() == 1 && values[0] == "") + break; + for (auto el : values) config.option(opt_key)->values.push_back(el); } else{ @@ -434,7 +441,7 @@ void change_opt_value(DynamicPrintConfig& config, t_config_option_key opt_key, b config.set_key_value(opt_key, new ConfigOptionBool(boost::any_cast(value))); break; case coBools:{ - ConfigOptionBools* vec_new = new ConfigOptionBools{ boost::any_cast(value) }; + ConfigOptionBools* vec_new = new ConfigOptionBools{ (bool)boost::any_cast(value) }; config.option(opt_key)->set_at(vec_new, opt_index, 0); break;} case coInt: @@ -458,9 +465,8 @@ void change_opt_value(DynamicPrintConfig& config, t_config_option_key opt_key, b } break; case coPoints:{ - ConfigOptionPoints points; - points.values = boost::any_cast>(value); - config.set_key_value(opt_key, new ConfigOptionPoints(points)); + ConfigOptionPoints* vec_new = new ConfigOptionPoints{ boost::any_cast(value) }; + config.option(opt_key)->set_at(vec_new, opt_index, 0); } break; case coNone: @@ -475,9 +481,9 @@ void change_opt_value(DynamicPrintConfig& config, t_config_option_key opt_key, b } } -void add_created_tab(Tab* panel, PresetBundle *preset_bundle) +void add_created_tab(Tab* panel) { - panel->create_preset_tab(preset_bundle); + panel->create_preset_tab(g_PresetBundle); // Load the currently selected preset into the GUI, update the preset selection box. panel->load_current_preset(); @@ -505,6 +511,11 @@ wxApp* get_app(){ return g_wxApp; } +wxColour* get_modified_label_clr() +{ + return new wxColour(253, 88, 0); +} + void create_combochecklist(wxComboCtrl* comboCtrl, std::string text, std::string items, bool initial_value) { if (comboCtrl == nullptr) @@ -562,29 +573,117 @@ AppConfig* get_app_config() return g_AppConfig; } -wxString L_str(std::string str) +wxString L_str(const std::string &str) { //! Explicitly specify that the source string is already in UTF-8 encoding return wxGetTranslation(wxString(str.c_str(), wxConvUTF8)); } -wxString from_u8(std::string str) +wxString from_u8(const std::string &str) { return wxString::FromUTF8(str.c_str()); } -wxWindow *get_widget_by_id(int id) + +void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFlexGridSizer* preset_sizer) { - if (g_wxMainFrame == nullptr) { - throw std::runtime_error("Main frame not set"); - } + DynamicPrintConfig* config = &g_PresetBundle->prints.get_edited_preset().config; + m_optgroup = std::make_shared(parent, "", config); + const wxArrayInt& ar = preset_sizer->GetColWidths(); + m_optgroup->label_width = ar.IsEmpty() ? 100 : ar.front(); + m_optgroup->m_on_change = [config](t_config_option_key opt_key, boost::any value){ + TabPrint* tab_print = nullptr; + for (size_t i = 0; i < g_wxTabPanel->GetPageCount(); ++i) { + Tab *tab = dynamic_cast(g_wxTabPanel->GetPage(i)); + if (!tab) + continue; + if (tab->name() == "print"){ + tab_print = static_cast(tab); + break; + } + } + if (tab_print == nullptr) + return; - wxWindow *window = g_wxMainFrame->FindWindow(id); - if (window == nullptr) { - throw std::runtime_error((boost::format("Could not find widget by ID: %1%") % id).str()); - } + if (opt_key == "fill_density"){ + value = m_optgroup->get_config_value(*config, opt_key); + tab_print->set_value(opt_key, value); + tab_print->update(); + } + else{ + DynamicPrintConfig new_conf = *config; + if (opt_key == "brim"){ + double new_val; + double brim_width = config->opt_float("brim_width"); + if (boost::any_cast(value) == true) + { + new_val = m_brim_width == 0.0 ? 10 : + m_brim_width < 0.0 ? m_brim_width * (-1) : + m_brim_width; + } + else{ + m_brim_width = brim_width * (-1); + new_val = 0; + } + new_conf.set_key_value("brim_width", new ConfigOptionFloat(new_val)); + } + else{ //(opt_key == "support") + const wxString& selection = boost::any_cast(value); + + auto support_material = selection == _("None") ? false : true; + new_conf.set_key_value("support_material", new ConfigOptionBool(support_material)); - return window; + if (selection == _("Everywhere")) + new_conf.set_key_value("support_material_buildplate_only", new ConfigOptionBool(false)); + else if (selection == _("Support on build plate only")) + new_conf.set_key_value("support_material_buildplate_only", new ConfigOptionBool(true)); + } + tab_print->load_config(new_conf); + } + + tab_print->update_dirty(); + }; + + const int width = 250; + Option option = m_optgroup->get_option("fill_density"); + option.opt.sidetext = ""; + option.opt.width = width; + m_optgroup->append_single_option_line(option); + + ConfigOptionDef def; + + def.label = L("Support"); + def.type = coStrings; + def.gui_type = "select_open"; + def.tooltip = L("Select what kind of support do you need"); + def.enum_labels.push_back(L("None")); + def.enum_labels.push_back(L("Support on build plate only")); + def.enum_labels.push_back(L("Everywhere")); + std::string selection = !config->opt_bool("support_material") ? + "None" : + config->opt_bool("support_material_buildplate_only") ? + "Support on build plate only" : + "Everywhere"; + def.default_value = new ConfigOptionStrings { selection }; + option = Option(def, "support"); + option.opt.width = width; + m_optgroup->append_single_option_line(option); + + m_brim_width = config->opt_float("brim_width"); + def.label = L("Brim"); + def.type = coBool; + def.tooltip = L("This flag enables the brim that will be printed around each object on the first layer."); + def.gui_type = ""; + def.default_value = new ConfigOptionBool{ m_brim_width > 0.0 ? true : false }; + option = Option(def, "brim"); + m_optgroup->append_single_option_line(option); + + sizer->Add(m_optgroup->sizer, 0, wxEXPAND | wxBOTTOM | wxBottom, 1); +} + +ConfigOptionsGroup* get_optgroup() +{ + return m_optgroup.get(); } } } diff --git a/xs/src/slic3r/GUI/GUI.hpp b/xs/src/slic3r/GUI/GUI.hpp index d9760ebf3..084b6de46 100644 --- a/xs/src/slic3r/GUI/GUI.hpp +++ b/xs/src/slic3r/GUI/GUI.hpp @@ -15,6 +15,9 @@ class wxComboCtrl; class wxString; class wxArrayString; class wxArrayLong; +class wxColour; +class wxBoxSizer; +class wxFlexGridSizer; namespace Slic3r { @@ -36,11 +39,12 @@ class TabIface; #define _CHB(s) wxGetTranslation(wxString(s, wxConvUTF8)).utf8_str() // Minimal buffer length for translated string (char buf[MIN_BUF_LENGTH_FOR_L]) -#define MIN_BUF_LENGTH_FOR_L 128 +#define MIN_BUF_LENGTH_FOR_L 512 namespace GUI { class Tab; +class ConfigOptionsGroup; // 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() { @@ -70,9 +74,11 @@ void set_wxapp(wxApp *app); void set_main_frame(wxFrame *main_frame); void set_tab_panel(wxNotebook *tab_panel); void set_app_config(AppConfig *app_config); +void set_preset_bundle(PresetBundle *preset_bundle); AppConfig* get_app_config(); wxApp* get_app(); +wxColour* get_modified_label_clr(); void add_debug_menu(wxMenuBar *menu, int event_language_change); @@ -80,14 +86,11 @@ void add_debug_menu(wxMenuBar *menu, int event_language_change); void open_preferences_dialog(int event_preferences); // Create a new preset tab (print, filament and printer), -void create_preset_tabs(PresetBundle *preset_bundle, - 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); +void create_preset_tabs(bool no_controller, int event_value_change, int event_presets_changed); TabIface* get_preset_tab_iface(char *name); // add it at the end of the tab panel. -void add_created_tab(Tab* panel, PresetBundle *preset_bundle); +void add_created_tab(Tab* panel); // Change option value in config void change_opt_value(DynamicPrintConfig& config, t_config_option_key opt_key, boost::any value, int opt_index = 0); @@ -118,11 +121,14 @@ void create_combochecklist(wxComboCtrl* comboCtrl, std::string text, std::string int combochecklist_get_flags(wxComboCtrl* comboCtrl); // Return translated std::string as a wxString -wxString L_str(std::string str); +wxString L_str(const std::string &str); // Return wxString from std::string in UTF8 -wxString from_u8(std::string str); +wxString from_u8(const std::string &str); -wxWindow *get_widget_by_id(int id); + +void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFlexGridSizer* preset_sizer); + +ConfigOptionsGroup* get_optgroup(); } } diff --git a/xs/src/slic3r/GUI/OptionsGroup.cpp b/xs/src/slic3r/GUI/OptionsGroup.cpp index f88b3f8c0..0be24824c 100644 --- a/xs/src/slic3r/GUI/OptionsGroup.cpp +++ b/xs/src/slic3r/GUI/OptionsGroup.cpp @@ -3,18 +3,21 @@ #include #include +#include +#include +#include "Utils.hpp" 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 Option& opt, wxStaticText* label/* = nullptr*/) { + return build_field(opt.opt_id, opt.opt, label); } -const t_field& OptionsGroup::build_field(const t_config_option_key& id) { +const t_field& OptionsGroup::build_field(const t_config_option_key& id, wxStaticText* label/* = nullptr*/) { const ConfigOptionDef& opt = m_options.at(id).opt; - return build_field(id, opt); + return build_field(id, opt, label); } -const t_field& OptionsGroup::build_field(const t_config_option_key& id, const ConfigOptionDef& opt) { +const t_field& OptionsGroup::build_field(const t_config_option_key& id, const ConfigOptionDef& opt, wxStaticText* label/* = nullptr*/) { // Check the gui_type field first, fall through // is the normal type. if (opt.gui_type.compare("select") == 0) { @@ -72,7 +75,16 @@ const t_field& OptionsGroup::build_field(const t_config_option_key& id, const Co this->on_kill_focus(); }; field->m_parent = parent(); - // assign function objects for callbacks, etc. + + //! Label to change background color, when option is modified + field->m_Label = label; + field->m_back_to_initial_value = [this](std::string opt_id){ + if (!this->m_disabled) + this->back_to_initial_value(opt_id); + }; + if (!m_is_tab_opt) field->m_Undo_btn->Hide(); + + // assign function objects for callbacks, etc. return field; } @@ -100,6 +112,7 @@ void OptionsGroup::append_line(const Line& line) { const auto& option = option_set.front(); const auto& field = build_field(option); + sizer->Add(field->m_Undo_btn); if (is_window_field(field)) sizer->Add(field->getWindow(), 0, wxEXPAND | wxALL, wxOSX ? 0 : 5); if (is_sizer_field(field)) @@ -110,8 +123,9 @@ void OptionsGroup::append_line(const Line& line) { auto grid_sizer = m_grid_sizer; // Build a label if we have it + wxStaticText* label=nullptr; if (label_width != 0) { - auto label = new wxStaticText(parent(), wxID_ANY, line.label + (line.label.IsEmpty() ? "" : ":"), + 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 @@ -128,25 +142,24 @@ void OptionsGroup::append_line(const Line& line) { } // 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"; + auto sizer = new wxBoxSizer(wxHORIZONTAL); + grid_sizer->Add(sizer, 0, wxEXPAND | wxALL, 0); + 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, label); - if (is_window_field(field)) - grid_sizer->Add(field->getWindow(), 0, (option.opt.full_width ? wxEXPAND : 0) | + sizer->Add(field->m_Undo_btn, 0, wxALIGN_CENTER_VERTICAL); + if (is_window_field(field)) + 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 (is_sizer_field(field)) + 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 @@ -156,14 +169,15 @@ void OptionsGroup::append_line(const Line& line) { // wxString str_label = (option.label == "Top" || option.label == "Bottom") ? // wxGETTEXT_IN_CONTEXT("Layers", wxString(option.label.c_str()): // L_str(option.label); - auto field_label = new wxStaticText(parent(), wxID_ANY, str_label + ":", wxDefaultPosition, wxDefaultSize); - field_label->SetFont(label_font); - sizer->Add(field_label, 0, wxALIGN_CENTER_VERTICAL, 0); + label = new wxStaticText(parent(), wxID_ANY, str_label + ":", wxDefaultPosition, wxDefaultSize); + label->SetFont(label_font); + sizer->Add(label, 0, wxALIGN_CENTER_VERTICAL, 0); } // add field const Option& opt_ref = opt; - auto& field = build_field(opt_ref); + auto& field = build_field(opt_ref, label); + sizer->Add(field->m_Undo_btn, 0, wxALIGN_CENTER_VERTICAL, 0); is_sizer_field(field) ? sizer->Add(field->getSizer(), 0, wxALIGN_CENTER_VERTICAL, 0) : sizer->Add(field->getWindow(), 0, wxALIGN_CENTER_VERTICAL, 0); @@ -244,6 +258,12 @@ void ConfigOptionsGroup::on_change_OG(t_config_option_key opt_id, boost::any val // # Currently used for the post_process config value only. // my @values = split / ; / , $field_value; // $self->config->set($opt_key, \@values); + std::string str = boost::any_cast(value); + if (str.back() == ';') + str.pop_back(); + std::vector values; + boost::split(values, str, boost::is_any_of(";")); + change_opt_value(*m_config, opt_key, values); } else { if (opt_index == -1) { @@ -263,6 +283,30 @@ void ConfigOptionsGroup::on_change_OG(t_config_option_key opt_id, boost::any val OptionsGroup::on_change_OG(opt_id, value); //!? Why doing this } +void ConfigOptionsGroup::back_to_initial_value(const std::string opt_key) +{ + if (m_get_initial_config == nullptr) + return; + DynamicPrintConfig config = m_get_initial_config(); + boost::any value; + if (opt_key == "extruders_count"){ + auto *nozzle_diameter = dynamic_cast(config.option("nozzle_diameter")); + value = int(nozzle_diameter->values.size()); + } + else if (m_opt_map.find(opt_key) != m_opt_map.end()) + { + auto opt_id = m_opt_map.find(opt_key)->first; + std::string opt_short_key = m_opt_map.at(opt_id).first; + int opt_index = m_opt_map.at(opt_id).second; + value = get_config_value(config, opt_short_key, opt_index); + } + else + value = get_config_value(config, opt_key); + + set_value(opt_key, value); + on_change_OG(opt_key, get_value(opt_key)); +} + 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; @@ -323,7 +367,7 @@ boost::any ConfigOptionsGroup::get_config_value(DynamicPrintConfig& config, std: double val = opt->type == coFloats ? config.opt_float(opt_key, idx) : opt->type == coFloat ? config.opt_float(opt_key) : - config.option(opt_key)->values.at(idx); + config.option(opt_key)->get_at(idx); ret = double_to_string(val); } break; @@ -333,6 +377,12 @@ boost::any ConfigOptionsGroup::get_config_value(DynamicPrintConfig& config, std: case coStrings: if (config.option(opt_key)->values.empty()) ret = text_value; + else if (opt->gui_flags.compare("serialized") == 0){ + std::vector values = config.option(opt_key)->values; + for (auto el : values) + text_value += el + ";"; + ret = text_value; + } else ret = static_cast(config.opt_string(opt_key, static_cast(idx))); break; @@ -363,10 +413,8 @@ boost::any ConfigOptionsGroup::get_config_value(DynamicPrintConfig& config, std: ret = static_cast(config.option>(opt_key)->value); } break; - case coPoints:{ - const auto &value = *config.option(opt_key); - ret = value.values.at(idx); - } + case coPoints: + ret = config.option(opt_key)->get_at(idx); break; case coNone: default: @@ -376,6 +424,9 @@ boost::any ConfigOptionsGroup::get_config_value(DynamicPrintConfig& config, std: } Field* ConfigOptionsGroup::get_fieldc(t_config_option_key opt_key, int opt_index){ + Field* field = get_field(opt_key); + if (field != nullptr) + return field; 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){ diff --git a/xs/src/slic3r/GUI/OptionsGroup.hpp b/xs/src/slic3r/GUI/OptionsGroup.hpp index 6e88d1d88..aa0563866 100644 --- a/xs/src/slic3r/GUI/OptionsGroup.hpp +++ b/xs/src/slic3r/GUI/OptionsGroup.hpp @@ -27,6 +27,9 @@ namespace Slic3r { namespace GUI { using widget_t = std::function;//!std::function; using column_t = std::function; +//auto default_label_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT); //GetSystemColour +//auto modified_label_clr = *new wxColour(254, 189, 101); + /// Wraps a ConfigOptionDef and adds function object for creating a side_widget. struct Option { ConfigOptionDef opt { ConfigOptionDef() }; @@ -75,6 +78,7 @@ public: wxSizer* sizer {nullptr}; column_t extra_column {nullptr}; t_change m_on_change {nullptr}; + std::function m_get_initial_config{ nullptr }; wxFont sidetext_font {wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT) }; wxFont label_font {wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT) }; @@ -93,9 +97,9 @@ public: if (m_fields.find(id) == m_fields.end()) return nullptr; return m_fields.at(id).get(); } - bool set_value(t_config_option_key id, boost::any value) { + bool set_value(t_config_option_key id, boost::any value, bool change_event = false) { if (m_fields.find(id) == m_fields.end()) return false; - m_fields.at(id)->set_value(value); + m_fields.at(id)->set_value(value, change_event); return true; } boost::any get_value(t_config_option_key id) { @@ -109,8 +113,8 @@ public: inline void enable() { for (auto& field : m_fields) field.second->enable(); } inline void disable() { for (auto& field : m_fields) field.second->disable(); } - OptionsGroup(wxWindow* _parent, wxString title) : - m_parent(_parent), title(title) { + OptionsGroup(wxWindow* _parent, wxString title, bool is_tab_opt=false) : + m_parent(_parent), title(title), m_is_tab_opt(is_tab_opt), staticbox(title!="") { sizer = (staticbox ? new wxStaticBoxSizer(new wxStaticBox(_parent, wxID_ANY, title), wxVERTICAL) : new wxBoxSizer(wxVERTICAL)); auto num_columns = 1U; if (label_width != 0) num_columns++; @@ -132,22 +136,25 @@ protected: t_optionfield_map m_fields; bool m_disabled {false}; wxGridSizer* m_grid_sizer {nullptr}; + // "true" if option is created in preset tabs + bool m_is_tab_opt{ false }; /// Generate a wxSizer or wxWindow from a configuration option /// Precondition: opt resolves to a known ConfigOption /// Postcondition: fields contains a wx gui object. - const t_field& build_field(const t_config_option_key& id, const ConfigOptionDef& opt); - const t_field& build_field(const t_config_option_key& id); - const t_field& build_field(const Option& opt); + const t_field& build_field(const t_config_option_key& id, const ConfigOptionDef& opt, wxStaticText* label = nullptr); + const t_field& build_field(const t_config_option_key& id, wxStaticText* label = nullptr); + const t_field& build_field(const Option& opt, wxStaticText* label = nullptr); virtual void on_kill_focus (){}; virtual void on_change_OG(t_config_option_key opt_id, boost::any value); + virtual void back_to_initial_value(const std::string opt_key){}; }; class ConfigOptionsGroup: public OptionsGroup { public: - ConfigOptionsGroup(wxWindow* parent, wxString title, DynamicPrintConfig* _config = nullptr) : - OptionsGroup(parent, title), m_config(_config) {} + ConfigOptionsGroup(wxWindow* parent, wxString title, DynamicPrintConfig* _config = nullptr, bool is_tab_opt = false) : + OptionsGroup(parent, title, is_tab_opt), m_config(_config) {} /// reference to libslic3r config, non-owning pointer (?). DynamicPrintConfig* m_config {nullptr}; @@ -169,10 +176,8 @@ public: } void on_change_OG(t_config_option_key opt_id, boost::any value) override; - void on_kill_focus() override - { - reload_config(); - } + void back_to_initial_value(const std::string opt_key) override; + void on_kill_focus() override{ reload_config();} void reload_config(); boost::any config_value(std::string opt_key, int opt_index, bool deserialize); // return option value from config diff --git a/xs/src/slic3r/GUI/Preset.cpp b/xs/src/slic3r/GUI/Preset.cpp index 52717e1fc..aa1917bd5 100644 --- a/xs/src/slic3r/GUI/Preset.cpp +++ b/xs/src/slic3r/GUI/Preset.cpp @@ -226,7 +226,7 @@ const std::vector& Preset::printer_options() "bed_shape", "z_offset", "gcode_flavor", "use_relative_e_distances", "serial_port", "serial_speed", "octoprint_host", "octoprint_apikey", "octoprint_cafile", "use_firmware_retraction", "use_volumetric_e", "variable_layer_height", "single_extruder_multi_material", "start_gcode", "end_gcode", "before_layer_gcode", "layer_gcode", "toolchange_gcode", - "between_objects_gcode", "printer_notes" + "between_objects_gcode", "printer_notes", "max_print_height" }; s_opts.insert(s_opts.end(), Preset::nozzle_options().begin(), Preset::nozzle_options().end()); } diff --git a/xs/src/slic3r/GUI/PresetHints.cpp b/xs/src/slic3r/GUI/PresetHints.cpp index 07c8e3b07..d4c929c1c 100644 --- a/xs/src/slic3r/GUI/PresetHints.cpp +++ b/xs/src/slic3r/GUI/PresetHints.cpp @@ -13,10 +13,11 @@ namespace Slic3r { +#define MIN_BUF_LENGTH 4096 std::string PresetHints::cooling_description(const Preset &preset) { std::string out; - char buf[4096]; + char buf[MIN_BUF_LENGTH/*4096*/]; if (preset.config.opt_bool("cooling", 0)) { int slowdown_below_layer_time = preset.config.opt_int("slowdown_below_layer_time", 0); int min_fan_speed = preset.config.opt_int("min_fan_speed", 0); @@ -220,7 +221,7 @@ std::string PresetHints::maximum_volumetric_flow_description(const PresetBundle + _CHB(L(" with a volumetric rate ")); if (limited_by_max_volumetric_speed) max_flow = max_volumetric_speed; - char buf[2048]; + char buf[MIN_BUF_LENGTH/*2048*/]; sprintf(buf, _CHB(L("%3.2f mm³/s")), max_flow); out += buf; sprintf(buf, _CHB(L(" at filament speed %3.2f mm/s.")), max_flow / filament_crossection); @@ -258,7 +259,7 @@ std::string PresetHints::recommended_thin_wall_thickness(const PresetBundle &pre if (num_perimeters > 0) { int num_lines = std::min(num_perimeters * 2, 10); - char buf[256]; + char buf[MIN_BUF_LENGTH/*256*/]; sprintf(buf, _CHB(L("Recommended object thin wall thickness for layer height %.2f and ")), layer_height); out += buf; // Start with the width of two closely spaced diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index 7ce6790a1..d0f9f0ce3 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -3,6 +3,9 @@ #include "PresetBundle.hpp" #include "PresetHints.hpp" #include "../../libslic3r/Utils.hpp" +#include "slic3r/Utils/Http.hpp" +#include "slic3r/Utils/OctoPrint.hpp" +#include "BonjourDialog.hpp" #include #include @@ -14,6 +17,7 @@ #include #include #include +#include #include @@ -33,19 +37,23 @@ void Tab::create_preset_tab(PresetBundle *preset_bundle) // preset chooser m_presets_choice = new wxBitmapComboBox(panel, wxID_ANY, "", wxDefaultPosition, wxSize(270, -1), 0, 0,wxCB_READONLY); - const wxBitmap* bmp = new wxBitmap(from_u8(Slic3r::var("flag-green-icon.png")), wxBITMAP_TYPE_PNG); + + auto color = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); //buttons wxBitmap bmpMenu; bmpMenu = wxBitmap(from_u8(Slic3r::var("disk.png")), wxBITMAP_TYPE_PNG); m_btn_save_preset = new wxBitmapButton(panel, wxID_ANY, bmpMenu, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); + if (wxMSW) m_btn_save_preset->SetBackgroundColour(color); bmpMenu = wxBitmap(from_u8(Slic3r::var("delete.png")), wxBITMAP_TYPE_PNG); m_btn_delete_preset = new wxBitmapButton(panel, wxID_ANY, bmpMenu, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); + if (wxMSW) m_btn_delete_preset->SetBackgroundColour(color); m_show_incompatible_presets = false; m_bmp_show_incompatible_presets = new wxBitmap(from_u8(Slic3r::var("flag-red-icon.png")), wxBITMAP_TYPE_PNG); m_bmp_hide_incompatible_presets = new wxBitmap(from_u8(Slic3r::var("flag-green-icon.png")), wxBITMAP_TYPE_PNG); m_btn_hide_incompatible_presets = new wxBitmapButton(panel, wxID_ANY, *m_bmp_hide_incompatible_presets, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); + if (wxMSW) m_btn_hide_incompatible_presets->SetBackgroundColour(color); m_btn_save_preset->SetToolTip(_(L("Save current ")) + m_title); m_btn_delete_preset->SetToolTip(_(L("Delete this preset"))); @@ -93,6 +101,7 @@ void Tab::create_preset_tab(PresetBundle *preset_bundle) if (selected_item >= 0){ std::string selected_string = m_presets_choice->GetString(selected_item).ToUTF8().data(); select_preset(selected_string); + update_changed_ui(); } })); @@ -134,11 +143,93 @@ PageShp Tab::add_options_page(wxString title, std::string icon, bool is_extruder return page; } +template +void add_correct_opts_to_dirty_options(const std::string &opt_key, std::vector *vec, TabPrinter *tab) +{ + auto opt_init = static_cast(tab->m_presets->get_selected_preset().config.option(opt_key)); + auto opt_cur = static_cast(tab->m_config->option(opt_key)); + int opt_init_max_id = opt_init->values.size()-1; + for (int i = 0; i < opt_cur->values.size(); i++) + { + int init_id = i <= opt_init_max_id ? i : 0; + if (opt_cur->values[i] != opt_init->values[init_id]) + vec->emplace_back(opt_key + "#" + std::to_string(i)); + } +} + +// Update UI according to changes +void Tab::update_changed_ui() +{ + auto dirty_options = m_presets->current_dirty_options(); + + if (name() == "printer"){ + // Update dirty_options in case changes of Extruder's options + TabPrinter* tab = static_cast(this); + std::vector new_dirty; + for (auto opt_key : dirty_options) + { + switch (m_config->option(opt_key)->type()) + { + case coInts: add_correct_opts_to_dirty_options(opt_key, &new_dirty, tab); break; + case coBools: add_correct_opts_to_dirty_options(opt_key, &new_dirty, tab); break; + case coFloats: add_correct_opts_to_dirty_options(opt_key, &new_dirty, tab); break; + case coStrings: add_correct_opts_to_dirty_options(opt_key, &new_dirty, tab); break; + case coPercents:add_correct_opts_to_dirty_options(opt_key, &new_dirty, tab); break; + case coPoints: add_correct_opts_to_dirty_options(opt_key, &new_dirty, tab); break; + default: new_dirty.emplace_back(opt_key); break; + } + } + + dirty_options.resize(0); + dirty_options = new_dirty; + if (tab->m_initial_extruders_count != tab->m_extruders_count){ + dirty_options.emplace_back("extruders_count"); + } + } + + // Add new dirty options to m_dirty_options + for (auto opt_key : dirty_options){ + Field* field = get_field(opt_key); + if (field != nullptr && find(m_dirty_options.begin(), m_dirty_options.end(), opt_key) == m_dirty_options.end()){ + if (field->m_Label != nullptr){ + field->m_Label->SetForegroundColour(*get_modified_label_clr()); + field->m_Label->Refresh(true); + } + field->m_Undo_btn->SetBitmap(wxBitmap(from_u8(wxMSW ? var("action_undo.png") : var("arrow_undo.png")), wxBITMAP_TYPE_PNG)); + field->m_is_modified_value = true; + + m_dirty_options.push_back(opt_key); + } + } + + // Delete clear options from m_dirty_options + for (auto i = 0; i < m_dirty_options.size(); ++i) + { + const std::string &opt_key = m_dirty_options[i]; + Field* field = get_field(opt_key); + if (field != nullptr && find(dirty_options.begin(), dirty_options.end(), opt_key) == dirty_options.end()) + { + field->m_Undo_btn->SetBitmap(wxBitmap(from_u8(var("bullet_white.png")), wxBITMAP_TYPE_PNG)); + if (field->m_Label != nullptr){ + field->m_Label->SetForegroundColour(wxSYS_COLOUR_WINDOWTEXT); + field->m_Label->Refresh(true); + } + field->m_is_modified_value = false; + std::vector::iterator itr = find(m_dirty_options.begin(), m_dirty_options.end(), opt_key); + if (itr != m_dirty_options.end()){ + m_dirty_options.erase(itr); + --i; + } + } + } +} + // Update the combo box label of the selected preset based on its "dirty" state, // comparing the selected preset config with $self->{config}. void Tab::update_dirty(){ m_presets->update_dirty_ui(m_presets_choice); - on_presets_changed(); + on_presets_changed(); + update_changed_ui(); } void Tab::update_tab_ui() @@ -146,81 +237,13 @@ void Tab::update_tab_ui() m_presets->update_tab_ui(m_presets_choice, m_show_incompatible_presets); } -template -boost::any get_new_value(const DynamicPrintConfig &config_new, const DynamicPrintConfig &config_old, std::string opt_key, int &index) -{ - for (int i = 0; i < config_new.option(opt_key)->values.size(); i++) - if (config_new.option(opt_key)->values[i] != - config_old.option(opt_key)->values[i]){ - index = i; - break; - } - return config_new.option(opt_key)->values[index]; -} - // Load a provied DynamicConfig into the tab, modifying the active preset. // This could be used for example by setting a Wipe Tower position by interactive manipulation in the 3D view. void Tab::load_config(DynamicPrintConfig config) { bool modified = 0; - boost::any value; - int opt_index = 0; for(auto opt_key : m_config->diff(config)) { - switch ( config.def()->get(opt_key)->type ){ - case coFloatOrPercent: - value = config.option(opt_key)->value; - break; - case coPercent: - value = config.option(opt_key)->value; - break; - case coFloat: - value = config.opt_float(opt_key); - break; - case coString: - value = config.opt_string(opt_key); - break; - case coPercents: - value = get_new_value(config, *m_config, opt_key, opt_index); - break; - case coFloats: - value = get_new_value(config, *m_config, opt_key, opt_index); - break; - case coStrings: - value = config.option(opt_key)->values.empty() ? "" : - get_new_value(config, *m_config, opt_key, opt_index); - break; - case coBool: - value = config.opt_bool(opt_key); - break; - case coBools: - value = get_new_value(config, *m_config, opt_key, opt_index); - break; - case coInt: - value = config.opt_int(opt_key); - break; - case coInts: - value = get_new_value(config, *m_config, opt_key, opt_index); - break; - case coEnum:{ - if (opt_key.compare("external_fill_pattern") == 0 || - opt_key.compare("fill_pattern") == 0) - value = config.option>(opt_key)->value; - else if (opt_key.compare("gcode_flavor") == 0) - value = config.option>(opt_key)->value; - else if (opt_key.compare("support_material_pattern") == 0) - value = config.option>(opt_key)->value; - else if (opt_key.compare("seam_position") == 0) - value = config.option>(opt_key)->value; - } - break; - case coPoints: - break; - case coNone: - break; - default: - break; - } - change_opt_value(*m_config, opt_key, value, opt_index); + m_config->set_key_value(opt_key, config.option(opt_key)->clone()); modified = 1; } if (modified) { @@ -291,6 +314,27 @@ void Tab::on_value_change(std::string opt_key, boost::any value) } g_wxMainFrame->ProcessWindowEvent(event); } + if (opt_key == "fill_density") + { + value = get_optgroup()->get_config_value(*m_config, opt_key); + get_optgroup()->set_value(opt_key, value); + } + if (opt_key == "support_material" || opt_key == "support_material_buildplate_only") + { + wxString new_selection = !m_config->opt_bool("support_material") ? + _("None") : + m_config->opt_bool("support_material_buildplate_only") ? + _("Support on build plate only") : + _("Everywhere"); + get_optgroup()->set_value("support", new_selection); + } + if (opt_key == "brim_width") + { + bool val = m_config->opt_float("brim_width") > 0.0 ? true : false; + get_optgroup()->set_value("brim", val); + } + + update(); } @@ -308,6 +352,22 @@ void Tab::on_presets_changed() } } +void Tab::update_frequently_changed_parameters() +{ + boost::any value = get_optgroup()->get_config_value(*m_config, "fill_density"); + get_optgroup()->set_value("fill_density", value); + + wxString new_selection = !m_config->opt_bool("support_material") ? + _("None") : + m_config->opt_bool("support_material_buildplate_only") ? + _("Support on build plate only") : + _("Everywhere"); + get_optgroup()->set_value("support", new_selection); + + bool val = m_config->opt_float("brim_width") > 0.0 ? true : false; + get_optgroup()->set_value("brim", val); +} + void Tab::reload_compatible_printers_widget() { bool has_any = !m_config->option("compatible_printers")->values.empty(); @@ -576,7 +636,8 @@ void TabPrint::update() DynamicPrintConfig new_conf = *m_config; if (dialog->ShowModal() == wxID_YES) { const auto &val = *m_config->option("first_layer_height"); - new_conf.set_key_value("first_layer_height", new ConfigOptionFloatOrPercent(0.2, val.percent)); + auto percent = val.percent; + new_conf.set_key_value("first_layer_height", new ConfigOptionFloatOrPercent(0.2, percent)); if (m_config->opt_float("layer_height") < 0.15) new_conf.set_key_value("layer_height", new ConfigOptionFloat(0.15)); if (m_config->opt_float("layer_height") > 0.35) new_conf.set_key_value("layer_height", new ConfigOptionFloat(0.35)); @@ -674,13 +735,16 @@ void TabPrint::update() "\nShall I switch to rectilinear fill pattern?")); auto dialog = new wxMessageDialog(parent(), msg_text, _(L("Infill")), wxICON_WARNING | wxYES | wxNO); DynamicPrintConfig new_conf = *m_config; + double fill_density; if (dialog->ShowModal() == wxID_YES) { new_conf.set_key_value("fill_pattern", new ConfigOptionEnum(ipRectilinear)); - new_conf.set_key_value("fill_density", new ConfigOptionPercent(100)); + fill_density = 100; } else - new_conf.set_key_value("fill_density", new ConfigOptionPercent(40)); + fill_density = m_presets->get_selected_preset().config.option("fill_density")->value; + new_conf.set_key_value("fill_density", new ConfigOptionPercent(fill_density)); load_config(new_conf); + on_value_change("fill_density", fill_density); } } } @@ -943,14 +1007,14 @@ void TabPrinter::build() auto default_config = m_preset_bundle->full_config(); auto *nozzle_diameter = dynamic_cast(m_config->option("nozzle_diameter")); - m_extruders_count = nozzle_diameter->values.size(); + m_initial_extruders_count = m_extruders_count = nozzle_diameter->values.size(); auto page = add_options_page(_(L("General")), "printer_empty.png"); auto optgroup = page->new_optgroup(_(L("Size and coordinates"))); Line line{ _(L("Bed shape")), "" }; line.widget = [this](wxWindow* parent){ - auto btn = new wxButton(parent, wxID_ANY, _(L(" Set "))+"\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); + auto btn = new wxButton(parent, wxID_ANY, _(L(" Set "))+"\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); // btn->SetFont(Slic3r::GUI::small_font); btn->SetBitmap(wxBitmap(from_u8(Slic3r::var("printer_empty.png")), wxBITMAP_TYPE_PNG)); @@ -968,7 +1032,8 @@ void TabPrinter::build() return sizer; }; optgroup->append_line(line); - optgroup->append_single_option_line("z_offset"); + optgroup->append_single_option_line("max_print_height"); + optgroup->append_single_option_line("z_offset"); optgroup = page->new_optgroup(_(L("Capabilities"))); ConfigOptionDef def; @@ -1041,39 +1106,18 @@ void TabPrinter::build() } optgroup = page->new_optgroup(_(L("OctoPrint upload"))); - // # append two buttons to the Host line - auto octoprint_host_browse = [this] (wxWindow* parent) { + + auto octoprint_host_browse = [this, optgroup] (wxWindow* parent) { auto btn = new wxButton(parent, wxID_ANY, _(L(" Browse "))+"\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT); -// btn->SetFont($Slic3r::GUI::small_font); btn->SetBitmap(wxBitmap(from_u8(Slic3r::var("zoom.png")), wxBITMAP_TYPE_PNG)); auto sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(btn); - if (m_is_disabled_button_browse) - btn->Disable(); - - btn->Bind(wxEVT_BUTTON, [this, parent](wxCommandEvent e){ - if (m_event_button_browse > 0){ - wxCommandEvent event(m_event_button_browse); - event.SetString("Button BROWSE was clicked!"); - g_wxMainFrame->ProcessWindowEvent(event); + btn->Bind(wxEVT_BUTTON, [this, parent, optgroup](wxCommandEvent e) { + BonjourDialog dialog(parent); + if (dialog.show_and_lookup()) { + optgroup->set_value("octoprint_host", std::move(dialog.get_selected()), true); } -// // # look for devices -// auto entries; -// { -// my $res = Net::Bonjour->new('http'); -// $res->discover; -// $entries = [$res->entries]; -// } -// if (@{$entries}) { -// my $dlg = Slic3r::GUI::BonjourBrowser->new($self, $entries); -// $self->_load_key_value('octoprint_host', $dlg->GetValue . ":".$dlg->GetPort) -// if $dlg->ShowModal == wxID_OK; -// } -// else { -// auto msg_window = new wxMessageDialog(parent, "No Bonjour device found", "Device Browser", wxOK | wxICON_INFORMATION); -// msg_window->ShowModal(); -// } }); return sizer; @@ -1082,33 +1126,23 @@ void TabPrinter::build() auto octoprint_host_test = [this](wxWindow* parent) { auto btn = m_octoprint_host_test_btn = new wxButton(parent, wxID_ANY, _(L("Test")), wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); -// btn->SetFont($Slic3r::GUI::small_font); btn->SetBitmap(wxBitmap(from_u8(Slic3r::var("wrench.png")), wxBITMAP_TYPE_PNG)); auto sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(btn); - btn->Bind(wxEVT_BUTTON, [this, parent](wxCommandEvent e) { - if (m_event_button_test > 0){ - wxCommandEvent event(m_event_button_test); - event.SetString("Button TEST was clicked!"); - g_wxMainFrame->ProcessWindowEvent(event); + btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent e) { + OctoPrint octoprint(m_config); + wxString msg; + if (octoprint.test(msg)) { + show_info(this, _(L("Connection to OctoPrint works correctly.")), _(L("Success!"))); + } else { + const auto text = wxString::Format("%s: %s\n\n%s", + _(L("Could not connect to OctoPrint")), msg, _(L("Note: OctoPrint version at least 1.1.0 is required.")) + ); + show_error(this, text); } -// my $ua = LWP::UserAgent->new; -// $ua->timeout(10); -// -// my $res = $ua->get( -// "http://".$self->{config}->octoprint_host . "/api/version", -// 'X-Api-Key' = > $self->{config}->octoprint_apikey, -// ); -// if ($res->is_success) { -// show_info(parent, "Connection to OctoPrint works correctly.", "Success!"); -// } -// else { -// show_error(parent, -// "I wasn't able to connect to OctoPrint (".$res->status_line . "). " -// . "Check hostname and OctoPrint version (at least 1.1.0 is required)."); -// } - }); + }); + return sizer; }; @@ -1118,6 +1152,45 @@ void TabPrinter::build() optgroup->append_line(host_line); optgroup->append_single_option_line("octoprint_apikey"); + if (Http::ca_file_supported()) { + + Line cafile_line = optgroup->create_single_option_line("octoprint_cafile"); + + auto octoprint_cafile_browse = [this, optgroup] (wxWindow* parent) { + auto btn = new wxButton(parent, wxID_ANY, _(L(" Browse "))+"\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT); + btn->SetBitmap(wxBitmap(from_u8(Slic3r::var("zoom.png")), wxBITMAP_TYPE_PNG)); + auto sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(btn); + + btn->Bind(wxEVT_BUTTON, [this, optgroup] (wxCommandEvent e){ + static const auto filemasks = _(L("Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*")); + wxFileDialog openFileDialog(this, _(L("Open CA certificate file")), "", "", filemasks, wxFD_OPEN | wxFD_FILE_MUST_EXIST); + if (openFileDialog.ShowModal() != wxID_CANCEL) { + optgroup->set_value("octoprint_cafile", std::move(openFileDialog.GetPath()), true); + } + }); + + return sizer; + }; + + cafile_line.append_widget(octoprint_cafile_browse); + optgroup->append_line(cafile_line); + + auto octoprint_cafile_hint = [this, optgroup] (wxWindow* parent) { + auto txt = new wxStaticText(parent, wxID_ANY, + _(L("HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate."))); + auto sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(txt); + return sizer; + }; + + Line cafile_hint { "", "" }; + cafile_hint.full_width = 1; + cafile_hint.widget = std::move(octoprint_cafile_hint); + optgroup->append_line(cafile_hint); + + } + optgroup = page->new_optgroup(_(L("Firmware"))); optgroup->append_single_option_line("gcode_flavor"); @@ -1188,6 +1261,7 @@ void TabPrinter::extruders_count_changed(size_t extruders_count){ m_preset_bundle->printers.get_edited_preset().set_num_extruders(extruders_count); m_preset_bundle->update_multi_material_filament_presets(); build_extruder_pages(); + reload_config(); on_value_change("extruders_count", extruders_count); } @@ -1275,13 +1349,8 @@ void TabPrinter::update(){ m_serial_test_btn->Disable(); } - en = !m_config->opt_string("octoprint_host").empty(); - if ( en && m_is_user_agent) - m_octoprint_host_test_btn->Enable(); - else - m_octoprint_host_test_btn->Disable(); - get_field("octoprint_apikey")->toggle(en); - + m_octoprint_host_test_btn->Enable(!m_config->opt_string("octoprint_host").empty()); + bool have_multiple_extruders = m_extruders_count > 1; get_field("toolchange_gcode")->toggle(have_multiple_extruders); get_field("single_extruder_multi_material")->toggle(have_multiple_extruders); @@ -1326,8 +1395,9 @@ void TabPrinter::update(){ DynamicPrintConfig new_conf = *m_config; if (dialog->ShowModal() == wxID_YES) { - auto wipe = static_cast(m_config->option("wipe")); - wipe->values[i] = 0; + auto wipe = static_cast(m_config->option("wipe")->clone()); + for (int w = 0; w < wipe->values.size(); w++) + wipe->values[w] = false; new_conf.set_key_value("wipe", wipe); } else { @@ -1350,15 +1420,13 @@ void TabPrinter::update(){ void Tab::load_current_preset() { auto preset = m_presets->get_edited_preset(); -// try{ -// local $SIG{ __WARN__ } = Slic3r::GUI::warning_catcher($self); - preset.is_default ? m_btn_delete_preset->Disable() : m_btn_delete_preset->Enable(true); - update(); - // For the printer profile, generate the extruder pages. - on_preset_loaded(); - // Reload preset pages with the new configuration values. - reload_config(); -// }; + preset.is_default ? m_btn_delete_preset->Disable() : m_btn_delete_preset->Enable(true); + update(); + // For the printer profile, generate the extruder pages. + on_preset_loaded(); + // Reload preset pages with the new configuration values. + reload_config(); + // use CallAfter because some field triggers schedule on_change calls using CallAfter, // and we don't want them to be called after this update_dirty() as they would mark the // preset dirty again @@ -1369,6 +1437,12 @@ void Tab::load_current_preset() return; update_tab_ui(); on_presets_changed(); + + if (name() == "print") + update_frequently_changed_parameters(); + if (m_name == "printer") + static_cast(this)->m_initial_extruders_count = static_cast(this)->m_extruders_count; + update_changed_ui(); }); } @@ -1737,7 +1811,7 @@ bool Page::set_value(t_config_option_key opt_key, boost::any value){ ConfigOptionsGroupShp Page::new_optgroup(wxString title, int noncommon_label_width /*= -1*/) { //! config_ have to be "right" - ConfigOptionsGroupShp optgroup = std::make_shared(this, title, m_config); + ConfigOptionsGroupShp optgroup = std::make_shared(this, title, m_config, true); if (noncommon_label_width >= 0) optgroup->label_width = noncommon_label_width; @@ -1751,6 +1825,11 @@ ConfigOptionsGroupShp Page::new_optgroup(wxString title, int noncommon_label_wid //! }); }; + optgroup->m_get_initial_config = [this](){ + DynamicPrintConfig config = static_cast(GetParent())->m_presets->get_selected_preset().config; + return config; + }; + vsizer()->Add(optgroup->sizer, 0, wxEXPAND | wxALL, 10); m_optgroups.push_back(optgroup); diff --git a/xs/src/slic3r/GUI/Tab.hpp b/xs/src/slic3r/GUI/Tab.hpp index 208f99fec..4f65f1475 100644 --- a/xs/src/slic3r/GUI/Tab.hpp +++ b/xs/src/slic3r/GUI/Tab.hpp @@ -99,6 +99,7 @@ protected: bool m_no_controller; std::vector m_reload_dependent_tabs = {}; + std::vector m_dirty_options = {}; // The two following two event IDs are generated at Plater.pm by calling Wx::NewEventType. wxEventType m_event_value_change = 0; @@ -145,6 +146,7 @@ public: void toggle_show_hide_incompatible(); void update_show_hide_incompatible_button(); void update_ui_from_settings(); + void update_changed_ui(); PageShp add_options_page(wxString title, std::string icon, bool is_extruder_pages = false); @@ -171,6 +173,7 @@ public: protected: void on_presets_changed(); + void update_frequently_changed_parameters(); }; //Slic3r::GUI::Tab::Print; @@ -211,23 +214,16 @@ public: //Slic3r::GUI::Tab::Printer; class TabPrinter : public Tab { - bool m_is_disabled_button_browse; - bool m_is_user_agent; - // similar event by clicking Buttons "Browse" & "Test" - wxEventType m_event_button_browse = 0; - wxEventType m_event_button_test = 0; public: wxButton* m_serial_test_btn; wxButton* m_octoprint_host_test_btn; size_t m_extruders_count; + size_t m_initial_extruders_count; std::vector m_extruder_pages; TabPrinter() {} - TabPrinter(wxNotebook* parent, bool no_controller, bool is_disabled_btn_browse, bool is_user_agent) : - Tab(parent, _(L("Printer Settings")), "printer", no_controller), - m_is_disabled_button_browse(is_disabled_btn_browse), - m_is_user_agent(is_user_agent) {} + TabPrinter(wxNotebook* parent, bool no_controller) : Tab(parent, _(L("Printer Settings")), "printer", no_controller) {} ~TabPrinter(){} void build() override; @@ -236,10 +232,6 @@ public: void extruders_count_changed(size_t extruders_count); void build_extruder_pages(); void on_preset_loaded() override; - - // Set the events to the callbacks posted to the main frame window (currently implemented in Perl). - void set_event_button_browse(wxEventType evt) { m_event_button_browse = evt; } - void set_event_button_test(wxEventType evt) { m_event_button_test = evt; } }; class SavePresetWindow :public wxDialog diff --git a/xs/src/slic3r/Utils/ASCIIFolding.cpp b/xs/src/slic3r/Utils/ASCIIFolding.cpp new file mode 100644 index 000000000..c61fe2902 --- /dev/null +++ b/xs/src/slic3r/Utils/ASCIIFolding.cpp @@ -0,0 +1,1954 @@ +#include "ASCIIFolding.hpp" + +#include +#include +#include +#include + +// Based on http://svn.apache.org/repos/asf/lucene/java/tags/lucene_solr_4_5_1/lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/ASCIIFoldingFilter.java +template +static void fold_to_ascii(wchar_t c, OUTPUT_ITERATOR out) +{ + if (c < 0x080) { + *out = c; + } else { + switch (c) { + case L'\u00C0': // [LATIN CAPITAL LETTER A WITH GRAVE] + case L'\u00C1': // [LATIN CAPITAL LETTER A WITH ACUTE] + case L'\u00C2': // [LATIN CAPITAL LETTER A WITH CIRCUMFLEX] + case L'\u00C3': // [LATIN CAPITAL LETTER A WITH TILDE] + case L'\u00C4': // [LATIN CAPITAL LETTER A WITH DIAERESIS] + case L'\u00C5': // [LATIN CAPITAL LETTER A WITH RING ABOVE] + case L'\u0100': // [LATIN CAPITAL LETTER A WITH MACRON] + case L'\u0102': // [LATIN CAPITAL LETTER A WITH BREVE] + case L'\u0104': // [LATIN CAPITAL LETTER A WITH OGONEK] + case L'\u018F': // [LATIN CAPITAL LETTER SCHWA] + case L'\u01CD': // [LATIN CAPITAL LETTER A WITH CARON] + case L'\u01DE': // [LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON] + case L'\u01E0': // [LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON] + case L'\u01FA': // [LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE] + case L'\u0200': // [LATIN CAPITAL LETTER A WITH DOUBLE GRAVE] + case L'\u0202': // [LATIN CAPITAL LETTER A WITH INVERTED BREVE] + case L'\u0226': // [LATIN CAPITAL LETTER A WITH DOT ABOVE] + case L'\u023A': // [LATIN CAPITAL LETTER A WITH STROKE] + case L'\u1D00': // [LATIN LETTER SMALL CAPITAL A] + case L'\u1E00': // [LATIN CAPITAL LETTER A WITH RING BELOW] + case L'\u1EA0': // [LATIN CAPITAL LETTER A WITH DOT BELOW] + case L'\u1EA2': // [LATIN CAPITAL LETTER A WITH HOOK ABOVE] + case L'\u1EA4': // [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE] + case L'\u1EA6': // [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE] + case L'\u1EA8': // [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE] + case L'\u1EAA': // [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE] + case L'\u1EAC': // [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW] + case L'\u1EAE': // [LATIN CAPITAL LETTER A WITH BREVE AND ACUTE] + case L'\u1EB0': // [LATIN CAPITAL LETTER A WITH BREVE AND GRAVE] + case L'\u1EB2': // [LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE] + case L'\u1EB4': // [LATIN CAPITAL LETTER A WITH BREVE AND TILDE] + case L'\u1EB6': // [LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW] + case L'\u24B6': // [CIRCLED LATIN CAPITAL LETTER A] + case L'\uFF21': // [FULLWIDTH LATIN CAPITAL LETTER A] + *out = 'A'; + break; + case L'\u00E0': // [LATIN SMALL LETTER A WITH GRAVE] + case L'\u00E1': // [LATIN SMALL LETTER A WITH ACUTE] + case L'\u00E2': // [LATIN SMALL LETTER A WITH CIRCUMFLEX] + case L'\u00E3': // [LATIN SMALL LETTER A WITH TILDE] + case L'\u00E4': // [LATIN SMALL LETTER A WITH DIAERESIS] + case L'\u00E5': // [LATIN SMALL LETTER A WITH RING ABOVE] + case L'\u0101': // [LATIN SMALL LETTER A WITH MACRON] + case L'\u0103': // [LATIN SMALL LETTER A WITH BREVE] + case L'\u0105': // [LATIN SMALL LETTER A WITH OGONEK] + case L'\u01CE': // [LATIN SMALL LETTER A WITH CARON] + case L'\u01DF': // [LATIN SMALL LETTER A WITH DIAERESIS AND MACRON] + case L'\u01E1': // [LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON] + case L'\u01FB': // [LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE] + case L'\u0201': // [LATIN SMALL LETTER A WITH DOUBLE GRAVE] + case L'\u0203': // [LATIN SMALL LETTER A WITH INVERTED BREVE] + case L'\u0227': // [LATIN SMALL LETTER A WITH DOT ABOVE] + case L'\u0250': // [LATIN SMALL LETTER TURNED A] + case L'\u0259': // [LATIN SMALL LETTER SCHWA] + case L'\u025A': // [LATIN SMALL LETTER SCHWA WITH HOOK] + case L'\u1D8F': // [LATIN SMALL LETTER A WITH RETROFLEX HOOK] + case L'\u1D95': // [LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK] + case L'\u1E01': // [LATIN SMALL LETTER A WITH RING BELOW] + case L'\u1E9A': // [LATIN SMALL LETTER A WITH RIGHT HALF RING] + case L'\u1EA1': // [LATIN SMALL LETTER A WITH DOT BELOW] + case L'\u1EA3': // [LATIN SMALL LETTER A WITH HOOK ABOVE] + case L'\u1EA5': // [LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE] + case L'\u1EA7': // [LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE] + case L'\u1EA9': // [LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE] + case L'\u1EAB': // [LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE] + case L'\u1EAD': // [LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW] + case L'\u1EAF': // [LATIN SMALL LETTER A WITH BREVE AND ACUTE] + case L'\u1EB1': // [LATIN SMALL LETTER A WITH BREVE AND GRAVE] + case L'\u1EB3': // [LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE] + case L'\u1EB5': // [LATIN SMALL LETTER A WITH BREVE AND TILDE] + case L'\u1EB7': // [LATIN SMALL LETTER A WITH BREVE AND DOT BELOW] + case L'\u2090': // [LATIN SUBSCRIPT SMALL LETTER A] + case L'\u2094': // [LATIN SUBSCRIPT SMALL LETTER SCHWA] + case L'\u24D0': // [CIRCLED LATIN SMALL LETTER A] + case L'\u2C65': // [LATIN SMALL LETTER A WITH STROKE] + case L'\u2C6F': // [LATIN CAPITAL LETTER TURNED A] + case L'\uFF41': // [FULLWIDTH LATIN SMALL LETTER A] + *out = 'a'; + break; + case L'\uA732': // [LATIN CAPITAL LETTER AA] + *out = 'A'; + *out = 'A'; + break; + case L'\u00C6': // [LATIN CAPITAL LETTER AE] + case L'\u01E2': // [LATIN CAPITAL LETTER AE WITH MACRON] + case L'\u01FC': // [LATIN CAPITAL LETTER AE WITH ACUTE] + case L'\u1D01': // [LATIN LETTER SMALL CAPITAL AE] + *out = 'A'; + *out = 'E'; + break; + case L'\uA734': // [LATIN CAPITAL LETTER AO] + *out = 'A'; + *out = 'O'; + break; + case L'\uA736': // [LATIN CAPITAL LETTER AU] + *out = 'A'; + *out = 'U'; + break; + case L'\uA738': // [LATIN CAPITAL LETTER AV] + case L'\uA73A': // [LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR] + *out = 'A'; + *out = 'V'; + break; + case L'\uA73C': // [LATIN CAPITAL LETTER AY] + *out = 'A'; + *out = 'Y'; + break; + case L'\u249C': // [PARENTHESIZED LATIN SMALL LETTER A] + *out = '('; + *out = 'a'; + *out = ')'; + break; + case L'\uA733': // [LATIN SMALL LETTER AA] + *out = 'a'; + *out = 'a'; + break; + case L'\u00E6': // [LATIN SMALL LETTER AE] + case L'\u01E3': // [LATIN SMALL LETTER AE WITH MACRON] + case L'\u01FD': // [LATIN SMALL LETTER AE WITH ACUTE] + case L'\u1D02': // [LATIN SMALL LETTER TURNED AE] + *out = 'a'; + *out = 'e'; + break; + case L'\uA735': // [LATIN SMALL LETTER AO] + *out = 'a'; + *out = 'o'; + break; + case L'\uA737': // [LATIN SMALL LETTER AU] + *out = 'a'; + *out = 'u'; + break; + case L'\uA739': // [LATIN SMALL LETTER AV] + case L'\uA73B': // [LATIN SMALL LETTER AV WITH HORIZONTAL BAR] + *out = 'a'; + *out = 'v'; + break; + case L'\uA73D': // [LATIN SMALL LETTER AY] + *out = 'a'; + *out = 'y'; + break; + case L'\u0181': // [LATIN CAPITAL LETTER B WITH HOOK] + case L'\u0182': // [LATIN CAPITAL LETTER B WITH TOPBAR] + case L'\u0243': // [LATIN CAPITAL LETTER B WITH STROKE] + case L'\u0299': // [LATIN LETTER SMALL CAPITAL B] + case L'\u1D03': // [LATIN LETTER SMALL CAPITAL BARRED B] + case L'\u1E02': // [LATIN CAPITAL LETTER B WITH DOT ABOVE] + case L'\u1E04': // [LATIN CAPITAL LETTER B WITH DOT BELOW] + case L'\u1E06': // [LATIN CAPITAL LETTER B WITH LINE BELOW] + case L'\u24B7': // [CIRCLED LATIN CAPITAL LETTER B] + case L'\uFF22': // [FULLWIDTH LATIN CAPITAL LETTER B] + *out = 'B'; + break; + case L'\u0180': // [LATIN SMALL LETTER B WITH STROKE] + case L'\u0183': // [LATIN SMALL LETTER B WITH TOPBAR] + case L'\u0253': // [LATIN SMALL LETTER B WITH HOOK] + case L'\u1D6C': // [LATIN SMALL LETTER B WITH MIDDLE TILDE] + case L'\u1D80': // [LATIN SMALL LETTER B WITH PALATAL HOOK] + case L'\u1E03': // [LATIN SMALL LETTER B WITH DOT ABOVE] + case L'\u1E05': // [LATIN SMALL LETTER B WITH DOT BELOW] + case L'\u1E07': // [LATIN SMALL LETTER B WITH LINE BELOW] + case L'\u24D1': // [CIRCLED LATIN SMALL LETTER B] + case L'\uFF42': // [FULLWIDTH LATIN SMALL LETTER B] + *out = 'b'; + break; + case L'\u249D': // [PARENTHESIZED LATIN SMALL LETTER B] + *out = '('; + *out = 'b'; + *out = ')'; + break; + case L'\u00C7': // [LATIN CAPITAL LETTER C WITH CEDILLA] + case L'\u0106': // [LATIN CAPITAL LETTER C WITH ACUTE] + case L'\u0108': // [LATIN CAPITAL LETTER C WITH CIRCUMFLEX] + case L'\u010A': // [LATIN CAPITAL LETTER C WITH DOT ABOVE] + case L'\u010C': // [LATIN CAPITAL LETTER C WITH CARON] + case L'\u0187': // [LATIN CAPITAL LETTER C WITH HOOK] + case L'\u023B': // [LATIN CAPITAL LETTER C WITH STROKE] + case L'\u0297': // [LATIN LETTER STRETCHED C] + case L'\u1D04': // [LATIN LETTER SMALL CAPITAL C] + case L'\u1E08': // [LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE] + case L'\u24B8': // [CIRCLED LATIN CAPITAL LETTER C] + case L'\uFF23': // [FULLWIDTH LATIN CAPITAL LETTER C] + *out = 'C'; + break; + case L'\u00E7': // [LATIN SMALL LETTER C WITH CEDILLA] + case L'\u0107': // [LATIN SMALL LETTER C WITH ACUTE] + case L'\u0109': // [LATIN SMALL LETTER C WITH CIRCUMFLEX] + case L'\u010B': // [LATIN SMALL LETTER C WITH DOT ABOVE] + case L'\u010D': // [LATIN SMALL LETTER C WITH CARON] + case L'\u0188': // [LATIN SMALL LETTER C WITH HOOK] + case L'\u023C': // [LATIN SMALL LETTER C WITH STROKE] + case L'\u0255': // [LATIN SMALL LETTER C WITH CURL] + case L'\u1E09': // [LATIN SMALL LETTER C WITH CEDILLA AND ACUTE] + case L'\u2184': // [LATIN SMALL LETTER REVERSED C] + case L'\u24D2': // [CIRCLED LATIN SMALL LETTER C] + case L'\uA73E': // [LATIN CAPITAL LETTER REVERSED C WITH DOT] + case L'\uA73F': // [LATIN SMALL LETTER REVERSED C WITH DOT] + case L'\uFF43': // [FULLWIDTH LATIN SMALL LETTER C] + *out = 'c'; + break; + case L'\u249E': // [PARENTHESIZED LATIN SMALL LETTER C] + *out = '('; + *out = 'c'; + *out = ')'; + break; + case L'\u00D0': // [LATIN CAPITAL LETTER ETH] + case L'\u010E': // [LATIN CAPITAL LETTER D WITH CARON] + case L'\u0110': // [LATIN CAPITAL LETTER D WITH STROKE] + case L'\u0189': // [LATIN CAPITAL LETTER AFRICAN D] + case L'\u018A': // [LATIN CAPITAL LETTER D WITH HOOK] + case L'\u018B': // [LATIN CAPITAL LETTER D WITH TOPBAR] + case L'\u1D05': // [LATIN LETTER SMALL CAPITAL D] + case L'\u1D06': // [LATIN LETTER SMALL CAPITAL ETH] + case L'\u1E0A': // [LATIN CAPITAL LETTER D WITH DOT ABOVE] + case L'\u1E0C': // [LATIN CAPITAL LETTER D WITH DOT BELOW] + case L'\u1E0E': // [LATIN CAPITAL LETTER D WITH LINE BELOW] + case L'\u1E10': // [LATIN CAPITAL LETTER D WITH CEDILLA] + case L'\u1E12': // [LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW] + case L'\u24B9': // [CIRCLED LATIN CAPITAL LETTER D] + case L'\uA779': // [LATIN CAPITAL LETTER INSULAR D] + case L'\uFF24': // [FULLWIDTH LATIN CAPITAL LETTER D] + *out = 'D'; + break; + case L'\u00F0': // [LATIN SMALL LETTER ETH] + case L'\u010F': // [LATIN SMALL LETTER D WITH CARON] + case L'\u0111': // [LATIN SMALL LETTER D WITH STROKE] + case L'\u018C': // [LATIN SMALL LETTER D WITH TOPBAR] + case L'\u0221': // [LATIN SMALL LETTER D WITH CURL] + case L'\u0256': // [LATIN SMALL LETTER D WITH TAIL] + case L'\u0257': // [LATIN SMALL LETTER D WITH HOOK] + case L'\u1D6D': // [LATIN SMALL LETTER D WITH MIDDLE TILDE] + case L'\u1D81': // [LATIN SMALL LETTER D WITH PALATAL HOOK] + case L'\u1D91': // [LATIN SMALL LETTER D WITH HOOK AND TAIL] + case L'\u1E0B': // [LATIN SMALL LETTER D WITH DOT ABOVE] + case L'\u1E0D': // [LATIN SMALL LETTER D WITH DOT BELOW] + case L'\u1E0F': // [LATIN SMALL LETTER D WITH LINE BELOW] + case L'\u1E11': // [LATIN SMALL LETTER D WITH CEDILLA] + case L'\u1E13': // [LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW] + case L'\u24D3': // [CIRCLED LATIN SMALL LETTER D] + case L'\uA77A': // [LATIN SMALL LETTER INSULAR D] + case L'\uFF44': // [FULLWIDTH LATIN SMALL LETTER D] + *out = 'd'; + break; + case L'\u01C4': // [LATIN CAPITAL LETTER DZ WITH CARON] + case L'\u01F1': // [LATIN CAPITAL LETTER DZ] + *out = 'D'; + *out = 'Z'; + break; + case L'\u01C5': // [LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON] + case L'\u01F2': // [LATIN CAPITAL LETTER D WITH SMALL LETTER Z] + *out = 'D'; + *out = 'z'; + break; + case L'\u249F': // [PARENTHESIZED LATIN SMALL LETTER D] + *out = '('; + *out = 'd'; + *out = ')'; + break; + case L'\u0238': // [LATIN SMALL LETTER DB DIGRAPH] + *out = 'd'; + *out = 'b'; + break; + case L'\u01C6': // [LATIN SMALL LETTER DZ WITH CARON] + case L'\u01F3': // [LATIN SMALL LETTER DZ] + case L'\u02A3': // [LATIN SMALL LETTER DZ DIGRAPH] + case L'\u02A5': // [LATIN SMALL LETTER DZ DIGRAPH WITH CURL] + *out = 'd'; + *out = 'z'; + break; + case L'\u00C8': // [LATIN CAPITAL LETTER E WITH GRAVE] + case L'\u00C9': // [LATIN CAPITAL LETTER E WITH ACUTE] + case L'\u00CA': // [LATIN CAPITAL LETTER E WITH CIRCUMFLEX] + case L'\u00CB': // [LATIN CAPITAL LETTER E WITH DIAERESIS] + case L'\u0112': // [LATIN CAPITAL LETTER E WITH MACRON] + case L'\u0114': // [LATIN CAPITAL LETTER E WITH BREVE] + case L'\u0116': // [LATIN CAPITAL LETTER E WITH DOT ABOVE] + case L'\u0118': // [LATIN CAPITAL LETTER E WITH OGONEK] + case L'\u011A': // [LATIN CAPITAL LETTER E WITH CARON] + case L'\u018E': // [LATIN CAPITAL LETTER REVERSED E] + case L'\u0190': // [LATIN CAPITAL LETTER OPEN E] + case L'\u0204': // [LATIN CAPITAL LETTER E WITH DOUBLE GRAVE] + case L'\u0206': // [LATIN CAPITAL LETTER E WITH INVERTED BREVE] + case L'\u0228': // [LATIN CAPITAL LETTER E WITH CEDILLA] + case L'\u0246': // [LATIN CAPITAL LETTER E WITH STROKE] + case L'\u1D07': // [LATIN LETTER SMALL CAPITAL E] + case L'\u1E14': // [LATIN CAPITAL LETTER E WITH MACRON AND GRAVE] + case L'\u1E16': // [LATIN CAPITAL LETTER E WITH MACRON AND ACUTE] + case L'\u1E18': // [LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW] + case L'\u1E1A': // [LATIN CAPITAL LETTER E WITH TILDE BELOW] + case L'\u1E1C': // [LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE] + case L'\u1EB8': // [LATIN CAPITAL LETTER E WITH DOT BELOW] + case L'\u1EBA': // [LATIN CAPITAL LETTER E WITH HOOK ABOVE] + case L'\u1EBC': // [LATIN CAPITAL LETTER E WITH TILDE] + case L'\u1EBE': // [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE] + case L'\u1EC0': // [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE] + case L'\u1EC2': // [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE] + case L'\u1EC4': // [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE] + case L'\u1EC6': // [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW] + case L'\u24BA': // [CIRCLED LATIN CAPITAL LETTER E] + case L'\u2C7B': // [LATIN LETTER SMALL CAPITAL TURNED E] + case L'\uFF25': // [FULLWIDTH LATIN CAPITAL LETTER E] + *out = 'E'; + break; + case L'\u00E8': // [LATIN SMALL LETTER E WITH GRAVE] + case L'\u00E9': // [LATIN SMALL LETTER E WITH ACUTE] + case L'\u00EA': // [LATIN SMALL LETTER E WITH CIRCUMFLEX] + case L'\u00EB': // [LATIN SMALL LETTER E WITH DIAERESIS] + case L'\u0113': // [LATIN SMALL LETTER E WITH MACRON] + case L'\u0115': // [LATIN SMALL LETTER E WITH BREVE] + case L'\u0117': // [LATIN SMALL LETTER E WITH DOT ABOVE] + case L'\u0119': // [LATIN SMALL LETTER E WITH OGONEK] + case L'\u011B': // [LATIN SMALL LETTER E WITH CARON] + case L'\u01DD': // [LATIN SMALL LETTER TURNED E] + case L'\u0205': // [LATIN SMALL LETTER E WITH DOUBLE GRAVE] + case L'\u0207': // [LATIN SMALL LETTER E WITH INVERTED BREVE] + case L'\u0229': // [LATIN SMALL LETTER E WITH CEDILLA] + case L'\u0247': // [LATIN SMALL LETTER E WITH STROKE] + case L'\u0258': // [LATIN SMALL LETTER REVERSED E] + case L'\u025B': // [LATIN SMALL LETTER OPEN E] + case L'\u025C': // [LATIN SMALL LETTER REVERSED OPEN E] + case L'\u025D': // [LATIN SMALL LETTER REVERSED OPEN E WITH HOOK] + case L'\u025E': // [LATIN SMALL LETTER CLOSED REVERSED OPEN E] + case L'\u029A': // [LATIN SMALL LETTER CLOSED OPEN E] + case L'\u1D08': // [LATIN SMALL LETTER TURNED OPEN E] + case L'\u1D92': // [LATIN SMALL LETTER E WITH RETROFLEX HOOK] + case L'\u1D93': // [LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK] + case L'\u1D94': // [LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK] + case L'\u1E15': // [LATIN SMALL LETTER E WITH MACRON AND GRAVE] + case L'\u1E17': // [LATIN SMALL LETTER E WITH MACRON AND ACUTE] + case L'\u1E19': // [LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW] + case L'\u1E1B': // [LATIN SMALL LETTER E WITH TILDE BELOW] + case L'\u1E1D': // [LATIN SMALL LETTER E WITH CEDILLA AND BREVE] + case L'\u1EB9': // [LATIN SMALL LETTER E WITH DOT BELOW] + case L'\u1EBB': // [LATIN SMALL LETTER E WITH HOOK ABOVE] + case L'\u1EBD': // [LATIN SMALL LETTER E WITH TILDE] + case L'\u1EBF': // [LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE] + case L'\u1EC1': // [LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE] + case L'\u1EC3': // [LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE] + case L'\u1EC5': // [LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE] + case L'\u1EC7': // [LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW] + case L'\u2091': // [LATIN SUBSCRIPT SMALL LETTER E] + case L'\u24D4': // [CIRCLED LATIN SMALL LETTER E] + case L'\u2C78': // [LATIN SMALL LETTER E WITH NOTCH] + case L'\uFF45': // [FULLWIDTH LATIN SMALL LETTER E] + *out = 'e'; + break; + case L'\u24A0': // [PARENTHESIZED LATIN SMALL LETTER E] + *out = '('; + *out = 'e'; + *out = ')'; + break; + case L'\u0191': // [LATIN CAPITAL LETTER F WITH HOOK] + case L'\u1E1E': // [LATIN CAPITAL LETTER F WITH DOT ABOVE] + case L'\u24BB': // [CIRCLED LATIN CAPITAL LETTER F] + case L'\uA730': // [LATIN LETTER SMALL CAPITAL F] + case L'\uA77B': // [LATIN CAPITAL LETTER INSULAR F] + case L'\uA7FB': // [LATIN EPIGRAPHIC LETTER REVERSED F] + case L'\uFF26': // [FULLWIDTH LATIN CAPITAL LETTER F] + *out = 'F'; + break; + case L'\u0192': // [LATIN SMALL LETTER F WITH HOOK] + case L'\u1D6E': // [LATIN SMALL LETTER F WITH MIDDLE TILDE] + case L'\u1D82': // [LATIN SMALL LETTER F WITH PALATAL HOOK] + case L'\u1E1F': // [LATIN SMALL LETTER F WITH DOT ABOVE] + case L'\u1E9B': // [LATIN SMALL LETTER LONG S WITH DOT ABOVE] + case L'\u24D5': // [CIRCLED LATIN SMALL LETTER F] + case L'\uA77C': // [LATIN SMALL LETTER INSULAR F] + case L'\uFF46': // [FULLWIDTH LATIN SMALL LETTER F] + *out = 'f'; + break; + case L'\u24A1': // [PARENTHESIZED LATIN SMALL LETTER F] + *out = '('; + *out = 'f'; + *out = ')'; + break; + case L'\uFB00': // [LATIN SMALL LIGATURE FF] + *out = 'f'; + *out = 'f'; + break; + case L'\uFB03': // [LATIN SMALL LIGATURE FFI] + *out = 'f'; + *out = 'f'; + *out = 'i'; + break; + case L'\uFB04': // [LATIN SMALL LIGATURE FFL] + *out = 'f'; + *out = 'f'; + *out = 'l'; + break; + case L'\uFB01': // [LATIN SMALL LIGATURE FI] + *out = 'f'; + *out = 'i'; + break; + case L'\uFB02': // [LATIN SMALL LIGATURE FL] + *out = 'f'; + *out = 'l'; + break; + case L'\u011C': // [LATIN CAPITAL LETTER G WITH CIRCUMFLEX] + case L'\u011E': // [LATIN CAPITAL LETTER G WITH BREVE] + case L'\u0120': // [LATIN CAPITAL LETTER G WITH DOT ABOVE] + case L'\u0122': // [LATIN CAPITAL LETTER G WITH CEDILLA] + case L'\u0193': // [LATIN CAPITAL LETTER G WITH HOOK] + case L'\u01E4': // [LATIN CAPITAL LETTER G WITH STROKE] + case L'\u01E5': // [LATIN SMALL LETTER G WITH STROKE] + case L'\u01E6': // [LATIN CAPITAL LETTER G WITH CARON] + case L'\u01E7': // [LATIN SMALL LETTER G WITH CARON] + case L'\u01F4': // [LATIN CAPITAL LETTER G WITH ACUTE] + case L'\u0262': // [LATIN LETTER SMALL CAPITAL G] + case L'\u029B': // [LATIN LETTER SMALL CAPITAL G WITH HOOK] + case L'\u1E20': // [LATIN CAPITAL LETTER G WITH MACRON] + case L'\u24BC': // [CIRCLED LATIN CAPITAL LETTER G] + case L'\uA77D': // [LATIN CAPITAL LETTER INSULAR G] + case L'\uA77E': // [LATIN CAPITAL LETTER TURNED INSULAR G] + case L'\uFF27': // [FULLWIDTH LATIN CAPITAL LETTER G] + *out = 'G'; + break; + case L'\u011D': // [LATIN SMALL LETTER G WITH CIRCUMFLEX] + case L'\u011F': // [LATIN SMALL LETTER G WITH BREVE] + case L'\u0121': // [LATIN SMALL LETTER G WITH DOT ABOVE] + case L'\u0123': // [LATIN SMALL LETTER G WITH CEDILLA] + case L'\u01F5': // [LATIN SMALL LETTER G WITH ACUTE] + case L'\u0260': // [LATIN SMALL LETTER G WITH HOOK] + case L'\u0261': // [LATIN SMALL LETTER SCRIPT G] + case L'\u1D77': // [LATIN SMALL LETTER TURNED G] + case L'\u1D79': // [LATIN SMALL LETTER INSULAR G] + case L'\u1D83': // [LATIN SMALL LETTER G WITH PALATAL HOOK] + case L'\u1E21': // [LATIN SMALL LETTER G WITH MACRON] + case L'\u24D6': // [CIRCLED LATIN SMALL LETTER G] + case L'\uA77F': // [LATIN SMALL LETTER TURNED INSULAR G] + case L'\uFF47': // [FULLWIDTH LATIN SMALL LETTER G] + *out = 'g'; + break; + case L'\u24A2': // [PARENTHESIZED LATIN SMALL LETTER G] + *out = '('; + *out = 'g'; + *out = ')'; + break; + case L'\u0124': // [LATIN CAPITAL LETTER H WITH CIRCUMFLEX] + case L'\u0126': // [LATIN CAPITAL LETTER H WITH STROKE] + case L'\u021E': // [LATIN CAPITAL LETTER H WITH CARON] + case L'\u029C': // [LATIN LETTER SMALL CAPITAL H] + case L'\u1E22': // [LATIN CAPITAL LETTER H WITH DOT ABOVE] + case L'\u1E24': // [LATIN CAPITAL LETTER H WITH DOT BELOW] + case L'\u1E26': // [LATIN CAPITAL LETTER H WITH DIAERESIS] + case L'\u1E28': // [LATIN CAPITAL LETTER H WITH CEDILLA] + case L'\u1E2A': // [LATIN CAPITAL LETTER H WITH BREVE BELOW] + case L'\u24BD': // [CIRCLED LATIN CAPITAL LETTER H] + case L'\u2C67': // [LATIN CAPITAL LETTER H WITH DESCENDER] + case L'\u2C75': // [LATIN CAPITAL LETTER HALF H] + case L'\uFF28': // [FULLWIDTH LATIN CAPITAL LETTER H] + *out = 'H'; + break; + case L'\u0125': // [LATIN SMALL LETTER H WITH CIRCUMFLEX] + case L'\u0127': // [LATIN SMALL LETTER H WITH STROKE] + case L'\u021F': // [LATIN SMALL LETTER H WITH CARON] + case L'\u0265': // [LATIN SMALL LETTER TURNED H] + case L'\u0266': // [LATIN SMALL LETTER H WITH HOOK] + case L'\u02AE': // [LATIN SMALL LETTER TURNED H WITH FISHHOOK] + case L'\u02AF': // [LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL] + case L'\u1E23': // [LATIN SMALL LETTER H WITH DOT ABOVE] + case L'\u1E25': // [LATIN SMALL LETTER H WITH DOT BELOW] + case L'\u1E27': // [LATIN SMALL LETTER H WITH DIAERESIS] + case L'\u1E29': // [LATIN SMALL LETTER H WITH CEDILLA] + case L'\u1E2B': // [LATIN SMALL LETTER H WITH BREVE BELOW] + case L'\u1E96': // [LATIN SMALL LETTER H WITH LINE BELOW] + case L'\u24D7': // [CIRCLED LATIN SMALL LETTER H] + case L'\u2C68': // [LATIN SMALL LETTER H WITH DESCENDER] + case L'\u2C76': // [LATIN SMALL LETTER HALF H] + case L'\uFF48': // [FULLWIDTH LATIN SMALL LETTER H] + *out = 'h'; + break; + case L'\u01F6': // [LATIN CAPITAL LETTER HWAIR] + *out = 'H'; + *out = 'V'; + break; + case L'\u24A3': // [PARENTHESIZED LATIN SMALL LETTER H] + *out = '('; + *out = 'h'; + *out = ')'; + break; + case L'\u0195': // [LATIN SMALL LETTER HV] + *out = 'h'; + *out = 'v'; + break; + case L'\u00CC': // [LATIN CAPITAL LETTER I WITH GRAVE] + case L'\u00CD': // [LATIN CAPITAL LETTER I WITH ACUTE] + case L'\u00CE': // [LATIN CAPITAL LETTER I WITH CIRCUMFLEX] + case L'\u00CF': // [LATIN CAPITAL LETTER I WITH DIAERESIS] + case L'\u0128': // [LATIN CAPITAL LETTER I WITH TILDE] + case L'\u012A': // [LATIN CAPITAL LETTER I WITH MACRON] + case L'\u012C': // [LATIN CAPITAL LETTER I WITH BREVE] + case L'\u012E': // [LATIN CAPITAL LETTER I WITH OGONEK] + case L'\u0130': // [LATIN CAPITAL LETTER I WITH DOT ABOVE] + case L'\u0196': // [LATIN CAPITAL LETTER IOTA] + case L'\u0197': // [LATIN CAPITAL LETTER I WITH STROKE] + case L'\u01CF': // [LATIN CAPITAL LETTER I WITH CARON] + case L'\u0208': // [LATIN CAPITAL LETTER I WITH DOUBLE GRAVE] + case L'\u020A': // [LATIN CAPITAL LETTER I WITH INVERTED BREVE] + case L'\u026A': // [LATIN LETTER SMALL CAPITAL I] + case L'\u1D7B': // [LATIN SMALL CAPITAL LETTER I WITH STROKE] + case L'\u1E2C': // [LATIN CAPITAL LETTER I WITH TILDE BELOW] + case L'\u1E2E': // [LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE] + case L'\u1EC8': // [LATIN CAPITAL LETTER I WITH HOOK ABOVE] + case L'\u1ECA': // [LATIN CAPITAL LETTER I WITH DOT BELOW] + case L'\u24BE': // [CIRCLED LATIN CAPITAL LETTER I] + case L'\uA7FE': // [LATIN EPIGRAPHIC LETTER I LONGA] + case L'\uFF29': // [FULLWIDTH LATIN CAPITAL LETTER I] + *out = 'I'; + break; + case L'\u00EC': // [LATIN SMALL LETTER I WITH GRAVE] + case L'\u00ED': // [LATIN SMALL LETTER I WITH ACUTE] + case L'\u00EE': // [LATIN SMALL LETTER I WITH CIRCUMFLEX] + case L'\u00EF': // [LATIN SMALL LETTER I WITH DIAERESIS] + case L'\u0129': // [LATIN SMALL LETTER I WITH TILDE] + case L'\u012B': // [LATIN SMALL LETTER I WITH MACRON] + case L'\u012D': // [LATIN SMALL LETTER I WITH BREVE] + case L'\u012F': // [LATIN SMALL LETTER I WITH OGONEK] + case L'\u0131': // [LATIN SMALL LETTER DOTLESS I] + case L'\u01D0': // [LATIN SMALL LETTER I WITH CARON] + case L'\u0209': // [LATIN SMALL LETTER I WITH DOUBLE GRAVE] + case L'\u020B': // [LATIN SMALL LETTER I WITH INVERTED BREVE] + case L'\u0268': // [LATIN SMALL LETTER I WITH STROKE] + case L'\u1D09': // [LATIN SMALL LETTER TURNED I] + case L'\u1D62': // [LATIN SUBSCRIPT SMALL LETTER I] + case L'\u1D7C': // [LATIN SMALL LETTER IOTA WITH STROKE] + case L'\u1D96': // [LATIN SMALL LETTER I WITH RETROFLEX HOOK] + case L'\u1E2D': // [LATIN SMALL LETTER I WITH TILDE BELOW] + case L'\u1E2F': // [LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE] + case L'\u1EC9': // [LATIN SMALL LETTER I WITH HOOK ABOVE] + case L'\u1ECB': // [LATIN SMALL LETTER I WITH DOT BELOW] + case L'\u2071': // [SUPERSCRIPT LATIN SMALL LETTER I] + case L'\u24D8': // [CIRCLED LATIN SMALL LETTER I] + case L'\uFF49': // [FULLWIDTH LATIN SMALL LETTER I] + *out = 'i'; + break; + case L'\u0132': // [LATIN CAPITAL LIGATURE IJ] + *out = 'I'; + *out = 'J'; + break; + case L'\u24A4': // [PARENTHESIZED LATIN SMALL LETTER I] + *out = '('; + *out = 'i'; + *out = ')'; + break; + case L'\u0133': // [LATIN SMALL LIGATURE IJ] + *out = 'i'; + *out = 'j'; + break; + case L'\u0134': // [LATIN CAPITAL LETTER J WITH CIRCUMFLEX] + case L'\u0248': // [LATIN CAPITAL LETTER J WITH STROKE] + case L'\u1D0A': // [LATIN LETTER SMALL CAPITAL J] + case L'\u24BF': // [CIRCLED LATIN CAPITAL LETTER J] + case L'\uFF2A': // [FULLWIDTH LATIN CAPITAL LETTER J] + *out = 'J'; + break; + case L'\u0135': // [LATIN SMALL LETTER J WITH CIRCUMFLEX] + case L'\u01F0': // [LATIN SMALL LETTER J WITH CARON] + case L'\u0237': // [LATIN SMALL LETTER DOTLESS J] + case L'\u0249': // [LATIN SMALL LETTER J WITH STROKE] + case L'\u025F': // [LATIN SMALL LETTER DOTLESS J WITH STROKE] + case L'\u0284': // [LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK] + case L'\u029D': // [LATIN SMALL LETTER J WITH CROSSED-TAIL] + case L'\u24D9': // [CIRCLED LATIN SMALL LETTER J] + case L'\u2C7C': // [LATIN SUBSCRIPT SMALL LETTER J] + case L'\uFF4A': // [FULLWIDTH LATIN SMALL LETTER J] + *out = 'j'; + break; + case L'\u24A5': // [PARENTHESIZED LATIN SMALL LETTER J] + *out = '('; + *out = 'j'; + *out = ')'; + break; + case L'\u0136': // [LATIN CAPITAL LETTER K WITH CEDILLA] + case L'\u0198': // [LATIN CAPITAL LETTER K WITH HOOK] + case L'\u01E8': // [LATIN CAPITAL LETTER K WITH CARON] + case L'\u1D0B': // [LATIN LETTER SMALL CAPITAL K] + case L'\u1E30': // [LATIN CAPITAL LETTER K WITH ACUTE] + case L'\u1E32': // [LATIN CAPITAL LETTER K WITH DOT BELOW] + case L'\u1E34': // [LATIN CAPITAL LETTER K WITH LINE BELOW] + case L'\u24C0': // [CIRCLED LATIN CAPITAL LETTER K] + case L'\u2C69': // [LATIN CAPITAL LETTER K WITH DESCENDER] + case L'\uA740': // [LATIN CAPITAL LETTER K WITH STROKE] + case L'\uA742': // [LATIN CAPITAL LETTER K WITH DIAGONAL STROKE] + case L'\uA744': // [LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE] + case L'\uFF2B': // [FULLWIDTH LATIN CAPITAL LETTER K] + *out = 'K'; + break; + case L'\u0137': // [LATIN SMALL LETTER K WITH CEDILLA] + case L'\u0199': // [LATIN SMALL LETTER K WITH HOOK] + case L'\u01E9': // [LATIN SMALL LETTER K WITH CARON] + case L'\u029E': // [LATIN SMALL LETTER TURNED K] + case L'\u1D84': // [LATIN SMALL LETTER K WITH PALATAL HOOK] + case L'\u1E31': // [LATIN SMALL LETTER K WITH ACUTE] + case L'\u1E33': // [LATIN SMALL LETTER K WITH DOT BELOW] + case L'\u1E35': // [LATIN SMALL LETTER K WITH LINE BELOW] + case L'\u24DA': // [CIRCLED LATIN SMALL LETTER K] + case L'\u2C6A': // [LATIN SMALL LETTER K WITH DESCENDER] + case L'\uA741': // [LATIN SMALL LETTER K WITH STROKE] + case L'\uA743': // [LATIN SMALL LETTER K WITH DIAGONAL STROKE] + case L'\uA745': // [LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE] + case L'\uFF4B': // [FULLWIDTH LATIN SMALL LETTER K] + *out = 'k'; + break; + case L'\u24A6': // [PARENTHESIZED LATIN SMALL LETTER K] + *out = '('; + *out = 'k'; + *out = ')'; + break; + case L'\u0139': // [LATIN CAPITAL LETTER L WITH ACUTE] + case L'\u013B': // [LATIN CAPITAL LETTER L WITH CEDILLA] + case L'\u013D': // [LATIN CAPITAL LETTER L WITH CARON] + case L'\u013F': // [LATIN CAPITAL LETTER L WITH MIDDLE DOT] + case L'\u0141': // [LATIN CAPITAL LETTER L WITH STROKE] + case L'\u023D': // [LATIN CAPITAL LETTER L WITH BAR] + case L'\u029F': // [LATIN LETTER SMALL CAPITAL L] + case L'\u1D0C': // [LATIN LETTER SMALL CAPITAL L WITH STROKE] + case L'\u1E36': // [LATIN CAPITAL LETTER L WITH DOT BELOW] + case L'\u1E38': // [LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON] + case L'\u1E3A': // [LATIN CAPITAL LETTER L WITH LINE BELOW] + case L'\u1E3C': // [LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW] + case L'\u24C1': // [CIRCLED LATIN CAPITAL LETTER L] + case L'\u2C60': // [LATIN CAPITAL LETTER L WITH DOUBLE BAR] + case L'\u2C62': // [LATIN CAPITAL LETTER L WITH MIDDLE TILDE] + case L'\uA746': // [LATIN CAPITAL LETTER BROKEN L] + case L'\uA748': // [LATIN CAPITAL LETTER L WITH HIGH STROKE] + case L'\uA780': // [LATIN CAPITAL LETTER TURNED L] + case L'\uFF2C': // [FULLWIDTH LATIN CAPITAL LETTER L] + *out = 'L'; + break; + case L'\u013A': // [LATIN SMALL LETTER L WITH ACUTE] + case L'\u013C': // [LATIN SMALL LETTER L WITH CEDILLA] + case L'\u013E': // [LATIN SMALL LETTER L WITH CARON] + case L'\u0140': // [LATIN SMALL LETTER L WITH MIDDLE DOT] + case L'\u0142': // [LATIN SMALL LETTER L WITH STROKE] + case L'\u019A': // [LATIN SMALL LETTER L WITH BAR] + case L'\u0234': // [LATIN SMALL LETTER L WITH CURL] + case L'\u026B': // [LATIN SMALL LETTER L WITH MIDDLE TILDE] + case L'\u026C': // [LATIN SMALL LETTER L WITH BELT] + case L'\u026D': // [LATIN SMALL LETTER L WITH RETROFLEX HOOK] + case L'\u1D85': // [LATIN SMALL LETTER L WITH PALATAL HOOK] + case L'\u1E37': // [LATIN SMALL LETTER L WITH DOT BELOW] + case L'\u1E39': // [LATIN SMALL LETTER L WITH DOT BELOW AND MACRON] + case L'\u1E3B': // [LATIN SMALL LETTER L WITH LINE BELOW] + case L'\u1E3D': // [LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW] + case L'\u24DB': // [CIRCLED LATIN SMALL LETTER L] + case L'\u2C61': // [LATIN SMALL LETTER L WITH DOUBLE BAR] + case L'\uA747': // [LATIN SMALL LETTER BROKEN L] + case L'\uA749': // [LATIN SMALL LETTER L WITH HIGH STROKE] + case L'\uA781': // [LATIN SMALL LETTER TURNED L] + case L'\uFF4C': // [FULLWIDTH LATIN SMALL LETTER L] + *out = 'l'; + break; + case L'\u01C7': // [LATIN CAPITAL LETTER LJ] + *out = 'L'; + *out = 'J'; + break; + case L'\u1EFA': // [LATIN CAPITAL LETTER MIDDLE-WELSH LL] + *out = 'L'; + *out = 'L'; + break; + case L'\u01C8': // [LATIN CAPITAL LETTER L WITH SMALL LETTER J] + *out = 'L'; + *out = 'j'; + break; + case L'\u24A7': // [PARENTHESIZED LATIN SMALL LETTER L] + *out = '('; + *out = 'l'; + *out = ')'; + break; + case L'\u01C9': // [LATIN SMALL LETTER LJ] + *out = 'l'; + *out = 'j'; + break; + case L'\u1EFB': // [LATIN SMALL LETTER MIDDLE-WELSH LL] + *out = 'l'; + *out = 'l'; + break; + case L'\u02AA': // [LATIN SMALL LETTER LS DIGRAPH] + *out = 'l'; + *out = 's'; + break; + case L'\u02AB': // [LATIN SMALL LETTER LZ DIGRAPH] + *out = 'l'; + *out = 'z'; + break; + case L'\u019C': // [LATIN CAPITAL LETTER TURNED M] + case L'\u1D0D': // [LATIN LETTER SMALL CAPITAL M] + case L'\u1E3E': // [LATIN CAPITAL LETTER M WITH ACUTE] + case L'\u1E40': // [LATIN CAPITAL LETTER M WITH DOT ABOVE] + case L'\u1E42': // [LATIN CAPITAL LETTER M WITH DOT BELOW] + case L'\u24C2': // [CIRCLED LATIN CAPITAL LETTER M] + case L'\u2C6E': // [LATIN CAPITAL LETTER M WITH HOOK] + case L'\uA7FD': // [LATIN EPIGRAPHIC LETTER INVERTED M] + case L'\uA7FF': // [LATIN EPIGRAPHIC LETTER ARCHAIC M] + case L'\uFF2D': // [FULLWIDTH LATIN CAPITAL LETTER M] + *out = 'M'; + break; + case L'\u026F': // [LATIN SMALL LETTER TURNED M] + case L'\u0270': // [LATIN SMALL LETTER TURNED M WITH LONG LEG] + case L'\u0271': // [LATIN SMALL LETTER M WITH HOOK] + case L'\u1D6F': // [LATIN SMALL LETTER M WITH MIDDLE TILDE] + case L'\u1D86': // [LATIN SMALL LETTER M WITH PALATAL HOOK] + case L'\u1E3F': // [LATIN SMALL LETTER M WITH ACUTE] + case L'\u1E41': // [LATIN SMALL LETTER M WITH DOT ABOVE] + case L'\u1E43': // [LATIN SMALL LETTER M WITH DOT BELOW] + case L'\u24DC': // [CIRCLED LATIN SMALL LETTER M] + case L'\uFF4D': // [FULLWIDTH LATIN SMALL LETTER M] + *out = 'm'; + break; + case L'\u24A8': // [PARENTHESIZED LATIN SMALL LETTER M] + *out = '('; + *out = 'm'; + *out = ')'; + break; + case L'\u00D1': // [LATIN CAPITAL LETTER N WITH TILDE] + case L'\u0143': // [LATIN CAPITAL LETTER N WITH ACUTE] + case L'\u0145': // [LATIN CAPITAL LETTER N WITH CEDILLA] + case L'\u0147': // [LATIN CAPITAL LETTER N WITH CARON] + case L'\u014A': // [LATIN CAPITAL LETTER ENG] + case L'\u019D': // [LATIN CAPITAL LETTER N WITH LEFT HOOK] + case L'\u01F8': // [LATIN CAPITAL LETTER N WITH GRAVE] + case L'\u0220': // [LATIN CAPITAL LETTER N WITH LONG RIGHT LEG] + case L'\u0274': // [LATIN LETTER SMALL CAPITAL N] + case L'\u1D0E': // [LATIN LETTER SMALL CAPITAL REVERSED N] + case L'\u1E44': // [LATIN CAPITAL LETTER N WITH DOT ABOVE] + case L'\u1E46': // [LATIN CAPITAL LETTER N WITH DOT BELOW] + case L'\u1E48': // [LATIN CAPITAL LETTER N WITH LINE BELOW] + case L'\u1E4A': // [LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW] + case L'\u24C3': // [CIRCLED LATIN CAPITAL LETTER N] + case L'\uFF2E': // [FULLWIDTH LATIN CAPITAL LETTER N] + *out = 'N'; + break; + case L'\u00F1': // [LATIN SMALL LETTER N WITH TILDE] + case L'\u0144': // [LATIN SMALL LETTER N WITH ACUTE] + case L'\u0146': // [LATIN SMALL LETTER N WITH CEDILLA] + case L'\u0148': // [LATIN SMALL LETTER N WITH CARON] + case L'\u0149': // [LATIN SMALL LETTER N PRECEDED BY APOSTROPHE] + case L'\u014B': // [LATIN SMALL LETTER ENG] + case L'\u019E': // [LATIN SMALL LETTER N WITH LONG RIGHT LEG] + case L'\u01F9': // [LATIN SMALL LETTER N WITH GRAVE] + case L'\u0235': // [LATIN SMALL LETTER N WITH CURL] + case L'\u0272': // [LATIN SMALL LETTER N WITH LEFT HOOK] + case L'\u0273': // [LATIN SMALL LETTER N WITH RETROFLEX HOOK] + case L'\u1D70': // [LATIN SMALL LETTER N WITH MIDDLE TILDE] + case L'\u1D87': // [LATIN SMALL LETTER N WITH PALATAL HOOK] + case L'\u1E45': // [LATIN SMALL LETTER N WITH DOT ABOVE] + case L'\u1E47': // [LATIN SMALL LETTER N WITH DOT BELOW] + case L'\u1E49': // [LATIN SMALL LETTER N WITH LINE BELOW] + case L'\u1E4B': // [LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW] + case L'\u207F': // [SUPERSCRIPT LATIN SMALL LETTER N] + case L'\u24DD': // [CIRCLED LATIN SMALL LETTER N] + case L'\uFF4E': // [FULLWIDTH LATIN SMALL LETTER N] + *out = 'n'; + break; + case L'\u01CA': // [LATIN CAPITAL LETTER NJ] + *out = 'N'; + *out = 'J'; + break; + case L'\u01CB': // [LATIN CAPITAL LETTER N WITH SMALL LETTER J] + *out = 'N'; + *out = 'j'; + break; + case L'\u24A9': // [PARENTHESIZED LATIN SMALL LETTER N] + *out = '('; + *out = 'n'; + *out = ')'; + break; + case L'\u01CC': // [LATIN SMALL LETTER NJ] + *out = 'n'; + *out = 'j'; + break; + case L'\u00D2': // [LATIN CAPITAL LETTER O WITH GRAVE] + case L'\u00D3': // [LATIN CAPITAL LETTER O WITH ACUTE] + case L'\u00D4': // [LATIN CAPITAL LETTER O WITH CIRCUMFLEX] + case L'\u00D5': // [LATIN CAPITAL LETTER O WITH TILDE] + case L'\u00D6': // [LATIN CAPITAL LETTER O WITH DIAERESIS] + case L'\u00D8': // [LATIN CAPITAL LETTER O WITH STROKE] + case L'\u014C': // [LATIN CAPITAL LETTER O WITH MACRON] + case L'\u014E': // [LATIN CAPITAL LETTER O WITH BREVE] + case L'\u0150': // [LATIN CAPITAL LETTER O WITH DOUBLE ACUTE] + case L'\u0186': // [LATIN CAPITAL LETTER OPEN O] + case L'\u019F': // [LATIN CAPITAL LETTER O WITH MIDDLE TILDE] + case L'\u01A0': // [LATIN CAPITAL LETTER O WITH HORN] + case L'\u01D1': // [LATIN CAPITAL LETTER O WITH CARON] + case L'\u01EA': // [LATIN CAPITAL LETTER O WITH OGONEK] + case L'\u01EC': // [LATIN CAPITAL LETTER O WITH OGONEK AND MACRON] + case L'\u01FE': // [LATIN CAPITAL LETTER O WITH STROKE AND ACUTE] + case L'\u020C': // [LATIN CAPITAL LETTER O WITH DOUBLE GRAVE] + case L'\u020E': // [LATIN CAPITAL LETTER O WITH INVERTED BREVE] + case L'\u022A': // [LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON] + case L'\u022C': // [LATIN CAPITAL LETTER O WITH TILDE AND MACRON] + case L'\u022E': // [LATIN CAPITAL LETTER O WITH DOT ABOVE] + case L'\u0230': // [LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON] + case L'\u1D0F': // [LATIN LETTER SMALL CAPITAL O] + case L'\u1D10': // [LATIN LETTER SMALL CAPITAL OPEN O] + case L'\u1E4C': // [LATIN CAPITAL LETTER O WITH TILDE AND ACUTE] + case L'\u1E4E': // [LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS] + case L'\u1E50': // [LATIN CAPITAL LETTER O WITH MACRON AND GRAVE] + case L'\u1E52': // [LATIN CAPITAL LETTER O WITH MACRON AND ACUTE] + case L'\u1ECC': // [LATIN CAPITAL LETTER O WITH DOT BELOW] + case L'\u1ECE': // [LATIN CAPITAL LETTER O WITH HOOK ABOVE] + case L'\u1ED0': // [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE] + case L'\u1ED2': // [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE] + case L'\u1ED4': // [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE] + case L'\u1ED6': // [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE] + case L'\u1ED8': // [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW] + case L'\u1EDA': // [LATIN CAPITAL LETTER O WITH HORN AND ACUTE] + case L'\u1EDC': // [LATIN CAPITAL LETTER O WITH HORN AND GRAVE] + case L'\u1EDE': // [LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE] + case L'\u1EE0': // [LATIN CAPITAL LETTER O WITH HORN AND TILDE] + case L'\u1EE2': // [LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW] + case L'\u24C4': // [CIRCLED LATIN CAPITAL LETTER O] + case L'\uA74A': // [LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY] + case L'\uA74C': // [LATIN CAPITAL LETTER O WITH LOOP] + case L'\uFF2F': // [FULLWIDTH LATIN CAPITAL LETTER O] + *out = 'O'; + break; + case L'\u00F2': // [LATIN SMALL LETTER O WITH GRAVE] + case L'\u00F3': // [LATIN SMALL LETTER O WITH ACUTE] + case L'\u00F4': // [LATIN SMALL LETTER O WITH CIRCUMFLEX] + case L'\u00F5': // [LATIN SMALL LETTER O WITH TILDE] + case L'\u00F6': // [LATIN SMALL LETTER O WITH DIAERESIS] + case L'\u00F8': // [LATIN SMALL LETTER O WITH STROKE] + case L'\u014D': // [LATIN SMALL LETTER O WITH MACRON] + case L'\u014F': // [LATIN SMALL LETTER O WITH BREVE] + case L'\u0151': // [LATIN SMALL LETTER O WITH DOUBLE ACUTE] + case L'\u01A1': // [LATIN SMALL LETTER O WITH HORN] + case L'\u01D2': // [LATIN SMALL LETTER O WITH CARON] + case L'\u01EB': // [LATIN SMALL LETTER O WITH OGONEK] + case L'\u01ED': // [LATIN SMALL LETTER O WITH OGONEK AND MACRON] + case L'\u01FF': // [LATIN SMALL LETTER O WITH STROKE AND ACUTE] + case L'\u020D': // [LATIN SMALL LETTER O WITH DOUBLE GRAVE] + case L'\u020F': // [LATIN SMALL LETTER O WITH INVERTED BREVE] + case L'\u022B': // [LATIN SMALL LETTER O WITH DIAERESIS AND MACRON] + case L'\u022D': // [LATIN SMALL LETTER O WITH TILDE AND MACRON] + case L'\u022F': // [LATIN SMALL LETTER O WITH DOT ABOVE] + case L'\u0231': // [LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON] + case L'\u0254': // [LATIN SMALL LETTER OPEN O] + case L'\u0275': // [LATIN SMALL LETTER BARRED O] + case L'\u1D16': // [LATIN SMALL LETTER TOP HALF O] + case L'\u1D17': // [LATIN SMALL LETTER BOTTOM HALF O] + case L'\u1D97': // [LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK] + case L'\u1E4D': // [LATIN SMALL LETTER O WITH TILDE AND ACUTE] + case L'\u1E4F': // [LATIN SMALL LETTER O WITH TILDE AND DIAERESIS] + case L'\u1E51': // [LATIN SMALL LETTER O WITH MACRON AND GRAVE] + case L'\u1E53': // [LATIN SMALL LETTER O WITH MACRON AND ACUTE] + case L'\u1ECD': // [LATIN SMALL LETTER O WITH DOT BELOW] + case L'\u1ECF': // [LATIN SMALL LETTER O WITH HOOK ABOVE] + case L'\u1ED1': // [LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE] + case L'\u1ED3': // [LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE] + case L'\u1ED5': // [LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE] + case L'\u1ED7': // [LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE] + case L'\u1ED9': // [LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW] + case L'\u1EDB': // [LATIN SMALL LETTER O WITH HORN AND ACUTE] + case L'\u1EDD': // [LATIN SMALL LETTER O WITH HORN AND GRAVE] + case L'\u1EDF': // [LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE] + case L'\u1EE1': // [LATIN SMALL LETTER O WITH HORN AND TILDE] + case L'\u1EE3': // [LATIN SMALL LETTER O WITH HORN AND DOT BELOW] + case L'\u2092': // [LATIN SUBSCRIPT SMALL LETTER O] + case L'\u24DE': // [CIRCLED LATIN SMALL LETTER O] + case L'\u2C7A': // [LATIN SMALL LETTER O WITH LOW RING INSIDE] + case L'\uA74B': // [LATIN SMALL LETTER O WITH LONG STROKE OVERLAY] + case L'\uA74D': // [LATIN SMALL LETTER O WITH LOOP] + case L'\uFF4F': // [FULLWIDTH LATIN SMALL LETTER O] + *out = 'o'; + break; + case L'\u0152': // [LATIN CAPITAL LIGATURE OE] + case L'\u0276': // [LATIN LETTER SMALL CAPITAL OE] + *out = 'O'; + *out = 'E'; + break; + case L'\uA74E': // [LATIN CAPITAL LETTER OO] + *out = 'O'; + *out = 'O'; + break; + case L'\u0222': // [LATIN CAPITAL LETTER OU] + case L'\u1D15': // [LATIN LETTER SMALL CAPITAL OU] + *out = 'O'; + *out = 'U'; + break; + case L'\u24AA': // [PARENTHESIZED LATIN SMALL LETTER O] + *out = '('; + *out = 'o'; + *out = ')'; + break; + case L'\u0153': // [LATIN SMALL LIGATURE OE] + case L'\u1D14': // [LATIN SMALL LETTER TURNED OE] + *out = 'o'; + *out = 'e'; + break; + case L'\uA74F': // [LATIN SMALL LETTER OO] + *out = 'o'; + *out = 'o'; + break; + case L'\u0223': // [LATIN SMALL LETTER OU] + *out = 'o'; + *out = 'u'; + break; + case L'\u01A4': // [LATIN CAPITAL LETTER P WITH HOOK] + case L'\u1D18': // [LATIN LETTER SMALL CAPITAL P] + case L'\u1E54': // [LATIN CAPITAL LETTER P WITH ACUTE] + case L'\u1E56': // [LATIN CAPITAL LETTER P WITH DOT ABOVE] + case L'\u24C5': // [CIRCLED LATIN CAPITAL LETTER P] + case L'\u2C63': // [LATIN CAPITAL LETTER P WITH STROKE] + case L'\uA750': // [LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER] + case L'\uA752': // [LATIN CAPITAL LETTER P WITH FLOURISH] + case L'\uA754': // [LATIN CAPITAL LETTER P WITH SQUIRREL TAIL] + case L'\uFF30': // [FULLWIDTH LATIN CAPITAL LETTER P] + *out = 'P'; + break; + case L'\u01A5': // [LATIN SMALL LETTER P WITH HOOK] + case L'\u1D71': // [LATIN SMALL LETTER P WITH MIDDLE TILDE] + case L'\u1D7D': // [LATIN SMALL LETTER P WITH STROKE] + case L'\u1D88': // [LATIN SMALL LETTER P WITH PALATAL HOOK] + case L'\u1E55': // [LATIN SMALL LETTER P WITH ACUTE] + case L'\u1E57': // [LATIN SMALL LETTER P WITH DOT ABOVE] + case L'\u24DF': // [CIRCLED LATIN SMALL LETTER P] + case L'\uA751': // [LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER] + case L'\uA753': // [LATIN SMALL LETTER P WITH FLOURISH] + case L'\uA755': // [LATIN SMALL LETTER P WITH SQUIRREL TAIL] + case L'\uA7FC': // [LATIN EPIGRAPHIC LETTER REVERSED P] + case L'\uFF50': // [FULLWIDTH LATIN SMALL LETTER P] + *out = 'p'; + break; + case L'\u24AB': // [PARENTHESIZED LATIN SMALL LETTER P] + *out = '('; + *out = 'p'; + *out = ')'; + break; + case L'\u024A': // [LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL] + case L'\u24C6': // [CIRCLED LATIN CAPITAL LETTER Q] + case L'\uA756': // [LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER] + case L'\uA758': // [LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE] + case L'\uFF31': // [FULLWIDTH LATIN CAPITAL LETTER Q] + *out = 'Q'; + break; + case L'\u0138': // [LATIN SMALL LETTER KRA] + case L'\u024B': // [LATIN SMALL LETTER Q WITH HOOK TAIL] + case L'\u02A0': // [LATIN SMALL LETTER Q WITH HOOK] + case L'\u24E0': // [CIRCLED LATIN SMALL LETTER Q] + case L'\uA757': // [LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER] + case L'\uA759': // [LATIN SMALL LETTER Q WITH DIAGONAL STROKE] + case L'\uFF51': // [FULLWIDTH LATIN SMALL LETTER Q] + *out = 'q'; + break; + case L'\u24AC': // [PARENTHESIZED LATIN SMALL LETTER Q] + *out = '('; + *out = 'q'; + *out = ')'; + break; + case L'\u0239': // [LATIN SMALL LETTER QP DIGRAPH] + *out = 'q'; + *out = 'p'; + break; + case L'\u0154': // [LATIN CAPITAL LETTER R WITH ACUTE] + case L'\u0156': // [LATIN CAPITAL LETTER R WITH CEDILLA] + case L'\u0158': // [LATIN CAPITAL LETTER R WITH CARON] + case L'\u0210': // [LATIN CAPITAL LETTER R WITH DOUBLE GRAVE] + case L'\u0212': // [LATIN CAPITAL LETTER R WITH INVERTED BREVE] + case L'\u024C': // [LATIN CAPITAL LETTER R WITH STROKE] + case L'\u0280': // [LATIN LETTER SMALL CAPITAL R] + case L'\u0281': // [LATIN LETTER SMALL CAPITAL INVERTED R] + case L'\u1D19': // [LATIN LETTER SMALL CAPITAL REVERSED R] + case L'\u1D1A': // [LATIN LETTER SMALL CAPITAL TURNED R] + case L'\u1E58': // [LATIN CAPITAL LETTER R WITH DOT ABOVE] + case L'\u1E5A': // [LATIN CAPITAL LETTER R WITH DOT BELOW] + case L'\u1E5C': // [LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON] + case L'\u1E5E': // [LATIN CAPITAL LETTER R WITH LINE BELOW] + case L'\u24C7': // [CIRCLED LATIN CAPITAL LETTER R] + case L'\u2C64': // [LATIN CAPITAL LETTER R WITH TAIL] + case L'\uA75A': // [LATIN CAPITAL LETTER R ROTUNDA] + case L'\uA782': // [LATIN CAPITAL LETTER INSULAR R] + case L'\uFF32': // [FULLWIDTH LATIN CAPITAL LETTER R] + *out = 'R'; + break; + case L'\u0155': // [LATIN SMALL LETTER R WITH ACUTE] + case L'\u0157': // [LATIN SMALL LETTER R WITH CEDILLA] + case L'\u0159': // [LATIN SMALL LETTER R WITH CARON] + case L'\u0211': // [LATIN SMALL LETTER R WITH DOUBLE GRAVE] + case L'\u0213': // [LATIN SMALL LETTER R WITH INVERTED BREVE] + case L'\u024D': // [LATIN SMALL LETTER R WITH STROKE] + case L'\u027C': // [LATIN SMALL LETTER R WITH LONG LEG] + case L'\u027D': // [LATIN SMALL LETTER R WITH TAIL] + case L'\u027E': // [LATIN SMALL LETTER R WITH FISHHOOK] + case L'\u027F': // [LATIN SMALL LETTER REVERSED R WITH FISHHOOK] + case L'\u1D63': // [LATIN SUBSCRIPT SMALL LETTER R] + case L'\u1D72': // [LATIN SMALL LETTER R WITH MIDDLE TILDE] + case L'\u1D73': // [LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE] + case L'\u1D89': // [LATIN SMALL LETTER R WITH PALATAL HOOK] + case L'\u1E59': // [LATIN SMALL LETTER R WITH DOT ABOVE] + case L'\u1E5B': // [LATIN SMALL LETTER R WITH DOT BELOW] + case L'\u1E5D': // [LATIN SMALL LETTER R WITH DOT BELOW AND MACRON] + case L'\u1E5F': // [LATIN SMALL LETTER R WITH LINE BELOW] + case L'\u24E1': // [CIRCLED LATIN SMALL LETTER R] + case L'\uA75B': // [LATIN SMALL LETTER R ROTUNDA] + case L'\uA783': // [LATIN SMALL LETTER INSULAR R] + case L'\uFF52': // [FULLWIDTH LATIN SMALL LETTER R] + *out = 'r'; + break; + case L'\u24AD': // [PARENTHESIZED LATIN SMALL LETTER R] + *out = '('; + *out = 'r'; + *out = ')'; + break; + case L'\u015A': // [LATIN CAPITAL LETTER S WITH ACUTE] + case L'\u015C': // [LATIN CAPITAL LETTER S WITH CIRCUMFLEX] + case L'\u015E': // [LATIN CAPITAL LETTER S WITH CEDILLA] + case L'\u0160': // [LATIN CAPITAL LETTER S WITH CARON] + case L'\u0218': // [LATIN CAPITAL LETTER S WITH COMMA BELOW] + case L'\u1E60': // [LATIN CAPITAL LETTER S WITH DOT ABOVE] + case L'\u1E62': // [LATIN CAPITAL LETTER S WITH DOT BELOW] + case L'\u1E64': // [LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE] + case L'\u1E66': // [LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE] + case L'\u1E68': // [LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE] + case L'\u24C8': // [CIRCLED LATIN CAPITAL LETTER S] + case L'\uA731': // [LATIN LETTER SMALL CAPITAL S] + case L'\uA785': // [LATIN SMALL LETTER INSULAR S] + case L'\uFF33': // [FULLWIDTH LATIN CAPITAL LETTER S] + *out = 'S'; + break; + case L'\u015B': // [LATIN SMALL LETTER S WITH ACUTE] + case L'\u015D': // [LATIN SMALL LETTER S WITH CIRCUMFLEX] + case L'\u015F': // [LATIN SMALL LETTER S WITH CEDILLA] + case L'\u0161': // [LATIN SMALL LETTER S WITH CARON] + case L'\u017F': // [LATIN SMALL LETTER LONG S] + case L'\u0219': // [LATIN SMALL LETTER S WITH COMMA BELOW] + case L'\u023F': // [LATIN SMALL LETTER S WITH SWASH TAIL] + case L'\u0282': // [LATIN SMALL LETTER S WITH HOOK] + case L'\u1D74': // [LATIN SMALL LETTER S WITH MIDDLE TILDE] + case L'\u1D8A': // [LATIN SMALL LETTER S WITH PALATAL HOOK] + case L'\u1E61': // [LATIN SMALL LETTER S WITH DOT ABOVE] + case L'\u1E63': // [LATIN SMALL LETTER S WITH DOT BELOW] + case L'\u1E65': // [LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE] + case L'\u1E67': // [LATIN SMALL LETTER S WITH CARON AND DOT ABOVE] + case L'\u1E69': // [LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE] + case L'\u1E9C': // [LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE] + case L'\u1E9D': // [LATIN SMALL LETTER LONG S WITH HIGH STROKE] + case L'\u24E2': // [CIRCLED LATIN SMALL LETTER S] + case L'\uA784': // [LATIN CAPITAL LETTER INSULAR S] + case L'\uFF53': // [FULLWIDTH LATIN SMALL LETTER S] + *out = 's'; + break; + case L'\u1E9E': // [LATIN CAPITAL LETTER SHARP S] + *out = 'S'; + *out = 'S'; + break; + case L'\u24AE': // [PARENTHESIZED LATIN SMALL LETTER S] + *out = '('; + *out = 's'; + *out = ')'; + break; + case L'\u00DF': // [LATIN SMALL LETTER SHARP S] + *out = 's'; + *out = 's'; + break; + case L'\uFB06': // [LATIN SMALL LIGATURE ST] + *out = 's'; + *out = 't'; + break; + case L'\u0162': // [LATIN CAPITAL LETTER T WITH CEDILLA] + case L'\u0164': // [LATIN CAPITAL LETTER T WITH CARON] + case L'\u0166': // [LATIN CAPITAL LETTER T WITH STROKE] + case L'\u01AC': // [LATIN CAPITAL LETTER T WITH HOOK] + case L'\u01AE': // [LATIN CAPITAL LETTER T WITH RETROFLEX HOOK] + case L'\u021A': // [LATIN CAPITAL LETTER T WITH COMMA BELOW] + case L'\u023E': // [LATIN CAPITAL LETTER T WITH DIAGONAL STROKE] + case L'\u1D1B': // [LATIN LETTER SMALL CAPITAL T] + case L'\u1E6A': // [LATIN CAPITAL LETTER T WITH DOT ABOVE] + case L'\u1E6C': // [LATIN CAPITAL LETTER T WITH DOT BELOW] + case L'\u1E6E': // [LATIN CAPITAL LETTER T WITH LINE BELOW] + case L'\u1E70': // [LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW] + case L'\u24C9': // [CIRCLED LATIN CAPITAL LETTER T] + case L'\uA786': // [LATIN CAPITAL LETTER INSULAR T] + case L'\uFF34': // [FULLWIDTH LATIN CAPITAL LETTER T] + *out = 'T'; + break; + case L'\u0163': // [LATIN SMALL LETTER T WITH CEDILLA] + case L'\u0165': // [LATIN SMALL LETTER T WITH CARON] + case L'\u0167': // [LATIN SMALL LETTER T WITH STROKE] + case L'\u01AB': // [LATIN SMALL LETTER T WITH PALATAL HOOK] + case L'\u01AD': // [LATIN SMALL LETTER T WITH HOOK] + case L'\u021B': // [LATIN SMALL LETTER T WITH COMMA BELOW] + case L'\u0236': // [LATIN SMALL LETTER T WITH CURL] + case L'\u0287': // [LATIN SMALL LETTER TURNED T] + case L'\u0288': // [LATIN SMALL LETTER T WITH RETROFLEX HOOK] + case L'\u1D75': // [LATIN SMALL LETTER T WITH MIDDLE TILDE] + case L'\u1E6B': // [LATIN SMALL LETTER T WITH DOT ABOVE] + case L'\u1E6D': // [LATIN SMALL LETTER T WITH DOT BELOW] + case L'\u1E6F': // [LATIN SMALL LETTER T WITH LINE BELOW] + case L'\u1E71': // [LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW] + case L'\u1E97': // [LATIN SMALL LETTER T WITH DIAERESIS] + case L'\u24E3': // [CIRCLED LATIN SMALL LETTER T] + case L'\u2C66': // [LATIN SMALL LETTER T WITH DIAGONAL STROKE] + case L'\uFF54': // [FULLWIDTH LATIN SMALL LETTER T] + *out = 't'; + break; + case L'\u00DE': // [LATIN CAPITAL LETTER THORN] + case L'\uA766': // [LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER] + *out = 'T'; + *out = 'H'; + break; + case L'\uA728': // [LATIN CAPITAL LETTER TZ] + *out = 'T'; + *out = 'Z'; + break; + case L'\u24AF': // [PARENTHESIZED LATIN SMALL LETTER T] + *out = '('; + *out = 't'; + *out = ')'; + break; + case L'\u02A8': // [LATIN SMALL LETTER TC DIGRAPH WITH CURL] + *out = 't'; + *out = 'c'; + break; + case L'\u00FE': // [LATIN SMALL LETTER THORN] + case L'\u1D7A': // [LATIN SMALL LETTER TH WITH STRIKETHROUGH] + case L'\uA767': // [LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER] + *out = 't'; + *out = 'h'; + break; + case L'\u02A6': // [LATIN SMALL LETTER TS DIGRAPH] + *out = 't'; + *out = 's'; + break; + case L'\uA729': // [LATIN SMALL LETTER TZ] + *out = 't'; + *out = 'z'; + break; + case L'\u00D9': // [LATIN CAPITAL LETTER U WITH GRAVE] + case L'\u00DA': // [LATIN CAPITAL LETTER U WITH ACUTE] + case L'\u00DB': // [LATIN CAPITAL LETTER U WITH CIRCUMFLEX] + case L'\u00DC': // [LATIN CAPITAL LETTER U WITH DIAERESIS] + case L'\u0168': // [LATIN CAPITAL LETTER U WITH TILDE] + case L'\u016A': // [LATIN CAPITAL LETTER U WITH MACRON] + case L'\u016C': // [LATIN CAPITAL LETTER U WITH BREVE] + case L'\u016E': // [LATIN CAPITAL LETTER U WITH RING ABOVE] + case L'\u0170': // [LATIN CAPITAL LETTER U WITH DOUBLE ACUTE] + case L'\u0172': // [LATIN CAPITAL LETTER U WITH OGONEK] + case L'\u01AF': // [LATIN CAPITAL LETTER U WITH HORN] + case L'\u01D3': // [LATIN CAPITAL LETTER U WITH CARON] + case L'\u01D5': // [LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON] + case L'\u01D7': // [LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE] + case L'\u01D9': // [LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON] + case L'\u01DB': // [LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE] + case L'\u0214': // [LATIN CAPITAL LETTER U WITH DOUBLE GRAVE] + case L'\u0216': // [LATIN CAPITAL LETTER U WITH INVERTED BREVE] + case L'\u0244': // [LATIN CAPITAL LETTER U BAR] + case L'\u1D1C': // [LATIN LETTER SMALL CAPITAL U] + case L'\u1D7E': // [LATIN SMALL CAPITAL LETTER U WITH STROKE] + case L'\u1E72': // [LATIN CAPITAL LETTER U WITH DIAERESIS BELOW] + case L'\u1E74': // [LATIN CAPITAL LETTER U WITH TILDE BELOW] + case L'\u1E76': // [LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW] + case L'\u1E78': // [LATIN CAPITAL LETTER U WITH TILDE AND ACUTE] + case L'\u1E7A': // [LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS] + case L'\u1EE4': // [LATIN CAPITAL LETTER U WITH DOT BELOW] + case L'\u1EE6': // [LATIN CAPITAL LETTER U WITH HOOK ABOVE] + case L'\u1EE8': // [LATIN CAPITAL LETTER U WITH HORN AND ACUTE] + case L'\u1EEA': // [LATIN CAPITAL LETTER U WITH HORN AND GRAVE] + case L'\u1EEC': // [LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE] + case L'\u1EEE': // [LATIN CAPITAL LETTER U WITH HORN AND TILDE] + case L'\u1EF0': // [LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW] + case L'\u24CA': // [CIRCLED LATIN CAPITAL LETTER U] + case L'\uFF35': // [FULLWIDTH LATIN CAPITAL LETTER U] + *out = 'U'; + break; + case L'\u00F9': // [LATIN SMALL LETTER U WITH GRAVE] + case L'\u00FA': // [LATIN SMALL LETTER U WITH ACUTE] + case L'\u00FB': // [LATIN SMALL LETTER U WITH CIRCUMFLEX] + case L'\u00FC': // [LATIN SMALL LETTER U WITH DIAERESIS] + case L'\u0169': // [LATIN SMALL LETTER U WITH TILDE] + case L'\u016B': // [LATIN SMALL LETTER U WITH MACRON] + case L'\u016D': // [LATIN SMALL LETTER U WITH BREVE] + case L'\u016F': // [LATIN SMALL LETTER U WITH RING ABOVE] + case L'\u0171': // [LATIN SMALL LETTER U WITH DOUBLE ACUTE] + case L'\u0173': // [LATIN SMALL LETTER U WITH OGONEK] + case L'\u01B0': // [LATIN SMALL LETTER U WITH HORN] + case L'\u01D4': // [LATIN SMALL LETTER U WITH CARON] + case L'\u01D6': // [LATIN SMALL LETTER U WITH DIAERESIS AND MACRON] + case L'\u01D8': // [LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE] + case L'\u01DA': // [LATIN SMALL LETTER U WITH DIAERESIS AND CARON] + case L'\u01DC': // [LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE] + case L'\u0215': // [LATIN SMALL LETTER U WITH DOUBLE GRAVE] + case L'\u0217': // [LATIN SMALL LETTER U WITH INVERTED BREVE] + case L'\u0289': // [LATIN SMALL LETTER U BAR] + case L'\u1D64': // [LATIN SUBSCRIPT SMALL LETTER U] + case L'\u1D99': // [LATIN SMALL LETTER U WITH RETROFLEX HOOK] + case L'\u1E73': // [LATIN SMALL LETTER U WITH DIAERESIS BELOW] + case L'\u1E75': // [LATIN SMALL LETTER U WITH TILDE BELOW] + case L'\u1E77': // [LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW] + case L'\u1E79': // [LATIN SMALL LETTER U WITH TILDE AND ACUTE] + case L'\u1E7B': // [LATIN SMALL LETTER U WITH MACRON AND DIAERESIS] + case L'\u1EE5': // [LATIN SMALL LETTER U WITH DOT BELOW] + case L'\u1EE7': // [LATIN SMALL LETTER U WITH HOOK ABOVE] + case L'\u1EE9': // [LATIN SMALL LETTER U WITH HORN AND ACUTE] + case L'\u1EEB': // [LATIN SMALL LETTER U WITH HORN AND GRAVE] + case L'\u1EED': // [LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE] + case L'\u1EEF': // [LATIN SMALL LETTER U WITH HORN AND TILDE] + case L'\u1EF1': // [LATIN SMALL LETTER U WITH HORN AND DOT BELOW] + case L'\u24E4': // [CIRCLED LATIN SMALL LETTER U] + case L'\uFF55': // [FULLWIDTH LATIN SMALL LETTER U] + *out = 'u'; + break; + case L'\u24B0': // [PARENTHESIZED LATIN SMALL LETTER U] + *out = '('; + *out = 'u'; + *out = ')'; + break; + case L'\u1D6B': // [LATIN SMALL LETTER UE] + *out = 'u'; + *out = 'e'; + break; + case L'\u01B2': // [LATIN CAPITAL LETTER V WITH HOOK] + case L'\u0245': // [LATIN CAPITAL LETTER TURNED V] + case L'\u1D20': // [LATIN LETTER SMALL CAPITAL V] + case L'\u1E7C': // [LATIN CAPITAL LETTER V WITH TILDE] + case L'\u1E7E': // [LATIN CAPITAL LETTER V WITH DOT BELOW] + case L'\u1EFC': // [LATIN CAPITAL LETTER MIDDLE-WELSH V] + case L'\u24CB': // [CIRCLED LATIN CAPITAL LETTER V] + case L'\uA75E': // [LATIN CAPITAL LETTER V WITH DIAGONAL STROKE] + case L'\uA768': // [LATIN CAPITAL LETTER VEND] + case L'\uFF36': // [FULLWIDTH LATIN CAPITAL LETTER V] + *out = 'V'; + break; + case L'\u028B': // [LATIN SMALL LETTER V WITH HOOK] + case L'\u028C': // [LATIN SMALL LETTER TURNED V] + case L'\u1D65': // [LATIN SUBSCRIPT SMALL LETTER V] + case L'\u1D8C': // [LATIN SMALL LETTER V WITH PALATAL HOOK] + case L'\u1E7D': // [LATIN SMALL LETTER V WITH TILDE] + case L'\u1E7F': // [LATIN SMALL LETTER V WITH DOT BELOW] + case L'\u24E5': // [CIRCLED LATIN SMALL LETTER V] + case L'\u2C71': // [LATIN SMALL LETTER V WITH RIGHT HOOK] + case L'\u2C74': // [LATIN SMALL LETTER V WITH CURL] + case L'\uA75F': // [LATIN SMALL LETTER V WITH DIAGONAL STROKE] + case L'\uFF56': // [FULLWIDTH LATIN SMALL LETTER V] + *out = 'v'; + break; + case L'\uA760': // [LATIN CAPITAL LETTER VY] + *out = 'V'; + *out = 'Y'; + break; + case L'\u24B1': // [PARENTHESIZED LATIN SMALL LETTER V] + *out = '('; + *out = 'v'; + *out = ')'; + break; + case L'\uA761': // [LATIN SMALL LETTER VY] + *out = 'v'; + *out = 'y'; + break; + case L'\u0174': // [LATIN CAPITAL LETTER W WITH CIRCUMFLEX] + case L'\u01F7': // [LATIN CAPITAL LETTER WYNN] + case L'\u1D21': // [LATIN LETTER SMALL CAPITAL W] + case L'\u1E80': // [LATIN CAPITAL LETTER W WITH GRAVE] + case L'\u1E82': // [LATIN CAPITAL LETTER W WITH ACUTE] + case L'\u1E84': // [LATIN CAPITAL LETTER W WITH DIAERESIS] + case L'\u1E86': // [LATIN CAPITAL LETTER W WITH DOT ABOVE] + case L'\u1E88': // [LATIN CAPITAL LETTER W WITH DOT BELOW] + case L'\u24CC': // [CIRCLED LATIN CAPITAL LETTER W] + case L'\u2C72': // [LATIN CAPITAL LETTER W WITH HOOK] + case L'\uFF37': // [FULLWIDTH LATIN CAPITAL LETTER W] + *out = 'W'; + break; + case L'\u0175': // [LATIN SMALL LETTER W WITH CIRCUMFLEX] + case L'\u01BF': // [LATIN LETTER WYNN] + case L'\u028D': // [LATIN SMALL LETTER TURNED W] + case L'\u1E81': // [LATIN SMALL LETTER W WITH GRAVE] + case L'\u1E83': // [LATIN SMALL LETTER W WITH ACUTE] + case L'\u1E85': // [LATIN SMALL LETTER W WITH DIAERESIS] + case L'\u1E87': // [LATIN SMALL LETTER W WITH DOT ABOVE] + case L'\u1E89': // [LATIN SMALL LETTER W WITH DOT BELOW] + case L'\u1E98': // [LATIN SMALL LETTER W WITH RING ABOVE] + case L'\u24E6': // [CIRCLED LATIN SMALL LETTER W] + case L'\u2C73': // [LATIN SMALL LETTER W WITH HOOK] + case L'\uFF57': // [FULLWIDTH LATIN SMALL LETTER W] + *out = 'w'; + break; + case L'\u24B2': // [PARENTHESIZED LATIN SMALL LETTER W] + *out = '('; + *out = 'w'; + *out = ')'; + break; + case L'\u1E8A': // [LATIN CAPITAL LETTER X WITH DOT ABOVE] + case L'\u1E8C': // [LATIN CAPITAL LETTER X WITH DIAERESIS] + case L'\u24CD': // [CIRCLED LATIN CAPITAL LETTER X] + case L'\uFF38': // [FULLWIDTH LATIN CAPITAL LETTER X] + *out = 'X'; + break; + case L'\u1D8D': // [LATIN SMALL LETTER X WITH PALATAL HOOK] + case L'\u1E8B': // [LATIN SMALL LETTER X WITH DOT ABOVE] + case L'\u1E8D': // [LATIN SMALL LETTER X WITH DIAERESIS] + case L'\u2093': // [LATIN SUBSCRIPT SMALL LETTER X] + case L'\u24E7': // [CIRCLED LATIN SMALL LETTER X] + case L'\uFF58': // [FULLWIDTH LATIN SMALL LETTER X] + *out = 'x'; + break; + case L'\u24B3': // [PARENTHESIZED LATIN SMALL LETTER X] + *out = '('; + *out = 'x'; + *out = ')'; + break; + case L'\u00DD': // [LATIN CAPITAL LETTER Y WITH ACUTE] + case L'\u0176': // [LATIN CAPITAL LETTER Y WITH CIRCUMFLEX] + case L'\u0178': // [LATIN CAPITAL LETTER Y WITH DIAERESIS] + case L'\u01B3': // [LATIN CAPITAL LETTER Y WITH HOOK] + case L'\u0232': // [LATIN CAPITAL LETTER Y WITH MACRON] + case L'\u024E': // [LATIN CAPITAL LETTER Y WITH STROKE] + case L'\u028F': // [LATIN LETTER SMALL CAPITAL Y] + case L'\u1E8E': // [LATIN CAPITAL LETTER Y WITH DOT ABOVE] + case L'\u1EF2': // [LATIN CAPITAL LETTER Y WITH GRAVE] + case L'\u1EF4': // [LATIN CAPITAL LETTER Y WITH DOT BELOW] + case L'\u1EF6': // [LATIN CAPITAL LETTER Y WITH HOOK ABOVE] + case L'\u1EF8': // [LATIN CAPITAL LETTER Y WITH TILDE] + case L'\u1EFE': // [LATIN CAPITAL LETTER Y WITH LOOP] + case L'\u24CE': // [CIRCLED LATIN CAPITAL LETTER Y] + case L'\uFF39': // [FULLWIDTH LATIN CAPITAL LETTER Y] + *out = 'Y'; + break; + case L'\u00FD': // [LATIN SMALL LETTER Y WITH ACUTE] + case L'\u00FF': // [LATIN SMALL LETTER Y WITH DIAERESIS] + case L'\u0177': // [LATIN SMALL LETTER Y WITH CIRCUMFLEX] + case L'\u01B4': // [LATIN SMALL LETTER Y WITH HOOK] + case L'\u0233': // [LATIN SMALL LETTER Y WITH MACRON] + case L'\u024F': // [LATIN SMALL LETTER Y WITH STROKE] + case L'\u028E': // [LATIN SMALL LETTER TURNED Y] + case L'\u1E8F': // [LATIN SMALL LETTER Y WITH DOT ABOVE] + case L'\u1E99': // [LATIN SMALL LETTER Y WITH RING ABOVE] + case L'\u1EF3': // [LATIN SMALL LETTER Y WITH GRAVE] + case L'\u1EF5': // [LATIN SMALL LETTER Y WITH DOT BELOW] + case L'\u1EF7': // [LATIN SMALL LETTER Y WITH HOOK ABOVE] + case L'\u1EF9': // [LATIN SMALL LETTER Y WITH TILDE] + case L'\u1EFF': // [LATIN SMALL LETTER Y WITH LOOP] + case L'\u24E8': // [CIRCLED LATIN SMALL LETTER Y] + case L'\uFF59': // [FULLWIDTH LATIN SMALL LETTER Y] + *out = 'y'; + break; + case L'\u24B4': // [PARENTHESIZED LATIN SMALL LETTER Y] + *out = '('; + *out = 'y'; + *out = ')'; + break; + case L'\u0179': // [LATIN CAPITAL LETTER Z WITH ACUTE] + case L'\u017B': // [LATIN CAPITAL LETTER Z WITH DOT ABOVE] + case L'\u017D': // [LATIN CAPITAL LETTER Z WITH CARON] + case L'\u01B5': // [LATIN CAPITAL LETTER Z WITH STROKE] + case L'\u021C': // [LATIN CAPITAL LETTER YOGH] + case L'\u0224': // [LATIN CAPITAL LETTER Z WITH HOOK] + case L'\u1D22': // [LATIN LETTER SMALL CAPITAL Z] + case L'\u1E90': // [LATIN CAPITAL LETTER Z WITH CIRCUMFLEX] + case L'\u1E92': // [LATIN CAPITAL LETTER Z WITH DOT BELOW] + case L'\u1E94': // [LATIN CAPITAL LETTER Z WITH LINE BELOW] + case L'\u24CF': // [CIRCLED LATIN CAPITAL LETTER Z] + case L'\u2C6B': // [LATIN CAPITAL LETTER Z WITH DESCENDER] + case L'\uA762': // [LATIN CAPITAL LETTER VISIGOTHIC Z] + case L'\uFF3A': // [FULLWIDTH LATIN CAPITAL LETTER Z] + *out = 'Z'; + break; + case L'\u017A': // [LATIN SMALL LETTER Z WITH ACUTE] + case L'\u017C': // [LATIN SMALL LETTER Z WITH DOT ABOVE] + case L'\u017E': // [LATIN SMALL LETTER Z WITH CARON] + case L'\u01B6': // [LATIN SMALL LETTER Z WITH STROKE] + case L'\u021D': // [LATIN SMALL LETTER YOGH] + case L'\u0225': // [LATIN SMALL LETTER Z WITH HOOK] + case L'\u0240': // [LATIN SMALL LETTER Z WITH SWASH TAIL] + case L'\u0290': // [LATIN SMALL LETTER Z WITH RETROFLEX HOOK] + case L'\u0291': // [LATIN SMALL LETTER Z WITH CURL] + case L'\u1D76': // [LATIN SMALL LETTER Z WITH MIDDLE TILDE] + case L'\u1D8E': // [LATIN SMALL LETTER Z WITH PALATAL HOOK] + case L'\u1E91': // [LATIN SMALL LETTER Z WITH CIRCUMFLEX] + case L'\u1E93': // [LATIN SMALL LETTER Z WITH DOT BELOW] + case L'\u1E95': // [LATIN SMALL LETTER Z WITH LINE BELOW] + case L'\u24E9': // [CIRCLED LATIN SMALL LETTER Z] + case L'\u2C6C': // [LATIN SMALL LETTER Z WITH DESCENDER] + case L'\uA763': // [LATIN SMALL LETTER VISIGOTHIC Z] + case L'\uFF5A': // [FULLWIDTH LATIN SMALL LETTER Z] + *out = 'z'; + break; + case L'\u24B5': // [PARENTHESIZED LATIN SMALL LETTER Z] + *out = '('; + *out = 'z'; + *out = ')'; + break; + case L'\u2070': // [SUPERSCRIPT ZERO] + case L'\u2080': // [SUBSCRIPT ZERO] + case L'\u24EA': // [CIRCLED DIGIT ZERO] + case L'\u24FF': // [NEGATIVE CIRCLED DIGIT ZERO] + case L'\uFF10': // [FULLWIDTH DIGIT ZERO] + *out = '0'; + break; + case L'\u00B9': // [SUPERSCRIPT ONE] + case L'\u2081': // [SUBSCRIPT ONE] + case L'\u2460': // [CIRCLED DIGIT ONE] + case L'\u24F5': // [DOUBLE CIRCLED DIGIT ONE] + case L'\u2776': // [DINGBAT NEGATIVE CIRCLED DIGIT ONE] + case L'\u2780': // [DINGBAT CIRCLED SANS-SERIF DIGIT ONE] + case L'\u278A': // [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE] + case L'\uFF11': // [FULLWIDTH DIGIT ONE] + *out = '1'; + break; + case L'\u2488': // [DIGIT ONE FULL STOP] + *out = '1'; + *out = '.'; + break; + case L'\u2474': // [PARENTHESIZED DIGIT ONE] + *out = '('; + *out = '1'; + *out = ')'; + break; + case L'\u00B2': // [SUPERSCRIPT TWO] + case L'\u2082': // [SUBSCRIPT TWO] + case L'\u2461': // [CIRCLED DIGIT TWO] + case L'\u24F6': // [DOUBLE CIRCLED DIGIT TWO] + case L'\u2777': // [DINGBAT NEGATIVE CIRCLED DIGIT TWO] + case L'\u2781': // [DINGBAT CIRCLED SANS-SERIF DIGIT TWO] + case L'\u278B': // [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO] + case L'\uFF12': // [FULLWIDTH DIGIT TWO] + *out = '2'; + break; + case L'\u2489': // [DIGIT TWO FULL STOP] + *out = '2'; + *out = '.'; + break; + case L'\u2475': // [PARENTHESIZED DIGIT TWO] + *out = '('; + *out = '2'; + *out = ')'; + break; + case L'\u00B3': // [SUPERSCRIPT THREE] + case L'\u2083': // [SUBSCRIPT THREE] + case L'\u2462': // [CIRCLED DIGIT THREE] + case L'\u24F7': // [DOUBLE CIRCLED DIGIT THREE] + case L'\u2778': // [DINGBAT NEGATIVE CIRCLED DIGIT THREE] + case L'\u2782': // [DINGBAT CIRCLED SANS-SERIF DIGIT THREE] + case L'\u278C': // [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE] + case L'\uFF13': // [FULLWIDTH DIGIT THREE] + *out = '3'; + break; + case L'\u248A': // [DIGIT THREE FULL STOP] + *out = '3'; + *out = '.'; + break; + case L'\u2476': // [PARENTHESIZED DIGIT THREE] + *out = '('; + *out = '3'; + *out = ')'; + break; + case L'\u2074': // [SUPERSCRIPT FOUR] + case L'\u2084': // [SUBSCRIPT FOUR] + case L'\u2463': // [CIRCLED DIGIT FOUR] + case L'\u24F8': // [DOUBLE CIRCLED DIGIT FOUR] + case L'\u2779': // [DINGBAT NEGATIVE CIRCLED DIGIT FOUR] + case L'\u2783': // [DINGBAT CIRCLED SANS-SERIF DIGIT FOUR] + case L'\u278D': // [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR] + case L'\uFF14': // [FULLWIDTH DIGIT FOUR] + *out = '4'; + break; + case L'\u248B': // [DIGIT FOUR FULL STOP] + *out = '4'; + *out = '.'; + break; + case L'\u2477': // [PARENTHESIZED DIGIT FOUR] + *out = '('; + *out = '4'; + *out = ')'; + break; + case L'\u2075': // [SUPERSCRIPT FIVE] + case L'\u2085': // [SUBSCRIPT FIVE] + case L'\u2464': // [CIRCLED DIGIT FIVE] + case L'\u24F9': // [DOUBLE CIRCLED DIGIT FIVE] + case L'\u277A': // [DINGBAT NEGATIVE CIRCLED DIGIT FIVE] + case L'\u2784': // [DINGBAT CIRCLED SANS-SERIF DIGIT FIVE] + case L'\u278E': // [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE] + case L'\uFF15': // [FULLWIDTH DIGIT FIVE] + *out = '5'; + break; + case L'\u248C': // [DIGIT FIVE FULL STOP] + *out = '5'; + *out = '.'; + break; + case L'\u2478': // [PARENTHESIZED DIGIT FIVE] + *out = '('; + *out = '5'; + *out = ')'; + break; + case L'\u2076': // [SUPERSCRIPT SIX] + case L'\u2086': // [SUBSCRIPT SIX] + case L'\u2465': // [CIRCLED DIGIT SIX] + case L'\u24FA': // [DOUBLE CIRCLED DIGIT SIX] + case L'\u277B': // [DINGBAT NEGATIVE CIRCLED DIGIT SIX] + case L'\u2785': // [DINGBAT CIRCLED SANS-SERIF DIGIT SIX] + case L'\u278F': // [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX] + case L'\uFF16': // [FULLWIDTH DIGIT SIX] + *out = '6'; + break; + case L'\u248D': // [DIGIT SIX FULL STOP] + *out = '6'; + *out = '.'; + break; + case L'\u2479': // [PARENTHESIZED DIGIT SIX] + *out = '('; + *out = '6'; + *out = ')'; + break; + case L'\u2077': // [SUPERSCRIPT SEVEN] + case L'\u2087': // [SUBSCRIPT SEVEN] + case L'\u2466': // [CIRCLED DIGIT SEVEN] + case L'\u24FB': // [DOUBLE CIRCLED DIGIT SEVEN] + case L'\u277C': // [DINGBAT NEGATIVE CIRCLED DIGIT SEVEN] + case L'\u2786': // [DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN] + case L'\u2790': // [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN] + case L'\uFF17': // [FULLWIDTH DIGIT SEVEN] + *out = '7'; + break; + case L'\u248E': // [DIGIT SEVEN FULL STOP] + *out = '7'; + *out = '.'; + break; + case L'\u247A': // [PARENTHESIZED DIGIT SEVEN] + *out = '('; + *out = '7'; + *out = ')'; + break; + case L'\u2078': // [SUPERSCRIPT EIGHT] + case L'\u2088': // [SUBSCRIPT EIGHT] + case L'\u2467': // [CIRCLED DIGIT EIGHT] + case L'\u24FC': // [DOUBLE CIRCLED DIGIT EIGHT] + case L'\u277D': // [DINGBAT NEGATIVE CIRCLED DIGIT EIGHT] + case L'\u2787': // [DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT] + case L'\u2791': // [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT] + case L'\uFF18': // [FULLWIDTH DIGIT EIGHT] + *out = '8'; + break; + case L'\u248F': // [DIGIT EIGHT FULL STOP] + *out = '8'; + *out = '.'; + break; + case L'\u247B': // [PARENTHESIZED DIGIT EIGHT] + *out = '('; + *out = '8'; + *out = ')'; + break; + case L'\u2079': // [SUPERSCRIPT NINE] + case L'\u2089': // [SUBSCRIPT NINE] + case L'\u2468': // [CIRCLED DIGIT NINE] + case L'\u24FD': // [DOUBLE CIRCLED DIGIT NINE] + case L'\u277E': // [DINGBAT NEGATIVE CIRCLED DIGIT NINE] + case L'\u2788': // [DINGBAT CIRCLED SANS-SERIF DIGIT NINE] + case L'\u2792': // [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE] + case L'\uFF19': // [FULLWIDTH DIGIT NINE] + *out = '9'; + break; + case L'\u2490': // [DIGIT NINE FULL STOP] + *out = '9'; + *out = '.'; + break; + case L'\u247C': // [PARENTHESIZED DIGIT NINE] + *out = '('; + *out = '9'; + *out = ')'; + break; + case L'\u2469': // [CIRCLED NUMBER TEN] + case L'\u24FE': // [DOUBLE CIRCLED NUMBER TEN] + case L'\u277F': // [DINGBAT NEGATIVE CIRCLED NUMBER TEN] + case L'\u2789': // [DINGBAT CIRCLED SANS-SERIF NUMBER TEN] + case L'\u2793': // [DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN] + *out = '1'; + *out = '0'; + break; + case L'\u2491': // [NUMBER TEN FULL STOP] + *out = '1'; + *out = '0'; + *out = '.'; + break; + case L'\u247D': // [PARENTHESIZED NUMBER TEN] + *out = '('; + *out = '1'; + *out = '0'; + *out = ')'; + break; + case L'\u246A': // [CIRCLED NUMBER ELEVEN] + case L'\u24EB': // [NEGATIVE CIRCLED NUMBER ELEVEN] + *out = '1'; + *out = '1'; + break; + case L'\u2492': // [NUMBER ELEVEN FULL STOP] + *out = '1'; + *out = '1'; + *out = '.'; + break; + case L'\u247E': // [PARENTHESIZED NUMBER ELEVEN] + *out = '('; + *out = '1'; + *out = '1'; + *out = ')'; + break; + case L'\u246B': // [CIRCLED NUMBER TWELVE] + case L'\u24EC': // [NEGATIVE CIRCLED NUMBER TWELVE] + *out = '1'; + *out = '2'; + break; + case L'\u2493': // [NUMBER TWELVE FULL STOP] + *out = '1'; + *out = '2'; + *out = '.'; + break; + case L'\u247F': // [PARENTHESIZED NUMBER TWELVE] + *out = '('; + *out = '1'; + *out = '2'; + *out = ')'; + break; + case L'\u246C': // [CIRCLED NUMBER THIRTEEN] + case L'\u24ED': // [NEGATIVE CIRCLED NUMBER THIRTEEN] + *out = '1'; + *out = '3'; + break; + case L'\u2494': // [NUMBER THIRTEEN FULL STOP] + *out = '1'; + *out = '3'; + *out = '.'; + break; + case L'\u2480': // [PARENTHESIZED NUMBER THIRTEEN] + *out = '('; + *out = '1'; + *out = '3'; + *out = ')'; + break; + case L'\u246D': // [CIRCLED NUMBER FOURTEEN] + case L'\u24EE': // [NEGATIVE CIRCLED NUMBER FOURTEEN] + *out = '1'; + *out = '4'; + break; + case L'\u2495': // [NUMBER FOURTEEN FULL STOP] + *out = '1'; + *out = '4'; + *out = '.'; + break; + case L'\u2481': // [PARENTHESIZED NUMBER FOURTEEN] + *out = '('; + *out = '1'; + *out = '4'; + *out = ')'; + break; + case L'\u246E': // [CIRCLED NUMBER FIFTEEN] + case L'\u24EF': // [NEGATIVE CIRCLED NUMBER FIFTEEN] + *out = '1'; + *out = '5'; + break; + case L'\u2496': // [NUMBER FIFTEEN FULL STOP] + *out = '1'; + *out = '5'; + *out = '.'; + break; + case L'\u2482': // [PARENTHESIZED NUMBER FIFTEEN] + *out = '('; + *out = '1'; + *out = '5'; + *out = ')'; + break; + case L'\u246F': // [CIRCLED NUMBER SIXTEEN] + case L'\u24F0': // [NEGATIVE CIRCLED NUMBER SIXTEEN] + *out = '1'; + *out = '6'; + break; + case L'\u2497': // [NUMBER SIXTEEN FULL STOP] + *out = '1'; + *out = '6'; + *out = '.'; + break; + case L'\u2483': // [PARENTHESIZED NUMBER SIXTEEN] + *out = '('; + *out = '1'; + *out = '6'; + *out = ')'; + break; + case L'\u2470': // [CIRCLED NUMBER SEVENTEEN] + case L'\u24F1': // [NEGATIVE CIRCLED NUMBER SEVENTEEN] + *out = '1'; + *out = '7'; + break; + case L'\u2498': // [NUMBER SEVENTEEN FULL STOP] + *out = '1'; + *out = '7'; + *out = '.'; + break; + case L'\u2484': // [PARENTHESIZED NUMBER SEVENTEEN] + *out = '('; + *out = '1'; + *out = '7'; + *out = ')'; + break; + case L'\u2471': // [CIRCLED NUMBER EIGHTEEN] + case L'\u24F2': // [NEGATIVE CIRCLED NUMBER EIGHTEEN] + *out = '1'; + *out = '8'; + break; + case L'\u2499': // [NUMBER EIGHTEEN FULL STOP] + *out = '1'; + *out = '8'; + *out = '.'; + break; + case L'\u2485': // [PARENTHESIZED NUMBER EIGHTEEN] + *out = '('; + *out = '1'; + *out = '8'; + *out = ')'; + break; + case L'\u2472': // [CIRCLED NUMBER NINETEEN] + case L'\u24F3': // [NEGATIVE CIRCLED NUMBER NINETEEN] + *out = '1'; + *out = '9'; + break; + case L'\u249A': // [NUMBER NINETEEN FULL STOP] + *out = '1'; + *out = '9'; + *out = '.'; + break; + case L'\u2486': // [PARENTHESIZED NUMBER NINETEEN] + *out = '('; + *out = '1'; + *out = '9'; + *out = ')'; + break; + case L'\u2473': // [CIRCLED NUMBER TWENTY] + case L'\u24F4': // [NEGATIVE CIRCLED NUMBER TWENTY] + *out = '2'; + *out = '0'; + break; + case L'\u249B': // [NUMBER TWENTY FULL STOP] + *out = '2'; + *out = '0'; + *out = '.'; + break; + case L'\u2487': // [PARENTHESIZED NUMBER TWENTY] + *out = '('; + *out = '2'; + *out = '0'; + *out = ')'; + break; + case L'\u00AB': // [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK] + case L'\u00BB': // [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK] + case L'\u201C': // [LEFT DOUBLE QUOTATION MARK] + case L'\u201D': // [RIGHT DOUBLE QUOTATION MARK] + case L'\u201E': // [DOUBLE LOW-9 QUOTATION MARK] + case L'\u2033': // [DOUBLE PRIME] + case L'\u2036': // [REVERSED DOUBLE PRIME] + case L'\u275D': // [HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT] + case L'\u275E': // [HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT] + case L'\u276E': // [HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT] + case L'\u276F': // [HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT] + case L'\uFF02': // [FULLWIDTH QUOTATION MARK] + *out = '"'; + break; + case L'\u2018': // [LEFT SINGLE QUOTATION MARK] + case L'\u2019': // [RIGHT SINGLE QUOTATION MARK] + case L'\u201A': // [SINGLE LOW-9 QUOTATION MARK] + case L'\u201B': // [SINGLE HIGH-REVERSED-9 QUOTATION MARK] + case L'\u2032': // [PRIME] + case L'\u2035': // [REVERSED PRIME] + case L'\u2039': // [SINGLE LEFT-POINTING ANGLE QUOTATION MARK] + case L'\u203A': // [SINGLE RIGHT-POINTING ANGLE QUOTATION MARK] + case L'\u275B': // [HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT] + case L'\u275C': // [HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT] + case L'\uFF07': // [FULLWIDTH APOSTROPHE] + *out = '\''; + break; + case L'\u2010': // [HYPHEN] + case L'\u2011': // [NON-BREAKING HYPHEN] + case L'\u2012': // [FIGURE DASH] + case L'\u2013': // [EN DASH] + case L'\u2014': // [EM DASH] + case L'\u207B': // [SUPERSCRIPT MINUS] + case L'\u208B': // [SUBSCRIPT MINUS] + case L'\uFF0D': // [FULLWIDTH HYPHEN-MINUS] + *out = '-'; + break; + case L'\u2045': // [LEFT SQUARE BRACKET WITH QUILL] + case L'\u2772': // [LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT] + case L'\uFF3B': // [FULLWIDTH LEFT SQUARE BRACKET] + *out = '['; + break; + case L'\u2046': // [RIGHT SQUARE BRACKET WITH QUILL] + case L'\u2773': // [LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT] + case L'\uFF3D': // [FULLWIDTH RIGHT SQUARE BRACKET] + *out = ']'; + break; + case L'\u207D': // [SUPERSCRIPT LEFT PARENTHESIS] + case L'\u208D': // [SUBSCRIPT LEFT PARENTHESIS] + case L'\u2768': // [MEDIUM LEFT PARENTHESIS ORNAMENT] + case L'\u276A': // [MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT] + case L'\uFF08': // [FULLWIDTH LEFT PARENTHESIS] + *out = '('; + break; + case L'\u2E28': // [LEFT DOUBLE PARENTHESIS] + *out = '('; + *out = '('; + break; + case L'\u207E': // [SUPERSCRIPT RIGHT PARENTHESIS] + case L'\u208E': // [SUBSCRIPT RIGHT PARENTHESIS] + case L'\u2769': // [MEDIUM RIGHT PARENTHESIS ORNAMENT] + case L'\u276B': // [MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT] + case L'\uFF09': // [FULLWIDTH RIGHT PARENTHESIS] + *out = ')'; + break; + case L'\u2E29': // [RIGHT DOUBLE PARENTHESIS] + *out = ')'; + *out = ')'; + break; + case L'\u276C': // [MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT] + case L'\u2770': // [HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT] + case L'\uFF1C': // [FULLWIDTH LESS-THAN SIGN] + *out = '<'; + break; + case L'\u276D': // [MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT] + case L'\u2771': // [HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT] + case L'\uFF1E': // [FULLWIDTH GREATER-THAN SIGN] + *out = '>'; + break; + case L'\u2774': // [MEDIUM LEFT CURLY BRACKET ORNAMENT] + case L'\uFF5B': // [FULLWIDTH LEFT CURLY BRACKET] + *out = '{'; + break; + case L'\u2775': // [MEDIUM RIGHT CURLY BRACKET ORNAMENT] + case L'\uFF5D': // [FULLWIDTH RIGHT CURLY BRACKET] + *out = '}'; + break; + case L'\u207A': // [SUPERSCRIPT PLUS SIGN] + case L'\u208A': // [SUBSCRIPT PLUS SIGN] + case L'\uFF0B': // [FULLWIDTH PLUS SIGN] + *out = '+'; + break; + case L'\u207C': // [SUPERSCRIPT EQUALS SIGN] + case L'\u208C': // [SUBSCRIPT EQUALS SIGN] + case L'\uFF1D': // [FULLWIDTH EQUALS SIGN] + *out = '='; + break; + case L'\uFF01': // [FULLWIDTH EXCLAMATION MARK] + *out = '!'; + break; + case L'\u203C': // [DOUBLE EXCLAMATION MARK] + *out = '!'; + *out = '!'; + break; + case L'\u2049': // [EXCLAMATION QUESTION MARK] + *out = '!'; + *out = '?'; + break; + case L'\uFF03': // [FULLWIDTH NUMBER SIGN] + *out = '#'; + break; + case L'\uFF04': // [FULLWIDTH DOLLAR SIGN] + *out = '$'; + break; + case L'\u2052': // [COMMERCIAL MINUS SIGN] + case L'\uFF05': // [FULLWIDTH PERCENT SIGN] + *out = '%'; + break; + case L'\uFF06': // [FULLWIDTH AMPERSAND] + *out = '&'; + break; + case L'\u204E': // [LOW ASTERISK] + case L'\uFF0A': // [FULLWIDTH ASTERISK] + *out = '*'; + break; + case L'\uFF0C': // [FULLWIDTH COMMA] + *out = ','; + break; + case L'\uFF0E': // [FULLWIDTH FULL STOP] + *out = '.'; + break; + case L'\u2044': // [FRACTION SLASH] + case L'\uFF0F': // [FULLWIDTH SOLIDUS] + *out = '/'; + break; + case L'\uFF1A': // [FULLWIDTH COLON] + *out = ':'; + break; + case L'\u204F': // [REVERSED SEMICOLON] + case L'\uFF1B': // [FULLWIDTH SEMICOLON] + *out = ';'; + break; + case L'\uFF1F': // [FULLWIDTH QUESTION MARK] + *out = '?'; + break; + case L'\u2047': // [DOUBLE QUESTION MARK] + *out = '?'; + *out = '?'; + break; + case L'\u2048': // [QUESTION EXCLAMATION MARK] + *out = '?'; + *out = '!'; + break; + case L'\uFF20': // [FULLWIDTH COMMERCIAL AT] + *out = '@'; + break; + case L'\uFF3C': // [FULLWIDTH REVERSE SOLIDUS] + *out = '\\'; + break; + case L'\u2038': // [CARET] + case L'\uFF3E': // [FULLWIDTH CIRCUMFLEX ACCENT] + *out = '^'; + break; + case L'\uFF3F': // [FULLWIDTH LOW LINE] + *out = '_'; + break; + case L'\u2053': // [SWUNG DASH] + case L'\uFF5E': // [FULLWIDTH TILDE] + *out = '~'; + break; + default: + *out = c; + break; + } + } +} + +namespace Slic3r { + +std::string fold_utf8_to_ascii(const std::string &src) +{ + std::wstring wstr = boost::locale::conv::utf_to_utf(src.c_str(), src.c_str() + src.size()); + std::wstring dst; + dst.reserve(wstr.size()); + auto out = std::back_insert_iterator(dst); + for (wchar_t c : wstr) + fold_to_ascii(c, out); + return boost::locale::conv::utf_to_utf(dst.c_str(), dst.c_str() + dst.size()); +} + +std::string fold_utf8_to_ascii(const char *src) +{ + std::wstring wstr = boost::locale::conv::utf_to_utf(src, src + strlen(src)); + std::wstring dst; + dst.reserve(wstr.size()); + auto out = std::back_insert_iterator(dst); + for (wchar_t c : wstr) + fold_to_ascii(c, out); + return boost::locale::conv::utf_to_utf(dst.c_str(), dst.c_str() + dst.size()); +} + +}; // namespace Slic3r diff --git a/xs/src/slic3r/Utils/ASCIIFolding.hpp b/xs/src/slic3r/Utils/ASCIIFolding.hpp new file mode 100644 index 000000000..55f56482d --- /dev/null +++ b/xs/src/slic3r/Utils/ASCIIFolding.hpp @@ -0,0 +1,15 @@ +#ifndef slic3r_ASCIIFolding_hpp_ +#define slic3r_ASCIIFolding_hpp_ + +#include + +namespace Slic3r { + +// If possible, remove accents from accented latin characters. +// This function is useful for generating file names to be processed by legacy firmwares. +extern std::string fold_utf8_to_ascii(const char *src); +extern std::string fold_utf8_to_ascii(const std::string &src); + +}; // namespace Slic3r + +#endif /* slic3r_ASCIIFolding_hpp_ */ diff --git a/xs/src/slic3r/Utils/Bonjour.cpp b/xs/src/slic3r/Utils/Bonjour.cpp index 6107e2c60..09d9b5873 100644 --- a/xs/src/slic3r/Utils/Bonjour.cpp +++ b/xs/src/slic3r/Utils/Bonjour.cpp @@ -1,9 +1,7 @@ #include "Bonjour.hpp" -#include // XXX #include #include -#include #include #include #include @@ -23,16 +21,18 @@ namespace asio = boost::asio; using boost::asio::ip::udp; -// TODO: Fuzzing test (done without TXT) -// FIXME: check char retype to unsigned - - namespace Slic3r { // Minimal implementation of a MDNS/DNS-SD client // This implementation is extremely simple, only the bits that are useful -// for very basic MDNS discovery are present. +// for basic MDNS discovery of OctoPi devices are present. +// However, the bits that are present are implemented with security in mind. +// Only fully correct DNS replies are allowed through. +// While decoding the decoder will bail the moment it encounters anything fishy. +// At least that's the idea. To help prove this is actually the case, +// the implementations has been tested with AFL. + struct DnsName: public std::string { @@ -48,8 +48,7 @@ struct DnsName: public std::string return boost::none; } - // Check for recursion depth to prevent parsing names that are nested too deeply - // or end up cyclic: + // Check for recursion depth to prevent parsing names that are nested too deeply or end up cyclic: if (depth >= MAX_RECURSION) { return boost::none; } @@ -443,6 +442,30 @@ private: } }; +std::ostream& operator<<(std::ostream &os, const DnsMessage &msg) +{ + os << "DnsMessage(ID: " << msg.header.id << ", " + << "Q: " << (msg.question ? msg.question->name.c_str() : "none") << ", " + << "A: " << (msg.rr_a ? msg.rr_a->ip.to_string() : "none") << ", " + << "AAAA: " << (msg.rr_aaaa ? msg.rr_aaaa->ip.to_string() : "none") << ", " + << "services: ["; + + enum { SRV_PRINT_MAX = 3 }; + unsigned i = 0; + for (const auto &sdpair : msg.sdmap) { + os << sdpair.first << ", "; + + if (++i >= SRV_PRINT_MAX) { + os << "..."; + break; + } + } + + os << "])"; + + return os; +} + struct BonjourRequest { @@ -515,6 +538,7 @@ struct Bonjour::priv const std::string protocol; const std::string service_dn; unsigned timeout; + unsigned retries; uint16_t rq_id; std::vector buffer; @@ -524,6 +548,7 @@ struct Bonjour::priv priv(std::string service, std::string protocol); + std::string strip_service_dn(const std::string &service_name) const; void udp_receive(udp::endpoint from, size_t bytes); void lookup_perform(); }; @@ -533,11 +558,26 @@ Bonjour::priv::priv(std::string service, std::string protocol) : protocol(std::move(protocol)), service_dn((boost::format("_%1%._%2%.local") % this->service % this->protocol).str()), timeout(10), + retries(1), rq_id(0) { buffer.resize(DnsMessage::MAX_SIZE); } +std::string Bonjour::priv::strip_service_dn(const std::string &service_name) const +{ + if (service_name.size() <= service_dn.size()) { + return service_name; + } + + auto needle = service_name.rfind(service_dn); + if (needle == service_name.size() - service_dn.size()) { + return service_name.substr(0, needle - 1); + } else { + return service_name; + } +} + void Bonjour::priv::udp_receive(udp::endpoint from, size_t bytes) { if (bytes == 0 || !replyfn) { @@ -557,7 +597,10 @@ void Bonjour::priv::udp_receive(udp::endpoint from, size_t bytes) } const auto &srv = *sdpair.second.srv; - BonjourReply reply(ip, sdpair.first, srv.hostname); + auto service_name = strip_service_dn(sdpair.first); + + std::string path; + std::string version; if (sdpair.second.txt) { static const std::string tag_path = "path="; @@ -565,13 +608,14 @@ void Bonjour::priv::udp_receive(udp::endpoint from, size_t bytes) for (const auto &value : sdpair.second.txt->values) { if (value.size() > tag_path.size() && value.compare(0, tag_path.size(), tag_path) == 0) { - reply.path = value.substr(tag_path.size()); + path = std::move(value.substr(tag_path.size())); } else if (value.size() > tag_version.size() && value.compare(0, tag_version.size(), tag_version) == 0) { - reply.version = value.substr(tag_version.size()); + version = std::move(value.substr(tag_version.size())); } } } + BonjourReply reply(ip, srv.port, std::move(service_name), srv.hostname, std::move(path), std::move(version)); replyfn(std::move(reply)); } } @@ -595,15 +639,26 @@ void Bonjour::priv::lookup_perform() udp::endpoint mcast(BonjourRequest::MCAST_IP4, BonjourRequest::MCAST_PORT); socket.send_to(asio::buffer(brq->data), mcast); - bool timeout = false; + bool expired = false; + bool retry = false; asio::deadline_timer timer(io_service); - timer.expires_from_now(boost::posix_time::seconds(10)); - timer.async_wait([=, &timeout](const error_code &error) { - timeout = true; - if (self->completefn) { - self->completefn(); + retries--; + std::function timer_handler = [&](const error_code &error) { + if (retries == 0 || error) { + expired = true; + if (self->completefn) { + self->completefn(); + } + } else { + retry = true; + retries--; + timer.expires_from_now(boost::posix_time::seconds(timeout)); + timer.async_wait(timer_handler); } - }); + }; + + timer.expires_from_now(boost::posix_time::seconds(timeout)); + timer.async_wait(timer_handler); udp::endpoint recv_from; const auto recv_handler = [&](const error_code &error, size_t bytes) { @@ -612,8 +667,11 @@ void Bonjour::priv::lookup_perform() socket.async_receive_from(asio::buffer(buffer, buffer.size()), recv_from, recv_handler); while (io_service.run_one()) { - if (timeout) { + if (expired) { socket.cancel(); + } else if (retry) { + retry = false; + socket.send_to(asio::buffer(brq->data), mcast); } else { buffer.resize(DnsMessage::MAX_SIZE); socket.async_receive_from(asio::buffer(buffer, buffer.size()), recv_from, recv_handler); @@ -626,13 +684,39 @@ void Bonjour::priv::lookup_perform() // API - public part -BonjourReply::BonjourReply(boost::asio::ip::address ip, std::string service_name, std::string hostname) : +BonjourReply::BonjourReply(boost::asio::ip::address ip, uint16_t port, std::string service_name, std::string hostname, std::string path, std::string version) : ip(std::move(ip)), + port(port), service_name(std::move(service_name)), hostname(std::move(hostname)), - path("/"), - version("Unknown") -{} + path(path.empty() ? std::move(std::string("/")) : std::move(path)), + version(version.empty() ? std::move(std::string("Unknown")) : std::move(version)) +{ + std::string proto; + std::string port_suffix; + if (port == 443) { proto = "https://"; } + if (port != 443 && port != 80) { port_suffix = std::to_string(port).insert(0, 1, ':'); } + if (this->path[0] != '/') { this->path.insert(0, 1, '/'); } + full_address = proto + ip.to_string() + port_suffix; + if (this->path != "/") { full_address += path; } +} + +bool BonjourReply::operator==(const BonjourReply &other) const +{ + return this->full_address == other.full_address + && this->service_name == other.service_name; +} + +bool BonjourReply::operator<(const BonjourReply &other) const +{ + if (this->ip != other.ip) { + // So that the common case doesn't involve string comparison + return this->ip < other.ip; + } else { + auto cmp = this->full_address.compare(other.full_address); + return cmp != 0 ? cmp < 0 : this->service_name < other.service_name; + } +} std::ostream& operator<<(std::ostream &os, const BonjourReply &reply) { @@ -641,6 +725,7 @@ std::ostream& operator<<(std::ostream &os, const BonjourReply &reply) return os; } + Bonjour::Bonjour(std::string service, std::string protocol) : p(new priv(std::move(service), std::move(protocol))) {} @@ -660,6 +745,12 @@ Bonjour& Bonjour::set_timeout(unsigned timeout) return *this; } +Bonjour& Bonjour::set_retries(unsigned retries) +{ + if (p && retries > 0) { p->retries = retries; } + return *this; +} + Bonjour& Bonjour::on_reply(ReplyFn fn) { if (p) { p->replyfn = std::move(fn); } @@ -677,7 +768,7 @@ Bonjour::Ptr Bonjour::lookup() auto self = std::make_shared(std::move(*this)); if (self->p) { - auto io_thread = std::thread([self](){ + auto io_thread = std::thread([self]() { self->p->lookup_perform(); }); self->p->io_thread = std::move(io_thread); @@ -687,18 +778,4 @@ Bonjour::Ptr Bonjour::lookup() } -void Bonjour::pokus() // XXX -{ - auto bonjour = Bonjour("octoprint") - .set_timeout(15) - .on_reply([](BonjourReply &&reply) { - std::cerr << "BonjourReply: " << reply << std::endl; - }) - .on_complete([](){ - std::cerr << "MDNS lookup complete" << std::endl; - }) - .lookup(); -} - - } diff --git a/xs/src/slic3r/Utils/Bonjour.hpp b/xs/src/slic3r/Utils/Bonjour.hpp index 285625c04..63f34638c 100644 --- a/xs/src/slic3r/Utils/Bonjour.hpp +++ b/xs/src/slic3r/Utils/Bonjour.hpp @@ -1,26 +1,31 @@ #ifndef slic3r_Bonjour_hpp_ #define slic3r_Bonjour_hpp_ +#include #include #include #include -// #include #include namespace Slic3r { -// TODO: reply data structure struct BonjourReply { boost::asio::ip::address ip; + uint16_t port; std::string service_name; std::string hostname; + std::string full_address; std::string path; std::string version; - BonjourReply(boost::asio::ip::address ip, std::string service_name, std::string hostname); + BonjourReply() = delete; + BonjourReply(boost::asio::ip::address ip, uint16_t port, std::string service_name, std::string hostname, std::string path, std::string version); + + bool operator==(const BonjourReply &other) const; + bool operator<(const BonjourReply &other) const; }; std::ostream& operator<<(std::ostream &, const BonjourReply &); @@ -32,7 +37,7 @@ private: struct priv; public: typedef std::shared_ptr Ptr; - typedef std::function ReplyFn; + typedef std::function ReplyFn; typedef std::function CompleteFn; Bonjour(std::string service, std::string protocol = "tcp"); @@ -40,12 +45,15 @@ public: ~Bonjour(); Bonjour& set_timeout(unsigned timeout); + Bonjour& set_retries(unsigned retries); + // ^ Note: By default there is 1 retry (meaning 1 broadcast is sent). + // Timeout is per one retry, ie. total time spent listening = retries * timeout. + // If retries > 1, then care needs to be taken as more than one reply from the same service may be received. + Bonjour& on_reply(ReplyFn fn); Bonjour& on_complete(CompleteFn fn); Ptr lookup(); - - static void pokus(); // XXX: remove private: std::unique_ptr p; }; diff --git a/xs/src/slic3r/Utils/Http.cpp b/xs/src/slic3r/Utils/Http.cpp index 45a350a59..de28904e2 100644 --- a/xs/src/slic3r/Utils/Http.cpp +++ b/xs/src/slic3r/Utils/Http.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include @@ -45,7 +44,9 @@ struct Http::priv priv(const std::string &url); ~priv(); + static bool ca_file_supported(::CURL *curl); static size_t writecb(void *data, size_t size, size_t nmemb, void *userp); + std::string curl_error(CURLcode curlcode); std::string body_size_error(); void http_perform(); }; @@ -71,6 +72,29 @@ Http::priv::~priv() ::curl_slist_free_all(headerlist); } +bool Http::priv::ca_file_supported(::CURL *curl) +{ +#ifdef _WIN32 + bool res = false; +#else + bool res = true; +#endif + + if (curl == nullptr) { return res; } + +#if LIBCURL_VERSION_MAJOR >= 7 && LIBCURL_VERSION_MINOR >= 48 + ::curl_tlssessioninfo *tls; + if (::curl_easy_getinfo(curl, CURLINFO_TLS_SSL_PTR, &tls) == CURLE_OK) { + if (tls->backend == CURLSSLBACKEND_SCHANNEL || tls->backend == CURLSSLBACKEND_DARWINSSL) { + // With Windows and OS X native SSL support, cert files cannot be set + res = false; + } + } +#endif + + return res; +} + size_t Http::priv::writecb(void *data, size_t size, size_t nmemb, void *userp) { auto self = static_cast(userp); @@ -88,6 +112,14 @@ size_t Http::priv::writecb(void *data, size_t size, size_t nmemb, void *userp) return realsize; } +std::string Http::priv::curl_error(CURLcode curlcode) +{ + return (boost::format("%1% (%2%)") + % ::curl_easy_strerror(curlcode) + % curlcode + ).str(); +} + std::string Http::priv::body_size_error() { return (boost::format("HTTP body data size exceeded limit (%1% bytes)") % limit).str(); @@ -121,7 +153,7 @@ void Http::priv::http_perform() if (res == CURLE_WRITE_ERROR) { error = std::move(body_size_error()); } else { - error = ::curl_easy_strerror(res); + error = std::move(curl_error(res)); }; if (errorfn) { @@ -180,7 +212,7 @@ Http& Http::remove_header(std::string name) Http& Http::ca_file(const std::string &name) { - if (p) { + if (p && priv::ca_file_supported(p->curl)) { ::curl_easy_setopt(p->curl, CURLOPT_CAINFO, name.c_str()); } @@ -257,5 +289,13 @@ Http Http::post(std::string url) return http; } +bool Http::ca_file_supported() +{ + ::CURL *curl = ::curl_easy_init(); + bool res = priv::ca_file_supported(curl); + if (curl != nullptr) { ::curl_easy_cleanup(curl); } + return res; +} + } diff --git a/xs/src/slic3r/Utils/Http.hpp b/xs/src/slic3r/Utils/Http.hpp index c591e17c5..6ac5fcce1 100644 --- a/xs/src/slic3r/Utils/Http.hpp +++ b/xs/src/slic3r/Utils/Http.hpp @@ -41,6 +41,7 @@ public: Ptr perform(); void perform_sync(); + static bool ca_file_supported(); private: Http(const std::string &url); diff --git a/xs/src/slic3r/Utils/OctoPrint.cpp b/xs/src/slic3r/Utils/OctoPrint.cpp index 58530833b..5bf51f470 100644 --- a/xs/src/slic3r/Utils/OctoPrint.cpp +++ b/xs/src/slic3r/Utils/OctoPrint.cpp @@ -20,16 +20,19 @@ OctoPrint::OctoPrint(DynamicPrintConfig *config) : cafile(config->opt_string("octoprint_cafile")) {} -std::string OctoPrint::test() const +bool OctoPrint::test(wxString &msg) const { // Since the request is performed synchronously here, - // it is ok to refer to `res` from within the closure - std::string res; + // it is ok to refer to `msg` from within the closure - auto http = Http::get(std::move(make_url("api/version"))); + bool res = true; + + auto url = std::move(make_url("api/version")); + auto http = Http::get(std::move(url)); set_auth(http); http.on_error([&](std::string, std::string error, unsigned status) { - res = format_error(error, status); + res = false; + msg = format_error(error, status); }) .perform_sync(); @@ -43,21 +46,26 @@ void OctoPrint::send_gcode(int windowId, int completeEvt, int errorEvt, const st http.form_add("print", print ? "true" : "false") .form_add_file("file", filename) .on_complete([=](std::string body, unsigned status) { - wxWindow *window = GUI::get_widget_by_id(windowId); + wxWindow *window = wxWindow::FindWindowById(windowId); + if (window == nullptr) { return; } + wxCommandEvent* evt = new wxCommandEvent(completeEvt); - evt->SetString("G-code file successfully uploaded to the OctoPrint server"); + evt->SetString(_(L("G-code file successfully uploaded to the OctoPrint server"))); evt->SetInt(100); wxQueueEvent(window, evt); }) .on_error([=](std::string body, std::string error, unsigned status) { - wxWindow *window = GUI::get_widget_by_id(windowId); + wxWindow *window = wxWindow::FindWindowById(windowId); + if (window == nullptr) { return; } wxCommandEvent* evt_complete = new wxCommandEvent(completeEvt); evt_complete->SetInt(100); wxQueueEvent(window, evt_complete); wxCommandEvent* evt_error = new wxCommandEvent(errorEvt); - evt_error->SetString(wxString::Format("Error while uploading to the OctoPrint server: %s", format_error(error, status))); + evt_error->SetString(wxString::Format("%s: %s", + _(L("Error while uploading to the OctoPrint server")), + format_error(error, status))); wxQueueEvent(window, evt_error); }) .perform(); @@ -85,19 +93,15 @@ std::string OctoPrint::make_url(const std::string &path) const } } -std::string OctoPrint::format_error(std::string error, unsigned status) +wxString OctoPrint::format_error(std::string error, unsigned status) { + const wxString wxerror = error; + if (status != 0) { - std::string res{"HTTP "}; - res.append(std::to_string(status)); - - if (status == 401) { - res.append(": Invalid API key"); - } - - return std::move(res); + return wxString::Format("HTTP %u: %s", status, + (status == 401 ? _(L("Invalid API key")) : wxerror)); } else { - return std::move(error); + return std::move(wxerror); } } diff --git a/xs/src/slic3r/Utils/OctoPrint.hpp b/xs/src/slic3r/Utils/OctoPrint.hpp index eca3baa63..1f544295c 100644 --- a/xs/src/slic3r/Utils/OctoPrint.hpp +++ b/xs/src/slic3r/Utils/OctoPrint.hpp @@ -2,8 +2,8 @@ #define slic3r_OctoPrint_hpp_ #include +#include -// #include "Http.hpp" // XXX: ? namespace Slic3r { @@ -16,8 +16,7 @@ class OctoPrint public: OctoPrint(DynamicPrintConfig *config); - std::string test() const; - // XXX: style + bool test(wxString &curl_msg) const; void send_gcode(int windowId, int completeEvt, int errorEvt, const std::string &filename, bool print = false) const; private: std::string host; @@ -26,7 +25,7 @@ private: void set_auth(Http &http) const; std::string make_url(const std::string &path) const; - static std::string format_error(std::string error, unsigned status); + static wxString format_error(std::string error, unsigned status); }; diff --git a/xs/t/15_config.t b/xs/t/15_config.t index 6e73c8a9a..397f7e479 100644 --- a/xs/t/15_config.t +++ b/xs/t/15_config.t @@ -99,8 +99,8 @@ foreach my $config (Slic3r::Config->new, Slic3r::Config::Static::new_FullPrintCo $config->set_deserialize('fill_pattern', 'line'); is $config->get('fill_pattern'), 'line', 'deserialize enum (fill_pattern)'; - $config->set_deserialize('support_material_pattern', 'pillars'); - is $config->get('support_material_pattern'), 'pillars', 'deserialize enum (support_material_pattern)'; + $config->set_deserialize('support_material_pattern', 'rectilinear'); + is $config->get('support_material_pattern'), 'rectilinear', 'deserialize enum (support_material_pattern)'; $config->set('extruder_offset', [[10,20],[30,45]]); is_deeply [ map $_->pp, @{$config->get('extruder_offset')} ], [[10,20],[30,45]], 'set/get points'; diff --git a/xs/xsp/GUI.xsp b/xs/xsp/GUI.xsp index cae480c2f..d306f12ce 100644 --- a/xs/xsp/GUI.xsp +++ b/xs/xsp/GUI.xsp @@ -3,6 +3,7 @@ %{ #include #include "slic3r/GUI/GUI.hpp" +#include "slic3r/Utils/ASCIIFolding.hpp" %} @@ -35,14 +36,8 @@ void set_tab_panel(SV *ui) void add_debug_menu(SV *ui, int event_language_change) %code%{ Slic3r::GUI::add_debug_menu((wxMenuBar*)wxPli_sv_2_object(aTHX_ ui, "Wx::MenuBar"), event_language_change); %}; -void create_preset_tabs(PresetBundle *preset_bundle, 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) - %code%{ Slic3r::GUI::create_preset_tabs(preset_bundle, no_controller, - is_disabled_button_browse, is_user_agent, - event_value_change, event_presets_changed, - event_button_browse, event_button_test); %}; +void create_preset_tabs(bool no_controller, int event_value_change, int event_presets_changed) + %code%{ Slic3r::GUI::create_preset_tabs(no_controller, event_value_change, event_presets_changed); %}; Ref get_preset_tab(char *name) %code%{ RETVAL=Slic3r::GUI::get_preset_tab_iface(name); %}; @@ -61,3 +56,14 @@ void set_app_config(AppConfig *app_config) void open_preferences_dialog(int preferences_event) %code%{ Slic3r::GUI::open_preferences_dialog(preferences_event); %}; + +void set_preset_bundle(PresetBundle *preset_bundle) + %code%{ Slic3r::GUI::set_preset_bundle(preset_bundle); %}; + +void add_frequently_changed_parameters(SV *ui_parent, SV *ui_sizer, SV *ui_p_sizer) + %code%{ Slic3r::GUI::add_frequently_changed_parameters((wxWindow*)wxPli_sv_2_object(aTHX_ ui_parent, "Wx::Window"), + (wxBoxSizer*)wxPli_sv_2_object(aTHX_ ui_sizer, "Wx::BoxSizer"), + (wxFlexGridSizer*)wxPli_sv_2_object(aTHX_ ui_p_sizer, "Wx::FlexGridSizer")); %}; + +std::string fold_utf8_to_ascii(const char *src) + %code%{ RETVAL = Slic3r::fold_utf8_to_ascii(src); %}; diff --git a/xs/xsp/GUI_3DScene.xsp b/xs/xsp/GUI_3DScene.xsp index 4670c5c7e..25aa6b81a 100644 --- a/xs/xsp/GUI_3DScene.xsp +++ b/xs/xsp/GUI_3DScene.xsp @@ -19,6 +19,9 @@ void enable() const; void disable() const; + int shader_program_id() const + %code%{ RETVAL = THIS->shader_program_id; %}; + std::string last_error() const %code%{ RETVAL = THIS->last_error; %}; }; @@ -45,6 +48,9 @@ int zoom_to_volumes() %code%{ RETVAL = THIS->zoom_to_volumes; %}; + void set_layer_height_texture_data(unsigned int texture_id, unsigned int shader_id, PrintObject* print_object, float z_cursor_relative, float edit_band_width); + void reset_layer_height_texture_data(); + int object_idx() const; int volume_idx() const; int instance_idx() const; @@ -97,6 +103,9 @@ void finalize_geometry(bool use_VBOs); void release_geometry(); + void set_print_box(float min_x, float min_y, float min_z, float max_x, float max_y, float max_z); + void update_outside_state(DynamicPrintConfig* config, bool all_inside); + bool move_volume_up(int idx) %code%{ if (idx > 0 && idx < int(THIS->volumes.size())) { @@ -154,13 +163,6 @@ finalize_legend_texture() OUTPUT: RETVAL -unsigned int -get_legend_texture_id() - CODE: - RETVAL = _3DScene::get_legend_texture_id(); - OUTPUT: - RETVAL - unsigned int get_legend_texture_width() CODE: @@ -179,7 +181,38 @@ void reset_legend_texture() CODE: _3DScene::reset_legend_texture(); - + +void +generate_warning_texture(std::string msg) + CODE: + _3DScene::generate_warning_texture(msg); + +unsigned int +finalize_warning_texture() + CODE: + RETVAL = _3DScene::finalize_warning_texture(); + OUTPUT: + RETVAL + +unsigned int +get_warning_texture_width() + CODE: + RETVAL = _3DScene::get_warning_texture_width(); + OUTPUT: + RETVAL + +unsigned int +get_warning_texture_height() + CODE: + RETVAL = _3DScene::get_warning_texture_height(); + OUTPUT: + RETVAL + +void +reset_warning_texture() + CODE: + _3DScene::reset_warning_texture(); + void _load_print_toolpaths(print, volumes, tool_colors, use_VBOs) Print *print; diff --git a/xs/xsp/Model.xsp b/xs/xsp/Model.xsp index c0271ae75..78c94661e 100644 --- a/xs/xsp/Model.xsp +++ b/xs/xsp/Model.xsp @@ -99,6 +99,9 @@ void print_info() const; + bool fits_print_volume(DynamicPrintConfig* config) const + %code%{ RETVAL = THIS->fits_print_volume(config); %}; + bool store_stl(char *path, bool binary) %code%{ TriangleMesh mesh = THIS->mesh(); RETVAL = Slic3r::store_stl(path, &mesh, binary); %}; bool store_amf(char *path, Print* print) @@ -361,9 +364,9 @@ ModelMaterial::attributes() %code%{ RETVAL = &THIS->offset; %}; void set_rotation(double val) - %code%{ THIS->rotation = val; %}; + %code%{ THIS->rotation = val; THIS->get_object()->invalidate_bounding_box(); %}; void set_scaling_factor(double val) - %code%{ THIS->scaling_factor = val; %}; + %code%{ THIS->scaling_factor = val; THIS->get_object()->invalidate_bounding_box(); %}; void set_offset(Pointf *offset) %code%{ THIS->offset = *offset; %}; diff --git a/xs/xsp/Utils_OctoPrint.xsp b/xs/xsp/Utils_OctoPrint.xsp index 062af4e0c..124f66cb5 100644 --- a/xs/xsp/Utils_OctoPrint.xsp +++ b/xs/xsp/Utils_OctoPrint.xsp @@ -9,6 +9,5 @@ OctoPrint(DynamicPrintConfig *config); ~OctoPrint(); - std::string test() const; void send_gcode(int windowId, int completeEvt, int errorEvt, std::string filename, bool print = false) const; };