Fixed conflicts after merge with master

This commit is contained in:
enricoturri1966 2022-07-20 11:02:25 +02:00
commit b38001b1a6
465 changed files with 103051 additions and 82806 deletions

2
.gitignore vendored
View File

@ -18,4 +18,4 @@ local-lib
build-linux/*
deps/build-linux/*
**/.DS_Store
/.idea/
**/.idea/

View File

@ -438,23 +438,6 @@ else()
target_link_libraries(libcurl INTERFACE crypt32)
endif()
if (SLIC3R_STATIC AND NOT SLIC3R_STATIC_EXCLUDE_CURL)
if (NOT APPLE)
# libcurl is always linked dynamically to the system libcurl on OSX.
# On other systems, libcurl is linked statically if SLIC3R_STATIC is set.
target_compile_definitions(libcurl INTERFACE CURL_STATICLIB)
endif()
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
# As of now, our build system produces a statically linked libcurl,
# which links the OpenSSL library dynamically.
find_package(OpenSSL REQUIRED)
message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}")
message("OpenSSL libraries: ${OPENSSL_LIBRARIES}")
target_include_directories(libcurl INTERFACE ${OPENSSL_INCLUDE_DIR})
target_link_libraries(libcurl INTERFACE ${OPENSSL_LIBRARIES})
endif()
endif()
## OPTIONAL packages
# Find eigen3 or use bundled version
@ -467,9 +450,8 @@ if (NOT EIGEN3_FOUND)
endif ()
include_directories(BEFORE SYSTEM ${EIGEN3_INCLUDE_DIR})
# Find expat or use bundled version
# Always use the system libexpat on Linux.
# Find expat. We have our overriden FindEXPAT which exports libexpat target
# no matter what.
find_package(EXPAT REQUIRED)
find_package(PNG REQUIRED)

View File

@ -30,82 +30,101 @@
# ``CURL_VERSION_STRING``
# The version of curl found.
# Look for the header file.
find_path(CURL_INCLUDE_DIR NAMES curl/curl.h)
mark_as_advanced(CURL_INCLUDE_DIR)
# First, prefer config scripts
set(_q "")
if(CURL_FIND_QUIETLY)
set(_q QUIET)
endif()
find_package(CURL ${CURL_FIND_VERSION} CONFIG ${_q})
if(NOT CURL_LIBRARY)
# Look for the library (sorted from most current/relevant entry to least).
find_library(CURL_LIBRARY_RELEASE NAMES
curl
# Windows MSVC prebuilts:
curllib
libcurl_imp
curllib_static
# Windows older "Win32 - MSVC" prebuilts (libcurl.lib, e.g. libcurl-7.15.5-win32-msvc.zip):
libcurl
# Static library on Windows
libcurl_a
)
mark_as_advanced(CURL_LIBRARY_RELEASE)
find_library(CURL_LIBRARY_DEBUG NAMES
# Windows MSVC CMake builds in debug configuration on vcpkg:
libcurl-d_imp
libcurl-d
# Static library on Windows, compiled in debug mode
libcurl_a_debug
)
mark_as_advanced(CURL_LIBRARY_DEBUG)
include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations_SLIC3R.cmake)
select_library_configurations_SLIC3R(CURL)
if(NOT CURL_FIND_QUIETLY)
if (NOT CURL_FOUND)
message(STATUS "Falling back to MODULE search for CURL...")
else()
message(STATUS "CURL found in ${CURL_DIR}")
endif()
endif()
if(CURL_INCLUDE_DIR)
foreach(_curl_version_header curlver.h curl.h)
if(EXISTS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}")
file(STRINGS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}" curl_version_str REGEX "^#define[\t ]+LIBCURL_VERSION[\t ]+\".*\"")
if (NOT CURL_FOUND)
string(REGEX REPLACE "^#define[\t ]+LIBCURL_VERSION[\t ]+\"([^\"]*)\".*" "\\1" CURL_VERSION_STRING "${curl_version_str}")
unset(curl_version_str)
break()
endif()
endforeach()
endif()
# Look for the header file.
find_path(CURL_INCLUDE_DIR NAMES curl/curl.h)
mark_as_advanced(CURL_INCLUDE_DIR)
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs_SLIC3R.cmake)
FIND_PACKAGE_HANDLE_STANDARD_ARGS_SLIC3R(CURL
REQUIRED_VARS CURL_LIBRARY CURL_INCLUDE_DIR
VERSION_VAR CURL_VERSION_STRING)
if(NOT CURL_LIBRARY)
# Look for the library (sorted from most current/relevant entry to least).
find_library(CURL_LIBRARY_RELEASE NAMES
curl
# Windows MSVC prebuilts:
curllib
libcurl_imp
curllib_static
# Windows older "Win32 - MSVC" prebuilts (libcurl.lib, e.g. libcurl-7.15.5-win32-msvc.zip):
libcurl
# Static library on Windows
libcurl_a
)
mark_as_advanced(CURL_LIBRARY_RELEASE)
if(CURL_FOUND)
set(CURL_LIBRARIES ${CURL_LIBRARY})
set(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR})
find_library(CURL_LIBRARY_DEBUG NAMES
# Windows MSVC CMake builds in debug configuration on vcpkg:
libcurl-d_imp
libcurl-d
# Static library on Windows, compiled in debug mode
libcurl_a_debug
)
mark_as_advanced(CURL_LIBRARY_DEBUG)
if(NOT TARGET CURL::libcurl)
add_library(CURL::libcurl UNKNOWN IMPORTED)
set_target_properties(CURL::libcurl PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIRS}")
include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations_SLIC3R.cmake)
select_library_configurations_SLIC3R(CURL)
endif()
if(EXISTS "${CURL_LIBRARY}")
if(CURL_INCLUDE_DIR)
foreach(_curl_version_header curlver.h curl.h)
if(EXISTS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}")
file(STRINGS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}" curl_version_str REGEX "^#define[\t ]+LIBCURL_VERSION[\t ]+\".*\"")
string(REGEX REPLACE "^#define[\t ]+LIBCURL_VERSION[\t ]+\"([^\"]*)\".*" "\\1" CURL_VERSION_STRING "${curl_version_str}")
unset(curl_version_str)
break()
endif()
endforeach()
endif()
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs_SLIC3R.cmake)
FIND_PACKAGE_HANDLE_STANDARD_ARGS_SLIC3R(CURL
REQUIRED_VARS CURL_LIBRARY CURL_INCLUDE_DIR
VERSION_VAR CURL_VERSION_STRING)
if(CURL_FOUND)
set(CURL_LIBRARIES ${CURL_LIBRARY})
set(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR})
if(NOT TARGET CURL::libcurl)
add_library(CURL::libcurl UNKNOWN IMPORTED)
set_target_properties(CURL::libcurl PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION "${CURL_LIBRARY}")
endif()
if(CURL_LIBRARY_RELEASE)
set_property(TARGET CURL::libcurl APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(CURL::libcurl PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION_RELEASE "${CURL_LIBRARY_RELEASE}")
endif()
if(CURL_LIBRARY_DEBUG)
set_property(TARGET CURL::libcurl APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(CURL::libcurl PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION_DEBUG "${CURL_LIBRARY_DEBUG}")
INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIRS}")
if(EXISTS "${CURL_LIBRARY}")
set_target_properties(CURL::libcurl PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION "${CURL_LIBRARY}")
endif()
if(CURL_LIBRARY_RELEASE)
set_property(TARGET CURL::libcurl APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(CURL::libcurl PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION_RELEASE "${CURL_LIBRARY_RELEASE}")
endif()
if(CURL_LIBRARY_DEBUG)
set_property(TARGET CURL::libcurl APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(CURL::libcurl PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION_DEBUG "${CURL_LIBRARY_DEBUG}")
endif()
endif()
endif()
endif()
endif (NOT CURL_FOUND)

View File

@ -75,7 +75,9 @@ file(TO_NATIVE_PATH ${DESTDIR}/usr/local/ _prefix)
set(_boost_flags "")
if (UNIX)
set(_boost_flags "cflags=-fPIC;cxxflags=-fPIC")
elseif(APPLE)
endif ()
if(APPLE)
set(_boost_flags
"cflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET};"
"cxxflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET};"

9
deps/CMakeLists.txt vendored
View File

@ -179,7 +179,12 @@ include(CGAL/CGAL.cmake)
include(NLopt/NLopt.cmake)
include(OpenSSL/OpenSSL.cmake)
include(CURL/CURL.cmake)
set(CURL_PKG "")
if (NOT CURL_FOUND)
include(CURL/CURL.cmake)
set(CURL_PKG dep_CURL)
endif ()
include(JPEG/JPEG.cmake)
include(TIFF/TIFF.cmake)
@ -188,7 +193,7 @@ include(wxWidgets/wxWidgets.cmake)
set(_dep_list
dep_Boost
dep_TBB
dep_CURL
${CURL_PKG}
dep_wxWidgets
dep_Cereal
dep_NLopt

14
deps/CURL/CURL.cmake vendored
View File

@ -48,11 +48,13 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
)
endif ()
if (BUILD_SHARED_LIBS)
set(_curl_static OFF)
else()
set(_curl_static ON)
endif()
set(_patch_command "")
if (UNIX AND NOT APPLE)
# On non-apple UNIX platforms, finding the location of OpenSSL certificates is necessary at runtime, as there is no standard location usable across platforms.
# The OPENSSL_CERT_OVERRIDE flag is understood by PrusaSlicer and will trigger the search of certificates at initial application launch.
# Then ask the user for consent about the correctness of the found location.
set (_patch_command echo set_target_properties(CURL::libcurl PROPERTIES INTERFACE_COMPILE_DEFINITIONS OPENSSL_CERT_OVERRIDE) >> CMake/curl-config.cmake.in)
endif ()
prusaslicer_add_cmake_project(CURL
# GIT_REPOSITORY https://github.com/curl/curl.git
@ -62,10 +64,10 @@ prusaslicer_add_cmake_project(CURL
DEPENDS ${ZLIB_PKG}
# PATCH_COMMAND ${GIT_EXECUTABLE} checkout -f -- . && git clean -df &&
# ${GIT_EXECUTABLE} apply --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/curl-mods.patch
PATCH_COMMAND "${_patch_command}"
CMAKE_ARGS
-DBUILD_TESTING:BOOL=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DCURL_STATICLIB=${_curl_static}
${_curl_platform_flags}
)

View File

@ -15,6 +15,11 @@ set(DEP_CMAKE_OPTS
include("deps-unix-common.cmake")
find_package(CURL QUIET)
if (NOT CURL_FOUND)
message(WARNING "No CURL dev package found in system, building static library. Mac SDK should include CURL from at least version 10.12. Check your SDK installation.")
endif ()
# ExternalProject_Add(dep_boost
# EXCLUDE_FROM_ALL 1

View File

@ -9,6 +9,11 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(_wx_toolkit "-DwxBUILD_TOOLKIT=gtk${_gtk_ver}")
endif()
set(_unicode_utf8 OFF)
if (UNIX AND NOT APPLE) # wxWidgets will not use char as the underlying type for wxString unless its forced to.
set (_unicode_utf8 ON)
endif()
prusaslicer_add_cmake_project(wxWidgets
# GIT_REPOSITORY "https://github.com/prusa3d/wxWidgets"
# GIT_TAG tm_cross_compile #${_wx_git_tag}
@ -23,6 +28,7 @@ prusaslicer_add_cmake_project(wxWidgets
-DwxUSE_MEDIACTRL=OFF
-DwxUSE_DETECT_SM=OFF
-DwxUSE_UNICODE=ON
-DwxUSE_UNICODE_UTF8=${_unicode_utf8}
-DwxUSE_OPENGL=ON
-DwxUSE_LIBPNG=sys
-DwxUSE_ZLIB=sys

View File

@ -28,11 +28,6 @@ BEGIN {
use FindBin;
# Let the XS module know where the GUI resources reside.
set_resources_dir(decode_path($FindBin::Bin) . (($^O eq 'darwin') ? '/../Resources' : '/resources'));
set_var_dir(resources_dir() . "/icons");
set_local_dir(resources_dir() . "/localization/");
use Moo 1.003001;
use Slic3r::XS; # import all symbols (constants etc.) before they get parsed
@ -40,9 +35,7 @@ use Slic3r::Config;
use Slic3r::ExPolygon;
use Slic3r::ExtrusionLoop;
use Slic3r::ExtrusionPath;
use Slic3r::Flow;
use Slic3r::GCode::Reader;
use Slic3r::Geometry::Clipper;
use Slic3r::Layer;
use Slic3r::Line;
use Slic3r::Model;
@ -61,82 +54,4 @@ use constant SCALING_FACTOR => 0.000001;
$Slic3r::loglevel = (defined($ENV{'SLIC3R_LOGLEVEL'}) && $ENV{'SLIC3R_LOGLEVEL'} =~ /^[1-9]/) ? $ENV{'SLIC3R_LOGLEVEL'} : 0;
set_logging_level($Slic3r::loglevel);
# Let the palceholder parser evaluate one expression to initialize its local static macro_processor
# class instance in a thread safe manner.
Slic3r::GCode::PlaceholderParser->new->evaluate_boolean_expression('1==1');
# Open a file by converting $filename to local file system locales.
sub open {
my ($fh, $mode, $filename) = @_;
return CORE::open $$fh, $mode, encode_path($filename);
}
sub tags {
my ($format) = @_;
$format //= '';
my %tags;
# End of line
$tags{eol} = ($format eq 'html') ? '<br>' : "\n";
# Heading
$tags{h2start} = ($format eq 'html') ? '<b>' : '';
$tags{h2end} = ($format eq 'html') ? '</b>' : '';
# Bold font
$tags{bstart} = ($format eq 'html') ? '<b>' : '';
$tags{bend} = ($format eq 'html') ? '</b>' : '';
# Verbatim
$tags{vstart} = ($format eq 'html') ? '<pre>' : '';
$tags{vend} = ($format eq 'html') ? '</pre>' : '';
return %tags;
}
sub slic3r_info
{
my (%params) = @_;
my %tag = Slic3r::tags($params{format});
my $out = '';
$out .= "$tag{bstart}$Slic3r::FORK_NAME$tag{bend}$tag{eol}";
$out .= "$tag{bstart}Version: $tag{bend}$Slic3r::VERSION$tag{eol}";
$out .= "$tag{bstart}Build: $tag{bend}$Slic3r::BUILD$tag{eol}";
return $out;
}
sub copyright_info
{
my (%params) = @_;
my %tag = Slic3r::tags($params{format});
my $out =
'Copyright &copy; 2016 Vojtech Bubnik, Prusa Research. <br />' .
'Copyright &copy; 2011-2016 Alessandro Ranellucci. <br />' .
'<a href="http://slic3r.org/">Slic3r</a> is licensed under the ' .
'<a href="http://www.gnu.org/licenses/agpl-3.0.html">GNU Affero General Public License, version 3</a>.' .
'<br /><br /><br />' .
'Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Y. Sapir, Mike Sheldrake and numerous others. ' .
'Manual by Gary Hodgson. Inspired by the RepRap community. <br />' .
'Slic3r logo designed by Corey Daniels, <a href="http://www.famfamfam.com/lab/icons/silk/">Silk Icon Set</a> designed by Mark James. ';
return $out;
}
sub system_info
{
my (%params) = @_;
my %tag = Slic3r::tags($params{format});
my $out = '';
$out .= "$tag{bstart}Operating System: $tag{bend}$Config{osname}$tag{eol}";
$out .= "$tag{bstart}System Architecture: $tag{bend}$Config{archname}$tag{eol}";
if ($^O eq 'MSWin32') {
$out .= "$tag{bstart}Windows Version: $tag{bend}" . `ver` . $tag{eol};
} else {
# Hopefully some kind of unix / linux.
$out .= "$tag{bstart}System Version: $tag{bend}" . `uname -a` . $tag{eol};
}
$out .= $tag{vstart} . Config::myconfig . $tag{vend};
$out .= " $tag{bstart}\@INC:$tag{bend}$tag{eol}$tag{vstart}";
foreach my $i (@INC) {
$out .= " $i\n";
}
$out .= "$tag{vend}";
return $out;
}
1;

View File

@ -23,54 +23,10 @@ our $Options = print_config_def();
}
}
# From command line parameters, used by slic3r.pl
sub new_from_cli {
my $class = shift;
my %args = @_;
# Delete hash keys with undefined value.
delete $args{$_} for grep !defined $args{$_}, keys %args;
# Replace the start_gcode, end_gcode ... hash values
# with the content of the files they reference.
for (qw(start end layer toolchange)) {
my $opt_key = "${_}_gcode";
if ($args{$opt_key}) {
if (-e $args{$opt_key}) {
Slic3r::open(\my $fh, "<", $args{$opt_key})
or die "Failed to open $args{$opt_key}\n";
binmode $fh, ':utf8';
$args{$opt_key} = do { local $/; <$fh> };
close $fh;
}
}
}
my $self = $class->new;
foreach my $opt_key (keys %args) {
my $opt_def = $Options->{$opt_key};
# we use set_deserialize() for bool options since GetOpt::Long doesn't handle
# arrays of boolean values
if ($opt_key =~ /^(?:bed_shape|duplicate_grid|extruder_offset)$/ || $opt_def->{type} eq 'bool') {
$self->set_deserialize($opt_key, $args{$opt_key});
} elsif (my $shortcut = $opt_def->{shortcut}) {
$self->set($_, $args{$opt_key}) for @$shortcut;
} else {
$self->set($opt_key, $args{$opt_key});
}
}
return $self;
}
package Slic3r::Config::Static;
use parent 'Slic3r::Config';
sub Slic3r::Config::GCode::new { Slic3r::Config::Static::new_GCodeConfig }
sub Slic3r::Config::Print::new { Slic3r::Config::Static::new_PrintConfig }
sub Slic3r::Config::PrintObject::new { Slic3r::Config::Static::new_PrintObjectConfig }
sub Slic3r::Config::PrintRegion::new { Slic3r::Config::Static::new_PrintRegionConfig }
sub Slic3r::Config::Full::new { Slic3r::Config::Static::new_FullPrintConfig }
1;

View File

@ -4,36 +4,9 @@ use warnings;
# an ExPolygon is a polygon with holes
use List::Util qw(first);
use Slic3r::Geometry::Clipper qw(union_ex diff_pl);
sub offset {
my $self = shift;
return Slic3r::Geometry::Clipper::offset(\@$self, @_);
}
sub offset_ex {
my $self = shift;
return Slic3r::Geometry::Clipper::offset_ex(\@$self, @_);
}
sub noncollapsing_offset_ex {
my $self = shift;
my ($distance, @params) = @_;
return $self->offset_ex($distance + 1, @params);
}
sub bounding_box {
my $self = shift;
return $self->contour->bounding_box;
}
package Slic3r::ExPolygon::Collection;
sub size {
my $self = shift;
return [ Slic3r::Geometry::size_2D([ map @$_, map @$_, @$self ]) ];
}
1;

View File

@ -1,13 +0,0 @@
package Slic3r::Flow;
use strict;
use warnings;
use parent qw(Exporter);
our @EXPORT_OK = qw(FLOW_ROLE_EXTERNAL_PERIMETER FLOW_ROLE_PERIMETER FLOW_ROLE_INFILL
FLOW_ROLE_SOLID_INFILL
FLOW_ROLE_TOP_SOLID_INFILL FLOW_ROLE_SUPPORT_MATERIAL
FLOW_ROLE_SUPPORT_MATERIAL_INTERFACE);
our %EXPORT_TAGS = (roles => \@EXPORT_OK);
1;

View File

@ -9,26 +9,15 @@ our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
PI epsilon
angle3points
collinear
dot
line_intersection
normalize
point_in_segment
polyline_lines
polygon_is_convex
polygon_segment_having_point
scale
unscale
scaled_epsilon
size_2D
X Y Z
convex_hull
chained_path_from
deg2rad
rad2deg
rad2deg_dir
);
use constant PI => 4 * atan2(1, 1);
@ -45,171 +34,6 @@ sub scaled_epsilon () { epsilon / &Slic3r::SCALING_FACTOR }
sub scale ($) { $_[0] / &Slic3r::SCALING_FACTOR }
sub unscale ($) { $_[0] * &Slic3r::SCALING_FACTOR }
# used by geometry.t, polygon_segment_having_point
sub point_in_segment {
my ($point, $line) = @_;
my ($x, $y) = @$point;
my $line_p = $line->pp;
my @line_x = sort { $a <=> $b } $line_p->[A][X], $line_p->[B][X];
my @line_y = sort { $a <=> $b } $line_p->[A][Y], $line_p->[B][Y];
# check whether the point is in the segment bounding box
return 0 unless $x >= ($line_x[0] - epsilon) && $x <= ($line_x[1] + epsilon)
&& $y >= ($line_y[0] - epsilon) && $y <= ($line_y[1] + epsilon);
# if line is vertical, check whether point's X is the same as the line
if ($line_p->[A][X] == $line_p->[B][X]) {
return abs($x - $line_p->[A][X]) < epsilon ? 1 : 0;
}
# calculate the Y in line at X of the point
my $y3 = $line_p->[A][Y] + ($line_p->[B][Y] - $line_p->[A][Y])
* ($x - $line_p->[A][X]) / ($line_p->[B][X] - $line_p->[A][X]);
return abs($y3 - $y) < epsilon ? 1 : 0;
}
# used by geometry.t
sub polyline_lines {
my ($polyline) = @_;
my @points = @$polyline;
return map Slic3r::Line->new(@points[$_, $_+1]), 0 .. $#points-1;
}
# given a $polygon, return the (first) segment having $point
# used by geometry.t
sub polygon_segment_having_point {
my ($polygon, $point) = @_;
foreach my $line (@{ $polygon->lines }) {
return $line if point_in_segment($point, $line);
}
return undef;
}
# polygon must be simple (non complex) and ccw
sub polygon_is_convex {
my ($points) = @_;
for (my $i = 0; $i <= $#$points; $i++) {
my $angle = angle3points($points->[$i-1], $points->[$i-2], $points->[$i]);
return 0 if $angle < PI;
}
return 1;
}
sub normalize {
my ($line) = @_;
my $len = sqrt( ($line->[X]**2) + ($line->[Y]**2) + ($line->[Z]**2) )
or return [0, 0, 0]; # to avoid illegal division by zero
return [ map $_ / $len, @$line ];
}
# 2D dot product
# used by 3DScene.pm
sub dot {
my ($u, $v) = @_;
return $u->[X] * $v->[X] + $u->[Y] * $v->[Y];
}
sub line_intersection {
my ($line1, $line2, $require_crossing) = @_;
$require_crossing ||= 0;
my $intersection = _line_intersection(map @$_, @$line1, @$line2);
return (ref $intersection && $intersection->[1] == $require_crossing)
? $intersection->[0]
: undef;
}
# Used by test cases.
sub collinear {
my ($line1, $line2, $require_overlapping) = @_;
my $intersection = _line_intersection(map @$_, @$line1, @$line2);
return 0 unless !ref($intersection)
&& ($intersection eq 'parallel collinear'
|| ($intersection eq 'parallel vertical' && abs($line1->[A][X] - $line2->[A][X]) < epsilon));
if ($require_overlapping) {
my @box_a = bounding_box([ $line1->[0], $line1->[1] ]);
my @box_b = bounding_box([ $line2->[0], $line2->[1] ]);
return 0 unless bounding_box_intersect( 2, @box_a, @box_b );
}
return 1;
}
sub _line_intersection {
my ( $x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3 ) = @_;
my ($x, $y); # The as-yet-undetermined intersection point.
my $dy10 = $y1 - $y0; # dyPQ, dxPQ are the coordinate differences
my $dx10 = $x1 - $x0; # between the points P and Q.
my $dy32 = $y3 - $y2;
my $dx32 = $x3 - $x2;
my $dy10z = abs( $dy10 ) < epsilon; # Is the difference $dy10 "zero"?
my $dx10z = abs( $dx10 ) < epsilon;
my $dy32z = abs( $dy32 ) < epsilon;
my $dx32z = abs( $dx32 ) < epsilon;
my $dyx10; # The slopes.
my $dyx32;
$dyx10 = $dy10 / $dx10 unless $dx10z;
$dyx32 = $dy32 / $dx32 unless $dx32z;
# Now we know all differences and the slopes;
# we can detect horizontal/vertical special cases.
# E.g., slope = 0 means a horizontal line.
unless ( defined $dyx10 or defined $dyx32 ) {
return "parallel vertical";
}
elsif ( $dy10z and not $dy32z ) { # First line horizontal.
$y = $y0;
$x = $x2 + ( $y - $y2 ) * $dx32 / $dy32;
}
elsif ( not $dy10z and $dy32z ) { # Second line horizontal.
$y = $y2;
$x = $x0 + ( $y - $y0 ) * $dx10 / $dy10;
}
elsif ( $dx10z and not $dx32z ) { # First line vertical.
$x = $x0;
$y = $y2 + $dyx32 * ( $x - $x2 );
}
elsif ( not $dx10z and $dx32z ) { # Second line vertical.
$x = $x2;
$y = $y0 + $dyx10 * ( $x - $x0 );
}
elsif ( abs( $dyx10 - $dyx32 ) < epsilon ) {
# The slopes are suspiciously close to each other.
# Either we have parallel collinear or just parallel lines.
# The bounding box checks have already weeded the cases
# "parallel horizontal" and "parallel vertical" away.
my $ya = $y0 - $dyx10 * $x0;
my $yb = $y2 - $dyx32 * $x2;
return "parallel collinear" if abs( $ya - $yb ) < epsilon;
return "parallel";
}
else {
# None of the special cases matched.
# We have a "honest" line intersection.
$x = ($y2 - $y0 + $dyx10*$x0 - $dyx32*$x2)/($dyx10 - $dyx32);
$y = $y0 + $dyx10 * ($x - $x0);
}
my $h10 = $dx10 ? ($x - $x0) / $dx10 : ($dy10 ? ($y - $y0) / $dy10 : 1);
my $h32 = $dx32 ? ($x - $x2) / $dx32 : ($dy32 ? ($y - $y2) / $dy32 : 1);
return [Slic3r::Point->new($x, $y), $h10 >= 0 && $h10 <= 1 && $h32 >= 0 && $h32 <= 1];
}
# 2D
sub bounding_box {
my ($points) = @_;
@ -227,45 +51,4 @@ sub bounding_box {
return @bb[X1,Y1,X2,Y2];
}
# used by ExPolygon::size
sub size_2D {
my @bounding_box = bounding_box(@_);
return (
($bounding_box[X2] - $bounding_box[X1]),
($bounding_box[Y2] - $bounding_box[Y1]),
);
}
# Used by sub collinear, which is used by test cases.
# bounding_box_intersect($d, @a, @b)
# Return true if the given bounding boxes @a and @b intersect
# in $d dimensions. Used by sub collinear.
sub bounding_box_intersect {
my ( $d, @bb ) = @_; # Number of dimensions and box coordinates.
my @aa = splice( @bb, 0, 2 * $d ); # The first box.
# (@bb is the second one.)
# Must intersect in all dimensions.
for ( my $i_min = 0; $i_min < $d; $i_min++ ) {
my $i_max = $i_min + $d; # The index for the maximum.
return 0 if ( $aa[ $i_max ] + epsilon ) < $bb[ $i_min ];
return 0 if ( $bb[ $i_max ] + epsilon ) < $aa[ $i_min ];
}
return 1;
}
# Used by test cases.
# this assumes a CCW rotation from $p2 to $p3 around $p1
sub angle3points {
my ($p1, $p2, $p3) = @_;
# p1 is the center
my $angle = atan2($p2->[X] - $p1->[X], $p2->[Y] - $p1->[Y])
- atan2($p3->[X] - $p1->[X], $p3->[Y] - $p1->[Y]);
# we only want to return only positive angles
return $angle <= 0 ? $angle + 2*PI() : $angle;
}
1;

View File

@ -1,14 +0,0 @@
package Slic3r::Geometry::Clipper;
use strict;
use warnings;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
offset
offset_ex offset2_ex
diff_ex diff union_ex intersection_ex
JT_ROUND JT_MITER JT_SQUARE
intersection intersection_pl diff_pl union);
1;

View File

@ -15,23 +15,4 @@ sub config {
return $self->object->config;
}
sub region {
my $self = shift;
my ($region_id) = @_;
while ($self->region_count <= $region_id) {
$self->add_region($self->object->print->get_region($self->region_count));
}
return $self->get_region($region_id);
}
sub regions {
my ($self) = @_;
return [ map $self->get_region($_), 0..($self->region_count-1) ];
}
package Slic3r::Layer::Support;
our @ISA = qw(Slic3r::Layer);
1;

View File

@ -5,15 +5,4 @@ use warnings;
# a line is a two-points line
use parent 'Slic3r::Polyline';
sub intersection {
my $self = shift;
my ($line, $require_crossing) = @_;
return Slic3r::Geometry::line_intersection($self, $line, $require_crossing);
}
sub grow {
my $self = shift;
return Slic3r::Polyline->new(@$self)->grow(@_);
}
1;

View File

@ -133,11 +133,4 @@ sub add_instance {
}
}
sub mesh_stats {
my $self = shift;
# TODO: sum values from all volumes
return $self->volumes->[0]->mesh->stats;
}
1;

View File

@ -5,9 +5,4 @@ use warnings;
# a polygon is a closed polyline.
use parent 'Slic3r::Polyline';
sub grow {
my $self = shift;
return $self->split_at_first_point->grow(@_);
}
1;

View File

@ -4,11 +4,6 @@ use strict;
use warnings;
use List::Util qw(min max sum first);
use Slic3r::Flow ':roles';
use Slic3r::Geometry qw(scale epsilon);
use Slic3r::Geometry::Clipper qw(diff diff_ex intersection intersection_ex union union_ex
offset offset_ex offset2_ex JT_MITER);
use Slic3r::Print::State ':steps';
use Slic3r::Surface ':types';
sub layers {
@ -16,9 +11,4 @@ sub layers {
return [ map $self->get_layer($_), 0..($self->layer_count - 1) ];
}
sub support_layers {
my $self = shift;
return [ map $self->get_support_layer($_), 0..($self->support_layer_count - 1) ];
}
1;

View File

@ -1,12 +0,0 @@
# Wraps C++ enums Slic3r::PrintStep and Slic3r::PrintObjectStep
package Slic3r::Print::State;
use strict;
use warnings;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(STEP_SLICE STEP_PERIMETERS STEP_PREPARE_INFILL
STEP_INFILL STEP_SUPPORTMATERIAL STEP_SKIRT STEP_BRIM STEP_WIPE_TOWER);
our %EXPORT_TAGS = (steps => \@EXPORT_OK);
1;

View File

@ -41,8 +41,8 @@
# hypertext_type = gallery
#
#Open top menubar item
#hypertext_menubar_menu_name = (Name in english visible as menu name: File, )
#hypertext_menubar_item_name = (Name of item in english, if there are three dots at the end of name, put name without three dots)
#hypertext_menubar_menu_name = (Exact Name in english visible as menu name: File, ) Note: If it contains "&", you have to leave it
#hypertext_menubar_item_name = (Exact Name of item in english, if there are three dots at the end of name, put name without three dots) Note: If it contains "&", you have to leave it
#
#
# Each notification can have disabled and enabled modes and techs - divided by ; and space
@ -200,8 +200,8 @@ disabled_tags = SLA
text = Configuration snapshots\nDid you know that you can roll back to a complete backup of all system and user profiles? You can view and move back and forth between snapshots using the Configuration - <a>Configuration snapshots menu</a>.
documentation_link = https://help.prusa3d.com/en/article/configuration-snapshots_1776
hypertext_type = menubar
hypertext_menubar_menu_name = Configuration
hypertext_menubar_item_name = Configuration Snapshots
hypertext_menubar_menu_name = &Configuration
hypertext_menubar_item_name = &Configuration Snapshots
[hint:Minimum shell thickness]
text = Minimum shell thickness\nDid you know that instead of the number of top and bottom layers, you can define the<a>Minimum shell thickness</a>in millimeters? This feature is especially useful when using the variable layer height function.
@ -222,6 +222,11 @@ text = Adaptive infills\nDid you know that you can use the Adaptive cubic and Su
documentation_link = https://help.prusa3d.com/en/article/infill-patterns_177130
disabled_tags = SLA
[hint:Lightning infill]
text = Lightning infill\nDid you know that you can use the Lightning infill to support only the top surfaces, save a lot of the filament, and decrease the print time? Read more in the documentation.
documentation_link = https://help.prusa3d.com/en/article/infill-patterns_177130
disabled_tags = SLA
[hint:Fullscreen mode]
text = Fullscreen mode\nDid you know that you can switch PrusaSlicer to fullscreen mode? Use the <b>F11</b> hotkey.
enabled_tags = Windows

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 KiB

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 KiB

After

Width:  |  Height:  |  Size: 311 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -17,15 +17,20 @@ src/slic3r/GUI/GalleryDialog.cpp
src/slic3r/GUI/GCodeViewer.cpp
src/slic3r/GUI/GLCanvas3D.cpp
src/slic3r/GUI/Gizmos/GLGizmoCut.cpp
src/slic3r/GUI/Gizmos/GLGizmoCut.hpp
src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp
src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp
src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp
src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp
src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp
src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp
src/slic3r/GUI/Gizmos/GLGizmoMove.cpp
src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp
src/slic3r/GUI/Gizmos/GLGizmoScale.cpp
src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp
src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp
src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp
src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp
src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp
src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,5 @@
min_slic3r_version = 2.5.0-alpha0
0.1.5 Added Ender-3 S1 Pro
min_slic3r_version = 2.4.1
0.1.4 Added Ender-3 Pro. Added M25 support for some printers.
min_slic3r_version = 2.4.0-rc

View File

@ -5,7 +5,7 @@
name = Creality
# Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 0.1.4
config_version = 0.1.5
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@ -21,7 +21,7 @@ technology = FFF
family = ENDER
bed_model = ender3_bed.stl
bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER3BLTOUCH]
name = Creality Ender-3 BLTouch
@ -30,7 +30,7 @@ technology = FFF
family = ENDER
bed_model = ender3_bed.stl
bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER3PRO]
name = Creality Ender-3 Pro
@ -39,7 +39,7 @@ technology = FFF
family = ENDER
bed_model = ender3_bed.stl
bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER3V2]
name = Creality Ender-3 V2
@ -48,7 +48,7 @@ technology = FFF
family = ENDER
bed_model = ender3v2_bed.stl
bed_texture = ender3v2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER3S1]
name = Creality Ender-3 S1
@ -57,7 +57,16 @@ technology = FFF
family = ENDER
bed_model = ender3v2_bed.stl
bed_texture = ender3v2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER3S1PRO]
name = Creality Ender-3 S1 Pro
variants = 0.4
technology = FFF
family = ENDER
bed_model = ender3v2_bed.stl
bed_texture = ender3v2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER3MAX]
name = Creality Ender-3 Max
@ -66,7 +75,7 @@ technology = FFF
family = ENDER
bed_model = cr10v2_bed.stl
bed_texture = cr10spro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER4]
name = Creality Ender-4
@ -75,7 +84,7 @@ technology = FFF
family = ENDER
bed_model = ender3v2_bed.stl
bed_texture = ender3v2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER5]
name = Creality Ender-5
@ -84,7 +93,7 @@ technology = FFF
family = ENDER
bed_model = ender3_bed.stl
bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER5PLUS]
name = Creality Ender-5 Plus
@ -93,7 +102,7 @@ technology = FFF
family = ENDER
bed_model = ender5plus_bed.stl
bed_texture = ender5plus.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER6]
name = Creality Ender-6
@ -102,7 +111,7 @@ technology = FFF
family = ENDER
bed_model = ender6_bed.stl
bed_texture = ender6.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER7]
name = Creality Ender-7
@ -111,7 +120,7 @@ technology = FFF
family = ENDER
bed_model = ender7_bed.stl
bed_texture = ender7.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER2]
name = Creality Ender-2
@ -120,7 +129,7 @@ technology = FFF
family = ENDER
bed_model = ender2_bed.stl
bed_texture = ender2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:ENDER2PRO]
name = Creality Ender-2 Pro
@ -129,7 +138,7 @@ technology = FFF
family = ENDER
bed_model = ender2pro_bed.stl
bed_texture = ender2pro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR5PRO]
name = Creality CR-5 Pro
@ -138,7 +147,7 @@ technology = FFF
family = CR
bed_model = cr5pro_bed.stl
bed_texture = cr5pro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR5PROH]
name = Creality CR-5 Pro H
@ -147,7 +156,7 @@ technology = FFF
family = CR
bed_model = cr5pro_bed.stl
bed_texture = cr5pro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR6SE]
name = Creality CR-6 SE
@ -156,7 +165,7 @@ technology = FFF
family = CR
bed_model = cr6se_bed.stl
bed_texture = cr6se.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR6MAX]
name = Creality CR-6 Max
@ -165,7 +174,7 @@ technology = FFF
family = CR
bed_model = cr10s4_bed.stl
bed_texture = cr10s4.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10SMART]
name = Creality CR-10 SMART
@ -174,7 +183,7 @@ technology = FFF
family = CR
bed_model = cr10v2_bed.stl
bed_texture = cr10spro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10MINI]
name = Creality CR-10 Mini
@ -183,7 +192,7 @@ technology = FFF
family = CR
bed_model = cr10mini_bed.stl
bed_texture = cr10mini.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10MAX]
name = Creality CR-10 Max
@ -192,7 +201,7 @@ technology = FFF
family = CR
bed_model = cr10max_bed.stl
bed_texture = cr10max.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10]
name = Creality CR-10
@ -201,7 +210,7 @@ technology = FFF
family = CR
bed_model = cr10_bed.stl
bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10V2]
name = Creality CR-10 V2
@ -210,7 +219,7 @@ technology = FFF
family = CR
bed_model = cr10v2_bed.stl
bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10V3]
name = Creality CR-10 V3
@ -219,7 +228,7 @@ technology = FFF
family = CR
bed_model = cr10v2_bed.stl
bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10S]
name = Creality CR-10 S
@ -228,7 +237,7 @@ technology = FFF
family = CR
bed_model = cr10_bed.stl
bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10SPRO]
name = Creality CR-10 S Pro
@ -237,7 +246,7 @@ technology = FFF
family = CR
bed_model = cr10v2_bed.stl
bed_texture = cr10spro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10SPROV2]
name = Creality CR-10 S Pro V2
@ -246,7 +255,7 @@ technology = FFF
family = CR
bed_model = cr10v2_bed.stl
bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10S4]
name = Creality CR-10 S4
@ -255,7 +264,7 @@ technology = FFF
family = CR
bed_model = cr10s4_bed.stl
bed_texture = cr10s4.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR10S5]
name = Creality CR-10 S5
@ -264,7 +273,7 @@ technology = FFF
family = CR
bed_model = cr10s5_bed.stl
bed_texture = cr10s5.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR20]
name = Creality CR-20
@ -273,7 +282,7 @@ technology = FFF
family = CR
bed_model = ender3_bed.stl
bed_texture = cr20.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR20PRO]
name = Creality CR-20 Pro
@ -282,7 +291,7 @@ technology = FFF
family = CR
bed_model = ender3_bed.stl
bed_texture = cr20.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR200B]
name = Creality CR-200B
@ -291,7 +300,7 @@ technology = FFF
family = CR
bed_model = cr200b_bed.stl
bed_texture = cr200b.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:CR8]
name = Creality CR-8
@ -300,7 +309,7 @@ technology = FFF
family = CR
bed_model = cr8_bed.stl
bed_texture = cr8.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
#[printer_model:CRX]
#name = Creality CR-X
@ -309,7 +318,7 @@ default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @
#family = CR-X
#bed_model = cr10v2_bed.stl
#bed_texture = cr10spro.svg
#default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
#default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
#[printer_model:CRXPRO]
#name = Creality CR-X Pro
@ -318,7 +327,7 @@ default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @
#family = CR-X
#bed_model = cr10v2_bed.stl
#bed_texture = cr10spro.svg
#default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
#default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:SERMOOND1]
name = Creality Sermoon-D1
@ -327,7 +336,7 @@ technology = FFF
family = SERMOON
bed_model = sermoond1_bed.stl
bed_texture = sermoond1.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
# All presets starting with asterisk, for example *common*, are intermediate and they will
# not make it into the user interface.
@ -842,6 +851,17 @@ filament_cost = 27.44
filament_density = 1.29
filament_colour = #C7F935
[filament:Verbatim PLA @CREALITY]
inherits = *PLA*
filament_vendor = Verbatim
temperature = 205
bed_temperature = 60
first_layer_temperature = 210
first_layer_bed_temperature = 60
filament_cost = 22.99
filament_density = 1.24
filament_colour = #001ca8
# Common printer preset
[printer:*common*]
printer_technology = FFF
@ -970,10 +990,7 @@ renamed_from = "Creality ENDER-3 BLTouch"
printer_model = ENDER3BLTOUCH
[printer:Creality Ender-3 Pro]
inherits = *common*; *pauseprint*
renamed_from = "Creality Ender-3 Pro"
bed_shape = 5x0,215x0,215x220,5x220
max_print_height = 250
inherits = Creality Ender-3; *pauseprint*
printer_model = ENDER3PRO
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_CREALITY\nPRINTER_MODEL_ENDER3PRO\nPRINTER_HAS_BOWDEN
@ -992,6 +1009,13 @@ max_print_height = 270
printer_model = ENDER3S1
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_CREALITY\nPRINTER_MODEL_ENDER3S1
[printer:Creality Ender-3 S1 Pro]
inherits = *common*; *pauseprint*; *spriteextruder*
bed_shape = 5x0,215x0,215x220,5x220
max_print_height = 270
printer_model = ENDER3S1PRO
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_CREALITY\nPRINTER_MODEL_ENDER3S1PRO
[printer:Creality Ender-3 Max]
inherits = *common*; *pauseprint*
retract_length = 6

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@ -1,4 +1,6 @@
min_slic3r_version = 2.3.1-beta
min_slic3r_version = 2.5.0-alpha0
0.0.4 Improve Proton X profiles, Add Proton XE-750 printer
min_slic3r_version = 2.4.1
0.0.3 Set default filament profile.
0.0.2 Improved start gcode, changed filename format
0.0.1 Initial version

