Merge branch 'master' into dev
This commit is contained in:
commit
7f9e519baf
@ -1,332 +1,30 @@
|
|||||||
# The MIT License (MIT)
|
# This is a wrapper of FindTBB which prefers the config scripts if available in the system
|
||||||
#
|
# but only if building with dynamic dependencies. The config scripts potentially belong
|
||||||
# Copyright (c) 2015 Justus Calvin
|
# to TBB >= 2020 which is incompatible with OpenVDB in our static dependency bundle.
|
||||||
#
|
# This workaround is useful for package maintainers on Linux systems to use newer versions
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
# of intel TBB (renamed to oneTBB from version 2021 up).
|
||||||
# of this software and associated documentation files (the "Software"), to deal
|
set(_q "")
|
||||||
# in the Software without restriction, including without limitation the rights
|
if(${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
|
||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
set(_q QUIET)
|
||||||
# copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in all
|
|
||||||
# copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
# SOFTWARE.
|
|
||||||
|
|
||||||
#
|
|
||||||
# FindTBB
|
|
||||||
# -------
|
|
||||||
#
|
|
||||||
# Find TBB include directories and libraries.
|
|
||||||
#
|
|
||||||
# Usage:
|
|
||||||
#
|
|
||||||
# find_package(TBB [major[.minor]] [EXACT]
|
|
||||||
# [QUIET] [REQUIRED]
|
|
||||||
# [[COMPONENTS] [components...]]
|
|
||||||
# [OPTIONAL_COMPONENTS components...])
|
|
||||||
#
|
|
||||||
# where the allowed components are tbbmalloc and tbb_preview. Users may modify
|
|
||||||
# the behavior of this module with the following variables:
|
|
||||||
#
|
|
||||||
# * TBB_ROOT_DIR - The base directory the of TBB installation.
|
|
||||||
# * TBB_INCLUDE_DIR - The directory that contains the TBB headers files.
|
|
||||||
# * TBB_LIBRARY - The directory that contains the TBB library files.
|
|
||||||
# * TBB_<library>_LIBRARY - The path of the TBB the corresponding TBB library.
|
|
||||||
# These libraries, if specified, override the
|
|
||||||
# corresponding library search results, where <library>
|
|
||||||
# may be tbb, tbb_debug, tbbmalloc, tbbmalloc_debug,
|
|
||||||
# tbb_preview, or tbb_preview_debug.
|
|
||||||
# * TBB_USE_DEBUG_BUILD - The debug version of tbb libraries, if present, will
|
|
||||||
# be used instead of the release version.
|
|
||||||
# * TBB_STATIC - Static linking of libraries with a _static suffix.
|
|
||||||
# For example, on Windows a tbb_static.lib will be searched for
|
|
||||||
# instead of tbb.lib.
|
|
||||||
#
|
|
||||||
# Users may modify the behavior of this module with the following environment
|
|
||||||
# variables:
|
|
||||||
#
|
|
||||||
# * TBB_INSTALL_DIR
|
|
||||||
# * TBBROOT
|
|
||||||
# * LIBRARY_PATH
|
|
||||||
#
|
|
||||||
# This module will set the following variables:
|
|
||||||
#
|
|
||||||
# * TBB_FOUND - Set to false, or undefined, if we haven’t found, or
|
|
||||||
# don’t want to use TBB.
|
|
||||||
# * TBB_<component>_FOUND - If False, optional <component> part of TBB sytem is
|
|
||||||
# not available.
|
|
||||||
# * TBB_VERSION - The full version string
|
|
||||||
# * TBB_VERSION_MAJOR - The major version
|
|
||||||
# * TBB_VERSION_MINOR - The minor version
|
|
||||||
# * TBB_INTERFACE_VERSION - The interface version number defined in
|
|
||||||
# tbb/tbb_stddef.h.
|
|
||||||
# * TBB_<library>_LIBRARY_RELEASE - The path of the TBB release version of
|
|
||||||
# <library>, where <library> may be tbb, tbb_debug,
|
|
||||||
# tbbmalloc, tbbmalloc_debug, tbb_preview, or
|
|
||||||
# tbb_preview_debug.
|
|
||||||
# * TBB_<library>_LIBRARY_DEGUG - The path of the TBB release version of
|
|
||||||
# <library>, where <library> may be tbb, tbb_debug,
|
|
||||||
# tbbmalloc, tbbmalloc_debug, tbb_preview, or
|
|
||||||
# tbb_preview_debug.
|
|
||||||
#
|
|
||||||
# The following varibles should be used to build and link with TBB:
|
|
||||||
#
|
|
||||||
# * TBB_INCLUDE_DIRS - The include directory for TBB.
|
|
||||||
# * TBB_LIBRARIES - The libraries to link against to use TBB.
|
|
||||||
# * TBB_LIBRARIES_RELEASE - The release libraries to link against to use TBB.
|
|
||||||
# * TBB_LIBRARIES_DEBUG - The debug libraries to link against to use TBB.
|
|
||||||
# * TBB_DEFINITIONS - Definitions to use when compiling code that uses
|
|
||||||
# TBB.
|
|
||||||
# * TBB_DEFINITIONS_RELEASE - Definitions to use when compiling release code that
|
|
||||||
# uses TBB.
|
|
||||||
# * TBB_DEFINITIONS_DEBUG - Definitions to use when compiling debug code that
|
|
||||||
# uses TBB.
|
|
||||||
#
|
|
||||||
# This module will also create the "tbb" target that may be used when building
|
|
||||||
# executables and libraries.
|
|
||||||
|
|
||||||
unset(TBB_FOUND CACHE)
|
|
||||||
unset(TBB_INCLUDE_DIRS CACHE)
|
|
||||||
unset(TBB_LIBRARIES)
|
|
||||||
unset(TBB_LIBRARIES_DEBUG)
|
|
||||||
unset(TBB_LIBRARIES_RELEASE)
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
|
|
||||||
find_package(Threads QUIET REQUIRED)
|
|
||||||
|
|
||||||
if(NOT TBB_FOUND)
|
|
||||||
|
|
||||||
##################################
|
|
||||||
# Check the build type
|
|
||||||
##################################
|
|
||||||
|
|
||||||
if(NOT DEFINED TBB_USE_DEBUG_BUILD)
|
|
||||||
if(CMAKE_BUILD_TYPE MATCHES "(Debug|DEBUG|debug)")
|
|
||||||
set(TBB_BUILD_TYPE DEBUG)
|
|
||||||
else()
|
|
||||||
set(TBB_BUILD_TYPE RELEASE)
|
|
||||||
endif()
|
|
||||||
elseif(TBB_USE_DEBUG_BUILD)
|
|
||||||
set(TBB_BUILD_TYPE DEBUG)
|
|
||||||
else()
|
|
||||||
set(TBB_BUILD_TYPE RELEASE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
##################################
|
|
||||||
# Set the TBB search directories
|
|
||||||
##################################
|
|
||||||
|
|
||||||
# Define search paths based on user input and environment variables
|
|
||||||
set(TBB_SEARCH_DIR ${TBB_ROOT_DIR} $ENV{TBB_INSTALL_DIR} $ENV{TBBROOT})
|
|
||||||
|
|
||||||
# Define the search directories based on the current platform
|
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
||||||
set(TBB_DEFAULT_SEARCH_DIR "C:/Program Files/Intel/TBB"
|
|
||||||
"C:/Program Files (x86)/Intel/TBB")
|
|
||||||
|
|
||||||
# Set the target architecture
|
|
||||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
||||||
set(TBB_ARCHITECTURE "intel64")
|
|
||||||
else()
|
|
||||||
set(TBB_ARCHITECTURE "ia32")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Set the TBB search library path search suffix based on the version of VC
|
|
||||||
if(WINDOWS_STORE)
|
|
||||||
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc11_ui")
|
|
||||||
elseif(MSVC14)
|
|
||||||
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc14")
|
|
||||||
elseif(MSVC12)
|
|
||||||
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc12")
|
|
||||||
elseif(MSVC11)
|
|
||||||
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc11")
|
|
||||||
elseif(MSVC10)
|
|
||||||
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc10")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Add the library path search suffix for the VC independent version of TBB
|
|
||||||
list(APPEND TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc_mt")
|
|
||||||
|
|
||||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|
||||||
# OS X
|
|
||||||
set(TBB_DEFAULT_SEARCH_DIR "/opt/intel/tbb")
|
|
||||||
|
|
||||||
# TODO: Check to see which C++ library is being used by the compiler.
|
|
||||||
if(NOT ${CMAKE_SYSTEM_VERSION} VERSION_LESS 13.0)
|
|
||||||
# The default C++ library on OS X 10.9 and later is libc++
|
|
||||||
set(TBB_LIB_PATH_SUFFIX "lib/libc++" "lib")
|
|
||||||
else()
|
|
||||||
set(TBB_LIB_PATH_SUFFIX "lib")
|
|
||||||
endif()
|
|
||||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
||||||
# Linux
|
|
||||||
set(TBB_DEFAULT_SEARCH_DIR "/opt/intel/tbb")
|
|
||||||
|
|
||||||
# TODO: Check compiler version to see the suffix should be <arch>/gcc4.1 or
|
|
||||||
# <arch>/gcc4.1. For now, assume that the compiler is more recent than
|
|
||||||
# gcc 4.4.x or later.
|
|
||||||
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
|
|
||||||
set(TBB_LIB_PATH_SUFFIX "lib/intel64/gcc4.4")
|
|
||||||
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$")
|
|
||||||
set(TBB_LIB_PATH_SUFFIX "lib/ia32/gcc4.4")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
##################################
|
|
||||||
# Find the TBB include dir
|
|
||||||
##################################
|
|
||||||
|
|
||||||
find_path(TBB_INCLUDE_DIRS tbb/tbb.h
|
|
||||||
HINTS ${TBB_INCLUDE_DIR} ${TBB_SEARCH_DIR}
|
|
||||||
PATHS ${TBB_DEFAULT_SEARCH_DIR}
|
|
||||||
PATH_SUFFIXES include)
|
|
||||||
|
|
||||||
##################################
|
|
||||||
# Set version strings
|
|
||||||
##################################
|
|
||||||
|
|
||||||
if(TBB_INCLUDE_DIRS)
|
|
||||||
file(READ "${TBB_INCLUDE_DIRS}/tbb/tbb_stddef.h" _tbb_version_file)
|
|
||||||
string(REGEX REPLACE ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1"
|
|
||||||
TBB_VERSION_MAJOR "${_tbb_version_file}")
|
|
||||||
string(REGEX REPLACE ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1"
|
|
||||||
TBB_VERSION_MINOR "${_tbb_version_file}")
|
|
||||||
string(REGEX REPLACE ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1"
|
|
||||||
TBB_INTERFACE_VERSION "${_tbb_version_file}")
|
|
||||||
set(TBB_VERSION "${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
##################################
|
|
||||||
# Find TBB components
|
|
||||||
##################################
|
|
||||||
|
|
||||||
if(TBB_VERSION VERSION_LESS 4.3)
|
|
||||||
set(TBB_SEARCH_COMPOMPONENTS tbb_preview tbbmalloc tbb)
|
|
||||||
else()
|
|
||||||
set(TBB_SEARCH_COMPOMPONENTS tbb_preview tbbmalloc_proxy tbbmalloc tbb)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(TBB_STATIC)
|
|
||||||
set(TBB_STATIC_SUFFIX "_static")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Find each component
|
|
||||||
foreach(_comp ${TBB_SEARCH_COMPOMPONENTS})
|
|
||||||
if(";${TBB_FIND_COMPONENTS};tbb;" MATCHES ";${_comp};")
|
|
||||||
|
|
||||||
unset(TBB_${_comp}_LIBRARY_DEBUG CACHE)
|
|
||||||
unset(TBB_${_comp}_LIBRARY_RELEASE CACHE)
|
|
||||||
|
|
||||||
# Search for the libraries
|
|
||||||
find_library(TBB_${_comp}_LIBRARY_RELEASE ${_comp}${TBB_STATIC_SUFFIX}
|
|
||||||
HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR}
|
|
||||||
PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH
|
|
||||||
PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX})
|
|
||||||
|
|
||||||
find_library(TBB_${_comp}_LIBRARY_DEBUG ${_comp}${TBB_STATIC_SUFFIX}_debug
|
|
||||||
HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR}
|
|
||||||
PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH
|
|
||||||
PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX})
|
|
||||||
|
|
||||||
if(TBB_${_comp}_LIBRARY_DEBUG)
|
|
||||||
list(APPEND TBB_LIBRARIES_DEBUG "${TBB_${_comp}_LIBRARY_DEBUG}")
|
|
||||||
endif()
|
|
||||||
if(TBB_${_comp}_LIBRARY_RELEASE)
|
|
||||||
list(APPEND TBB_LIBRARIES_RELEASE "${TBB_${_comp}_LIBRARY_RELEASE}")
|
|
||||||
endif()
|
|
||||||
if(TBB_${_comp}_LIBRARY_${TBB_BUILD_TYPE} AND NOT TBB_${_comp}_LIBRARY)
|
|
||||||
set(TBB_${_comp}_LIBRARY "${TBB_${_comp}_LIBRARY_${TBB_BUILD_TYPE}}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(TBB_${_comp}_LIBRARY AND EXISTS "${TBB_${_comp}_LIBRARY}")
|
|
||||||
set(TBB_${_comp}_FOUND TRUE)
|
|
||||||
else()
|
|
||||||
set(TBB_${_comp}_FOUND FALSE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Mark internal variables as advanced
|
|
||||||
mark_as_advanced(TBB_${_comp}_LIBRARY_RELEASE)
|
|
||||||
mark_as_advanced(TBB_${_comp}_LIBRARY_DEBUG)
|
|
||||||
mark_as_advanced(TBB_${_comp}_LIBRARY)
|
|
||||||
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
##################################
|
|
||||||
# Set compile flags and libraries
|
|
||||||
##################################
|
|
||||||
|
|
||||||
set(TBB_DEFINITIONS_RELEASE "")
|
|
||||||
set(TBB_DEFINITIONS_DEBUG "TBB_USE_DEBUG=1")
|
|
||||||
|
|
||||||
if(TBB_LIBRARIES_${TBB_BUILD_TYPE})
|
|
||||||
set(TBB_LIBRARIES "${TBB_LIBRARIES_${TBB_BUILD_TYPE}}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT MSVC AND NOT TBB_LIBRARIES)
|
|
||||||
set(TBB_LIBRARIES ${TBB_LIBRARIES_RELEASE})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(TBB_DEFINITIONS "")
|
|
||||||
if (MSVC AND TBB_STATIC)
|
|
||||||
set(TBB_DEFINITIONS __TBB_NO_IMPLICIT_LINKAGE)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
unset (TBB_STATIC_SUFFIX)
|
|
||||||
|
|
||||||
find_package_handle_standard_args(TBB
|
|
||||||
REQUIRED_VARS TBB_INCLUDE_DIRS TBB_LIBRARIES
|
|
||||||
FAIL_MESSAGE "TBB library cannot be found. Consider set TBBROOT environment variable."
|
|
||||||
HANDLE_COMPONENTS
|
|
||||||
VERSION_VAR TBB_VERSION)
|
|
||||||
|
|
||||||
##################################
|
|
||||||
# Create targets
|
|
||||||
##################################
|
|
||||||
|
|
||||||
if(NOT CMAKE_VERSION VERSION_LESS 3.0 AND TBB_FOUND)
|
|
||||||
add_library(TBB::tbb UNKNOWN IMPORTED)
|
|
||||||
set_target_properties(TBB::tbb PROPERTIES
|
|
||||||
INTERFACE_COMPILE_DEFINITIONS "${TBB_DEFINITIONS}"
|
|
||||||
INTERFACE_LINK_LIBRARIES "Threads::Threads;${CMAKE_DL_LIBS}"
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES ${TBB_INCLUDE_DIRS}
|
|
||||||
IMPORTED_LOCATION ${TBB_LIBRARIES})
|
|
||||||
if(TBB_LIBRARIES_RELEASE AND TBB_LIBRARIES_DEBUG)
|
|
||||||
set_target_properties(TBB::tbb PROPERTIES
|
|
||||||
INTERFACE_COMPILE_DEFINITIONS "${TBB_DEFINITIONS};$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:${TBB_DEFINITIONS_RELEASE}>;$<$<CONFIG:Debug>:${TBB_DEFINITIONS_DEBUG}>"
|
|
||||||
IMPORTED_LOCATION_DEBUG ${TBB_LIBRARIES_DEBUG}
|
|
||||||
IMPORTED_LOCATION_RELWITHDEBINFO ${TBB_LIBRARIES_RELEASE}
|
|
||||||
IMPORTED_LOCATION_RELEASE ${TBB_LIBRARIES_RELEASE}
|
|
||||||
IMPORTED_LOCATION_MINSIZEREL ${TBB_LIBRARIES_RELEASE}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
mark_as_advanced(TBB_INCLUDE_DIRS TBB_LIBRARIES)
|
|
||||||
|
|
||||||
unset(TBB_ARCHITECTURE)
|
|
||||||
unset(TBB_BUILD_TYPE)
|
|
||||||
unset(TBB_LIB_PATH_SUFFIX)
|
|
||||||
unset(TBB_DEFAULT_SEARCH_DIR)
|
|
||||||
|
|
||||||
if(TBB_DEBUG)
|
|
||||||
message(STATUS " TBB_FOUND = ${TBB_FOUND}")
|
|
||||||
message(STATUS " TBB_INCLUDE_DIRS = ${TBB_INCLUDE_DIRS}")
|
|
||||||
message(STATUS " TBB_DEFINITIONS = ${TBB_DEFINITIONS}")
|
|
||||||
message(STATUS " TBB_LIBRARIES = ${TBB_LIBRARIES}")
|
|
||||||
message(STATUS " TBB_DEFINITIONS_DEBUG = ${TBB_DEFINITIONS_DEBUG}")
|
|
||||||
message(STATUS " TBB_LIBRARIES_DEBUG = ${TBB_LIBRARIES_DEBUG}")
|
|
||||||
message(STATUS " TBB_DEFINITIONS_RELEASE = ${TBB_DEFINITIONS_RELEASE}")
|
|
||||||
message(STATUS " TBB_LIBRARIES_RELEASE = ${TBB_LIBRARIES_RELEASE}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Only consider the config scripts if not building with the static dependencies
|
||||||
|
# and this call is not made from a static dependency build (e.g. dep_OpenVDB will use this module)
|
||||||
|
# BUILD_SHARED_LIBS will always be defined for dependency projects and will be OFF.
|
||||||
|
# Newer versions of TBB also discourage from using TBB as a static library
|
||||||
|
if (NOT SLIC3R_STATIC AND (NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS))
|
||||||
|
find_package(${CMAKE_FIND_PACKAGE_NAME} ${${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION} CONFIG ${_q})
|
||||||
|
|
||||||
|
if(NOT ${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
|
||||||
|
if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FOUND)
|
||||||
|
message(STATUS "Falling back to MODULE search for ${CMAKE_FIND_PACKAGE_NAME}...")
|
||||||
|
else()
|
||||||
|
message(STATUS "${CMAKE_FIND_PACKAGE_NAME} found in ${${CMAKE_FIND_PACKAGE_NAME}_DIR}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FOUND)
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/FindTBB.cmake.in)
|
||||||
|
endif ()
|
||||||
|
332
cmake/modules/FindTBB.cmake.in
Normal file
332
cmake/modules/FindTBB.cmake.in
Normal file
@ -0,0 +1,332 @@
|
|||||||
|
# The MIT License (MIT)
|
||||||
|
#
|
||||||
|
# Copyright (c) 2015 Justus Calvin
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to deal
|
||||||
|
# in the Software without restriction, including without limitation the rights
|
||||||
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
# copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in all
|
||||||
|
# copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
# SOFTWARE.
|
||||||
|
|
||||||
|
#
|
||||||
|
# FindTBB
|
||||||
|
# -------
|
||||||
|
#
|
||||||
|
# Find TBB include directories and libraries.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
#
|
||||||
|
# find_package(TBB [major[.minor]] [EXACT]
|
||||||
|
# [QUIET] [REQUIRED]
|
||||||
|
# [[COMPONENTS] [components...]]
|
||||||
|
# [OPTIONAL_COMPONENTS components...])
|
||||||
|
#
|
||||||
|
# where the allowed components are tbbmalloc and tbb_preview. Users may modify
|
||||||
|
# the behavior of this module with the following variables:
|
||||||
|
#
|
||||||
|
# * TBB_ROOT_DIR - The base directory the of TBB installation.
|
||||||
|
# * TBB_INCLUDE_DIR - The directory that contains the TBB headers files.
|
||||||
|
# * TBB_LIBRARY - The directory that contains the TBB library files.
|
||||||
|
# * TBB_<library>_LIBRARY - The path of the TBB the corresponding TBB library.
|
||||||
|
# These libraries, if specified, override the
|
||||||
|
# corresponding library search results, where <library>
|
||||||
|
# may be tbb, tbb_debug, tbbmalloc, tbbmalloc_debug,
|
||||||
|
# tbb_preview, or tbb_preview_debug.
|
||||||
|
# * TBB_USE_DEBUG_BUILD - The debug version of tbb libraries, if present, will
|
||||||
|
# be used instead of the release version.
|
||||||
|
# * TBB_STATIC - Static linking of libraries with a _static suffix.
|
||||||
|
# For example, on Windows a tbb_static.lib will be searched for
|
||||||
|
# instead of tbb.lib.
|
||||||
|
#
|
||||||
|
# Users may modify the behavior of this module with the following environment
|
||||||
|
# variables:
|
||||||
|
#
|
||||||
|
# * TBB_INSTALL_DIR
|
||||||
|
# * TBBROOT
|
||||||
|
# * LIBRARY_PATH
|
||||||
|
#
|
||||||
|
# This module will set the following variables:
|
||||||
|
#
|
||||||
|
# * TBB_FOUND - Set to false, or undefined, if we haven’t found, or
|
||||||
|
# don’t want to use TBB.
|
||||||
|
# * TBB_<component>_FOUND - If False, optional <component> part of TBB sytem is
|
||||||
|
# not available.
|
||||||
|
# * TBB_VERSION - The full version string
|
||||||
|
# * TBB_VERSION_MAJOR - The major version
|
||||||
|
# * TBB_VERSION_MINOR - The minor version
|
||||||
|
# * TBB_INTERFACE_VERSION - The interface version number defined in
|
||||||
|
# tbb/tbb_stddef.h.
|
||||||
|
# * TBB_<library>_LIBRARY_RELEASE - The path of the TBB release version of
|
||||||
|
# <library>, where <library> may be tbb, tbb_debug,
|
||||||
|
# tbbmalloc, tbbmalloc_debug, tbb_preview, or
|
||||||
|
# tbb_preview_debug.
|
||||||
|
# * TBB_<library>_LIBRARY_DEGUG - The path of the TBB release version of
|
||||||
|
# <library>, where <library> may be tbb, tbb_debug,
|
||||||
|
# tbbmalloc, tbbmalloc_debug, tbb_preview, or
|
||||||
|
# tbb_preview_debug.
|
||||||
|
#
|
||||||
|
# The following varibles should be used to build and link with TBB:
|
||||||
|
#
|
||||||
|
# * TBB_INCLUDE_DIRS - The include directory for TBB.
|
||||||
|
# * TBB_LIBRARIES - The libraries to link against to use TBB.
|
||||||
|
# * TBB_LIBRARIES_RELEASE - The release libraries to link against to use TBB.
|
||||||
|
# * TBB_LIBRARIES_DEBUG - The debug libraries to link against to use TBB.
|
||||||
|
# * TBB_DEFINITIONS - Definitions to use when compiling code that uses
|
||||||
|
# TBB.
|
||||||
|
# * TBB_DEFINITIONS_RELEASE - Definitions to use when compiling release code that
|
||||||
|
# uses TBB.
|
||||||
|
# * TBB_DEFINITIONS_DEBUG - Definitions to use when compiling debug code that
|
||||||
|
# uses TBB.
|
||||||
|
#
|
||||||
|
# This module will also create the "tbb" target that may be used when building
|
||||||
|
# executables and libraries.
|
||||||
|
|
||||||
|
unset(TBB_FOUND CACHE)
|
||||||
|
unset(TBB_INCLUDE_DIRS CACHE)
|
||||||
|
unset(TBB_LIBRARIES)
|
||||||
|
unset(TBB_LIBRARIES_DEBUG)
|
||||||
|
unset(TBB_LIBRARIES_RELEASE)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
|
||||||
|
find_package(Threads QUIET REQUIRED)
|
||||||
|
|
||||||
|
if(NOT TBB_FOUND)
|
||||||
|
|
||||||
|
##################################
|
||||||
|
# Check the build type
|
||||||
|
##################################
|
||||||
|
|
||||||
|
if(NOT DEFINED TBB_USE_DEBUG_BUILD)
|
||||||
|
if(CMAKE_BUILD_TYPE MATCHES "(Debug|DEBUG|debug)")
|
||||||
|
set(TBB_BUILD_TYPE DEBUG)
|
||||||
|
else()
|
||||||
|
set(TBB_BUILD_TYPE RELEASE)
|
||||||
|
endif()
|
||||||
|
elseif(TBB_USE_DEBUG_BUILD)
|
||||||
|
set(TBB_BUILD_TYPE DEBUG)
|
||||||
|
else()
|
||||||
|
set(TBB_BUILD_TYPE RELEASE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
##################################
|
||||||
|
# Set the TBB search directories
|
||||||
|
##################################
|
||||||
|
|
||||||
|
# Define search paths based on user input and environment variables
|
||||||
|
set(TBB_SEARCH_DIR ${TBB_ROOT_DIR} $ENV{TBB_INSTALL_DIR} $ENV{TBBROOT})
|
||||||
|
|
||||||
|
# Define the search directories based on the current platform
|
||||||
|
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||||
|
set(TBB_DEFAULT_SEARCH_DIR "C:/Program Files/Intel/TBB"
|
||||||
|
"C:/Program Files (x86)/Intel/TBB")
|
||||||
|
|
||||||
|
# Set the target architecture
|
||||||
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
|
set(TBB_ARCHITECTURE "intel64")
|
||||||
|
else()
|
||||||
|
set(TBB_ARCHITECTURE "ia32")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Set the TBB search library path search suffix based on the version of VC
|
||||||
|
if(WINDOWS_STORE)
|
||||||
|
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc11_ui")
|
||||||
|
elseif(MSVC14)
|
||||||
|
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc14")
|
||||||
|
elseif(MSVC12)
|
||||||
|
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc12")
|
||||||
|
elseif(MSVC11)
|
||||||
|
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc11")
|
||||||
|
elseif(MSVC10)
|
||||||
|
set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc10")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Add the library path search suffix for the VC independent version of TBB
|
||||||
|
list(APPEND TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc_mt")
|
||||||
|
|
||||||
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
|
# OS X
|
||||||
|
set(TBB_DEFAULT_SEARCH_DIR "/opt/intel/tbb")
|
||||||
|
|
||||||
|
# TODO: Check to see which C++ library is being used by the compiler.
|
||||||
|
if(NOT ${CMAKE_SYSTEM_VERSION} VERSION_LESS 13.0)
|
||||||
|
# The default C++ library on OS X 10.9 and later is libc++
|
||||||
|
set(TBB_LIB_PATH_SUFFIX "lib/libc++" "lib")
|
||||||
|
else()
|
||||||
|
set(TBB_LIB_PATH_SUFFIX "lib")
|
||||||
|
endif()
|
||||||
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
|
# Linux
|
||||||
|
set(TBB_DEFAULT_SEARCH_DIR "/opt/intel/tbb")
|
||||||
|
|
||||||
|
# TODO: Check compiler version to see the suffix should be <arch>/gcc4.1 or
|
||||||
|
# <arch>/gcc4.1. For now, assume that the compiler is more recent than
|
||||||
|
# gcc 4.4.x or later.
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
|
||||||
|
set(TBB_LIB_PATH_SUFFIX "lib/intel64/gcc4.4")
|
||||||
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$")
|
||||||
|
set(TBB_LIB_PATH_SUFFIX "lib/ia32/gcc4.4")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
##################################
|
||||||
|
# Find the TBB include dir
|
||||||
|
##################################
|
||||||
|
|
||||||
|
find_path(TBB_INCLUDE_DIRS tbb/tbb.h
|
||||||
|
HINTS ${TBB_INCLUDE_DIR} ${TBB_SEARCH_DIR}
|
||||||
|
PATHS ${TBB_DEFAULT_SEARCH_DIR}
|
||||||
|
PATH_SUFFIXES include)
|
||||||
|
|
||||||
|
##################################
|
||||||
|
# Set version strings
|
||||||
|
##################################
|
||||||
|
|
||||||
|
if(TBB_INCLUDE_DIRS)
|
||||||
|
file(READ "${TBB_INCLUDE_DIRS}/tbb/tbb_stddef.h" _tbb_version_file)
|
||||||
|
string(REGEX REPLACE ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1"
|
||||||
|
TBB_VERSION_MAJOR "${_tbb_version_file}")
|
||||||
|
string(REGEX REPLACE ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1"
|
||||||
|
TBB_VERSION_MINOR "${_tbb_version_file}")
|
||||||
|
string(REGEX REPLACE ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1"
|
||||||
|
TBB_INTERFACE_VERSION "${_tbb_version_file}")
|
||||||
|
set(TBB_VERSION "${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
##################################
|
||||||
|
# Find TBB components
|
||||||
|
##################################
|
||||||
|
|
||||||
|
if(TBB_VERSION VERSION_LESS 4.3)
|
||||||
|
set(TBB_SEARCH_COMPOMPONENTS tbb_preview tbbmalloc tbb)
|
||||||
|
else()
|
||||||
|
set(TBB_SEARCH_COMPOMPONENTS tbb_preview tbbmalloc_proxy tbbmalloc tbb)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TBB_STATIC)
|
||||||
|
set(TBB_STATIC_SUFFIX "_static")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Find each component
|
||||||
|
foreach(_comp ${TBB_SEARCH_COMPOMPONENTS})
|
||||||
|
if(";${TBB_FIND_COMPONENTS};tbb;" MATCHES ";${_comp};")
|
||||||
|
|
||||||
|
unset(TBB_${_comp}_LIBRARY_DEBUG CACHE)
|
||||||
|
unset(TBB_${_comp}_LIBRARY_RELEASE CACHE)
|
||||||
|
|
||||||
|
# Search for the libraries
|
||||||
|
find_library(TBB_${_comp}_LIBRARY_RELEASE ${_comp}${TBB_STATIC_SUFFIX}
|
||||||
|
HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR}
|
||||||
|
PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH
|
||||||
|
PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX})
|
||||||
|
|
||||||
|
find_library(TBB_${_comp}_LIBRARY_DEBUG ${_comp}${TBB_STATIC_SUFFIX}_debug
|
||||||
|
HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR}
|
||||||
|
PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH
|
||||||
|
PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX})
|
||||||
|
|
||||||
|
if(TBB_${_comp}_LIBRARY_DEBUG)
|
||||||
|
list(APPEND TBB_LIBRARIES_DEBUG "${TBB_${_comp}_LIBRARY_DEBUG}")
|
||||||
|
endif()
|
||||||
|
if(TBB_${_comp}_LIBRARY_RELEASE)
|
||||||
|
list(APPEND TBB_LIBRARIES_RELEASE "${TBB_${_comp}_LIBRARY_RELEASE}")
|
||||||
|
endif()
|
||||||
|
if(TBB_${_comp}_LIBRARY_${TBB_BUILD_TYPE} AND NOT TBB_${_comp}_LIBRARY)
|
||||||
|
set(TBB_${_comp}_LIBRARY "${TBB_${_comp}_LIBRARY_${TBB_BUILD_TYPE}}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TBB_${_comp}_LIBRARY AND EXISTS "${TBB_${_comp}_LIBRARY}")
|
||||||
|
set(TBB_${_comp}_FOUND TRUE)
|
||||||
|
else()
|
||||||
|
set(TBB_${_comp}_FOUND FALSE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Mark internal variables as advanced
|
||||||
|
mark_as_advanced(TBB_${_comp}_LIBRARY_RELEASE)
|
||||||
|
mark_as_advanced(TBB_${_comp}_LIBRARY_DEBUG)
|
||||||
|
mark_as_advanced(TBB_${_comp}_LIBRARY)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
##################################
|
||||||
|
# Set compile flags and libraries
|
||||||
|
##################################
|
||||||
|
|
||||||
|
set(TBB_DEFINITIONS_RELEASE "")
|
||||||
|
set(TBB_DEFINITIONS_DEBUG "TBB_USE_DEBUG=1")
|
||||||
|
|
||||||
|
if(TBB_LIBRARIES_${TBB_BUILD_TYPE})
|
||||||
|
set(TBB_LIBRARIES "${TBB_LIBRARIES_${TBB_BUILD_TYPE}}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT MSVC AND NOT TBB_LIBRARIES)
|
||||||
|
set(TBB_LIBRARIES ${TBB_LIBRARIES_RELEASE})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(TBB_DEFINITIONS "")
|
||||||
|
if (MSVC AND TBB_STATIC)
|
||||||
|
set(TBB_DEFINITIONS __TBB_NO_IMPLICIT_LINKAGE)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
unset (TBB_STATIC_SUFFIX)
|
||||||
|
|
||||||
|
find_package_handle_standard_args(TBB
|
||||||
|
REQUIRED_VARS TBB_INCLUDE_DIRS TBB_LIBRARIES
|
||||||
|
FAIL_MESSAGE "TBB library cannot be found. Consider set TBBROOT environment variable."
|
||||||
|
HANDLE_COMPONENTS
|
||||||
|
VERSION_VAR TBB_VERSION)
|
||||||
|
|
||||||
|
##################################
|
||||||
|
# Create targets
|
||||||
|
##################################
|
||||||
|
|
||||||
|
if(NOT CMAKE_VERSION VERSION_LESS 3.0 AND TBB_FOUND)
|
||||||
|
add_library(TBB::tbb UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(TBB::tbb PROPERTIES
|
||||||
|
INTERFACE_COMPILE_DEFINITIONS "${TBB_DEFINITIONS}"
|
||||||
|
INTERFACE_LINK_LIBRARIES "Threads::Threads;${CMAKE_DL_LIBS}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES ${TBB_INCLUDE_DIRS}
|
||||||
|
IMPORTED_LOCATION ${TBB_LIBRARIES})
|
||||||
|
if(TBB_LIBRARIES_RELEASE AND TBB_LIBRARIES_DEBUG)
|
||||||
|
set_target_properties(TBB::tbb PROPERTIES
|
||||||
|
INTERFACE_COMPILE_DEFINITIONS "${TBB_DEFINITIONS};$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:${TBB_DEFINITIONS_RELEASE}>;$<$<CONFIG:Debug>:${TBB_DEFINITIONS_DEBUG}>"
|
||||||
|
IMPORTED_LOCATION_DEBUG ${TBB_LIBRARIES_DEBUG}
|
||||||
|
IMPORTED_LOCATION_RELWITHDEBINFO ${TBB_LIBRARIES_RELEASE}
|
||||||
|
IMPORTED_LOCATION_RELEASE ${TBB_LIBRARIES_RELEASE}
|
||||||
|
IMPORTED_LOCATION_MINSIZEREL ${TBB_LIBRARIES_RELEASE}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(TBB_INCLUDE_DIRS TBB_LIBRARIES)
|
||||||
|
|
||||||
|
unset(TBB_ARCHITECTURE)
|
||||||
|
unset(TBB_BUILD_TYPE)
|
||||||
|
unset(TBB_LIB_PATH_SUFFIX)
|
||||||
|
unset(TBB_DEFAULT_SEARCH_DIR)
|
||||||
|
|
||||||
|
if(TBB_DEBUG)
|
||||||
|
message(STATUS " TBB_FOUND = ${TBB_FOUND}")
|
||||||
|
message(STATUS " TBB_INCLUDE_DIRS = ${TBB_INCLUDE_DIRS}")
|
||||||
|
message(STATUS " TBB_DEFINITIONS = ${TBB_DEFINITIONS}")
|
||||||
|
message(STATUS " TBB_LIBRARIES = ${TBB_LIBRARIES}")
|
||||||
|
message(STATUS " TBB_DEFINITIONS_DEBUG = ${TBB_DEFINITIONS_DEBUG}")
|
||||||
|
message(STATUS " TBB_LIBRARIES_DEBUG = ${TBB_LIBRARIES_DEBUG}")
|
||||||
|
message(STATUS " TBB_DEFINITIONS_RELEASE = ${TBB_DEFINITIONS_RELEASE}")
|
||||||
|
message(STATUS " TBB_LIBRARIES_RELEASE = ${TBB_LIBRARIES_RELEASE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endif()
|
2
deps/wxWidgets/wxWidgets.cmake
vendored
2
deps/wxWidgets/wxWidgets.cmake
vendored
@ -13,7 +13,7 @@ prusaslicer_add_cmake_project(wxWidgets
|
|||||||
# GIT_REPOSITORY "https://github.com/prusa3d/wxWidgets"
|
# GIT_REPOSITORY "https://github.com/prusa3d/wxWidgets"
|
||||||
# GIT_TAG tm_cross_compile #${_wx_git_tag}
|
# GIT_TAG tm_cross_compile #${_wx_git_tag}
|
||||||
URL https://github.com/prusa3d/wxWidgets/archive/refs/heads/v3.1.4-patched.zip
|
URL https://github.com/prusa3d/wxWidgets/archive/refs/heads/v3.1.4-patched.zip
|
||||||
URL_HASH SHA256=78adc312e645d738945172d5ddcee16b1a55cca08e82b43379192262377a206a
|
URL_HASH SHA256=1dc34e0ef90c2a05b36df3c6a87ff80254186e23d5035b6500e82f4da628152a
|
||||||
DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} dep_TIFF dep_JPEG
|
DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} dep_TIFF dep_JPEG
|
||||||
CMAKE_ARGS
|
CMAKE_ARGS
|
||||||
-DwxBUILD_PRECOMP=ON
|
-DwxBUILD_PRECOMP=ON
|
||||||
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -88,8 +88,8 @@ src/libslic3r/ExtrusionEntity.cpp
|
|||||||
src/libslic3r/Flow.cpp
|
src/libslic3r/Flow.cpp
|
||||||
src/libslic3r/Format/3mf.cpp
|
src/libslic3r/Format/3mf.cpp
|
||||||
src/libslic3r/Format/AMF.cpp
|
src/libslic3r/Format/AMF.cpp
|
||||||
|
src/libslic3r/GCode/PostProcessor.cpp
|
||||||
src/libslic3r/miniz_extension.cpp
|
src/libslic3r/miniz_extension.cpp
|
||||||
src/libslic3r/PostProcessor.cpp
|
|
||||||
src/libslic3r/Preset.cpp
|
src/libslic3r/Preset.cpp
|
||||||
src/libslic3r/Print.cpp
|
src/libslic3r/Print.cpp
|
||||||
src/libslic3r/SLA/Pad.cpp
|
src/libslic3r/SLA/Pad.cpp
|
||||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -1,3 +1,5 @@
|
|||||||
|
min_slic3r_version = 2.4.0-beta4
|
||||||
|
0.1.1 Added Ender 2 Pro
|
||||||
min_slic3r_version = 2.3.2-alpha0
|
min_slic3r_version = 2.3.2-alpha0
|
||||||
0.1.0 Added Ender-7, Sermoon D1, CR-10 SMART
|
0.1.0 Added Ender-7, Sermoon D1, CR-10 SMART
|
||||||
min_slic3r_version = 2.3.1-beta
|
min_slic3r_version = 2.3.1-beta
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
name = Creality
|
name = Creality
|
||||||
# Configuration version of this file. Config file will only be installed, if the config_version differs.
|
# 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.
|
# This means, the server may force the PrusaSlicer configuration to be downgraded.
|
||||||
config_version = 0.1.0
|
config_version = 0.1.1
|
||||||
# Where to get the updates from?
|
# Where to get the updates from?
|
||||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/
|
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/
|
||||||
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
|
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
|
||||||
@ -104,6 +104,15 @@ bed_model = ender2_bed.stl
|
|||||||
bed_texture = ender2.svg
|
bed_texture = ender2.svg
|
||||||
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
|
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
|
||||||
|
|
||||||
|
[printer_model:ENDER2PRO]
|
||||||
|
name = Creality Ender-2 Pro
|
||||||
|
variants = 0.4
|
||||||
|
technology = FFF
|
||||||
|
family = ENDER
|
||||||
|
bed_model = ender2pro_bed.stl
|
||||||
|
bed_texture = ender2pro.svg
|
||||||
|
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY
|
||||||
|
|
||||||
[printer_model:CR5PRO]
|
[printer_model:CR5PRO]
|
||||||
name = Creality CR-5 Pro
|
name = Creality CR-5 Pro
|
||||||
variants = 0.4
|
variants = 0.4
|
||||||
@ -1002,6 +1011,14 @@ max_print_height = 200
|
|||||||
printer_model = ENDER2
|
printer_model = ENDER2
|
||||||
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER2\nPRINTER_HAS_BOWDEN
|
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER2\nPRINTER_HAS_BOWDEN
|
||||||
|
|
||||||
|
[printer:Creality Ender-2 Pro]
|
||||||
|
inherits = *common*
|
||||||
|
renamed_from = "Creality ENDER-2 Pro"
|
||||||
|
bed_shape = 0x0,165x0,165x165,0x165
|
||||||
|
max_print_height = 180
|
||||||
|
printer_model = ENDER2PRO
|
||||||
|
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER2\nPRINTER_HAS_BOWDEN
|
||||||
|
|
||||||
[printer:Creality CR-5 Pro]
|
[printer:Creality CR-5 Pro]
|
||||||
inherits = *common*; *slowabl*; *descendingz*
|
inherits = *common*; *slowabl*; *descendingz*
|
||||||
retract_length = 6
|
retract_length = 6
|
||||||
|
BIN
resources/profiles/Creality/ENDER2PRO_thumbnail.png
Normal file
BIN
resources/profiles/Creality/ENDER2PRO_thumbnail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 52 KiB |
622
resources/profiles/Creality/ender2pro.svg
Normal file
622
resources/profiles/Creality/ender2pro.svg
Normal file
@ -0,0 +1,622 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
sodipodi:docname="ender2pro.svg"
|
||||||
|
inkscape:version="1.1.1 (c3084ef, 2021-09-22)"
|
||||||
|
id="svg1883"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 166.02917 166.02917"
|
||||||
|
height="166.02917mm"
|
||||||
|
width="166.02917mm"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<defs
|
||||||
|
id="defs1877" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
inkscape:snap-page="false"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:window-y="25"
|
||||||
|
inkscape:window-x="448"
|
||||||
|
inkscape:window-height="1227"
|
||||||
|
inkscape:window-width="1600"
|
||||||
|
borderlayer="false"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:cy="273.25679"
|
||||||
|
inkscape:cx="270.34593"
|
||||||
|
inkscape:zoom="1.3741653"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
borderopacity="1"
|
||||||
|
bordercolor="#f14bac"
|
||||||
|
pagecolor="#5d5d5d"
|
||||||
|
id="base"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
width="165mm">
|
||||||
|
<inkscape:grid
|
||||||
|
id="grid2446"
|
||||||
|
type="xygrid"
|
||||||
|
originx="0.52916899"
|
||||||
|
originy="0.52917032" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata1880">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 2"
|
||||||
|
id="layer2"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
transform="translate(0.529169,0.52917033)"
|
||||||
|
style="display:inline">
|
||||||
|
<path
|
||||||
|
id="rect346"
|
||||||
|
style="display:inline;fill:#ffffff;fill-rule:evenodd;stroke-width:0.236623"
|
||||||
|
d="m 97.449555,145.09211 v 10.20042 h 55.800205 v -10.20042 z m 8.336955,1.83245 c 0.71438,0 1.36733,0.36191 1.77302,0.97927 0.41451,0.635 0.44959,1.3049 0.44959,2.08101 v 3.35173 h -1.83452 v -3.80132 c 0,-0.45861 -0.1058,-0.68781 -0.40566,-0.68781 -0.32632,0 -0.37052,0.26448 -0.37052,0.68781 v 3.80132 h -1.84278 v -3.35173 -0.17622 c 0,-0.47625 0.0176,-0.97906 0.26458,-1.56114 0.34396,-0.81139 1.11963,-1.32292 1.96629,-1.32292 z m 23.56859,0 c 1.3141,0 2.23139,0.97896 2.23139,2.11667 0,0.53798 -0.21188,0.9526 -0.47646,1.42885 l -0.59066,1.06712 h 1.05833 v 1.79937 h -4.10104 l 2.24896,-3.78375 c 0.0529,-0.097 0.0966,-0.24691 0.0966,-0.40566 0,-0.34396 -0.19392,-0.52038 -0.55552,-0.52038 -0.32632,0 -0.55552,0.22924 -0.55552,0.54674 0,0.17639 0.0619,0.29983 0.22066,0.40566 l -0.79375,1.36736 c -0.7232,-0.37042 -1.09399,-0.9616 -1.09399,-1.78181 0,-1.25236 0.95278,-2.24017 2.31097,-2.24017 z m 7.62124,0 c 1.33173,0 2.33732,1.01458 2.33732,2.2934 0,1.19063 -0.90833,1.98438 -2.13423,1.98438 -0.0882,0 -0.1943,3e-5 -0.3266,-0.009 v -1.56114 c 0.0441,0.009 0.0882,0.009 0.12351,0.009 0.33514,0 0.55604,-0.22052 0.55604,-0.52038 0,-0.28222 -0.23816,-0.5116 -0.52038,-0.5116 -0.42334,0 -0.52039,0.31761 -0.52039,0.89969 v 3.82767 h -1.87843 v -3.51038 -0.29972 c 0,-0.44097 0.0264,-0.88171 0.27337,-1.38441 0.37041,-0.75847 1.13729,-1.2175 2.08979,-1.2175 z m 11.27321,0 c 0.88195,0 1.7024,0.35312 2.31976,0.97048 0.59972,0.60855 0.95239,1.44619 0.95239,2.30167 0,0.74084 -0.25548,1.48184 -0.73173,2.07274 -0.60854,0.75848 -1.52618,1.19063 -2.54042,1.19063 -0.74083,0 -1.48135,-0.25601 -2.06344,-0.73226 -0.75847,-0.61736 -1.19941,-1.54333 -1.19941,-2.53111 0,-0.8643 0.34382,-1.68431 0.96119,-2.30167 0.60854,-0.61736 1.46382,-0.97048 2.30166,-0.97048 z m -46.61317,0.12351 h 1.20871 v 1.83451 h -1.19941 c -0.23813,0 -0.37052,0.0528 -0.37052,0.29094 0,0.23812 0.12358,0.31781 0.37052,0.31781 h 1.11983 v 1.40198 h -1.29656 c -0.23813,0 -0.36174,0.0533 -0.36174,0.29146 0,0.23812 0.11479,0.31729 0.36174,0.31729 h 1.37614 v 1.83451 h -1.05833 -0.24702 c -0.44097,0 -0.86437,-0.0177 -1.30534,-0.2558 -0.590907,-0.32631 -0.91726,-0.88201 -0.91726,-1.43763 v -2.3549 c 0,-0.73201 0.02649,-1.28733 0.652674,-1.79886 0.414516,-0.34395 0.952186,-0.44131 1.666566,-0.44131 z m 7.23418,0 h 1.85208 0.34365 c 0.49389,0 1.0675,0.0268 1.76424,0.31781 1.14652,0.47625 1.86086,1.56083 1.86086,2.83083 0,1.27882 -0.71437,2.35507 -1.85208,2.84014 -0.46743,0.19403 -0.97045,0.29972 -1.50843,0.29972 h -0.29973 v -1.87844 h 0.3266 c 0.9084,0 1.45521,-0.52055 1.45521,-1.2702 0,-0.82903 -0.5733,-1.26142 -1.71101,-1.26142 H 110.749 v 4.41006 h -1.87844 z m 8.71678,0 h 1.2082 v 1.83451 h -1.19941 c -0.23813,0 -0.37052,0.0528 -0.37052,0.29094 0,0.23812 0.12357,0.31781 0.37052,0.31781 h 1.12034 v 1.40198 h -1.29656 c -0.23812,0 -0.36174,0.0533 -0.36174,0.29146 0,0.23812 0.1148,0.31729 0.36174,0.31729 h 1.37563 v 1.83451 h -1.05834 -0.24701 c -0.44097,0 -0.86386,-0.0177 -1.30483,-0.2558 -0.5909,-0.32631 -0.91726,-0.88201 -0.91726,-1.43763 v -2.3549 c 0,-0.73201 0.0265,-1.28733 0.65268,-1.79886 0.41451,-0.34395 0.95219,-0.44131 1.66656,-0.44131 z m 1.96319,0 h 2.30167 c 0.55562,0 1.05816,0.009 1.63142,0.43253 0.54681,0.40569 0.85577,1.02264 0.85577,1.69292 -10e-6,0.65264 -0.29122,1.16455 -0.88212,1.62316 l 1.09347,2.53989 h -1.97559 l -0.85524,-1.97559 v -1.6583 h 0.20257 c 0.33514,0 0.51159,-0.0968 0.51159,-0.44079 0,-0.35278 -0.18527,-0.41445 -0.51159,-0.41445 h -0.49351 v 4.48913 h -1.87844 z m 20.29127,0 h 2.30218 c 0.55563,0 1.05816,0.009 1.63143,0.43253 0.5468,0.40569 0.85524,1.02264 0.85524,1.69292 0,0.65264 -0.2907,1.16455 -0.8816,1.62316 l 1.09348,2.53989 h -1.97559 l -0.85525,-1.97559 v -1.6583 h 0.20257 c 0.33514,0 0.5116,-0.0968 0.5116,-0.44079 0,-0.35278 -0.18528,-0.41445 -0.5116,-0.41445 h -0.49402 v 4.48913 h -1.87844 z m 8.41654,1.71979 c -0.78493,0 -1.42834,0.64392 -1.42834,1.42885 0,0.79375 0.63459,1.42007 1.42834,1.42007 0.79375,0 1.42007,-0.62632 1.42007,-1.42007 0,-0.78493 -0.63514,-1.42885 -1.42007,-1.42885 z" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
style="display:inline"
|
||||||
|
transform="translate(0.529169,0.52917033)">
|
||||||
|
<path
|
||||||
|
id="path2643"
|
||||||
|
d="M 0.04966897,0.04966897 H 164.95033 V 164.95033 H 0.04966897 Z"
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:1.09934;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
id="path2645"
|
||||||
|
d="M 75,-0.13595834 V 164.82762"
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.786424;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
id="path2647"
|
||||||
|
d="M 0.01821215,90 H 164.98179"
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.786424;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
id="path2649"
|
||||||
|
d="M 25.012141,-0.13595834 V 164.82762"
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.524283;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
id="path2651"
|
||||||
|
d="M 50.006071,-0.13595834 V 164.82762"
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.524283;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
id="path2653"
|
||||||
|
d="M 99.993929,-0.28314159 V 144.6248"
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.49138;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
id="path2655"
|
||||||
|
d="M 124.98786,-0.26523432 V 144.6672"
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.527872;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2655-2"
|
||||||
|
d="M 150.02344,-0.26523432 V 144.6672"
|
||||||
|
style="display:inline;fill:none;stroke:#ffffff;stroke-width:0.527872;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.524282;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 164.98179,40.012141 H 0.01821435"
|
||||||
|
id="path2649-5" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#ffffff;stroke-width:0.524282;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 164.98155,14.979971 H 0.01797199"
|
||||||
|
id="path2649-5-8" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.524282;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 164.98179,65.006071 H 0.01821435"
|
||||||
|
id="path2651-4" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.524282;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 164.98179,114.99393 H 0.01821435"
|
||||||
|
id="path2653-9" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.524282;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 164.98179,139.98786 H 0.01821435"
|
||||||
|
id="path2655-5" />
|
||||||
|
<path
|
||||||
|
id="path2681"
|
||||||
|
d="M 4.9735417,-0.26458333 V 165.26458"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.5, 0.25;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
id="path2683"
|
||||||
|
d="M 9.9972278,165.26483 V -0.23826333"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524189, 0.262094;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
id="path2685"
|
||||||
|
d="M 15.013135,-0.23826333 V 165.26483"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524189, 0.262094;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
id="path2687"
|
||||||
|
d="M 20.029042,165.26483 V -0.23826333"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524189, 0.262094;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524188, 0.262094;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 29.981509,-0.52917033 V 164.97393"
|
||||||
|
id="path2681-2" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524188, 0.262094;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 34.997416,164.97393 V -0.52917033"
|
||||||
|
id="path2683-1" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524188, 0.262094;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 40.013322,-0.52917033 V 164.97393"
|
||||||
|
id="path2685-5" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524188, 0.262094;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 45.029231,164.97393 V -0.52917033"
|
||||||
|
id="path2687-4" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.261312;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.522622, 0.261312;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 54.970379,0.04904167 V 164.52883"
|
||||||
|
id="path2681-9" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.261312;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.522622, 0.261312;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 59.987388,164.52883 V 0.04904167"
|
||||||
|
id="path2683-8" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.261312;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.522622, 0.261312;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 65.004395,0.04904167 V 164.52883"
|
||||||
|
id="path2685-4" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.261312;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.522622, 0.261312;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 70.021405,164.52883 V 0.04904167"
|
||||||
|
id="path2687-7" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.261312;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.522622, 0.261312;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 80.002511,-0.52917033 V 163.95062"
|
||||||
|
id="path2681-3" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.261312;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.522622, 0.261312;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 85.01952,163.95062 V -0.52917033"
|
||||||
|
id="path2683-6" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.261312;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.522622, 0.261312;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 90.036528,-0.52917033 V 163.95062"
|
||||||
|
id="path2685-3" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.261312;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.522622, 0.261312;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 95.053538,163.95062 V -0.52917033"
|
||||||
|
id="path2687-44" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.245348;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.490694, 0.245348;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 104.96427,0.04904167 V 145.04904"
|
||||||
|
id="path2681-36" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.264112;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.528224, 0.264112;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 109.9988,145.04903 109.98118,0.04904167"
|
||||||
|
id="path2683-5"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.263959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.527917, 0.263959;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 114.99919,0.04904227 V 145.04899"
|
||||||
|
id="path2685-7"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.263959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.527917, 0.263959;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 119.99653,145.04899 120.01412,0.04904227"
|
||||||
|
id="path2687-48"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.263598;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.527194, 0.263598;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 129.95634,0.04904227 129.99163,144.64899"
|
||||||
|
id="path2681-0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.263598;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.527194, 0.263598;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 134.98904,144.64899 V 0.04904227"
|
||||||
|
id="path2683-0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.245849;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.491697, 0.245849;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 140.00037,0.04903965 V 145.04904"
|
||||||
|
id="path2685-2"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.245078;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.490154, 0.245078;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 145.0201,144.64901 V 0.04903965"
|
||||||
|
id="path2687-47" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.261383;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.522763, 0.261383;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 155.02037,164.52883 V 0.04882967"
|
||||||
|
id="path2687-47-8" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.261383;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.522763, 0.261383;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 160.01152,164.45083 V -0.02917033"
|
||||||
|
id="path2687-47-8-9" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 164.70884,19.961975 0.05273017,20.006069"
|
||||||
|
id="path2681-39"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 164.12698,9.9619027 -0.5291339,10.005993"
|
||||||
|
id="path2681-39-4"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 164.12698,4.9619027 -0.5291339,5.0059927"
|
||||||
|
id="path2681-39-4-7"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 0.05273017,25.005541 164.70884,24.979083"
|
||||||
|
id="path2683-3"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 164.70884,29.996193 0.05273017,30.005013"
|
||||||
|
id="path2685-51"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 0.05273017,35.004485 164.70884,35.013284"
|
||||||
|
id="path2687-486"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2681-2-1"
|
||||||
|
d="M 164.9998,45.003429 H 0.05273017"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2683-1-9"
|
||||||
|
d="M 0.05273017,50.002901 164.9998,49.985263"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2685-5-4"
|
||||||
|
d="M 164.9998,55.002373 H 0.05273017"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2687-4-9"
|
||||||
|
d="M 0.05273017,60.001845 164.9998,60.019483"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2681-9-6"
|
||||||
|
d="M 164.4179,69.947875 0.05273017,70.00079"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2683-8-0"
|
||||||
|
d="M 0.05273017,75.000262 164.4179,74.964985"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2685-4-7"
|
||||||
|
d="M 164.4179,79.982096 0.05273017,79.999734"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2681-3-7"
|
||||||
|
d="M 164.9998,94.980512 0.05273017,94.99815"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2683-6-0"
|
||||||
|
d="M 0.05273017,99.997622 H 164.9998"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2685-3-3"
|
||||||
|
d="M 164.9998,105.01473 H -0.529169"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
id="path2687-44-3"
|
||||||
|
d="M 0.05273017,109.99657 164.9998,110.03186"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2681-36-5"
|
||||||
|
d="M 164.4179,119.9426 0.05273017,119.99551"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2683-5-1"
|
||||||
|
d="M 0.05273017,124.99498 164.4179,124.95969"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2685-7-5"
|
||||||
|
d="M 164.4179,129.97682 0.05273017,129.99445"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2687-48-9"
|
||||||
|
d="M 0.05273017,134.99393 H 164.4179"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2681-0-8"
|
||||||
|
d="M 165,145 H 0"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262203;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524403, 0.262203;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2683-0-5"
|
||||||
|
d="M 0,150 H 97.464513"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.240862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.481723, 0.240862;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2685-2-7"
|
||||||
|
d="M 150,155 H 0"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.499999, 0.25;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2687-47-6"
|
||||||
|
d="M 0,160 H 165"
|
||||||
|
style="fill:none;stroke:#fdfdfd;stroke-width:0.262666;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.525331, 0.262666;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
id="path2683-5-5"
|
||||||
|
d="M 110,165 V 155"
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.499999, 0.25;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
id="path2683-5-5-7"
|
||||||
|
d="m 104.90153,164.99983 v -10"
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.499999, 0.25;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.499999, 0.25;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 115,165 V 155"
|
||||||
|
id="path2683-5-5-6"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.499999, 0.25;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 120,165 V 155"
|
||||||
|
id="path2683-5-5-0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.499999, 0.25;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 130,165 V 155"
|
||||||
|
id="path2683-5-5-9"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.499999, 0.25;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 135,165 V 155"
|
||||||
|
id="path2683-5-5-2"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.499999, 0.25;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 139.99583,164.79728 v -10"
|
||||||
|
id="path2683-5-5-2-6"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.499999, 0.25;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 144.99583,165.13073 v -10"
|
||||||
|
id="path2683-5-5-2-6-8"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
style="display:inline;fill:none;stroke:#ffffff;stroke-width:0.487698;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 125,155.41867 v 9.51398"
|
||||||
|
id="path2655-0" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
style="display:inline;fill:none;stroke:#ffffff;stroke-width:0.487698;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 150,155 v 9.51398"
|
||||||
|
id="path2655-0-5" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
style="display:inline;fill:none;stroke:#ffffff;stroke-width:0.483417;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 99.99783,155.30367 v 9.34772"
|
||||||
|
id="path2655-0-9" />
|
||||||
|
<g
|
||||||
|
transform="translate(0.04335936,162.09955)"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:1.76389px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
id="text966-0-4"
|
||||||
|
aria-label="125">
|
||||||
|
<path
|
||||||
|
id="path188"
|
||||||
|
d="M 121.63635,2.0732279 V 1.8863313 h 0.2868 V 1.1628608 l -0.24977,0.1378039 -0.0689,-0.1713936 0.35743,-0.18861909 h 0.17656 V 1.8863313 h 0.24718 v 0.1868966 z" />
|
||||||
|
<path
|
||||||
|
id="path190"
|
||||||
|
d="M 122.58805,2.0732279 V 1.9181985 l 0.26614,-0.2661338 q 0.0749,-0.074931 0.11972,-0.1291912 0.0456,-0.05426 0.0698,-0.096463 0.025,-0.043064 0.0327,-0.079237 0.008,-0.036174 0.008,-0.074931 0,-0.031867 -0.0103,-0.060289 -0.0103,-0.029283 -0.0301,-0.049954 -0.0198,-0.021532 -0.05,-0.03359 -0.0301,-0.012919 -0.0689,-0.012919 -0.0663,0 -0.12316,0.029283 -0.0568,0.028422 -0.10766,0.076654 l -0.1111,-0.1429716 q 0.0732,-0.068041 0.1645,-0.10852056 0.0922,-0.0413412 0.19895,-0.0413412 0.0827,0 0.14987,0.0215319 0.0672,0.0206706 0.11455,0.0620118 0.0482,0.041341 0.0741,0.1033529 0.0267,0.062012 0.0267,0.1429716 0,0.067179 -0.0181,0.125746 -0.0181,0.057705 -0.0525,0.112827 -0.0344,0.055122 -0.0853,0.1102431 -0.0499,0.055122 -0.11455,0.1162721 l -0.16364,0.1558906 h 0.47456 v 0.1937868 z" />
|
||||||
|
<path
|
||||||
|
id="path192"
|
||||||
|
d="m 124.31491,1.7132152 q 0,0.090434 -0.0379,0.1610583 -0.0379,0.069763 -0.10507,0.1179946 -0.0672,0.048231 -0.15848,0.073208 -0.0913,0.024977 -0.19809,0.024977 -0.0267,0 -0.0568,-0.00172 -0.0301,-0.00172 -0.0611,-0.00431 -0.031,-0.00258 -0.0603,-0.00689 -0.0293,-0.00345 -0.0543,-0.00775 V 1.8863313 q 0.0491,0.012058 0.11282,0.019809 0.0637,0.00689 0.13006,0.00689 0.12919,0 0.19637,-0.049093 0.068,-0.049954 0.068,-0.1378039 0,-0.091295 -0.0629,-0.1352201 -0.0629,-0.044786 -0.20326,-0.044786 H 123.6035 V 0.94754221 h 0.6494 V 1.1456353 h -0.45303 v 0.229099 h 0.081 q 0.0861,0 0.1645,0.015503 0.0784,0.015503 0.1378,0.05426 0.0603,0.037896 0.0956,0.1033529 0.0362,0.065457 0.0362,0.1653647 z" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="translate(0.04335936,162.09955)"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:1.76389px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
id="text966-0-9"
|
||||||
|
aria-label="100">
|
||||||
|
<path
|
||||||
|
id="path181"
|
||||||
|
d="M 96.636346,2.0732279 V 1.8863313 H 96.92315 V 1.1628608 l -0.249769,0.1378039 -0.0689,-0.1713936 0.357429,-0.18861909 h 0.176561 V 1.8863313 h 0.247186 v 0.1868966 z" />
|
||||||
|
<path
|
||||||
|
id="path183"
|
||||||
|
d="m 98.401097,1.505648 q 0,0.1386652 -0.03014,0.2480471 -0.03015,0.1093818 -0.08871,0.185174 -0.0577,0.074931 -0.141249,0.1145495 -0.08354,0.039619 -0.191203,0.039619 -0.09302,0 -0.171393,-0.032728 -0.07838,-0.032729 -0.13522,-0.1024917 -0.05684,-0.070624 -0.08871,-0.1800063 -0.03187,-0.1093819 -0.03187,-0.2618275 0,-0.1386652 0.03014,-0.248047 0.03101,-0.1093819 0.08871,-0.1843127 0.0577,-0.075792 0.14211,-0.11541081 0.08441,-0.0396186 0.191203,-0.0396186 0.09302,0 0.171394,0.0327284 0.07838,0.0327284 0.134359,0.10249171 0.05684,0.069763 0.08871,0.179145 0.03187,0.1093819 0.03187,0.2626887 z m -0.666626,0.00345 q 0,0.017225 0,0.032728 0,0.014642 0.0017,0.030145 l 0.422047,-0.304896 q -0.03015,-0.085266 -0.0801,-0.125746 -0.04909,-0.041341 -0.116272,-0.041341 -0.04823,0 -0.08957,0.024977 -0.04134,0.024116 -0.07235,0.074931 -0.03014,0.050815 -0.04823,0.1274686 -0.01722,0.076653 -0.01722,0.1817289 z m 0.454753,0.00345 q 0,-0.014642 -8.62e-4,-0.029283 -8.61e-4,-0.015503 -8.61e-4,-0.029283 L 97.76806,1.7571402 q 0.02756,0.083544 0.07751,0.1240235 0.04995,0.04048 0.116272,0.04048 0.04823,0 0.08957,-0.024977 0.0422,-0.024977 0.07235,-0.074931 0.03101,-0.050815 0.04823,-0.1274686 0.01723,-0.077515 0.01723,-0.1817289 z" />
|
||||||
|
<path
|
||||||
|
id="path185"
|
||||||
|
d="m 99.372615,1.505648 q 0,0.1386652 -0.03014,0.2480471 -0.03014,0.1093818 -0.08871,0.185174 -0.05771,0.074931 -0.141249,0.1145495 -0.08354,0.039619 -0.191203,0.039619 -0.09302,0 -0.171394,-0.032728 -0.07838,-0.032729 -0.13522,-0.1024917 -0.05684,-0.070624 -0.08871,-0.1800063 -0.03187,-0.1093819 -0.03187,-0.2618275 0,-0.1386652 0.03014,-0.248047 0.03101,-0.1093819 0.08871,-0.1843127 0.0577,-0.075792 0.14211,-0.11541081 0.0844,-0.0396186 0.191203,-0.0396186 0.09302,0 0.171393,0.0327284 0.07838,0.0327284 0.134359,0.10249171 0.05684,0.069763 0.08871,0.179145 0.03187,0.1093819 0.03187,0.2626887 z m -0.666627,0.00345 q 0,0.017225 0,0.032728 0,0.014642 0.0017,0.030145 l 0.422047,-0.304896 q -0.03014,-0.085266 -0.0801,-0.125746 -0.04909,-0.041341 -0.116272,-0.041341 -0.04823,0 -0.08957,0.024977 -0.04134,0.024116 -0.07235,0.074931 -0.03014,0.050815 -0.04823,0.1274686 -0.01723,0.076653 -0.01723,0.1817289 z m 0.454753,0.00345 q 0,-0.014642 -8.61e-4,-0.029283 -8.61e-4,-0.015503 -8.61e-4,-0.029283 l -0.419441,0.3031686 q 0.02756,0.083544 0.07752,0.1240235 0.04995,0.04048 0.116272,0.04048 0.04823,0 0.08957,-0.024977 0.0422,-0.024977 0.07235,-0.074931 0.03101,-0.050815 0.04823,-0.1274686 0.01722,-0.077515 0.01722,-0.1817289 z" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="translate(0.04335936,162.09955)"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:1.76389px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
id="text966-0-99"
|
||||||
|
aria-label="25">
|
||||||
|
<path
|
||||||
|
id="path166"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
d="M 22.616538,2.0732279 V 1.9181985 l 0.266134,-0.2661338 q 0.07493,-0.074931 0.119717,-0.1291912 0.04565,-0.05426 0.06976,-0.096463 0.02498,-0.043064 0.03273,-0.079237 0.0078,-0.036174 0.0078,-0.074931 0,-0.031867 -0.01034,-0.060289 -0.01034,-0.029283 -0.03014,-0.049954 -0.01981,-0.021532 -0.04995,-0.03359 -0.03015,-0.012919 -0.0689,-0.012919 -0.06632,0 -0.123163,0.029283 -0.05684,0.028422 -0.107659,0.076654 L 22.611371,1.0784559 q 0.07321,-0.068041 0.164503,-0.10852056 0.09216,-0.0413412 0.198955,-0.0413412 0.08268,0 0.149861,0.0215319 0.06718,0.0206706 0.11455,0.0620118 0.04823,0.041341 0.07407,0.1033529 0.0267,0.062012 0.0267,0.1429716 0,0.067179 -0.01809,0.125746 -0.01809,0.057705 -0.05254,0.112827 -0.03445,0.055122 -0.08527,0.1102431 -0.04995,0.055122 -0.114549,0.1162721 l -0.163642,0.1558906 h 0.474562 v 0.1937868 z" />
|
||||||
|
<path
|
||||||
|
id="path168"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
d="m 24.343394,1.7132152 q 0,0.090434 -0.0379,0.1610583 -0.0379,0.069763 -0.105076,0.1179946 -0.06718,0.048231 -0.158474,0.073208 -0.0913,0.024977 -0.198093,0.024977 -0.0267,0 -0.05685,-0.00172 -0.03014,-0.00172 -0.06115,-0.00431 -0.03101,-0.00258 -0.06029,-0.00689 -0.02928,-0.00345 -0.05426,-0.00775 V 1.8863313 q 0.04909,0.012058 0.112827,0.019809 0.06374,0.00689 0.130053,0.00689 0.129191,0 0.19637,-0.049093 0.06804,-0.049954 0.06804,-0.1378039 0,-0.091295 -0.06287,-0.1352201 -0.06287,-0.044786 -0.203261,-0.044786 H 23.631981 V 0.94754221 h 0.649401 V 1.1456353 h -0.45303 v 0.229099 h 0.08096 q 0.08613,0 0.164504,0.015503 0.07838,0.015503 0.137804,0.05426 0.06029,0.037896 0.0956,0.1033529 0.03617,0.065457 0.03617,0.1653647 z" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="translate(0.04335936,162.09955)"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:1.76389px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
id="text966-0-3"
|
||||||
|
aria-label="50">
|
||||||
|
<path
|
||||||
|
id="path171"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
d="m 48.371874,1.7132152 q 0,0.090434 -0.0379,0.1610583 -0.0379,0.069763 -0.105075,0.1179946 -0.06718,0.048231 -0.158475,0.073208 -0.0913,0.024977 -0.198093,0.024977 -0.0267,0 -0.05684,-0.00172 -0.03015,-0.00172 -0.06115,-0.00431 -0.03101,-0.00258 -0.06029,-0.00689 -0.02928,-0.00345 -0.05426,-0.00775 V 1.8863313 q 0.04909,0.012058 0.112827,0.019809 0.06373,0.00689 0.130052,0.00689 0.129191,0 0.196371,-0.049093 0.06804,-0.049954 0.06804,-0.1378039 0,-0.091295 -0.06287,-0.1352201 -0.06287,-0.044786 -0.203261,-0.044786 H 47.660462 V 0.94754221 h 0.6494 V 1.1456353 h -0.45303 v 0.229099 h 0.08096 q 0.08613,0 0.164503,0.015503 0.07838,0.015503 0.137804,0.05426 0.06029,0.037896 0.0956,0.1033529 0.03617,0.065457 0.03617,0.1653647 z" />
|
||||||
|
<path
|
||||||
|
id="path173"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
d="m 49.401097,1.505648 q 0,0.1386652 -0.03014,0.2480471 -0.03014,0.1093818 -0.08871,0.185174 -0.0577,0.074931 -0.141249,0.1145495 -0.08354,0.039619 -0.191203,0.039619 -0.09302,0 -0.171393,-0.032728 -0.07838,-0.032729 -0.13522,-0.1024917 -0.05684,-0.070624 -0.08871,-0.1800063 -0.03187,-0.1093819 -0.03187,-0.2618275 0,-0.1386652 0.03015,-0.248047 0.03101,-0.1093819 0.08871,-0.1843127 0.0577,-0.075792 0.14211,-0.11541081 0.0844,-0.0396186 0.191203,-0.0396186 0.09302,0 0.171394,0.0327284 0.07838,0.0327284 0.134359,0.10249171 0.05684,0.069763 0.08871,0.179145 0.03187,0.1093819 0.03187,0.2626887 z m -0.666626,0.00345 q 0,0.017225 0,0.032728 0,0.014642 0.0017,0.030145 l 0.422047,-0.304896 q -0.03014,-0.085266 -0.0801,-0.125746 -0.04909,-0.041341 -0.116272,-0.041341 -0.04823,0 -0.08957,0.024977 -0.04134,0.024116 -0.07235,0.074931 -0.03015,0.050815 -0.04823,0.1274686 -0.01723,0.076653 -0.01723,0.1817289 z m 0.454753,0.00345 q 0,-0.014642 -8.62e-4,-0.029283 -8.61e-4,-0.015503 -8.61e-4,-0.029283 L 48.76806,1.7571402 q 0.02756,0.083544 0.07751,0.1240235 0.04995,0.04048 0.116272,0.04048 0.04823,0 0.08957,-0.024977 0.0422,-0.024977 0.07235,-0.074931 0.03101,-0.050815 0.04823,-0.1274686 0.01723,-0.077515 0.01723,-0.1817289 z" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="translate(0.04335936,162.09955)"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:1.76389px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
id="text966-0-7"
|
||||||
|
aria-label="75">
|
||||||
|
<path
|
||||||
|
id="path176"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
d="M 72.926595,2.0732279 H 72.688884 L 73.136746,1.150803 H 72.596727 V 0.94754221 h 0.782037 V 1.1309937 Z" />
|
||||||
|
<path
|
||||||
|
id="path178"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
d="m 74.343392,1.7132152 q 0,0.090434 -0.0379,0.1610583 -0.0379,0.069763 -0.105076,0.1179946 -0.06718,0.048231 -0.158474,0.073208 -0.0913,0.024977 -0.198093,0.024977 -0.0267,0 -0.05684,-0.00172 -0.03014,-0.00172 -0.06115,-0.00431 -0.03101,-0.00258 -0.06029,-0.00689 -0.02928,-0.00345 -0.05426,-0.00775 V 1.8863313 q 0.04909,0.012058 0.112826,0.019809 0.06373,0.00689 0.130053,0.00689 0.129191,0 0.19637,-0.049093 0.06804,-0.049954 0.06804,-0.1378039 0,-0.091295 -0.06287,-0.1352201 -0.06287,-0.044786 -0.203261,-0.044786 H 73.631979 V 0.94754221 H 74.28138 V 1.1456353 h -0.45303 v 0.229099 h 0.08096 q 0.08613,0 0.164504,0.015503 0.07838,0.015503 0.137804,0.05426 0.06029,0.037896 0.0956,0.1033529 0.03617,0.065457 0.03617,0.1653647 z" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="translate(0.04335936,162.09955)"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:1.76389px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
id="text966-0-5-1"
|
||||||
|
aria-label="150">
|
||||||
|
<path
|
||||||
|
id="path195"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
d="M 146.47099,2.0732279 V 1.8863313 h 0.2868 V 1.1628608 l -0.24977,0.1378039 -0.0689,-0.1713936 0.35743,-0.18861909 h 0.17656 V 1.8863313 h 0.24719 v 0.1868966 z" />
|
||||||
|
<path
|
||||||
|
id="path197"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
d="m 148.17803,1.7132152 q 0,0.090434 -0.0379,0.1610583 -0.0379,0.069763 -0.10508,0.1179946 -0.0672,0.048231 -0.15847,0.073208 -0.0913,0.024977 -0.1981,0.024977 -0.0267,0 -0.0568,-0.00172 -0.0301,-0.00172 -0.0611,-0.00431 -0.031,-0.00258 -0.0603,-0.00689 -0.0293,-0.00345 -0.0543,-0.00775 V 1.8863313 q 0.0491,0.012058 0.11283,0.019809 0.0637,0.00689 0.13005,0.00689 0.12919,0 0.19637,-0.049093 0.068,-0.049954 0.068,-0.1378039 0,-0.091295 -0.0629,-0.1352201 -0.0629,-0.044786 -0.20326,-0.044786 h -0.22049 V 0.94754221 h 0.6494 V 1.1456353 h -0.45303 v 0.229099 h 0.081 q 0.0861,0 0.1645,0.015503 0.0784,0.015503 0.13781,0.05426 0.0603,0.037896 0.0956,0.1033529 0.0362,0.065457 0.0362,0.1653647 z" />
|
||||||
|
<path
|
||||||
|
id="path199"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
d="m 149.20726,1.505648 q 0,0.1386652 -0.0301,0.2480471 -0.0301,0.1093818 -0.0887,0.185174 -0.0577,0.074931 -0.14125,0.1145495 -0.0835,0.039619 -0.1912,0.039619 -0.093,0 -0.1714,-0.032728 -0.0784,-0.032729 -0.13522,-0.1024917 -0.0568,-0.070624 -0.0887,-0.1800063 -0.0319,-0.1093819 -0.0319,-0.2618275 0,-0.1386652 0.0301,-0.248047 0.031,-0.1093819 0.0887,-0.1843127 0.0577,-0.075792 0.14211,-0.11541081 0.0844,-0.0396186 0.1912,-0.0396186 0.093,0 0.1714,0.0327284 0.0784,0.0327284 0.13436,0.10249171 0.0568,0.069763 0.0887,0.179145 0.0319,0.1093819 0.0319,0.2626879 z m -0.66663,0.00345 q 0,0.017225 0,0.032728 0,0.014642 0.002,0.030145 l 0.42203,-0.3048912 q -0.0301,-0.085266 -0.0801,-0.125746 -0.0491,-0.041341 -0.11627,-0.041341 -0.0482,0 -0.0896,0.024977 -0.0413,0.024116 -0.0723,0.074931 -0.0301,0.050815 -0.0482,0.1274686 -0.0172,0.076653 -0.0172,0.1817289 z m 0.45475,0.00345 q 0,-0.014642 -8.6e-4,-0.029283 -8.6e-4,-0.015503 -8.6e-4,-0.029283 l -0.41944,0.3031686 q 0.0276,0.083544 0.0775,0.1240235 0.05,0.04048 0.11628,0.04048 0.0482,0 0.0896,-0.024977 0.0422,-0.024977 0.0723,-0.074931 0.031,-0.050815 0.0482,-0.1274686 0.0172,-0.077515 0.0172,-0.1817289 z" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.262146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.524292, 0.262146;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 164.9998,84.999206 0.63463045,85.016844"
|
||||||
|
id="path2685-4-7-5" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.263112;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.526224, 0.263112;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 153.34858,150 h 11.07649"
|
||||||
|
id="path2683-0-5-5" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
style="display:inline;fill:none;stroke:#fdfdfd;stroke-width:0.263112;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.526224, 0.263112;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 153.01348,155.00039 h 11.07649"
|
||||||
|
id="path2683-0-5-5-7" />
|
||||||
|
<g
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:1.25;font-family:'Bauhaus 93';-inkscape-font-specification:'Bauhaus 93, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
id="text893"
|
||||||
|
aria-label="ENDER 2">
|
||||||
|
<g
|
||||||
|
id="g220" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
aria-label="125"
|
||||||
|
id="text966-0-4-0"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:1.76389px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
transform="translate(-120.58115,39.81636)">
|
||||||
|
<path
|
||||||
|
d="M 121.63635,2.0732279 V 1.8863313 h 0.2868 V 1.1628608 l -0.24977,0.1378039 -0.0689,-0.1713936 0.35743,-0.18861909 h 0.17656 V 1.8863313 h 0.24718 v 0.1868966 z"
|
||||||
|
id="path188-1" />
|
||||||
|
<path
|
||||||
|
d="M 122.58805,2.0732279 V 1.9181985 l 0.26614,-0.2661338 q 0.0749,-0.074931 0.11972,-0.1291912 0.0456,-0.05426 0.0698,-0.096463 0.025,-0.043064 0.0327,-0.079237 0.008,-0.036174 0.008,-0.074931 0,-0.031867 -0.0103,-0.060289 -0.0103,-0.029283 -0.0301,-0.049954 -0.0198,-0.021532 -0.05,-0.03359 -0.0301,-0.012919 -0.0689,-0.012919 -0.0663,0 -0.12316,0.029283 -0.0568,0.028422 -0.10766,0.076654 l -0.1111,-0.1429716 q 0.0732,-0.068041 0.1645,-0.10852056 0.0922,-0.0413412 0.19895,-0.0413412 0.0827,0 0.14987,0.0215319 0.0672,0.0206706 0.11455,0.0620118 0.0482,0.041341 0.0741,0.1033529 0.0267,0.062012 0.0267,0.1429716 0,0.067179 -0.0181,0.125746 -0.0181,0.057705 -0.0525,0.112827 -0.0344,0.055122 -0.0853,0.1102431 -0.0499,0.055122 -0.11455,0.1162721 l -0.16364,0.1558906 h 0.47456 v 0.1937868 z"
|
||||||
|
id="path190-2" />
|
||||||
|
<path
|
||||||
|
d="m 124.31491,1.7132152 q 0,0.090434 -0.0379,0.1610583 -0.0379,0.069763 -0.10507,0.1179946 -0.0672,0.048231 -0.15848,0.073208 -0.0913,0.024977 -0.19809,0.024977 -0.0267,0 -0.0568,-0.00172 -0.0301,-0.00172 -0.0611,-0.00431 -0.031,-0.00258 -0.0603,-0.00689 -0.0293,-0.00345 -0.0543,-0.00775 V 1.8863313 q 0.0491,0.012058 0.11282,0.019809 0.0637,0.00689 0.13006,0.00689 0.12919,0 0.19637,-0.049093 0.068,-0.049954 0.068,-0.1378039 0,-0.091295 -0.0629,-0.1352201 -0.0629,-0.044786 -0.20326,-0.044786 H 123.6035 V 0.94754221 h 0.6494 V 1.1456353 h -0.45303 v 0.229099 h 0.081 q 0.0861,0 0.1645,0.015503 0.0784,0.015503 0.1378,0.05426 0.0603,0.037896 0.0956,0.1033529 0.0362,0.065457 0.0362,0.1653647 z"
|
||||||
|
id="path192-3" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
aria-label="100"
|
||||||
|
id="text966-0-9-0"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:1.76389px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
transform="translate(-95.765044,64.636453)">
|
||||||
|
<path
|
||||||
|
d="M 96.636346,2.0732279 V 1.8863313 H 96.92315 V 1.1628608 l -0.249769,0.1378039 -0.0689,-0.1713936 0.357429,-0.18861909 h 0.176561 V 1.8863313 h 0.247186 v 0.1868966 z"
|
||||||
|
id="path181-5" />
|
||||||
|
<path
|
||||||
|
d="m 98.401097,1.505648 q 0,0.1386652 -0.03014,0.2480471 -0.03015,0.1093818 -0.08871,0.185174 -0.0577,0.074931 -0.141249,0.1145495 -0.08354,0.039619 -0.191203,0.039619 -0.09302,0 -0.171393,-0.032728 -0.07838,-0.032729 -0.13522,-0.1024917 -0.05684,-0.070624 -0.08871,-0.1800063 -0.03187,-0.1093819 -0.03187,-0.2618275 0,-0.1386652 0.03014,-0.248047 0.03101,-0.1093819 0.08871,-0.1843127 0.0577,-0.075792 0.14211,-0.11541081 0.08441,-0.0396186 0.191203,-0.0396186 0.09302,0 0.171394,0.0327284 0.07838,0.0327284 0.134359,0.10249171 0.05684,0.069763 0.08871,0.179145 0.03187,0.1093819 0.03187,0.2626887 z m -0.666626,0.00345 q 0,0.017225 0,0.032728 0,0.014642 0.0017,0.030145 l 0.422047,-0.304896 q -0.03015,-0.085266 -0.0801,-0.125746 -0.04909,-0.041341 -0.116272,-0.041341 -0.04823,0 -0.08957,0.024977 -0.04134,0.024116 -0.07235,0.074931 -0.03014,0.050815 -0.04823,0.1274686 -0.01722,0.076653 -0.01722,0.1817289 z m 0.454753,0.00345 q 0,-0.014642 -8.62e-4,-0.029283 -8.61e-4,-0.015503 -8.61e-4,-0.029283 L 97.76806,1.7571402 q 0.02756,0.083544 0.07751,0.1240235 0.04995,0.04048 0.116272,0.04048 0.04823,0 0.08957,-0.024977 0.0422,-0.024977 0.07235,-0.074931 0.03101,-0.050815 0.04823,-0.1274686 0.01723,-0.077515 0.01723,-0.1817289 z"
|
||||||
|
id="path183-5" />
|
||||||
|
<path
|
||||||
|
d="m 99.372615,1.505648 q 0,0.1386652 -0.03014,0.2480471 -0.03014,0.1093818 -0.08871,0.185174 -0.05771,0.074931 -0.141249,0.1145495 -0.08354,0.039619 -0.191203,0.039619 -0.09302,0 -0.171394,-0.032728 -0.07838,-0.032729 -0.13522,-0.1024917 -0.05684,-0.070624 -0.08871,-0.1800063 -0.03187,-0.1093819 -0.03187,-0.2618275 0,-0.1386652 0.03014,-0.248047 0.03101,-0.1093819 0.08871,-0.1843127 0.0577,-0.075792 0.14211,-0.11541081 0.0844,-0.0396186 0.191203,-0.0396186 0.09302,0 0.171393,0.0327284 0.07838,0.0327284 0.134359,0.10249171 0.05684,0.069763 0.08871,0.179145 0.03187,0.1093819 0.03187,0.2626887 z m -0.666627,0.00345 q 0,0.017225 0,0.032728 0,0.014642 0.0017,0.030145 l 0.422047,-0.304896 q -0.03014,-0.085266 -0.0801,-0.125746 -0.04909,-0.041341 -0.116272,-0.041341 -0.04823,0 -0.08957,0.024977 -0.04134,0.024116 -0.07235,0.074931 -0.03014,0.050815 -0.04823,0.1274686 -0.01723,0.076653 -0.01723,0.1817289 z m 0.454753,0.00345 q 0,-0.014642 -8.61e-4,-0.029283 -8.61e-4,-0.015503 -8.61e-4,-0.029283 l -0.419441,0.3031686 q 0.02756,0.083544 0.07752,0.1240235 0.04995,0.04048 0.116272,0.04048 0.04823,0 0.08957,-0.024977 0.0422,-0.024977 0.07235,-0.074931 0.03101,-0.050815 0.04823,-0.1274686 0.01722,-0.077515 0.01722,-0.1817289 z"
|
||||||
|
id="path185-2" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
aria-label="25"
|
||||||
|
id="text966-0-99-1"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:1.76389px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
transform="translate(-21.665685,139.65487)">
|
||||||
|
<path
|
||||||
|
d="M 22.616538,2.0732279 V 1.9181985 l 0.266134,-0.2661338 q 0.07493,-0.074931 0.119717,-0.1291912 0.04565,-0.05426 0.06976,-0.096463 0.02498,-0.043064 0.03273,-0.079237 0.0078,-0.036174 0.0078,-0.074931 0,-0.031867 -0.01034,-0.060289 -0.01034,-0.029283 -0.03014,-0.049954 -0.01981,-0.021532 -0.04995,-0.03359 -0.03015,-0.012919 -0.0689,-0.012919 -0.06632,0 -0.123163,0.029283 -0.05684,0.028422 -0.107659,0.076654 L 22.611371,1.0784559 q 0.07321,-0.068041 0.164503,-0.10852056 0.09216,-0.0413412 0.198955,-0.0413412 0.08268,0 0.149861,0.0215319 0.06718,0.0206706 0.11455,0.0620118 0.04823,0.041341 0.07407,0.1033529 0.0267,0.062012 0.0267,0.1429716 0,0.067179 -0.01809,0.125746 -0.01809,0.057705 -0.05254,0.112827 -0.03445,0.055122 -0.08527,0.1102431 -0.04995,0.055122 -0.114549,0.1162721 l -0.163642,0.1558906 h 0.474562 v 0.1937868 z"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
id="path166-8" />
|
||||||
|
<path
|
||||||
|
d="m 24.343394,1.7132152 q 0,0.090434 -0.0379,0.1610583 -0.0379,0.069763 -0.105076,0.1179946 -0.06718,0.048231 -0.158474,0.073208 -0.0913,0.024977 -0.198093,0.024977 -0.0267,0 -0.05685,-0.00172 -0.03014,-0.00172 -0.06115,-0.00431 -0.03101,-0.00258 -0.06029,-0.00689 -0.02928,-0.00345 -0.05426,-0.00775 V 1.8863313 q 0.04909,0.012058 0.112827,0.019809 0.06374,0.00689 0.130053,0.00689 0.129191,0 0.19637,-0.049093 0.06804,-0.049954 0.06804,-0.1378039 0,-0.091295 -0.06287,-0.1352201 -0.06287,-0.044786 -0.203261,-0.044786 H 23.631981 V 0.94754221 h 0.649401 V 1.1456353 h -0.45303 v 0.229099 h 0.08096 q 0.08613,0 0.164504,0.015503 0.07838,0.015503 0.137804,0.05426 0.06029,0.037896 0.0956,0.1033529 0.03617,0.065457 0.03617,0.1653647 z"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
id="path168-6" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
aria-label="50"
|
||||||
|
id="text966-0-3-4"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:1.76389px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
transform="translate(-46.758479,114.60519)">
|
||||||
|
<path
|
||||||
|
d="m 48.371874,1.7132152 q 0,0.090434 -0.0379,0.1610583 -0.0379,0.069763 -0.105075,0.1179946 -0.06718,0.048231 -0.158475,0.073208 -0.0913,0.024977 -0.198093,0.024977 -0.0267,0 -0.05684,-0.00172 -0.03015,-0.00172 -0.06115,-0.00431 -0.03101,-0.00258 -0.06029,-0.00689 -0.02928,-0.00345 -0.05426,-0.00775 V 1.8863313 q 0.04909,0.012058 0.112827,0.019809 0.06373,0.00689 0.130052,0.00689 0.129191,0 0.196371,-0.049093 0.06804,-0.049954 0.06804,-0.1378039 0,-0.091295 -0.06287,-0.1352201 -0.06287,-0.044786 -0.203261,-0.044786 H 47.660462 V 0.94754221 h 0.6494 V 1.1456353 h -0.45303 v 0.229099 h 0.08096 q 0.08613,0 0.164503,0.015503 0.07838,0.015503 0.137804,0.05426 0.06029,0.037896 0.0956,0.1033529 0.03617,0.065457 0.03617,0.1653647 z"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
id="path171-2" />
|
||||||
|
<path
|
||||||
|
d="m 49.401097,1.505648 q 0,0.1386652 -0.03014,0.2480471 -0.03014,0.1093818 -0.08871,0.185174 -0.0577,0.074931 -0.141249,0.1145495 -0.08354,0.039619 -0.191203,0.039619 -0.09302,0 -0.171393,-0.032728 -0.07838,-0.032729 -0.13522,-0.1024917 -0.05684,-0.070624 -0.08871,-0.1800063 -0.03187,-0.1093819 -0.03187,-0.2618275 0,-0.1386652 0.03015,-0.248047 0.03101,-0.1093819 0.08871,-0.1843127 0.0577,-0.075792 0.14211,-0.11541081 0.0844,-0.0396186 0.191203,-0.0396186 0.09302,0 0.171394,0.0327284 0.07838,0.0327284 0.134359,0.10249171 0.05684,0.069763 0.08871,0.179145 0.03187,0.1093819 0.03187,0.2626887 z m -0.666626,0.00345 q 0,0.017225 0,0.032728 0,0.014642 0.0017,0.030145 l 0.422047,-0.304896 q -0.03014,-0.085266 -0.0801,-0.125746 -0.04909,-0.041341 -0.116272,-0.041341 -0.04823,0 -0.08957,0.024977 -0.04134,0.024116 -0.07235,0.074931 -0.03015,0.050815 -0.04823,0.1274686 -0.01723,0.076653 -0.01723,0.1817289 z m 0.454753,0.00345 q 0,-0.014642 -8.62e-4,-0.029283 -8.61e-4,-0.015503 -8.61e-4,-0.029283 L 48.76806,1.7571402 q 0.02756,0.083544 0.07751,0.1240235 0.04995,0.04048 0.116272,0.04048 0.04823,0 0.08957,-0.024977 0.0422,-0.024977 0.07235,-0.074931 0.03101,-0.050815 0.04823,-0.1274686 0.01723,-0.077515 0.01723,-0.1817289 z"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
id="path173-7" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
aria-label="75"
|
||||||
|
id="text966-0-7-6"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:1.76389px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
transform="translate(-71.57512,90.04448)">
|
||||||
|
<path
|
||||||
|
d="M 72.926595,2.0732279 H 72.688884 L 73.136746,1.150803 H 72.596727 V 0.94754221 h 0.782037 V 1.1309937 Z"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
id="path176-3" />
|
||||||
|
<path
|
||||||
|
d="m 74.343392,1.7132152 q 0,0.090434 -0.0379,0.1610583 -0.0379,0.069763 -0.105076,0.1179946 -0.06718,0.048231 -0.158474,0.073208 -0.0913,0.024977 -0.198093,0.024977 -0.0267,0 -0.05684,-0.00172 -0.03014,-0.00172 -0.06115,-0.00431 -0.03101,-0.00258 -0.06029,-0.00689 -0.02928,-0.00345 -0.05426,-0.00775 V 1.8863313 q 0.04909,0.012058 0.112826,0.019809 0.06373,0.00689 0.130053,0.00689 0.129191,0 0.19637,-0.049093 0.06804,-0.049954 0.06804,-0.1378039 0,-0.091295 -0.06287,-0.1352201 -0.06287,-0.044786 -0.203261,-0.044786 H 73.631979 V 0.94754221 H 74.28138 V 1.1456353 h -0.45303 v 0.229099 h 0.08096 q 0.08613,0 0.164504,0.015503 0.07838,0.015503 0.137804,0.05426 0.06029,0.037896 0.0956,0.1033529 0.03617,0.065457 0.03617,0.1653647 z"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
id="path178-3" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
aria-label="150"
|
||||||
|
id="text966-0-5-1-6"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:1.76389px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
transform="translate(-145.49952,14.988432)">
|
||||||
|
<path
|
||||||
|
d="M 146.47099,2.0732279 V 1.8863313 h 0.2868 V 1.1628608 l -0.24977,0.1378039 -0.0689,-0.1713936 0.35743,-0.18861909 h 0.17656 V 1.8863313 h 0.24719 v 0.1868966 z"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
id="path195-7" />
|
||||||
|
<path
|
||||||
|
d="m 148.17803,1.7132152 q 0,0.090434 -0.0379,0.1610583 -0.0379,0.069763 -0.10508,0.1179946 -0.0672,0.048231 -0.15847,0.073208 -0.0913,0.024977 -0.1981,0.024977 -0.0267,0 -0.0568,-0.00172 -0.0301,-0.00172 -0.0611,-0.00431 -0.031,-0.00258 -0.0603,-0.00689 -0.0293,-0.00345 -0.0543,-0.00775 V 1.8863313 q 0.0491,0.012058 0.11283,0.019809 0.0637,0.00689 0.13005,0.00689 0.12919,0 0.19637,-0.049093 0.068,-0.049954 0.068,-0.1378039 0,-0.091295 -0.0629,-0.1352201 -0.0629,-0.044786 -0.20326,-0.044786 h -0.22049 V 0.94754221 h 0.6494 V 1.1456353 h -0.45303 v 0.229099 h 0.081 q 0.0861,0 0.1645,0.015503 0.0784,0.015503 0.13781,0.05426 0.0603,0.037896 0.0956,0.1033529 0.0362,0.065457 0.0362,0.1653647 z"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
id="path197-7" />
|
||||||
|
<path
|
||||||
|
d="m 149.20726,1.505648 q 0,0.1386652 -0.0301,0.2480471 -0.0301,0.1093818 -0.0887,0.185174 -0.0577,0.074931 -0.14125,0.1145495 -0.0835,0.039619 -0.1912,0.039619 -0.093,0 -0.1714,-0.032728 -0.0784,-0.032729 -0.13522,-0.1024917 -0.0568,-0.070624 -0.0887,-0.1800063 -0.0319,-0.1093819 -0.0319,-0.2618275 0,-0.1386652 0.0301,-0.248047 0.031,-0.1093819 0.0887,-0.1843127 0.0577,-0.075792 0.14211,-0.11541081 0.0844,-0.0396186 0.1912,-0.0396186 0.093,0 0.1714,0.0327284 0.0784,0.0327284 0.13436,0.10249171 0.0568,0.069763 0.0887,0.179145 0.0319,0.1093819 0.0319,0.2626879 z m -0.66663,0.00345 q 0,0.017225 0,0.032728 0,0.014642 0.002,0.030145 l 0.42203,-0.3048912 q -0.0301,-0.085266 -0.0801,-0.125746 -0.0491,-0.041341 -0.11627,-0.041341 -0.0482,0 -0.0896,0.024977 -0.0413,0.024116 -0.0723,0.074931 -0.0301,0.050815 -0.0482,0.1274686 -0.0172,0.076653 -0.0172,0.1817289 z m 0.45475,0.00345 q 0,-0.014642 -8.6e-4,-0.029283 -8.6e-4,-0.015503 -8.6e-4,-0.029283 l -0.41944,0.3031686 q 0.0276,0.083544 0.0775,0.1240235 0.05,0.04048 0.11628,0.04048 0.0482,0 0.0896,-0.024977 0.0422,-0.024977 0.0723,-0.074931 0.031,-0.050815 0.0482,-0.1274686 0.0172,-0.077515 0.0172,-0.1817289 z"
|
||||||
|
style="stroke-width:0.264583"
|
||||||
|
id="path199-0" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 58 KiB |
198
resources/profiles/Creality/ender2pro_bed.stl
Normal file
198
resources/profiles/Creality/ender2pro_bed.stl
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
solid OpenSCAD_Model
|
||||||
|
facet normal 0 0 -1
|
||||||
|
outer loop
|
||||||
|
vertex 56.25 -82.5 -3
|
||||||
|
vertex 82.5 82.5 -3
|
||||||
|
vertex 82.5 -82.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 0 -1
|
||||||
|
outer loop
|
||||||
|
vertex -56.25 -82.5 -3
|
||||||
|
vertex 56.25 -82.5 -3
|
||||||
|
vertex 41.25 -97.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 0 -1
|
||||||
|
outer loop
|
||||||
|
vertex -56.25 -82.5 -3
|
||||||
|
vertex 41.25 -97.5 -3
|
||||||
|
vertex -41.25 -97.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 0 -1
|
||||||
|
outer loop
|
||||||
|
vertex 56.25 -82.5 -3
|
||||||
|
vertex -56.25 -82.5 -3
|
||||||
|
vertex 82.5 82.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 0 -1
|
||||||
|
outer loop
|
||||||
|
vertex -82.5 82.5 -3
|
||||||
|
vertex -56.25 -82.5 -3
|
||||||
|
vertex -82.5 -82.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 0 -1
|
||||||
|
outer loop
|
||||||
|
vertex -56.25 -82.5 -3
|
||||||
|
vertex -82.5 82.5 -3
|
||||||
|
vertex 82.5 82.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal -1 0 0
|
||||||
|
outer loop
|
||||||
|
vertex -82.5 -82.5 -3
|
||||||
|
vertex -82.5 82.5 0
|
||||||
|
vertex -82.5 82.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal -1 -0 0
|
||||||
|
outer loop
|
||||||
|
vertex -82.5 82.5 0
|
||||||
|
vertex -82.5 -82.5 -3
|
||||||
|
vertex -82.5 -82.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 0 1
|
||||||
|
outer loop
|
||||||
|
vertex 82.5 82.5 0
|
||||||
|
vertex 56.25 -82.5 0
|
||||||
|
vertex 82.5 -82.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 0 1
|
||||||
|
outer loop
|
||||||
|
vertex -56.25 -82.5 0
|
||||||
|
vertex 56.25 -82.5 0
|
||||||
|
vertex 82.5 82.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 0 1
|
||||||
|
outer loop
|
||||||
|
vertex 56.25 -82.5 0
|
||||||
|
vertex -56.25 -82.5 0
|
||||||
|
vertex 41.25 -97.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 0 1
|
||||||
|
outer loop
|
||||||
|
vertex 41.25 -97.5 0
|
||||||
|
vertex -56.25 -82.5 0
|
||||||
|
vertex -41.25 -97.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal -0 0 1
|
||||||
|
outer loop
|
||||||
|
vertex -82.5 82.5 0
|
||||||
|
vertex -56.25 -82.5 0
|
||||||
|
vertex 82.5 82.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 0 1
|
||||||
|
outer loop
|
||||||
|
vertex -56.25 -82.5 0
|
||||||
|
vertex -82.5 82.5 0
|
||||||
|
vertex -82.5 -82.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 1 -0
|
||||||
|
outer loop
|
||||||
|
vertex 82.5 82.5 -3
|
||||||
|
vertex -82.5 82.5 0
|
||||||
|
vertex 82.5 82.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 1 0
|
||||||
|
outer loop
|
||||||
|
vertex -82.5 82.5 0
|
||||||
|
vertex 82.5 82.5 -3
|
||||||
|
vertex -82.5 82.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 1 -0 0
|
||||||
|
outer loop
|
||||||
|
vertex 82.5 -82.5 0
|
||||||
|
vertex 82.5 82.5 -3
|
||||||
|
vertex 82.5 82.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 1 0 0
|
||||||
|
outer loop
|
||||||
|
vertex 82.5 82.5 -3
|
||||||
|
vertex 82.5 -82.5 0
|
||||||
|
vertex 82.5 -82.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 -1 0
|
||||||
|
outer loop
|
||||||
|
vertex -82.5 -82.5 -3
|
||||||
|
vertex -56.25 -82.5 0
|
||||||
|
vertex -82.5 -82.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 -1 -0
|
||||||
|
outer loop
|
||||||
|
vertex -56.25 -82.5 0
|
||||||
|
vertex -82.5 -82.5 -3
|
||||||
|
vertex -56.25 -82.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 -1 0
|
||||||
|
outer loop
|
||||||
|
vertex 56.25 -82.5 -3
|
||||||
|
vertex 82.5 -82.5 0
|
||||||
|
vertex 56.25 -82.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 -1 -0
|
||||||
|
outer loop
|
||||||
|
vertex 82.5 -82.5 0
|
||||||
|
vertex 56.25 -82.5 -3
|
||||||
|
vertex 82.5 -82.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 -1 0
|
||||||
|
outer loop
|
||||||
|
vertex -41.25 -97.5 -3
|
||||||
|
vertex 41.25 -97.5 0
|
||||||
|
vertex -41.25 -97.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 -1 -0
|
||||||
|
outer loop
|
||||||
|
vertex 41.25 -97.5 0
|
||||||
|
vertex -41.25 -97.5 -3
|
||||||
|
vertex 41.25 -97.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal -0.707107 -0.707107 0
|
||||||
|
outer loop
|
||||||
|
vertex -41.25 -97.5 -3
|
||||||
|
vertex -56.25 -82.5 0
|
||||||
|
vertex -56.25 -82.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal -0.707107 -0.707107 0
|
||||||
|
outer loop
|
||||||
|
vertex -56.25 -82.5 0
|
||||||
|
vertex -41.25 -97.5 -3
|
||||||
|
vertex -41.25 -97.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0.707107 -0.707107 0
|
||||||
|
outer loop
|
||||||
|
vertex 41.25 -97.5 0
|
||||||
|
vertex 56.25 -82.5 -3
|
||||||
|
vertex 56.25 -82.5 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0.707107 -0.707107 0
|
||||||
|
outer loop
|
||||||
|
vertex 56.25 -82.5 -3
|
||||||
|
vertex 41.25 -97.5 0
|
||||||
|
vertex 41.25 -97.5 -3
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
endsolid OpenSCAD_Model
|
@ -1,3 +1,5 @@
|
|||||||
|
min_slic3r_version = 2.4.0-rc
|
||||||
|
1.4.0 Updated for the PrusaSlicer 2.4.0-rc release. Updated SLA material colors.
|
||||||
min_slic3r_version = 2.4.0-beta2
|
min_slic3r_version = 2.4.0-beta2
|
||||||
1.4.0-beta3 Added material profiles for Prusament Resins.
|
1.4.0-beta3 Added material profiles for Prusament Resins.
|
||||||
1.4.0-beta2 Added SLA material colors. Updated BASF filament profiles.
|
1.4.0-beta2 Added SLA material colors. Updated BASF filament profiles.
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
name = Prusa Research
|
name = Prusa Research
|
||||||
# Configuration version of this file. Config file will only be installed, if the config_version differs.
|
# 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.
|
# This means, the server may force the PrusaSlicer configuration to be downgraded.
|
||||||
config_version = 1.4.0-beta3
|
config_version = 1.4.0
|
||||||
# Where to get the updates from?
|
# Where to get the updates from?
|
||||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
|
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
|
||||||
changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
|
changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
|
||||||
@ -4841,7 +4841,7 @@ exposure_time = 4
|
|||||||
initial_exposure_time = 35
|
initial_exposure_time = 35
|
||||||
material_type = Tough
|
material_type = Tough
|
||||||
material_vendor = Prusa Polymers
|
material_vendor = Prusa Polymers
|
||||||
material_colour = #F7D190
|
material_colour = #EEA061
|
||||||
|
|
||||||
[sla_material:Prusament Resin Tough Terra Brown @0.025]
|
[sla_material:Prusament Resin Tough Terra Brown @0.025]
|
||||||
inherits = *common 0.025*
|
inherits = *common 0.025*
|
||||||
@ -5694,7 +5694,7 @@ exposure_time = 6
|
|||||||
initial_exposure_time = 35
|
initial_exposure_time = 35
|
||||||
material_type = Tough
|
material_type = Tough
|
||||||
material_vendor = Prusa Polymers
|
material_vendor = Prusa Polymers
|
||||||
material_colour = #F7D190
|
material_colour = #EEA061
|
||||||
|
|
||||||
[sla_material:Prusament Resin Tough Terra Brown @0.05]
|
[sla_material:Prusament Resin Tough Terra Brown @0.05]
|
||||||
inherits = *common 0.05*
|
inherits = *common 0.05*
|
||||||
@ -6050,7 +6050,7 @@ exposure_time = 13
|
|||||||
initial_exposure_time = 45
|
initial_exposure_time = 45
|
||||||
material_type = Tough
|
material_type = Tough
|
||||||
material_vendor = Prusa Polymers
|
material_vendor = Prusa Polymers
|
||||||
material_colour = #F7D190
|
material_colour = #EEA061
|
||||||
|
|
||||||
[sla_material:Prusament Resin Tough Terra Brown @0.1]
|
[sla_material:Prusament Resin Tough Terra Brown @0.1]
|
||||||
inherits = *common 0.1*
|
inherits = *common 0.1*
|
||||||
@ -6210,7 +6210,7 @@ exposure_time = 2
|
|||||||
initial_exposure_time = 25
|
initial_exposure_time = 25
|
||||||
material_type = Tough
|
material_type = Tough
|
||||||
material_vendor = Prusa Polymers
|
material_vendor = Prusa Polymers
|
||||||
material_colour = #F7D190
|
material_colour = #EEA061
|
||||||
|
|
||||||
[sla_material:Prusament Resin Tough Terra Brown @0.025 SL1S]
|
[sla_material:Prusament Resin Tough Terra Brown @0.025 SL1S]
|
||||||
inherits = *0.025_sl1s*
|
inherits = *0.025_sl1s*
|
||||||
@ -6496,7 +6496,7 @@ exposure_time = 2.4
|
|||||||
initial_exposure_time = 25
|
initial_exposure_time = 25
|
||||||
material_type = Tough
|
material_type = Tough
|
||||||
material_vendor = Prusa Polymers
|
material_vendor = Prusa Polymers
|
||||||
material_colour = #F7D190
|
material_colour = #EEA061
|
||||||
|
|
||||||
[sla_material:Prusament Resin Tough Terra Brown @0.05 SL1S]
|
[sla_material:Prusament Resin Tough Terra Brown @0.05 SL1S]
|
||||||
inherits = *0.05_sl1s*
|
inherits = *0.05_sl1s*
|
||||||
@ -6782,7 +6782,7 @@ exposure_time = 3
|
|||||||
initial_exposure_time = 25
|
initial_exposure_time = 25
|
||||||
material_type = Tough
|
material_type = Tough
|
||||||
material_vendor = Prusa Polymers
|
material_vendor = Prusa Polymers
|
||||||
material_colour = #F7D190
|
material_colour = #EEA061
|
||||||
|
|
||||||
[sla_material:Prusament Resin Tough Terra Brown @0.1 SL1S]
|
[sla_material:Prusament Resin Tough Terra Brown @0.1 SL1S]
|
||||||
inherits = *0.1_sl1s*
|
inherits = *0.1_sl1s*
|
||||||
|
@ -2,18 +2,8 @@
|
|||||||
|
|
||||||
varying vec3 eye_normal;
|
varying vec3 eye_normal;
|
||||||
|
|
||||||
vec3 world_normal()
|
|
||||||
{
|
|
||||||
// the world normal is always parallel to the world XY plane
|
|
||||||
// the x component is stored into gl_Vertex.w
|
|
||||||
float x = gl_Vertex.w;
|
|
||||||
float y = sqrt(1.0 - x * x);
|
|
||||||
return vec3(x, y, 0.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 world_position = vec4(gl_Vertex.xyz, 1.0);
|
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
|
||||||
gl_Position = gl_ModelViewProjectionMatrix * world_position;
|
eye_normal = gl_NormalMatrix * gl_Normal;
|
||||||
eye_normal = gl_NormalMatrix * world_normal();
|
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,22 @@
|
|||||||
#include "SVG.hpp"
|
#include "SVG.hpp"
|
||||||
|
|
||||||
#include <tbb/parallel_for.h>
|
#include <tbb/parallel_for.h>
|
||||||
#include <tbb/pipeline.h>
|
|
||||||
|
// Intel redesigned some TBB interface considerably when merging TBB with their oneAPI set of libraries, see GH #7332.
|
||||||
|
// We are using quite an old TBB 2017 U7. Before we update our build servers, let's use the old API, which is deprecated in up to date TBB.
|
||||||
|
#if ! defined(TBB_VERSION_MAJOR)
|
||||||
|
#include <tbb/version.h>
|
||||||
|
#endif
|
||||||
|
#if ! defined(TBB_VERSION_MAJOR)
|
||||||
|
static_assert(false, "TBB_VERSION_MAJOR not defined");
|
||||||
|
#endif
|
||||||
|
#if TBB_VERSION_MAJOR >= 2021
|
||||||
|
#include <tbb/parallel_pipeline.h>
|
||||||
|
using slic3r_tbb_filtermode = tbb::filter_mode;
|
||||||
|
#else
|
||||||
|
#include <tbb/pipeline.h>
|
||||||
|
using slic3r_tbb_filtermode = tbb::filter;
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <Shiny/Shiny.h>
|
#include <Shiny/Shiny.h>
|
||||||
|
|
||||||
@ -1500,7 +1515,7 @@ void GCode::process_layers(
|
|||||||
{
|
{
|
||||||
// The pipeline is variable: The vase mode filter is optional.
|
// The pipeline is variable: The vase mode filter is optional.
|
||||||
size_t layer_to_print_idx = 0;
|
size_t layer_to_print_idx = 0;
|
||||||
const auto generator = tbb::make_filter<void, GCode::LayerResult>(tbb::filter::serial_in_order,
|
const auto generator = tbb::make_filter<void, GCode::LayerResult>(slic3r_tbb_filtermode::serial_in_order,
|
||||||
[this, &print, &tool_ordering, &print_object_instances_ordering, &layers_to_print, &layer_to_print_idx](tbb::flow_control& fc) -> GCode::LayerResult {
|
[this, &print, &tool_ordering, &print_object_instances_ordering, &layers_to_print, &layer_to_print_idx](tbb::flow_control& fc) -> GCode::LayerResult {
|
||||||
if (layer_to_print_idx == layers_to_print.size()) {
|
if (layer_to_print_idx == layers_to_print.size()) {
|
||||||
fc.stop();
|
fc.stop();
|
||||||
@ -1514,16 +1529,16 @@ void GCode::process_layers(
|
|||||||
return this->process_layer(print, layer.second, layer_tools, &layer == &layers_to_print.back(), &print_object_instances_ordering, size_t(-1));
|
return this->process_layer(print, layer.second, layer_tools, &layer == &layers_to_print.back(), &print_object_instances_ordering, size_t(-1));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const auto spiral_vase = tbb::make_filter<GCode::LayerResult, GCode::LayerResult>(tbb::filter::serial_in_order,
|
const auto spiral_vase = tbb::make_filter<GCode::LayerResult, GCode::LayerResult>(slic3r_tbb_filtermode::serial_in_order,
|
||||||
[&spiral_vase = *this->m_spiral_vase.get()](GCode::LayerResult in) -> GCode::LayerResult {
|
[&spiral_vase = *this->m_spiral_vase.get()](GCode::LayerResult in) -> GCode::LayerResult {
|
||||||
spiral_vase.enable(in.spiral_vase_enable);
|
spiral_vase.enable(in.spiral_vase_enable);
|
||||||
return { spiral_vase.process_layer(std::move(in.gcode)), in.layer_id, in.spiral_vase_enable, in.cooling_buffer_flush };
|
return { spiral_vase.process_layer(std::move(in.gcode)), in.layer_id, in.spiral_vase_enable, in.cooling_buffer_flush };
|
||||||
});
|
});
|
||||||
const auto cooling = tbb::make_filter<GCode::LayerResult, std::string>(tbb::filter::serial_in_order,
|
const auto cooling = tbb::make_filter<GCode::LayerResult, std::string>(slic3r_tbb_filtermode::serial_in_order,
|
||||||
[&cooling_buffer = *this->m_cooling_buffer.get()](GCode::LayerResult in) -> std::string {
|
[&cooling_buffer = *this->m_cooling_buffer.get()](GCode::LayerResult in) -> std::string {
|
||||||
return cooling_buffer.process_layer(std::move(in.gcode), in.layer_id, in.cooling_buffer_flush);
|
return cooling_buffer.process_layer(std::move(in.gcode), in.layer_id, in.cooling_buffer_flush);
|
||||||
});
|
});
|
||||||
const auto output = tbb::make_filter<std::string, void>(tbb::filter::serial_in_order,
|
const auto output = tbb::make_filter<std::string, void>(slic3r_tbb_filtermode::serial_in_order,
|
||||||
[&output_stream](std::string s) { output_stream.write(s); }
|
[&output_stream](std::string s) { output_stream.write(s); }
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -1546,7 +1561,7 @@ void GCode::process_layers(
|
|||||||
{
|
{
|
||||||
// The pipeline is variable: The vase mode filter is optional.
|
// The pipeline is variable: The vase mode filter is optional.
|
||||||
size_t layer_to_print_idx = 0;
|
size_t layer_to_print_idx = 0;
|
||||||
const auto generator = tbb::make_filter<void, GCode::LayerResult>(tbb::filter::serial_in_order,
|
const auto generator = tbb::make_filter<void, GCode::LayerResult>(slic3r_tbb_filtermode::serial_in_order,
|
||||||
[this, &print, &tool_ordering, &layers_to_print, &layer_to_print_idx, single_object_idx](tbb::flow_control& fc) -> GCode::LayerResult {
|
[this, &print, &tool_ordering, &layers_to_print, &layer_to_print_idx, single_object_idx](tbb::flow_control& fc) -> GCode::LayerResult {
|
||||||
if (layer_to_print_idx == layers_to_print.size()) {
|
if (layer_to_print_idx == layers_to_print.size()) {
|
||||||
fc.stop();
|
fc.stop();
|
||||||
@ -1557,16 +1572,16 @@ void GCode::process_layers(
|
|||||||
return this->process_layer(print, { std::move(layer) }, tool_ordering.tools_for_layer(layer.print_z()), &layer == &layers_to_print.back(), nullptr, single_object_idx);
|
return this->process_layer(print, { std::move(layer) }, tool_ordering.tools_for_layer(layer.print_z()), &layer == &layers_to_print.back(), nullptr, single_object_idx);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const auto spiral_vase = tbb::make_filter<GCode::LayerResult, GCode::LayerResult>(tbb::filter::serial_in_order,
|
const auto spiral_vase = tbb::make_filter<GCode::LayerResult, GCode::LayerResult>(slic3r_tbb_filtermode::serial_in_order,
|
||||||
[&spiral_vase = *this->m_spiral_vase.get()](GCode::LayerResult in)->GCode::LayerResult {
|
[&spiral_vase = *this->m_spiral_vase.get()](GCode::LayerResult in)->GCode::LayerResult {
|
||||||
spiral_vase.enable(in.spiral_vase_enable);
|
spiral_vase.enable(in.spiral_vase_enable);
|
||||||
return { spiral_vase.process_layer(std::move(in.gcode)), in.layer_id, in.spiral_vase_enable, in.cooling_buffer_flush };
|
return { spiral_vase.process_layer(std::move(in.gcode)), in.layer_id, in.spiral_vase_enable, in.cooling_buffer_flush };
|
||||||
});
|
});
|
||||||
const auto cooling = tbb::make_filter<GCode::LayerResult, std::string>(tbb::filter::serial_in_order,
|
const auto cooling = tbb::make_filter<GCode::LayerResult, std::string>(slic3r_tbb_filtermode::serial_in_order,
|
||||||
[&cooling_buffer = *this->m_cooling_buffer.get()](GCode::LayerResult in)->std::string {
|
[&cooling_buffer = *this->m_cooling_buffer.get()](GCode::LayerResult in)->std::string {
|
||||||
return cooling_buffer.process_layer(std::move(in.gcode), in.layer_id, in.cooling_buffer_flush);
|
return cooling_buffer.process_layer(std::move(in.gcode), in.layer_id, in.cooling_buffer_flush);
|
||||||
});
|
});
|
||||||
const auto output = tbb::make_filter<std::string, void>(tbb::filter::serial_in_order,
|
const auto output = tbb::make_filter<std::string, void>(slic3r_tbb_filtermode::serial_in_order,
|
||||||
[&output_stream](std::string s) { output_stream.write(s); }
|
[&output_stream](std::string s) { output_stream.write(s); }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -765,8 +765,8 @@ static void precompute_polygon_distances(const Polygon &polygon, std::vector<flo
|
|||||||
{
|
{
|
||||||
polygon_distances_out.assign(polygon.size() + 1, 0.f);
|
polygon_distances_out.assign(polygon.size() + 1, 0.f);
|
||||||
for (size_t point_idx = 1; point_idx < polygon.size(); ++point_idx)
|
for (size_t point_idx = 1; point_idx < polygon.size(); ++point_idx)
|
||||||
polygon_distances_out[point_idx] = polygon_distances_out[point_idx - 1] + (polygon[point_idx].cast<float>() - polygon[point_idx - 1].cast<float>()).norm();
|
polygon_distances_out[point_idx] = polygon_distances_out[point_idx - 1] + float((polygon[point_idx] - polygon[point_idx - 1]).cast<double>().norm());
|
||||||
polygon_distances_out.back() = polygon_distances_out[polygon.size() - 1] + (polygon.points.back().cast<float>() - polygon.points.front().cast<float>()).norm();
|
polygon_distances_out.back() = polygon_distances_out[polygon.size() - 1] + float((polygon.points.back() - polygon.points.front()).cast<double>().norm());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void precompute_expolygon_distances(const ExPolygon &ex_polygon, std::vector<std::vector<float>> &expolygon_distances_out)
|
static void precompute_expolygon_distances(const ExPolygon &ex_polygon, std::vector<std::vector<float>> &expolygon_distances_out)
|
||||||
|
@ -1405,10 +1405,10 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->enum_values.push_back("10");
|
def->enum_values.push_back("10");
|
||||||
def->enum_values.push_back("1000");
|
def->enum_values.push_back("1000");
|
||||||
def->enum_labels.push_back(L("0 (no open anchors)"));
|
def->enum_labels.push_back(L("0 (no open anchors)"));
|
||||||
def->enum_labels.push_back("1 mm");
|
def->enum_labels.push_back(L("1 mm"));
|
||||||
def->enum_labels.push_back("2 mm");
|
def->enum_labels.push_back(L("2 mm"));
|
||||||
def->enum_labels.push_back("5 mm");
|
def->enum_labels.push_back(L("5 mm"));
|
||||||
def->enum_labels.push_back("10 mm");
|
def->enum_labels.push_back(L("10 mm"));
|
||||||
def->enum_labels.push_back(L("1000 (unlimited)"));
|
def->enum_labels.push_back(L("1000 (unlimited)"));
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(600, true));
|
def->set_default_value(new ConfigOptionFloatOrPercent(600, true));
|
||||||
@ -1428,10 +1428,10 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->gui_type = def_infill_anchor_min->gui_type;
|
def->gui_type = def_infill_anchor_min->gui_type;
|
||||||
def->enum_values = def_infill_anchor_min->enum_values;
|
def->enum_values = def_infill_anchor_min->enum_values;
|
||||||
def->enum_labels.push_back(L("0 (not anchored)"));
|
def->enum_labels.push_back(L("0 (not anchored)"));
|
||||||
def->enum_labels.push_back("1 mm");
|
def->enum_labels.push_back(L("1 mm"));
|
||||||
def->enum_labels.push_back("2 mm");
|
def->enum_labels.push_back(L("2 mm"));
|
||||||
def->enum_labels.push_back("5 mm");
|
def->enum_labels.push_back(L("5 mm"));
|
||||||
def->enum_labels.push_back("10 mm");
|
def->enum_labels.push_back(L("10 mm"));
|
||||||
def->enum_labels.push_back(L("1000 (unlimited)"));
|
def->enum_labels.push_back(L("1000 (unlimited)"));
|
||||||
def->mode = def_infill_anchor_min->mode;
|
def->mode = def_infill_anchor_min->mode;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(50, false));
|
def->set_default_value(new ConfigOptionFloatOrPercent(50, false));
|
||||||
@ -2566,9 +2566,10 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->enum_values.push_back("0");
|
def->enum_values.push_back("0");
|
||||||
def->enum_values.push_back("0.1");
|
def->enum_values.push_back("0.1");
|
||||||
def->enum_values.push_back("0.2");
|
def->enum_values.push_back("0.2");
|
||||||
def->enum_labels.push_back(L("same as top"));
|
//TRN To be shown in Print Settings "Bottom contact Z distance". Have to be as short as possible
|
||||||
def->enum_labels.push_back(L("0.1"));
|
def->enum_labels.push_back(L("Same as top"));
|
||||||
def->enum_labels.push_back(L("0.2"));
|
def->enum_labels.push_back("0.1");
|
||||||
|
def->enum_labels.push_back("0.2");
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloat(0));
|
def->set_default_value(new ConfigOptionFloat(0));
|
||||||
|
|
||||||
@ -2650,7 +2651,8 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->min = -1;
|
def->min = -1;
|
||||||
def->enum_values.push_back("-1");
|
def->enum_values.push_back("-1");
|
||||||
append(def->enum_values, support_material_interface_layers->enum_values);
|
append(def->enum_values, support_material_interface_layers->enum_values);
|
||||||
def->enum_labels.push_back(L("same as top"));
|
//TRN To be shown in Print Settings "Bottom interface layers". Have to be as short as possible
|
||||||
|
def->enum_labels.push_back(L("Same as top"));
|
||||||
append(def->enum_labels, support_material_interface_layers->enum_labels);
|
append(def->enum_labels, support_material_interface_layers->enum_labels);
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionInt(-1));
|
def->set_default_value(new ConfigOptionInt(-1));
|
||||||
|
@ -1607,6 +1607,8 @@ PrintRegionConfig region_config_from_model_volume(const PrintRegionConfig &defau
|
|||||||
config.fill_density.value = 0;
|
config.fill_density.value = 0;
|
||||||
else
|
else
|
||||||
config.fill_density.value = std::min(config.fill_density.value, 100.);
|
config.fill_density.value = std::min(config.fill_density.value, 100.);
|
||||||
|
if (config.fuzzy_skin.value != FuzzySkinType::None && (config.fuzzy_skin_point_dist.value < 0.01 || config.fuzzy_skin_thickness.value < 0.001))
|
||||||
|
config.fuzzy_skin.value = FuzzySkinType::None;
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1800,7 +1802,7 @@ void PrintObject::discover_horizontal_shells()
|
|||||||
if (region_config.solid_infill_every_layers.value > 0 && region_config.fill_density.value > 0 &&
|
if (region_config.solid_infill_every_layers.value > 0 && region_config.fill_density.value > 0 &&
|
||||||
(i % region_config.solid_infill_every_layers) == 0) {
|
(i % region_config.solid_infill_every_layers) == 0) {
|
||||||
// Insert a solid internal layer. Mark stInternal surfaces as stInternalSolid or stInternalBridge.
|
// Insert a solid internal layer. Mark stInternal surfaces as stInternalSolid or stInternalBridge.
|
||||||
SurfaceType type = (region_config.fill_density == 100) ? stInternalSolid : stInternalBridge;
|
SurfaceType type = (region_config.fill_density == 100 || region_config.solid_infill_every_layers == 1) ? stInternalSolid : stInternalBridge;
|
||||||
for (Surface &surface : layerm->fill_surfaces.surfaces)
|
for (Surface &surface : layerm->fill_surfaces.surfaces)
|
||||||
if (surface.surface_type == stInternal)
|
if (surface.surface_type == stInternal)
|
||||||
surface.surface_type = type;
|
surface.surface_type = type;
|
||||||
|
@ -1340,7 +1340,10 @@ namespace SupportMaterialInternal {
|
|||||||
// so we take the largest value and also apply safety offset to be ensure no gaps
|
// so we take the largest value and also apply safety offset to be ensure no gaps
|
||||||
// are left in between
|
// are left in between
|
||||||
Flow perimeter_bridge_flow = layerm.bridging_flow(frPerimeter);
|
Flow perimeter_bridge_flow = layerm.bridging_flow(frPerimeter);
|
||||||
float w = float(std::max(perimeter_bridge_flow.scaled_width(), perimeter_bridge_flow.scaled_spacing()));
|
//FIXME one may want to use a maximum of bridging flow width and normal flow width, as the perimeters are calculated using the normal flow
|
||||||
|
// and then turned to bridging flow, thus their centerlines are derived from non-bridging flow and expanding them by a bridging flow
|
||||||
|
// may not expand them to the edge of their respective islands.
|
||||||
|
const float w = float(0.5 * std::max(perimeter_bridge_flow.scaled_width(), perimeter_bridge_flow.scaled_spacing())) + scaled<float>(0.001);
|
||||||
for (Polyline &polyline : overhang_perimeters)
|
for (Polyline &polyline : overhang_perimeters)
|
||||||
if (polyline.is_straight()) {
|
if (polyline.is_straight()) {
|
||||||
// This is a bridge
|
// This is a bridge
|
||||||
@ -1355,7 +1358,7 @@ namespace SupportMaterialInternal {
|
|||||||
supported[j] = true;
|
supported[j] = true;
|
||||||
if (supported[0] && supported[1])
|
if (supported[0] && supported[1])
|
||||||
// Offset a polyline into a thick line.
|
// Offset a polyline into a thick line.
|
||||||
polygons_append(bridges, offset(polyline, 0.5f * w + 10.f));
|
polygons_append(bridges, offset(polyline, w));
|
||||||
}
|
}
|
||||||
bridges = union_(bridges);
|
bridges = union_(bridges);
|
||||||
}
|
}
|
||||||
@ -3044,7 +3047,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::generate_raf
|
|||||||
raft = diff(expand(raft, step), trimming);
|
raft = diff(expand(raft, step), trimming);
|
||||||
} else
|
} else
|
||||||
raft = diff(raft, trimming);
|
raft = diff(raft, trimming);
|
||||||
if (contacts != nullptr)
|
if (! interface_polygons.empty())
|
||||||
columns_base->polygons = diff(columns_base->polygons, interface_polygons);
|
columns_base->polygons = diff(columns_base->polygons, interface_polygons);
|
||||||
}
|
}
|
||||||
if (! brim.empty()) {
|
if (! brim.empty()) {
|
||||||
|
@ -47,6 +47,16 @@
|
|||||||
|
|
||||||
// We are using quite an old TBB 2017 U7, which does not support global control API officially.
|
// We are using quite an old TBB 2017 U7, which does not support global control API officially.
|
||||||
// Before we update our build servers, let's use the old API, which is deprecated in up to date TBB.
|
// Before we update our build servers, let's use the old API, which is deprecated in up to date TBB.
|
||||||
|
#include <tbb/tbb.h>
|
||||||
|
#if ! defined(TBB_VERSION_MAJOR)
|
||||||
|
#include <tbb/version.h>
|
||||||
|
#endif
|
||||||
|
#if ! defined(TBB_VERSION_MAJOR)
|
||||||
|
static_assert(false, "TBB_VERSION_MAJOR not defined");
|
||||||
|
#endif
|
||||||
|
#if TBB_VERSION_MAJOR >= 2021
|
||||||
|
#define TBB_HAS_GLOBAL_CONTROL
|
||||||
|
#endif
|
||||||
#ifdef TBB_HAS_GLOBAL_CONTROL
|
#ifdef TBB_HAS_GLOBAL_CONTROL
|
||||||
#include <tbb/global_control.h>
|
#include <tbb/global_control.h>
|
||||||
#else
|
#else
|
||||||
|
@ -109,7 +109,7 @@ wxString BedShape::get_full_name_with_params()
|
|||||||
default:
|
default:
|
||||||
// rectangle, convex, concave...
|
// rectangle, convex, concave...
|
||||||
out += "\n" + _(get_option_label(Parameter::RectSize)) + ": [" + ConfigOptionPoint(to_2d(m_build_volume.bounding_volume().size())).serialize() + "]";
|
out += "\n" + _(get_option_label(Parameter::RectSize)) + ": [" + ConfigOptionPoint(to_2d(m_build_volume.bounding_volume().size())).serialize() + "]";
|
||||||
out += "\n" + _(get_option_label(Parameter::RectOrigin)) + ": [" + ConfigOptionPoint(to_2d(m_build_volume.bounding_volume().min)).serialize() + "]";
|
out += "\n" + _(get_option_label(Parameter::RectOrigin)) + ": [" + ConfigOptionPoint(- to_2d(m_build_volume.bounding_volume().min)).serialize() + "]";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
@ -124,7 +124,7 @@ void BedShape::apply_optgroup_values(ConfigOptionsGroupShp optgroup)
|
|||||||
default:
|
default:
|
||||||
// rectangle, convex, concave...
|
// rectangle, convex, concave...
|
||||||
optgroup->set_value("rect_size" , new ConfigOptionPoints{ to_2d(m_build_volume.bounding_volume().size()) });
|
optgroup->set_value("rect_size" , new ConfigOptionPoints{ to_2d(m_build_volume.bounding_volume().size()) });
|
||||||
optgroup->set_value("rect_origin" , new ConfigOptionPoints{ to_2d(m_build_volume.bounding_volume().min) });
|
optgroup->set_value("rect_origin" , new ConfigOptionPoints{ - to_2d(m_build_volume.bounding_volume().min) });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,8 +254,8 @@ void BitmapComboBox::DrawBackground_(wxDC& dc, const wxRect& rect, int WXUNUSED(
|
|||||||
dc.SetTextForeground(flags & ODCB_PAINTING_DISABLED ? wxColour(108,108,108) : wxGetApp().get_label_clr_default());
|
dc.SetTextForeground(flags & ODCB_PAINTING_DISABLED ? wxColour(108,108,108) : wxGetApp().get_label_clr_default());
|
||||||
|
|
||||||
wxColour selCol = flags & ODCB_PAINTING_DISABLED ?
|
wxColour selCol = flags & ODCB_PAINTING_DISABLED ?
|
||||||
#ifdef _MSW_DAEK_MODE
|
#ifdef _MSW_DARK_MODE
|
||||||
wxRGBToColour(NppDarkMode::InvertLightnessSofter(NppDarkMode::GetBackgroundColor())) :
|
wxRGBToColour(NppDarkMode::GetSofterBackgroundColor()) :
|
||||||
#else
|
#else
|
||||||
wxGetApp().get_highlight_default_clr() :
|
wxGetApp().get_highlight_default_clr() :
|
||||||
#endif
|
#endif
|
||||||
|
@ -155,7 +155,8 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
|
|||||||
apply(config, &new_conf);
|
apply(config, &new_conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config->opt_bool("support_material")) {
|
// Check "support_material" and "overhangs" relations only on global settings level
|
||||||
|
if (is_global_config && config->opt_bool("support_material")) {
|
||||||
// Ask only once.
|
// Ask only once.
|
||||||
if (!m_support_material_overhangs_queried) {
|
if (!m_support_material_overhangs_queried) {
|
||||||
m_support_material_overhangs_queried = true;
|
m_support_material_overhangs_queried = true;
|
||||||
@ -164,10 +165,10 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
|
|||||||
"- Detect bridging perimeters"));
|
"- Detect bridging perimeters"));
|
||||||
if (is_global_config)
|
if (is_global_config)
|
||||||
msg_text += "\n\n" + _(L("Shall I adjust those settings for supports?"));
|
msg_text += "\n\n" + _(L("Shall I adjust those settings for supports?"));
|
||||||
MessageDialog dialog(m_msg_dlg_parent, msg_text, _L("Support Generator"), wxICON_WARNING | (is_global_config ? wxYES | wxNO : wxOK));
|
MessageDialog dialog(m_msg_dlg_parent, msg_text, _L("Support Generator"), wxICON_WARNING | wxYES | wxNO);
|
||||||
DynamicPrintConfig new_conf = *config;
|
DynamicPrintConfig new_conf = *config;
|
||||||
auto answer = dialog.ShowModal();
|
auto answer = dialog.ShowModal();
|
||||||
if (!is_global_config || answer == wxID_YES) {
|
if (answer == wxID_YES) {
|
||||||
// Enable "detect bridging perimeters".
|
// Enable "detect bridging perimeters".
|
||||||
new_conf.set_key_value("overhangs", new ConfigOptionBool(true));
|
new_conf.set_key_value("overhangs", new ConfigOptionBool(true));
|
||||||
}
|
}
|
||||||
|
@ -581,14 +581,14 @@ void GCodeViewer::init()
|
|||||||
case EMoveType::Retract:
|
case EMoveType::Retract:
|
||||||
case EMoveType::Unretract:
|
case EMoveType::Unretract:
|
||||||
case EMoveType::Seam: {
|
case EMoveType::Seam: {
|
||||||
if (wxGetApp().is_gl_version_greater_or_equal_to(3, 3)) {
|
// if (wxGetApp().is_gl_version_greater_or_equal_to(3, 3)) {
|
||||||
buffer.render_primitive_type = TBuffer::ERenderPrimitiveType::InstancedModel;
|
// buffer.render_primitive_type = TBuffer::ERenderPrimitiveType::InstancedModel;
|
||||||
buffer.shader = "gouraud_light_instanced";
|
// buffer.shader = "gouraud_light_instanced";
|
||||||
buffer.model.model.init_from(diamond(16));
|
// buffer.model.model.init_from(diamond(16));
|
||||||
buffer.model.color = option_color(type);
|
// buffer.model.color = option_color(type);
|
||||||
buffer.model.instances.format = InstanceVBuffer::EFormat::InstancedModel;
|
// buffer.model.instances.format = InstanceVBuffer::EFormat::InstancedModel;
|
||||||
}
|
// }
|
||||||
else {
|
// else {
|
||||||
buffer.render_primitive_type = TBuffer::ERenderPrimitiveType::BatchedModel;
|
buffer.render_primitive_type = TBuffer::ERenderPrimitiveType::BatchedModel;
|
||||||
buffer.vertices.format = VBuffer::EFormat::PositionNormal3;
|
buffer.vertices.format = VBuffer::EFormat::PositionNormal3;
|
||||||
buffer.shader = "gouraud_light";
|
buffer.shader = "gouraud_light";
|
||||||
@ -596,7 +596,7 @@ void GCodeViewer::init()
|
|||||||
buffer.model.data = diamond(16);
|
buffer.model.data = diamond(16);
|
||||||
buffer.model.color = option_color(type);
|
buffer.model.color = option_color(type);
|
||||||
buffer.model.instances.format = InstanceVBuffer::EFormat::BatchedModel;
|
buffer.model.instances.format = InstanceVBuffer::EFormat::BatchedModel;
|
||||||
}
|
// }
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EMoveType::Wipe:
|
case EMoveType::Wipe:
|
||||||
@ -608,7 +608,7 @@ void GCodeViewer::init()
|
|||||||
}
|
}
|
||||||
case EMoveType::Travel: {
|
case EMoveType::Travel: {
|
||||||
buffer.render_primitive_type = TBuffer::ERenderPrimitiveType::Line;
|
buffer.render_primitive_type = TBuffer::ERenderPrimitiveType::Line;
|
||||||
buffer.vertices.format = VBuffer::EFormat::PositionNormal1;
|
buffer.vertices.format = VBuffer::EFormat::PositionNormal3;
|
||||||
buffer.shader = "toolpaths_lines";
|
buffer.shader = "toolpaths_lines";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1140,15 +1140,19 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result)
|
|||||||
// format data into the buffers to be rendered as lines
|
// format data into the buffers to be rendered as lines
|
||||||
auto add_vertices_as_line = [](const GCodeProcessorResult::MoveVertex& prev, const GCodeProcessorResult::MoveVertex& curr, VertexBuffer& vertices) {
|
auto add_vertices_as_line = [](const GCodeProcessorResult::MoveVertex& prev, const GCodeProcessorResult::MoveVertex& curr, VertexBuffer& vertices) {
|
||||||
// x component of the normal to the current segment (the normal is parallel to the XY plane)
|
// x component of the normal to the current segment (the normal is parallel to the XY plane)
|
||||||
const float normal_x = (curr.position - prev.position).normalized().y();
|
const Vec3f dir = (curr.position - prev.position).normalized();
|
||||||
|
Vec3f normal(dir.y(), -dir.x(), 0.0);
|
||||||
|
normal.normalize();
|
||||||
|
|
||||||
auto add_vertex = [&vertices, normal_x](const GCodeProcessorResult::MoveVertex& vertex) {
|
auto add_vertex = [&vertices, &normal](const GCodeProcessorResult::MoveVertex& vertex) {
|
||||||
// add position
|
// add position
|
||||||
vertices.push_back(vertex.position.x());
|
vertices.push_back(vertex.position.x());
|
||||||
vertices.push_back(vertex.position.y());
|
vertices.push_back(vertex.position.y());
|
||||||
vertices.push_back(vertex.position.z());
|
vertices.push_back(vertex.position.z());
|
||||||
// add normal x component
|
// add normal
|
||||||
vertices.push_back(normal_x);
|
vertices.push_back(normal.x());
|
||||||
|
vertices.push_back(normal.y());
|
||||||
|
vertices.push_back(normal.z());
|
||||||
};
|
};
|
||||||
|
|
||||||
// add previous vertex
|
// add previous vertex
|
||||||
@ -2654,6 +2658,9 @@ void GCodeViewer::render_toolpaths()
|
|||||||
|
|
||||||
for (auto it = it_path; it != it_end && it_path->ibuffer_id == it->ibuffer_id; ++it) {
|
for (auto it = it_path; it != it_end && it_path->ibuffer_id == it->ibuffer_id; ++it) {
|
||||||
const RenderPath& path = *it;
|
const RenderPath& path = *it;
|
||||||
|
// Some OpenGL drivers crash on empty glMultiDrawElements, see GH #7415.
|
||||||
|
assert(! path.sizes.empty());
|
||||||
|
assert(! path.offsets.empty());
|
||||||
glsafe(::glUniform4fv(uniform_color, 1, static_cast<const GLfloat*>(path.color.data())));
|
glsafe(::glUniform4fv(uniform_color, 1, static_cast<const GLfloat*>(path.color.data())));
|
||||||
glsafe(::glMultiDrawElements(GL_POINTS, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_SHORT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size()));
|
glsafe(::glMultiDrawElements(GL_POINTS, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_SHORT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size()));
|
||||||
#if ENABLE_GCODE_VIEWER_STATISTICS
|
#if ENABLE_GCODE_VIEWER_STATISTICS
|
||||||
@ -2675,6 +2682,9 @@ void GCodeViewer::render_toolpaths()
|
|||||||
](std::vector<RenderPath>::iterator it_path, std::vector<RenderPath>::iterator it_end, GLShaderProgram& shader, int uniform_color) {
|
](std::vector<RenderPath>::iterator it_path, std::vector<RenderPath>::iterator it_end, GLShaderProgram& shader, int uniform_color) {
|
||||||
for (auto it = it_path; it != it_end && it_path->ibuffer_id == it->ibuffer_id; ++it) {
|
for (auto it = it_path; it != it_end && it_path->ibuffer_id == it->ibuffer_id; ++it) {
|
||||||
const RenderPath& path = *it;
|
const RenderPath& path = *it;
|
||||||
|
// Some OpenGL drivers crash on empty glMultiDrawElements, see GH #7415.
|
||||||
|
assert(! path.sizes.empty());
|
||||||
|
assert(! path.offsets.empty());
|
||||||
glsafe(::glUniform4fv(uniform_color, 1, static_cast<const GLfloat*>(path.color.data())));
|
glsafe(::glUniform4fv(uniform_color, 1, static_cast<const GLfloat*>(path.color.data())));
|
||||||
glsafe(::glMultiDrawElements(GL_LINES, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_SHORT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size()));
|
glsafe(::glMultiDrawElements(GL_LINES, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_SHORT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size()));
|
||||||
#if ENABLE_GCODE_VIEWER_STATISTICS
|
#if ENABLE_GCODE_VIEWER_STATISTICS
|
||||||
@ -2690,6 +2700,9 @@ void GCodeViewer::render_toolpaths()
|
|||||||
](std::vector<RenderPath>::iterator it_path, std::vector<RenderPath>::iterator it_end, GLShaderProgram& shader, int uniform_color) {
|
](std::vector<RenderPath>::iterator it_path, std::vector<RenderPath>::iterator it_end, GLShaderProgram& shader, int uniform_color) {
|
||||||
for (auto it = it_path; it != it_end && it_path->ibuffer_id == it->ibuffer_id; ++it) {
|
for (auto it = it_path; it != it_end && it_path->ibuffer_id == it->ibuffer_id; ++it) {
|
||||||
const RenderPath& path = *it;
|
const RenderPath& path = *it;
|
||||||
|
// Some OpenGL drivers crash on empty glMultiDrawElements, see GH #7415.
|
||||||
|
assert(! path.sizes.empty());
|
||||||
|
assert(! path.offsets.empty());
|
||||||
glsafe(::glUniform4fv(uniform_color, 1, static_cast<const GLfloat*>(path.color.data())));
|
glsafe(::glUniform4fv(uniform_color, 1, static_cast<const GLfloat*>(path.color.data())));
|
||||||
glsafe(::glMultiDrawElements(GL_TRIANGLES, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_SHORT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size()));
|
glsafe(::glMultiDrawElements(GL_TRIANGLES, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_SHORT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size()));
|
||||||
#if ENABLE_GCODE_VIEWER_STATISTICS
|
#if ENABLE_GCODE_VIEWER_STATISTICS
|
||||||
|
@ -352,7 +352,7 @@ void show_substitutions_info(const PresetsConfigSubstitutions& presets_config_su
|
|||||||
add_config_substitutions(substitution.substitutions, changes);
|
add_config_substitutions(substitution.substitutions, changes);
|
||||||
}
|
}
|
||||||
|
|
||||||
InfoDialog msg(nullptr, _L("Configuration bundle was loaded, however some configuration values were not recognized."), substitution_message(changes));
|
InfoDialog msg(nullptr, _L("Configuration bundle was loaded, however some configuration values were not recognized."), substitution_message(changes), true);
|
||||||
msg.ShowModal();
|
msg.ShowModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -363,7 +363,7 @@ void show_substitutions_info(const ConfigSubstitutions& config_substitutions, co
|
|||||||
|
|
||||||
InfoDialog msg(nullptr,
|
InfoDialog msg(nullptr,
|
||||||
format_wxstr(_L("Configuration file \"%1%\" was loaded, however some configuration values were not recognized."), from_u8(filename)),
|
format_wxstr(_L("Configuration file \"%1%\" was loaded, however some configuration values were not recognized."), from_u8(filename)),
|
||||||
substitution_message(changes));
|
substitution_message(changes), true);
|
||||||
msg.ShowModal();
|
msg.ShowModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -948,24 +948,31 @@ bool GUI_App::check_older_app_config(Semver current_version, bool backup)
|
|||||||
return false;
|
return false;
|
||||||
BOOST_LOG_TRIVIAL(info) << "last app config file used: " << m_older_data_dir_path;
|
BOOST_LOG_TRIVIAL(info) << "last app config file used: " << m_older_data_dir_path;
|
||||||
// ask about using older data folder
|
// ask about using older data folder
|
||||||
RichMessageDialog msg(nullptr, backup ?
|
|
||||||
wxString::Format(_L(
|
InfoDialog msg(nullptr
|
||||||
"Current configuration folder: %s"
|
, format_wxstr(_L("You are opening %1% version %2%."), SLIC3R_APP_NAME, SLIC3R_VERSION)
|
||||||
"\n\n%s found another configuration for version %s."
|
, backup ?
|
||||||
"\nIt is found at %s."
|
format_wxstr(_L(
|
||||||
"\n\nDo you wish to copy and use the configuration file for version %s (overwriting any file with the same name)? A backup of your current configuration will be created."
|
"The active configuration was created by <b>%1% %2%</b>,"
|
||||||
"\nIf you select no, you will continue with the configuration file for version %s (may not be fully compatible).")
|
"\nwhile a newer configuration was found in <b>%3%</b>"
|
||||||
, current_version.to_string(), SLIC3R_APP_NAME, last_semver.to_string(), m_older_data_dir_path, last_semver.to_string(), current_version.to_string())
|
"\ncreated by <b>%1% %4%</b>."
|
||||||
: wxString::Format(_L(
|
"\n\nShall the newer configuration be imported?"
|
||||||
"%s found another configuration for version %s."
|
"\nIf so, your active configuration will be backed up before importing the new configuration."
|
||||||
"\nIt is found at %s."
|
)
|
||||||
"\nThere is no configuration file in current configuration folder."
|
, SLIC3R_APP_NAME, current_version.to_string(), m_older_data_dir_path, last_semver.to_string())
|
||||||
"\n\nDo you wish to copy and use the configuration file for version %s?"
|
: format_wxstr(_L(
|
||||||
"\nIf you select no, you will start with clean installation with configuration wizard.")
|
"An existing configuration was found in <b>%3%</b>"
|
||||||
, SLIC3R_APP_NAME, last_semver.to_string(), m_older_data_dir_path, last_semver.to_string())
|
"\ncreated by <b>%1% %2%</b>."
|
||||||
, _L("PrusaSlicer")
|
"\n\nShall this configuration be imported?"
|
||||||
, wxYES_NO
|
)
|
||||||
, wxString::Format(_L("Load configuration from version %s?"), last_semver.to_string()));
|
, SLIC3R_APP_NAME, last_semver.to_string(), m_older_data_dir_path)
|
||||||
|
, true, wxYES_NO);
|
||||||
|
|
||||||
|
if (backup) {
|
||||||
|
msg.SetButtonLabel(wxID_YES, _L("Import"));
|
||||||
|
msg.SetButtonLabel(wxID_NO, _L("Don't import"));
|
||||||
|
}
|
||||||
|
|
||||||
if (msg.ShowModal() == wxID_YES) {
|
if (msg.ShowModal() == wxID_YES) {
|
||||||
std::string snapshot_id;
|
std::string snapshot_id;
|
||||||
if (backup) {
|
if (backup) {
|
||||||
@ -1033,6 +1040,9 @@ bool GUI_App::OnInit()
|
|||||||
|
|
||||||
bool GUI_App::on_init_inner()
|
bool GUI_App::on_init_inner()
|
||||||
{
|
{
|
||||||
|
// Set initialization of image handlers before any UI actions - See GH issue #7469
|
||||||
|
wxInitAllImageHandlers();
|
||||||
|
|
||||||
#if defined(_WIN32) && ! defined(_WIN64)
|
#if defined(_WIN32) && ! defined(_WIN64)
|
||||||
// Win32 32bit build.
|
// Win32 32bit build.
|
||||||
if (wxPlatformInfo::Get().GetArchName().substr(0, 2) == "64") {
|
if (wxPlatformInfo::Get().GetArchName().substr(0, 2) == "64") {
|
||||||
@ -1096,6 +1106,14 @@ bool GUI_App::on_init_inner()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set language and color mode before check_older_app_config() call
|
||||||
|
|
||||||
|
// If load_language() fails, the application closes.
|
||||||
|
load_language(wxString(), true);
|
||||||
|
#ifdef _MSW_DARK_MODE
|
||||||
|
NppDarkMode::InitDarkMode(app_config->get("dark_color_mode") == "1", app_config->get("sys_menu_enabled") == "1");
|
||||||
|
#endif
|
||||||
|
|
||||||
if (m_last_config_version) {
|
if (m_last_config_version) {
|
||||||
if (*m_last_config_version < *Semver::parse(SLIC3R_VERSION))
|
if (*m_last_config_version < *Semver::parse(SLIC3R_VERSION))
|
||||||
check_older_app_config(*m_last_config_version, true);
|
check_older_app_config(*m_last_config_version, true);
|
||||||
@ -1106,14 +1124,6 @@ bool GUI_App::on_init_inner()
|
|||||||
app_config->set("version", SLIC3R_VERSION);
|
app_config->set("version", SLIC3R_VERSION);
|
||||||
app_config->save();
|
app_config->save();
|
||||||
|
|
||||||
// If load_language() fails, the application closes.
|
|
||||||
load_language(wxString(), true);
|
|
||||||
|
|
||||||
wxInitAllImageHandlers();
|
|
||||||
|
|
||||||
#ifdef _MSW_DARK_MODE
|
|
||||||
NppDarkMode::InitDarkMode(app_config->get("dark_color_mode") == "1", app_config->get("sys_menu_enabled") == "1");
|
|
||||||
#endif
|
|
||||||
SplashScreen* scrn = nullptr;
|
SplashScreen* scrn = nullptr;
|
||||||
if (app_config->get("show_splash_screen") == "1") {
|
if (app_config->get("show_splash_screen") == "1") {
|
||||||
// make a bitmap with dark grey banner on the left side
|
// make a bitmap with dark grey banner on the left side
|
||||||
@ -1137,8 +1147,6 @@ bool GUI_App::on_init_inner()
|
|||||||
scrn->SetText(_L("Loading configuration")+ dots);
|
scrn->SetText(_L("Loading configuration")+ dots);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
preset_bundle = new PresetBundle();
|
preset_bundle = new PresetBundle();
|
||||||
|
|
||||||
// just checking for existence of Slic3r::data_dir is not enough : it may be an empty directory
|
// just checking for existence of Slic3r::data_dir is not enough : it may be an empty directory
|
||||||
@ -2160,9 +2168,9 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
|
|||||||
local_menu->Append(config_id_base + ConfigMenuLanguage, _L("&Language"));
|
local_menu->Append(config_id_base + ConfigMenuLanguage, _L("&Language"));
|
||||||
if (is_editor()) {
|
if (is_editor()) {
|
||||||
local_menu->AppendSeparator();
|
local_menu->AppendSeparator();
|
||||||
local_menu->Append(config_id_base + ConfigMenuFlashFirmware, _L("Flash printer &firmware"), _L("Upload a firmware image into an Arduino based printer"));
|
local_menu->Append(config_id_base + ConfigMenuFlashFirmware, _L("Flash Printer &Firmware"), _L("Upload a firmware image into an Arduino based printer"));
|
||||||
// TODO: for when we're able to flash dictionaries
|
// TODO: for when we're able to flash dictionaries
|
||||||
// local_menu->Append(config_id_base + FirmwareMenuDict, _L("Flash language file"), _L("Upload a language dictionary file into a Prusa printer"));
|
// local_menu->Append(config_id_base + FirmwareMenuDict, _L("Flash Language File"), _L("Upload a language dictionary file into a Prusa printer"));
|
||||||
}
|
}
|
||||||
|
|
||||||
local_menu->Bind(wxEVT_MENU, [this, config_id_base](wxEvent &event) {
|
local_menu->Bind(wxEVT_MENU, [this, config_id_base](wxEvent &event) {
|
||||||
|
@ -349,7 +349,8 @@ void ObjectList::get_selection_indexes(std::vector<int>& obj_idxs, std::vector<i
|
|||||||
{
|
{
|
||||||
wxDataViewItemArray sels;
|
wxDataViewItemArray sels;
|
||||||
GetSelections(sels);
|
GetSelections(sels);
|
||||||
assert(!sels.IsEmpty());
|
if (sels.IsEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
if ( m_objects_model->GetItemType(sels[0]) & itVolume ||
|
if ( m_objects_model->GetItemType(sels[0]) & itVolume ||
|
||||||
(sels.Count()==1 && m_objects_model->GetItemType(m_objects_model->GetParent(sels[0])) & itVolume) ) {
|
(sels.Count()==1 && m_objects_model->GetItemType(m_objects_model->GetParent(sels[0])) & itVolume) ) {
|
||||||
@ -424,7 +425,7 @@ MeshErrorsInfo ObjectList::get_mesh_errors_info(const int obj_idx, const int vol
|
|||||||
if (!stats.manifold()) {
|
if (!stats.manifold()) {
|
||||||
remaining_info = format_wxstr(_L_PLURAL("%1$d open edge", "%1$d open edges", stats.open_edges), stats.open_edges);
|
remaining_info = format_wxstr(_L_PLURAL("%1$d open edge", "%1$d open edges", stats.open_edges), stats.open_edges);
|
||||||
|
|
||||||
tooltip += _L("Remaning errors") + ":\n";
|
tooltip += _L("Remaining errors") + ":\n";
|
||||||
tooltip += "\t" + format_wxstr(_L_PLURAL("%1$d open edge", "%1$d open edges", stats.open_edges), stats.open_edges) + "\n";
|
tooltip += "\t" + format_wxstr(_L_PLURAL("%1$d open edge", "%1$d open edges", stats.open_edges), stats.open_edges) + "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1556,7 +1557,7 @@ void ObjectList::load_modifier(ModelObject& model_object, std::vector<ModelVolum
|
|||||||
for (auto object : model.objects) {
|
for (auto object : model.objects) {
|
||||||
if (model_object.origin_translation != Vec3d::Zero()) {
|
if (model_object.origin_translation != Vec3d::Zero()) {
|
||||||
object->center_around_origin();
|
object->center_around_origin();
|
||||||
Vec3d delta = model_object.origin_translation - object->origin_translation;
|
const Vec3d delta = model_object.origin_translation - object->origin_translation;
|
||||||
for (auto volume : object->volumes) {
|
for (auto volume : object->volumes) {
|
||||||
volume->translate(delta);
|
volume->translate(delta);
|
||||||
}
|
}
|
||||||
@ -1570,6 +1571,12 @@ void ObjectList::load_modifier(ModelObject& model_object, std::vector<ModelVolum
|
|||||||
new_volume->name = boost::filesystem::path(input_file).filename().string();
|
new_volume->name = boost::filesystem::path(input_file).filename().string();
|
||||||
// set a default extruder value, since user can't add it manually
|
// set a default extruder value, since user can't add it manually
|
||||||
new_volume->config.set_key_value("extruder", new ConfigOptionInt(0));
|
new_volume->config.set_key_value("extruder", new ConfigOptionInt(0));
|
||||||
|
// update source data
|
||||||
|
new_volume->source.input_file = input_file;
|
||||||
|
new_volume->source.object_idx = obj_idx;
|
||||||
|
new_volume->source.volume_idx = int(model_object.volumes.size()) - 1;
|
||||||
|
if (model.objects.size() == 1 && model.objects.front()->volumes.size() == 1)
|
||||||
|
new_volume->source.mesh_offset = model.objects.front()->volumes.front()->source.mesh_offset;
|
||||||
|
|
||||||
if (from_galery) {
|
if (from_galery) {
|
||||||
// Transform the new modifier to be aligned with the print bed.
|
// Transform the new modifier to be aligned with the print bed.
|
||||||
|
@ -256,7 +256,7 @@ std::vector<std::vector<GLGizmoPainterBase::ProjectedMousePosition>> GLGizmoPain
|
|||||||
|
|
||||||
const Camera &camera = wxGetApp().plater()->get_camera();
|
const Camera &camera = wxGetApp().plater()->get_camera();
|
||||||
std::vector<ProjectedMousePosition> mesh_hit_points;
|
std::vector<ProjectedMousePosition> mesh_hit_points;
|
||||||
mesh_hit_points.reserve(mouse_position.size());
|
mesh_hit_points.reserve(mouse_positions.size());
|
||||||
|
|
||||||
// In mesh_hit_points only the last item could have mesh_id == -1, any other items mustn't.
|
// In mesh_hit_points only the last item could have mesh_id == -1, any other items mustn't.
|
||||||
for (const Vec2d &mp : mouse_positions) {
|
for (const Vec2d &mp : mouse_positions) {
|
||||||
|
@ -1094,7 +1094,7 @@ static wxMenu* generate_help_menu()
|
|||||||
else
|
else
|
||||||
append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("&About %s"), GCODEVIEWER_APP_NAME), _L("Show about dialog"),
|
append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("&About %s"), GCODEVIEWER_APP_NAME), _L("Show about dialog"),
|
||||||
[](wxCommandEvent&) { Slic3r::GUI::about(); });
|
[](wxCommandEvent&) { Slic3r::GUI::about(); });
|
||||||
append_menu_item(helpMenu, wxID_ANY, _L("Show Tip of the day"), _L("Opens Tip of the day notification in bottom right corner or shows another tip if already opened."),
|
append_menu_item(helpMenu, wxID_ANY, _L("Show Tip of the Day"), _L("Opens Tip of the day notification in bottom right corner or shows another tip if already opened."),
|
||||||
[](wxCommandEvent&) { wxGetApp().plater()->get_notification_manager()->push_hint_notification(false); });
|
[](wxCommandEvent&) { wxGetApp().plater()->get_notification_manager()->push_hint_notification(false); });
|
||||||
helpMenu->AppendSeparator();
|
helpMenu->AppendSeparator();
|
||||||
append_menu_item(helpMenu, wxID_ANY, _L("Keyboard Shortcuts") + sep + "&?", _L("Show the list of the keyboard shortcuts"),
|
append_menu_item(helpMenu, wxID_ANY, _L("Keyboard Shortcuts") + sep + "&?", _L("Show the list of the keyboard shortcuts"),
|
||||||
@ -1188,9 +1188,9 @@ void MainFrame::init_menubar_as_editor()
|
|||||||
[this](wxCommandEvent&) { save_project(); }, "save", nullptr,
|
[this](wxCommandEvent&) { save_project(); }, "save", nullptr,
|
||||||
[this](){return m_plater != nullptr && can_save(); }, this);
|
[this](){return m_plater != nullptr && can_save(); }, this);
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
append_menu_item(fileMenu, wxID_ANY, _L("Save project &as") + dots + "\tCtrl+Shift+S", _L("Save current project file as"),
|
append_menu_item(fileMenu, wxID_ANY, _L("Save Project &as") + dots + "\tCtrl+Shift+S", _L("Save current project file as"),
|
||||||
#else
|
#else
|
||||||
append_menu_item(fileMenu, wxID_ANY, _L("Save project &as") + dots + "\tCtrl+Alt+S", _L("Save current project file as"),
|
append_menu_item(fileMenu, wxID_ANY, _L("Save Project &as") + dots + "\tCtrl+Alt+S", _L("Save current project file as"),
|
||||||
#endif // __APPLE__
|
#endif // __APPLE__
|
||||||
[this](wxCommandEvent&) { save_project_as(); }, "save", nullptr,
|
[this](wxCommandEvent&) { save_project_as(); }, "save", nullptr,
|
||||||
[this](){return m_plater != nullptr && can_save_as(); }, this);
|
[this](){return m_plater != nullptr && can_save_as(); }, this);
|
||||||
@ -1202,11 +1202,11 @@ void MainFrame::init_menubar_as_editor()
|
|||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->add_model(); }, "import_plater", nullptr,
|
[this](wxCommandEvent&) { if (m_plater) m_plater->add_model(); }, "import_plater", nullptr,
|
||||||
[this](){return m_plater != nullptr; }, this);
|
[this](){return m_plater != nullptr; }, this);
|
||||||
|
|
||||||
append_menu_item(import_menu, wxID_ANY, _L("Import STL (imperial units)"), _L("Load an model saved with imperial units"),
|
append_menu_item(import_menu, wxID_ANY, _L("Import STL (Imperial Units)"), _L("Load an model saved with imperial units"),
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->add_model(true); }, "import_plater", nullptr,
|
[this](wxCommandEvent&) { if (m_plater) m_plater->add_model(true); }, "import_plater", nullptr,
|
||||||
[this](){return m_plater != nullptr; }, this);
|
[this](){return m_plater != nullptr; }, this);
|
||||||
|
|
||||||
append_menu_item(import_menu, wxID_ANY, _L("Import SL1 / SL1S archive") + dots, _L("Load an SL1 / Sl1S archive"),
|
append_menu_item(import_menu, wxID_ANY, _L("Import SL1 / SL1S Archive") + dots, _L("Load an SL1 / Sl1S archive"),
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->import_sl1_archive(); }, "import_plater", nullptr,
|
[this](wxCommandEvent&) { if (m_plater) m_plater->import_sl1_archive(); }, "import_plater", nullptr,
|
||||||
[this](){return m_plater != nullptr && !m_plater->is_any_job_running(); }, this);
|
[this](){return m_plater != nullptr && !m_plater->is_any_job_running(); }, this);
|
||||||
|
|
||||||
@ -1214,7 +1214,7 @@ void MainFrame::init_menubar_as_editor()
|
|||||||
append_menu_item(import_menu, wxID_ANY, _L("Import &Config") + dots + "\tCtrl+L", _L("Load exported configuration file"),
|
append_menu_item(import_menu, wxID_ANY, _L("Import &Config") + dots + "\tCtrl+L", _L("Load exported configuration file"),
|
||||||
[this](wxCommandEvent&) { load_config_file(); }, "import_config", nullptr,
|
[this](wxCommandEvent&) { load_config_file(); }, "import_config", nullptr,
|
||||||
[]() {return true; }, this);
|
[]() {return true; }, this);
|
||||||
append_menu_item(import_menu, wxID_ANY, _L("Import Config from &project") + dots +"\tCtrl+Alt+L", _L("Load configuration from project file"),
|
append_menu_item(import_menu, wxID_ANY, _L("Import Config from &Project") + dots +"\tCtrl+Alt+L", _L("Load configuration from project file"),
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->extract_config_from_project(); }, "import_config", nullptr,
|
[this](wxCommandEvent&) { if (m_plater) m_plater->extract_config_from_project(); }, "import_config", nullptr,
|
||||||
[]() {return true; }, this);
|
[]() {return true; }, this);
|
||||||
import_menu->AppendSeparator();
|
import_menu->AppendSeparator();
|
||||||
@ -1232,22 +1232,22 @@ void MainFrame::init_menubar_as_editor()
|
|||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->send_gcode(); }, "export_gcode", nullptr,
|
[this](wxCommandEvent&) { if (m_plater) m_plater->send_gcode(); }, "export_gcode", nullptr,
|
||||||
[this](){return can_send_gcode(); }, this);
|
[this](){return can_send_gcode(); }, this);
|
||||||
m_changeable_menu_items.push_back(item_send_gcode);
|
m_changeable_menu_items.push_back(item_send_gcode);
|
||||||
append_menu_item(export_menu, wxID_ANY, _L("Export G-code to SD card / Flash drive") + dots + "\tCtrl+U", _L("Export current plate as G-code to SD card / Flash drive"),
|
append_menu_item(export_menu, wxID_ANY, _L("Export G-code to SD Card / Flash Drive") + dots + "\tCtrl+U", _L("Export current plate as G-code to SD card / Flash drive"),
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->export_gcode(true); }, "export_to_sd", nullptr,
|
[this](wxCommandEvent&) { if (m_plater) m_plater->export_gcode(true); }, "export_to_sd", nullptr,
|
||||||
[this]() {return can_export_gcode_sd(); }, this);
|
[this]() {return can_export_gcode_sd(); }, this);
|
||||||
export_menu->AppendSeparator();
|
export_menu->AppendSeparator();
|
||||||
append_menu_item(export_menu, wxID_ANY, _L("Export plate as &STL") + dots, _L("Export current plate as STL"),
|
append_menu_item(export_menu, wxID_ANY, _L("Export Plate as &STL") + dots, _L("Export current plate as STL"),
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(); }, "export_plater", nullptr,
|
[this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(); }, "export_plater", nullptr,
|
||||||
[this](){return can_export_model(); }, this);
|
[this](){return can_export_model(); }, this);
|
||||||
append_menu_item(export_menu, wxID_ANY, _L("Export plate as STL &including supports") + dots, _L("Export current plate as STL including supports"),
|
append_menu_item(export_menu, wxID_ANY, _L("Export Plate as STL &Including Supports") + dots, _L("Export current plate as STL including supports"),
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(true); }, "export_plater", nullptr,
|
[this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(true); }, "export_plater", nullptr,
|
||||||
[this](){return can_export_supports(); }, this);
|
[this](){return can_export_supports(); }, this);
|
||||||
// Deprecating AMF export. Let's wait for user feedback.
|
// Deprecating AMF export. Let's wait for user feedback.
|
||||||
// append_menu_item(export_menu, wxID_ANY, _L("Export plate as &AMF") + dots, _L("Export current plate as AMF"),
|
// append_menu_item(export_menu, wxID_ANY, _L("Export Plate as &AMF") + dots, _L("Export current plate as AMF"),
|
||||||
// [this](wxCommandEvent&) { if (m_plater) m_plater->export_amf(); }, "export_plater", nullptr,
|
// [this](wxCommandEvent&) { if (m_plater) m_plater->export_amf(); }, "export_plater", nullptr,
|
||||||
// [this](){return can_export_model(); }, this);
|
// [this](){return can_export_model(); }, this);
|
||||||
export_menu->AppendSeparator();
|
export_menu->AppendSeparator();
|
||||||
append_menu_item(export_menu, wxID_ANY, _L("Export &toolpaths as OBJ") + dots, _L("Export toolpaths as OBJ"),
|
append_menu_item(export_menu, wxID_ANY, _L("Export &Toolpaths as OBJ") + dots, _L("Export toolpaths as OBJ"),
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->export_toolpaths_to_obj(); }, "export_plater", nullptr,
|
[this](wxCommandEvent&) { if (m_plater) m_plater->export_toolpaths_to_obj(); }, "export_plater", nullptr,
|
||||||
[this]() {return can_export_toolpaths(); }, this);
|
[this]() {return can_export_toolpaths(); }, this);
|
||||||
export_menu->AppendSeparator();
|
export_menu->AppendSeparator();
|
||||||
@ -1262,7 +1262,7 @@ void MainFrame::init_menubar_as_editor()
|
|||||||
[]() {return true; }, this);
|
[]() {return true; }, this);
|
||||||
append_submenu(fileMenu, export_menu, wxID_ANY, _L("&Export"), "");
|
append_submenu(fileMenu, export_menu, wxID_ANY, _L("&Export"), "");
|
||||||
|
|
||||||
append_menu_item(fileMenu, wxID_ANY, _L("Ejec&t SD card / Flash drive") + dots + "\tCtrl+T", _L("Eject SD card / Flash drive after the G-code was exported to it."),
|
append_menu_item(fileMenu, wxID_ANY, _L("Ejec&t SD Card / Flash Drive") + dots + "\tCtrl+T", _L("Eject SD card / Flash drive after the G-code was exported to it."),
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->eject_drive(); }, "eject_sd", nullptr,
|
[this](wxCommandEvent&) { if (m_plater) m_plater->eject_drive(); }, "eject_sd", nullptr,
|
||||||
[this]() {return can_eject(); }, this);
|
[this]() {return can_eject(); }, this);
|
||||||
|
|
||||||
@ -1298,7 +1298,7 @@ void MainFrame::init_menubar_as_editor()
|
|||||||
[this](wxCommandEvent&) { repair_stl(); }, "wrench", nullptr,
|
[this](wxCommandEvent&) { repair_stl(); }, "wrench", nullptr,
|
||||||
[]() { return true; }, this);
|
[]() { return true; }, this);
|
||||||
fileMenu->AppendSeparator();
|
fileMenu->AppendSeparator();
|
||||||
append_menu_item(fileMenu, wxID_ANY, _L("&G-code preview") + dots, _L("Open G-code viewer"),
|
append_menu_item(fileMenu, wxID_ANY, _L("&G-code Preview") + dots, _L("Open G-code viewer"),
|
||||||
[this](wxCommandEvent&) { start_new_gcodeviewer_open_file(this); }, "", nullptr);
|
[this](wxCommandEvent&) { start_new_gcodeviewer_open_file(this); }, "", nullptr);
|
||||||
fileMenu->AppendSeparator();
|
fileMenu->AppendSeparator();
|
||||||
append_menu_item(fileMenu, wxID_EXIT, _L("&Quit"), wxString::Format(_L("Quit %s"), SLIC3R_APP_NAME),
|
append_menu_item(fileMenu, wxID_EXIT, _L("&Quit"), wxString::Format(_L("Quit %s"), SLIC3R_APP_NAME),
|
||||||
@ -1316,17 +1316,17 @@ void MainFrame::init_menubar_as_editor()
|
|||||||
#else
|
#else
|
||||||
wxString hotkey_delete = "Del";
|
wxString hotkey_delete = "Del";
|
||||||
#endif
|
#endif
|
||||||
append_menu_item(editMenu, wxID_ANY, _L("&Select all") + sep + GUI::shortkey_ctrl_prefix() + sep_space + "A",
|
append_menu_item(editMenu, wxID_ANY, _L("&Select All") + sep + GUI::shortkey_ctrl_prefix() + sep_space + "A",
|
||||||
_L("Selects all objects"), [this](wxCommandEvent&) { m_plater->select_all(); },
|
_L("Selects all objects"), [this](wxCommandEvent&) { m_plater->select_all(); },
|
||||||
"", nullptr, [this](){return can_select(); }, this);
|
"", nullptr, [this](){return can_select(); }, this);
|
||||||
append_menu_item(editMenu, wxID_ANY, _L("D&eselect all") + sep + "Esc",
|
append_menu_item(editMenu, wxID_ANY, _L("D&eselect All") + sep + "Esc",
|
||||||
_L("Deselects all objects"), [this](wxCommandEvent&) { m_plater->deselect_all(); },
|
_L("Deselects all objects"), [this](wxCommandEvent&) { m_plater->deselect_all(); },
|
||||||
"", nullptr, [this](){return can_deselect(); }, this);
|
"", nullptr, [this](){return can_deselect(); }, this);
|
||||||
editMenu->AppendSeparator();
|
editMenu->AppendSeparator();
|
||||||
append_menu_item(editMenu, wxID_ANY, _L("&Delete selected") + sep + hotkey_delete,
|
append_menu_item(editMenu, wxID_ANY, _L("&Delete Selected") + sep + hotkey_delete,
|
||||||
_L("Deletes the current selection"),[this](wxCommandEvent&) { m_plater->remove_selected(); },
|
_L("Deletes the current selection"),[this](wxCommandEvent&) { m_plater->remove_selected(); },
|
||||||
"remove_menu", nullptr, [this](){return can_delete(); }, this);
|
"remove_menu", nullptr, [this](){return can_delete(); }, this);
|
||||||
append_menu_item(editMenu, wxID_ANY, _L("Delete &all") + sep + GUI::shortkey_ctrl_prefix() + sep_space + hotkey_delete,
|
append_menu_item(editMenu, wxID_ANY, _L("Delete &All") + sep + GUI::shortkey_ctrl_prefix() + sep_space + hotkey_delete,
|
||||||
_L("Deletes all objects"), [this](wxCommandEvent&) { m_plater->reset_with_confirm(); },
|
_L("Deletes all objects"), [this](wxCommandEvent&) { m_plater->reset_with_confirm(); },
|
||||||
"delete_all_menu", nullptr, [this](){return can_delete_all(); }, this);
|
"delete_all_menu", nullptr, [this](){return can_delete_all(); }, this);
|
||||||
|
|
||||||
@ -1348,11 +1348,11 @@ void MainFrame::init_menubar_as_editor()
|
|||||||
|
|
||||||
editMenu->AppendSeparator();
|
editMenu->AppendSeparator();
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
append_menu_item(editMenu, wxID_ANY, _L("Re&load from disk") + dots + "\tCtrl+Shift+R",
|
append_menu_item(editMenu, wxID_ANY, _L("Re&load from Disk") + dots + "\tCtrl+Shift+R",
|
||||||
_L("Reload the plater from disk"), [this](wxCommandEvent&) { m_plater->reload_all_from_disk(); },
|
_L("Reload the plater from disk"), [this](wxCommandEvent&) { m_plater->reload_all_from_disk(); },
|
||||||
"", nullptr, [this]() {return !m_plater->model().objects.empty(); }, this);
|
"", nullptr, [this]() {return !m_plater->model().objects.empty(); }, this);
|
||||||
#else
|
#else
|
||||||
append_menu_item(editMenu, wxID_ANY, _L("Re&load from disk") + sep + "F5",
|
append_menu_item(editMenu, wxID_ANY, _L("Re&load from Disk") + sep + "F5",
|
||||||
_L("Reload the plater from disk"), [this](wxCommandEvent&) { m_plater->reload_all_from_disk(); },
|
_L("Reload the plater from disk"), [this](wxCommandEvent&) { m_plater->reload_all_from_disk(); },
|
||||||
"", nullptr, [this]() {return !m_plater->model().objects.empty(); }, this);
|
"", nullptr, [this]() {return !m_plater->model().objects.empty(); }, this);
|
||||||
#endif // __APPLE__
|
#endif // __APPLE__
|
||||||
@ -1410,11 +1410,11 @@ void MainFrame::init_menubar_as_editor()
|
|||||||
[this](wxCommandEvent&) { m_printhost_queue_dlg->Show(); }, "upload_queue", nullptr, []() {return true; }, this);
|
[this](wxCommandEvent&) { m_printhost_queue_dlg->Show(); }, "upload_queue", nullptr, []() {return true; }, this);
|
||||||
|
|
||||||
windowMenu->AppendSeparator();
|
windowMenu->AppendSeparator();
|
||||||
append_menu_item(windowMenu, wxID_ANY, _L("Open new instance") + "\tCtrl+Shift+I", _L("Open a new PrusaSlicer instance"),
|
append_menu_item(windowMenu, wxID_ANY, _L("Open New Instance") + "\tCtrl+Shift+I", _L("Open a new PrusaSlicer instance"),
|
||||||
[](wxCommandEvent&) { start_new_slicer(); }, "", nullptr, [this]() {return m_plater != nullptr && wxGetApp().app_config->get("single_instance") != "1"; }, this);
|
[](wxCommandEvent&) { start_new_slicer(); }, "", nullptr, [this]() {return m_plater != nullptr && wxGetApp().app_config->get("single_instance") != "1"; }, this);
|
||||||
|
|
||||||
windowMenu->AppendSeparator();
|
windowMenu->AppendSeparator();
|
||||||
append_menu_item(windowMenu, wxID_ANY, _L("Compare presets")/* + "\tCtrl+F"*/, _L("Compare presets"),
|
append_menu_item(windowMenu, wxID_ANY, _L("Compare Presets")/* + "\tCtrl+F"*/, _L("Compare presets"),
|
||||||
[this](wxCommandEvent&) { diff_dialog.show();}, "compare", nullptr, []() {return true; }, this);
|
[this](wxCommandEvent&) { diff_dialog.show();}, "compare", nullptr, []() {return true; }, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1424,15 +1424,15 @@ void MainFrame::init_menubar_as_editor()
|
|||||||
viewMenu = new wxMenu();
|
viewMenu = new wxMenu();
|
||||||
add_common_view_menu_items(viewMenu, this, std::bind(&MainFrame::can_change_view, this));
|
add_common_view_menu_items(viewMenu, this, std::bind(&MainFrame::can_change_view, this));
|
||||||
viewMenu->AppendSeparator();
|
viewMenu->AppendSeparator();
|
||||||
append_menu_check_item(viewMenu, wxID_ANY, _L("Show &labels") + sep + "E", _L("Show object/instance labels in 3D scene"),
|
append_menu_check_item(viewMenu, wxID_ANY, _L("Show &Labels") + sep + "E", _L("Show object/instance labels in 3D scene"),
|
||||||
[this](wxCommandEvent&) { m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); }, this,
|
[this](wxCommandEvent&) { m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); }, this,
|
||||||
[this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->are_view3D_labels_shown(); }, this);
|
[this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->are_view3D_labels_shown(); }, this);
|
||||||
append_menu_check_item(viewMenu, wxID_ANY, _L("&Collapse sidebar") + sep + "Shift+" + sep_space + "Tab", _L("Collapse sidebar"),
|
append_menu_check_item(viewMenu, wxID_ANY, _L("&Collapse Sidebar") + sep + "Shift+" + sep_space + "Tab", _L("Collapse sidebar"),
|
||||||
[this](wxCommandEvent&) { m_plater->collapse_sidebar(!m_plater->is_sidebar_collapsed()); }, this,
|
[this](wxCommandEvent&) { m_plater->collapse_sidebar(!m_plater->is_sidebar_collapsed()); }, this,
|
||||||
[]() { return true; }, [this]() { return m_plater->is_sidebar_collapsed(); }, this);
|
[]() { return true; }, [this]() { return m_plater->is_sidebar_collapsed(); }, this);
|
||||||
#ifndef __APPLE__
|
#ifndef __APPLE__
|
||||||
// OSX adds its own menu item to toggle fullscreen.
|
// OSX adds its own menu item to toggle fullscreen.
|
||||||
append_menu_check_item(viewMenu, wxID_ANY, _L("&Full screen") + "\t" + "F11", _L("Full screen"),
|
append_menu_check_item(viewMenu, wxID_ANY, _L("&Fullscreen") + "\t" + "F11", _L("Fullscreen"),
|
||||||
[this](wxCommandEvent&) { this->ShowFullScreen(!this->IsFullScreen(),
|
[this](wxCommandEvent&) { this->ShowFullScreen(!this->IsFullScreen(),
|
||||||
// wxFULLSCREEN_ALL: wxFULLSCREEN_NOMENUBAR | wxFULLSCREEN_NOTOOLBAR | wxFULLSCREEN_NOSTATUSBAR | wxFULLSCREEN_NOBORDER | wxFULLSCREEN_NOCAPTION
|
// wxFULLSCREEN_ALL: wxFULLSCREEN_NOMENUBAR | wxFULLSCREEN_NOTOOLBAR | wxFULLSCREEN_NOSTATUSBAR | wxFULLSCREEN_NOBORDER | wxFULLSCREEN_NOCAPTION
|
||||||
wxFULLSCREEN_NOSTATUSBAR | wxFULLSCREEN_NOBORDER | wxFULLSCREEN_NOCAPTION); },
|
wxFULLSCREEN_NOSTATUSBAR | wxFULLSCREEN_NOBORDER | wxFULLSCREEN_NOCAPTION); },
|
||||||
@ -1519,16 +1519,16 @@ void MainFrame::init_menubar_as_gcodeviewer()
|
|||||||
[this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->load_gcode(); }, "open", nullptr,
|
[this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->load_gcode(); }, "open", nullptr,
|
||||||
[this]() {return m_plater != nullptr; }, this);
|
[this]() {return m_plater != nullptr; }, this);
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
append_menu_item(fileMenu, wxID_ANY, _L("Re&load from disk") + dots + "\tCtrl+Shift+R",
|
append_menu_item(fileMenu, wxID_ANY, _L("Re&load from Disk") + dots + "\tCtrl+Shift+R",
|
||||||
_L("Reload the plater from disk"), [this](wxCommandEvent&) { m_plater->reload_gcode_from_disk(); },
|
_L("Reload the plater from disk"), [this](wxCommandEvent&) { m_plater->reload_gcode_from_disk(); },
|
||||||
"", nullptr, [this]() { return !m_plater->get_last_loaded_gcode().empty(); }, this);
|
"", nullptr, [this]() { return !m_plater->get_last_loaded_gcode().empty(); }, this);
|
||||||
#else
|
#else
|
||||||
append_menu_item(fileMenu, wxID_ANY, _L("Re&load from disk") + sep + "F5",
|
append_menu_item(fileMenu, wxID_ANY, _L("Re&load from Disk") + sep + "F5",
|
||||||
_L("Reload the plater from disk"), [this](wxCommandEvent&) { m_plater->reload_gcode_from_disk(); },
|
_L("Reload the plater from disk"), [this](wxCommandEvent&) { m_plater->reload_gcode_from_disk(); },
|
||||||
"", nullptr, [this]() { return !m_plater->get_last_loaded_gcode().empty(); }, this);
|
"", nullptr, [this]() { return !m_plater->get_last_loaded_gcode().empty(); }, this);
|
||||||
#endif // __APPLE__
|
#endif // __APPLE__
|
||||||
fileMenu->AppendSeparator();
|
fileMenu->AppendSeparator();
|
||||||
append_menu_item(fileMenu, wxID_ANY, _L("Export &toolpaths as OBJ") + dots, _L("Export toolpaths as OBJ"),
|
append_menu_item(fileMenu, wxID_ANY, _L("Export &Toolpaths as OBJ") + dots, _L("Export toolpaths as OBJ"),
|
||||||
[this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->export_toolpaths_to_obj(); }, "export_plater", nullptr,
|
[this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->export_toolpaths_to_obj(); }, "export_plater", nullptr,
|
||||||
[this]() {return can_export_toolpaths(); }, this);
|
[this]() {return can_export_toolpaths(); }, this);
|
||||||
append_menu_item(fileMenu, wxID_ANY, _L("Open &PrusaSlicer") + dots, _L("Open PrusaSlicer"),
|
append_menu_item(fileMenu, wxID_ANY, _L("Open &PrusaSlicer") + dots, _L("Open PrusaSlicer"),
|
||||||
|
@ -63,6 +63,15 @@ MsgDialog::MsgDialog(wxWindow *parent, const wxString &title, const wxString &he
|
|||||||
SetSizerAndFit(main_sizer);
|
SetSizerAndFit(main_sizer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MsgDialog::SetButtonLabel(wxWindowID btn_id, const wxString& label, bool set_focus/* = false*/)
|
||||||
|
{
|
||||||
|
if (wxButton* btn = get_button(btn_id)) {
|
||||||
|
btn->SetLabel(label);
|
||||||
|
if (set_focus)
|
||||||
|
btn->SetFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
wxButton* MsgDialog::add_button(wxWindowID btn_id, bool set_focus /*= false*/, const wxString& label/* = wxString()*/)
|
wxButton* MsgDialog::add_button(wxWindowID btn_id, bool set_focus /*= false*/, const wxString& label/* = wxString()*/)
|
||||||
{
|
{
|
||||||
wxButton* btn = new wxButton(this, btn_id, label);
|
wxButton* btn = new wxButton(this, btn_id, label);
|
||||||
@ -98,7 +107,7 @@ void MsgDialog::finalize()
|
|||||||
|
|
||||||
|
|
||||||
// Text shown as HTML, so that mouse selection and Ctrl-V to copy will work.
|
// Text shown as HTML, so that mouse selection and Ctrl-V to copy will work.
|
||||||
static void add_msg_content(wxWindow* parent, wxBoxSizer* content_sizer, wxString msg, bool monospaced_font = false)
|
static void add_msg_content(wxWindow* parent, wxBoxSizer* content_sizer, wxString msg, bool monospaced_font = false, bool is_marked_msg = false)
|
||||||
{
|
{
|
||||||
wxHtmlWindow* html = new wxHtmlWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO);
|
wxHtmlWindow* html = new wxHtmlWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO);
|
||||||
|
|
||||||
@ -136,8 +145,7 @@ static void add_msg_content(wxWindow* parent, wxBoxSizer* content_sizer, wxStrin
|
|||||||
int em = wxGetApp().em_unit();
|
int em = wxGetApp().em_unit();
|
||||||
|
|
||||||
// if message containes the table
|
// if message containes the table
|
||||||
bool is_marked = msg.Contains("<tr>");
|
if (msg.Contains("<tr>")) {
|
||||||
if (is_marked) {
|
|
||||||
int lines = msg.Freq('\n') + 1;
|
int lines = msg.Freq('\n') + 1;
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
while (pos < (int)msg.Len() && pos != wxNOT_FOUND) {
|
while (pos < (int)msg.Len() && pos != wxNOT_FOUND) {
|
||||||
@ -155,7 +163,7 @@ static void add_msg_content(wxWindow* parent, wxBoxSizer* content_sizer, wxStrin
|
|||||||
}
|
}
|
||||||
html->SetMinSize(page_size);
|
html->SetMinSize(page_size);
|
||||||
|
|
||||||
std::string msg_escaped = xml_escape(msg.ToUTF8().data(), is_marked);
|
std::string msg_escaped = xml_escape(msg.ToUTF8().data(), is_marked_msg);
|
||||||
boost::replace_all(msg_escaped, "\r\n", "<br>");
|
boost::replace_all(msg_escaped, "\r\n", "<br>");
|
||||||
boost::replace_all(msg_escaped, "\n", "<br>");
|
boost::replace_all(msg_escaped, "\n", "<br>");
|
||||||
if (monospaced_font)
|
if (monospaced_font)
|
||||||
@ -215,10 +223,8 @@ MessageDialog::MessageDialog(wxWindow* parent,
|
|||||||
RichMessageDialog::RichMessageDialog(wxWindow* parent,
|
RichMessageDialog::RichMessageDialog(wxWindow* parent,
|
||||||
const wxString& message,
|
const wxString& message,
|
||||||
const wxString& caption/* = wxEmptyString*/,
|
const wxString& caption/* = wxEmptyString*/,
|
||||||
long style/* = wxOK*/,
|
long style/* = wxOK*/)
|
||||||
const wxString& headline/* = wxEmptyString*/
|
: MsgDialog(parent, caption.IsEmpty() ? wxString::Format(_L("%s info"), SLIC3R_APP_NAME) : caption, wxEmptyString, style)
|
||||||
)
|
|
||||||
: MsgDialog(parent, caption.IsEmpty() ? wxString::Format(_L("%s info"), SLIC3R_APP_NAME) : caption, headline, style)
|
|
||||||
{
|
{
|
||||||
add_msg_content(this, content_sizer, message);
|
add_msg_content(this, content_sizer, message);
|
||||||
|
|
||||||
@ -245,11 +251,11 @@ int RichMessageDialog::ShowModal()
|
|||||||
|
|
||||||
// InfoDialog
|
// InfoDialog
|
||||||
|
|
||||||
InfoDialog::InfoDialog(wxWindow* parent, const wxString &title, const wxString& msg)
|
InfoDialog::InfoDialog(wxWindow* parent, const wxString &title, const wxString& msg, bool is_marked_msg/* = false*/, long style/* = wxOK | wxICON_INFORMATION*/)
|
||||||
: MsgDialog(parent, wxString::Format(_L("%s information"), SLIC3R_APP_NAME), title, wxOK | wxICON_INFORMATION)
|
: MsgDialog(parent, wxString::Format(_L("%s information"), SLIC3R_APP_NAME), title, style)
|
||||||
, msg(msg)
|
, msg(msg)
|
||||||
{
|
{
|
||||||
add_msg_content(this, content_sizer, msg);
|
add_msg_content(this, content_sizer, msg, false, is_marked_msg);
|
||||||
finalize();
|
finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ struct MsgDialog : wxDialog
|
|||||||
MsgDialog &operator=(const MsgDialog &) = delete;
|
MsgDialog &operator=(const MsgDialog &) = delete;
|
||||||
virtual ~MsgDialog() = default;
|
virtual ~MsgDialog() = default;
|
||||||
|
|
||||||
// TODO: refactor with CreateStdDialogButtonSizer usage
|
void SetButtonLabel(wxWindowID btn_id, const wxString& label, bool set_focus = false);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
enum {
|
enum {
|
||||||
@ -111,6 +111,7 @@ public:
|
|||||||
class MessageDialog : public MsgDialog
|
class MessageDialog : public MsgDialog
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
// NOTE! Don't change a signature of contsrucor. It have to be tha same as for wxMessageDialog
|
||||||
MessageDialog( wxWindow *parent,
|
MessageDialog( wxWindow *parent,
|
||||||
const wxString& message,
|
const wxString& message,
|
||||||
const wxString& caption = wxEmptyString,
|
const wxString& caption = wxEmptyString,
|
||||||
@ -130,12 +131,11 @@ class RichMessageDialog : public MsgDialog
|
|||||||
bool m_checkBoxValue{ false };
|
bool m_checkBoxValue{ false };
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
// NOTE! Don't change a signature of contsrucor. It have to be tha same as for wxRichMessageDialog
|
||||||
RichMessageDialog( wxWindow *parent,
|
RichMessageDialog( wxWindow *parent,
|
||||||
const wxString& message,
|
const wxString& message,
|
||||||
const wxString& caption = wxEmptyString,
|
const wxString& caption = wxEmptyString,
|
||||||
long style = wxOK,
|
long style = wxOK);
|
||||||
const wxString& headline = wxEmptyString
|
|
||||||
);
|
|
||||||
RichMessageDialog(RichMessageDialog&&) = delete;
|
RichMessageDialog(RichMessageDialog&&) = delete;
|
||||||
RichMessageDialog(const RichMessageDialog&) = delete;
|
RichMessageDialog(const RichMessageDialog&) = delete;
|
||||||
RichMessageDialog &operator=(RichMessageDialog&&) = delete;
|
RichMessageDialog &operator=(RichMessageDialog&&) = delete;
|
||||||
@ -306,7 +306,7 @@ public:
|
|||||||
class InfoDialog : public MsgDialog
|
class InfoDialog : public MsgDialog
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
InfoDialog(wxWindow *parent, const wxString &title, const wxString &msg);
|
InfoDialog(wxWindow *parent, const wxString &title, const wxString &msg, bool is_marked = false, long style = wxOK| wxICON_INFORMATION);
|
||||||
InfoDialog(InfoDialog&&) = delete;
|
InfoDialog(InfoDialog&&) = delete;
|
||||||
InfoDialog(const InfoDialog&) = delete;
|
InfoDialog(const InfoDialog&) = delete;
|
||||||
InfoDialog&operator=(InfoDialog&&) = delete;
|
InfoDialog&operator=(InfoDialog&&) = delete;
|
||||||
|
@ -181,6 +181,8 @@ public:
|
|||||||
// we have to set same max contrtol width to all of them
|
// we have to set same max contrtol width to all of them
|
||||||
void set_max_win_width(int max_win_width);
|
void set_max_win_width(int max_win_width);
|
||||||
|
|
||||||
|
bool is_activated() { return sizer != nullptr; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::map<t_config_option_key, Option> m_options;
|
std::map<t_config_option_key, Option> m_options;
|
||||||
wxWindow* m_parent {nullptr};
|
wxWindow* m_parent {nullptr};
|
||||||
|
@ -223,6 +223,9 @@ ObjectInfo::ObjectInfo(wxWindow *parent) :
|
|||||||
Add(sizer_manifold, 0, wxEXPAND | wxTOP, 4);
|
Add(sizer_manifold, 0, wxEXPAND | wxTOP, 4);
|
||||||
|
|
||||||
sla_hidden_items = { label_volume, info_volume, /*label_materials, info_materials*/ };
|
sla_hidden_items = { label_volume, info_volume, /*label_materials, info_materials*/ };
|
||||||
|
|
||||||
|
// Fixes layout issues on plater, short BitmapComboBoxes with some Windows scaling, see GH issue #7414.
|
||||||
|
this->Show(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectInfo::show_sizer(bool show)
|
void ObjectInfo::show_sizer(bool show)
|
||||||
@ -3648,12 +3651,12 @@ void Plater::priv::reload_from_disk()
|
|||||||
if (has_source || has_name) {
|
if (has_source || has_name) {
|
||||||
int new_volume_idx = -1;
|
int new_volume_idx = -1;
|
||||||
int new_object_idx = -1;
|
int new_object_idx = -1;
|
||||||
if (has_source) {
|
// if (has_source) {
|
||||||
// take idxs from source
|
// // take idxs from source
|
||||||
new_volume_idx = old_volume->source.volume_idx;
|
// new_volume_idx = old_volume->source.volume_idx;
|
||||||
new_object_idx = old_volume->source.object_idx;
|
// new_object_idx = old_volume->source.object_idx;
|
||||||
}
|
// }
|
||||||
else {
|
// else {
|
||||||
// take idxs from the 1st matching volume
|
// take idxs from the 1st matching volume
|
||||||
for (size_t o = 0; o < new_model.objects.size(); ++o) {
|
for (size_t o = 0; o < new_model.objects.size(); ++o) {
|
||||||
ModelObject* obj = new_model.objects[o];
|
ModelObject* obj = new_model.objects[o];
|
||||||
@ -3669,39 +3672,40 @@ void Plater::priv::reload_from_disk()
|
|||||||
if (found)
|
if (found)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (new_object_idx < 0 && (int)new_model.objects.size() <= new_object_idx) {
|
if (new_object_idx < 0 || int(new_model.objects.size()) <= new_object_idx) {
|
||||||
fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name));
|
fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ModelObject* new_model_object = new_model.objects[new_object_idx];
|
ModelObject* new_model_object = new_model.objects[new_object_idx];
|
||||||
if (new_volume_idx < 0 && (int)new_model.objects.size() <= new_volume_idx) {
|
if (new_volume_idx < 0 || int(new_model_object->volumes.size()) <= new_volume_idx) {
|
||||||
fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name));
|
fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (new_volume_idx < (int)new_model_object->volumes.size()) {
|
|
||||||
old_model_object->add_volume(*new_model_object->volumes[new_volume_idx]);
|
|
||||||
ModelVolume* new_volume = old_model_object->volumes.back();
|
|
||||||
new_volume->set_new_unique_id();
|
|
||||||
new_volume->config.apply(old_volume->config);
|
|
||||||
new_volume->set_type(old_volume->type());
|
|
||||||
new_volume->set_material_id(old_volume->material_id());
|
|
||||||
new_volume->set_transformation(old_volume->get_transformation());
|
|
||||||
new_volume->translate(new_volume->get_transformation().get_matrix(true) * (new_volume->source.mesh_offset - old_volume->source.mesh_offset));
|
|
||||||
assert(! old_volume->source.is_converted_from_inches || ! old_volume->source.is_converted_from_meters);
|
|
||||||
if (old_volume->source.is_converted_from_inches)
|
|
||||||
new_volume->convert_from_imperial_units();
|
|
||||||
else if (old_volume->source.is_converted_from_meters)
|
|
||||||
new_volume->convert_from_meters();
|
|
||||||
std::swap(old_model_object->volumes[sel_v.volume_idx], old_model_object->volumes.back());
|
|
||||||
old_model_object->delete_volume(old_model_object->volumes.size() - 1);
|
|
||||||
if (!sinking)
|
|
||||||
old_model_object->ensure_on_bed();
|
|
||||||
old_model_object->sort_volumes(wxGetApp().app_config->get("order_volumes") == "1");
|
|
||||||
|
|
||||||
sla::reproject_points_and_holes(old_model_object);
|
old_model_object->add_volume(*new_model_object->volumes[new_volume_idx]);
|
||||||
}
|
ModelVolume* new_volume = old_model_object->volumes.back();
|
||||||
|
new_volume->set_new_unique_id();
|
||||||
|
new_volume->config.apply(old_volume->config);
|
||||||
|
new_volume->set_type(old_volume->type());
|
||||||
|
new_volume->set_material_id(old_volume->material_id());
|
||||||
|
new_volume->set_transformation(old_volume->get_transformation());
|
||||||
|
new_volume->translate(new_volume->get_transformation().get_matrix(true) * (new_volume->source.mesh_offset - old_volume->source.mesh_offset));
|
||||||
|
new_volume->source.object_idx = old_volume->source.object_idx;
|
||||||
|
new_volume->source.volume_idx = old_volume->source.volume_idx;
|
||||||
|
assert(! old_volume->source.is_converted_from_inches || ! old_volume->source.is_converted_from_meters);
|
||||||
|
if (old_volume->source.is_converted_from_inches)
|
||||||
|
new_volume->convert_from_imperial_units();
|
||||||
|
else if (old_volume->source.is_converted_from_meters)
|
||||||
|
new_volume->convert_from_meters();
|
||||||
|
std::swap(old_model_object->volumes[sel_v.volume_idx], old_model_object->volumes.back());
|
||||||
|
old_model_object->delete_volume(old_model_object->volumes.size() - 1);
|
||||||
|
if (!sinking)
|
||||||
|
old_model_object->ensure_on_bed();
|
||||||
|
old_model_object->sort_volumes(wxGetApp().app_config->get("order_volumes") == "1");
|
||||||
|
|
||||||
|
sla::reproject_points_and_holes(old_model_object);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -345,7 +345,7 @@ void PreferencesDialog::build(size_t selected_tab)
|
|||||||
|
|
||||||
def.label = L("Sequential slider applied only to top layer");
|
def.label = L("Sequential slider applied only to top layer");
|
||||||
def.type = coBool;
|
def.type = coBool;
|
||||||
def.tooltip = L("If enabled, changes made using the sequential slider, in preview, apply only to gcode top layer."
|
def.tooltip = L("If enabled, changes made using the sequential slider, in preview, apply only to gcode top layer. "
|
||||||
"If disabled, changes made using the sequential slider, in preview, apply to the whole gcode.");
|
"If disabled, changes made using the sequential slider, in preview, apply to the whole gcode.");
|
||||||
def.set_default_value(new ConfigOptionBool{ app_config->get("seq_top_layer_only") == "1" });
|
def.set_default_value(new ConfigOptionBool{ app_config->get("seq_top_layer_only") == "1" });
|
||||||
option = Option(def, "seq_top_layer_only");
|
option = Option(def, "seq_top_layer_only");
|
||||||
@ -485,7 +485,7 @@ void PreferencesDialog::build(size_t selected_tab)
|
|||||||
{
|
{
|
||||||
def.label = L("Use system menu for application");
|
def.label = L("Use system menu for application");
|
||||||
def.type = coBool;
|
def.type = coBool;
|
||||||
def.tooltip = L("If enabled, application will use the standart Windows system menu,\n"
|
def.tooltip = L("If enabled, application will use the standard Windows system menu,\n"
|
||||||
"but on some combination of display scales it can looks ugly. If disabled, old UI will be used.");
|
"but on some combination of display scales it can looks ugly. If disabled, old UI will be used.");
|
||||||
def.set_default_value(new ConfigOptionBool{ app_config->get("sys_menu_enabled") == "1" });
|
def.set_default_value(new ConfigOptionBool{ app_config->get("sys_menu_enabled") == "1" });
|
||||||
option = Option(def, "sys_menu_enabled");
|
option = Option(def, "sys_menu_enabled");
|
||||||
|
@ -954,7 +954,7 @@ void Selection::scale(const Vec3d& scale, TransformationType transformation_type
|
|||||||
#if ENABLE_ENHANCED_PRINT_VOLUME_FIT
|
#if ENABLE_ENHANCED_PRINT_VOLUME_FIT
|
||||||
void Selection::scale_to_fit_print_volume(const BuildVolume& volume)
|
void Selection::scale_to_fit_print_volume(const BuildVolume& volume)
|
||||||
{
|
{
|
||||||
auto fit = [this](double s, const Vec3d& offset) {
|
auto fit = [this](double s, Vec3d offset) {
|
||||||
if (s <= 0.0 || s == 1.0)
|
if (s <= 0.0 || s == 1.0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -972,6 +972,7 @@ void Selection::scale_to_fit_print_volume(const BuildVolume& volume)
|
|||||||
|
|
||||||
// center selection on print bed
|
// center selection on print bed
|
||||||
start_dragging();
|
start_dragging();
|
||||||
|
offset.z() = -get_bounding_box().min.z();
|
||||||
translate(offset);
|
translate(offset);
|
||||||
wxGetApp().plater()->canvas3D()->do_move(""); // avoid storing another snapshot
|
wxGetApp().plater()->canvas3D()->do_move(""); // avoid storing another snapshot
|
||||||
|
|
||||||
|
@ -289,7 +289,9 @@ void Tab::create_preset_tab()
|
|||||||
// There is used just additional sizer for m_mode_sizer with right alignment
|
// There is used just additional sizer for m_mode_sizer with right alignment
|
||||||
if (m_mode_sizer) {
|
if (m_mode_sizer) {
|
||||||
auto mode_sizer = new wxBoxSizer(wxVERTICAL);
|
auto mode_sizer = new wxBoxSizer(wxVERTICAL);
|
||||||
mode_sizer->Add(m_mode_sizer, 1, wxALIGN_RIGHT);
|
// Don't set the 2nd parameter to 1, making the sizer rubbery scalable in Y axis may lead
|
||||||
|
// to wrong vertical size assigned to wxBitmapComboBoxes, see GH issue #7176.
|
||||||
|
mode_sizer->Add(m_mode_sizer, 0, wxALIGN_RIGHT);
|
||||||
m_hsizer->Add(mode_sizer, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, wxOSX ? 15 : 10);
|
m_hsizer->Add(mode_sizer, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, wxOSX ? 15 : 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1767,11 +1769,14 @@ void TabPrint::update()
|
|||||||
// Note: This workaround works till "support_material" and "overhangs" is exclusive sets of mutually no-exclusive parameters.
|
// Note: This workaround works till "support_material" and "overhangs" is exclusive sets of mutually no-exclusive parameters.
|
||||||
// But it should be corrected when we will have more such sets.
|
// But it should be corrected when we will have more such sets.
|
||||||
// Disable check of the compatibility of the "support_material" and "overhangs" options for saved user profile
|
// Disable check of the compatibility of the "support_material" and "overhangs" options for saved user profile
|
||||||
if (!m_config_manipulation.is_initialized_support_material_overhangs_queried()) {
|
// or for profile which was loaded from 3mf
|
||||||
|
// if (!m_config_manipulation.is_initialized_support_material_overhangs_queried())
|
||||||
|
if (bool support_material_overhangs_queried = m_config->opt_bool("support_material") && !m_config->opt_bool("overhangs"))
|
||||||
|
{
|
||||||
const Preset& selected_preset = m_preset_bundle->prints.get_selected_preset();
|
const Preset& selected_preset = m_preset_bundle->prints.get_selected_preset();
|
||||||
bool is_user_and_saved_preset = !selected_preset.is_system && !selected_preset.is_dirty;
|
bool is_user_and_saved_preset = !selected_preset.is_system && !selected_preset.is_dirty;
|
||||||
bool support_material_overhangs_queried = m_config->opt_bool("support_material") && !m_config->opt_bool("overhangs");
|
bool is_saved_in_3mf_preset = selected_preset.is_dirty && !wxGetApp().plater()->is_presets_dirty();
|
||||||
m_config_manipulation.initialize_support_material_overhangs_queried(is_user_and_saved_preset && support_material_overhangs_queried);
|
m_config_manipulation.initialize_support_material_overhangs_queried((is_user_and_saved_preset || is_saved_in_3mf_preset) && support_material_overhangs_queried);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_config_manipulation.update_print_fff_config(m_config, true);
|
m_config_manipulation.update_print_fff_config(m_config, true);
|
||||||
@ -3931,6 +3936,8 @@ bool Tab::validate_custom_gcodes()
|
|||||||
bool valid = true;
|
bool valid = true;
|
||||||
for (auto opt_group : m_active_page->m_optgroups) {
|
for (auto opt_group : m_active_page->m_optgroups) {
|
||||||
assert(opt_group->opt_map().size() == 1);
|
assert(opt_group->opt_map().size() == 1);
|
||||||
|
if (!opt_group->is_activated())
|
||||||
|
break;
|
||||||
std::string key = opt_group->opt_map().begin()->first;
|
std::string key = opt_group->opt_map().begin()->first;
|
||||||
valid &= validate_custom_gcode(opt_group->title, boost::any_cast<std::string>(opt_group->get_value(key)));
|
valid &= validate_custom_gcode(opt_group->title, boost::any_cast<std::string>(opt_group->get_value(key)));
|
||||||
if (!valid)
|
if (!valid)
|
||||||
|
@ -891,18 +891,14 @@ void UnsavedChangesDialog::build(Preset::Type type, PresetCollection* dependent_
|
|||||||
{
|
{
|
||||||
if (!evt.IsChecked())
|
if (!evt.IsChecked())
|
||||||
return;
|
return;
|
||||||
wxString preferences_item = m_app_config_key == "default_action_on_new_project" ? _L("Ask for unsaved changes when creating new project") :
|
wxString preferences_item = m_app_config_key == "default_action_on_new_project" ? _L("Ask for unsaved changes when creating new project") :
|
||||||
m_app_config_key == "default_action_on_select_preset" ? _L("Ask for unsaved changes when selecting new preset") :
|
m_app_config_key == "default_action_on_select_preset" ? _L("Ask for unsaved changes when selecting new preset") :
|
||||||
_L("Ask for unsaved changes when ??closing application??") ;
|
_L("Ask to save unsaved changes when closing the application or when loading a new project") ;
|
||||||
wxString action = m_app_config_key == "default_action_on_new_project" ? _L("You will not be asked about the unsaved changes the next time you create new project") :
|
wxString action = m_app_config_key == "default_action_on_new_project" ? _L("You will not be asked about the unsaved changes the next time you create new project") :
|
||||||
m_app_config_key == "default_action_on_select_preset" ? _L("You will not be asked about the unsaved changes the next time you switch a preset") :
|
m_app_config_key == "default_action_on_select_preset" ? _L("You will not be asked about the unsaved changes the next time you switch a preset") :
|
||||||
_L("You will not be asked about the unsaved changes the next time you: \n"
|
_L("You will not be asked about the unsaved changes the next time you: \n"
|
||||||
"- close the application,\n"
|
"- Closing PrusaSlicer while some presets are modified,\n"
|
||||||
"- load project,\n"
|
"- Loading a new project while some presets are modified") ;
|
||||||
"- process Undo / Redo with a change of print technology,\n"
|
|
||||||
"- take/load snapshot,\n"
|
|
||||||
"- load config file/bundle,\n"
|
|
||||||
"- export config_bundle") ;
|
|
||||||
wxString msg = _L("PrusaSlicer will remember your action.") + "\n\n" + action + "\n\n" +
|
wxString msg = _L("PrusaSlicer will remember your action.") + "\n\n" + action + "\n\n" +
|
||||||
format_wxstr(_L("Visit \"Preferences\" and check \"%1%\"\nto be asked about unsaved changes again."), preferences_item);
|
format_wxstr(_L("Visit \"Preferences\" and check \"%1%\"\nto be asked about unsaved changes again."), preferences_item);
|
||||||
|
|
||||||
@ -1494,7 +1490,7 @@ DiffPresetDialog::DiffPresetDialog(MainFrame* mainframe)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
m_show_all_presets = new wxCheckBox(this, wxID_ANY, _L("Show all preset (including incompatible)"));
|
m_show_all_presets = new wxCheckBox(this, wxID_ANY, _L("Show all presets (including incompatible)"));
|
||||||
m_show_all_presets->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent&) {
|
m_show_all_presets->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent&) {
|
||||||
bool show_all = m_show_all_presets->GetValue();
|
bool show_all = m_show_all_presets->GetValue();
|
||||||
for (auto preset_combos : m_preset_combos) {
|
for (auto preset_combos : m_preset_combos) {
|
||||||
@ -1555,7 +1551,7 @@ void DiffPresetDialog::update_bundles_from_app()
|
|||||||
|
|
||||||
void DiffPresetDialog::show(Preset::Type type /* = Preset::TYPE_INVALID*/)
|
void DiffPresetDialog::show(Preset::Type type /* = Preset::TYPE_INVALID*/)
|
||||||
{
|
{
|
||||||
this->SetTitle(type == Preset::TYPE_INVALID ? _L("Compare Presets") : format_wxstr(_L("Compare %1% Presets"), wxGetApp().get_tab(type)->name()));
|
this->SetTitle(_L("Compare Presets"));
|
||||||
m_view_type = type;
|
m_view_type = type;
|
||||||
|
|
||||||
update_bundles_from_app();
|
update_bundles_from_app();
|
||||||
|
@ -49,7 +49,7 @@ MsgUpdateSlic3r::MsgUpdateSlic3r(const Semver &ver_current, const Semver &ver_on
|
|||||||
if (dev_version) {
|
if (dev_version) {
|
||||||
const std::string url = (boost::format(URL_DEV) % ver_online.to_string()).str();
|
const std::string url = (boost::format(URL_DEV) % ver_online.to_string()).str();
|
||||||
const wxString url_wx = from_u8(url);
|
const wxString url_wx = from_u8(url);
|
||||||
auto *link = new wxHyperlinkCtrl(this, wxID_ANY, _(L("Changelog && Download")), url_wx);
|
auto *link = new wxHyperlinkCtrl(this, wxID_ANY, _(L("Changelog & Download")), url_wx);
|
||||||
content_sizer->Add(link);
|
content_sizer->Add(link);
|
||||||
} else {
|
} else {
|
||||||
const auto lang_code = wxGetApp().current_language_code_safe().ToStdString();
|
const auto lang_code = wxGetApp().current_language_code_safe().ToStdString();
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
set(SLIC3R_APP_NAME "PrusaSlicer")
|
set(SLIC3R_APP_NAME "PrusaSlicer")
|
||||||
set(SLIC3R_APP_KEY "PrusaSlicer")
|
set(SLIC3R_APP_KEY "PrusaSlicer")
|
||||||
set(SLIC3R_VERSION "2.4.0-beta3")
|
set(SLIC3R_VERSION "2.4.0-beta4")
|
||||||
set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION}+UNKNOWN")
|
set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION}+UNKNOWN")
|
||||||
set(SLIC3R_RC_VERSION "2,4,0,0")
|
set(SLIC3R_RC_VERSION "2,4,0,0")
|
||||||
set(SLIC3R_RC_VERSION_DOTS "2.4.0.0")
|
set(SLIC3R_RC_VERSION_DOTS "2.4.0.0")
|
||||||
|
Loading…
Reference in New Issue
Block a user