Merge branch 'master' of https://github.com/prusa3d/PrusaSlicer into et_copy_and_paste
4
Build.PL
@ -3,7 +3,7 @@
|
|||||||
print "This script is currently used for installing Perl dependenices for running\n";
|
print "This script is currently used for installing Perl dependenices for running\n";
|
||||||
print "the libslic3r unit / integration tests through Perl prove.\n";
|
print "the libslic3r unit / integration tests through Perl prove.\n";
|
||||||
print "If you don't plan to run the unit / integration tests, you don't need to\n";
|
print "If you don't plan to run the unit / integration tests, you don't need to\n";
|
||||||
print "install these dependencies to build and run Slic3r.\n";
|
print "install these dependencies to build and run PrusaSlicer.\n";
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
@ -122,7 +122,7 @@ EOF
|
|||||||
}
|
}
|
||||||
|
|
||||||
print "\n";
|
print "\n";
|
||||||
print "In the next step, you need to build the Slic3r C++ library.\n";
|
print "In the next step, you need to build the PrusaSlicer C++ library.\n";
|
||||||
print "1) Create a build directory and change to it\n";
|
print "1) Create a build directory and change to it\n";
|
||||||
print "2) run cmake .. -DCMAKE_BUILD_TYPE=Release\n";
|
print "2) run cmake .. -DCMAKE_BUILD_TYPE=Release\n";
|
||||||
print "3) run make\n";
|
print "3) run make\n";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
project(Slic3r)
|
project(PrusaSlicer)
|
||||||
cmake_minimum_required(VERSION 3.2)
|
cmake_minimum_required(VERSION 3.2)
|
||||||
|
|
||||||
include("version.inc")
|
include("version.inc")
|
||||||
@ -22,11 +22,11 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(SLIC3R_STATIC "Compile Slic3r with static libraries (Boost, TBB, glew)" ${SLIC3R_STATIC_INITIAL})
|
option(SLIC3R_STATIC "Compile PrusaSlicer with static libraries (Boost, TBB, glew)" ${SLIC3R_STATIC_INITIAL})
|
||||||
option(SLIC3R_GUI "Compile Slic3r with GUI components (OpenGL, wxWidgets)" 1)
|
option(SLIC3R_GUI "Compile PrusaSlicer with GUI components (OpenGL, wxWidgets)" 1)
|
||||||
option(SLIC3R_FHS "Assume Slic3r is to be installed in a FHS directory structure" 0)
|
option(SLIC3R_FHS "Assume PrusaSlicer is to be installed in a FHS directory structure" 0)
|
||||||
option(SLIC3R_WX_STABLE "Build against wxWidgets stable (3.0) as oppsed to dev (3.1) on Linux" 0)
|
option(SLIC3R_WX_STABLE "Build against wxWidgets stable (3.0) as oppsed to dev (3.1) on Linux" 0)
|
||||||
option(SLIC3R_PROFILE "Compile Slic3r with an invasive Shiny profiler" 0)
|
option(SLIC3R_PROFILE "Compile PrusaSlicer with an invasive Shiny profiler" 0)
|
||||||
option(SLIC3R_PCH "Use precompiled headers" 1)
|
option(SLIC3R_PCH "Use precompiled headers" 1)
|
||||||
option(SLIC3R_MSVC_COMPILE_PARALLEL "Compile on Visual Studio in parallel" 1)
|
option(SLIC3R_MSVC_COMPILE_PARALLEL "Compile on Visual Studio in parallel" 1)
|
||||||
option(SLIC3R_MSVC_PDB "Generate PDB files on MSVC in Release mode" 1)
|
option(SLIC3R_MSVC_PDB "Generate PDB files on MSVC in Release mode" 1)
|
||||||
@ -59,7 +59,8 @@ if (MSVC)
|
|||||||
endif ()
|
endif ()
|
||||||
# /bigobj (Increase Number of Sections in .Obj file)
|
# /bigobj (Increase Number of Sections in .Obj file)
|
||||||
# error C3859: virtual memory range for PCH exceeded; please recompile with a command line option of '-Zm90' or greater
|
# error C3859: virtual memory range for PCH exceeded; please recompile with a command line option of '-Zm90' or greater
|
||||||
add_compile_options(-bigobj -Zm316)
|
# Generate symbols at every build target, even for the release.
|
||||||
|
add_compile_options(-bigobj -Zm316 /Zi)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Display and check CMAKE_PREFIX_PATH
|
# Display and check CMAKE_PREFIX_PATH
|
||||||
@ -207,13 +208,13 @@ endif()
|
|||||||
add_definitions(-DwxUSE_UNICODE -D_UNICODE -DUNICODE -DWXINTL_NO_GETTEXT_MACRO)
|
add_definitions(-DwxUSE_UNICODE -D_UNICODE -DUNICODE -DWXINTL_NO_GETTEXT_MACRO)
|
||||||
|
|
||||||
if (SLIC3R_PROFILE)
|
if (SLIC3R_PROFILE)
|
||||||
message("Slic3r will be built with a Shiny invasive profiler")
|
message("PrusaSlicer will be built with a Shiny invasive profiler")
|
||||||
add_definitions(-DSLIC3R_PROFILE)
|
add_definitions(-DSLIC3R_PROFILE)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Disable optimization even with debugging on.
|
# Disable optimization even with debugging on.
|
||||||
if (0)
|
if (0)
|
||||||
message(STATUS "Perl compiled without optimization. Disabling optimization for the Slic3r build.")
|
message(STATUS "Perl compiled without optimization. Disabling optimization for the PrusaSlicer build.")
|
||||||
message("Old CMAKE_CXX_FLAGS_RELEASE: ${CMAKE_CXX_FLAGS_RELEASE}")
|
message("Old CMAKE_CXX_FLAGS_RELEASE: ${CMAKE_CXX_FLAGS_RELEASE}")
|
||||||
message("Old CMAKE_CXX_FLAGS_RELWITHDEBINFO: ${CMAKE_CXX_FLAGS_RELEASE}")
|
message("Old CMAKE_CXX_FLAGS_RELWITHDEBINFO: ${CMAKE_CXX_FLAGS_RELEASE}")
|
||||||
message("Old CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS_RELEASE}")
|
message("Old CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS_RELEASE}")
|
||||||
@ -336,9 +337,9 @@ add_custom_target(pot
|
|||||||
COMMENT "Generate pot file from strings in the source tree"
|
COMMENT "Generate pot file from strings in the source tree"
|
||||||
)
|
)
|
||||||
|
|
||||||
# libslic3r, Slic3r GUI and the slic3r executable.
|
# libslic3r, PrusaSlicer GUI and the PrusaSlicer executable.
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT slic3r_app_console)
|
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT PrusaSlicer_app_console)
|
||||||
|
|
||||||
# Perl bindings, currently only used for the unit / integration tests of libslic3r.
|
# Perl bindings, currently only used for the unit / integration tests of libslic3r.
|
||||||
# Also runs the unit / integration tests.
|
# Also runs the unit / integration tests.
|
||||||
@ -360,7 +361,7 @@ endif()
|
|||||||
if (WIN32)
|
if (WIN32)
|
||||||
install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${CMAKE_INSTALL_PREFIX}/resources")
|
install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${CMAKE_INSTALL_PREFIX}/resources")
|
||||||
else ()
|
else ()
|
||||||
set(SLIC3R_FHS_RESOURCES "${CMAKE_INSTALL_FULL_DATAROOTDIR}/slic3r-prusa3d")
|
set(SLIC3R_FHS_RESOURCES "${CMAKE_INSTALL_FULL_DATAROOTDIR}/PrusaSlicer")
|
||||||
install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${SLIC3R_FHS_RESOURCES}")
|
install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${SLIC3R_FHS_RESOURCES}")
|
||||||
endif ()
|
endif ()
|
||||||
configure_file(${LIBDIR}/platform/unix/fhs.hpp.in ${LIBDIR_BIN}/platform/unix/fhs.hpp)
|
configure_file(${LIBDIR}/platform/unix/fhs.hpp.in ${LIBDIR_BIN}/platform/unix/fhs.hpp)
|
||||||
|
12
deps/CMakeLists.txt
vendored
@ -1,12 +1,12 @@
|
|||||||
#
|
#
|
||||||
# This CMake project downloads, configures and builds Slic3r PE dependencies on Unix and Windows.
|
# This CMake project downloads, configures and builds PrusaSlicer dependencies on Unix and Windows.
|
||||||
#
|
#
|
||||||
# When using this script, it's recommended to perform an out-of-source build using CMake.
|
# When using this script, it's recommended to perform an out-of-source build using CMake.
|
||||||
#
|
#
|
||||||
# All the dependencies are installed in a `destdir` directory in the root of the build directory,
|
# All the dependencies are installed in a `destdir` directory in the root of the build directory,
|
||||||
# in a traditional Unix-style prefix structure. The destdir can be used directly by CMake
|
# in a traditional Unix-style prefix structure. The destdir can be used directly by CMake
|
||||||
# when building Slic3r - to do this, set the CMAKE_PREFIX_PATH to ${destdir}/usr/local.
|
# when building PrusaSlicer - to do this, set the CMAKE_PREFIX_PATH to ${destdir}/usr/local.
|
||||||
# Warning: On UNIX/Linux, you also need to set -DSLIC3R_STATIC=1 when building Slic3r.
|
# Warning: On UNIX/Linux, you also need to set -DSLIC3R_STATIC=1 when building PrusaSlicer.
|
||||||
#
|
#
|
||||||
# For better clarity of console output, it's recommended to _not_ use a parallelized build
|
# For better clarity of console output, it's recommended to _not_ use a parallelized build
|
||||||
# for the top-level command, ie. use `make -j 1` or `ninja -j 1` to force single-threaded top-level
|
# for the top-level command, ie. use `make -j 1` or `ninja -j 1` to force single-threaded top-level
|
||||||
@ -20,7 +20,7 @@
|
|||||||
# therefore, unfortunatelly, the installation cannot be copied/moved elsewhere without re-installing wxWidgets.
|
# therefore, unfortunatelly, the installation cannot be copied/moved elsewhere without re-installing wxWidgets.
|
||||||
#
|
#
|
||||||
|
|
||||||
project(Slic3r-deps)
|
project(PrusaSlicer-deps)
|
||||||
cmake_minimum_required(VERSION 3.2)
|
cmake_minimum_required(VERSION 3.2)
|
||||||
|
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
@ -36,8 +36,8 @@ set(DESTDIR "${CMAKE_CURRENT_BINARY_DIR}/destdir" CACHE PATH "Destination direct
|
|||||||
option(DEP_DEBUG "Build debug variants (only applicable on Windows)" ON)
|
option(DEP_DEBUG "Build debug variants (only applicable on Windows)" ON)
|
||||||
option(DEP_WX_STABLE "Build against wxWidgets stable 3.0 as opposed to default 3.1 (Linux only)" OFF)
|
option(DEP_WX_STABLE "Build against wxWidgets stable 3.0 as opposed to default 3.1 (Linux only)" OFF)
|
||||||
|
|
||||||
message(STATUS "Slic3r deps DESTDIR: ${DESTDIR}")
|
message(STATUS "PrusaSlicer deps DESTDIR: ${DESTDIR}")
|
||||||
message(STATUS "Slic3r deps debug build: ${DEP_DEBUG}")
|
message(STATUS "PrusaSlicer deps debug build: ${DEP_DEBUG}")
|
||||||
|
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
if ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
|
if ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
|
||||||
|
2
deps/wxwidgets-pngprefix.h
vendored
@ -1,4 +1,4 @@
|
|||||||
// Patched in Slic3r: These two were missing:
|
// Patched in PrusaSlicer: These two were missing:
|
||||||
#define png_write_eXIf wx_png_write_eXIf
|
#define png_write_eXIf wx_png_write_eXIf
|
||||||
#define png_handle_eXIf wx_png_handle_eXIf
|
#define png_handle_eXIf wx_png_handle_eXIf
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ Alternatively, if you would like to use XCode GUI, modify the `cmake` command to
|
|||||||
|
|
||||||
cmake .. -GXcode -DCMAKE_PREFIX_PATH="$PWD/../deps/build/destdir/usr/local"
|
cmake .. -GXcode -DCMAKE_PREFIX_PATH="$PWD/../deps/build/destdir/usr/local"
|
||||||
|
|
||||||
and then open the `Slic3r.xcodeproj` file.
|
and then open the `PrusaSlicer.xcodeproj` file.
|
||||||
This should open up XCode where you can perform build using the GUI or perform other tasks.
|
This should open up XCode where you can perform build using the GUI or perform other tasks.
|
||||||
|
|
||||||
### Note on Mac OS X SDKs
|
### Note on Mac OS X SDKs
|
||||||
|
@ -44,8 +44,8 @@ Note that if you're building a 32-bit variant, you will need to change the `"Vis
|
|||||||
|
|
||||||
Conversely, if you're using Visual Studio version other than 2013, the version number will need to be changed accordingly.
|
Conversely, if you're using Visual Studio version other than 2013, the version number will need to be changed accordingly.
|
||||||
|
|
||||||
If `cmake` has finished without errors, go to the build directory and open the `Slic3r.sln` solution file in Visual Studio.
|
If `cmake` has finished without errors, go to the build directory and open the `PrusaSlicer.sln` solution file in Visual Studio.
|
||||||
Before building, make sure you're building the right project (use one of those starting with `slic3r_app_...`) and that you're building
|
Before building, make sure you're building the right project (use one of those starting with `PrusaSlicer_app_...`) and that you're building
|
||||||
with the right configuration, i.e. _Release_ vs. _Debug_. When unsure, choose _Release_.
|
with the right configuration, i.e. _Release_ vs. _Debug_. When unsure, choose _Release_.
|
||||||
Note that you won't be able to build a _Debug_ variant against a _Release_-only dependencies package.
|
Note that you won't be able to build a _Debug_ variant against a _Release_-only dependencies package.
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 9.0 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 2.8 KiB |
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2019-05-11 23:33+0200\n"
|
"POT-Creation-Date: 2019-05-13 15:02+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -164,7 +164,7 @@ msgstr ""
|
|||||||
msgid "Choose a file to import bed shape from (STL/OBJ/AMF/3MF/PRUSA):"
|
msgid "Choose a file to import bed shape from (STL/OBJ/AMF/3MF/PRUSA):"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/BedShapeDialog.cpp:333 src/slic3r/GUI/GUI_ObjectList.cpp:1443
|
#: src/slic3r/GUI/BedShapeDialog.cpp:333 src/slic3r/GUI/GUI_ObjectList.cpp:1438
|
||||||
msgid "Error!"
|
msgid "Error!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -312,7 +312,7 @@ msgstr ""
|
|||||||
msgid "All standard"
|
msgid "All standard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/ConfigWizard.cpp:189 src/slic3r/GUI/Tab.cpp:3006
|
#: src/slic3r/GUI/ConfigWizard.cpp:189 src/slic3r/GUI/Tab.cpp:3007
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -756,9 +756,9 @@ msgstr ""
|
|||||||
msgid "Add..."
|
msgid "Add..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GLCanvas3D.cpp:3444 src/slic3r/GUI/GUI_ObjectList.cpp:1269
|
#: src/slic3r/GUI/GLCanvas3D.cpp:3444 src/slic3r/GUI/GUI_ObjectList.cpp:1267
|
||||||
#: src/slic3r/GUI/Plater.cpp:2933 src/slic3r/GUI/Plater.cpp:2951
|
#: src/slic3r/GUI/Plater.cpp:2933 src/slic3r/GUI/Plater.cpp:2951
|
||||||
#: src/slic3r/GUI/Tab.cpp:2956
|
#: src/slic3r/GUI/Tab.cpp:2957
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1015,7 +1015,7 @@ msgstr ""
|
|||||||
msgid "Switch to editing mode"
|
msgid "Switch to editing mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI.cpp:142 src/slic3r/GUI/Tab.cpp:2815
|
#: src/slic3r/GUI/GUI.cpp:142 src/slic3r/GUI/Tab.cpp:2816
|
||||||
msgid "It's impossible to print multi-part object(s) with SLA technology."
|
msgid "It's impossible to print multi-part object(s) with SLA technology."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1023,7 +1023,7 @@ msgstr ""
|
|||||||
msgid "Please check and fix your object list."
|
msgid "Please check and fix your object list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI.cpp:144 src/slic3r/GUI/Tab.cpp:2817
|
#: src/slic3r/GUI/GUI.cpp:144 src/slic3r/GUI/Tab.cpp:2818
|
||||||
msgid "Attention!"
|
msgid "Attention!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1099,7 +1099,7 @@ msgstr ""
|
|||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:539 src/slic3r/GUI/Tab.cpp:1030
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:539 src/slic3r/GUI/Tab.cpp:1030
|
||||||
#: src/slic3r/GUI/Tab.cpp:1045 src/slic3r/GUI/Tab.cpp:1143
|
#: src/slic3r/GUI/Tab.cpp:1045 src/slic3r/GUI/Tab.cpp:1143
|
||||||
#: src/slic3r/GUI/Tab.cpp:1146 src/slic3r/GUI/Tab.cpp:1520
|
#: src/slic3r/GUI/Tab.cpp:1146 src/slic3r/GUI/Tab.cpp:1520
|
||||||
#: src/slic3r/GUI/Tab.cpp:1946 src/slic3r/GUI/Tab.cpp:3460
|
#: src/slic3r/GUI/Tab.cpp:1946 src/slic3r/GUI/Tab.cpp:3461
|
||||||
#: src/slic3r/GUI/wxExtensions.cpp:2510 src/libslic3r/PrintConfig.cpp:73
|
#: src/slic3r/GUI/wxExtensions.cpp:2510 src/libslic3r/PrintConfig.cpp:73
|
||||||
#: src/libslic3r/PrintConfig.cpp:188 src/libslic3r/PrintConfig.cpp:351
|
#: src/libslic3r/PrintConfig.cpp:188 src/libslic3r/PrintConfig.cpp:351
|
||||||
#: src/libslic3r/PrintConfig.cpp:989 src/libslic3r/PrintConfig.cpp:2200
|
#: src/libslic3r/PrintConfig.cpp:989 src/libslic3r/PrintConfig.cpp:2200
|
||||||
@ -1169,7 +1169,7 @@ msgstr ""
|
|||||||
msgid "The presets on the following tabs were modified"
|
msgid "The presets on the following tabs were modified"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_App.cpp:831 src/slic3r/GUI/Tab.cpp:2803
|
#: src/slic3r/GUI/GUI_App.cpp:831 src/slic3r/GUI/Tab.cpp:2804
|
||||||
msgid "Discard changes and continue anyway?"
|
msgid "Discard changes and continue anyway?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1267,8 +1267,8 @@ msgid "Extrusion Width"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:87 src/slic3r/GUI/GUI_ObjectList.cpp:541
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:87 src/slic3r/GUI/GUI_ObjectList.cpp:541
|
||||||
#: src/slic3r/GUI/Plater.cpp:429 src/slic3r/GUI/Tab.cpp:3422
|
#: src/slic3r/GUI/Plater.cpp:429 src/slic3r/GUI/Tab.cpp:3423
|
||||||
#: src/slic3r/GUI/Tab.cpp:3423 src/libslic3r/PrintConfig.cpp:2388
|
#: src/slic3r/GUI/Tab.cpp:3424 src/libslic3r/PrintConfig.cpp:2388
|
||||||
#: src/libslic3r/PrintConfig.cpp:2395 src/libslic3r/PrintConfig.cpp:2404
|
#: src/libslic3r/PrintConfig.cpp:2395 src/libslic3r/PrintConfig.cpp:2404
|
||||||
#: src/libslic3r/PrintConfig.cpp:2413 src/libslic3r/PrintConfig.cpp:2423
|
#: src/libslic3r/PrintConfig.cpp:2413 src/libslic3r/PrintConfig.cpp:2423
|
||||||
#: src/libslic3r/PrintConfig.cpp:2449 src/libslic3r/PrintConfig.cpp:2456
|
#: src/libslic3r/PrintConfig.cpp:2449 src/libslic3r/PrintConfig.cpp:2456
|
||||||
@ -1280,7 +1280,7 @@ msgid "Supports"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:88 src/slic3r/GUI/GUI_ObjectList.cpp:542
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:88 src/slic3r/GUI/GUI_ObjectList.cpp:542
|
||||||
#: src/slic3r/GUI/Tab.cpp:3450 src/slic3r/GUI/Tab.cpp:3451
|
#: src/slic3r/GUI/Tab.cpp:3451 src/slic3r/GUI/Tab.cpp:3452
|
||||||
#: src/libslic3r/PrintConfig.cpp:2541 src/libslic3r/PrintConfig.cpp:2548
|
#: src/libslic3r/PrintConfig.cpp:2541 src/libslic3r/PrintConfig.cpp:2548
|
||||||
#: src/libslic3r/PrintConfig.cpp:2562 src/libslic3r/PrintConfig.cpp:2572
|
#: src/libslic3r/PrintConfig.cpp:2562 src/libslic3r/PrintConfig.cpp:2572
|
||||||
#: src/libslic3r/PrintConfig.cpp:2585 src/libslic3r/PrintConfig.cpp:2594
|
#: src/libslic3r/PrintConfig.cpp:2585 src/libslic3r/PrintConfig.cpp:2594
|
||||||
@ -1329,9 +1329,9 @@ msgid "Right button click the icon to change the object settings"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:357 src/slic3r/GUI/GUI_ObjectList.cpp:378
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:357 src/slic3r/GUI/GUI_ObjectList.cpp:378
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:390 src/slic3r/GUI/GUI_ObjectList.cpp:2855
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:390 src/slic3r/GUI/GUI_ObjectList.cpp:2846
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2865
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2856
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2897 src/slic3r/GUI/wxExtensions.cpp:499
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2888 src/slic3r/GUI/wxExtensions.cpp:499
|
||||||
#: src/slic3r/GUI/wxExtensions.cpp:524
|
#: src/slic3r/GUI/wxExtensions.cpp:524
|
||||||
msgid "default"
|
msgid "default"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1343,7 +1343,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:876 src/slic3r/GUI/GUI_ObjectList.cpp:1151
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:876 src/slic3r/GUI/GUI_ObjectList.cpp:1151
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1157
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1157
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1389
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1384
|
||||||
#, possible-c-format
|
#, possible-c-format
|
||||||
msgid "Quick Add Settings (%s)"
|
msgid "Quick Add Settings (%s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1383,150 +1383,167 @@ msgid "Change type"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1204
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1204
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1343
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1338
|
||||||
msgid "Set as a Separated Object"
|
msgid "Set as a Separated Object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1212
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1210
|
||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1222
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1220
|
||||||
msgid "Fix through the Netfabb"
|
msgid "Fix through the Netfabb"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1231 src/slic3r/GUI/Plater.cpp:2969
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1229 src/slic3r/GUI/Plater.cpp:2969
|
||||||
msgid "Export as STL"
|
msgid "Export as STL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1238
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1236
|
||||||
msgid "Change extruder"
|
msgid "Change extruder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1257 src/libslic3r/PrintConfig.cpp:300
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1255 src/libslic3r/PrintConfig.cpp:300
|
||||||
msgid "Default"
|
msgid "Default"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1263
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1261
|
||||||
msgid "Select new extruder for the object/part"
|
msgid "Select new extruder for the object/part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1343
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1338
|
||||||
msgid "Set as a Separated Objects"
|
msgid "Set as a Separated Objects"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1556
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1551
|
||||||
msgid "Generic"
|
msgid "Generic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1699
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1694
|
||||||
msgid "You can't delete the last solid part from object."
|
msgid "You can't delete the last solid part from object."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1716
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1711
|
||||||
msgid "You can't delete the last intance from object."
|
msgid "You can't delete the last intance from object."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1742 src/slic3r/GUI/Plater.cpp:2306
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1737 src/slic3r/GUI/Plater.cpp:2306
|
||||||
msgid ""
|
msgid ""
|
||||||
"The selected object couldn't be split because it contains only one part."
|
"The selected object couldn't be split because it contains only one part."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1851
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1846
|
||||||
msgid "Group manipulation"
|
msgid "Group manipulation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1863
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1858
|
||||||
msgid "Object manipulation"
|
msgid "Object manipulation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1873
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1868
|
||||||
msgid "Object Settings to modify"
|
msgid "Object Settings to modify"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1877
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1872
|
||||||
msgid "Part Settings to modify"
|
msgid "Part Settings to modify"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1886
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1881
|
||||||
msgid "Part manipulation"
|
msgid "Part manipulation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1892
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:1887
|
||||||
msgid "Instance manipulation"
|
msgid "Instance manipulation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2417
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2412
|
||||||
msgid "Object or Instance"
|
msgid "Object or Instance"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2417
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2412
|
||||||
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2543
|
||||||
msgid "Part"
|
msgid "Part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2419
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2414
|
||||||
msgid "Unsupported selection"
|
msgid "Unsupported selection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2420
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2415
|
||||||
#, possible-c-format
|
#, possible-c-format
|
||||||
msgid "You started your selection with %s Item."
|
msgid "You started your selection with %s Item."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2421
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2416
|
||||||
#, possible-c-format
|
#, possible-c-format
|
||||||
msgid "In this mode you can select only other %s Items%s"
|
msgid "In this mode you can select only other %s Items%s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2424
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2419
|
||||||
msgid "of a current Object"
|
msgid "of a current Object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2429
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2424
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2502 src/slic3r/GUI/Plater.cpp:118
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2497 src/slic3r/GUI/Plater.cpp:118
|
||||||
msgid "Info"
|
msgid "Info"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2543
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2538
|
||||||
msgid "You can't change a type of the last solid part of the object."
|
msgid "You can't change a type of the last solid part of the object."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2550
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2543
|
||||||
|
msgid "Modifier"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2543
|
||||||
|
msgid "Support Enforcer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2543
|
||||||
|
msgid "Support Blocker"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2545
|
||||||
|
msgid "Type:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2545
|
||||||
msgid "Select type of part"
|
msgid "Select type of part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2714
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2709
|
||||||
msgid "Enter new name"
|
msgid "Enter new name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2714
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2709
|
||||||
msgid "Renaming"
|
msgid "Renaming"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2730
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2725
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2824 src/slic3r/GUI/Tab.cpp:3303
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2819 src/slic3r/GUI/Tab.cpp:3304
|
||||||
#: src/slic3r/GUI/Tab.cpp:3307
|
#: src/slic3r/GUI/Tab.cpp:3308
|
||||||
msgid "The supplied name is not valid;"
|
msgid "The supplied name is not valid;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2731
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2726
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2825 src/slic3r/GUI/Tab.cpp:3304
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2820 src/slic3r/GUI/Tab.cpp:3305
|
||||||
msgid "the following characters are not allowed:"
|
msgid "the following characters are not allowed:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2845
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2836
|
||||||
msgid "Set extruder for selected items"
|
msgid "Set extruder for selected items"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2846
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2837
|
||||||
msgid "Select extruder number for selected objects and/or parts"
|
msgid "Select extruder number for selected objects and/or parts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2859
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2850
|
||||||
msgid "Select extruder number:"
|
msgid "Select extruder number:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2860
|
#: src/slic3r/GUI/GUI_ObjectList.cpp:2851
|
||||||
msgid "This extruder will be set for selected items"
|
msgid "This extruder will be set for selected items"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1934,9 +1951,14 @@ msgstr ""
|
|||||||
msgid "Layers Slider Shortcuts"
|
msgid "Layers Slider Shortcuts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/slic3r/GUI/MainFrame.cpp:36
|
||||||
|
msgid "based on Slic3r"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/MainFrame.cpp:61
|
#: src/slic3r/GUI/MainFrame.cpp:61
|
||||||
msgid ""
|
msgid ""
|
||||||
" - Remember to check for updates at http://github.com/prusa3d/slic3r/releases"
|
" - Remember to check for updates at http://github.com/prusa3d/PrusaSlicer/"
|
||||||
|
"releases"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/MainFrame.cpp:163
|
#: src/slic3r/GUI/MainFrame.cpp:163
|
||||||
@ -2405,7 +2427,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: src/slic3r/GUI/MainFrame.cpp:713 src/slic3r/GUI/Plater.cpp:2439
|
#: src/slic3r/GUI/MainFrame.cpp:713 src/slic3r/GUI/Plater.cpp:2439
|
||||||
#: src/slic3r/GUI/Plater.cpp:3658 src/slic3r/GUI/Tab.cpp:1163
|
#: src/slic3r/GUI/Plater.cpp:3658 src/slic3r/GUI/Tab.cpp:1163
|
||||||
#: src/slic3r/GUI/Tab.cpp:3461
|
#: src/slic3r/GUI/Tab.cpp:3462
|
||||||
msgid "Slicing"
|
msgid "Slicing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2953,7 +2975,11 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Preferences.cpp:63
|
#: src/slic3r/GUI/Preferences.cpp:63
|
||||||
msgid "If enabled, Slic3r checks for new versions of "
|
msgid ""
|
||||||
|
"If enabled, PrusaSlicer will check for the new versions of itself online. "
|
||||||
|
"When a new version becomes available a notification is displayed at the next "
|
||||||
|
"application startup (never during program usage). This is only a "
|
||||||
|
"notification mechanisms, no automatic installation is done."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Preferences.cpp:71
|
#: src/slic3r/GUI/Preferences.cpp:71
|
||||||
@ -3334,7 +3360,7 @@ msgstr ""
|
|||||||
msgid "default SLA print profile"
|
msgid "default SLA print profile"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:1001 src/slic3r/GUI/Tab.cpp:3416
|
#: src/slic3r/GUI/Tab.cpp:1001 src/slic3r/GUI/Tab.cpp:3417
|
||||||
msgid "Layers and perimeters"
|
msgid "Layers and perimeters"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3418,7 +3444,7 @@ msgstr ""
|
|||||||
msgid "Other"
|
msgid "Other"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:1172 src/slic3r/GUI/Tab.cpp:3464
|
#: src/slic3r/GUI/Tab.cpp:1172 src/slic3r/GUI/Tab.cpp:3465
|
||||||
msgid "Output options"
|
msgid "Output options"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3430,7 +3456,7 @@ msgstr ""
|
|||||||
msgid "Extruder clearance (mm)"
|
msgid "Extruder clearance (mm)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:1184 src/slic3r/GUI/Tab.cpp:3465
|
#: src/slic3r/GUI/Tab.cpp:1184 src/slic3r/GUI/Tab.cpp:3466
|
||||||
msgid "Output file"
|
msgid "Output file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3442,19 +3468,19 @@ msgstr ""
|
|||||||
#: src/slic3r/GUI/Tab.cpp:1581 src/slic3r/GUI/Tab.cpp:1582
|
#: src/slic3r/GUI/Tab.cpp:1581 src/slic3r/GUI/Tab.cpp:1582
|
||||||
#: src/slic3r/GUI/Tab.cpp:1991 src/slic3r/GUI/Tab.cpp:1992
|
#: src/slic3r/GUI/Tab.cpp:1991 src/slic3r/GUI/Tab.cpp:1992
|
||||||
#: src/slic3r/GUI/Tab.cpp:2085 src/slic3r/GUI/Tab.cpp:2086
|
#: src/slic3r/GUI/Tab.cpp:2085 src/slic3r/GUI/Tab.cpp:2086
|
||||||
#: src/slic3r/GUI/Tab.cpp:3353 src/slic3r/GUI/Tab.cpp:3354
|
#: src/slic3r/GUI/Tab.cpp:3354 src/slic3r/GUI/Tab.cpp:3355
|
||||||
msgid "Notes"
|
msgid "Notes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:1204 src/slic3r/GUI/Tab.cpp:1589
|
#: src/slic3r/GUI/Tab.cpp:1204 src/slic3r/GUI/Tab.cpp:1589
|
||||||
#: src/slic3r/GUI/Tab.cpp:1998 src/slic3r/GUI/Tab.cpp:2092
|
#: src/slic3r/GUI/Tab.cpp:1998 src/slic3r/GUI/Tab.cpp:2092
|
||||||
#: src/slic3r/GUI/Tab.cpp:3361 src/slic3r/GUI/Tab.cpp:3470
|
#: src/slic3r/GUI/Tab.cpp:3362 src/slic3r/GUI/Tab.cpp:3471
|
||||||
msgid "Dependencies"
|
msgid "Dependencies"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:1205 src/slic3r/GUI/Tab.cpp:1590
|
#: src/slic3r/GUI/Tab.cpp:1205 src/slic3r/GUI/Tab.cpp:1590
|
||||||
#: src/slic3r/GUI/Tab.cpp:1999 src/slic3r/GUI/Tab.cpp:2093
|
#: src/slic3r/GUI/Tab.cpp:1999 src/slic3r/GUI/Tab.cpp:2093
|
||||||
#: src/slic3r/GUI/Tab.cpp:3362 src/slic3r/GUI/Tab.cpp:3471
|
#: src/slic3r/GUI/Tab.cpp:3363 src/slic3r/GUI/Tab.cpp:3472
|
||||||
msgid "Profile dependencies"
|
msgid "Profile dependencies"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3617,7 +3643,7 @@ msgid "Size and coordinates"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:1824 src/slic3r/GUI/Tab.cpp:2025
|
#: src/slic3r/GUI/Tab.cpp:1824 src/slic3r/GUI/Tab.cpp:2025
|
||||||
#: src/slic3r/GUI/Tab.cpp:3008
|
#: src/slic3r/GUI/Tab.cpp:3009
|
||||||
msgid "Set"
|
msgid "Set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3681,7 +3707,7 @@ msgstr ""
|
|||||||
msgid "Tilt time"
|
msgid "Tilt time"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2065 src/slic3r/GUI/Tab.cpp:3335
|
#: src/slic3r/GUI/Tab.cpp:2065 src/slic3r/GUI/Tab.cpp:3336
|
||||||
msgid "Corrections"
|
msgid "Corrections"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3760,106 +3786,106 @@ msgid ""
|
|||||||
"setups)"
|
"setups)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2448
|
#: src/slic3r/GUI/Tab.cpp:2449
|
||||||
msgid ""
|
msgid ""
|
||||||
"The Wipe option is not available when using the Firmware Retraction mode.\n"
|
"The Wipe option is not available when using the Firmware Retraction mode.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Shall I disable it in order to enable Firmware Retraction?"
|
"Shall I disable it in order to enable Firmware Retraction?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2450
|
#: src/slic3r/GUI/Tab.cpp:2451
|
||||||
msgid "Firmware Retraction"
|
msgid "Firmware Retraction"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2776
|
|
||||||
#, possible-c-format
|
|
||||||
msgid "Default preset (%s)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2777
|
#: src/slic3r/GUI/Tab.cpp:2777
|
||||||
#, possible-c-format
|
#, possible-c-format
|
||||||
|
msgid "Default preset (%s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/slic3r/GUI/Tab.cpp:2778
|
||||||
|
#, possible-c-format
|
||||||
msgid "Preset (%s)"
|
msgid "Preset (%s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2794
|
#: src/slic3r/GUI/Tab.cpp:2795
|
||||||
msgid "has the following unsaved changes:"
|
msgid "has the following unsaved changes:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2797
|
#: src/slic3r/GUI/Tab.cpp:2798
|
||||||
msgid "is not compatible with printer"
|
msgid "is not compatible with printer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2798
|
#: src/slic3r/GUI/Tab.cpp:2799
|
||||||
msgid "is not compatible with print profile"
|
msgid "is not compatible with print profile"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2800
|
#: src/slic3r/GUI/Tab.cpp:2801
|
||||||
msgid "and it has the following unsaved changes:"
|
msgid "and it has the following unsaved changes:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2804
|
#: src/slic3r/GUI/Tab.cpp:2805
|
||||||
msgid "Unsaved Changes"
|
msgid "Unsaved Changes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2816
|
#: src/slic3r/GUI/Tab.cpp:2817
|
||||||
msgid "Please check your object list before preset changing."
|
msgid "Please check your object list before preset changing."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2895
|
#: src/slic3r/GUI/Tab.cpp:2896
|
||||||
msgid "%1% - Copy"
|
msgid "%1% - Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2918
|
#: src/slic3r/GUI/Tab.cpp:2919
|
||||||
msgid "The supplied name is empty. It can't be saved."
|
msgid "The supplied name is empty. It can't be saved."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2923
|
#: src/slic3r/GUI/Tab.cpp:2924
|
||||||
msgid "Cannot overwrite a system profile."
|
msgid "Cannot overwrite a system profile."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2927
|
#: src/slic3r/GUI/Tab.cpp:2928
|
||||||
msgid "Cannot overwrite an external profile."
|
msgid "Cannot overwrite an external profile."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2953
|
#: src/slic3r/GUI/Tab.cpp:2954
|
||||||
msgid "remove"
|
msgid "remove"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2953
|
#: src/slic3r/GUI/Tab.cpp:2954
|
||||||
msgid "delete"
|
msgid "delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. TRN remove/delete
|
#. TRN remove/delete
|
||||||
#: src/slic3r/GUI/Tab.cpp:2955
|
#: src/slic3r/GUI/Tab.cpp:2956
|
||||||
msgid "Are you sure you want to %1% the selected preset?"
|
msgid "Are you sure you want to %1% the selected preset?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:2956
|
#: src/slic3r/GUI/Tab.cpp:2957
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. TRN Remove/Delete
|
#. TRN Remove/Delete
|
||||||
#: src/slic3r/GUI/Tab.cpp:2958
|
#: src/slic3r/GUI/Tab.cpp:2959
|
||||||
msgid "%1% Preset"
|
msgid "%1% Preset"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3084
|
#: src/slic3r/GUI/Tab.cpp:3085
|
||||||
msgid "LOCKED LOCK"
|
msgid "LOCKED LOCK"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. TRN Description for "LOCKED LOCK"
|
#. TRN Description for "LOCKED LOCK"
|
||||||
#: src/slic3r/GUI/Tab.cpp:3086
|
#: src/slic3r/GUI/Tab.cpp:3087
|
||||||
msgid ""
|
msgid ""
|
||||||
"indicates that the settings are the same as the system values for the "
|
"indicates that the settings are the same as the system values for the "
|
||||||
"current option group"
|
"current option group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3088
|
#: src/slic3r/GUI/Tab.cpp:3089
|
||||||
msgid "UNLOCKED LOCK"
|
msgid "UNLOCKED LOCK"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. TRN Description for "UNLOCKED LOCK"
|
#. TRN Description for "UNLOCKED LOCK"
|
||||||
#: src/slic3r/GUI/Tab.cpp:3090
|
#: src/slic3r/GUI/Tab.cpp:3091
|
||||||
msgid ""
|
msgid ""
|
||||||
"indicates that some settings were changed and are not equal to the system "
|
"indicates that some settings were changed and are not equal to the system "
|
||||||
"values for the current option group.\n"
|
"values for the current option group.\n"
|
||||||
@ -3867,23 +3893,23 @@ msgid ""
|
|||||||
"to the system values."
|
"to the system values."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3095
|
#: src/slic3r/GUI/Tab.cpp:3096
|
||||||
msgid "WHITE BULLET"
|
msgid "WHITE BULLET"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. TRN Description for "WHITE BULLET"
|
#. TRN Description for "WHITE BULLET"
|
||||||
#: src/slic3r/GUI/Tab.cpp:3097
|
#: src/slic3r/GUI/Tab.cpp:3098
|
||||||
msgid ""
|
msgid ""
|
||||||
"for the left button: \tindicates a non-system preset,\n"
|
"for the left button: \tindicates a non-system preset,\n"
|
||||||
"for the right button: \tindicates that the settings hasn't been modified."
|
"for the right button: \tindicates that the settings hasn't been modified."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3100
|
#: src/slic3r/GUI/Tab.cpp:3101
|
||||||
msgid "BACK ARROW"
|
msgid "BACK ARROW"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. TRN Description for "BACK ARROW"
|
#. TRN Description for "BACK ARROW"
|
||||||
#: src/slic3r/GUI/Tab.cpp:3102
|
#: src/slic3r/GUI/Tab.cpp:3103
|
||||||
msgid ""
|
msgid ""
|
||||||
"indicates that the settings were changed and are not equal to the last saved "
|
"indicates that the settings were changed and are not equal to the last saved "
|
||||||
"preset for the current option group.\n"
|
"preset for the current option group.\n"
|
||||||
@ -3891,30 +3917,30 @@ msgid ""
|
|||||||
"to the last saved preset."
|
"to the last saved preset."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3127
|
#: src/slic3r/GUI/Tab.cpp:3128
|
||||||
msgid ""
|
msgid ""
|
||||||
"LOCKED LOCK icon indicates that the settings are the same as the system "
|
"LOCKED LOCK icon indicates that the settings are the same as the system "
|
||||||
"values for the current option group"
|
"values for the current option group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3129
|
#: src/slic3r/GUI/Tab.cpp:3130
|
||||||
msgid ""
|
msgid ""
|
||||||
"UNLOCKED LOCK icon indicates that some settings were changed and are not "
|
"UNLOCKED LOCK icon indicates that some settings were changed and are not "
|
||||||
"equal to the system values for the current option group.\n"
|
"equal to the system values for the current option group.\n"
|
||||||
"Click to reset all settings for current option group to the system values."
|
"Click to reset all settings for current option group to the system values."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3132
|
#: src/slic3r/GUI/Tab.cpp:3133
|
||||||
msgid "WHITE BULLET icon indicates a non system preset."
|
msgid "WHITE BULLET icon indicates a non system preset."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3135
|
#: src/slic3r/GUI/Tab.cpp:3136
|
||||||
msgid ""
|
msgid ""
|
||||||
"WHITE BULLET icon indicates that the settings are the same as in the last "
|
"WHITE BULLET icon indicates that the settings are the same as in the last "
|
||||||
"saved preset for the current option group."
|
"saved preset for the current option group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3137
|
#: src/slic3r/GUI/Tab.cpp:3138
|
||||||
msgid ""
|
msgid ""
|
||||||
"BACK ARROW icon indicates that the settings were changed and are not equal "
|
"BACK ARROW icon indicates that the settings were changed and are not equal "
|
||||||
"to the last saved preset for the current option group.\n"
|
"to the last saved preset for the current option group.\n"
|
||||||
@ -3922,25 +3948,25 @@ msgid ""
|
|||||||
"preset."
|
"preset."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3143
|
#: src/slic3r/GUI/Tab.cpp:3144
|
||||||
msgid ""
|
msgid ""
|
||||||
"LOCKED LOCK icon indicates that the value is the same as the system value."
|
"LOCKED LOCK icon indicates that the value is the same as the system value."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3144
|
#: src/slic3r/GUI/Tab.cpp:3145
|
||||||
msgid ""
|
msgid ""
|
||||||
"UNLOCKED LOCK icon indicates that the value was changed and is not equal to "
|
"UNLOCKED LOCK icon indicates that the value was changed and is not equal to "
|
||||||
"the system value.\n"
|
"the system value.\n"
|
||||||
"Click to reset current value to the system value."
|
"Click to reset current value to the system value."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3150
|
#: src/slic3r/GUI/Tab.cpp:3151
|
||||||
msgid ""
|
msgid ""
|
||||||
"WHITE BULLET icon indicates that the value is the same as in the last saved "
|
"WHITE BULLET icon indicates that the value is the same as in the last saved "
|
||||||
"preset."
|
"preset."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3151
|
#: src/slic3r/GUI/Tab.cpp:3152
|
||||||
msgid ""
|
msgid ""
|
||||||
"BACK ARROW icon indicates that the value was changed and is not equal to the "
|
"BACK ARROW icon indicates that the value was changed and is not equal to the "
|
||||||
"last saved preset.\n"
|
"last saved preset.\n"
|
||||||
@ -3948,60 +3974,60 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. TRN Preset
|
#. TRN Preset
|
||||||
#: src/slic3r/GUI/Tab.cpp:3264
|
#: src/slic3r/GUI/Tab.cpp:3265
|
||||||
#, possible-c-format
|
#, possible-c-format
|
||||||
msgid "Save %s as:"
|
msgid "Save %s as:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3308
|
#: src/slic3r/GUI/Tab.cpp:3309
|
||||||
msgid "the following postfix are not allowed:"
|
msgid "the following postfix are not allowed:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3312
|
#: src/slic3r/GUI/Tab.cpp:3313
|
||||||
msgid "The supplied name is not available."
|
msgid "The supplied name is not available."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3325
|
#: src/slic3r/GUI/Tab.cpp:3326
|
||||||
msgid "Material"
|
msgid "Material"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3327 src/slic3r/GUI/Tab.cpp:3418
|
#: src/slic3r/GUI/Tab.cpp:3328 src/slic3r/GUI/Tab.cpp:3419
|
||||||
msgid "Layers"
|
msgid "Layers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3331
|
#: src/slic3r/GUI/Tab.cpp:3332
|
||||||
msgid "Exposure"
|
msgid "Exposure"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3426
|
#: src/slic3r/GUI/Tab.cpp:3427
|
||||||
msgid "Support head"
|
msgid "Support head"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3431
|
#: src/slic3r/GUI/Tab.cpp:3432
|
||||||
msgid "Support pillar"
|
msgid "Support pillar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3441
|
#: src/slic3r/GUI/Tab.cpp:3442
|
||||||
msgid "Connection of the support sticks and junctions"
|
msgid "Connection of the support sticks and junctions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3446
|
#: src/slic3r/GUI/Tab.cpp:3447
|
||||||
msgid "Automatic generation"
|
msgid "Automatic generation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3508
|
#: src/slic3r/GUI/Tab.cpp:3509
|
||||||
msgid "Head penetration should not be greater than the head width."
|
msgid "Head penetration should not be greater than the head width."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3509
|
#: src/slic3r/GUI/Tab.cpp:3510
|
||||||
msgid "Invalid Head penetration"
|
msgid "Invalid Head penetration"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3521
|
#: src/slic3r/GUI/Tab.cpp:3522
|
||||||
msgid "Pinhead diameter should be smaller than the pillar diameter."
|
msgid "Pinhead diameter should be smaller than the pillar diameter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/slic3r/GUI/Tab.cpp:3522
|
#: src/slic3r/GUI/Tab.cpp:3523
|
||||||
msgid "Invalid pinhead diameter"
|
msgid "Invalid pinhead diameter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
project(Slic3r-native)
|
project(PrusaSlicer-native)
|
||||||
|
|
||||||
add_subdirectory(admesh)
|
add_subdirectory(admesh)
|
||||||
add_subdirectory(avrdude)
|
add_subdirectory(avrdude)
|
||||||
@ -64,39 +64,36 @@ endif()
|
|||||||
|
|
||||||
# Create a slic3r executable
|
# Create a slic3r executable
|
||||||
# Process mainfests for various platforms.
|
# Process mainfests for various platforms.
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/platform/msw/slic3r.rc.in ${CMAKE_CURRENT_BINARY_DIR}/slic3r.rc @ONLY)
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/platform/msw/PrusaSlicer.rc.in ${CMAKE_CURRENT_BINARY_DIR}/PrusaSlicer.rc @ONLY)
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/platform/msw/slic3r.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/slic3r.manifest @ONLY)
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/platform/msw/PrusaSlicer.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/PrusaSlicer.manifest @ONLY)
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/platform/osx/Info.plist.in ${CMAKE_CURRENT_BINARY_DIR}/Info.plist @ONLY)
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/platform/osx/Info.plist.in ${CMAKE_CURRENT_BINARY_DIR}/Info.plist @ONLY)
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
add_library(slic3r SHARED slic3r.cpp slic3r.hpp)
|
add_library(PrusaSlicer SHARED PrusaSlicer.cpp PrusaSlicer.hpp)
|
||||||
else ()
|
else ()
|
||||||
add_executable(slic3r slic3r.cpp slic3r.hpp)
|
add_executable(PrusaSlicer PrusaSlicer.cpp PrusaSlicer.hpp)
|
||||||
endif ()
|
endif ()
|
||||||
if (NOT MSVC)
|
if (NOT MSVC)
|
||||||
if(SLIC3R_GUI)
|
# Binary name on unix like systems (OSX, Linux)
|
||||||
set_target_properties(slic3r PROPERTIES OUTPUT_NAME "slic3r-gui")
|
set_target_properties(PrusaSlicer PROPERTIES OUTPUT_NAME "prusa-slicer")
|
||||||
else()
|
|
||||||
set_target_properties(slic3r PROPERTIES OUTPUT_NAME "slic3r-console")
|
|
||||||
endif()
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
target_link_libraries(slic3r libslic3r)
|
target_link_libraries(PrusaSlicer libslic3r)
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
# add_compile_options(-stdlib=libc++)
|
# add_compile_options(-stdlib=libc++)
|
||||||
# add_definitions(-DBOOST_THREAD_DONT_USE_CHRONO -DBOOST_NO_CXX11_RVALUE_REFERENCES -DBOOST_THREAD_USES_MOVE)
|
# add_definitions(-DBOOST_THREAD_DONT_USE_CHRONO -DBOOST_NO_CXX11_RVALUE_REFERENCES -DBOOST_THREAD_USES_MOVE)
|
||||||
# -liconv: boost links to libiconv by default
|
# -liconv: boost links to libiconv by default
|
||||||
target_link_libraries(slic3r "-liconv -framework IOKit" "-framework CoreFoundation" -lc++)
|
target_link_libraries(PrusaSlicer "-liconv -framework IOKit" "-framework CoreFoundation" -lc++)
|
||||||
elseif (MSVC)
|
elseif (MSVC)
|
||||||
# Manifest is provided through slic3r.rc, don't generate your own.
|
# Manifest is provided through PrusaSlicer.rc, don't generate your own.
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO")
|
||||||
else ()
|
else ()
|
||||||
# Boost on Raspberry-Pi does not link to pthreads explicitely.
|
# Boost on Raspberry-Pi does not link to pthreads explicitely.
|
||||||
target_link_libraries(slic3r ${CMAKE_DL_LIBS} -lstdc++ Threads::Threads)
|
target_link_libraries(PrusaSlicer ${CMAKE_DL_LIBS} -lstdc++ Threads::Threads)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Add the Slic3r GUI library, libcurl, OpenGL and GLU libraries.
|
# Add the Slic3r GUI library, libcurl, OpenGL and GLU libraries.
|
||||||
if (SLIC3R_GUI)
|
if (SLIC3R_GUI)
|
||||||
target_link_libraries(slic3r libslic3r_gui ${wxWidgets_LIBRARIES})
|
target_link_libraries(PrusaSlicer libslic3r_gui ${wxWidgets_LIBRARIES})
|
||||||
|
|
||||||
# Configure libcurl and its dependencies OpenSSL & zlib
|
# Configure libcurl and its dependencies OpenSSL & zlib
|
||||||
find_package(CURL REQUIRED)
|
find_package(CURL REQUIRED)
|
||||||
@ -104,13 +101,13 @@ if (SLIC3R_GUI)
|
|||||||
# Required by libcurl
|
# Required by libcurl
|
||||||
find_package(ZLIB REQUIRED)
|
find_package(ZLIB REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
target_include_directories(slic3r PRIVATE ${CURL_INCLUDE_DIRS})
|
target_include_directories(PrusaSlicer PRIVATE ${CURL_INCLUDE_DIRS})
|
||||||
target_link_libraries(slic3r ${CURL_LIBRARIES} ${ZLIB_LIBRARIES})
|
target_link_libraries(PrusaSlicer ${CURL_LIBRARIES} ${ZLIB_LIBRARIES})
|
||||||
if (SLIC3R_STATIC)
|
if (SLIC3R_STATIC)
|
||||||
if (NOT APPLE)
|
if (NOT APPLE)
|
||||||
# libcurl is always linked dynamically to the system libcurl on OSX.
|
# libcurl is always linked dynamically to the system libcurl on OSX.
|
||||||
# On other systems, libcurl is linked statically if SLIC3R_STATIC is set.
|
# On other systems, libcurl is linked statically if SLIC3R_STATIC is set.
|
||||||
target_compile_definitions(slic3r PRIVATE CURL_STATICLIB)
|
target_compile_definitions(PrusaSlicer PRIVATE CURL_STATICLIB)
|
||||||
endif()
|
endif()
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
# As of now, our build system produces a statically linked libcurl,
|
# As of now, our build system produces a statically linked libcurl,
|
||||||
@ -118,34 +115,40 @@ if (SLIC3R_GUI)
|
|||||||
find_package(OpenSSL REQUIRED)
|
find_package(OpenSSL REQUIRED)
|
||||||
message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}")
|
message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}")
|
||||||
message("OpenSSL libraries: ${OPENSSL_LIBRARIES}")
|
message("OpenSSL libraries: ${OPENSSL_LIBRARIES}")
|
||||||
target_include_directories(slic3r PRIVATE ${OPENSSL_INCLUDE_DIR})
|
target_include_directories(PrusaSlicer PRIVATE ${OPENSSL_INCLUDE_DIR})
|
||||||
target_link_libraries(slic3r ${OPENSSL_LIBRARIES})
|
target_link_libraries(PrusaSlicer ${OPENSSL_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
target_link_libraries(slic3r user32.lib Setupapi.lib OpenGL32.Lib GlU32.Lib)
|
# Generate debug symbols even in release mode.
|
||||||
|
target_link_options(PrusaSlicer PUBLIC "$<$<CONFIG:RELEASE>:/DEBUG>")
|
||||||
|
target_link_libraries(PrusaSlicer user32.lib Setupapi.lib OpenGL32.Lib GlU32.Lib)
|
||||||
elseif (MINGW)
|
elseif (MINGW)
|
||||||
target_link_libraries(slic3r -lopengl32)
|
target_link_libraries(PrusaSlicer -lopengl32)
|
||||||
elseif (APPLE)
|
elseif (APPLE)
|
||||||
target_link_libraries(slic3r "-framework OpenGL")
|
target_link_libraries(PrusaSlicer "-framework OpenGL")
|
||||||
else ()
|
else ()
|
||||||
target_link_libraries(slic3r -ldl -lGL -lGLU)
|
target_link_libraries(PrusaSlicer -ldl -lGL -lGLU)
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# On Windows, a shim application is required to produce a console / non console version of the Slic3r application.
|
# On Windows, a shim application is required to produce a console / non console version of the Slic3r application.
|
||||||
# Also the shim may load the Mesa software OpenGL renderer if the default renderer does not support OpenGL 2.0 and higher.
|
# Also the shim may load the Mesa software OpenGL renderer if the default renderer does not support OpenGL 2.0 and higher.
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
add_executable(slic3r_app_gui WIN32 slic3r_app_msvc.cpp ${CMAKE_CURRENT_BINARY_DIR}/slic3r.rc)
|
add_executable(PrusaSlicer_app_gui WIN32 PrusaSlicer_app_msvc.cpp ${CMAKE_CURRENT_BINARY_DIR}/PrusaSlicer.rc)
|
||||||
target_compile_definitions(slic3r_app_gui PRIVATE -DSLIC3R_WRAPPER_NOCONSOLE)
|
# Generate debug symbols even in release mode.
|
||||||
add_dependencies(slic3r_app_gui slic3r)
|
target_link_options(PrusaSlicer_app_gui PUBLIC "$<$<CONFIG:RELEASE>:/DEBUG>")
|
||||||
set_target_properties(slic3r_app_gui PROPERTIES OUTPUT_NAME "slic3r" PDB_NAME "slic3r_gui")
|
target_compile_definitions(PrusaSlicer_app_gui PRIVATE -DSLIC3R_WRAPPER_NOCONSOLE)
|
||||||
|
add_dependencies(PrusaSlicer_app_gui PrusaSlicer)
|
||||||
|
set_target_properties(PrusaSlicer_app_gui PROPERTIES OUTPUT_NAME "prusa-slicer")
|
||||||
|
|
||||||
add_executable(slic3r_app_console slic3r_app_msvc.cpp ${CMAKE_CURRENT_BINARY_DIR}/slic3r.rc)
|
add_executable(PrusaSlicer_app_console PrusaSlicer_app_msvc.cpp ${CMAKE_CURRENT_BINARY_DIR}/PrusaSlicer.rc)
|
||||||
target_compile_definitions(slic3r_app_console PRIVATE -DSLIC3R_WRAPPER_CONSOLE)
|
# Generate debug symbols even in release mode.
|
||||||
add_dependencies(slic3r_app_console slic3r)
|
target_link_options(PrusaSlicer_app_console PUBLIC "$<$<CONFIG:RELEASE>:/DEBUG>")
|
||||||
set_target_properties(slic3r_app_console PROPERTIES OUTPUT_NAME "slic3r-console")
|
target_compile_definitions(PrusaSlicer_app_console PRIVATE -DSLIC3R_WRAPPER_CONSOLE)
|
||||||
|
add_dependencies(PrusaSlicer_app_console PrusaSlicer)
|
||||||
|
set_target_properties(PrusaSlicer_app_console PROPERTIES OUTPUT_NAME "prusa-slicer-console")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Link the resources dir to where Slic3r GUI expects it
|
# Link the resources dir to where Slic3r GUI expects it
|
||||||
@ -154,7 +157,7 @@ if (MSVC)
|
|||||||
foreach (CONF ${CMAKE_CONFIGURATION_TYPES})
|
foreach (CONF ${CMAKE_CONFIGURATION_TYPES})
|
||||||
file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${CONF}" WIN_CONF_OUTPUT_DIR)
|
file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${CONF}" WIN_CONF_OUTPUT_DIR)
|
||||||
file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${CONF}/resources" WIN_RESOURCES_SYMLINK)
|
file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${CONF}/resources" WIN_RESOURCES_SYMLINK)
|
||||||
add_custom_command(TARGET slic3r POST_BUILD
|
add_custom_command(TARGET PrusaSlicer POST_BUILD
|
||||||
COMMAND if exist "${WIN_CONF_OUTPUT_DIR}" "("
|
COMMAND if exist "${WIN_CONF_OUTPUT_DIR}" "("
|
||||||
if not exist "${WIN_RESOURCES_SYMLINK}" "("
|
if not exist "${WIN_RESOURCES_SYMLINK}" "("
|
||||||
mklink /J "${WIN_RESOURCES_SYMLINK}" "${SLIC3R_RESOURCES_DIR_WIN}"
|
mklink /J "${WIN_RESOURCES_SYMLINK}" "${SLIC3R_RESOURCES_DIR_WIN}"
|
||||||
@ -166,7 +169,7 @@ if (MSVC)
|
|||||||
endforeach ()
|
endforeach ()
|
||||||
else ()
|
else ()
|
||||||
file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/resources" WIN_RESOURCES_SYMLINK)
|
file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/resources" WIN_RESOURCES_SYMLINK)
|
||||||
add_custom_command(TARGET slic3r POST_BUILD
|
add_custom_command(TARGET PrusaSlicer POST_BUILD
|
||||||
COMMAND if not exist "${WIN_RESOURCES_SYMLINK}" "(" mklink /J "${WIN_RESOURCES_SYMLINK}" "${SLIC3R_RESOURCES_DIR_WIN}" ")"
|
COMMAND if not exist "${WIN_RESOURCES_SYMLINK}" "(" mklink /J "${WIN_RESOURCES_SYMLINK}" "${SLIC3R_RESOURCES_DIR_WIN}" ")"
|
||||||
COMMENT "Symlinking the resources directory into the build tree"
|
COMMENT "Symlinking the resources directory into the build tree"
|
||||||
VERBATIM
|
VERBATIM
|
||||||
@ -174,13 +177,13 @@ if (MSVC)
|
|||||||
endif ()
|
endif ()
|
||||||
elseif (XCODE)
|
elseif (XCODE)
|
||||||
# Because of Debug/Release/etc. configurations (similar to MSVC) the slic3r binary is located in an extra level
|
# Because of Debug/Release/etc. configurations (similar to MSVC) the slic3r binary is located in an extra level
|
||||||
add_custom_command(TARGET slic3r POST_BUILD
|
add_custom_command(TARGET PrusaSlicer POST_BUILD
|
||||||
COMMAND ln -sf "${SLIC3R_RESOURCES_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/resources"
|
COMMAND ln -sf "${SLIC3R_RESOURCES_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/resources"
|
||||||
COMMENT "Symlinking the resources directory into the build tree"
|
COMMENT "Symlinking the resources directory into the build tree"
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
else ()
|
else ()
|
||||||
add_custom_command(TARGET slic3r POST_BUILD
|
add_custom_command(TARGET PrusaSlicer POST_BUILD
|
||||||
COMMAND ln -sf "${SLIC3R_RESOURCES_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/../resources"
|
COMMAND ln -sf "${SLIC3R_RESOURCES_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/../resources"
|
||||||
COMMENT "Symlinking the resources directory into the build tree"
|
COMMENT "Symlinking the resources directory into the build tree"
|
||||||
VERBATIM
|
VERBATIM
|
||||||
@ -189,11 +192,11 @@ endif()
|
|||||||
|
|
||||||
# Slic3r binary install target
|
# Slic3r binary install target
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
install(TARGETS slic3r RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
install(TARGETS PrusaSlicer RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
install(TARGETS slic3r_app_gui RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
install(TARGETS PrusaSlicer_app_gui RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
||||||
install(TARGETS slic3r_app_console RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
install(TARGETS PrusaSlicer_app_console RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
||||||
endif ()
|
endif ()
|
||||||
else ()
|
else ()
|
||||||
install(TARGETS slic3r RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
install(TARGETS PrusaSlicer RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
#include "libslic3r/Format/OBJ.hpp"
|
#include "libslic3r/Format/OBJ.hpp"
|
||||||
#include "libslic3r/Utils.hpp"
|
#include "libslic3r/Utils.hpp"
|
||||||
|
|
||||||
#include "slic3r.hpp"
|
#include "PrusaSlicer.hpp"
|
||||||
|
|
||||||
#ifdef SLIC3R_GUI
|
#ifdef SLIC3R_GUI
|
||||||
#include "slic3r/GUI/GUI.hpp"
|
#include "slic3r/GUI/GUI.hpp"
|
||||||
@ -568,7 +568,7 @@ bool CLI::setup(int argc, char **argv)
|
|||||||
void CLI::print_help(bool include_print_options, PrinterTechnology printer_technology) const
|
void CLI::print_help(bool include_print_options, PrinterTechnology printer_technology) const
|
||||||
{
|
{
|
||||||
boost::nowide::cout
|
boost::nowide::cout
|
||||||
<< SLIC3R_APP_NAME << " " << SLIC3R_BUILD << " " << "based on Slic3r"
|
<< SLIC3R_BUILD_ID << " " << "based on Slic3r"
|
||||||
#ifdef SLIC3R_GUI
|
#ifdef SLIC3R_GUI
|
||||||
<< " (with GUI support)"
|
<< " (with GUI support)"
|
||||||
#else /* SLIC3R_GUI */
|
#else /* SLIC3R_GUI */
|
@ -48,10 +48,10 @@ public:
|
|||||||
wc.lpfnWndProc = OpenGLVersionCheck::supports_opengl2_wndproc;
|
wc.lpfnWndProc = OpenGLVersionCheck::supports_opengl2_wndproc;
|
||||||
wc.hInstance = (HINSTANCE)GetModuleHandle(nullptr);
|
wc.hInstance = (HINSTANCE)GetModuleHandle(nullptr);
|
||||||
wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);
|
wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);
|
||||||
wc.lpszClassName = L"slic3r_opengl_version_check";
|
wc.lpszClassName = L"PrusaSlicer_opengl_version_check";
|
||||||
wc.style = CS_OWNDC;
|
wc.style = CS_OWNDC;
|
||||||
if (RegisterClass(&wc)) {
|
if (RegisterClass(&wc)) {
|
||||||
HWND hwnd = CreateWindowW(wc.lpszClassName, L"slic3r_opengl_version_check", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480, 0, 0, wc.hInstance, (LPVOID)this);
|
HWND hwnd = CreateWindowW(wc.lpszClassName, L"PrusaSlicer_opengl_version_check", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480, 0, 0, wc.hInstance, (LPVOID)this);
|
||||||
if (hwnd) {
|
if (hwnd) {
|
||||||
message_pump_exit = false;
|
message_pump_exit = false;
|
||||||
while (GetMessage(&msg, NULL, 0, 0 ) > 0 && ! message_pump_exit)
|
while (GetMessage(&msg, NULL, 0, 0 ) > 0 && ! message_pump_exit)
|
||||||
@ -271,11 +271,11 @@ int wmain(int argc, wchar_t **argv)
|
|||||||
|
|
||||||
wchar_t path_to_slic3r[MAX_PATH + 1] = { 0 };
|
wchar_t path_to_slic3r[MAX_PATH + 1] = { 0 };
|
||||||
wcscpy(path_to_slic3r, path_to_exe);
|
wcscpy(path_to_slic3r, path_to_exe);
|
||||||
wcscat(path_to_slic3r, L"slic3r.dll");
|
wcscat(path_to_slic3r, L"PrusaSlicer.dll");
|
||||||
// printf("Loading Slic3r library: %S\n", path_to_slic3r);
|
// printf("Loading Slic3r library: %S\n", path_to_slic3r);
|
||||||
HINSTANCE hInstance_Slic3r = LoadLibraryExW(path_to_slic3r, nullptr, 0);
|
HINSTANCE hInstance_Slic3r = LoadLibraryExW(path_to_slic3r, nullptr, 0);
|
||||||
if (hInstance_Slic3r == nullptr) {
|
if (hInstance_Slic3r == nullptr) {
|
||||||
printf("slic3r.dll was not loaded\n");
|
printf("PrusaSlicer.dll was not loaded\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -289,7 +289,7 @@ int wmain(int argc, wchar_t **argv)
|
|||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
if (slic3r_main == nullptr) {
|
if (slic3r_main == nullptr) {
|
||||||
printf("could not locate the function slic3r_main in slic3r.dll\n");
|
printf("could not locate the function slic3r_main in PrusaSlicer.dll\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
// argc minus the trailing nullptr of the argv
|
// argc minus the trailing nullptr of the argv
|
@ -4,6 +4,6 @@
|
|||||||
#define SLIC3R_APP_NAME "@SLIC3R_APP_NAME@"
|
#define SLIC3R_APP_NAME "@SLIC3R_APP_NAME@"
|
||||||
#define SLIC3R_APP_KEY "@SLIC3R_APP_KEY@"
|
#define SLIC3R_APP_KEY "@SLIC3R_APP_KEY@"
|
||||||
#define SLIC3R_VERSION "@SLIC3R_VERSION@"
|
#define SLIC3R_VERSION "@SLIC3R_VERSION@"
|
||||||
#define SLIC3R_BUILD "@SLIC3R_BUILD@"
|
#define SLIC3R_BUILD_ID "@SLIC3R_BUILD_ID@"
|
||||||
|
|
||||||
#endif /* __SLIC3R_VERSION_H */
|
#endif /* __SLIC3R_VERSION_H */
|
||||||
|
@ -22,4 +22,4 @@ PRODUCTVERSION @SLIC3R_RC_VERSION@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
2 ICON "@SLIC3R_RESOURCES_DIR@/icons/PrusaSlicer.ico"
|
2 ICON "@SLIC3R_RESOURCES_DIR@/icons/PrusaSlicer.ico"
|
||||||
1 24 "slic3r.manifest"
|
1 24 "PrusaSlicer.manifest"
|
@ -22,7 +22,7 @@ namespace Slic3r {
|
|||||||
|
|
||||||
static const std::string VENDOR_PREFIX = "vendor:";
|
static const std::string VENDOR_PREFIX = "vendor:";
|
||||||
static const std::string MODEL_PREFIX = "model:";
|
static const std::string MODEL_PREFIX = "model:";
|
||||||
static const std::string VERSION_CHECK_URL = "https://raw.githubusercontent.com/prusa3d/Slic3r-settings/master/live/Slic3rPE.version";
|
static const std::string VERSION_CHECK_URL = "https://raw.githubusercontent.com/prusa3d/PrusaSlicer-settings/master/live/PrusaSlicer.version";
|
||||||
|
|
||||||
void AppConfig::reset()
|
void AppConfig::reset()
|
||||||
{
|
{
|
||||||
|
@ -174,7 +174,7 @@ wxBitmap* BitmapCache::insert(const std::string &bitmap_key, const wxBitmap *beg
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
wxBitmap* BitmapCache::insert_raw_rgba(const std::string &bitmap_key, unsigned width, unsigned height, const unsigned char *raw_data, float scale /* = 1.0f */)
|
wxBitmap* BitmapCache::insert_raw_rgba(const std::string &bitmap_key, unsigned width, unsigned height, const unsigned char *raw_data, float scale /* = 1.0f */, const bool grayscale/* = false*/)
|
||||||
{
|
{
|
||||||
wxImage image(width, height);
|
wxImage image(width, height);
|
||||||
image.InitAlpha();
|
image.InitAlpha();
|
||||||
@ -187,14 +187,20 @@ wxBitmap* BitmapCache::insert_raw_rgba(const std::string &bitmap_key, unsigned w
|
|||||||
*rgb ++ = *raw_data ++;
|
*rgb ++ = *raw_data ++;
|
||||||
*alpha ++ = *raw_data ++;
|
*alpha ++ = *raw_data ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (grayscale)
|
||||||
|
image.ConvertToGreyscale(m_gs, m_gs, m_gs);
|
||||||
|
|
||||||
return this->insert(bitmap_key, wxImage_to_wxBitmap_with_alpha(std::move(image), scale));
|
return this->insert(bitmap_key, wxImage_to_wxBitmap_with_alpha(std::move(image), scale));
|
||||||
}
|
}
|
||||||
|
|
||||||
wxBitmap* BitmapCache::load_png(const std::string &bitmap_name, unsigned int width, unsigned int height)
|
wxBitmap* BitmapCache::load_png(const std::string &bitmap_name, unsigned int width, unsigned int height,
|
||||||
|
const bool grayscale/* = false*/)
|
||||||
{
|
{
|
||||||
std::string bitmap_key = bitmap_name + ( height !=0 ?
|
std::string bitmap_key = bitmap_name + ( height !=0 ?
|
||||||
"-h" + std::to_string(height) :
|
"-h" + std::to_string(height) :
|
||||||
"-w" + std::to_string(width));
|
"-w" + std::to_string(width))
|
||||||
|
+ (grayscale ? "-gs" : "");
|
||||||
|
|
||||||
auto it = m_map.find(bitmap_key);
|
auto it = m_map.find(bitmap_key);
|
||||||
if (it != m_map.end())
|
if (it != m_map.end())
|
||||||
@ -213,15 +219,20 @@ wxBitmap* BitmapCache::load_png(const std::string &bitmap_name, unsigned int wid
|
|||||||
if (height != 0 && width != 0)
|
if (height != 0 && width != 0)
|
||||||
image.Rescale(width, height, wxIMAGE_QUALITY_BILINEAR);
|
image.Rescale(width, height, wxIMAGE_QUALITY_BILINEAR);
|
||||||
|
|
||||||
|
if (grayscale)
|
||||||
|
image.ConvertToGreyscale(m_gs, m_gs, m_gs);
|
||||||
|
|
||||||
return this->insert(bitmap_key, wxImage_to_wxBitmap_with_alpha(std::move(image)));
|
return this->insert(bitmap_key, wxImage_to_wxBitmap_with_alpha(std::move(image)));
|
||||||
}
|
}
|
||||||
|
|
||||||
wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_width, unsigned target_height, float scale /* = 1.0f */)
|
wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_width, unsigned target_height,
|
||||||
|
float scale /* = 1.0f */, const bool grayscale/* = false*/)
|
||||||
{
|
{
|
||||||
std::string bitmap_key = bitmap_name + ( target_height !=0 ?
|
std::string bitmap_key = bitmap_name + ( target_height !=0 ?
|
||||||
"-h" + std::to_string(target_height) :
|
"-h" + std::to_string(target_height) :
|
||||||
"-w" + std::to_string(target_width))
|
"-w" + std::to_string(target_width))
|
||||||
+ (scale != 1.0f ? "-s" + std::to_string(scale) : "");
|
+ (scale != 1.0f ? "-s" + std::to_string(scale) : "")
|
||||||
|
+ (grayscale ? "-gs" : "");
|
||||||
|
|
||||||
target_height != 0 ? target_height *= scale : target_width *= scale;
|
target_height != 0 ? target_height *= scale : target_width *= scale;
|
||||||
|
|
||||||
@ -256,7 +267,7 @@ wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_
|
|||||||
::nsvgDeleteRasterizer(rast);
|
::nsvgDeleteRasterizer(rast);
|
||||||
::nsvgDelete(image);
|
::nsvgDelete(image);
|
||||||
|
|
||||||
return this->insert_raw_rgba(bitmap_key, width, height, data.data(), scale);
|
return this->insert_raw_rgba(bitmap_key, width, height, data.data(), scale, grayscale);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxBitmap BitmapCache::mksolid(size_t width, size_t height, unsigned char r, unsigned char g, unsigned char b, unsigned char transparency)
|
wxBitmap BitmapCache::mksolid(size_t width, size_t height, unsigned char r, unsigned char g, unsigned char b, unsigned char transparency)
|
||||||
|
@ -29,12 +29,12 @@ public:
|
|||||||
wxBitmap* insert(const std::string &name, const wxBitmap &bmp, const wxBitmap &bmp2, const wxBitmap &bmp3);
|
wxBitmap* insert(const std::string &name, const wxBitmap &bmp, const wxBitmap &bmp2, const wxBitmap &bmp3);
|
||||||
wxBitmap* insert(const std::string &name, const std::vector<wxBitmap> &bmps) { return this->insert(name, &bmps.front(), &bmps.front() + bmps.size()); }
|
wxBitmap* insert(const std::string &name, const std::vector<wxBitmap> &bmps) { return this->insert(name, &bmps.front(), &bmps.front() + bmps.size()); }
|
||||||
wxBitmap* insert(const std::string &name, const wxBitmap *begin, const wxBitmap *end);
|
wxBitmap* insert(const std::string &name, const wxBitmap *begin, const wxBitmap *end);
|
||||||
wxBitmap* insert_raw_rgba(const std::string &bitmap_key, unsigned width, unsigned height, const unsigned char *raw_data, float scale = 1.0f);
|
wxBitmap* insert_raw_rgba(const std::string &bitmap_key, unsigned width, unsigned height, const unsigned char *raw_data, float scale = 1.0f, const bool grayscale = false);
|
||||||
|
|
||||||
// Load png from resources/icons. bitmap_key is given without the .png suffix. Bitmap will be rescaled to provided height/width if nonzero.
|
// Load png from resources/icons. bitmap_key is given without the .png suffix. Bitmap will be rescaled to provided height/width if nonzero.
|
||||||
wxBitmap* load_png(const std::string &bitmap_key, unsigned int width = 0, unsigned int height = 0);
|
wxBitmap* load_png(const std::string &bitmap_key, unsigned int width = 0, unsigned int height = 0, const bool grayscale = false);
|
||||||
// Load svg from resources/icons. bitmap_key is given without the .svg suffix. SVG will be rasterized to provided height/width.
|
// Load svg from resources/icons. bitmap_key is given without the .svg suffix. SVG will be rasterized to provided height/width.
|
||||||
wxBitmap* load_svg(const std::string &bitmap_key, unsigned int width = 0, unsigned int height = 0, float scale = 1.0f);
|
wxBitmap* load_svg(const std::string &bitmap_key, unsigned int width = 0, unsigned int height = 0, float scale = 1.0f, const bool grayscale = false);
|
||||||
|
|
||||||
static wxBitmap mksolid(size_t width, size_t height, unsigned char r, unsigned char g, unsigned char b, unsigned char transparency);
|
static wxBitmap mksolid(size_t width, size_t height, unsigned char r, unsigned char g, unsigned char b, unsigned char transparency);
|
||||||
static wxBitmap mksolid(size_t width, size_t height, const unsigned char rgb[3]) { return mksolid(width, height, rgb[0], rgb[1], rgb[2], wxALPHA_OPAQUE); }
|
static wxBitmap mksolid(size_t width, size_t height, const unsigned char rgb[3]) { return mksolid(width, height, rgb[0], rgb[1], rgb[2], wxALPHA_OPAQUE); }
|
||||||
@ -42,6 +42,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
std::map<std::string, wxBitmap*> m_map;
|
std::map<std::string, wxBitmap*> m_map;
|
||||||
|
double m_gs = 0.2; // value, used for image.ConvertToGreyscale(m_gs, m_gs, m_gs)
|
||||||
};
|
};
|
||||||
|
|
||||||
} // GUI
|
} // GUI
|
||||||
|
@ -915,6 +915,11 @@ int GUI_App::extruders_cnt() const
|
|||||||
preset.config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
|
preset.config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GUI_App::open_web_page_localized(const std::string &http_address)
|
||||||
|
{
|
||||||
|
wxLaunchDefaultBrowser(http_address + "&lng=" + this->current_language_code());
|
||||||
|
}
|
||||||
|
|
||||||
void GUI_App::window_pos_save(wxTopLevelWindow* window, const std::string &name)
|
void GUI_App::window_pos_save(wxTopLevelWindow* window, const std::string &name)
|
||||||
{
|
{
|
||||||
if (name.empty()) { return; }
|
if (name.empty()) { return; }
|
||||||
|
@ -171,6 +171,8 @@ public:
|
|||||||
|
|
||||||
PrintHostJobQueue& printhost_job_queue() { return *m_printhost_job_queue.get(); }
|
PrintHostJobQueue& printhost_job_queue() { return *m_printhost_job_queue.get(); }
|
||||||
|
|
||||||
|
void open_web_page_localized(const std::string &http_address);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool on_init_inner();
|
bool on_init_inner();
|
||||||
void window_pos_save(wxTopLevelWindow* window, const std::string &name);
|
void window_pos_save(wxTopLevelWindow* window, const std::string &name);
|
||||||
|
@ -1120,7 +1120,8 @@ void ObjectList::append_menu_items_add_volume(wxMenu* menu)
|
|||||||
wxMenuItem* ObjectList::append_menu_item_split(wxMenu* menu)
|
wxMenuItem* ObjectList::append_menu_item_split(wxMenu* menu)
|
||||||
{
|
{
|
||||||
return append_menu_item(menu, wxID_ANY, _(L("Split to parts")), "",
|
return append_menu_item(menu, wxID_ANY, _(L("Split to parts")), "",
|
||||||
[this](wxCommandEvent&) { split(); }, "split_parts_SMALL", menu);
|
[this](wxCommandEvent&) { split(); }, "split_parts_SMALL", menu,
|
||||||
|
[this]() { return is_splittable(); }, wxGetApp().plater());
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMenuItem* ObjectList::append_menu_item_settings(wxMenu* menu_)
|
wxMenuItem* ObjectList::append_menu_item_settings(wxMenu* menu_)
|
||||||
@ -1199,16 +1200,14 @@ wxMenuItem* ObjectList::append_menu_item_change_type(wxMenu* menu)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMenuItem* ObjectList::append_menu_item_instance_to_object(wxMenu* menu)
|
wxMenuItem* ObjectList::append_menu_item_instance_to_object(wxMenu* menu, wxWindow* parent)
|
||||||
{
|
{
|
||||||
return append_menu_item(menu, wxID_ANY, _(L("Set as a Separated Object")), "",
|
return append_menu_item(menu, wxID_ANY, _(L("Set as a Separated Object")), "",
|
||||||
[this](wxCommandEvent&) { split_instances(); }, "", menu);
|
[this](wxCommandEvent&) { split_instances(); }, "", menu, [](){return wxGetApp().plater()->can_set_instance_to_object(); }, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectList::append_menu_items_osx(wxMenu* menu)
|
void ObjectList::append_menu_items_osx(wxMenu* menu)
|
||||||
{
|
{
|
||||||
append_menu_item_delete(menu);
|
|
||||||
|
|
||||||
append_menu_item(menu, wxID_ANY, _(L("Rename")), "",
|
append_menu_item(menu, wxID_ANY, _(L("Rename")), "",
|
||||||
[this](wxCommandEvent&) { rename_item(); }, "", menu);
|
[this](wxCommandEvent&) { rename_item(); }, "", menu);
|
||||||
|
|
||||||
@ -1219,8 +1218,10 @@ wxMenuItem* ObjectList::append_menu_item_fix_through_netfabb(wxMenu* menu)
|
|||||||
{
|
{
|
||||||
if (!is_windows10())
|
if (!is_windows10())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
Plater* plater = wxGetApp().plater();
|
||||||
wxMenuItem* menu_item = append_menu_item(menu, wxID_ANY, _(L("Fix through the Netfabb")), "",
|
wxMenuItem* menu_item = append_menu_item(menu, wxID_ANY, _(L("Fix through the Netfabb")), "",
|
||||||
[this](wxCommandEvent&) { fix_through_netfabb(); }, "", menu);
|
[this](wxCommandEvent&) { fix_through_netfabb(); }, "", menu,
|
||||||
|
[plater]() {return plater->can_fix_through_netfabb(); }, plater);
|
||||||
menu->AppendSeparator();
|
menu->AppendSeparator();
|
||||||
|
|
||||||
return menu_item;
|
return menu_item;
|
||||||
@ -1286,9 +1287,6 @@ void ObjectList::create_object_popupmenu(wxMenu *menu)
|
|||||||
// rest of a object_menu will be added later in:
|
// rest of a object_menu will be added later in:
|
||||||
// - append_menu_items_add_volume() -> for "Add (volumes)"
|
// - append_menu_items_add_volume() -> for "Add (volumes)"
|
||||||
// - append_menu_item_settings() -> for "Add (settings)"
|
// - append_menu_item_settings() -> for "Add (settings)"
|
||||||
|
|
||||||
wxGetApp().plater()->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) {
|
|
||||||
evt.Enable(is_splittable()); }, m_menu_item_split->GetId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectList::create_sla_object_popupmenu(wxMenu *menu)
|
void ObjectList::create_sla_object_popupmenu(wxMenu *menu)
|
||||||
@ -1320,17 +1318,11 @@ void ObjectList::create_part_popupmenu(wxMenu *menu)
|
|||||||
|
|
||||||
// rest of a object_sla_menu will be added later in:
|
// rest of a object_sla_menu will be added later in:
|
||||||
// - append_menu_item_settings() -> for "Add (settings)"
|
// - append_menu_item_settings() -> for "Add (settings)"
|
||||||
|
|
||||||
wxGetApp().plater()->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) {
|
|
||||||
evt.Enable(is_splittable()); }, m_menu_item_split_part->GetId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectList::create_instance_popupmenu(wxMenu*menu)
|
void ObjectList::create_instance_popupmenu(wxMenu*menu)
|
||||||
{
|
{
|
||||||
#ifdef __WXOSX__
|
m_menu_item_split_instances = append_menu_item_instance_to_object(menu, wxGetApp().plater());
|
||||||
append_menu_item_delete(menu);
|
|
||||||
#endif // __WXOSX__
|
|
||||||
m_menu_item_split_instances = append_menu_item_instance_to_object(menu);
|
|
||||||
|
|
||||||
/* New behavior logic:
|
/* New behavior logic:
|
||||||
* 1. Split Object to several separated object, if ALL instances are selected
|
* 1. Split Object to several separated object, if ALL instances are selected
|
||||||
@ -2545,9 +2537,9 @@ void ObjectList::change_part_type()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const wxString names[] = { "Part", "Modifier", "Support Enforcer", "Support Blocker" };
|
const wxString names[] = { _(L("Part")), _(L("Modifier")), _(L("Support Enforcer")), _(L("Support Blocker")) };
|
||||||
|
|
||||||
auto new_type = ModelVolumeType(wxGetSingleChoiceIndex("Type: ", _(L("Select type of part")), wxArrayString(4, names), int(type)));
|
auto new_type = ModelVolumeType(wxGetSingleChoiceIndex(_(L("Type:")), _(L("Select type of part")), wxArrayString(4, names), int(type)));
|
||||||
|
|
||||||
if (new_type == type || new_type == ModelVolumeType::INVALID)
|
if (new_type == type || new_type == ModelVolumeType::INVALID)
|
||||||
return;
|
return;
|
||||||
@ -2837,10 +2829,6 @@ void ObjectList::show_multi_selection_menu()
|
|||||||
|
|
||||||
wxMenu* menu = new wxMenu();
|
wxMenu* menu = new wxMenu();
|
||||||
|
|
||||||
#ifdef __WXOSX__
|
|
||||||
append_menu_item_delete(menu);
|
|
||||||
#endif //__WXOSX__
|
|
||||||
|
|
||||||
if (extruders_count() > 1)
|
if (extruders_count() > 1)
|
||||||
append_menu_item(menu, wxID_ANY, _(L("Set extruder for selected items")),
|
append_menu_item(menu, wxID_ANY, _(L("Set extruder for selected items")),
|
||||||
_(L("Select extruder number for selected objects and/or parts")),
|
_(L("Select extruder number for selected objects and/or parts")),
|
||||||
|
@ -199,7 +199,7 @@ public:
|
|||||||
wxMenuItem* append_menu_item_split(wxMenu* menu);
|
wxMenuItem* append_menu_item_split(wxMenu* menu);
|
||||||
wxMenuItem* append_menu_item_settings(wxMenu* menu);
|
wxMenuItem* append_menu_item_settings(wxMenu* menu);
|
||||||
wxMenuItem* append_menu_item_change_type(wxMenu* menu);
|
wxMenuItem* append_menu_item_change_type(wxMenu* menu);
|
||||||
wxMenuItem* append_menu_item_instance_to_object(wxMenu* menu);
|
wxMenuItem* append_menu_item_instance_to_object(wxMenu* menu, wxWindow* parent);
|
||||||
void append_menu_items_osx(wxMenu* menu);
|
void append_menu_items_osx(wxMenu* menu);
|
||||||
wxMenuItem* append_menu_item_fix_through_netfabb(wxMenu* menu);
|
wxMenuItem* append_menu_item_fix_through_netfabb(wxMenu* menu);
|
||||||
void append_menu_item_export_stl(wxMenu* menu) const ;
|
void append_menu_item_export_stl(wxMenu* menu) const ;
|
||||||
|
@ -33,7 +33,7 @@ namespace Slic3r {
|
|||||||
namespace GUI {
|
namespace GUI {
|
||||||
|
|
||||||
MainFrame::MainFrame() :
|
MainFrame::MainFrame() :
|
||||||
DPIFrame(NULL, wxID_ANY, wxString(SLIC3R_BUILD) + " " + _(L("based on Slic3r")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, "mainframe"),
|
DPIFrame(NULL, wxID_ANY, wxString(SLIC3R_BUILD_ID) + " " + _(L("based on Slic3r")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, "mainframe"),
|
||||||
m_printhost_queue_dlg(new PrintHostQueueDialog(this))
|
m_printhost_queue_dlg(new PrintHostQueueDialog(this))
|
||||||
{
|
{
|
||||||
// Fonts were created by the DPIFrame constructor for the monitor, on which the window opened.
|
// Fonts were created by the DPIFrame constructor for the monitor, on which the window opened.
|
||||||
@ -341,18 +341,22 @@ void MainFrame::init_menubar()
|
|||||||
// File menu
|
// File menu
|
||||||
wxMenu* fileMenu = new wxMenu;
|
wxMenu* fileMenu = new wxMenu;
|
||||||
{
|
{
|
||||||
wxMenuItem* item_open = append_menu_item(fileMenu, wxID_ANY, _(L("&Open Project")) + dots + "\tCtrl+O", _(L("Open a project file")),
|
append_menu_item(fileMenu, wxID_ANY, _(L("&Open Project")) + dots + "\tCtrl+O", _(L("Open a project file")),
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->load_project(); }, menu_icon("open"));
|
[this](wxCommandEvent&) { if (m_plater) m_plater->load_project(); }, menu_icon("open"), nullptr,
|
||||||
wxMenuItem* item_save = append_menu_item(fileMenu, wxID_ANY, _(L("&Save Project")) + "\tCtrl+S", _(L("Save current project file")),
|
[this](){return m_plater != nullptr; }, this);
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->export_3mf(into_path(m_plater->get_project_filename())); }, menu_icon("save"));
|
append_menu_item(fileMenu, wxID_ANY, _(L("&Save Project")) + "\tCtrl+S", _(L("Save current project file")),
|
||||||
wxMenuItem* item_save_as = append_menu_item(fileMenu, wxID_ANY, _(L("Save Project &as")) + dots + "\tCtrl+Alt+S", _(L("Save current project file as")),
|
[this](wxCommandEvent&) { if (m_plater) m_plater->export_3mf(into_path(m_plater->get_project_filename())); }, menu_icon("save"), nullptr,
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->export_3mf(); }, menu_icon("save"));
|
[this](){return m_plater != nullptr && can_save(); }, this);
|
||||||
|
append_menu_item(fileMenu, wxID_ANY, _(L("Save Project &as")) + dots + "\tCtrl+Alt+S", _(L("Save current project file as")),
|
||||||
|
[this](wxCommandEvent&) { if (m_plater) m_plater->export_3mf(); }, menu_icon("save"), nullptr,
|
||||||
|
[this](){return m_plater != nullptr && can_save(); }, this);
|
||||||
|
|
||||||
fileMenu->AppendSeparator();
|
fileMenu->AppendSeparator();
|
||||||
|
|
||||||
wxMenu* import_menu = new wxMenu();
|
wxMenu* import_menu = new wxMenu();
|
||||||
wxMenuItem* item_import_model = append_menu_item(import_menu, wxID_ANY, _(L("Import STL/OBJ/AM&F/3MF")) + dots + "\tCtrl+I", _(L("Load a model")),
|
append_menu_item(import_menu, wxID_ANY, _(L("Import STL/OBJ/AM&F/3MF")) + dots + "\tCtrl+I", _(L("Load a model")),
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->add_model(); }, menu_icon("import_plater"));
|
[this](wxCommandEvent&) { if (m_plater) m_plater->add_model(); }, menu_icon("import_plater"), nullptr,
|
||||||
|
[this](){return m_plater != nullptr; }, this);
|
||||||
import_menu->AppendSeparator();
|
import_menu->AppendSeparator();
|
||||||
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(); }, menu_icon("import_config"));
|
[this](wxCommandEvent&) { load_config_file(); }, menu_icon("import_config"));
|
||||||
@ -365,15 +369,19 @@ void MainFrame::init_menubar()
|
|||||||
|
|
||||||
wxMenu* export_menu = new wxMenu();
|
wxMenu* export_menu = new wxMenu();
|
||||||
wxMenuItem* item_export_gcode = append_menu_item(export_menu, wxID_ANY, _(L("Export &G-code")) + dots +"\tCtrl+G", _(L("Export current plate as G-code")),
|
wxMenuItem* item_export_gcode = append_menu_item(export_menu, wxID_ANY, _(L("Export &G-code")) + dots +"\tCtrl+G", _(L("Export current plate as G-code")),
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->export_gcode(); }, menu_icon("export_gcode"));
|
[this](wxCommandEvent&) { if (m_plater) m_plater->export_gcode(); }, menu_icon("export_gcode"), nullptr,
|
||||||
|
[this](){return can_export_gcode(); }, this);
|
||||||
m_changeable_menu_items.push_back(item_export_gcode);
|
m_changeable_menu_items.push_back(item_export_gcode);
|
||||||
export_menu->AppendSeparator();
|
export_menu->AppendSeparator();
|
||||||
wxMenuItem* item_export_stl = 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(); }, menu_icon("export_plater"));
|
[this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(); }, menu_icon("export_plater"), nullptr,
|
||||||
wxMenuItem* item_export_stl_sla = append_menu_item(export_menu, wxID_ANY, _(L("Export plate as STL including supports")) + dots, _(L("Export current plate as STL including supports")),
|
[this](){return can_export_model(); }, this);
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(true); }, menu_icon("export_plater"));
|
append_menu_item(export_menu, wxID_ANY, _(L("Export plate as STL including supports")) + dots, _(L("Export current plate as STL including supports")),
|
||||||
wxMenuItem* item_export_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_stl(true); }, menu_icon("export_plater"), nullptr,
|
||||||
[this](wxCommandEvent&) { if (m_plater) m_plater->export_amf(); }, menu_icon("export_plater"));
|
[this](){return can_export_supports(); }, this);
|
||||||
|
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(); }, menu_icon("export_plater"), nullptr,
|
||||||
|
[this](){return can_export_model(); }, this);
|
||||||
export_menu->AppendSeparator();
|
export_menu->AppendSeparator();
|
||||||
append_menu_item(export_menu, wxID_ANY, _(L("Export &Config")) +dots +"\tCtrl+E", _(L("Export current configuration to file")),
|
append_menu_item(export_menu, wxID_ANY, _(L("Export &Config")) +dots +"\tCtrl+E", _(L("Export current configuration to file")),
|
||||||
[this](wxCommandEvent&) { export_config(); }, menu_icon("export_config"));
|
[this](wxCommandEvent&) { export_config(); }, menu_icon("export_config"));
|
||||||
@ -413,16 +421,6 @@ void MainFrame::init_menubar()
|
|||||||
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),
|
||||||
[this](wxCommandEvent&) { Close(false); });
|
[this](wxCommandEvent&) { Close(false); });
|
||||||
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(m_plater != nullptr); }, item_open->GetId());
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable((m_plater != nullptr) && can_save()); }, item_save->GetId());
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable((m_plater != nullptr) && can_save()); }, item_save_as->GetId());
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(m_plater != nullptr); }, item_import_model->GetId());
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_export_gcode()); }, item_export_gcode->GetId());
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_export_model()); }, item_export_stl->GetId());
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_export_supports()); }, item_export_stl_sla->GetId());
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_export_model()); }, item_export_amf->GetId());
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_slice()); }, m_menu_item_reslice_now->GetId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
@ -446,26 +444,25 @@ void MainFrame::init_menubar()
|
|||||||
#else
|
#else
|
||||||
wxString hotkey_delete = "Del";
|
wxString hotkey_delete = "Del";
|
||||||
#endif
|
#endif
|
||||||
wxMenuItem* item_select_all = append_menu_item(editMenu, wxID_ANY, _(L("&Select all")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "A", _(L("Selects all objects")),
|
append_menu_item(editMenu, wxID_ANY, _(L("&Select all")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "A",
|
||||||
[this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->select_all(); }, "");
|
_(L("Selects all objects")), [this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->select_all(); },
|
||||||
|
"", nullptr, [this](){return can_select(); }, this);
|
||||||
editMenu->AppendSeparator();
|
editMenu->AppendSeparator();
|
||||||
wxMenuItem* item_delete_sel = append_menu_item(editMenu, wxID_ANY, _(L("&Delete selected")) + sep + hotkey_delete, _(L("Deletes the current selection")),
|
append_menu_item(editMenu, wxID_ANY, _(L("&Delete selected")) + sep + hotkey_delete,
|
||||||
[this](wxCommandEvent&) { m_plater->remove_selected(); }, menu_icon("remove_menu"));
|
_(L("Deletes the current selection")),[this](wxCommandEvent&) { m_plater->remove_selected(); },
|
||||||
wxMenuItem* item_delete_all = append_menu_item(editMenu, wxID_ANY, _(L("Delete &all")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + hotkey_delete, _(L("Deletes all objects")),
|
menu_icon("remove_menu"), nullptr, [this](){return can_delete(); }, this);
|
||||||
[this](wxCommandEvent&) { m_plater->reset_with_confirm(); }, menu_icon("delete_all_menu"));
|
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(); },
|
||||||
|
menu_icon("delete_all_menu"), nullptr, [this](){return can_delete_all(); }, this);
|
||||||
|
|
||||||
editMenu->AppendSeparator();
|
editMenu->AppendSeparator();
|
||||||
|
|
||||||
wxMenuItem* item_copy = append_menu_item(editMenu, wxID_ANY, _(L("&Copy")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "C", _(L("Copy selection to clipboard")),
|
append_menu_item(editMenu, wxID_ANY, _(L("&Copy")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "C",
|
||||||
[this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); }, menu_icon("copy_menu"));
|
_(L("Copy selection to clipboard")), [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); },
|
||||||
wxMenuItem* item_paste = append_menu_item(editMenu, wxID_ANY, _(L("&Paste")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "V", _(L("Paste clipboard")),
|
menu_icon("copy_menu"), nullptr, [this](){return m_plater->can_copy(); }, this);
|
||||||
[this](wxCommandEvent&) { m_plater->paste_from_clipboard(); }, menu_icon("paste_menu"));
|
append_menu_item(editMenu, wxID_ANY, _(L("&Paste")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "V",
|
||||||
|
_(L("Paste clipboard")), [this](wxCommandEvent&) { m_plater->paste_from_clipboard(); },
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_select()); }, item_select_all->GetId());
|
menu_icon("paste_menu"), nullptr, [this](){return m_plater->can_paste(); }, this);
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_delete()); }, item_delete_sel->GetId());
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_delete_all()); }, item_delete_all->GetId());
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(m_plater->can_copy()); }, item_copy->GetId());
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(m_plater->can_paste()); }, item_paste->GetId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Window menu
|
// Window menu
|
||||||
@ -489,13 +486,12 @@ void MainFrame::init_menubar()
|
|||||||
[this, tab_offset](wxCommandEvent&) { select_tab(tab_offset + 2); }, menu_icon("printer"));
|
[this, tab_offset](wxCommandEvent&) { select_tab(tab_offset + 2); }, menu_icon("printer"));
|
||||||
if (m_plater) {
|
if (m_plater) {
|
||||||
windowMenu->AppendSeparator();
|
windowMenu->AppendSeparator();
|
||||||
wxMenuItem* item_3d = append_menu_item(windowMenu, wxID_HIGHEST + 5, _(L("3&D")) + "\tCtrl+5", _(L("Show the 3D editing view")),
|
append_menu_item(windowMenu, wxID_HIGHEST + 5, _(L("3&D")) + "\tCtrl+5", _(L("Show the 3D editing view")),
|
||||||
[this](wxCommandEvent&) { m_plater->select_view_3D("3D"); }, menu_icon("editor_menu"));
|
[this](wxCommandEvent&) { m_plater->select_view_3D("3D"); }, menu_icon("editor_menu"), nullptr,
|
||||||
wxMenuItem* item_preview = append_menu_item(windowMenu, wxID_HIGHEST + 6, _(L("Pre&view")) + "\tCtrl+6", _(L("Show the 3D slices preview")),
|
[this](){return can_change_view(); }, this);
|
||||||
[this](wxCommandEvent&) { m_plater->select_view_3D("Preview"); }, menu_icon("preview_menu"));
|
append_menu_item(windowMenu, wxID_HIGHEST + 6, _(L("Pre&view")) + "\tCtrl+6", _(L("Show the 3D slices preview")),
|
||||||
|
[this](wxCommandEvent&) { m_plater->select_view_3D("Preview"); }, menu_icon("preview_menu"), nullptr,
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_3d->GetId());
|
[this](){return can_change_view(); }, this);
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_preview->GetId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
@ -521,40 +517,39 @@ void MainFrame::init_menubar()
|
|||||||
if (m_plater) {
|
if (m_plater) {
|
||||||
viewMenu = new wxMenu();
|
viewMenu = new wxMenu();
|
||||||
// The camera control accelerators are captured by GLCanvas3D::on_char().
|
// The camera control accelerators are captured by GLCanvas3D::on_char().
|
||||||
wxMenuItem* item_iso = append_menu_item(viewMenu, wxID_ANY, _(L("Iso")) + sep + "&0", _(L("Iso View")), [this](wxCommandEvent&) { select_view("iso"); });
|
append_menu_item(viewMenu, wxID_ANY, _(L("Iso")) + sep + "&0", _(L("Iso View")),[this](wxCommandEvent&) { select_view("iso"); },
|
||||||
|
"", nullptr, [this](){return can_change_view(); }, this);
|
||||||
viewMenu->AppendSeparator();
|
viewMenu->AppendSeparator();
|
||||||
//TRN To be shown in the main menu View->Top
|
//TRN To be shown in the main menu View->Top
|
||||||
wxMenuItem* item_top = append_menu_item(viewMenu, wxID_ANY, _(L("Top")) + sep + "&1", _(L("Top View")), [this](wxCommandEvent&) { select_view("top"); });
|
append_menu_item(viewMenu, wxID_ANY, _(L("Top")) + sep + "&1", _(L("Top View")), [this](wxCommandEvent&) { select_view("top"); },
|
||||||
|
"", nullptr, [this](){return can_change_view(); }, this);
|
||||||
//TRN To be shown in the main menu View->Bottom
|
//TRN To be shown in the main menu View->Bottom
|
||||||
wxMenuItem* item_bottom = append_menu_item(viewMenu, wxID_ANY, _(L("Bottom")) + sep + "&2", _(L("Bottom View")), [this](wxCommandEvent&) { select_view("bottom"); });
|
append_menu_item(viewMenu, wxID_ANY, _(L("Bottom")) + sep + "&2", _(L("Bottom View")), [this](wxCommandEvent&) { select_view("bottom"); },
|
||||||
wxMenuItem* item_front = append_menu_item(viewMenu, wxID_ANY, _(L("Front")) + sep + "&3", _(L("Front View")), [this](wxCommandEvent&) { select_view("front"); });
|
"", nullptr, [this](){return can_change_view(); }, this);
|
||||||
wxMenuItem* item_rear = append_menu_item(viewMenu, wxID_ANY, _(L("Rear")) + sep + "&4", _(L("Rear View")), [this](wxCommandEvent&) { select_view("rear"); });
|
append_menu_item(viewMenu, wxID_ANY, _(L("Front")) + sep + "&3", _(L("Front View")), [this](wxCommandEvent&) { select_view("front"); },
|
||||||
wxMenuItem* item_left = append_menu_item(viewMenu, wxID_ANY, _(L("Left")) + sep + "&5", _(L("Left View")), [this](wxCommandEvent&) { select_view("left"); });
|
"", nullptr, [this](){return can_change_view(); }, this);
|
||||||
wxMenuItem* item_right = append_menu_item(viewMenu, wxID_ANY, _(L("Right")) + sep + "&6", _(L("Right View")), [this](wxCommandEvent&) { select_view("right"); });
|
append_menu_item(viewMenu, wxID_ANY, _(L("Rear")) + sep + "&4", _(L("Rear View")), [this](wxCommandEvent&) { select_view("rear"); },
|
||||||
|
"", nullptr, [this](){return can_change_view(); }, this);
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_iso->GetId());
|
append_menu_item(viewMenu, wxID_ANY, _(L("Left")) + sep + "&5", _(L("Left View")), [this](wxCommandEvent&) { select_view("left"); },
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_top->GetId());
|
"", nullptr, [this](){return can_change_view(); }, this);
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_bottom->GetId());
|
append_menu_item(viewMenu, wxID_ANY, _(L("Right")) + sep + "&6", _(L("Right View")), [this](wxCommandEvent&) { select_view("right"); },
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_front->GetId());
|
"", nullptr, [this](){return can_change_view(); }, this);
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_rear->GetId());
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_left->GetId());
|
|
||||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_right->GetId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Help menu
|
// Help menu
|
||||||
auto helpMenu = new wxMenu();
|
auto helpMenu = new wxMenu();
|
||||||
{
|
{
|
||||||
append_menu_item(helpMenu, wxID_ANY, _(L("Prusa 3D &Drivers")), _(L("Open the Prusa3D drivers download page in your browser")),
|
append_menu_item(helpMenu, wxID_ANY, _(L("Prusa 3D &Drivers")), _(L("Open the Prusa3D drivers download page in your browser")),
|
||||||
[this](wxCommandEvent&) { wxLaunchDefaultBrowser("http://www.prusa3d.com/drivers/"); });
|
[this](wxCommandEvent&) { wxGetApp().open_web_page_localized("https://www.prusa3d.com/downloads"); });
|
||||||
append_menu_item(helpMenu, wxID_ANY, _(L("Software &Releases")), _(L("Open the software releases page in your browser")),
|
append_menu_item(helpMenu, wxID_ANY, _(L("Software &Releases")), _(L("Open the software releases page in your browser")),
|
||||||
[this](wxCommandEvent&) { wxLaunchDefaultBrowser("http://github.com/prusa3d/slic3r/releases"); });
|
[this](wxCommandEvent&) { wxLaunchDefaultBrowser("http://github.com/prusa3d/PrusaSlicer/releases"); });
|
||||||
//# my $versioncheck = $self->_append_menu_item($helpMenu, "Check for &Updates...", "Check for new Slic3r versions", sub{
|
//# my $versioncheck = $self->_append_menu_item($helpMenu, "Check for &Updates...", "Check for new Slic3r versions", sub{
|
||||||
//# wxTheApp->check_version(1);
|
//# wxTheApp->check_version(1);
|
||||||
//# });
|
//# });
|
||||||
//# $versioncheck->Enable(wxTheApp->have_version_check);
|
//# $versioncheck->Enable(wxTheApp->have_version_check);
|
||||||
append_menu_item(helpMenu, wxID_ANY, wxString::Format(_(L("%s &Website")), SLIC3R_APP_NAME),
|
append_menu_item(helpMenu, wxID_ANY, wxString::Format(_(L("%s &Website")), SLIC3R_APP_NAME),
|
||||||
wxString::Format(_(L("Open the %s website in your browser")), SLIC3R_APP_NAME),
|
wxString::Format(_(L("Open the %s website in your browser")), SLIC3R_APP_NAME),
|
||||||
[this](wxCommandEvent&) { wxLaunchDefaultBrowser("https://www.prusa3d.com/slic3r-prusa-edition/"); });
|
[this](wxCommandEvent&) { wxGetApp().open_web_page_localized("https://www.prusa3d.com/slicerweb"); });
|
||||||
// append_menu_item(helpMenu, wxID_ANY, wxString::Format(_(L("%s &Manual")), SLIC3R_APP_NAME),
|
// append_menu_item(helpMenu, wxID_ANY, wxString::Format(_(L("%s &Manual")), SLIC3R_APP_NAME),
|
||||||
// wxString::Format(_(L("Open the %s manual in your browser")), SLIC3R_APP_NAME),
|
// wxString::Format(_(L("Open the %s manual in your browser")), SLIC3R_APP_NAME),
|
||||||
// [this](wxCommandEvent&) { wxLaunchDefaultBrowser("http://manual.slic3r.org/"); });
|
// [this](wxCommandEvent&) { wxLaunchDefaultBrowser("http://manual.slic3r.org/"); });
|
||||||
|
@ -445,7 +445,7 @@ FreqChangedParams::FreqChangedParams(wxWindow* parent, const int label_width) :
|
|||||||
|
|
||||||
option = m_og->get_option("fill_density");
|
option = m_og->get_option("fill_density");
|
||||||
option.opt.label = L("Infill");
|
option.opt.label = L("Infill");
|
||||||
option.opt.width = 6;
|
option.opt.width = 7/*6*/;
|
||||||
option.opt.sidetext = " ";
|
option.opt.sidetext = " ";
|
||||||
line.append_option(option);
|
line.append_option(option);
|
||||||
|
|
||||||
@ -1336,6 +1336,8 @@ struct Plater::priv
|
|||||||
bool can_arrange() const;
|
bool can_arrange() const;
|
||||||
bool can_layers_editing() const;
|
bool can_layers_editing() const;
|
||||||
bool can_fix_through_netfabb() const;
|
bool can_fix_through_netfabb() const;
|
||||||
|
bool can_set_instance_to_object() const;
|
||||||
|
bool can_mirror() const;
|
||||||
|
|
||||||
void msw_rescale_object_menu();
|
void msw_rescale_object_menu();
|
||||||
|
|
||||||
@ -1347,10 +1349,8 @@ private:
|
|||||||
bool complit_init_part_menu();
|
bool complit_init_part_menu();
|
||||||
void init_view_toolbar();
|
void init_view_toolbar();
|
||||||
|
|
||||||
bool can_set_instance_to_object() const;
|
|
||||||
bool can_split() const;
|
bool can_split() const;
|
||||||
bool layers_height_allowed() const;
|
bool layers_height_allowed() const;
|
||||||
bool can_mirror() const;
|
|
||||||
|
|
||||||
void update_fff_scene();
|
void update_fff_scene();
|
||||||
void update_sla_scene();
|
void update_sla_scene();
|
||||||
@ -2928,39 +2928,31 @@ void Plater::priv::msw_rescale_object_menu()
|
|||||||
|
|
||||||
bool Plater::priv::init_common_menu(wxMenu* menu, const bool is_part/* = false*/)
|
bool Plater::priv::init_common_menu(wxMenu* menu, const bool is_part/* = false*/)
|
||||||
{
|
{
|
||||||
wxMenuItem* item_delete = nullptr;
|
|
||||||
if (is_part) {
|
if (is_part) {
|
||||||
item_delete = append_menu_item(menu, wxID_ANY, _(L("Delete")) + "\tDel", _(L("Remove the selected object")),
|
append_menu_item(menu, wxID_ANY, _(L("Delete")) + "\tDel", _(L("Remove the selected object")),
|
||||||
[this](wxCommandEvent&) { q->remove_selected(); }, "delete");
|
[this](wxCommandEvent&) { q->remove_selected(); }, "delete", nullptr, [this]() { return can_delete(); }, q);
|
||||||
|
|
||||||
sidebar->obj_list()->append_menu_item_export_stl(menu);
|
sidebar->obj_list()->append_menu_item_export_stl(menu);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
wxMenuItem* item_increase = append_menu_item(menu, wxID_ANY, _(L("Increase copies")) + "\t+", _(L("Place one more copy of the selected object")),
|
wxMenuItem* item_increase = append_menu_item(menu, wxID_ANY, _(L("Increase copies")) + "\t+", _(L("Place one more copy of the selected object")),
|
||||||
[this](wxCommandEvent&) { q->increase_instances(); }, "add_copies");
|
[this](wxCommandEvent&) { q->increase_instances(); }, "add_copies", nullptr, [this]() { return can_increase_instances(); }, q);
|
||||||
wxMenuItem* item_decrease = append_menu_item(menu, wxID_ANY, _(L("Decrease copies")) + "\t-", _(L("Remove one copy of the selected object")),
|
wxMenuItem* item_decrease = append_menu_item(menu, wxID_ANY, _(L("Decrease copies")) + "\t-", _(L("Remove one copy of the selected object")),
|
||||||
[this](wxCommandEvent&) { q->decrease_instances(); }, "remove_copies");
|
[this](wxCommandEvent&) { q->decrease_instances(); }, "remove_copies", nullptr, [this]() { return can_decrease_instances(); }, q);
|
||||||
wxMenuItem* item_set_number_of_copies = append_menu_item(menu, wxID_ANY, _(L("Set number of copies")) + dots, _(L("Change the number of copies of the selected object")),
|
wxMenuItem* item_set_number_of_copies = append_menu_item(menu, wxID_ANY, _(L("Set number of copies")) + dots, _(L("Change the number of copies of the selected object")),
|
||||||
[this](wxCommandEvent&) { q->set_number_of_copies(); }, "number_of_copies");
|
[this](wxCommandEvent&) { q->set_number_of_copies(); }, "number_of_copies", nullptr, [this]() { return can_increase_instances(); }, q);
|
||||||
|
|
||||||
|
|
||||||
items_increase.push_back(item_increase);
|
items_increase.push_back(item_increase);
|
||||||
items_decrease.push_back(item_decrease);
|
items_decrease.push_back(item_decrease);
|
||||||
items_set_number_of_copies.push_back(item_set_number_of_copies);
|
items_set_number_of_copies.push_back(item_set_number_of_copies);
|
||||||
|
|
||||||
// Delete menu was moved to be after +/- instace to make it more difficult to be selected by mistake.
|
// Delete menu was moved to be after +/- instace to make it more difficult to be selected by mistake.
|
||||||
item_delete = append_menu_item(menu, wxID_ANY, _(L("Delete")) + "\tDel", _(L("Remove the selected object")),
|
append_menu_item(menu, wxID_ANY, _(L("Delete")) + "\tDel", _(L("Remove the selected object")),
|
||||||
[this](wxCommandEvent&) { q->remove_selected(); }, "delete");
|
[this](wxCommandEvent&) { q->remove_selected(); }, "delete", nullptr, [this]() { return can_delete(); }, q);
|
||||||
|
|
||||||
menu->AppendSeparator();
|
menu->AppendSeparator();
|
||||||
wxMenuItem* item_instance_to_object = sidebar->obj_list()->append_menu_item_instance_to_object(menu);
|
sidebar->obj_list()->append_menu_item_instance_to_object(menu, q);
|
||||||
|
|
||||||
if (q != nullptr)
|
|
||||||
{
|
|
||||||
q->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_increase_instances()); }, item_increase->GetId());
|
|
||||||
q->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_decrease_instances()); }, item_decrease->GetId());
|
|
||||||
q->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_increase_instances()); }, item_set_number_of_copies->GetId());
|
|
||||||
q->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_set_instance_to_object()); }, item_instance_to_object->GetId());
|
|
||||||
}
|
|
||||||
menu->AppendSeparator();
|
menu->AppendSeparator();
|
||||||
|
|
||||||
append_menu_item(menu, wxID_ANY, _(L("Reload from Disk")), _(L("Reload the selected file from Disk")),
|
append_menu_item(menu, wxID_ANY, _(L("Reload from Disk")), _(L("Reload the selected file from Disk")),
|
||||||
@ -2972,7 +2964,7 @@ bool Plater::priv::init_common_menu(wxMenu* menu, const bool is_part/* = false*/
|
|||||||
menu->AppendSeparator();
|
menu->AppendSeparator();
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMenuItem* item_fix_through_netfabb = sidebar->obj_list()->append_menu_item_fix_through_netfabb(menu);
|
sidebar->obj_list()->append_menu_item_fix_through_netfabb(menu);
|
||||||
|
|
||||||
wxMenu* mirror_menu = new wxMenu();
|
wxMenu* mirror_menu = new wxMenu();
|
||||||
if (mirror_menu == nullptr)
|
if (mirror_menu == nullptr)
|
||||||
@ -2985,16 +2977,8 @@ bool Plater::priv::init_common_menu(wxMenu* menu, const bool is_part/* = false*/
|
|||||||
append_menu_item(mirror_menu, wxID_ANY, _(L("Along Z axis")), _(L("Mirror the selected object along the Z axis")),
|
append_menu_item(mirror_menu, wxID_ANY, _(L("Along Z axis")), _(L("Mirror the selected object along the Z axis")),
|
||||||
[this](wxCommandEvent&) { mirror(Z); }, "mark_Z", menu);
|
[this](wxCommandEvent&) { mirror(Z); }, "mark_Z", menu);
|
||||||
|
|
||||||
wxMenuItem* item_mirror = append_submenu(menu, mirror_menu, wxID_ANY, _(L("Mirror")), _(L("Mirror the selected object")));
|
append_submenu(menu, mirror_menu, wxID_ANY, _(L("Mirror")), _(L("Mirror the selected object")), "",
|
||||||
|
[this]() { return can_mirror(); }, q);
|
||||||
// ui updates needs to be bound to the parent panel
|
|
||||||
if (q != nullptr)
|
|
||||||
{
|
|
||||||
q->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_mirror()); }, item_mirror->GetId());
|
|
||||||
q->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_delete()); }, item_delete->GetId());
|
|
||||||
if (item_fix_through_netfabb)
|
|
||||||
q->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_fix_through_netfabb()); }, item_fix_through_netfabb->GetId());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -3005,30 +2989,24 @@ bool Plater::priv::complit_init_object_menu()
|
|||||||
if (split_menu == nullptr)
|
if (split_menu == nullptr)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
wxMenuItem* item_split_objects = append_menu_item(split_menu, wxID_ANY, _(L("To objects")), _(L("Split the selected object into individual objects")),
|
append_menu_item(split_menu, wxID_ANY, _(L("To objects")), _(L("Split the selected object into individual objects")),
|
||||||
[this](wxCommandEvent&) { split_object(); }, "split_object_SMALL", &object_menu);
|
[this](wxCommandEvent&) { split_object(); }, "split_object_SMALL", &object_menu, [this]() { return can_split(); }, q);
|
||||||
wxMenuItem* item_split_volumes = append_menu_item(split_menu, wxID_ANY, _(L("To parts")), _(L("Split the selected object into individual sub-parts")),
|
append_menu_item(split_menu, wxID_ANY, _(L("To parts")), _(L("Split the selected object into individual sub-parts")),
|
||||||
[this](wxCommandEvent&) { split_volume(); }, "split_parts_SMALL", &object_menu);
|
[this](wxCommandEvent&) { split_volume(); }, "split_parts_SMALL", &object_menu, [this]() { return can_split(); }, q);
|
||||||
|
|
||||||
wxMenuItem* item_split = append_submenu(&object_menu, split_menu, wxID_ANY, _(L("Split")), _(L("Split the selected object"))/*, "shape_ungroup.png"*/);
|
append_submenu(&object_menu, split_menu, wxID_ANY, _(L("Split")), _(L("Split the selected object")), "",
|
||||||
|
[this]() { return can_split() && wxGetApp().get_mode() > comSimple; }, q);
|
||||||
object_menu.AppendSeparator();
|
object_menu.AppendSeparator();
|
||||||
|
|
||||||
// "Add (volumes)" popupmenu will be added later in append_menu_items_add_volume()
|
// "Add (volumes)" popupmenu will be added later in append_menu_items_add_volume()
|
||||||
|
|
||||||
// ui updates needs to be binded to the parent panel
|
|
||||||
if (q != nullptr)
|
|
||||||
{
|
|
||||||
q->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_split()); }, item_split->GetId());
|
|
||||||
q->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_split()); }, item_split_objects->GetId());
|
|
||||||
q->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_split() && wxGetApp().get_mode() > comSimple); }, item_split_volumes->GetId());
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Plater::priv::complit_init_sla_object_menu()
|
bool Plater::priv::complit_init_sla_object_menu()
|
||||||
{
|
{
|
||||||
wxMenuItem* item_split = append_menu_item(&sla_object_menu, wxID_ANY, _(L("Split")), _(L("Split the selected object into individual objects")),
|
append_menu_item(&sla_object_menu, wxID_ANY, _(L("Split")), _(L("Split the selected object into individual objects")),
|
||||||
[this](wxCommandEvent&) { split_object(); }, "split_object_SMALL");
|
[this](wxCommandEvent&) { split_object(); }, "split_object_SMALL", nullptr, [this]() { return can_split(); }, q);
|
||||||
|
|
||||||
sla_object_menu.AppendSeparator();
|
sla_object_menu.AppendSeparator();
|
||||||
|
|
||||||
@ -3036,31 +3014,19 @@ bool Plater::priv::complit_init_sla_object_menu()
|
|||||||
append_menu_item(&sla_object_menu, wxID_ANY, _(L("Optimize orientation")), _(L("Optimize the rotation of the object for better print results.")),
|
append_menu_item(&sla_object_menu, wxID_ANY, _(L("Optimize orientation")), _(L("Optimize the rotation of the object for better print results.")),
|
||||||
[this](wxCommandEvent&) { sla_optimize_rotation(); });
|
[this](wxCommandEvent&) { sla_optimize_rotation(); });
|
||||||
|
|
||||||
// ui updates needs to be binded to the parent panel
|
|
||||||
if (q != nullptr)
|
|
||||||
{
|
|
||||||
q->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_split()); }, item_split->GetId());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Plater::priv::complit_init_part_menu()
|
bool Plater::priv::complit_init_part_menu()
|
||||||
{
|
{
|
||||||
wxMenuItem* item_split = append_menu_item(&part_menu, wxID_ANY, _(L("Split")), _(L("Split the selected object into individual sub-parts")),
|
append_menu_item(&part_menu, wxID_ANY, _(L("Split")), _(L("Split the selected object into individual sub-parts")),
|
||||||
[this](wxCommandEvent&) { split_volume(); }, "split_parts_SMALL");
|
[this](wxCommandEvent&) { split_volume(); }, "split_parts_SMALL", nullptr, [this]() { return can_split(); }, q);
|
||||||
|
|
||||||
part_menu.AppendSeparator();
|
part_menu.AppendSeparator();
|
||||||
|
|
||||||
auto obj_list = sidebar->obj_list();
|
auto obj_list = sidebar->obj_list();
|
||||||
obj_list->append_menu_item_change_type(&part_menu);
|
obj_list->append_menu_item_change_type(&part_menu);
|
||||||
|
|
||||||
// ui updates needs to be binded to the parent panel
|
|
||||||
if (q != nullptr)
|
|
||||||
{
|
|
||||||
q->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_split()); }, item_split->GetId());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3965,6 +3931,8 @@ bool Plater::can_delete() const { return p->can_delete(); }
|
|||||||
bool Plater::can_delete_all() const { return p->can_delete_all(); }
|
bool Plater::can_delete_all() const { return p->can_delete_all(); }
|
||||||
bool Plater::can_increase_instances() const { return p->can_increase_instances(); }
|
bool Plater::can_increase_instances() const { return p->can_increase_instances(); }
|
||||||
bool Plater::can_decrease_instances() const { return p->can_decrease_instances(); }
|
bool Plater::can_decrease_instances() const { return p->can_decrease_instances(); }
|
||||||
|
bool Plater::can_set_instance_to_object() const { return p->can_set_instance_to_object(); }
|
||||||
|
bool Plater::can_fix_through_netfabb() const { return p->can_fix_through_netfabb(); }
|
||||||
bool Plater::can_split_to_objects() const { return p->can_split_to_objects(); }
|
bool Plater::can_split_to_objects() const { return p->can_split_to_objects(); }
|
||||||
bool Plater::can_split_to_volumes() const { return p->can_split_to_volumes(); }
|
bool Plater::can_split_to_volumes() const { return p->can_split_to_volumes(); }
|
||||||
bool Plater::can_arrange() const { return p->can_arrange(); }
|
bool Plater::can_arrange() const { return p->can_arrange(); }
|
||||||
|
@ -200,6 +200,8 @@ public:
|
|||||||
bool can_delete_all() const;
|
bool can_delete_all() const;
|
||||||
bool can_increase_instances() const;
|
bool can_increase_instances() const;
|
||||||
bool can_decrease_instances() const;
|
bool can_decrease_instances() const;
|
||||||
|
bool can_set_instance_to_object() const;
|
||||||
|
bool can_fix_through_netfabb() const;
|
||||||
bool can_split_to_objects() const;
|
bool can_split_to_objects() const;
|
||||||
bool can_split_to_volumes() const;
|
bool can_split_to_volumes() const;
|
||||||
bool can_arrange() const;
|
bool can_arrange() const;
|
||||||
|
@ -24,7 +24,7 @@ std::string get_main_info(bool format_as_html)
|
|||||||
if (!format_as_html)
|
if (!format_as_html)
|
||||||
out << b_start << SLIC3R_APP_NAME << b_end << line_end;
|
out << b_start << SLIC3R_APP_NAME << b_end << line_end;
|
||||||
out << b_start << "Version: " << b_end << SLIC3R_VERSION << line_end;
|
out << b_start << "Version: " << b_end << SLIC3R_VERSION << line_end;
|
||||||
out << b_start << "Build: " << b_end << SLIC3R_BUILD << line_end;
|
out << b_start << "Build: " << b_end << SLIC3R_BUILD_ID << line_end;
|
||||||
out << line_end;
|
out << line_end;
|
||||||
out << b_start << "Operating System: " << b_end << wxPlatformInfo::Get().GetOperatingSystemFamilyName() << line_end;
|
out << b_start << "Operating System: " << b_end << wxPlatformInfo::Get().GetOperatingSystemFamilyName() << line_end;
|
||||||
out << b_start << "System Architecture: " << b_end << wxPlatformInfo::Get().GetArchName() << line_end;
|
out << b_start << "System Architecture: " << b_end << wxPlatformInfo::Get().GetArchName() << line_end;
|
||||||
|
@ -25,8 +25,9 @@ using Slic3r::GUI::from_u8;
|
|||||||
wxDEFINE_EVENT(wxCUSTOMEVT_TICKSCHANGED, wxEvent);
|
wxDEFINE_EVENT(wxCUSTOMEVT_TICKSCHANGED, wxEvent);
|
||||||
wxDEFINE_EVENT(wxCUSTOMEVT_LAST_VOLUME_IS_DELETED, wxCommandEvent);
|
wxDEFINE_EVENT(wxCUSTOMEVT_LAST_VOLUME_IS_DELETED, wxCommandEvent);
|
||||||
|
|
||||||
#ifdef __WXMSW__
|
#ifndef __WXGTK__// msw_menuitem_bitmaps is used for MSW and OSX
|
||||||
static std::map<int, std::string> msw_menuitem_bitmaps;
|
static std::map<int, std::string> msw_menuitem_bitmaps;
|
||||||
|
#ifdef __WXMSW__
|
||||||
void msw_rescale_menu(wxMenu* menu)
|
void msw_rescale_menu(wxMenu* menu)
|
||||||
{
|
{
|
||||||
struct update_icons {
|
struct update_icons {
|
||||||
@ -47,9 +48,27 @@ void msw_rescale_menu(wxMenu* menu)
|
|||||||
update_icons::run(item);
|
update_icons::run(item);
|
||||||
}
|
}
|
||||||
#endif /* __WXMSW__ */
|
#endif /* __WXMSW__ */
|
||||||
|
#endif /* no __WXGTK__ */
|
||||||
|
|
||||||
|
void enable_menu_item(wxUpdateUIEvent& evt, std::function<bool()> const cb_condition, wxMenuItem* item)
|
||||||
|
{
|
||||||
|
const bool enable = cb_condition();
|
||||||
|
evt.Enable(enable);
|
||||||
|
|
||||||
|
#ifdef __WXOSX__
|
||||||
|
const auto it = msw_menuitem_bitmaps.find(item->GetId());
|
||||||
|
if (it != msw_menuitem_bitmaps.end())
|
||||||
|
{
|
||||||
|
const wxBitmap& item_icon = create_scaled_bitmap(nullptr, it->second, 16, false, !enable);
|
||||||
|
if (item_icon.IsOk())
|
||||||
|
item->SetBitmap(item_icon);
|
||||||
|
}
|
||||||
|
#endif // __WXOSX__
|
||||||
|
}
|
||||||
|
|
||||||
wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxString& description,
|
wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxString& description,
|
||||||
std::function<void(wxCommandEvent& event)> cb, const wxBitmap& icon, wxEvtHandler* event_handler)
|
std::function<void(wxCommandEvent& event)> cb, const wxBitmap& icon, wxEvtHandler* event_handler,
|
||||||
|
std::function<bool()> const cb_condition, wxWindow* parent)
|
||||||
{
|
{
|
||||||
if (id == wxID_ANY)
|
if (id == wxID_ANY)
|
||||||
id = wxNewId();
|
id = wxNewId();
|
||||||
@ -67,25 +86,33 @@ wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const
|
|||||||
#endif // __WXMSW__
|
#endif // __WXMSW__
|
||||||
menu->Bind(wxEVT_MENU, cb, id);
|
menu->Bind(wxEVT_MENU, cb, id);
|
||||||
|
|
||||||
|
if (parent) {
|
||||||
|
parent->Bind(wxEVT_UPDATE_UI, [cb_condition, item](wxUpdateUIEvent& evt) {
|
||||||
|
enable_menu_item(evt, cb_condition, item); }, id);
|
||||||
|
}
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxString& description,
|
wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxString& description,
|
||||||
std::function<void(wxCommandEvent& event)> cb, const std::string& icon, wxEvtHandler* event_handler)
|
std::function<void(wxCommandEvent& event)> cb, const std::string& icon, wxEvtHandler* event_handler,
|
||||||
|
std::function<bool()> const cb_condition, wxWindow* parent)
|
||||||
{
|
{
|
||||||
if (id == wxID_ANY)
|
if (id == wxID_ANY)
|
||||||
id = wxNewId();
|
id = wxNewId();
|
||||||
|
|
||||||
const wxBitmap& bmp = !icon.empty() ? create_scaled_bitmap(nullptr, icon) : wxNullBitmap; // FIXME: pass window ptr
|
const wxBitmap& bmp = !icon.empty() ? create_scaled_bitmap(nullptr, icon) : wxNullBitmap; // FIXME: pass window ptr
|
||||||
#ifdef __WXMSW__
|
//#ifdef __WXMSW__
|
||||||
|
#ifndef __WXGTK__
|
||||||
if (bmp.IsOk())
|
if (bmp.IsOk())
|
||||||
msw_menuitem_bitmaps[id] = icon;
|
msw_menuitem_bitmaps[id] = icon;
|
||||||
#endif /* __WXMSW__ */
|
#endif /* __WXMSW__ */
|
||||||
|
|
||||||
return append_menu_item(menu, id, string, description, cb, bmp, event_handler);
|
return append_menu_item(menu, id, string, description, cb, bmp, event_handler, cb_condition, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMenuItem* append_submenu(wxMenu* menu, wxMenu* sub_menu, int id, const wxString& string, const wxString& description, const std::string& icon)
|
wxMenuItem* append_submenu(wxMenu* menu, wxMenu* sub_menu, int id, const wxString& string, const wxString& description, const std::string& icon,
|
||||||
|
std::function<bool()> const cb_condition, wxWindow* parent)
|
||||||
{
|
{
|
||||||
if (id == wxID_ANY)
|
if (id == wxID_ANY)
|
||||||
id = wxNewId();
|
id = wxNewId();
|
||||||
@ -93,7 +120,8 @@ wxMenuItem* append_submenu(wxMenu* menu, wxMenu* sub_menu, int id, const wxStrin
|
|||||||
wxMenuItem* item = new wxMenuItem(menu, id, string, description);
|
wxMenuItem* item = new wxMenuItem(menu, id, string, description);
|
||||||
if (!icon.empty()) {
|
if (!icon.empty()) {
|
||||||
item->SetBitmap(create_scaled_bitmap(nullptr, icon)); // FIXME: pass window ptr
|
item->SetBitmap(create_scaled_bitmap(nullptr, icon)); // FIXME: pass window ptr
|
||||||
#ifdef __WXMSW__
|
//#ifdef __WXMSW__
|
||||||
|
#ifndef __WXGTK__
|
||||||
msw_menuitem_bitmaps[id] = icon;
|
msw_menuitem_bitmaps[id] = icon;
|
||||||
#endif /* __WXMSW__ */
|
#endif /* __WXMSW__ */
|
||||||
}
|
}
|
||||||
@ -101,6 +129,11 @@ wxMenuItem* append_submenu(wxMenu* menu, wxMenu* sub_menu, int id, const wxStrin
|
|||||||
item->SetSubMenu(sub_menu);
|
item->SetSubMenu(sub_menu);
|
||||||
menu->Append(item);
|
menu->Append(item);
|
||||||
|
|
||||||
|
if (parent) {
|
||||||
|
parent->Bind(wxEVT_UPDATE_UI, [cb_condition, item](wxUpdateUIEvent& evt) {
|
||||||
|
enable_menu_item(evt, cb_condition, item); }, id);
|
||||||
|
}
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,7 +383,8 @@ int em_unit(wxWindow* win)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If an icon has horizontal orientation (width > height) call this function with is_horizontal = true
|
// If an icon has horizontal orientation (width > height) call this function with is_horizontal = true
|
||||||
wxBitmap create_scaled_bitmap(wxWindow *win, const std::string& bmp_name_in, const int px_cnt/* = 16*/, const bool is_horizontal /* = false*/)
|
wxBitmap create_scaled_bitmap(wxWindow *win, const std::string& bmp_name_in,
|
||||||
|
const int px_cnt/* = 16*/, const bool is_horizontal /* = false*/, const bool grayscale/* = false*/)
|
||||||
{
|
{
|
||||||
static Slic3r::GUI::BitmapCache cache;
|
static Slic3r::GUI::BitmapCache cache;
|
||||||
|
|
||||||
@ -370,9 +404,9 @@ wxBitmap create_scaled_bitmap(wxWindow *win, const std::string& bmp_name_in, con
|
|||||||
boost::replace_last(bmp_name, ".png", "");
|
boost::replace_last(bmp_name, ".png", "");
|
||||||
|
|
||||||
// Try loading an SVG first, then PNG if SVG is not found:
|
// Try loading an SVG first, then PNG if SVG is not found:
|
||||||
wxBitmap *bmp = cache.load_svg(bmp_name, width, height, scale_factor);
|
wxBitmap *bmp = cache.load_svg(bmp_name, width, height, scale_factor, grayscale);
|
||||||
if (bmp == nullptr) {
|
if (bmp == nullptr) {
|
||||||
bmp = cache.load_png(bmp_name, width, height);
|
bmp = cache.load_png(bmp_name, width, height, grayscale);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bmp == nullptr) {
|
if (bmp == nullptr) {
|
||||||
@ -2456,7 +2490,6 @@ ModeButton::ModeButton( wxWindow * parent,
|
|||||||
const wxString& mode /* = wxEmptyString*/,
|
const wxString& mode /* = wxEmptyString*/,
|
||||||
const wxSize& size /* = wxDefaultSize*/,
|
const wxSize& size /* = wxDefaultSize*/,
|
||||||
const wxPoint& pos /* = wxDefaultPosition*/) :
|
const wxPoint& pos /* = wxDefaultPosition*/) :
|
||||||
// wxButton(parent, id, mode, pos, wxDefaultSize/*size*/, wxBU_EXACTFIT | wxNO_BORDER),
|
|
||||||
ScalableButton(parent, id, icon_name, mode, size, pos)
|
ScalableButton(parent, id, icon_name, mode, size, pos)
|
||||||
{
|
{
|
||||||
m_tt_focused = wxString::Format(_(L("Switch to the %s mode")), mode);
|
m_tt_focused = wxString::Format(_(L("Switch to the %s mode")), mode);
|
||||||
@ -2513,7 +2546,14 @@ ModeSizer::ModeSizer(wxWindow *parent, int hgap/* = 10*/) :
|
|||||||
|
|
||||||
m_mode_btns.reserve(3);
|
m_mode_btns.reserve(3);
|
||||||
for (const auto& button : buttons) {
|
for (const auto& button : buttons) {
|
||||||
m_mode_btns.push_back(new ModeButton(parent, wxID_ANY, button.second, button.first));
|
#ifdef __WXOSX__
|
||||||
|
wxSize sz = parent->GetTextExtent(button.first);
|
||||||
|
// set default width for ModeButtons to correct rendering on OnFocus under OSX
|
||||||
|
sz.x += 2 * em_unit(parent);
|
||||||
|
m_mode_btns.push_back(new ModeButton(parent, wxID_ANY, button.second, button.first, sz));
|
||||||
|
#else
|
||||||
|
m_mode_btns.push_back(new ModeButton(parent, wxID_ANY, button.second, button.first));;
|
||||||
|
#endif // __WXOSX__
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto btn : m_mode_btns)
|
for (auto btn : m_mode_btns)
|
||||||
|
@ -27,12 +27,15 @@ inline void msw_rescale_menu(wxMenu* /* menu */) {}
|
|||||||
#endif /* __WXMSW__ */
|
#endif /* __WXMSW__ */
|
||||||
|
|
||||||
wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxString& description,
|
wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxString& description,
|
||||||
std::function<void(wxCommandEvent& event)> cb, const wxBitmap& icon, wxEvtHandler* event_handler = nullptr);
|
std::function<void(wxCommandEvent& event)> cb, const wxBitmap& icon, wxEvtHandler* event_handler = nullptr,
|
||||||
|
std::function<bool()> const cb_condition = []() { return true;}, wxWindow* parent = nullptr);
|
||||||
wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxString& description,
|
wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxString& description,
|
||||||
std::function<void(wxCommandEvent& event)> cb, const std::string& icon = "", wxEvtHandler* event_handler = nullptr);
|
std::function<void(wxCommandEvent& event)> cb, const std::string& icon = "", wxEvtHandler* event_handler = nullptr,
|
||||||
|
std::function<bool()> const cb_condition = []() { return true; }, wxWindow* parent = nullptr);
|
||||||
|
|
||||||
wxMenuItem* append_submenu(wxMenu* menu, wxMenu* sub_menu, int id, const wxString& string, const wxString& description,
|
wxMenuItem* append_submenu(wxMenu* menu, wxMenu* sub_menu, int id, const wxString& string, const wxString& description,
|
||||||
const std::string& icon = "");
|
const std::string& icon = "",
|
||||||
|
std::function<bool()> const cb_condition = []() { return true; }, wxWindow* parent = nullptr);
|
||||||
|
|
||||||
wxMenuItem* append_menu_radio_item(wxMenu* menu, int id, const wxString& string, const wxString& description,
|
wxMenuItem* append_menu_radio_item(wxMenu* menu, int id, const wxString& string, const wxString& description,
|
||||||
std::function<void(wxCommandEvent& event)> cb, wxEvtHandler* event_handler);
|
std::function<void(wxCommandEvent& event)> cb, wxEvtHandler* event_handler);
|
||||||
@ -42,7 +45,8 @@ void edit_tooltip(wxString& tooltip);
|
|||||||
void msw_buttons_rescale(wxDialog* dlg, const int em_unit, const std::vector<int>& btn_ids);
|
void msw_buttons_rescale(wxDialog* dlg, const int em_unit, const std::vector<int>& btn_ids);
|
||||||
int em_unit(wxWindow* win);
|
int em_unit(wxWindow* win);
|
||||||
|
|
||||||
wxBitmap create_scaled_bitmap(wxWindow *win, const std::string& bmp_name, const int px_cnt = 16, const bool is_horizontal = false);
|
wxBitmap create_scaled_bitmap(wxWindow *win, const std::string& bmp_name,
|
||||||
|
const int px_cnt = 16, const bool is_horizontal = false, const bool grayscale = false);
|
||||||
|
|
||||||
class wxCheckListBoxComboPopup : public wxCheckListBox, public wxComboPopup
|
class wxCheckListBoxComboPopup : public wxCheckListBox, public wxComboPopup
|
||||||
{
|
{
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
set(SLIC3R_APP_NAME "PrusaSlicer")
|
set(SLIC3R_APP_NAME "PrusaSlicer")
|
||||||
set(SLIC3R_APP_KEY "PrusaSlicer")
|
set(SLIC3R_APP_KEY "PrusaSlicer")
|
||||||
set(SLIC3R_VERSION "1.42.0-beta2")
|
set(SLIC3R_VERSION "1.42.0-beta2")
|
||||||
set(SLIC3R_BUILD "${SLIC3R_VERSION}+UNKNOWN")
|
set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION}+UNKNOWN")
|
||||||
set(SLIC3R_BUILD_ID "${SLIC3R_BUILD_ID}")
|
|
||||||
set(SLIC3R_RC_VERSION "1,42,0,0")
|
set(SLIC3R_RC_VERSION "1,42,0,0")
|
||||||
set(SLIC3R_RC_VERSION_DOTS "1.42.0.0")
|
set(SLIC3R_RC_VERSION_DOTS "1.42.0.0")
|
||||||
|
@ -20,7 +20,7 @@ VERSION()
|
|||||||
SV*
|
SV*
|
||||||
BUILD()
|
BUILD()
|
||||||
CODE:
|
CODE:
|
||||||
RETVAL = newSVpv(SLIC3R_BUILD, 0);
|
RETVAL = newSVpv(SLIC3R_BUILD_ID, 0);
|
||||||
OUTPUT: RETVAL
|
OUTPUT: RETVAL
|
||||||
|
|
||||||
SV*
|
SV*
|
||||||
|