View File

@ -3,7 +3,7 @@
[vendor]
# Vendor name will be shown by the Config Wizard.
name = INAT
config_version = 0.0.3
config_version = 0.0.4
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/INAT/
###
@ -24,9 +24,16 @@ technology = FFF
family = Proton
default_materials = PLA @PROTON_X
[printer_model:PROTON_XE750]
name = INAT Proton XE-750
variants = 0.4
technology = FFF
family = Proton
default_materials = PLA @PROTON_XE750
###
### QUALITY DEFINITIONS
### COMMON QUALITY DEFINITIONS
###
[print:*common*]
@ -35,14 +42,15 @@ layer_height = 0.2
first_layer_height = 0.2
perimeters = 3
spiral_vase = 0
top_solid_layers = 4
top_solid_layers = 5
bottom_solid_layers = 3
top_solid_min_thickness = 0.8
top_solid_min_thickness = 1
bottom_solid_min_thickness = 0.6
extra_perimeters = 1
ensure_vertical_shell_thickness = 1
avoid_crossing_perimeters = 0
thin_walls = 0
thick_bridges = 0
overhangs = 1
seam_position = aligned
external_perimeters_first = 0
@ -76,7 +84,9 @@ support_material_auto = 1
support_material_threshold = 0
support_material_enforce_layers = 0
raft_layers = 0
support_material_contact_distance = 0.2
support_material_style = grid
support_material_contact_distance = 0.25
support_material_bottom_contact_distance = 0.3
support_material_pattern = rectilinear
support_material_with_sheath = 0
support_material_spacing = 5
@ -92,8 +102,8 @@ perimeter_speed = 60
small_perimeter_speed = 75%
external_perimeter_speed = 50%
infill_speed = 80
solid_infill_speed = 100%
top_solid_infill_speed = 30
solid_infill_speed = 80%
top_solid_infill_speed = 20
support_material_speed = 80
support_material_interface_speed = 100%
bridge_speed = 60
@ -126,7 +136,7 @@ infill_overlap = 25%
bridge_flow_ratio = 1
slice_closing_radius = 0.049
resolution = 0
xy_size_compensation = 0
xy_size_compensation = -0.05
elefant_foot_compensation = 0.3
clip_multipart_objects = 0
#output
@ -138,47 +148,50 @@ gcode_label_objects = 0
output_filename_format = {input_filename_base}_{filament_type[0]}.gcode
[print:0.2mm Standard @PROTON_X]
[print:*common 0.2mm Standard @INAT*]
inherits = *common*
[print:0.2mm Strong @PROTON_X]
[print:*common 0.2mm Strong @INAT*]
inherits = *common*
fill_density = 50%
perimeters = 6
[print:0.2mm Advanced Material @PROTON_X]
[print:*common 0.2mm Advanced Material @INAT*]
inherits = *common*
bottom_solid_layers = 5
top_solid_layers = 6
skirts = 0
brim_width = 30
brim_width = 20
infill_speed = 60
support_material_speed = 60
travel_speed = 100
first_layer_speed = 20
elefant_foot_compensation = 0
[print:0.12mm Fine @PROTON_X]
[print:*common 0.12mm Fine @INAT*]
inherits = *common*
layer_height = 0.12
bottom_solid_layers = 7
top_solid_layers = 7
infill_every_layers = 2
perimeter_speed = 50
infill_speed = 50
[print:0.32mm Draft @PROTON_X]
[print:*common 0.32mm Draft @INAT*]
inherits = *common*
layer_height = 0.32
perimeter_speed = 80
external_perimeter_speed = 75%
infill_speed = 100
top_solid_infill_speed = 60
fill_density = 15%
support_material_style = snug
###
### PRINTER DEFINITIONS
### COMMON PRINTER DEFINITIONS
###
[printer:*common*]
[printer:*proton_x_common*]
printer_vendor = INAT s.r.o.
default_filament_profile = "PLA @PROTON_X"
#general
@ -206,14 +219,14 @@ machine_max_feedrate_z = 10,10
machine_max_feedrate_e = 100,100
machine_max_acceleration_x = 500,500
machine_max_acceleration_y = 500,500
machine_max_acceleration_z = 100,100
machine_max_acceleration_e = 2000,2000
machine_max_acceleration_z = 200,200
machine_max_acceleration_e = 8000,8000
machine_max_acceleration_extruding = 1000,1000
machine_max_acceleration_retracting = 1500,1500
machine_max_acceleration_retracting = 8000,8000
machine_max_jerk_x = 8,8
machine_max_jerk_y = 8,8
machine_max_jerk_z = 1,1
machine_max_jerk_e = 2.5,2.5
machine_max_jerk_z = 3,3
machine_max_jerk_e = 10,10
machine_min_extruding_rate = 5
#extruder 1
nozzle_diameter = 0.4
@ -233,24 +246,65 @@ wipe = 1
retract_before_wipe = 100%
[printer:Proton X Rail]
inherits = *common*
printer_model = PROTON_X_RAIL
printer_variant = 0.4
default_print_profile = 0.2mm Standard @PROTON_X
gcode_flavor = marlin
machine_max_acceleration_y = 800,800
[printer:Proton X Rod]
inherits = *common*
printer_model = PROTON_X_ROD
printer_variant = 0.4
default_print_profile = 0.2mm Standard @PROTON_X
[printer:*proton_xe750_common*]
printer_vendor = INAT s.r.o.
default_filament_profile = "PLA @PROTON_XE750"
#general
printer_technology = FFF
bed_shape = 0x0,600x0,600x500,0x500
max_print_height = 750
z_offset = 0
extruders_count = 2
gcode_flavor = marlin
silent_mode = 0
remaining_times = 1
use_relative_e_distances = 0
use_firmware_retraction = 0
use_volumetric_e = 0
variable_layer_height = 1
#gcodes
start_gcode = G28 ;Home\nG0 Z10 F1000\nG29\nG0 X0 Y0 Z30 F6000\nM84 E\nM0\nG1 Z15.0 F6000 ;Move the platform down 15mm\n
end_gcode = M400\nM104 S0\nM140 S0\nM107\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X R5\nG0 Y300 F2000\nM84\nG4 S180\nM81 S30\n
color_change_gcode = M600
#limits
machine_limits_usage = emit_to_gcode
machine_max_feedrate_x = 200,200
machine_max_feedrate_y = 200,200
machine_max_feedrate_z = 10,10
machine_max_feedrate_e = 100,100
machine_max_acceleration_x = 1500,1500
machine_max_acceleration_y = 1500,1500
machine_max_acceleration_z = 500,500
machine_max_acceleration_e = 20000,20000
machine_max_acceleration_extruding = 2000,2000
machine_max_acceleration_retracting = 8000,8000
machine_max_jerk_x = 12,12
machine_max_jerk_y = 12,12
machine_max_jerk_z = 3,3
machine_max_jerk_e = 20,20
machine_min_extruding_rate = 5
#extruder 1
nozzle_diameter = 0.4,0.4
min_layer_height = 0.05,0.05
max_layer_height = 0.33,0.33
extruder_offset = 0x0,0x0
retract_length = 1.5,1.5
retract_lift = 0.6,0.6
retract_lift_above = 0,0
retract_lift_below = 0,0
retract_speed = 45,45
deretract_speed = 0,0
retract_restart_extra = 0,0
retract_before_travel = 2,2
retract_layer_change = 0,0
wipe = 1,1
retract_before_wipe = 100%,100%
retract_length_toolchange = 37,37
extruder_colour = #33CC33;#3399FF
###
### MATERIAL DEFINITIONS
### COMMON MATERIAL DEFINITIONS
###
[filament:*common*]
@ -272,7 +326,7 @@ min_print_speed = 10
filament_soluble = 0
[filament:PLA @PROTON_X]
[filament:*common PLA @INAT*]
inherits = *common*
temperature = 210
bed_temperature = 60
@ -281,11 +335,12 @@ first_layer_bed_temperature = 60
filament_type = PLA
filament_cost = 20
filament_density = 1.25
fan_always_on = 1
min_fan_speed = 50
max_fan_speed = 100
[filament:PETG @PROTON_X]
[filament:*common PETG @INAT*]
inherits = *common*
temperature = 240
bed_temperature = 80
@ -294,10 +349,11 @@ first_layer_bed_temperature = 80
filament_type = PETG
filament_cost = 25
filament_density = 1.27
min_fan_speed = 0
fan_always_on = 1
min_fan_speed = 25
max_fan_speed = 50
[filament:ABS @PROTON_X]
[filament:*common ABS @INAT*]
inherits = *common*
temperature = 235
bed_temperature = 100
@ -309,7 +365,7 @@ filament_density = 1.01
cooling = 0
bridge_fan_speed = 0
[filament:ASA @PROTON_X]
[filament:*common ASA @INAT*]
inherits = *common*
temperature = 240
bed_temperature = 110
@ -320,7 +376,7 @@ filament_cost = 22
filament_density = 1.07
cooling = 0
[filament:TPE @PROTON_X]
[filament:*common TPE @INAT*]
inherits = *common*
temperature = 220
bed_temperature = 40
@ -334,7 +390,7 @@ max_fan_speed = 50
filament_retract_length = 0.8
filament_retract_speed = 25
[filament:HIPS @PROTON_X]
[filament:*common HIPS @INAT*]
inherits = *common*
temperature = 245
bed_temperature = 100
@ -347,7 +403,7 @@ min_fan_speed = 0
max_fan_speed = 50
filament_soluble = 1
[filament:Nylon @PROTON_X]
[filament:*common Nylon @INAT*]
inherits = *common*
temperature = 235
bed_temperature = 130
@ -359,19 +415,19 @@ filament_density = 1.01
cooling = 0
bridge_fan_speed = 0
[filament:PC @PROTON_X]
[filament:*common PC @INAT*]
inherits = *common*
temperature = 270
bed_temperature = 130
bed_temperature = 115
first_layer_temperature = 270
first_layer_bed_temperature = 130
first_layer_bed_temperature = 115
filament_type = PC
filament_cost = 65
filament_density = 1.19
cooling = 0
bridge_fan_speed = 0
[filament:CPE @PROTON_X]
[filament:*common CPE @INAT*]
inherits = *common*
temperature = 280
bed_temperature = 90
@ -383,7 +439,7 @@ filament_density = 1.27
cooling = 0
bridge_fan_speed = 0
[filament:PEEK @PROTON_X]
[filament:*common PEEK @INAT*]
inherits = *common*
temperature = 440
bed_temperature = 150
@ -395,7 +451,7 @@ filament_density = 1.3
cooling = 0
bridge_fan_speed = 0
[filament:PEI @PROTON_X]
[filament:*common PEI @INAT*]
inherits = *common*
temperature = 400
bed_temperature = 150
@ -407,7 +463,7 @@ filament_density = 1.27
cooling = 0
bridge_fan_speed = 0
[filament:Polymaker PolyMide CoPA @PROTON_X]
[filament:*common Polymaker PolyMide CoPA @INAT*]
inherits = *common*
filament_vendor = Polymaker
temperature = 265
@ -419,7 +475,7 @@ filament_cost = 93
filament_density = 1.12
cooling = 0
[filament:Polymaker PolyMide PA6-CF @PROTON_X]
[filament:*common Polymaker PolyMide PA6-CF @INAT*]
inherits = *common*
filament_vendor = Polymaker
temperature = 300
@ -431,7 +487,7 @@ filament_cost = 95
filament_density = 1.17
cooling = 0
[filament:Polymaker PolyMide PA6-GF @PROTON_X]
[filament:*common Polymaker PolyMide PA6-GF @INAT*]
inherits = *common*
filament_vendor = Polymaker
temperature = 300
@ -443,20 +499,21 @@ filament_cost = 95
filament_density = 1.2
cooling = 0
[filament:Devil Design PETG @PROTON_X]
[filament:*common Devil Design PETG @INAT*]
inherits = *common*
filament_vendor = Devil Design
temperature = 250
temperature = 245
bed_temperature = 80
first_layer_temperature = 250
first_layer_temperature = 245
first_layer_bed_temperature = 80
filament_type = PETG
filament_cost = 22
filament_density = 1.23
min_fan_speed = 0
fan_always_on = 1
min_fan_speed = 25
max_fan_speed = 50
[filament:Filament PM PETG FRJet @PROTON_X]
[filament:*common Filament PM PETG FRJet @INAT*]
inherits = *common*
filament_vendor = Filament PM
temperature = 250
@ -467,3 +524,207 @@ filament_type = PETG
filament_cost = 45.5
filament_density = 1.27
cooling = 0
######
###### PROTON X PRINTERS
######
[printer:Proton X Rail]
inherits = *proton_x_common*
printer_model = PROTON_X_RAIL
printer_variant = 0.4
default_print_profile = 0.2mm Standard @PROTON_X
gcode_flavor = marlin
machine_max_acceleration_x = 800,800
machine_max_acceleration_y = 800,800
machine_max_jerk_x = 10,10
machine_max_jerk_y = 10,10
[printer:Proton X Rod]
inherits = *proton_x_common*
printer_model = PROTON_X_ROD
printer_variant = 0.4
default_print_profile = 0.2mm Standard @PROTON_X
gcode_flavor = marlin
[print:0.2mm Standard @PROTON_X]
inherits = *common 0.2mm Standard @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[print:0.2mm Strong @PROTON_X]
inherits = *common 0.2mm Strong @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[print:0.2mm Advanced Material @PROTON_X]
inherits = *common 0.2mm Advanced Material @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[print:0.12mm Fine @PROTON_X]
inherits = *common 0.12mm Fine @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[print:0.32mm Draft @PROTON_X]
inherits = *common 0.32mm Draft @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:PLA @PROTON_X]
inherits =*common PLA @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:PETG @PROTON_X]
inherits =*common PETG @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:ABS @PROTON_X]
inherits =*common ABS @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:ASA @PROTON_X]
inherits =*common ASA @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:TPE @PROTON_X]
inherits =*common TPE @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:HIPS @PROTON_X]
inherits =*common HIPS @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:Nylon @PROTON_X]
inherits =*common Nylon @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:PC @PROTON_X]
inherits =*common PC @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:CPE @PROTON_X]
inherits =*common CPE @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:PEEK @PROTON_X]
inherits =*common PEEK @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:PEI @PROTON_X]
inherits =*common PEI @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:Polymaker PolyMide CoPA @PROTON_X]
inherits =*common Polymaker PolyMide CoPA @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:Polymaker PolyMide PA6-CF @PROTON_X]
inherits =*common Polymaker PolyMide PA6-CF @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:Polymaker PolyMide PA6-GF @PROTON_X]
inherits =*common Polymaker PolyMide PA6-GF @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:Devil Design PETG @PROTON_X]
inherits =*common Devil Design PETG @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
[filament:Filament PM PETG FRJet @PROTON_X]
inherits =*common Filament PM PETG FRJet @INAT*
compatible_printers = "Proton X Rail";"Proton X Rod"
######### #########
######### Proton XE 750 #########
######### #########
[printer:Proton XE-750]
inherits = *proton_xe750_common*
printer_model = PROTON_XE750
printer_variant = 0.4
default_print_profile = 0.2mm Standard @PROTON_XE750
gcode_flavor = marlin
[print:0.2mm Standard @PROTON_XE750]
inherits = *common 0.2mm Standard @INAT*
compatible_printers = "Proton XE-750"
[print:0.2mm Strong @PROTON_XE750]
inherits = *common 0.2mm Strong @INAT*
compatible_printers = "Proton XE-750"
[print:0.2mm Advanced Material @PROTON_XE750]
inherits = *common 0.2mm Advanced Material @INAT*
compatible_printers = "Proton XE-750"
[print:0.12mm Fine @PROTON_XE750]
inherits = *common 0.12mm Fine @INAT*
compatible_printers = "Proton XE-750"
[print:0.32mm Draft @PROTON_XE750]
inherits = *common 0.32mm Draft @INAT*
compatible_printers = "Proton XE-750"
[filament:*start_end_gcode @PROTON_XE750*]
start_filament_gcode = "; Filament start gcode BEGIN\nM104 S[temperature[current_extruder]]\nG4 S20\n; Filament start gcode END\n"
end_filament_gcode = "; Filament end gcode BEGIN\nG0 X-5 Y250 F10000\nM104 S{temperature[current_extruder] - 50}\n; Filament end gcode END\n"
compatible_printers = "Proton XE-750"
[filament:PLA @PROTON_XE750]
inherits =*common PLA @INAT*; *start_end_gcode @PROTON_XE750*
[filament:PETG @PROTON_XE750]
inherits =*common PETG @INAT*; *start_end_gcode @PROTON_XE750*
[filament:ABS @PROTON_XE750]
inherits =*common ABS @INAT*; *start_end_gcode @PROTON_XE750*
[filament:ASA @PROTON_XE750]
inherits =*common ASA @INAT*; *start_end_gcode @PROTON_XE750*
[filament:TPE @PROTON_XE750]
inherits =*common TPE @INAT*; *start_end_gcode @PROTON_XE750*
[filament:HIPS @PROTON_XE750]
inherits =*common HIPS @INAT*; *start_end_gcode @PROTON_XE750*
[filament:Nylon @PROTON_XE750]
inherits =*common Nylon @INAT*; *start_end_gcode @PROTON_XE750*
[filament:PC @PROTON_XE750]
inherits =*common PC @INAT*; *start_end_gcode @PROTON_XE750*
[filament:CPE @PROTON_XE750]
inherits =*common CPE @INAT*; *start_end_gcode @PROTON_XE750*
[filament:PEEK @PROTON_XE750]
inherits =*common PEEK @INAT*; *start_end_gcode @PROTON_XE750*
[filament:PEI @PROTON_XE750]
inherits =*common PEI @INAT*; *start_end_gcode @PROTON_XE750*
[filament:Polymaker PolyMide CoPA @PROTON_XE750]
inherits =*common Polymaker PolyMide CoPA @INAT*; *start_end_gcode @PROTON_XE750*
[filament:Polymaker PolyMide PA6-CF @PROTON_XE750]
inherits =*common Polymaker PolyMide PA6-CF @INAT*; *start_end_gcode @PROTON_XE750*
[filament:Polymaker PolyMide PA6-GF @PROTON_XE750]
inherits =*common Polymaker PolyMide PA6-GF @INAT*; *start_end_gcode @PROTON_XE750*
[filament:Devil Design PETG @PROTON_XE750]
inherits =*common Devil Design PETG @INAT*; *start_end_gcode @PROTON_XE750*
[filament:Filament PM PETG FRJet @PROTON_XE750]
inherits =*common Filament PM PETG FRJet @INAT*; *start_end_gcode @PROTON_XE750*

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -0,0 +1,2 @@
min_slic3r_version = 2.5.0-alpha0
1.0.0 Initial Infinity3D bundle

View File

