Fixed conflicts after merge with master

This commit is contained in:
enricoturri1966 2020-03-20 10:55:37 +01:00
commit 5b24a0fb91
40 changed files with 1319 additions and 1171 deletions

4
deps/CMakeLists.txt vendored
View file

@ -49,10 +49,6 @@ find_package(Git REQUIRED)
get_property(_is_multi GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
# C and CXX flags handed over to unix autotools projects.
set(DEP_CFLAGS "")
set(DEP_CXXFLAGS "")
function(prusaslicer_add_cmake_project projectname)
cmake_parse_arguments(P_ARGS "" "INSTALL_DIR;BUILD_COMMAND;INSTALL_COMMAND" "CMAKE_ARGS" ${ARGN})

18
deps/GMP/GMP.cmake vendored
View file

@ -17,11 +17,27 @@ if (MSVC)
add_custom_target(dep_GMP SOURCES ${_output})
else ()
set(_gmp_ccflags "-O2 -DNDEBUG -fPIC -DPIC -Wall -Wmissing-prototypes -Wpointer-arith -pedantic -fomit-frame-pointer -fno-common")
set(_gmp_build_tgt "${CMAKE_SYSTEM_PROCESSOR}")
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")
set(_gmp_ccflags "${_gmp_ccflags} -march=armv7-a") # Works on RPi-4
set(_gmp_build_tgt armv7)
endif()
if (APPLE)
set(_gmp_ccflags "${_gmp_ccflags} -mmacosx-version-min=${DEP_OSX_TARGET}")
set(_gmp_build_tgt "--build=${_gmp_build_tgt}-apple-darwin")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(_gmp_build_tgt "--build=${_gmp_build_tgt}-pc-linux-gnu")
else ()
set(_gmp_build_tgt "") # let it guess
endif()
ExternalProject_Add(dep_GMP
# URL https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2
URL https://gmplib.org/download/gmp/gmp-6.2.0.tar.lz
BUILD_IN_SOURCE ON
CONFIGURE_COMMAND env "CFLAGS=${DEP_CFLAGS}" "CXXFLAGS=${DEP_CXXFLAGS}" ./configure --enable-shared=no --enable-cxx=yes --enable-static=yes "--prefix=${DESTDIR}/usr/local" --with-pic
CONFIGURE_COMMAND env "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_ccflags}" ./configure --enable-shared=no --enable-cxx=yes --enable-static=yes "--prefix=${DESTDIR}/usr/local" ${_gmp_build_tgt}
BUILD_COMMAND make -j
INSTALL_COMMAND make install
)

View file

@ -21,7 +21,7 @@ else ()
ExternalProject_Add(dep_MPFR
URL http://ftp.vim.org/ftp/gnu/mpfr/mpfr-3.1.6.tar.bz2 https://www.mpfr.org/mpfr-3.1.6/mpfr-3.1.6.tar.bz2 # mirrors are allowed
BUILD_IN_SOURCE ON
CONFIGURE_COMMAND env "CFLAGS=${DEP_CFLAGS}" "CXXFLAGS=${DEP_CXXFLAGS}" ./configure --prefix=${DESTDIR}/usr/local --enable-shared=no --enable-static=yes --with-gmp=${DESTDIR}/usr/local --with-pic
CONFIGURE_COMMAND env "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_ccflags}" ./configure --prefix=${DESTDIR}/usr/local --enable-shared=no --enable-static=yes --with-gmp=${DESTDIR}/usr/local ${_gmp_build_tgt}
BUILD_COMMAND make -j
INSTALL_COMMAND make install
DEPENDS dep_GMP

View file

@ -31,6 +31,7 @@ ExternalProject_Add(dep_libopenssl
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND ./config
"--prefix=${DESTDIR}/usr/local"
"--libdir=lib"
no-shared
no-ssl3-method
no-dynamic-engine
@ -46,6 +47,7 @@ ExternalProject_Add(dep_libcurl
URL_HASH SHA256=cc245bf9a1a42a45df491501d97d5593392a03f7b4f07b952793518d97666115
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND ./configure
"--libdir=${DESTDIR}/usr/local/lib"
--enable-static
--disable-shared
"--with-ssl=${DESTDIR}/usr/local"

View file

@ -11,9 +11,6 @@ set(DEP_CMAKE_OPTS
"-DCMAKE_C_FLAGS=${DEP_WERRORS_SDK}"
)
list(APPEND DEP_CFLAGS "-mmacosx-version-min=${DEP_OSX_TARGET} ${DEP_WERRORS_SDK}")
list(APPEND DEP_CXXFLAGS "-mmacosx-version-min=${DEP_OSX_TARGET} ${DEP_WERRORS_SDK}")
include("deps-unix-common.cmake")

View file

@ -1092,6 +1092,34 @@ msgstr "Ukončování..."
msgid "Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible."
msgstr "Nelze vypočítat šířku extrudování pro %1%: Proměnná \"%2%\" není dostupná."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3017
msgid ""
"Cannot insert a new layer range after the current layer range.\n"
"Current layer range overlaps with the next layer range."
msgstr ""
"Nelze vložit nový rozsah vrstev za aktuální rozsah vrstev.\n"
"Aktuální rozsah vrstev se překrývá s dalším rozsahem vrstev."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3008
msgid ""
"Cannot insert a new layer range after the current layer range.\n"
"The next layer range is too thin to be split to two\n"
"without violating the minimum layer height."
msgstr ""
"Nelze vložit nový rozsah vrstev za aktuální rozsah vrstev.\n"
"Další rozsah vrstev je příliš tenký na to, aby byl rozdělen na dva\n"
"bez porušení minimální výšky vrstvy."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3012
msgid ""
"Cannot insert a new layer range between the current and the next layer range.\n"
"The gap between the current layer range and the next layer range\n"
"is thinner than the minimum layer height allowed."
msgstr ""
"Nelze vložit nový rozsah vrstev mezi aktuální a následující rozsah vrstev.\n"
"Mezera mezi aktuálním rozsahem vrstev a dalším rozsahem vrstev\n"
"je tenčí, než je minimální povolená výška vrstvy."
#: src/slic3r/GUI/Tab.cpp:3073
msgid "Cannot overwrite a system profile."
msgstr "Nelze přepsat systémový profil."
@ -2032,14 +2060,6 @@ msgstr ""
"Vyberte ANO, pokud chcete změnit tuto hodnotu na %s%%,\n"
"nebo NE, pokud jste si jisti, že %s %s je správná hodnota."
#: src/slic3r/GUI/ConfigWizard.cpp:1761
msgid "Do you want to automatic select default filaments?"
msgstr "Chcete automaticky vybrat výchozí filamenty?"
#: src/slic3r/GUI/ConfigWizard.cpp:1772
msgid "Do you want to automatic select default materials?"
msgstr "Chcete automaticky vybrat výchozí materiály?"
#: src/slic3r/GUI/DoubleSlider.cpp:1920
msgid "Do you want to delete all saved tool changes?"
msgstr "Opravdu chcete odstranit všechny uložené změny nástrojů?"
@ -2056,6 +2076,14 @@ msgstr "Chcete to zkusit znovu"
msgid "Do you want to save your manually edited support points?"
msgstr "Chcete uložit ručně upravené podpěrné body?"
#: src/slic3r/GUI/ConfigWizard.cpp:1834
msgid "Do you want to select default filaments for these FFF printer models?"
msgstr "Chcete pro tyto modely FFF tiskáren vybrat výchozí filamenty?"
#: src/slic3r/GUI/ConfigWizard.cpp:1852
msgid "Do you want to select default SLA materials for these printer models?"
msgstr "Chcete pro tyto modely tiskáren vybrat výchozí SLA materiály?"
#: src/libslic3r/PrintConfig.cpp:3429
msgid "Don't arrange"
msgstr "Neuspořádávat"
@ -2072,6 +2100,10 @@ msgstr "Nevytvářet podpěry pod mosty"
msgid "Downgrade"
msgstr "Downgrade"
#: src/libslic3r/PrintConfig.cpp:1695
msgid "Draft shield"
msgstr "Ochranný štít"
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
@ -3454,6 +3486,10 @@ msgstr "Pokud je povoleno, stáhne Slic3r na pozadí aktualizace vestavěných s
msgid "If enabled, the 3D scene will be rendered in Retina resolution. If you are experiencing 3D performance problems, disabling this option may help."
msgstr "Pokud je tato volba povolena, bude 3D scéna vykreslena v rozlišení Retina. Pokud dochází k potížím s výkonem, zkuste tuto volbu vypnout."
#: src/libslic3r/PrintConfig.cpp:1696
msgid "If enabled, the skirt will be as tall as a highest printed object. This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."
msgstr "Pokud je tato možnost povolena, bude obrys (skirt) stejně vysoký jako nejvyšší tištěný objekt. To je užitečné k ochraně modelu při tisku z ABS nebo ASA před deformací a odlepením od tiskové podložky v důsledku průvanu."
#: src/libslic3r/PrintConfig.cpp:1858
msgid "If enabled, the wipe tower will not be printed on layers with no toolchanges. On layers with a toolchange, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print."
msgstr "Pokud je tato možnost povolena, nebude čistící věž vytištěna ve vrstvách bez změny barvy. U vrstev s výměnou sjede extruder směrem dolů a vytiskne vrstvu čistící věže. Uživatel je odpovědný za to, že nedojde ke kolizi tiskové hlavy s tiskem."
@ -5944,9 +5980,9 @@ msgstr "Odebrat označené body"
msgid "Remove the selected object"
msgstr "Odstranit vybraný objekt"
#: src/slic3r/GUI/ConfigWizard.cpp:438
msgid "Remove user profiles - install from scratch (a snapshot will be taken beforehand)"
msgstr "Odstranit uživatelské profily - čistá instalace (nejprve bude provedena záloha)"
#: src/slic3r/GUI/ConfigWizard.cpp:453
msgid "Remove user profiles (a snapshot will be taken beforehand)"
msgstr "Odstranit uživatelské profily (předtím bude proveden snapshot)"
#: src/slic3r/GUI/GUI_ObjectList.cpp:1636
msgid "Rename"
@ -7692,6 +7728,14 @@ msgstr "První vrstva bude v rovině XY zmenšena nakonfigurovanou hodnotou, kte
msgid "the following characters are not allowed:"
msgstr "následující znaky nejsou povolené:"
#: src/slic3r/GUI/ConfigWizard.cpp:1830
msgid "The following FFF printer models have no filament selected:"
msgstr "Následující modely FFF tiskáren nemají vybraný filament:"
#: src/slic3r/GUI/ConfigWizard.cpp:1848
msgid "The following SLA printer models have no materials selected:"
msgstr "Následující modely SLA tiskáren nemají vybrané žádné materiály:"
#: src/slic3r/GUI/Tab.cpp:3461
msgid "the following suffix is not allowed:"
msgstr "následující přípona není povolená:"
@ -9047,14 +9091,6 @@ msgstr "Nelze načíst SLA projekt s objektem na podložce, který je složený
msgid "You cannot use non-uniform scaling mode for multiple objects/parts selection"
msgstr "Nemůžete použít nestejnoměrnou změnu měřítka pro více vybraných objektů/částí"
#: src/slic3r/GUI/ConfigWizard.cpp:1760
msgid "You have to select at least one filament for selected printers"
msgstr "Pro vybrané tiskárny musíte vybrat alespoň jeden filament"
#: src/slic3r/GUI/ConfigWizard.cpp:1771
msgid "You have to select at least one material for selected printers"
msgstr "Pro vybrané tiskárny musíte vybrat alespoň jeden materiál"
#: src/slic3r/GUI/GLCanvas3DManager.cpp:287
msgid "You may need to update your graphics card driver."
msgstr "Možná budete muset aktualizovat ovladač grafické karty."

View file

@ -1088,6 +1088,32 @@ msgstr "Abbrechen..."
msgid "Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible."
msgstr "Kann die Extrusionsbreite für %1% nicht berechnen: Variable \"%2%\" nicht zugänglich."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3017
msgid ""
"Cannot insert a new layer range after the current layer range.\n"
"Current layer range overlaps with the next layer range."
msgstr ""
"Es kann kein neuer Schichtenbereich nach dem aktuellen Schichtenbereich eingefügt werden.\n"
"Der aktuelle Schichtenbereich überschneidet sich mit dem nächsten Schichtenbereich."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3008
msgid ""
"Cannot insert a new layer range after the current layer range.\n"
"The next layer range is too thin to be split to two\n"
"without violating the minimum layer height."
msgstr ""
"Es kann kein neuer Schichtenbereich nach dem aktuellen Schichtenbereich eingefügt werden.\n"
"Der nächste Schichtenbereich ist zu schmal, um auf zwei Schichten aufgeteilt zu werden ohne die Mindestschichthöhe zu verletzen."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3012
msgid ""
"Cannot insert a new layer range between the current and the next layer range.\n"
"The gap between the current layer range and the next layer range\n"
"is thinner than the minimum layer height allowed."
msgstr ""
"Es kann kein neuer Schichtenbereich zwischen dem aktuellen und dem nächsten Schichtenbereich eingefügt werden.\n"
"Die Lücke zwischen dem aktuellen und dem nächsten Schichtenbereich ist ist schmaler als die minimal zulässige Schichthöhe."
#: src/slic3r/GUI/Tab.cpp:3073
msgid "Cannot overwrite a system profile."
msgstr "Systemprofil kann nicht überschrieben werden."
@ -2028,14 +2054,6 @@ msgstr ""
"Wählen Sie JA, wenn Sie diesen Wert auf %s%% ändern möchten, \n"
"oder NEIN, wenn Sie sicher sind, dass %s %s ein korrekter Wert ist."
#: src/slic3r/GUI/ConfigWizard.cpp:1761
msgid "Do you want to automatic select default filaments?"
msgstr "Möchten Sie die Standardfilamente automatisch auswählen?"
#: src/slic3r/GUI/ConfigWizard.cpp:1772
msgid "Do you want to automatic select default materials?"
msgstr "Möchten Sie automatisch Standardmaterialien auswählen?"
#: src/slic3r/GUI/DoubleSlider.cpp:1920
msgid "Do you want to delete all saved tool changes?"
msgstr "Möchten Sie alle gespeicherten Werkzeugänderungen löschen?"
@ -2052,6 +2070,14 @@ msgstr "Möchten Sie es erneut versuchen"
msgid "Do you want to save your manually edited support points?"
msgstr "Möchten Sie Ihre manuell bearbeiteten Stützpunkte speichern?"
#: src/slic3r/GUI/ConfigWizard.cpp:1834
msgid "Do you want to select default filaments for these FFF printer models?"
msgstr "Möchten Sie Standardfilamente für diese FFF-Druckermodelle auswählen?"
#: src/slic3r/GUI/ConfigWizard.cpp:1852
msgid "Do you want to select default SLA materials for these printer models?"
msgstr "Möchten Sie Standard-SLA-Materialien für diese Druckermodelle auswählen?"
#: src/libslic3r/PrintConfig.cpp:3429
msgid "Don't arrange"
msgstr "Nicht Anordnen"
@ -2068,6 +2094,10 @@ msgstr "Brücken nicht unterstützen"
msgid "Downgrade"
msgstr "Downgrade"
#: src/libslic3r/PrintConfig.cpp:1695
msgid "Draft shield"
msgstr "Windschutz"
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
@ -3446,6 +3476,10 @@ msgstr "Wenn aktiviert, lädt Slic3r Updates der eingebauten Systemvoreinstellun
msgid "If enabled, the 3D scene will be rendered in Retina resolution. If you are experiencing 3D performance problems, disabling this option may help."
msgstr "Wenn aktiviert, wird die 3D-Szene in Retina-Auflösung gerendert. Wenn Sie Probleme mit der 3D-Leistung haben, kann es hilfreich sein, diese Option zu deaktivieren."
#: src/libslic3r/PrintConfig.cpp:1696
msgid "If enabled, the skirt will be as tall as a highest printed object. This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."
msgstr "Wenn diese Option aktiviert ist, wird die Schürze so hoch wie das höchste gedruckte Objekt sein. Dies ist nützlich, um einen ABS- oder ASA-Druck vor dem Verziehen und Ablösen vom Druckbett aufgrund von Zugluft zu schützen."
#: src/libslic3r/PrintConfig.cpp:1858
msgid "If enabled, the wipe tower will not be printed on layers with no toolchanges. On layers with a toolchange, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print."
msgstr "Wenn aktiviert, wird der Reinigungsturm nicht auf Schichten ohne Werkzeugwechsel gedruckt. Bei Schichten mit Werkzeugwechsel fährt der Extruder nach unten, um den Reinigungsturm zu drucken. Der Benutzer ist dafür verantwortlich, dass es nicht zu einer Kollision mit dem Druck kommt."
@ -5935,9 +5969,9 @@ msgstr "Ausgewählte Punkte entfernen"
msgid "Remove the selected object"
msgstr "Ausgewähltes Objekt entfernen"
#: src/slic3r/GUI/ConfigWizard.cpp:438
msgid "Remove user profiles - install from scratch (a snapshot will be taken beforehand)"
msgstr "Benutzerprofile entfernen - von Grund auf neu installieren (eine Momentaufnahme wird vorab erstellt)"
#: src/slic3r/GUI/ConfigWizard.cpp:453
msgid "Remove user profiles (a snapshot will be taken beforehand)"
msgstr "Benutzerprofile entfernen (eine Momentaufnahme wird vorab erstellt)"
#: src/slic3r/GUI/GUI_ObjectList.cpp:1636
msgid "Rename"
@ -7686,6 +7720,14 @@ msgstr "Die erste Schicht wird in der XY-Ebene um den vorgegebenen Wert verklein
msgid "the following characters are not allowed:"
msgstr "die folgenden Zeichen sind nicht erlaubt:"
#: src/slic3r/GUI/ConfigWizard.cpp:1830
msgid "The following FFF printer models have no filament selected:"
msgstr "Bei den folgenden FFF-Druckermodellen wurde kein Filament ausgewählt:"
#: src/slic3r/GUI/ConfigWizard.cpp:1848
msgid "The following SLA printer models have no materials selected:"
msgstr "Bei den folgenden SLA-Druckermodellen wurden keine Materialien ausgewählt:"
#: src/slic3r/GUI/Tab.cpp:3461
msgid "the following suffix is not allowed:"
msgstr "das folgenden Suffix ist nicht erlaubt:"
@ -9036,14 +9078,6 @@ msgstr "Sie können kein SLA-Projekt mit einem mehrteiligen Objekt auf das Druck
msgid "You cannot use non-uniform scaling mode for multiple objects/parts selection"
msgstr "Sie können den nichtgleichmäßigen Skalierungsmodus nicht für mehrere Objekte/Teileauswahlen verwenden"
#: src/slic3r/GUI/ConfigWizard.cpp:1760
msgid "You have to select at least one filament for selected printers"
msgstr "Sie müssen mindestens ein Filament für die ausgewählten Drucker auswählen"
#: src/slic3r/GUI/ConfigWizard.cpp:1771
msgid "You have to select at least one material for selected printers"
msgstr "Sie müssen mindestens ein Material für die ausgewählten Drucker auswählen"
#: src/slic3r/GUI/GLCanvas3DManager.cpp:287
msgid "You may need to update your graphics card driver."
msgstr "Möglicherweise müssen Sie Ihren Grafikkartentreiber aktualisieren."

View file

@ -1092,6 +1092,34 @@ msgstr "Cancelando..."
msgid "Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible."
msgstr "No se puede calcular el ancho de extrusión para %1%: Variable \"%2%\" no accesible."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3017
msgid ""
"Cannot insert a new layer range after the current layer range.\n"
"Current layer range overlaps with the next layer range."
msgstr ""
"No se puede insertar un nuevo rango de capas después del rango de capa actual.\n"
"El rango de capa actual se superpone con el siguiente rango de capa."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3008
msgid ""
"Cannot insert a new layer range after the current layer range.\n"
"The next layer range is too thin to be split to two\n"
"without violating the minimum layer height."
msgstr ""
"No se puede insertar un nuevo rango de capas después del rango de capa actual.\n"
"El siguiente rango de capa es demasiado delgado para dividirse en dos\n"
"sin violar la altura mínima de la capa."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3012
msgid ""
"Cannot insert a new layer range between the current and the next layer range.\n"
"The gap between the current layer range and the next layer range\n"
"is thinner than the minimum layer height allowed."
msgstr ""
"No se puede insertar un nuevo rango de capas entre el rango de capa actual y el siguiente.\n"
"La brecha entre el rango de capa actual y el siguiente rango de capa\n"
"es más delgada que la altura mínima de capa permitida."
#: src/slic3r/GUI/Tab.cpp:3073
msgid "Cannot overwrite a system profile."
msgstr "No se puede sobre-escribir un perfil del sistema."
@ -2032,14 +2060,6 @@ msgstr ""
"Escoge SI si deseas cambiar este valor a %s%%,\n"
"o NO si estás seguro que %s %s es el valor correcto."
#: src/slic3r/GUI/ConfigWizard.cpp:1761
msgid "Do you want to automatic select default filaments?"
msgstr "¿Deseas seleccionar automáticamente filamentos predeterminados?"
#: src/slic3r/GUI/ConfigWizard.cpp:1772
msgid "Do you want to automatic select default materials?"
msgstr "¿Deseas seleccionar automáticamente materiales predeterminados?"
#: src/slic3r/GUI/DoubleSlider.cpp:1920
msgid "Do you want to delete all saved tool changes?"
msgstr "¿Desea eliminar todos los cambios de herramienta guardados?"
@ -2056,6 +2076,14 @@ msgstr "Quieres volver a intentarlo"
msgid "Do you want to save your manually edited support points?"
msgstr "¿Deseas guardar tus puntos de soporte editados manualmente?"
#: src/slic3r/GUI/ConfigWizard.cpp:1834
msgid "Do you want to select default filaments for these FFF printer models?"
msgstr "¿Desea seleccionar filamentos predeterminados para estos modelos de impresoras FFF?"
#: src/slic3r/GUI/ConfigWizard.cpp:1852
msgid "Do you want to select default SLA materials for these printer models?"
msgstr "¿Desea seleccionar materiales SLA predeterminados para estos modelos de impresora?"
#: src/libslic3r/PrintConfig.cpp:3429
msgid "Don't arrange"
msgstr "No organizar"
@ -2072,6 +2100,10 @@ msgstr "No soportar puentes"
msgid "Downgrade"
msgstr "Volver a una versión anterior"
#: src/libslic3r/PrintConfig.cpp:1695
msgid "Draft shield"
msgstr "Escudo de protección"
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
@ -3450,6 +3482,10 @@ msgstr "Si está activado, Slic3r descargará actualizaciones de los ajustes del
msgid "If enabled, the 3D scene will be rendered in Retina resolution. If you are experiencing 3D performance problems, disabling this option may help."
msgstr "Si está activado, la escena 3D se mostrará en resolución Retina. Si tienes problemas de prestaciones 3D, desactivar esta opción te puede ayudar."
#: src/libslic3r/PrintConfig.cpp:1696
msgid "If enabled, the skirt will be as tall as a highest printed object. This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."
msgstr "Si está habilitado, la falda será tan alta como un objeto impreso más alto. Esto es útil para proteger una impresión ABS o ASA de la deformación y la separación de la cama de impresión debido al viento."
#: src/libslic3r/PrintConfig.cpp:1858
msgid "If enabled, the wipe tower will not be printed on layers with no toolchanges. On layers with a toolchange, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print."
msgstr "Si está habilitado, laTorre de Limpieza no se imprimirá en capas sin cambios de herramientas. En capas con cambio de herramienta, el extrusor viajará hacia abajo para imprimir la torre de limpieza. El usuario es responsable de garantizar que no haya colisión con la impresión."
@ -5941,9 +5977,9 @@ msgstr "Eliminar puntos seleccionados"
msgid "Remove the selected object"
msgstr "Eliminar el objeto seleccionado"
#: src/slic3r/GUI/ConfigWizard.cpp:438
msgid "Remove user profiles - install from scratch (a snapshot will be taken beforehand)"
msgstr "Eliminar perfiles de usuario - instalar desde cero (se realizará una instantánea con anterioridad)"
#: src/slic3r/GUI/ConfigWizard.cpp:453
msgid "Remove user profiles (a snapshot will be taken beforehand)"
msgstr "Eliminar perfiles de usuario (se tomará una instantánea de antemano)"
#: src/slic3r/GUI/GUI_ObjectList.cpp:1636
msgid "Rename"
@ -7691,6 +7727,14 @@ msgstr "La primera capa se contraerá en el plano XY por el valor configurado pa
msgid "the following characters are not allowed:"
msgstr "los siguientes caracteres no están permitidos:"
#: src/slic3r/GUI/ConfigWizard.cpp:1830
msgid "The following FFF printer models have no filament selected:"
msgstr "Los siguientes modelos de impresoras FFF no tienen filamento seleccionado:"
#: src/slic3r/GUI/ConfigWizard.cpp:1848
msgid "The following SLA printer models have no materials selected:"
msgstr "Los siguientes modelos de impresoras SLA no tienen filamento seleccionado:"
#: src/slic3r/GUI/Tab.cpp:3461
msgid "the following suffix is not allowed:"
msgstr "el siguiente sufijo no está permitido:"
@ -9035,14 +9079,6 @@ msgstr "No puedes cargar un proyecto SLA con varias piezas en la base"
msgid "You cannot use non-uniform scaling mode for multiple objects/parts selection"
msgstr "No puedes usar el modo de escala no uniforme para la selección de múltiples objetos/partes"
#: src/slic3r/GUI/ConfigWizard.cpp:1760
msgid "You have to select at least one filament for selected printers"
msgstr "Debes seleccionar al menos un filamento para las impresoras seleccionadas"
#: src/slic3r/GUI/ConfigWizard.cpp:1771
msgid "You have to select at least one material for selected printers"
msgstr "Debes seleccionar al menos un material para las impresoras seleccionadas"
#: src/slic3r/GUI/GLCanvas3DManager.cpp:287
msgid "You may need to update your graphics card driver."
msgstr "Puede que necesites actualizar tu tarjeta de gráficos."

View file

@ -1092,6 +1092,32 @@ msgstr "Annulation..."
msgid "Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible."
msgstr "Impossible de calculer la largeur d'extrusion pour %1% : la variable \"%2%\" n'est pas accessible."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3017
msgid ""
"Cannot insert a new layer range after the current layer range.\n"
"Current layer range overlaps with the next layer range."
msgstr ""
"Impossible d'insérer une nouvelle zone de couche après la zone de couche actuelle.\n"
"La zone de couche actuelle chevauche la prochaine zone de couche."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3008
msgid ""
"Cannot insert a new layer range after the current layer range.\n"
"The next layer range is too thin to be split to two\n"
"without violating the minimum layer height."
msgstr ""
"Impossible d'insérer une nouvelle zone de couche après la zone de couche actuelle.\n"
"La zone de couche suivante est trop fine pour être séparée en deux sans enfreindre la hauteur de couche minimum."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3012
msgid ""
"Cannot insert a new layer range between the current and the next layer range.\n"
"The gap between the current layer range and the next layer range\n"
"is thinner than the minimum layer height allowed."
msgstr ""
"Impossible d'insérer une nouvelle zone de couche entre l'actuelle et la prochaine.\n"
"L'espace entre la zone de couche actuelle et la prochaine est inférieur à la hauteur de couche minimum autorisée."
#: src/slic3r/GUI/Tab.cpp:3073
msgid "Cannot overwrite a system profile."
msgstr "Impossible d'écraser un profil système."
@ -2032,14 +2058,6 @@ msgstr ""
"Sélectionnez OUI si vous voulez changer cette valeur pour %s%%,\n"
"ou NON si vous êtes certain que %s%s est une valeur correcte."
#: src/slic3r/GUI/ConfigWizard.cpp:1761
msgid "Do you want to automatic select default filaments?"
msgstr "Voulez-vous sélectionner automatiquement les filaments par défaut ?"
#: src/slic3r/GUI/ConfigWizard.cpp:1772
msgid "Do you want to automatic select default materials?"
msgstr "Voulez-vous sélectionner automatiquement les matériaux par défaut ?"
#: src/slic3r/GUI/DoubleSlider.cpp:1920
msgid "Do you want to delete all saved tool changes?"
msgstr "Voulez-vous supprimer tous les changements d'outils enregistrés ?"
@ -2056,6 +2074,14 @@ msgstr "Voulez-vous réessayer"
msgid "Do you want to save your manually edited support points?"
msgstr "Voulez-vous sauvegarder vos points de support édités manuellement ?"
#: src/slic3r/GUI/ConfigWizard.cpp:1834
msgid "Do you want to select default filaments for these FFF printer models?"
msgstr "Voulez-vous sélectionner les filaments par défaut pour ces modèles d'imprimantes FFF ?"
#: src/slic3r/GUI/ConfigWizard.cpp:1852
msgid "Do you want to select default SLA materials for these printer models?"
msgstr "Voulez-vous sélectionner les matériaux SLA par défaut pour ces modèles d'imprimantes ?"
#: src/libslic3r/PrintConfig.cpp:3429
msgid "Don't arrange"
msgstr "Ne pas agencer"
@ -2072,6 +2098,10 @@ msgstr "Ne pas supporter les ponts"
msgid "Downgrade"
msgstr "Rétrograder"
#: src/libslic3r/PrintConfig.cpp:1695
msgid "Draft shield"
msgstr "Bouclier contre les flux d'air"
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
@ -3454,6 +3484,10 @@ msgstr "Si activé, Slic3r télécharge les mises à jours des préréglages sys
msgid "If enabled, the 3D scene will be rendered in Retina resolution. If you are experiencing 3D performance problems, disabling this option may help."
msgstr "Si ceci est activé, la scène 3D sera affichée avec la résolution Retina. Si vous rencontrez des problèmes de performance 3D, le fait de désactiver cette option vous aidera peut-être."
#: src/libslic3r/PrintConfig.cpp:1696
msgid "If enabled, the skirt will be as tall as a highest printed object. This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."
msgstr "Si elle est activée, la jupe sera aussi haute que l'objet imprimé le plus haut. Cela sert à protéger les impressions ABS ou ASA des phénomènes de déformation ou de décollement du plateau d'impression liés au flux d'air."
#: src/libslic3r/PrintConfig.cpp:1858
msgid "If enabled, the wipe tower will not be printed on layers with no toolchanges. On layers with a toolchange, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print."
msgstr "Si elle est activée, la tour de nettoyage ne sera pas imprimée sur des couches sans changement d'outil. Sur les couches avec un changement d'outil, l'extrudeur se déplacera vers le bas pour imprimer la tour de nettoyage. C'est à l'utilisateur de s'assurer qu'il n'y a pas de collision avec l'impression."
@ -5947,9 +5981,9 @@ msgstr "Retirer les points sélectionnés"
msgid "Remove the selected object"
msgstr "Retirer l'objet sélectionné"
#: src/slic3r/GUI/ConfigWizard.cpp:438
msgid "Remove user profiles - install from scratch (a snapshot will be taken beforehand)"
msgstr "Supprimer les profils d'utilisateur - installation à partir de zéro (un instantané des réglages sera pris)"
#: src/slic3r/GUI/ConfigWizard.cpp:453
msgid "Remove user profiles (a snapshot will be taken beforehand)"
msgstr "Supprimer les profils utilisateurs (un instantané sera pris au préalable)"
#: src/slic3r/GUI/GUI_ObjectList.cpp:1636
msgid "Rename"
@ -7696,6 +7730,14 @@ msgstr "La première couche sera réduite sur le plan XY selon la valeur configu
msgid "the following characters are not allowed:"
msgstr "les caractères suivant ne sont pas autorisés :"
#: src/slic3r/GUI/ConfigWizard.cpp:1830
msgid "The following FFF printer models have no filament selected:"
msgstr "Les modèles d'imprimantes FFF suivants n'ont aucun filament sélectionné :"
#: src/slic3r/GUI/ConfigWizard.cpp:1848
msgid "The following SLA printer models have no materials selected:"
msgstr "Les modèles d'imprimantes SLA suivants n'ont aucun matériau sélectionné :"
#: src/slic3r/GUI/Tab.cpp:3461
msgid "the following suffix is not allowed:"
msgstr "le suffixe suivant n'est pas autorisé :"
@ -9049,14 +9091,6 @@ msgstr "Vous ne pouvez pas charger un projet SLA avec un objet en plusieurs part
msgid "You cannot use non-uniform scaling mode for multiple objects/parts selection"
msgstr "Vous ne pouvez pas utiliser un mode de redimensionnement non-uniforme pour une sélection d'objets/de parties multiples"
#: src/slic3r/GUI/ConfigWizard.cpp:1760
msgid "You have to select at least one filament for selected printers"
msgstr "Vous devez sélectionner au moins un filament pour les imprimantes sélectionnées"
#: src/slic3r/GUI/ConfigWizard.cpp:1771
msgid "You have to select at least one material for selected printers"
msgstr "Vous devez sélectionner au moins un matériau pour les imprimantes sélectionnées"
#: src/slic3r/GUI/GLCanvas3DManager.cpp:287
msgid "You may need to update your graphics card driver."
msgstr "Vous avez peut-être besoin de mettre à jour le pilote de votre carte graphique."

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1092,6 +1092,34 @@ msgstr "Anulowanie..."
msgid "Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible."
msgstr "Nie można przeliczyć szerokości ekstruzji dla %1%: zmienna \"%2%\" jest niedostępna."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3017
msgid ""
"Cannot insert a new layer range after the current layer range.\n"
"Current layer range overlaps with the next layer range."
msgstr ""
"Nie można wstawić nowego zakresu wysokości po obecnym.\n"
"Zakres pokrywałby się z kolejnym."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3008
msgid ""
"Cannot insert a new layer range after the current layer range.\n"
"The next layer range is too thin to be split to two\n"
"without violating the minimum layer height."
msgstr ""
"Nie można wstawić nowego zakresu wysokości po obecnym.\n"
"Kolejny zakres jest zbyt niski, aby można było go podzielić\n"
"z powodu minimalnej grubości warstwy."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3012
msgid ""
"Cannot insert a new layer range between the current and the next layer range.\n"
"The gap between the current layer range and the next layer range\n"
"is thinner than the minimum layer height allowed."
msgstr ""
"Nie można wstawić nowego zakresu wysokości pomiędzy obecne.\n"
"Odstęp pomiędzy zakresami jest niższy \n"
"niż dozwolona minimalna wysokość warstwy."
#: src/slic3r/GUI/Tab.cpp:3073
msgid "Cannot overwrite a system profile."
msgstr "Nie można nadpisać profilu systemowego."
@ -2032,14 +2060,6 @@ msgstr ""
"Kliknij TAK, jeśli chcesz zmienić wartość na %s %%,\n"
"lub NIE, jeśli masz pewność, że %s %s jest prawidłową wartością."
#: src/slic3r/GUI/ConfigWizard.cpp:1761
msgid "Do you want to automatic select default filaments?"
msgstr "Czy chcesz automatycznie wybrać domyślne filamenty?"
#: src/slic3r/GUI/ConfigWizard.cpp:1772
msgid "Do you want to automatic select default materials?"
msgstr "Czy chcesz automatycznie wybrać domyślne materiały?"
#: src/slic3r/GUI/DoubleSlider.cpp:1920
msgid "Do you want to delete all saved tool changes?"
msgstr "Czy chcesz usunąć wszystkie zmiany narzędzi?"
@ -2056,6 +2076,14 @@ msgstr "Czy chcesz spróbować ponownie"
msgid "Do you want to save your manually edited support points?"
msgstr "Czy chcesz zapisać ręcznie edytowane punkty podpór?"
#: src/slic3r/GUI/ConfigWizard.cpp:1834
msgid "Do you want to select default filaments for these FFF printer models?"
msgstr "Czy chcesz ustawić domyślne filamenty dla tych modeli drukarek FFF?"
#: src/slic3r/GUI/ConfigWizard.cpp:1852
msgid "Do you want to select default SLA materials for these printer models?"
msgstr "Czy chcesz ustawić domyślne materiały SLA dla tych modeli drukarek?"
#: src/libslic3r/PrintConfig.cpp:3429
msgid "Don't arrange"
msgstr "Nie układaj"
@ -2072,6 +2100,10 @@ msgstr "Nie używaj podpór pod mostami"
msgid "Downgrade"
msgstr "Deaktualizacja"
#: src/libslic3r/PrintConfig.cpp:1695
msgid "Draft shield"
msgstr "Draft shield"
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
@ -3450,6 +3482,10 @@ msgstr "Włączenie powoduje pobieranie wbudowanych systemowych zestawów ustawi
msgid "If enabled, the 3D scene will be rendered in Retina resolution. If you are experiencing 3D performance problems, disabling this option may help."
msgstr "Po włączeniu podgląd 3D będzie renderowany w rozdzielczości Retina. Wyłącz tę opcję w przypadku wystąpienia problemów z wydajnością 3D."
#: src/libslic3r/PrintConfig.cpp:1696
msgid "If enabled, the skirt will be as tall as a highest printed object. This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."
msgstr "Po włączeniu, wysokość skirt będzie taka sama, jak najwyższego modelu. Przydaje się podczas druku z ABS lub ASA - chroni wydruk przed podwijaniem się i odklejaniem od stołu przez przeciąg."
#: src/libslic3r/PrintConfig.cpp:1858
msgid "If enabled, the wipe tower will not be printed on layers with no toolchanges. On layers with a toolchange, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print."
msgstr "Po włączeniu wieża czyszcząca nie będzie drukowana na warstwach, na których nie ma zmian koloru. Na kolejnych warstwach ze zmianami koloru ekstruder zjedzie w dół, aby kontynuować czyszczenie na wieży. Użytkownik musi upewnić się, że nie nastąpi kolizja głowicy z wydrukiem."
@ -4029,7 +4065,7 @@ msgstr "Wczytaj kształt z STL..."
#: src/slic3r/GUI/BedShapeDialog.cpp:182 src/slic3r/GUI/BedShapeDialog.cpp:261
msgid "Load..."
msgstr "Załaduje..."
msgstr "Otwórz..."
#: src/slic3r/GUI/WipeTowerDialog.cpp:264
msgid "loaded"
@ -5895,7 +5931,7 @@ msgstr "Niższa szczegółowość"
#: src/slic3r/GUI/Plater.cpp:879
msgid "Remove device"
msgstr "Usuń urządzenie"
msgstr "Odłącz urządzenie"
#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:182
msgid "Remove extruder from sequence"
@ -5942,9 +5978,9 @@ msgstr "Usuń zaznaczone punkty"
msgid "Remove the selected object"
msgstr "Usuń wybrany model"
#: src/slic3r/GUI/ConfigWizard.cpp:438
msgid "Remove user profiles - install from scratch (a snapshot will be taken beforehand)"
msgstr "Usuń profile użytkownika - czysta instalacja (najpierw zostanie wykonany zrzut)"
#: src/slic3r/GUI/ConfigWizard.cpp:453
msgid "Remove user profiles (a snapshot will be taken beforehand)"
msgstr "Usuń profile użytkownika (zostanie wykonany zrzut)"
#: src/slic3r/GUI/GUI_ObjectList.cpp:1636
msgid "Rename"
@ -7691,6 +7727,14 @@ msgstr "Pierwsza warstwa zostanie zmniejszona o tą wartość w osiach X i Y aby
msgid "the following characters are not allowed:"
msgstr "następujące znaki nie są dozwolone:"
#: src/slic3r/GUI/ConfigWizard.cpp:1830
msgid "The following FFF printer models have no filament selected:"
msgstr "Następujące modele drukarek FFF nie mają przypisanych filamentów:"
#: src/slic3r/GUI/ConfigWizard.cpp:1848
msgid "The following SLA printer models have no materials selected:"
msgstr "Następujące modele drukarek SLA nie mają przypisanych materiałów:"
#: src/slic3r/GUI/Tab.cpp:3461
msgid "the following suffix is not allowed:"
msgstr "następujący sufiks nie jest dozwolony:"
@ -9044,14 +9088,6 @@ msgstr "Nie możesz wczytać projektu SLA mając na stole wieloczęściowy model
msgid "You cannot use non-uniform scaling mode for multiple objects/parts selection"
msgstr "Nie możesz używać skalowania nierównomiernego dla kliku modeli/części"
#: src/slic3r/GUI/ConfigWizard.cpp:1760
msgid "You have to select at least one filament for selected printers"
msgstr "Musisz wybrać co najmniej jeden filament dla zaznaczonych drukarek"
#: src/slic3r/GUI/ConfigWizard.cpp:1771
msgid "You have to select at least one material for selected printers"
msgstr "Musisz wybrać co najmniej jeden materiał dla zaznaczonych drukarek"
#: src/slic3r/GUI/GLCanvas3DManager.cpp:287
msgid "You may need to update your graphics card driver."
msgstr "Może być wymagana aktualizacja sterowników karty graficznej."

5
src/imgui/README.md Normal file
View file

@ -0,0 +1,5 @@
** Dear ImGui is a bloat-free graphical user interface library for C++.**
For more information go to https://github.com/ocornut/imgui
THIS DIRECTORY CONTAINS THE imgui-1.66 da3c433 SOURCE DISTRIBUTION.

View file

@ -2880,7 +2880,8 @@ std::string GCode::extrude_path(ExtrusionPath path, std::string description, dou
std::string GCode::extrude_perimeters(const Print &print, const std::vector<ObjectByExtruder::Island::Region> &by_region, std::unique_ptr<EdgeGrid::Grid> &lower_layer_edge_grid)
{
std::string gcode;
for (const ObjectByExtruder::Island::Region &region : by_region) {
for (const ObjectByExtruder::Island::Region &region : by_region)
if (! region.perimeters.empty()) {
m_config.apply(print.regions()[&region - &by_region.front()]->config());
for (const ExtrusionEntity *ee : region.perimeters)
gcode += this->extrude_entity(*ee, "perimeter", -1., &lower_layer_edge_grid);
@ -2892,7 +2893,8 @@ std::string GCode::extrude_perimeters(const Print &print, const std::vector<Obje
std::string GCode::extrude_infill(const Print &print, const std::vector<ObjectByExtruder::Island::Region> &by_region)
{
std::string gcode;
for (const ObjectByExtruder::Island::Region &region : by_region) {
for (const ObjectByExtruder::Island::Region &region : by_region)
if (! region.infills.empty()) {
m_config.apply(print.regions()[&region - &by_region.front()]->config());
ExtrusionEntitiesPtr extrusions { region.infills };
chain_and_reorder_extrusion_entities(extrusions, &m_last_pos);
@ -3370,17 +3372,18 @@ const std::vector<GCode::ObjectByExtruder::Island::Region>& GCode::ObjectByExtru
has_overrides = true;
break;
}
// Data is cleared, but the memory is not.
by_region_per_copy_cache.clear();
if (! has_overrides)
// Simple case. No need to copy the regions.
return this->by_region;
return wiping_entities ? by_region_per_copy_cache : this->by_region;
// Complex case. Some of the extrusions of some object instances are to be printed first - those are the wiping extrusions.
// Some of the extrusions of some object instances are printed later - those are the clean print extrusions.
// Filter out the extrusions based on the infill_overrides / perimeter_overrides:
// Data is cleared, but the memory is not.
by_region_per_copy_cache.clear();
for (const auto& reg : by_region) {
by_region_per_copy_cache.emplace_back(); // creates a region in the newly created Island
@ -3441,15 +3444,17 @@ void GCode::ObjectByExtruder::Island::Region::append(const Type type, const Extr
// First we append the entities, there are eec->entities.size() of them:
size_t old_size = perimeters_or_infills->size();
perimeters_or_infills->reserve(perimeters_or_infills->size() + eec->entities.size());
size_t new_size = old_size + eec->entities.size();
perimeters_or_infills->reserve(new_size);
for (auto* ee : eec->entities)
perimeters_or_infills->emplace_back(ee);
if (copies_extruder != nullptr) {
perimeters_or_infills_overrides->reserve(old_size + eec->entities.size());
// Don't reallocate overrides if not needed.
// Missing overrides are implicitely considered non-overridden.
perimeters_or_infills_overrides->reserve(new_size);
perimeters_or_infills_overrides->resize(old_size, nullptr);
for (unsigned int i = 0; i < eec->entities.size(); ++ i)
perimeters_or_infills_overrides->emplace_back(copies_extruder);
perimeters_or_infills_overrides->resize(new_size, copies_extruder);
}
}

View file

@ -241,6 +241,7 @@ void GCodePreviewData::reset()
ranges.width.reset();
ranges.height.reset();
ranges.feedrate.reset();
ranges.fan_speed.reset();
ranges.volumetric_rate.reset();
extrusion.layers.clear();
travel.polylines.clear();

View file

@ -60,6 +60,30 @@
// while 3D mouse is connected and free camera is not selected
#define ENABLE_AUTO_CONSTRAINED_CAMERA (1 && ENABLE_2_2_0)
//==================
// 2.2.0.final techs
//==================
#define ENABLE_2_2_0_FINAL 1
// Enable tooltips for GLCanvas3D using ImGUI
#define ENABLE_CANVAS_TOOLTIP_USING_IMGUI (1 && ENABLE_2_2_0_FINAL)
// Enable constraining tooltips for GLCanvas3D using ImGUI into canvas area
#define ENABLE_CANVAS_CONSTRAINED_TOOLTIP_USING_IMGUI (1 && ENABLE_CANVAS_TOOLTIP_USING_IMGUI)
// Enable delay for showing tooltips for GLCanvas3D using ImGUI
#define ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI (1 && ENABLE_CANVAS_TOOLTIP_USING_IMGUI)
// Enable modified mouse events handling for toolbars
#define ENABLE_MODIFIED_TOOLBAR_MOUSE_EVENT_HANDLING (1 && ENABLE_CANVAS_TOOLTIP_USING_IMGUI)
// Enable modified mouse events handling for gizmobar
#define ENABLE_MODIFIED_GIZMOBAR_MOUSE_EVENT_HANDLING (1 && ENABLE_CANVAS_TOOLTIP_USING_IMGUI)
// Enable fix for dragging mouse event handling for gizmobar
#define ENABLE_GIZMO_TOOLBAR_DRAGGING_FIX (1 && ENABLE_2_2_0_FINAL)
//============
// 2.3.0 techs
//============
#define ENABLE_2_3_0 1
// Enable rendering of objects colored by facets' slope
#define ENABLE_SLOPE_RENDERING (1 && ENABLE_2_2_0)

View file

@ -61,9 +61,11 @@
#include <algorithm>
#include <cmath>
#include "DoubleSlider.hpp"
#if !ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
#if ENABLE_RENDER_STATISTICS
#include <chrono>
#endif // ENABLE_RENDER_STATISTICS
#endif // !ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
#include <imgui/imgui_internal.h>
@ -1370,6 +1372,88 @@ void GLCanvas3D::Labels::render(const std::vector<const ModelInstance*>& sorted_
}
}
#if ENABLE_CANVAS_TOOLTIP_USING_IMGUI
#if ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
void GLCanvas3D::Tooltip::set_text(const std::string& text)
{
// If the mouse is inside an ImGUI dialog, then the tooltip is suppressed.
const std::string &new_text = m_in_imgui ? std::string() : text;
if (m_text != new_text)
{
if (m_text.empty())
m_start_time = std::chrono::steady_clock::now();
m_text = new_text;
}
}
#endif // ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
#if ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
void GLCanvas3D::Tooltip::render(const Vec2d& mouse_position, GLCanvas3D& canvas) const
#else
void GLCanvas3D::Tooltip::render(const Vec2d& mouse_position) const
#endif // ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
{
#if ENABLE_CANVAS_CONSTRAINED_TOOLTIP_USING_IMGUI
static ImVec2 size(0.0f, 0.0f);
auto validate_position = [](const Vec2d& position, const GLCanvas3D& canvas, const ImVec2& wnd_size) {
Size cnv_size = canvas.get_canvas_size();
float x = std::clamp((float)position(0), 0.0f, (float)cnv_size.get_width() - wnd_size.x);
float y = std::clamp((float)position(1) + 16, 0.0f, (float)cnv_size.get_height() - wnd_size.y);
return Vec2f(x, y);
};
#endif // ENABLE_CANVAS_CONSTRAINED_TOOLTIP_USING_IMGUI
#if ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
if (m_text.empty())
return;
// draw the tooltip as hidden until the delay is expired
float alpha = (std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - m_start_time).count() < 500) ? 0.0f : 1.0;
#else
if (m_text.empty())
return;
#endif // ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
#if ENABLE_CANVAS_CONSTRAINED_TOOLTIP_USING_IMGUI
Vec2f position = validate_position(mouse_position, canvas, size);
#endif // ENABLE_CANVAS_CONSTRAINED_TOOLTIP_USING_IMGUI
ImGuiWrapper& imgui = *wxGetApp().imgui();
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
#if ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, alpha);
#endif // ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
#if ENABLE_CANVAS_CONSTRAINED_TOOLTIP_USING_IMGUI
imgui.set_next_window_pos(position(0), position(1), ImGuiCond_Always, 0.0f, 0.0f);
#else
imgui.set_next_window_pos(mouse_position(0), mouse_position(1) + 16, ImGuiCond_Always, 0.0f, 0.0f);
#endif // ENABLE_CANVAS_CONSTRAINED_TOOLTIP_USING_IMGUI
imgui.begin(_(L("canvas_tooltip")), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoFocusOnAppearing);
ImGui::BringWindowToDisplayFront(ImGui::GetCurrentWindow());
ImGui::TextUnformatted(m_text.c_str());
#if ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
// force re-render while the windows gets to its final size (it may take several frames) or while hidden
if (alpha == 0.0f || ImGui::GetWindowContentRegionWidth() + 2.0f * ImGui::GetStyle().WindowPadding.x != ImGui::CalcWindowExpectedSize(ImGui::GetCurrentWindow()).x)
canvas.request_extra_frame();
#endif // ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
#if ENABLE_CANVAS_CONSTRAINED_TOOLTIP_USING_IMGUI
size = ImGui::GetWindowSize();
#endif // ENABLE_CANVAS_CONSTRAINED_TOOLTIP_USING_IMGUI
imgui.end();
#if ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
ImGui::PopStyleVar(2);
#else
ImGui::PopStyleVar();
#endif // ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
}
#endif // ENABLE_CANVAS_TOOLTIP_USING_IMGUI
#if ENABLE_SLOPE_RENDERING
void GLCanvas3D::Slope::render() const
{
@ -1423,7 +1507,7 @@ void GLCanvas3D::Slope::render() const
if (modified)
m_volumes.set_slope_z_range({ -::cos(Geometry::deg2rad(90.0f - angle_range[0])), -::cos(Geometry::deg2rad(90.0f - angle_range[1])) });
}
}
}
#endif // ENABLE_SLOPE_RENDERING
wxDEFINE_EVENT(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS, SimpleEvent);
@ -2005,6 +2089,38 @@ void GLCanvas3D::render()
m_camera.debug_render();
#endif // ENABLE_CAMERA_STATISTICS
#if ENABLE_CANVAS_TOOLTIP_USING_IMGUI
std::string tooltip;
// Negative coordinate means out of the window, likely because the window was deactivated.
// In that case the tooltip should be hidden.
if (m_mouse.position.x() >= 0. && m_mouse.position.y() >= 0.)
{
if (tooltip.empty())
tooltip = m_layers_editing.get_tooltip(*this);
if (tooltip.empty())
tooltip = m_gizmos.get_tooltip();
if (tooltip.empty())
tooltip = m_main_toolbar.get_tooltip();
if (tooltip.empty())
tooltip = m_undoredo_toolbar.get_tooltip();
if (tooltip.empty())
tooltip = m_view_toolbar.get_tooltip();
}
set_tooltip(tooltip);
#if ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
m_tooltip.render(m_mouse.position, *this);
#else
m_tooltip.render(m_mouse.position);
#endif // ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
#endif // ENABLE_CANVAS_TOOLTIP_USING_IMGUI
wxGetApp().plater()->get_mouse3d_controller().render_settings_dialog(*this);
wxGetApp().imgui()->render();
@ -2015,6 +2131,27 @@ void GLCanvas3D::render()
auto end_time = std::chrono::high_resolution_clock::now();
m_render_stats.last_frame = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time).count();
#endif // ENABLE_RENDER_STATISTICS
#if !ENABLE_CANVAS_TOOLTIP_USING_IMGUI
std::string tooltip = "";
if (tooltip.empty())
tooltip = m_layers_editing.get_tooltip(*this);
if (tooltip.empty())
tooltip = m_gizmos.get_tooltip();
if (tooltip.empty())
tooltip = m_main_toolbar.get_tooltip();
if (tooltip.empty())
tooltip = m_undoredo_toolbar.get_tooltip();
if (tooltip.empty())
tooltip = m_view_toolbar.get_tooltip();
set_tooltip(tooltip);
#endif // !ENABLE_CANVAS_TOOLTIP_USING_IMGUI
}
#if ENABLE_THUMBNAIL_GENERATOR
@ -3277,13 +3414,21 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
Point pos(evt.GetX(), evt.GetY());
ImGuiWrapper *imgui = wxGetApp().imgui();
ImGuiWrapper* imgui = wxGetApp().imgui();
m_tooltip.set_in_imgui(false);
if (imgui->update_mouse_data(evt)) {
m_mouse.position = evt.Leaving() ? Vec2d(-1.0, -1.0) : pos.cast<double>();
m_tooltip.set_in_imgui(true);
render();
#ifdef SLIC3R_DEBUG_MOUSE_EVENTS
printf((format_mouse_event_debug_message(evt) + " - Consumed by ImGUI\n").c_str());
#endif /* SLIC3R_DEBUG_MOUSE_EVENTS */
// do not return if dragging or tooltip not empty to allow for tooltip update
#if ENABLE_CANVAS_TOOLTIP_USING_IMGUI
if (!m_mouse.dragging && m_tooltip.is_empty())
#else
if (!m_mouse.dragging && m_canvas->GetToolTipText().empty())
#endif // ENABLE_CANVAS_TOOLTIP_USING_IMGUI
return;
}
@ -3335,6 +3480,9 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
mouse_up_cleanup();
m_mouse.set_start_position_3D_as_invalid();
#if ENABLE_CANVAS_TOOLTIP_USING_IMGUI
m_mouse.position = pos.cast<double>();
#endif /// ENABLE_CANVAS_TOOLTIP_USING_IMGUI
return;
}
@ -3662,24 +3810,6 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
else if (evt.Moving())
{
m_mouse.position = pos.cast<double>();
std::string tooltip = "";
if (tooltip.empty())
tooltip = m_layers_editing.get_tooltip(*this);
if (tooltip.empty())
tooltip = m_gizmos.get_tooltip();
if (tooltip.empty())
tooltip = m_main_toolbar.get_tooltip();
if (tooltip.empty())
tooltip = m_undoredo_toolbar.get_tooltip();
if (tooltip.empty())
tooltip = m_view_toolbar.get_tooltip();
set_tooltip(tooltip);
// updates gizmos overlay
if (m_selection.is_empty())
@ -3754,20 +3884,27 @@ void GLCanvas3D::set_tooltip(const std::string& tooltip) const
{
if (m_canvas != nullptr)
{
wxToolTip* t = m_canvas->GetToolTip();
if (t != nullptr)
{
if (tooltip.empty())
m_canvas->UnsetToolTip();
else
t->SetTip(wxString::FromUTF8(tooltip.data()));
}
else if (!tooltip.empty()) // Avoid "empty" tooltips => unset of the empty tooltip leads to application crash under OSX
m_canvas->SetToolTip(wxString::FromUTF8(tooltip.data()));
#if ENABLE_CANVAS_TOOLTIP_USING_IMGUI
m_tooltip.set_text(tooltip);
#else
wxString txt = wxString::FromUTF8(tooltip.data());
if (m_canvas->GetToolTipText() != txt)
m_canvas->SetToolTip(txt);
// wxToolTip* t = m_canvas->GetToolTip();
// if (t != nullptr)
// {
// if (tooltip.empty())
// m_canvas->UnsetToolTip();
// else
// t->SetTip(wxString::FromUTF8(tooltip.data()));
// }
// else if (!tooltip.empty()) // Avoid "empty" tooltips => unset of the empty tooltip leads to application crash under OSX
// m_canvas->SetToolTip(wxString::FromUTF8(tooltip.data()));
#endif // ENABLE_CANVAS_TOOLTIP_USING_IMGUI
}
}
void GLCanvas3D::do_move(const std::string& snapshot_type)
{
if (m_model == nullptr)

View file

@ -3,6 +3,9 @@
#include <stddef.h>
#include <memory>
#if ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
#include <chrono>
#endif // ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
#include "3DScene.hpp"
#include "GLToolbar.hpp"
@ -389,6 +392,30 @@ private:
void render(const std::vector<const ModelInstance*>& sorted_instances) const;
};
#if ENABLE_CANVAS_TOOLTIP_USING_IMGUI
class Tooltip
{
std::string m_text;
#if ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
std::chrono::steady_clock::time_point m_start_time;
#endif // ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
// Indicator that the mouse is inside an ImGUI dialog, therefore the tooltip should be suppressed.
bool m_in_imgui = false;
public:
bool is_empty() const { return m_text.empty(); }
#if ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
void set_text(const std::string& text);
void render(const Vec2d& mouse_position, GLCanvas3D& canvas) const;
#else
void set_text(const std::string& text) { m_text = text; }
void render(const Vec2d& mouse_position) const;
#endif // ENABLE_CANVAS_DELAYED_TOOLTIP_USING_IMGUI
// Indicates that the mouse is inside an ImGUI dialog, therefore the tooltip should be suppressed.
void set_in_imgui(bool b) { m_in_imgui = b; }
};
#endif // ENABLE_CANVAS_TOOLTIP_USING_IMGUI
#if ENABLE_SLOPE_RENDERING
class Slope
{
@ -485,6 +512,9 @@ private:
int m_selected_extruder;
Labels m_labels;
#if ENABLE_CANVAS_TOOLTIP_USING_IMGUI
mutable Tooltip m_tooltip;
#endif // ENABLE_CANVAS_TOOLTIP_USING_IMGUI
#if ENABLE_SLOPE_RENDERING
Slope m_slope;
#endif // ENABLE_SLOPE_RENDERING

View file

@ -421,14 +421,60 @@ bool GLToolbar::on_mouse(wxMouseEvent& evt, GLCanvas3D& parent)
// mouse anywhere
if (!evt.Dragging() && !evt.Leaving() && !evt.Entering() && (m_mouse_capture.parent != nullptr))
{
if (m_mouse_capture.any() && (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()))
if (m_mouse_capture.any() && (evt.LeftUp() || evt.MiddleUp() || evt.RightUp())) {
// prevents loosing selection into the scene if mouse down was done inside the toolbar and mouse up was down outside it,
// as when switching between views
processed = true;
m_mouse_capture.reset();
if (contains_mouse(mouse_pos, parent) == -1)
// mouse is outside the toolbar
m_tooltip.clear();
return true;
}
m_mouse_capture.reset();
}
#if ENABLE_MODIFIED_TOOLBAR_MOUSE_EVENT_HANDLING
if (evt.Moving())
m_tooltip = update_hover_state(mouse_pos, parent);
else if (evt.LeftUp())
{
if (m_mouse_capture.left)
{
processed = true;
m_mouse_capture.left = false;
}
else
return false;
}
else if (evt.MiddleUp())
{
if (m_mouse_capture.middle)
{
processed = true;
m_mouse_capture.middle = false;
}
else
return false;
}
else if (evt.RightUp())
{
if (m_mouse_capture.right)
{
processed = true;
m_mouse_capture.right = false;
}
else
return false;
}
else if (evt.Dragging())
{
if (m_mouse_capture.any())
// if the button down was done on this toolbar, prevent from dragging into the scene
processed = true;
else
return false;
}
#else
if (evt.Moving())
m_tooltip = update_hover_state(mouse_pos, parent);
else if (evt.LeftUp())
@ -440,6 +486,7 @@ bool GLToolbar::on_mouse(wxMouseEvent& evt, GLCanvas3D& parent)
else if (evt.Dragging() && m_mouse_capture.any())
// if the button down was done on this toolbar, prevent from dragging into the scene
processed = true;
#endif // ENABLE_MODIFIED_TOOLBAR_MOUSE_EVENT_HANDLING
int item_id = contains_mouse(mouse_pos, parent);
if (item_id == -1)
@ -479,8 +526,10 @@ bool GLToolbar::on_mouse(wxMouseEvent& evt, GLCanvas3D& parent)
parent.set_as_dirty();
}
}
#if !ENABLE_MODIFIED_TOOLBAR_MOUSE_EVENT_HANDLING
else if (evt.LeftUp())
processed = true;
#endif // !ENABLE_MODIFIED_TOOLBAR_MOUSE_EVENT_HANDLING
}
return processed;

View file

@ -262,12 +262,6 @@ void GLGizmoBase::render_grabbers_for_picking(const BoundingBoxf3& box) const
}
}
void GLGizmoBase::set_tooltip(const std::string& tooltip) const
{
m_parent.set_tooltip(tooltip);
}
std::string GLGizmoBase::format(float value, unsigned int decimals) const
{
return Slic3r::string_printf("%.*f", decimals, value);

View file

@ -100,6 +100,7 @@ protected:
mutable std::vector<Grabber> m_grabbers;
ImGuiWrapper* m_imgui;
bool m_first_input_window_render;
mutable std::string m_tooltip;
public:
GLGizmoBase(GLCanvas3D& parent,
@ -145,10 +146,12 @@ public:
void update(const UpdateData& data);
void render() const { on_render(); }
void render() const { m_tooltip.clear(); on_render(); }
void render_for_picking() const { on_render_for_picking(); }
void render_input_window(float x, float y, float bottom_limit);
virtual std::string get_tooltip() const { return ""; }
protected:
virtual bool on_init() = 0;
virtual void on_load(cereal::BinaryInputArchive& ar) {}
@ -174,7 +177,6 @@ protected:
void render_grabbers(float size) const;
void render_grabbers_for_picking(const BoundingBoxf3& box) const;
void set_tooltip(const std::string& tooltip) const;
std::string format(float value, unsigned int decimals) const;
};

View file

@ -30,6 +30,11 @@ GLGizmoCut::GLGizmoCut(GLCanvas3D& parent, const std::string& icon_filename, uns
, m_rotate_lower(false)
{}
std::string GLGizmoCut::get_tooltip() const
{
return (m_hover_id == 0 || m_grabbers[0].dragging) ? "Z: " + format(m_cut_z, 2) : "";
}
bool GLGizmoCut::on_init()
{
m_grabbers.emplace_back();
@ -79,10 +84,6 @@ void GLGizmoCut::on_update(const UpdateData& data)
void GLGizmoCut::on_render() const
{
if (m_grabbers[0].dragging) {
set_tooltip("Z: " + format(m_cut_z, 2));
}
const Selection& selection = m_parent.get_selection();
update_max_z(selection);

View file

@ -28,6 +28,8 @@ public:
double get_cut_z() const { return m_cut_z; }
void set_cut_z(double cut_z) const;
std::string get_tooltip() const override;
protected:
virtual bool on_init();
virtual void on_load(cereal::BinaryInputArchive& ar) { ar(m_cut_z, m_keep_upper, m_keep_lower, m_rotate_lower); }

View file

@ -31,6 +31,22 @@ GLGizmoMove3D::~GLGizmoMove3D()
::gluDeleteQuadric(m_quadric);
}
std::string GLGizmoMove3D::get_tooltip() const
{
const Selection& selection = m_parent.get_selection();
bool show_position = selection.is_single_full_instance();
const Vec3d& position = selection.get_bounding_box().center();
if (m_hover_id == 0 || m_grabbers[0].dragging)
return "X: " + format(show_position ? position(0) : m_displacement(0), 2);
else if (m_hover_id == 1 || m_grabbers[1].dragging)
return "Y: " + format(show_position ? position(1) : m_displacement(1), 2);
else if (m_hover_id == 2 || m_grabbers[2].dragging)
return "Z: " + format(show_position ? position(2) : m_displacement(2), 2);
else
return "";
}
bool GLGizmoMove3D::on_init()
{
for (int i = 0; i < 3; ++i)
@ -85,22 +101,6 @@ void GLGizmoMove3D::on_render() const
{
const Selection& selection = m_parent.get_selection();
bool show_position = selection.is_single_full_instance();
const Vec3d& position = selection.get_bounding_box().center();
if ((show_position && (m_hover_id == 0)) || m_grabbers[0].dragging)
set_tooltip("X: " + format(show_position ? position(0) : m_displacement(0), 2));
else if (!m_grabbers[0].dragging && (m_hover_id == 0))
set_tooltip("X");
else if ((show_position && (m_hover_id == 1)) || m_grabbers[1].dragging)
set_tooltip("Y: " + format(show_position ? position(1) : m_displacement(1), 2));
else if (!m_grabbers[1].dragging && (m_hover_id == 1))
set_tooltip("Y");
else if ((show_position && (m_hover_id == 2)) || m_grabbers[2].dragging)
set_tooltip("Z: " + format(show_position ? position(2) : m_displacement(2), 2));
else if (!m_grabbers[2].dragging && (m_hover_id == 2))
set_tooltip("Z");
glsafe(::glClear(GL_DEPTH_BUFFER_BIT));
glsafe(::glEnable(GL_DEPTH_TEST));

View file

@ -30,6 +30,8 @@ public:
const Vec3d& get_displacement() const { return m_displacement; }
std::string get_tooltip() const override;
protected:
virtual bool on_init();
virtual std::string on_get_name() const;

View file

@ -67,6 +67,18 @@ void GLGizmoRotate::set_angle(double angle)
m_angle = angle;
}
std::string GLGizmoRotate::get_tooltip() const
{
std::string axis;
switch (m_axis)
{
case X: { axis = "X"; break; }
case Y: { axis = "Y"; break; }
case Z: { axis = "Z"; break; }
}
return (m_hover_id == 0 || m_grabbers[0].dragging) ? axis + ": " + format((float)Geometry::rad2deg(m_angle), 4) : "";
}
bool GLGizmoRotate::on_init()
{
m_grabbers.push_back(Grabber());
@ -127,19 +139,7 @@ void GLGizmoRotate::on_render() const
const Selection& selection = m_parent.get_selection();
const BoundingBoxf3& box = selection.get_bounding_box();
std::string axis;
switch (m_axis)
{
case X: { axis = "X"; break; }
case Y: { axis = "Y"; break; }
case Z: { axis = "Z"; break; }
}
if (!m_dragging && (m_hover_id == 0))
set_tooltip(axis);
else if (m_dragging)
set_tooltip(axis + ": " + format((float)Geometry::rad2deg(m_angle), 4) + "\u00B0");
else
if (m_hover_id != 0 && !m_grabbers[0].dragging)
{
m_center = box.center();
m_radius = Offset + box.radius();

View file

@ -49,6 +49,8 @@ public:
double get_angle() const { return m_angle; }
void set_angle(double angle);
std::string get_tooltip() const override;
protected:
virtual bool on_init();
virtual std::string on_get_name() const { return ""; }
@ -81,6 +83,16 @@ public:
Vec3d get_rotation() const { return Vec3d(m_gizmos[X].get_angle(), m_gizmos[Y].get_angle(), m_gizmos[Z].get_angle()); }
void set_rotation(const Vec3d& rotation) { m_gizmos[X].set_angle(rotation(0)); m_gizmos[Y].set_angle(rotation(1)); m_gizmos[Z].set_angle(rotation(2)); }
std::string get_tooltip() const override
{
std::string tooltip = m_gizmos[X].get_tooltip();
if (tooltip.empty())
tooltip = m_gizmos[Y].get_tooltip();
if (tooltip.empty())
tooltip = m_gizmos[Z].get_tooltip();
return tooltip;
}
protected:
virtual bool on_init();
virtual std::string on_get_name() const;

View file

@ -20,6 +20,38 @@ GLGizmoScale3D::GLGizmoScale3D(GLCanvas3D& parent, const std::string& icon_filen
{
}
std::string GLGizmoScale3D::get_tooltip() const
{
const Selection& selection = m_parent.get_selection();
bool single_instance = selection.is_single_full_instance();
bool single_volume = selection.is_single_modifier() || selection.is_single_volume();
bool single_selection = single_instance || single_volume;
Vec3f scale = 100.0f * Vec3f::Ones();
if (single_instance)
scale = 100.0f * selection.get_volume(*selection.get_volume_idxs().begin())->get_instance_scaling_factor().cast<float>();
else if (single_volume)
scale = 100.0f * selection.get_volume(*selection.get_volume_idxs().begin())->get_volume_scaling_factor().cast<float>();
if (m_hover_id == 0 || m_hover_id == 1 || m_grabbers[0].dragging || m_grabbers[1].dragging)
return "X: " + format(scale(0), 4) + "%";
else if (m_hover_id == 2 || m_hover_id == 3 || m_grabbers[2].dragging || m_grabbers[3].dragging)
return "Y: " + format(scale(1), 4) + "%";
else if (m_hover_id == 4 || m_hover_id == 5 || m_grabbers[4].dragging || m_grabbers[5].dragging)
return "Z: " + format(scale(2), 4) + "%";
else if (m_hover_id == 6 || m_hover_id == 7 || m_hover_id == 8 || m_hover_id == 9 ||
m_grabbers[6].dragging || m_grabbers[7].dragging || m_grabbers[8].dragging || m_grabbers[9].dragging)
{
std::string tooltip = "X: " + format(scale(0), 4) + "%\n";
tooltip += "Y: " + format(scale(1), 4) + "%\n";
tooltip += "Z: " + format(scale(2), 4) + "%";
return tooltip;
}
else
return "";
}
bool GLGizmoScale3D::on_init()
{
for (int i = 0; i < 10; ++i)
@ -89,37 +121,6 @@ void GLGizmoScale3D::on_render() const
bool single_instance = selection.is_single_full_instance();
bool single_volume = selection.is_single_modifier() || selection.is_single_volume();
bool single_selection = single_instance || single_volume;
Vec3f scale = 100.0f * Vec3f::Ones();
if (single_instance)
scale = 100.0f * selection.get_volume(*selection.get_volume_idxs().begin())->get_instance_scaling_factor().cast<float>();
else if (single_volume)
scale = 100.0f * selection.get_volume(*selection.get_volume_idxs().begin())->get_volume_scaling_factor().cast<float>();
if ((single_selection && ((m_hover_id == 0) || (m_hover_id == 1))) || m_grabbers[0].dragging || m_grabbers[1].dragging)
set_tooltip("X: " + format(scale(0), 4) + "%");
else if (!m_grabbers[0].dragging && !m_grabbers[1].dragging && ((m_hover_id == 0) || (m_hover_id == 1)))
set_tooltip("X");
else if ((single_selection && ((m_hover_id == 2) || (m_hover_id == 3))) || m_grabbers[2].dragging || m_grabbers[3].dragging)
set_tooltip("Y: " + format(scale(1), 4) + "%");
else if (!m_grabbers[2].dragging && !m_grabbers[3].dragging && ((m_hover_id == 2) || (m_hover_id == 3)))
set_tooltip("Y");
else if ((single_selection && ((m_hover_id == 4) || (m_hover_id == 5))) || m_grabbers[4].dragging || m_grabbers[5].dragging)
set_tooltip("Z: " + format(scale(2), 4) + "%");
else if (!m_grabbers[4].dragging && !m_grabbers[5].dragging && ((m_hover_id == 4) || (m_hover_id == 5)))
set_tooltip("Z");
else if ((single_selection && ((m_hover_id == 6) || (m_hover_id == 7) || (m_hover_id == 8) || (m_hover_id == 9)))
|| m_grabbers[6].dragging || m_grabbers[7].dragging || m_grabbers[8].dragging || m_grabbers[9].dragging)
{
std::string tooltip = "X: " + format(scale(0), 4) + "%\n";
tooltip += "Y: " + format(scale(1), 4) + "%\n";
tooltip += "Z: " + format(scale(2), 4) + "%";
set_tooltip(tooltip);
}
else if (!m_grabbers[6].dragging && !m_grabbers[7].dragging && !m_grabbers[8].dragging && !m_grabbers[9].dragging &&
((m_hover_id == 6) || (m_hover_id == 7) || (m_hover_id == 8) || (m_hover_id == 9)))
set_tooltip("X/Y/Z");
glsafe(::glClear(GL_DEPTH_BUFFER_BIT));
glsafe(::glEnable(GL_DEPTH_TEST));

View file

@ -42,6 +42,8 @@ public:
const Vec3d& get_offset() const { return m_offset; }
std::string get_tooltip() const override;
protected:
virtual bool on_init();
virtual std::string on_get_name() const;

View file

@ -422,6 +422,15 @@ void GLGizmosManager::render_overlay() const
do_render_overlay();
}
std::string GLGizmosManager::get_tooltip() const
{
if (!m_tooltip.empty())
return m_tooltip;
const GLGizmoBase* curr = get_current();
return (curr != nullptr) ? curr->get_tooltip() : "";
}
bool GLGizmosManager::on_mouse_wheel(wxMouseEvent& evt)
{
bool processed = false;
@ -447,6 +456,7 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt)
int selected_object_idx = selection.get_object_idx();
bool processed = false;
#if !ENABLE_MODIFIED_GIZMOBAR_MOUSE_EVENT_HANDLING
// mouse anywhere
if (!evt.Dragging() && !evt.Leaving() && !evt.Entering() && (m_mouse_capture.parent != nullptr))
{
@ -456,10 +466,81 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt)
m_mouse_capture.reset();
}
#endif // !ENABLE_MODIFIED_GIZMOBAR_MOUSE_EVENT_HANDLING
// mouse anywhere
if (evt.Moving())
m_tooltip = update_hover_state(mouse_pos);
#if ENABLE_MODIFIED_GIZMOBAR_MOUSE_EVENT_HANDLING
else if (evt.LeftUp())
{
if (m_mouse_capture.left)
{
processed = true;
m_mouse_capture.left = false;
}
else if (is_dragging())
{
switch (m_current) {
case Move: m_parent.do_move(L("Gizmo-Move")); break;
case Scale: m_parent.do_scale(L("Gizmo-Scale")); break;
case Rotate: m_parent.do_rotate(L("Gizmo-Rotate")); break;
default: break;
}
stop_dragging();
update_data();
wxGetApp().obj_manipul()->set_dirty();
// Let the plater know that the dragging finished, so a delayed refresh
// of the scene with the background processing data should be performed.
m_parent.post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED));
// updates camera target constraints
m_parent.refresh_camera_scene_box();
processed = true;
}
// else
// return false;
}
else if (evt.MiddleUp())
{
if (m_mouse_capture.middle)
{
processed = true;
m_mouse_capture.middle = false;
}
else
return false;
}
else if (evt.RightUp())
{
if (pending_right_up)
{
pending_right_up = false;
return true;
}
if (m_mouse_capture.right)
{
processed = true;
m_mouse_capture.right = false;
}
else
return false;
}
#if ENABLE_GIZMO_TOOLBAR_DRAGGING_FIX
else if (evt.Dragging() && !is_dragging())
#else
else if (evt.Dragging()))
#endif // ENABLE_GIZMO_TOOLBAR_DRAGGING_FIX
{
if (m_mouse_capture.any())
// if the button down was done on this toolbar, prevent from dragging into the scene
processed = true;
// else
// return false;
}
#else
else if (evt.LeftUp())
m_mouse_capture.left = false;
else if (evt.MiddleUp())
@ -476,48 +557,8 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt)
else if (evt.Dragging() && m_mouse_capture.any())
// if the button down was done on this toolbar, prevent from dragging into the scene
processed = true;
if (get_gizmo_idx_from_mouse(mouse_pos) == Undefined)
{
// mouse is outside the toolbar
m_tooltip = "";
if (evt.LeftDown())
{
if ((m_current == SlaSupports || m_current == Hollow) && gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown()))
// the gizmo got the event and took some action, there is no need to do anything more
processed = true;
else if (!selection.is_empty() && grabber_contains_mouse()) {
update_data();
selection.start_dragging();
start_dragging();
if (m_current == Flatten) {
// Rotate the object so the normal points downward:
m_parent.do_flatten(get_flattening_normal(), L("Gizmo-Place on Face"));
wxGetApp().obj_manipul()->set_dirty();
}
m_parent.set_as_dirty();
processed = true;
}
}
else if (evt.RightDown() && (selected_object_idx != -1) && (m_current == SlaSupports || m_current == Hollow) && gizmo_event(SLAGizmoEventType::RightDown))
{
// we need to set the following right up as processed to avoid showing the context menu if the user release the mouse over the object
pending_right_up = true;
// event was taken care of by the SlaSupports gizmo
processed = true;
}
else if (evt.Dragging() && (m_parent.get_move_volume_id() != -1) && (m_current == SlaSupports || m_current == Hollow))
// don't allow dragging objects with the Sla gizmo on
processed = true;
else if (evt.Dragging() && (m_current == SlaSupports || m_current == Hollow) && gizmo_event(SLAGizmoEventType::Dragging, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown()))
{
// the gizmo got the event and took some action, no need to do anything more here
m_parent.set_as_dirty();
processed = true;
}
#endif // ENABLE_MODIFIED_GIZMOBAR_MOUSE_EVENT_HANDLING
#if ENABLE_GIZMO_TOOLBAR_DRAGGING_FIX
else if (evt.Dragging() && is_dragging())
{
if (!m_parent.get_wxglcanvas()->HasCapture())
@ -564,6 +605,98 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt)
m_parent.set_as_dirty();
processed = true;
}
#endif // ENABLE_GIZMO_TOOLBAR_DRAGGING_FIX
if (get_gizmo_idx_from_mouse(mouse_pos) == Undefined)
{
// mouse is outside the toolbar
m_tooltip = "";
if (evt.LeftDown())
{
if ((m_current == SlaSupports || m_current == Hollow) && gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown()))
// the gizmo got the event and took some action, there is no need to do anything more
processed = true;
else if (!selection.is_empty() && grabber_contains_mouse()) {
update_data();
selection.start_dragging();
start_dragging();
if (m_current == Flatten) {
// Rotate the object so the normal points downward:
m_parent.do_flatten(get_flattening_normal(), L("Gizmo-Place on Face"));
wxGetApp().obj_manipul()->set_dirty();
}
m_parent.set_as_dirty();
processed = true;
}
}
else if (evt.RightDown() && (selected_object_idx != -1) && (m_current == SlaSupports || m_current == Hollow) && gizmo_event(SLAGizmoEventType::RightDown))
{
// we need to set the following right up as processed to avoid showing the context menu if the user release the mouse over the object
pending_right_up = true;
// event was taken care of by the SlaSupports gizmo
processed = true;
}
else if (evt.Dragging() && (m_parent.get_move_volume_id() != -1) && (m_current == SlaSupports || m_current == Hollow))
// don't allow dragging objects with the Sla gizmo on
processed = true;
else if (evt.Dragging() && (m_current == SlaSupports || m_current == Hollow) && gizmo_event(SLAGizmoEventType::Dragging, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown()))
{
// the gizmo got the event and took some action, no need to do anything more here
m_parent.set_as_dirty();
processed = true;
}
#if !ENABLE_GIZMO_TOOLBAR_DRAGGING_FIX
else if (evt.Dragging() && is_dragging())
{
if (!m_parent.get_wxglcanvas()->HasCapture())
m_parent.get_wxglcanvas()->CaptureMouse();
m_parent.set_mouse_as_dragging();
update(m_parent.mouse_ray(pos), pos);
switch (m_current)
{
case Move:
{
// Apply new temporary offset
selection.translate(get_displacement());
wxGetApp().obj_manipul()->set_dirty();
break;
}
case Scale:
{
// Apply new temporary scale factors
TransformationType transformation_type(TransformationType::Local_Absolute_Joint);
if (evt.AltDown())
transformation_type.set_independent();
selection.scale(get_scale(), transformation_type);
if (evt.ControlDown())
selection.translate(get_scale_offset(), true);
wxGetApp().obj_manipul()->set_dirty();
break;
}
case Rotate:
{
// Apply new temporary rotations
TransformationType transformation_type(TransformationType::World_Relative_Joint);
if (evt.AltDown())
transformation_type.set_independent();
selection.rotate(get_rotation(), transformation_type);
wxGetApp().obj_manipul()->set_dirty();
break;
}
default:
break;
}
m_parent.set_as_dirty();
processed = true;
}
#endif // !ENABLE_GIZMO_TOOLBAR_DRAGGING_FIX
#if !ENABLE_MODIFIED_GIZMOBAR_MOUSE_EVENT_HANDLING
else if (evt.LeftUp() && is_dragging())
{
switch (m_current) {
@ -585,6 +718,7 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt)
processed = true;
}
#endif // !ENABLE_MODIFIED_GIZMOBAR_MOUSE_EVENT_HANDLING
else if (evt.LeftUp() && (m_current == SlaSupports || m_current == Hollow) && !m_parent.is_mouse_dragging())
{
// in case SLA gizmo is selected, we just pass the LeftUp event and stop processing - neither
@ -623,8 +757,10 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt)
m_mouse_capture.right = true;
m_mouse_capture.parent = &m_parent;
}
#if !ENABLE_MODIFIED_GIZMOBAR_MOUSE_EVENT_HANDLING
else if (evt.LeftUp())
processed = true;
#endif // !ENABLE_MODIFIED_GIZMOBAR_MOUSE_EVENT_HANDLING
}
return processed;

View file

@ -204,7 +204,7 @@ public:
void render_overlay() const;
const std::string& get_tooltip() const { return m_tooltip; }
std::string get_tooltip() const;
bool on_mouse(wxMouseEvent& evt);
bool on_mouse_wheel(wxMouseEvent& evt);

View file

@ -441,15 +441,37 @@ bool ImGuiWrapper::want_any_input() const
return io.WantCaptureMouse || io.WantCaptureKeyboard || io.WantTextInput;
}
#ifdef __APPLE__
static const ImWchar ranges_keyboard_shortcuts[] =
{
0x21E7, 0x21E7, // OSX Shift Key symbol
0x2318, 0x2318, // OSX Command Key symbol
0x2325, 0x2325, // OSX Option Key symbol
0,
};
#endif // __APPLE__
void ImGuiWrapper::init_font(bool compress)
{
destroy_font();
ImGuiIO& io = ImGui::GetIO();
io.Fonts->Clear();
//FIXME replace with io.Fonts->AddFontFromMemoryTTF(buf_decompressed_data, (int)buf_decompressed_size, m_font_size, nullptr, m_glyph_ranges);
// Create ranges of characters from m_glyph_ranges, possibly adding some OS specific special characters.
ImVector<ImWchar> ranges;
ImFontAtlas::GlyphRangesBuilder builder;
builder.AddRanges(m_glyph_ranges);
#ifdef __APPLE__
if (m_font_cjk)
// Apple keyboard shortcuts are only contained in the CJK fonts.
builder.AddRanges(ranges_keyboard_shortcuts);
#endif
builder.BuildRanges(&ranges); // Build the final result (ordered ranges with all the unique characters submitted)
//FIXME replace with io.Fonts->AddFontFromMemoryTTF(buf_decompressed_data, (int)buf_decompressed_size, m_font_size, nullptr, ranges.Data);
//https://github.com/ocornut/imgui/issues/220
ImFont* font = io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/" + (m_font_cjk ? "NotoSansCJK-Regular.ttc" : "NotoSans-Regular.ttf")).c_str(), m_font_size, nullptr, m_glyph_ranges);
ImFont* font = io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/" + (m_font_cjk ? "NotoSansCJK-Regular.ttc" : "NotoSans-Regular.ttf")).c_str(), m_font_size, nullptr, ranges.Data);
if (font == nullptr) {
font = io.Fonts->AddFontDefault();
if (font == nullptr) {
@ -457,6 +479,16 @@ void ImGuiWrapper::init_font(bool compress)
}
}
#ifdef __APPLE__
ImFontConfig config;
config.MergeMode = true;
if (! m_font_cjk) {
// Apple keyboard shortcuts are only contained in the CJK fonts.
ImFont *font_cjk = io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/NotoSansCJK-Regular.ttc").c_str(), m_font_size, &config, ranges_keyboard_shortcuts);
assert(font_cjk != nullptr);
}
#endif
// Build texture atlas
unsigned char* pixels;
int width, height;

View file

@ -129,8 +129,10 @@ void RemovableDriveManager::register_window_osx()
void RemovableDriveManager::unregister_window_osx()
{
if (m_impl_osx)
if (m_impl_osx) {
[m_impl_osx release];
m_impl_osx = nullptr;
}
}
namespace search_for_drives_internal