diff --git a/CMakeLists.txt b/CMakeLists.txt index 49fe3437f7..aa297b03b1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,6 @@ endif() option(SLIC3R_STATIC "Compile PrusaSlicer with static libraries (Boost, TBB, glew)" ${SLIC3R_STATIC_INITIAL}) option(SLIC3R_GUI "Compile PrusaSlicer with GUI components (OpenGL, wxWidgets)" 1) option(SLIC3R_FHS "Assume PrusaSlicer is to be installed in a FHS directory structure" 0) -option(SLIC3R_WX_STABLE "Build against wxWidgets stable (3.0) as oppsed to dev (3.1) on Linux" 0) option(SLIC3R_PCH "Use precompiled headers" 1) option(SLIC3R_MSVC_COMPILE_PARALLEL "Compile on Visual Studio in parallel" 1) option(SLIC3R_MSVC_PDB "Generate PDB files on MSVC in Release mode" 1) diff --git a/cmake/modules/FindwxWidgets.cmake b/cmake/modules/FindwxWidgets.cmake new file mode 100644 index 0000000000..e1f93a6a26 --- /dev/null +++ b/cmake/modules/FindwxWidgets.cmake @@ -0,0 +1,1219 @@ +# PrusaSlicer: this is a direct copy of the FindwxWidgets.cmake module +# within the original CMake 3.27 distribution + +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindwxWidgets +------------- + +Find a wxWidgets (a.k.a., wxWindows) installation. + +This module finds if wxWidgets is installed and selects a default +configuration to use. wxWidgets is a modular library. To specify the +modules that you will use, you need to name them as components to the +package: + +find_package(wxWidgets COMPONENTS core base ... OPTIONAL_COMPONENTS net ...) + +.. versionadded:: 3.4 + Support for :command:`find_package` version argument; ``webview`` component. + +.. versionadded:: 3.14 + ``OPTIONAL_COMPONENTS`` support. + +There are two search branches: a windows style and a unix style. For +windows, the following variables are searched for and set to defaults +in case of multiple choices. Change them if the defaults are not +desired (i.e., these are the only variables you should change to +select a configuration): + +:: + + wxWidgets_ROOT_DIR - Base wxWidgets directory + (e.g., C:/wxWidgets-3.2.0). + wxWidgets_LIB_DIR - Path to wxWidgets libraries + (e.g., C:/wxWidgets-3.2.0/lib/vc_x64_lib). + wxWidgets_CONFIGURATION - Configuration to use + (e.g., msw, mswd, mswu, mswunivud, etc.) + wxWidgets_EXCLUDE_COMMON_LIBRARIES + - Set to TRUE to exclude linking of + commonly required libs (e.g., png tiff + jpeg zlib regex expat). + + + +For unix style it uses the wx-config utility. You can select between +debug/release, unicode/ansi, universal/non-universal, and +static/shared in the QtDialog or ccmake interfaces by turning ON/OFF +the following variables: + +:: + + wxWidgets_USE_DEBUG + wxWidgets_USE_UNICODE + wxWidgets_USE_UNIVERSAL + wxWidgets_USE_STATIC + +There is also a wxWidgets_CONFIG_OPTIONS variable for all other +options that need to be passed to the wx-config utility. For example, +to use the base toolkit found in the /usr/local path, set the variable +(before calling the FIND_PACKAGE command) as such: + +:: + + set(wxWidgets_CONFIG_OPTIONS --toolkit=base --prefix=/usr) + + + +The following are set after the configuration is done for both windows +and unix style: + +:: + + wxWidgets_FOUND - Set to TRUE if wxWidgets was found. + wxWidgets_INCLUDE_DIRS - Include directories for WIN32 + i.e., where to find "wx/wx.h" and + "wx/setup.h"; possibly empty for unices. + wxWidgets_LIBRARIES - Path to the wxWidgets libraries. + wxWidgets_LIBRARY_DIRS - compile time link dirs, useful for + rpath on UNIX. Typically an empty string + in WIN32 environment. + wxWidgets_DEFINITIONS - Contains defines required to compile/link + against WX, e.g. WXUSINGDLL + wxWidgets_DEFINITIONS_DEBUG- Contains defines required to compile/link + against WX debug builds, e.g. __WXDEBUG__ + wxWidgets_CXX_FLAGS - Include dirs and compiler flags for + unices, empty on WIN32. Essentially + "`wx-config --cxxflags`". + wxWidgets_USE_FILE - Convenience include file. + +.. versionadded:: 3.11 + The following environment variables can be used as hints: ``WX_CONFIG``, + ``WXRC_CMD``. + + +Sample usage: + +:: + + # Note that for MinGW users the order of libs is important! + find_package(wxWidgets COMPONENTS gl core base OPTIONAL_COMPONENTS net) + if(wxWidgets_FOUND) + include(${wxWidgets_USE_FILE}) + # and for each of your dependent executable/library targets: + target_link_libraries( ${wxWidgets_LIBRARIES}) + endif() + + + +If wxWidgets is required (i.e., not an optional part): + +:: + + find_package(wxWidgets REQUIRED gl core base OPTIONAL_COMPONENTS net) + include(${wxWidgets_USE_FILE}) + # and for each of your dependent executable/library targets: + target_link_libraries( ${wxWidgets_LIBRARIES}) + +Imported targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 3.27 + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``wxWidgets::wxWidgets`` + An interface library providing usage requirements for the found components. +#]=======================================================================] + +# +# FIXME: check this and provide a correct sample usage... +# Remember to connect back to the upper text. +# Sample usage with monolithic wx build: +# +# find_package(wxWidgets COMPONENTS mono) +# ... + +# NOTES +# +# This module has been tested on the WIN32 platform with wxWidgets +# 2.6.2, 2.6.3, and 2.5.3. However, it has been designed to +# easily extend support to all possible builds, e.g., static/shared, +# debug/release, unicode, universal, multilib/monolithic, etc.. +# +# If you want to use the module and your build type is not supported +# out-of-the-box, please contact me to exchange information on how +# your system is setup and I'll try to add support for it. +# +# AUTHOR +# +# Miguel A. Figueroa-Villanueva (miguelf at ieee dot org). +# Jan Woetzel (jw at mip.informatik.uni-kiel.de). +# +# Based on previous works of: +# Jan Woetzel (FindwxWindows.cmake), +# Jorgen Bodde and Jerry Fath (FindwxWin.cmake). + +# TODO/ideas +# +# (1) Option/Setting to use all available wx libs +# In contrast to expert developer who lists the +# minimal set of required libs in wxWidgets_USE_LIBS +# there is the newbie user: +# - who just wants to link against WX with more 'magic' +# - doesn't know the internal structure of WX or how it was built, +# in particular if it is monolithic or not +# - want to link against all available WX libs +# Basically, the intent here is to mimic what wx-config would do by +# default (i.e., `wx-config --libs`). +# +# Possible solution: +# Add a reserved keyword "std" that initializes to what wx-config +# would default to. If the user has not set the wxWidgets_USE_LIBS, +# default to "std" instead of "base core" as it is now. To implement +# "std" will basically boil down to a FOR_EACH lib-FOUND, but maybe +# checking whether a minimal set was found. + + +# FIXME: This and all the DBG_MSG calls should be removed after the +# module stabilizes. +# +# Helper macro to control the debugging output globally. There are +# two versions for controlling how verbose your output should be. +macro(DBG_MSG _MSG) +# message(STATUS +# "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}") +endmacro() +macro(DBG_MSG_V _MSG) +# message(STATUS +# "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}") +endmacro() + +# Clear return values in case the module is loaded more than once. +set(wxWidgets_FOUND FALSE) +set(wxWidgets_INCLUDE_DIRS "") +set(wxWidgets_LIBRARIES "") +set(wxWidgets_LIBRARY_DIRS "") +set(wxWidgets_CXX_FLAGS "") + +# DEPRECATED: This is a patch to support the DEPRECATED use of +# wxWidgets_USE_LIBS. +# +# If wxWidgets_USE_LIBS is set: +# - if using , then override wxWidgets_USE_LIBS +# - else set wxWidgets_FIND_COMPONENTS to wxWidgets_USE_LIBS +if(wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS) + set(wxWidgets_FIND_COMPONENTS ${wxWidgets_USE_LIBS}) +endif() +DBG_MSG("wxWidgets_FIND_COMPONENTS : ${wxWidgets_FIND_COMPONENTS}") + +# Add the convenience use file if available. +# +# Get dir of this file which may reside in: +# - CMAKE_MAKE_ROOT/Modules on CMake installation +# - CMAKE_MODULE_PATH if user prefers his own specialized version +set(wxWidgets_USE_FILE "") +get_filename_component( + wxWidgets_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) +# Prefer an existing customized version, but the user might override +# the FindwxWidgets module and not the UsewxWidgets one. +if(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") + set(wxWidgets_USE_FILE + "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") +else() + set(wxWidgets_USE_FILE UsewxWidgets) +endif() + +# Known wxWidgets versions. +set(wx_versions 3.3 3.2 3.1 3.0 2.9 2.8 2.7 2.6 2.5) + +macro(wx_extract_version) + unset(_wx_filename) + find_file(_wx_filename wx/version.h PATHS ${wxWidgets_INCLUDE_DIRS} NO_DEFAULT_PATH) + dbg_msg("_wx_filename: ${_wx_filename}") + + if(NOT _wx_filename) + message(FATAL_ERROR "wxWidgets wx/version.h file not found in ${wxWidgets_INCLUDE_DIRS}.") + endif() + + file(READ "${_wx_filename}" _wx_version_h) + unset(_wx_filename CACHE) + + string(REGEX REPLACE "^(.*\n)?#define +wxMAJOR_VERSION +([0-9]+).*" + "\\2" wxWidgets_VERSION_MAJOR "${_wx_version_h}" ) + string(REGEX REPLACE "^(.*\n)?#define +wxMINOR_VERSION +([0-9]+).*" + "\\2" wxWidgets_VERSION_MINOR "${_wx_version_h}" ) + string(REGEX REPLACE "^(.*\n)?#define +wxRELEASE_NUMBER +([0-9]+).*" + "\\2" wxWidgets_VERSION_PATCH "${_wx_version_h}" ) + set(wxWidgets_VERSION_STRING + "${wxWidgets_VERSION_MAJOR}.${wxWidgets_VERSION_MINOR}.${wxWidgets_VERSION_PATCH}" ) + dbg_msg("wxWidgets_VERSION_STRING: ${wxWidgets_VERSION_STRING}") +endmacro() + +#===================================================================== +# Determine whether unix or win32 paths should be used +#===================================================================== +if(WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT CMAKE_CROSSCOMPILING) + set(wxWidgets_FIND_STYLE "win32") +else() + set(wxWidgets_FIND_STYLE "unix") +endif() + +#===================================================================== +# WIN32_FIND_STYLE +#===================================================================== +if(wxWidgets_FIND_STYLE STREQUAL "win32") + # Useful common wx libs needed by almost all components. + set(wxWidgets_COMMON_LIBRARIES png tiff jpeg zlib regex expat) + + # DEPRECATED: Use find_package(wxWidgets COMPONENTS mono) instead. + if(NOT wxWidgets_FIND_COMPONENTS) + if(wxWidgets_USE_MONOLITHIC) + set(wxWidgets_FIND_COMPONENTS mono) + else() + set(wxWidgets_FIND_COMPONENTS core base) # this is default + endif() + endif() + + # Add the common (usually required libs) unless + # wxWidgets_EXCLUDE_COMMON_LIBRARIES has been set. + if(NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES) + list(APPEND wxWidgets_FIND_COMPONENTS + ${wxWidgets_COMMON_LIBRARIES}) + endif() + + #------------------------------------------------------------------- + # WIN32: Helper MACROS + #------------------------------------------------------------------- + # + # Get filename components for a configuration. For example, + # if _CONFIGURATION = mswunivud, then _PF="msw", _UNV=univ, _UCD=u _DBG=d + # if _CONFIGURATION = mswu, then _PF="msw", _UNV="", _UCD=u _DBG="" + # + macro(WX_GET_NAME_COMPONENTS _CONFIGURATION _PF _UNV _UCD _DBG) + DBG_MSG_V(${_CONFIGURATION}) + string(REGEX MATCH "univ" ${_UNV} "${_CONFIGURATION}") + string(REGEX REPLACE "[msw|qt].*(u)[d]*$" "u" ${_UCD} "${_CONFIGURATION}") + if(${_UCD} STREQUAL ${_CONFIGURATION}) + set(${_UCD} "") + endif() + string(REGEX MATCH "d$" ${_DBG} "${_CONFIGURATION}") + string(REGEX MATCH "^[msw|qt]*" ${_PF} "${_CONFIGURATION}") + endmacro() + + # + # Find libraries associated to a configuration. + # + macro(WX_FIND_LIBS _PF _UNV _UCD _DBG _VER) + DBG_MSG_V("m_unv = ${_UNV}") + DBG_MSG_V("m_ucd = ${_UCD}") + DBG_MSG_V("m_dbg = ${_DBG}") + DBG_MSG_V("m_ver = ${_VER}") + + # FIXME: What if both regex libs are available. regex should be + # found outside the loop and only wx${LIB}${_UCD}${_DBG}. + # Find wxWidgets common libraries. + foreach(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla) + find_library(WX_${LIB}${_DBG} + NAMES + wx${LIB}${_UCD}${_DBG} # for regex + wx${LIB}${_DBG} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + mark_as_advanced(WX_${LIB}${_DBG}) + endforeach() + + # Find wxWidgets multilib base libraries. + find_library(WX_base${_DBG} + NAMES wxbase${_VER}${_UCD}${_DBG} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + mark_as_advanced(WX_base${_DBG}) + foreach(LIB net odbc xml) + find_library(WX_${LIB}${_DBG} + NAMES wxbase${_VER}${_UCD}${_DBG}_${LIB} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + mark_as_advanced(WX_${LIB}${_DBG}) + endforeach() + + # Find wxWidgets monolithic library. + find_library(WX_mono${_DBG} + NAMES wx${_PF}${_UNV}${_VER}${_UCD}${_DBG} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + mark_as_advanced(WX_mono${_DBG}) + + # Find wxWidgets multilib libraries. + foreach(LIB core adv aui html media xrc dbgrid gl qa richtext + stc ribbon propgrid webview) + find_library(WX_${LIB}${_DBG} + NAMES wx${_PF}${_UNV}${_VER}${_UCD}${_DBG}_${LIB} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + mark_as_advanced(WX_${LIB}${_DBG}) + endforeach() + endmacro() + + # + # Clear all library paths, so that FIND_LIBRARY refinds them. + # + # Clear a lib, reset its found flag, and mark as advanced. + macro(WX_CLEAR_LIB _LIB) + set(${_LIB} "${_LIB}-NOTFOUND" CACHE FILEPATH "Cleared." FORCE) + set(${_LIB}_FOUND FALSE) + mark_as_advanced(${_LIB}) + endmacro() + # Clear all debug or release library paths (arguments are "d" or ""). + macro(WX_CLEAR_ALL_LIBS _DBG) + # Clear wxWidgets common libraries. + foreach(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla) + WX_CLEAR_LIB(WX_${LIB}${_DBG}) + endforeach() + + # Clear wxWidgets multilib base libraries. + WX_CLEAR_LIB(WX_base${_DBG}) + foreach(LIB net odbc xml) + WX_CLEAR_LIB(WX_${LIB}${_DBG}) + endforeach() + + # Clear wxWidgets monolithic library. + WX_CLEAR_LIB(WX_mono${_DBG}) + + # Clear wxWidgets multilib libraries. + foreach(LIB core adv aui html media xrc dbgrid gl qa richtext + webview stc ribbon propgrid) + WX_CLEAR_LIB(WX_${LIB}${_DBG}) + endforeach() + endmacro() + # Clear all wxWidgets debug libraries. + macro(WX_CLEAR_ALL_DBG_LIBS) + WX_CLEAR_ALL_LIBS("d") + endmacro() + # Clear all wxWidgets release libraries. + macro(WX_CLEAR_ALL_REL_LIBS) + WX_CLEAR_ALL_LIBS("") + endmacro() + + # + # Set the wxWidgets_LIBRARIES variable. + # Also, Sets output variable wxWidgets_FOUND to FALSE if it fails. + # + macro(WX_SET_LIBRARIES _LIBS _DBG) + DBG_MSG_V("Looking for ${${_LIBS}}") + if(WX_USE_REL_AND_DBG) + foreach(LIB ${${_LIBS}}) + DBG_MSG_V("Searching for ${LIB} and ${LIB}d") + DBG_MSG_V("WX_${LIB} : ${WX_${LIB}}") + DBG_MSG_V("WX_${LIB}d : ${WX_${LIB}d}") + if(WX_${LIB} AND WX_${LIB}d) + DBG_MSG_V("Found ${LIB} and ${LIB}d") + list(APPEND wxWidgets_LIBRARIES + debug ${WX_${LIB}d} optimized ${WX_${LIB}} + ) + set(wxWidgets_${LIB}_FOUND TRUE) + elseif(NOT wxWidgets_FIND_REQUIRED_${LIB}) + DBG_MSG_V("- ignored optional missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}") + else() + DBG_MSG_V("- not found due to missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}") + set(wxWidgets_FOUND FALSE) + endif() + endforeach() + else() + foreach(LIB ${${_LIBS}}) + DBG_MSG_V("Searching for ${LIB}${_DBG}") + DBG_MSG_V("WX_${LIB}${_DBG} : ${WX_${LIB}${_DBG}}") + if(WX_${LIB}${_DBG}) + DBG_MSG_V("Found ${LIB}${_DBG}") + list(APPEND wxWidgets_LIBRARIES ${WX_${LIB}${_DBG}}) + set(wxWidgets_${LIB}_FOUND TRUE) + elseif(NOT wxWidgets_FIND_REQUIRED_${LIB}) + DBG_MSG_V("- ignored optional missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}") + else() + DBG_MSG_V("- not found due to missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}") + set(wxWidgets_FOUND FALSE) + endif() + endforeach() + endif() + + DBG_MSG_V("OpenGL") + list(FIND ${_LIBS} gl WX_USE_GL) + if(NOT WX_USE_GL EQUAL -1) + DBG_MSG_V("- is required.") + list(APPEND wxWidgets_LIBRARIES opengl32 glu32) + endif() + + list(APPEND wxWidgets_LIBRARIES winmm comctl32 uuid oleacc uxtheme rpcrt4 shlwapi version wsock32) + endmacro() + + #------------------------------------------------------------------- + # WIN32: Start actual work. + #------------------------------------------------------------------- + + set(wx_paths "wxWidgets") + foreach(version ${wx_versions}) + foreach(patch RANGE 15 0 -1) + list(APPEND wx_paths "wxWidgets-${version}.${patch}") + endforeach() + endforeach() + + # Look for an installation tree. + find_path(wxWidgets_ROOT_DIR + NAMES include/wx/wx.h + PATHS + ENV wxWidgets_ROOT_DIR + ENV WXWIN + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWidgets_is1;Inno Setup: App Path]" # WX 2.6.x + C:/ + D:/ + ENV ProgramFiles + PATH_SUFFIXES + ${wx_paths} + DOC "wxWidgets base/installation directory" + ) + + # If wxWidgets_ROOT_DIR changed, clear lib dir. + if(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR) + if(NOT wxWidgets_LIB_DIR OR WX_ROOT_DIR) + set(wxWidgets_LIB_DIR "wxWidgets_LIB_DIR-NOTFOUND" + CACHE PATH "Cleared." FORCE) + endif() + set(WX_ROOT_DIR ${wxWidgets_ROOT_DIR} + CACHE INTERNAL "wxWidgets_ROOT_DIR") + endif() + + if(WX_ROOT_DIR) + # Select one default tree inside the already determined wx tree. + # Prefer static/shared order usually consistent with build + # settings. + set(_WX_TOOL "") + set(_WX_TOOLVER "") + set(_WX_ARCH "") + if(MINGW) + set(_WX_TOOL gcc) + elseif(MSVC) + set(_WX_TOOL vc) + set(_WX_TOOLVER ${MSVC_TOOLSET_VERSION}) + # support for a lib/vc14x_x64_dll/ path from wxW 3.1.3 distribution + string(REGEX REPLACE ".$" "x" _WX_TOOLVERx ${_WX_TOOLVER}) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_WX_ARCH _x64) + endif() + endif() + if(BUILD_SHARED_LIBS) + find_path(wxWidgets_LIB_DIR + NAMES + qtu/wx/setup.h + qtud/wx/setup.h + msw/wx/setup.h + mswd/wx/setup.h + mswu/wx/setup.h + mswud/wx/setup.h + mswuniv/wx/setup.h + mswunivd/wx/setup.h + mswunivu/wx/setup.h + mswunivud/wx/setup.h + PATHS + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}_xp${_WX_ARCH}_dll # prefer shared + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}${_WX_ARCH}_dll # prefer shared + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}_xp${_WX_ARCH}_dll # prefer shared + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}${_WX_ARCH}_dll # prefer shared + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_ARCH}_dll # prefer shared + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}_xp${_WX_ARCH}_lib + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}${_WX_ARCH}_lib + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}_xp${_WX_ARCH}_lib + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}${_WX_ARCH}_lib + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_ARCH}_lib + DOC "Path to wxWidgets libraries" + NO_DEFAULT_PATH + ) + else() + find_path(wxWidgets_LIB_DIR + NAMES + qtu/wx/setup.h + qtud/wx/setup.h + msw/wx/setup.h + mswd/wx/setup.h + mswu/wx/setup.h + mswud/wx/setup.h + mswuniv/wx/setup.h + mswunivd/wx/setup.h + mswunivu/wx/setup.h + mswunivud/wx/setup.h + PATHS + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}_xp${_WX_ARCH}_lib # prefer static + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}${_WX_ARCH}_lib # prefer static + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}_xp${_WX_ARCH}_lib # prefer static + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}${_WX_ARCH}_lib # prefer static + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_ARCH}_lib # prefer static + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}_xp${_WX_ARCH}_dll + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}${_WX_ARCH}_dll + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}_xp${_WX_ARCH}_dll + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}${_WX_ARCH}_dll + ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_ARCH}_dll + DOC "Path to wxWidgets libraries" + NO_DEFAULT_PATH + ) + endif() + unset(_WX_TOOL) + unset(_WX_TOOLVER) + unset(_WX_ARCH) + + # If wxWidgets_LIB_DIR changed, clear all libraries. + if(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR) + set(WX_LIB_DIR ${wxWidgets_LIB_DIR} CACHE INTERNAL "wxWidgets_LIB_DIR") + WX_CLEAR_ALL_DBG_LIBS() + WX_CLEAR_ALL_REL_LIBS() + endif() + + if(WX_LIB_DIR) + # If building shared libs, define WXUSINGDLL to use dllimport. + if(WX_LIB_DIR MATCHES "[dD][lL][lL]") + set(wxWidgets_DEFINITIONS WXUSINGDLL) + DBG_MSG_V("detected SHARED/DLL tree WX_LIB_DIR=${WX_LIB_DIR}") + endif() + + # Search for available configuration types. + foreach(CFG mswunivud mswunivd mswud mswd mswunivu mswuniv mswu msw qt qtd qtu qtud) + set(WX_${CFG}_FOUND FALSE) + if(EXISTS ${WX_LIB_DIR}/${CFG}) + list(APPEND WX_CONFIGURATION_LIST ${CFG}) + set(WX_${CFG}_FOUND TRUE) + set(WX_CONFIGURATION ${CFG}) + endif() + endforeach() + DBG_MSG_V("WX_CONFIGURATION_LIST=${WX_CONFIGURATION_LIST}") + + if(WX_CONFIGURATION) + set(wxWidgets_FOUND TRUE) + + # If the selected configuration wasn't found force the default + # one. Otherwise, use it but still force a refresh for + # updating the doc string with the current list of available + # configurations. + if(NOT WX_${wxWidgets_CONFIGURATION}_FOUND) + set(wxWidgets_CONFIGURATION ${WX_CONFIGURATION} CACHE STRING + "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE) + else() + set(wxWidgets_CONFIGURATION ${wxWidgets_CONFIGURATION} CACHE STRING + "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE) + endif() + + # If release config selected, and both release/debug exist. + if(WX_${wxWidgets_CONFIGURATION}d_FOUND) + option(wxWidgets_USE_REL_AND_DBG + "Use release and debug configurations?" TRUE) + set(WX_USE_REL_AND_DBG ${wxWidgets_USE_REL_AND_DBG}) + else() + # If the option exists (already in cache), force it false. + if(wxWidgets_USE_REL_AND_DBG) + set(wxWidgets_USE_REL_AND_DBG FALSE CACHE BOOL + "No ${wxWidgets_CONFIGURATION}d found." FORCE) + endif() + set(WX_USE_REL_AND_DBG FALSE) + endif() + + # Get configuration parameters from the name. + WX_GET_NAME_COMPONENTS(${wxWidgets_CONFIGURATION} PF UNV UCD DBG) + + # Set wxWidgets lib setup include directory. + if(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h) + set(wxWidgets_INCLUDE_DIRS + ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}) + else() + DBG_MSG("wxWidgets_FOUND FALSE because ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h does not exist.") + set(wxWidgets_FOUND FALSE) + endif() + + # Set wxWidgets main include directory. + if(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h) + list(APPEND wxWidgets_INCLUDE_DIRS ${WX_ROOT_DIR}/include) + else() + DBG_MSG("wxWidgets_FOUND FALSE because WX_ROOT_DIR=${WX_ROOT_DIR} has no ${WX_ROOT_DIR}/include/wx/wx.h") + set(wxWidgets_FOUND FALSE) + endif() + + # Get version number. + wx_extract_version() + set(VER "${wxWidgets_VERSION_MAJOR}${wxWidgets_VERSION_MINOR}") + + # Find wxWidgets libraries. + WX_FIND_LIBS("${PF}" "${UNV}" "${UCD}" "${DBG}" "${VER}") + if(WX_USE_REL_AND_DBG) + WX_FIND_LIBS("${PF}" "${UNV}" "${UCD}" "d" "${VER}") + endif() + + # Settings for requested libs (i.e., include dir, libraries, etc.). + WX_SET_LIBRARIES(wxWidgets_FIND_COMPONENTS "${DBG}") + + # Add necessary definitions for unicode builds + if("${UCD}" STREQUAL "u") + list(APPEND wxWidgets_DEFINITIONS UNICODE _UNICODE) + endif() + + # Add necessary definitions for debug builds + set(wxWidgets_DEFINITIONS_DEBUG _DEBUG __WXDEBUG__) + + endif() + endif() + endif() + + if(MINGW AND NOT wxWidgets_FOUND) + # Try unix search mode as well. + set(wxWidgets_FIND_STYLE "unix") + dbg_msg_v("wxWidgets_FIND_STYLE changed to unix") + endif() +endif() + +#===================================================================== +# UNIX_FIND_STYLE +#===================================================================== +if(wxWidgets_FIND_STYLE STREQUAL "unix") + #----------------------------------------------------------------- + # UNIX: Helper MACROS + #----------------------------------------------------------------- + # + # Set the default values based on "wx-config --selected-config". + # + macro(WX_CONFIG_SELECT_GET_DEFAULT) + execute_process( + COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" + ${wxWidgets_CONFIG_OPTIONS} --selected-config + OUTPUT_VARIABLE _wx_selected_config + RESULT_VARIABLE _wx_result + ERROR_QUIET + ) + if(_wx_result EQUAL 0) + foreach(_opt_name debug static unicode universal) + string(TOUPPER ${_opt_name} _upper_opt_name) + if(_wx_selected_config MATCHES "${_opt_name}") + set(wxWidgets_DEFAULT_${_upper_opt_name} ON) + else() + set(wxWidgets_DEFAULT_${_upper_opt_name} OFF) + endif() + endforeach() + else() + foreach(_upper_opt_name DEBUG STATIC UNICODE UNIVERSAL) + set(wxWidgets_DEFAULT_${_upper_opt_name} OFF) + endforeach() + endif() + endmacro() + + # + # Query a boolean configuration option to determine if the system + # has both builds available. If so, provide the selection option + # to the user. + # + macro(WX_CONFIG_SELECT_QUERY_BOOL _OPT_NAME _OPT_HELP) + execute_process( + COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" + ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=yes + RESULT_VARIABLE _wx_result_yes + OUTPUT_QUIET + ERROR_QUIET + ) + execute_process( + COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" + ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=no + RESULT_VARIABLE _wx_result_no + OUTPUT_QUIET + ERROR_QUIET + ) + string(TOUPPER ${_OPT_NAME} _UPPER_OPT_NAME) + if(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0) + option(wxWidgets_USE_${_UPPER_OPT_NAME} + ${_OPT_HELP} ${wxWidgets_DEFAULT_${_UPPER_OPT_NAME}}) + else() + # If option exists (already in cache), force to available one. + if(DEFINED wxWidgets_USE_${_UPPER_OPT_NAME}) + if(_wx_result_yes EQUAL 0) + set(wxWidgets_USE_${_UPPER_OPT_NAME} ON CACHE BOOL ${_OPT_HELP} FORCE) + else() + set(wxWidgets_USE_${_UPPER_OPT_NAME} OFF CACHE BOOL ${_OPT_HELP} FORCE) + endif() + endif() + endif() + endmacro() + + # + # Set wxWidgets_SELECT_OPTIONS to wx-config options for selecting + # among multiple builds. + # + macro(WX_CONFIG_SELECT_SET_OPTIONS) + set(wxWidgets_SELECT_OPTIONS ${wxWidgets_CONFIG_OPTIONS}) + foreach(_opt_name debug static unicode universal) + string(TOUPPER ${_opt_name} _upper_opt_name) + if(DEFINED wxWidgets_USE_${_upper_opt_name}) + if(wxWidgets_USE_${_upper_opt_name}) + list(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=yes) + else() + list(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=no) + endif() + endif() + endforeach() + endmacro() + + #----------------------------------------------------------------- + # UNIX: Start actual work. + #----------------------------------------------------------------- + # Support cross-compiling, only search in the target platform. + # + # Look for wx-config -- this can be set in the environment, + # or try versioned and toolchain-versioned variants of the -config + # executable as well. + set(wx_config_names "wx-config") + foreach(version ${wx_versions}) + list(APPEND wx_config_names "wx-config-${version}" "wxgtk3u-${version}-config" "wxgtk2u-${version}-config") + endforeach() + find_program(wxWidgets_CONFIG_EXECUTABLE + NAMES + $ENV{WX_CONFIG} + ${wx_config_names} + DOC "Location of wxWidgets library configuration provider binary (wx-config)." + ONLY_CMAKE_FIND_ROOT_PATH + ) + + if(wxWidgets_CONFIG_EXECUTABLE) + set(wxWidgets_FOUND TRUE) + + # get defaults based on "wx-config --selected-config" + WX_CONFIG_SELECT_GET_DEFAULT() + + # for each option: if both builds are available, provide option + WX_CONFIG_SELECT_QUERY_BOOL(debug "Use debug build?") + WX_CONFIG_SELECT_QUERY_BOOL(unicode "Use unicode build?") + WX_CONFIG_SELECT_QUERY_BOOL(universal "Use universal build?") + WX_CONFIG_SELECT_QUERY_BOOL(static "Link libraries statically?") + + # process selection to set wxWidgets_SELECT_OPTIONS + WX_CONFIG_SELECT_SET_OPTIONS() + DBG_MSG("wxWidgets_SELECT_OPTIONS=${wxWidgets_SELECT_OPTIONS}") + + # run the wx-config program to get cxxflags + execute_process( + COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" + ${wxWidgets_SELECT_OPTIONS} --cxxflags + OUTPUT_VARIABLE wxWidgets_CXX_FLAGS + RESULT_VARIABLE RET + ERROR_QUIET + ) + if(RET EQUAL 0) + string(STRIP "${wxWidgets_CXX_FLAGS}" wxWidgets_CXX_FLAGS) + separate_arguments(wxWidgets_CXX_FLAGS_LIST NATIVE_COMMAND "${wxWidgets_CXX_FLAGS}") + + DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}") + + # parse definitions and include dirs from cxxflags + # drop the -D and -I prefixes + set(wxWidgets_CXX_FLAGS) + foreach(arg IN LISTS wxWidgets_CXX_FLAGS_LIST) + if("${arg}" MATCHES "^-I(.*)$") + # include directory + list(APPEND wxWidgets_INCLUDE_DIRS "${CMAKE_MATCH_1}") + elseif("${arg}" MATCHES "^-D(.*)$") + # compile definition + list(APPEND wxWidgets_DEFINITIONS "${CMAKE_MATCH_1}") + else() + list(APPEND wxWidgets_CXX_FLAGS "${arg}") + endif() + endforeach() + + DBG_MSG_V("wxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}") + DBG_MSG_V("wxWidgets_INCLUDE_DIRS=${wxWidgets_INCLUDE_DIRS}") + DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}") + + else() + set(wxWidgets_FOUND FALSE) + DBG_MSG_V( + "${wxWidgets_CONFIG_EXECUTABLE} --cxxflags FAILED with RET=${RET}") + endif() + + # run the wx-config program to get the libs + # - NOTE: wx-config doesn't verify that the libs requested exist + # it just produces the names. Maybe a TRY_COMPILE would + # be useful here... + unset(_cmp_req) + unset(_cmp_opt) + foreach(_cmp IN LISTS wxWidgets_FIND_COMPONENTS) + if(wxWidgets_FIND_REQUIRED_${_cmp}) + list(APPEND _cmp_req "${_cmp}") + else() + list(APPEND _cmp_opt "${_cmp}") + endif() + endforeach() + DBG_MSG_V("wxWidgets required components : ${_cmp_req}") + DBG_MSG_V("wxWidgets optional components : ${_cmp_opt}") + if(DEFINED _cmp_opt) + string(REPLACE ";" "," _cmp_opt "--optional-libs ${_cmp_opt}") + endif() + string(REPLACE ";" "," _cmp_req "${_cmp_req}") + execute_process( + COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" + ${wxWidgets_SELECT_OPTIONS} --libs ${_cmp_req} ${_cmp_opt} + OUTPUT_VARIABLE wxWidgets_LIBRARIES + RESULT_VARIABLE RET + ERROR_QUIET + ) + if(RET EQUAL 0) + string(STRIP "${wxWidgets_LIBRARIES}" wxWidgets_LIBRARIES) + separate_arguments(wxWidgets_LIBRARIES) + string(REPLACE "-framework;" "-framework " + wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") + string(REPLACE "-weak_framework;" "-weak_framework " + wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") + string(REPLACE "-arch;" "-arch " + wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") + string(REPLACE "-isysroot;" "-isysroot " + wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") + + # extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES) + string(REGEX MATCHALL "-L[^;]+" + wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARIES}") + string(REGEX REPLACE "-L([^;]+)" "\\1" + wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARY_DIRS}") + + DBG_MSG_V("wxWidgets_LIBRARIES=${wxWidgets_LIBRARIES}") + DBG_MSG_V("wxWidgets_LIBRARY_DIRS=${wxWidgets_LIBRARY_DIRS}") + + else() + set(wxWidgets_FOUND FALSE) + DBG_MSG("${wxWidgets_CONFIG_EXECUTABLE} --libs ${_cmp_req} ${_cmp_opt} FAILED with RET=${RET}") + endif() + unset(_cmp_req) + unset(_cmp_opt) + endif() + + # When using wx-config in MSYS, the include paths are UNIX style paths which may or may + # not work correctly depending on you MSYS/MinGW configuration. CMake expects native + # paths internally. + if(wxWidgets_FOUND AND MSYS) + find_program(_cygpath_exe cygpath ONLY_CMAKE_FIND_ROOT_PATH) + DBG_MSG_V("_cygpath_exe: ${_cygpath_exe}") + if(_cygpath_exe) + set(_tmp_path "") + foreach(_path ${wxWidgets_INCLUDE_DIRS}) + execute_process( + COMMAND cygpath -w ${_path} + OUTPUT_VARIABLE _native_path + RESULT_VARIABLE _retv + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) + if(_retv EQUAL 0) + file(TO_CMAKE_PATH ${_native_path} _native_path) + DBG_MSG_V("Path ${_path} converted to ${_native_path}") + string(APPEND _tmp_path " ${_native_path}") + endif() + endforeach() + DBG_MSG("Setting wxWidgets_INCLUDE_DIRS = ${_tmp_path}") + set(wxWidgets_INCLUDE_DIRS ${_tmp_path}) + separate_arguments(wxWidgets_INCLUDE_DIRS) + list(REMOVE_ITEM wxWidgets_INCLUDE_DIRS "") + + set(_tmp_path "") + foreach(_path ${wxWidgets_LIBRARY_DIRS}) + execute_process( + COMMAND cygpath -w ${_path} + OUTPUT_VARIABLE _native_path + RESULT_VARIABLE _retv + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) + if(_retv EQUAL 0) + file(TO_CMAKE_PATH ${_native_path} _native_path) + DBG_MSG_V("Path ${_path} converted to ${_native_path}") + string(APPEND _tmp_path " ${_native_path}") + endif() + endforeach() + DBG_MSG("Setting wxWidgets_LIBRARY_DIRS = ${_tmp_path}") + set(wxWidgets_LIBRARY_DIRS ${_tmp_path}) + separate_arguments(wxWidgets_LIBRARY_DIRS) + list(REMOVE_ITEM wxWidgets_LIBRARY_DIRS "") + endif() + unset(_cygpath_exe CACHE) + endif() +endif() + +# Check that all libraries are present, as wx-config does not check it +set(_wx_lib_missing "") +foreach(_wx_lib_ ${wxWidgets_LIBRARIES}) + if("${_wx_lib_}" MATCHES "^-l(.*)") + set(_wx_lib_name "${CMAKE_MATCH_1}") + unset(_wx_lib_found CACHE) + find_library(_wx_lib_found NAMES ${_wx_lib_name} HINTS ${wxWidgets_LIBRARY_DIRS}) + if(_wx_lib_found STREQUAL _wx_lib_found-NOTFOUND) + list(APPEND _wx_lib_missing ${_wx_lib_name}) + endif() + unset(_wx_lib_found CACHE) + endif() +endforeach() + +if (_wx_lib_missing) + string(REPLACE ";" " " _wx_lib_missing "${_wx_lib_missing}") + DBG_MSG_V("wxWidgets not found due to following missing libraries: ${_wx_lib_missing}") + set(wxWidgets_FOUND FALSE) + unset(wxWidgets_LIBRARIES) +endif() +unset(_wx_lib_missing) + +# Check if a specific version was requested by find_package(). +if(wxWidgets_FOUND) + wx_extract_version() +endif() + +# Debug output: +DBG_MSG("wxWidgets_FOUND : ${wxWidgets_FOUND}") +DBG_MSG("wxWidgets_INCLUDE_DIRS : ${wxWidgets_INCLUDE_DIRS}") +DBG_MSG("wxWidgets_LIBRARY_DIRS : ${wxWidgets_LIBRARY_DIRS}") +DBG_MSG("wxWidgets_LIBRARIES : ${wxWidgets_LIBRARIES}") +DBG_MSG("wxWidgets_CXX_FLAGS : ${wxWidgets_CXX_FLAGS}") +DBG_MSG("wxWidgets_USE_FILE : ${wxWidgets_USE_FILE}") + +#===================================================================== +#===================================================================== + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs_SLIC3R.cmake) + +# FIXME: set wxWidgets__FOUND for wx-config branch +# and use HANDLE_COMPONENTS on Unix too +if(wxWidgets_FIND_STYLE STREQUAL "win32") + set(wxWidgets_HANDLE_COMPONENTS "HANDLE_COMPONENTS") +endif() + +find_package_handle_standard_args(wxWidgets + REQUIRED_VARS wxWidgets_LIBRARIES wxWidgets_INCLUDE_DIRS + VERSION_VAR wxWidgets_VERSION_STRING + ${wxWidgets_HANDLE_COMPONENTS} + ) +unset(wxWidgets_HANDLE_COMPONENTS) + +if(wxWidgets_FOUND AND NOT TARGET wxWidgets::wxWidgets) + add_library(wxWidgets::wxWidgets INTERFACE IMPORTED) + target_link_libraries(wxWidgets::wxWidgets INTERFACE ${wxWidgets_LIBRARIES}) + target_link_directories(wxWidgets::wxWidgets INTERFACE ${wxWidgets_LIBRARY_DIRS}) + target_include_directories(wxWidgets::wxWidgets INTERFACE ${wxWidgets_INCLUDE_DIRS}) + target_compile_options(wxWidgets::wxWidgets INTERFACE ${wxWidgets_CXX_FLAGS}) + target_compile_definitions(wxWidgets::wxWidgets INTERFACE ${wxWidgets_DEFINITIONS}) + # FIXME: Add "$<$:${wxWidgets_DEFINITIONS_DEBUG}>" + # if the debug library variant is available. +endif() + +#===================================================================== +# Macros for use in wxWidgets apps. +# - This module will not fail to find wxWidgets based on the code +# below. Hence, it's required to check for validity of: +# +# wxWidgets_wxrc_EXECUTABLE +#===================================================================== + +# Resource file compiler. +find_program(wxWidgets_wxrc_EXECUTABLE + NAMES $ENV{WXRC_CMD} wxrc + PATHS ${wxWidgets_ROOT_DIR}/utils/wxrc/vc_msw + DOC "Location of wxWidgets resource file compiler binary (wxrc)" + ) + +# +# WX_SPLIT_ARGUMENTS_ON( ...) +# +# Sets and to contain arguments to the left and right, +# respectively, of . +# +# Example usage: +# function(WXWIDGETS_ADD_RESOURCES outfiles) +# WX_SPLIT_ARGUMENTS_ON(OPTIONS wxrc_files wxrc_options ${ARGN}) +# ... +# endfunction() +# +# WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o file.C) +# +# NOTE: This is a generic piece of code that should be renamed to +# SPLIT_ARGUMENTS_ON and put in a file serving the same purpose as +# FindPackageStandardArgs.cmake. At the time of this writing +# FindQt4.cmake has a QT4_EXTRACT_OPTIONS, which I basically copied +# here a bit more generalized. So, there are already two find modules +# using this approach. +# +function(WX_SPLIT_ARGUMENTS_ON _keyword _leftvar _rightvar) + # FIXME: Document that the input variables will be cleared. + #list(APPEND ${_leftvar} "") + #list(APPEND ${_rightvar} "") + set(${_leftvar} "") + set(${_rightvar} "") + + set(_doing_right FALSE) + foreach(element ${ARGN}) + if("${element}" STREQUAL "${_keyword}") + set(_doing_right TRUE) + else() + if(_doing_right) + list(APPEND ${_rightvar} "${element}") + else() + list(APPEND ${_leftvar} "${element}") + endif() + endif() + endforeach() + + set(${_leftvar} ${${_leftvar}} PARENT_SCOPE) + set(${_rightvar} ${${_rightvar}} PARENT_SCOPE) +endfunction() + +# +# WX_GET_DEPENDENCIES_FROM_XML( +# +# +# +# +# +# ) +# +# FIXME: Add documentation here... +# +function(WX_GET_DEPENDENCIES_FROM_XML + _depends + _match_patt + _clean_patt + _xml_contents + _depends_path + ) + + string(REGEX MATCHALL + ${_match_patt} + dep_file_list + "${${_xml_contents}}" + ) + foreach(dep_file ${dep_file_list}) + string(REGEX REPLACE ${_clean_patt} "" dep_file "${dep_file}") + + # make the file have an absolute path + if(NOT IS_ABSOLUTE "${dep_file}") + set(dep_file "${${_depends_path}}/${dep_file}") + endif() + + # append file to dependency list + list(APPEND ${_depends} "${dep_file}") + endforeach() + + set(${_depends} ${${_depends}} PARENT_SCOPE) +endfunction() + +# +# WXWIDGETS_ADD_RESOURCES( +# OPTIONS [NO_CPP_CODE]) +# +# Adds a custom command for resource file compilation of the +# and appends the output files to . +# +# Example usages: +# WXWIDGETS_ADD_RESOURCES(sources xrc/main_frame.xrc) +# WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o altname.cxx) +# +function(WXWIDGETS_ADD_RESOURCES _outfiles) + WX_SPLIT_ARGUMENTS_ON(OPTIONS rc_file_list rc_options ${ARGN}) + + # Parse files for dependencies. + set(rc_file_list_abs "") + set(rc_depends "") + foreach(rc_file ${rc_file_list}) + get_filename_component(depends_path ${rc_file} PATH) + + get_filename_component(rc_file_abs ${rc_file} ABSOLUTE) + list(APPEND rc_file_list_abs "${rc_file_abs}") + + # All files have absolute paths or paths relative to the location + # of the rc file. + file(READ "${rc_file_abs}" rc_file_contents) + + # get bitmap/bitmap2 files + WX_GET_DEPENDENCIES_FROM_XML( + rc_depends + "]*>" + rc_file_contents + depends_path + ) + + # get url files + WX_GET_DEPENDENCIES_FROM_XML( + rc_depends + "]*>" + rc_file_contents + depends_path + ) + + # get wxIcon files + WX_GET_DEPENDENCIES_FROM_XML( + rc_depends + "]*class=\"wxIcon\"[^<]+" + "^]*>" + rc_file_contents + depends_path + ) + endforeach() + + # + # Parse options. + # + # If NO_CPP_CODE option specified, then produce .xrs file rather + # than a .cpp file (i.e., don't add the default --cpp-code option). + list(FIND rc_options NO_CPP_CODE index) + if(index EQUAL -1) + list(APPEND rc_options --cpp-code) + # wxrc's default output filename for cpp code. + set(outfile resource.cpp) + else() + list(REMOVE_AT rc_options ${index}) + # wxrc's default output filename for xrs file. + set(outfile resource.xrs) + endif() + + # Get output name for use in ADD_CUSTOM_COMMAND. + # - short option scanning + list(FIND rc_options -o index) + if(NOT index EQUAL -1) + math(EXPR filename_index "${index} + 1") + list(GET rc_options ${filename_index} outfile) + #list(REMOVE_AT rc_options ${index} ${filename_index}) + endif() + # - long option scanning + string(REGEX MATCH "--output=[^;]*" outfile_opt "${rc_options}") + if(outfile_opt) + string(REPLACE "--output=" "" outfile "${outfile_opt}") + endif() + #string(REGEX REPLACE "--output=[^;]*;?" "" rc_options "${rc_options}") + #string(REGEX REPLACE ";$" "" rc_options "${rc_options}") + + if(NOT IS_ABSOLUTE "${outfile}") + set(outfile "${CMAKE_CURRENT_BINARY_DIR}/${outfile}") + endif() + add_custom_command( + OUTPUT "${outfile}" + COMMAND ${wxWidgets_wxrc_EXECUTABLE} ${rc_options} ${rc_file_list_abs} + DEPENDS ${rc_file_list_abs} ${rc_depends} + ) + + # Add generated header to output file list. + list(FIND rc_options -e short_index) + list(FIND rc_options --extra-cpp-code long_index) + if(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1) + get_filename_component(outfile_ext ${outfile} EXT) + string(REPLACE "${outfile_ext}" ".h" outfile_header "${outfile}") + list(APPEND ${_outfiles} "${outfile_header}") + set_source_files_properties( + "${outfile_header}" PROPERTIES GENERATED TRUE + ) + endif() + + # Add generated file to output file list. + list(APPEND ${_outfiles} "${outfile}") + + set(${_outfiles} ${${_outfiles}} PARENT_SCOPE) +endfunction() diff --git a/doc/Dependencies.md b/doc/Dependencies.md index d8ced6318a..075f35b3a9 100644 --- a/doc/Dependencies.md +++ b/doc/Dependencies.md @@ -1,7 +1,7 @@ # Dependency report for PrusaSlicer ## Possible dynamic linking on Linux * zlib: Strict dependency required from the system, linked dynamically. Many other libs depend on zlib. -* wxWidgets: searches for wx-3.1 by default, but with cmake option `SLIC3R_WX_STABLE=ON` it will use wx-3.0 bundled with most distros. +* wxWidgets >= 3.2 * libcurl * tbb * boost diff --git a/doc/How to build - Linux et al.md b/doc/How to build - Linux et al.md index 81e6310c4a..0f4a6f7790 100644 --- a/doc/How to build - Linux et al.md +++ b/doc/How to build - Linux et al.md @@ -87,7 +87,6 @@ And that's it. It is now possible to run the freshly built PrusaSlicer binary: - `-DSLIC3R_ASAN=ON` enables gcc/clang address sanitizer (defaults to `OFF`, requires gcc>4.8 or clang>3.1) - `-DSLIC3R_GTK=3` to use GTK3 (defaults to `2`). Note that wxWidgets must be built against the same GTK version. - `-DSLIC3R_STATIC=ON` for static build (defaults to `OFF`) -- `-DSLIC3R_WX_STABLE=ON` to look for wxWidgets 3.0 (defaults to `OFF`) - `-DCMAKE_BUILD_TYPE=Debug` to build in debug mode (defaults to `Release`) - `-DSLIC3R_GUI=no` to build the console variant of PrusaSlicer @@ -101,13 +100,7 @@ As already mentioned above, dynamic linking of dependencies is possible, but Pru The list of dependencies can be easily obtained by inspecting the CMake scripts in the `deps/` directory. Some of the dependencies don't have to be as recent as the versions listed - generally versions available on conservative Linux distros such as Debian stable, Ubuntu LTS releases or Fedora are likely sufficient. If you decide to build this way, it is your responsibility to make sure that CMake finds all required dependencies. It is possible to look at your distribution PrusaSlicer package to see how the package maintainers solved the dependency issues. -#### wxWidgets -By default, PrusaSlicer looks for wxWidgets 3.1. Our build script in fact downloads specific patched version of wxWidgets. If you want to link against wxWidgets 3.0 (which are still provided by most distributions because wxWidgets 3.1 have not yet been declared stable), you must set `-DSLIC3R_WX_STABLE=ON` when running CMake. Note that while PrusaSlicer can be linked against wWidgets 3.0, the combination is not well tested and there might be bugs in the resulting application. - -When building on ubuntu 20.04 focal fossa, the package libwxgtk3.0-gtk3-dev needs to be installed instead of libwxgtk3.0-dev and you should use: -``` --DSLIC3R_WX_STABLE=1 -DSLIC3R_GTK=3 -``` +Note that you may need to use wxGTK with disabled EGL support for PrusaSlicer to work correctly: see [#9774](https://github.com/prusa3d/PrusaSlicer/issues/9774). ## Miscellaneous diff --git a/resources/profiles/Sovol/SV01_BLTouch_thumbnail.png b/resources/profiles/Sovol/SV01_BLTouch_thumbnail.png new file mode 100644 index 0000000000..035653cca3 Binary files /dev/null and b/resources/profiles/Sovol/SV01_BLTouch_thumbnail.png differ diff --git a/resources/profiles/Sovol/SV01_texture.svg b/resources/profiles/Sovol/SV01_texture.svg new file mode 100644 index 0000000000..506367c1ca --- /dev/null +++ b/resources/profiles/Sovol/SV01_texture.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Sovol/SV02_BLTouch_thumbnail.png b/resources/profiles/Sovol/SV02_BLTouch_thumbnail.png new file mode 100644 index 0000000000..8505529516 Binary files /dev/null and b/resources/profiles/Sovol/SV02_BLTouch_thumbnail.png differ diff --git a/resources/profiles/Sovol/SV02_texture.svg b/resources/profiles/Sovol/SV02_texture.svg new file mode 100644 index 0000000000..7dd6ea62f8 --- /dev/null +++ b/resources/profiles/Sovol/SV02_texture.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/profiles/Sovol/SV03_BLTouch_thumbnail.png b/resources/profiles/Sovol/SV03_BLTouch_thumbnail.png new file mode 100644 index 0000000000..f5c6409168 Binary files /dev/null and b/resources/profiles/Sovol/SV03_BLTouch_thumbnail.png differ diff --git a/resources/profiles/Sovol/SV04 Copy Mode_thumbnail.png b/resources/profiles/Sovol/SV04 Copy Mode_thumbnail.png new file mode 100644 index 0000000000..79d1fed3bf Binary files /dev/null and b/resources/profiles/Sovol/SV04 Copy Mode_thumbnail.png differ diff --git a/resources/profiles/Sovol/SV04 Dual Mode_thumbnail.png b/resources/profiles/Sovol/SV04 Dual Mode_thumbnail.png new file mode 100644 index 0000000000..79d1fed3bf Binary files /dev/null and b/resources/profiles/Sovol/SV04 Dual Mode_thumbnail.png differ diff --git a/resources/profiles/Sovol/SV04 Mirror Mode_thumbnail.png b/resources/profiles/Sovol/SV04 Mirror Mode_thumbnail.png new file mode 100644 index 0000000000..79d1fed3bf Binary files /dev/null and b/resources/profiles/Sovol/SV04 Mirror Mode_thumbnail.png differ diff --git a/resources/profiles/Sovol/SV04 Single Mode 01_thumbnail.png b/resources/profiles/Sovol/SV04 Single Mode 01_thumbnail.png new file mode 100644 index 0000000000..79d1fed3bf Binary files /dev/null and b/resources/profiles/Sovol/SV04 Single Mode 01_thumbnail.png differ diff --git a/resources/profiles/Sovol/SV04 Single Mode 02_thumbnail.png b/resources/profiles/Sovol/SV04 Single Mode 02_thumbnail.png new file mode 100644 index 0000000000..79d1fed3bf Binary files /dev/null and b/resources/profiles/Sovol/SV04 Single Mode 02_thumbnail.png differ diff --git a/resources/profiles/Sovol/SV05_texture.svg b/resources/profiles/Sovol/SV05_texture.svg new file mode 100644 index 0000000000..b39b378465 --- /dev/null +++ b/resources/profiles/Sovol/SV05_texture.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Sovol/Sovol.ini b/resources/profiles/Sovol/Sovol.ini new file mode 100644 index 0000000000..e8657703b0 --- /dev/null +++ b/resources/profiles/Sovol/Sovol.ini @@ -0,0 +1,4377 @@ +# Print profiles for the Sovol printers. + +[vendor] +# Vendor name will be shown by the Config Wizard. +name = SOVOL + +# 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 + + +# Where to get the updates from? +# config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Sovol/ +# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% + +# The printer models will be shown by the Configuration Wizard in this order, +# also the first model installed & the first nozzle installed will be activated after install. +# Printer model name will be shown by the installation wizard. + +[printer_model:SV06] +name = SV06 +variants = 0.4; 0.3; 0.6; 0.8 +technology = FFF +family = SV +bed_model = SV06_bed.stl +bed_texture = SV06_texture.svg +default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber + +[printer_model:SV01] +name = SV01 / SV01 BLTOUCH +variants = 0.4; 0.3; 0.6; 0.8 +technology = FFF +family = SV +bed_model = SV01_bed.stl +bed_texture = SV01_texture.svg +default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber + + +[printer_model:SV01 PRO] +name = SV01 PRO +variants = 0.4; 0.3; 0.6; 0.8 +technology = FFF +family = SV +bed_model = SV01_bed.stl +bed_texture = SV01PRO_texture.svg +default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber + +[printer_model:SV02] +name = SV02 / SV02 BLTOUCH +variants = 0.4; 0.3; 0.6; 0.8 +technology = FFF +family = SV +bed_model = SV01_bed.stl +bed_texture = SV02_texture.svg +default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber + + +[printer_model:SV03] +name = SV03 / SV02 BLTOUCH +variants = 0.4; 0.3; 0.6; 0.8 +technology = FFF +family = SV +bed_model = SV03_bed.stl +bed_texture = SV03_texture.svg +default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber + + +; [printer_model:SV04] +; name = SV04 +; variants = 0.4; 0.3; 0.6; 0.8 +; technology = FFF +; family = SV +; bed_model = SV04_bed.stl +; bed_texture = SV04_texture.svg +; default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber + +[printer_model:SV04 Copy Mode] +name = SV04 Copy Mode +variants = 0.4; 0.3; 0.6; 0.8 +technology = FFF +family = SV04 +; bed_model = SV04_bed.stl +bed_texture = SV04_texture.svg +default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber + +[printer_model:SV04 Dual Mode] +name = SV04 Dual Mode +variants = 0.4; 0.3; 0.6; 0.8 +technology = FFF +family = SV04 +; bed_model = SV04_bed.stl +bed_texture = SV04_texture.svg +default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber + + +[printer_model:SV04 Mirror Mode] +name = SV04 Mirror Mode +variants = 0.4; 0.3; 0.6; 0.8 +technology = FFF +family = SV04 +; bed_model = SV04_bed.stl +bed_texture = SV04_texture.svg +default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber + +[printer_model:SV04 Single Mode 01] +name = SV04 Single Mode 01 +variants = 0.4; 0.3; 0.6; 0.8 +technology = FFF +family = SV04 +; bed_model = SV04_bed.stl +; bed_texture = SV04_texture.svg +default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber + +[printer_model:SV04 Single Mode 02] +name = SV04 Single Mode 02 +variants = 0.4; 0.3; 0.6; 0.8 +technology = FFF +family = SV04 +; bed_model = SV04_bed.stl +bed_texture = SV04_texture.svg +default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber + + +[printer_model:SV05] +name = SV05 +variants = 0.4; 0.3; 0.6; 0.8 +technology = FFF +family = SV +bed_model = SV05_bed.stl +bed_texture = SV05_texture.svg +default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber + +[printer_model:SV06 PLUS] +name = SV06 PLUS +variants = 0.4; 0.3; 0.6; 0.8 +technology = FFF +family = SV +bed_model = SV06PLUS_bed.stl +bed_texture = SV06PLUS_texture.svg +default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber + + + + +# All presets starting with asterisk, for example *common*, are intermediate and they will +# not make it into the user interface. + +# Common print presets + +[print:*common*] +avoid_crossing_perimeters = 0 +thick_bridges = 0 +bridge_acceleration = 1000 +bridge_angle = 0 +bridge_flow_ratio = 1 +bridge_speed = 25 +brim_width = 0 +brim_separation = 0.1 +clip_multipart_objects = 1 +compatible_printers = +complete_objects = 0 +default_acceleration = 1000 +dont_support_bridges = 0 +elefant_foot_compensation = 0.2 +ensure_vertical_shell_thickness = 1 +external_fill_pattern = rectilinear +external_perimeters_first = 0 +external_perimeter_extrusion_width = 0.45 +extra_perimeters = 0 +extruder_clearance_height = 20 +extruder_clearance_radius = 45 +extrusion_width = 0.45 +fill_angle = 45 +fill_density = 20% +fill_pattern = cubic +first_layer_acceleration = 800 +first_layer_extrusion_width = 0.42 +first_layer_height = 0.2 +first_layer_speed = 20 +gap_fill_speed = 40 +gcode_comments = 0 +infill_every_layers = 1 +infill_extruder = 1 +infill_extrusion_width = 0.45 +infill_first = 0 +infill_only_where_needed = 0 +infill_overlap = 10% +interface_shells = 0 +max_print_speed = 100 +max_volumetric_extrusion_rate_slope_negative = 0 +max_volumetric_extrusion_rate_slope_positive = 0 +max_volumetric_speed = 0 +min_skirt_length = 4 +notes = +overhangs = 1 +only_retract_when_crossing_perimeters = 0 +ooze_prevention = 1 +output_filename_format = {input_filename_base}_{layer_height}mm_{printing_filament_types}_{printer_model}_{print_time}.gcode +perimeters = 2 +perimeter_extruder = 1 +perimeter_extrusion_width = 0.45 +post_process = +print_settings_id = +raft_layers = 0 +raft_first_layer_density = 90% +resolution = 0 +seam_position = aligned +single_extruder_multi_material_priming = 1 +skirts = 1 +skirt_distance = 2 +skirt_height = 3 +small_perimeter_speed = 25 +solid_infill_below_area = 0 +solid_infill_every_layers = 0 +solid_infill_extruder = 1 +solid_infill_extrusion_width = 0.45 +spiral_vase = 0 +standby_temperature_delta = -15 +support_material = 0 +support_material_extruder = 0 +support_material_extrusion_width = 0.35 +support_material_interface_extruder = 0 +support_material_angle = 0 +support_material_buildplate_only = 0 +support_material_enforce_layers = 0 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.2 +support_material_interface_contact_loops = 0 +support_material_interface_layers = 2 +support_material_interface_spacing = 0.2 +support_material_interface_speed = 80% +support_material_pattern = rectilinear +support_material_spacing = 2 +support_material_speed = 50 +support_material_synchronize_layers = 0 +support_material_threshold = 50 +support_material_with_sheath = 0 +support_material_xy_spacing = 60% +support_material_bottom_interface_layers = 0 +thin_walls = 0 +top_infill_extrusion_width = 0.45 +top_solid_infill_speed = 40 +travel_speed = 180 +travel_speed_z = 12 +wipe_tower = 1 +wipe_tower_bridging = 10 +wipe_tower_rotation_angle = 0 +wipe_tower_width = 60 +wipe_tower_x = 170 +wipe_tower_y = 140 +xy_size_compensation = 0 +top_solid_min_thickness = 0.7 +bottom_solid_min_thickness = 0.5 +gcode_label_objects = 1 +infill_anchor = 2.5 +infill_anchor_max = 12 +wall_transition_angle = 10 +wall_transition_filter_deviation = 25% +wall_transition_length = 0.4 +wall_distribution_count = 1 +min_bead_width = 85% +enable_dynamic_overhang_speeds = 1 +top_fill_pattern = monotoniclines + +[print:*SV06*] +fill_pattern = grid +single_extruder_multi_material_priming = 0 +travel_speed = 180 +wipe_tower_x = 170 +wipe_tower_y = 125 + +[print:*SV01*] +fill_pattern = grid +single_extruder_multi_material_priming = 0 +travel_speed = 120 + +[print:*SV02*] +fill_pattern = grid +single_extruder_multi_material_priming = 0 +travel_speed = 120 + +[print:*SV03*] +fill_pattern = grid +single_extruder_multi_material_priming = 0 +travel_speed = 120 + +[print:*0.3nozzle*] +elefant_foot_compensation = 0 +external_perimeter_extrusion_width = 0.3 +extrusion_width = 0.3 +first_layer_extrusion_width = 0.3 +infill_extrusion_width = 0.3 +perimeter_extrusion_width = 0.3 +solid_infill_extrusion_width = 0.3 +top_infill_extrusion_width = 0.3 +support_material_extrusion_width = 0.3 +support_material_interface_layers = 0 +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_{printing_filament_types}_{printer_model}_{print_time}.gcode +thick_bridges = 0 +bridge_flow_ratio = 1 +bridge_speed = 20 +wipe_tower_bridging = 6 +wall_transition_angle = 10 +wall_transition_filter_deviation = 25% +wall_transition_length = 0.25 +wall_distribution_count = 1 +min_bead_width = 85% +infill_overlap = 10% +dynamic_overhang_speeds[0] = 20,20,15,15 + +[print:*0.3nozzleSV06*] +inherits = *0.3nozzle* +perimeter_speed = 30 +external_perimeter_speed = 20 +small_perimeter_speed = 20 +infill_speed = 45 +solid_infill_speed = 45 +top_solid_infill_speed = 30 +support_material_speed = 40 +gap_fill_speed = 30 +perimeter_acceleration = 500 +infill_acceleration = 1000 +bridge_acceleration = 500 +first_layer_acceleration = 500 +default_acceleration = 1000 +max_print_speed = 80 +perimeters = 3 +fill_pattern = grid +fill_density = 20% +wipe_tower_bridging = 6 + + +[print:*0.6nozzle*] +external_perimeter_extrusion_width = 0.61 +extrusion_width = 0.67 +first_layer_extrusion_width = 0.65 +infill_extrusion_width = 0.7 +perimeter_extrusion_width = 0.65 +solid_infill_extrusion_width = 0.65 +top_infill_extrusion_width = 0.6 +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_{printing_filament_types}_{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_transition_angle = 10 +wall_transition_filter_deviation = 25% +wall_transition_length = 0.6 +wall_distribution_count = 1 +min_bead_width = 85% +infill_overlap = 15% + +[print:*0.6nozzleSV06*] +inherits = *0.6nozzle* +external_perimeter_extrusion_width = 0.65 +extrusion_width = 0.65 +infill_extrusion_width = 0.65 +thick_bridges = 0 + +[print:*0.8nozzle*] +external_perimeter_extrusion_width = 0.9 +extrusion_width = 0.9 +first_layer_extrusion_width = 0.9 +infill_extrusion_width = 0.9 +perimeter_extrusion_width = 0.9 +solid_infill_extrusion_width = 0.9 +top_infill_extrusion_width = 0.8 +support_material_extrusion_width = 0.7 +support_material_contact_distance = 0.25 +support_material_interface_spacing = 0.4 +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_{printing_filament_types}_{printer_model}_{print_time}.gcode +fill_pattern = gyroid +fill_density = 15% +infill_anchor_max = 20 +top_solid_layers = 4 +bottom_solid_layers = 3 +skirt_distance = 3 +skirt_height = 2 +first_layer_height = 0.3 +infill_overlap = 15% +bridge_speed = 22 +gap_fill_speed = 30 +bridge_flow_ratio = 0.9 +perimeter_acceleration = 800 +infill_acceleration = 1000 +bridge_acceleration = 1000 +first_layer_acceleration = 800 +default_acceleration = 1000 +top_solid_min_thickness = 1.2 +bottom_solid_min_thickness = 0.8 +single_extruder_multi_material_priming = 0 +thick_bridges = 1 +overhangs = 0 +wall_transition_angle = 10 +wall_transition_filter_deviation = 25% +wall_transition_length = 0.8 +wall_distribution_count = 1 +min_bead_width = 85% + +[print:*0.8nozzleSV06*] +inherits = *0.8nozzle* +external_perimeter_extrusion_width = 0.95 +extrusion_width = 0.85 +infill_extrusion_width = 0.85 +thick_bridges = 0 + +[print:*soluble_support*] +overhangs = 1 +skirts = 0 +support_material = 1 +support_material_contact_distance = 0 +support_material_extruder = 4 +support_material_extrusion_width = 0.45 +support_material_interface_extruder = 4 +support_material_interface_spacing = 0.1 +support_material_synchronize_layers = 1 +support_material_threshold = 80 +support_material_with_sheath = 1 +wipe_tower_bridging = 6 +support_material_interface_speed = 80% +support_material_bottom_interface_layers = -1 +thick_bridges = 1 + +[print:*0.05mm*] +inherits = *common* +layer_height = 0.05 +bottom_solid_layers = 10 +bridge_acceleration = 300 +bridge_flow_ratio = 0.6 +bridge_speed = 25 +default_acceleration = 1000 +external_perimeter_speed = 20 +fill_density = 20% +first_layer_acceleration = 800 +gap_fill_speed = 20 +infill_acceleration = 800 +infill_speed = 30 +max_print_speed = 80 +small_perimeter_speed = 20 +solid_infill_speed = 30 +support_material_extrusion_width = 0.33 +support_material_spacing = 1.5 +support_material_contact_distance = 0.15 +raft_contact_distance = 0.15 +perimeter_acceleration = 300 +perimeter_speed = 30 +perimeters = 3 +support_material_speed = 30 +top_solid_infill_speed = 20 +top_solid_layers = 15 +thick_bridges = 1 + +[print:*0.07mm*] +inherits = *0.05mm* +layer_height = 0.07 +bottom_solid_layers = 8 +bridge_flow_ratio = 0.6 +fill_density = 15% +infill_speed = 40 +solid_infill_speed = 40 +support_material_speed = 40 +top_solid_infill_speed = 30 +top_solid_layers = 11 + +[print:*0.15mm*] +inherits = *common* +bottom_solid_layers = 5 +external_perimeter_speed = 40 +infill_acceleration = 2000 +infill_speed = 60 +layer_height = 0.15 +perimeter_acceleration = 800 +perimeter_speed = 50 +solid_infill_speed = 50 +top_infill_extrusion_width = 0.4 +top_solid_layers = 8 +bridge_flow_ratio = 1 +bridge_speed = 25 + +[print:*0.20mm*] +inherits = *common* +bottom_solid_layers = 4 +bridge_flow_ratio = 0.95 +external_perimeter_speed = 40 +infill_acceleration = 2000 +infill_speed = 60 +layer_height = 0.2 +perimeter_acceleration = 800 +perimeter_speed = 50 +solid_infill_speed = 50 +top_infill_extrusion_width = 0.4 +top_solid_layers = 6 + +[print:*0.3mm*] +inherits = *common* +bottom_solid_layers = 4 +bridge_flow_ratio = 0.95 +external_perimeter_speed = 40 +perimeter_acceleration = 800 +layer_height = 0.25 +perimeter_speed = 50 +top_solid_layers = 4 + +[print:*0.30mm*] +inherits = *common* +bottom_solid_layers = 4 +bridge_flow_ratio = 0.95 +external_perimeter_speed = 40 +infill_acceleration = 2000 +infill_speed = 60 +layer_height = 0.3 +perimeter_acceleration = 800 +perimeter_speed = 50 +solid_infill_speed = 50 +top_infill_extrusion_width = 0.4 +top_solid_layers = 4 +support_material_contact_distance = 0.3 + +[print:*0.35mm*] +inherits = *common* +bottom_solid_layers = 3 +external_perimeter_extrusion_width = 0.6 +external_perimeter_speed = 40 +first_layer_extrusion_width = 0.75 +infill_acceleration = 2000 +infill_speed = 60 +layer_height = 0.35 +perimeter_acceleration = 800 +perimeter_extrusion_width = 0.65 +perimeter_speed = 50 +solid_infill_extrusion_width = 0.65 +solid_infill_speed = 60 +top_solid_infill_speed = 50 +top_solid_layers = 4 + +[print:*0.40mm*] +inherits = *common* +bottom_solid_layers = 3 +external_perimeter_extrusion_width = 0.6 +external_perimeter_speed = 40 +first_layer_extrusion_width = 0.65 +infill_acceleration = 2000 +infill_speed = 60 +layer_height = 0.4 +perimeter_acceleration = 800 +perimeter_extrusion_width = 0.65 +perimeter_speed = 50 +solid_infill_extrusion_width = 0.65 +solid_infill_speed = 60 +top_solid_infill_speed = 40 +top_solid_layers = 4 + +## SV family ## + + +## SV01 ## + + +## SV01 - 0.4mm nozzle + +[print:0.05mm ULTRADETAIL @SV01] +inherits = *0.05mm*; *SV01* +fill_pattern = gyroid +fill_density = 15% +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.07mm ULTRADETAIL @SV01] +inherits = *0.07mm*; *SV01* +fill_pattern = gyroid +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.10mm DETAIL @SV01] +inherits = *0.10mm*; *SV01* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +bridge_acceleration = 800 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% +perimeters = 3 +wipe_tower_bridging = 5 + +[print:0.15mm QUALITY @SV01] +inherits = *0.15mm*; *SV01* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.15mm SPEED @SV01] +inherits = *0.15mm*; *SV01* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.20mm QUALITY @SV01] +inherits = *0.20mm*; *SV01* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.20mm SPEED @SV01] +inherits = *0.20mm*; *SV01* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.30mm DRAFT @SV01] +inherits = *0.30mm*; *SV01* +bottom_solid_layers = 3 +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 85 +max_print_speed = 200 +perimeter_speed = 50 +small_perimeter_speed = 30 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +support_material_speed = 45 +external_perimeter_extrusion_width = 0.6 +extrusion_width = 0.5 +first_layer_extrusion_width = 0.42 +infill_extrusion_width = 0.5 +perimeter_extrusion_width = 0.5 +solid_infill_extrusion_width = 0.5 +top_infill_extrusion_width = 0.45 +support_material_extrusion_width = 0.38 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.2 + + +## SV01 - 0.3mm nozzle + +[print:0.05mm ULTRADETAIL @0.3 nozzle SV01] +inherits = *0.05mm*; *0.3nozzle*; *SV01* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.3 and num_extruders==1 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.07mm ULTRADETAIL @0.3 nozzle SV01] +inherits = *0.07mm*; *0.3nozzle*; *SV01* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.3 +infill_speed = 30 +solid_infill_speed = 30 +support_material_speed = 30 +top_solid_infill_speed = 20 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.10mm DETAIL @0.3 nozzle SV01] +inherits = *0.10mm*; *0.3nozzleSV01*; *SV01* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.15mm QUALITY @0.3 nozzle SV01] +inherits = *0.15mm*; *0.3nozzleSV01*; *SV01* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.08 +raft_contact_distance = 0.07 +perimeter_extrusion_width = 0.27 +external_perimeter_extrusion_width = 0.27 +infill_extrusion_width = 0.27 +solid_infill_extrusion_width = 0.27 + +[print:0.15mm SOLUBLE FULL @0.3 nozzle SV01] +inherits = 0.15mm QUALITY @0.3 nozzle SV01 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.3 and num_extruders>1 +support_material_contact_distance = 0 +raft_contact_distance = 0 +wipe_tower_bridging = 5 +solid_infill_speed = 40 +support_material_extruder = 5 +support_material_interface_extruder = 5 +support_material_with_sheath = 1 +support_material_interface_layers = 4 +support_material_threshold = 60 +support_material = 1 +support_material_synchronize_layers = 1 +support_material_xy_spacing = 100% +support_material_style = snug +raft_first_layer_expansion = 2 +support_material_interface_spacing = 0.05 + +[print:0.15mm SOLUBLE INTERFACE @0.3 nozzle SV01] +inherits = 0.15mm SOLUBLE FULL @0.3 nozzle SV01 +support_material_extruder = 0 +support_material_interface_extruder = 5 +support_material_with_sheath = 0 +support_material_style = grid + +## SV01 - 0.6mm nozzle + +[print:0.15mm DETAIL @0.6 nozzle SV01] +inherits = *0.15mm*; *0.6nozzleSV01*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.20mm DETAIL @0.6 nozzle SV01] +inherits = *0.20mm*; *0.6nozzleSV01*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.30mm QUALITY @0.6 nozzle SV01] +inherits = *0.30mm*; *0.6nozzleSV01*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 1 + +[print:0.35mm SPEED @0.6 nozzle SV01] +inherits = *0.35mm*; *0.6nozzleSV01*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +[print:0.40mm DRAFT @0.6 nozzle SV01] +inherits = *0.40mm*; *0.6nozzleSV01*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +## SV01 - 0.8mm nozzle + +## Only Single mode at the moment + +[print:0.30mm DETAIL @0.8 nozzle SV01] +inherits = *common*; *0.8nozzleSV01* +layer_height = 0.30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 80 +solid_infill_speed = 50 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.40mm QUALITY @0.8 nozzle SV01] +inherits = *common*; *0.8nozzleSV01* +layer_height = 0.4 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 45 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.55mm DRAFT @0.8 nozzle SV01] +inherits = *common*; *0.8nozzleSV01* +layer_height = 0.55 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 30 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 40 +support_material_speed = 35 +support_material_contact_distance = 0.25 +top_solid_infill_speed = 30 +external_perimeter_extrusion_width = 1 +perimeter_extrusion_width = 1 + + +## SV01 PRO ## + + +## SV01 PRO - 0.4mm nozzle + +[print:0.05mm ULTRADETAIL @SV01 PRO] +inherits = *0.05mm*; *SV01 PRO* +fill_pattern = gyroid +fill_density = 15% +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.07mm ULTRADETAIL @SV01 PRO] +inherits = *0.07mm*; *SV01 PRO* +fill_pattern = gyroid +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.10mm DETAIL @SV01 PRO] +inherits = *0.10mm*; *SV01 PRO* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +bridge_acceleration = 800 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% +perimeters = 3 +wipe_tower_bridging = 5 + +[print:0.15mm QUALITY @SV01 PRO] +inherits = *0.15mm*; *SV01 PRO* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.15mm SPEED @SV01 PRO] +inherits = *0.15mm*; *SV01 PRO* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.20mm QUALITY @SV01 PRO] +inherits = *0.20mm*; *SV01 PRO* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.20mm SPEED @SV01 PRO] +inherits = *0.20mm*; *SV01 PRO* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.30mm DRAFT @SV01 PRO] +inherits = *0.30mm*; *SV01 PRO* +bottom_solid_layers = 3 +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 85 +max_print_speed = 200 +perimeter_speed = 50 +small_perimeter_speed = 30 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +support_material_speed = 45 +external_perimeter_extrusion_width = 0.6 +extrusion_width = 0.5 +first_layer_extrusion_width = 0.42 +infill_extrusion_width = 0.5 +perimeter_extrusion_width = 0.5 +solid_infill_extrusion_width = 0.5 +top_infill_extrusion_width = 0.45 +support_material_extrusion_width = 0.38 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.2 + + +## SV01 PRO - 0.3mm nozzle + +[print:0.05mm ULTRADETAIL @0.3 nozzle SV01 PRO] +inherits = *0.05mm*; *0.3nozzle*; *SV01 PRO* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.3 and num_extruders==1 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.07mm ULTRADETAIL @0.3 nozzle SV01 PRO] +inherits = *0.07mm*; *0.3nozzle*; *SV01 PRO* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.3 +infill_speed = 30 +solid_infill_speed = 30 +support_material_speed = 30 +top_solid_infill_speed = 20 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.10mm DETAIL @0.3 nozzle SV01 PRO] +inherits = *0.10mm*; *0.3nozzleSV01 PRO*; *SV01 PRO* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.15mm QUALITY @0.3 nozzle SV01 PRO] +inherits = *0.15mm*; *0.3nozzleSV01 PRO*; *SV01 PRO* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.08 +raft_contact_distance = 0.07 +perimeter_extrusion_width = 0.27 +external_perimeter_extrusion_width = 0.27 +infill_extrusion_width = 0.27 +solid_infill_extrusion_width = 0.27 + +[print:0.15mm SOLUBLE FULL @0.3 nozzle SV01 PRO] +inherits = 0.15mm QUALITY @0.3 nozzle SV01 PRO +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.3 and num_extruders>1 +support_material_contact_distance = 0 +raft_contact_distance = 0 +wipe_tower_bridging = 5 +solid_infill_speed = 40 +support_material_extruder = 5 +support_material_interface_extruder = 5 +support_material_with_sheath = 1 +support_material_interface_layers = 4 +support_material_threshold = 60 +support_material = 1 +support_material_synchronize_layers = 1 +support_material_xy_spacing = 100% +support_material_style = snug +raft_first_layer_expansion = 2 +support_material_interface_spacing = 0.05 + +[print:0.15mm SOLUBLE INTERFACE @0.3 nozzle SV01 PRO] +inherits = 0.15mm SOLUBLE FULL @0.3 nozzle SV01 PRO +support_material_extruder = 0 +support_material_interface_extruder = 5 +support_material_with_sheath = 0 +support_material_style = grid + +## SV01 PRO - 0.6mm nozzle + +[print:0.15mm DETAIL @0.6 nozzle SV01 PRO] +inherits = *0.15mm*; *0.6nozzleSV01 PRO*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.20mm DETAIL @0.6 nozzle SV01 PRO] +inherits = *0.20mm*; *0.6nozzleSV01 PRO*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.30mm QUALITY @0.6 nozzle SV01 PRO] +inherits = *0.30mm*; *0.6nozzleSV01 PRO*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 1 + +[print:0.35mm SPEED @0.6 nozzle SV01 PRO] +inherits = *0.35mm*; *0.6nozzleSV01 PRO*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +[print:0.40mm DRAFT @0.6 nozzle SV01 PRO] +inherits = *0.40mm*; *0.6nozzleSV01 PRO*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +## SV01 PRO - 0.8mm nozzle + +## Only Single mode at the moment + +[print:0.30mm DETAIL @0.8 nozzle SV01 PRO] +inherits = *common*; *0.8nozzleSV01 PRO* +layer_height = 0.30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 80 +solid_infill_speed = 50 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.40mm QUALITY @0.8 nozzle SV01 PRO] +inherits = *common*; *0.8nozzleSV01 PRO* +layer_height = 0.4 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 45 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.55mm DRAFT @0.8 nozzle SV01 PRO] +inherits = *common*; *0.8nozzleSV01 PRO* +layer_height = 0.55 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV01 PRO.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 30 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 40 +support_material_speed = 35 +support_material_contact_distance = 0.25 +top_solid_infill_speed = 30 +external_perimeter_extrusion_width = 1 +perimeter_extrusion_width = 1 + + +## SV02 ## + + +## SV02 - 0.4mm nozzle + +[print:0.05mm ULTRADETAIL @SV02] +inherits = *0.05mm*; *SV02* +fill_pattern = gyroid +fill_density = 15% +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.07mm ULTRADETAIL @SV02] +inherits = *0.07mm*; *SV02* +fill_pattern = gyroid +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.10mm DETAIL @SV02] +inherits = *0.10mm*; *SV02* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +bridge_acceleration = 800 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% +perimeters = 3 +wipe_tower_bridging = 5 + +[print:0.15mm QUALITY @SV02] +inherits = *0.15mm*; *SV02* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.15mm SPEED @SV02] +inherits = *0.15mm*; *SV02* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.20mm QUALITY @SV02] +inherits = *0.20mm*; *SV02* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.20mm SPEED @SV02] +inherits = *0.20mm*; *SV02* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.30mm DRAFT @SV02] +inherits = *0.30mm*; *SV02* +bottom_solid_layers = 3 +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 85 +max_print_speed = 200 +perimeter_speed = 50 +small_perimeter_speed = 30 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +support_material_speed = 45 +external_perimeter_extrusion_width = 0.6 +extrusion_width = 0.5 +first_layer_extrusion_width = 0.42 +infill_extrusion_width = 0.5 +perimeter_extrusion_width = 0.5 +solid_infill_extrusion_width = 0.5 +top_infill_extrusion_width = 0.45 +support_material_extrusion_width = 0.38 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.2 + + +## SV02 - 0.3mm nozzle + +[print:0.05mm ULTRADETAIL @0.3 nozzle SV02] +inherits = *0.05mm*; *0.3nozzle*; *SV02* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.3 and num_extruders==1 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.07mm ULTRADETAIL @0.3 nozzle SV02] +inherits = *0.07mm*; *0.3nozzle*; *SV02* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.3 +infill_speed = 30 +solid_infill_speed = 30 +support_material_speed = 30 +top_solid_infill_speed = 20 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.10mm DETAIL @0.3 nozzle SV02] +inherits = *0.10mm*; *0.3nozzleSV02*; *SV02* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.15mm QUALITY @0.3 nozzle SV02] +inherits = *0.15mm*; *0.3nozzleSV02*; *SV02* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.08 +raft_contact_distance = 0.07 +perimeter_extrusion_width = 0.27 +external_perimeter_extrusion_width = 0.27 +infill_extrusion_width = 0.27 +solid_infill_extrusion_width = 0.27 + +[print:0.15mm SOLUBLE FULL @0.3 nozzle SV02] +inherits = 0.15mm QUALITY @0.3 nozzle SV02 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.3 and num_extruders>1 +support_material_contact_distance = 0 +raft_contact_distance = 0 +wipe_tower_bridging = 5 +solid_infill_speed = 40 +support_material_extruder = 5 +support_material_interface_extruder = 5 +support_material_with_sheath = 1 +support_material_interface_layers = 4 +support_material_threshold = 60 +support_material = 1 +support_material_synchronize_layers = 1 +support_material_xy_spacing = 100% +support_material_style = snug +raft_first_layer_expansion = 2 +support_material_interface_spacing = 0.05 + +[print:0.15mm SOLUBLE INTERFACE @0.3 nozzle SV02] +inherits = 0.15mm SOLUBLE FULL @0.3 nozzle SV02 +support_material_extruder = 0 +support_material_interface_extruder = 5 +support_material_with_sheath = 0 +support_material_style = grid + +## SV02 - 0.6mm nozzle + +[print:0.15mm DETAIL @0.6 nozzle SV02] +inherits = *0.15mm*; *0.6nozzleSV02*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.20mm DETAIL @0.6 nozzle SV02] +inherits = *0.20mm*; *0.6nozzleSV02*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.30mm QUALITY @0.6 nozzle SV02] +inherits = *0.30mm*; *0.6nozzleSV02*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 1 + +[print:0.35mm SPEED @0.6 nozzle SV02] +inherits = *0.35mm*; *0.6nozzleSV02*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +[print:0.40mm DRAFT @0.6 nozzle SV02] +inherits = *0.40mm*; *0.6nozzleSV02*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +## SV02 - 0.8mm nozzle + +## Only Single mode at the moment + +[print:0.30mm DETAIL @0.8 nozzle SV02] +inherits = *common*; *0.8nozzleSV02* +layer_height = 0.30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 80 +solid_infill_speed = 50 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.40mm QUALITY @0.8 nozzle SV02] +inherits = *common*; *0.8nozzleSV02* +layer_height = 0.4 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 45 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.55mm DRAFT @0.8 nozzle SV02] +inherits = *common*; *0.8nozzleSV02* +layer_height = 0.55 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV02.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 30 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 40 +support_material_speed = 35 +support_material_contact_distance = 0.25 +top_solid_infill_speed = 30 +external_perimeter_extrusion_width = 1 +perimeter_extrusion_width = 1 + + +## SV03 ## + + +## SV03 - 0.4mm nozzle + +[print:0.05mm ULTRADETAIL @SV03] +inherits = *0.05mm*; *SV03* +fill_pattern = gyroid +fill_density = 15% +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.07mm ULTRADETAIL @SV03] +inherits = *0.07mm*; *SV03* +fill_pattern = gyroid +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.10mm DETAIL @SV03] +inherits = *0.10mm*; *SV03* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +bridge_acceleration = 800 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% +perimeters = 3 +wipe_tower_bridging = 5 + +[print:0.15mm QUALITY @SV03] +inherits = *0.15mm*; *SV03* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.15mm SPEED @SV03] +inherits = *0.15mm*; *SV03* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.20mm QUALITY @SV03] +inherits = *0.20mm*; *SV03* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.20mm SPEED @SV03] +inherits = *0.20mm*; *SV03* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.30mm DRAFT @SV03] +inherits = *0.30mm*; *SV03* +bottom_solid_layers = 3 +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 85 +max_print_speed = 200 +perimeter_speed = 50 +small_perimeter_speed = 30 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +support_material_speed = 45 +external_perimeter_extrusion_width = 0.6 +extrusion_width = 0.5 +first_layer_extrusion_width = 0.42 +infill_extrusion_width = 0.5 +perimeter_extrusion_width = 0.5 +solid_infill_extrusion_width = 0.5 +top_infill_extrusion_width = 0.45 +support_material_extrusion_width = 0.38 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.2 + + +## SV03 - 0.3mm nozzle + +[print:0.05mm ULTRADETAIL @0.3 nozzle SV03] +inherits = *0.05mm*; *0.3nozzle*; *SV03* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.3 and num_extruders==1 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.07mm ULTRADETAIL @0.3 nozzle SV03] +inherits = *0.07mm*; *0.3nozzle*; *SV03* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.3 +infill_speed = 30 +solid_infill_speed = 30 +support_material_speed = 30 +top_solid_infill_speed = 20 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.10mm DETAIL @0.3 nozzle SV03] +inherits = *0.10mm*; *0.3nozzleSV03*; *SV03* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.15mm QUALITY @0.3 nozzle SV03] +inherits = *0.15mm*; *0.3nozzleSV03*; *SV03* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.08 +raft_contact_distance = 0.07 +perimeter_extrusion_width = 0.27 +external_perimeter_extrusion_width = 0.27 +infill_extrusion_width = 0.27 +solid_infill_extrusion_width = 0.27 + +[print:0.15mm SOLUBLE FULL @0.3 nozzle SV03] +inherits = 0.15mm QUALITY @0.3 nozzle SV03 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.3 and num_extruders>1 +support_material_contact_distance = 0 +raft_contact_distance = 0 +wipe_tower_bridging = 5 +solid_infill_speed = 40 +support_material_extruder = 5 +support_material_interface_extruder = 5 +support_material_with_sheath = 1 +support_material_interface_layers = 4 +support_material_threshold = 60 +support_material = 1 +support_material_synchronize_layers = 1 +support_material_xy_spacing = 100% +support_material_style = snug +raft_first_layer_expansion = 2 +support_material_interface_spacing = 0.05 + +[print:0.15mm SOLUBLE INTERFACE @0.3 nozzle SV03] +inherits = 0.15mm SOLUBLE FULL @0.3 nozzle SV03 +support_material_extruder = 0 +support_material_interface_extruder = 5 +support_material_with_sheath = 0 +support_material_style = grid + +## SV03 - 0.6mm nozzle + +[print:0.15mm DETAIL @0.6 nozzle SV03] +inherits = *0.15mm*; *0.6nozzleSV03*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.20mm DETAIL @0.6 nozzle SV03] +inherits = *0.20mm*; *0.6nozzleSV03*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.30mm QUALITY @0.6 nozzle SV03] +inherits = *0.30mm*; *0.6nozzleSV03*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 1 + +[print:0.35mm SPEED @0.6 nozzle SV03] +inherits = *0.35mm*; *0.6nozzleSV03*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +[print:0.40mm DRAFT @0.6 nozzle SV03] +inherits = *0.40mm*; *0.6nozzleSV03*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +## SV03 - 0.8mm nozzle + +## Only Single mode at the moment + +[print:0.30mm DETAIL @0.8 nozzle SV03] +inherits = *common*; *0.8nozzleSV03* +layer_height = 0.30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 80 +solid_infill_speed = 50 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.40mm QUALITY @0.8 nozzle SV03] +inherits = *common*; *0.8nozzleSV03* +layer_height = 0.4 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 45 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.55mm DRAFT @0.8 nozzle SV03] +inherits = *common*; *0.8nozzleSV03* +layer_height = 0.55 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV03.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 30 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 40 +support_material_speed = 35 +support_material_contact_distance = 0.25 +top_solid_infill_speed = 30 +external_perimeter_extrusion_width = 1 +perimeter_extrusion_width = 1 + + +## SV04 ## + + +## SV04 - 0.4mm nozzle + +[print:0.05mm ULTRADETAIL @SV04] +inherits = *0.05mm*; *SV04* +fill_pattern = gyroid +fill_density = 15% +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.07mm ULTRADETAIL @SV04] +inherits = *0.07mm*; *SV04* +fill_pattern = gyroid +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.10mm DETAIL @SV04] +inherits = *0.10mm*; *SV04* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +bridge_acceleration = 800 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% +perimeters = 3 +wipe_tower_bridging = 5 + +[print:0.15mm QUALITY @SV04] +inherits = *0.15mm*; *SV04* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.15mm SPEED @SV04] +inherits = *0.15mm*; *SV04* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.20mm QUALITY @SV04] +inherits = *0.20mm*; *SV04* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.20mm SPEED @SV04] +inherits = *0.20mm*; *SV04* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.30mm DRAFT @SV04] +inherits = *0.30mm*; *SV04* +bottom_solid_layers = 3 +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 85 +max_print_speed = 200 +perimeter_speed = 50 +small_perimeter_speed = 30 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +support_material_speed = 45 +external_perimeter_extrusion_width = 0.6 +extrusion_width = 0.5 +first_layer_extrusion_width = 0.42 +infill_extrusion_width = 0.5 +perimeter_extrusion_width = 0.5 +solid_infill_extrusion_width = 0.5 +top_infill_extrusion_width = 0.45 +support_material_extrusion_width = 0.38 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.2 + + +## SV04 - 0.3mm nozzle + +[print:0.05mm ULTRADETAIL @0.3 nozzle SV04] +inherits = *0.05mm*; *0.3nozzle*; *SV04* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.3 and num_extruders==1 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.07mm ULTRADETAIL @0.3 nozzle SV04] +inherits = *0.07mm*; *0.3nozzle*; *SV04* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.3 +infill_speed = 30 +solid_infill_speed = 30 +support_material_speed = 30 +top_solid_infill_speed = 20 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.10mm DETAIL @0.3 nozzle SV04] +inherits = *0.10mm*; *0.3nozzleSV04*; *SV04* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.15mm QUALITY @0.3 nozzle SV04] +inherits = *0.15mm*; *0.3nozzleSV04*; *SV04* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.08 +raft_contact_distance = 0.07 +perimeter_extrusion_width = 0.27 +external_perimeter_extrusion_width = 0.27 +infill_extrusion_width = 0.27 +solid_infill_extrusion_width = 0.27 + +[print:0.15mm SOLUBLE FULL @0.3 nozzle SV04] +inherits = 0.15mm QUALITY @0.3 nozzle SV04 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.3 and num_extruders>1 +support_material_contact_distance = 0 +raft_contact_distance = 0 +wipe_tower_bridging = 5 +solid_infill_speed = 40 +support_material_extruder = 5 +support_material_interface_extruder = 5 +support_material_with_sheath = 1 +support_material_interface_layers = 4 +support_material_threshold = 60 +support_material = 1 +support_material_synchronize_layers = 1 +support_material_xy_spacing = 100% +support_material_style = snug +raft_first_layer_expansion = 2 +support_material_interface_spacing = 0.05 + +[print:0.15mm SOLUBLE INTERFACE @0.3 nozzle SV04] +inherits = 0.15mm SOLUBLE FULL @0.3 nozzle SV04 +support_material_extruder = 0 +support_material_interface_extruder = 5 +support_material_with_sheath = 0 +support_material_style = grid + +## SV04 - 0.6mm nozzle + +[print:0.15mm DETAIL @0.6 nozzle SV04] +inherits = *0.15mm*; *0.6nozzleSV04*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.20mm DETAIL @0.6 nozzle SV04] +inherits = *0.20mm*; *0.6nozzleSV04*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.30mm QUALITY @0.6 nozzle SV04] +inherits = *0.30mm*; *0.6nozzleSV04*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 1 + +[print:0.35mm SPEED @0.6 nozzle SV04] +inherits = *0.35mm*; *0.6nozzleSV04*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +[print:0.40mm DRAFT @0.6 nozzle SV04] +inherits = *0.40mm*; *0.6nozzleSV04*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +## SV04 - 0.8mm nozzle + +## Only Single mode at the moment + +[print:0.30mm DETAIL @0.8 nozzle SV04] +inherits = *common*; *0.8nozzleSV04* +layer_height = 0.30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 80 +solid_infill_speed = 50 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.40mm QUALITY @0.8 nozzle SV04] +inherits = *common*; *0.8nozzleSV04* +layer_height = 0.4 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 45 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.55mm DRAFT @0.8 nozzle SV04] +inherits = *common*; *0.8nozzleSV04* +layer_height = 0.55 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV04.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 30 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 40 +support_material_speed = 35 +support_material_contact_distance = 0.25 +top_solid_infill_speed = 30 +external_perimeter_extrusion_width = 1 +perimeter_extrusion_width = 1 + + +## SV05 ## + + +## SV05 - 0.4mm nozzle + +[print:0.05mm ULTRADETAIL @SV05] +inherits = *0.05mm*; *SV05* +fill_pattern = gyroid +fill_density = 15% +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.07mm ULTRADETAIL @SV05] +inherits = *0.07mm*; *SV05* +fill_pattern = gyroid +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.10mm DETAIL @SV05] +inherits = *0.10mm*; *SV05* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +bridge_acceleration = 800 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% +perimeters = 3 +wipe_tower_bridging = 5 + +[print:0.15mm QUALITY @SV05] +inherits = *0.15mm*; *SV05* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.15mm SPEED @SV05] +inherits = *0.15mm*; *SV05* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.20mm QUALITY @SV05] +inherits = *0.20mm*; *SV05* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.20mm SPEED @SV05] +inherits = *0.20mm*; *SV05* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.30mm DRAFT @SV05] +inherits = *0.30mm*; *SV05* +bottom_solid_layers = 3 +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 85 +max_print_speed = 200 +perimeter_speed = 50 +small_perimeter_speed = 30 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +support_material_speed = 45 +external_perimeter_extrusion_width = 0.6 +extrusion_width = 0.5 +first_layer_extrusion_width = 0.42 +infill_extrusion_width = 0.5 +perimeter_extrusion_width = 0.5 +solid_infill_extrusion_width = 0.5 +top_infill_extrusion_width = 0.45 +support_material_extrusion_width = 0.38 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.2 + + +## SV05 - 0.3mm nozzle + +[print:0.05mm ULTRADETAIL @0.3 nozzle SV05] +inherits = *0.05mm*; *0.3nozzle*; *SV05* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.3 and num_extruders==1 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.07mm ULTRADETAIL @0.3 nozzle SV05] +inherits = *0.07mm*; *0.3nozzle*; *SV05* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.3 +infill_speed = 30 +solid_infill_speed = 30 +support_material_speed = 30 +top_solid_infill_speed = 20 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.10mm DETAIL @0.3 nozzle SV05] +inherits = *0.10mm*; *0.3nozzleSV05*; *SV05* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.15mm QUALITY @0.3 nozzle SV05] +inherits = *0.15mm*; *0.3nozzleSV05*; *SV05* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.08 +raft_contact_distance = 0.07 +perimeter_extrusion_width = 0.27 +external_perimeter_extrusion_width = 0.27 +infill_extrusion_width = 0.27 +solid_infill_extrusion_width = 0.27 + +[print:0.15mm SOLUBLE FULL @0.3 nozzle SV05] +inherits = 0.15mm QUALITY @0.3 nozzle SV05 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.3 and num_extruders>1 +support_material_contact_distance = 0 +raft_contact_distance = 0 +wipe_tower_bridging = 5 +solid_infill_speed = 40 +support_material_extruder = 5 +support_material_interface_extruder = 5 +support_material_with_sheath = 1 +support_material_interface_layers = 4 +support_material_threshold = 60 +support_material = 1 +support_material_synchronize_layers = 1 +support_material_xy_spacing = 100% +support_material_style = snug +raft_first_layer_expansion = 2 +support_material_interface_spacing = 0.05 + +[print:0.15mm SOLUBLE INTERFACE @0.3 nozzle SV05] +inherits = 0.15mm SOLUBLE FULL @0.3 nozzle SV05 +support_material_extruder = 0 +support_material_interface_extruder = 5 +support_material_with_sheath = 0 +support_material_style = grid + +## SV05 - 0.6mm nozzle + +[print:0.15mm DETAIL @0.6 nozzle SV05] +inherits = *0.15mm*; *0.6nozzleSV05*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.20mm DETAIL @0.6 nozzle SV05] +inherits = *0.20mm*; *0.6nozzleSV05*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.30mm QUALITY @0.6 nozzle SV05] +inherits = *0.30mm*; *0.6nozzleSV05*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 1 + +[print:0.35mm SPEED @0.6 nozzle SV05] +inherits = *0.35mm*; *0.6nozzleSV05*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +[print:0.40mm DRAFT @0.6 nozzle SV05] +inherits = *0.40mm*; *0.6nozzleSV05*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +## SV05 - 0.8mm nozzle + +## Only Single mode at the moment + +[print:0.30mm DETAIL @0.8 nozzle SV05] +inherits = *common*; *0.8nozzleSV05* +layer_height = 0.30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 80 +solid_infill_speed = 50 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.40mm QUALITY @0.8 nozzle SV05] +inherits = *common*; *0.8nozzleSV05* +layer_height = 0.4 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 45 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.55mm DRAFT @0.8 nozzle SV05] +inherits = *common*; *0.8nozzleSV05* +layer_height = 0.55 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV05.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 30 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 40 +support_material_speed = 35 +support_material_contact_distance = 0.25 +top_solid_infill_speed = 30 +external_perimeter_extrusion_width = 1 +perimeter_extrusion_width = 1 + + + +## SV06 ## + + +## SV06 - 0.4mm nozzle + +[print:0.05mm ULTRADETAIL @SV06] +inherits = *0.05mm*; *SV06* +fill_pattern = gyroid +fill_density = 15% +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.07mm ULTRADETAIL @SV06] +inherits = *0.07mm*; *SV06* +fill_pattern = gyroid +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.10mm DETAIL @SV06] +inherits = *0.10mm*; *SV06* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +bridge_acceleration = 800 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% +perimeters = 3 +wipe_tower_bridging = 5 + +[print:0.15mm QUALITY @SV06] +inherits = *0.15mm*; *SV06* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.15mm SPEED @SV06] +inherits = *0.15mm*; *SV06* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.20mm QUALITY @SV06] +inherits = *0.20mm*; *SV06* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.20mm SPEED @SV06] +inherits = *0.20mm*; *SV06* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.30mm DRAFT @SV06] +inherits = *0.30mm*; *SV06* +bottom_solid_layers = 3 +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 85 +max_print_speed = 200 +perimeter_speed = 50 +small_perimeter_speed = 30 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +support_material_speed = 45 +external_perimeter_extrusion_width = 0.6 +extrusion_width = 0.5 +first_layer_extrusion_width = 0.42 +infill_extrusion_width = 0.5 +perimeter_extrusion_width = 0.5 +solid_infill_extrusion_width = 0.5 +top_infill_extrusion_width = 0.45 +support_material_extrusion_width = 0.38 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.2 + + +## SV06 - 0.3mm nozzle + +[print:0.05mm ULTRADETAIL @0.3 nozzle SV06] +inherits = *0.05mm*; *0.3nozzle*; *SV06* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.3 and num_extruders==1 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.07mm ULTRADETAIL @0.3 nozzle SV06] +inherits = *0.07mm*; *0.3nozzle*; *SV06* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.3 +infill_speed = 30 +solid_infill_speed = 30 +support_material_speed = 30 +top_solid_infill_speed = 20 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.10mm DETAIL @0.3 nozzle SV06] +inherits = *0.10mm*; *0.3nozzleSV06*; *SV06* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.15mm QUALITY @0.3 nozzle SV06] +inherits = *0.15mm*; *0.3nozzleSV06*; *SV06* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.08 +raft_contact_distance = 0.07 +perimeter_extrusion_width = 0.27 +external_perimeter_extrusion_width = 0.27 +infill_extrusion_width = 0.27 +solid_infill_extrusion_width = 0.27 + +[print:0.15mm SOLUBLE FULL @0.3 nozzle SV06] +inherits = 0.15mm QUALITY @0.3 nozzle SV06 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.3 and num_extruders>1 +support_material_contact_distance = 0 +raft_contact_distance = 0 +wipe_tower_bridging = 5 +solid_infill_speed = 40 +support_material_extruder = 5 +support_material_interface_extruder = 5 +support_material_with_sheath = 1 +support_material_interface_layers = 4 +support_material_threshold = 60 +support_material = 1 +support_material_synchronize_layers = 1 +support_material_xy_spacing = 100% +support_material_style = snug +raft_first_layer_expansion = 2 +support_material_interface_spacing = 0.05 + +[print:0.15mm SOLUBLE INTERFACE @0.3 nozzle SV06] +inherits = 0.15mm SOLUBLE FULL @0.3 nozzle SV06 +support_material_extruder = 0 +support_material_interface_extruder = 5 +support_material_with_sheath = 0 +support_material_style = grid + +## SV06 - 0.6mm nozzle + +[print:0.15mm DETAIL @0.6 nozzle SV06] +inherits = *0.15mm*; *0.6nozzleSV06*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.20mm DETAIL @0.6 nozzle SV06] +inherits = *0.20mm*; *0.6nozzleSV06*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.30mm QUALITY @0.6 nozzle SV06] +inherits = *0.30mm*; *0.6nozzleSV06*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 1 + +[print:0.35mm SPEED @0.6 nozzle SV06] +inherits = *0.35mm*; *0.6nozzleSV06*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +[print:0.40mm DRAFT @0.6 nozzle SV06] +inherits = *0.40mm*; *0.6nozzleSV06*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +## SV06 - 0.8mm nozzle + +## Only Single mode at the moment + +[print:0.30mm DETAIL @0.8 nozzle SV06] +inherits = *common*; *0.8nozzleSV06* +layer_height = 0.30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 80 +solid_infill_speed = 50 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.40mm QUALITY @0.8 nozzle SV06] +inherits = *common*; *0.8nozzleSV06* +layer_height = 0.4 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 45 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.55mm DRAFT @0.8 nozzle SV06] +inherits = *common*; *0.8nozzleSV06* +layer_height = 0.55 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 30 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 40 +support_material_speed = 35 +support_material_contact_distance = 0.25 +top_solid_infill_speed = 30 +external_perimeter_extrusion_width = 1 +perimeter_extrusion_width = 1 + +## SV06 PLUS ## + + +## SV06 PLUS - 0.4mm nozzle + +[print:0.05mm ULTRADETAIL @SV06 PLUS] +inherits = *0.05mm*; *SV06 PLUS* +fill_pattern = gyroid +fill_density = 15% +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.07mm ULTRADETAIL @SV06 PLUS] +inherits = *0.07mm*; *SV06 PLUS* +fill_pattern = gyroid +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material +top_infill_extrusion_width = 0.4 +support_material_contact_distance = 0.1 +raft_contact_distance = 0.1 + +[print:0.10mm DETAIL @SV06 PLUS] +inherits = *0.10mm*; *SV06 PLUS* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +bridge_acceleration = 800 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% +perimeters = 3 +wipe_tower_bridging = 5 + +[print:0.15mm QUALITY @SV06 PLUS] +inherits = *0.15mm*; *SV06 PLUS* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.15mm SPEED @SV06 PLUS] +inherits = *0.15mm*; *SV06 PLUS* +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.20mm QUALITY @SV06 PLUS] +inherits = *0.20mm*; *SV06 PLUS* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 80 +max_print_speed = 200 +perimeter_speed = 45 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +fill_pattern = gyroid +fill_density = 15% + +[print:0.20mm SPEED @SV06 PLUS] +inherits = *0.20mm*; *SV06 PLUS* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 200 +max_print_speed = 200 +perimeter_speed = 60 +solid_infill_speed = 200 +top_solid_infill_speed = 50 + +[print:0.30mm DRAFT @SV06 PLUS] +inherits = *0.30mm*; *SV06 PLUS* +bottom_solid_layers = 3 +bridge_speed = 25 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.4 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 85 +max_print_speed = 200 +perimeter_speed = 50 +small_perimeter_speed = 30 +solid_infill_speed = 80 +top_solid_infill_speed = 40 +support_material_speed = 45 +external_perimeter_extrusion_width = 0.6 +extrusion_width = 0.5 +first_layer_extrusion_width = 0.42 +infill_extrusion_width = 0.5 +perimeter_extrusion_width = 0.5 +solid_infill_extrusion_width = 0.5 +top_infill_extrusion_width = 0.45 +support_material_extrusion_width = 0.38 +support_material_contact_distance = 0.2 +raft_contact_distance = 0.2 + + +## SV06 PLUS - 0.3mm nozzle + +[print:0.05mm ULTRADETAIL @0.3 nozzle SV06 PLUS] +inherits = *0.05mm*; *0.3nozzle*; *SV06 PLUS* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.3 and num_extruders==1 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.07mm ULTRADETAIL @0.3 nozzle SV06 PLUS] +inherits = *0.07mm*; *0.3nozzle*; *SV06 PLUS* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.3 +infill_speed = 30 +solid_infill_speed = 30 +support_material_speed = 30 +top_solid_infill_speed = 20 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.10mm DETAIL @0.3 nozzle SV06 PLUS] +inherits = *0.10mm*; *0.3nozzleSV06 PLUS*; *SV06 PLUS* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.07 +raft_contact_distance = 0.07 + +[print:0.15mm QUALITY @0.3 nozzle SV06 PLUS] +inherits = *0.15mm*; *0.3nozzleSV06 PLUS*; *SV06 PLUS* +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.3 +fill_pattern = grid +fill_density = 20% +support_material_contact_distance = 0.08 +raft_contact_distance = 0.07 +perimeter_extrusion_width = 0.27 +external_perimeter_extrusion_width = 0.27 +infill_extrusion_width = 0.27 +solid_infill_extrusion_width = 0.27 + +[print:0.15mm SOLUBLE FULL @0.3 nozzle SV06 PLUS] +inherits = 0.15mm QUALITY @0.3 nozzle SV06 PLUS +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.3 and num_extruders>1 +support_material_contact_distance = 0 +raft_contact_distance = 0 +wipe_tower_bridging = 5 +solid_infill_speed = 40 +support_material_extruder = 5 +support_material_interface_extruder = 5 +support_material_with_sheath = 1 +support_material_interface_layers = 4 +support_material_threshold = 60 +support_material = 1 +support_material_synchronize_layers = 1 +support_material_xy_spacing = 100% +support_material_style = snug +raft_first_layer_expansion = 2 +support_material_interface_spacing = 0.05 + +[print:0.15mm SOLUBLE INTERFACE @0.3 nozzle SV06 PLUS] +inherits = 0.15mm SOLUBLE FULL @0.3 nozzle SV06 PLUS +support_material_extruder = 0 +support_material_interface_extruder = 5 +support_material_with_sheath = 0 +support_material_style = grid + +## SV06 PLUS - 0.6mm nozzle + +[print:0.15mm DETAIL @0.6 nozzle SV06 PLUS] +inherits = *0.15mm*; *0.6nozzleSV06 PLUS*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.20mm DETAIL @0.6 nozzle SV06 PLUS] +inherits = *0.20mm*; *0.6nozzleSV06 PLUS*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.22 +raft_contact_distance = 0.2 +bridge_flow_ratio = 1 + +[print:0.30mm QUALITY @0.6 nozzle SV06 PLUS] +inherits = *0.30mm*; *0.6nozzleSV06 PLUS*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 1 + +[print:0.35mm SPEED @0.6 nozzle SV06 PLUS] +inherits = *0.35mm*; *0.6nozzleSV06 PLUS*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +[print:0.40mm DRAFT @0.6 nozzle SV06 PLUS] +inherits = *0.40mm*; *0.6nozzleSV06 PLUS*; +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.6 +external_perimeter_speed = 35 +infill_acceleration = 1000 +infill_speed = 70 +max_print_speed = 100 +perimeter_speed = 45 +solid_infill_speed = 70 +top_solid_infill_speed = 45 +external_perimeter_extrusion_width = 0.68 +perimeter_extrusion_width = 0.68 +infill_extrusion_width = 0.68 +solid_infill_extrusion_width = 0.68 +support_material_contact_distance = 0.25 +raft_contact_distance = 0.25 +bridge_flow_ratio = 0.95 + +## SV06 PLUS - 0.8mm nozzle + +## Only Single mode at the moment + +[print:0.30mm DETAIL @0.8 nozzle SV06 PLUS] +inherits = *common*; *0.8nozzleSV06 PLUS* +layer_height = 0.30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 80 +solid_infill_speed = 50 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.40mm QUALITY @0.8 nozzle SV06 PLUS] +inherits = *common*; *0.8nozzleSV06 PLUS* +layer_height = 0.4 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 35 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 45 +top_solid_infill_speed = 35 +support_material_speed = 40 + +[print:0.55mm DRAFT @0.8 nozzle SV06 PLUS] +inherits = *common*; *0.8nozzleSV06 PLUS* +layer_height = 0.55 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06 PLUS.*/ and nozzle_diameter[0]==0.8 +perimeter_speed = 30 +external_perimeter_speed = 25 +infill_acceleration = 1000 +infill_speed = 50 +max_print_speed = 50 +solid_infill_speed = 40 +support_material_speed = 35 +support_material_contact_distance = 0.25 +top_solid_infill_speed = 30 +external_perimeter_extrusion_width = 1 +perimeter_extrusion_width = 1 + + +# XXXXXXxxXXXXXXXXXXXXXX +# XXX--- filament ---XXX +# XXXXXXXXxxXXXXXXXXXXXX + +[filament:*common*] +cooling = 1 +compatible_printers = +extrusion_multiplier = 1 +filament_loading_speed = 28 +filament_loading_speed_start = 3 +filament_unloading_speed = 90 +filament_unloading_speed_start = 100 +filament_toolchange_delay = 0 +filament_cooling_moves = 4 +filament_cooling_initial_speed = 2.2 +filament_cooling_final_speed = 3.4 +filament_load_time = 0 +filament_unload_time = 0 +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_minimal_purge_on_wipe_tower = 15 +filament_cost = 0 +filament_density = 0 +filament_diameter = 1.75 +filament_notes = "" +filament_settings_id = "" +filament_soluble = 0 +min_print_speed = 15 +slowdown_below_layer_time = 15 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ + +[filament:*PLA*] +inherits = *common* +bed_temperature = 60 +bridge_fan_speed = 100 +disable_fan_first_layers = 1 +full_fan_speed_layer = 4 +fan_always_on = 1 +fan_below_layer_time = 100 +filament_colour = #FF8000 +filament_max_volumetric_speed = 15 +filament_type = PLA +first_layer_bed_temperature = 60 +first_layer_temperature = 215 +max_fan_speed = 100 +min_fan_speed = 100 +temperature = 210 + +[filament:*PET*] +inherits = *common* +bed_temperature = 90 +bridge_fan_speed = 50 +disable_fan_first_layers = 3 +full_fan_speed_layer = 5 +fan_always_on = 1 +fan_below_layer_time = 20 +filament_colour = #FF8000 +filament_max_volumetric_speed = 8 +filament_type = PETG +first_layer_bed_temperature = 85 +first_layer_temperature = 230 +max_fan_speed = 50 +min_fan_speed = 30 +temperature = 240 +filament_retract_length = 1 +filament_retract_lift = 0.2 + +[filament:*ABS*] +inherits = *common* +bed_temperature = 100 +bridge_fan_speed = 25 +cooling = 0 +disable_fan_first_layers = 3 +fan_always_on = 0 +fan_below_layer_time = 20 +filament_colour = #FFF2EC +filament_max_volumetric_speed = 11 +filament_ramming_parameters = "120 100 5.70968 6.03226 7 8.25806 9 9.19355 9.3871 9.77419 10.129 10.3226 10.4516 10.5161| 0.05 5.69677 0.45 6.15484 0.95 8.76774 1.45 9.20323 1.95 9.95806 2.45 10.3871 2.95 10.5677 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" +filament_type = ABS +first_layer_bed_temperature = 100 +first_layer_temperature = 255 +max_fan_speed = 30 +min_fan_speed = 20 +temperature = 255 + +[filament:*ABSC*] +inherits = *common* +bed_temperature = 100 +bridge_fan_speed = 25 +cooling = 1 +disable_fan_first_layers = 4 +fan_always_on = 0 +fan_below_layer_time = 30 +slowdown_below_layer_time = 20 +filament_colour = #FFF2EC +filament_max_volumetric_speed = 11 +filament_ramming_parameters = "120 100 5.70968 6.03226 7 8.25806 9 9.19355 9.3871 9.77419 10.129 10.3226 10.4516 10.5161| 0.05 5.69677 0.45 6.15484 0.95 8.76774 1.45 9.20323 1.95 9.95806 2.45 10.3871 2.95 10.5677 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" +filament_type = ABS +first_layer_bed_temperature = 100 +first_layer_temperature = 255 +max_fan_speed = 15 +min_fan_speed = 15 +min_print_speed = 15 +temperature = 255 + +[filament:*FLEX*] +inherits = *common* +bed_temperature = 50 +bridge_fan_speed = 80 +compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.*PRINTER_VENDOR_SOVOL.*/ and printer_notes=~/.*PRINTER_MODEL_SV06.*/ and single_extruder_multi_material) +cooling = 0 +disable_fan_first_layers = 3 +extrusion_multiplier = 1.15 +fan_always_on = 0 +fan_below_layer_time = 100 +filament_colour = #008000 +filament_max_volumetric_speed = 1.5 +filament_type = FLEX +first_layer_bed_temperature = 50 +first_layer_temperature = 240 +max_fan_speed = 90 +min_fan_speed = 70 +temperature = 240 +filament_retract_length = 0.8 +filament_deretract_speed = 25 +filament_retract_lift = 0 +filament_wipe = 0 + +[filament:Prusament ASA @SOVOL] +inherits = *ABS* +filament_vendor = Prusa Polymers +filament_cost = 42.69 +filament_density = 1.07 +filament_spool_weight = 201 +fan_always_on = 1 +first_layer_temperature = 260 +first_layer_bed_temperature = 100 +temperature = 260 +bed_temperature = 100 +cooling = 1 +min_fan_speed = 20 +max_fan_speed = 20 +bridge_fan_speed = 30 +min_print_speed = 15 +slowdown_below_layer_time = 15 +disable_fan_first_layers = 4 +filament_type = ASA +filament_colour = #FFF2EC + +[filament:Prusament PC Blend @SOVOL] +inherits = *ABS* +filament_vendor = Prusa Polymers +filament_cost = 62.36 +filament_density = 1.22 +filament_spool_weight = 201 +fan_always_on = 0 +first_layer_temperature = 275 +first_layer_bed_temperature = 95 +temperature = 275 +bed_temperature = 100 +cooling = 1 +min_fan_speed = 20 +max_fan_speed = 20 +bridge_fan_speed = 30 +min_print_speed = 15 +slowdown_below_layer_time = 20 +disable_fan_first_layers = 4 +fan_below_layer_time = 30 +filament_type = PC +filament_colour = #DEE0E6 +filament_max_volumetric_speed = 8 +filament_retract_lift = 0.2 + +[filament:Prusament PC Blend Carbon Fiber @SOVOL] +inherits = Prusament PC Blend +filament_cost = 90.73 +filament_density = 1.16 +extrusion_multiplier = 1.04 +first_layer_temperature = 285 +temperature = 285 +disable_fan_first_layers = 4 +fan_below_layer_time = 10 +filament_colour = #BBBBBB +filament_retract_length = nil +filament_retract_lift = nil + +[filament:Prusament PA11 Carbon Fiber @SOVOL] +inherits = Prusament PC Blend Carbon Fiber +filament_cost = 151.24 +filament_density = 1.11 +filament_type = PA +filament_max_volumetric_speed = 6.5 +extrusion_multiplier = 1.05 +first_layer_temperature = 275 +temperature = 285 +first_layer_bed_temperature = 90 +bed_temperature = 100 +fan_below_layer_time = 10 + + +[filament:Generic ABS @SOVOL] +inherits = *ABSC* +filament_vendor = Generic +filament_cost = 27.82 +filament_density = 1.04 + +[filament:Generic PETG @SOVOL] +inherits = *PET* +renamed_from = "Generic PET" +filament_vendor = Generic +filament_cost = 27.82 +filament_density = 1.27 + +[filament:Generic FLEX @SOVOL] +inherits = *FLEX* +filament_vendor = Generic +filament_cost = 82 +filament_density = 1.22 +filament_max_volumetric_speed = 1.2 +filament_retract_length = 0 +filament_retract_speed = nil +filament_retract_lift = nil + +[filament:Generic HIPS @SOVOL] +inherits = *ABS* +filament_vendor = Generic +filament_cost = 27.3 +filament_density = 1.04 +bridge_fan_speed = 50 +cooling = 1 +extrusion_multiplier = 1 +fan_always_on = 1 +fan_below_layer_time = 10 +filament_colour = #FFFFD7 +filament_soluble = 1 +filament_type = HIPS +first_layer_temperature = 230 +max_fan_speed = 20 +min_fan_speed = 20 +temperature = 230 + + +## Filaments 0.8 nozzle + +[filament:Generic PLA 0.8 @SOVOL] +inherits = Generic PLA +first_layer_temperature = 220 +temperature = 220 +filament_max_volumetric_speed = 15 +slowdown_below_layer_time = 20 + + +[filament:Generic ABS 0.8 @SOVOL] +inherits = Generic ABS +first_layer_temperature = 265 +temperature = 265 +filament_max_volumetric_speed = 15 + +[filament:Generic PETG 0.8 @SOVOL] +inherits = Generic PETG +first_layer_temperature = 240 +temperature = 250 +filament_max_volumetric_speed = 20 +filament_retract_lift = 0.2 +slowdown_below_layer_time = 20 + +[printer:*common*] +printer_technology = FFF +bed_shape = 0x0,220x0,220x220,0x220 +before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\n\n +between_objects_gcode = +deretract_speed = 0 +end_gcode = G91 ;Relative positioning\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X10 Y220 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z +extruder_offset = 0x0 +gcode_flavor = marlin +silent_mode = 0 +remaining_times = 1 +machine_max_acceleration_e = 10000 +machine_max_acceleration_extruding = 2000 +machine_max_acceleration_retracting = 1500 +machine_max_acceleration_x = 9000 +machine_max_acceleration_y = 9000 +machine_max_acceleration_z = 500 +machine_max_feedrate_e = 120 +machine_max_feedrate_x = 500 +machine_max_feedrate_y = 500 +machine_max_feedrate_z = 12 +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 +machine_limits_usage = emit_to_gcode +layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] +max_layer_height = 0.25 +min_layer_height = 0.07 +max_print_height = 250 +nozzle_diameter = 0.4 +octoprint_apikey = +octoprint_host = +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_SOVOL\nPRINTER_MODEL_SV06\n +printer_settings_id = +retract_before_travel = 2 +retract_before_wipe = 0% +retract_layer_change = 1 +retract_length = 0.5 +retract_length_toolchange = 4 +retract_lift = 0 +retract_lift_above = 0 +retract_lift_below = 0 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 40 +serial_port = +serial_speed = 250000 +single_extruder_multi_material = 0 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +toolchange_gcode = +use_firmware_retraction = 0 +use_relative_e_distances = 1 +use_volumetric_e = 0 +variable_layer_height = 1 +wipe = 1 +z_offset = 0 +printer_model = +printer_variant = 0.4 +default_print_profile = 0.20mm QUALITY +default_filament_profile = Prusament PLA +color_change_gcode = M600\nG1 E0.4 F1500 ; prime after color change + + +[printer:*multimaterial*] +inherits = *common* +deretract_speed = 50 +retract_before_travel = 3 +retract_before_wipe = 60% +retract_layer_change = 0 +retract_length = 4 +retract_lift = 0.6 +retract_lift_above = 0 +retract_lift_below = 199 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 80 +parking_pos_retraction = 92 +cooling_tube_length = 5 +cooling_tube_retraction = 91.5 +single_extruder_multi_material = 1 +variable_layer_height = 1 +printer_model = SV02 + + +# XXXXXXXXXXXXXXXXXX +# XXX--- SV01 ---XXX +# XXXXXXXXXXXXXXXXXX + +[printer:SV01] +inherits = *common* +bed_shape = 0x0,280x0,280x240,0x240 +before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n +cooling_tube_length = 5 +cooling_tube_retraction = 91.5 +deretract_speed = 0 +end_gcode = G1 X5 Y200 F1000 ; \nM104 S0 ; kill extruder temperature\nM140 S0 ; kill bed temperature\nM107; kill fan\nM84 ; disable motors\nM300; beep\n +extra_loading_move = -2 +extruder_colour = #0080FF +gcode_flavor = marlin2 +high_current_on_filament_swap = 0 +machine_max_acceleration_e = 1000,5000 +machine_max_acceleration_extruding = 500,1250 +machine_max_acceleration_retracting = 500,1250 +machine_max_acceleration_x = 500,1000 +machine_max_acceleration_y = 500,1000 +machine_max_acceleration_z = 100,200 +machine_max_feedrate_e = 25,120 +machine_max_feedrate_x = 300,200 +machine_max_feedrate_y = 300,200 +machine_max_feedrate_z = 5,12 +machine_max_jerk_e = 5,2.5 +machine_max_jerk_x = 10,10 +machine_max_jerk_y = 10,10 +machine_max_jerk_z = 0.4,0.4 +machine_min_extruding_rate = 0,0 +machine_min_travel_rate = 0,0 +max_layer_height = 0.32 +max_print_height = 300 +min_layer_height = 0.1 +nozzle_diameter = 0.4 +parking_pos_retraction = 92 +printer_settings_id = +printer_technology = FFF +remaining_times = 0 +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_SOVOL\nPRINTER_MODEL_SV01\n +retract_layer_change = 0 +retract_length = 2 +retract_length_toolchange = 10 +silent_mode = 0 +start_gcode = G28 ; home all\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; \nG1 X5.1 Y10 Z0.3 F5000.0 ; Move to start position\nG1 X5.1 Y200 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X5.4 Y200 Z0.3 F5000.0 ; Move to side a little\nG1 X5.4 Y10 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z1.0 F3000 ; +use_relative_e_distances = 0 +printer_model = SV01 +default_print_profile = 0.20mm SPEED @SV01 +thumbnails = 160x120 + + +[printer:SV01 0.3 nozzle] +inherits = SV01 +nozzle_diameter = 0.3 +max_layer_height = 0.15 +min_layer_height = 0.05 +printer_variant = 0.3 +retract_lift = 0.15 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.10mm DETAIL @0.3 nozzle SV01 +color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change + +[printer:SV01 0.6 nozzle] +inherits = SV01 +nozzle_diameter = 0.6 +max_layer_height = 0.40 +min_layer_height = 0.15 +printer_variant = 0.6 +deretract_speed = 28 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.30mm QUALITY @0.6 nozzle SV01 +color_change_gcode = M600\nG1 E0.5 F1500 ; prime after color change + +[printer:SV01 0.8 nozzle] +inherits = SV01 +nozzle_diameter = 0.8 +max_layer_height = 0.6 +min_layer_height = 0.2 +printer_variant = 0.8 +retract_length = 0.7 +retract_speed = 40 +deretract_speed = 23 +retract_lift = 0.25 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.40mm QUALITY @0.8 nozzle +default_filament_profile = Prusament PLA @0.8 nozzle +color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change + + + +# XXXXXXXXXXXXXXXXXXXXX +# XXX--- SV01 PRO---XXX +# XXXXXXXXXXXXXXXXXXXXX + +[printer:SV01 PRO] +inherits = *common* +bed_shape = 0x0,280x0,280x240,0x240 +before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n +cooling_tube_length = 5 +cooling_tube_retraction = 91.5 +deretract_speed = 0 +end_gcode = G1 X5 Y200 F1000 ; \nM104 S0 ; kill extruder temperature\nM140 S0 ; kill bed temperature\nM107; kill fan\nM84 ; disable motors\nM300; beep\n +extra_loading_move = -2 +extruder_colour = #0080FF +gcode_flavor = marlin2 +high_current_on_filament_swap = 0 +machine_max_acceleration_e = 1000,5000 +machine_max_acceleration_extruding = 500,1250 +machine_max_acceleration_retracting = 500,1250 +machine_max_acceleration_x = 500,1000 +machine_max_acceleration_y = 500,1000 +machine_max_acceleration_z = 100,200 +machine_max_feedrate_e = 25,120 +machine_max_feedrate_x = 300,200 +machine_max_feedrate_y = 300,200 +machine_max_feedrate_z = 5,12 +machine_max_jerk_e = 5,2.5 +machine_max_jerk_x = 10,10 +machine_max_jerk_y = 10,10 +machine_max_jerk_z = 0.4,0.4 +machine_min_extruding_rate = 0,0 +machine_min_travel_rate = 0,0 +max_layer_height = 0.32 +max_print_height = 300 +min_layer_height = 0.1 +nozzle_diameter = 0.4 +parking_pos_retraction = 92 +printer_settings_id = +printer_technology = FFF +remaining_times = 0 +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_SOVOL\nPRINTER_MODEL_SV01 PRO\n +retract_layer_change = 0 +retract_length = 2 +retract_length_toolchange = 10 +silent_mode = 0 +start_gcode = //M85 S180 ; For use with raspberry only, it kills the printer if it loses the USB connection and remains inactive for 3 minutes. It works in Marlin 1.1.6\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; Home all axes\nG29 ; Auto bed-level (BL-Touch) // Comment if you don't like the automatic level in each print\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0 ; Reset Extruder\nG1 X5 Y20 Z2.0 F3000.0 ; Move to start position\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 X5 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X5 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X5.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z1.0 F3000 ; +use_relative_e_distances = 0 +printer_model = SV01 PRO +default_print_profile = 0.20mm SPEED @SV01 PRO +thumbnails = 160x120 + + +[printer:SV01 PRO 0.3 nozzle] +inherits = SV01 PRO +nozzle_diameter = 0.3 +max_layer_height = 0.15 +min_layer_height = 0.05 +printer_variant = 0.3 +retract_lift = 0.15 +start_gcode = //M85 S180 ; For use with raspberry only, it kills the printer if it loses the USB connection and remains inactive for 3 minutes. It works in Marlin 1.1.6\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; Home all axes\nG29 ; Auto bed-level (BL-Touch) // Comment if you don't like the automatic level in each print\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0 ; Reset Extruder\nG1 X5 Y20 Z2.0 F3000.0 ; Move to start position\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 X5 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X5 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X5.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z1.0 F3000 ; +default_print_profile = 0.10mm DETAIL @0.3 nozzle SV01 PRO +color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change + +[printer:SV01 PRO 0.6 nozzle] +inherits = SV01 PRO +nozzle_diameter = 0.6 +max_layer_height = 0.40 +min_layer_height = 0.15 +printer_variant = 0.6 +deretract_speed = 28 +start_gcode = //M85 S180 ; For use with raspberry only, it kills the printer if it loses the USB connection and remains inactive for 3 minutes. It works in Marlin 1.1.6\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; Home all axes\nG29 ; Auto bed-level (BL-Touch) // Comment if you don't like the automatic level in each print\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0 ; Reset Extruder\nG1 X5 Y20 Z2.0 F3000.0 ; Move to start position\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 X5 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X5 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X5.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z1.0 F3000 ; +default_print_profile = 0.30mm QUALITY @0.6 nozzle SV01 PRO +color_change_gcode = M600\nG1 E0.5 F1500 ; prime after color change + +[printer:SV01 PRO 0.8 nozzle] +inherits = SV01 PRO +nozzle_diameter = 0.8 +max_layer_height = 0.6 +min_layer_height = 0.2 +printer_variant = 0.8 +retract_length = 0.7 +retract_speed = 40 +deretract_speed = 23 +retract_lift = 0.25 +start_gcode = //M85 S180 ; For use with raspberry only, it kills the printer if it loses the USB connection and remains inactive for 3 minutes. It works in Marlin 1.1.6\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; Home all axes\nG29 ; Auto bed-level (BL-Touch) // Comment if you don't like the automatic level in each print\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0 ; Reset Extruder\nG1 X5 Y20 Z2.0 F3000.0 ; Move to start position\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 X5 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X5 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X5.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z1.0 F3000 ; +default_print_profile = 0.40mm QUALITY @0.8 nozzle +default_filament_profile = Prusament PLA @0.8 nozzle +color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change + + + +# XXXXXXXXXXXXXXXXX +# XXX--- SV02 ---XXX +# XXXXXXXXXXXXXXXXX + +[printer:SV02] +inherits = *common* +bed_shape = 0x0,280x0,280x240,0x240 +end_gcode = G91 ;Relative positioning\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X10 Y220 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z +before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n +gcode_flavor = marlin2 +machine_max_acceleration_e = 5000,5000 +machine_max_acceleration_extruding = 1250,1250 +machine_max_acceleration_retracting = 1250,1250 +machine_max_acceleration_x = 1000,960 +machine_max_acceleration_y = 1000,960 +machine_max_acceleration_z = 200,200 +machine_max_feedrate_e = 120,120 +machine_max_feedrate_x = 200,100 +machine_max_feedrate_y = 200,100 +machine_max_feedrate_z = 12,12 +machine_max_jerk_e = 4.5,4.5 +machine_max_jerk_x = 8,8 +machine_max_jerk_y = 8,8 +machine_max_jerk_z = 0.4,0.4 +machine_min_extruding_rate = 0,0 +machine_min_travel_rate = 0,0 +silent_mode = 1 +remaining_times = 1 +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_SOVOL\nPRINTER_MODEL_SV02\n +retract_lift_below = 209 +max_print_height = 300 +single_extruder_multi_material = 1 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +printer_model = SV02 +default_print_profile = 0.20mm SPEED @SV02 +thumbnails = 160x120 + + +[printer:SV02 0.3 nozzle] +inherits = SV02 +nozzle_diameter = 0.3 +max_layer_height = 0.15 +min_layer_height = 0.05 +printer_variant = 0.3 +retract_lift = 0.15 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.10mm DETAIL @0.3 nozzle SV02 +color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change + +[printer:SV02 0.6 nozzle] +inherits = SV02 +nozzle_diameter = 0.6 +max_layer_height = 0.40 +min_layer_height = 0.15 +printer_variant = 0.6 +deretract_speed = 28 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.30mm QUALITY @0.6 nozzle SV02 +color_change_gcode = M600\nG1 E0.5 F1500 ; prime after color change + +[printer:SV02 0.8 nozzle] +inherits = SV02 +nozzle_diameter = 0.8 +max_layer_height = 0.6 +min_layer_height = 0.2 +printer_variant = 0.8 +retract_length = 0.7 +retract_speed = 40 +deretract_speed = 23 +retract_lift = 0.25 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.40mm QUALITY @0.8 nozzle +default_filament_profile = Prusament PLA @0.8 nozzle +color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change + + +# XXXXXXXXXXXXXXXXX +# XXX--- SV03 ---XXX +# XXXXXXXXXXXXXXXXX + +[printer:SV03] +inherits = *common* +bed_shape = 0x0,350x0,350x350,0x350 +end_gcode = G91 ;Relative positioning\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X10 Y220 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z +before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n +machine_max_acceleration_e = 5000,5000 +machine_max_acceleration_extruding = 1250,1250 +machine_max_acceleration_retracting = 1250,1250 +machine_max_acceleration_x = 1000,960 +machine_max_acceleration_y = 1000,960 +machine_max_acceleration_z = 200,200 +machine_max_feedrate_e = 120,120 +machine_max_feedrate_x = 200,100 +machine_max_feedrate_y = 200,100 +machine_max_feedrate_z = 12,12 +machine_max_jerk_e = 4.5,4.5 +machine_max_jerk_x = 8,8 +machine_max_jerk_y = 8,8 +machine_max_jerk_z = 0.4,0.4 +machine_min_extruding_rate = 0,0 +machine_min_travel_rate = 0,0 +silent_mode = 1 +remaining_times = 1 +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_SOVOL\nPRINTER_MODEL_SV03\n +retract_lift_below = 209 +max_print_height = 400 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +printer_model = SV03 +default_print_profile = 0.20mm SPEED @SV03 +thumbnails = 160x120 + + +[printer:SV03 0.3 nozzle] +inherits = SV03 +nozzle_diameter = 0.3 +max_layer_height = 0.15 +min_layer_height = 0.05 +printer_variant = 0.3 +retract_lift = 0.15 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.10mm DETAIL @0.3 nozzle SV03 +color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change + +[printer:SV03 0.6 nozzle] +inherits = SV03 +nozzle_diameter = 0.6 +max_layer_height = 0.40 +min_layer_height = 0.15 +printer_variant = 0.6 +deretract_speed = 28 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.30mm QUALITY @0.6 nozzle SV03 +color_change_gcode = M600\nG1 E0.5 F1500 ; prime after color change + +[printer:SV03 0.8 nozzle] +inherits = SV03 +nozzle_diameter = 0.8 +max_layer_height = 0.6 +min_layer_height = 0.2 +printer_variant = 0.8 +retract_length = 0.7 +retract_speed = 40 +deretract_speed = 23 +retract_lift = 0.25 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.40mm QUALITY @0.8 nozzle +default_filament_profile = Prusament PLA @0.8 nozzle +color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change + + +# XXXXXXXXXXXXXXXXX +# XXX--- SV04 ---XXX +# XXXXXXXXXXXXXXXXX + +[printer:SV04] +inherits = *common* +bed_shape = 0x0,302x0,302x302,0x302 +deretract_speed = 0 +end_gcode = G91 ;Relative positioning\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X10 Y220 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z +extra_loading_move = -2 +extruder_colour = ; +extruder_offset = 0x0 +machine_max_acceleration_e = 5000 +machine_max_acceleration_extruding = 1250 +machine_max_acceleration_retracting = 1250 +machine_max_acceleration_x = 1000 +machine_max_acceleration_y = 1000 +machine_max_acceleration_z = 200 +machine_max_feedrate_e = 120 +machine_max_feedrate_x = 200 +machine_max_feedrate_y = 200 +machine_max_feedrate_z = 12 +machine_max_jerk_e = 4.5 +machine_max_jerk_x = 8 +machine_max_jerk_y = 8 +machine_max_jerk_z = 0.4 +machine_min_extruding_rate = 0,0 +machine_min_travel_rate = 0,0 +max_layer_height = 0.25 +max_print_height = 402 +min_layer_height = 0.07 +nozzle_diameter = 0.4 +parking_pos_retraction = 92 +pause_print_gcode = M601 +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_SOVOL\nPRINTER_MODEL_SV04\n +remaining_times = 1 +retract_before_travel = 2 +retract_before_wipe = 0% +retract_layer_change = 1 +retract_length = 0.5 +retract_length_toolchange = 4 +retract_lift = 0 +retract_lift_above = 0 +retract_lift_below = 209 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 40 +silent_mode = 1 +single_extruder_multi_material = 0 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +printer_model = SV04 +default_print_profile = 0.20mm SPEED @SV04 +filament = Prusament PLA @Template +filament_1 = Prusament PLA @Template +thumbnails = 160x120 + +[printer:SV04 0.3 nozzle] +inherits = SV04 +nozzle_diameter = 0.3 +max_layer_height = 0.15 +min_layer_height = 0.05 +printer_variant = 0.3 +retract_lift = 0.15 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.10mm DETAIL @0.3 nozzle SV04 +color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change + +[printer:SV04 0.6 nozzle] +inherits = SV04 +nozzle_diameter = 0.6 +max_layer_height = 0.40 +min_layer_height = 0.15 +printer_variant = 0.6 +deretract_speed = 28 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.30mm QUALITY @0.6 nozzle SV04 +color_change_gcode = M600\nG1 E0.5 F1500 ; prime after color change + +[printer:SV04 0.8 nozzle] +inherits = SV04 +nozzle_diameter = 0.8 +max_layer_height = 0.6 +min_layer_height = 0.2 +printer_variant = 0.8 +retract_length = 0.7 +retract_speed = 40 +deretract_speed = 23 +retract_lift = 0.25 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.40mm QUALITY @0.8 nozzle +default_filament_profile = Prusament PLA @0.8 nozzle +color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change + + +# XXXXXXXXXXXXXXXXX +# XXX--- SV04 Copy Mode ---XXX +# XXXXXXXXXXXXXXXXX + +[printer:SV04 Copy Mode] +inherits = SV04 +bed_shape = 0x0,150x0,150x302,0x302 +end_gcode = G91 ;Relative positioning\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X10 Y220 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +printer_model = SV04 Copy Mode +default_print_profile = 0.20mm SPEED @SV04 Copy Mode +filament = Prusament PLA @Template +filament_1 = Prusament PLA @Template +thumbnails = 160x120 + +[printer:SV04 Copy Mode 0.3 nozzle] +inherits = SV04 Copy Mode +nozzle_diameter = 0.3 +max_layer_height = 0.15 +min_layer_height = 0.05 +printer_variant = 0.3 +retract_lift = 0.15 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.10mm DETAIL @0.3 nozzle SV04 Copy Mode +color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change + +[printer:SV04 Copy Mode 0.6 nozzle] +inherits = SV04 Copy Mode +nozzle_diameter = 0.6 +max_layer_height = 0.40 +min_layer_height = 0.15 +printer_variant = 0.6 +deretract_speed = 28 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.30mm QUALITY @0.6 nozzle SV04 Copy Mode +color_change_gcode = M600\nG1 E0.5 F1500 ; prime after color change + +[printer:SV04 Copy Mode 0.8 nozzle] +inherits = SV04 Copy Mode +nozzle_diameter = 0.8 +max_layer_height = 0.6 +min_layer_height = 0.2 +printer_variant = 0.8 +retract_length = 0.7 +retract_speed = 40 +deretract_speed = 23 +retract_lift = 0.25 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.40mm QUALITY @0.8 nozzle SV04 Copy Mode +default_filament_profile = Prusament PLA @0.8 nozzle SV04 Copy Mode +color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change + + +# XXXXXXXXXXXXXXXXX +# XXX--- SV04 Dual Mode ---XXX +# XXXXXXXXXXXXXXXXX + +[printer:SV04 Dual Mode] +inherits = SV04 +truder_offset = 0x0,0x0 +machine_max_acceleration_e = 5000,5000 +machine_max_acceleration_extruding = 1250,1250 +machine_max_acceleration_retracting = 1250,1250 +machine_max_acceleration_x = 1000,960 +machine_max_acceleration_y = 1000,960 +machine_max_acceleration_z = 200,200 +machine_max_feedrate_e = 120,120 +machine_max_feedrate_x = 200,100 +machine_max_feedrate_y = 200,100 +machine_max_feedrate_z = 12,12 +machine_max_jerk_e = 4.5,4.5 +machine_max_jerk_x = 8,8 +machine_max_jerk_y = 8,8 +machine_max_jerk_z = 0.4,0.4 +machine_min_extruding_rate = 0,0 +machine_min_travel_rate = 0,0 +max_layer_height = 0.25,0.25 +max_print_height = 402 +min_layer_height = 0.07,0.07 +nozzle_diameter = 0.4,0.4 +parking_pos_retraction = 92 +pause_print_gcode = M601 +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_SOVOL\nPRINTER_MODEL_SV04\n +remaining_times = 1 +retract_before_travel = 2,2 +retract_before_wipe = 0%,0% +retract_layer_change = 1,1 +retract_length = 0.5,0.5 +retract_length_toolchange = 4,4 +retract_lift = 0,0 +retract_lift_above = 0,0 +retract_lift_below = 209,209 +retract_restart_extra = 0,0 +retract_restart_extra_toolchange = 0,0 +retract_speed = 40,40 +silent_mode = 1 +single_extruder_multi_material = 0 +deretract_speed = 0,0 +ooze_prevention = 1 +standby_temperature_delta = -15 +end_gcode = G91 ;Relative positioning\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X10 Y220 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +printer_model = SV04 Dual Mode +default_print_profile = 0.20mm SPEED @SV04 Dual Mode +filament = Prusament PLA @Template +filament_1 = Prusament PLA @Template +thumbnails = 160x120 + +[printer:SV04 Dual Mode 0.3 nozzle] +inherits = SV04 Dual Mode +nozzle_diameter = 0.3 +max_layer_height = 0.15 +min_layer_height = 0.05 +printer_variant = 0.3 +retract_lift = 0.15 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.10mm DETAIL @0.3 nozzle SV04 Dual Mode +color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change + +[printer:SV04 Dual Mode 0.6 nozzle] +inherits = SV04 Dual Mode +nozzle_diameter = 0.6 +max_layer_height = 0.40 +min_layer_height = 0.15 +printer_variant = 0.6 +deretract_speed = 28 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.30mm QUALITY @0.6 nozzle SV04 Dual Mode +color_change_gcode = M600\nG1 E0.5 F1500 ; prime after color change + +[printer:SV04 Dual Mode 0.8 nozzle] +inherits = SV04 Dual Mode +nozzle_diameter = 0.8 +max_layer_height = 0.6 +min_layer_height = 0.2 +printer_variant = 0.8 +retract_length = 0.7 +retract_speed = 40 +deretract_speed = 23 +retract_lift = 0.25 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.40mm QUALITY @0.8 nozzle SV04 Dual Mode +default_filament_profile = Prusament PLA @0.8 nozzle SV04 Dual Mode +color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change + + +# XXXXXXXXXXXXXXXXX +# XXX--- SV04 Mirror Mode ---XXX +# XXXXXXXXXXXXXXXXX + +[printer:SV04 Mirror Mode] +inherits = SV04 +bed_shape = 0x0,115x0,115x302,0x302 +deretract_speed = 0 +end_gcode = G91 ;Relative positioning\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X10 Y220 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +printer_model = SV04 Mirror Mode +default_print_profile = 0.20mm SPEED @SV04 Mirror Mode +filament = Prusament PLA @Template +filament_1 = Prusament PLA @Template +thumbnails = 160x120 + +[printer:SV04 Mirror Mode 0.3 nozzle] +inherits = SV04 Mirror Mode +nozzle_diameter = 0.3 +max_layer_height = 0.15 +min_layer_height = 0.05 +printer_variant = 0.3 +retract_lift = 0.15 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.10mm DETAIL @0.3 nozzle SV04 Mirror Mode +color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change + +[printer:SV04 Mirror Mode 0.6 nozzle] +inherits = SV04 Mirror Mode +nozzle_diameter = 0.6 +max_layer_height = 0.40 +min_layer_height = 0.15 +printer_variant = 0.6 +deretract_speed = 28 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.30mm QUALITY @0.6 nozzle SV04 Mirror Mode +color_change_gcode = M600\nG1 E0.5 F1500 ; prime after color change + +[printer:SV04 Mirror Mode 0.8 nozzle] +inherits = SV04 Mirror Mode +nozzle_diameter = 0.8 +max_layer_height = 0.6 +min_layer_height = 0.2 +printer_variant = 0.8 +retract_length = 0.7 +retract_speed = 40 +deretract_speed = 23 +retract_lift = 0.25 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.40mm QUALITY @0.8 nozzle SV04 Mirror Mode +default_filament_profile = Prusament PLA @0.8 nozzle SV04 Mirror Mode +color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change + + +# XXXXXXXXXXXXXXXXX +# XXX--- SV04 Single Mode 01 ---XXX +# XXXXXXXXXXXXXXXXX + +[printer:SV04 Single Mode 01] +inherits = SV04 +deretract_speed = 0 +end_gcode = G91 ;Relative positioning\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X10 Y220 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z +start_gcode = M104 T0 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 T0 S[first_layer_temperature] ; wait for extruder temp\nG28;\nM420 S1;\nT0;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +printer_model = SV04 Single Mode 01 +default_print_profile = 0.20mm SPEED @SV04 Single Mode 01 +filament = Prusament PLA @Template +filament_1 = Prusament PLA @Template +thumbnails = 160x120 + +[printer:SV04 Single Mode 01 0.3 nozzle] +inherits = SV04 Single Mode 01 +nozzle_diameter = 0.3 +max_layer_height = 0.15 +min_layer_height = 0.05 +printer_variant = 0.3 +retract_lift = 0.15 +; start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.10mm DETAIL @0.3 nozzle SV04 Single Mode 01 +color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change + +[printer:SV04 Single Mode 01 0.6 nozzle] +inherits = SV04 Single Mode 01 +nozzle_diameter = 0.6 +max_layer_height = 0.40 +min_layer_height = 0.15 +printer_variant = 0.6 +deretract_speed = 28 +; start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.30mm QUALITY @0.6 nozzle SV04 Single Mode 01 +color_change_gcode = M600\nG1 E0.5 F1500 ; prime after color change + +[printer:SV04 Single Mode 01 0.8 nozzle] +inherits = SV04 Single Mode 01 +nozzle_diameter = 0.8 +max_layer_height = 0.6 +min_layer_height = 0.2 +printer_variant = 0.8 +retract_length = 0.7 +retract_speed = 40 +deretract_speed = 23 +retract_lift = 0.25 +; start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.40mm QUALITY @0.8 nozzle SV04 Single Mode 01 +default_filament_profile = Prusament PLA @0.8 nozzle SV04 Single Mode 01 +color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change + + +# XXXXXXXXXXXXXXXXX +# XXX--- SV04 Single Mode 02 ---XXX +# XXXXXXXXXXXXXXXXX + +[printer:SV04 Single Mode 02] +inherits = SV04 +deretract_speed = 0 +end_gcode = G91 ;Relative positioning\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X10 Y220 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z +start_gcode = M104 T1 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 T1 S[first_layer_temperature] ; wait for extruder temp\nG28;\nM420 S1;\nT1;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +printer_model = SV04 Single Mode 02 +default_print_profile = 0.20mm SPEED @SV04 Single Mode 02 +filament = Prusament PLA @Template +filament_1 = Prusament PLA @Template +thumbnails = 160x120 + +[printer:SV04 Single Mode 02 0.3 nozzle] +inherits = SV04 Single Mode 02 +nozzle_diameter = 0.3 +max_layer_height = 0.15 +min_layer_height = 0.05 +printer_variant = 0.3 +retract_lift = 0.15 +; start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.10mm DETAIL @0.3 nozzle SV04 Single Mode 02 +color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change + +[printer:SV04 Single Mode 02 0.6 nozzle] +inherits = SV04 Single Mode 02 +nozzle_diameter = 0.6 +max_layer_height = 0.40 +min_layer_height = 0.15 +printer_variant = 0.6 +deretract_speed = 28 +; start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.30mm QUALITY @0.6 nozzle SV04 Single Mode 02 +color_change_gcode = M600\nG1 E0.5 F1500 ; prime after color change + +[printer:SV04 Single Mode 02 0.8 nozzle] +inherits = SV04 Single Mode 02 +nozzle_diameter = 0.8 +max_layer_height = 0.6 +min_layer_height = 0.2 +printer_variant = 0.8 +retract_length = 0.7 +retract_speed = 40 +deretract_speed = 23 +retract_lift = 0.25 +; start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.40mm QUALITY @0.8 nozzle SV04 Single Mode 02 +default_filament_profile = Prusament PLA @0.8 nozzle SV04 Single Mode 02 +color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change + + +# XXXXXXXXXXXXXXXXX +# XXX--- SV05 ---XXX +# XXXXXXXXXXXXXXXXX + +[printer:SV05] +inherits = *common* +bed_shape = 0x0,220x0,220x220,0x220 +end_gcode = G91 ;Relative positioning\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X10 Y220 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z +machine_max_acceleration_e = 5000,5000 +machine_max_acceleration_extruding = 1250,1250 +machine_max_acceleration_retracting = 1250,1250 +machine_max_acceleration_x = 1000,960 +machine_max_acceleration_y = 1000,960 +machine_max_acceleration_z = 200,200 +machine_max_feedrate_e = 120,120 +machine_max_feedrate_x = 200,100 +machine_max_feedrate_y = 200,100 +machine_max_feedrate_z = 12,12 +machine_max_jerk_e = 4.5,4.5 +machine_max_jerk_x = 8,8 +machine_max_jerk_y = 8,8 +machine_max_jerk_z = 0.4,0.4 +machine_min_extruding_rate = 0,0 +machine_min_travel_rate = 0,0 +silent_mode = 1 +remaining_times = 1 +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_SOVOL\nPRINTER_MODEL_SV05\n +retract_lift_below = 209 +max_print_height = 300 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +printer_model = SV05 +default_print_profile = 0.20mm SPEED @SV05 +thumbnails = 160x120 + + +[printer:SV05 0.3 nozzle] +inherits = SV05 +nozzle_diameter = 0.3 +max_layer_height = 0.15 +min_layer_height = 0.05 +printer_variant = 0.3 +retract_lift = 0.15 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.10mm DETAIL @0.3 nozzle SV05 +color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change + +[printer:SV05 0.6 nozzle] +inherits = SV05 +nozzle_diameter = 0.6 +max_layer_height = 0.40 +min_layer_height = 0.15 +printer_variant = 0.6 +deretract_speed = 28 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.30mm QUALITY @0.6 nozzle SV05 +color_change_gcode = M600\nG1 E0.5 F1500 ; prime after color change + +[printer:SV05 0.8 nozzle] +inherits = SV05 +nozzle_diameter = 0.8 +max_layer_height = 0.6 +min_layer_height = 0.2 +printer_variant = 0.8 +retract_length = 0.7 +retract_speed = 40 +deretract_speed = 23 +retract_lift = 0.25 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.40mm QUALITY @0.8 nozzle +default_filament_profile = Prusament PLA @0.8 nozzle +color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change + + +# XXXXXXXXXXXXXXXXX +# XXX--- SV06 ---XXX +# XXXXXXXXXXXXXXXXX + +[printer:SV06] +inherits = *common* +bed_shape = 0x0,220x0,220x220,0x220 +end_gcode = G91 ;Relative positioning\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X10 Y220 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z +machine_max_acceleration_e = 5000,5000 +machine_max_acceleration_extruding = 1250,1250 +machine_max_acceleration_retracting = 1250,1250 +machine_max_acceleration_x = 1000,960 +machine_max_acceleration_y = 1000,960 +machine_max_acceleration_z = 200,200 +machine_max_feedrate_e = 120,120 +machine_max_feedrate_x = 200,100 +machine_max_feedrate_y = 200,100 +machine_max_feedrate_z = 12,12 +machine_max_jerk_e = 4.5,4.5 +machine_max_jerk_x = 8,8 +machine_max_jerk_y = 8,8 +machine_max_jerk_z = 0.4,0.4 +machine_min_extruding_rate = 0,0 +machine_min_travel_rate = 0,0 +silent_mode = 1 +remaining_times = 1 +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_SOVOL\nPRINTER_MODEL_SV06\n +retract_lift_below = 209 +max_print_height = 250 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +printer_model = SV06 +default_print_profile = 0.20mm SPEED @SV06 +thumbnails = 160x120 + + +[printer:SV06 0.3 nozzle] +inherits = SV06 +nozzle_diameter = 0.3 +max_layer_height = 0.15 +min_layer_height = 0.05 +printer_variant = 0.3 +retract_lift = 0.15 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.10mm DETAIL @0.3 nozzle SV06 +color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change + +[printer:SV06 0.6 nozzle] +inherits = SV06 +nozzle_diameter = 0.6 +max_layer_height = 0.40 +min_layer_height = 0.15 +printer_variant = 0.6 +deretract_speed = 28 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.30mm QUALITY @0.6 nozzle SV06 +color_change_gcode = M600\nG1 E0.5 F1500 ; prime after color change + +[printer:SV06 0.8 nozzle] +inherits = SV06 +nozzle_diameter = 0.8 +max_layer_height = 0.6 +min_layer_height = 0.2 +printer_variant = 0.8 +retract_length = 0.7 +retract_speed = 40 +deretract_speed = 23 +retract_lift = 0.3 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.40mm QUALITY @0.8 nozzle +default_filament_profile = Prusament PLA @0.8 nozzle +color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change + + +# XXXXXXXXXXXXXXXXXXXXXXX +# XXX--- SV06 PLUS ---XXX +# XXXXXXXXXXXXXXXXXXXXXXX + +[printer:SV06 PLUS] +inherits = *common* +bed_shape = 0x0,300x0,300x300,0x300 +end_gcode = G91 ;Relative positioning\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X10 Y220 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z +machine_max_acceleration_e = 5000,5000 +machine_max_acceleration_extruding = 1250,1250 +machine_max_acceleration_retracting = 1250,1250 +machine_max_acceleration_x = 1000,960 +machine_max_acceleration_y = 1000,960 +machine_max_acceleration_z = 200,200 +machine_max_feedrate_e = 120,120 +machine_max_feedrate_x = 200,100 +machine_max_feedrate_y = 200,100 +machine_max_feedrate_z = 12,12 +machine_max_jerk_e = 4.5,4.5 +machine_max_jerk_x = 8,8 +machine_max_jerk_y = 8,8 +machine_max_jerk_z = 0.4,0.4 +machine_min_extruding_rate = 0,0 +machine_min_travel_rate = 0,0 +retract_before_travel = 0.5 +silent_mode = 1 +remaining_times = 1 +retract_length = 0.5 +retract_speed = 30 +deretract_speed = 30 +retract_lift = 0 +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_SOVOL\nPRINTER_MODEL_SV06 PLUS\n +retract_lift_below = 209 +max_print_height = 340 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +printer_model = SV06 PLUS +default_print_profile = 0.20mm SPEED @SV06 PLUS +thumbnails = 160x120 + + +[printer:SV06 PLUS 0.3 nozzle] +inherits = SV06 PLUS +nozzle_diameter = 0.3 +max_layer_height = 0.15 +min_layer_height = 0.05 +printer_variant = 0.3 +retract_lift = 0.15 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.10mm DETAIL @0.3 nozzle SV06 PLUS +color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change + +[printer:SV06 PLUS 0.6 nozzle] +inherits = SV06 PLUS +nozzle_diameter = 0.6 +max_layer_height = 0.40 +min_layer_height = 0.15 +printer_variant = 0.6 +retract_length = 0.5 +retract_speed = 30 +deretract_speed = 30 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.30mm QUALITY @0.6 nozzle SV06 PLUS +color_change_gcode = M600\nG1 E0.5 F1500 ; prime after color change + +[printer:SV06 PLUS 0.8 nozzle] +inherits = SV06 PLUS +nozzle_diameter = 0.8 +max_layer_height = 0.6 +min_layer_height = 0.2 +printer_variant = 0.8 +retract_length = 0.7 +retract_speed = 40 +deretract_speed = 23 +retract_lift = 0.3 +start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28;\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X5.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X5.1 Y30.0 Z0.28 F1500.0 E1 ;Draw a short bit in case the extruder turns in the wrong direction\nG1 X5.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X5.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X5.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up +default_print_profile = 0.40mm QUALITY @0.8 nozzle +default_filament_profile = Prusament PLA @0.8 nozzle +color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change + +# XXXXXXXXXXXXXXXXXXXXX +# XXX--- BLTOUCH ---XXX +# XXXXXXXXXXXXXXXXXXXXX + + +[printer:SV01_BLTouch] +inherits = SV01 +end_gcode = G1 X5 Y200 F1000 ; \nM104 S0 ; kill extruder temperature\nM140 S0 ; kill bed temperature\nM107; kill fan\nM84 ; disable motors\nM300; beep\n//M85 S0 ; For use with raspberry.\n +start_gcode = //M85 S180 ; For use with raspberry only, it kills the printer if it loses the USB connection and remains inactive for 3 minutes. It works in Marlin 1.1.6\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; Home all axes\nG29 ; Auto bed-level (BL-Touch) // Comment if you don't like the automatic level in each print\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0 ; Reset Extruder\nG1 X5 Y20 Z2.0 F3000.0 ; Move to start position\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 X5 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X5 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X5.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z1.0 F3000 ; + +[printer:SV02_BLTouch] +inherits = SV02 +end_gcode = G1 X5 Y200 F1000 ; \nM104 S0 ; kill extruder temperature\nM140 S0 ; kill bed temperature\nM107; kill fan\nM84 ; disable motors\nM300; beep\n//M85 S0 ; For use with raspberry.\n +start_gcode = //M85 S180 ; For use with raspberry only, it kills the printer if it loses the USB connection and remains inactive for 3 minutes. It works in Marlin 1.1.6\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; Home all axes\nG29 ; Auto bed-level (BL-Touch) // Comment if you don't like the automatic level in each print\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0 ; Reset Extruder\nG1 X5 Y20 Z2.0 F3000.0 ; Move to start position\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 X5 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X5 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X5.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z1.0 F3000 ; + +[printer:SV03_BLTouch] +inherits = SV03 +end_gcode = G1 X5 Y200 F1000 ; \nM104 S0 ; kill extruder temperature\nM140 S0 ; kill bed temperature\nM107; kill fan\nM84 ; disable motors\nM300; beep\n//M85 S0 ; For use with raspberry.\n +start_gcode = //M85 S180 ; For use with raspberry only, it kills the printer if it loses the USB connection and remains inactive for 3 minutes. It works in Marlin 1.1.6\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; Home all axes\nG29 ; Auto bed-level (BL-Touch) // Comment if you don't like the automatic level in each print\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0 ; Reset Extruder\nG1 X5 Y20 Z2.0 F3000.0 ; Move to start position\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 X5 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X5 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X5.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z1.0 F3000 ; \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 50eccfc849..dc23da212a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -49,28 +49,12 @@ if (SLIC3R_GUI) if (CMAKE_SYSTEM_NAME STREQUAL "Linux") set (wxWidgets_CONFIG_OPTIONS "--toolkit=gtk${SLIC3R_GTK}") - if (SLIC3R_WX_STABLE) - find_package(wxWidgets 3.0 REQUIRED COMPONENTS base core adv html gl) - else () - find_package(wxWidgets 3.1 QUIET COMPONENTS base core adv html gl) - - if (NOT wxWidgets_FOUND) - message(FATAL_ERROR "\nCould not find wxWidgets 3.1.\n" - "Hint: On Linux you can set -DSLIC3R_WX_STABLE=1 to use wxWidgets 3.0\n") - endif () - endif () - - include(${wxWidgets_USE_FILE}) - else () - find_package(wxWidgets 3.1 COMPONENTS html adv gl core base) - if (NOT wxWidgets_FOUND) - message(STATUS "Trying to find wxWidgets in CONFIG mode...") - find_package(wxWidgets 3.2 CONFIG REQUIRED COMPONENTS html adv gl core base) - slic3r_remap_configs(wx::wxhtml wx::wxadv wx::wxgl wx::wxcore wx::wxbase RelWithDebInfo Release) - else () - include(${wxWidgets_USE_FILE}) - endif () endif () + find_package(wxWidgets 3.2 MODULE REQUIRED COMPONENTS base core adv html gl) + + include(${wxWidgets_USE_FILE}) + + slic3r_remap_configs(wx::wxhtml wx::wxadv wx::wxgl wx::wxcore wx::wxbase RelWithDebInfo Release) if(UNIX) message(STATUS "wx-config path: ${wxWidgets_CONFIG_EXECUTABLE}") diff --git a/src/libslic3r/CSGMesh/CSGMesh.hpp b/src/libslic3r/CSGMesh/CSGMesh.hpp index d14ed76595..a9a1811186 100644 --- a/src/libslic3r/CSGMesh/CSGMesh.hpp +++ b/src/libslic3r/CSGMesh/CSGMesh.hpp @@ -1,8 +1,10 @@ #ifndef CSGMESH_HPP #define CSGMESH_HPP +#include "libslic3r/Point.hpp" + #include -#include +#include namespace Slic3r { namespace csg { @@ -81,6 +83,35 @@ struct CSGPart { {} }; +template bool is_all_positive(const Cont &csgmesh) +{ + bool is_all_pos = + std::all_of(csgmesh.begin(), + csgmesh.end(), + [](auto &part) { + return csg::get_operation(part) == csg::CSGType::Union; + }); + + return is_all_pos; +} + +template +indexed_triangle_set csgmesh_merge_positive_parts(const Cont &csgmesh) +{ + indexed_triangle_set m; + for (auto &csgpart : csgmesh) { + auto op = csg::get_operation(csgpart); + const indexed_triangle_set * pmesh = csg::get_mesh(csgpart); + if (pmesh && op == csg::CSGType::Union) { + indexed_triangle_set mcpy = *pmesh; + its_transform(mcpy, csg::get_transform(csgpart), true); + its_merge(m, mcpy); + } + } + + return m; +} + }} // namespace Slic3r::csg #endif // CSGMESH_HPP diff --git a/src/libslic3r/Emboss.cpp b/src/libslic3r/Emboss.cpp index 69bb3349e1..8788d99f9a 100644 --- a/src/libslic3r/Emboss.cpp +++ b/src/libslic3r/Emboss.cpp @@ -19,6 +19,10 @@ #include "libslic3r/Line.hpp" #include "libslic3r/BoundingBox.hpp" +// Experimentaly suggested ration of font ascent by multiple fonts +// to get approx center of normal text line +const double ASCENT_CENTER = 1/3.; // 0.5 is above small letter + // every glyph's shape point is divided by SHAPE_SCALE - increase precission of fixed point value // stored in fonts (to be able represents curve by sequence of lines) static constexpr double SHAPE_SCALE = 0.001; // SCALING_FACTOR promile is fine enough @@ -1153,17 +1157,21 @@ std::optional Emboss::letter2glyph(const FontFile &font, return priv::get_glyph(*font_info_opt, letter, flatness); } -int Emboss::get_line_height(const FontFile &font, const FontProp &prop) { +const FontFile::Info &Emboss::get_font_info(const FontFile &font, const FontProp &prop) +{ unsigned int font_index = prop.collection_number.value_or(0); assert(priv::is_valid(font, font_index)); - const FontFile::Info &info = font.infos[font_index]; + return font.infos[font_index]; +} + +int Emboss::get_line_height(const FontFile &font, const FontProp &prop) { + const FontFile::Info &info = get_font_info(font, prop); int line_height = info.ascent - info.descent + info.linegap; line_height += prop.line_gap.value_or(0); return static_cast(line_height / SHAPE_SCALE); } namespace { - ExPolygons letter2shapes( wchar_t letter, Point &cursor, FontFileWithCache &font_with_cache, const FontProp &font_prop, fontinfo_opt& font_info_cache) { @@ -1242,12 +1250,12 @@ namespace { /// /// Align shape against pivot /// -/// Horizontal and vertical alignment /// Shapes to align /// Prerequisities: shapes are aligned left top -/// To detect end of lines -/// Height of line for align[in font points] -void align_shape(FontProp::Align type, ExPolygonsWithIds &shape, const std::wstring &text, int line_height); +/// To detect end of lines - to be able horizontal center the line +/// Containe Horizontal and vertical alignment +/// Needed for scale and font size +void align_shape(ExPolygonsWithIds &shapes, const std::wstring &text, const FontProp &prop, const FontFile &font); } ExPolygonsWithIds Emboss::text2vshapes(FontFileWithCache &font_with_cache, const std::wstring& text, const FontProp &font_prop, const std::function& was_canceled){ @@ -1273,7 +1281,7 @@ ExPolygonsWithIds Emboss::text2vshapes(FontFileWithCache &font_with_cache, const result.push_back({id, letter2shapes(letter, cursor, font_with_cache, font_prop, font_info_cache)}); } - align_shape(font_prop.align, result, text, get_line_height(font, font_prop)); + align_shape(result, text, font_prop, font); return result; } @@ -1417,8 +1425,7 @@ std::string Emboss::create_range_text(const std::string &text, double Emboss::get_text_shape_scale(const FontProp &fp, const FontFile &ff) { - size_t font_index = fp.collection_number.value_or(0); - const FontFile::Info &info = ff.infos[font_index]; + const FontFile::Info &info = get_font_info(ff, fp); double scale = fp.size_in_mm / (double) info.unit_per_em; // Shape is scaled for store point coordinate as integer return scale * SHAPE_SCALE; @@ -1889,20 +1896,22 @@ PolygonPoints Emboss::sample_slice(const TextLine &slice, const BoundingBoxes &b } namespace { -template T get_align_y_offset(FontProp::VerticalAlign align, unsigned count_lines, T line_height) +float get_align_y_offset(FontProp::VerticalAlign align, unsigned count_lines, const FontFile &ff, const FontProp &fp) { - if (count_lines == 0) - return 0; + assert(count_lines != 0); + int line_height = get_line_height(ff, fp); + int ascent = get_font_info(ff, fp).ascent / SHAPE_SCALE; + float line_center = static_cast(std::round(ascent * ASCENT_CENTER)); // direction of Y in 2d is from top to bottom // zero is on base line of first line switch (align) { - case FontProp::VerticalAlign::center: return ((count_lines - 1) / 2) * line_height + ((count_lines % 2 == 0) ? (line_height / 2) : 0); - case FontProp::VerticalAlign::bottom: return (count_lines - 1) * line_height; - case FontProp::VerticalAlign::top: // no change - default: break; + case FontProp::VerticalAlign::bottom: return line_height * (count_lines - 1); + case FontProp::VerticalAlign::top: return -ascent; + case FontProp::VerticalAlign::center: + default: + return -line_center + line_height * (count_lines - 1) / 2.; } - return 0; } int32_t get_align_x_offset(FontProp::HorizontalAlign align, const BoundingBox &shape_bb, const BoundingBox &line_bb) @@ -1916,11 +1925,10 @@ int32_t get_align_x_offset(FontProp::HorizontalAlign align, const BoundingBox &s return 0; } -void align_shape(FontProp::Align type, ExPolygonsWithIds &shapes, const std::wstring &text, int line_height) +void align_shape(ExPolygonsWithIds &shapes, const std::wstring &text, const FontProp &prop, const FontFile &font) { - constexpr FontProp::Align no_change(FontProp::HorizontalAlign::left, FontProp::VerticalAlign::top); - if (type == no_change) - return; // no alignment + // Shapes have to match letters in text + assert(shapes.size() == text.length()); BoundingBox shape_bb; for (const ExPolygonsWithId& shape: shapes) @@ -1932,15 +1940,30 @@ void align_shape(FontProp::Align type, ExPolygonsWithIds &shapes, const std::wst line_bb.merge(get_extents(shapes[j].expoly)); return line_bb; }; + + int line_height = get_line_height(font, prop); + unsigned count_lines = get_count_lines(text); + int center_line = get_font_info(font, prop).ascent * ASCENT_CENTER; + int y_offset = get_align_y_offset(prop.align.second, count_lines, font, prop); + + // Speed up for left aligned text + if (prop.align.first == FontProp::HorizontalAlign::left){ + // already horizontaly aligned + for (ExPolygonsWithId& shape : shapes) + for (ExPolygon &s : shape.expoly) + s.translate(Point(0, y_offset)); + return; + } + + // Align x line by line Point offset( - get_align_x_offset(type.first, shape_bb, get_line_bb(0)), - get_align_y_offset(type.second, get_count_lines(shapes), line_height)); - assert(shapes.size() == text.length()); + get_align_x_offset(prop.align.first, shape_bb, get_line_bb(0)), + y_offset); for (size_t i = 0; i < shapes.size(); ++i) { wchar_t letter = text[i]; if (letter == '\n'){ - offset.x() = get_align_x_offset(type.first, shape_bb, get_line_bb(i+1)); + offset.x() = get_align_x_offset(prop.align.first, shape_bb, get_line_bb(i + 1)); continue; } ExPolygons &shape = shapes[i].expoly; @@ -1950,8 +1973,10 @@ void align_shape(FontProp::Align type, ExPolygonsWithIds &shapes, const std::wst } } // namespace -double Emboss::get_align_y_offset(FontProp::VerticalAlign align, unsigned count_lines, double line_height){ - return ::get_align_y_offset(align, count_lines, line_height); +double Emboss::get_align_y_offset_in_mm(FontProp::VerticalAlign align, unsigned count_lines, const FontFile &ff, const FontProp &fp){ + float offset_in_font_point = get_align_y_offset(align, count_lines, ff, fp); + double scale = get_text_shape_scale(fp, ff); + return scale * offset_in_font_point; } #ifdef REMOVE_SPIKES diff --git a/src/libslic3r/Emboss.hpp b/src/libslic3r/Emboss.hpp index 5c34b96702..784411d2fe 100644 --- a/src/libslic3r/Emboss.hpp +++ b/src/libslic3r/Emboss.hpp @@ -227,23 +227,29 @@ namespace Emboss /// Conversion to mm double get_text_shape_scale(const FontProp &fp, const FontFile &ff); + /// + /// getter of font info by collection defined in prop + /// + /// Contain infos about all fonts(collections) in file + /// Index of collection + /// Ascent, descent, line gap + const FontFile::Info &get_font_info(const FontFile &font, const FontProp &prop); + /// /// Read from font file and properties height of line with spacing /// /// Infos for collections /// Collection index + Additional line gap - /// Line height with spacing in ExPolygon size + /// Line height with spacing in scaled font points (same as ExPolygons) int get_line_height(const FontFile &font, const FontProp &prop); /// /// Calculate Vertical align /// - /// double for mm - /// type + /// Top | Center | Bottom /// - /// - /// In same unit as line height - double get_align_y_offset(FontProp::VerticalAlign align, unsigned count_lines, double line_height); + /// Return align Y offset in mm + double get_align_y_offset_in_mm(FontProp::VerticalAlign align, unsigned count_lines, const FontFile &ff, const FontProp &fp); /// /// Project spatial point diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index fa97b848ce..490df98068 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -516,7 +516,7 @@ WipeTower::ToolChangeResult WipeTower::construct_tcr(WipeTowerWriter& writer, -WipeTower::WipeTower(const PrintConfig& config, const std::vector>& wiping_matrix, size_t initial_tool) : +WipeTower::WipeTower(const PrintConfig& config, const PrintRegionConfig& default_region_config, const std::vector>& wiping_matrix, size_t initial_tool) : m_semm(config.single_extruder_multi_material.value), m_wipe_tower_pos(config.wipe_tower_x, config.wipe_tower_y), m_wipe_tower_width(float(config.wipe_tower_width)), @@ -530,6 +530,8 @@ WipeTower::WipeTower(const PrintConfig& config, const std::vectordepth - m_layer_info->toolchanges_depth(); box_coordinates fill_box(Vec2f(m_perimeter_width, m_layer_info->depth-(current_depth-m_perimeter_width)), m_wipe_tower_width - 2 * m_perimeter_width, current_depth-m_perimeter_width); @@ -1203,7 +1212,7 @@ WipeTower::ToolChangeResult WipeTower::finish_layer() // First generate vector of annotated point which form the boundary. std::vector> pts = {{wt_box.ru, Corner}}; if (double alpha_start = std::asin((0.5*w)/r); ! std::isnan(alpha_start) && r > 0.5*w+0.01) { - for (double alpha = alpha_start; alpha < M_PI-alpha_start+0.001; alpha+=(M_PI-2*alpha_start) / 20.) + for (double alpha = alpha_start; alpha < M_PI-alpha_start+0.001; alpha+=(M_PI-2*alpha_start) / 40.) pts.emplace_back(Vec2f(center.x() + r*std::cos(alpha)/support_scale, center.y() + r*std::sin(alpha)), alpha == alpha_start ? ArcStart : Arc); pts.back().second = ArcEnd; } @@ -1285,6 +1294,8 @@ WipeTower::ToolChangeResult WipeTower::finish_layer() return poly; }; + feedrate = first_layer ? m_first_layer_speed * 60.f : m_perimeter_speed * 60.f; + // outer contour (always) bool infill_cone = first_layer && m_wipe_tower_width > 2*spacing && m_wipe_tower_depth > 2*spacing; Polygon poly = supported_rectangle(wt_box, feedrate, infill_cone); diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index 969da848d0..301cd3bec0 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -14,6 +14,7 @@ namespace Slic3r class WipeTowerWriter; class PrintConfig; +class PrintRegionConfig; enum GCodeFlavor : unsigned char; @@ -129,7 +130,10 @@ public: // y -- y coordinates of wipe tower in mm ( left bottom corner ) // width -- width of wipe tower in mm ( default 60 mm - leave as it is ) // wipe_area -- space available for one toolchange in mm - WipeTower(const PrintConfig& config, const std::vector>& wiping_matrix, size_t initial_tool); + WipeTower(const PrintConfig& config, + const PrintRegionConfig& default_region_config, + const std::vector>& wiping_matrix, + size_t initial_tool); // Set the extruder properties. @@ -269,6 +273,8 @@ private: size_t m_max_color_changes = 0; // Maximum number of color changes per layer. int m_old_temperature = -1; // To keep track of what was the last temp that we set (so we don't issue the command when not neccessary) float m_travel_speed = 0.f; + float m_infill_speed = 0.f; + float m_perimeter_speed = 0.f; float m_first_layer_speed = 0.f; size_t m_first_layer_idx = size_t(-1); diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 16cc75225a..39f6ef98eb 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -1572,8 +1572,12 @@ void ModelObject::reset_instance_transformation(ModelObject* object, size_t src_ for (size_t i = 0; i < object->instances.size(); ++i) { auto& obj_instance = object->instances[i]; const double rot_z = obj_instance->get_rotation().z(); - - obj_instance->set_transformation(Transformation(obj_instance->get_transformation().get_matrix_no_scaling_factor())); + + Transformation inst_trafo = Transformation(obj_instance->get_transformation().get_matrix_no_scaling_factor()); + if (obj_instance->is_left_handed()) + inst_trafo = inst_trafo * Transformation(scale_transform(Vec3d(-1, 1, 1))); + + obj_instance->set_transformation(inst_trafo); Vec3d rotation = Vec3d::Zero(); if (!flip && !place_on_cut) { diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 730574af13..af57c9314d 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -675,7 +675,9 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p void PresetBundle::export_selections(AppConfig &config) { assert(this->printers.get_edited_preset().printer_technology() != ptFFF || extruders_filaments.size() >= 1); - assert(this->printers.get_edited_preset().printer_technology() != ptFFF || extruders_filaments.size() > 1 || filaments.get_selected_preset().alias == extruders_filaments.front().get_selected_preset()->alias); + // #ysFIXME_delete_after_test !All filament selections are always saved in extruder_filaments (for MM and SM printers), + // so there is no need to control a correspondence between filaments and extruders_filaments + //assert(this->printers.get_edited_preset().printer_technology() != ptFFF || extruders_filaments.size() > 1 || filaments.get_selected_preset().alias == extruders_filaments.front().get_selected_preset()->alias); config.clear_section("presets"); config.set("presets", "print", prints.get_selected_preset_name()); config.set("presets", "filament", extruders_filaments.front().get_selected_preset_name()); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 8d53dbb5a8..94b08b8857 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1453,7 +1453,7 @@ void Print::_make_wipe_tower() this->throw_if_canceled(); // Initialize the wipe tower. - WipeTower wipe_tower(m_config, wipe_volumes, m_wipe_tower_data.tool_ordering.first_extruder()); + WipeTower wipe_tower(m_config, m_default_region_config, wipe_volumes, m_wipe_tower_data.tool_ordering.first_extruder()); //wipe_tower.set_retract(); //wipe_tower.set_zhop(); diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index ff7906da07..49573a041a 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -814,15 +814,15 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "overhang_speed_2" || opt_key == "overhang_speed_3" || opt_key == "external_perimeter_speed" - || opt_key == "infill_speed" - || opt_key == "perimeter_speed" || opt_key == "small_perimeter_speed" || opt_key == "solid_infill_speed" || opt_key == "top_solid_infill_speed") { invalidated |= m_print->invalidate_step(psGCodeExport); } else if ( opt_key == "wipe_into_infill" - || opt_key == "wipe_into_objects") { + || opt_key == "wipe_into_objects" + || opt_key == "infill_speed" + || opt_key == "perimeter_speed") { invalidated |= m_print->invalidate_step(psWipeTower); invalidated |= m_print->invalidate_step(psGCodeExport); } else { @@ -1539,21 +1539,33 @@ void PrintObject::discover_vertical_shells() // Finally expand the infill a bit to remove tiny gaps between solid infill and the other regions. narrow_sparse_infill_region_radius - tiny_overlap_radius, ClipperLib::jtSquare); + Polygons object_volume; Polygons internal_volume; { Polygons shrinked_bottom_slice = idx_layer > 0 ? to_polygons(m_layers[idx_layer - 1]->lslices) : Polygons{}; Polygons shrinked_upper_slice = (idx_layer + 1) < m_layers.size() ? to_polygons(m_layers[idx_layer + 1]->lslices) : Polygons{}; - internal_volume = intersection(shrinked_bottom_slice, shrinked_upper_slice); + object_volume = intersection(shrinked_bottom_slice, shrinked_upper_slice); + internal_volume = closing(polygonsInternal, SCALED_EPSILON); } - // The opening operation may cause scattered tiny drops on the smooth parts of the model, filter them out + // The regularization operation may cause scattered tiny drops on the smooth parts of the model, filter them out + // If the region checks both following conditions, it is removed: + // 1. the area is very small, + // OR the area is quite small and it is fully wrapped in model (not visible) + // the in-model condition is there due to small sloping surfaces, e.g. top of the hull of the benchy + // 2. the area does not fully cover an internal polygon + // This is there mainly for a very thin parts, where the solid layers would be missing if the part area is quite small regularized_shell.erase(std::remove_if(regularized_shell.begin(), regularized_shell.end(), - [&min_perimeter_infill_spacing, &internal_volume](const ExPolygon &p) { - return p.area() < min_perimeter_infill_spacing * scaled(1.5) || - (p.area() < min_perimeter_infill_spacing * scaled(8.0) && - diff(to_polygons(p), internal_volume).empty()); + [&internal_volume, &min_perimeter_infill_spacing, + &object_volume](const ExPolygon &p) { + return (p.area() < min_perimeter_infill_spacing * scaled(1.5) || + (p.area() < min_perimeter_infill_spacing * scaled(8.0) && + diff(to_polygons(p), object_volume).empty())) && + diff(internal_volume, + expand(to_polygons(p), min_perimeter_infill_spacing)) + .size() >= internal_volume.size(); }), regularized_shell.end()); } diff --git a/src/libslic3r/SLAPrintSteps.cpp b/src/libslic3r/SLAPrintSteps.cpp index 33e2a6e20f..412bd1b422 100644 --- a/src/libslic3r/SLAPrintSteps.cpp +++ b/src/libslic3r/SLAPrintSteps.cpp @@ -127,35 +127,6 @@ void SLAPrint::Steps::apply_printer_corrections(SLAPrintObject &po, SliceOrigin } } -template bool is_all_positive(const Cont &csgmesh) -{ - bool is_all_pos = - std::all_of(csgmesh.begin(), - csgmesh.end(), - [](auto &part) { - return csg::get_operation(part) == csg::CSGType::Union; - }); - - return is_all_pos; -} - -template -static indexed_triangle_set csgmesh_merge_positive_parts(const Cont &csgmesh) -{ - indexed_triangle_set m; - for (auto &csgpart : csgmesh) { - auto op = csg::get_operation(csgpart); - const indexed_triangle_set * pmesh = csg::get_mesh(csgpart); - if (pmesh && op == csg::CSGType::Union) { - indexed_triangle_set mcpy = *pmesh; - its_transform(mcpy, csg::get_transform(csgpart), true); - its_merge(m, mcpy); - } - } - - return m; -} - indexed_triangle_set SLAPrint::Steps::generate_preview_vdb( SLAPrintObject &po, SLAPrintObjectStep step) { diff --git a/src/libslic3r/TextConfiguration.hpp b/src/libslic3r/TextConfiguration.hpp index 4bfc8f50fa..55c476a2a2 100644 --- a/src/libslic3r/TextConfiguration.hpp +++ b/src/libslic3r/TextConfiguration.hpp @@ -49,7 +49,7 @@ struct FontProp using Align = std::pair; // change pivot of text // When not set, center is used and is not stored - Align align = Align(HorizontalAlign::left, VerticalAlign::top); + Align align = Align(HorizontalAlign::center, VerticalAlign::center); [[deprecated("Back compatibility only, now it is stored EmbossProjection like depth")]] float emboss; diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp index 380e2f5b7e..d96e794621 100644 --- a/src/slic3r/GUI/DoubleSlider.cpp +++ b/src/slic3r/GUI/DoubleSlider.cpp @@ -2757,6 +2757,11 @@ bool TickCodeInfo::add_tick(const int tick, Type type, const int extruder, doubl bool TickCodeInfo::edit_tick(std::set::iterator it, double print_z) { + // Save previously value of the tick before the call a Dialog from get_... functions, + // otherwise a background process can change ticks values and current iterator wouldn't be valid for the moment of a Dialog close + // and PS will crash (see https://github.com/prusa3d/PrusaSlicer/issues/10941) + TickCode changed_tick = *it; + std::string edited_value; if (it->type == ColorChange) edited_value = get_new_color(it->color); @@ -2768,7 +2773,10 @@ bool TickCodeInfo::edit_tick(std::set::iterator it, double print_z) if (edited_value.empty()) return false; - TickCode changed_tick = *it; + // Update iterator. For this moment its value can be invalid + if (it = ticks.find(changed_tick); it == ticks.end()) + return false; + if (it->type == ColorChange) { if (it->color == edited_value) return false; diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 0b23fed186..98c98ddf2c 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4076,7 +4076,7 @@ void GLCanvas3D::do_move(const std::string& snapshot_type) model_object->invalidate_bounding_box(); } } - else if (v->is_wipe_tower) + else if (m_selection.is_wipe_tower() && v->is_wipe_tower) // Move a wipe tower proxy. wipe_tower_origin = v->get_volume_offset(); } diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp index ae40e0f766..9ea6198f7a 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp @@ -503,6 +503,11 @@ void ObjectManipulation::Show(const bool show) } m_word_local_combo->Show(show_world_local_combo); m_empty_str->Show(!show_world_local_combo); + + m_skew_label->Show(m_show_skew); + m_reset_skew_button->Show(m_show_skew); + + m_parent->Layout(); } } @@ -795,15 +800,22 @@ void ObjectManipulation::update_reset_buttons_visibility() m_mirror_warning_bitmap->SetBitmap(show_mirror ? m_manifold_warning_bmp.bmp() : wxNullBitmap); m_mirror_warning_bitmap->SetMinSize(show_mirror ? m_manifold_warning_bmp.GetSize() : wxSize(0, 0)); m_mirror_warning_bitmap->SetToolTip(show_mirror ? _L("Left handed") : ""); - m_reset_skew_button->Show(show_skew); - m_skew_label->Show(show_skew); - // Because of CallAfter we need to layout sidebar after Show/hide of reset buttons one more time - Sidebar& panel = wxGetApp().sidebar(); - if (!panel.IsFrozen()) { - panel.Freeze(); - panel.Layout(); - panel.Thaw(); + if (m_show_skew == show_skew) + get_sizer()->Layout(); + else { + // Call sidebar layout only if it's really needed, + // it means, when we show/hide additional line for skew information + m_show_skew = show_skew; + m_reset_skew_button->Show(m_show_skew); + m_skew_label->Show(m_show_skew); + // Because of CallAfter we need to layout sidebar after Show/hide of reset buttons one more time + Sidebar& panel = wxGetApp().sidebar(); + if (!panel.IsFrozen()) { + panel.Freeze(); + panel.Layout(); + panel.Thaw(); + } } }); } diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.hpp b/src/slic3r/GUI/GUI_ObjectManipulation.hpp index 139171d999..6b5dfe5447 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.hpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.hpp @@ -169,6 +169,7 @@ private: bool m_is_enabled { true }; bool m_is_enabled_size_and_scale { true }; + bool m_show_skew { false }; public: ObjectManipulation(wxWindow* parent); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp index c88c0127a9..35dde4ef10 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp @@ -1014,39 +1014,6 @@ std::optional get_installed_face_name(const std::optional return {}; // not installed } -bool get_line_height_offset(/* const*/ StyleManager &style_manager, double &line_height_mm, double &line_offset_mm) -{ - assert(style_manager.is_active_font()); - if (!style_manager.is_active_font()) - return false; - const auto &ffc = style_manager.get_font_file_with_cache(); - assert(ffc.has_value()); - if (!ffc.has_value()) - return false; - const auto &ff_ptr = ffc.font_file; - assert(ff_ptr != nullptr); - if (ff_ptr == nullptr) - return false; - const FontProp &fp = style_manager.get_font_prop(); - const FontFile &ff = *ff_ptr; - - double third_ascent_shape_size = ff.infos[fp.collection_number.value_or(0)].ascent / 3.; - int line_height_shape_size = get_line_height(ff, fp); // In shape size - - double scale = get_text_shape_scale(fp, ff); - line_offset_mm = third_ascent_shape_size * scale / 0.001; // TODO:fix constatnt SHAPE_SCALE - line_height_mm = line_height_shape_size * scale; - - if (line_height_mm < 0) - return false; - - // fix for bad filled ascent in font file - if (line_offset_mm <= 0) - line_offset_mm = line_height_mm / 3; - - return true; -} - void init_text_lines(TextLinesModel &text_lines, const Selection& selection, /* const*/ StyleManager &style_manager, unsigned count_lines) { const GLVolume *gl_volume_ptr = selection.get_first_volume(); @@ -1102,13 +1069,24 @@ void init_text_lines(TextLinesModel &text_lines, const Selection& selection, /* Transform3d mv_trafo = gl_volume.get_volume_transformation().get_matrix(); if (es.fix_3mf_tr.has_value()) mv_trafo = mv_trafo * (es.fix_3mf_tr->inverse()); - FontProp::VerticalAlign align = style_manager.get_font_prop().align.second; - double line_height_mm, line_offset_mm; - if (!get_line_height_offset(style_manager, line_height_mm, line_offset_mm)) - return; - - text_lines.init(mv_trafo, volumes, align, line_height_mm, line_offset_mm, count_lines); + text_lines.init(mv_trafo, volumes, style_manager, count_lines); } + +void init_new_text_line(TextLinesModel &text_lines, const Transform3d& new_text_tr, const ModelObject& mo, /* const*/ StyleManager &style_manager) +{ + // prepare volumes to slice + ModelVolumePtrs volumes; + volumes.reserve(mo.volumes.size()); + for (ModelVolume *volume : mo.volumes) { + // only part could be surface for volumes + if (!volume->is_model_part()) + continue; + volumes.push_back(volume); + } + unsigned count_lines = 1; + text_lines.init(new_text_tr, volumes, style_manager, count_lines); +} + } void GLGizmoEmboss::reinit_text_lines(unsigned count_lines) { @@ -1516,17 +1494,17 @@ void GLGizmoEmboss::draw_text_input() append_warning(_u8L("Text contains character glyph (represented by '?') unknown by font.")); const FontProp &prop = m_style_manager.get_font_prop(); - if (prop.skew.has_value()) append_warning(_u8L("Text input doesn't show font skew.")); + if (prop.skew.has_value()) append_warning(_u8L("Text input doesn't show font skew.")); if (prop.boldness.has_value()) append_warning(_u8L("Text input doesn't show font boldness.")); - if (prop.line_gap.has_value()) - append_warning(_u8L("Text input doesn't show gap between lines.")); + if (prop.line_gap.has_value()) append_warning(_u8L("Text input doesn't show gap between lines.")); auto &ff = m_style_manager.get_font_file_with_cache(); float imgui_size = StyleManager::get_imgui_font_size(prop, *ff.font_file, scale); if (imgui_size > StyleManager::max_imgui_font_size) append_warning(_u8L("Too tall, diminished font height inside text input.")); if (imgui_size < StyleManager::min_imgui_font_size) append_warning(_u8L("Too small, enlarged font height inside text input.")); - if (prop.align.first == FontProp::HorizontalAlign::center || prop.align.first == FontProp::HorizontalAlign::right) + bool is_multiline = m_text_lines.get_lines().size() > 1; + if (is_multiline && (prop.align.first == FontProp::HorizontalAlign::center || prop.align.first == FontProp::HorizontalAlign::right)) append_warning(_u8L("Text doesn't show current horizontal alignment.")); } @@ -2646,10 +2624,8 @@ void GLGizmoEmboss::draw_advanced() return; } - StyleManager::Style ¤t_style = m_style_manager.get_style(); - FontProp ¤t_prop = current_style.prop; - - const FontFile::Info &font_info = ff.font_file->infos[current_prop.collection_number.value_or(0)]; + FontProp &font_prop = m_style_manager.get_font_prop(); + const FontFile::Info &font_info = get_font_info(*ff.font_file, font_prop); #ifdef SHOW_FONT_FILE_PROPERTY ImGui::SameLine(); int cache_size = ff.has_value()? (int)ff.cache->size() : 0; @@ -2679,6 +2655,7 @@ void GLGizmoEmboss::draw_advanced() m_imgui->disabled_begin(!can_use_surface); const bool *def_use_surface = stored_style ? &stored_style->projection.use_surface : nullptr; + StyleManager::Style ¤t_style = m_style_manager.get_style(); bool &use_surface = current_style.projection.use_surface; if (rev_checkbox(tr.use_surface, use_surface, def_use_surface, _u8L("Revert using of model surface."))) { @@ -2689,7 +2666,6 @@ void GLGizmoEmboss::draw_advanced() } m_imgui->disabled_end(); // !can_use_surface - FontProp& font_prop = m_style_manager.get_font_prop(); bool &per_glyph = font_prop.per_glyph; bool can_use_per_glyph = (per_glyph) ? true : // already used surface must have option to uncheck !is_the_only_one_part; @@ -2771,6 +2747,7 @@ void GLGizmoEmboss::draw_advanced() int half_ascent = font_info.ascent / 2; int min_char_gap = -half_ascent; int max_char_gap = half_ascent; + FontProp ¤t_prop = current_style.prop; if (rev_slider(tr.char_gap, current_prop.char_gap, def_char_gap, _u8L("Revert gap between characters"), min_char_gap, max_char_gap, units_fmt, _L("Distance between characters"))){ // Condition prevent recalculation when insertint out of limits value by imgui input @@ -2926,8 +2903,7 @@ void GLGizmoEmboss::draw_advanced() ImGui::Text("%s", tr.collection.c_str()); ImGui::SameLine(m_gui_cfg->advanced_input_offset); ImGui::SetNextItemWidth(m_gui_cfg->input_width); - unsigned int selected = current_prop.collection_number.has_value() ? - *current_prop.collection_number : 0; + unsigned int selected = current_prop.collection_number.value_or(0); if (ImGui::BeginCombo("## Font collection", std::to_string(selected).c_str())) { for (unsigned int i = 0; i < ff.font_file->infos.size(); ++i) { ImGui::PushID(1 << (10 + i)); @@ -2957,9 +2933,13 @@ void GLGizmoEmboss::draw_advanced() if (ImGui::Button(_u8L("Set text to face camera").c_str())) { assert(get_selected_volume(m_parent.get_selection()) == m_volume); const Camera &cam = wxGetApp().plater()->get_camera(); + FontProp& fp = m_style_manager.get_font_prop(); if (face_selected_volume_to_camera(cam, m_parent) && - (use_surface || m_style_manager.get_font_prop().per_glyph)) + (use_surface || fp.per_glyph)) { + if (fp.per_glyph) + reinit_text_lines(); process(); + } } else if (ImGui::IsItemHovered()) { ImGui::SetTooltip("%s", _u8L("Orient the text towards the camera.").c_str()); } diff --git a/src/slic3r/GUI/MeshUtils.cpp b/src/slic3r/GUI/MeshUtils.cpp index 60ea6c856d..88a4f29728 100644 --- a/src/slic3r/GUI/MeshUtils.cpp +++ b/src/slic3r/GUI/MeshUtils.cpp @@ -465,14 +465,17 @@ bool MeshRaycaster::unproject_on_mesh(const Vec2d& mouse_pos, const Transform3d& -bool MeshRaycaster::is_valid_intersection(Vec3d point, Vec3d direction, const Transform3d& trafo) const +bool MeshRaycaster::intersects_line(Vec3d point, Vec3d direction, const Transform3d& trafo) const { - point = trafo.inverse() * point; + Transform3d trafo_inv = trafo.inverse(); + Vec3d to = trafo_inv * (point + direction); + point = trafo_inv * point; + direction = (to-point).normalized(); std::vector hits = m_emesh.query_ray_hits(point, direction); std::vector neg_hits = m_emesh.query_ray_hits(point, -direction); - return !hits.empty() && !neg_hits.empty(); + return !hits.empty() || !neg_hits.empty(); } diff --git a/src/slic3r/GUI/MeshUtils.hpp b/src/slic3r/GUI/MeshUtils.hpp index 3645ecc026..a7dd3d7f75 100644 --- a/src/slic3r/GUI/MeshUtils.hpp +++ b/src/slic3r/GUI/MeshUtils.hpp @@ -187,7 +187,9 @@ public: const AABBMesh &get_aabb_mesh() const { return m_emesh; } - bool is_valid_intersection(Vec3d point, Vec3d direction, const Transform3d& trafo) const; + // Given a point and direction in world coords, returns whether the respective line + // intersects the mesh if it is transformed into world by trafo. + bool intersects_line(Vec3d point, Vec3d direction, const Transform3d& trafo) const; // Given a vector of points in woorld coordinates, this returns vector // of indices of points that are visible (i.e. not cut by clipping plane diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 312d6572c7..a9669ad81c 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1277,9 +1277,11 @@ void Sidebar::show_info_sizer() { Selection& selection = wxGetApp().plater()->canvas3D()->get_selection(); ModelObjectPtrs objects = p->plater->model().objects; - int obj_idx = selection.get_object_idx(); + const int obj_idx = selection.get_object_idx(); + const int inst_idx = selection.get_instance_idx(); if (m_mode < comExpert || objects.empty() || obj_idx < 0 || int(objects.size()) <= obj_idx || + inst_idx < 0 || int(objects[obj_idx]->instances.size()) <= inst_idx || objects[obj_idx]->volumes.empty() || // hack to avoid crash when deleting the last object on the bed (selection.is_single_full_object() && objects[obj_idx]->instances.size()> 1) || !(selection.is_single_full_instance() || selection.is_single_volume())) { @@ -1289,9 +1291,6 @@ void Sidebar::show_info_sizer() const ModelObject* model_object = objects[obj_idx]; - int inst_idx = selection.get_instance_idx(); - assert(inst_idx >= 0); - bool imperial_units = wxGetApp().app_config->get_bool("use_inches"); double koef = imperial_units ? ObjectManipulation::mm_to_in : 1.0f; @@ -6506,9 +6505,12 @@ void Plater::export_stl_obj(bool extended, bool selection_only) csg::model_to_csgmesh(mo, Transform3d::Identity(), std::back_inserter(csgmesh), csg::mpartsPositive | csg::mpartsNegative | csg::mpartsDoSplits); - if (csg::check_csgmesh_booleans(range(csgmesh)) == csgmesh.end()) { + auto csgrange = range(csgmesh); + if (csg::is_all_positive(csgrange)) { + mesh = TriangleMesh{csg::csgmesh_merge_positive_parts(csgrange)}; + } else if (csg::check_csgmesh_booleans(csgrange) == csgrange.end()) { try { - auto cgalm = csg::perform_csgmesh_booleans(range(csgmesh)); + auto cgalm = csg::perform_csgmesh_booleans(csgrange); mesh = MeshBoolean::cgal::cgal_to_triangle_mesh(*cgalm); } catch (...) {} } @@ -7266,7 +7268,9 @@ void Plater::force_filament_cb_update() // Update preset comboboxes on sidebar and filaments tab p->sidebar->update_presets(Preset::TYPE_FILAMENT); - wxGetApp().get_tab(Preset::TYPE_FILAMENT)->select_preset(wxGetApp().preset_bundle->filaments.get_selected_preset_name()); + + TabFilament* tab = dynamic_cast(wxGetApp().get_tab(Preset::TYPE_FILAMENT)); + tab->select_preset(wxGetApp().preset_bundle->extruders_filaments[tab->get_active_extruder()].get_selected_preset_name()); } void Plater::force_print_bed_update() diff --git a/src/slic3r/GUI/TextLines.cpp b/src/slic3r/GUI/TextLines.cpp index 9a6512d140..88c5de5e4f 100644 --- a/src/slic3r/GUI/TextLines.cpp +++ b/src/slic3r/GUI/TextLines.cpp @@ -253,18 +253,37 @@ GLModel::Geometry create_geometry(const TextLines &lines) void TextLinesModel::init(const Transform3d &text_tr, const ModelVolumePtrs &volumes_to_slice, - FontProp::VerticalAlign align, - double line_height, - double offset, + /*const*/ Emboss::StyleManager &style_manager, unsigned count_lines) { + assert(style_manager.is_active_font()); + if (!style_manager.is_active_font()) + return; + const auto &ffc = style_manager.get_font_file_with_cache(); + assert(ffc.has_value()); + if (!ffc.has_value()) + return; + const auto &ff_ptr = ffc.font_file; + assert(ff_ptr != nullptr); + if (ff_ptr == nullptr) + return; + const FontFile &ff = *ff_ptr; + const FontProp &fp = style_manager.get_font_prop(); + + FontProp::VerticalAlign align = fp.align.second; + + double line_height_mm = calc_line_height_in_mm(ff, fp); + assert(line_height_mm > 0); + if (line_height_mm <= 0) + return; + m_model.reset(); m_lines.clear(); - double first_line_center = offset + this->offset + get_align_y_offset(align, count_lines, line_height); + double first_line_center = this->offset + line_height_mm / 3 + get_align_y_offset_in_mm(align, count_lines, ff, fp); std::vector line_centers(count_lines); for (size_t i = 0; i < count_lines; ++i) - line_centers[i] = static_cast(first_line_center - i * line_height); + line_centers[i] = static_cast(first_line_center - i * line_height_mm); // contour transformation Transform3d c_trafo = text_tr * get_rotation(); @@ -283,6 +302,24 @@ void TextLinesModel::init(const Transform3d &text_tr, } } + // fix for text line out of object + // When move text close to edge - line center could be out of object + for (Polygons &contours: line_contours) { + if (!contours.empty()) + continue; + + // use line center at zero, there should be some contour. + float line_center = 0.f; + for (const ModelVolume *volume : volumes_to_slice) { + MeshSlicingParams slicing_params; + slicing_params.trafo = c_trafo_inv * volume->get_matrix(); + const Polygons polys = Slic3r::slice_mesh(volume->mesh().its, line_center, slicing_params); + if (polys.empty()) + continue; + contours.insert(contours.end(), polys.begin(), polys.end()); + } + } + m_lines = select_closest_contour(line_contours); assert(m_lines.size() == count_lines); assert(line_centers.size() == count_lines); @@ -337,9 +374,9 @@ void TextLinesModel::render(const Transform3d &text_world) shader->stop_using(); } -double TextLinesModel::calc_line_height(const Slic3r::Emboss::FontFile &ff, const FontProp &fp) +double TextLinesModel::calc_line_height_in_mm(const Slic3r::Emboss::FontFile &ff, const FontProp &fp) { - int line_height = Emboss::get_line_height(ff, fp); // In shape size - double scale = Emboss::get_text_shape_scale(fp, ff); + int line_height = Slic3r::Emboss::get_line_height(ff, fp); // In shape size + double scale = Slic3r::Emboss::get_text_shape_scale(fp, ff); return line_height * scale; } diff --git a/src/slic3r/GUI/TextLines.hpp b/src/slic3r/GUI/TextLines.hpp index 2a5f8ca8fa..a5a1df5bc1 100644 --- a/src/slic3r/GUI/TextLines.hpp +++ b/src/slic3r/GUI/TextLines.hpp @@ -6,6 +6,7 @@ #include #include #include "slic3r/GUI/GLModel.hpp" +#include "slic3r/Utils/EmbossStyleManager.hpp" namespace Slic3r { class ModelVolume; @@ -24,11 +25,9 @@ public: /// /// Transformation of text volume inside object (aka inside of instance) /// Vector of volumes to be sliced - /// Vertical (Y) align of the text - /// Distance between lines [in mm] - /// Offset from baseline [in mm] - /// Count lines(slices over volumes) - void init(const Transform3d &text_tr, const ModelVolumePtrs& volumes_to_slice, FontProp::VerticalAlign align, double line_height, double offset, unsigned count_lines); + /// Contain Font file, size and align + /// Count lines of embossed text(for veritcal alignment) + void init(const Transform3d &text_tr, const ModelVolumePtrs &volumes_to_slice, /*const*/ Emboss::StyleManager &style_manager, unsigned count_lines); void render(const Transform3d &text_world); @@ -36,7 +35,7 @@ public: void reset() { m_model.reset(); m_lines.clear(); } const Slic3r::Emboss::TextLines &get_lines() const { return m_lines; } - static double calc_line_height(const Slic3r::Emboss::FontFile& ff, const FontProp& fp); // return lineheight in mm + static double calc_line_height_in_mm(const Slic3r::Emboss::FontFile& ff, const FontProp& fp); // return lineheight in mm private: Slic3r::Emboss::TextLines m_lines; diff --git a/src/slic3r/Utils/EmbossStyleManager.cpp b/src/slic3r/Utils/EmbossStyleManager.cpp index 67aafcf8b9..56b499899f 100644 --- a/src/slic3r/Utils/EmbossStyleManager.cpp +++ b/src/slic3r/Utils/EmbossStyleManager.cpp @@ -295,25 +295,6 @@ void StyleManager::clear_glyphs_cache() void StyleManager::clear_imgui_font() { m_style_cache.atlas.Clear(); } -#include "slic3r/GUI/TextLines.hpp" -double StyleManager::get_line_height() -{ - assert(is_active_font()); - if (!is_active_font()) - return -1; - const auto &ffc = get_font_file_with_cache(); - assert(ffc.has_value()); - if (!ffc.has_value()) - return -1; - const auto &ff_ptr = ffc.font_file; - assert(ff_ptr != nullptr); - if (ff_ptr == nullptr) - return -1; - const FontProp &fp = get_font_prop(); - const FontFile &ff = *ff_ptr; - return TextLinesModel::calc_line_height(ff, fp); -} - ImFont *StyleManager::get_imgui_font() { if (!is_active_font()) return nullptr; @@ -428,12 +409,10 @@ float StyleManager::min_imgui_font_size = 18.f; float StyleManager::max_imgui_font_size = 60.f; float StyleManager::get_imgui_font_size(const FontProp &prop, const FontFile &file, double scale) { - const auto &cn = prop.collection_number; - unsigned int font_index = (cn.has_value()) ? *cn : 0; - const auto &font_info = file.infos[font_index]; + const FontFile::Info& info = get_font_info(file, prop); // coeficient for convert line height to font size - float c1 = (font_info.ascent - font_info.descent + font_info.linegap) / - (float) font_info.unit_per_em; + float c1 = (info.ascent - info.descent + info.linegap) / + (float) info.unit_per_em; // The point size is defined as 1/72 of the Anglo-Saxon inch (25.4 mm): // It is approximately 0.0139 inch or 352.8 um. @@ -469,17 +448,12 @@ ImFont *StyleManager::create_imgui_font(const std::string &text, double scale) ImFontConfig font_config; // TODO: start using merge mode //font_config.MergeMode = true; - - unsigned int font_index = font_prop.collection_number.value_or(0); - const auto &font_info = font_file.infos[font_index]; - if (font_prop.char_gap.has_value()) { - float coef = font_size / (double) font_info.unit_per_em; - font_config.GlyphExtraSpacing.x = coef * (*font_prop.char_gap); - } - if (font_prop.line_gap.has_value()) { - float coef = font_size / (double) font_info.unit_per_em; - font_config.GlyphExtraSpacing.y = coef * (*font_prop.line_gap); - } + int unit_per_em = get_font_info(font_file, font_prop).unit_per_em; + float coef = font_size / (double) unit_per_em; + if (font_prop.char_gap.has_value()) + font_config.GlyphExtraSpacing.x = coef * (*font_prop.char_gap); + if (font_prop.line_gap.has_value()) + font_config.GlyphExtraSpacing.y = coef * (*font_prop.line_gap); font_config.FontDataOwnedByAtlas = false; diff --git a/src/slic3r/Utils/EmbossStyleManager.hpp b/src/slic3r/Utils/EmbossStyleManager.hpp index 4f318c1a02..492d3f51c4 100644 --- a/src/slic3r/Utils/EmbossStyleManager.hpp +++ b/src/slic3r/Utils/EmbossStyleManager.hpp @@ -108,10 +108,6 @@ public: // remove cached imgui font for actual selected font void clear_imgui_font(); - // calculate line height - // not const because access to font file which could be created. - double get_line_height(); /* const */ - // getters for private data const Style *get_stored_style() const;