@ -0,0 +1,812 @@
# Infinity3D profiles
[vendor]
# Vendor name will be shown by the Config Wizard.
name = Infinity3D
# 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 = 1.0.0
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Infinity3D/
# The printer models will be shown by the Configuration Wizard in this order,
[printer_model:DEV-200]
name = Infinity3D DEV-200
variants = 0.4
technology = FFF
bed_model = DEV_200_bed.stl
bed_texture = DEV_200_texture.svg
default_materials = Generic PLA @Infinity3D; Generic PETG @Infinity3D
[printer_model:DEV-350]
name = Infinity3D DEV-350
variants = 0.4
technology = FFF
bed_model = DEV_350_bed.stl
bed_texture = DEV_350_texture.svg
default_materials = Generic PLA @Infinity3D; Generic PETG @Infinity3D
[print:*common*]
avoid_crossing_perimeters = 1
avoid_crossing_perimeters_max_detour = 0
bottom_fill_pattern = monotonic
bottom_solid_layers = 4
bottom_solid_min_thickness = 0
bridge_acceleration = 0
bridge_angle = 0
bridge_flow_ratio = 1
bridge_speed = 60
brim_separation = 0
brim_type = outer_only
brim_width = 0
clip_multipart_objects = 1
complete_objects = 0
default_acceleration = 0
dont_support_bridges = 1
draft_shield = disabled
elefant_foot_compensation = 0.1
ensure_vertical_shell_thickness = 1
external_perimeter_extrusion_width = 0.45
external_perimeter_speed = 80%
external_perimeters_first = 0
extra_perimeters = 0
extruder_clearance_height = 25
extruder_clearance_radius = 75
extrusion_width = 0.45
fill_angle = 45
fill_density = 20%
fill_pattern = gyroid
first_layer_acceleration = 0
first_layer_acceleration_over_raft = 0
first_layer_extrusion_width = 0.45
first_layer_height = 0.2
first_layer_speed = 45
first_layer_speed_over_raft = 45
fuzzy_skin = none
fuzzy_skin_point_dist = 0.8
fuzzy_skin_thickness = 0.3
gap_fill_enabled = 1
gap_fill_speed = 20
gcode_comments = 0
gcode_label_objects = 0
gcode_resolution = 0.0125
gcode_substitutions =
infill_acceleration = 0
infill_anchor = 600%
infill_anchor_max = 50
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
inherits =
interface_shells = 0
ironing = 0
ironing_flowrate = 15%
ironing_spacing = 0.25
ironing_speed = 30
ironing_type = top
layer_height = 0.2
max_print_speed = 100
max_volumetric_speed = 0
min_skirt_length = 4
mmu_segmented_region_max_width = 0
notes =
only_retract_when_crossing_perimeters = 0
ooze_prevention = 0
output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
overhangs = 0
perimeter_acceleration = 0
perimeter_extruder = 1
perimeter_extrusion_width = 0.45
perimeter_speed = 60
perimeters = 2
post_process =
print_settings_id =
raft_contact_distance = 0.1
raft_expansion = 1.5
raft_first_layer_density = 90%
raft_first_layer_expansion = 3
raft_layers = 0
resolution = 0
seam_position = nearest
single_extruder_multi_material_priming = 1
skirt_distance = 5
skirt_height = 1
skirts = 3
slice_closing_radius = 0.049
slicing_mode = regular
small_perimeter_speed = 70%
solid_infill_below_area = 0
solid_infill_every_layers = 0
solid_infill_extruder = 1
solid_infill_extrusion_width= 0.45
solid_infill_speed = 80%
spiral_vase = 0
standby_temperature_delta = -5
support_material = 0
support_material_angle = 0
support_material_auto = 1
support_material_bottom_contact_distance = 0
support_material_bottom_interface_layers = -1
support_material_buildplate_only = 0
support_material_closing_radius = 2
support_material_contact_distance = 0.15
support_material_enforce_layers = 0
support_material_extruder = 0
support_material_extrusion_width = 0.38
support_material_interface_contact_loops = 0
support_material_interface_extruder = 0
support_material_interface_layers = 2
support_material_interface_pattern = rectilinear
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_style = grid
support_material_synchronize_layers = 0
support_material_threshold = 45
support_material_with_sheath = 0
support_material_xy_spacing = 60%
thick_bridges = 1
thin_walls = 0
threads = 8
top_fill_pattern = monotonic
top_infill_extrusion_width = 0.45
top_solid_infill_speed = 60%
top_solid_layers = 4
top_solid_min_thickness = 0
travel_speed = 70
travel_speed_z = 0
wipe_tower = 0
wipe_tower_bridging = 10
wipe_tower_brim_width = 2
wipe_tower_no_sparse_layers = 0
wipe_tower_rotation_angle = 0
wipe_tower_width = 60
wipe_tower_x = 170
wipe_tower_y = 140
xy_size_compensation = 0
compatible_printers_condition = nozzle_diameter[0]==0.4
[print:0.06mm SUPERFINE @Infinity3D_DEV_200]
inherits = *common*
layer_height = 0.06
bottom_solid_layers = 12
top_solid_layers = 12
top_solid_min_thickness = 0.72
bottom_solid_min_thickness = 0.72
bridge_speed = 45
infill_speed = 60
perimeter_speed = 50
support_material_speed = 50
max_print_speed = 60
skirt_distance = 10
first_layer_speed = 80%
first_layer_extrusion_width = 0.45
perimeter_extrusion_width = 0.4
external_perimeter_extrusion_width = 0.4
infill_extrusion_width = 0.4
solid_infill_extrusion_width = 0.4
top_infill_extrusion_width = 0.4
compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="DEV-200"
[print:0.10mm Fine @Infinity3D_DEV_200]
inherits = *common*
layer_height = 0.10
top_solid_layers = 8
bottom_solid_layers = 8
bridge_speed = 45
infill_speed = 60
perimeter_speed = 50
support_material_speed = 50
max_print_speed = 60
skirt_distance = 10
first_layer_speed = 80%
first_layer_extrusion_width = 0.45
perimeter_extrusion_width = 0.4
external_perimeter_extrusion_width = 0.4
infill_extrusion_width = 0.4
solid_infill_extrusion_width = 0.4
top_infill_extrusion_width = 0.4
compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="DEV-200"
[print:0.20mm GOOD @Infinity3D_DEV_200]
inherits = *common*
layer_height = 0.20
top_solid_layers = 5
bottom_solid_layers = 5
bridge_speed = 45
infill_speed = 60
perimeter_speed = 50
support_material_speed = 50
max_print_speed = 60
skirt_distance = 10
first_layer_speed = 80%
first_layer_extrusion_width = 0.45
perimeter_extrusion_width = 0.4
external_perimeter_extrusion_width = 0.4
infill_extrusion_width = 0.4
solid_infill_extrusion_width = 0.4
top_infill_extrusion_width = 0.4
compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="DEV-200"
[print:0.30mm RAPID @Infinity3D_DEV_200]
inherits = *common*
layer_height = 0.30
top_solid_layers = 3
bottom_solid_layers = 3
bridge_speed = 45
infill_speed = 60
perimeter_speed = 50
support_material_speed = 50
max_print_speed = 60
skirt_distance = 10
first_layer_speed = 80%
compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="DEV-200"
[print:0.40mm FAST @Infinity3D_DEV_200]
inherits = *common*
layer_height = 0.40
top_solid_layers = 3
bottom_solid_layers = 3
bridge_speed = 45
infill_speed = 60
perimeter_speed = 50
support_material_speed = 50
max_print_speed = 60
skirt_distance = 10
first_layer_speed = 80%
support_material_extrusion_width = 0.45
compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="DEV-200"
[print:0.06mm SUPERFINE @Infinity3D_DEV_350]
inherits = *common*
layer_height = 0.06
bottom_solid_layers = 12
top_solid_layers = 12
top_solid_min_thickness = 0.72
bottom_solid_min_thickness = 0.72
bridge_speed = 45
infill_speed = 60
perimeter_speed = 50
support_material_speed = 50
max_print_speed = 60
skirt_distance = 10
first_layer_speed = 80%
first_layer_extrusion_width = 0.45
perimeter_extrusion_width = 0.4
external_perimeter_extrusion_width = 0.4
infill_extrusion_width = 0.4
solid_infill_extrusion_width = 0.4
top_infill_extrusion_width = 0.4
compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="DEV-350"
[print:0.10mm Fine @Infinity3D_DEV_350]
inherits = *common*
layer_height = 0.10
top_solid_layers = 8
bottom_solid_layers = 8
bridge_speed = 45
infill_speed = 60
perimeter_speed = 50
support_material_speed = 50
max_print_speed = 60
skirt_distance = 10
first_layer_speed = 80%
first_layer_extrusion_width = 0.45
perimeter_extrusion_width = 0.4
external_perimeter_extrusion_width = 0.4
infill_extrusion_width = 0.4
solid_infill_extrusion_width = 0.4
top_infill_extrusion_width = 0.4
compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="DEV-350"
[print:0.20mm GOOD @Infinity3D_DEV_350]
inherits = *common*
layer_height = 0.20
top_solid_layers = 5
bottom_solid_layers = 5
bridge_speed = 45
infill_speed = 60
perimeter_speed = 50
support_material_speed = 50
max_print_speed = 60
skirt_distance = 10
first_layer_speed = 80%
first_layer_extrusion_width = 0.45
perimeter_extrusion_width = 0.4
external_perimeter_extrusion_width = 0.4
infill_extrusion_width = 0.4
solid_infill_extrusion_width = 0.4
top_infill_extrusion_width = 0.4
compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="DEV-350"
[print:0.30mm RAPID @Infinity3D_DEV_350]
inherits = *common*
layer_height = 0.30
top_solid_layers = 3
bottom_solid_layers = 3
bridge_speed = 45
infill_speed = 60
perimeter_speed = 50
support_material_speed = 50
max_print_speed = 60
skirt_distance = 10
first_layer_speed = 80%
compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="DEV-350"
[print:0.40mm FAST @Infinity3D_DEV_350]
inherits = *common*
layer_height = 0.40
top_solid_layers = 3
bottom_solid_layers = 3
bridge_speed = 45
infill_speed = 60
perimeter_speed = 50
support_material_speed = 50
max_print_speed = 60
skirt_distance = 10
first_layer_speed = 80%
support_material_extrusion_width = 0.45
compatible_printers_condition = nozzle_diameter[0]==0.4 and printer_model=="DEV-350"
[filament:*common*]
bed_temperature = 60
bridge_fan_speed = 100
compatible_printers =
compatible_printers_condition =
compatible_prints =
compatible_prints_condition =
cooling = 1
disable_fan_first_layers = 2
end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n"
extrusion_multiplier = 1
fan_always_on = 1
fan_below_layer_time = 60
filament_colour = #29B2B2
filament_cooling_final_speed = 3.4
filament_cooling_initial_speed = 2.2
filament_cooling_moves = 4
filament_cost = 0
filament_density = 0
filament_deretract_speed = nil
filament_diameter = 1.75
filament_load_time = 0
filament_loading_speed = 28
filament_loading_speed_start = 3
filament_max_volumetric_speed = 0
filament_minimal_purge_on_wipe_tower = 15
filament_notes = ""
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
filament_retract_before_travel = nil
filament_retract_before_wipe = nil
filament_retract_layer_change = nil
filament_retract_length = nil
filament_retract_lift = nil
filament_retract_lift_above = nil
filament_retract_lift_below = nil
filament_retract_restart_extra = nil
filament_retract_speed = nil
filament_settings_id = ""
filament_soluble = 0
filament_spool_weight = 0
filament_toolchange_delay = 0
filament_type = PLA
filament_unload_time = 0
filament_unloading_speed = 90
filament_unloading_speed_start = 100
filament_wipe = nil
first_layer_bed_temperature = 60
first_layer_temperature = 210
full_fan_speed_layer = 0
inherits =
max_fan_speed = 100
min_fan_speed = 35
min_print_speed = 10
slowdown_below_layer_time = 5
start_filament_gcode = "; Filament gcode\n"
temperature = 210
[filament:*PLA*]
inherits = *common*
bed_temperature = 60
fan_below_layer_time = 100
filament_colour = #DDDDDD
filament_max_volumetric_speed = 15
filament_type = PLA
filament_density = 1.24
filament_cost = 20
first_layer_bed_temperature = 60
first_layer_temperature = 210
fan_always_on = 1
cooling = 1
max_fan_speed = 100
min_fan_speed = 100
bridge_fan_speed = 100
disable_fan_first_layers = 1
temperature = 205
[filament:*PET*]
inherits = *common*
bed_temperature = 70
cooling = 1
disable_fan_first_layers = 3
fan_below_layer_time = 20
filament_colour = #DDDDDD
filament_max_volumetric_speed = 8
filament_type = PETG
filament_density = 1.27
filament_cost = 30
first_layer_bed_temperature = 70
first_layer_temperature = 240
fan_always_on = 1
max_fan_speed = 50
min_fan_speed = 20
bridge_fan_speed = 100
temperature = 240
[filament:*ABS*]
inherits = *common*
bed_temperature = 100
cooling = 0
disable_fan_first_layers = 3
fan_below_layer_time = 20
filament_colour = #DDDDDD
filament_max_volumetric_speed = 11
filament_type = ABS
filament_density = 1.04
filament_cost = 20
first_layer_bed_temperature = 100
first_layer_temperature = 245
fan_always_on = 0
max_fan_speed = 0
min_fan_speed = 0
bridge_fan_speed = 30
top_fan_speed = 0
temperature = 245
[filament:Generic PLA @Infinity3D]
inherits = *PLA*
renamed_from = "Generic PLA @Infinity3D"
filament_vendor = Generic
[filament:Generic PETG @Infinity3D]
inherits = *PET*
renamed_from = "Generic PETG @Infinity3D"
filament_vendor = Generic
[filament:Generic ABS @Infinity3D]
inherits = *ABS*
renamed_from = "Generic ABS @Infinity3D"
first_layer_bed_temperature = 90
bed_temperature = 90
filament_vendor = Generic
[filament:Infinity3D PLA @Infinity3D]
inherits = *PLA*
renamed_from = "Infinity3D PLA @Infinity3D"
filament_vendor = Infinity3D
temperature = 200
bed_temperature = 60
first_layer_temperature = 205
first_layer_bed_temperature = 60
filament_colour = #42BDD8
[filament:Infinity3D PETG @Infinity3D]
inherits = *PET*
renamed_from = "Infinity3D PETG @Infinity3D"
filament_vendor = Infinity3D
temperature = 240
bed_temperature = 70
first_layer_temperature = 240
first_layer_bed_temperature = 70
max_fan_speed = 40
min_fan_speed = 20
filament_colour = #42BDD8
[filament:Infinity3D ABS @Infinity3D]
inherits = *ABS*
renamed_from = "Infinity3D ABS @Infinity3D"
filament_vendor = Infinity3D
temperature = 240
bed_temperature = 90
first_layer_temperature = 240
first_layer_bed_temperature = 90
filament_colour = #42BDD8
[filament:Prusament PLA @Infinity3D]
inherits = *PLA*
renamed_from = "Prusament PLA @Infinity3D"
filament_vendor = Prusa Polymers
temperature = 210
bed_temperature = 60
first_layer_temperature = 215
first_layer_bed_temperature = 60
filament_cost = 24.99
filament_density = 1.24
filament_colour = #F94D0C
[filament:Prusament PETG @Infinity3D]
inherits = *PET*
renamed_from = "Prusament PETG @Infinity3D"
filament_vendor = Prusa Polymers
temperature = 245
bed_temperature = 70
first_layer_temperature = 245
first_layer_bed_temperature = 70
filament_cost = 24.99
filament_density = 1.27
filament_colour = #F94D0C
[filament:AzureFilm PLA @Infinity3D]
inherits = *PLA*
filament_vendor = AzureFilm
temperature = 210
bed_temperature = 60
first_layer_temperature = 215
first_layer_bed_temperature = 60
filament_cost = 19.97
filament_density = 1.24
filament_colour = #006AA6
[filament:Devil Design PLA @Infinity3D]
inherits = *PLA*
filament_vendor = Devil Design
temperature = 215
bed_temperature = 60
first_layer_temperature = 215
first_layer_bed_temperature = 60
filament_cost = 19.00
filament_density = 1.24
filament_colour = #FF0000
filament_spool_weight = 256
[filament:Devil Design PLA Matt @Infinity3D]
inherits = *PLA*
filament_vendor = Devil Design
temperature = 205
bed_temperature = 60
first_layer_temperature = 205
first_layer_bed_temperature = 60
filament_cost = 20.00
filament_density = 1.38
filament_colour = #FF0000
filament_spool_weight = 256
[filament:Devil Design PLA Galaxy @Infinity3D]
inherits = *PLA*
renamed_from = "Devil Design PLA (Galaxy) @Infinity3D"
filament_vendor = Devil Design
temperature = 225
bed_temperature = 65
first_layer_temperature = 225
first_layer_bed_temperature = 65
filament_cost = 19.00
filament_density = 1.24
filament_colour = #FF0000
filament_spool_weight = 256
[filament:Extrudr PLA NX2 @Infinity3D]
inherits = *PLA*
filament_vendor = Extrudr
temperature = 200
bed_temperature = 60
first_layer_temperature = 205
first_layer_bed_temperature = 60
filament_cost = 23.63
filament_density = 1.3
filament_colour = #3C4547
filament_spool_weight = 256
[filament:Extrudr GreenTEC Pro @Infinity3D]
inherits = *PLA*
filament_vendor = Extrudr
temperature = 210
bed_temperature = 60
first_layer_temperature = 215
first_layer_bed_temperature = 60
filament_cost = 56.24
filament_density = 1.35
filament_colour = #3C4547
[filament:Real Filament PLA @Infinity3D]
inherits = *PLA*
filament_vendor = Real Filament
temperature = 195
bed_temperature = 60
first_layer_temperature = 200
first_layer_bed_temperature = 60
filament_cost = 24.99
filament_density = 1.24
filament_colour = #007ABF
[filament:Velleman PLA @Infinity3D]
inherits = *PLA*
filament_vendor = Velleman
temperature = 200
bed_temperature = 60
first_layer_temperature = 205
first_layer_bed_temperature = 60
filament_cost = 27.99
filament_density = 1.24
filament_colour = #7EA60D
[filament:3DJAKE ecoPLA @Infinity3D]
inherits = *PLA*
filament_vendor = 3DJAKE
temperature = 200
bed_temperature = 60
first_layer_temperature = 205
first_layer_bed_temperature = 60
filament_cost = 21.99
filament_density = 1.24
filament_colour = #125467
filament_spool_weight = 238
[filament:3DJAKE ecoPLA Matt @Infinity3D]
inherits = *PLA*
filament_vendor = 3DJAKE
temperature = 195
bed_temperature = 60
first_layer_temperature = 195
first_layer_bed_temperature = 60
filament_cost = 24.99
filament_density = 1.38
filament_colour = #125467
filament_spool_weight = 238
[filament:3DJAKE ecoPLA Tough @Infinity3D]
inherits = *PLA*
filament_vendor = 3DJAKE
temperature = 215
bed_temperature = 60
first_layer_temperature = 215
first_layer_bed_temperature = 60
filament_cost = 29.99
filament_density = 1.21
filament_colour = #125467
[filament:FormFutura Tough PLA @Infinity3D]
inherits = *PLA*
filament_vendor = FormFutura
temperature = 215
bed_temperature = 60
first_layer_temperature = 215
first_layer_bed_temperature = 60
filament_cost = 46.65
filament_density = 1.21
filament_colour = #ed000e
[filament:123-3D Jupiter PLA @Infinity3D]
inherits = *PLA*
filament_vendor = 123-3D
temperature = 200
bed_temperature = 60
first_layer_temperature = 205
first_layer_bed_temperature = 60
filament_cost = 19.50
filament_density = 1.24
filament_colour = #FFE200
[filament:Das Filament PLA @Infinity3D]
inherits = *PLA*
filament_vendor = Das Filament
temperature = 210
bed_temperature = 60
first_layer_temperature = 215
first_layer_bed_temperature = 60
filament_cost = 20.56
filament_density = 1.24
filament_colour = #C7F935
[filament:Das Filament PETG @Infinity3D]
inherits = *PET*
filament_vendor = Das Filament
temperature = 240
bed_temperature = 70
first_layer_temperature = 240
first_layer_bed_temperature = 70
filament_cost = 27.44
filament_density = 1.29
filament_colour = #C7F935
[filament:Verbatim PLA @Infinity3D]
inherits = *PLA*
filament_vendor = Verbatim
temperature = 205
bed_temperature = 60
first_layer_temperature = 210
first_layer_bed_temperature = 60
filament_cost = 22.99
filament_density = 1.24
filament_colour = #001ca8
# Common printer preset
[printer:*common*]
bed_shape = 0x0,350x0,350x350,0x350
color_change_gcode = M600
cooling_tube_length = 5
cooling_tube_retraction = 91.5
default_filament_profile = ""
default_print_profile =
end_gcode = ;End GCode begin\nM140 S0 ;Heated bed heater off\nM104 S0 ;Extruder heater off\nG90 ;absolute positioning\nG92 E0 ;Retract the filament\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z350 E-1 F3000 ;move Z up a bit and retract filament even more\nG1 X0 F3000 ;move X to min endstops, so the head is out of the way\nG1 Y350 F3000 ;so the head is out of the way and Plate is moved forward\nM84 ;stepper off\nM107 ; fan off\nM82 ; absolute extrusion\n;End GCode end
extra_loading_move = -2
extruder_colour = ""
extruder_offset = 0x0
gcode_flavor = marlin
high_current_on_filament_swap = 0
machine_limits_usage = time_estimate_only
machine_max_acceleration_e = 10000
machine_max_acceleration_extruding = 1000
machine_max_acceleration_retracting = 1000
machine_max_acceleration_travel = 1500
machine_max_acceleration_x = 3000
machine_max_acceleration_y = 3000
machine_max_acceleration_z = 100
machine_max_feedrate_e = 25
machine_max_feedrate_x = 150
machine_max_feedrate_y = 150
machine_max_feedrate_z = 50
machine_max_jerk_e = 2.5
machine_max_jerk_x = 10
machine_max_jerk_y = 10
machine_max_jerk_z = 0.2
machine_min_extruding_rate = 0
machine_min_travel_rate = 0
max_layer_height = 0.4
max_print_height = 350
min_layer_height = 0.08
nozzle_diameter = 0.4
parking_pos_retraction = 92
pause_print_gcode =
printer_technology = FFF
remaining_times = 0
retract_before_travel = 2
retract_before_wipe = 0%
retract_layer_change = 1
retract_length = 2
retract_length_toolchange = 10
retract_lift = 0
retract_lift_above = 0
retract_lift_below = 328
retract_restart_extra = 0
retract_restart_extra_toolchange = 0
retract_speed = 60
deretract_speed = 40
silent_mode = 0
single_extruder_multi_material = 0
start_gcode = Start GCode begin\nM140 S[first_layer_bed_temperature] ;Start Warming Bed\nM104 S[first_layer_temperature] ;Preheat\nG28 ;home\nG29 ;Auto Bed-level\nG90 ;absolute positioning\nG1 X-10 Y-10 F3000 ;Move to corner\nM190 S[first_layer_bed_temperature] ;Wait For Bed Temperature\nM109 S[first_layer_temperature] ;Wait for Hotend Temperature\nG92 E0 ;Zero set extruder position\nG1 E3 F200 ;Feed filament to clear nozzle\nG92 E0 ;Zero set extruder position
thumbnails = 16x16,220x124
use_firmware_retraction = 0
use_relative_e_distances = 0
use_volumetric_e = 0
variable_layer_height = 1
wipe = 0
z_offset = 0
[printer:Infinity3D DEV-350]
inherits = *common*
printer_model = DEV-350
printer_variant = 0.4
default_filament_profile = Generic PLA @Infinity3D
default_print_profile = 0.20mm GOOD @Infinity3D_DEV_350
[printer:Infinity3D DEV-200]
inherits = *common*
printer_model = DEV-200
printer_variant = 0.4
bed_shape = 0x0,200x0,200x200,0x200
thumbnails =
variable_layer_height = 0
retract_lift_below = 0
max_print_height = 235
start_gcode = Start GCode begin\nM140 S[first_layer_bed_temperature] ;Start Warming Bed\nM104 S[first_layer_temperature] ;Preheat\nG28 ;home\nG29 ;Auto Bed-level\nG90 ;absolute positioning\nG1 X-10 Y-10 F3000 ;Move to corner\nM190 S[first_layer_bed_temperature] ;Wait For Bed Temperature\nM109 S[first_layer_temperature] ;Wait for Hotend Temperature\nG92 E0 ;Zero set extruder position\nG1 E3 F200 ;Feed filament to clear nozzle\nG92 E0 ;Zero set extruder position
end_gcode = ;End GCode begin\nM140 S0 ;Heated bed heater off\nM104 S0 ;Extruder heater off\nG90 ;absolute positioning\nG92 E0 ;Retract the filament\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z240 E-1 F3000 ;move Z up a bit and retract filament even more\nG1 X0 F3000 ;move X to min endstops, so the head is out of the way\nG1 Y200 F3000 ;so the head is out of the way and Plate is moved forward\nM84 ;stepper off\nM107 ; fan off\nM82 ; absolute extrusion\n;End GCode end
default_filament_profile = Generic PLA @Infinity3D
default_print_profile = 0.20mm GOOD @Infinity3D_DEV_200

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

View File

