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 "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 "install these dependencies to build and run Slic3r.\n";
|
||||
print "install these dependencies to build and run PrusaSlicer.\n";
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
@ -122,7 +122,7 @@ EOF
|
||||
}
|
||||
|
||||
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 "2) run cmake .. -DCMAKE_BUILD_TYPE=Release\n";
|
||||
print "3) run make\n";
|
||||
|
@ -1,4 +1,4 @@
|
||||
project(Slic3r)
|
||||
project(PrusaSlicer)
|
||||
cmake_minimum_required(VERSION 3.2)
|
||||
|
||||
include("version.inc")
|
||||
@ -22,11 +22,11 @@ else()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
option(SLIC3R_STATIC "Compile Slic3r with static libraries (Boost, TBB, glew)" ${SLIC3R_STATIC_INITIAL})
|
||||
option(SLIC3R_GUI "Compile Slic3r with GUI components (OpenGL, wxWidgets)" 1)
|
||||
option(SLIC3R_FHS "Assume Slic3r is to be installed in a FHS directory structure" 0)
|
||||
option(SLIC3R_STATIC "Compile PrusaSlicer with static libraries (Boost, TBB, glew)" ${SLIC3R_STATIC_INITIAL})
|
||||
option(SLIC3R_GUI "Compile PrusaSlicer with GUI components (OpenGL, wxWidgets)" 1)
|
||||
option(SLIC3R_FHS "Assume PrusaSlicer is to be installed in a FHS directory structure" 0)
|
||||
option(SLIC3R_WX_STABLE "Build against wxWidgets stable (3.0) as oppsed to dev (3.1) on Linux" 0)
|
||||
option(SLIC3R_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_MSVC_COMPILE_PARALLEL "Compile on Visual Studio in parallel" 1)
|
||||
option(SLIC3R_MSVC_PDB "Generate PDB files on MSVC in Release mode" 1)
|
||||
@ -59,7 +59,8 @@ if (MSVC)
|
||||
endif ()
|
||||
# /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
|
||||
add_compile_options(-bigobj -Zm316)
|
||||
# Generate symbols at every build target, even for the release.
|
||||
add_compile_options(-bigobj -Zm316 /Zi)
|
||||
endif ()
|
||||
|
||||
# Display and check CMAKE_PREFIX_PATH
|
||||
@ -207,13 +208,13 @@ endif()
|
||||
add_definitions(-DwxUSE_UNICODE -D_UNICODE -DUNICODE -DWXINTL_NO_GETTEXT_MACRO)
|
||||
|
||||
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)
|
||||
endif ()
|
||||
|
||||
# Disable optimization even with debugging on.
|
||||
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_RELWITHDEBINFO: ${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"
|
||||
)
|
||||
|
||||
# libslic3r, Slic3r GUI and the slic3r executable.
|
||||
# libslic3r, PrusaSlicer GUI and the PrusaSlicer executable.
|
||||
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.
|
||||
# Also runs the unit / integration tests.
|
||||
@ -360,7 +361,7 @@ endif()
|
||||
if (WIN32)
|
||||
install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${CMAKE_INSTALL_PREFIX}/resources")
|
||||
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}")
|
||||
endif ()
|
||||
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.
|
||||
#
|
||||
# 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
|
||||
# when building Slic3r - 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.
|
||||
# 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 PrusaSlicer.
|
||||
#
|
||||
# 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
|
||||
@ -20,7 +20,7 @@
|
||||
# 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)
|
||||
|
||||
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_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 "Slic3r deps debug build: ${DEP_DEBUG}")
|
||||
message(STATUS "PrusaSlicer deps DESTDIR: ${DESTDIR}")
|
||||
message(STATUS "PrusaSlicer deps debug build: ${DEP_DEBUG}")
|
||||
|
||||
if (MSVC)
|
||||
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_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"
|
||||
|
||||
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.
|
||||
|
||||
### 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.
|
||||
|
||||
If `cmake` has finished without errors, go to the build directory and open the `Slic3r.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
|
||||
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 `PrusaSlicer_app_...`) and that you're building
|
||||
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.
|
||||
|
||||
|
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 ""
|
||||
"Project-Id-Version: PACKAGE VERSION\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"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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):"
|
||||
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!"
|
||||
msgstr ""
|
||||
|
||||
@ -312,7 +312,7 @@ msgstr ""
|
||||
msgid "All standard"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
@ -756,9 +756,9 @@ msgstr ""
|
||||
msgid "Add..."
|
||||
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/Tab.cpp:2956
|
||||
#: src/slic3r/GUI/Tab.cpp:2957
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
@ -1015,7 +1015,7 @@ msgstr ""
|
||||
msgid "Switch to editing mode"
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
@ -1023,7 +1023,7 @@ msgstr ""
|
||||
msgid "Please check and fix your object list."
|
||||
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!"
|
||||
msgstr ""
|
||||
|
||||
@ -1099,7 +1099,7 @@ msgstr ""
|
||||
#: 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: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/libslic3r/PrintConfig.cpp:188 src/libslic3r/PrintConfig.cpp:351
|
||||
#: src/libslic3r/PrintConfig.cpp:989 src/libslic3r/PrintConfig.cpp:2200
|
||||
@ -1169,7 +1169,7 @@ msgstr ""
|
||||
msgid "The presets on the following tabs were modified"
|
||||
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?"
|
||||
msgstr ""
|
||||
|
||||
@ -1267,8 +1267,8 @@ msgid "Extrusion Width"
|
||||
msgstr ""
|
||||
|
||||
#: 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/Tab.cpp:3423 src/libslic3r/PrintConfig.cpp:2388
|
||||
#: src/slic3r/GUI/Plater.cpp:429 src/slic3r/GUI/Tab.cpp:3423
|
||||
#: 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:2413 src/libslic3r/PrintConfig.cpp:2423
|
||||
#: src/libslic3r/PrintConfig.cpp:2449 src/libslic3r/PrintConfig.cpp:2456
|
||||
@ -1280,7 +1280,7 @@ msgid "Supports"
|
||||
msgstr ""
|
||||
|
||||
#: 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:2562 src/libslic3r/PrintConfig.cpp:2572
|
||||
#: 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 ""
|
||||
|
||||
#: 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:2865
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2897 src/slic3r/GUI/wxExtensions.cpp:499
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:390 src/slic3r/GUI/GUI_ObjectList.cpp:2846
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2856
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2888 src/slic3r/GUI/wxExtensions.cpp:499
|
||||
#: src/slic3r/GUI/wxExtensions.cpp:524
|
||||
msgid "default"
|
||||
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:1157
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1389
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1384
|
||||
#, possible-c-format
|
||||
msgid "Quick Add Settings (%s)"
|
||||
msgstr ""
|
||||
@ -1383,150 +1383,167 @@ msgid "Change type"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1212
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1210
|
||||
msgid "Rename"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1222
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1220
|
||||
msgid "Fix through the Netfabb"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1238
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1236
|
||||
msgid "Change extruder"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1263
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1261
|
||||
msgid "Select new extruder for the object/part"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1343
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1338
|
||||
msgid "Set as a Separated Objects"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1556
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1551
|
||||
msgid "Generic"
|
||||
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."
|
||||
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."
|
||||
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 ""
|
||||
"The selected object couldn't be split because it contains only one part."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1851
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1846
|
||||
msgid "Group manipulation"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1863
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1858
|
||||
msgid "Object manipulation"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1873
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1868
|
||||
msgid "Object Settings to modify"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1877
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1872
|
||||
msgid "Part Settings to modify"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1886
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1881
|
||||
msgid "Part manipulation"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1892
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:1887
|
||||
msgid "Instance manipulation"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2417
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2412
|
||||
msgid "Object or Instance"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2417
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2412
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2543
|
||||
msgid "Part"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2419
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2414
|
||||
msgid "Unsupported selection"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2420
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2415
|
||||
#, possible-c-format
|
||||
msgid "You started your selection with %s Item."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2421
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2416
|
||||
#, possible-c-format
|
||||
msgid "In this mode you can select only other %s Items%s"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2424
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2419
|
||||
msgid "of a current Object"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2429
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2502 src/slic3r/GUI/Plater.cpp:118
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2424
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2497 src/slic3r/GUI/Plater.cpp:118
|
||||
msgid "Info"
|
||||
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."
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2714
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2709
|
||||
msgid "Enter new name"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2714
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2709
|
||||
msgid "Renaming"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2730
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2824 src/slic3r/GUI/Tab.cpp:3303
|
||||
#: src/slic3r/GUI/Tab.cpp:3307
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2725
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2819 src/slic3r/GUI/Tab.cpp:3304
|
||||
#: src/slic3r/GUI/Tab.cpp:3308
|
||||
msgid "The supplied name is not valid;"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2731
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2825 src/slic3r/GUI/Tab.cpp:3304
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2726
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2820 src/slic3r/GUI/Tab.cpp:3305
|
||||
msgid "the following characters are not allowed:"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2845
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2836
|
||||
msgid "Set extruder for selected items"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2859
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2850
|
||||
msgid "Select extruder number:"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2860
|
||||
#: src/slic3r/GUI/GUI_ObjectList.cpp:2851
|
||||
msgid "This extruder will be set for selected items"
|
||||
msgstr ""
|
||||
|
||||
@ -1934,9 +1951,14 @@ msgstr ""
|
||||
msgid "Layers Slider Shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/MainFrame.cpp:36
|
||||
msgid "based on Slic3r"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/MainFrame.cpp:61
|
||||
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 ""
|
||||
|
||||
#: 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/Plater.cpp:3658 src/slic3r/GUI/Tab.cpp:1163
|
||||
#: src/slic3r/GUI/Tab.cpp:3461
|
||||
#: src/slic3r/GUI/Tab.cpp:3462
|
||||
msgid "Slicing"
|
||||
msgstr ""
|
||||
|
||||
@ -2953,7 +2975,11 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: src/slic3r/GUI/Preferences.cpp:71
|
||||
@ -3334,7 +3360,7 @@ msgstr ""
|
||||
msgid "default SLA print profile"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
@ -3418,7 +3444,7 @@ msgstr ""
|
||||
msgid "Other"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
@ -3430,7 +3456,7 @@ msgstr ""
|
||||
msgid "Extruder clearance (mm)"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
@ -3442,19 +3468,19 @@ msgstr ""
|
||||
#: 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: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"
|
||||
msgstr ""
|
||||
|
||||
#: 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:3361 src/slic3r/GUI/Tab.cpp:3470
|
||||
#: src/slic3r/GUI/Tab.cpp:3362 src/slic3r/GUI/Tab.cpp:3471
|
||||
msgid "Dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: 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:3362 src/slic3r/GUI/Tab.cpp:3471
|
||||
#: src/slic3r/GUI/Tab.cpp:3363 src/slic3r/GUI/Tab.cpp:3472
|
||||
msgid "Profile dependencies"
|
||||
msgstr ""
|
||||
|
||||
@ -3617,7 +3643,7 @@ msgid "Size and coordinates"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
msgstr ""
|
||||
|
||||
@ -3681,7 +3707,7 @@ msgstr ""
|
||||
msgid "Tilt time"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
@ -3760,106 +3786,106 @@ msgid ""
|
||||
"setups)"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2448
|
||||
#: src/slic3r/GUI/Tab.cpp:2449
|
||||
msgid ""
|
||||
"The Wipe option is not available when using the Firmware Retraction mode.\n"
|
||||
"\n"
|
||||
"Shall I disable it in order to enable Firmware Retraction?"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2450
|
||||
#: src/slic3r/GUI/Tab.cpp:2451
|
||||
msgid "Firmware Retraction"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2776
|
||||
#, possible-c-format
|
||||
msgid "Default preset (%s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2777
|
||||
#, possible-c-format
|
||||
msgid "Default preset (%s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2778
|
||||
#, possible-c-format
|
||||
msgid "Preset (%s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2794
|
||||
#: src/slic3r/GUI/Tab.cpp:2795
|
||||
msgid "has the following unsaved changes:"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2797
|
||||
#: src/slic3r/GUI/Tab.cpp:2798
|
||||
msgid "is not compatible with printer"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2798
|
||||
#: src/slic3r/GUI/Tab.cpp:2799
|
||||
msgid "is not compatible with print profile"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2800
|
||||
#: src/slic3r/GUI/Tab.cpp:2801
|
||||
msgid "and it has the following unsaved changes:"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2804
|
||||
#: src/slic3r/GUI/Tab.cpp:2805
|
||||
msgid "Unsaved Changes"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2816
|
||||
#: src/slic3r/GUI/Tab.cpp:2817
|
||||
msgid "Please check your object list before preset changing."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2895
|
||||
#: src/slic3r/GUI/Tab.cpp:2896
|
||||
msgid "%1% - Copy"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2918
|
||||
#: src/slic3r/GUI/Tab.cpp:2919
|
||||
msgid "The supplied name is empty. It can't be saved."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2923
|
||||
#: src/slic3r/GUI/Tab.cpp:2924
|
||||
msgid "Cannot overwrite a system profile."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2927
|
||||
#: src/slic3r/GUI/Tab.cpp:2928
|
||||
msgid "Cannot overwrite an external profile."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2953
|
||||
#: src/slic3r/GUI/Tab.cpp:2954
|
||||
msgid "remove"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2953
|
||||
#: src/slic3r/GUI/Tab.cpp:2954
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
|
||||
#. 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?"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:2956
|
||||
#: src/slic3r/GUI/Tab.cpp:2957
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#. TRN Remove/Delete
|
||||
#: src/slic3r/GUI/Tab.cpp:2958
|
||||
#: src/slic3r/GUI/Tab.cpp:2959
|
||||
msgid "%1% Preset"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3084
|
||||
#: src/slic3r/GUI/Tab.cpp:3085
|
||||
msgid "LOCKED LOCK"
|
||||
msgstr ""
|
||||
|
||||
#. TRN Description for "LOCKED LOCK"
|
||||
#: src/slic3r/GUI/Tab.cpp:3086
|
||||
#: src/slic3r/GUI/Tab.cpp:3087
|
||||
msgid ""
|
||||
"indicates that the settings are the same as the system values for the "
|
||||
"current option group"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3088
|
||||
#: src/slic3r/GUI/Tab.cpp:3089
|
||||
msgid "UNLOCKED LOCK"
|
||||
msgstr ""
|
||||
|
||||
#. TRN Description for "UNLOCKED LOCK"
|
||||
#: src/slic3r/GUI/Tab.cpp:3090
|
||||
#: src/slic3r/GUI/Tab.cpp:3091
|
||||
msgid ""
|
||||
"indicates that some settings were changed and are not equal to the system "
|
||||
"values for the current option group.\n"
|
||||
@ -3867,23 +3893,23 @@ msgid ""
|
||||
"to the system values."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3095
|
||||
#: src/slic3r/GUI/Tab.cpp:3096
|
||||
msgid "WHITE BULLET"
|
||||
msgstr ""
|
||||
|
||||
#. TRN Description for "WHITE BULLET"
|
||||
#: src/slic3r/GUI/Tab.cpp:3097
|
||||
#: src/slic3r/GUI/Tab.cpp:3098
|
||||
msgid ""
|
||||
"for the left button: \tindicates a non-system preset,\n"
|
||||
"for the right button: \tindicates that the settings hasn't been modified."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3100
|
||||
#: src/slic3r/GUI/Tab.cpp:3101
|
||||
msgid "BACK ARROW"
|
||||
msgstr ""
|
||||
|
||||
#. TRN Description for "BACK ARROW"
|
||||
#: src/slic3r/GUI/Tab.cpp:3102
|
||||
#: src/slic3r/GUI/Tab.cpp:3103
|
||||
msgid ""
|
||||
"indicates that the settings were changed and are not equal to the last saved "
|
||||
"preset for the current option group.\n"
|
||||
@ -3891,30 +3917,30 @@ msgid ""
|
||||
"to the last saved preset."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3127
|
||||
#: src/slic3r/GUI/Tab.cpp:3128
|
||||
msgid ""
|
||||
"LOCKED LOCK icon indicates that the settings are the same as the system "
|
||||
"values for the current option group"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3129
|
||||
#: src/slic3r/GUI/Tab.cpp:3130
|
||||
msgid ""
|
||||
"UNLOCKED LOCK icon indicates that some settings were changed and are not "
|
||||
"equal to the system values for the current option group.\n"
|
||||
"Click to reset all settings for current option group to the system values."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3132
|
||||
#: src/slic3r/GUI/Tab.cpp:3133
|
||||
msgid "WHITE BULLET icon indicates a non system preset."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3135
|
||||
#: src/slic3r/GUI/Tab.cpp:3136
|
||||
msgid ""
|
||||
"WHITE BULLET icon indicates that the settings are the same as in the last "
|
||||
"saved preset for the current option group."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3137
|
||||
#: src/slic3r/GUI/Tab.cpp:3138
|
||||
msgid ""
|
||||
"BACK ARROW icon indicates that the settings were changed and are not equal "
|
||||
"to the last saved preset for the current option group.\n"
|
||||
@ -3922,25 +3948,25 @@ msgid ""
|
||||
"preset."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3143
|
||||
#: src/slic3r/GUI/Tab.cpp:3144
|
||||
msgid ""
|
||||
"LOCKED LOCK icon indicates that the value is the same as the system value."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3144
|
||||
#: src/slic3r/GUI/Tab.cpp:3145
|
||||
msgid ""
|
||||
"UNLOCKED LOCK icon indicates that the value was changed and is not equal to "
|
||||
"the system value.\n"
|
||||
"Click to reset current value to the system value."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3150
|
||||
#: src/slic3r/GUI/Tab.cpp:3151
|
||||
msgid ""
|
||||
"WHITE BULLET icon indicates that the value is the same as in the last saved "
|
||||
"preset."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3151
|
||||
#: src/slic3r/GUI/Tab.cpp:3152
|
||||
msgid ""
|
||||
"BACK ARROW icon indicates that the value was changed and is not equal to the "
|
||||
"last saved preset.\n"
|
||||
@ -3948,60 +3974,60 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#. TRN Preset
|
||||
#: src/slic3r/GUI/Tab.cpp:3264
|
||||
#: src/slic3r/GUI/Tab.cpp:3265
|
||||
#, possible-c-format
|
||||
msgid "Save %s as:"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3308
|
||||
#: src/slic3r/GUI/Tab.cpp:3309
|
||||
msgid "the following postfix are not allowed:"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3312
|
||||
#: src/slic3r/GUI/Tab.cpp:3313
|
||||
msgid "The supplied name is not available."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3325
|
||||
#: src/slic3r/GUI/Tab.cpp:3326
|
||||
msgid "Material"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3331
|
||||
#: src/slic3r/GUI/Tab.cpp:3332
|
||||
msgid "Exposure"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3426
|
||||
#: src/slic3r/GUI/Tab.cpp:3427
|
||||
msgid "Support head"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3431
|
||||
#: src/slic3r/GUI/Tab.cpp:3432
|
||||
msgid "Support pillar"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3441
|
||||
#: src/slic3r/GUI/Tab.cpp:3442
|
||||
msgid "Connection of the support sticks and junctions"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3446
|
||||
#: src/slic3r/GUI/Tab.cpp:3447
|
||||
msgid "Automatic generation"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3508
|
||||
#: src/slic3r/GUI/Tab.cpp:3509
|
||||
msgid "Head penetration should not be greater than the head width."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3509
|
||||
#: src/slic3r/GUI/Tab.cpp:3510
|
||||
msgid "Invalid Head penetration"
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3521
|
||||
#: src/slic3r/GUI/Tab.cpp:3522
|
||||
msgid "Pinhead diameter should be smaller than the pillar diameter."
|
||||
msgstr ""
|
||||
|
||||
#: src/slic3r/GUI/Tab.cpp:3522
|
||||
#: src/slic3r/GUI/Tab.cpp:3523
|
||||
msgid "Invalid pinhead diameter"
|
||||
msgstr ""
|
||||
|
@ -1,4 +1,4 @@
|
||||
project(Slic3r-native)
|
||||
project(PrusaSlicer-native)
|
||||
|
||||
add_subdirectory(admesh)
|
||||
add_subdirectory(avrdude)
|
||||
@ -64,39 +64,36 @@ endif()
|
||||
|
||||
# Create a slic3r executable
|
||||
# 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/slic3r.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/slic3r.manifest @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/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)
|
||||
if (MSVC)
|
||||
add_library(slic3r SHARED slic3r.cpp slic3r.hpp)
|
||||
add_library(PrusaSlicer SHARED PrusaSlicer.cpp PrusaSlicer.hpp)
|
||||
else ()
|
||||
add_executable(slic3r slic3r.cpp slic3r.hpp)
|
||||
add_executable(PrusaSlicer PrusaSlicer.cpp PrusaSlicer.hpp)
|
||||
endif ()
|
||||
if (NOT MSVC)
|
||||
if(SLIC3R_GUI)
|
||||
set_target_properties(slic3r PROPERTIES OUTPUT_NAME "slic3r-gui")
|
||||
else()
|
||||
set_target_properties(slic3r PROPERTIES OUTPUT_NAME "slic3r-console")
|
||||
endif()
|
||||
# Binary name on unix like systems (OSX, Linux)
|
||||
set_target_properties(PrusaSlicer PROPERTIES OUTPUT_NAME "prusa-slicer")
|
||||
endif ()
|
||||
|
||||
target_link_libraries(slic3r libslic3r)
|
||||
target_link_libraries(PrusaSlicer libslic3r)
|
||||
if (APPLE)
|
||||
# add_compile_options(-stdlib=libc++)
|
||||
# add_definitions(-DBOOST_THREAD_DONT_USE_CHRONO -DBOOST_NO_CXX11_RVALUE_REFERENCES -DBOOST_THREAD_USES_MOVE)
|
||||
# -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)
|
||||
# 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")
|
||||
else ()
|
||||
# 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 ()
|
||||
|
||||
# Add the Slic3r GUI library, libcurl, OpenGL and GLU libraries.
|
||||
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
|
||||
find_package(CURL REQUIRED)
|
||||
@ -104,13 +101,13 @@ if (SLIC3R_GUI)
|
||||
# Required by libcurl
|
||||
find_package(ZLIB REQUIRED)
|
||||
endif()
|
||||
target_include_directories(slic3r PRIVATE ${CURL_INCLUDE_DIRS})
|
||||
target_link_libraries(slic3r ${CURL_LIBRARIES} ${ZLIB_LIBRARIES})
|
||||
target_include_directories(PrusaSlicer PRIVATE ${CURL_INCLUDE_DIRS})
|
||||
target_link_libraries(PrusaSlicer ${CURL_LIBRARIES} ${ZLIB_LIBRARIES})
|
||||
if (SLIC3R_STATIC)
|
||||
if (NOT APPLE)
|
||||
# libcurl is always linked dynamically to the system libcurl on OSX.
|
||||
# On other systems, libcurl is linked statically if SLIC3R_STATIC is set.
|
||||
target_compile_definitions(slic3r PRIVATE CURL_STATICLIB)
|
||||
target_compile_definitions(PrusaSlicer PRIVATE CURL_STATICLIB)
|
||||
endif()
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
# As of now, our build system produces a statically linked libcurl,
|
||||
@ -118,34 +115,40 @@ if (SLIC3R_GUI)
|
||||
find_package(OpenSSL REQUIRED)
|
||||
message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}")
|
||||
message("OpenSSL libraries: ${OPENSSL_LIBRARIES}")
|
||||
target_include_directories(slic3r PRIVATE ${OPENSSL_INCLUDE_DIR})
|
||||
target_link_libraries(slic3r ${OPENSSL_LIBRARIES})
|
||||
target_include_directories(PrusaSlicer PRIVATE ${OPENSSL_INCLUDE_DIR})
|
||||
target_link_libraries(PrusaSlicer ${OPENSSL_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
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)
|
||||
target_link_libraries(slic3r -lopengl32)
|
||||
target_link_libraries(PrusaSlicer -lopengl32)
|
||||
elseif (APPLE)
|
||||
target_link_libraries(slic3r "-framework OpenGL")
|
||||
target_link_libraries(PrusaSlicer "-framework OpenGL")
|
||||
else ()
|
||||
target_link_libraries(slic3r -ldl -lGL -lGLU)
|
||||
target_link_libraries(PrusaSlicer -ldl -lGL -lGLU)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# 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.
|
||||
if (MSVC)
|
||||
add_executable(slic3r_app_gui WIN32 slic3r_app_msvc.cpp ${CMAKE_CURRENT_BINARY_DIR}/slic3r.rc)
|
||||
target_compile_definitions(slic3r_app_gui PRIVATE -DSLIC3R_WRAPPER_NOCONSOLE)
|
||||
add_dependencies(slic3r_app_gui slic3r)
|
||||
set_target_properties(slic3r_app_gui PROPERTIES OUTPUT_NAME "slic3r" PDB_NAME "slic3r_gui")
|
||||
add_executable(PrusaSlicer_app_gui WIN32 PrusaSlicer_app_msvc.cpp ${CMAKE_CURRENT_BINARY_DIR}/PrusaSlicer.rc)
|
||||
# Generate debug symbols even in release mode.
|
||||
target_link_options(PrusaSlicer_app_gui PUBLIC "$<$<CONFIG:RELEASE>:/DEBUG>")
|
||||
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)
|
||||
target_compile_definitions(slic3r_app_console PRIVATE -DSLIC3R_WRAPPER_CONSOLE)
|
||||
add_dependencies(slic3r_app_console slic3r)
|
||||
set_target_properties(slic3r_app_console PROPERTIES OUTPUT_NAME "slic3r-console")
|
||||
add_executable(PrusaSlicer_app_console PrusaSlicer_app_msvc.cpp ${CMAKE_CURRENT_BINARY_DIR}/PrusaSlicer.rc)
|
||||
# Generate debug symbols even in release mode.
|
||||
target_link_options(PrusaSlicer_app_console PUBLIC "$<$<CONFIG:RELEASE>:/DEBUG>")
|
||||
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 ()
|
||||
|
||||
# Link the resources dir to where Slic3r GUI expects it
|
||||
@ -154,7 +157,7 @@ if (MSVC)
|
||||
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}/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}" "("
|
||||
if not exist "${WIN_RESOURCES_SYMLINK}" "("
|
||||
mklink /J "${WIN_RESOURCES_SYMLINK}" "${SLIC3R_RESOURCES_DIR_WIN}"
|
||||
@ -166,7 +169,7 @@ if (MSVC)
|
||||
endforeach ()
|
||||
else ()
|
||||
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}" ")"
|
||||
COMMENT "Symlinking the resources directory into the build tree"
|
||||
VERBATIM
|
||||
@ -174,13 +177,13 @@ if (MSVC)
|
||||
endif ()
|
||||
elseif (XCODE)
|
||||
# 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"
|
||||
COMMENT "Symlinking the resources directory into the build tree"
|
||||
VERBATIM
|
||||
)
|
||||
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"
|
||||
COMMENT "Symlinking the resources directory into the build tree"
|
||||
VERBATIM
|
||||
@ -189,11 +192,11 @@ endif()
|
||||
|
||||
# Slic3r binary install target
|
||||
if (WIN32)
|
||||
install(TARGETS slic3r RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
||||
install(TARGETS PrusaSlicer RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
||||
if (MSVC)
|
||||
install(TARGETS slic3r_app_gui RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
||||
install(TARGETS slic3r_app_console RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
||||
install(TARGETS PrusaSlicer_app_gui RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
||||
install(TARGETS PrusaSlicer_app_console RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
||||
endif ()
|
||||
else ()
|
||||
install(TARGETS slic3r RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||
install(TARGETS PrusaSlicer RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||
endif ()
|
||||
|
@ -39,7 +39,7 @@
|
||||
#include "libslic3r/Format/OBJ.hpp"
|
||||
#include "libslic3r/Utils.hpp"
|
||||
|
||||
#include "slic3r.hpp"
|
||||
#include "PrusaSlicer.hpp"
|
||||
|
||||
#ifdef SLIC3R_GUI
|
||||
#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
|
||||
{
|
||||
boost::nowide::cout
|
||||
<< SLIC3R_APP_NAME << " " << SLIC3R_BUILD << " " << "based on Slic3r"
|
||||
<< SLIC3R_BUILD_ID << " " << "based on Slic3r"
|
||||
#ifdef SLIC3R_GUI
|
||||
<< " (with GUI support)"
|
||||
#else /* SLIC3R_GUI */
|
@ -48,10 +48,10 @@ public:
|
||||
wc.lpfnWndProc = OpenGLVersionCheck::supports_opengl2_wndproc;
|
||||
wc.hInstance = (HINSTANCE)GetModuleHandle(nullptr);
|
||||
wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);
|
||||
wc.lpszClassName = L"slic3r_opengl_version_check";
|
||||
wc.lpszClassName = L"PrusaSlicer_opengl_version_check";
|
||||
wc.style = CS_OWNDC;
|
||||
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) {
|
||||
message_pump_exit = false;
|
||||
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 };
|
||||
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);
|
||||
HINSTANCE hInstance_Slic3r = LoadLibraryExW(path_to_slic3r, nullptr, 0);
|
||||
if (hInstance_Slic3r == nullptr) {
|
||||
printf("slic3r.dll was not loaded\n");
|
||||
printf("PrusaSlicer.dll was not loaded\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -289,7 +289,7 @@ int wmain(int argc, wchar_t **argv)
|
||||
#endif
|
||||
);
|
||||
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;
|
||||
}
|
||||
// argc minus the trailing nullptr of the argv
|
@ -4,6 +4,6 @@
|
||||
#define SLIC3R_APP_NAME "@SLIC3R_APP_NAME@"
|
||||
#define SLIC3R_APP_KEY "@SLIC3R_APP_KEY@"
|
||||
#define SLIC3R_VERSION "@SLIC3R_VERSION@"
|
||||
#define SLIC3R_BUILD "@SLIC3R_BUILD@"
|
||||
#define SLIC3R_BUILD_ID "@SLIC3R_BUILD_ID@"
|
||||
|
||||
#endif /* __SLIC3R_VERSION_H */
|
||||
|
@ -22,4 +22,4 @@ PRODUCTVERSION @SLIC3R_RC_VERSION@
|
||||
}
|
||||
}
|
||||
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 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()
|
||||
{
|
||||
|
@ -174,7 +174,7 @@ wxBitmap* BitmapCache::insert(const std::string &bitmap_key, const wxBitmap *beg
|
||||
#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);
|
||||
image.InitAlpha();
|
||||
@ -187,14 +187,20 @@ wxBitmap* BitmapCache::insert_raw_rgba(const std::string &bitmap_key, unsigned w
|
||||
*rgb ++ = *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));
|
||||
}
|
||||
|
||||
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 ?
|
||||
"-h" + std::to_string(height) :
|
||||
"-w" + std::to_string(width));
|
||||
"-w" + std::to_string(width))
|
||||
+ (grayscale ? "-gs" : "");
|
||||
|
||||
auto it = m_map.find(bitmap_key);
|
||||
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)
|
||||
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)));
|
||||
}
|
||||
|
||||
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 ?
|
||||
"-h" + std::to_string(target_height) :
|
||||
"-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;
|
||||
|
||||
@ -256,7 +267,7 @@ wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_
|
||||
::nsvgDeleteRasterizer(rast);
|
||||
::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)
|
||||
|
@ -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 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_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.
|
||||
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.
|
||||
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, const unsigned char rgb[3]) { return mksolid(width, height, rgb[0], rgb[1], rgb[2], wxALPHA_OPAQUE); }
|
||||
@ -42,6 +42,7 @@ public:
|
||||
|
||||
private:
|
||||
std::map<std::string, wxBitmap*> m_map;
|
||||
double m_gs = 0.2; // value, used for image.ConvertToGreyscale(m_gs, m_gs, m_gs)
|
||||
};
|
||||
|
||||
} // GUI
|
||||
|
@ -915,6 +915,11 @@ int GUI_App::extruders_cnt() const
|
||||
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)
|
||||
{
|
||||
if (name.empty()) { return; }
|
||||
|
@ -171,6 +171,8 @@ public:
|
||||
|
||||
PrintHostJobQueue& printhost_job_queue() { return *m_printhost_job_queue.get(); }
|
||||
|
||||
void open_web_page_localized(const std::string &http_address);
|
||||
|
||||
private:
|
||||
bool on_init_inner();
|
||||
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)
|
||||
{
|
||||
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_)
|
||||
@ -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")), "",
|
||||
[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)
|
||||
{
|
||||
append_menu_item_delete(menu);
|
||||
|
||||
append_menu_item(menu, wxID_ANY, _(L("Rename")), "",
|
||||
[this](wxCommandEvent&) { rename_item(); }, "", menu);
|
||||
|
||||
@ -1219,8 +1218,10 @@ wxMenuItem* ObjectList::append_menu_item_fix_through_netfabb(wxMenu* menu)
|
||||
{
|
||||
if (!is_windows10())
|
||||
return nullptr;
|
||||
Plater* plater = wxGetApp().plater();
|
||||
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();
|
||||
|
||||
return menu_item;
|
||||
@ -1286,9 +1287,6 @@ void ObjectList::create_object_popupmenu(wxMenu *menu)
|
||||
// rest of a object_menu will be added later in:
|
||||
// - append_menu_items_add_volume() -> for "Add (volumes)"
|
||||
// - 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)
|
||||
@ -1320,17 +1318,11 @@ void ObjectList::create_part_popupmenu(wxMenu *menu)
|
||||
|
||||
// rest of a object_sla_menu will be added later in:
|
||||
// - 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)
|
||||
{
|
||||
#ifdef __WXOSX__
|
||||
append_menu_item_delete(menu);
|
||||
#endif // __WXOSX__
|
||||
m_menu_item_split_instances = append_menu_item_instance_to_object(menu);
|
||||
m_menu_item_split_instances = append_menu_item_instance_to_object(menu, wxGetApp().plater());
|
||||
|
||||
/* New behavior logic:
|
||||
* 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)
|
||||
return;
|
||||
@ -2837,10 +2829,6 @@ void ObjectList::show_multi_selection_menu()
|
||||
|
||||
wxMenu* menu = new wxMenu();
|
||||
|
||||
#ifdef __WXOSX__
|
||||
append_menu_item_delete(menu);
|
||||
#endif //__WXOSX__
|
||||
|
||||
if (extruders_count() > 1)
|
||||
append_menu_item(menu, wxID_ANY, _(L("Set extruder for selected items")),
|
||||
_(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_settings(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);
|
||||
wxMenuItem* append_menu_item_fix_through_netfabb(wxMenu* menu);
|
||||
void append_menu_item_export_stl(wxMenu* menu) const ;
|
||||
|
@ -33,7 +33,7 @@ namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
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))
|
||||
{
|
||||
// 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
|
||||
wxMenu* fileMenu = new wxMenu;
|
||||
{
|
||||
wxMenuItem* item_open = 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"));
|
||||
wxMenuItem* item_save = append_menu_item(fileMenu, wxID_ANY, _(L("&Save Project")) + "\tCtrl+S", _(L("Save current project file")),
|
||||
[this](wxCommandEvent&) { if (m_plater) m_plater->export_3mf(into_path(m_plater->get_project_filename())); }, menu_icon("save"));
|
||||
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(); }, menu_icon("save"));
|
||||
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"), nullptr,
|
||||
[this](){return m_plater != nullptr; }, this);
|
||||
append_menu_item(fileMenu, wxID_ANY, _(L("&Save Project")) + "\tCtrl+S", _(L("Save current project file")),
|
||||
[this](wxCommandEvent&) { if (m_plater) m_plater->export_3mf(into_path(m_plater->get_project_filename())); }, menu_icon("save"), nullptr,
|
||||
[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();
|
||||
|
||||
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")),
|
||||
[this](wxCommandEvent&) { if (m_plater) m_plater->add_model(); }, menu_icon("import_plater"));
|
||||
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"), nullptr,
|
||||
[this](){return m_plater != nullptr; }, this);
|
||||
import_menu->AppendSeparator();
|
||||
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"));
|
||||
@ -365,15 +369,19 @@ void MainFrame::init_menubar()
|
||||
|
||||
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")),
|
||||
[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);
|
||||
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")),
|
||||
[this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(); }, menu_icon("export_plater"));
|
||||
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](wxCommandEvent&) { if (m_plater) m_plater->export_stl(true); }, menu_icon("export_plater"));
|
||||
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_amf(); }, menu_icon("export_plater"));
|
||||
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"), nullptr,
|
||||
[this](){return can_export_model(); }, this);
|
||||
append_menu_item(export_menu, wxID_ANY, _(L("Export plate as STL including supports")) + dots, _(L("Export current plate as STL including supports")),
|
||||
[this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(true); }, menu_icon("export_plater"), nullptr,
|
||||
[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();
|
||||
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"));
|
||||
@ -413,16 +421,6 @@ void MainFrame::init_menubar()
|
||||
fileMenu->AppendSeparator();
|
||||
append_menu_item(fileMenu, wxID_EXIT, _(L("&Quit")), wxString::Format(_(L("Quit %s")), SLIC3R_APP_NAME),
|
||||
[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
|
||||
@ -446,26 +444,25 @@ void MainFrame::init_menubar()
|
||||
#else
|
||||
wxString hotkey_delete = "Del";
|
||||
#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")),
|
||||
[this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->select_all(); }, "");
|
||||
append_menu_item(editMenu, wxID_ANY, _(L("&Select all")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "A",
|
||||
_(L("Selects all objects")), [this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->select_all(); },
|
||||
"", nullptr, [this](){return can_select(); }, this);
|
||||
editMenu->AppendSeparator();
|
||||
wxMenuItem* item_delete_sel = append_menu_item(editMenu, wxID_ANY, _(L("&Delete selected")) + sep + hotkey_delete, _(L("Deletes the current selection")),
|
||||
[this](wxCommandEvent&) { m_plater->remove_selected(); }, menu_icon("remove_menu"));
|
||||
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")),
|
||||
[this](wxCommandEvent&) { m_plater->reset_with_confirm(); }, menu_icon("delete_all_menu"));
|
||||
append_menu_item(editMenu, wxID_ANY, _(L("&Delete selected")) + sep + hotkey_delete,
|
||||
_(L("Deletes the current selection")),[this](wxCommandEvent&) { m_plater->remove_selected(); },
|
||||
menu_icon("remove_menu"), nullptr, [this](){return can_delete(); }, this);
|
||||
append_menu_item(editMenu, wxID_ANY, _(L("Delete &all")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + hotkey_delete,
|
||||
_(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();
|
||||
|
||||
wxMenuItem* item_copy = append_menu_item(editMenu, wxID_ANY, _(L("&Copy")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "C", _(L("Copy selection to clipboard")),
|
||||
[this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); }, menu_icon("copy_menu"));
|
||||
wxMenuItem* item_paste = 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(); }, menu_icon("paste_menu"));
|
||||
|
||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_select()); }, item_select_all->GetId());
|
||||
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());
|
||||
append_menu_item(editMenu, wxID_ANY, _(L("&Copy")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "C",
|
||||
_(L("Copy selection to clipboard")), [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); },
|
||||
menu_icon("copy_menu"), nullptr, [this](){return m_plater->can_copy(); }, this);
|
||||
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(); },
|
||||
menu_icon("paste_menu"), nullptr, [this](){return m_plater->can_paste(); }, this);
|
||||
}
|
||||
|
||||
// Window menu
|
||||
@ -489,13 +486,12 @@ void MainFrame::init_menubar()
|
||||
[this, tab_offset](wxCommandEvent&) { select_tab(tab_offset + 2); }, menu_icon("printer"));
|
||||
if (m_plater) {
|
||||
windowMenu->AppendSeparator();
|
||||
wxMenuItem* item_3d = 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"));
|
||||
wxMenuItem* item_preview = 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"));
|
||||
|
||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_3d->GetId());
|
||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_preview->GetId());
|
||||
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"), nullptr,
|
||||
[this](){return can_change_view(); }, this);
|
||||
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,
|
||||
[this](){return can_change_view(); }, this);
|
||||
}
|
||||
|
||||
#if _WIN32
|
||||
@ -521,40 +517,39 @@ void MainFrame::init_menubar()
|
||||
if (m_plater) {
|
||||
viewMenu = new wxMenu();
|
||||
// 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();
|
||||
//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
|
||||
wxMenuItem* item_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"); });
|
||||
wxMenuItem* item_rear = append_menu_item(viewMenu, wxID_ANY, _(L("Rear")) + sep + "&4", _(L("Rear View")), [this](wxCommandEvent&) { select_view("rear"); });
|
||||
wxMenuItem* item_left = append_menu_item(viewMenu, wxID_ANY, _(L("Left")) + sep + "&5", _(L("Left View")), [this](wxCommandEvent&) { select_view("left"); });
|
||||
wxMenuItem* item_right = 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_iso->GetId());
|
||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_top->GetId());
|
||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_bottom->GetId());
|
||||
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_front->GetId());
|
||||
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());
|
||||
append_menu_item(viewMenu, wxID_ANY, _(L("Bottom")) + sep + "&2", _(L("Bottom View")), [this](wxCommandEvent&) { select_view("bottom"); },
|
||||
"", nullptr, [this](){return can_change_view(); }, this);
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
append_menu_item(viewMenu, wxID_ANY, _(L("Right")) + sep + "&6", _(L("Right View")), [this](wxCommandEvent&) { select_view("right"); },
|
||||
"", nullptr, [this](){return can_change_view(); }, this);
|
||||
}
|
||||
|
||||
// Help menu
|
||||
auto helpMenu = new wxMenu();
|
||||
{
|
||||
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")),
|
||||
[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{
|
||||
//# wxTheApp->check_version(1);
|
||||
//# });
|
||||
//# $versioncheck->Enable(wxTheApp->have_version_check);
|
||||
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),
|
||||
[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),
|
||||
// wxString::Format(_(L("Open the %s manual in your browser")), SLIC3R_APP_NAME),
|
||||
// [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.opt.label = L("Infill");
|
||||
option.opt.width = 6;
|
||||
option.opt.width = 7/*6*/;
|
||||
option.opt.sidetext = " ";
|
||||
line.append_option(option);
|
||||
|
||||
@ -1336,6 +1336,8 @@ struct Plater::priv
|
||||
bool can_arrange() const;
|
||||
bool can_layers_editing() const;
|
||||
bool can_fix_through_netfabb() const;
|
||||
bool can_set_instance_to_object() const;
|
||||
bool can_mirror() const;
|
||||
|
||||
void msw_rescale_object_menu();
|
||||
|
||||
@ -1347,10 +1349,8 @@ private:
|
||||
bool complit_init_part_menu();
|
||||
void init_view_toolbar();
|
||||
|
||||
bool can_set_instance_to_object() const;
|
||||
bool can_split() const;
|
||||
bool layers_height_allowed() const;
|
||||
bool can_mirror() const;
|
||||
|
||||
void update_fff_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*/)
|
||||
{
|
||||
wxMenuItem* item_delete = nullptr;
|
||||
if (is_part) {
|
||||
item_delete = append_menu_item(menu, wxID_ANY, _(L("Delete")) + "\tDel", _(L("Remove the selected object")),
|
||||
[this](wxCommandEvent&) { q->remove_selected(); }, "delete");
|
||||
append_menu_item(menu, wxID_ANY, _(L("Delete")) + "\tDel", _(L("Remove the selected object")),
|
||||
[this](wxCommandEvent&) { q->remove_selected(); }, "delete", nullptr, [this]() { return can_delete(); }, q);
|
||||
|
||||
sidebar->obj_list()->append_menu_item_export_stl(menu);
|
||||
}
|
||||
else {
|
||||
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")),
|
||||
[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")),
|
||||
[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_decrease.push_back(item_decrease);
|
||||
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.
|
||||
item_delete = append_menu_item(menu, wxID_ANY, _(L("Delete")) + "\tDel", _(L("Remove the selected object")),
|
||||
[this](wxCommandEvent&) { q->remove_selected(); }, "delete");
|
||||
append_menu_item(menu, wxID_ANY, _(L("Delete")) + "\tDel", _(L("Remove the selected object")),
|
||||
[this](wxCommandEvent&) { q->remove_selected(); }, "delete", nullptr, [this]() { return can_delete(); }, q);
|
||||
|
||||
menu->AppendSeparator();
|
||||
wxMenuItem* item_instance_to_object = sidebar->obj_list()->append_menu_item_instance_to_object(menu);
|
||||
|
||||
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());
|
||||
}
|
||||
sidebar->obj_list()->append_menu_item_instance_to_object(menu, q);
|
||||
menu->AppendSeparator();
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
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();
|
||||
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")),
|
||||
[this](wxCommandEvent&) { mirror(Z); }, "mark_Z", menu);
|
||||
|
||||
wxMenuItem* item_mirror = append_submenu(menu, mirror_menu, wxID_ANY, _(L("Mirror")), _(L("Mirror the selected object")));
|
||||
|
||||
// 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());
|
||||
}
|
||||
append_submenu(menu, mirror_menu, wxID_ANY, _(L("Mirror")), _(L("Mirror the selected object")), "",
|
||||
[this]() { return can_mirror(); }, q);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -3005,30 +2989,24 @@ bool Plater::priv::complit_init_object_menu()
|
||||
if (split_menu == nullptr)
|
||||
return false;
|
||||
|
||||
wxMenuItem* item_split_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);
|
||||
wxMenuItem* item_split_volumes = 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);
|
||||
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]() { return can_split(); }, q);
|
||||
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]() { 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();
|
||||
|
||||
// "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;
|
||||
}
|
||||
|
||||
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")),
|
||||
[this](wxCommandEvent&) { split_object(); }, "split_object_SMALL");
|
||||
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", nullptr, [this]() { return can_split(); }, q);
|
||||
|
||||
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.")),
|
||||
[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;
|
||||
}
|
||||
|
||||
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")),
|
||||
[this](wxCommandEvent&) { split_volume(); }, "split_parts_SMALL");
|
||||
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", nullptr, [this]() { return can_split(); }, q);
|
||||
|
||||
part_menu.AppendSeparator();
|
||||
|
||||
auto obj_list = sidebar->obj_list();
|
||||
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;
|
||||
}
|
||||
|
||||
@ -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_increase_instances() const { return p->can_increase_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_volumes() const { return p->can_split_to_volumes(); }
|
||||
bool Plater::can_arrange() const { return p->can_arrange(); }
|
||||
|
@ -200,6 +200,8 @@ public:
|
||||
bool can_delete_all() const;
|
||||
bool can_increase_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_volumes() const;
|
||||
bool can_arrange() const;
|
||||
|
@ -24,7 +24,7 @@ std::string get_main_info(bool format_as_html)
|
||||
if (!format_as_html)
|
||||
out << b_start << SLIC3R_APP_NAME << b_end << 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 << b_start << "Operating System: " << b_end << wxPlatformInfo::Get().GetOperatingSystemFamilyName() << 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_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;
|
||||
#ifdef __WXMSW__
|
||||
void msw_rescale_menu(wxMenu* menu)
|
||||
{
|
||||
struct update_icons {
|
||||
@ -47,9 +48,27 @@ void msw_rescale_menu(wxMenu* menu)
|
||||
update_icons::run(item);
|
||||
}
|
||||
#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,
|
||||
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)
|
||||
id = wxNewId();
|
||||
@ -67,25 +86,33 @@ wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const
|
||||
#endif // __WXMSW__
|
||||
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;
|
||||
}
|
||||
|
||||
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)
|
||||
id = wxNewId();
|
||||
|
||||
const wxBitmap& bmp = !icon.empty() ? create_scaled_bitmap(nullptr, icon) : wxNullBitmap; // FIXME: pass window ptr
|
||||
#ifdef __WXMSW__
|
||||
//#ifdef __WXMSW__
|
||||
#ifndef __WXGTK__
|
||||
if (bmp.IsOk())
|
||||
msw_menuitem_bitmaps[id] = icon;
|
||||
#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)
|
||||
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);
|
||||
if (!icon.empty()) {
|
||||
item->SetBitmap(create_scaled_bitmap(nullptr, icon)); // FIXME: pass window ptr
|
||||
#ifdef __WXMSW__
|
||||
//#ifdef __WXMSW__
|
||||
#ifndef __WXGTK__
|
||||
msw_menuitem_bitmaps[id] = icon;
|
||||
#endif /* __WXMSW__ */
|
||||
}
|
||||
@ -101,6 +129,11 @@ wxMenuItem* append_submenu(wxMenu* menu, wxMenu* sub_menu, int id, const wxStrin
|
||||
item->SetSubMenu(sub_menu);
|
||||
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;
|
||||
}
|
||||
|
||||
@ -350,7 +383,8 @@ int em_unit(wxWindow* win)
|
||||
}
|
||||
|
||||
// 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;
|
||||
|
||||
@ -370,9 +404,9 @@ wxBitmap create_scaled_bitmap(wxWindow *win, const std::string& bmp_name_in, con
|
||||
boost::replace_last(bmp_name, ".png", "");
|
||||
|
||||
// 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) {
|
||||
bmp = cache.load_png(bmp_name, width, height);
|
||||
bmp = cache.load_png(bmp_name, width, height, grayscale);
|
||||
}
|
||||
|
||||
if (bmp == nullptr) {
|
||||
@ -2456,7 +2490,6 @@ ModeButton::ModeButton( wxWindow * parent,
|
||||
const wxString& mode /* = wxEmptyString*/,
|
||||
const wxSize& size /* = wxDefaultSize*/,
|
||||
const wxPoint& pos /* = wxDefaultPosition*/) :
|
||||
// wxButton(parent, id, mode, pos, wxDefaultSize/*size*/, wxBU_EXACTFIT | wxNO_BORDER),
|
||||
ScalableButton(parent, id, icon_name, mode, size, pos)
|
||||
{
|
||||
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);
|
||||
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)
|
||||
|
@ -27,12 +27,15 @@ inline void msw_rescale_menu(wxMenu* /* menu */) {}
|
||||
#endif /* __WXMSW__ */
|
||||
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
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);
|
||||
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
|
||||
{
|
||||
|
@ -4,7 +4,6 @@
|
||||
set(SLIC3R_APP_NAME "PrusaSlicer")
|
||||
set(SLIC3R_APP_KEY "PrusaSlicer")
|
||||
set(SLIC3R_VERSION "1.42.0-beta2")
|
||||
set(SLIC3R_BUILD "${SLIC3R_VERSION}+UNKNOWN")
|
||||
set(SLIC3R_BUILD_ID "${SLIC3R_BUILD_ID}")
|
||||
set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION}+UNKNOWN")
|
||||
set(SLIC3R_RC_VERSION "1,42,0,0")
|
||||
set(SLIC3R_RC_VERSION_DOTS "1.42.0.0")
|
||||
|
@ -20,7 +20,7 @@ VERSION()
|
||||
SV*
|
||||
BUILD()
|
||||
CODE:
|
||||
RETVAL = newSVpv(SLIC3R_BUILD, 0);
|
||||
RETVAL = newSVpv(SLIC3R_BUILD_ID, 0);
|
||||
OUTPUT: RETVAL
|
||||
|
||||
SV*
|
||||
|