@ -0,0 +1,487 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="2717.000000pt" height="2953.000000pt" viewBox="0 0 2717.000000 2953.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,2953.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1160 28950 l0 -580 -580 0 c-573 0 -580 0 -580 -20 0 -20 7 -20 580
-20 l580 0 0 -570 0 -570 -580 0 c-573 0 -580 0 -580 -20 0 -20 7 -20 580 -20
l580 0 0 -575 0 -575 -580 0 c-509 0 -580 -2 -580 -15 0 -13 71 -15 580 -15
l580 0 0 -575 0 -575 -580 0 c-509 0 -580 -2 -580 -15 0 -13 71 -15 580 -15
l580 0 0 -575 0 -575 -580 0 c-509 0 -580 -2 -580 -15 0 -13 71 -15 580 -15
l580 0 0 -575 0 -575 -580 0 c-509 0 -580 -2 -580 -15 0 -13 71 -15 580 -15
l580 0 0 -575 0 -575 -580 0 c-573 0 -580 0 -580 -20 0 -20 7 -20 580 -20
l580 0 0 -570 0 -570 -580 0 c-573 0 -580 0 -580 -20 0 -20 7 -20 580 -20
l580 0 0 -570 0 -570 -580 0 c-573 0 -580 0 -580 -20 0 -20 7 -20 580 -20
l580 0 0 -570 0 -570 -580 0 c-573 0 -580 0 -580 -20 0 -20 7 -20 580 -20
l580 0 0 -575 0 -575 -580 0 c-509 0 -580 -2 -580 -15 0 -13 71 -15 580 -15
l580 0 0 -575 0 -575 -580 0 c-509 0 -580 -2 -580 -15 0 -13 71 -15 580 -15
l580 0 0 -575 0 -575 -580 0 c-509 0 -580 -2 -580 -15 0 -13 71 -15 580 -15
l580 0 0 -575 0 -575 -580 0 c-509 0 -580 -2 -580 -15 0 -13 71 -15 580 -15
l580 0 0 -575 0 -575 -580 0 c-573 0 -580 0 -580 -20 0 -20 7 -20 580 -20
l580 0 0 -570 0 -570 -580 0 c-573 0 -580 0 -580 -20 0 -20 7 -20 580 -20
l580 0 0 -570 0 -570 -580 0 c-573 0 -580 0 -580 -20 0 -20 7 -20 580 -20
l580 0 0 -570 0 -570 -580 0 c-573 0 -580 0 -580 -20 0 -20 7 -20 580 -20
l580 0 0 -575 0 -575 -580 0 c-509 0 -580 -2 -580 -15 0 -13 71 -15 580 -15
l580 0 0 -575 0 -575 -580 0 c-509 0 -580 -2 -580 -15 0 -13 71 -15 580 -15
l580 0 0 -575 0 -575 -580 0 c-509 0 -580 -2 -580 -15 0 -13 71 -15 580 -15
l580 0 0 -575 0 -575 -580 0 c-509 0 -580 -2 -580 -15 0 -13 71 -15 580 -15
l580 0 0 -575 0 -575 -580 0 c-509 0 -580 -2 -580 -15 0 -13 71 -15 580 -15
l580 0 0 -575 0 -575 -580 0 c-573 0 -580 0 -580 -20 0 -20 7 -20 580 -20
l580 0 0 -580 c0 -573 0 -580 20 -580 20 0 20 7 20 580 l0 580 575 0 575 0 0
-580 c0 -509 2 -580 15 -580 13 0 15 71 15 580 l0 580 575 0 575 0 0 -580 c0
-509 2 -580 15 -580 13 0 15 71 15 580 l0 580 575 0 575 0 0 -580 c0 -509 2
-580 15 -580 13 0 15 71 15 580 l0 580 575 0 575 0 0 -580 c0 -509 2 -580 15
-580 13 0 15 71 15 580 l0 580 575 0 575 0 0 -580 c0 -573 0 -580 20 -580 20
0 20 7 20 580 l0 580 570 0 570 0 0 -580 c0 -573 0 -580 20 -580 20 0 20 7 20
580 l0 580 570 0 570 0 0 -580 c0 -573 0 -580 20 -580 20 0 20 7 20 580 l0
580 570 0 570 0 0 -580 c0 -573 0 -580 20 -580 20 0 20 7 20 580 l0 580 575 0
575 0 0 -580 c0 -509 2 -580 15 -580 13 0 15 71 15 580 l0 580 575 0 575 0 0
-580 c0 -509 2 -580 15 -580 13 0 15 71 15 580 l0 580 575 0 575 0 0 -580 c0
-509 2 -580 15 -580 13 0 15 71 15 580 l0 580 575 0 575 0 0 -580 c0 -509 2
-580 15 -580 13 0 15 71 15 580 l0 580 575 0 575 0 0 -580 c0 -573 0 -580 20
-580 20 0 20 7 20 580 l0 580 570 0 570 0 0 -580 c0 -573 0 -580 20 -580 20 0
20 7 20 580 l0 580 570 0 570 0 0 -580 c0 -573 0 -580 20 -580 20 0 20 7 20
580 l0 580 570 0 570 0 0 -580 c0 -573 0 -580 20 -580 20 0 20 7 20 580 l0
580 575 0 575 0 0 -580 c0 -509 2 -580 15 -580 13 0 15 71 15 580 l0 580 575
0 575 0 0 -580 c0 -509 2 -580 15 -580 13 0 15 71 15 580 l0 580 575 0 575 0
0 -580 c0 -509 2 -580 15 -580 13 0 15 71 15 580 l0 580 575 0 575 0 0 -580
c0 -509 2 -580 15 -580 13 0 15 71 15 580 l0 580 575 0 575 0 0 -580 c0 -573
0 -580 20 -580 20 0 20 7 20 580 l0 580 580 0 c573 0 580 0 580 20 0 20 -7 20
-580 20 l-580 0 0 570 0 570 580 0 c573 0 580 0 580 20 0 20 -7 20 -580 20
l-580 0 0 575 0 575 580 0 c509 0 580 2 580 15 0 13 -71 15 -580 15 l-580 0 0
575 0 575 580 0 c509 0 580 2 580 15 0 13 -71 15 -580 15 l-580 0 0 575 0 575
580 0 c509 0 580 2 580 15 0 13 -71 15 -580 15 l-580 0 0 575 0 575 580 0
c509 0 580 2 580 15 0 13 -71 15 -580 15 l-580 0 0 575 0 575 580 0 c573 0
580 0 580 20 0 20 -7 20 -580 20 l-580 0 0 570 0 570 580 0 c573 0 580 0 580
20 0 20 -7 20 -580 20 l-580 0 0 570 0 570 580 0 c573 0 580 0 580 20 0 20 -7
20 -580 20 l-580 0 0 570 0 570 580 0 c573 0 580 0 580 20 0 20 -7 20 -580 20
l-580 0 0 575 0 575 580 0 c509 0 580 2 580 15 0 13 -71 15 -580 15 l-580 0 0
575 0 575 580 0 c509 0 580 2 580 15 0 13 -71 15 -580 15 l-580 0 0 575 0 575
580 0 c509 0 580 2 580 15 0 13 -71 15 -580 15 l-580 0 0 575 0 575 580 0
c509 0 580 2 580 15 0 13 -71 15 -580 15 l-580 0 0 575 0 575 580 0 c573 0
580 0 580 20 0 20 -7 20 -580 20 l-580 0 0 570 0 570 580 0 c573 0 580 0 580
20 0 20 -7 20 -580 20 l-580 0 0 570 0 570 580 0 c573 0 580 0 580 20 0 20 -7
20 -580 20 l-580 0 0 570 0 570 580 0 c573 0 580 0 580 20 0 20 -7 20 -580 20
l-580 0 0 575 0 575 580 0 c509 0 580 2 580 15 0 13 -71 15 -580 15 l-580 0 0
575 0 575 580 0 c509 0 580 2 580 15 0 13 -71 15 -580 15 l-580 0 0 575 0 575
580 0 c509 0 580 2 580 15 0 13 -71 15 -580 15 l-580 0 0 575 0 575 580 0
c509 0 580 2 580 15 0 13 -71 15 -580 15 l-580 0 0 575 0 575 580 0 c573 0
580 0 580 20 0 20 -7 20 -580 20 l-580 0 0 570 0 570 580 0 c573 0 580 0 580
20 0 20 -7 20 -580 20 l-580 0 0 580 c0 573 0 580 -20 580 -20 0 -20 -7 -20
-580 l0 -580 -575 0 -575 0 0 580 c0 509 -2 580 -15 580 -13 0 -15 -71 -15
-580 l0 -580 -575 0 -575 0 0 580 c0 509 -2 580 -15 580 -13 0 -15 -71 -15
-580 l0 -580 -575 0 -575 0 0 580 c0 509 -2 580 -15 580 -13 0 -15 -71 -15
-580 l0 -580 -575 0 -575 0 0 580 c0 509 -2 580 -15 580 -13 0 -15 -71 -15
-580 l0 -580 -575 0 -575 0 0 580 c0 509 -2 580 -15 580 -13 0 -15 -71 -15
-580 l0 -580 -575 0 -575 0 0 580 c0 573 0 580 -20 580 -20 0 -20 -7 -20 -580
l0 -580 -570 0 -570 0 0 580 c0 573 0 580 -20 580 -20 0 -20 -7 -20 -580 l0
-580 -570 0 -570 0 0 580 c0 573 0 580 -20 580 -20 0 -20 -7 -20 -580 l0 -580
-575 0 -575 0 0 580 c0 509 -2 580 -15 580 -13 0 -15 -71 -15 -580 l0 -580
-575 0 -575 0 0 580 c0 509 -2 580 -15 580 -13 0 -15 -71 -15 -580 l0 -580
-575 0 -575 0 0 580 c0 509 -2 580 -15 580 -13 0 -15 -71 -15 -580 l0 -580
-575 0 -575 0 0 580 c0 509 -2 580 -15 580 -13 0 -15 -71 -15 -580 l0 -580
-575 0 -575 0 0 580 c0 573 0 580 -20 580 -20 0 -20 -7 -20 -580 l0 -580 -570
0 -570 0 0 580 c0 573 0 580 -20 580 -20 0 -20 -7 -20 -580 l0 -580 -570 0
-570 0 0 580 c0 573 0 580 -20 580 -20 0 -20 -7 -20 -580 l0 -580 -570 0 -570
0 0 580 c0 573 0 580 -20 580 -20 0 -20 -7 -20 -580 l0 -580 -575 0 -575 0 0
580 c0 509 -2 580 -15 580 -13 0 -15 -71 -15 -580 l0 -580 -575 0 -575 0 0
580 c0 509 -2 580 -15 580 -13 0 -15 -71 -15 -580 l0 -580 -575 0 -575 0 0
580 c0 509 -2 580 -15 580 -13 0 -15 -71 -15 -580 l0 -580 -575 0 -575 0 0
580 c0 509 -2 580 -15 580 -13 0 -15 -71 -15 -580 l0 -580 -575 0 -575 0 0
580 c0 573 0 580 -20 580 -20 0 -20 -7 -20 -580z m1190 -1190 l0 -570 -575 0
-575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570
0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0
575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z
m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0
-570 -570 0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570 0
-570 0 0 570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0 570
0 570 570 0 570 0 0 -570z m1190 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0
575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z
m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0
-570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0
-575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0 570
0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0 570 0 570 570 0
570 0 0 -570z m1190 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z
m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0
-570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0
-575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570
0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0
575 0 0 -570z m-23620 -1185 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570
0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m-23620 -1180 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575
575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570
0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0
575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0
575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570
0 570 0 0 -575z m1190 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m-23620 -1180 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0
0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180
0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575
570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m-23620 -1180 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575
575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570
0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0
575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0
575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570
0 570 0 0 -575z m1190 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m-23620 -1180 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0
0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180
0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575
570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m-23620 -1185 l0 -570
-575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0
0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570
575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -570 0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570
0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0
570 0 570 570 0 570 0 0 -570z m1190 0 l0 -570 -575 0 -575 0 0 570 0 570 575
0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575
0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0
570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0 570 0 570 570
0 570 0 0 -570z m1190 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575
0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0
570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575
0 575 0 0 -570z m-23620 -1180 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0
0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180
0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570
-575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0
0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0 570 0 570
570 0 570 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0 570 0 570 570 0 570 0 0
-570z m1180 0 l0 -570 -570 0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1190 0
l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575
0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0
570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575
0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -570 0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1180 0
l0 -570 -570 0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1190 0 l0 -570 -575
0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0
570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575
0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m-23620 -1180 l0 -570
-575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0
0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570
575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -570 0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570
0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0
570 0 570 570 0 570 0 0 -570z m1190 0 l0 -570 -575 0 -575 0 0 570 0 570 575
0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575
0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0
570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0 570 0 570 570
0 570 0 0 -570z m1190 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575
0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0
570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575
0 575 0 0 -570z m-23620 -1185 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0
0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180
0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575
570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m-23620 -1180 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575
575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570
0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0
575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0
575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570
0 570 0 0 -575z m1190 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m-23620 -1180 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0
0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180
0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575
570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m-23620 -1180 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575
575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570
0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0
575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0
575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570
0 570 0 0 -575z m1190 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m-23620 -1180 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0
0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180
0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575
570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m-23620 -1185 l0 -570
-575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0
0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570
575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -570 0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570
0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0
570 0 570 570 0 570 0 0 -570z m1190 0 l0 -570 -575 0 -575 0 0 570 0 570 575
0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575
0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0
570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0 570 0 570 570
0 570 0 0 -570z m1190 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575
0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0
570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575
0 575 0 0 -570z m-23620 -1180 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0
0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180
0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570
-575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0
0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0 570 0 570
570 0 570 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0 570 0 570 570 0 570 0 0
-570z m1180 0 l0 -570 -570 0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1190 0
l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575
0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0
570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575
0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -570 0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1180 0
l0 -570 -570 0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1190 0 l0 -570 -575
0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0
570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575
0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m-23620 -1180 l0 -570
-575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0
0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570
575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -570 0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570
0 -570 0 0 570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0
570 0 570 570 0 570 0 0 -570z m1190 0 l0 -570 -575 0 -575 0 0 570 0 570 575
0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575
0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0
570 0 570 570 0 570 0 0 -570z m1180 0 l0 -570 -570 0 -570 0 0 570 0 570 570
0 570 0 0 -570z m1190 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0
-570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0
l0 -570 -575 0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575
0 -575 0 0 570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0
570 0 570 575 0 575 0 0 -570z m1180 0 l0 -570 -575 0 -575 0 0 570 0 570 575
0 575 0 0 -570z m-23620 -1185 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0
0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180
0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575
570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m-23620 -1180 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575
575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570
0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0
575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0
575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570
0 570 0 0 -575z m1190 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m-23620 -1180 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0
0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180
0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575
570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m-23620 -1180 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575
575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570
0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0
575 0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0
575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570
0 570 0 0 -575z m1190 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0
-575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575
0 575 0 0 -575z m-23620 -1180 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0
0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180
0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575
-575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0
0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575
570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0
-575z m1180 0 l0 -575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1190 0
l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575
0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0
575 0 575 575 0 575 0 0 -575z m11810 -590 l0 -1165 -4705 0 c-4176 0 -4705 2
-4705 15 0 8 -9 15 -20 15 -11 0 -20 -7 -20 -15 0 -13 -71 -15 -575 -15 -504
0 -575 2 -575 15 0 8 -7 15 -15 15 -8 0 -15 -7 -15 -15 0 -13 -71 -15 -575
-15 l-575 0 0 575 c0 377 3 575 10 575 6 0 10 7 10 15 0 8 -4 15 -10 15 -7 0
-10 198 -10 575 l0 575 5890 0 5890 0 0 -1165z m-23620 -590 l0 -575 -575 0
-575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575
0 575 575 0 575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0
575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z
m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z m1180 0 l0
-575 -570 0 -570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0
-570 0 0 575 0 575 570 0 570 0 0 -575z m1180 0 l0 -575 -570 0 -570 0 0 575
0 575 570 0 570 0 0 -575z m1190 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0
575 0 0 -575z m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z
m1180 0 l0 -575 -575 0 -575 0 0 575 0 575 575 0 575 0 0 -575z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

View File

@ -0,0 +1,589 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="3780.000000pt" height="4134.000000pt" viewBox="0 0 3780.000000 4134.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,4134.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1618 40273 l-3 -808 -807 -3 c-799 -2 -808 -2 -808 -22 0 -20 9 -20
808 -22 l807 -3 0 -795 0 -795 -808 -3 -807 -2 0 -25 0 -25 810 0 810 0 -2
-797 -3 -798 -805 -2 c-800 -2 -805 -3 -808 -23 -3 -20 -1 -20 807 -20 l811 0
-2 -797 -3 -798 -807 -3 c-800 -2 -808 -2 -808 -22 0 -20 7 -20 810 -20 l810
0 0 -800 0 -800 -810 0 -810 0 0 -25 0 -25 810 0 810 0 0 -795 0 -795 -810 0
-810 0 0 -25 0 -25 810 0 810 0 -2 -797 -3 -798 -808 -3 c-798 -2 -807 -2
-807 -22 0 -20 9 -20 807 -22 l808 -3 0 -795 0 -795 -808 -3 c-805 -2 -808 -2
-805 -22 3 -20 9 -21 808 -23 l805 -2 3 -797 2 -798 -810 0 -810 0 0 -25 0
-25 810 0 810 0 -2 -797 -3 -798 -807 -3 c-799 -2 -808 -2 -808 -22 0 -20 9
-20 808 -22 l807 -3 3 -797 2 -798 -810 0 -810 0 0 -25 0 -25 810 0 810 0 0
-795 0 -795 -810 0 -810 0 0 -25 0 -25 810 0 810 0 0 -800 0 -800 -810 0
c-803 0 -810 0 -810 -20 0 -20 8 -20 808 -22 l807 -3 3 -797 2 -798 -810 0
c-803 0 -810 0 -810 -20 0 -20 8 -20 807 -22 l808 -3 3 -797 2 -798 -810 0
-810 0 0 -25 0 -25 808 -2 807 -3 0 -795 0 -795 -808 -3 c-798 -2 -807 -2
-807 -22 0 -20 9 -20 808 -22 l807 -3 3 -797 2 -798 -810 0 -810 0 0 -25 0
-25 810 0 810 0 0 -795 0 -795 -810 0 -810 0 0 -25 0 -25 810 0 810 0 0 -800
0 -800 -810 0 c-803 0 -810 0 -810 -20 0 -20 8 -20 808 -22 l807 -3 3 -797 2
-798 -810 0 -810 0 0 -25 0 -25 810 0 810 0 -2 -797 -3 -798 -808 -3 c-799 -2
-807 -2 -807 -22 0 -20 7 -20 810 -20 l810 0 -2 -797 -3 -798 -807 -3 c-799
-2 -808 -2 -808 -22 0 -20 9 -20 807 -22 l808 -3 0 -800 0 -800 -807 -3 c-709
-2 -808 -4 -808 -17 0 -13 98 -15 810 -15 l810 0 0 -800 0 -800 -810 0 -810 0
0 -25 0 -25 810 0 810 0 0 -810 0 -810 25 0 25 0 0 808 0 807 795 0 795 0 0
-807 0 -808 25 0 25 0 0 810 0 810 798 -2 797 -3 3 -807 c2 -800 2 -808 22
-808 20 0 20 7 20 810 l0 810 800 0 800 0 0 -810 0 -810 25 0 25 0 0 808 0
807 795 3 795 2 0 -810 0 -810 25 0 25 0 0 810 0 810 798 -2 797 -3 3 -807 c2
-799 2 -808 22 -808 20 0 20 9 22 808 l3 807 798 3 797 2 0 -811 c0 -808 0
-810 20 -807 20 3 21 8 23 808 l2 805 798 3 797 2 0 -810 0 -810 25 0 25 0 0
810 0 810 798 -2 797 -3 3 -807 c2 -799 2 -808 22 -808 20 0 20 9 22 807 l3
808 798 3 797 2 0 -810 0 -810 25 0 25 0 0 810 0 810 795 0 795 0 0 -810 0
-810 25 0 25 0 0 810 0 810 800 0 800 0 0 -810 c0 -803 0 -810 20 -810 20 0
20 8 22 808 l3 807 798 3 797 2 0 -810 c0 -803 0 -810 20 -810 20 0 20 8 22
807 l3 808 798 3 797 2 0 -810 0 -810 25 0 25 0 0 810 0 810 798 -2 797 -3 2
-805 c2 -799 3 -805 23 -808 20 -3 20 0 22 805 l3 808 798 3 797 2 0 -810 0
-810 25 0 25 0 0 810 0 810 795 0 795 0 0 -810 0 -810 25 0 25 0 0 810 0 810
800 0 800 0 0 -810 c0 -803 0 -810 20 -810 20 0 20 8 22 808 l3 807 798 3 797
2 0 -810 0 -810 25 0 25 0 0 810 0 810 798 -2 797 -3 3 -807 c2 -800 2 -808
22 -808 20 0 20 7 20 810 l0 810 798 -2 797 -3 3 -807 c2 -800 2 -808 22 -808
20 0 20 7 20 810 l0 810 800 0 800 0 0 -810 0 -810 25 0 25 0 0 810 0 810 811
0 810 0 -3 22 -3 23 -807 3 -808 2 0 795 0 795 808 2 807 3 3 23 3 22 -810 0
-811 0 0 800 0 800 810 0 c803 0 810 0 810 20 0 20 -7 20 -810 20 l-810 0 0
800 0 800 811 0 c808 0 810 0 807 20 -3 20 -8 21 -808 23 l-805 2 -3 797 -2
798 807 2 808 3 3 23 3 22 -810 0 -811 0 2 798 3 797 808 3 c799 2 807 2 807
22 0 20 -7 20 -810 20 l-810 0 0 800 0 800 811 0 810 0 -3 23 -3 22 -807 3
-808 2 0 795 0 795 811 0 810 0 -3 23 -3 22 -807 3 -808 2 0 800 0 800 810 0
c803 0 810 0 810 20 0 20 -8 20 -807 22 l-808 3 -3 798 -2 797 811 0 810 0 -3
23 -3 22 -808 3 -807 2 2 798 3 797 805 2 c800 2 805 3 808 23 3 20 1 20 -807
20 l-811 0 0 800 0 800 810 0 c803 0 810 0 810 20 0 20 -7 20 -810 20 l-810 0
0 800 0 800 811 0 810 0 -3 23 -3 22 -807 3 -808 2 0 795 0 795 808 2 c799 3
807 3 807 23 0 20 -8 20 -807 23 l-808 2 0 800 0 800 810 0 c803 0 810 0 810
20 0 20 -8 20 -807 22 l-808 3 -3 798 -2 797 811 0 810 0 -3 23 -3 22 -805 2
-805 3 0 797 0 798 805 2 c800 2 805 3 808 23 3 20 1 20 -807 20 l-811 0 2
798 3 797 808 3 c799 2 807 2 807 22 0 20 -7 20 -810 20 l-810 0 0 800 0 800
808 2 807 3 3 23 3 22 -810 0 -811 0 2 795 3 795 805 3 805 2 3 23 3 22 -810
0 -811 0 0 800 0 800 810 0 c803 0 810 0 810 20 0 20 -7 20 -810 20 l-810 0 0
800 0 800 811 0 c808 0 810 0 807 20 -3 20 -8 21 -808 23 l-805 2 0 798 0 797
805 3 805 2 3 23 3 22 -810 0 -811 0 2 798 3 797 808 3 c799 2 807 2 807 22 0
20 -7 20 -810 20 l-810 0 0 810 0 810 -25 0 -25 0 0 -810 0 -810 -797 2 -798
3 -3 808 c-2 798 -2 807 -22 807 -20 0 -20 -9 -22 -807 l-3 -808 -797 -3 -798
-2 0 810 c0 803 0 810 -20 810 -20 0 -20 -8 -22 -807 l-3 -808 -797 -3 -798
-2 0 810 0 810 -25 0 -25 0 0 -810 0 -810 -797 2 -798 3 -3 808 c-2 798 -2
807 -22 807 -20 0 -20 -9 -22 -807 l-3 -808 -797 -3 -798 -2 0 810 c0 803 0
810 -20 810 -20 0 -20 -8 -22 -807 l-3 -808 -800 0 -800 0 -3 808 c-2 798 -2
807 -22 807 -20 0 -20 -9 -22 -807 l-3 -808 -795 0 -795 0 -3 808 c-2 798 -2
807 -22 807 -20 0 -20 -9 -22 -807 l-3 -808 -795 0 -795 0 -3 808 -2 807 -25
0 -25 0 0 -810 0 -810 -797 2 -798 3 -3 808 c-2 799 -2 807 -22 807 -20 0 -20
-7 -20 -810 l0 -810 -797 2 -798 3 -3 808 c-2 798 -2 807 -22 807 -20 0 -20
-9 -22 -807 l-3 -808 -797 -3 -798 -2 0 810 0 810 -25 0 -25 0 0 -810 0 -810
-795 0 -795 0 0 810 0 810 -25 0 -25 0 0 -810 0 -810 -797 2 -798 3 -3 808
c-2 798 -2 807 -22 807 -20 0 -20 -9 -22 -807 l-3 -808 -795 0 -795 0 -3 808
-2 807 -25 0 -25 0 0 -810 0 -810 -797 2 -798 3 0 808 0 807 -22 0 -23 0 -2
-807 -3 -808 -795 0 -795 0 -3 808 c-2 798 -2 807 -22 807 -20 0 -20 -9 -22
-807 l-3 -808 -797 -3 -798 -2 0 810 0 810 -25 0 -25 0 0 -810 0 -810 -795 0
c-629 0 -795 3 -795 13 0 6 0 371 0 810 l0 797 -25 0 -25 0 0 -810 0 -810
-800 0 -800 0 0 810 c0 803 0 810 -20 810 -20 0 -20 -8 -22 -807 l-3 -808
-797 -3 -798 -2 0 810 0 810 -25 0 -25 0 0 -797 c0 -439 0 -804 0 -810 0 -10
-166 -13 -795 -13 -629 0 -795 3 -795 13 0 6 0 371 0 810 l0 797 -25 0 -25 0
-2 -807z m1642 -1648 c0 -434 0 -793 0 -797 0 -5 -358 -8 -795 -8 -437 0 -795
3 -795 8 0 22 0 1578 0 1585 0 4 358 6 795 5 l795 -3 0 -790z m1645 -5 l0
-795 -797 -3 -798 -2 0 800 0 800 798 -2 797 -3 0 -795z m1645 0 l0 -800 -800
0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793 0 0 -800z m1640 0 l0
-800 -795 0 c-523 0 -795 3 -795 10 0 6 0 363 0 795 0 432 0 787 0 790 0 3
358 5 795 5 l795 0 0 -800z m1645 0 l0 -795 -797 -3 -798 -2 0 800 0 800 798
-2 797 -3 0 -795z m1640 0 l0 -795 -795 0 -795 0 -3 785 c-1 432 0 791 3 798
3 10 168 12 797 10 l793 -3 0 -795z m1645 0 l0 -800 -797 2 -798 3 -3 785 c-1
432 0 791 3 798 3 9 173 12 800 12 l795 0 0 -800z m1645 0 l0 -795 -797 -3
-798 -2 0 793 c0 437 3 797 7 800 3 4 362 6 797 5 l791 -3 0 -795z m1645 0 l0
-800 -797 2 -798 3 -3 785 c-1 432 0 791 3 798 3 9 173 12 800 12 l795 0 0
-800z m1640 0 l0 -800 -795 0 -795 0 0 800 0 800 795 0 795 0 0 -800z m1648
-2 l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3 -797z m1640 -1 l2 -797
-797 2 -798 3 -3 785 c-1 432 0 791 3 798 3 10 168 12 797 10 l793 -3 3 -798z
m1642 3 l0 -800 -797 2 -798 3 -3 785 c-1 432 0 791 3 798 3 9 173 12 800 12
l795 0 0 -800z m1648 -3 l2 -797 -797 2 -798 3 -3 785 c-1 432 0 791 3 798 3
10 168 12 797 10 l793 -3 3 -798z m1640 0 l2 -797 -797 2 -798 3 -3 785 c-1
432 0 791 3 798 3 10 168 12 797 10 l793 -3 3 -798z m1647 3 l0 -795 -800 0
-800 0 -3 785 c-1 432 0 791 3 798 3 10 169 12 802 10 l798 -3 0 -795z m1643
-2 l2 -798 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 362 6 797 5 l791 -3 3
-797z m1642 2 l0 -800 -797 2 -798 3 -3 785 c-1 432 0 791 3 798 3 9 173 12
800 12 l795 0 0 -800z m1645 0 l0 -795 -797 -3 -798 -2 0 800 0 800 798 -2
797 -3 0 -795z m1643 -2 l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3
-797z m1640 -1 l2 -797 -797 2 -798 3 -3 785 c-1 432 0 791 3 798 3 10 168 12
797 10 l793 -3 3 -798z m-31218 -1642 l0 -795 -22 -5 c-13 -3 -372 -4 -798 -3
l-775 3 -3 790 c-1 435 0 795 2 800 2 7 276 9 800 7 l796 -2 0 -795z m1635 -2
l0 -798 -795 0 -795 0 -3 790 c-1 435 0 795 2 800 2 7 275 9 797 8 l794 -3 0
-797z m1645 -4 l0 -799 -789 0 c-473 0 -792 4 -796 9 -3 5 -5 364 -5 798 l0
788 787 5 c434 3 791 4 796 2 4 -2 7 -363 7 -803z m1648 0 l-3 -794 -795 0
-795 0 -3 797 -2 798 792 2 c436 2 796 0 801 -3 4 -3 6 -363 5 -800z m1637 4
l0 -798 -775 -3 c-426 -1 -785 0 -797 3 l-23 5 0 794 c0 521 3 795 10 798 5 2
364 2 797 1 l788 -3 0 -797z m1640 0 l0 -798 -784 -3 c-571 -1 -787 1 -797 9
-12 10 -14 147 -14 799 0 517 3 789 10 792 5 2 364 2 797 1 l788 -3 0 -797z
m1648 797 c4 0 7 -358 7 -795 l0 -795 -22 -5 c-13 -3 -372 -4 -798 -3 l-775 3
-3 790 c-1 435 0 795 2 800 3 8 901 11 1589 5z m1645 -798 l-3 -797 -795 0
-795 0 -3 790 c-1 435 0 795 2 800 2 7 276 9 800 7 l796 -2 -2 -798z m1640 0
l-3 -797 -792 -3 -793 -2 0 802 0 803 795 -3 795 -2 -2 -798z m1647 1 l0 -798
-797 -3 -798 -2 0 798 c0 439 2 801 4 803 2 2 361 3 798 2 l793 -3 0 -797z
m1643 -4 l-3 -794 -775 -3 c-426 -1 -785 0 -797 3 l-23 5 0 795 0 795 793 2
c435 2 795 0 800 -3 4 -3 6 -363 5 -800z m1640 0 l-3 -794 -775 -3 c-426 -1
-785 0 -797 3 l-23 5 0 795 0 795 793 2 c435 2 795 0 800 -3 4 -3 6 -363 5
-800z m3290 0 l-3 -794 -795 0 -795 0 -3 797 -2 798 792 2 c436 2 796 0 801
-3 4 -3 6 -363 5 -800z m1652 7 c0 -715 -2 -794 -16 -800 -20 -8 -1558 -8
-1578 0 -14 6 -16 85 -16 799 0 520 3 794 10 797 5 2 368 2 805 0 l795 -2 0
-794z m1640 -1 l0 -795 -22 -5 c-13 -3 -372 -4 -798 -3 l-775 3 -3 790 c-1
435 0 795 2 800 2 7 276 9 800 7 l796 -2 0 -795z m1640 -3 l0 -802 -797 2
-798 3 -3 790 c-1 435 0 795 2 800 2 7 278 10 800 10 l796 0 0 -803z m1648 21
c1 -428 0 -788 -3 -800 l-5 -23 -795 0 -795 0 0 803 0 802 797 -2 798 -3 3
-777z m1637 -20 l0 -798 -797 -3 -798 -2 0 802 0 803 797 -2 798 -3 0 -797z
m1643 -4 l-3 -794 -775 -3 c-426 -1 -785 0 -797 3 l-23 5 0 795 0 795 793 2
c435 2 795 0 800 -3 4 -3 6 -363 5 -800z m-32865 10 c-2 -435 -5 -795 -9 -800
-6 -11 -1584 -13 -1584 -1 0 4 -1 364 -3 800 l-2 792 800 0 800 0 -2 -791z
m21365 -6 l-3 -798 -795 0 -795 0 -3 798 -2 797 800 0 800 0 -2 -797z m-21368
-1635 c0 -434 0 -792 0 -798 0 -7 -272 -10 -795 -10 -523 0 -795 3 -795 10 0
6 0 363 0 795 0 432 0 787 0 790 0 3 358 4 795 3 l795 -3 0 -787z m1648 -5
l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800 0 -2 -797z m1642 -3 l0 -800
-797 2 -798 3 -3 798 -2 797 800 0 800 0 0 -800z m1640 0 l0 -800 -795 0
c-523 0 -795 3 -795 10 0 6 0 363 0 795 0 432 0 787 0 790 0 3 358 5 795 5
l795 0 0 -800z m1648 3 l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800 0 -2
-797z m1640 0 l-3 -798 -795 0 -795 0 -3 798 -2 797 800 0 800 0 -2 -797z
m1643 793 c2 -2 3 -362 1 -800 l-2 -796 -794 0 c-715 0 -794 2 -800 16 -8 21
-8 1569 1 1577 7 7 1587 10 1594 3z m1647 -793 l-3 -798 -795 0 -795 0 -3 798
-2 797 800 0 800 0 -2 -797z m1642 -3 l0 -800 -797 2 -798 3 -3 798 -2 797
800 0 800 0 0 -800z m1640 0 l0 -800 -795 0 -795 0 0 800 0 800 795 0 795 0 0
-800z m1648 3 l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800 0 -2 -797z
m1642 -3 l0 -800 -797 2 -798 3 -3 798 -2 797 800 0 800 0 0 -800z m1640 0 l0
-800 -797 2 -798 3 -3 798 -2 797 800 0 800 0 0 -800z m1648 3 l-3 -798 -795
0 -795 0 -3 798 -2 797 800 0 800 0 -2 -797z m1640 0 l-3 -798 -795 0 -795 0
-3 798 -2 797 800 0 800 0 -2 -797z m1650 0 l-3 -798 -800 0 -800 0 -3 798 -2
797 805 0 805 0 -2 -797z m1640 0 l-3 -798 -795 0 -795 0 -3 798 -2 797 800 0
800 0 -2 -797z m1642 -3 l0 -800 -797 2 -798 3 -3 798 -2 797 800 0 800 0 0
-800z m1648 20 c1 -426 0 -785 -3 -797 l-5 -23 -795 0 -795 0 0 800 0 800 798
-2 797 -3 3 -775z m1640 -17 l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800
0 -2 -797z m1642 -3 l0 -800 -797 2 -798 3 -3 798 -2 797 800 0 800 0 0 -800z
m-32870 -1640 l0 -795 -795 0 -795 0 0 793 c0 435 0 794 0 797 0 3 358 4 795
3 l795 -3 0 -795z m1648 -2 l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797 -3
3 -797z m1642 2 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m1640
0 l0 -800 -795 2 -795 3 0 793 c0 435 0 794 0 797 0 3 358 5 795 5 l795 0 0
-800z m1648 -2 l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3 -797z
m1642 2 l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793
0 0 -800z m1641 796 c2 -2 3 -362 1 -800 l-2 -796 -798 2 -797 3 -3 785 c-1
432 0 791 3 798 3 9 172 12 798 12 437 0 796 -2 798 -4z m1647 -798 l2 -798
-800 0 -800 0 0 800 0 800 798 -2 797 -3 3 -797z m1642 2 l0 -800 -800 0 -800
0 0 800 0 800 800 0 800 0 0 -800z m1640 0 l0 -800 -795 0 -795 0 0 800 0 800
795 0 795 0 0 -800z m1650 0 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0
-800z m1640 0 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m1640 0
l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793 0 0
-800z m1650 0 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m1640 0
l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m1650 0 l0 -800 -805
0 -805 0 0 793 c0 437 3 797 7 800 3 4 366 7 805 7 l798 0 0 -800z m1640 0 l0
-800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m1640 0 l0 -800 -800 0
-800 0 0 800 0 800 800 0 800 0 0 -800z m1645 0 l0 -795 -797 -3 -798 -2 0
800 0 800 798 -2 797 -3 0 -795z m1645 0 l0 -800 -800 0 -800 0 0 800 0 800
800 0 800 0 0 -800z m1640 0 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0
-800z m-31220 -1645 l0 -795 -800 0 -800 0 0 793 c0 437 2 796 4 798 2 2 362
3 800 1 l796 -2 0 -795z m1638 0 l2 -795 -800 0 -800 0 0 793 c0 437 2 796 4
798 2 2 361 3 798 2 l793 -3 3 -795z m3292 -1 l0 -794 -800 0 -800 0 0 795 0
795 793 2 c435 2 795 2 800 0 4 -2 7 -361 7 -798z m1640 0 l0 -794 -800 0
-800 0 0 795 0 795 793 2 c435 2 795 2 800 0 4 -2 7 -361 7 -798z m1638 1 l2
-795 -800 0 -800 0 0 788 c0 484 4 792 9 798 6 5 310 8 798 7 l788 -3 3 -795z
m1645 795 c4 0 7 -358 7 -795 l0 -795 -800 0 -800 0 0 793 c0 437 2 796 4 798
3 3 1205 2 1589 -1z m1647 -795 l0 -795 -800 0 -800 0 0 793 c0 437 2 796 4
798 2 2 362 3 800 1 l796 -2 0 -795z m1640 0 l0 -795 -795 0 -795 0 0 798 0
797 795 -3 795 -2 0 -795z m1650 -1 l0 -794 -800 0 -800 0 0 795 0 795 793 2
c435 2 795 2 800 0 4 -2 7 -361 7 -798z m1640 0 l0 -794 -800 0 -800 0 0 795
0 795 793 2 c435 2 795 2 800 0 4 -2 7 -361 7 -798z m4930 0 l0 -794 -800 0
-800 0 0 795 0 795 793 2 c435 2 795 2 800 0 4 -2 7 -361 7 -798z m3290 1 l0
-795 -800 0 -800 0 0 793 c0 437 2 796 4 798 2 2 362 3 800 1 l796 -2 0 -795z
m1640 3 l0 -798 -800 0 -800 0 0 793 c0 437 2 796 4 798 2 2 362 4 800 4 l796
0 0 -797z m1642 787 c4 -5 8 -364 8 -797 l0 -788 -800 0 -800 0 0 798 0 797
792 0 c517 0 796 -3 800 -10z m1646 -790 l2 -795 -800 0 -800 0 0 798 0 797
797 -2 798 -3 3 -795z m1642 -1 l0 -794 -800 0 -800 0 0 795 0 795 793 2 c435
2 795 2 800 0 4 -2 7 -361 7 -798z m-32867 -2 l2 -792 -800 0 -800 0 2 792 c2
436 3 794 3 796 0 1 358 1 795 0 l795 -3 3 -793z m4927 3 l0 -795 -801 0
c-726 0 -801 1 -795 16 3 9 6 366 6 795 l0 779 795 0 795 0 0 -795z m14790 0
l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1650 0 l0 -795 -800
0 -800 0 0 795 0 795 800 0 800 0 0 -795z m3290 0 l0 -795 -805 0 -805 0 0
795 0 795 805 0 805 0 0 -795z m-24660 -855 c0 -5 0 -364 0 -797 l0 -788 -795
0 -795 0 0 788 c0 433 0 792 0 797 0 7 272 10 795 10 523 0 795 -3 795 -10z
m1648 -787 l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800 0 -2 -797z m1642
-3 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m1640 0 l0 -800
-793 0 c-437 0 -796 2 -798 4 -2 2 -3 362 -1 800 l2 796 795 0 795 0 0 -800z
m1648 3 l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800 0 -2 -797z m1640 0
l-3 -798 -795 0 -795 0 -3 798 -2 797 800 0 800 0 -2 -797z m1642 7 c0 -434 0
-793 0 -797 0 -5 -359 -8 -797 -8 l-798 0 -3 785 c-1 432 0 791 3 798 3 9 173
12 800 12 l795 0 0 -790z m1645 -10 l0 -795 -795 0 -795 0 -3 798 -2 797 797
-2 798 -3 0 -795z m1645 0 l0 -800 -797 2 -798 3 -3 798 -2 797 800 0 800 0 0
-800z m1640 0 l0 -800 -795 0 -795 0 0 800 0 800 795 0 795 0 0 -800z m1648 3
l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800 0 -2 -797z m1642 -3 l0 -800
-797 2 -798 3 -3 798 -2 797 800 0 800 0 0 -800z m1640 0 l0 -800 -797 2 -798
3 -3 785 c-1 432 0 791 3 798 3 9 173 12 800 12 l795 0 0 -800z m1648 3 l-3
-798 -795 0 -795 0 -3 798 -2 797 800 0 800 0 -2 -797z m1640 0 l-3 -798 -795
0 -795 0 -3 798 -2 797 800 0 800 0 -2 -797z m1650 0 l-3 -798 -800 0 -800 0
-3 798 -2 797 805 0 805 0 -2 -797z m1640 0 l-3 -798 -797 -3 -798 -2 0 800 0
800 800 0 800 0 -2 -797z m1642 -3 l0 -800 -797 2 -798 3 -3 798 -2 797 800 0
800 0 0 -800z m1645 0 l0 -795 -797 -3 -798 -2 0 800 0 800 798 -2 797 -3 0
-795z m1643 3 l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800 0 -2 -797z
m1642 -3 l0 -800 -797 2 -798 3 -3 798 -2 797 800 0 800 0 0 -800z m-32870
-850 c0 -5 0 -364 0 -797 l0 -788 -795 0 -795 0 0 788 c0 433 0 792 0 797 0 7
272 10 795 10 523 0 795 -3 795 -10z m1645 -790 l0 -795 -797 -3 -798 -2 0
800 0 800 798 -2 797 -3 0 -795z m1645 0 l0 -800 -800 0 -800 0 0 793 c0 437
3 797 7 800 3 4 363 7 800 7 l793 0 0 -800z m1640 0 l0 -800 -795 2 -795 3 0
788 c0 433 0 792 0 797 0 7 272 10 795 10 l795 0 0 -800z m1645 0 l0 -795
-797 -3 -798 -2 0 800 0 800 798 -2 797 -3 0 -795z m1640 0 l0 -795 -795 0
-795 0 -3 785 c-1 432 0 791 3 798 3 10 168 12 797 10 l793 -3 0 -795z m1645
10 c0 -434 0 -793 0 -797 0 -5 -359 -8 -797 -8 l-798 0 -3 775 c-1 426 0 785
3 798 l5 22 795 0 795 0 0 -790z m1645 -10 l0 -795 -797 -3 -798 -2 0 793 c0
437 3 797 7 800 3 4 362 6 797 5 l791 -3 0 -795z m1645 0 l0 -800 -797 2 -798
3 -3 785 c-1 432 0 791 3 798 3 9 173 12 800 12 l795 0 0 -800z m1640 0 l0
-800 -795 0 -795 0 0 800 0 800 795 0 795 0 0 -800z m1648 -2 l2 -798 -800 0
-800 0 0 800 0 800 798 -2 797 -3 3 -797z m1642 2 l0 -800 -797 2 -798 3 -3
785 c-1 432 0 791 3 798 3 9 173 12 800 12 l795 0 0 -800z m1640 0 l0 -800
-797 2 -798 3 -3 785 c-1 432 0 791 3 798 3 9 173 12 800 12 l795 0 0 -800z
m1648 -2 l2 -798 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 362 6 797 5
l791 -3 3 -797z m1640 -1 l2 -797 -797 2 -798 3 -3 785 c-1 432 0 791 3 798 3
10 168 12 797 10 l793 -3 3 -798z m1647 3 l0 -795 -800 0 -800 0 -3 785 c-1
432 0 791 3 798 3 10 169 12 802 10 l798 -3 0 -795z m1643 -2 l2 -798 -800 0
-800 0 0 793 c0 437 3 797 7 800 3 4 362 6 797 5 l791 -3 3 -797z m1642 2 l0
-800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793 0 0 -800z
m1645 778 c3 -13 4 -372 3 -798 l-3 -775 -797 -3 -798 -2 0 800 0 800 795 0
795 0 5 -22z m1643 -780 l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3
-797z m1642 2 l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800
7 l793 0 0 -800z m-32875 -849 c3 -5 5 -364 5 -798 l0 -788 -795 0 -795 0 0
788 c0 433 0 792 0 797 0 13 1576 14 1585 1z m1639 3 c14 -6 16 -85 16 -800
l0 -794 -796 -2 c-438 -2 -798 -1 -800 1 -7 7 -4 1587 3 1594 8 9 1556 9 1577
1z m1651 -797 l0 -797 -795 0 -795 0 -3 787 c-1 434 0 794 3 801 3 10 168 12
797 10 l793 -3 0 -798z m1645 3 l0 -800 -795 2 -795 3 0 788 c0 434 2 793 5
798 4 5 323 9 796 9 l789 0 0 -800z m1645 -2 c0 -439 -3 -798 -7 -798 -5 0
-363 0 -798 0 l-790 0 0 793 c0 437 3 797 7 800 3 4 362 6 797 5 l791 -3 0
-797z m1640 0 c0 -439 -3 -798 -7 -798 -5 0 -363 0 -798 0 l-790 0 0 794 c0
626 3 795 13 799 6 3 365 5 797 4 l785 -2 0 -797z m1640 -1 l0 -797 -788 0
c-434 0 -793 2 -798 5 -15 10 -12 1568 3 1583 9 9 195 12 798 10 l785 -3 0
-798z m1643 791 c15 -15 18 -1573 3 -1583 -5 -3 -364 -5 -798 -5 l-788 0 -3
787 c-1 434 0 794 3 801 6 17 1565 18 1583 0z m1650 -790 l2 -798 -796 -2
c-438 -2 -798 -1 -800 1 -7 7 -4 1587 3 1594 3 4 362 6 797 5 l791 -3 3 -797z
m1640 0 l2 -798 -795 -2 -795 -3 0 803 0 802 793 -2 792 -3 3 -797z m1647 -1
l0 -797 -795 0 -795 0 -3 800 -2 800 797 -2 798 -3 0 -798z m1640 1 c0 -439
-3 -798 -7 -798 -5 0 -363 0 -798 0 l-790 0 0 794 c0 626 3 795 13 799 6 3
365 5 797 4 l785 -2 0 -797z m1640 -1 l0 -797 -789 0 c-433 0 -792 3 -797 6
-5 3 -9 347 -9 794 0 621 3 789 13 793 6 3 365 5 797 4 l785 -2 0 -798z m1653
1 l2 -798 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 362 6 797 5 l791 -3 3
-797z m1637 0 c0 -439 -3 -798 -7 -798 -5 0 -363 0 -798 0 l-790 0 0 793 c0
437 3 797 7 800 3 4 362 6 797 5 l791 -3 0 -797z m1639 796 c14 -6 16 -85 16
-800 l0 -794 -795 -2 c-437 -2 -800 -1 -805 0 -16 6 -14 1589 3 1595 18 8
1562 8 1581 1z m1640 0 c14 -6 16 -85 16 -800 l0 -794 -796 -2 c-438 -2 -798
-1 -800 1 -7 7 -4 1587 3 1594 8 9 1556 9 1577 1z m1656 -796 l0 -803 -797 2
-798 3 -3 787 c-1 434 0 794 3 801 3 9 173 12 800 12 l795 0 0 -802z m1644
786 c9 -23 7 -1567 -2 -1579 -4 -7 -283 -10 -800 -10 l-792 0 0 803 0 802 794
0 c715 0 794 -2 800 -16z m1641 -787 l0 -797 -798 -3 -797 -2 0 803 0 802 798
-2 797 -3 0 -798z m1640 1 c0 -439 -3 -798 -7 -798 -5 0 -363 0 -798 0 l-790
0 0 794 c0 626 3 795 13 799 6 3 365 5 797 4 l785 -2 0 -797z m-32865 -1640
c0 -434 0 -792 0 -798 0 -7 -272 -10 -795 -10 -523 0 -795 3 -795 10 0 6 0
363 0 795 0 432 0 787 0 790 0 3 358 4 795 3 l795 -3 0 -787z m1645 -8 l0
-795 -797 -3 -798 -2 0 800 0 800 798 -2 797 -3 0 -795z m1645 0 l0 -800 -797
2 -798 3 -3 798 -2 797 800 0 800 0 0 -800z m1640 0 l0 -800 -795 0 c-523 0
-795 3 -795 10 0 6 0 363 0 795 0 432 0 787 0 790 0 3 358 5 795 5 l795 0 0
-800z m1645 0 l0 -795 -797 -3 -798 -2 0 800 0 800 798 -2 797 -3 0 -795z
m1643 3 l-3 -798 -795 0 -795 0 -3 785 c-1 432 0 791 3 798 3 9 173 12 800 12
l795 0 -2 -797z m1642 3 c0 -433 -3 -792 -6 -797 -3 -5 -347 -9 -794 -9 -709
0 -788 2 -794 16 -8 22 -8 1569 1 1577 3 4 364 6 800 5 l793 -3 0 -789z m1645
-6 l0 -795 -795 0 -795 0 -3 798 -2 797 797 -2 798 -3 0 -795z m1643 3 l-3
-798 -795 0 -795 0 -3 785 c-1 432 0 791 3 798 3 9 173 12 800 12 l795 0 -2
-797z m1642 -3 l0 -800 -795 0 -795 0 0 800 0 800 795 0 795 0 0 -800z m1648
3 l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800 0 -2 -797z m1640 0 l-3
-798 -795 0 -795 0 -3 785 c-1 432 0 791 3 798 3 9 173 12 800 12 l795 0 -2
-797z m1642 -3 l0 -800 -797 2 -798 3 -3 785 c-1 432 0 791 3 798 3 9 173 12
800 12 l795 0 0 -800z m1648 3 l-3 -798 -795 0 -795 0 -3 798 -2 797 800 0
800 0 -2 -797z m1640 0 l-3 -798 -795 0 -795 0 -3 785 c-1 432 0 791 3 798 3
9 173 12 800 12 l795 0 -2 -797z m1647 -3 l0 -795 -800 0 -800 0 -3 785 c-1
432 0 791 3 798 3 10 169 12 802 10 l798 -3 0 -795z m1643 3 l-3 -798 -795 0
-795 0 -3 798 -2 797 800 0 800 0 -2 -797z m1642 -3 l0 -800 -797 2 -798 3 -3
798 -2 797 800 0 800 0 0 -800z m1648 20 c1 -426 0 -785 -3 -797 l-5 -23 -795
0 -795 0 0 800 0 800 798 -2 797 -3 3 -775z m1640 -17 l-3 -798 -797 -3 -798
-2 0 800 0 800 800 0 800 0 -2 -797z m1640 0 l-3 -798 -795 0 -795 0 -3 798
-2 797 800 0 800 0 -2 -797z m-32868 -1635 c0 -434 0 -792 0 -798 0 -7 -272
-10 -795 -10 -523 0 -795 3 -795 10 0 6 0 363 0 795 0 432 0 787 0 790 0 3
358 4 795 3 l795 -3 0 -787z m1648 -10 l2 -798 -800 0 -800 0 0 800 0 800 798
-2 797 -3 3 -797z m1642 2 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0
-800z m1640 0 l0 -800 -795 0 -795 0 -2 796 c-2 438 -1 798 1 800 2 2 361 4
798 4 l793 0 0 -800z m1648 -2 l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797
-3 3 -797z m1640 0 l2 -798 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 362 6
797 5 l791 -3 3 -797z m1643 798 c2 -2 3 -362 1 -800 l-2 -796 -798 2 -797 3
-3 785 c-1 432 0 791 3 798 3 9 172 12 798 12 437 0 796 -2 798 -4z m1644
-796 l0 -795 -797 -3 -798 -2 0 793 c0 437 3 797 7 800 3 4 362 6 797 5 l791
-3 0 -795z m1645 0 l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7
800 7 l793 0 0 -800z m1640 0 l0 -800 -795 0 -795 0 0 800 0 800 795 0 795 0
0 -800z m1648 -2 l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3 -797z
m1642 2 l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793
0 0 -800z m1640 0 l0 -800 -797 2 -798 3 -3 785 c-1 432 0 791 3 798 3 9 173
12 800 12 l795 0 0 -800z m1648 -2 l2 -798 -800 0 -800 0 0 793 c0 437 3 797
7 800 3 4 362 6 797 5 l791 -3 3 -797z m1642 2 l0 -800 -800 0 -800 0 0 793
c0 437 3 797 7 800 3 4 363 7 800 7 l793 0 0 -800z m1648 -2 l2 -798 -805 0
-805 0 0 793 c0 437 3 797 7 800 3 4 365 6 802 5 l796 -3 3 -797z m1640 0 l2
-798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3 -797z m1642 2 l0 -800 -800 0
-800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793 0 0 -800z m1645 0 l0
-795 -797 -3 -798 -2 0 800 0 800 798 -2 797 -3 0 -795z m1643 -2 l2 -798
-800 0 -800 0 0 800 0 800 798 -2 797 -3 3 -797z m1642 2 l0 -800 -800 0 -800
0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793 0 0 -800z m-32867 -1642 l-3
-793 -795 0 -795 0 -3 793 -2 792 800 0 800 0 -2 -792z m1647 -3 l0 -795 -800
0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1640 0 l0 -795 -800 0 -800 0 0
795 0 795 800 0 800 0 0 -795z m1640 0 l0 -795 -795 0 -795 0 0 779 c0 429 -3
786 -6 795 -6 15 69 16 795 16 l801 0 0 -795z m1650 0 l0 -795 -800 0 -800 0
0 795 0 795 800 0 800 0 0 -795z m1640 0 l0 -795 -800 0 -800 0 0 795 0 795
800 0 800 0 0 -795z m1640 0 l0 -795 -797 2 -798 3 -3 793 -2 792 800 0 800 0
0 -795z m1650 0 l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1640
0 l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1640 0 l0 -795
-795 0 -795 0 0 795 0 795 795 0 795 0 0 -795z m1650 0 l0 -795 -800 0 -800 0
0 795 0 795 800 0 800 0 0 -795z m1640 0 l0 -795 -800 0 -800 0 0 795 0 795
800 0 800 0 0 -795z m1640 0 l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0
-795z m1650 0 l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1640 0
l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1650 0 l0 -795 -805
0 -805 0 0 795 0 795 805 0 805 0 0 -795z m1640 0 l0 -795 -800 0 -800 0 0
795 0 795 800 0 800 0 0 -795z m1640 0 l0 -795 -800 0 -800 0 0 795 0 795 800
0 800 0 0 -795z m1648 3 l-3 -793 -797 -3 -798 -2 0 795 0 795 800 0 800 0 -2
-792z m1642 -3 l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1640
0 l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m-32870 -1645 l0
-795 -795 0 -795 0 0 793 c0 435 0 794 0 797 0 3 358 4 795 3 l795 -3 0 -795z
m1648 3 l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800 0 -2 -797z m1642 -3
l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m1640 0 l0 -800 -795
2 -795 3 0 793 c0 435 0 794 0 797 0 3 358 5 795 5 l795 0 0 -800z m1648 3
l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800 0 -2 -797z m1642 -3 l0 -800
-797 2 -798 3 -3 798 -2 797 800 0 800 0 0 -800z m1640 10 c0 -434 0 -793 0
-797 0 -5 -359 -8 -797 -8 l-798 0 -3 798 -2 797 800 0 800 0 0 -790z m1648
-7 l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800 0 -2 -797z m1642 -3 l0
-800 -797 2 -798 3 -3 798 -2 797 800 0 800 0 0 -800z m1640 0 l0 -800 -795 0
-795 0 0 800 0 800 795 0 795 0 0 -800z m1650 0 l0 -800 -800 0 -800 0 0 800
0 800 800 0 800 0 0 -800z m1640 0 l0 -800 -797 2 -798 3 -3 798 -2 797 800 0
800 0 0 -800z m1640 0 l0 -800 -797 2 -798 3 -3 798 -2 797 800 0 800 0 0
-800z m1650 0 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m1640 0
l0 -800 -797 2 -798 3 -3 798 -2 797 800 0 800 0 0 -800z m1650 0 l0 -800
-802 2 -803 3 -3 798 -2 797 805 0 805 0 0 -800z m1640 0 l0 -800 -800 0 -800
0 0 800 0 800 800 0 800 0 0 -800z m1640 0 l0 -800 -800 0 -800 0 0 800 0 800
800 0 800 0 0 -800z m1648 3 l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800
0 -2 -797z m1642 -3 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z
m1640 0 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m-32870 -850
c0 -5 0 -364 0 -797 l0 -788 -795 0 -795 0 0 788 c0 433 0 792 0 797 0 7 272
10 795 10 523 0 795 -3 795 -10z m1648 -792 l2 -798 -800 0 -800 0 0 800 0
800 798 -2 797 -3 3 -797z m1642 2 l0 -800 -800 0 -800 0 0 800 0 800 800 0
800 0 0 -800z m1640 0 l0 -800 -795 2 -795 3 0 788 c0 433 0 792 0 797 0 7
272 10 795 10 l795 0 0 -800z m1648 -2 l2 -798 -800 0 -800 0 0 800 0 800 798
-2 797 -3 3 -797z m1640 0 l2 -798 -800 0 -800 0 0 793 c0 437 3 797 7 800 3
4 362 6 797 5 l791 -3 3 -797z m1642 12 c0 -434 0 -793 0 -797 0 -5 -359 -8
-797 -8 l-798 0 -3 785 c-1 432 0 791 3 798 3 9 173 12 800 12 l795 0 0 -790z
m1645 -10 l0 -795 -797 -3 -798 -2 0 793 c0 437 3 797 7 800 3 4 362 6 797 5
l791 -3 0 -795z m1645 0 l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4
363 7 800 7 l793 0 0 -800z m1640 0 l0 -800 -795 0 -795 0 0 800 0 800 795 0
795 0 0 -800z m1648 -2 l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3
-797z m1642 2 l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800
7 l793 0 0 -800z m1640 0 l0 -800 -797 2 -798 3 -3 785 c-1 432 0 791 3 798 3
9 173 12 800 12 l795 0 0 -800z m1648 -2 l2 -798 -800 0 -800 0 0 793 c0 437
3 797 7 800 3 4 362 6 797 5 l791 -3 3 -797z m1642 2 l0 -800 -800 0 -800 0 0
793 c0 437 3 797 7 800 3 4 363 7 800 7 l793 0 0 -800z m1648 -2 l2 -798 -805
0 -805 0 0 793 c0 437 3 797 7 800 3 4 365 6 802 5 l796 -3 3 -797z m1640 0
l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3 -797z m1642 2 l0 -800
-800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793 0 0 -800z m1645
0 l0 -795 -797 -3 -798 -2 0 800 0 800 798 -2 797 -3 0 -795z m1643 -2 l2
-798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3 -797z m1642 2 l0 -800 -800 0
-800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793 0 0 -800z m-32870 -850
c0 -5 0 -364 0 -797 l0 -788 -795 0 -795 0 0 788 c0 433 0 792 0 797 0 7 272
10 795 10 523 0 795 -3 795 -10z m1648 -792 l2 -798 -800 0 -800 0 0 800 0
800 798 -2 797 -3 3 -797z m1642 2 l0 -800 -800 0 -800 0 0 793 c0 437 3 797
7 800 3 4 363 7 800 7 l793 0 0 -800z m1640 0 l0 -800 -795 2 -795 3 0 788 c0
434 2 793 5 798 4 5 323 9 796 9 l789 0 0 -800z m1648 -2 l2 -798 -800 0 -800
0 0 793 c0 437 3 797 7 800 3 4 362 6 797 5 l791 -3 3 -797z m1640 0 l2 -798
-800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 362 6 797 5 l791 -3 3 -797z
m1640 0 l2 -798 -800 0 -800 0 0 788 c0 602 3 791 12 800 9 9 195 12 798 10
l785 -3 3 -797z m1636 796 c14 -6 16 -85 16 -800 l0 -794 -800 0 -800 0 0 793
c0 437 3 797 7 800 8 9 1556 9 1577 1z m1654 -796 l2 -798 -800 0 -800 0 0
793 c0 437 3 797 7 800 3 4 362 6 797 5 l791 -3 3 -797z m1640 0 l2 -798 -795
0 -795 0 0 800 0 800 793 -2 792 -3 3 -797z m1647 0 c0 -439 -3 -798 -7 -798
-5 0 -363 0 -798 0 l-790 0 0 800 0 800 798 -2 797 -3 0 -797z m1643 0 l2
-798 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 362 6 797 5 l791 -3 3 -797z
m1642 2 l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793
0 0 -800z m1648 -2 l2 -798 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 362 6
797 5 l791 -3 3 -797z m1640 0 l2 -798 -800 0 -800 0 0 793 c0 437 3 797 7
800 3 4 362 6 797 5 l791 -3 3 -797z m1650 0 l2 -798 -805 0 -805 0 0 793 c0
437 3 797 7 800 3 4 365 6 802 5 l796 -3 3 -797z m1640 0 l2 -798 -800 0 -800
0 0 793 c0 437 3 797 7 800 3 4 362 6 797 5 l791 -3 3 -797z m1642 2 l0 -800
-800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793 0 0 -800z m1645
778 c8 -35 1 -1578 -7 -1578 -5 0 -363 0 -798 0 l-790 0 0 800 0 800 795 0
795 0 5 -22z m1643 -780 l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3
-797z m1640 0 l2 -798 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 362 6 797
5 l791 -3 3 -797z m-32868 -1648 l0 -795 -795 0 -795 0 0 793 c0 435 0 794 0
797 0 3 358 4 795 3 l795 -3 0 -795z m1645 0 l0 -795 -797 -3 -798 -2 0 800 0
800 798 -2 797 -3 0 -795z m1645 0 l0 -800 -797 2 -798 3 -3 798 -2 797 800 0
800 0 0 -800z m1640 0 l0 -800 -793 0 c-437 0 -796 2 -798 4 -2 2 -3 362 -1
800 l2 796 795 0 795 0 0 -800z m1645 0 l0 -795 -795 0 -795 0 -3 798 -2 797
797 -2 798 -3 0 -795z m1640 0 l0 -795 -795 0 -795 0 -3 785 c-1 432 0 791 3
798 3 10 168 12 797 10 l793 -3 0 -795z m1643 3 l-3 -798 -775 -3 c-426 -1
-785 0 -797 3 l-23 5 0 789 c0 433 3 791 7 794 3 4 363 7 800 7 l793 0 -2
-797z m1647 -3 l0 -795 -795 0 -795 0 -3 798 -2 797 797 -2 798 -3 0 -795z
m1643 3 l-3 -798 -795 0 -795 0 -3 785 c-1 432 0 791 3 798 3 9 173 12 800 12
l795 0 -2 -797z m1640 0 l-3 -798 -792 -3 -793 -2 0 800 0 800 795 0 795 0 -2
-797z m1650 0 l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800 0 -2 -797z
m1640 0 l-3 -798 -795 0 -795 0 -3 785 c-1 432 0 791 3 798 3 9 173 12 800 12
l795 0 -2 -797z m1642 -3 l0 -800 -797 2 -798 3 -3 785 c-1 432 0 791 3 798 3
9 173 12 800 12 l795 0 0 -800z m1648 3 l-3 -798 -795 0 -795 0 -3 798 -2 797
800 0 800 0 -2 -797z m1640 0 l-3 -798 -795 0 -795 0 -3 785 c-1 432 0 791 3
798 3 9 173 12 800 12 l795 0 -2 -797z m1647 -3 l0 -795 -800 0 -800 0 -3 785
c-1 432 0 791 3 798 3 10 169 12 802 10 l798 -3 0 -795z m1643 3 l-3 -798
-795 0 -795 0 -3 798 -2 797 800 0 800 0 -2 -797z m1642 -3 l0 -800 -797 2
-798 3 -3 798 -2 797 800 0 800 0 0 -800z m1645 0 l0 -795 -797 -3 -798 -2 0
800 0 800 798 -2 797 -3 0 -795z m1643 3 l-3 -798 -797 -3 -798 -2 0 800 0
800 800 0 800 0 -2 -797z m1640 0 l-3 -798 -795 0 -795 0 -3 798 -2 797 800 0
800 0 -2 -797z m-32868 -853 c0 -5 0 -364 0 -797 l0 -788 -795 0 -795 0 0 788
c0 433 0 792 0 797 0 7 272 10 795 10 523 0 795 -3 795 -10z m1645 -790 l0
-795 -797 -3 -798 -2 0 800 0 800 798 -2 797 -3 0 -795z m1645 0 l0 -800 -800
0 -800 0 0 800 0 800 800 0 800 0 0 -800z m1640 0 l0 -800 -795 2 -795 3 0
788 c0 433 0 792 0 797 0 7 272 10 795 10 l795 0 0 -800z m1645 0 l0 -795
-797 -3 -798 -2 0 800 0 800 798 -2 797 -3 0 -795z m1643 -3 l2 -797 -797 2
-798 3 -3 785 c-1 432 0 791 3 798 3 10 168 12 797 10 l793 -3 3 -798z m1642
3 l0 -800 -797 2 -798 3 -3 785 c-1 432 0 791 3 798 3 9 173 12 800 12 l795 0
0 -800z m1645 0 l0 -795 -797 -3 -798 -2 0 793 c0 437 3 797 7 800 3 4 362 6
797 5 l791 -3 0 -795z m1645 0 l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7
800 3 4 363 7 800 7 l793 0 0 -800z m1640 0 l0 -800 -795 0 -795 0 0 800 0
800 795 0 795 0 0 -800z m1648 -2 l2 -798 -800 0 -800 0 0 800 0 800 798 -2
797 -3 3 -797z m1642 2 l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4
363 7 800 7 l793 0 0 -800z m1640 0 l0 -800 -797 2 -798 3 -3 785 c-1 432 0
791 3 798 3 9 173 12 800 12 l795 0 0 -800z m1648 -2 l2 -798 -800 0 -800 0 0
793 c0 437 3 797 7 800 3 4 362 6 797 5 l791 -3 3 -797z m1642 2 l0 -800 -800
0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793 0 0 -800z m1648 -3
l2 -797 -802 2 -803 3 -3 785 c-1 432 0 791 3 798 3 10 169 12 802 10 l798 -3
3 -798z m1640 1 l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3 -797z
m1642 2 l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793
0 0 -800z m1645 0 l0 -795 -797 -3 -798 -2 0 800 0 800 798 -2 797 -3 0 -795z
m1643 -2 l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3 -797z m1642 2 l0
-800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793 0 0 -800z
m-32870 -1645 l0 -790 -795 0 -795 0 0 788 c0 433 0 789 0 792 0 3 358 4 795
3 l795 -3 0 -790z m1650 0 l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0
-795z m1640 0 l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1640 0
l0 -795 -795 2 -795 3 0 788 c0 433 0 789 0 792 0 3 358 5 795 5 l795 0 0
-795z m1650 0 l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1640 0
l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1641 791 c2 -2 3
-360 1 -795 l-2 -791 -798 2 -797 3 -3 780 c-1 429 0 786 3 793 3 9 172 12
798 12 437 0 796 -2 798 -4z m1644 -791 l0 -790 -797 -3 -798 -2 0 795 0 795
798 -2 797 -3 0 -790z m1645 0 l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0
0 -795z m1640 0 l0 -795 -795 0 -795 0 0 795 0 795 795 0 795 0 0 -795z m1650
0 l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1640 0 l0 -795
-800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1640 0 l0 -795 -797 2 -798 3
-3 780 c-1 429 0 786 3 793 3 9 173 12 800 12 l795 0 0 -795z m1650 0 l0 -795
-800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1640 0 l0 -795 -800 0 -800 0
0 795 0 795 800 0 800 0 0 -795z m1650 0 l0 -795 -802 2 -803 3 -3 793 -2 792
805 0 805 0 0 -795z m1640 0 l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0
-795z m1640 0 l0 -795 -800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1645 0
l0 -790 -797 -3 -798 -2 0 795 0 795 798 -2 797 -3 0 -790z m1645 0 l0 -795
-800 0 -800 0 0 795 0 795 800 0 800 0 0 -795z m1640 0 l0 -795 -800 0 -800 0
0 795 0 795 800 0 800 0 0 -795z m-32870 -1637 c0 -434 0 -792 0 -798 0 -7
-272 -10 -795 -10 -523 0 -795 3 -795 10 0 6 0 363 0 795 0 432 0 787 0 790 0
3 358 4 795 3 l795 -3 0 -787z m1645 -8 l0 -795 -797 -3 -798 -2 0 800 0 800
798 -2 797 -3 0 -795z m1645 0 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0
0 -800z m1640 0 l0 -800 -795 0 c-523 0 -795 3 -795 10 0 6 0 363 0 795 0 432
0 787 0 790 0 3 358 5 795 5 l795 0 0 -800z m1645 0 l0 -795 -797 -3 -798 -2
0 800 0 800 798 -2 797 -3 0 -795z m1645 0 l0 -800 -797 2 -798 3 -3 785 c-1
432 0 791 3 798 3 9 173 12 800 12 l795 0 0 -800z m1641 796 c2 -2 3 -362 1
-800 l-2 -796 -798 2 -797 3 -3 785 c-1 432 0 791 3 798 3 9 172 12 798 12
437 0 796 -2 798 -4z m1644 -796 l0 -795 -797 -3 -798 -2 0 800 0 800 798 -2
797 -3 0 -795z m1645 0 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z
m1640 0 l0 -800 -795 0 -795 0 0 800 0 800 795 0 795 0 0 -800z m1650 0 l0
-800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m1640 0 l0 -800 -797 2
-798 3 -3 798 -2 797 800 0 800 0 0 -800z m1640 0 l0 -800 -797 2 -798 3 -3
785 c-1 432 0 791 3 798 3 9 173 12 800 12 l795 0 0 -800z m1650 0 l0 -800
-800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m1640 0 l0 -800 -797 2 -798 3
-3 798 -2 797 800 0 800 0 0 -800z m1650 0 l0 -800 -802 2 -803 3 -3 785 c-1
432 0 791 3 798 3 9 174 12 805 12 l800 0 0 -800z m1640 0 l0 -800 -800 0
-800 0 0 800 0 800 800 0 800 0 0 -800z m1640 0 l0 -800 -800 0 -800 0 0 800
0 800 800 0 800 0 0 -800z m1645 0 l0 -795 -797 -3 -798 -2 0 800 0 800 798
-2 797 -3 0 -795z m1645 0 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0
-800z m1640 0 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m-32870
-1632 c0 -434 0 -792 0 -798 0 -7 -272 -10 -795 -10 -523 0 -795 3 -795 10 0
6 0 363 0 795 0 432 0 787 0 790 0 3 358 4 795 3 l795 -3 0 -787z m1645 -8 l0
-795 -797 -3 -798 -2 0 800 0 800 798 -2 797 -3 0 -795z m1645 0 l0 -800 -800
0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800 7 l793 0 0 -800z m1640 0 l0
-800 -795 0 c-523 0 -795 3 -795 10 0 6 0 363 0 795 0 432 0 787 0 790 0 3
358 5 795 5 l795 0 0 -800z m1645 0 l0 -795 -797 -3 -798 -2 0 800 0 800 798
-2 797 -3 0 -795z m1643 -2 l2 -798 -800 0 -800 0 0 793 c0 437 3 797 7 800 3
4 362 6 797 5 l791 -3 3 -797z m1643 798 c2 -2 3 -362 1 -800 l-2 -796 -798 2
-797 3 -3 785 c-1 432 0 791 3 798 3 9 172 12 798 12 437 0 796 -2 798 -4z
m1644 -796 l0 -795 -797 -3 -798 -2 0 793 c0 437 3 797 7 800 3 4 362 6 797 5
l791 -3 0 -795z m1645 0 l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4
363 7 800 7 l793 0 0 -800z m1640 0 l0 -800 -795 0 -795 0 0 800 0 800 795 0
795 0 0 -800z m1648 -2 l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3
-797z m1642 2 l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7 800
7 l793 0 0 -800z m1640 0 l0 -800 -797 2 -798 3 -3 785 c-1 432 0 791 3 798 3
9 173 12 800 12 l795 0 0 -800z m1648 -2 l2 -798 -800 0 -800 0 0 793 c0 437
3 797 7 800 3 4 362 6 797 5 l791 -3 3 -797z m1640 0 l2 -798 -800 0 -800 0 0
793 c0 437 3 797 7 800 3 4 362 6 797 5 l791 -3 3 -797z m1650 -1 l2 -797
-802 2 -803 3 -3 785 c-1 432 0 791 3 798 3 10 169 12 802 10 l798 -3 3 -798z
m1640 1 l2 -798 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 362 6 797 5 l791
-3 3 -797z m1642 2 l0 -800 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 363 7
800 7 l793 0 0 -800z m1645 0 l0 -795 -797 -3 -798 -2 0 800 0 800 798 -2 797
-3 0 -795z m1643 -2 l2 -798 -800 0 -800 0 0 800 0 800 798 -2 797 -3 3 -797z
m1640 0 l2 -798 -800 0 -800 0 0 793 c0 437 3 797 7 800 3 4 362 6 797 5 l791
-3 3 -797z m-16430 -1649 l-3 -794 -797 -3 -798 -2 0 800 0 800 793 2 c435 2
795 0 800 -3 4 -3 6 -363 5 -800z m13150 0 l-3 -794 -797 -3 -798 -2 0 800 0
800 793 2 c435 2 795 0 800 -3 4 -3 6 -363 5 -800z m-29585 4 l-3 -798 -795 0
-795 0 -3 798 -2 797 800 0 800 0 -2 -797z m1645 0 l-3 -798 -797 -3 -798 -2
0 800 0 800 800 0 800 0 -2 -797z m1642 -3 l0 -800 -797 2 -798 3 -3 798 -2
797 800 0 800 0 0 -800z m1640 0 l0 -800 -795 2 -795 3 -3 798 -2 797 798 0
797 0 0 -800z m1648 3 l-3 -798 -795 0 -795 0 -3 798 -2 797 800 0 800 0 -2
-797z m1640 0 l-3 -798 -795 0 -795 0 -3 798 -2 797 800 0 800 0 -2 -797z
m1647 5 c0 -517 -3 -796 -10 -800 -12 -9 -1556 -11 -1579 -2 -14 6 -16 85 -16
800 l0 794 803 0 802 0 0 -792z m1643 -5 l-3 -798 -795 0 -795 0 -3 798 -2
797 800 0 800 0 -2 -797z m1640 0 l-3 -798 -795 0 -795 0 -3 798 -2 797 800 0
800 0 -2 -797z m1640 0 l-3 -798 -792 -3 -793 -2 0 800 0 800 795 0 795 0 -2
-797z m3290 0 l-3 -798 -795 0 -795 0 -3 798 -2 797 800 0 800 0 -2 -797z
m1642 -3 l0 -800 -797 2 -798 3 -3 798 -2 797 800 0 800 0 0 -800z m1648 3
l-3 -798 -795 0 -795 0 -3 798 -2 797 800 0 800 0 -2 -797z m1640 0 l-3 -798
-795 0 -795 0 -3 798 -2 797 800 0 800 0 -2 -797z m1650 0 l-3 -798 -800 0
-800 0 -3 798 -2 797 805 0 805 0 -2 -797z m1640 0 l-3 -798 -795 0 -795 0 -3
798 -2 797 800 0 800 0 -2 -797z m1642 -3 l0 -800 -797 2 -798 3 -3 798 -2
797 800 0 800 0 0 -800z m3288 3 l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0
800 0 -2 -797z m1640 0 l-3 -798 -795 0 -795 0 -3 798 -2 797 800 0 800 0 -2
-797z m-32868 -853 c0 -5 0 -364 0 -797 l0 -788 -795 0 -795 0 0 788 c0 433 0
792 0 797 0 7 272 10 795 10 523 0 795 -3 795 -10z m1645 -790 l0 -795 -797
-3 -798 -2 0 800 0 800 798 -2 797 -3 0 -795z m1645 0 l0 -800 -800 0 -800 0
0 800 0 800 800 0 800 0 0 -800z m1640 0 l0 -800 -795 2 -795 3 0 788 c0 433
0 792 0 797 0 7 272 10 795 10 l795 0 0 -800z m1645 0 l0 -795 -797 -3 -798
-2 0 800 0 800 798 -2 797 -3 0 -795z m1643 3 l-3 -798 -795 0 -795 0 -3 785
c-1 432 0 791 3 798 3 9 173 12 800 12 l795 0 -2 -797z m1642 7 c0 -434 0
-793 0 -797 0 -5 -359 -8 -797 -8 l-798 0 -3 785 c-1 432 0 791 3 798 3 9 173
12 800 12 l795 0 0 -790z m1645 -10 l0 -795 -797 -3 -798 -2 0 800 0 800 798
-2 797 -3 0 -795z m1645 0 l0 -800 -797 2 -798 3 -3 798 -2 797 800 0 800 0 0
-800z m1640 0 l0 -800 -795 0 -795 0 0 800 0 800 795 0 795 0 0 -800z m1648 3
l-3 -798 -797 -3 -798 -2 0 800 0 800 800 0 800 0 -2 -797z m1642 -3 l0 -800
-797 2 -798 3 -3 798 -2 797 800 0 800 0 0 -800z m1640 0 l0 -800 -797 2 -798
3 -3 785 c-1 432 0 791 3 798 3 9 173 12 800 12 l795 0 0 -800z m1648 3 l-3
-798 -795 0 -795 0 -3 798 -2 797 800 0 800 0 -2 -797z m1642 -3 l0 -800 -797
2 -798 3 -3 798 -2 797 800 0 800 0 0 -800z m1648 3 l-3 -798 -800 0 -800 0
-3 785 c-1 432 0 791 3 798 3 9 174 12 805 12 l800 0 -2 -797z m1642 -3 l0
-800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m1640 0 l0 -800 -797 2
-798 3 -3 798 -2 797 800 0 800 0 0 -800z m1645 0 l0 -795 -797 -3 -798 -2 0
800 0 800 798 -2 797 -3 0 -795z m1645 0 l0 -800 -800 0 -800 0 0 800 0 800
800 0 800 0 0 -800z m1640 0 l0 -800 -797 2 -798 3 -3 798 -2 797 800 0 800 0
0 -800z m-32870 -850 c0 -5 0 -363 0 -795 0 -432 0 -789 0 -795 0 -7 -272 -10
-795 -10 -523 0 -795 3 -795 10 0 6 0 363 0 795 0 432 0 790 0 795 0 7 272 10
795 10 523 0 795 -3 795 -10z m1645 -795 l0 -800 -795 0 -795 0 -3 803 -2 802
797 -2 798 -3 0 -800z m1645 0 l0 -805 -797 2 -798 3 -3 803 -2 802 800 0 800
0 0 -805z m1640 0 l0 -805 -795 0 c-523 0 -795 3 -795 10 0 6 0 363 0 795 0
432 0 790 0 795 0 7 272 10 795 10 l795 0 0 -805z m1645 0 l0 -800 -795 0
-795 0 -3 803 -2 802 797 -2 798 -3 0 -800z m1640 0 l0 -800 -795 0 -795 0 -3
790 c-1 435 0 796 3 803 3 10 168 12 797 10 l793 -3 0 -800z m1643 3 l-3 -803
-784 -3 c-571 -1 -787 1 -797 9 -12 10 -14 147 -14 799 0 432 3 790 7 793 3 4
363 7 800 7 l793 0 -2 -802z m1650 0 l2 -798 -22 -5 c-13 -3 -372 -4 -798 -3
l-775 3 -3 803 -2 802 797 -2 798 -3 3 -797z m1640 0 l-3 -803 -795 0 -795 0
-3 790 c-1 435 0 796 3 803 3 9 173 12 800 12 l795 0 -2 -802z m1640 0 l-3
-803 -792 -3 -793 -2 0 805 0 805 795 0 795 0 -2 -802z m1650 0 l-3 -803 -797
-3 -798 -2 0 805 0 805 800 0 800 0 -2 -802z m16432 -818 l0 -1620 -6550 0
c-6543 0 -6550 0 -6550 20 0 15 -7 20 -25 20 -18 0 -25 -5 -25 -20 0 -20 -7
-20 -800 -20 -793 0 -800 0 -800 20 0 13 -7 20 -20 20 -13 0 -20 -7 -20 -20 0
-20 -7 -20 -800 -20 l-800 0 0 800 c0 704 2 800 15 800 8 0 15 7 15 15 0 9 -7
18 -15 21 -13 5 -15 103 -15 798 0 436 3 796 7 799 3 4 3691 7 8195 7 l8188 0
0 -1620z m-32870 -820 l0 -795 -795 0 -795 0 0 793 c0 435 0 794 0 797 0 3
358 4 795 3 l795 -3 0 -795z m1648 -2 l2 -798 -800 0 -800 0 0 800 0 800 798
-2 797 -3 3 -797z m1642 2 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0
-800z m1640 0 l0 -800 -795 2 -795 3 0 793 c0 435 0 794 0 797 0 3 358 5 795
5 l795 0 0 -800z m1650 0 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0
-800z m1640 0 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z m1641
796 c2 -2 3 -362 1 -800 l-2 -796 -798 2 -797 3 -3 785 c-1 432 0 791 3 798 3
9 172 12 798 12 437 0 796 -2 798 -4z m1647 -798 l2 -798 -800 0 -800 0 0 800
0 800 798 -2 797 -3 3 -797z m1642 2 l0 -800 -800 0 -800 0 0 800 0 800 800 0
800 0 0 -800z m1640 0 l0 -800 -795 0 -795 0 0 800 0 800 795 0 795 0 0 -800z
m1650 0 l0 -800 -800 0 -800 0 0 800 0 800 800 0 800 0 0 -800z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -1,4 +1,7 @@
min_slic3r_version = 2.5.0-alpha0
1.5.0-alpha0 Added parameters for Arachne perimeter generator. Changed default seam position. Updated output filename format.
min_slic3r_version = 2.4.0-rc
1.4.6 Added SLA materials. Updated filament profiles.
1.4.5 Added MMU2/S profiles for 0.25mm nozzle. Updated FW version. Enabled g-code thumbnails for MK3 family printers. Updated end g-code.
1.4.4 Added multiple Fiberlogy filament profiles. Updated Extrudr filament profiles.
1.4.3 Added new filament profiles and SLA materials.

View File

@ -5,7 +5,7 @@
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 PrusaSlicer configuration to be downgraded.
config_version = 1.4.5
config_version = 1.5.0-alpha0
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@ -184,7 +184,7 @@ notes =
overhangs = 1
only_retract_when_crossing_perimeters = 0
ooze_prevention = 0
output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
output_filename_format = {input_filename_base}_{layer_height}mm_{initial_filament_type}_{printer_model}_{print_time}.gcode
perimeters = 2
perimeter_extruder = 1
perimeter_extrusion_width = 0.45
@ -193,7 +193,7 @@ print_settings_id =
raft_layers = 0
raft_first_layer_density = 90%
resolution = 0
seam_position = nearest
seam_position = aligned
single_extruder_multi_material_priming = 1
skirts = 1
skirt_distance = 2
@ -243,6 +243,14 @@ bottom_solid_min_thickness = 0.5
gcode_label_objects = 1
infill_anchor = 2.5
infill_anchor_max = 12
wall_add_middle_threshold = 75%
wall_split_middle_threshold = 50%
wall_transition_angle = 10
wall_transition_filter_deviation = 25%
wall_transition_length = 0.4
wall_distribution_count = 1
min_bead_width = 85%
min_feature_size = 0.1
[print:*MK3*]
fill_pattern = grid
@ -284,11 +292,19 @@ support_material_interface_spacing = 0.15
support_material_spacing = 1
support_material_xy_spacing = 150%
support_material_contact_distance = 0.1
output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{initial_filament_type}_{printer_model}_{print_time}.gcode
thick_bridges = 0
bridge_flow_ratio = 1
bridge_speed = 20
wipe_tower_bridging = 6
wall_add_middle_threshold = 85%
wall_split_middle_threshold = 70%
wall_transition_angle = 10
wall_transition_filter_deviation = 25%
wall_transition_length = 0.25
wall_distribution_count = 1
min_bead_width = 85%
min_feature_size = 0.0625
[print:*0.25nozzleMK3*]
inherits = *0.25nozzle*
@ -330,13 +346,21 @@ support_material_extrusion_width = 0.55
support_material_contact_distance = 0.15
support_material_xy_spacing = 80%
support_material_interface_spacing = 0.3
output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{initial_filament_type}_{printer_model}_{print_time}.gcode
infill_anchor_max = 15
top_solid_min_thickness = 0.9
bottom_solid_min_thickness = 0.6
thick_bridges = 1
bridge_flow_ratio = 0.95
bridge_speed = 25
wall_add_middle_threshold = 85%
wall_split_middle_threshold = 70%
wall_transition_angle = 10
wall_transition_filter_deviation = 25%
wall_transition_length = 0.6
wall_distribution_count = 1
min_bead_width = 85%
min_feature_size = 0.15
[print:*0.6nozzleMK3*]
inherits = *0.6nozzle*
@ -375,7 +399,7 @@ support_material_interface_speed = 100%
support_material_spacing = 2
support_material_xy_spacing = 80%
support_material_threshold = 50
output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{initial_filament_type}_{printer_model}_{print_time}.gcode
fill_pattern = gyroid
fill_density = 15%
infill_anchor_max = 20
@ -398,6 +422,14 @@ bottom_solid_min_thickness = 0.8
single_extruder_multi_material_priming = 0
thick_bridges = 1
overhangs = 0
wall_add_middle_threshold = 85%
wall_split_middle_threshold = 70%
wall_transition_angle = 10
wall_transition_filter_deviation = 25%
wall_transition_length = 0.8
wall_distribution_count = 1
min_bead_width = 85%
min_feature_size = 0.2
[print:*soluble_support*]
overhangs = 1
@ -1719,7 +1751,7 @@ filament_wipe = 0
inherits = *PLA*
filament_vendor = ColorFabb
compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
extrusion_multiplier = 1.2
extrusion_multiplier = 1.12
filament_cost = 80.65
filament_density = 3.9
filament_spool_weight = 236
@ -1730,7 +1762,7 @@ filament_max_volumetric_speed = 9
inherits = *PLA*
filament_vendor = ColorFabb
compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
extrusion_multiplier = 1.2
extrusion_multiplier = 1.15
filament_cost = 80.65
filament_density = 3.13
filament_spool_weight = 236
@ -1741,7 +1773,7 @@ filament_max_volumetric_speed = 8
inherits = *PLA*
filament_vendor = ColorFabb
compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
extrusion_multiplier = 1.2
extrusion_multiplier = 1.15
filament_cost = 80.65
filament_density = 3.9
filament_spool_weight = 236
@ -7319,6 +7351,70 @@ material_vendor = Ameralabs
material_colour = #C0C0C0
material_print_speed = slow
[sla_material:BASF Ultracur3D RG 35 @0.025 SL1S]
inherits = *0.025_sl1s*
exposure_time = 4
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #FFEEE6
[sla_material:BASF Ultracur3D ST 45 @0.025 SL1S]
inherits = *0.025_sl1s*
exposure_time = 2.5
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #595959
[sla_material:BASF Ultracur3D ST 45 M @0.025 SL1S]
inherits = *0.025_sl1s*
exposure_time = 2.5
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #595959
[sla_material:BASF Ultracur3D ST 80 @0.025 SL1S]
inherits = *0.025_sl1s*
exposure_time = 4.5
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #FFEEE6
[sla_material:BASF Ultracur3D ST 80 White @0.025 SL1S]
inherits = *0.025_sl1s*
exposure_time = 4.5
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #FFFFFF
[sla_material:BASF Ultracur3D ST 80 Black @0.025 SL1S]
inherits = *0.025_sl1s*
exposure_time = 4.5
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #595959
[sla_material:BASF Ultracur3D EL 150 Black @0.025 SL1S]
inherits = *0.025_sl1s*
exposure_time = 2
initial_exposure_time = 25
material_type = Flexible
material_vendor = BASF
material_colour = #595959
[sla_material:BASF Ultracur3D FL 300 Black @0.025 SL1S]
inherits = *0.025_sl1s*
exposure_time = 3
initial_exposure_time = 25
material_type = Flexible
material_vendor = BASF
material_colour = #595959
[sla_material:PrimaCreator Tough Light Grey @0.025 SL1S]
inherits = *0.025_sl1s*
exposure_time = 1.8
@ -7418,6 +7514,38 @@ material_type = Tough
material_vendor = Peopoly
material_colour = #F8F8F8
[sla_material:Liqcreate Clear Impact @0.025 SL1S]
inherits = *0.025_sl1s*
exposure_time = 7
initial_exposure_time = 40
material_type = Tough
material_vendor = Liqcreate
material_colour = #F8F8F8
[sla_material:Liqcreate Strong X @0.025 SL1S]
inherits = *0.025_sl1s*
exposure_time = 7
initial_exposure_time = 40
material_type = Tough
material_vendor = Liqcreate
material_colour = #C0C0C0
[sla_material:Resinworks 3D Green @0.025 SL1S]
inherits = *0.025_sl1s*
exposure_time = 5
initial_exposure_time = 25
material_type = Tough
material_vendor = Resinworks 3D
material_colour = #00B900
[sla_material:3DJake Blue @0.025 SL1S]
inherits = *0.025_sl1s*
exposure_time = 1.8
initial_exposure_time = 25
material_type = Tough
material_vendor = 3DJake
material_colour = #007EFD
## 0.05 SL1S
## Prusa Polymers 0.05
@ -7641,6 +7769,70 @@ material_vendor = Ameralabs
material_colour = #C0C0C0
material_print_speed = slow
[sla_material:BASF Ultracur3D RG 35 @0.05 SL1S]
inherits = *0.05_sl1s*
exposure_time = 4.5
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #FFEEE6
[sla_material:BASF Ultracur3D ST 45 @0.05 SL1S]
inherits = *0.05_sl1s*
exposure_time = 3
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #595959
[sla_material:BASF Ultracur3D ST 45 M @0.05 SL1S]
inherits = *0.05_sl1s*
exposure_time = 3
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #595959
[sla_material:BASF Ultracur3D ST 80 @0.05 SL1S]
inherits = *0.05_sl1s*
exposure_time = 5.5
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #FFEEE6
[sla_material:BASF Ultracur3D ST 80 White @0.05 SL1S]
inherits = *0.05_sl1s*
exposure_time = 5.9
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #FFFFFF
[sla_material:BASF Ultracur3D ST 80 Black @0.05 SL1S]
inherits = *0.05_sl1s*
exposure_time = 5.9
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #595959
[sla_material:BASF Ultracur3D EL 150 Black @0.05 SL1S]
inherits = *0.05_sl1s*
exposure_time = 3.8
initial_exposure_time = 25
material_type = Flexible
material_vendor = BASF
material_colour = #595959
[sla_material:BASF Ultracur3D FL 300 Black @0.05 SL1S]
inherits = *0.05_sl1s*
exposure_time = 4.8
initial_exposure_time = 25
material_type = Flexible
material_vendor = BASF
material_colour = #595959
[sla_material:PrimaCreator Tough Light Grey @0.05 SL1S]
inherits = *0.05_sl1s*
exposure_time = 2.4
@ -8044,6 +8236,38 @@ material_type = Tough
material_vendor = Photocentric
material_colour = #808080
[sla_material:Liqcreate Clear Impact @0.05 SL1S]
inherits = *0.05_sl1s*
exposure_time = 10
initial_exposure_time = 40
material_type = Tough
material_vendor = Liqcreate
material_colour = #F8F8F8
[sla_material:Liqcreate Strong X @0.05 SL1S]
inherits = *0.05_sl1s*
exposure_time = 10
initial_exposure_time = 40
material_type = Tough
material_vendor = Liqcreate
material_colour = #C0C0C0
[sla_material:Resinworks 3D Green @0.05 SL1S]
inherits = *0.05_sl1s*
exposure_time = 7
initial_exposure_time = 25
material_type = Tough
material_vendor = Resinworks 3D
material_colour = #00B900
[sla_material:3DJake Blue @0.05 SL1S]
inherits = *0.05_sl1s*
exposure_time = 2
initial_exposure_time = 25
material_type = Tough
material_vendor = 3DJake
material_colour = #007EFD
## 0.1 SL1S
## Prusa Polymers 0.1
@ -8267,6 +8491,70 @@ material_vendor = Ameralabs
material_colour = #C0C0C0
material_print_speed = slow
[sla_material:BASF Ultracur3D RG 35 @0.1 SL1S]
inherits = *0.1_sl1s*
exposure_time = 10
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #FFEEE6
[sla_material:BASF Ultracur3D ST 45 @0.1 SL1S]
inherits = *0.1_sl1s*
exposure_time = 7.5
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #595959
[sla_material:BASF Ultracur3D ST 45 M @0.1 SL1S]
inherits = *0.1_sl1s*
exposure_time = 4.5
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #595959
[sla_material:BASF Ultracur3D ST 80 @0.1 SL1S]
inherits = *0.1_sl1s*
exposure_time = 9
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #FFEEE6
[sla_material:BASF Ultracur3D ST 80 White @0.1 SL1S]
inherits = *0.1_sl1s*
exposure_time = 9
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #FFFFFF
[sla_material:BASF Ultracur3D ST 80 Black @0.1 SL1S]
inherits = *0.1_sl1s*
exposure_time = 9
initial_exposure_time = 25
material_type = Tough
material_vendor = BASF
material_colour = #595959
[sla_material:BASF Ultracur3D EL 150 Black @0.1 SL1S]
inherits = *0.1_sl1s*
exposure_time = 5
initial_exposure_time = 25
material_type = Flexible
material_vendor = BASF
material_colour = #595959
[sla_material:BASF Ultracur3D FL 300 Black @0.1 SL1S]
inherits = *0.1_sl1s*
exposure_time = 6
initial_exposure_time = 25
material_type = Flexible
material_vendor = BASF
material_colour = #595959
[sla_material:PrimaCreator Tough Light Grey @0.1 SL1S]
inherits = *0.1_sl1s*
exposure_time = 3
@ -8348,6 +8636,38 @@ material_type = Tough
material_vendor = Peopoly
material_colour = #F8F8F8
[sla_material:Liqcreate Clear Impact @0.1 SL1S]
inherits = *0.1_sl1s*
exposure_time = 20
initial_exposure_time = 40
material_type = Tough
material_vendor = Liqcreate
material_colour = #F8F8F8
[sla_material:Liqcreate Strong X @0.1 SL1S]
inherits = *0.1_sl1s*
exposure_time = 20
initial_exposure_time = 40
material_type = Tough
material_vendor = Liqcreate
material_colour = #C0C0C0
[sla_material:Resinworks 3D Green @0.1 SL1S]
inherits = *0.1_sl1s*
exposure_time = 13
initial_exposure_time = 25
material_type = Tough
material_vendor = Resinworks 3D
material_colour = #00B900
[sla_material:3DJake Blue @0.1 SL1S]
inherits = *0.1_sl1s*
exposure_time = 3
initial_exposure_time = 25
material_type = Tough
material_vendor = 3DJake
material_colour = #007EFD
[printer:*common*]
printer_technology = FFF
bed_shape = 0x0,250x0,250x210,0x210

View File

@ -1,4 +1,5 @@
min_slic3r_version = 2.4.1-rc1
1.0.1 Fix missing AzteQ Industrial ABS material for 0.6, 0.8 nozzle, enabled elefant foot compensation
1.0.0 Added AzteQ Industrial profiles for 0.8 nozzle, updated spool weight and filament cost, some minor setting improvements
min_slic3r_version = 2.3.2-alpha0
0.0.9 Added AzteQ Industrial materials PC/ABS (Fillamentum), PC-Max (Polymaker), Nylon FX256 (Fillamentum), Added DeltiQ 2 materials Nylon PA12 (Fiberlogy), Nylon CF15 Carbon (Fillamentum), PEBA 90A - FlexFill (Fillamentum), MoldLay (Wax-Alike), disabled retract only when crossing perimeters, some minor setting improvements

View File

@ -6,7 +6,7 @@
name = TriLAB
# Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 1.0.0
config_version = 1.0.1
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/TriLAB/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@ -118,7 +118,7 @@ complete_objects = 0
default_acceleration = 2000
dont_support_bridges = 0
draft_shield = 0
elefant_foot_compensation = 0.0
elefant_foot_compensation = 0.1
ensure_vertical_shell_thickness = 0
external_perimeter_extrusion_width = 0.45
external_perimeter_speed = 30
@ -338,6 +338,7 @@ support_material_extrusion_width = 0.55
support_material_interface_spacing = 0.6
support_material_xy_spacing = 0.9
top_infill_extrusion_width = 0.6
elefant_foot_compensation = 0.2
[print:DeltiQ 0.30mm Strong @0.6 nozzle]
inherits = DeltiQ 0.30mm Normal @0.6 nozzle
@ -356,7 +357,7 @@ bottom_solid_min_thickness = 1.2
bridge_flow_ratio = 0.90
bridge_speed = 20
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and nozzle_diameter[0]==0.8
elefant_foot_compensation = 0.0
elefant_foot_compensation = 0.2
external_perimeter_extrusion_width = 0.80
external_perimeter_speed = 30
extrusion_width = 0.80
@ -415,7 +416,7 @@ complete_objects = 0
default_acceleration = 2000
dont_support_bridges = 0
draft_shield = 0
elefant_foot_compensation = 0
elefant_foot_compensation = 0.1
ensure_vertical_shell_thickness = 0
external_perimeter_extrusion_width = 0.45
external_perimeter_speed = 30
@ -558,6 +559,7 @@ support_material_extrusion_width = 0.55
support_material_interface_spacing = 0.6
support_material_xy_spacing = 0.9
top_infill_extrusion_width = 0.6
elefant_foot_compensation = 0.2
[print:AzteQ Industrial 0.30mm Strong @0.6 nozzle]
inherits = AzteQ Industrial 0.30mm Normal @0.6 nozzle
@ -579,7 +581,7 @@ bottom_solid_min_thickness = 0.7
bridge_flow_ratio = 0.95
bridge_speed = 30
dont_support_bridges = 0
elefant_foot_compensation = 0
elefant_foot_compensation = 0.2
ensure_vertical_shell_thickness = 0
external_perimeter_extrusion_width = 0.8
external_perimeter_speed = 30
@ -1413,9 +1415,11 @@ filament_spool_weight = 229
[filament:AzteQ Industrial - ABS - ExtraFill (Fillamentum) @0.6 nozzle]
inherits = AzteQ Industrial - ABS - ExtraFill (Fillamentum)
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_MODEL_AQI.*/ and nozzle_diameter[0]==0.6
[filament:AzteQ Industrial - ABS - ExtraFill (Fillamentum) @0.8 nozzle]
inherits = AzteQ Industrial - ABS - ExtraFill (Fillamentum)
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_MODEL_AQI.*/ and nozzle_diameter[0]==0.8
extrusion_multiplier = 0.95
[filament:AzteQ Industrial - PC/ABS - (Fillamentum)]

View File

@ -1,2 +1,4 @@
min_slic3r_version = 2.4.2
1.0.1 Added 350mm Voron v1 variant. Updated max print heights. Removed redundant v1 volcano nozzle variants.
min_slic3r_version = 2.4.0-beta0
1.0.0 Initial version

View File

@ -7,7 +7,7 @@
name = Voron
# Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 1.0.0
config_version = 1.0.1
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Voron/
@ -72,21 +72,30 @@ default_materials = Basic PLA @VORON; Basic PLA VOLCANO @VORON; Basic PET @VORON
[printer_model:Voron_v1_250_afterburner]
name = Voron v1 250mm3
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8; volcano 0.6; volcano 0.8; volcano 1.0; volcano 1.2
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8
technology = FFF
family = Voron v1 Afterburner
bed_model = printbed-v1-250.stl
bed_texture = bedtexture-v1-250.png
default_materials = Basic PLA @VORON; Basic PLA VOLCANO @VORON; Basic PET @VORON; Basic PET VOLCANO @VORON; Basic ABS @VORON; Basic ABS VOLCANO @VORON
default_materials = Basic PLA @VORON; Basic PET @VORON; Basic ABS @VORON
[printer_model:Voron_v1_300_afterburner]
name = Voron v1 300mm3
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8; volcano 0.6; volcano 0.8; volcano 1.0; volcano 1.2
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8
technology = FFF
family = Voron v1 Afterburner
bed_model = printbed-v1-300.stl
bed_texture = bedtexture-v1-300.png
default_materials = Basic PLA @VORON; Basic PLA VOLCANO @VORON; Basic PET @VORON; Basic PET VOLCANO @VORON; Basic ABS @VORON; Basic ABS VOLCANO @VORON
default_materials = Basic PLA @VORON; Basic PET @VORON; Basic ABS @VORON
[printer_model:Voron_v1_350_afterburner]
name = Voron v1 350mm3
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8
technology = FFF
family = Voron v1 Afterburner
bed_model = printbed-v1-350.stl
bed_texture = bedtexture-v2-350.png
default_materials = Basic PLA @VORON; Basic PET @VORON; Basic ABS @VORON
[printer_model:Voron_v0_120]
name = Voron Zero 120mm3
@ -239,21 +248,21 @@ retract_speed = 50
[printer:*Voron_v2_250*]
inherits = *common*
bed_shape = 0x0,250x0,250x250,0x250
max_print_height = 250
max_print_height = 230
printer_model = Voron_v2_250
printer_notes = Unoffical profile.\nPRINTER_HAS_BOWDEN\nE3DV6
[printer:*Voron_v2_300*]
inherits = *common*
bed_shape = 0x0,300x0,300x300,0x300
max_print_height = 300
max_print_height = 280
printer_model = Voron_v2_300
printer_notes = Unoffical profile.\nPRINTER_HAS_BOWDEN\nE3DV6
[printer:*Voron_v2_350*]
inherits = *common*
bed_shape = 0x0,350x0,350x350,0x350
max_print_height = 350
max_print_height = 330
printer_model = Voron_v2_350
printer_notes = Unoffical profile.\nPRINTER_HAS_BOWDEN\nE3DV6
@ -282,10 +291,17 @@ printer_notes = Unoffical profile.\nE3DV6
[printer:*Voron_v1_300_afterburner*]
inherits = *common*; *afterburner*
bed_shape = 0x0,300x0,300x300,0x300
max_print_height = 230
max_print_height = 280
printer_model = Voron_v1_300_afterburner
printer_notes = Unoffical profile.\nE3DV6
[printer:*Voron_v1_350_afterburner*]
inherits = *common*; *afterburner*
bed_shape = 0x0,350x0,350x350,0x350
max_print_height = 330
printer_model = Voron_v1_350_afterburner
printer_notes = Unoffical profile.\nE3DV6
[printer:*Voron_v0_120*]
inherits = *common*
bed_shape = 0x0,120x0,120x120,0x120
@ -455,6 +471,24 @@ inherits = *Voron_v1_300_afterburner*; *0.6nozzle*
[printer:Voron_v1_300_afterburner 0.8 nozzle]
inherits = *Voron_v1_300_afterburner*; *0.8nozzle*
[printer:Voron_v1_350_afterburner 0.25 nozzle]
inherits = *Voron_v1_350_afterburner*; *0.25nozzle*
[printer:Voron_v1_350_afterburner 0.3 nozzle]
inherits = *Voron_v1_350_afterburner*; *0.3nozzle*
[printer:Voron_v1_350_afterburner 0.4 nozzle]
inherits = *Voron_v1_350_afterburner*; *0.4nozzle*
[printer:Voron_v1_350_afterburner 0.5 nozzle]
inherits = *Voron_v1_350_afterburner*; *0.5nozzle*
[printer:Voron_v1_350_afterburner 0.6 nozzle]
inherits = *Voron_v1_350_afterburner*; *0.6nozzle*
[printer:Voron_v1_350_afterburner 0.8 nozzle]
inherits = *Voron_v1_350_afterburner*; *0.8nozzle*
[printer:Voron_v2_250_afterburner 0.25 nozzle]
inherits = *Voron_v2_250_afterburner*; *0.25nozzle*
@ -652,7 +686,7 @@ fill_angle = 45
fill_density = 15%
fill_pattern = gyroid
first_layer_acceleration = 1000
first_layer_height = 75%
first_layer_height = 0.2
first_layer_speed = 30
gap_fill_speed = 40
gcode_comments = 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

@ -4,3 +4,4 @@
add_subdirectory(its_neighbor_index)
# add_subdirectory(opencsg)
#add_subdirectory(aabb-evaluation)
add_subdirectory(wx_gl_test)

View File

@ -0,0 +1,24 @@
cmake_minimum_required(VERSION 3.10)
project(wxGL_Test)
add_executable(wxgltest WIN32 main.cpp )
set (wxWidgets_CONFIG_OPTIONS "--toolkit=gtk${SLIC3R_GTK}")
find_package(wxWidgets 3.1 REQUIRED COMPONENTS core base gl html)
find_package(OpenGL REQUIRED)
find_package(NanoSVG REQUIRED)
include(${wxWidgets_USE_FILE})
target_include_directories(wxgltest PRIVATE ${wxWidgets_INCLUDE_DIRS})
target_compile_definitions(wxgltest PRIVATE ${wxWidgets_DEFINITIONS})
target_compile_definitions(wxgltest PUBLIC -DwxDEBUG_LEVEL=0)
target_link_libraries(wxgltest ${wxWidgets_LIBRARIES}
OpenGL::GL
OpenGL::EGL
NanoSVG::nanosvgrast
# png16
# X11
X11 wayland-client wayland-egl
)

View File

@ -0,0 +1,221 @@
#include <iostream>
#include <utility>
#include <memory>
#include <vector>
// For compilers that support precompilation, includes "wx/wx.h".
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
#include <wx/tglbtn.h>
#include <wx/combobox.h>
#include <wx/msgdlg.h>
#include <wx/glcanvas.h>
#include <wx/notebook.h>
class Renderer {
protected:
wxGLCanvas *m_canvas;
std::unique_ptr<wxGLContext> m_context;
public:
Renderer(wxGLCanvas *c): m_canvas{c} {
m_context = std::make_unique<wxGLContext>(m_canvas);
}
wxGLContext * context() { return m_context.get(); }
const wxGLContext * context() const { return m_context.get(); }
void set_active()
{
m_canvas->SetCurrent(*m_context);
// Set the current clear color to sky blue and the current drawing color to
// white.
glClearColor(0.1, 0.39, 0.88, 1.0);
glColor3f(1.0, 1.0, 1.0);
// Tell the rendering engine not to draw backfaces. Without this code,
// all four faces of the tetrahedron would be drawn and it is possible
// that faces farther away could be drawn after nearer to the viewer.
// Since there is only one closed polyhedron in the whole scene,
// eliminating the drawing of backfaces gives us the realism we need.
// THIS DOES NOT WORK IN GENERAL.
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
// Set the camera lens so that we have a perspective viewing volume whose
// horizontal bounds at the near clipping plane are -2..2 and vertical
// bounds are -1.5..1.5. The near clipping plane is 1 unit from the camera
// and the far clipping plane is 40 units away.
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-2, 2, -1.5, 1.5, 1, 40);
// Set up transforms so that the tetrahedron which is defined right at
// the origin will be rotated and moved into the view volume. First we
// rotate 70 degrees around y so we can see a lot of the left side.
// Then we rotate 50 degrees around x to "drop" the top of the pyramid
// down a bit. Then we move the object back 3 units "into the screen".
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0, 0, -3);
glRotatef(50, 1, 0, 0);
glRotatef(70, 0, 1, 0);
}
void draw_scene(long w, long h)
{
glViewport(0, 0, GLsizei(w), GLsizei(h));
glClear(GL_COLOR_BUFFER_BIT);
// Draw a white grid "floor" for the tetrahedron to sit on.
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINES);
for (GLfloat i = -2.5; i <= 2.5; i += 0.25) {
glVertex3f(i, 0, 2.5); glVertex3f(i, 0, -2.5);
glVertex3f(2.5, 0, i); glVertex3f(-2.5, 0, i);
}
glEnd();
// Draw the tetrahedron. It is a four sided figure, so when defining it
// with a triangle strip we have to repeat the last two vertices.
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1, 1, 1); glVertex3f(0, 2, 0);
glColor3f(1, 0, 0); glVertex3f(-1, 0, 1);
glColor3f(0, 1, 0); glVertex3f(1, 0, 1);
glColor3f(0, 0, 1); glVertex3f(0, 0, -1.4);
glColor3f(1, 1, 1); glVertex3f(0, 2, 0);
glColor3f(1, 0, 0); glVertex3f(-1, 0, 1);
glEnd();
glFlush();
}
void swap_buffers() { m_canvas->SwapBuffers(); }
};
// The top level frame of the application.
class MyFrame: public wxFrame
{
wxGLCanvas *m_canvas;
std::unique_ptr<Renderer> m_renderer;
public:
MyFrame(const wxString & title,
const wxPoint & pos,
const wxSize & size);
wxGLCanvas * canvas() { return m_canvas; }
const wxGLCanvas * canvas() const { return m_canvas; }
};
class App : public wxApp {
MyFrame *m_frame = nullptr;
wxString m_fname;
public:
bool OnInit() override {
m_frame = new MyFrame("Wayland wxNotebook issue", wxDefaultPosition, wxSize(1024, 768));
m_frame->Show( true );
return true;
}
};
wxIMPLEMENT_APP(App);
MyFrame::MyFrame(const wxString &title, const wxPoint &pos, const wxSize &size):
wxFrame(nullptr, wxID_ANY, title, pos, size)
{
wxMenu *menuFile = new wxMenu;
menuFile->Append(wxID_OPEN);
menuFile->Append(wxID_EXIT);
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append( menuFile, "&File" );
SetMenuBar( menuBar );
auto notebookpanel = new wxPanel(this);
auto notebook = new wxNotebook(notebookpanel, wxID_ANY);
auto maintab = new wxPanel(notebook);
m_canvas = new wxGLCanvas(maintab,
wxID_ANY,
nullptr,
wxDefaultPosition,
wxDefaultSize,
wxWANTS_CHARS | wxFULL_REPAINT_ON_RESIZE);
m_renderer = std::make_unique<Renderer>(m_canvas);
wxPanel *control_panel = new wxPanel(maintab);
auto controlsizer = new wxBoxSizer(wxHORIZONTAL);
auto console_sizer = new wxBoxSizer(wxVERTICAL);
std::vector<wxString> combolist = {"One", "Two", "Three"};
auto combobox = new wxComboBox(control_panel, wxID_ANY, combolist[0],
wxDefaultPosition, wxDefaultSize,
int(combolist.size()), combolist.data());
auto sz = new wxBoxSizer(wxHORIZONTAL);
sz->Add(new wxStaticText(control_panel, wxID_ANY, "Choose number"), 0,
wxALL | wxALIGN_CENTER, 5);
sz->Add(combobox, 1, wxALL | wxEXPAND, 5);
console_sizer->Add(sz, 0, wxEXPAND);
auto btn1 = new wxToggleButton(control_panel, wxID_ANY, "Button1");
console_sizer->Add(btn1, 0, wxALL | wxEXPAND, 5);
auto btn2 = new wxToggleButton(control_panel, wxID_ANY, "Button2");
btn2->SetValue(true);
console_sizer->Add(btn2, 0, wxALL | wxEXPAND, 5);
controlsizer->Add(console_sizer, 1, wxEXPAND);
control_panel->SetSizer(controlsizer);
auto maintab_sizer = new wxBoxSizer(wxHORIZONTAL);
maintab_sizer->Add(m_canvas, 1, wxEXPAND);
maintab_sizer->Add(control_panel, 0);
maintab->SetSizer(maintab_sizer);
notebook->AddPage(maintab, "Main");
wxTextCtrl* textCtrl1 = new wxTextCtrl(notebook, wxID_ANY, L"Tab 2 Contents");
notebook->AddPage(textCtrl1, "Dummy");
auto notebooksizer = new wxBoxSizer(wxHORIZONTAL);
notebooksizer->Add(notebook, 1, wxEXPAND);
notebookpanel->SetSizer(notebooksizer);
auto topsizer = new wxBoxSizer(wxHORIZONTAL);
topsizer->Add(notebookpanel, 1, wxEXPAND);
SetSizer(topsizer);
SetMinSize(size);
Bind(wxEVT_MENU, [this](wxCommandEvent &) {
wxFileDialog dlg(this, "Select file", wxEmptyString,
wxEmptyString, "*.*", wxFD_OPEN|wxFD_FILE_MUST_EXIST);
dlg.ShowModal();
}, wxID_OPEN);
Bind(wxEVT_MENU, [this](wxCommandEvent &) {
Close();
}, wxID_EXIT);
Bind(wxEVT_SHOW, [this](wxShowEvent &) {
m_renderer->set_active();
m_canvas->Bind(wxEVT_PAINT, [this](wxPaintEvent &){
wxPaintDC dc(m_canvas);
const wxSize sz = m_canvas->GetClientSize();
m_renderer->draw_scene(sz.x, sz.y);
m_renderer->swap_buffers();
});
});
}

View File

@ -92,7 +92,7 @@ if (SLIC3R_GUI)
string(REGEX MATCH "wxexpat" WX_EXPAT_BUILTIN ${wxWidgets_LIBRARIES})
if (EXPAT_FOUND AND NOT WX_EXPAT_BUILTIN)
list(FILTER wxWidgets_LIBRARIES EXCLUDE REGEX expat)
list(APPEND wxWidgets_LIBRARIES EXPAT::EXPAT)
list(APPEND wxWidgets_LIBRARIES libexpat)
endif ()
# This is an issue in the new wxWidgets cmake build, doesn't deal with librt

View File

@ -837,6 +837,9 @@ extern "C" {
"leak:libnvidia-tls.so\n" // For NVidia driver.
"leak:terminator_CreateDevice\n" // For Intel Vulkan drivers.
"leak:swrast_dri.so\n" // For Mesa 3D software driver.
"leak:amdgpu_dri.so\n" // For AMD driver.
"leak:libdrm_amdgpu.so\n" // For AMD driver.
"leak:libdbus-1.so\n" // For D-Bus library. Unsure if it is a leak or not.
;
}
}

View File

@ -66,16 +66,25 @@ public:
return this->success;
}
void unload_opengl_dll()
bool unload_opengl_dll()
{
if (this->hOpenGL) {
BOOL released = FreeLibrary(this->hOpenGL);
if (released)
printf("System OpenGL library released\n");
if (this->hOpenGL != nullptr) {
if (::FreeLibrary(this->hOpenGL) != FALSE) {
if (::GetModuleHandle(L"opengl32.dll") == nullptr) {
printf("System OpenGL library successfully released\n");
this->hOpenGL = nullptr;
return true;
}
else
printf("System OpenGL library released but not removed\n");
}
else
printf("System OpenGL library NOT released\n");
this->hOpenGL = nullptr;
return false;
}
return true;
}
bool is_version_greater_or_equal_to(unsigned int major, unsigned int minor) const
@ -270,20 +279,26 @@ int wmain(int argc, wchar_t **argv)
// https://wiki.qt.io/Cross_compiling_Mesa_for_Windows
// http://download.qt.io/development_releases/prebuilt/llvmpipe/windows/
if (load_mesa) {
opengl_version_check.unload_opengl_dll();
wchar_t path_to_mesa[MAX_PATH + 1] = { 0 };
wcscpy(path_to_mesa, path_to_exe);
wcscat(path_to_mesa, L"mesa\\opengl32.dll");
printf("Loading MESA OpenGL library: %S\n", path_to_mesa);
HINSTANCE hInstance_OpenGL = LoadLibraryExW(path_to_mesa, nullptr, 0);
if (hInstance_OpenGL == nullptr) {
printf("MESA OpenGL library was not loaded\n");
} else
printf("MESA OpenGL library was loaded sucessfully\n");
bool res = opengl_version_check.unload_opengl_dll();
if (!res) {
MessageBox(nullptr, L"PrusaSlicer was unable to automatically switch to MESA OpenGL library\nPlease, try to run the application using the '--sw-renderer' option.\n",
L"PrusaSlicer Warning", MB_OK);
return -1;
}
else {
wchar_t path_to_mesa[MAX_PATH + 1] = { 0 };
wcscpy(path_to_mesa, path_to_exe);
wcscat(path_to_mesa, L"mesa\\opengl32.dll");
printf("Loading MESA OpenGL library: %S\n", path_to_mesa);
HINSTANCE hInstance_OpenGL = LoadLibraryExW(path_to_mesa, nullptr, 0);
if (hInstance_OpenGL == nullptr)
printf("MESA OpenGL library was not loaded\n");
else
printf("MESA OpenGL library was loaded sucessfully\n");
}
}
#endif /* SLIC3R_GUI */
wchar_t path_to_slic3r[MAX_PATH + 1] = { 0 };
wcscpy(path_to_slic3r, path_to_exe);
wcscat(path_to_slic3r, L"PrusaSlicer.dll");

View File

@ -2290,6 +2290,12 @@ void Clipper::ProcessHorizontal(TEdge *horzEdge)
if (horzEdge->OutIdx >= 0 && !IsOpen) //note: may be done multiple times
{
#ifdef CLIPPERLIB_USE_XYZ
if (dir == dLeftToRight)
SetZ(e->Curr, *horzEdge, *e);
else
SetZ(e->Curr, *e, *horzEdge);
#endif
op1 = AddOutPt(horzEdge, e->Curr);
TEdge* eNextHorz = m_SortedEdges;
while (eNextHorz)
@ -2614,6 +2620,9 @@ void Clipper::ProcessEdgesAtTopOfScanbeam(const cInt topY)
{
e->Curr.x() = TopX( *e, topY );
e->Curr.y() = topY;
#ifdef CLIPPERLIB_USE_XYZ
e->Curr.z() = topY == e->Top.y() ? e->Top.z() : (topY == e->Bot.y() ? e->Bot.z() : 0);
#endif
}
//When StrictlySimple and 'e' is being touched by another edge, then

View File

@ -1,5 +1,5 @@
#include "IndexedMesh.hpp"
#include "Concurrency.hpp"
#include "AABBMesh.hpp"
#include <Execution/ExecutionTBB.hpp>
#include <libslic3r/AABBTreeIndirect.hpp>
#include <libslic3r/TriangleMesh.hpp>
@ -12,9 +12,7 @@
namespace Slic3r {
namespace sla {
class IndexedMesh::AABBImpl {
class AABBMesh::AABBImpl {
private:
AABBTreeIndirect::Tree3f m_tree;
double m_triangle_ray_epsilon;
@ -68,7 +66,7 @@ public:
}
};
template<class M> void IndexedMesh::init(const M &mesh, bool calculate_epsilon)
template<class M> void AABBMesh::init(const M &mesh, bool calculate_epsilon)
{
BoundingBoxf3 bb = bounding_box(mesh);
m_ground_level += bb.min(Z);
@ -77,73 +75,86 @@ template<class M> void IndexedMesh::init(const M &mesh, bool calculate_epsilon)
m_aabb->init(*m_tm, calculate_epsilon);
}
IndexedMesh::IndexedMesh(const indexed_triangle_set& tmesh, bool calculate_epsilon)
: m_aabb(new AABBImpl()), m_tm(&tmesh)
AABBMesh::AABBMesh(const indexed_triangle_set &tmesh, bool calculate_epsilon)
: m_tm(&tmesh)
, m_aabb(new AABBImpl())
, m_vfidx{tmesh}
, m_fnidx{its_face_neighbors(tmesh)}
{
init(tmesh, calculate_epsilon);
}
IndexedMesh::IndexedMesh(const TriangleMesh &mesh, bool calculate_epsilon)
: m_aabb(new AABBImpl()), m_tm(&mesh.its)
AABBMesh::AABBMesh(const TriangleMesh &mesh, bool calculate_epsilon)
: m_tm(&mesh.its)
, m_aabb(new AABBImpl())
, m_vfidx{mesh.its}
, m_fnidx{its_face_neighbors(mesh.its)}
{
init(mesh, calculate_epsilon);
}
IndexedMesh::~IndexedMesh() {}
AABBMesh::~AABBMesh() {}
IndexedMesh::IndexedMesh(const IndexedMesh &other):
m_tm(other.m_tm), m_ground_level(other.m_ground_level),
m_aabb( new AABBImpl(*other.m_aabb) ) {}
AABBMesh::AABBMesh(const AABBMesh &other)
: m_tm(other.m_tm)
, m_ground_level(other.m_ground_level)
, m_aabb(new AABBImpl(*other.m_aabb))
, m_vfidx{other.m_vfidx}
, m_fnidx{other.m_fnidx}
{}
IndexedMesh &IndexedMesh::operator=(const IndexedMesh &other)
AABBMesh &AABBMesh::operator=(const AABBMesh &other)
{
m_tm = other.m_tm;
m_ground_level = other.m_ground_level;
m_aabb.reset(new AABBImpl(*other.m_aabb)); return *this;
m_aabb.reset(new AABBImpl(*other.m_aabb));
m_vfidx = other.m_vfidx;
m_fnidx = other.m_fnidx;
return *this;
}
IndexedMesh &IndexedMesh::operator=(IndexedMesh &&other) = default;
AABBMesh &AABBMesh::operator=(AABBMesh &&other) = default;
IndexedMesh::IndexedMesh(IndexedMesh &&other) = default;
AABBMesh::AABBMesh(AABBMesh &&other) = default;
const std::vector<Vec3f>& IndexedMesh::vertices() const
const std::vector<Vec3f>& AABBMesh::vertices() const
{
return m_tm->vertices;
}
const std::vector<Vec3i>& IndexedMesh::indices() const
const std::vector<Vec3i>& AABBMesh::indices() const
{
return m_tm->indices;
}
const Vec3f& IndexedMesh::vertices(size_t idx) const
const Vec3f& AABBMesh::vertices(size_t idx) const
{
return m_tm->vertices[idx];
}
const Vec3i& IndexedMesh::indices(size_t idx) const
const Vec3i& AABBMesh::indices(size_t idx) const
{
return m_tm->indices[idx];
}
Vec3d IndexedMesh::normal_by_face_id(int face_id) const {
Vec3d AABBMesh::normal_by_face_id(int face_id) const {
return its_unnormalized_normal(*m_tm, face_id).cast<double>().normalized();
}
IndexedMesh::hit_result
IndexedMesh::query_ray_hit(const Vec3d &s, const Vec3d &dir) const
AABBMesh::hit_result
AABBMesh::query_ray_hit(const Vec3d &s, const Vec3d &dir) const
{
assert(is_approx(dir.norm(), 1.));
igl::Hit hit{-1, -1, 0.f, 0.f, 0.f};
@ -171,10 +182,10 @@ IndexedMesh::query_ray_hit(const Vec3d &s, const Vec3d &dir) const
return ret;
}
std::vector<IndexedMesh::hit_result>
IndexedMesh::query_ray_hits(const Vec3d &s, const Vec3d &dir) const
std::vector<AABBMesh::hit_result>
AABBMesh::query_ray_hits(const Vec3d &s, const Vec3d &dir) const
{
std::vector<IndexedMesh::hit_result> outs;
std::vector<AABBMesh::hit_result> outs;
std::vector<igl::Hit> hits;
m_aabb->intersect_ray(*m_tm, s, dir, hits);
@ -192,7 +203,7 @@ IndexedMesh::query_ray_hits(const Vec3d &s, const Vec3d &dir) const
// Convert the igl::Hit into hit_result
outs.reserve(hits.size());
for (const igl::Hit& hit : hits) {
outs.emplace_back(IndexedMesh::hit_result(*this));
outs.emplace_back(AABBMesh::hit_result(*this));
outs.back().m_t = double(hit.t);
outs.back().m_dir = dir;
outs.back().m_source = s;
@ -207,8 +218,8 @@ IndexedMesh::query_ray_hits(const Vec3d &s, const Vec3d &dir) const
#ifdef SLIC3R_HOLE_RAYCASTER
IndexedMesh::hit_result IndexedMesh::filter_hits(
const std::vector<IndexedMesh::hit_result>& object_hits) const
AABBMesh::hit_result IndexedMesh::filter_hits(
const std::vector<AABBMesh::hit_result>& object_hits) const
{
assert(! m_holes.empty());
hit_result out(*this);
@ -304,7 +315,7 @@ IndexedMesh::hit_result IndexedMesh::filter_hits(
#endif
double IndexedMesh::squared_distance(const Vec3d &p, int& i, Vec3d& c) const {
double AABBMesh::squared_distance(const Vec3d &p, int& i, Vec3d& c) const {
double sqdst = 0;
Eigen::Matrix<double, 1, 3> pp = p;
Eigen::Matrix<double, 1, 3> cc;
@ -313,143 +324,4 @@ double IndexedMesh::squared_distance(const Vec3d &p, int& i, Vec3d& c) const {
return sqdst;
}
static bool point_on_edge(const Vec3d& p, const Vec3d& e1, const Vec3d& e2,
double eps = 0.05)
{
using Line3D = Eigen::ParametrizedLine<double, 3>;
auto line = Line3D::Through(e1, e2);
double d = line.distance(p);
return std::abs(d) < eps;
}
PointSet normals(const PointSet& points,
const IndexedMesh& mesh,
double eps,
std::function<void()> thr, // throw on cancel
const std::vector<unsigned>& pt_indices)
{
if (points.rows() == 0 || mesh.vertices().empty() || mesh.indices().empty())
return {};
std::vector<unsigned> range = pt_indices;
if (range.empty()) {
range.resize(size_t(points.rows()), 0);
std::iota(range.begin(), range.end(), 0);
}
PointSet ret(range.size(), 3);
// for (size_t ridx = 0; ridx < range.size(); ++ridx)
ccr::for_each(size_t(0), range.size(),
[&ret, &mesh, &points, thr, eps, &range](size_t ridx) {
thr();
unsigned el = range[ridx];
auto eidx = Eigen::Index(el);
int faceid = 0;
Vec3d p;
mesh.squared_distance(points.row(eidx), faceid, p);
auto trindex = mesh.indices(faceid);
const Vec3d &p1 = mesh.vertices(trindex(0)).cast<double>();
const Vec3d &p2 = mesh.vertices(trindex(1)).cast<double>();
const Vec3d &p3 = mesh.vertices(trindex(2)).cast<double>();
// We should check if the point lies on an edge of the hosting
// triangle. If it does then all the other triangles using the
// same two points have to be searched and the final normal should
// be some kind of aggregation of the participating triangle
// normals. We should also consider the cases where the support
// point lies right on a vertex of its triangle. The procedure is
// the same, get the neighbor triangles and calculate an average
// normal.
// mark the vertex indices of the edge. ia and ib marks and edge
// ic will mark a single vertex.
int ia = -1, ib = -1, ic = -1;
if (std::abs((p - p1).norm()) < eps) {
ic = trindex(0);
} else if (std::abs((p - p2).norm()) < eps) {
ic = trindex(1);
} else if (std::abs((p - p3).norm()) < eps) {
ic = trindex(2);
} else if (point_on_edge(p, p1, p2, eps)) {
ia = trindex(0);
ib = trindex(1);
} else if (point_on_edge(p, p2, p3, eps)) {
ia = trindex(1);
ib = trindex(2);
} else if (point_on_edge(p, p1, p3, eps)) {
ia = trindex(0);
ib = trindex(2);
}
// vector for the neigboring triangles including the detected one.
std::vector<size_t> neigh;
if (ic >= 0) { // The point is right on a vertex of the triangle
for (size_t n = 0; n < mesh.indices().size(); ++n) {
thr();
Vec3i ni = mesh.indices(n);
if ((ni(X) == ic || ni(Y) == ic || ni(Z) == ic))
neigh.emplace_back(n);
}
} else if (ia >= 0 && ib >= 0) { // the point is on and edge
// now get all the neigboring triangles
for (size_t n = 0; n < mesh.indices().size(); ++n) {
thr();
Vec3i ni = mesh.indices(n);
if ((ni(X) == ia || ni(Y) == ia || ni(Z) == ia) &&
(ni(X) == ib || ni(Y) == ib || ni(Z) == ib))
neigh.emplace_back(n);
}
}
// Calculate the normals for the neighboring triangles
std::vector<Vec3d> neighnorms;
neighnorms.reserve(neigh.size());
for (size_t &tri_id : neigh)
neighnorms.emplace_back(mesh.normal_by_face_id(tri_id));
// Throw out duplicates. They would cause trouble with summing. We
// will use std::unique which works on sorted ranges. We will sort
// by the coefficient-wise sum of the normals. It should force the
// same elements to be consecutive.
std::sort(neighnorms.begin(), neighnorms.end(),
[](const Vec3d &v1, const Vec3d &v2) {
return v1.sum() < v2.sum();
});
auto lend = std::unique(neighnorms.begin(), neighnorms.end(),
[](const Vec3d &n1, const Vec3d &n2) {
// Compare normals for equivalence.
// This is controvers stuff.
auto deq = [](double a, double b) {
return std::abs(a - b) < 1e-3;
};
return deq(n1(X), n2(X)) &&
deq(n1(Y), n2(Y)) &&
deq(n1(Z), n2(Z));
});
if (!neighnorms.empty()) { // there were neighbors to count with
// sum up the normals and then normalize the result again.
// This unification seems to be enough.
Vec3d sumnorm(0, 0, 0);
sumnorm = std::accumulate(neighnorms.begin(), lend, sumnorm);
sumnorm.normalize();
ret.row(long(ridx)) = sumnorm;
} else { // point lies safely within its triangle
Eigen::Vector3d U = p2 - p1;
Eigen::Vector3d V = p3 - p1;
ret.row(long(ridx)) = U.cross(V).normalized();
}
});
return ret;
}
}} // namespace Slic3r::sla
} // namespace Slic3r

View File

@ -1,10 +1,11 @@
#ifndef SLA_INDEXEDMESH_H
#define SLA_INDEXEDMESH_H
#ifndef PRUSASLICER_AABBMESH_H
#define PRUSASLICER_AABBMESH_H
#include <memory>
#include <vector>
#include <libslic3r/Point.hpp>
#include <libslic3r/TriangleMesh.hpp>
// There is an implementation of a hole-aware raycaster that was eventually
// not used in production version. It is now hidden under following define
@ -21,25 +22,22 @@ namespace Slic3r {
class TriangleMesh;
namespace sla {
using PointSet = Eigen::MatrixXd;
/// An index-triangle structure for libIGL functions. Also serves as an
/// alternative (raw) input format for the SLASupportTree.
// Implemented in libslic3r/SLA/Common.cpp
class IndexedMesh {
// An index-triangle structure coupled with an AABB index to support ray
// casting and other higher level operations.
class AABBMesh {
class AABBImpl;
const indexed_triangle_set* m_tm;
double m_ground_level = 0, m_gnd_offset = 0;
double m_ground_level = 0/*, m_gnd_offset = 0*/;
std::unique_ptr<AABBImpl> m_aabb;
VertexFaceIndex m_vfidx; // vertex-face index
std::vector<Vec3i> m_fnidx; // face-neighbor index
#ifdef SLIC3R_HOLE_RAYCASTER
// This holds a copy of holes in the mesh. Initialized externally
// by load_mesh setter.
std::vector<DrainHole> m_holes;
std::vector<sla::DrainHole> m_holes;
#endif
template<class M> void init(const M &mesh, bool calculate_epsilon);
@ -48,20 +46,20 @@ public:
// calculate_epsilon ... calculate epsilon for triangle-ray intersection from an average triangle edge length.
// If set to false, a default epsilon is used, which works for "reasonable" meshes.
explicit IndexedMesh(const indexed_triangle_set &tmesh, bool calculate_epsilon = false);
explicit IndexedMesh(const TriangleMesh &mesh, bool calculate_epsilon = false);
explicit AABBMesh(const indexed_triangle_set &tmesh, bool calculate_epsilon = false);
explicit AABBMesh(const TriangleMesh &mesh, bool calculate_epsilon = false);
IndexedMesh(const IndexedMesh& other);
IndexedMesh& operator=(const IndexedMesh&);
AABBMesh(const AABBMesh& other);
AABBMesh& operator=(const AABBMesh&);
IndexedMesh(IndexedMesh &&other);
IndexedMesh& operator=(IndexedMesh &&other);
AABBMesh(AABBMesh &&other);
AABBMesh& operator=(AABBMesh &&other);
~IndexedMesh();
~AABBMesh();
inline double ground_level() const { return m_ground_level + m_gnd_offset; }
inline void ground_level_offset(double o) { m_gnd_offset = o; }
inline double ground_level_offset() const { return m_gnd_offset; }
inline double ground_level() const { return m_ground_level /*+ m_gnd_offset*/; }
// inline void ground_level_offset(double o) { m_gnd_offset = o; }
// inline double ground_level_offset() const { return m_gnd_offset; }
const std::vector<Vec3f>& vertices() const;
const std::vector<Vec3i>& indices() const;
@ -73,15 +71,15 @@ public:
// m_t holds a distance from m_source to the intersection.
double m_t = infty();
int m_face_id = -1;
const IndexedMesh *m_mesh = nullptr;
const AABBMesh *m_mesh = nullptr;
Vec3d m_dir;
Vec3d m_source;
Vec3d m_normal;
friend class IndexedMesh;
friend class AABBMesh;
// A valid object of this class can only be obtained from
// IndexedMesh::query_ray_hit method.
explicit inline hit_result(const IndexedMesh& em): m_mesh(&em) {}
explicit inline hit_result(const AABBMesh& em): m_mesh(&em) {}
public:
// This denotes no hit on the mesh.
static inline constexpr double infty() { return std::numeric_limits<double>::infinity(); }
@ -109,7 +107,7 @@ public:
#ifdef SLIC3R_HOLE_RAYCASTER
// Inform the object about location of holes
// creates internal copy of the vector
void load_holes(const std::vector<DrainHole>& holes) {
void load_holes(const std::vector<sla::DrainHole>& holes) {
m_holes = holes;
}
@ -118,7 +116,7 @@ public:
// This function is currently not used anywhere, it was written when the
// holes were subtracted on slices, that is, before we started using CGAL
// to actually cut the holes into the mesh.
hit_result filter_hits(const std::vector<IndexedMesh::hit_result>& obj_hits) const;
hit_result filter_hits(const std::vector<AABBMesh::hit_result>& obj_hits) const;
#endif
// Casting a ray on the mesh, returns the distance where the hit occures.
@ -138,16 +136,12 @@ public:
Vec3d normal_by_face_id(int face_id) const;
const indexed_triangle_set * get_triangle_mesh() const { return m_tm; }
const VertexFaceIndex &vertex_face_index() const { return m_vfidx; }
const std::vector<Vec3i> &face_neighbor_index() const { return m_fnidx; }
};
// Calculate the normals for the selected points (from 'points' set) on the
// mesh. This will call squared distance for each point.
PointSet normals(const PointSet& points,
const IndexedMesh& convert_mesh,
double eps = 0.05, // min distance from edges
std::function<void()> throw_on_cancel = [](){},
const std::vector<unsigned>& selected_points = {});
}} // namespace Slic3r::sla
} // namespace Slic3r::sla
#endif // INDEXEDMESH_H

View File

@ -446,6 +446,57 @@ namespace detail {
}
}
// Real-time collision detection, Ericson, Chapter 5
template<typename Vector>
static inline Vector closest_point_to_triangle(const Vector &p, const Vector &a, const Vector &b, const Vector &c)
{
using Scalar = typename Vector::Scalar;
// Check if P in vertex region outside A
Vector ab = b - a;
Vector ac = c - a;
Vector ap = p - a;
Scalar d1 = ab.dot(ap);
Scalar d2 = ac.dot(ap);
if (d1 <= 0 && d2 <= 0)
return a;
// Check if P in vertex region outside B
Vector bp = p - b;
Scalar d3 = ab.dot(bp);
Scalar d4 = ac.dot(bp);
if (d3 >= 0 && d4 <= d3)
return b;
// Check if P in edge region of AB, if so return projection of P onto AB
Scalar vc = d1*d4 - d3*d2;
if (a != b && vc <= 0 && d1 >= 0 && d3 <= 0) {
Scalar v = d1 / (d1 - d3);
return a + v * ab;
}
// Check if P in vertex region outside C
Vector cp = p - c;
Scalar d5 = ab.dot(cp);
Scalar d6 = ac.dot(cp);
if (d6 >= 0 && d5 <= d6)
return c;
// Check if P in edge region of AC, if so return projection of P onto AC
Scalar vb = d5*d2 - d1*d6;
if (vb <= 0 && d2 >= 0 && d6 <= 0) {
Scalar w = d2 / (d2 - d6);
return a + w * ac;
}
// Check if P in edge region of BC, if so return projection of P onto BC
Scalar va = d3*d6 - d5*d4;
if (va <= 0 && (d4 - d3) >= 0 && (d5 - d6) >= 0) {
Scalar w = (d4 - d3) / ((d4 - d3) + (d5 - d6));
return b + w * (c - b);
}
// P inside face region. Compute Q through its barycentric coordinates (u,v,w)
Scalar denom = Scalar(1.0) / (va + vb + vc);
Scalar v = vb * denom;
Scalar w = vc * denom;
return a + ab * v + ac * w; // = u*a + v*b + w*c, u = va * denom = 1.0-v-w
};
// Nothing to do with COVID-19 social distancing.
template<typename AVertexType, typename AIndexedFaceType, typename ATreeType, typename AVectorType>
struct IndexedTriangleSetDistancer {
@ -453,74 +504,36 @@ namespace detail {
using IndexedFaceType = AIndexedFaceType;
using TreeType = ATreeType;
using VectorType = AVectorType;
using ScalarType = typename VectorType::Scalar;
const std::vector<VertexType> &vertices;
const std::vector<IndexedFaceType> &faces;
const TreeType &tree;
const VectorType origin;
inline VectorType closest_point_to_origin(size_t primitive_index,
ScalarType& squared_distance){
const auto &triangle = this->faces[primitive_index];
VectorType closest_point = closest_point_to_triangle<VectorType>(origin,
this->vertices[triangle(0)].template cast<ScalarType>(),
this->vertices[triangle(1)].template cast<ScalarType>(),
this->vertices[triangle(2)].template cast<ScalarType>());
squared_distance = (origin - closest_point).squaredNorm();
return closest_point;
}
};
// Real-time collision detection, Ericson, Chapter 5
template<typename Vector>
static inline Vector closest_point_to_triangle(const Vector &p, const Vector &a, const Vector &b, const Vector &c)
{
using Scalar = typename Vector::Scalar;
// Check if P in vertex region outside A
Vector ab = b - a;
Vector ac = c - a;
Vector ap = p - a;
Scalar d1 = ab.dot(ap);
Scalar d2 = ac.dot(ap);
if (d1 <= 0 && d2 <= 0)
return a;
// Check if P in vertex region outside B
Vector bp = p - b;
Scalar d3 = ab.dot(bp);
Scalar d4 = ac.dot(bp);
if (d3 >= 0 && d4 <= d3)
return b;
// Check if P in edge region of AB, if so return projection of P onto AB
Scalar vc = d1*d4 - d3*d2;
if (a != b && vc <= 0 && d1 >= 0 && d3 <= 0) {
Scalar v = d1 / (d1 - d3);
return a + v * ab;
}
// Check if P in vertex region outside C
Vector cp = p - c;
Scalar d5 = ab.dot(cp);
Scalar d6 = ac.dot(cp);
if (d6 >= 0 && d5 <= d6)
return c;
// Check if P in edge region of AC, if so return projection of P onto AC
Scalar vb = d5*d2 - d1*d6;
if (vb <= 0 && d2 >= 0 && d6 <= 0) {
Scalar w = d2 / (d2 - d6);
return a + w * ac;
}
// Check if P in edge region of BC, if so return projection of P onto BC
Scalar va = d3*d6 - d5*d4;
if (va <= 0 && (d4 - d3) >= 0 && (d5 - d6) >= 0) {
Scalar w = (d4 - d3) / ((d4 - d3) + (d5 - d6));
return b + w * (c - b);
}
// P inside face region. Compute Q through its barycentric coordinates (u,v,w)
Scalar denom = Scalar(1.0) / (va + vb + vc);
Scalar v = vb * denom;
Scalar w = vc * denom;
return a + ab * v + ac * w; // = u*a + v*b + w*c, u = va * denom = 1.0-v-w
};
template<typename IndexedTriangleSetDistancerType, typename Scalar>
static inline Scalar squared_distance_to_indexed_triangle_set_recursive(
IndexedTriangleSetDistancerType &distancer,
template<typename IndexedPrimitivesDistancerType, typename Scalar>
static inline Scalar squared_distance_to_indexed_primitives_recursive(
IndexedPrimitivesDistancerType &distancer,
size_t node_idx,
Scalar low_sqr_d,
Scalar up_sqr_d,
size_t &i,
Eigen::PlainObjectBase<typename IndexedTriangleSetDistancerType::VectorType> &c)
Eigen::PlainObjectBase<typename IndexedPrimitivesDistancerType::VectorType> &c)
{
using Vector = typename IndexedTriangleSetDistancerType::VectorType;
using Vector = typename IndexedPrimitivesDistancerType::VectorType;
if (low_sqr_d > up_sqr_d)
return low_sqr_d;
@ -538,13 +551,9 @@ namespace detail {
assert(node.is_valid());
if (node.is_leaf())
{
const auto &triangle = distancer.faces[node.idx];
Vector c_candidate = closest_point_to_triangle<Vector>(
distancer.origin,
distancer.vertices[triangle(0)].template cast<Scalar>(),
distancer.vertices[triangle(1)].template cast<Scalar>(),
distancer.vertices[triangle(2)].template cast<Scalar>());
set_min((c_candidate - distancer.origin).squaredNorm(), node.idx, c_candidate);
Scalar sqr_dist;
Vector c_candidate = distancer.closest_point_to_origin(node.idx, sqr_dist);
set_min(sqr_dist, node.idx, c_candidate);
}
else
{
@ -561,7 +570,7 @@ namespace detail {
{
size_t i_left;
Vector c_left = c;
Scalar sqr_d_left = squared_distance_to_indexed_triangle_set_recursive(distancer, left_node_idx, low_sqr_d, up_sqr_d, i_left, c_left);
Scalar sqr_d_left = squared_distance_to_indexed_primitives_recursive(distancer, left_node_idx, low_sqr_d, up_sqr_d, i_left, c_left);
set_min(sqr_d_left, i_left, c_left);
looked_left = true;
};
@ -569,13 +578,13 @@ namespace detail {
{
size_t i_right;
Vector c_right = c;
Scalar sqr_d_right = squared_distance_to_indexed_triangle_set_recursive(distancer, right_node_idx, low_sqr_d, up_sqr_d, i_right, c_right);
Scalar sqr_d_right = squared_distance_to_indexed_primitives_recursive(distancer, right_node_idx, low_sqr_d, up_sqr_d, i_right, c_right);
set_min(sqr_d_right, i_right, c_right);
looked_right = true;
};
// must look left or right if in box
using BBoxScalar = typename IndexedTriangleSetDistancerType::TreeType::BoundingBox::Scalar;
using BBoxScalar = typename IndexedPrimitivesDistancerType::TreeType::BoundingBox::Scalar;
if (node_left.bbox.contains(distancer.origin.template cast<BBoxScalar>()))
look_left();
if (node_right.bbox.contains(distancer.origin.template cast<BBoxScalar>()))
@ -747,7 +756,7 @@ inline typename VectorType::Scalar squared_distance_to_indexed_triangle_set(
auto distancer = detail::IndexedTriangleSetDistancer<VertexType, IndexedFaceType, TreeType, VectorType>
{ vertices, faces, tree, point };
return tree.empty() ? Scalar(-1) :
detail::squared_distance_to_indexed_triangle_set_recursive(distancer, size_t(0), Scalar(0), std::numeric_limits<Scalar>::infinity(), hit_idx_out, hit_point_out);
detail::squared_distance_to_indexed_primitives_recursive(distancer, size_t(0), Scalar(0), std::numeric_limits<Scalar>::infinity(), hit_idx_out, hit_point_out);
}
// Decides if exists some triangle in defined radius on a 3D indexed triangle set using a pre-built AABBTreeIndirect::Tree.
@ -771,15 +780,15 @@ inline bool is_any_triangle_in_radius(
auto distancer = detail::IndexedTriangleSetDistancer<VertexType, IndexedFaceType, TreeType, VectorType>
{ vertices, faces, tree, point };
size_t hit_idx;
VectorType hit_point = VectorType::Ones() * (std::nan(""));
size_t hit_idx;
VectorType hit_point = VectorType::Ones() * (NaN<typename VectorType::Scalar>);
if(tree.empty())
{
return false;
}
detail::squared_distance_to_indexed_triangle_set_recursive(distancer, size_t(0), Scalar(0), max_distance_squared, hit_idx, hit_point);
detail::squared_distance_to_indexed_primitives_recursive(distancer, size_t(0), Scalar(0), max_distance_squared, hit_idx, hit_point);
return hit_point.allFinite();
}
@ -828,22 +837,22 @@ struct Intersecting<Eigen::AlignedBox<CoordType, NumD>> {
template<class G> auto intersecting(const G &g) { return Intersecting<G>{g}; }
template<class G> struct Containing {};
template<class G> struct Within {};
// Intersection predicate specialization for box-box intersections
template<class CoordType, int NumD>
struct Containing<Eigen::AlignedBox<CoordType, NumD>> {
struct Within<Eigen::AlignedBox<CoordType, NumD>> {
Eigen::AlignedBox<CoordType, NumD> box;
Containing(const Eigen::AlignedBox<CoordType, NumD> &bb): box{bb} {}
Within(const Eigen::AlignedBox<CoordType, NumD> &bb): box{bb} {}
bool operator() (const typename Tree<NumD, CoordType>::Node &node) const
{
return box.contains(node.bbox);
return node.is_leaf() ? box.contains(node.bbox) : box.intersects(node.bbox);
}
};
template<class G> auto containing(const G &g) { return Containing<G>{g}; }
template<class G> auto within(const G &g) { return Within<G>{g}; }
namespace detail {
@ -858,7 +867,7 @@ void traverse_recurse(const Tree<Dims, T> &tree,
if (!pred(tree.node(idx))) return;
if (tree.node(idx).is_leaf()) {
callback(tree.node(idx).idx);
callback(tree.node(idx));
} else {
// call this with left and right node idx:

View File

@ -0,0 +1,112 @@
#ifndef SRC_LIBSLIC3R_AABBTREELINES_HPP_
#define SRC_LIBSLIC3R_AABBTREELINES_HPP_
#include "libslic3r/Point.hpp"
#include "libslic3r/EdgeGrid.hpp"
#include "libslic3r/AABBTreeIndirect.hpp"
#include "libslic3r/Line.hpp"
namespace Slic3r {
namespace AABBTreeLines {
namespace detail {
template<typename ALineType, typename ATreeType, typename AVectorType>
struct IndexedLinesDistancer {
using LineType = ALineType;
using TreeType = ATreeType;
using VectorType = AVectorType;
using ScalarType = typename VectorType::Scalar;
const std::vector<LineType> &lines;
const TreeType &tree;
const VectorType origin;
inline VectorType closest_point_to_origin(size_t primitive_index,
ScalarType &squared_distance) {
VectorType nearest_point;
const LineType &line = lines[primitive_index];
squared_distance = line_alg::distance_to_squared(line, origin, &nearest_point);
return nearest_point;
}
};
}
// Build a balanced AABB Tree over a vector of float lines, balancing the tree
// on centroids of the lines.
// Epsilon is applied to the bounding boxes of the AABB Tree to cope with numeric inaccuracies
// during tree traversal.
template<typename LineType>
inline AABBTreeIndirect::Tree<2, typename LineType::Scalar> build_aabb_tree_over_indexed_lines(
const std::vector<LineType> &lines,
//FIXME do we want to apply an epsilon?
const float eps = 0)
{
using TreeType = AABBTreeIndirect::Tree<2, typename LineType::Scalar>;
// using CoordType = typename TreeType::CoordType;
using VectorType = typename TreeType::VectorType;
using BoundingBox = typename TreeType::BoundingBox;
struct InputType {
size_t idx() const {
return m_idx;
}
const BoundingBox& bbox() const {
return m_bbox;
}
const VectorType& centroid() const {
return m_centroid;
}
size_t m_idx;
BoundingBox m_bbox;
VectorType m_centroid;
};
std::vector<InputType> input;
input.reserve(lines.size());
const VectorType veps(eps, eps);
for (size_t i = 0; i < lines.size(); ++i) {
const LineType &line = lines[i];
InputType n;
n.m_idx = i;
n.m_centroid = (line.a + line.b) * 0.5;
n.m_bbox = BoundingBox(line.a, line.a);
n.m_bbox.extend(line.b);
n.m_bbox.min() -= veps;
n.m_bbox.max() += veps;
input.emplace_back(n);
}
TreeType out;
out.build(std::move(input));
return out;
}
// Finding a closest line, its closest point and squared distance to the closest point
// Returns squared distance to the closest point or -1 if the input is empty.
template<typename LineType, typename TreeType, typename VectorType>
inline typename VectorType::Scalar squared_distance_to_indexed_lines(
const std::vector<LineType> &lines,
const TreeType &tree,
const VectorType &point,
size_t &hit_idx_out,
Eigen::PlainObjectBase<VectorType> &hit_point_out)
{
using Scalar = typename VectorType::Scalar;
auto distancer = detail::IndexedLinesDistancer<LineType, TreeType, VectorType>
{ lines, tree, point };
return tree.empty() ?
Scalar(-1) :
AABBTreeIndirect::detail::squared_distance_to_indexed_primitives_recursive(distancer, size_t(0), Scalar(0),
std::numeric_limits<Scalar>::infinity(), hit_idx_out, hit_point_out);
}
}
}
#endif /* SRC_LIBSLIC3R_AABBTREELINES_HPP_ */

190
src/libslic3r/AStar.hpp Normal file
View File

@ -0,0 +1,190 @@
#ifndef ASTAR_HPP
#define ASTAR_HPP
#include <cmath> // std::isinf() is here
#include <unordered_map>
#include "libslic3r/Point.hpp"
#include "libslic3r/MutablePriorityQueue.hpp"
namespace Slic3r { namespace astar {
// Input interface for the Astar algorithm. Specialize this struct for a
// particular type and implement all the 4 methods and specify the Node type
// to register the new type for the astar implementation.
template<class T> struct TracerTraits_
{
// The type of a node used by this tracer. Usually a point in space.
using Node = typename T::Node;
// Call fn for every new node reachable from node 'src'. fn should have the
// candidate node as its only argument.
template<class Fn>
static void foreach_reachable(const T &tracer, const Node &src, Fn &&fn)
{
tracer.foreach_reachable(src, fn);
}
// Get the distance from node 'a' to node 'b'. This is sometimes referred
// to as the g value of a node in AStar context.
static float distance(const T &tracer, const Node &a, const Node &b)
{
return tracer.distance(a, b);
}
// Get the estimated distance heuristic from node 'n' to the destination.
// This is referred to as the h value in AStar context.
// If node 'n' is the goal, this function should return a negative value.
// Note that this heuristic should be admissible (never bigger than the real
// cost) in order for Astar to work.
static float goal_heuristic(const T &tracer, const Node &n)
{
return tracer.goal_heuristic(n);
}
// Return a unique identifier (hash) for node 'n'.
static size_t unique_id(const T &tracer, const Node &n)
{
return tracer.unique_id(n);
}
};
// Helper definition to get the node type of a tracer
template<class T>
using TracerNodeT = typename TracerTraits_<remove_cvref_t<T>>::Node;
constexpr auto Unassigned = std::numeric_limits<size_t>::max();
template<class Tracer>
struct QNode // Queue node. Keeps track of scores g, and h
{
TracerNodeT<Tracer> node; // The actual node itself
size_t queue_id; // Position in the open queue or Unassigned if closed
size_t parent; // unique id of the parent or Unassigned
float g, h;
float f() const { return g + h; }
QNode(TracerNodeT<Tracer> n = {},
size_t p = Unassigned,
float gval = std::numeric_limits<float>::infinity(),
float hval = 0.f)
: node{std::move(n)}
, parent{p}
, queue_id{InvalidQueueID}
, g{gval}
, h{hval}
{}
};
// Run the AStar algorithm on a tracer implementation.
// The 'tracer' argument encapsulates the domain (grid, point cloud, etc...)
// The 'source' argument is the starting node.
// The 'out' argument is the output iterator into which the output nodes are
// written. For performance reasons, the order is reverse, from the destination
// to the source -- (destination included, source is not).
// The 'cached_nodes' argument is an optional associative container to hold a
// QNode entry for each visited node. Any compatible container can be used
// (like std::map or maps with different allocators, even a sufficiently large
// std::vector).
//
// Note that no destination node is given in the signature. The tracer's
// goal_heuristic() method should return a negative value if a node is a
// destination node.
template<class Tracer,
class It,
class NodeMap = std::unordered_map<size_t, QNode<Tracer>>>
bool search_route(const Tracer &tracer,
const TracerNodeT<Tracer> &source,
It out,
NodeMap &&cached_nodes = {})
{
using Node = TracerNodeT<Tracer>;
using QNode = QNode<Tracer>;
using TracerTraits = TracerTraits_<remove_cvref_t<Tracer>>;
struct LessPred { // Comparison functor needed by the priority queue
NodeMap &m;
bool operator ()(size_t node_a, size_t node_b) {
return m[node_a].f() < m[node_b].f();
}
};
auto qopen = make_mutable_priority_queue<size_t, true>(
[&cached_nodes](size_t el, size_t qidx) {
cached_nodes[el].queue_id = qidx;
},
LessPred{cached_nodes});
QNode initial{source, /*parent = */ Unassigned, /*g = */0.f};
size_t source_id = TracerTraits::unique_id(tracer, source);
cached_nodes[source_id] = initial;
qopen.push(source_id);
size_t goal_id = TracerTraits::goal_heuristic(tracer, source) < 0.f ?
source_id :
Unassigned;
while (goal_id == Unassigned && !qopen.empty()) {
size_t q_id = qopen.top();
qopen.pop();
QNode &q = cached_nodes[q_id];
// This should absolutely be initialized in the cache already
assert(!std::isinf(q.g));
TracerTraits::foreach_reachable(tracer, q.node, [&](const Node &succ_nd) {
if (goal_id != Unassigned)
return true;
float h = TracerTraits::goal_heuristic(tracer, succ_nd);
float dst = TracerTraits::distance(tracer, q.node, succ_nd);
size_t succ_id = TracerTraits::unique_id(tracer, succ_nd);
QNode qsucc_nd{succ_nd, q_id, q.g + dst, h};
if (h < 0.f) {
goal_id = succ_id;
cached_nodes[succ_id] = qsucc_nd;
} else {
// If succ_id is not in cache, it gets created with g = infinity
QNode &prev_nd = cached_nodes[succ_id];
if (qsucc_nd.g < prev_nd.g) {
// new route is better, apply it:
// Save the old queue id, it would be lost after the next line
size_t queue_id = prev_nd.queue_id;
// The cache needs to be updated either way
prev_nd = qsucc_nd;
if (queue_id == InvalidQueueID)
// was in closed or unqueued, rescheduling
qopen.push(succ_id);
else // was in open, updating
qopen.update(queue_id);
}
}
return goal_id != Unassigned;
});
}
// Write the output, do not reverse. Clients can do so if they need to.
if (goal_id != Unassigned) {
const QNode *q = &cached_nodes[goal_id];
while (q->parent != Unassigned) {
assert(!std::isinf(q->g)); // Uninitialized nodes are NOT allowed
*out = q->node;
++out;
q = &cached_nodes[q->parent];
}
}
return goal_id != Unassigned;
}
}} // namespace Slic3r::astar
#endif // ASTAR_HPP

View File

@ -230,8 +230,13 @@ static std::string appconfig_md5_hash_line(const std::string_view data)
return "# MD5 checksum " + md5_digest_str + "\n";
};
struct ConfigFileInfo {
bool correct_checksum {false};
bool contains_null {false};
};
// Assume that the last line with the comment inside the config file contains a checksum and that the user didn't modify the config file.
static bool verify_config_file_checksum(boost::nowide::ifstream &ifs)
static ConfigFileInfo check_config_file_and_verify_checksum(boost::nowide::ifstream &ifs)
{
auto read_whole_config_file = [&ifs]() -> std::string {
std::stringstream ss;
@ -240,7 +245,8 @@ static bool verify_config_file_checksum(boost::nowide::ifstream &ifs)
};
ifs.seekg(0, boost::nowide::ifstream::beg);
std::string whole_config = read_whole_config_file();
const std::string whole_config = read_whole_config_file();
const bool contains_null = whole_config.find_first_of('\0') != std::string::npos;
// The checksum should be on the last line in the config file.
if (size_t last_comment_pos = whole_config.find_last_of('#'); last_comment_pos != std::string::npos) {
@ -249,9 +255,9 @@ static bool verify_config_file_checksum(boost::nowide::ifstream &ifs)
// When the checksum isn't found, the checksum was not saved correctly, it was removed or it is an older config file without the checksum.
// If the checksum is incorrect, then the file was either not saved correctly or modified.
if (std::string_view(whole_config.c_str() + last_comment_pos, whole_config.size() - last_comment_pos) == appconfig_md5_hash_line({ whole_config.data(), last_comment_pos }))
return true;
return {true, contains_null};
}
return false;
return {false, contains_null};
}
#endif
@ -269,14 +275,25 @@ std::string AppConfig::load(const std::string &path)
ifs.open(path);
#ifdef WIN32
// Verify the checksum of the config file without taking just for debugging purpose.
if (!verify_config_file_checksum(ifs))
BOOST_LOG_TRIVIAL(info) << "The configuration file " << path <<
" has a wrong MD5 checksum or the checksum is missing. This may indicate a file corruption or a harmless user edit.";
const ConfigFileInfo config_file_info = check_config_file_and_verify_checksum(ifs);
if (!config_file_info.correct_checksum)
BOOST_LOG_TRIVIAL(info)
<< "The configuration file " << path
<< " has a wrong MD5 checksum or the checksum is missing. This may indicate a file corruption or a harmless user edit.";
if (!config_file_info.correct_checksum && config_file_info.contains_null) {
BOOST_LOG_TRIVIAL(info) << "The configuration file " + path + " is corrupted, because it is contains null characters.";
throw Slic3r::CriticalException("The configuration file contains null characters.");
}
ifs.seekg(0, boost::nowide::ifstream::beg);
#endif
pt::read_ini(ifs, tree);
} catch (pt::ptree_error& ex) {
try {
pt::read_ini(ifs, tree);
} catch (pt::ptree_error &ex) {
throw Slic3r::CriticalException(ex.what());
}
} catch (Slic3r::CriticalException &ex) {
#ifdef WIN32
// The configuration file is corrupted, try replacing it with the backup configuration.
ifs.close();
@ -284,29 +301,29 @@ std::string AppConfig::load(const std::string &path)
if (boost::filesystem::exists(backup_path)) {
// Compute checksum of the configuration backup file and try to load configuration from it when the checksum is correct.
boost::nowide::ifstream backup_ifs(backup_path);
if (!verify_config_file_checksum(backup_ifs)) {
BOOST_LOG_TRIVIAL(error) << format("Both \"%1%\" and \"%2%\" are corrupted. It isn't possible to restore configuration from the backup.", path, backup_path);
if (const ConfigFileInfo config_file_info = check_config_file_and_verify_checksum(backup_ifs); !config_file_info.correct_checksum || config_file_info.contains_null) {
BOOST_LOG_TRIVIAL(error) << format(R"(Both "%1%" and "%2%" are corrupted. It isn't possible to restore configuration from the backup.)", path, backup_path);
backup_ifs.close();
boost::filesystem::remove(backup_path);
} else if (std::string error_message; copy_file(backup_path, path, error_message, false) != SUCCESS) {
BOOST_LOG_TRIVIAL(error) << format("Configuration file \"%1%\" is corrupted. Failed to restore from backup \"%2%\": %3%", path, backup_path, error_message);
BOOST_LOG_TRIVIAL(error) << format(R"(Configuration file "%1%" is corrupted. Failed to restore from backup "%2%": %3%)", path, backup_path, error_message);
backup_ifs.close();
boost::filesystem::remove(backup_path);
} else {
BOOST_LOG_TRIVIAL(info) << format("Configuration file \"%1%\" was corrupted. It has been succesfully restored from the backup \"%2%\".", path, backup_path);
BOOST_LOG_TRIVIAL(info) << format(R"(Configuration file "%1%" was corrupted. It has been successfully restored from the backup "%2%".)", path, backup_path);
// Try parse configuration file after restore from backup.
try {
ifs.open(path);
pt::read_ini(ifs, tree);
recovered = true;
} catch (pt::ptree_error& ex) {
BOOST_LOG_TRIVIAL(info) << format("Failed to parse configuration file \"%1%\" after it has been restored from backup: %2%", path, ex.what());
BOOST_LOG_TRIVIAL(info) << format(R"(Failed to parse configuration file "%1%" after it has been restored from backup: %2%)", path, ex.what());
}
}
} else
#endif // WIN32
BOOST_LOG_TRIVIAL(info) << format("Failed to parse configuration file \"%1%\": %2%", path, ex.what());
if (! recovered) {
BOOST_LOG_TRIVIAL(info) << format(R"(Failed to parse configuration file "%1%": %2%)", path, ex.what());
if (!recovered) {
// Report the initial error of parsing PrusaSlicer.ini.
// Error while parsing config file. We'll customize the error message and rethrow to be displayed.
// ! But to avoid the use of _utf8 (related to use of wxWidgets)

View File

@ -0,0 +1,79 @@
//Copyright (c) 2022 Ultimaker B.V.
//CuraEngine is released under the terms of the AGPLv3 or higher.
#include <cassert>
#include "BeadingStrategy.hpp"
#include "Point.hpp"
namespace Slic3r::Arachne
{
BeadingStrategy::BeadingStrategy(coord_t optimal_width, double wall_split_middle_threshold, double wall_add_middle_threshold, coord_t default_transition_length, float transitioning_angle)
: optimal_width(optimal_width)
, wall_split_middle_threshold(wall_split_middle_threshold)
, wall_add_middle_threshold(wall_add_middle_threshold)
, default_transition_length(default_transition_length)
, transitioning_angle(transitioning_angle)
{
name = "Unknown";
}
BeadingStrategy::BeadingStrategy(const BeadingStrategy &other)
: optimal_width(other.optimal_width)
, wall_split_middle_threshold(other.wall_split_middle_threshold)
, wall_add_middle_threshold(other.wall_add_middle_threshold)
, default_transition_length(other.default_transition_length)
, transitioning_angle(other.transitioning_angle)
, name(other.name)
{}
coord_t BeadingStrategy::getTransitioningLength(coord_t lower_bead_count) const
{
if (lower_bead_count == 0)
return scaled<coord_t>(0.01);
return default_transition_length;
}
float BeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const
{
coord_t lower_optimum = getOptimalThickness(lower_bead_count);
coord_t transition_point = getTransitionThickness(lower_bead_count);
coord_t upper_optimum = getOptimalThickness(lower_bead_count + 1);
return 1.0 - float(transition_point - lower_optimum) / float(upper_optimum - lower_optimum);
}
std::vector<coord_t> BeadingStrategy::getNonlinearThicknesses(coord_t lower_bead_count) const
{
return {};
}
std::string BeadingStrategy::toString() const
{
return name;
}
double BeadingStrategy::getSplitMiddleThreshold() const
{
return wall_split_middle_threshold;
}
double BeadingStrategy::getTransitioningAngle() const
{
return transitioning_angle;
}
coord_t BeadingStrategy::getOptimalThickness(coord_t bead_count) const
{
return optimal_width * bead_count;
}
coord_t BeadingStrategy::getTransitionThickness(coord_t lower_bead_count) const
{
const coord_t lower_ideal_width = getOptimalThickness(lower_bead_count);
const coord_t higher_ideal_width = getOptimalThickness(lower_bead_count + 1);
const double threshold = lower_bead_count % 2 == 1 ? wall_split_middle_threshold : wall_add_middle_threshold;
return lower_ideal_width + threshold * (higher_ideal_width - lower_ideal_width);
}
} // namespace Slic3r::Arachne

Some files were not shown because too many files have changed in this diff Show More