Merge branch 'master' of https://github.com/prusa3d/PrusaSlicer into et_splitted_vbuffer

This commit is contained in:
enricoturri1966 2021-01-07 08:24:29 +01:00
commit 676540279d
111 changed files with 12989 additions and 9870 deletions

File diff suppressed because it is too large Load diff

View file

@ -19,11 +19,6 @@ msgstr "\"%1%\" je deaktivováno, protože \"%2%\" je zapnuto v kategorii \"%3%\
msgid "%"
msgstr "%"
#: src/slic3r/GUI/GLCanvas3D.cpp:969
#, possible-c-format
msgid "%.2f - %.2f mm"
msgstr "%.2f - %.2f mm"
#. TRN Remove/Delete
#: src/slic3r/GUI/Tab.cpp:3425
msgid "%1% Preset"
@ -296,10 +291,6 @@ msgstr "&(Znovu) Slicovat"
msgid "(Unknown)"
msgstr "(Neznámý)"
#: src/slic3r/GUI/Plater.cpp:1195
msgid "(weight with spool)"
msgstr "(včetně cívky)"
#: src/slic3r/GUI/MainFrame.cpp:1491
msgid ") not found."
msgstr ") nebyl nalezen."
@ -386,11 +377,6 @@ msgstr "O %s"
msgid "above"
msgstr "nad"
#: src/slic3r/GUI/GLCanvas3D.cpp:965
#, possible-c-format
msgid "above %.2f mm"
msgstr "nad %.2f mm"
#: src/libslic3r/PrintConfig.cpp:1677
msgid "Above Z"
msgstr "Nad Z"
@ -744,6 +730,10 @@ msgstr "Všechny horní povrchy"
msgid "allocation failed"
msgstr "alokace selhala"
#: src/slic3r/GUI/Preferences.cpp:161 src/slic3r/GUI/Preferences.cpp:165
msgid "Allow just a single PrusaSlicer instance"
msgstr "Povolit pouze jednu instanci PrusaSliceru"
#: src/slic3r/GUI/Plater.cpp:3915
msgid "Along X axis"
msgstr "Podél osy X"
@ -1011,6 +1001,10 @@ msgstr "Automatická rychlost (pokročilé)"
msgid "Avoid crossing perimeters"
msgstr "Vyhnout se přejíždění perimetrů"
#: src/libslic3r/PrintConfig.cpp:188
msgid "Avoid crossing perimeters - Max detour length"
msgstr "Vyhnout se přejíždění perimetrů - maximální délka objízdné cesty"
#: src/slic3r/GUI/Tab.cpp:3705
msgid "BACK ARROW"
msgstr "ŠIPKA ZPĚT"
@ -1186,7 +1180,7 @@ msgstr "Úhel vytváření mostů"
#: src/libslic3r/PrintConfig.cpp:238
msgid "Bridging angle override. If left to zero, the bridging angle will be calculated automatically. Otherwise the provided angle will be used for all bridges. Use 180° for zero angle."
msgstr "Přepsání úhlu vytváření mostů. Nastavením hodnoty na nulu se bude úhel vytváření mostů vypočítávat automaticky. Při zadání jiného úhlu, bude pro všechny mosty použitý zadaný úhel. Pro nulový úhel zadejte 180°."
msgstr "Přepsání úhlu vytváření mostů. Nastavením hodnoty na nulu se bude úhel vytváření mostů vypočítávat automaticky. Při zadání jiného úhlu bude pro všechny mosty použitý zadaný úhel. Pro nulový úhel zadejte 180°."
#: src/slic3r/GUI/PresetHints.cpp:218
msgid "Bridging volumetric"
@ -1388,6 +1382,11 @@ msgstr "Zkontrolujte aktualizace konfigurace"
msgid "Check for updates"
msgstr "Zkontrolovat akt&ualizace"
#: src/slic3r/Utils/PresetUpdater.cpp:412
#: src/slic3r/Utils/PresetUpdater.cpp:420
msgid "checking install indices"
msgstr "kontrola indexů instalace"
#: src/slic3r/GUI/BedShapeDialog.cpp:608
msgid "Choose a file to import bed texture from (PNG/SVG):"
msgstr "Vyberte soubor, ze kterého chcete importovat texturu pro tiskovou podložku (PNG/SVG):"
@ -1433,10 +1432,6 @@ msgstr "Kruh"
msgid "Circular"
msgstr "Kruhový"
#: src/slic3r/GUI/GLCanvas3D.cpp:3961
msgid "Clearance size"
msgstr "Velikost mezery"
#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067
msgid "Click right mouse button to open/close History"
msgstr "Stisk pravého tlačítka myši pro zobrazení/skrytí Historie"
@ -1511,11 +1506,6 @@ msgstr "Změna barvy (\"%1%\")"
msgid "Color change (\"%1%\") for Extruder %2%"
msgstr "Změna barvy (\"%1%\") pro Extruder %2%"
#: src/slic3r/GUI/GLCanvas3D.cpp:1001
#, possible-c-format
msgid "Color change for Extruder %d at %.2f mm"
msgstr "Změna barvy pro extruder %d ve výšce %.2f mm"
#: src/slic3r/GUI/Tab.cpp:2203
msgid "Color Change G-code"
msgstr "G-code pro změnu barvy"
@ -1729,6 +1719,22 @@ msgstr "Kopírovat do schránky"
msgid "Copy to Clipboard"
msgstr "Kopírovat do Schránky"
#: src/slic3r/GUI/AboutDialog.cpp:304
msgid "Copy Version Info"
msgstr "Zkopírovat číslo verze"
#: src/slic3r/Utils/PresetUpdater.cpp:84
msgid "Copying of file %1% to %2% failed.\nError message : %3%\nCopying was triggered by function: %4%"
msgstr "Kopírování souboru %1% do %2% se nezdařilo.\nChybová zpráva: %3%\nTato chyba nastala ve funkci: %4%"
#: src/slic3r/Utils/PresetUpdater.cpp:91
msgid "Copying of file %1% to %2% failed. Permissions fail at target file after copying.\nError message : %3%\nCopying was triggered by function: %4%"
msgstr "Kopírování souboru %1% do %2% se nezdařilo. Pro kopírování z/do cílového souboru nemáte dostatečná oprávnění.\nChybová zpráva: %3%\nTato chyba nastala ve funkci: %4%"
#: src/slic3r/Utils/PresetUpdater.cpp:70
msgid "Copying of file %1% to %2% failed. Permissions fail at target file before copying.\nError message : %3%\nThis error happend during %4% phase."
msgstr "Kopírování souboru %1% do %2% se nezdařilo. Pro kopírování z/do cílového souboru nemáte dostatečná oprávnění.\nChybová zpráva: %3%\nTato chyba nastala ve funkci: %4%"
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156
msgid "Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."
msgstr "Kopírování dočasného G-codu bylo dokončeno, ale exportovaný G-code nemohl být během kontroly kopírování otevřen. Výstupní G-cod je v %1%.tmp."
@ -1826,6 +1832,10 @@ msgstr "Vytvoří podložku kolem objektu a ignorujte nadzvednutí objektu podp
msgid "Critical angle"
msgstr "Kritický úhel"
#: src/slic3r/GUI/GUI_App.cpp:589
msgid "Critical error"
msgstr "Kritická chyba"
#: src/libslic3r/PrintConfig.cpp:2832
msgid "Cross"
msgstr "Cross"
@ -1894,6 +1904,10 @@ msgstr "Vlastní nastavení tiskárny"
msgid "Custom profile name:"
msgstr "Vlastní název profilu:"
#: src/slic3r/GUI/Plater.cpp:3397
msgid "Custom supports and seams were removed after repairing the mesh."
msgstr "Po opravě modelu byly odstraněny vlastní podpěry a švy."
#: src/slic3r/GUI/DoubleSlider.cpp:1135
msgid "Custom template (\"%1%\")"
msgstr "Vlastní šablona (\"%1%\")"
@ -1979,10 +1993,6 @@ msgstr "Výchozí profil filamentu"
msgid "Default filament profile associated with the current printer profile. On selection of the current printer profile, this filament profile will be activated."
msgstr "Výchozí materiálový profil spojený se současným profilem tiskárny. Při výběru současného profilu tiskárny se aktivuje tento materiálový profil."
#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939
msgid "Default print color"
msgstr "Výchozí barva tisku"
#: src/slic3r/GUI/Tab.cpp:1302
msgid "default print profile"
msgstr "výchozí tiskový profil"
@ -2155,7 +2165,7 @@ msgstr "Hustota"
#: src/libslic3r/PrintConfig.cpp:827
msgid "Density of internal infill, expressed in the range 0% - 100%."
msgstr "Hustota vnitřní výplně, vyjádřená v rozmezí 0% až 100%."
msgstr "Hustota vnitřní výplně vyjádřená v rozmezí 0 až 100 %."
#: src/slic3r/GUI/Tab.cpp:1588 src/slic3r/GUI/Tab.cpp:1895
#: src/slic3r/GUI/Tab.cpp:2228 src/slic3r/GUI/Tab.cpp:2304
@ -2433,9 +2443,13 @@ msgstr "Duplikovat mřížkou"
msgid "Duration"
msgstr "Doba trvání"
#: src/slic3r/GUI/PresetHints.cpp:39
msgid "During the other layers, fan"
msgstr "V průběhu ostatních vrstev, ventilátor"
#: src/slic3r/GUI/PresetHints.cpp:51
msgid "During the other layers, fan will always run at %1%%%"
msgstr "Během ostatních vrstev bude ventilátor vždy běžet na %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:58
msgid "During the other layers, fan will be turned off."
msgstr "Během ostatních vrstev bude ventilátor vypnutý."
#: src/libslic3r/PrintConfig.cpp:2833
msgid "Dynamic"
@ -2770,6 +2784,10 @@ msgstr "Chyba: %s"
msgid "ERROR: not enough resources to execute a new job."
msgstr "CHYBA: nedostatek prostředků ke spuštění nové úlohy."
#: src/slic3r/GUI/Plater.cpp:3374
msgid "ERROR: Please close all manipulators available from the left toolbar before fixing the mesh."
msgstr "CHYBA: Před opravou modelu zavřete všechny manipulátory dostupné z levého panelu nástrojů."
#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557
#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125
#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196
@ -3071,10 +3089,6 @@ msgstr "Extruder změněn na"
msgid "Extruder clearance"
msgstr "Kolizní oblast extruderu"
#: src/slic3r/GUI/Tab.cpp:1563
msgid "Extruder clearance (mm)"
msgstr "Kolizní oblast extruderu (mm)"
#: src/libslic3r/PrintConfig.cpp:558
msgid "Extruder Color"
msgstr "Barva extruderu"
@ -3155,9 +3169,9 @@ msgstr "Načtení vstupního modelu se nezdařilo."
msgid "Failed processing of the output_filename_format template."
msgstr "Zpracování šablony output_filename_format selhalo."
#: src/slic3r/GUI/PresetHints.cpp:41
msgid "Fan"
msgstr "Ventilátor"
#: src/slic3r/GUI/GUI_App.cpp:1648
msgid "Failed to activate configuration snapshot."
msgstr "Aktivace konfiguračního snapshotu se nezdařila."
#: src/slic3r/GUI/Tab.cpp:1802
msgid "Fan settings"
@ -3171,6 +3185,22 @@ msgstr "Rychlost ventilátoru"
msgid "Fan Speed (%)"
msgstr "Rychlost ventilátoru (%)"
#: src/slic3r/GUI/PresetHints.cpp:49
msgid "Fan speed will be ramped from zero at layer %1% to %2%%% at layer %3%."
msgstr "Rychlost ventilátoru se zvýší z nuly ve vrstvě %1% na %2%%% ve vrstvě %3%."
#: src/libslic3r/PrintConfig.cpp:1001
msgid "Fan speed will be ramped up linearly from zero at layer \"disable_fan_first_layers\" to maximum at layer \"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower than \"disable_fan_first_layers\", in which case the fan will be running at maximum allowed speed at layer \"disable_fan_first_layers\" + 1."
msgstr "Otáčky ventilátoru se lineárně zvýší z nuly ve vrstvě \"disable_fan_first_layers\" na maximum ve vrstvě \"full_fan_speed_layer\". Hodnota \"full_fan_speed_layer\" bude ignorována, pokud je nižší než \"disable_fan_first_layers\", v takovém případě se bude ventilátor točit na maximální povolenou hodnotu ve vrstvě \"disable_fan_first_layers\" + 1."
#: src/slic3r/GUI/PresetHints.cpp:51
msgid "Fan will always run at %1%%%"
msgstr "Ventilátor vždy poběží na %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:58
msgid "Fan will be turned off."
msgstr "Ventilátor bude vypnutý."
#: src/libslic3r/PrintConfig.cpp:2548
msgid "Fast"
msgstr "Rychlý"
@ -3416,6 +3446,10 @@ msgstr "Rychlost první vrstvy"
msgid "First layer volumetric"
msgstr "Volumetrická hodnota první vrstvy"
#: src/slic3r/GUI/Plater.cpp:3380
msgid "Fix through NetFabb"
msgstr "Opravit pomocí NetFabb"
#: src/slic3r/GUI/GUI_ObjectList.cpp:1776
msgid "Fix through the Netfabb"
msgstr "Opravit pomocí služby Netfabb"
@ -3521,6 +3555,10 @@ msgstr "Zepředu"
msgid "Front View"
msgstr "Pohled zepředu"
#: src/libslic3r/PrintConfig.cpp:1000
msgid "Full fan speed at layer"
msgstr "Maximální otáčky ventilátoru ve vrstvě"
#: src/slic3r/GUI/Tab.cpp:1331
msgid "full profile name"
msgstr "celé jméno profilu"
@ -3549,6 +3587,10 @@ msgstr "Druh G-code"
msgid "G-code preview"
msgstr "Náhled G-codu"
#: src/libslic3r/PrintConfig.cpp:66
msgid "G-code thumbnails"
msgstr "Náhledy G-codu"
#: src/libslic3r/PrintConfig.cpp:3552
msgid "G-code viewer"
msgstr "Prohlížeč G-codu"
@ -3574,7 +3616,7 @@ msgstr "Obecné"
#: src/libslic3r/PrintConfig.cpp:1415
msgid "Generate no less than the number of skirt loops required to consume the specified amount of filament on the bottom layer. For multi-extruder machines, this minimum applies to each extruder."
msgstr "Nevygenerovat méně, než počet obrysových smyček, potřebných ke spotřebování specifikovaného množství filamentu na spodní vrstvu. U strojů s více extrudery platí toto minimum pro každý extruder."
msgstr "Nevygenerovat méně než je počet obrysových smyček potřebných ke spotřebování specifikovaného množství filamentu na spodní vrstvu. U strojů s více extrudery platí toto minimum pro každý extruder."
#: src/libslic3r/PrintConfig.cpp:2007
msgid "Generate support material"
@ -3644,6 +3686,10 @@ msgstr "Generování vrcholového bufferu"
msgid "Generic"
msgstr "Obecný"
#: src/slic3r/Utils/PresetUpdater.cpp:600
msgid "getting config updates"
msgstr "získávání aktualizací konfigurace"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
msgid "Gizmo cut"
msgstr "Gizmo řez"
@ -3880,6 +3926,10 @@ msgstr "Plástev"
msgid "Horizontal shells"
msgstr "Vodorovné stěny"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:253
msgid "Horizontal Slider"
msgstr "Horizontální posuvník"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:209
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213
#: src/slic3r/GUI/KBShortcutsDialog.cpp:238
@ -3892,33 +3942,9 @@ msgstr "Horizontální posuvník - Pohyb aktivním ukazatelem vlevo"
msgid "Horizontal slider - Move active thumb Right"
msgstr "Horizontální posuvník - Pohyb aktivním ukazatelem vpravo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:238
msgid "Horizontal slider - Move current thumb Left"
msgstr "Horizontální posuvník - Pohyb posuvníkem vlevo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:239
msgid "Horizontal slider - Move current thumb Right"
msgstr "Horizontální posuvník - Pohyb posuvníkem vpravo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:236
msgid "Horizontal slider - Set left thumb as active"
msgstr "Horizontální posuvník -Nastavit levý ukazatel jako aktivní"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:236
msgid "Horizontal slider - Set left thumb to current thumb"
msgstr "Horizontální posuvník -Pohyb levým posuvníkem k aktivnímu posuvníku"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Horizontal slider - Set right thumb as active"
msgstr "Horizontální posuvník -Nastavit pravý ukazatel jako aktivní"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Horizontal slider - Set right thumb to current thumb"
msgstr "Horizontální posuvník -Pohyb pravým posuvníkem k aktivnímu posuvníku"
#: src/libslic3r/PrintConfig.cpp:279
msgid "Horizontal width of the brim that will be printed around each object on the first layer."
msgstr "Šírka límce který bude vytištěn v první vrstvě okolo každého objektu."
msgstr "Šířka límce, který bude vytištěn v první vrstvě okolo každého objektu."
#: src/slic3r/GUI/PrintHostDialogs.cpp:150
msgid "Host"
@ -4055,7 +4081,7 @@ msgstr "Pokud je povoleno, bude v pravém horním rohu 3D scény zobrazeno tlač
msgid "If enabled, the command line arguments are sent to an existing instance of GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the \"single_instance\" configuration value from application preferences."
msgstr "Pokud je povoleno, argumenty příkazového řádku se odešlou do existující instance grafického uživatelského rozhraní PrusaSlicer,u nebo se aktivuje existující okno PrusaSlicer. Přepíše hodnotu konfigurace „single_instance“ z nastavení aplikace."
#: src/slic3r/GUI/Preferences.cpp:278
#: src/slic3r/GUI/Preferences.cpp:294
msgid "If enabled, the descriptions of configuration parameters in settings tabs wouldn't work as hyperlinks. If disabled, the descriptions of configuration parameters in settings tabs will work as hyperlinks."
msgstr "Pokud je aškrtnuto, popisky konfiguračních parametrů na kartách nastavení nebudou fungovat jako hypertextové odkazy. Pokud není zaškrtnuto, popisy konfiguračních parametrů budou fungovat jako hypertextové odkazy."
@ -4256,6 +4282,10 @@ msgstr "in"
msgid "In this mode you can select only other %s Items%s"
msgstr "V tomto režimu můžete vybrat pouze jinou/jiný %s %s"
#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:423
msgid "Inches"
msgstr "Palce"
#: src/slic3r/GUI/UpdateDialogs.cpp:230
msgid "Incompatible bundles:"
msgstr "Nekompatibilní balíky:"
@ -4335,10 +4365,6 @@ msgstr "Info"
msgid "Information"
msgstr "Informace"
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547
msgid "Infornation"
msgstr "Informace"
#: src/libslic3r/PrintConfig.cpp:1101
msgid "Inherits profile"
msgstr "Zdědí profil"
@ -4355,6 +4381,11 @@ msgstr "Doba počátečního osvitu"
msgid "Initial layer height"
msgstr "Výška první vrstvy"
#: src/slic3r/GUI/Field.cpp:269
#, possible-c-format
msgid "Input value is out of range\nAre you sure that %s is a correct value and that you want to continue?"
msgstr "Vstupní hodnota je mimo povolený rozsah\nJste si jisti, že %s je správná hodnota a že chcete pokračovat?"
#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370
msgid "Input value is out of range"
msgstr "Zadaná hodnota je mimo rozsah"
@ -4363,6 +4394,10 @@ msgstr "Zadaná hodnota je mimo rozsah"
msgid "Inspect / activate configuration snapshots"
msgstr "Zkontrolovat / aktivovat zálohy konfigurace"
#: src/slic3r/Utils/PresetUpdater.cpp:120
msgid "install"
msgstr "instralovat"
#: src/slic3r/GUI/ObjectDataViewModel.cpp:62
#: src/slic3r/GUI/ObjectDataViewModel.cpp:218
#, possible-c-format
@ -4432,6 +4467,10 @@ msgstr "Neplatný průnik podpěry do modelu"
msgid "invalid header or archive is corrupted"
msgstr "neplatná hlavička nebo je archiv poškozen"
#: src/slic3r/GUI/Field.cpp:375
msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\""
msgstr "Neplatný vstupní formát. Očekává se vektor rozměrů v následujícím formátu: \"%1%\""
#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274
#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
msgid "Invalid numeric input."
@ -4521,21 +4560,6 @@ msgstr "Přechod do výšky %s\nnebo Nastavení režimu pravítka"
msgid "Jump to height %s\nSet ruler mode\nor Set extruder sequence for the entire print"
msgstr "Přechod do výšky %s\nNastavení režimu pravítka\nnebo Nastavení sekvence extruderů pro celý tisk"
#: src/slic3r/GUI/DoubleSlider.cpp:1075
#, possible-c-format
msgid "Jump to height %s or Set extruder sequence for the entire print"
msgstr "Přechod do výšky %s nebo Nastavení sekvence extruderů pro celý tisk"
#: src/slic3r/GUI/DoubleSlider.cpp:1222
#, possible-c-format
msgid "Jump to height %s or Set ruler mode"
msgstr "Přechod do výšky %s nebo Nastavení režimu pravítka"
#: src/slic3r/GUI/DoubleSlider.cpp:1220
#, possible-c-format
msgid "Jump to height %s Set ruler mode\n or Set extruder sequence for the entire print"
msgstr "Přechod do výšky %s Nastavení režimu pravítka nebo Nastavení sekvence extruderů pro celý tisk"
#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852
msgid "Jump to move"
msgstr "Přechod na pohyb v rámci vrstvy"
@ -4646,10 +4670,6 @@ msgstr "Vrstvy a perimetry"
msgid "Layers and Perimeters"
msgstr "Vrstvy a perimetry"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:225
msgid "Layers Slider"
msgstr "Posuvníky"
#: src/slic3r/GUI/OptionsGroup.cpp:293
msgctxt "Layers"
msgid "Bottom"
@ -4695,10 +4715,6 @@ msgstr "Levé tlačítko myši:"
msgid "Left View"
msgstr "Pohled zleva"
#: src/slic3r/GUI/GUI_Preview.cpp:339
msgid "Legend"
msgstr "Legenda"
#: src/slic3r/GUI/GUI_Preview.cpp:1480
msgid "Legend/Estimated printing time"
msgstr "Legenda / Odhadovaný čas tisku"
@ -5355,6 +5371,10 @@ msgstr "mm (nula pro vypnutí)"
msgid "mm or %"
msgstr "mm nebo %"
#: src/libslic3r/PrintConfig.cpp:193
msgid "mm or % (zero to disable)"
msgstr "mm nebo % (nula pro deaktivaci)"
#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645
#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662
#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697
@ -5467,7 +5487,7 @@ msgstr "korun/kg"
#: src/libslic3r/PrintConfig.cpp:461
msgid "Monotonic"
msgstr "Monotóní"
msgstr "Monotónní"
#: src/slic3r/GUI/NotificationManager.cpp:305
#: src/slic3r/GUI/NotificationManager.cpp:315
@ -5494,6 +5514,22 @@ msgstr "Posunout ukazatel aktivního posuvníku vlevo"
msgid "Move active slider thumb Right"
msgstr "Posunout ukazatel aktivního posuvníku vpravo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:220
msgid "Move active thumb Down"
msgstr "Posunout aktivní ukazatel dolů"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:241
msgid "Move active thumb Left"
msgstr "Posunout aktivní ukazatel vlevo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:242
msgid "Move active thumb Right"
msgstr "Posunout aktivní ukazatel vpravo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
msgid "Move active thumb Up"
msgstr "Posunout aktivní ukazatel nahoru"
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
msgid "Move clipping plane"
msgstr "Posunout řezovou rovinu"
@ -5502,14 +5538,6 @@ msgstr "Posunout řezovou rovinu"
msgid "Move current slider thumb Down"
msgstr "Posunout aktivní posuvník dolů"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
msgid "Move current slider thumb Left"
msgstr "Posunout aktivní posuvník vlevo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
msgid "Move current slider thumb Right"
msgstr "Posunout aktivní posuvník vpravo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
msgid "Move current slider thumb Up"
msgstr "Posunout aktivní posuvník nahoru"
@ -5518,16 +5546,6 @@ msgstr "Posunout aktivní posuvník nahoru"
msgid "Move drainage hole"
msgstr "Posun odtokového otvoru"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:209
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213
msgid "Move horizontal slider current thumb Left"
msgstr "Posunout aktivní horizontální posuvník vlevo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:210
#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
msgid "Move horizontal slider current thumb Right"
msgstr "Posunout aktivní horizontální posuvník vpravo"
#: src/slic3r/GUI/GLCanvas3D.cpp:3810
msgid "Move Object"
msgstr "Posunutí Objektu"
@ -5556,16 +5574,6 @@ msgstr "Posun výběru o 10 mm v kladném směru osy Y"
msgid "Move support point"
msgstr "Posun podpěrného bodu"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
#: src/slic3r/GUI/KBShortcutsDialog.cpp:212
msgid "Move vertical slider current thumb Down"
msgstr "Posunout vertikální posuvník dolů"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
#: src/slic3r/GUI/KBShortcutsDialog.cpp:211
msgid "Move vertical slider current thumb Up"
msgstr "Posunout vertikální posuvník nahoru"
#: src/slic3r/GUI/GCodeViewer.cpp:2492
msgid "Movement"
msgstr "Přejezd"
@ -5955,6 +5963,14 @@ msgstr "Zobrazení po jedné vrstvě"
msgid "One or more object were assigned an extruder that the printer does not have."
msgstr "Jeden nebo více objektů bylo přiřazeno extruderu, který tiskárna nemá."
#: src/slic3r/GUI/GUI_App.cpp:1784
msgid "Ongoing uploads"
msgstr "Probíhá nahrávání"
#: src/libslic3r/Print.cpp:1269
msgid "Only a single object may be printed at a time in Spiral Vase mode. Either remove all but the last object, or enable sequential mode by \"complete_objects\"."
msgstr "V režimu spirálové vázy lze současně tisknout pouze jeden objekt. Buď odeberte všechny objekty kromě posledního, nebo povolte sekvenční režim pomocí \"complete_objects\"."
#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840
msgid "Only create support if it lies on a build plate. Don't create support on a print."
msgstr "Podpěry vytvářet pouze v případě, že leží na tiskové podložce. Nevytváří podpěry na výtisky."
@ -6307,11 +6323,6 @@ msgstr "Pozastavení tisku (\"%1%\")"
msgid "Pause Print G-code"
msgstr "G-code pro pozastavení tisku"
#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949
#: src/slic3r/GUI/GLCanvas3D.cpp:988
msgid "Pause print or custom G-code"
msgstr "Pozastavit tisk nebo vložit vlastní G-code"
#: src/libslic3r/PrintConfig.cpp:1147
msgid "Percent of a flow rate relative to object's normal layer height."
msgstr "Procento průtoku vzhledem k normální výšce vrstvy objektu."
@ -6360,9 +6371,9 @@ msgstr "Fyzické tiskárny"
msgid "Pick another vendor supported by %s"
msgstr "Vyberte si jiného výrobce, který je podporováný programem %s"
#: src/libslic3r/PrintConfig.cpp:66
msgid "Picture sizes to be stored into a .gcode and .sl1 files"
msgstr "Velikosti obrázků, které mají být uloženy do souborů .gcode a .sl1"
#: src/libslic3r/PrintConfig.cpp:67
msgid "Picture sizes to be stored into a .gcode and .sl1 files, in the following format: \"XxY, XxY, ...\""
msgstr "Velikosti obrázků, které mají být uloženy do souborů .gcode a .sl1, v následujícím formátu: „XxY, XxY, ...“"
#: src/libslic3r/PrintConfig.cpp:2822
msgid "Pillar connection mode"
@ -6485,11 +6496,7 @@ msgid "Preset \"%1%\" is not compatible with the new printer profile and it has
msgstr "Přednastavení \"%1%\" není kompatibilní s novým profilem tiskárny a má následující neuložené změny:"
#: src/slic3r/GUI/SavePresetDialog.cpp:136
msgid "Preset with name \"%1%\" already exists and is imcopatible with selected printer."
msgstr "Přednastavení s názvem \"%1%\" již existuje a není kompatibilní s vybranou tiskárnou."
#: src/slic3r/GUI/SavePresetDialog.cpp:136
msgid "Preset with name \"%1%\" already exists and is incopatible with selected printer."
msgid "Preset with name \"%1%\" already exists and is incompatible with selected printer."
msgstr "Přednastavení s názvem \"%1%\" již existuje a není kompatibilní s vybranou tiskárnou."
#: src/slic3r/GUI/SavePresetDialog.cpp:148
@ -6501,6 +6508,10 @@ msgctxt "PresetName"
msgid "Copy"
msgstr "Kopie"
#: src/slic3r/GUI/GLCanvas3D.cpp:3990
msgid "Press %1%left mouse button to enter the exact value"
msgstr "Pro zadání přesné hodnoty stiskni %1%levé tlačítko myši"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
msgid "Press to activate deselection rectangle"
msgstr "Stiskem aktivujete obdélníkové odstranění výběru"
@ -6719,6 +6730,10 @@ msgstr "PrusaSlicer detekoval úložiště SSL certifikátu v: %1%"
msgid "PrusaSlicer GUI initialization failed"
msgstr "Inicializace grafického uživatelského rozhraní PrusaSliceru se nezdařila"
#: src/slic3r/GUI/GUI_App.cpp:586
msgid "PrusaSlicer has encountered a localization error. Please report to PrusaSlicer team, what language was active and in which scenario this issue happened. Thank you.\n\nThe application will now terminate."
msgstr "V aplikaci PrusaSlicer došlo k chybě v lokalizaci. Nahlaste PrusaSlicer týmu, jaký jazyk byl aktivní a ve kterém scénáři k tomuto problému došlo. Děkujeme.\n\nAplikace bude nyní ukončena."
#: src/slic3r/GUI/AboutDialog.cpp:285
msgid "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap community."
msgstr "PrusaSlicer je založen na Slic3r od Alessandra Ranellucciho a RepRap komunity."
@ -7738,10 +7753,6 @@ msgstr "Sekv."
msgid "Sequential printing"
msgstr "Sekvenční tisk"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
msgid "Sequential Slider"
msgstr "Sekvenční posuvník"
#: src/slic3r/GUI/Preferences.cpp:230
msgid "Sequential slider applied only to top layer"
msgstr "Použití sekvenčního posuvníku pouze na horní vrstvu"
@ -7787,6 +7798,14 @@ msgstr "Nastavení sekvence extruderů pro celý tisk"
msgid "Set extruder(tool) sequence"
msgstr "Nastavte pořadí extruderu(nástroje)"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:243
msgid "Set left thumb as active"
msgstr "Nastavit levý ukazatel jako aktivní"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
msgid "Set lower thumb as active"
msgstr "Nastavit spodní ukazatel jako aktivní"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
msgid "Set lower thumb to current slider thumb"
msgstr "Aktivovat spodní ukazatel aktivního posuvníku"
@ -7820,6 +7839,10 @@ msgstr "Zvolen příznak Tisknout objekt"
msgid "Set Printable Instance"
msgstr "Zvolen příznak Tisknout Instanci"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:244
msgid "Set right thumb as active"
msgstr "Nastavit pravý ukazatel jako aktivní"
#: src/slic3r/GUI/DoubleSlider.cpp:1836
msgid "Set ruler mode"
msgstr "Nastavení režimu pravítka"
@ -7838,7 +7861,7 @@ msgstr "Nastavte tvar a rozměry vaší tiskové podložky."
#: src/libslic3r/PrintConfig.cpp:592
msgid "Set this to a non-zero value to allow a manual extrusion width. If left to zero, Slic3r derives extrusion widths from the nozzle diameter (see the tooltips for perimeter extrusion width, infill extrusion width etc). If expressed as percentage (for example: 230%), it will be computed over layer height."
msgstr "Nastavením kladné hodnoty povolíte manuální šířku extruze. Pokud je hodnota ponechána na nule, Slic3r odvozuje šířku extruze z průměru trysky (viz nápovědy pro šířku extruze perimetru, šířku extruze výplně apod.). Pokud je hodnota vyjádřena procenty (například: 230%), vypočítá se z výšky vrstvy."
msgstr "Nastavením kladné hodnoty povolíte manuální nastavení šířky extruze. Pokud je hodnota ponechána na nule, Slic3r odvozuje šířku extruze z průměru trysky (viz nápovědy pro šířku extruze perimetru, šířku extruze výplně apod.). Pokud je hodnota vyjádřena procenty (například: 230%), vypočítá se z výšky vrstvy."
#: src/libslic3r/PrintConfig.cpp:484
msgid "Set this to a non-zero value to set a manual extrusion width for external perimeters. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 200%), it will be computed over layer height."
@ -7846,7 +7869,7 @@ msgstr "Nastavením na kladnou hodnotu, definuje šířku manuální extruze pro
#: src/libslic3r/PrintConfig.cpp:920
msgid "Set this to a non-zero value to set a manual extrusion width for first layer. You can use this to force fatter extrudates for better adhesion. If expressed as percentage (for example 120%) it will be computed over first layer height. If set to zero, it will use the default extrusion width."
msgstr "Nastavením kladné hodnoty zvolíte manuální šířku vytlačování pro první vrstvu. Toto můžete použít k vytlačování tlustší extruze pro lepší přilnavost. Pokud je vyjádřeno jako procenty (například 120%), bude vypočteno z výšky první vrstvy. Pokud je nastavena na nulu, použije se výchozí šířka vytlačování."
msgstr "Nastavením kladné hodnoty povolíte manuální nastavení šířky vytlačování pro první vrstvu. Toto můžete použít k vytlačování tlustší extruze pro lepší přilnavost. Pokud je vyjádřeno jako procenty (například 120%), bude vypočteno z výšky první vrstvy. Pokud je nastavena na nulu, použije se výchozí šířka vytlačování."
#: src/libslic3r/PrintConfig.cpp:1873
msgid "Set this to a non-zero value to set a manual extrusion width for infill for solid surfaces. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
@ -7858,7 +7881,7 @@ msgstr "Zadejte kladnou hodnotu, chcete-li nastavit manuálně šířku extruze
#: src/libslic3r/PrintConfig.cpp:1055
msgid "Set this to a non-zero value to set a manual extrusion width for infill. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. You may want to use fatter extrudates to speed up the infill and make your parts stronger. If expressed as percentage (for example 90%) it will be computed over layer height."
msgstr "Nastavením kladné hodnoty upravíte manuálně šířku extruze pro výplň. Pokud je ponechána nula, použije se standardní šířka extruze, pokud je nastavena, jinak se použije průměr trysky 1,125 x. Je možné, že budete chtít použít tlustší extruze, pro zrychlení výplně a zpevnění vašich výtisků. Pokud je vyjádřeno jako procenty (například 90%), bude vypočteno z výšky vrstvy."
msgstr "Nastavením kladné hodnoty povolíte manuální nastavení šířky extruze pro výplň. Pokud je ponechána nula, použije se standardní šířka extruze, pokud je nastavena, jinak se použije průměr trysky 1,125 x. Je možné, že budete chtít použít tlustší extruze, pro zrychlení výplně a zpevnění vašich výtisků. Pokud je vyjádřeno jako procenty (například 90%), bude vypočteno z výšky vrstvy."
#: src/libslic3r/PrintConfig.cpp:1527
msgid "Set this to a non-zero value to set a manual extrusion width for perimeters. You may want to use thinner extrudates to get more accurate surfaces. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 200%) it will be computed over layer height."
@ -7888,6 +7911,10 @@ msgstr "Odebrán příznak Tisknout objekt"
msgid "Set Unprintable Instance"
msgstr "Odebrán příznak Tisknout Instanci"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:221
msgid "Set upper thumb as active"
msgstr "Nastavit horní ukazatel jako aktivní"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
msgid "Set upper thumb to current slider thumb"
msgstr "Aktivovat horní ukazatel aktivního posuvníku"
@ -8226,10 +8253,6 @@ msgstr "Slic3r může nahrát soubory G-code do tiskového serveru. Toto pole mu
msgid "Slic3r can upload G-code files to a printer host. This field should contain the API Key or the password required for authentication."
msgstr "Slic3r může nahrát soubory do tiskového serveru. Toto pole by mělo obsahovat klíč API požadovaný pro ověření."
#: src/libslic3r/PrintConfig.cpp:100
msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance."
msgstr "Slic3r může nahrát soubory G-code do tiskového serveru. Toto pole by mělo obsahovat název serveru (hostname), IP adresu nebo URL tiskového serveru."
#: src/libslic3r/PrintConfig.cpp:100
msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance. Print host behind HAProxy with basic auth enabled can be accessed by putting the user name and password into the URL in the following format: https://username:password@your-octopi-address/"
msgstr "Slic3r může nahrávat G-cody do tiskového serveru. Toto pole by mělo obsahovat název hostitele, IP adresu nebo URL tiskového serveru. K tiskovému serveru za HAProxy se zapnutým ověřením basic auth lze přistupovat zadáním uživatelského jména a hesla do adresy URL v následujícím formátu: https://username: password@your-octopi-address/"
@ -8632,6 +8655,10 @@ msgstr "Soubor STL exportován do %s"
msgid "Stop at height"
msgstr "Skončit ve výšce"
#: src/slic3r/GUI/GUI_App.cpp:1781
msgid "Stop them and continue anyway?"
msgstr "Chcete i přesto pokračovat a zastavit nahrávání?"
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295
msgid "Success!"
msgstr "Úspěch!"
@ -8768,10 +8795,6 @@ msgstr "Podporuje tichý režim"
msgid "Supports work better, if the following feature is enabled:\n- Detect bridging perimeters"
msgstr "Podpěry fungují lépe, pokud je povolena funkce:\n- Detekovat perimetry přemostění"
#: src/slic3r/GUI/DoubleSlider.cpp:1824
msgid "Supprese show the ruler"
msgstr "Potlačit zobrazení pravítka"
#: src/slic3r/GUI/Preferences.cpp:104
msgid "Suppress \" - default - \" presets"
msgstr "Potlačit “ - výchozí - “ přednastavení"
@ -8986,6 +9009,18 @@ msgstr "Následující modely FFF tiskáren nemají vybraný filament:"
msgid "The following presets were modified:"
msgstr "Byla upravena následující přednastavení:"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:253
msgid "The following shortcuts are applicable in G-code preview when the horizontal slider is active"
msgstr "Následující zkratky jsou použitelné v náhledu G-codu, když je aktivní vodorovný posuvník"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "The following shortcuts are applicable in G-code preview when the vertical slider is active"
msgstr "Následující zkratky jsou použitelné v náhledu G-codu, když je aktivní svislý posuvník"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
msgid "The following shortcuts are applicable when the specified gizmo is active"
msgstr "Následující klávesové zkratky jsou funkční při patřičném aktivním gizmu"
#: src/slic3r/GUI/ConfigWizard.cpp:2275
msgid "The following SLA printer models have no materials selected:"
msgstr "Následující modely SLA tiskáren nemají vybrané žádné materiály:"
@ -9022,6 +9057,10 @@ msgstr "Maximální vzdálenost dvou podpůrných pilířů pro vzájemné prov
msgid "The max length of a bridge"
msgstr "Maximální délka přemostění"
#: src/libslic3r/PrintConfig.cpp:190
msgid "The maximum detour length for avoid crossing perimeters. If the detour is longer than this value, avoid crossing perimeters is not applied for this travel path. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path."
msgstr "Maximální délka objízdné trasy s cílem, aby nedošlo k přejetí přes perimetry. Pokud je objízdná trasa delší než tato hodnota, nebude dodrženo omezení přejíždění přes perimetry. Délka objízdné trasy může být zadána buď jako absolutní hodnota, nebo jako procento (například 50%) přímé cesty."
#: src/libslic3r/PrintConfig.cpp:2878
msgid "The minimum distance of the pillar base from the model in mm. Makes sense in zero elevation mode where a gap according to this parameter is inserted between the model and the pad."
msgstr "Minimální vzdálenost základny podpěr od modelu v mm. Dává smysl v režimu nulového nadzvednutí nad podložku, kde je mezera podle tohoto parametru vložena mezi model a podložku."
@ -9030,6 +9069,14 @@ msgstr "Minimální vzdálenost základny podpěr od modelu v mm. Dává smysl v
msgid "The name cannot be empty."
msgstr "Název nesmí být prázdný."
#: src/slic3r/GUI/SavePresetDialog.cpp:152
msgid "The name cannot end with space character."
msgstr "Název nesmí končit mezerou."
#: src/slic3r/GUI/SavePresetDialog.cpp:147
msgid "The name cannot start with space character."
msgstr "Název nesmí začínat mezerou."
#: src/libslic3r/PrintConfig.cpp:219
msgid "The number of bottom solid layers is increased above bottom_solid_layers if necessary to satisfy minimum thickness of bottom shell."
msgstr "Počet spodních plných vrstev je navýšen nad zadaný počet bottom_solid_layers, je-li to nutné k dosažení minimální tloušťky spodní skořepiny."
@ -9131,10 +9178,6 @@ msgstr "Rychlost retrakce (toto nastavení platí pouze pro motor extruderu)."
msgid "The Spiral Vase mode requires:\n- one perimeter\n- no top solid layers\n- 0% fill density\n- no support material\n- Ensure vertical shell thickness enabled\n- Detect thin walls disabled"
msgstr "Režim Spiral Vase vyžaduje:\n- jeden perimetr\n- žádné horní plné vrstvy\n- 0% hustota výplně\n- bez podpěrného materiálu\n- aktivní volbu „Zajistit tloušťku svislých stěn“\n- neaktivní volbu „Detekce tenkých stěn“"
#: src/libslic3r/Print.cpp:1263
msgid "The Spiral Vase option can only be used when printing a single object."
msgstr "Možnost \"Spirálová váza\" lze použít pouze při tisku jednoho objektu."
#: src/libslic3r/Print.cpp:1270
msgid "The Spiral Vase option can only be used when printing single material objects."
msgstr "Možnost \"Spirálová váza\" lze použít pouze při tisku jedním materiálem."
@ -9162,6 +9205,10 @@ msgstr "Zadané nastavení způsobí prázdný tisk."
msgid "The thickness of the pad and its optional cavity walls."
msgstr "Tloušťka podložky a její volitelné duté stěny."
#: src/slic3r/GUI/GUI_App.cpp:1781
msgid "The uploads are still ongoing"
msgstr "Nahrávání stále probíhá"
#: src/libslic3r/PrintConfig.cpp:2053
msgid "The vertical distance between object and support material interface. Setting this to 0 will also prevent Slic3r from using bridge flow and speed for the first object layer."
msgstr "Vertikální vzdálenost mezi objektem a podpěrami. Nastavením tohoto parametru na hodnotu 0 se také zabrání tomu, aby Slic3r použil parametry průtoku a rychlosti pro mosty při tisku první vrstvy objektu."
@ -9297,11 +9344,11 @@ msgstr "Tento extruder bude nastaven pro vybrané položky"
#: src/libslic3r/PrintConfig.cpp:258
msgid "This factor affects the amount of plastic for bridging. You can decrease it slightly to pull the extrudates and prevent sagging, although default settings are usually good and you should experiment with cooling (use a fan) before tweaking this."
msgstr "Tato hodnota určuje množství vytlačeného plastu při vytváření mostů. Mírným snížením této hodnoty můžete předejít pronášení i když, přednastavené hodnoty jsou většinou dobré a je lepší experimentovat s chlazením (využitím ventilátoru), než s touto hodnotou."
msgstr "Tato hodnota určuje množství vytlačeného plastu při vytváření mostů. Mírným snížením této hodnoty můžete předejít pronášení, i když přednastavené hodnoty jsou většinou dobré a je lepší experimentovat s chlazením (využitím ventilátoru) než s touto hodnotou."
#: src/libslic3r/PrintConfig.cpp:582
msgid "This factor changes the amount of flow proportionally. You may need to tweak this setting to get nice surface finish and correct single wall widths. Usual values are between 0.9 and 1.1. If you think you need to change this more, check filament diameter and your firmware E steps."
msgstr "Tento faktor mění poměrné množství průtoku. Možná bude třeba toto nastavení vyladit, pro dosažení hezkého povrchu a správné šířky jednotlivých stěn. Obvyklé hodnoty jsou mezi 0,9 a 1,1. Pokud si myslíte, že hodnotu potřebujete změnit více, zkontrolujte průměr filamentu a E kroky ve firmwaru."
msgstr "Tento faktor mění poměrné množství průtoku. Možná bude třeba toto nastavení vyladit pro dosažení hezkého povrchu a správné šířky jednotlivých stěn. Obvyklé hodnoty jsou mezi 0,9 a 1,1. Pokud si myslíte, že hodnotu potřebujete změnit více, zkontrolujte průměr filamentu a E kroky ve firmwaru."
#: src/libslic3r/PrintConfig.cpp:248
msgid "This fan speed is enforced during all bridges and overhangs."
@ -9315,9 +9362,9 @@ msgstr "Tato funkce umožňuje kombinovat výplň a urychlit tisk pomocí extruz
msgid "This feature allows to force a solid layer every given number of layers. Zero to disable. You can set this to any value (for example 9999); Slic3r will automatically choose the maximum possible number of layers to combine according to nozzle diameter and layer height."
msgstr "Tato funkce umožňuje vynucení plné vrstvy za každý daný počet vrstev. Pro vypnutí nastavte nulu. Můžete nastavit libovolnou hodnotu (například 9999); Slic3r automaticky zvolí maximální počet vrstev, které se budou kombinovat podle průměru trysky a výšky vrstvy."
#: src/libslic3r/PrintConfig.cpp:1910
msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object."
msgstr "Tato funkce zvýší postupně Z při tisku jednovrstvého objektu, aby se odstranil jakýkoli viditelný šev. Tato volba vyžaduje jediný obvod, žádnou výplň, žádné vrchní plné vrstvy a žádný podpůrný materiál. Můžete stále nastavit libovolný počet spodních plných vrstev, stejně jako obrysové smyčky / límec. Při tisku více než jednoho objektu nebude toto nastavení fungovat."
#: src/libslic3r/PrintConfig.cpp:1995
msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than one single object."
msgstr "Tato funkce zvýší postupně Z při tisku jednovrstvého objektu, aby se odstranil jakýkoli viditelný šev. Tato volba vyžaduje jediný obvod, žádnou výplň, žádné vrchní plné vrstvy a žádný podpůrný materiál. Můžete stále nastavit libovolný počet spodních plných vrstev, stejně jako obrysové smyčky / límec. Při tisku více než jednoho samostatného objektu nebude toto nastavení fungovat."
#: src/slic3r/GUI/Plater.cpp:2329
msgid "This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?"
@ -9396,10 +9443,6 @@ msgstr "Toto je zrychlení, které vaše tiskárna použije pro první vrstvu. N
msgid "This is the acceleration your printer will use for infill. Set zero to disable acceleration control for infill."
msgstr "Toto je zrychlení, které vaše tiskárna použije pro výplň. Nastavte nulu, chcete-li vypnout řízení zrychlení pro výplň."
#: src/libslic3r/PrintConfig.cpp:1508
msgid "This is the acceleration your printer will use for perimeters. A high value like 9000 usually gives good results if your hardware is up to the job. Set zero to disable acceleration control for perimeters."
msgstr "Jedná se o akceleraci, kterou vaše tiskárna použije pro perimetry. Vysoká hodnota, jako je 9000, obvykle dává dobré výsledky, pokud je váš hardware v pořádku. Nastavte nulu pro vypnutí řízení zrychlení pro perimetry."
#: src/libslic3r/PrintConfig.cpp:1582
msgid "This is the acceleration your printer will use for perimeters. Set zero to disable acceleration control for perimeters."
msgstr "Toto je zrychlení, které vaše tiskárna použije pro perimetry. Nastavením na nulu vypnete ovládání akcelerace pro perimetry."
@ -9576,10 +9619,6 @@ msgstr "Chcete-li použít vlastní soubor CA, importujte soubor CA do Certifica
msgid "Toggle %c axis mirroring"
msgstr "Přepnout zrcadlení podle osy %c"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
msgid "Toggle vertical slider one layer mode ON/OFF"
msgstr "Zapnou/vypnout režim jedné vrstvy vertikálního posuvníku"
#: src/libslic3r/miniz_extension.cpp:93
msgid "too many files"
msgstr "příliš mnoho souborů"
@ -9838,11 +9877,6 @@ msgstr "Nepodporovaný výběr"
msgid "up to"
msgstr "až do"
#: src/slic3r/GUI/GLCanvas3D.cpp:961
#, possible-c-format
msgid "up to %.2f mm"
msgstr "do % .2f mm"
#: src/slic3r/GUI/UpdateDialogs.cpp:38
msgid "Update available"
msgstr "Je dostupná aktualizace"
@ -9892,10 +9926,6 @@ msgstr "Horní vrstva"
msgid "Use another extruder"
msgstr "Použít jiný extruder"
#: src/slic3r/GUI/GLCanvas3D.cpp:3959
msgid "Use CTRL+left mouse key to enter text edit mode:"
msgstr "Pomocí CTRL + levé tlačítko myši přejděte do režimu úprav textu:"
#: src/slic3r/GUI/Preferences.cpp:220
msgid "Use custom size for toolbar icons"
msgstr "Použít vlastní velikost ikon na panelu nástrojů"
@ -10067,13 +10097,9 @@ msgstr "verze"
msgid "Vertical shells"
msgstr "Svislé stěny"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:234
msgid "Vertical slider - Add color change marker for current layer"
msgstr "Vertikální posuvník - Přidat značku změny barvy pro aktuální vrstvu"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
msgid "Vertical slider - Delete color change marker for current layer"
msgstr "Vertikální posuvník - Odebrat značku změny barvy pro aktuální vrstvu"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Vertical Slider"
msgstr "Vertikální posuvník"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
#: src/slic3r/GUI/KBShortcutsDialog.cpp:212
@ -10087,30 +10113,6 @@ msgstr "Vertikální posuvník - Pohyb aktivním ukazatelem dolů"
msgid "Vertical slider - Move active thumb Up"
msgstr "Vertikální posuvník - Pohyb aktivním ukazatelem nahoru"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:231
msgid "Vertical slider - Move current thumb Down"
msgstr "Vertikální posuvník - Pohyb posuvníkem dolů"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
msgid "Vertical slider - Move current thumb Up"
msgstr "Vertikální posuvník - Pohyb posuvníkem nahoru"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:233
msgid "Vertical slider - Set lower thumb as active"
msgstr "Vertikální posuvník -Nastavit spodní ukazatel jako aktivní"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:233
msgid "Vertical slider - Set lower thumb to current thumb"
msgstr "Vertikální posuvník - Pohyb spodním posuvníkem k aktivnímu posuvníku"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
msgid "Vertical slider - Set upper thumb as active"
msgstr "Vertikální posuvník -Nastavit horní ukazatel jako aktivní"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
msgid "Vertical slider - Set upper thumb to current thumb"
msgstr "Vertikální posuvník - Pohyb horním posuvníkem k aktivnímu posuvníku"
#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271
msgid "View"
msgstr "Zobrazení"
@ -10197,7 +10199,7 @@ msgstr "Vítejte v %s Konfiguračním průvodci"
#: src/slic3r/GUI/SavePresetDialog.cpp:310
msgid "What would you like to do with \"%1%\" preset after saving?"
msgstr "Co chcete udělat s přednastavením „% 1%“ po uložení?"
msgstr "Co chcete udělat s přednastavením \"%1%\" po uložení?"
#: src/slic3r/GUI/Preferences.cpp:114
msgid "When checked, the print and filament presets are shown in the preset editor even if they are marked as incompatible with the active printer"
@ -10217,7 +10219,7 @@ msgstr "při tisku"
#: src/libslic3r/PrintConfig.cpp:287
msgid "When printing multi-material objects, this settings will make Slic3r to clip the overlapping object parts one by the other (2nd part will be clipped by the 1st, 3rd part will be clipped by the 1st and 2nd etc)."
msgstr "Připnutí překrývajících se objektů jeden k druhému při Multimateriálovém tisku. (Druhá část se připne k první, třetí část k první a druhé, atd)."
msgstr "Připnutí překrývajících se objektů jeden k druhému při Multimateriálovém tisku. (Druhá část se připne k první, třetí část k první a druhé, atd.)"
#: src/libslic3r/PrintConfig.cpp:339
msgid "When printing multiple objects or copies, this feature will complete each object before moving onto next one (and starting it from its bottom layer). This feature is useful to avoid the risk of ruined prints. Slic3r should warn and prevent you from extruder collisions, but beware."
@ -10291,14 +10293,6 @@ msgstr "Šířka spojek, které spojují objekt s vygenerovanou podložkou."
msgid "Width of the display"
msgstr "Šířka displeje"
#: src/slic3r/GUI/PresetHints.cpp:47
msgid "will always run at %1%%%"
msgstr "bude vždy běžet na %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:54
msgid "will be turned off."
msgstr "bude vypnut."
#: src/libslic3r/PrintConfig.cpp:2584
msgid "Will inflate or deflate the sliced 2D polygons according to the sign of the correction."
msgstr "Vytvoří offset každé vrstvy v rovině XY. Kladná hodnota - offset směrem ven, plocha polygonu se zvětší. Záporná hodnota - offset směrem dovnitř, plocha polygonu se zmenší."
@ -10377,6 +10371,10 @@ msgstr "Světové souřadnice"
msgid "Would you like to install it?\n\nNote that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n\nUpdated configuration bundles:"
msgstr "Přejete si spustit instalaci?\n\nNejprve bude provedena kompletní záloha nastavení. V případě problémů s novou verzí ji bude možné kdykoliv obnovit.\n\nAktualizované balíčky nastavení:"
#: src/slic3r/GUI/GUI_App.cpp:1802
msgid "Would you like to stop uploads and close the program?"
msgstr "Chcete zastavit nahrávání a ukončit program?"
#: src/libslic3r/miniz_extension.cpp:151
msgid "write calledback failed"
msgstr "zpětné volání se nezdařilo"
@ -10458,6 +10456,10 @@ 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/NotificationManager.hpp:459
msgid "You have just added a G-code for color change, but its value is empty.\nTo export the G-code correctly, check the \"Color Change G-code\" in \"Printer Settings > Custom G-code\""
msgstr "Právě jste přidali G-code pro změnu barvy, ale jeho obsah je prázdný.\nChcete-li exportovat G-code správně, zkontrolujte „G-code pro změnu barvy“ v „Nastavení tiskárny> Vlastní G-code“"
#: src/slic3r/GUI/SavePresetDialog.cpp:277
msgid "You have selected physical printer \"%1%\" \nwith related printer preset \"%2%\""
msgstr "Vybrali jste fyzickou tiskárnu \"%1%\"\ns tiskovým přednastavením \"%2%\""
@ -10480,8 +10482,8 @@ msgid "You need to restart %s to make the changes effective."
msgstr "Chcete-li provést změny, musíte restartovat aplikaci %s."
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468
msgid "You should to change a name of your printer device. It can't be saved."
msgstr "Měli byste změnit název tiskového zařízení. Nemůže být uloženo."
msgid "You should change the name of your printer device."
msgstr "Měli byste změnit název tiskového zařízení."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3884
#, possible-c-format
@ -10512,6 +10514,10 @@ msgstr "Váš soubor byl opraven."
msgid "Your object appears to be too large, so it was automatically scaled down to fit your print bed."
msgstr "Váš objekt se zdá být příliš velký, takže byl automaticky zmenšen, aby se vešel na tiskovou podložku."
#: src/libslic3r/GCode.cpp:1261
msgid "Your print is very close to the priming regions. Make sure there is no collision."
msgstr "Váš tisk je velmi blízko čistícím oblastem. Zajistěte, aby nedošlo ke kolizi."
#: src/libslic3r/PrintConfig.cpp:2428
msgid "Z offset"
msgstr "Odsazení Z"

View file

@ -19,11 +19,6 @@ msgstr "\"%1%\" ist deaktiviert, weil \"%2%\" in der Kategorie \"%3%\" eingescha
msgid "%"
msgstr "%"
#: src/slic3r/GUI/GLCanvas3D.cpp:969
#, possible-c-format
msgid "%.2f - %.2f mm"
msgstr "%.2f - %.2f mm"
#. TRN Remove/Delete
#: src/slic3r/GUI/Tab.cpp:3425
msgid "%1% Preset"
@ -296,10 +291,6 @@ msgstr "(Re)Slice jet&zt"
msgid "(Unknown)"
msgstr "(Unbekannt)"
#: src/slic3r/GUI/Plater.cpp:1195
msgid "(weight with spool)"
msgstr "(Gewicht mit Spule)"
#: src/slic3r/GUI/MainFrame.cpp:1491
msgid ") not found."
msgstr ") nicht gefunden."
@ -386,11 +377,6 @@ msgstr "Über %s"
msgid "above"
msgstr "über"
#: src/slic3r/GUI/GLCanvas3D.cpp:965
#, possible-c-format
msgid "above %.2f mm"
msgstr "oberhalb %.2f mm"
#: src/libslic3r/PrintConfig.cpp:1677
msgid "Above Z"
msgstr "Über Z"
@ -744,6 +730,10 @@ msgstr "Alle Oberseiten"
msgid "allocation failed"
msgstr "Allokation fehlgeschlagen"
#: src/slic3r/GUI/Preferences.cpp:161 src/slic3r/GUI/Preferences.cpp:165
msgid "Allow just a single PrusaSlicer instance"
msgstr "Nur eine einzige PrusaSlicer-Instanz zulassen"
#: src/slic3r/GUI/Plater.cpp:3915
msgid "Along X axis"
msgstr "Entlang der X Achse"
@ -1011,6 +1001,10 @@ msgstr "Automatische Geschwindigkeit (fortgeschritten)"
msgid "Avoid crossing perimeters"
msgstr "Kreuzen der Kontur vermeiden"
#: src/libslic3r/PrintConfig.cpp:188
msgid "Avoid crossing perimeters - Max detour length"
msgstr "Kreuzen von Perimetern Vermeiden - Maximale Umleitungslänge"
#: src/slic3r/GUI/Tab.cpp:3705
msgid "BACK ARROW"
msgstr "PFEIL ZURÜCK"
@ -1388,6 +1382,11 @@ msgstr "Suche nach Konfigurationsaktualisierungen"
msgid "Check for updates"
msgstr "Nach &Updates suchen"
#: src/slic3r/Utils/PresetUpdater.cpp:412
#: src/slic3r/Utils/PresetUpdater.cpp:420
msgid "checking install indices"
msgstr "Überprüfung der Installationsindizes"
#: src/slic3r/GUI/BedShapeDialog.cpp:608
msgid "Choose a file to import bed texture from (PNG/SVG):"
msgstr "Wählen Sie eine Datei aus, aus der Sie die Druckbetttextur importieren möchten (PNG/SVG):"
@ -1433,10 +1432,6 @@ msgstr "Kreis"
msgid "Circular"
msgstr "Kreisförmig"
#: src/slic3r/GUI/GLCanvas3D.cpp:3961
msgid "Clearance size"
msgstr "Freiraum"
#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067
msgid "Click right mouse button to open/close History"
msgstr "Klicken Sie mit der rechten Maustaste, um die Historie zu öffnen/schließen"
@ -1511,11 +1506,6 @@ msgstr "Farbwechsel (\"%1%\")"
msgid "Color change (\"%1%\") for Extruder %2%"
msgstr "Farbwechsel (\"%1%\") für Extruder %2%"
#: src/slic3r/GUI/GLCanvas3D.cpp:1001
#, possible-c-format
msgid "Color change for Extruder %d at %.2f mm"
msgstr "Farbwechsel für Extruder %d bei %.2f mm"
#: src/slic3r/GUI/Tab.cpp:2203
msgid "Color Change G-code"
msgstr "G-Code für Farbwechsel"
@ -1729,6 +1719,22 @@ msgstr "Zu Zwischenablage kopieren"
msgid "Copy to Clipboard"
msgstr "Zu Zwischenablage kopieren"
#: src/slic3r/GUI/AboutDialog.cpp:304
msgid "Copy Version Info"
msgstr "Versionsinfo kopieren"
#: src/slic3r/Utils/PresetUpdater.cpp:84
msgid "Copying of file %1% to %2% failed.\nError message : %3%\nCopying was triggered by function: %4%"
msgstr "Das Kopieren der Datei %1% nach %2% ist fehlgeschlagen.\nFehlermeldung : %3%\nKopieren wurde ausgelöst durch Funktion: %4%"
#: src/slic3r/Utils/PresetUpdater.cpp:91
msgid "Copying of file %1% to %2% failed. Permissions fail at target file after copying.\nError message : %3%\nCopying was triggered by function: %4%"
msgstr "Kopieren der Datei %1% nach %2% fehlgeschlagen. Berechtigungsfehler der Zieldatei nach dem Kopieren.\nFehlermeldung : %3%\n Dieser Fehler wurde ausgelöst durch Funktion: %4%"
#: src/slic3r/Utils/PresetUpdater.cpp:70
msgid "Copying of file %1% to %2% failed. Permissions fail at target file before copying.\nError message : %3%\nThis error happend during %4% phase."
msgstr "Kopieren der Datei %1% nach %2% fehlgeschlagen. Berechtigungsfehler der Zieldatei vor dem Kopieren.\nFehlermeldung : %3%\nDieser Fehler trat während der Phase %4% auf."
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156
msgid "Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."
msgstr "Das Kopieren des temporären G-Codes ist abgeschlossen, aber der exportierte Code konnte während der Kopierprüfung nicht geöffnet werden. Der Ausgabe-G-Code liegt in %1%.tmp."
@ -1826,6 +1832,10 @@ msgstr "Erstellt eine Grundschicht um das Objekt herum und ignoriert die Unterst
msgid "Critical angle"
msgstr "Kritischer Winkel"
#: src/slic3r/GUI/GUI_App.cpp:589
msgid "Critical error"
msgstr "Kritischer Fehler"
#: src/libslic3r/PrintConfig.cpp:2832
msgid "Cross"
msgstr "Kreuz"
@ -1894,6 +1904,10 @@ msgstr "Benutzerdefinierte Drucker-Einrichtung"
msgid "Custom profile name:"
msgstr "Benutzerdefinierter Profilname:"
#: src/slic3r/GUI/Plater.cpp:3397
msgid "Custom supports and seams were removed after repairing the mesh."
msgstr "Benutzerdefinierte Stützen und Nähte wurden nach der Reparatur des Netzes entfernt."
#: src/slic3r/GUI/DoubleSlider.cpp:1135
msgid "Custom template (\"%1%\")"
msgstr "Benutzerdefinierte Vorlage (\"%1%\")"
@ -1979,10 +1993,6 @@ msgstr "Standard-Filamentprofil"
msgid "Default filament profile associated with the current printer profile. On selection of the current printer profile, this filament profile will be activated."
msgstr "Standard-Filamentprofil, das dem aktuellen Druckerprofil zugeordnet ist. Bei Auswahl des aktuellen Druckerprofils wird dieses Filamentprofil aktiviert."
#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939
msgid "Default print color"
msgstr "Standard Druckfarbe"
#: src/slic3r/GUI/Tab.cpp:1302
msgid "default print profile"
msgstr "Standard-Druckprofil"
@ -2433,9 +2443,13 @@ msgstr "Duplizieren nach Raster"
msgid "Duration"
msgstr "Dauer"
#: src/slic3r/GUI/PresetHints.cpp:39
msgid "During the other layers, fan"
msgstr "Während der übrigen Schichten, Lüfter"
#: src/slic3r/GUI/PresetHints.cpp:51
msgid "During the other layers, fan will always run at %1%%%"
msgstr "Bei den anderen Schichten läuft der Lüfter immer mit %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:58
msgid "During the other layers, fan will be turned off."
msgstr "Bei den anderen Schichten wird der Lüfter ausgeschaltet."
#: src/libslic3r/PrintConfig.cpp:2833
msgid "Dynamic"
@ -2770,6 +2784,10 @@ msgstr "Fehler: %s"
msgid "ERROR: not enough resources to execute a new job."
msgstr "FEHLER: Nicht genügend Ressourcen, um einen neuen Job auszuführen."
#: src/slic3r/GUI/Plater.cpp:3374
msgid "ERROR: Please close all manipulators available from the left toolbar before fixing the mesh."
msgstr "FEHLER: Bitte schließen Sie alle in der linken Symbolleiste verfügbaren Manipulatoren, bevor Sie das Netz reparieren."
#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557
#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125
#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196
@ -3071,10 +3089,6 @@ msgstr "Extruder geändert auf"
msgid "Extruder clearance"
msgstr "Extruder Freiraum"
#: src/slic3r/GUI/Tab.cpp:1563
msgid "Extruder clearance (mm)"
msgstr "Extruder Freiraum (mm)"
#: src/libslic3r/PrintConfig.cpp:558
msgid "Extruder Color"
msgstr "Extruder Farbe"
@ -3155,9 +3169,9 @@ msgstr "Das Laden des Inputmodells ist fehlgeschlagen."
msgid "Failed processing of the output_filename_format template."
msgstr "Die Verarbeitung der output_filename_format Vorlage ist fehlgeschlagen."
#: src/slic3r/GUI/PresetHints.cpp:41
msgid "Fan"
msgstr "Kühllüfter"
#: src/slic3r/GUI/GUI_App.cpp:1648
msgid "Failed to activate configuration snapshot."
msgstr "Konfigurations-Snapshot konnte nicht aktiviert werden."
#: src/slic3r/GUI/Tab.cpp:1802
msgid "Fan settings"
@ -3171,6 +3185,22 @@ msgstr "Lüftergeschwindigkeit"
msgid "Fan Speed (%)"
msgstr "Lüftergeschwindigkeit (%)"
#: src/slic3r/GUI/PresetHints.cpp:49
msgid "Fan speed will be ramped from zero at layer %1% to %2%%% at layer %3%."
msgstr "Die Lüfterdrehzahl wird rampenförmig von Null bei Schicht %1% auf %2%%% bei Schicht %3% erhöht."
#: src/libslic3r/PrintConfig.cpp:1001
msgid "Fan speed will be ramped up linearly from zero at layer \"disable_fan_first_layers\" to maximum at layer \"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower than \"disable_fan_first_layers\", in which case the fan will be running at maximum allowed speed at layer \"disable_fan_first_layers\" + 1."
msgstr "Die Lüfterdrehzahl wird linear von Null bei der Schicht \"disable_fan_first_layers\" bis zum Maximum bei der Schicht \"full_fan_speed_layer\" hochgefahren. \"full_fan_speed_layer\" wird ignoriert, wenn sie niedriger ist als \"disable_fan_first_layers\", in diesem Fall läuft der Lüfter mit der maximal zulässigen Drehzahl auf Schicht \"disable_fan_first_layers\" + 1."
#: src/slic3r/GUI/PresetHints.cpp:51
msgid "Fan will always run at %1%%%"
msgstr "Der Lüfter läuft immer mit %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:58
msgid "Fan will be turned off."
msgstr "Der Lüfter wird ausgeschaltet."
#: src/libslic3r/PrintConfig.cpp:2548
msgid "Fast"
msgstr "Schnell"
@ -3416,6 +3446,10 @@ msgstr "Druckgeschwindigkeit der ersten Schicht"
msgid "First layer volumetric"
msgstr "Volumenparameter der ersten Schicht"
#: src/slic3r/GUI/Plater.cpp:3380
msgid "Fix through NetFabb"
msgstr "Reparieren mittels Netfabb"
#: src/slic3r/GUI/GUI_ObjectList.cpp:1776
msgid "Fix through the Netfabb"
msgstr "Reparieren mittels Netfabb"
@ -3521,6 +3555,10 @@ msgstr "Front"
msgid "Front View"
msgstr "Frontalansicht"
#: src/libslic3r/PrintConfig.cpp:1000
msgid "Full fan speed at layer"
msgstr "Volle Lüfterdrehzahl auf Schicht"
#: src/slic3r/GUI/Tab.cpp:1331
msgid "full profile name"
msgstr "vollständiger Profilname"
@ -3549,6 +3587,10 @@ msgstr "G-Code Typ"
msgid "G-code preview"
msgstr "G-Code Vorschau"
#: src/libslic3r/PrintConfig.cpp:66
msgid "G-code thumbnails"
msgstr "G-Code-Miniaturbilder"
#: src/libslic3r/PrintConfig.cpp:3552
msgid "G-code viewer"
msgstr "G-Code-Viewer"
@ -3644,6 +3686,10 @@ msgstr "Erzeuge den Vertex-Puffer"
msgid "Generic"
msgstr "Generisch"
#: src/slic3r/Utils/PresetUpdater.cpp:600
msgid "getting config updates"
msgstr "Abrufen von Konfigurations-Updates"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
msgid "Gizmo cut"
msgstr "Gizmo Schnitt"
@ -3880,6 +3926,10 @@ msgstr "Bienenwabe"
msgid "Horizontal shells"
msgstr "Horizontale Konturhüllen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:253
msgid "Horizontal Slider"
msgstr "Horizontaler Schieberegler"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:209
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213
#: src/slic3r/GUI/KBShortcutsDialog.cpp:238
@ -3892,30 +3942,6 @@ msgstr "Horizontaler Schieberegler - Aktiven Schieber nach links bewegen"
msgid "Horizontal slider - Move active thumb Right"
msgstr "Horizontaler Schieberegler - Aktiven Schieber nach rechts bewegen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:238
msgid "Horizontal slider - Move current thumb Left"
msgstr "Horizontaler Schieberegler - Aktuellen Schieber nach links bewegen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:239
msgid "Horizontal slider - Move current thumb Right"
msgstr "Horizontaler Schieberegler - Aktuellen Schieber nach rechts bewegen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:236
msgid "Horizontal slider - Set left thumb as active"
msgstr "Horizontaler Schieberegler - Linken Schieber aktiv setzen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:236
msgid "Horizontal slider - Set left thumb to current thumb"
msgstr "Horizontaler Schieberegler - Linken Schieber auf aktuellen setzen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Horizontal slider - Set right thumb as active"
msgstr "Horizontaler Schieberegler - Rechten Schieber aktiv setzen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Horizontal slider - Set right thumb to current thumb"
msgstr "Horizontaler Schieberegler - Rechten Schieber auf aktuellen setzen"
#: src/libslic3r/PrintConfig.cpp:279
msgid "Horizontal width of the brim that will be printed around each object on the first layer."
msgstr "Horizontalbreite des Randes, der um jedes Objekt auf der Bodenschicht gedruckt wird."
@ -4055,7 +4081,7 @@ msgstr "Wenn aktiviert, wird die Schaltfläche zum Zusammenklappen der Seitenlei
msgid "If enabled, the command line arguments are sent to an existing instance of GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the \"single_instance\" configuration value from application preferences."
msgstr "Wenn aktiviert, werden die Befehlszeilenargumente an eine vorhandene Instanz der GUI PrusaSlicer gesendet, oder ein vorhandenes PrusaSlicer-Fenster wird aktiviert. Übersteuert den Konfigurationswert \"single_instance\" aus den Anwendungseinstellungen."
#: src/slic3r/GUI/Preferences.cpp:278
#: src/slic3r/GUI/Preferences.cpp:294
msgid "If enabled, the descriptions of configuration parameters in settings tabs wouldn't work as hyperlinks. If disabled, the descriptions of configuration parameters in settings tabs will work as hyperlinks."
msgstr "Wenn aktiviert, funktionieren die Beschreibungen von Konfigurationsparametern in Einstellungsregistern nicht als Hyperlinks. Wenn diese Option deaktiviert ist, funktionieren die Beschreibungen von Konfigurationsparametern in Einstellungsregistern als Hyperlinks."
@ -4256,6 +4282,10 @@ msgstr "in"
msgid "In this mode you can select only other %s Items%s"
msgstr "In diesem Modus wählen Sie nur andere %s Elemente%s"
#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:423
msgid "Inches"
msgstr "Zoll"
#: src/slic3r/GUI/UpdateDialogs.cpp:230
msgid "Incompatible bundles:"
msgstr "Inkompatible Konfigurationssammlungen:"
@ -4335,10 +4365,6 @@ msgstr "Info"
msgid "Information"
msgstr "Informationen"
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547
msgid "Infornation"
msgstr "Informationen"
#: src/libslic3r/PrintConfig.cpp:1101
msgid "Inherits profile"
msgstr "Übernimmt Profil"
@ -4355,6 +4381,11 @@ msgstr "Anfang-Belichtungszeit"
msgid "Initial layer height"
msgstr "Anfangsschichthöhe"
#: src/slic3r/GUI/Field.cpp:269
#, possible-c-format
msgid "Input value is out of range\nAre you sure that %s is a correct value and that you want to continue?"
msgstr "Eingabewert liegt außerhalb des Bereichs\nSind Sie sicher, dass %s ein korrekter Wert ist und Sie fortfahren möchten?"
#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370
msgid "Input value is out of range"
msgstr "Der Eingabewert ist nicht im gültigen Bereich"
@ -4363,6 +4394,10 @@ msgstr "Der Eingabewert ist nicht im gültigen Bereich"
msgid "Inspect / activate configuration snapshots"
msgstr "Inspiziere / aktiviere Konfigurations-Momentaufnahmen"
#: src/slic3r/Utils/PresetUpdater.cpp:120
msgid "install"
msgstr "Installation"
#: src/slic3r/GUI/ObjectDataViewModel.cpp:62
#: src/slic3r/GUI/ObjectDataViewModel.cpp:218
#, possible-c-format
@ -4432,6 +4467,10 @@ msgstr "Ungültige Eindringtiefe des Stützkopfes"
msgid "invalid header or archive is corrupted"
msgstr "ungültiger Dateiheader oder Archiv ist beschädigt"
#: src/slic3r/GUI/Field.cpp:375
msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\""
msgstr "Ungültiges Eingabeformat. Erwarteter Vektor der Abmessungen im folgenden Format: \"%1%\""
#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274
#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
msgid "Invalid numeric input."
@ -4521,21 +4560,6 @@ msgstr "Auf Höhe %s springen\noder Linealmodus einstellen"
msgid "Jump to height %s\nSet ruler mode\nor Set extruder sequence for the entire print"
msgstr "Auf Höhe %s springen\nLineal-Modus einstellen\noder Extrudersequenz für den gesamten Druck einstellen"
#: src/slic3r/GUI/DoubleSlider.cpp:1075
#, possible-c-format
msgid "Jump to height %s or Set extruder sequence for the entire print"
msgstr "Auf Höhe %s wechseln oder Extrudersequenz für den gesamten Druck einstellen"
#: src/slic3r/GUI/DoubleSlider.cpp:1222
#, possible-c-format
msgid "Jump to height %s or Set ruler mode"
msgstr "Auf Höhe %s springen oder Linealmodus einstellen"
#: src/slic3r/GUI/DoubleSlider.cpp:1220
#, possible-c-format
msgid "Jump to height %s Set ruler mode\n or Set extruder sequence for the entire print"
msgstr "Auf Höhe %s springen Lineal-Modus einstellen\n oder Extrudersequenz für den gesamten Druck einstellen"
#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852
msgid "Jump to move"
msgstr "Zum Bewegen wechseln"
@ -4646,10 +4670,6 @@ msgstr "Schichten und Umfänge"
msgid "Layers and Perimeters"
msgstr "Schichten und Konturen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:225
msgid "Layers Slider"
msgstr "Schichtenschieber"
#: src/slic3r/GUI/OptionsGroup.cpp:293
msgctxt "Layers"
msgid "Bottom"
@ -4695,10 +4715,6 @@ msgstr "Linke Maustaste:"
msgid "Left View"
msgstr "Anicht von Links"
#: src/slic3r/GUI/GUI_Preview.cpp:339
msgid "Legend"
msgstr "Legende"
#: src/slic3r/GUI/GUI_Preview.cpp:1480
msgid "Legend/Estimated printing time"
msgstr "Legende/geschätzte Druckzeit"
@ -5344,7 +5360,7 @@ msgstr "mm"
#: src/libslic3r/PrintConfig.cpp:1655 src/libslic3r/PrintConfig.cpp:1664
msgid "mm (zero to disable)"
msgstr "mm (null eingeben zum Deaktivieren)"
msgstr "mm (Null zum Deaktivieren)"
#: src/libslic3r/PrintConfig.cpp:487 src/libslic3r/PrintConfig.cpp:596
#: src/libslic3r/PrintConfig.cpp:924 src/libslic3r/PrintConfig.cpp:937
@ -5355,6 +5371,10 @@ msgstr "mm (null eingeben zum Deaktivieren)"
msgid "mm or %"
msgstr "mm oder %"
#: src/libslic3r/PrintConfig.cpp:193
msgid "mm or % (zero to disable)"
msgstr "mm oder % (Null zum Deaktivieren)"
#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645
#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662
#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697
@ -5494,6 +5514,22 @@ msgstr "Bewege aktiven Schieberegler nach links"
msgid "Move active slider thumb Right"
msgstr "Bewege aktiven Schieberegler nach rechts"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:220
msgid "Move active thumb Down"
msgstr "Aktiven Schieber nach unten bewegen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:241
msgid "Move active thumb Left"
msgstr "Aktiven Schieber nach links bewegen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:242
msgid "Move active thumb Right"
msgstr "Aktiven Schieber nach rechts bewegen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
msgid "Move active thumb Up"
msgstr "Aktiven Schieber nach oben bewegen"
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
msgid "Move clipping plane"
msgstr "Beschnittebene bewegen"
@ -5502,14 +5538,6 @@ msgstr "Beschnittebene bewegen"
msgid "Move current slider thumb Down"
msgstr "Bewege aktuellen Schieberegler nach unten"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
msgid "Move current slider thumb Left"
msgstr "Bewege aktuellen Schieberegler nach links"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
msgid "Move current slider thumb Right"
msgstr "Bewege aktuellen Schieberegler nach rechts"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
msgid "Move current slider thumb Up"
msgstr "Bewege aktuellen Schieberegler nach oben"
@ -5518,16 +5546,6 @@ msgstr "Bewege aktuellen Schieberegler nach oben"
msgid "Move drainage hole"
msgstr "Drainageloch bewegen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:209
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213
msgid "Move horizontal slider current thumb Left"
msgstr "Horizontalen Schieberegler aktuellen Schieber nach links bewegen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:210
#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
msgid "Move horizontal slider current thumb Right"
msgstr "Horizontalen Schieberegler aktuellen Schieber nach rechts bewegen"
#: src/slic3r/GUI/GLCanvas3D.cpp:3810
msgid "Move Object"
msgstr "Objekt bewegen"
@ -5556,16 +5574,6 @@ msgstr "Auswahl 10 mm in positiver Y-Richtung verschieben"
msgid "Move support point"
msgstr "Stützpunkt bewegen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
#: src/slic3r/GUI/KBShortcutsDialog.cpp:212
msgid "Move vertical slider current thumb Down"
msgstr "Vertikalen Schieberegler aktuellen Schieber nach unten bewegen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
#: src/slic3r/GUI/KBShortcutsDialog.cpp:211
msgid "Move vertical slider current thumb Up"
msgstr "Vertikalen Schieberegler aktuellen Schieber nach oben bewegen"
#: src/slic3r/GUI/GCodeViewer.cpp:2492
msgid "Movement"
msgstr "Bewegung"
@ -5955,6 +5963,14 @@ msgstr "Eine Schicht Modus"
msgid "One or more object were assigned an extruder that the printer does not have."
msgstr "Eines oder mehrere Objekte wurden einem Extruder zugewiesen, der auf diesem Drucker nicht vorhanden ist."
#: src/slic3r/GUI/GUI_App.cpp:1784
msgid "Ongoing uploads"
msgstr "Laufende Uploads"
#: src/libslic3r/Print.cpp:1269
msgid "Only a single object may be printed at a time in Spiral Vase mode. Either remove all but the last object, or enable sequential mode by \"complete_objects\"."
msgstr "Im Modus \"Spiralvase\" darf immer nur ein einziges Objekt gedruckt werden. Entfernen Sie entweder alle bis auf das letzte Objekt, oder aktivieren Sie den sequenziellen Modus durch \"complete_objects\"."
#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840
msgid "Only create support if it lies on a build plate. Don't create support on a print."
msgstr "Nur dann Stützen schaffen, wenn sie auf der Druckplattform aufbauen. Erstellt keine Stützen, die auf dem Ausdruck gründen würden."
@ -6307,11 +6323,6 @@ msgstr "Druck pausieren (\"%1%\")"
msgid "Pause Print G-code"
msgstr "Druckpausen G-Code"
#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949
#: src/slic3r/GUI/GLCanvas3D.cpp:988
msgid "Pause print or custom G-code"
msgstr "Druckpausen oder benutzerdefinierter G-Code"
#: src/libslic3r/PrintConfig.cpp:1147
msgid "Percent of a flow rate relative to object's normal layer height."
msgstr "Prozent einer Flussrate relativ zur normalen Schichthöhe des Objekts."
@ -6360,9 +6371,9 @@ msgstr "Physische Drucker"
msgid "Pick another vendor supported by %s"
msgstr "Wählen Sie einen anderen Hersteller, der von %s unterstützt wird"
#: src/libslic3r/PrintConfig.cpp:66
msgid "Picture sizes to be stored into a .gcode and .sl1 files"
msgstr "Bildgrößen, die in einer.gcode und .sl1 Datei gespeichert werden sollen"
#: src/libslic3r/PrintConfig.cpp:67
msgid "Picture sizes to be stored into a .gcode and .sl1 files, in the following format: \"XxY, XxY, ...\""
msgstr "Bildgrößen, die in einer .gcode- und .sl1-Datei gespeichert werden sollen, im folgenden Format: \"XxY, XxY, ...\""
#: src/libslic3r/PrintConfig.cpp:2822
msgid "Pillar connection mode"
@ -6485,11 +6496,7 @@ msgid "Preset \"%1%\" is not compatible with the new printer profile and it has
msgstr "Die \"%1%\" Voreinstellung ist mit dem neuen Druckerprofil nicht kompatibel und weist die folgenden ungespeicherten Änderungen auf:"
#: src/slic3r/GUI/SavePresetDialog.cpp:136
msgid "Preset with name \"%1%\" already exists and is imcopatible with selected printer."
msgstr "Die Voreinstellung mit dem Namen \"%1%\" existiert bereits und ist mit dem ausgewählten Drucker nicht kompatibel."
#: src/slic3r/GUI/SavePresetDialog.cpp:136
msgid "Preset with name \"%1%\" already exists and is incopatible with selected printer."
msgid "Preset with name \"%1%\" already exists and is incompatible with selected printer."
msgstr "Die Voreinstellung mit dem Namen \"%1%\" existiert bereits und ist mit dem ausgewählten Drucker nicht kompatibel."
#: src/slic3r/GUI/SavePresetDialog.cpp:148
@ -6501,6 +6508,10 @@ msgctxt "PresetName"
msgid "Copy"
msgstr "Kopieren"
#: src/slic3r/GUI/GLCanvas3D.cpp:3990
msgid "Press %1%left mouse button to enter the exact value"
msgstr "%1%linke Maustaste drücken, um den genauen Wert einzugeben"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
msgid "Press to activate deselection rectangle"
msgstr "Drücken um das Abwahlrechteck zu aktivieren"
@ -6719,6 +6730,10 @@ msgstr "PrusaSlicer erkannte System-SSL-Zertifikatspeicher in: %1%"
msgid "PrusaSlicer GUI initialization failed"
msgstr "PrusaSlicer GUI-Initialisierung fehlgeschlagen"
#: src/slic3r/GUI/GUI_App.cpp:586
msgid "PrusaSlicer has encountered a localization error. Please report to PrusaSlicer team, what language was active and in which scenario this issue happened. Thank you.\n\nThe application will now terminate."
msgstr "PrusaSlicer ist auf einen Lokalisierungsfehler gestoßen. Bitte melden Sie dem PrusaSlicer-Team, welche Sprache aktiv war und in welchem Szenario dieses Problem aufgetreten ist. Wir danken Ihnen.\n\nDie Anwendung wird nun beendet."
#: src/slic3r/GUI/AboutDialog.cpp:285
msgid "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap community."
msgstr "PrusaSlicer basiert auf Slic3r von Alessandro Ranellucci und der RepRap Community."
@ -7737,10 +7752,6 @@ msgstr "Seq."
msgid "Sequential printing"
msgstr "Sequentielles Drucken"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
msgid "Sequential Slider"
msgstr "Sequentieller Schieberegler"
#: src/slic3r/GUI/Preferences.cpp:230
msgid "Sequential slider applied only to top layer"
msgstr "Sequentieller Schieberegler wird nur auf die oberste Schicht angewendet"
@ -7786,6 +7797,14 @@ msgstr "Extrudersequenz für den gesamten Druck einstellen"
msgid "Set extruder(tool) sequence"
msgstr "Extruder(werkzeug)sequenz einstellen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:243
msgid "Set left thumb as active"
msgstr "Linken Schieber aktiv setzen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
msgid "Set lower thumb as active"
msgstr "Unteren Schieber aktiv setzen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
msgid "Set lower thumb to current slider thumb"
msgstr "Stelle den unteren Regler auf den aktuellen Schieberegler"
@ -7819,6 +7838,10 @@ msgstr "Setze Druckbar"
msgid "Set Printable Instance"
msgstr "Setze druckbare Kopie"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:244
msgid "Set right thumb as active"
msgstr "Rechten Schieber aktiv setzen"
#: src/slic3r/GUI/DoubleSlider.cpp:1836
msgid "Set ruler mode"
msgstr "Lineal-Modus einstellen"
@ -7887,6 +7910,10 @@ msgstr "Setze Undruckbar"
msgid "Set Unprintable Instance"
msgstr "Setze undruckbare Kopie"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:221
msgid "Set upper thumb as active"
msgstr "Oberen Schieber aktiv setzen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
msgid "Set upper thumb to current slider thumb"
msgstr "Stelle den oberen Regler auf den aktuellen Schieberegler"
@ -8225,10 +8252,6 @@ msgstr "PrusaSlicer kann G-Code Dateien auf einen Drucker-Host hochladen. Dieses
msgid "Slic3r can upload G-code files to a printer host. This field should contain the API Key or the password required for authentication."
msgstr "PrusaSlicer kann G-Code Dateien zu einem Druckerhost hochladen. Dieses Feld sollte den API-Schlüssel oder das Kennwort enthalten, die für die Authentifizierung erforderlich sind."
#: src/libslic3r/PrintConfig.cpp:100
msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance."
msgstr "PrusaSlicer kann G-Code Dateien auf einen Drucker-Host hochladen. Dieses Feld sollte den Hostnamen, die IP-Adresse oder die URL der Drucker-Hostinstanz enthalten."
#: src/libslic3r/PrintConfig.cpp:100
msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance. Print host behind HAProxy with basic auth enabled can be accessed by putting the user name and password into the URL in the following format: https://username:password@your-octopi-address/"
msgstr "PrusaSlicer kann G-Code-Dateien auf einen Drucker-Host hochladen. Dieses Feld sollte den Hostnamen, die IP-Adresse oder die URL der Drucker-Host-Instanz enthalten. Auf einen Drucker-Host hinter HAProxy mit aktivierter Basisauthentifizierung kann zugegriffen werden, indem der Benutzername und das Passwort im folgenden Format in die URL eingegeben werden: https://username:password@Ihre-octopi-addresse/"
@ -8631,6 +8654,10 @@ msgstr "Die STL-Datei wurde exportiert zu %s"
msgid "Stop at height"
msgstr "Stoppe auf Höhe"
#: src/slic3r/GUI/GUI_App.cpp:1781
msgid "Stop them and continue anyway?"
msgstr "Stoppen und trotzdem weitermachen?"
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295
msgid "Success!"
msgstr "Erfolg!"
@ -8767,10 +8794,6 @@ msgstr "Unterstützt Stealth Modus"
msgid "Supports work better, if the following feature is enabled:\n- Detect bridging perimeters"
msgstr "Stützen funktionieren besser, wenn die folgende Funktion aktiviert ist:\n- Erkennen von Umfangbrücken"
#: src/slic3r/GUI/DoubleSlider.cpp:1824
msgid "Supprese show the ruler"
msgstr "LIneal zeigen unterdrücken"
#: src/slic3r/GUI/Preferences.cpp:104
msgid "Suppress \" - default - \" presets"
msgstr "\"Standard\"-Einstellungen unterdrücken"
@ -8985,6 +9008,18 @@ msgstr "Bei den folgenden FFF-Druckermodellen wurde kein Filament ausgewählt:"
msgid "The following presets were modified:"
msgstr "Die folgenden Voreinstellungen wurden geändert:"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:253
msgid "The following shortcuts are applicable in G-code preview when the horizontal slider is active"
msgstr "Die folgenden Tastenkombinationen sind in der G-Code-Vorschau anwendbar, wenn der horizontale Schieberegler aktiv ist"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "The following shortcuts are applicable in G-code preview when the vertical slider is active"
msgstr "Die folgenden Tastenkombinationen sind in der G-Code-Vorschau anwendbar, wenn der vertikale Schieberegler aktiv ist"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
msgid "The following shortcuts are applicable when the specified gizmo is active"
msgstr "Die folgenden Tastenkombinationen sind anwendbar, wenn das angegebene Gizmo aktiv ist"
#: src/slic3r/GUI/ConfigWizard.cpp:2275
msgid "The following SLA printer models have no materials selected:"
msgstr "Bei den folgenden SLA-Druckermodellen wurden keine Materialien ausgewählt:"
@ -9021,6 +9056,10 @@ msgstr "Der maximale Abstand zwischen 2 Pfeilern, die miteinander verbunden werd
msgid "The max length of a bridge"
msgstr "Die maximale Länge einer Überbrückung"
#: src/libslic3r/PrintConfig.cpp:190
msgid "The maximum detour length for avoid crossing perimeters. If the detour is longer than this value, avoid crossing perimeters is not applied for this travel path. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path."
msgstr "Die maximale Umleitungslänge für kreuzen der Kontur vermeiden. Wenn die Umleitung länger als dieser Wert ist, wird die Umgehung von Konturen nicht für diesen Fahrweg angewendet. Die Umleitungslänge kann entweder als absoluter Wert oder als Prozentsatz (z. B. 50 %) eines direkten Verfahrwegs angegeben werden."
#: src/libslic3r/PrintConfig.cpp:2878
msgid "The minimum distance of the pillar base from the model in mm. Makes sense in zero elevation mode where a gap according to this parameter is inserted between the model and the pad."
msgstr "Der Mindestabstand des Säulenfußes zum Modell in mm. Sinnvoll im Nullhöhenmodus, bei dem ein Spalt gemäß diesem Parameter zwischen Modell und Grundschicht eingefügt wird."
@ -9029,6 +9068,14 @@ msgstr "Der Mindestabstand des Säulenfußes zum Modell in mm. Sinnvoll im Nullh
msgid "The name cannot be empty."
msgstr "Name kann nicht leer sein."
#: src/slic3r/GUI/SavePresetDialog.cpp:152
msgid "The name cannot end with space character."
msgstr "Der Name darf nicht mit einem Leerzeichen enden."
#: src/slic3r/GUI/SavePresetDialog.cpp:147
msgid "The name cannot start with space character."
msgstr "Der Name darf nicht mit einem Leerzeichen beginnen."
#: src/libslic3r/PrintConfig.cpp:219
msgid "The number of bottom solid layers is increased above bottom_solid_layers if necessary to satisfy minimum thickness of bottom shell."
msgstr "Die Anzahl der unteren Massivschichten wird über bottom_solid_layers erhöht, wenn es notwendig ist, um die Mindeststärke der Bodenschale zu erfüllen."
@ -9130,10 +9177,6 @@ msgstr "Die Einzugsgeschwindigkeit (sie betrifft nur den Extruderantrieb)."
msgid "The Spiral Vase mode requires:\n- one perimeter\n- no top solid layers\n- 0% fill density\n- no support material\n- Ensure vertical shell thickness enabled\n- Detect thin walls disabled"
msgstr "Der Spiralvasenmodus erfordert:\n- einen Perimeter\n- keine oberen massiven Schichten\n- 0% Fülldichte\n- kein Stützmaterial\n- Vertikale Schalenstärke sicherstellen aktiv\n- Dünne Wände erkennen nicht aktiv"
#: src/libslic3r/Print.cpp:1263
msgid "The Spiral Vase option can only be used when printing a single object."
msgstr "Die Option Spiralvase kann nur beim Drucken eines einzelnen Objekts verwendet werden."
#: src/libslic3r/Print.cpp:1270
msgid "The Spiral Vase option can only be used when printing single material objects."
msgstr "Die Option Spiralvase kann nur beim Drucken von Objekten aus einem einzigen Material verwendet werden."
@ -9161,6 +9204,10 @@ msgstr "Die vorgenommenen Einstellungen führen zu einem leeren Druck."
msgid "The thickness of the pad and its optional cavity walls."
msgstr "Die Stärke der Grundschicht und seine optionalen Hohlraumwände."
#: src/slic3r/GUI/GUI_App.cpp:1781
msgid "The uploads are still ongoing"
msgstr "Die Uploads sind noch im Gange"
#: src/libslic3r/PrintConfig.cpp:2053
msgid "The vertical distance between object and support material interface. Setting this to 0 will also prevent Slic3r from using bridge flow and speed for the first object layer."
msgstr "Der vertikale Abstand zwischen Objekt und Trägermaterialschnittstelle. Wenn Sie diesen Wert auf 0 setzen, wird PrusaSlicer auch verhindern, dass Bridge-Flow und -Geschwindigkeit für die erste Objektschicht verwendet werden."
@ -9314,9 +9361,9 @@ msgstr "Diese Einstellung erlaubt es, Infill zu kombinieren und die Druckdauer z
msgid "This feature allows to force a solid layer every given number of layers. Zero to disable. You can set this to any value (for example 9999); Slic3r will automatically choose the maximum possible number of layers to combine according to nozzle diameter and layer height."
msgstr "Diese Einstellung erzwingt eine massive Schicht nach einer vorgegebenen Anzahl von Schichten. Null deaktiviert diese Einstellung. Sie können jeden Wert eingeben (z.B. 9999); PrusaSlicer wird automatisch die größtmögliche Anzahl von Schichten wählen, die in Abhängigkeit von Düsendurchmesser und Schichthöhe kombiniert werden können."
#: src/libslic3r/PrintConfig.cpp:1910
msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object."
msgstr "Dieses Verfahren erhöht die Z-Position allmählich, während eine einfache Hülle gedruckt wird, um jeglichen sichtbaren Saum zu vermeiden. Diese Option setzt eine einzige Außenkontur, keinen Infill, keine massiven Deckenschichten und keine Stützen voraus. Sie können immer noch eine beliebige Anzahl von Bodenschichten sowie Schleifen für Schürzen und Rand einstellen. Die Methode funktioniert nicht, wenn mehr als ein Objekt gedruckt wird."
#: src/libslic3r/PrintConfig.cpp:1995
msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than one single object."
msgstr "Diese Funktion hebt Z allmählich an, während ein einwandiges Objekt gedruckt wird, um jede sichtbare Naht zu entfernen. Diese Option erfordert eine einzelne Umrandung, keine Füllung, keine oberen festen Schichten und kein Stützmaterial. Sie können trotzdem eine beliebige Anzahl von unteren massiven Schichten sowie Schürzen-/Randschlaufen einstellen. Sie funktioniert nicht, wenn mehr als ein einzelnes Objekt gedruckt wird."
#: src/slic3r/GUI/Plater.cpp:2329
msgid "This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?"
@ -9395,10 +9442,6 @@ msgstr "Die Beschleunigung, die Ihr Drucker für die erste Schicht verwendet. S
msgid "This is the acceleration your printer will use for infill. Set zero to disable acceleration control for infill."
msgstr "Diese Stellung bestimmt die Beschleunigung des Druckers für Infill. Setzen Sie dies auf null, um die Beschleunigungskontrolle für das Infill zu deaktivieren."
#: src/libslic3r/PrintConfig.cpp:1508
msgid "This is the acceleration your printer will use for perimeters. A high value like 9000 usually gives good results if your hardware is up to the job. Set zero to disable acceleration control for perimeters."
msgstr "Dies ist die Beschleunigung, die der Drucker für Außenkonturen benutzen wird. Ein hoher Wert wie 9000 ergibt üblicherweise gute Resultate falls Ihre Hardware mithalten kann. Setzen Sie dies auf null, um die Beschleunigungskontrolle bei Außenkonturen zu deaktivieren."
#: src/libslic3r/PrintConfig.cpp:1582
msgid "This is the acceleration your printer will use for perimeters. Set zero to disable acceleration control for perimeters."
msgstr "Dies ist die Beschleunigung, die Ihr Drucker für Perimeter verwendet. Setzen Sie Null, um die Beschleunigungssteuerung für Perimeter zu deaktivieren."
@ -9575,10 +9618,6 @@ msgstr "Um eine benutzerdefinierte CA-Datei zu verwenden, importieren Sie bitte
msgid "Toggle %c axis mirroring"
msgstr "Umschalten der Spiegelung der %c-Achse"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
msgid "Toggle vertical slider one layer mode ON/OFF"
msgstr "Umschalten des vertikalen Schiebereglers für den Modus einer Schicht EIN/AUS"
#: src/libslic3r/miniz_extension.cpp:93
msgid "too many files"
msgstr "zu viele Dateien"
@ -9836,11 +9875,6 @@ msgstr "Nicht unterstützte Auswahl"
msgid "up to"
msgstr "bis zu"
#: src/slic3r/GUI/GLCanvas3D.cpp:961
#, possible-c-format
msgid "up to %.2f mm"
msgstr "bis zu %.2f mm"
#: src/slic3r/GUI/UpdateDialogs.cpp:38
msgid "Update available"
msgstr "Ein Update ist verfügbar"
@ -9890,10 +9924,6 @@ msgstr "Obere Schicht"
msgid "Use another extruder"
msgstr "Einen anderen Extruder verwenden"
#: src/slic3r/GUI/GLCanvas3D.cpp:3959
msgid "Use CTRL+left mouse key to enter text edit mode:"
msgstr "STRG+linke Maustaste verwenden, um in den Textbearbeitungsmodus zu gelangen:"
#: src/slic3r/GUI/Preferences.cpp:220
msgid "Use custom size for toolbar icons"
msgstr "Benutzerdefinierte Größe für Symbolleistensymbole verwenden"
@ -10065,13 +10095,9 @@ msgstr "Version"
msgid "Vertical shells"
msgstr "Vertikale Konturhüllen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:234
msgid "Vertical slider - Add color change marker for current layer"
msgstr "Vertikaler Schieberegler - Fügt einen Farbwechselmarker der aktuellen Schicht hinzu"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
msgid "Vertical slider - Delete color change marker for current layer"
msgstr "Vertikaler Schieberegler - Löscht den Farbwechselmarker der aktuellen Schicht"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Vertical Slider"
msgstr "Vertikaler Schieberegler"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
#: src/slic3r/GUI/KBShortcutsDialog.cpp:212
@ -10085,30 +10111,6 @@ msgstr "Vertikaler Schieberegler - Aktiven Schieber nach unten bewegen"
msgid "Vertical slider - Move active thumb Up"
msgstr "Vertikaler Schieberegler - Aktiven Schieber nach oben bewegen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:231
msgid "Vertical slider - Move current thumb Down"
msgstr "Vertikaler Schieberegler - Aktuellen Schieber nach unten bewegen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
msgid "Vertical slider - Move current thumb Up"
msgstr "Vertikaler Schieberegler - Aktuellen Schieber nach oben bewegen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:233
msgid "Vertical slider - Set lower thumb as active"
msgstr "Vertikaler Schieberegler - Unteren Schieber aktiv setzen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:233
msgid "Vertical slider - Set lower thumb to current thumb"
msgstr "Vertikaler Schieberegler - Unteren Schieber auf aktuellen setzen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
msgid "Vertical slider - Set upper thumb as active"
msgstr "Vertikaler Schieberegler - Oberen Schieber aktiv setzen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
msgid "Vertical slider - Set upper thumb to current thumb"
msgstr "Vertikaler Schieberegler - Oberen Schieber auf aktuellen setzen"
#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271
msgid "View"
msgstr "Ansicht"
@ -10289,14 +10291,6 @@ msgstr "Breite der Verbindungsstäbe, die das Objekt und die erzeugte Grundschic
msgid "Width of the display"
msgstr "Displaybreite"
#: src/slic3r/GUI/PresetHints.cpp:47
msgid "will always run at %1%%%"
msgstr "wird immer mit %1%%% laufen"
#: src/slic3r/GUI/PresetHints.cpp:54
msgid "will be turned off."
msgstr "wird abgeschaltet."
#: src/libslic3r/PrintConfig.cpp:2584
msgid "Will inflate or deflate the sliced 2D polygons according to the sign of the correction."
msgstr "Vergrößert oder verringert die geslicten 2D-Polygone entsprechend dem Vorzeichen der Korrektur."
@ -10375,6 +10369,10 @@ msgstr "Weltkoordinaten"
msgid "Would you like to install it?\n\nNote that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n\nUpdated configuration bundles:"
msgstr "Möchten Sie dies installieren?\n\nBeachten Sie, dass zuerst eine Momentaufnahme der gesamten Konfiguration erstellt wird. Diese kann dann jederzeit wiederhergestellt werden, falls es ein Problem mit der neuen Version gibt.\n\nAktualisierte Konfigurationssammlungen:"
#: src/slic3r/GUI/GUI_App.cpp:1802
msgid "Would you like to stop uploads and close the program?"
msgstr "Möchten Sie die Uploads stoppen und das Programm schließen?"
#: src/libslic3r/miniz_extension.cpp:151
msgid "write calledback failed"
msgstr "Schreibabruf fehlgeschlagen"
@ -10456,6 +10454,10 @@ 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/NotificationManager.hpp:459
msgid "You have just added a G-code for color change, but its value is empty.\nTo export the G-code correctly, check the \"Color Change G-code\" in \"Printer Settings > Custom G-code\""
msgstr "Sie haben gerade einen G-Code für Farbwechsel hinzugefügt, aber sein Wert ist leer.\nUm den G-Code korrekt zu exportieren, überprüfen Sie den \"Farbwechsel-G-Code\" unter \"Druckereinstellungen > Benutzerdefinierter G-Code\"."
#: src/slic3r/GUI/SavePresetDialog.cpp:277
msgid "You have selected physical printer \"%1%\" \nwith related printer preset \"%2%\""
msgstr "Sie haben den physischen Drucker \"%1%\" ausgewählt \nmit der zugehörigen Druckervoreinstellung \"%2%\"."
@ -10478,8 +10480,8 @@ msgid "You need to restart %s to make the changes effective."
msgstr "Sie müssen %s neu starten, damit die Änderungen wirksam werden."
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468
msgid "You should to change a name of your printer device. It can't be saved."
msgstr "Sie sollten den Namen Ihres Druckers ändern. Er kann nicht gespeichert werden."
msgid "You should change the name of your printer device."
msgstr "Sie sollten den Namen Ihres Druckers ändern."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3884
#, possible-c-format
@ -10510,6 +10512,10 @@ msgstr "Ihre Datei wurde repariert."
msgid "Your object appears to be too large, so it was automatically scaled down to fit your print bed."
msgstr "Ihr Objekt scheint zu groß zu sein. Es wurde deshalb automatisch verkleinert, um auf Ihre Druckplatte zu passen."
#: src/libslic3r/GCode.cpp:1261
msgid "Your print is very close to the priming regions. Make sure there is no collision."
msgstr "Ihr Druck ist sehr nahe an den Priming-Bereichen. Stellen Sie sicher, dass es keine Kollision gibt."
#: src/libslic3r/PrintConfig.cpp:2428
msgid "Z offset"
msgstr "Z-Abstand"

View file

@ -19,11 +19,6 @@ msgstr "\"%1%\" está desactivado porque \"%2%\" está en la categoría \"%3%\".
msgid "%"
msgstr "%"
#: src/slic3r/GUI/GLCanvas3D.cpp:969
#, possible-c-format
msgid "%.2f - %.2f mm"
msgstr "%.2f - %.2f mm"
#. TRN Remove/Delete
#: src/slic3r/GUI/Tab.cpp:3425
msgid "%1% Preset"
@ -296,10 +291,6 @@ msgstr "(Re)Laminar A&hora"
msgid "(Unknown)"
msgstr "(Desconocido)"
#: src/slic3r/GUI/Plater.cpp:1195
msgid "(weight with spool)"
msgstr "(peso con bobina)"
#: src/slic3r/GUI/MainFrame.cpp:1491
msgid ") not found."
msgstr ") no encontrado."
@ -386,11 +377,6 @@ msgstr "Acerca de %s"
msgid "above"
msgstr "sobre"
#: src/slic3r/GUI/GLCanvas3D.cpp:965
#, possible-c-format
msgid "above %.2f mm"
msgstr "sobre %.2f mm"
#: src/libslic3r/PrintConfig.cpp:1677
msgid "Above Z"
msgstr "Encima de Z"
@ -744,6 +730,10 @@ msgstr "Todas las superficies superiores"
msgid "allocation failed"
msgstr "asignación fallida"
#: src/slic3r/GUI/Preferences.cpp:161 src/slic3r/GUI/Preferences.cpp:165
msgid "Allow just a single PrusaSlicer instance"
msgstr "Permitir una sola instancia de PrusaSlicer"
#: src/slic3r/GUI/Plater.cpp:3915
msgid "Along X axis"
msgstr "A lo largo del eje X"
@ -1011,6 +1001,10 @@ msgstr "Velocidad automática (avanzado)"
msgid "Avoid crossing perimeters"
msgstr "Evita cruzar perímetros"
#: src/libslic3r/PrintConfig.cpp:188
msgid "Avoid crossing perimeters - Max detour length"
msgstr "Evitar cruzar perímetros - Longitud máxima del desvío"
#: src/slic3r/GUI/Tab.cpp:3705
msgid "BACK ARROW"
msgstr "FLECHA HACIA ATRÁS"
@ -1388,6 +1382,11 @@ msgstr "Comprueba si hay actualizaciones de configuración"
msgid "Check for updates"
msgstr "Comprueba si hay act&ualizaciones"
#: src/slic3r/Utils/PresetUpdater.cpp:412
#: src/slic3r/Utils/PresetUpdater.cpp:420
msgid "checking install indices"
msgstr "comprobando índices de instalación"
#: src/slic3r/GUI/BedShapeDialog.cpp:608
msgid "Choose a file to import bed texture from (PNG/SVG):"
msgstr "Escoge un archivo para importar la textura de la base de impresión (PNG/SVG):"
@ -1433,10 +1432,6 @@ msgstr "Círculo"
msgid "Circular"
msgstr "Circular"
#: src/slic3r/GUI/GLCanvas3D.cpp:3961
msgid "Clearance size"
msgstr "Espacio de la separación"
#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067
msgid "Click right mouse button to open/close History"
msgstr "Clic con botón derecho del ratón para abrir/cerrar Historia"
@ -1511,11 +1506,6 @@ msgstr "Cambio de color (\"%1%\")"
msgid "Color change (\"%1%\") for Extruder %2%"
msgstr "Cambio de color (\"%1%\") para el Extrusor %2%"
#: src/slic3r/GUI/GLCanvas3D.cpp:1001
#, possible-c-format
msgid "Color change for Extruder %d at %.2f mm"
msgstr "Cambio de color para Extrusor %d en %.2f mm"
#: src/slic3r/GUI/Tab.cpp:2203
msgid "Color Change G-code"
msgstr "Código G Cambio Color"
@ -1729,6 +1719,22 @@ msgstr "Copiar al portapapeles"
msgid "Copy to Clipboard"
msgstr "Copiar al portapapeles"
#: src/slic3r/GUI/AboutDialog.cpp:304
msgid "Copy Version Info"
msgstr "Copiar Información de Versión"
#: src/slic3r/Utils/PresetUpdater.cpp:84
msgid "Copying of file %1% to %2% failed.\nError message : %3%\nCopying was triggered by function: %4%"
msgstr "Copia del archivo %1% a %2% fallida.\nMensaje de error : %3%\nLa copia fue activada por la función: %4%"
#: src/slic3r/Utils/PresetUpdater.cpp:91
msgid "Copying of file %1% to %2% failed. Permissions fail at target file after copying.\nError message : %3%\nCopying was triggered by function: %4%"
msgstr "Copia del archivo %1% a %2% fallida. Los permisos fallan en el archivo de destino después de copiar. \nMensaje de error : %3%\nLa copia fue activada por la función: %4%"
#: src/slic3r/Utils/PresetUpdater.cpp:70
msgid "Copying of file %1% to %2% failed. Permissions fail at target file before copying.\nError message : %3%\nThis error happend during %4% phase."
msgstr "Copia del archivo %1% a %2% fallida. Los permisos fallan en el archivo de destino antes de copiar.\nMensaje de error : %3%\n Este error ocurrió durante la fase %4%."
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156
msgid "Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."
msgstr "La copia del código G temporal ha finalizado, pero el código exportado no se pudo abrir durante la verificación de la copia. El código G de salida está en %1%.tmp."
@ -1826,6 +1832,10 @@ msgstr "Crear pad alrededor del objeto e ignorar la elevación del soporte"
msgid "Critical angle"
msgstr "Ángulo crítico"
#: src/slic3r/GUI/GUI_App.cpp:589
msgid "Critical error"
msgstr "Error crítico"
#: src/libslic3r/PrintConfig.cpp:2832
msgid "Cross"
msgstr "Cruzado"
@ -1894,6 +1904,10 @@ msgstr "Configuración personalizada de impresora"
msgid "Custom profile name:"
msgstr "Nombre impresora personalizada:"
#: src/slic3r/GUI/Plater.cpp:3397
msgid "Custom supports and seams were removed after repairing the mesh."
msgstr "Los soportes y las costuras personalizadas se quitaron después de reparar la malla."
#: src/slic3r/GUI/DoubleSlider.cpp:1135
msgid "Custom template (\"%1%\")"
msgstr "Plantilla personalizada (\"%1%\")"
@ -1979,10 +1993,6 @@ msgstr "Perfil de filamento por defecto"
msgid "Default filament profile associated with the current printer profile. On selection of the current printer profile, this filament profile will be activated."
msgstr "Perfil de filamento por defecto asociado con el perfil de impresora actual. Al seleccionar el perfil de impresora actual se activará este perfil de filamento."
#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939
msgid "Default print color"
msgstr "Color de impresión predeterminado"
#: src/slic3r/GUI/Tab.cpp:1302
msgid "default print profile"
msgstr "perfil de impresión por defecto"
@ -2433,9 +2443,13 @@ msgstr "Duplicar por cuadrícula"
msgid "Duration"
msgstr "Duración"
#: src/slic3r/GUI/PresetHints.cpp:39
msgid "During the other layers, fan"
msgstr "Durante las otras capas, el ventilador"
#: src/slic3r/GUI/PresetHints.cpp:51
msgid "During the other layers, fan will always run at %1%%%"
msgstr "Durante el resto de capas, el ventilador siempre funcionará al %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:58
msgid "During the other layers, fan will be turned off."
msgstr "Durante las otras capas, el ventilador se apagará."
#: src/libslic3r/PrintConfig.cpp:2833
msgid "Dynamic"
@ -2770,6 +2784,10 @@ msgstr "Error: %s"
msgid "ERROR: not enough resources to execute a new job."
msgstr "ERROR: no hay suficientes recursos para ejecutar el trabajo."
#: src/slic3r/GUI/Plater.cpp:3374
msgid "ERROR: Please close all manipulators available from the left toolbar before fixing the mesh."
msgstr "ERROR: Cierra todos los manipuladores disponibles en la barra de herramientas izquierda antes de arreglar la malla."
#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557
#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125
#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196
@ -3071,10 +3089,6 @@ msgstr "El extrusor cambia a"
msgid "Extruder clearance"
msgstr "Separación del extrusor"
#: src/slic3r/GUI/Tab.cpp:1563
msgid "Extruder clearance (mm)"
msgstr "Distancia libre del extrusor (mm)"
#: src/libslic3r/PrintConfig.cpp:558
msgid "Extruder Color"
msgstr "Color del extrusor"
@ -3155,9 +3169,9 @@ msgstr "No se pudo cargar el modelo de entrada."
msgid "Failed processing of the output_filename_format template."
msgstr "Error al procesar la plantilla output_filename_format."
#: src/slic3r/GUI/PresetHints.cpp:41
msgid "Fan"
msgstr "Ventilador"
#: src/slic3r/GUI/GUI_App.cpp:1648
msgid "Failed to activate configuration snapshot."
msgstr "No se pudo activar la instantánea de configuración."
#: src/slic3r/GUI/Tab.cpp:1802
msgid "Fan settings"
@ -3171,6 +3185,22 @@ msgstr "Velocidad del ventilador"
msgid "Fan Speed (%)"
msgstr "Velocidad Ventilador (%)"
#: src/slic3r/GUI/PresetHints.cpp:49
msgid "Fan speed will be ramped from zero at layer %1% to %2%%% at layer %3%."
msgstr "La velocidad del ventilador aumentará desde cero en la capa %1% a %2%%% en la capa %3%."
#: src/libslic3r/PrintConfig.cpp:1001
msgid "Fan speed will be ramped up linearly from zero at layer \"disable_fan_first_layers\" to maximum at layer \"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower than \"disable_fan_first_layers\", in which case the fan will be running at maximum allowed speed at layer \"disable_fan_first_layers\" + 1."
msgstr "La velocidad del ventilador aumentará linealmente desde cero en la capa \"disable_fan_first_layers\" al máximo en la capa \"full_fan_speed_layer\". \"full_fan_speed_layer\" será ignorada si es menor que \"disable_fan_first_layers\",en cuyo caso el ventilador funcionará a la velocidad máxima permitida en la capa \"disable_fan_first_layers\" + 1."
#: src/slic3r/GUI/PresetHints.cpp:51
msgid "Fan will always run at %1%%%"
msgstr "El ventilador siempre funcionará al %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:58
msgid "Fan will be turned off."
msgstr "El ventilador se apagará."
#: src/libslic3r/PrintConfig.cpp:2548
msgid "Fast"
msgstr "Rápida"
@ -3416,6 +3446,10 @@ msgstr "Velocidad de la primera capa"
msgid "First layer volumetric"
msgstr "Primera capa volumétrica"
#: src/slic3r/GUI/Plater.cpp:3380
msgid "Fix through NetFabb"
msgstr "Reparar mediante NetFabb"
#: src/slic3r/GUI/GUI_ObjectList.cpp:1776
msgid "Fix through the Netfabb"
msgstr "Reparar mediante Netfabb"
@ -3521,6 +3555,10 @@ msgstr "Frontal"
msgid "Front View"
msgstr "Vista frontal"
#: src/libslic3r/PrintConfig.cpp:1000
msgid "Full fan speed at layer"
msgstr "Velocidad máxima del ventilador en la capa"
#: src/slic3r/GUI/Tab.cpp:1331
msgid "full profile name"
msgstr "nombre completo perfil"
@ -3549,6 +3587,10 @@ msgstr "Tipo de código G"
msgid "G-code preview"
msgstr "Previsualización código G"
#: src/libslic3r/PrintConfig.cpp:66
msgid "G-code thumbnails"
msgstr "Miniaturas de código G"
#: src/libslic3r/PrintConfig.cpp:3552
msgid "G-code viewer"
msgstr "Visor código G"
@ -3644,6 +3686,10 @@ msgstr "Generando buffer de vértice"
msgid "Generic"
msgstr "Genérico"
#: src/slic3r/Utils/PresetUpdater.cpp:600
msgid "getting config updates"
msgstr "obteniendo actualizaciones de configuración"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
msgid "Gizmo cut"
msgstr "Corte Gizmo"
@ -3880,6 +3926,10 @@ msgstr "Panal de abeja"
msgid "Horizontal shells"
msgstr "Carcasas horizontales"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:253
msgid "Horizontal Slider"
msgstr "Control Deslizante Horizontal"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:209
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213
#: src/slic3r/GUI/KBShortcutsDialog.cpp:238
@ -3892,30 +3942,6 @@ msgstr "Control deslizante horizontal - Mover el pulgar activo hacia la Izquierd
msgid "Horizontal slider - Move active thumb Right"
msgstr "Control deslizante horizontal - Mover el pulgar activo hacia la Derecha"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:238
msgid "Horizontal slider - Move current thumb Left"
msgstr "Control deslizante horizontal - Mover el pulgar actual hacia la Izquierda"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:239
msgid "Horizontal slider - Move current thumb Right"
msgstr "Control deslizante horizontal - Mover el pulgar actual hacia la Derecha"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:236
msgid "Horizontal slider - Set left thumb as active"
msgstr "Control deslizante horizontal - Establecer el pulgar izquierdo como activo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:236
msgid "Horizontal slider - Set left thumb to current thumb"
msgstr "Control deslizante horizontal - Establecer el pulgar izquierdo en el pulgar actual"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Horizontal slider - Set right thumb as active"
msgstr "Control deslizante horizontal - Establecer el pulgar derecho como activo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Horizontal slider - Set right thumb to current thumb"
msgstr "Control deslizante horizontal - Establecer el pulgar derecho en el pulgar actual"
#: src/libslic3r/PrintConfig.cpp:279
msgid "Horizontal width of the brim that will be printed around each object on the first layer."
msgstr "Ancho horizontal del borde que se imprimirá alrededor de cada objeto en la primera capa."
@ -4055,7 +4081,7 @@ msgstr "Si está habilitado, el botón de la barra lateral ocultable aparecerá
msgid "If enabled, the command line arguments are sent to an existing instance of GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the \"single_instance\" configuration value from application preferences."
msgstr "Si está habilitado, los argumentos de la línea de comando se envían a una instancia existente de GUI PrusaSlicer, o se activa una ventana de PrusaSlicer existente. Anula el valor de configuración \"single_instance\" de las preferencias de la aplicación."
#: src/slic3r/GUI/Preferences.cpp:278
#: src/slic3r/GUI/Preferences.cpp:294
msgid "If enabled, the descriptions of configuration parameters in settings tabs wouldn't work as hyperlinks. If disabled, the descriptions of configuration parameters in settings tabs will work as hyperlinks."
msgstr "Si está habilitado, las descripciones de los parámetros de configuración en las pestañas de configuración no funcionarán como hipervínculos. Si está deshabilitado, las descripciones de los parámetros de configuración en las pestañas de configuración funcionarán como hipervínculos."
@ -4256,6 +4282,10 @@ msgstr "en"
msgid "In this mode you can select only other %s Items%s"
msgstr "En este modo, solo puede seleccionar otros %s Items %s"
#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:423
msgid "Inches"
msgstr "Pulgadas"
#: src/slic3r/GUI/UpdateDialogs.cpp:230
msgid "Incompatible bundles:"
msgstr "Grupos incompatibles:"
@ -4335,10 +4365,6 @@ msgstr "Info"
msgid "Information"
msgstr "Información"
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547
msgid "Infornation"
msgstr "Información"
#: src/libslic3r/PrintConfig.cpp:1101
msgid "Inherits profile"
msgstr "Hereda el perfil"
@ -4355,6 +4381,11 @@ msgstr "Tiempo de exposición inicial"
msgid "Initial layer height"
msgstr "Altura de la capa inicial"
#: src/slic3r/GUI/Field.cpp:269
#, possible-c-format
msgid "Input value is out of range\nAre you sure that %s is a correct value and that you want to continue?"
msgstr "El valor introducido está fuera de rango\n¿Está seguro de que %s es un valor correcto y que deseas continuar?"
#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370
msgid "Input value is out of range"
msgstr "El valor introducido está fuera de rango"
@ -4363,6 +4394,10 @@ msgstr "El valor introducido está fuera de rango"
msgid "Inspect / activate configuration snapshots"
msgstr "Inspeccionar / activar instantáneas de configuración"
#: src/slic3r/Utils/PresetUpdater.cpp:120
msgid "install"
msgstr "instalar"
#: src/slic3r/GUI/ObjectDataViewModel.cpp:62
#: src/slic3r/GUI/ObjectDataViewModel.cpp:218
#, possible-c-format
@ -4432,6 +4467,10 @@ msgstr "Penetración inválida de la cabeza"
msgid "invalid header or archive is corrupted"
msgstr "encabezado inválido o archivo está dañado"
#: src/slic3r/GUI/Field.cpp:375
msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\""
msgstr "Formato de entrada inválido. Vector esperado de dimensiones en el siguiente formato: \"%1%\""
#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274
#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
msgid "Invalid numeric input."
@ -4521,21 +4560,6 @@ msgstr "Salta a la altura %s\no Fija el modo regla"
msgid "Jump to height %s\nSet ruler mode\nor Set extruder sequence for the entire print"
msgstr "Salta a la altura %s\nFija el modo regla\no Fija la secuencia del extrusor para toda la impresión"
#: src/slic3r/GUI/DoubleSlider.cpp:1075
#, possible-c-format
msgid "Jump to height %s or Set extruder sequence for the entire print"
msgstr "Salta a la altura %s o Fija la secuencia del extrusor para toda la impresión"
#: src/slic3r/GUI/DoubleSlider.cpp:1222
#, possible-c-format
msgid "Jump to height %s or Set ruler mode"
msgstr "Salta a la altura %s o Fija el modo regla"
#: src/slic3r/GUI/DoubleSlider.cpp:1220
#, possible-c-format
msgid "Jump to height %s Set ruler mode\n or Set extruder sequence for the entire print"
msgstr "Salta a la altura %s Fija el modo regla\n o Fija la secuencia del extrusor para toda la impresión"
#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852
msgid "Jump to move"
msgstr "Saltar al movimiento"
@ -4646,10 +4670,6 @@ msgstr "Capas y perímetros"
msgid "Layers and Perimeters"
msgstr "Capas y Perímetros"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:225
msgid "Layers Slider"
msgstr "Deslizador de Capas"
#: src/slic3r/GUI/OptionsGroup.cpp:293
msgctxt "Layers"
msgid "Bottom"
@ -4695,10 +4715,6 @@ msgstr "Botón izquierdo del ratón:"
msgid "Left View"
msgstr "Vista izquierda"
#: src/slic3r/GUI/GUI_Preview.cpp:339
msgid "Legend"
msgstr "Leyenda"
#: src/slic3r/GUI/GUI_Preview.cpp:1480
msgid "Legend/Estimated printing time"
msgstr "Leyenda/Tiempo de impresión estimado"
@ -5355,6 +5371,10 @@ msgstr "mm (cero para deshabilitar)"
msgid "mm or %"
msgstr "mm o %"
#: src/libslic3r/PrintConfig.cpp:193
msgid "mm or % (zero to disable)"
msgstr "mm or % (cero para deshabilitar)"
#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645
#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662
#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697
@ -5494,6 +5514,22 @@ msgstr "Mover el control deslizante activo hacia la Izquierda"
msgid "Move active slider thumb Right"
msgstr "Mover el control deslizante activo hacia la Derecha"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:220
msgid "Move active thumb Down"
msgstr "Mover el pulgar activo hacia Abajo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:241
msgid "Move active thumb Left"
msgstr "Mover el pulgar activo hacia la Izquierda"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:242
msgid "Move active thumb Right"
msgstr "Mover el pulgar activo hacia la Derecha"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
msgid "Move active thumb Up"
msgstr "Mover el pulgar activo hacia Arriba"
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
msgid "Move clipping plane"
msgstr "Mover plano de recorte"
@ -5502,14 +5538,6 @@ msgstr "Mover plano de recorte"
msgid "Move current slider thumb Down"
msgstr "Mover el control deslizante actual hacia Abajo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
msgid "Move current slider thumb Left"
msgstr "Mover el control deslizante actual hacia la Izquierda"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
msgid "Move current slider thumb Right"
msgstr "Mover el control deslizante actual hacia la Derecha"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
msgid "Move current slider thumb Up"
msgstr "Mover el control deslizante actual hacia Arriba"
@ -5518,16 +5546,6 @@ msgstr "Mover el control deslizante actual hacia Arriba"
msgid "Move drainage hole"
msgstr "Mover orificio de drenaje"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:209
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213
msgid "Move horizontal slider current thumb Left"
msgstr "Mover el control deslizante horizontal hacia la Izquierda"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:210
#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
msgid "Move horizontal slider current thumb Right"
msgstr "Mover el control deslizante horizontal hacia la Derecha"
#: src/slic3r/GUI/GLCanvas3D.cpp:3810
msgid "Move Object"
msgstr "Mover Objeto"
@ -5556,16 +5574,6 @@ msgstr "Mover la selección 10 mm en dirección Y positiva"
msgid "Move support point"
msgstr "Mover punto de soporte"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
#: src/slic3r/GUI/KBShortcutsDialog.cpp:212
msgid "Move vertical slider current thumb Down"
msgstr "Mover el control deslizante vertical hacia Abajo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
#: src/slic3r/GUI/KBShortcutsDialog.cpp:211
msgid "Move vertical slider current thumb Up"
msgstr "Mover el control deslizante vertical hacia Arriba"
#: src/slic3r/GUI/GCodeViewer.cpp:2492
msgid "Movement"
msgstr "Movimiento"
@ -5955,6 +5963,14 @@ msgstr "Modo de capa única"
msgid "One or more object were assigned an extruder that the printer does not have."
msgstr "Uno o más objetos fueron asignados a un extrusor no existente."
#: src/slic3r/GUI/GUI_App.cpp:1784
msgid "Ongoing uploads"
msgstr "Cargas en curso"
#: src/libslic3r/Print.cpp:1269
msgid "Only a single object may be printed at a time in Spiral Vase mode. Either remove all but the last object, or enable sequential mode by \"complete_objects\"."
msgstr "Solo se puede imprimir un objeto a la vez en el modo Vaso en espiral. Elimina todos menos el último objeto o habilita el modo secuencial en \"complete_objects\"."
#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840
msgid "Only create support if it lies on a build plate. Don't create support on a print."
msgstr "Solo crear soportes si está en contacto con la plataforma. No crea soporte en la impresión."
@ -6307,11 +6323,6 @@ msgstr "Pausar impresión (\"%1%\")"
msgid "Pause Print G-code"
msgstr "Pausar Código G de Impresión"
#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949
#: src/slic3r/GUI/GLCanvas3D.cpp:988
msgid "Pause print or custom G-code"
msgstr "Pausar impresión o código G personalizado"
#: src/libslic3r/PrintConfig.cpp:1147
msgid "Percent of a flow rate relative to object's normal layer height."
msgstr "Porcentaje de caudal relativo a la altura normal de la capa del objeto."
@ -6360,9 +6371,9 @@ msgstr "Impresoras físicas"
msgid "Pick another vendor supported by %s"
msgstr "Elije otro proveedor compatible con% s"
#: src/libslic3r/PrintConfig.cpp:66
msgid "Picture sizes to be stored into a .gcode and .sl1 files"
msgstr "Tamaños de imagen para almacenar en un archivo .gcode y .sl1"
#: src/libslic3r/PrintConfig.cpp:67
msgid "Picture sizes to be stored into a .gcode and .sl1 files, in the following format: \"XxY, XxY, ...\""
msgstr "Tamaños de imagen para almacenar en archivos .gcode y .sl1, en el siguiente formato: \"XxY, XxY, ...\""
#: src/libslic3r/PrintConfig.cpp:2822
msgid "Pillar connection mode"
@ -6485,22 +6496,22 @@ msgid "Preset \"%1%\" is not compatible with the new printer profile and it has
msgstr "El ajuste preestablecido \"%1%\" no es compatible con el nuevo perfil de impresora y tiene los siguientes cambios sin guardar:"
#: src/slic3r/GUI/SavePresetDialog.cpp:136
msgid "Preset with name \"%1%\" already exists and is imcopatible with selected printer."
msgstr "El ajuste predeterminado con el nombre \"%1%\" ya existe y no es compatible con la impresora seleccionada."
#: src/slic3r/GUI/SavePresetDialog.cpp:136
msgid "Preset with name \"%1%\" already exists and is incopatible with selected printer."
msgid "Preset with name \"%1%\" already exists and is incompatible with selected printer."
msgstr "El ajuste predeterminado con el nombre \"%1%\" ya existe y es incompatible con la impresora seleccionada."
#: src/slic3r/GUI/SavePresetDialog.cpp:148
msgid "Preset with name \"%1%\" already exists."
msgstr "Ya existe un preset con el nombre \"% 1%\"."
msgstr "Ya existe un preset con el nombre \"%1%\"."
#: src/slic3r/GUI/SavePresetDialog.cpp:219
msgctxt "PresetName"
msgid "Copy"
msgstr "Copiar"
#: src/slic3r/GUI/GLCanvas3D.cpp:3990
msgid "Press %1%left mouse button to enter the exact value"
msgstr "Presiona %1% botón izquierdo del ratón para introducir el valor exacto"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
msgid "Press to activate deselection rectangle"
msgstr "Presionar para activar el rectángulo de deselección"
@ -6719,6 +6730,10 @@ msgstr "PrusaSlicer detectó el almacenamiento de certificados SSL del sistema e
msgid "PrusaSlicer GUI initialization failed"
msgstr "Hubo un error al abrir el GUI de PrusaSlicer"
#: src/slic3r/GUI/GUI_App.cpp:586
msgid "PrusaSlicer has encountered a localization error. Please report to PrusaSlicer team, what language was active and in which scenario this issue happened. Thank you.\n\nThe application will now terminate."
msgstr "PrusaSlicer ha encontrado un error de localización. Por favor, informa al equipo de PrusaSlicer qué idioma estaba activo y en qué escenario ocurrió este problema. Gracias.\n\nLa aplicación terminará ahora."
#: src/slic3r/GUI/AboutDialog.cpp:285
msgid "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap community."
msgstr "PrusaSlicer está basado en Slic3r de Alessandro Ranellucci y la comunidad RepRap."
@ -7737,10 +7752,6 @@ msgstr "Sec."
msgid "Sequential printing"
msgstr "Impresión secuencial"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
msgid "Sequential Slider"
msgstr "Deslizador secuencial"
#: src/slic3r/GUI/Preferences.cpp:230
msgid "Sequential slider applied only to top layer"
msgstr "Deslizador secuencial aplicado solo a la capa superior"
@ -7786,6 +7797,14 @@ msgstr "Fija la secuencia del extrusor para toda la impresión"
msgid "Set extruder(tool) sequence"
msgstr "Establecer secuencia extrusor(herramienta)"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:243
msgid "Set left thumb as active"
msgstr "Establecer el pulgar izquierdo como activo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
msgid "Set lower thumb as active"
msgstr "Establecer el pulgar inferior como activo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
msgid "Set lower thumb to current slider thumb"
msgstr "Coloca el pulgar inferior en el control deslizante actual"
@ -7819,6 +7838,10 @@ msgstr "Establecer Imprimible"
msgid "Set Printable Instance"
msgstr "Establecer Instancia imprimible"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:244
msgid "Set right thumb as active"
msgstr "Establecer el pulgar derecho como activo"
#: src/slic3r/GUI/DoubleSlider.cpp:1836
msgid "Set ruler mode"
msgstr "Establecer modo de regla"
@ -7887,6 +7910,10 @@ msgstr "Establecer No imprimible"
msgid "Set Unprintable Instance"
msgstr "Establecer Instancia No Imprimible"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:221
msgid "Set upper thumb as active"
msgstr "Establecer el pulgar superior como activo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
msgid "Set upper thumb to current slider thumb"
msgstr "Coloca el pulgar superior en el control deslizante actual"
@ -8225,10 +8252,6 @@ msgstr "Slic3r puede subir archivos de código G a un host de impresión. Este c
msgid "Slic3r can upload G-code files to a printer host. This field should contain the API Key or the password required for authentication."
msgstr "Slic3r puede subir archivos de código G a un host de impresión. Este campo debe contener la clave API o la contraseña requerida para la autenticación."
#: src/libslic3r/PrintConfig.cpp:100
msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance."
msgstr "Slic3r puede subir archivos G-code a un host de impresión. Este campo debería contener el nombre de equipo, dirección IP o el URL de la instancia del host."
#: src/libslic3r/PrintConfig.cpp:100
msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance. Print host behind HAProxy with basic auth enabled can be accessed by putting the user name and password into the URL in the following format: https://username:password@your-octopi-address/"
msgstr "Slic3r puede cargar archivos de código G a un host de impresión. Este campo debe contener el nombre de host, la dirección IP o la URL de la instancia de host de la impresora. Se puede acceder al host de impresión mediante un HAProxy con la autenticación básica habilitada ingresando el nombre de usuario y la contraseña en la URL en el siguiente formato: https://nombredeusuario:contraseña@su-dirección-de-octopi /"
@ -8584,7 +8607,7 @@ msgstr "Comenzar en altura"
#: src/slic3r/GUI/Tab.cpp:1873 src/slic3r/GUI/Tab.cpp:2161
#: src/libslic3r/PrintConfig.cpp:1928 src/libslic3r/PrintConfig.cpp:1943
msgid "Start G-code"
msgstr "Comenzar el código G"
msgstr "Código G inicial"
#: src/slic3r/GUI/MainFrame.cpp:1133
msgid "Start new slicing process"
@ -8631,6 +8654,10 @@ msgstr "Archivo STL exportado a %s"
msgid "Stop at height"
msgstr "Parar en altura"
#: src/slic3r/GUI/GUI_App.cpp:1781
msgid "Stop them and continue anyway?"
msgstr "¿Detenerlos y continuar de todos modos?"
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295
msgid "Success!"
msgstr "¡Éxito!"
@ -8767,10 +8794,6 @@ msgstr "Soporta modo silencioso"
msgid "Supports work better, if the following feature is enabled:\n- Detect bridging perimeters"
msgstr "Los soportes funcionan mejor si la siguiente característica está habilitada:\n- Detectar perímetros con puentes"
#: src/slic3r/GUI/DoubleSlider.cpp:1824
msgid "Supprese show the ruler"
msgstr "Suprimir el mostrar la regla"
#: src/slic3r/GUI/Preferences.cpp:104
msgid "Suppress \" - default - \" presets"
msgstr "Suprima los ajustes iniciales \"- predeterminado -\""
@ -8985,6 +9008,18 @@ msgstr "Los siguientes modelos de impresoras FFF no tienen filamento seleccionad
msgid "The following presets were modified:"
msgstr "Los siguientes ajustes fueron modificados:"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:253
msgid "The following shortcuts are applicable in G-code preview when the horizontal slider is active"
msgstr "Los siguientes atajos son aplicables en la vista previa del código G cuando el control deslizante horizontal está activo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "The following shortcuts are applicable in G-code preview when the vertical slider is active"
msgstr "Los siguientes atajos son aplicables en la vista previa del código G cuando el control deslizante vertical está activo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
msgid "The following shortcuts are applicable when the specified gizmo is active"
msgstr "Los siguientes atajos son aplicables cuando el gizmo especificado está activo"
#: src/slic3r/GUI/ConfigWizard.cpp:2275
msgid "The following SLA printer models have no materials selected:"
msgstr "Los siguientes modelos de impresoras SLA no tienen filamento seleccionado:"
@ -9021,6 +9056,10 @@ msgstr "La distancia máxima entre dos pilares par que se unan entre si. Un valo
msgid "The max length of a bridge"
msgstr "La longitud máxima de un puente"
#: src/libslic3r/PrintConfig.cpp:190
msgid "The maximum detour length for avoid crossing perimeters. If the detour is longer than this value, avoid crossing perimeters is not applied for this travel path. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path."
msgstr "La longitud máxima del desvío para evitar cruzar perímetros. Si el desvío es más largo que este valor, el evitar cruzar perímetros no se aplica para esta ruta de viaje. La longitud del desvío se puede especificar como valor absoluto o como porcentaje (por ejemplo, 50%) de un desplazamiento directo."
#: src/libslic3r/PrintConfig.cpp:2878
msgid "The minimum distance of the pillar base from the model in mm. Makes sense in zero elevation mode where a gap according to this parameter is inserted between the model and the pad."
msgstr "La distancia mínima del modelo a la base de pilares en mm. Tiene sentido en el modo de cero elevación donde hay un hueco de acuerdo a cuando este parámetro se introduce entre el modelo y el pad."
@ -9029,6 +9068,14 @@ msgstr "La distancia mínima del modelo a la base de pilares en mm. Tiene sentid
msgid "The name cannot be empty."
msgstr "El nombre no puede estar vacío."
#: src/slic3r/GUI/SavePresetDialog.cpp:152
msgid "The name cannot end with space character."
msgstr "El nombre no puede terminar con un carácter de espacio."
#: src/slic3r/GUI/SavePresetDialog.cpp:147
msgid "The name cannot start with space character."
msgstr "El nombre no puede empezar con un carácter de espacio."
#: src/libslic3r/PrintConfig.cpp:219
msgid "The number of bottom solid layers is increased above bottom_solid_layers if necessary to satisfy minimum thickness of bottom shell."
msgstr "El número de capas sólidas en la base se incrementa por encima de bottom_solid_layers si es necesario para asegurar un espesor mínimo en la pared de inferior."
@ -9130,10 +9177,6 @@ msgstr "La velocidad para las retracciones (solo se aplica al motor del extrusor
msgid "The Spiral Vase mode requires:\n- one perimeter\n- no top solid layers\n- 0% fill density\n- no support material\n- Ensure vertical shell thickness enabled\n- Detect thin walls disabled"
msgstr "El modo Vaso Espiral necesita:\n-un perímetro\n-cero capas de tapa superior\n-0% densidad de relleno\n-sin soportes\n-Comprueba que está activado el espesor de pared vertical\n-Desactiva la detección de paredes finas"
#: src/libslic3r/Print.cpp:1263
msgid "The Spiral Vase option can only be used when printing a single object."
msgstr "La opción Vaso en espiral solo puede ser usada cuando se imprime un solo objeto."
#: src/libslic3r/Print.cpp:1270
msgid "The Spiral Vase option can only be used when printing single material objects."
msgstr "La opción Vaso en espiral solo puede ser usada al imprimir objetos de un solo material."
@ -9161,6 +9204,10 @@ msgstr "Los ajustes proporcionados causarán una impresión vacía."
msgid "The thickness of the pad and its optional cavity walls."
msgstr "El grosor de las pads y sus paredes de cavidad opcionales."
#: src/slic3r/GUI/GUI_App.cpp:1781
msgid "The uploads are still ongoing"
msgstr "Las subidas aún están en curso"
#: src/libslic3r/PrintConfig.cpp:2053
msgid "The vertical distance between object and support material interface. Setting this to 0 will also prevent Slic3r from using bridge flow and speed for the first object layer."
msgstr "La distancia vertical entre el objeto y la interfaz del material de soporte. Establecer esto en 0 también evitará que Slic3r use el flujo y la velocidad del puente para la primera capa de los objetos."
@ -9314,9 +9361,9 @@ msgstr "Esta característica permite combinar el relleno y acelerar la impresió
msgid "This feature allows to force a solid layer every given number of layers. Zero to disable. You can set this to any value (for example 9999); Slic3r will automatically choose the maximum possible number of layers to combine according to nozzle diameter and layer height."
msgstr "Esta característica permite forzar una capa sólida en cada número de capas. Cero para deshabilitar. Puede establecer esto en cualquier valor (por ejemplo, 9999); Slic3r seleccionará automáticamente la cantidad máxima posible de capas para combinar según el diámetro de la boquilla y la altura de la capa."
#: src/libslic3r/PrintConfig.cpp:1910
msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object."
msgstr "Esta función aumentará Z gradualmente mientras imprime un objeto de pared simple para eliminar cualquier costura visible. Esta opción requiere un perímetro único, sin relleno, sin capas sólidas superiores y sin material de soporte. Todavía puede establecer cualquier cantidad de capas sólidas inferiores, así como bucles de falda / balsa. No funcionará al imprimir más de un objeto."
#: src/libslic3r/PrintConfig.cpp:1995
msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than one single object."
msgstr "Esta función aumentará Z gradualmente mientras imprimes un objeto de pared simple para eliminar cualquier costura visible. Esta opción requiere un perímetro único, sin relleno, sin capas sólidas superiores y sin material de soporte. Puedes establecer cualquier cantidad de capas sólidas inferiores, así como los bucles de falda/balsa. No funcionará al imprimir más de un objeto."
#: src/slic3r/GUI/Plater.cpp:2329
msgid "This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?"
@ -9395,10 +9442,6 @@ msgstr "Esta es la aceleración que su impresora usará para la primera capa. Es
msgid "This is the acceleration your printer will use for infill. Set zero to disable acceleration control for infill."
msgstr "Esta es la aceleración que su impresora usará para el relleno. Establezca con el valor cero para deshabilitar el control de aceleración para el relleno."
#: src/libslic3r/PrintConfig.cpp:1508
msgid "This is the acceleration your printer will use for perimeters. A high value like 9000 usually gives good results if your hardware is up to the job. Set zero to disable acceleration control for perimeters."
msgstr "Esta es la aceleración que su impresora usará para los perímetros. Un valor alto como 9000 generalmente da buenos resultados si su hardware está a la altura del trabajo. Establezca con el valor cero para deshabilitar el control de aceleración para los perímetros."
#: src/libslic3r/PrintConfig.cpp:1582
msgid "This is the acceleration your printer will use for perimeters. Set zero to disable acceleration control for perimeters."
msgstr "Esta es la aceleración que usará su impresora para los perímetros. Establezca con el valor cero para deshabilitar el control de aceleración de los perímetros."
@ -9478,7 +9521,7 @@ msgstr "Este procedimiento de inicio se inserta al principio, después de que cu
#: src/libslic3r/PrintConfig.cpp:1929
msgid "This start procedure is inserted at the beginning, after bed has reached the target temperature and extruder just started heating, and before extruder has finished heating. If PrusaSlicer detects M104 or M190 in your custom codes, such commands will not be prepended automatically so you're free to customize the order of heating commands and other custom actions. Note that you can use placeholder variables for all PrusaSlicer settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
msgstr "Este procedimiento de inicio se inserta al principio, después de que la bse ha alcanzado la temperatura objetivo y el extrusor acaba de comenzar a calentar, y antes de que el extrusor haya terminado de calentar. Si PrusaSlicer detecta un M104 o M190 en tus códigos personalizados, dichos comandos no se agregarán automáticamente, por lo que se puede personalizar el orden de los comandos de calentamiento y otras acciones personalizadas. Ten en cuenta que puedes usar variables de marcador de posición para todas las configuraciones de PrusaSlicer, por lo que puedes colocar un comando \"M109 S [first_layer_temperature]\" donde lo desees."
msgstr "Este procedimiento de inicio se inserta al principio, después de que la base ha alcanzado la temperatura objetivo y el extrusor acaba de comenzar a calentar, y antes de que el extrusor haya terminado de calentar. Si PrusaSlicer detecta un M104 o M190 en tus códigos personalizados, dichos comandos no se agregarán automáticamente, por lo que se puede personalizar el orden de los comandos de calentamiento y otras acciones personalizadas. Ten en cuenta que puedes usar variables de marcador de posición para todas las configuraciones de PrusaSlicer, por lo que puedes colocar un comando \"M109 S [first_layer_temperature]\" donde lo desees."
#: src/libslic3r/PrintConfig.cpp:731
msgid "This string is edited by RammingDialog and contains ramming specific parameters."
@ -9575,10 +9618,6 @@ msgstr "Para usar un archivo CA personalizado, importa tu archivo CA al Almacén
msgid "Toggle %c axis mirroring"
msgstr "Activar reflejo del eje %c"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
msgid "Toggle vertical slider one layer mode ON/OFF"
msgstr "Activar/Desactivar el modo de una capa del control deslizante vertical"
#: src/libslic3r/miniz_extension.cpp:93
msgid "too many files"
msgstr "demasiados archivos"
@ -9836,11 +9875,6 @@ msgstr "Selección no soportada"
msgid "up to"
msgstr "hasta"
#: src/slic3r/GUI/GLCanvas3D.cpp:961
#, possible-c-format
msgid "up to %.2f mm"
msgstr "hasta %.2f mm"
#: src/slic3r/GUI/UpdateDialogs.cpp:38
msgid "Update available"
msgstr "Actualización disponible"
@ -9890,10 +9924,6 @@ msgstr "Capa superior"
msgid "Use another extruder"
msgstr "Usar otro extrusor"
#: src/slic3r/GUI/GLCanvas3D.cpp:3959
msgid "Use CTRL+left mouse key to enter text edit mode:"
msgstr "Usar CTRL + clic izquierdo del ratón para entrar al modo de edición de texto:"
#: src/slic3r/GUI/Preferences.cpp:220
msgid "Use custom size for toolbar icons"
msgstr "Usar tamaño personalizado para los iconos de la barra de herramientas"
@ -10065,13 +10095,9 @@ msgstr "versión"
msgid "Vertical shells"
msgstr "Carcasas verticales"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:234
msgid "Vertical slider - Add color change marker for current layer"
msgstr "Control deslizante vertical - Añadir marcador de cambio de color para la capa actual"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
msgid "Vertical slider - Delete color change marker for current layer"
msgstr "Control deslizante vertical - Eliminar marcador de cambio de color para la capa actual"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Vertical Slider"
msgstr "Control Deslizante Vertical"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
#: src/slic3r/GUI/KBShortcutsDialog.cpp:212
@ -10085,30 +10111,6 @@ msgstr "Control deslizante vertical - Mover el pulgar activo hacia Abajo"
msgid "Vertical slider - Move active thumb Up"
msgstr "Control deslizante vertical - Mover el pulgar activo hacia Arriba"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:231
msgid "Vertical slider - Move current thumb Down"
msgstr "Control deslizante vertical - Mover el pulgar actual hacia Abajo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
msgid "Vertical slider - Move current thumb Up"
msgstr "Control deslizante vertical - Mover el pulgar actual hacia Arriba"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:233
msgid "Vertical slider - Set lower thumb as active"
msgstr "Control deslizante vertical - Establecer el pulgar inferior como activo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:233
msgid "Vertical slider - Set lower thumb to current thumb"
msgstr "Control deslizante vertical - Establecer el pulgar inferior en el pulgar actual"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
msgid "Vertical slider - Set upper thumb as active"
msgstr "Control deslizante vertical - Establecer el pulgar superior como activo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
msgid "Vertical slider - Set upper thumb to current thumb"
msgstr "Control deslizante vertical - Establecer el pulgar superior en el pulgar actual"
#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271
msgid "View"
msgstr "Vista"
@ -10289,14 +10291,6 @@ msgstr "Ancho de los palitos de apoyo que conectan la pieza y la base generada."
msgid "Width of the display"
msgstr "Ancho de la pantalla"
#: src/slic3r/GUI/PresetHints.cpp:47
msgid "will always run at %1%%%"
msgstr "siempre funcionará al %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:54
msgid "will be turned off."
msgstr "será apagada."
#: src/libslic3r/PrintConfig.cpp:2584
msgid "Will inflate or deflate the sliced 2D polygons according to the sign of the correction."
msgstr "Aumentará o reducirá los polígonos 2D laminados de acuerdo con el signo de la corrección."
@ -10375,6 +10369,10 @@ msgstr "Coordenadas mundiales"
msgid "Would you like to install it?\n\nNote that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n\nUpdated configuration bundles:"
msgstr "¿Te gustaría instalarlo?\n\nTen en cuenta que primero se creará una instantánea de la configuración. Así que se puede recuperar en cualquier momento en caso de que hubiera algún problema con la nueva versión.\nUpdated configuration bundles:"
#: src/slic3r/GUI/GUI_App.cpp:1802
msgid "Would you like to stop uploads and close the program?"
msgstr "¿Te gustaría detener las subidas y cerrar el programa?"
#: src/libslic3r/miniz_extension.cpp:151
msgid "write calledback failed"
msgstr "fallo write calledback"
@ -10456,6 +10454,10 @@ 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/NotificationManager.hpp:459
msgid "You have just added a G-code for color change, but its value is empty.\nTo export the G-code correctly, check the \"Color Change G-code\" in \"Printer Settings > Custom G-code\""
msgstr "Acabas de añadir un código G para el cambio de color, pero su valor está vacío.\nPara exportar el código G correctamente, marca \"Código G Cambio de Color\" in \"Configuración de la Impresora > Código G Personalizado\""
#: src/slic3r/GUI/SavePresetDialog.cpp:277
msgid "You have selected physical printer \"%1%\" \nwith related printer preset \"%2%\""
msgstr "Ha seleccionado una impresora física \"%1%\" \ncon preajuste de impresora relacionado \"%2%\""
@ -10478,8 +10480,8 @@ msgid "You need to restart %s to make the changes effective."
msgstr "Es necesario reiniciar %s para hacer los cambios efectivos."
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468
msgid "You should to change a name of your printer device. It can't be saved."
msgstr "Debería cambiar el nombre de su dispositivo de impresión. No se puede guardar."
msgid "You should change the name of your printer device."
msgstr "Debería cambiar el nombre de su dispositivo de impresión."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3884
#, possible-c-format
@ -10510,6 +10512,10 @@ msgstr "Tu fichero fue reparado."
msgid "Your object appears to be too large, so it was automatically scaled down to fit your print bed."
msgstr "Tu pieza parece demasiado grande, así que se ha escalado automáticamente para que pueda caber en la base de impresión."
#: src/libslic3r/GCode.cpp:1261
msgid "Your print is very close to the priming regions. Make sure there is no collision."
msgstr "Tu impresión está muy cerca de las regiones de purga. Asegúrate de que no hay colisiones."
#: src/libslic3r/PrintConfig.cpp:2428
msgid "Z offset"
msgstr "Ajuste en altura Z"

View file

@ -19,11 +19,6 @@ msgstr "\"%1%\" est désactivé car \"%2%\" est activé dans la catégorie \"%3%
msgid "%"
msgstr "%"
#: src/slic3r/GUI/GLCanvas3D.cpp:969
#, possible-c-format
msgid "%.2f - %.2f mm"
msgstr "%.2f - %.2f mm"
#. TRN Remove/Delete
#: src/slic3r/GUI/Tab.cpp:3425
msgid "%1% Preset"
@ -296,10 +291,6 @@ msgstr "(Re)Découper Main&tenant"
msgid "(Unknown)"
msgstr "(Inconnu)"
#: src/slic3r/GUI/Plater.cpp:1195
msgid "(weight with spool)"
msgstr "(poids avec la bobine)"
#: src/slic3r/GUI/MainFrame.cpp:1491
msgid ") not found."
msgstr ") non trouvé."
@ -386,11 +377,6 @@ msgstr "Au sujet de %s"
msgid "above"
msgstr "au-dessus"
#: src/slic3r/GUI/GLCanvas3D.cpp:965
#, possible-c-format
msgid "above %.2f mm"
msgstr "au dessus de %.2f mm"
#: src/libslic3r/PrintConfig.cpp:1677
msgid "Above Z"
msgstr "Au-delà de Z"
@ -744,6 +730,10 @@ msgstr "Toutes les surfaces supérieures"
msgid "allocation failed"
msgstr "échec de l'allocation"
#: src/slic3r/GUI/Preferences.cpp:161 src/slic3r/GUI/Preferences.cpp:165
msgid "Allow just a single PrusaSlicer instance"
msgstr "N'autoriser qu'une seule instance de PrusaSlicer"
#: src/slic3r/GUI/Plater.cpp:3915
msgid "Along X axis"
msgstr "Le long de l'axe X"
@ -1011,6 +1001,10 @@ msgstr "Vitesse automatique (avancé)"
msgid "Avoid crossing perimeters"
msgstr "Éviter de traverser les périmètres"
#: src/libslic3r/PrintConfig.cpp:188
msgid "Avoid crossing perimeters - Max detour length"
msgstr "Éviter de croiser les périmètres - Longueur de détour maximum"
#: src/slic3r/GUI/Tab.cpp:3705
msgid "BACK ARROW"
msgstr "FLÈCHE ARRIÈRE"
@ -1388,6 +1382,11 @@ msgstr "Vérifier les mises à jour de configuration"
msgid "Check for updates"
msgstr "Vérifier les mises à jo&ur"
#: src/slic3r/Utils/PresetUpdater.cpp:412
#: src/slic3r/Utils/PresetUpdater.cpp:420
msgid "checking install indices"
msgstr "vérification des indices d'installation"
#: src/slic3r/GUI/BedShapeDialog.cpp:608
msgid "Choose a file to import bed texture from (PNG/SVG):"
msgstr "Choisir un fichier à partir duquel importer la texture du plateau (PNG/SVG) :"
@ -1433,10 +1432,6 @@ msgstr "Cercle"
msgid "Circular"
msgstr "Circulaire"
#: src/slic3r/GUI/GLCanvas3D.cpp:3961
msgid "Clearance size"
msgstr "Espacement"
#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067
msgid "Click right mouse button to open/close History"
msgstr "Cliquez avec le bouton droit de la souris pour ouvrir/fermer l'historique"
@ -1511,11 +1506,6 @@ msgstr "Changement de couleur (\"%1%\")"
msgid "Color change (\"%1%\") for Extruder %2%"
msgstr "Changement de couleur (\"%1%\") pour l'extrudeur %2%"
#: src/slic3r/GUI/GLCanvas3D.cpp:1001
#, possible-c-format
msgid "Color change for Extruder %d at %.2f mm"
msgstr "Changement de couleur pour l'Extrudeur %d à %.2f mm"
#: src/slic3r/GUI/Tab.cpp:2203
msgid "Color Change G-code"
msgstr "G-code de changement de couleur"
@ -1729,6 +1719,22 @@ msgstr "Copier dans le presse-papier"
msgid "Copy to Clipboard"
msgstr "Copier dans le Presse-Papier"
#: src/slic3r/GUI/AboutDialog.cpp:304
msgid "Copy Version Info"
msgstr "Copier les Infos de Version"
#: src/slic3r/Utils/PresetUpdater.cpp:84
msgid "Copying of file %1% to %2% failed.\nError message : %3%\nCopying was triggered by function: %4%"
msgstr "La copie du fichier %1% vers %2% a échoué.\nMessage d'erreur : %3%\n La copie a été déclenchée par la fonction : %4%"
#: src/slic3r/Utils/PresetUpdater.cpp:91
msgid "Copying of file %1% to %2% failed. Permissions fail at target file after copying.\nError message : %3%\nCopying was triggered by function: %4%"
msgstr "La copie du fichier %1% vers %2% a échoué. Échec d'autorisation sur le fichier cible après copie.\nMessage d'erreur : %3%\n Cette erreur s'est produite au cours de la phase de %4%. "
#: src/slic3r/Utils/PresetUpdater.cpp:70
msgid "Copying of file %1% to %2% failed. Permissions fail at target file before copying.\nError message : %3%\nThis error happend during %4% phase."
msgstr "La copie du fichier %1% vers %2% a échoué. Échec d'autorisation sur le fichier cible avant copie.\nMessage d'erreur : %3%\nCette erreur s'est produite au cours de la phase de %4%. "
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156
msgid "Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."
msgstr "La copie du G-code temporaire est terminée mais le code exporté n'a pas pu être ouvert au cours de la vérification de copie. Le G-code de sortie se trouve en %1%.tmp."
@ -1826,6 +1832,10 @@ msgstr "Créer un socle autour de l'objet et ignorer l'élévation du support"
msgid "Critical angle"
msgstr "Angle critique"
#: src/slic3r/GUI/GUI_App.cpp:589
msgid "Critical error"
msgstr "Erreur critique"
#: src/libslic3r/PrintConfig.cpp:2832
msgid "Cross"
msgstr "Croiser"
@ -1894,6 +1904,10 @@ msgstr "Configuration d'une Imprimante Personnalisée"
msgid "Custom profile name:"
msgstr "Nom de profil personnalisé :"
#: src/slic3r/GUI/Plater.cpp:3397
msgid "Custom supports and seams were removed after repairing the mesh."
msgstr "Les supports personnalisés et les jointures ont été supprimés après la réparation du maillage."
#: src/slic3r/GUI/DoubleSlider.cpp:1135
msgid "Custom template (\"%1%\")"
msgstr "Modèle personnalisé (\"%1%\")"
@ -1979,10 +1993,6 @@ msgstr "Profil de filament par défaut"
msgid "Default filament profile associated with the current printer profile. On selection of the current printer profile, this filament profile will be activated."
msgstr "Profil de filament par défaut associé au profil d'imprimante courant. En sélectionnant le profil d'imprimante courant, ce profil de filament sera activé."
#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939
msgid "Default print color"
msgstr "Couleur d'impression par défaut"
#: src/slic3r/GUI/Tab.cpp:1302
msgid "default print profile"
msgstr "profil d'impression par défaut"
@ -2433,9 +2443,13 @@ msgstr "Dupliquer par grille"
msgid "Duration"
msgstr "Durée"
#: src/slic3r/GUI/PresetHints.cpp:39
msgid "During the other layers, fan"
msgstr "Pendant les autres couches, le ventilateur"
#: src/slic3r/GUI/PresetHints.cpp:51
msgid "During the other layers, fan will always run at %1%%%"
msgstr "Pour toutes les autres couches, le ventilateur fonctionnera toujours à %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:58
msgid "During the other layers, fan will be turned off."
msgstr "Pour les autres couches, le ventilateur sera désactivé."
#: src/libslic3r/PrintConfig.cpp:2833
msgid "Dynamic"
@ -2770,6 +2784,10 @@ msgstr "Erreur : %s"
msgid "ERROR: not enough resources to execute a new job."
msgstr "ERREUR : il n'y a pas assez de ressources pour exécuter une nouvelle tâche."
#: src/slic3r/GUI/Plater.cpp:3374
msgid "ERROR: Please close all manipulators available from the left toolbar before fixing the mesh."
msgstr "ERREUR : Veuillez fermer tous les manipulateurs disponibles dans la barre d'outils de gauche avant de réparer le maillage."
#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557
#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125
#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196
@ -3071,10 +3089,6 @@ msgstr "Extrudeur changé à"
msgid "Extruder clearance"
msgstr "Dégagement de l'extrudeur"
#: src/slic3r/GUI/Tab.cpp:1563
msgid "Extruder clearance (mm)"
msgstr "Dégagement de l'extrudeur (mm)"
#: src/libslic3r/PrintConfig.cpp:558
msgid "Extruder Color"
msgstr "Couleur de l'extrudeur"
@ -3155,9 +3169,9 @@ msgstr "Échec du chargement du modèle d'entrée."
msgid "Failed processing of the output_filename_format template."
msgstr "Échec du traitement du modèle output_filename_format."
#: src/slic3r/GUI/PresetHints.cpp:41
msgid "Fan"
msgstr "Ventilateur"
#: src/slic3r/GUI/GUI_App.cpp:1648
msgid "Failed to activate configuration snapshot."
msgstr "L'activation de l'instantané de configuration a échoué."
#: src/slic3r/GUI/Tab.cpp:1802
msgid "Fan settings"
@ -3171,6 +3185,22 @@ msgstr "Vitesse du ventilateur"
msgid "Fan Speed (%)"
msgstr "Vitesse du ventilateur (%)"
#: src/slic3r/GUI/PresetHints.cpp:49
msgid "Fan speed will be ramped from zero at layer %1% to %2%%% at layer %3%."
msgstr "La vitesse du ventilateur va augmenter depuis zéro pour la couche %1% jusqu'à %2%%% pour la couche %3%."
#: src/libslic3r/PrintConfig.cpp:1001
msgid "Fan speed will be ramped up linearly from zero at layer \"disable_fan_first_layers\" to maximum at layer \"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower than \"disable_fan_first_layers\", in which case the fan will be running at maximum allowed speed at layer \"disable_fan_first_layers\" + 1."
msgstr "La vitesse du ventilateur va augmenter de façon linéaire en partant de zéro pour la couche \"disable_fan_first_layers\" jusqu'au maximum pour la couche \"full_fan_speed_layer\". \"full_fan_speed_layer\" sera ignorée si inférieure à \"disable_fan_first_layers\", auquel cas le ventilateur fonctionnera à la vitesse maximum autorisée pour la couche \"disable_fan_first_layers\" +1. "
#: src/slic3r/GUI/PresetHints.cpp:51
msgid "Fan will always run at %1%%%"
msgstr "Le ventilateur fonctionnera toujours à %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:58
msgid "Fan will be turned off."
msgstr "Le ventilateur sera désactivé."
#: src/libslic3r/PrintConfig.cpp:2548
msgid "Fast"
msgstr "Rapide"
@ -3416,6 +3446,10 @@ msgstr "Vitesse de la première couche"
msgid "First layer volumetric"
msgstr "Volume de la première couche"
#: src/slic3r/GUI/Plater.cpp:3380
msgid "Fix through NetFabb"
msgstr "Réparer avec NetFabb"
#: src/slic3r/GUI/GUI_ObjectList.cpp:1776
msgid "Fix through the Netfabb"
msgstr "Corriger avec Netfabb"
@ -3521,6 +3555,10 @@ msgstr "Avant"
msgid "Front View"
msgstr "Vue Avant"
#: src/libslic3r/PrintConfig.cpp:1000
msgid "Full fan speed at layer"
msgstr "Ventilateur à pleine vitesse pour la couche"
#: src/slic3r/GUI/Tab.cpp:1331
msgid "full profile name"
msgstr "nom de profil complet"
@ -3549,6 +3587,10 @@ msgstr "Version du G-code"
msgid "G-code preview"
msgstr "Aperçu du G-code"
#: src/libslic3r/PrintConfig.cpp:66
msgid "G-code thumbnails"
msgstr "Vignettes G-code"
#: src/libslic3r/PrintConfig.cpp:3552
msgid "G-code viewer"
msgstr "Visionneuse de G-code"
@ -3644,6 +3686,10 @@ msgstr "Génération du tampon de vertex"
msgid "Generic"
msgstr "Générique"
#: src/slic3r/Utils/PresetUpdater.cpp:600
msgid "getting config updates"
msgstr "obtention des mises à jour de configuration"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
msgid "Gizmo cut"
msgstr "Couper le Gizmo"
@ -3880,6 +3926,10 @@ msgstr "Nid d'abeille"
msgid "Horizontal shells"
msgstr "Coques horizontales"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:253
msgid "Horizontal Slider"
msgstr "Barre de Défilement Horizontale"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:209
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213
#: src/slic3r/GUI/KBShortcutsDialog.cpp:238
@ -3892,30 +3942,6 @@ msgstr "Barre de défilement horizontale - Déplacer le curseur actif vers la Ga
msgid "Horizontal slider - Move active thumb Right"
msgstr "Barre de défilement horizontale - Déplacer le curseur actif vers la Droite"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:238
msgid "Horizontal slider - Move current thumb Left"
msgstr "Barre de défilement horizontale - Déplacer le curseur actuel vers la Gauche"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:239
msgid "Horizontal slider - Move current thumb Right"
msgstr "Barre de défilement horizontale - Déplacer vers la droite actuelle"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:236
msgid "Horizontal slider - Set left thumb as active"
msgstr "Barre de défilement horizontale - Définir le curseur de gauche comme actif"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:236
msgid "Horizontal slider - Set left thumb to current thumb"
msgstr "Barre de défilement horizontale - Régler le curseur de gauche sur le curseur actuel"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Horizontal slider - Set right thumb as active"
msgstr "Barre de défilement horizontale - Définir le curseur de droite comme actif"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Horizontal slider - Set right thumb to current thumb"
msgstr "Barre de défilement horizontale - Régler le curseur de droite sur le curseur actuel"
#: src/libslic3r/PrintConfig.cpp:279
msgid "Horizontal width of the brim that will be printed around each object on the first layer."
msgstr "Largeur horizontale de la bordure qui sera imprimée autour de chaque objet sur la première couche."
@ -4055,7 +4081,7 @@ msgstr "Si activé, le bouton de réduction de la barre latérale apparaîtra da
msgid "If enabled, the command line arguments are sent to an existing instance of GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the \"single_instance\" configuration value from application preferences."
msgstr "Si activé, les arguments de ligne de commande sont envoyés à une instance existante de la GUI de PrusaSlicer, ou une fenêtre existante de PrusaSlicer est activée. Remplace la valeur de configuration \"single_instance\" des préférences de l'application."
#: src/slic3r/GUI/Preferences.cpp:278
#: src/slic3r/GUI/Preferences.cpp:294
msgid "If enabled, the descriptions of configuration parameters in settings tabs wouldn't work as hyperlinks. If disabled, the descriptions of configuration parameters in settings tabs will work as hyperlinks."
msgstr "Si activé, les descriptions des paramètres de configuration dans les onglets de réglage ne fonctionneront pas comme hyperliens. Si désactivé, les descriptions des paramètres de configuration dans les onglets de réglage fonctionneront comme hyperliens."
@ -4256,6 +4282,10 @@ msgstr "in"
msgid "In this mode you can select only other %s Items%s"
msgstr "Dans ce mode vous ne pouvez sélectionner que d'autres %s Items %s"
#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:423
msgid "Inches"
msgstr "Pouces"
#: src/slic3r/GUI/UpdateDialogs.cpp:230
msgid "Incompatible bundles:"
msgstr "Lots incompatibles :"
@ -4335,10 +4365,6 @@ msgstr "Info"
msgid "Information"
msgstr "Information"
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547
msgid "Infornation"
msgstr "Information"
#: src/libslic3r/PrintConfig.cpp:1101
msgid "Inherits profile"
msgstr "Hérite du profil"
@ -4355,6 +4381,11 @@ msgstr "Temps d'exposition initial"
msgid "Initial layer height"
msgstr "Hauteur de couche initiale"
#: src/slic3r/GUI/Field.cpp:269
#, possible-c-format
msgid "Input value is out of range\nAre you sure that %s is a correct value and that you want to continue?"
msgstr "La valeur d'entrée est hors limites\nÊtes-vous certain que %s est une valeur correcte et que vous voulez continuer ?"
#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370
msgid "Input value is out of range"
msgstr "La valeur entrée est hors plage"
@ -4363,6 +4394,10 @@ msgstr "La valeur entrée est hors plage"
msgid "Inspect / activate configuration snapshots"
msgstr "Inspecter / activer les instantanés de configuration"
#: src/slic3r/Utils/PresetUpdater.cpp:120
msgid "install"
msgstr "installer"
#: src/slic3r/GUI/ObjectDataViewModel.cpp:62
#: src/slic3r/GUI/ObjectDataViewModel.cpp:218
#, possible-c-format
@ -4432,6 +4467,10 @@ msgstr "Pénétration de Tête invalide"
msgid "invalid header or archive is corrupted"
msgstr "entête non valide ou archive corrompue"
#: src/slic3r/GUI/Field.cpp:375
msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\""
msgstr "Format d'entrée non valide. Vecteur de dimensions attendu dans le format suivant : \"%1%\""
#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274
#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
msgid "Invalid numeric input."
@ -4521,21 +4560,6 @@ msgstr "Sauter à la hauteur %s\nou Définir le mode règle"
msgid "Jump to height %s\nSet ruler mode\nor Set extruder sequence for the entire print"
msgstr "Sauter à la hauteur %s\nDéfinir le mode règle\nou Définir la séquence d'extrusion pour toute l'impression"
#: src/slic3r/GUI/DoubleSlider.cpp:1075
#, possible-c-format
msgid "Jump to height %s or Set extruder sequence for the entire print"
msgstr "Sauter à la hauteur %s ou Définir la séquence d'extrusion pour toute l'impression"
#: src/slic3r/GUI/DoubleSlider.cpp:1222
#, possible-c-format
msgid "Jump to height %s or Set ruler mode"
msgstr "Sauter à la hauteur %s ou Définir le mode règle"
#: src/slic3r/GUI/DoubleSlider.cpp:1220
#, possible-c-format
msgid "Jump to height %s Set ruler mode\n or Set extruder sequence for the entire print"
msgstr "Sauter à la hauteur %s Définir le mode règle\nou Définir la séquence d'extrusion pour toute l'impression"
#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852
msgid "Jump to move"
msgstr "Sauter pour bouger"
@ -4646,10 +4670,6 @@ msgstr "Couches et périmètres"
msgid "Layers and Perimeters"
msgstr "Couches et Périmètres"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:225
msgid "Layers Slider"
msgstr "Barre de défilement des couches"
#: src/slic3r/GUI/OptionsGroup.cpp:293
msgctxt "Layers"
msgid "Bottom"
@ -4695,10 +4715,6 @@ msgstr "Bouton gauche de souris :"
msgid "Left View"
msgstr "Vue Gauche"
#: src/slic3r/GUI/GUI_Preview.cpp:339
msgid "Legend"
msgstr "Légende"
#: src/slic3r/GUI/GUI_Preview.cpp:1480
msgid "Legend/Estimated printing time"
msgstr "Légende/Temps d'impression estimé"
@ -5355,6 +5371,10 @@ msgstr "mm (zéro pour désactiver)"
msgid "mm or %"
msgstr "mm ou %"
#: src/libslic3r/PrintConfig.cpp:193
msgid "mm or % (zero to disable)"
msgstr "mm ou % (zéro pour désactiver)"
#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645
#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662
#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697
@ -5494,6 +5514,22 @@ msgstr "Déplacer la barre de défilement active vers la Gauche"
msgid "Move active slider thumb Right"
msgstr "Déplacer la barre de défilement active vers la Droite"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:220
msgid "Move active thumb Down"
msgstr "Déplacer le curseur actif vers le Bas"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:241
msgid "Move active thumb Left"
msgstr "Déplacer le curseur actif vers la Gauche"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:242
msgid "Move active thumb Right"
msgstr "Déplacer le curseur actif vers la Droite"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
msgid "Move active thumb Up"
msgstr "Déplacer le curseur actif vers le Haut"
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
msgid "Move clipping plane"
msgstr "Déplacer le plan de coupe"
@ -5502,14 +5538,6 @@ msgstr "Déplacer le plan de coupe"
msgid "Move current slider thumb Down"
msgstr "Déplacer la barre de défilement actuelle vers le Bas"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
msgid "Move current slider thumb Left"
msgstr "Déplacer la barre de défilement actuelle vers la Gauche"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
msgid "Move current slider thumb Right"
msgstr "Déplacer la barre de défilement actuelle vers la Droite"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
msgid "Move current slider thumb Up"
msgstr "Déplacer la barre de défilement actuelle vers le Haut"
@ -5518,16 +5546,6 @@ msgstr "Déplacer la barre de défilement actuelle vers le Haut"
msgid "Move drainage hole"
msgstr "Déplacer le trou de drainage"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:209
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213
msgid "Move horizontal slider current thumb Left"
msgstr "Déplacer la Barre de défilement horizontale vers la Gauche actuelle"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:210
#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
msgid "Move horizontal slider current thumb Right"
msgstr "Déplacer la barre de défilement horizontale vers la Droite actuelle"
#: src/slic3r/GUI/GLCanvas3D.cpp:3810
msgid "Move Object"
msgstr "Déplacer l'Objet"
@ -5556,16 +5574,6 @@ msgstr "Déplacer la sélection de 10 mm dans la direction positive Y"
msgid "Move support point"
msgstr "Déplacer un point de support"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
#: src/slic3r/GUI/KBShortcutsDialog.cpp:212
msgid "Move vertical slider current thumb Down"
msgstr "Déplacer la barre de défilement verticale vers le Bas actuel"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
#: src/slic3r/GUI/KBShortcutsDialog.cpp:211
msgid "Move vertical slider current thumb Up"
msgstr "Déplacer la barre de défilement verticale vers le Haut actuel"
#: src/slic3r/GUI/GCodeViewer.cpp:2492
msgid "Movement"
msgstr "Mouvement"
@ -5955,6 +5963,14 @@ msgstr "Mode couche unique"
msgid "One or more object were assigned an extruder that the printer does not have."
msgstr "Un ou plusieurs objets ont été affectés à un extrudeur que l'imprimante ne possède pas."
#: src/slic3r/GUI/GUI_App.cpp:1784
msgid "Ongoing uploads"
msgstr "Téléchargements en cours"
#: src/libslic3r/Print.cpp:1269
msgid "Only a single object may be printed at a time in Spiral Vase mode. Either remove all but the last object, or enable sequential mode by \"complete_objects\"."
msgstr "Vous ne pouvez imprimer qu'un seul objet à la fois en mode Vase Spirale. Vous devez soit retirer tous les objets sauf le dernier, soit activer le mode séquentiel avec \"complete_objects\"."
#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840
msgid "Only create support if it lies on a build plate. Don't create support on a print."
msgstr "Créer uniquement des supports reposant sur le plateau. Ne pas créer pas de supports sur une impression."
@ -6307,11 +6323,6 @@ msgstr "Mettre en pause l'impression (\"%1%\")"
msgid "Pause Print G-code"
msgstr "G-code de pause de l'impression"
#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949
#: src/slic3r/GUI/GLCanvas3D.cpp:988
msgid "Pause print or custom G-code"
msgstr "Pause d'impression ou G-code personnalisé"
#: src/libslic3r/PrintConfig.cpp:1147
msgid "Percent of a flow rate relative to object's normal layer height."
msgstr "Pourcentage d'un débit par rapport à la hauteur de couche normale de l'objet."
@ -6360,9 +6371,9 @@ msgstr "Imprimantes physiques"
msgid "Pick another vendor supported by %s"
msgstr "Choisissez un autre fournisseur pris en charge par %s"
#: src/libslic3r/PrintConfig.cpp:66
msgid "Picture sizes to be stored into a .gcode and .sl1 files"
msgstr "Tailles d'image devant être stockées dans des fichiers .gcode et .sl1"
#: src/libslic3r/PrintConfig.cpp:67
msgid "Picture sizes to be stored into a .gcode and .sl1 files, in the following format: \"XxY, XxY, ...\""
msgstr "Tailles de photo à stocker dans un fichier .gcode et .sl1, au format suivant : \"XxY, XxY, ...\""
#: src/libslic3r/PrintConfig.cpp:2822
msgid "Pillar connection mode"
@ -6485,11 +6496,7 @@ msgid "Preset \"%1%\" is not compatible with the new printer profile and it has
msgstr "Le préréglage \"%1%\" nest pas compatible avec le nouveau profil dimprimante et comporte les modifications non enregistrées suivantes :"
#: src/slic3r/GUI/SavePresetDialog.cpp:136
msgid "Preset with name \"%1%\" already exists and is imcopatible with selected printer."
msgstr "Le préréglage avec le nom \"%1%\" existe déjà et est incompatible avec l'imprimante sélectionnée."
#: src/slic3r/GUI/SavePresetDialog.cpp:136
msgid "Preset with name \"%1%\" already exists and is incopatible with selected printer."
msgid "Preset with name \"%1%\" already exists and is incompatible with selected printer."
msgstr "Un préréglage nommé \"%1%\" existe déjà et il est incompatible avec l'imprimante sélectionnée."
#: src/slic3r/GUI/SavePresetDialog.cpp:148
@ -6501,6 +6508,10 @@ msgctxt "PresetName"
msgid "Copy"
msgstr "Copie"
#: src/slic3r/GUI/GLCanvas3D.cpp:3990
msgid "Press %1%left mouse button to enter the exact value"
msgstr "Appuyez sur %1% clic gauche sur la souris pour saisir la valeur exacte "
#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
msgid "Press to activate deselection rectangle"
msgstr "Appuyer pour activer le rectangle de déselection"
@ -6719,6 +6730,10 @@ msgstr "PrusaSlicer a détecté un stockage de certificats SSL système dans : %
msgid "PrusaSlicer GUI initialization failed"
msgstr "L'initialisation de la GUI de PrusaSlicer a échoué"
#: src/slic3r/GUI/GUI_App.cpp:586
msgid "PrusaSlicer has encountered a localization error. Please report to PrusaSlicer team, what language was active and in which scenario this issue happened. Thank you.\n\nThe application will now terminate."
msgstr "PrusaSlicer a rencontré une erreur de localisation. Veuillez signaler à l'équipe PrusaSlicer quelle langue était active et dans quel scénario cette erreur s'est produite. Merci.\n\nL'application va maintenant fermer."
#: src/slic3r/GUI/AboutDialog.cpp:285
msgid "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap community."
msgstr "PrusaSlicer est basé sur Slic3r par Alessandro Ranellucci et la communauté RepRap."
@ -7737,10 +7752,6 @@ msgstr "Seq."
msgid "Sequential printing"
msgstr "Impression séquentielle"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
msgid "Sequential Slider"
msgstr "Barre de défilement séquentielle"
#: src/slic3r/GUI/Preferences.cpp:230
msgid "Sequential slider applied only to top layer"
msgstr "Barre de défilement séquentielle appliquée uniquement à la couche supérieure"
@ -7786,6 +7797,14 @@ msgstr "Définir la séquence d'extrusion pour l'ensemble de l'impression"
msgid "Set extruder(tool) sequence"
msgstr "Définir la séquence d'extrudeur (outil)"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:243
msgid "Set left thumb as active"
msgstr "Définir le curseur de gauche comme actif"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
msgid "Set lower thumb as active"
msgstr "Définir le curseur du bas comme actif"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
msgid "Set lower thumb to current slider thumb"
msgstr "Définir le curseur inférieur sur la position actuelle de la barre de défilement"
@ -7819,6 +7838,10 @@ msgstr "Définir Imprimable"
msgid "Set Printable Instance"
msgstr "Définir une Instance Imprimable"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:244
msgid "Set right thumb as active"
msgstr "Définir le curseur de droite comme actif"
#: src/slic3r/GUI/DoubleSlider.cpp:1836
msgid "Set ruler mode"
msgstr "Définir le mode règle"
@ -7887,6 +7910,10 @@ msgstr "Définir non-Imprimable"
msgid "Set Unprintable Instance"
msgstr "Définir une Instance non-Imprimable"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:221
msgid "Set upper thumb as active"
msgstr "Définir le curseur du haut comme actif"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
msgid "Set upper thumb to current slider thumb"
msgstr "Régler le curseur supérieur sur la position actuelle de la barre de défilement"
@ -8225,10 +8252,6 @@ msgstr "Slic3r peut envoyer des fichiers G-codes vers un hôte d'imprimante. Ce
msgid "Slic3r can upload G-code files to a printer host. This field should contain the API Key or the password required for authentication."
msgstr "Slic3r peut envoyer des fichiers G-code à un hôte d'impression. Ce champ doit contenir la clé d'API ou le mot de passe requis pour l'authentification."
#: src/libslic3r/PrintConfig.cpp:100
msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance."
msgstr "Slic3r peut télécharger des fichiers G-code vers un hôte d'impression. Ce champ doit contenir le nom d'hôte, l'adresse IP ou l'URL de l'instance hôte d'impression."
#: src/libslic3r/PrintConfig.cpp:100
msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance. Print host behind HAProxy with basic auth enabled can be accessed by putting the user name and password into the URL in the following format: https://username:password@your-octopi-address/"
msgstr "Slic3r peut télécharger des fichiers G-code vers un hôte d'impression. Ce champ doit contenir le nom de l'hôte, l'adresse IP ou l'URL d'instance de l'hôte d'impression. Vous pouvez accéder à un hôte d'impression se trouvant derrière HAProxy avec basic auth activé en mettant le nom d'utilisateur et le mot de passe dans l'URL en respectant le format suivant : https://username:password@your-octopi-address/"
@ -8631,6 +8654,10 @@ msgstr "Fichier STL exporté vers %s"
msgid "Stop at height"
msgstr "Hauteur d'arrêt"
#: src/slic3r/GUI/GUI_App.cpp:1781
msgid "Stop them and continue anyway?"
msgstr "Les arrêter et continuer malgré tout ?"
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295
msgid "Success!"
msgstr "Réussi !"
@ -8767,10 +8794,6 @@ msgstr "Supporte le mode silencieux"
msgid "Supports work better, if the following feature is enabled:\n- Detect bridging perimeters"
msgstr "Les supports fonctionnent mieux, si la fonctionnalité suivante est activée :\n- Détecter les périmètres de pontage"
#: src/slic3r/GUI/DoubleSlider.cpp:1824
msgid "Supprese show the ruler"
msgstr "Supprimer l'affichage de la règle"
#: src/slic3r/GUI/Preferences.cpp:104
msgid "Suppress \" - default - \" presets"
msgstr "Supprimer les préréglages \" - par défaut - \""
@ -8985,6 +9008,18 @@ msgstr "Les modèles d'imprimantes FFF suivants n'ont aucun filament sélectionn
msgid "The following presets were modified:"
msgstr "Les préréglages suivants ont été modifiés :"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:253
msgid "The following shortcuts are applicable in G-code preview when the horizontal slider is active"
msgstr "Les raccourcis suivants s'appliquent dans la prévisualisation G-code lorsque la barre de défilement horizontale est active"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "The following shortcuts are applicable in G-code preview when the vertical slider is active"
msgstr "Les raccourcis suivants s'appliquent dans la prévisualisation G-code lorsque la barre de défilement verticale est active"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
msgid "The following shortcuts are applicable when the specified gizmo is active"
msgstr "Les raccourcis suivants s'appliquent lorsque le gizmo spécifié est actif"
#: src/slic3r/GUI/ConfigWizard.cpp:2275
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é :"
@ -9021,6 +9056,10 @@ msgstr "La distance maximum entre deux piliers pour qu'ils soient reliés. Une v
msgid "The max length of a bridge"
msgstr "La longueur maximum d'un pont"
#: src/libslic3r/PrintConfig.cpp:190
msgid "The maximum detour length for avoid crossing perimeters. If the detour is longer than this value, avoid crossing perimeters is not applied for this travel path. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path."
msgstr "La longueur de détour maximum pour éviter de croiser les périmètres. Si le détour est plus long que cette valeur, l'option éviter les périmètres croisés ne s'applique pas pour ce chemin de déplacement. La longueur de détour peut être spécifiée soit comme une valeur absolue soit comme le pourcentage (par exemple 50%) d'un chemin de déplacement direct."
#: src/libslic3r/PrintConfig.cpp:2878
msgid "The minimum distance of the pillar base from the model in mm. Makes sense in zero elevation mode where a gap according to this parameter is inserted between the model and the pad."
msgstr "Distance minimum entre la base du pilier et le modèle en mm. Utile en mode élévation zéro où un espace correspondant à ce paramètre est inséré entre le modèle et le socle."
@ -9029,6 +9068,14 @@ msgstr "Distance minimum entre la base du pilier et le modèle en mm. Utile en m
msgid "The name cannot be empty."
msgstr "Le nom ne peut pas être vide."
#: src/slic3r/GUI/SavePresetDialog.cpp:152
msgid "The name cannot end with space character."
msgstr "Le nom ne peut pas se terminer par le caractère espace."
#: src/slic3r/GUI/SavePresetDialog.cpp:147
msgid "The name cannot start with space character."
msgstr "Le nom ne peut pas commencer par un caractère espace."
#: src/libslic3r/PrintConfig.cpp:219
msgid "The number of bottom solid layers is increased above bottom_solid_layers if necessary to satisfy minimum thickness of bottom shell."
msgstr "Le nombre de couches solides inférieures est augmenté au-dessus de bottom_solid_layers si nécessaire pour satisfaire l'épaisseur minimale de la coque inférieure."
@ -9130,10 +9177,6 @@ msgstr "La vitesse des rétractations (ne s'applique qu'au moteur de l'extrudeur
msgid "The Spiral Vase mode requires:\n- one perimeter\n- no top solid layers\n- 0% fill density\n- no support material\n- Ensure vertical shell thickness enabled\n- Detect thin walls disabled"
msgstr "Les prérequis du mode Vase Spiral sont :\n-Un seul périmètre\n-Aucunes couches solides supérieures\n-Une densité de remplissage de 0%\n-Pas de support\n-Vérifier que l'épaisseur de coque verticale est activée\n-La détection de parois fines doit être désactivée"
#: src/libslic3r/Print.cpp:1263
msgid "The Spiral Vase option can only be used when printing a single object."
msgstr "L'option Vase Spirale ne peut être utilisé que lors de l'impression d'un seul objet."
#: src/libslic3r/Print.cpp:1270
msgid "The Spiral Vase option can only be used when printing single material objects."
msgstr "L'option Vase Spirale ne peut être utilisé que lors de l'impression d'objets mono-matériau."
@ -9161,6 +9204,10 @@ msgstr "Les réglages fournis vont entraîner une impression vide."
msgid "The thickness of the pad and its optional cavity walls."
msgstr "L'épaisseur du socle et de ses parois de cavité optionnelles."
#: src/slic3r/GUI/GUI_App.cpp:1781
msgid "The uploads are still ongoing"
msgstr "Les téléchargements sont toujours en cours"
#: src/libslic3r/PrintConfig.cpp:2053
msgid "The vertical distance between object and support material interface. Setting this to 0 will also prevent Slic3r from using bridge flow and speed for the first object layer."
msgstr "Distance verticale entre l'objet et l'intercalaire du support. Régler cette valeur sur zéro empêchera Slic3r d'utiliser la vitesse et le débit des ponts pour la première couche de l'objet."
@ -9314,9 +9361,9 @@ msgstr "Cette fonction permet de combiner le remplissage afin d'accélérer l'im
msgid "This feature allows to force a solid layer every given number of layers. Zero to disable. You can set this to any value (for example 9999); Slic3r will automatically choose the maximum possible number of layers to combine according to nozzle diameter and layer height."
msgstr "Cette fonction permet de forcer l'impression d'une couche solide après le nombre de couches indiqué. Réglez sur zéro pour la désactiver. Vous pouvez indiquer n'importe quelle valeur (par exemple 9999); Slic3r choisira automatiquement le nombre maximum de couches a combiner en fonction du diamètre de la buse et de l'épaisseur des couches."
#: src/libslic3r/PrintConfig.cpp:1910
msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object."
msgstr "Cette fonction élèvera le Z graduellement en cas d'impression d'un objet à paroi unique, afin de rendre invisibles les jointures. Cette option nécessite de n'avoir qu'un seul périmètre, de ne pas avoir de remplissage, ni de surface solide supérieure, ni de support. Vous pouvez toujours choisir le nombre de surface solides inférieures de même que les boucles des jupes et des bordures. Cela ne fonctionnera pas si vous imprimez plus d'un objet."
#: src/libslic3r/PrintConfig.cpp:1995
msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than one single object."
msgstr "Cette fonction va élever Z progressivement au cours de l'impression d'un objet à paroi unique afin de supprimer toute jonction visible. Cette option requiert un périmètre unique, aucun remplissage, aucune couche supérieure solide et aucun matériau de support. Vous pouvez toujours paramétrer le nombre de couches inférieures que vous souhaitez de même que des boucles de jupe/bordure. Cela ne fonctionnera pas si vous imprimez plus d'un objet unique."
#: src/slic3r/GUI/Plater.cpp:2329
msgid "This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?"
@ -9395,10 +9442,6 @@ msgstr "L'accélération que l'imprimante utilisera pour la première couche. R
msgid "This is the acceleration your printer will use for infill. Set zero to disable acceleration control for infill."
msgstr "Il s'agit de l'accélération que votre imprimante utilisera pour le remplissage. Régler sur zéro afin de désactiver le contrôle de l'accélération pour le remplissage."
#: src/libslic3r/PrintConfig.cpp:1508
msgid "This is the acceleration your printer will use for perimeters. A high value like 9000 usually gives good results if your hardware is up to the job. Set zero to disable acceleration control for perimeters."
msgstr "L'accélération que votre imprimante utilisera pour les périmètres. Une valeur élevée comme 9000 donne généralement de bons résultats si votre matériel le permet. Régler sur zéro afin de désactiver le contrôle de l'accélération pour les périmètres."
#: src/libslic3r/PrintConfig.cpp:1582
msgid "This is the acceleration your printer will use for perimeters. Set zero to disable acceleration control for perimeters."
msgstr "L'accélération qui sera utilisée par votre imprimante pour les périmètres. Régler sur zéro pour désactiver l'accélération pour les périmètres."
@ -9575,10 +9618,6 @@ msgstr "Pour utiliser un fichier CA personnalisé, veuillez importer votre fichi
msgid "Toggle %c axis mirroring"
msgstr "Activer la symétrie sur l'axe %c"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
msgid "Toggle vertical slider one layer mode ON/OFF"
msgstr "Basculer le mode couche unique de la barre de défilement verticale sur ON/OFF"
#: src/libslic3r/miniz_extension.cpp:93
msgid "too many files"
msgstr "trop de fichiers"
@ -9836,11 +9875,6 @@ msgstr "Sélection non supportée"
msgid "up to"
msgstr "jusqu'à"
#: src/slic3r/GUI/GLCanvas3D.cpp:961
#, possible-c-format
msgid "up to %.2f mm"
msgstr "jusqu'à %.2f mm"
#: src/slic3r/GUI/UpdateDialogs.cpp:38
msgid "Update available"
msgstr "Mise à jour disponible"
@ -9890,10 +9924,6 @@ msgstr "Couche supérieure"
msgid "Use another extruder"
msgstr "Utiliser un autre extrudeur"
#: src/slic3r/GUI/GLCanvas3D.cpp:3959
msgid "Use CTRL+left mouse key to enter text edit mode:"
msgstr "Appuyez sur CTRL + clic gauche pour ouvrir le mode édition de texte :"
#: src/slic3r/GUI/Preferences.cpp:220
msgid "Use custom size for toolbar icons"
msgstr "Utiliser une taille personnalisée pour les icônes de la barre d'outils"
@ -10065,13 +10095,9 @@ msgstr "version"
msgid "Vertical shells"
msgstr "Parois verticales"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:234
msgid "Vertical slider - Add color change marker for current layer"
msgstr "Barre de défilement verticale - Ajouter un repère de changement de couleur pour la couche en cours"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
msgid "Vertical slider - Delete color change marker for current layer"
msgstr "Barre de défilement verticale - Supprimer le repère de changement de couleur pour la couche en cours"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Vertical Slider"
msgstr "Barre de Défilement Verticale"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
#: src/slic3r/GUI/KBShortcutsDialog.cpp:212
@ -10085,30 +10111,6 @@ msgstr "Barre de défilement verticale - Déplacer le curseur actif vers le Bas"
msgid "Vertical slider - Move active thumb Up"
msgstr "Barre de défilement verticale - Déplacer le curseur actif vers le Haut"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:231
msgid "Vertical slider - Move current thumb Down"
msgstr "Barre de défilement verticale - Déplacer vers le Bas actuel"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
msgid "Vertical slider - Move current thumb Up"
msgstr "Barre de défilement verticale - Déplacer vers le Haut actuel"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:233
msgid "Vertical slider - Set lower thumb as active"
msgstr "Barre de défilement verticale - Définir le curseur du bas comme actif"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:233
msgid "Vertical slider - Set lower thumb to current thumb"
msgstr "Barre de défilement verticale - Régler le curseur du bas sur le curseur actuel"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
msgid "Vertical slider - Set upper thumb as active"
msgstr "Barre de défilement verticale - Définir le curseur du haut comme actif"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
msgid "Vertical slider - Set upper thumb to current thumb"
msgstr "Barre de défilement verticale - Régler le curseur du haut sur le curseur actuel"
#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271
msgid "View"
msgstr "Vue"
@ -10289,14 +10291,6 @@ msgstr "Largeur des bâtonnets de connexion qui connectent l'objet et le socle g
msgid "Width of the display"
msgstr "Largeur de l'affichage"
#: src/slic3r/GUI/PresetHints.cpp:47
msgid "will always run at %1%%%"
msgstr "fonctionnera toujours à %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:54
msgid "will be turned off."
msgstr "sera désactivé."
#: src/libslic3r/PrintConfig.cpp:2584
msgid "Will inflate or deflate the sliced 2D polygons according to the sign of the correction."
msgstr "Va augmenter ou diminuer les polygones 2D découpés en fonction du signe de la correction."
@ -10375,6 +10369,10 @@ msgstr "Les coordonnées mondiales"
msgid "Would you like to install it?\n\nNote that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n\nUpdated configuration bundles:"
msgstr "Voulez-vous l'installer ?\n\nNotez qu'un instantané complet de la configuration sera sauvegardé d'abord. Elle peut être restaurée à tout moment si vous rencontrez un problème avec la nouvelle version.\n\nEnsembles de configuration mis à jour :"
#: src/slic3r/GUI/GUI_App.cpp:1802
msgid "Would you like to stop uploads and close the program?"
msgstr "Souhaitez-vous arrêter les téléchargements et fermer le programme ?"
#: src/libslic3r/miniz_extension.cpp:151
msgid "write calledback failed"
msgstr "échec de l'écriture du rappel"
@ -10456,6 +10454,10 @@ 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/NotificationManager.hpp:459
msgid "You have just added a G-code for color change, but its value is empty.\nTo export the G-code correctly, check the \"Color Change G-code\" in \"Printer Settings > Custom G-code\""
msgstr "Vous venez d'ajouter un G-code de changement de couleur, mais sa valeur est vide.\nPour exporter le G-code correctement, référez-vous à \"G-code de Changement de Couleur\" dans \"Réglages de l'Imprimante > G-code Personnalisé\""
#: src/slic3r/GUI/SavePresetDialog.cpp:277
msgid "You have selected physical printer \"%1%\" \nwith related printer preset \"%2%\""
msgstr "Vous avez sélectionné l'imprimante physique \"%1%\"\navec le préréglage d'imprimante associé \"%2%\""
@ -10478,8 +10480,8 @@ msgid "You need to restart %s to make the changes effective."
msgstr "Vous devez redémarrer %s afin que les modifications soient appliquées."
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468
msgid "You should to change a name of your printer device. It can't be saved."
msgstr "Vous devez changer le nom de votre imprimante. Il ne peut pas être enregistré."
msgid "You should change the name of your printer device."
msgstr "Vous devez changer le nom de votre imprimante."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3884
#, possible-c-format
@ -10510,6 +10512,10 @@ msgstr "Votre fichier a été réparé."
msgid "Your object appears to be too large, so it was automatically scaled down to fit your print bed."
msgstr "Votre objet semble être trop grand, il a donc été automatiquement réduit afin de l'adapter à votre plateau d'impression."
#: src/libslic3r/GCode.cpp:1261
msgid "Your print is very close to the priming regions. Make sure there is no collision."
msgstr "Votre impression est très proche des zones de purge. Assurez-vous qu'il n'y a pas de collision."
#: src/libslic3r/PrintConfig.cpp:2428
msgid "Z offset"
msgstr "Décalage Z"

View file

@ -19,11 +19,6 @@ msgstr "\"%1%\" è disattivato perchè \"%2%\" è nella categoria \"%3%\".\nPer
msgid "%"
msgstr "%"
#: src/slic3r/GUI/GLCanvas3D.cpp:969
#, possible-c-format
msgid "%.2f - %.2f mm"
msgstr "%.2f - %.2f mm"
#. TRN Remove/Delete
#: src/slic3r/GUI/Tab.cpp:3425
msgid "%1% Preset"
@ -296,10 +291,6 @@ msgstr "(Re)Sli&ce Ora"
msgid "(Unknown)"
msgstr "(Sconosciuto)"
#: src/slic3r/GUI/Plater.cpp:1195
msgid "(weight with spool)"
msgstr "(peso con bobina)"
#: src/slic3r/GUI/MainFrame.cpp:1491
msgid ") not found."
msgstr ") non trovato."
@ -386,11 +377,6 @@ msgstr "Informazioni su %s"
msgid "above"
msgstr "sopra"
#: src/slic3r/GUI/GLCanvas3D.cpp:965
#, possible-c-format
msgid "above %.2f mm"
msgstr "sopra %.2f mm"
#: src/libslic3r/PrintConfig.cpp:1677
msgid "Above Z"
msgstr "Z Sopra"
@ -744,6 +730,10 @@ msgstr "Tutte le superfici superiori"
msgid "allocation failed"
msgstr "allocazione fallita"
#: src/slic3r/GUI/Preferences.cpp:161 src/slic3r/GUI/Preferences.cpp:165
msgid "Allow just a single PrusaSlicer instance"
msgstr "Permetti una singola istanza di PrusaSlicer"
#: src/slic3r/GUI/Plater.cpp:3915
msgid "Along X axis"
msgstr "Lungo asse X"
@ -1011,6 +1001,10 @@ msgstr "Autovelocità (avanzato)"
msgid "Avoid crossing perimeters"
msgstr "Evita incrocio perimetri"
#: src/libslic3r/PrintConfig.cpp:188
msgid "Avoid crossing perimeters - Max detour length"
msgstr "Evita incrocio perimetri - Lunghezza massima della deviazione"
#: src/slic3r/GUI/Tab.cpp:3705
msgid "BACK ARROW"
msgstr "FRECCIA INDIETRO"
@ -1388,6 +1382,11 @@ msgstr "Controlla aggiornamenti di configurazione"
msgid "Check for updates"
msgstr "Cerca aggiorna&menti"
#: src/slic3r/Utils/PresetUpdater.cpp:412
#: src/slic3r/Utils/PresetUpdater.cpp:420
msgid "checking install indices"
msgstr "controllo degli indici di installazione"
#: src/slic3r/GUI/BedShapeDialog.cpp:608
msgid "Choose a file to import bed texture from (PNG/SVG):"
msgstr "Seleziona un file da cui importare la forma del piano di stampa (PNG/SVG):"
@ -1433,10 +1432,6 @@ msgstr "Cerchio"
msgid "Circular"
msgstr "Circolare"
#: src/slic3r/GUI/GLCanvas3D.cpp:3961
msgid "Clearance size"
msgstr "Dimensioni di spazio libero"
#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067
msgid "Click right mouse button to open/close History"
msgstr "Cliccare con il tasto destro del mouse per aprire/chiudere la Cronologia"
@ -1511,11 +1506,6 @@ msgstr "Cambio colore (\"%1%\")"
msgid "Color change (\"%1%\") for Extruder %2%"
msgstr "Cambio colore (\"%1%\") per Estrusore %2%"
#: src/slic3r/GUI/GLCanvas3D.cpp:1001
#, possible-c-format
msgid "Color change for Extruder %d at %.2f mm"
msgstr "Cambio colore per Estrusore %d a %.2f mm"
#: src/slic3r/GUI/Tab.cpp:2203
msgid "Color Change G-code"
msgstr "G-code cambio colore"
@ -1729,6 +1719,22 @@ msgstr "Copia negli appunti"
msgid "Copy to Clipboard"
msgstr "Copia negli appunti"
#: src/slic3r/GUI/AboutDialog.cpp:304
msgid "Copy Version Info"
msgstr "Copia info versione"
#: src/slic3r/Utils/PresetUpdater.cpp:84
msgid "Copying of file %1% to %2% failed.\nError message : %3%\nCopying was triggered by function: %4%"
msgstr "Copia del file %1% a %2% non riuscita.\nMessaggio errore : %3%\nL'errore è stato causata dalla funzione: %4%"
#: src/slic3r/Utils/PresetUpdater.cpp:91
msgid "Copying of file %1% to %2% failed. Permissions fail at target file after copying.\nError message : %3%\nCopying was triggered by function: %4%"
msgstr "Copia del file %1% su %2% non riuscita. Permessi non validi nel file di destinazione dopo la copia.\nMessaggio errore : %3%\n Questo errore è causato dalla funzione: %4%."
#: src/slic3r/Utils/PresetUpdater.cpp:70
msgid "Copying of file %1% to %2% failed. Permissions fail at target file before copying.\nError message : %3%\nThis error happend during %4% phase."
msgstr "Copia del file %1% su %2% non riuscita. Permessi non validi nel file di destinazione prima della copia.\nMessaggio errore : %3%\n Questo errore si è verificato durante la fase %4%."
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156
msgid "Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."
msgstr "Copia del G-code temporaneo completata ma non è stato possibile aprire il codice esportato durante il controllo copia. Il G-code di output è su %1%.tmp."
@ -1826,6 +1832,10 @@ msgstr "Genera Pad intorno all'oggetto ed ignora l'elevazione del supporto"
msgid "Critical angle"
msgstr "Angolo critico"
#: src/slic3r/GUI/GUI_App.cpp:589
msgid "Critical error"
msgstr "Errore critico"
#: src/libslic3r/PrintConfig.cpp:2832
msgid "Cross"
msgstr "Croce"
@ -1894,6 +1904,10 @@ msgstr "Setup Stampante Personalizzata"
msgid "Custom profile name:"
msgstr "Nome profilo personalizzato:"
#: src/slic3r/GUI/Plater.cpp:3397
msgid "Custom supports and seams were removed after repairing the mesh."
msgstr "I supporti e le cuciture personalizzate sono stati rimossi dopo la riparazione della mesh."
#: src/slic3r/GUI/DoubleSlider.cpp:1135
msgid "Custom template (\"%1%\")"
msgstr "Modello personalizzato (\"%1%\")"
@ -1979,10 +1993,6 @@ msgstr "Profilo filamento predefinito"
msgid "Default filament profile associated with the current printer profile. On selection of the current printer profile, this filament profile will be activated."
msgstr "Profilo filamento predefinito associato al profilo stampante corrente. Quando si seleziona il profilo stampante corrente, questo profilo filamento verrà attivato."
#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939
msgid "Default print color"
msgstr "Colore di stampa predefinito"
#: src/slic3r/GUI/Tab.cpp:1302
msgid "default print profile"
msgstr "profilo di stampa predefinito"
@ -2258,7 +2268,7 @@ msgstr "Disabilita la retrazione quando la traiettoria del movimento non oltrepa
#: src/slic3r/GUI/UnsavedChangesDialog.cpp:641
msgid "Discard"
msgstr "Elimina"
msgstr "Cancella"
#: src/slic3r/GUI/DoubleSlider.cpp:1066
msgid "Discard all custom changes"
@ -2433,9 +2443,13 @@ msgstr "Duplica per griglia"
msgid "Duration"
msgstr "Durata"
#: src/slic3r/GUI/PresetHints.cpp:39
msgid "During the other layers, fan"
msgstr "Durante gli altri layer, la ventola"
#: src/slic3r/GUI/PresetHints.cpp:51
msgid "During the other layers, fan will always run at %1%%%"
msgstr "Durante gli altri layer, la ventola lavorerà sempre a %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:58
msgid "During the other layers, fan will be turned off."
msgstr "Durante gli altri layer, la ventola sarà spenta."
#: src/libslic3r/PrintConfig.cpp:2833
msgid "Dynamic"
@ -2770,6 +2784,10 @@ msgstr "Errore: %s"
msgid "ERROR: not enough resources to execute a new job."
msgstr "ERRORE: risorse non sufficienti per eseguire un nuovo lavoro."
#: src/slic3r/GUI/Plater.cpp:3374
msgid "ERROR: Please close all manipulators available from the left toolbar before fixing the mesh."
msgstr "ERRORE: Chiudi tutti i manipolatori disponibili sulla barra degli strumenti di sinistra prima di riparare la mesh."
#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557
#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125
#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196
@ -3071,10 +3089,6 @@ msgstr "Cambia estrusore a"
msgid "Extruder clearance"
msgstr "Margine estrusore"
#: src/slic3r/GUI/Tab.cpp:1563
msgid "Extruder clearance (mm)"
msgstr "Margine estrusore (mm)"
#: src/libslic3r/PrintConfig.cpp:558
msgid "Extruder Color"
msgstr "Colore estrusore"
@ -3155,9 +3169,9 @@ msgstr "Caricamento modello input fallito."
msgid "Failed processing of the output_filename_format template."
msgstr "Elaborazione fallita del modello output_filename_format."
#: src/slic3r/GUI/PresetHints.cpp:41
msgid "Fan"
msgstr "Ventola"
#: src/slic3r/GUI/GUI_App.cpp:1648
msgid "Failed to activate configuration snapshot."
msgstr "Impossibile attivare l'istantanea di configurazione."
#: src/slic3r/GUI/Tab.cpp:1802
msgid "Fan settings"
@ -3171,6 +3185,22 @@ msgstr "Velocità ventola"
msgid "Fan Speed (%)"
msgstr "Velocità ventola (%)"
#: src/slic3r/GUI/PresetHints.cpp:49
msgid "Fan speed will be ramped from zero at layer %1% to %2%%% at layer %3%."
msgstr "La velocità della ventola sarà incrementata da zero al layer %1% a %2%%% al layer %3%."
#: src/libslic3r/PrintConfig.cpp:1001
msgid "Fan speed will be ramped up linearly from zero at layer \"disable_fan_first_layers\" to maximum at layer \"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower than \"disable_fan_first_layers\", in which case the fan will be running at maximum allowed speed at layer \"disable_fan_first_layers\" + 1."
msgstr "La velocità della ventola sarà incrementata linearmente da zero al layer \"disable_fan_fan_first_layers\" fino al massimo al layer \"full_fan_speed_layer\". \"full_fan_speed_layer\" sarà ignorato se inferiore a \"disable_fan_first_layers\", nel qual caso la ventola funzionerà alla massima velocità consentita al layer \"disable_fan_first_layers\" + 1."
#: src/slic3r/GUI/PresetHints.cpp:51
msgid "Fan will always run at %1%%%"
msgstr "La ventola lavorerà sempre a %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:58
msgid "Fan will be turned off."
msgstr "La ventola verrà spenta."
#: src/libslic3r/PrintConfig.cpp:2548
msgid "Fast"
msgstr "Veloce"
@ -3416,6 +3446,10 @@ msgstr "Velocità del primo layer"
msgid "First layer volumetric"
msgstr "Volumetrica primo layer"
#: src/slic3r/GUI/Plater.cpp:3380
msgid "Fix through NetFabb"
msgstr "Ripara tramite NetFabb"
#: src/slic3r/GUI/GUI_ObjectList.cpp:1776
msgid "Fix through the Netfabb"
msgstr "Ripara tramite Netfabb"
@ -3521,6 +3555,10 @@ msgstr "Frontale"
msgid "Front View"
msgstr "Vista anteriore"
#: src/libslic3r/PrintConfig.cpp:1000
msgid "Full fan speed at layer"
msgstr "Massima velocità della ventola al layer"
#: src/slic3r/GUI/Tab.cpp:1331
msgid "full profile name"
msgstr "nome completo profilo"
@ -3549,6 +3587,10 @@ msgstr "Formato G-code"
msgid "G-code preview"
msgstr "Anteprima G-code"
#: src/libslic3r/PrintConfig.cpp:66
msgid "G-code thumbnails"
msgstr "Miniature G-code"
#: src/libslic3r/PrintConfig.cpp:3552
msgid "G-code viewer"
msgstr "Visualizzatore G-code"
@ -3644,6 +3686,10 @@ msgstr "Generazione buffer vertici"
msgid "Generic"
msgstr "Generico"
#: src/slic3r/Utils/PresetUpdater.cpp:600
msgid "getting config updates"
msgstr "recupero aggiornamenti di configurazione"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
msgid "Gizmo cut"
msgstr "Gizmo Taglia"
@ -3880,6 +3926,10 @@ msgstr "Nido d'ape"
msgid "Horizontal shells"
msgstr "Gusci orizzontali"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:253
msgid "Horizontal Slider"
msgstr "Cursore di scorrimento orizzontale "
#: src/slic3r/GUI/KBShortcutsDialog.cpp:209
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213
#: src/slic3r/GUI/KBShortcutsDialog.cpp:238
@ -3892,30 +3942,6 @@ msgstr "Cursore di scorrimento orizzontale - Sposta a sinistra il cursore attivo
msgid "Horizontal slider - Move active thumb Right"
msgstr "Cursore di scorrimento orizzontale - Sposta a destra il cursore attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:238
msgid "Horizontal slider - Move current thumb Left"
msgstr "Cursore di scorrimento orizzontale: sposta il cursore corrente a sinistra"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:239
msgid "Horizontal slider - Move current thumb Right"
msgstr "Cursore di scorrimento orizzontale: sposta il cursore corrente a destra"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:236
msgid "Horizontal slider - Set left thumb as active"
msgstr "Cursore di scorrimento orizzontale - Imposta cursore sinistro come attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:236
msgid "Horizontal slider - Set left thumb to current thumb"
msgstr "Cursore di scorrimento orizzontale: sposta il cursore sinistro al cursore corrente"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Horizontal slider - Set right thumb as active"
msgstr "Cursore di scorrimento orizzontale - Imposta cursore destro come attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Horizontal slider - Set right thumb to current thumb"
msgstr "Cursore di scorrimento orizzontale: Imposta il cursore destro al cursore corrente"
#: src/libslic3r/PrintConfig.cpp:279
msgid "Horizontal width of the brim that will be printed around each object on the first layer."
msgstr "Larghezza orizzontale del brim che sarà stampata attorno ad ogni oggetto nel primo layer."
@ -4055,7 +4081,7 @@ msgstr "Se abilitato, il pulsante per ridurre la barra di scorrimento laterale a
msgid "If enabled, the command line arguments are sent to an existing instance of GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the \"single_instance\" configuration value from application preferences."
msgstr "Se abilitato, gli argomenti della riga di comando vengono inviati ad un'istanza GUI esistente di PrusaSlicer, oppure viene attivata una finestra PrusaSlicer esistente. Sovrascrive il valore di configurazione \"single_instance\" dalle preferenze dell'applicazione."
#: src/slic3r/GUI/Preferences.cpp:278
#: src/slic3r/GUI/Preferences.cpp:294
msgid "If enabled, the descriptions of configuration parameters in settings tabs wouldn't work as hyperlinks. If disabled, the descriptions of configuration parameters in settings tabs will work as hyperlinks."
msgstr "Se abilitata, le descrizioni dei parametri di configurazione nelle schede delle impostazioni non funzionano come collegamenti ipertestuali. Se disabilitata, le descrizioni dei parametri di configurazione nelle schede delle impostazioni funzioneranno come collegamenti ipertestuali."
@ -4256,6 +4282,10 @@ msgstr "in"
msgid "In this mode you can select only other %s Items%s"
msgstr "In questa modalità puoi selezionare solo altri %s oggetti %s"
#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:423
msgid "Inches"
msgstr "Pollici"
#: src/slic3r/GUI/UpdateDialogs.cpp:230
msgid "Incompatible bundles:"
msgstr "Gruppi incompatibili:"
@ -4335,10 +4365,6 @@ msgstr "Info"
msgid "Information"
msgstr "Informazioni"
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547
msgid "Infornation"
msgstr "Informazioni"
#: src/libslic3r/PrintConfig.cpp:1101
msgid "Inherits profile"
msgstr "Eredita profilo"
@ -4355,6 +4381,11 @@ msgstr "Tempo di esposizione iniziale"
msgid "Initial layer height"
msgstr "Altezza layer iniziale"
#: src/slic3r/GUI/Field.cpp:269
#, possible-c-format
msgid "Input value is out of range\nAre you sure that %s is a correct value and that you want to continue?"
msgstr "Il valore di input è fuori portata\nSei sicuro che %s sia un valore corretto e di voler continuare?"
#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370
msgid "Input value is out of range"
msgstr "Valore input fuori portata"
@ -4363,6 +4394,10 @@ msgstr "Valore input fuori portata"
msgid "Inspect / activate configuration snapshots"
msgstr "Ispeziona / attiva istantanee di configurazione"
#: src/slic3r/Utils/PresetUpdater.cpp:120
msgid "install"
msgstr "installa"
#: src/slic3r/GUI/ObjectDataViewModel.cpp:62
#: src/slic3r/GUI/ObjectDataViewModel.cpp:218
#, possible-c-format
@ -4432,6 +4467,10 @@ msgstr "Penetrazione della testa non valida"
msgid "invalid header or archive is corrupted"
msgstr "titolo non valido o archivio corrotto"
#: src/slic3r/GUI/Field.cpp:375
msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\""
msgstr "Formato di input non valido. Vettore di dimensioni previsto nel seguente formato: \"%1%\""
#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274
#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
msgid "Invalid numeric input."
@ -4521,21 +4560,6 @@ msgstr "Vai all'altezza %s \no Imposta la modalità righello"
msgid "Jump to height %s\nSet ruler mode\nor Set extruder sequence for the entire print"
msgstr "Vai all'altezza %s\nImposta la modalità del righello\no Imposta la sequenza dell'estrusore per l'intera stampa"
#: src/slic3r/GUI/DoubleSlider.cpp:1075
#, possible-c-format
msgid "Jump to height %s or Set extruder sequence for the entire print"
msgstr "Vai all'altezza %s o Imposta sequenza estrusore per l'intera stampa"
#: src/slic3r/GUI/DoubleSlider.cpp:1222
#, possible-c-format
msgid "Jump to height %s or Set ruler mode"
msgstr "Vai all'altezza %s o Imposta la modalità righello"
#: src/slic3r/GUI/DoubleSlider.cpp:1220
#, possible-c-format
msgid "Jump to height %s Set ruler mode\n or Set extruder sequence for the entire print"
msgstr "Vai all'altezza %s Imposta la modalità del righello\n o Imposta la sequenza dell'estrusore per l'intera stampa"
#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852
msgid "Jump to move"
msgstr "Salta per spostare"
@ -4646,10 +4670,6 @@ msgstr "Layer e perimetri"
msgid "Layers and Perimeters"
msgstr "Layer e Perimetri"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:225
msgid "Layers Slider"
msgstr "Barra di scorrimento Layer"
#: src/slic3r/GUI/OptionsGroup.cpp:293
msgctxt "Layers"
msgid "Bottom"
@ -4695,10 +4715,6 @@ msgstr "Tasto sinistro mouse:"
msgid "Left View"
msgstr "Vista sinistra"
#: src/slic3r/GUI/GUI_Preview.cpp:339
msgid "Legend"
msgstr "Legenda"
#: src/slic3r/GUI/GUI_Preview.cpp:1480
msgid "Legend/Estimated printing time"
msgstr "Legenda/Stima del tempo di stampa"
@ -5355,6 +5371,10 @@ msgstr "mm (imposta a zero per disabilitare)"
msgid "mm or %"
msgstr "mm o %"
#: src/libslic3r/PrintConfig.cpp:193
msgid "mm or % (zero to disable)"
msgstr "mm o % (zero per disattivare)"
#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645
#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662
#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697
@ -5494,6 +5514,22 @@ msgstr "Sposta il cursore di scorrimento attivo sinistro"
msgid "Move active slider thumb Right"
msgstr "Sposta cursore di scorrimento attivo destro"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:220
msgid "Move active thumb Down"
msgstr "Abbassa cursore attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:241
msgid "Move active thumb Left"
msgstr "Sposta a sinistra il cursore attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:242
msgid "Move active thumb Right"
msgstr "Sposta a destra il cursore attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
msgid "Move active thumb Up"
msgstr "Solleva cursore attivo"
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
msgid "Move clipping plane"
msgstr "Sposta piano sezione"
@ -5502,14 +5538,6 @@ msgstr "Sposta piano sezione"
msgid "Move current slider thumb Down"
msgstr "Abbassa la barra di scorrimento attuale"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
msgid "Move current slider thumb Left"
msgstr "Sposta a sinistra la barra di scorrimento attuale"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
msgid "Move current slider thumb Right"
msgstr "Sposta a destra la barra di scorrimento attuale"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
msgid "Move current slider thumb Up"
msgstr "Solleva la barra di scorrimento attuale"
@ -5518,16 +5546,6 @@ msgstr "Solleva la barra di scorrimento attuale"
msgid "Move drainage hole"
msgstr "Sposta foro di drenaggio"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:209
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213
msgid "Move horizontal slider current thumb Left"
msgstr "Sposta il cursore di scorrimento orizzontale corrente a Sinistra"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:210
#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
msgid "Move horizontal slider current thumb Right"
msgstr "Sposta il cursore di scorrimento orizzontale corrente a Destra"
#: src/slic3r/GUI/GLCanvas3D.cpp:3810
msgid "Move Object"
msgstr "Sposta oggetto"
@ -5556,16 +5574,6 @@ msgstr "Sposta selezione 10 mm in direzione Y positiva"
msgid "Move support point"
msgstr "Sposta punto di supporto"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
#: src/slic3r/GUI/KBShortcutsDialog.cpp:212
msgid "Move vertical slider current thumb Down"
msgstr "Sposta il cursore di scorrimento verticale corrente in Basso"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
#: src/slic3r/GUI/KBShortcutsDialog.cpp:211
msgid "Move vertical slider current thumb Up"
msgstr "Sposta il cursore di scorrimento verticale corrente verso l'alto"
#: src/slic3r/GUI/GCodeViewer.cpp:2492
msgid "Movement"
msgstr "Movimento"
@ -5655,7 +5663,7 @@ msgstr "Nuovo progetto, pulisci piano"
#: src/slic3r/GUI/UnsavedChangesDialog.cpp:609
msgid "New Value"
msgstr "Nuovo Valore"
msgstr "Nuovo valore"
#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1178
msgid "New value"
@ -5955,6 +5963,14 @@ msgstr "Modalità Un Layer"
msgid "One or more object were assigned an extruder that the printer does not have."
msgstr "Uno o più oggetti sono assegnati ad un estrusore non presente sulla stampante."
#: src/slic3r/GUI/GUI_App.cpp:1784
msgid "Ongoing uploads"
msgstr "Caricamenti in corso"
#: src/libslic3r/Print.cpp:1269
msgid "Only a single object may be printed at a time in Spiral Vase mode. Either remove all but the last object, or enable sequential mode by \"complete_objects\"."
msgstr "In modalità Vaso a spirale è possibile stampare un solo oggetto alla volta. Rimuovere tutti gli oggetti tranne l'ultimo, oppure abilitare la modalità sequenziale con \"complete_objects\"."
#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840
msgid "Only create support if it lies on a build plate. Don't create support on a print."
msgstr "Genera supporti solo se questi poggiano sulla superficie di stampa. Non genera supporti sulla stampa."
@ -6307,11 +6323,6 @@ msgstr "Metti in pausa (\"%1%\")"
msgid "Pause Print G-code"
msgstr "G-code Pausa Stampa"
#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949
#: src/slic3r/GUI/GLCanvas3D.cpp:988
msgid "Pause print or custom G-code"
msgstr "Pausa stampa o G-code personalizzato"
#: src/libslic3r/PrintConfig.cpp:1147
msgid "Percent of a flow rate relative to object's normal layer height."
msgstr "Percentuale di una portata rispetto all'altezza normale dello strato dell'oggetto."
@ -6360,9 +6371,9 @@ msgstr "Stampanti fisiche"
msgid "Pick another vendor supported by %s"
msgstr "Scegli un altro produttore supportato da %s"
#: src/libslic3r/PrintConfig.cpp:66
msgid "Picture sizes to be stored into a .gcode and .sl1 files"
msgstr "Dimensioni immagine per essere memorizzate nei file .gcode e .sl1"
#: src/libslic3r/PrintConfig.cpp:67
msgid "Picture sizes to be stored into a .gcode and .sl1 files, in the following format: \"XxY, XxY, ...\""
msgstr "Dimensioni delle immagini da memorizzare in un file .gcode e .sl1, nel seguente formato: \"XxY, XxY, ...\""
#: src/libslic3r/PrintConfig.cpp:2822
msgid "Pillar connection mode"
@ -6485,11 +6496,7 @@ msgid "Preset \"%1%\" is not compatible with the new printer profile and it has
msgstr "Il preset \"%1%\" non è compatibile con il nuovo profilo stampante e possiede le seguenti modifiche non salvate:"
#: src/slic3r/GUI/SavePresetDialog.cpp:136
msgid "Preset with name \"%1%\" already exists and is imcopatible with selected printer."
msgstr "Il preset con il nome \"%1%\" esiste già e non è compatibile con la stampante selezionata."
#: src/slic3r/GUI/SavePresetDialog.cpp:136
msgid "Preset with name \"%1%\" already exists and is incopatible with selected printer."
msgid "Preset with name \"%1%\" already exists and is incompatible with selected printer."
msgstr "Il preset con il nome \"%1%\" è già esistente ed è incompatibile con la stampante selezionata."
#: src/slic3r/GUI/SavePresetDialog.cpp:148
@ -6501,6 +6508,10 @@ msgctxt "PresetName"
msgid "Copy"
msgstr "Copia"
#: src/slic3r/GUI/GLCanvas3D.cpp:3990
msgid "Press %1%left mouse button to enter the exact value"
msgstr "Premi il tasto sinistro del mouse %1% per inserire il valore esatto"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
msgid "Press to activate deselection rectangle"
msgstr "Premi per attivare il rettangolo di deselezione"
@ -6719,6 +6730,10 @@ msgstr "PrusaSlicer ha rilevato l'archivio dei certificati SSL di sistema: %1%"
msgid "PrusaSlicer GUI initialization failed"
msgstr "Inizializzazione GUI PrusaSlicer non riuscita"
#: src/slic3r/GUI/GUI_App.cpp:586
msgid "PrusaSlicer has encountered a localization error. Please report to PrusaSlicer team, what language was active and in which scenario this issue happened. Thank you.\n\nThe application will now terminate."
msgstr "PrusaSlicer ha riscontrato un errore di localizzazione. Si prega di riferire al team di PrusaSlicer, quale lingua era attiva e in quale scenario si è verificato questo problema. Grazie.\n\nL'applicazione terminerà ora."
#: src/slic3r/GUI/AboutDialog.cpp:285
msgid "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap community."
msgstr "PrusaSlicer è basato su Slic3r di Alessandro Ranellucci e la comunità RepRap."
@ -7737,10 +7752,6 @@ msgstr "Seq."
msgid "Sequential printing"
msgstr "Stampa sequenziale"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
msgid "Sequential Slider"
msgstr "Slider Sequenziale"
#: src/slic3r/GUI/Preferences.cpp:230
msgid "Sequential slider applied only to top layer"
msgstr "Cursore sequenziale applicato solo sullo strato superiore"
@ -7786,6 +7797,14 @@ msgstr "Imposta sequenza estrusore per l'intera stampa"
msgid "Set extruder(tool) sequence"
msgstr "Imposta sequenza estrusore(attrezzo)"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:243
msgid "Set left thumb as active"
msgstr "Imposta cursore sinistro come attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
msgid "Set lower thumb as active"
msgstr "Imposta cursore inferiore come attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
msgid "Set lower thumb to current slider thumb"
msgstr "Imposta il cursore inferiore alla barra di scorrimento attuale"
@ -7819,6 +7838,10 @@ msgstr "Imposta stampabile"
msgid "Set Printable Instance"
msgstr "Imposta Istanza Stampabile"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:244
msgid "Set right thumb as active"
msgstr "Imposta cursore destro come attivo"
#: src/slic3r/GUI/DoubleSlider.cpp:1836
msgid "Set ruler mode"
msgstr "Imposta la modalità righello"
@ -7887,6 +7910,10 @@ msgstr "Imposta non stampabile"
msgid "Set Unprintable Instance"
msgstr "Imposta Istanza non stampabile"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:221
msgid "Set upper thumb as active"
msgstr "Imposta cursore superiore come attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
msgid "Set upper thumb to current slider thumb"
msgstr "Imposta il cursore superiore alla barra di scorrimento attuale"
@ -8225,10 +8252,6 @@ msgstr "Slic3r può caricare il file G-code ad un host stampante. Questo campo d
msgid "Slic3r can upload G-code files to a printer host. This field should contain the API Key or the password required for authentication."
msgstr "Slic3r può caricare i file G-code su un host di stampa. Questo campo deve contenere la chiave API o la password richiesta per l'autenticazione."
#: src/libslic3r/PrintConfig.cpp:100
msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance."
msgstr "Slic3r può caricare i file G-code su un host della stampante. Questo campo dovrebbe contenere il nome host, l'indirizzo IP o URL dell'istanza dell'host della stampante."
#: src/libslic3r/PrintConfig.cpp:100
msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance. Print host behind HAProxy with basic auth enabled can be accessed by putting the user name and password into the URL in the following format: https://username:password@your-octopi-address/"
msgstr "Slic3r può caricare i file G-code su una stampante host. Questo campo deve contenere il nome host, l'indirizzo IP o l'URL dell'istanza host della stampante. L'host di stampa dietro HAProxy con l'autenticazione di base abilitata è accessibile inserendo il nome utente e la password nell'URL nel seguente formato: https://username:password@il tuo indirizzo di octopi/"
@ -8631,6 +8654,10 @@ msgstr "File STL esportato in %s"
msgid "Stop at height"
msgstr "Ferma all'altezza"
#: src/slic3r/GUI/GUI_App.cpp:1781
msgid "Stop them and continue anyway?"
msgstr "Interromperli e continuare comunque?"
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295
msgid "Success!"
msgstr "Successo!"
@ -8767,10 +8794,6 @@ msgstr "Supporto modalità silenziosa"
msgid "Supports work better, if the following feature is enabled:\n- Detect bridging perimeters"
msgstr "I supporti funzionano meglio se le la seguente funzione è attivata:\n- Rileva perimetri ponte"
#: src/slic3r/GUI/DoubleSlider.cpp:1824
msgid "Supprese show the ruler"
msgstr "Nascondi il righello"
#: src/slic3r/GUI/Preferences.cpp:104
msgid "Suppress \" - default - \" presets"
msgstr "Nascondi i preset \" - default - \""
@ -8985,6 +9008,18 @@ msgstr "I seguenti modelli di stampante FFF non hanno nessun filamento seleziona
msgid "The following presets were modified:"
msgstr "I preset seguenti sono stati modificati:"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:253
msgid "The following shortcuts are applicable in G-code preview when the horizontal slider is active"
msgstr "Le seguenti scorciatoie sono applicabili nell'anteprima del G-code quando il cursore orizzontale è attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "The following shortcuts are applicable in G-code preview when the vertical slider is active"
msgstr "Le seguenti scorciatoie sono applicabili nell'anteprima del G-code quando il cursore verticale è attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
msgid "The following shortcuts are applicable when the specified gizmo is active"
msgstr "Le seguenti scorciatoie sono applicabili quando il gizmo specificato è attivo"
#: src/slic3r/GUI/ConfigWizard.cpp:2275
msgid "The following SLA printer models have no materials selected:"
msgstr "I seguenti modelli di stampante SLA non hanno nessun filamento selezionato:"
@ -9021,6 +9056,10 @@ msgstr "La distanza massima tra due pilastri per collegarsi gli uni agli altri.
msgid "The max length of a bridge"
msgstr "La lunghezza massima di un bridge"
#: src/libslic3r/PrintConfig.cpp:190
msgid "The maximum detour length for avoid crossing perimeters. If the detour is longer than this value, avoid crossing perimeters is not applied for this travel path. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path."
msgstr "La lunghezza massima di deviazione per evitare di incrociare i perimetri. Se la deviazione è più lunga di questo valore, la funzione evita incrocio perimetri non viene applicata per questo percorso di spostamento. La lunghezza della deviazione può essere specificata sia come valore assoluto che come percentuale (ad esempio 50%) di un percorso di spostamento diretto."
#: src/libslic3r/PrintConfig.cpp:2878
msgid "The minimum distance of the pillar base from the model in mm. Makes sense in zero elevation mode where a gap according to this parameter is inserted between the model and the pad."
msgstr "Distanza minima della base del pilastro dal modello in mm. Ha senso con modalità ad elevazione zero in cui viene inserito uno spazio tra modello e pad a seconda di questo parametro."
@ -9029,6 +9068,14 @@ msgstr "Distanza minima della base del pilastro dal modello in mm. Ha senso con
msgid "The name cannot be empty."
msgstr "Il nome non può essere vuoto."
#: src/slic3r/GUI/SavePresetDialog.cpp:152
msgid "The name cannot end with space character."
msgstr "Il nome non può terminare con il carattere spazio."
#: src/slic3r/GUI/SavePresetDialog.cpp:147
msgid "The name cannot start with space character."
msgstr "Il nome non può iniziare con il carattere spazio."
#: src/libslic3r/PrintConfig.cpp:219
msgid "The number of bottom solid layers is increased above bottom_solid_layers if necessary to satisfy minimum thickness of bottom shell."
msgstr "Il numero di layer solidi inferiori è aumentato al di sopra di bottom_solid_layers se necessario per soddisfare lo spessore minimo del guscio inferiore."
@ -9130,10 +9177,6 @@ msgstr "Velocità delle retrazioni (si applica solamente al motore dell'estrusor
msgid "The Spiral Vase mode requires:\n- one perimeter\n- no top solid layers\n- 0% fill density\n- no support material\n- Ensure vertical shell thickness enabled\n- Detect thin walls disabled"
msgstr "La modalità Vaso a spirale necessita:\n-un solo perimetro\n-nessun layer solido superiore\n-densità riempimento 0%\n-nessun materiale di supporto\n-Mantieni spessore guscio verticale attivo\n-Rileva perimetri sottili disattivo"
#: src/libslic3r/Print.cpp:1263
msgid "The Spiral Vase option can only be used when printing a single object."
msgstr "L'opzione Vaso a Spirale può essere utilizzata soltanto durante la stampa di un oggetto singolo."
#: src/libslic3r/Print.cpp:1270
msgid "The Spiral Vase option can only be used when printing single material objects."
msgstr "L'opzione Vaso a Spirale può essere usata solo durante la stampa di oggetti in materiale singolo."
@ -9161,6 +9204,10 @@ msgstr "Le configurazioni fornite causeranno una stampa vuota."
msgid "The thickness of the pad and its optional cavity walls."
msgstr "Lo spessore del pad e delle intercapedini opzionali."
#: src/slic3r/GUI/GUI_App.cpp:1781
msgid "The uploads are still ongoing"
msgstr "I caricamenti sono ancora in corso"
#: src/libslic3r/PrintConfig.cpp:2053
msgid "The vertical distance between object and support material interface. Setting this to 0 will also prevent Slic3r from using bridge flow and speed for the first object layer."
msgstr "Distanza verticale tra oggetto e interfaccia del materiale di supporto. Impostando questo valore a 0 eviterà che Slic3r utilizzi il flusso e velocità bridge per il primo layer dell'oggetto."
@ -9314,9 +9361,9 @@ msgstr "Questa funzione permette di combinare il riempimento e velocizza il temp
msgid "This feature allows to force a solid layer every given number of layers. Zero to disable. You can set this to any value (for example 9999); Slic3r will automatically choose the maximum possible number of layers to combine according to nozzle diameter and layer height."
msgstr "Questa funzione permette di forzare un layer solido ogni tot layer. Zero per disabilitare. È possibile impostare qualunque valore (per esempio 9999); Slic3r sceglierà automaticamente il maggior numero possibile di layer da combinare secondo il diametro dell'ugello e l'altezza layer."
#: src/libslic3r/PrintConfig.cpp:1910
msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object."
msgstr "Questa funzione solleverà Z gradualmente durante la stampa di un oggetto a parete singola allo scopo di rimuovere qualunque giunzione. Questa opzione richiede un singolo perimetro, nessun riempimento, nessun layer solido superiore e nessun materiale di supporto. È possibile comunque impostare qualunque numero di layer solidi inferiori così come per i giri di skirt/brim. Non funzionerà stampando più di un oggetto."
#: src/libslic3r/PrintConfig.cpp:1995
msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than one single object."
msgstr "Questa funzione solleverà Z gradualmente durante la stampa di un oggetto a parete singola allo scopo di rimuovere qualunque giunzione. Questa opzione richiede un singolo perimetro, nessun riempimento, nessun layer solido superiore e nessun materiale di supporto. È possibile comunque impostare qualunque numero di layer solidi inferiori così come per i giri di skirt/brim. Non funzionerà stampando più di un oggetto singolo."
#: src/slic3r/GUI/Plater.cpp:2329
msgid "This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?"
@ -9395,10 +9442,6 @@ msgstr "Questa è l'accelerazione che la stampante utilizzerà per il primo laye
msgid "This is the acceleration your printer will use for infill. Set zero to disable acceleration control for infill."
msgstr "Questa è l'accelerazione che la stampante utilizzerà per il riempimento. Imposta a zero per disattivare il controllo dell'accelerazione per il riempimento."
#: src/libslic3r/PrintConfig.cpp:1508
msgid "This is the acceleration your printer will use for perimeters. A high value like 9000 usually gives good results if your hardware is up to the job. Set zero to disable acceleration control for perimeters."
msgstr "Questa è l'accelerazione che la stampante utilizzerà per i perimetri. Un valore alto come 9000 solitamente produce dei buoni risultati se l'hardware è all'altezza. Imposta a zero per disattivare il controllo dell'accelerazione per i perimetri."
#: src/libslic3r/PrintConfig.cpp:1582
msgid "This is the acceleration your printer will use for perimeters. Set zero to disable acceleration control for perimeters."
msgstr "Questa è l'accelerazione che la stampante utilizzerà per i perimetri. Impostare zero per disabilitare il controllo dell'accelerazione per i perimetri."
@ -9575,10 +9618,6 @@ msgstr "Per utilizzare un file CA personalizzato, importa il tuo file CA sul Cer
msgid "Toggle %c axis mirroring"
msgstr "Attiva / disattiva il mirroring dell'asse %c"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
msgid "Toggle vertical slider one layer mode ON/OFF"
msgstr "Attivare/disattivare il cursore verticale a un layer"
#: src/libslic3r/miniz_extension.cpp:93
msgid "too many files"
msgstr "troppi file"
@ -9836,11 +9875,6 @@ msgstr "Selezione non supportata"
msgid "up to"
msgstr "fino a"
#: src/slic3r/GUI/GLCanvas3D.cpp:961
#, possible-c-format
msgid "up to %.2f mm"
msgstr "fino a %.2f mm"
#: src/slic3r/GUI/UpdateDialogs.cpp:38
msgid "Update available"
msgstr "Aggiornamento disponibile"
@ -9890,10 +9924,6 @@ msgstr "Layer superiore"
msgid "Use another extruder"
msgstr "Usa un altro estrusore"
#: src/slic3r/GUI/GLCanvas3D.cpp:3959
msgid "Use CTRL+left mouse key to enter text edit mode:"
msgstr "Usare CTRL+tasto sinistro del mouse per entrare nella modalità di modifica del testo:"
#: src/slic3r/GUI/Preferences.cpp:220
msgid "Use custom size for toolbar icons"
msgstr "Utilizza dimensione personalizzata per le icone degli strumenti"
@ -10065,13 +10095,9 @@ msgstr "versione"
msgid "Vertical shells"
msgstr "Gusci verticali"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:234
msgid "Vertical slider - Add color change marker for current layer"
msgstr "Cursore scorrimento verticale: Aggiungi un segnale di cambio colore per il layer corrente"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
msgid "Vertical slider - Delete color change marker for current layer"
msgstr "Cursore scorrimento verticale: Elimina il segnale di cambio colore per il layer corrente"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Vertical Slider"
msgstr "Cursore di scorrimento verticale"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
#: src/slic3r/GUI/KBShortcutsDialog.cpp:212
@ -10085,30 +10111,6 @@ msgstr "Cursore di scorrimento verticale - Abbassa cursore attivo"
msgid "Vertical slider - Move active thumb Up"
msgstr "Cursore di scorrimento verticale - Solleva cursore attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:231
msgid "Vertical slider - Move current thumb Down"
msgstr "Cursore di scorrimento verticale: sposta il cursore corrente verso il basso"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
msgid "Vertical slider - Move current thumb Up"
msgstr "Cursore di scorrimento verticale: sposta il cursore corrente verso l'alto"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:233
msgid "Vertical slider - Set lower thumb as active"
msgstr "Cursore di scorrimento verticale - Imposta cursore inferiore come attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:233
msgid "Vertical slider - Set lower thumb to current thumb"
msgstr "Cursore di scorrimento verticale: sposta il cursore inferiore al cursore corrente"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
msgid "Vertical slider - Set upper thumb as active"
msgstr "Cursore di scorrimento verticale - Imposta cursore superiore come attivo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
msgid "Vertical slider - Set upper thumb to current thumb"
msgstr "Cursore di scorrimento verticale: sposta il cursore superiore al cursore corrente"
#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271
msgid "View"
msgstr "Vista"
@ -10289,14 +10291,6 @@ msgstr "Larghezza delle barre di connessione che collegano l'oggetto e il pad ge
msgid "Width of the display"
msgstr "Larghezza del display"
#: src/slic3r/GUI/PresetHints.cpp:47
msgid "will always run at %1%%%"
msgstr "lavorerà sempre a %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:54
msgid "will be turned off."
msgstr "rimarrà spenta."
#: src/libslic3r/PrintConfig.cpp:2584
msgid "Will inflate or deflate the sliced 2D polygons according to the sign of the correction."
msgstr "Gonfierà o sgonfierà i poligoni 2D processati in base al segno della correzione."
@ -10375,6 +10369,10 @@ msgstr "Coordinate reali"
msgid "Would you like to install it?\n\nNote that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n\nUpdated configuration bundles:"
msgstr "Vuoi installarlo?\n\nNota: verrà prima creata un'istantanea della configurazione completa. Potrà essere ripristinata in qualunque momento se dovessero presentarsi problemi con la nuova versione.\n\nGruppo di configurazioni aggiornate:"
#: src/slic3r/GUI/GUI_App.cpp:1802
msgid "Would you like to stop uploads and close the program?"
msgstr "Desideri interrompere il caricamento e chiudere il programma?"
#: src/libslic3r/miniz_extension.cpp:151
msgid "write calledback failed"
msgstr "scrittura richiamo non riuscita"
@ -10456,6 +10454,10 @@ msgstr "Non è possibile caricare un progetto SLA con un oggetto multi-parte sul
msgid "You cannot use non-uniform scaling mode for multiple objects/parts selection"
msgstr "Non è possibile utilizzare la modalità di ridimensionamento non uniforme per una selezione di più oggetti/parti"
#: src/slic3r/GUI/NotificationManager.hpp:459
msgid "You have just added a G-code for color change, but its value is empty.\nTo export the G-code correctly, check the \"Color Change G-code\" in \"Printer Settings > Custom G-code\""
msgstr "Hai aggiunto un G-code per il cambio colore, ma il suo valore è vuoto.\nPer esportare correttamente il G-code, controlla \"Color Change G-code\" su \"Impostazioni stampante > G-code personalizzato\""
#: src/slic3r/GUI/SavePresetDialog.cpp:277
msgid "You have selected physical printer \"%1%\" \nwith related printer preset \"%2%\""
msgstr "Hai selezionato la stampante fisica \"%1%\" \ncon il relativo preset stampante \"%2%\""
@ -10478,8 +10480,8 @@ msgid "You need to restart %s to make the changes effective."
msgstr "È necessario riavviare %s per rendere effettive le modifiche."
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468
msgid "You should to change a name of your printer device. It can't be saved."
msgstr "Devi cambiare il nome del dispositivo di stampa. Non può essere salvato."
msgid "You should change the name of your printer device."
msgstr "Devi cambiare il nome del dispositivo di stampa."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3884
#, possible-c-format
@ -10510,6 +10512,10 @@ msgstr "Il file è stato riparato."
msgid "Your object appears to be too large, so it was automatically scaled down to fit your print bed."
msgstr "L'oggetto sembra essere troppo grande, è stato quindi ridimensionato automaticamente per entrare nel piano di stampa."
#: src/libslic3r/GCode.cpp:1261
msgid "Your print is very close to the priming regions. Make sure there is no collision."
msgstr "La stampa è molto vicina alle aree di preparazione. Assicurati che non vi siano collisioni. "
#: src/libslic3r/PrintConfig.cpp:2428
msgid "Z offset"
msgstr "Offset Z"

File diff suppressed because it is too large Load diff

View file

@ -19,11 +19,6 @@ msgstr "\"%1%\" jest wyłączony ponieważ \"%2%\" znajduje się w kategorii \"%
msgid "%"
msgstr "%"
#: src/slic3r/GUI/GLCanvas3D.cpp:969
#, possible-c-format
msgid "%.2f - %.2f mm"
msgstr "%.2f - %.2f mm"
#. TRN Remove/Delete
#: src/slic3r/GUI/Tab.cpp:3425
msgid "%1% Preset"
@ -296,10 +291,6 @@ msgstr "(Pono&wne) Cięcie"
msgid "(Unknown)"
msgstr "(Nieznane)"
#: src/slic3r/GUI/Plater.cpp:1195
msgid "(weight with spool)"
msgstr "(waga ze szpulą)"
#: src/slic3r/GUI/MainFrame.cpp:1491
msgid ") not found."
msgstr ") nie znaleziono."
@ -386,11 +377,6 @@ msgstr "O %s"
msgid "above"
msgstr "ponad"
#: src/slic3r/GUI/GLCanvas3D.cpp:965
#, possible-c-format
msgid "above %.2f mm"
msgstr "powyżej %.2f mm"
#: src/libslic3r/PrintConfig.cpp:1677
msgid "Above Z"
msgstr "Powyżej Z"
@ -744,6 +730,10 @@ msgstr "Wszystkie powierzchnie górne"
msgid "allocation failed"
msgstr "niepowodzenie alokacji"
#: src/slic3r/GUI/Preferences.cpp:161 src/slic3r/GUI/Preferences.cpp:165
msgid "Allow just a single PrusaSlicer instance"
msgstr "Zezwalaj tylko na pojedynczą instancję PrusaSlicer"
#: src/slic3r/GUI/Plater.cpp:3915
msgid "Along X axis"
msgstr "Wzdłuż osi X"
@ -1011,6 +1001,10 @@ msgstr "Automatyczne dostosowanie prędkości (zaawansowane)"
msgid "Avoid crossing perimeters"
msgstr "Unikaj ruchów nad obrysami"
#: src/libslic3r/PrintConfig.cpp:188
msgid "Avoid crossing perimeters - Max detour length"
msgstr "Unikaj ruchów nad obrysami - maksymalna długość objazdu"
#: src/slic3r/GUI/Tab.cpp:3705
msgid "BACK ARROW"
msgstr "STRZAŁKA W TYŁ"
@ -1388,6 +1382,11 @@ msgstr "Sprawdzaj aktualizacje konfiguracji"
msgid "Check for updates"
msgstr "Sprawdź akt&ualizacje"
#: src/slic3r/Utils/PresetUpdater.cpp:412
#: src/slic3r/Utils/PresetUpdater.cpp:420
msgid "checking install indices"
msgstr "sprawdzanie zainstalowanych indeksów"
#: src/slic3r/GUI/BedShapeDialog.cpp:608
msgid "Choose a file to import bed texture from (PNG/SVG):"
msgstr "Wybierz plik, z którego ma być zaimportowana tekstura stołu (PNG/SVG):"
@ -1433,10 +1432,6 @@ msgstr "Koło"
msgid "Circular"
msgstr "Okrągły"
#: src/slic3r/GUI/GLCanvas3D.cpp:3961
msgid "Clearance size"
msgstr "Odstęp między modelami"
#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067
msgid "Click right mouse button to open/close History"
msgstr "Kliknij prawym przyciskiem myszy, aby otworzyć/zamknąć historię"
@ -1511,18 +1506,13 @@ msgstr "Zmiana koloru (\"%1%\")"
msgid "Color change (\"%1%\") for Extruder %2%"
msgstr "Zmiana koloru (\"%1%\") dla ekstrudera %2%"
#: src/slic3r/GUI/GLCanvas3D.cpp:1001
#, possible-c-format
msgid "Color change for Extruder %d at %.2f mm"
msgstr "Zmiana koloru dla ekstrudera %d na wysokości %.2f mm"
#: src/slic3r/GUI/Tab.cpp:2203
msgid "Color Change G-code"
msgstr "G-code ze zmianą koloru"
msgstr "G-code dla zmiany koloru"
#: src/libslic3r/PrintConfig.cpp:1960
msgid "Color change G-code"
msgstr "G-code ze zmianą koloru"
msgstr "G-code dla zmiany koloru"
#: src/slic3r/GUI/GCodeViewer.cpp:2531 src/slic3r/GUI/GUI_Preview.cpp:1475
msgid "Color changes"
@ -1729,6 +1719,22 @@ msgstr "Skopiuj do schowka"
msgid "Copy to Clipboard"
msgstr "Kopiuj do Schowka"
#: src/slic3r/GUI/AboutDialog.cpp:304
msgid "Copy Version Info"
msgstr "Skopiuj informacje o wersji"
#: src/slic3r/Utils/PresetUpdater.cpp:84
msgid "Copying of file %1% to %2% failed.\nError message : %3%\nCopying was triggered by function: %4%"
msgstr "Niepowodzenie kopiowania pliku %1% do %2%. \nKomunikat błędu: %3%\n Kopiowanie zostało wywołane przez funkcję: %4%"
#: src/slic3r/Utils/PresetUpdater.cpp:91
msgid "Copying of file %1% to %2% failed. Permissions fail at target file after copying.\nError message : %3%\nCopying was triggered by function: %4%"
msgstr "Niepowodzenie kopiowania pliku %1% do %2%. Błąd uprawnień pliku docelowego po skopiowaniu.\nKomunikat błędu: %3%\n Kopiowanie zostało wywołane przez funkcję: %4%"
#: src/slic3r/Utils/PresetUpdater.cpp:70
msgid "Copying of file %1% to %2% failed. Permissions fail at target file before copying.\nError message : %3%\nThis error happend during %4% phase."
msgstr "Niepowodzenie kopiowania pliku %1% do %2%. Błąd uprawnień pliku docelowego przed kopiowaniem.\nKomunikat błędu: %3%\n Błąd wystąpił podczas fazy: %4%"
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156
msgid "Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."
msgstr "Kopiowanie tymczasowego pliku G-code zostało zakończone, ale nie można otworzyć wyeksportowanego pliku w celu weryfikacji kopiowania. Wynikowy G-code znajduje się w lokalizacji %2%.tmp."
@ -1826,6 +1832,10 @@ msgstr "Dodaj podkładkę wokół modelu i zignoruj podniesienie na podporach"
msgid "Critical angle"
msgstr "Kąt krytyczny"
#: src/slic3r/GUI/GUI_App.cpp:589
msgid "Critical error"
msgstr "Błąd krytyczny"
#: src/libslic3r/PrintConfig.cpp:2832
msgid "Cross"
msgstr "Krzyżowy"
@ -1894,6 +1904,10 @@ msgstr "Ustawienie Własnej Drukarki"
msgid "Custom profile name:"
msgstr "Nazwa własnego profilu:"
#: src/slic3r/GUI/Plater.cpp:3397
msgid "Custom supports and seams were removed after repairing the mesh."
msgstr "Niestandardowe podpory i szwy zostały usunięte podczas naprawy modelu."
#: src/slic3r/GUI/DoubleSlider.cpp:1135
msgid "Custom template (\"%1%\")"
msgstr "Własny szablon (\"%1%\")"
@ -1979,10 +1993,6 @@ msgstr "Domyślny profil filamentu"
msgid "Default filament profile associated with the current printer profile. On selection of the current printer profile, this filament profile will be activated."
msgstr "Domyślny profil filamentu powiązany z obecnym profilem drukarki. Przy wybraniu obecnego profilu drukarki automatycznie zostanie wybrany ten profil filamentu."
#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939
msgid "Default print color"
msgstr "Domyślny kolor druku"
#: src/slic3r/GUI/Tab.cpp:1302
msgid "default print profile"
msgstr "domyślny profil druku"
@ -2433,9 +2443,13 @@ msgstr "Duplikuj wg siatki"
msgid "Duration"
msgstr "Czas trwania"
#: src/slic3r/GUI/PresetHints.cpp:39
msgid "During the other layers, fan"
msgstr "Na pozostałych warstwach, wentylator"
#: src/slic3r/GUI/PresetHints.cpp:51
msgid "During the other layers, fan will always run at %1%%%"
msgstr "Podczas drukowania innych warstw wentylator będzie pracować na %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:58
msgid "During the other layers, fan will be turned off."
msgstr "Podczas drukowania innych warstw wentylator będzie wyłączony."
#: src/libslic3r/PrintConfig.cpp:2833
msgid "Dynamic"
@ -2770,6 +2784,10 @@ msgstr "Błąd: %s"
msgid "ERROR: not enough resources to execute a new job."
msgstr "BŁĄD: brak zasobów do wykonania nowego zadania."
#: src/slic3r/GUI/Plater.cpp:3374
msgid "ERROR: Please close all manipulators available from the left toolbar before fixing the mesh."
msgstr "BŁĄD: Zamknij wszystkie manipulatory dostępne w lewym pasku narzędzi przed podjęciem naprawy modelu."
#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557
#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125
#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196
@ -3071,10 +3089,6 @@ msgstr "Ekstruder zmieniony na"
msgid "Extruder clearance"
msgstr "Odstęp od ekstrudera"
#: src/slic3r/GUI/Tab.cpp:1563
msgid "Extruder clearance (mm)"
msgstr "Odstęp od ekstrudera (mm)"
#: src/libslic3r/PrintConfig.cpp:558
msgid "Extruder Color"
msgstr "Kolor ekstrudera"
@ -3155,9 +3169,9 @@ msgstr "Niepowodzenie ładowania modelu wejściowego."
msgid "Failed processing of the output_filename_format template."
msgstr "Błąd przetwarzania wzoru output_filename_format (format nazwy pliku wyjściowego)."
#: src/slic3r/GUI/PresetHints.cpp:41
msgid "Fan"
msgstr "Wentylator"
#: src/slic3r/GUI/GUI_App.cpp:1648
msgid "Failed to activate configuration snapshot."
msgstr "Niepowodzenie aktywacji zrzutu konfiguracji."
#: src/slic3r/GUI/Tab.cpp:1802
msgid "Fan settings"
@ -3171,6 +3185,22 @@ msgstr "Prędkość wentylatora"
msgid "Fan Speed (%)"
msgstr "Prędkość wentylatora (%)"
#: src/slic3r/GUI/PresetHints.cpp:49
msgid "Fan speed will be ramped from zero at layer %1% to %2%%% at layer %3%."
msgstr "Prędkość wentylatora będzie podnoszona od zera na warstwie %1% do %2%%% na warstwie %3%."
#: src/libslic3r/PrintConfig.cpp:1001
msgid "Fan speed will be ramped up linearly from zero at layer \"disable_fan_first_layers\" to maximum at layer \"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower than \"disable_fan_first_layers\", in which case the fan will be running at maximum allowed speed at layer \"disable_fan_first_layers\" + 1."
msgstr "Prędkość wentylatora będzie podnoszona liniowo od zera na warstwie \"disable_fan_first_layers\" do maksimum na warstwie \"full_fan_speed_layer\". Parametr \"full_fan_speed_layer\" będzie ignorowany, jeśli jest niższy niż \"disable_fan_first_layers\" i w takim przypadku będzie pracować z najwyższą dozwoloną prędkością na warstwie \"disable_fan_first_layers\" +1."
#: src/slic3r/GUI/PresetHints.cpp:51
msgid "Fan will always run at %1%%%"
msgstr "Wentylator będzie zawsze pracować na %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:58
msgid "Fan will be turned off."
msgstr "Wentylator będzie wyłączony."
#: src/libslic3r/PrintConfig.cpp:2548
msgid "Fast"
msgstr "Szybkie"
@ -3416,6 +3446,10 @@ msgstr "Prędkość pierwszej warstwy"
msgid "First layer volumetric"
msgstr "Na pierwszej warstwie"
#: src/slic3r/GUI/Plater.cpp:3380
msgid "Fix through NetFabb"
msgstr "Naprawa przez NetFabb"
#: src/slic3r/GUI/GUI_ObjectList.cpp:1776
msgid "Fix through the Netfabb"
msgstr "Napraw używając Netfabb"
@ -3521,6 +3555,10 @@ msgstr "Przód"
msgid "Front View"
msgstr "Widok przodu"
#: src/libslic3r/PrintConfig.cpp:1000
msgid "Full fan speed at layer"
msgstr "Pełna prędkość wentylatora na warstwie "
#: src/slic3r/GUI/Tab.cpp:1331
msgid "full profile name"
msgstr "pełna nazwa profilu"
@ -3549,6 +3587,10 @@ msgstr "Rodzaj G-code"
msgid "G-code preview"
msgstr "Podgląd G-code"
#: src/libslic3r/PrintConfig.cpp:66
msgid "G-code thumbnails"
msgstr "Miniaturki G-code"
#: src/libslic3r/PrintConfig.cpp:3552
msgid "G-code viewer"
msgstr "Przeglądarka G-code"
@ -3644,6 +3686,10 @@ msgstr "Generowanie bufora wierzchołków"
msgid "Generic"
msgstr "Źródłowy"
#: src/slic3r/Utils/PresetUpdater.cpp:600
msgid "getting config updates"
msgstr "pobieranie aktualizacji konfiguracji"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
msgid "Gizmo cut"
msgstr "Cięcie przy pomocy \"uchwytów\""
@ -3880,6 +3926,10 @@ msgstr "Plaster miodu"
msgid "Horizontal shells"
msgstr "Powłoka pozioma"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:253
msgid "Horizontal Slider"
msgstr "Suwak poziomy"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:209
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213
#: src/slic3r/GUI/KBShortcutsDialog.cpp:238
@ -3892,30 +3942,6 @@ msgstr "Suwak poziomy - przesuń aktywny punkt w lewo"
msgid "Horizontal slider - Move active thumb Right"
msgstr "Suwak poziomy - przesuń aktywny punkt w prawo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:238
msgid "Horizontal slider - Move current thumb Left"
msgstr "Suwak poziomy - przesuń obecny punkt w lewo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:239
msgid "Horizontal slider - Move current thumb Right"
msgstr "Suwak poziomy - przesuń obecny punkt w prawo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:236
msgid "Horizontal slider - Set left thumb as active"
msgstr "Suwak poziomy - ustaw lewy punkt jako aktywny"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:236
msgid "Horizontal slider - Set left thumb to current thumb"
msgstr "Suwak poziomy - przysuń lewy punkt do obecnego"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Horizontal slider - Set right thumb as active"
msgstr "Suwak poziomy - ustaw prawy punkt jako aktywny"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Horizontal slider - Set right thumb to current thumb"
msgstr "Suwak poziomy - przysuń prawy punkt do obecnego"
#: src/libslic3r/PrintConfig.cpp:279
msgid "Horizontal width of the brim that will be printed around each object on the first layer."
msgstr "Szerokość brim (obramowania), drukowanego wokół każdego z modeli na pierwszej warstwie."
@ -4055,7 +4081,7 @@ msgstr "Jeśli włączone, na górze podglądu 3D będzie wyświetlany przycisk
msgid "If enabled, the command line arguments are sent to an existing instance of GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the \"single_instance\" configuration value from application preferences."
msgstr "Jeśli włączone, argumenty linii komend zostaną wysłane do istniejącego GUI PrusaSlicer lub aktywnego okna PrusaSlicer. Nadpisuje parametr konfiguracji \"single_instance\" z preferencji aplikacji."
#: src/slic3r/GUI/Preferences.cpp:278
#: src/slic3r/GUI/Preferences.cpp:294
msgid "If enabled, the descriptions of configuration parameters in settings tabs wouldn't work as hyperlinks. If disabled, the descriptions of configuration parameters in settings tabs will work as hyperlinks."
msgstr "Po włączeniu, opisy parametrów w zakładkach ustawień nie będą działać jak hiperłącza. Po wyłączeniu, kliknięcie na opis parametru w zakładkach ustawień otworzy go jak hiperłącze."
@ -4256,6 +4282,10 @@ msgstr "cale"
msgid "In this mode you can select only other %s Items%s"
msgstr "W tym trybie możesz wybrać jedynie %s elementów %s"
#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:423
msgid "Inches"
msgstr "Cale"
#: src/slic3r/GUI/UpdateDialogs.cpp:230
msgid "Incompatible bundles:"
msgstr "Niekompatybilne zestawy ustawień:"
@ -4335,10 +4365,6 @@ msgstr "Info"
msgid "Information"
msgstr "Informacje"
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547
msgid "Infornation"
msgstr "Informacje"
#: src/libslic3r/PrintConfig.cpp:1101
msgid "Inherits profile"
msgstr "Dziedziczy profil"
@ -4355,6 +4381,11 @@ msgstr "Początkowy czas naświetlania"
msgid "Initial layer height"
msgstr "Wysokość pierwszej warstwy"
#: src/slic3r/GUI/Field.cpp:269
#, possible-c-format
msgid "Input value is out of range\nAre you sure that %s is a correct value and that you want to continue?"
msgstr "Wprowadzona wartość jest poza zakresem.\nCzy na pewno %s to poprawna wartość i chcesz kontynuować?"
#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370
msgid "Input value is out of range"
msgstr "Wartość poza zakresem"
@ -4363,6 +4394,10 @@ msgstr "Wartość poza zakresem"
msgid "Inspect / activate configuration snapshots"
msgstr "Sprawdzenie / aktywacja zrzutów konfiguracji"
#: src/slic3r/Utils/PresetUpdater.cpp:120
msgid "install"
msgstr "instalacja"
#: src/slic3r/GUI/ObjectDataViewModel.cpp:62
#: src/slic3r/GUI/ObjectDataViewModel.cpp:218
#, possible-c-format
@ -4432,6 +4467,10 @@ msgstr "Nieprawidłowe przenikanie łączników podpór"
msgid "invalid header or archive is corrupted"
msgstr "niewłaściwy nagłówek lub uszkodzone archiwum"
#: src/slic3r/GUI/Field.cpp:375
msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\""
msgstr "Błędny format wejściowy. Oczekiwano wektora wymiarów w następującym formacie: \"%1%\""
#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274
#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
msgid "Invalid numeric input."
@ -4521,21 +4560,6 @@ msgstr "Przejdź na wysokość %s \nlub ustaw tryb linijki"
msgid "Jump to height %s\nSet ruler mode\nor Set extruder sequence for the entire print"
msgstr "Przejdź na wysokość %s \nUstaw tryb linijki\nlub ustaw sekwencję ekstrudera dla całego wydruku"
#: src/slic3r/GUI/DoubleSlider.cpp:1075
#, possible-c-format
msgid "Jump to height %s or Set extruder sequence for the entire print"
msgstr "Przejdź na wysokość %s lub ustaw sekwencję ekstruderów dla całego wydruku"
#: src/slic3r/GUI/DoubleSlider.cpp:1222
#, possible-c-format
msgid "Jump to height %s or Set ruler mode"
msgstr "Przejdź na wysokość %s lub ustaw tryb linijki"
#: src/slic3r/GUI/DoubleSlider.cpp:1220
#, possible-c-format
msgid "Jump to height %s Set ruler mode\n or Set extruder sequence for the entire print"
msgstr "Przejdź na wysokość %s Ustaw tryb linijki\n lub ustaw sekwencję ekstrudera dla całego wydruku"
#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852
msgid "Jump to move"
msgstr "Przeskocz do ruchu"
@ -4646,10 +4670,6 @@ msgstr "Warstwy i obrysy"
msgid "Layers and Perimeters"
msgstr "Warstwy i Obrysy"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:225
msgid "Layers Slider"
msgstr "Suwak warstw"
#: src/slic3r/GUI/OptionsGroup.cpp:293
msgctxt "Layers"
msgid "Bottom"
@ -4695,10 +4715,6 @@ msgstr "Lewy przycisk myszy:"
msgid "Left View"
msgstr "Widok lewy"
#: src/slic3r/GUI/GUI_Preview.cpp:339
msgid "Legend"
msgstr "Legenda"
#: src/slic3r/GUI/GUI_Preview.cpp:1480
msgid "Legend/Estimated printing time"
msgstr "Legenda/szacowany czas drukowania"
@ -5355,6 +5371,10 @@ msgstr "mm (zero, aby wyłączyć)"
msgid "mm or %"
msgstr "mm lub %"
#: src/libslic3r/PrintConfig.cpp:193
msgid "mm or % (zero to disable)"
msgstr "mm lub % (zero, aby wyłączyć)"
#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645
#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662
#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697
@ -5494,6 +5514,22 @@ msgstr "Przesuń aktywny punkt suwaka w lewo"
msgid "Move active slider thumb Right"
msgstr "Przesuń aktywny punkt suwaka w prawo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:220
msgid "Move active thumb Down"
msgstr "Przesuń aktywny punkt w dół"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:241
msgid "Move active thumb Left"
msgstr "Przesuń aktywny punkt w lewo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:242
msgid "Move active thumb Right"
msgstr "Przesuń aktywny punkt w prawo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
msgid "Move active thumb Up"
msgstr "Przesuń aktywny punkt w górę"
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
msgid "Move clipping plane"
msgstr "Przesunięcie płaszczyzny przecinania"
@ -5502,14 +5538,6 @@ msgstr "Przesunięcie płaszczyzny przecinania"
msgid "Move current slider thumb Down"
msgstr "Przesuń obecny punkt suwaka w dół"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
msgid "Move current slider thumb Left"
msgstr "Przesuń obecny punkt suwaka w lewo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
msgid "Move current slider thumb Right"
msgstr "Przesuń obecny punkt suwaka w prawo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
msgid "Move current slider thumb Up"
msgstr "Przesuń obecny punkt suwaka w górę"
@ -5518,16 +5546,6 @@ msgstr "Przesuń obecny punkt suwaka w górę"
msgid "Move drainage hole"
msgstr "Przesuń otwór odpływowy"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:209
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213
msgid "Move horizontal slider current thumb Left"
msgstr "Przesuń obecny punkt suwaka poziomego w lewo"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:210
#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
msgid "Move horizontal slider current thumb Right"
msgstr "Przesuń obecny punkt suwaka poziomego w prawo"
#: src/slic3r/GUI/GLCanvas3D.cpp:3810
msgid "Move Object"
msgstr "Przesuń Model"
@ -5556,16 +5574,6 @@ msgstr "Przesuń zaznaczenie o +10 mm w osi Y"
msgid "Move support point"
msgstr "Przenieś plik podpory"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
#: src/slic3r/GUI/KBShortcutsDialog.cpp:212
msgid "Move vertical slider current thumb Down"
msgstr "Przesuń obecny punkt suwaka pionowego w dół"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
#: src/slic3r/GUI/KBShortcutsDialog.cpp:211
msgid "Move vertical slider current thumb Up"
msgstr "Przesuń obecny punkt suwaka pionowego w górę"
#: src/slic3r/GUI/GCodeViewer.cpp:2492
msgid "Movement"
msgstr "Ruch"
@ -5955,6 +5963,14 @@ msgstr "Tryb jednej warstwy"
msgid "One or more object were assigned an extruder that the printer does not have."
msgstr "Jeden lub więcej modeli zostało przypisanych do ekstrudera, którego drukarka nie posiada."
#: src/slic3r/GUI/GUI_App.cpp:1784
msgid "Ongoing uploads"
msgstr "Trwające transfery"
#: src/libslic3r/Print.cpp:1269
msgid "Only a single object may be printed at a time in Spiral Vase mode. Either remove all but the last object, or enable sequential mode by \"complete_objects\"."
msgstr "W trybie wazy możliwe jest drukowanie tylko jednego modelu na raz. Zostaw na stole tylko jeden model lub włącz druk sekwencyjny parametrem \"complete_objects\"."
#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840
msgid "Only create support if it lies on a build plate. Don't create support on a print."
msgstr "Tworzenie podpór tylko na stole. Nie będą tworzone na wydruku."
@ -6307,11 +6323,6 @@ msgstr "Wstrzymaj wydruk (\"%1%\")"
msgid "Pause Print G-code"
msgstr "G-code dla pauzy drukowania"
#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949
#: src/slic3r/GUI/GLCanvas3D.cpp:988
msgid "Pause print or custom G-code"
msgstr "Pauza wydruku lub własny G-code"
#: src/libslic3r/PrintConfig.cpp:1147
msgid "Percent of a flow rate relative to object's normal layer height."
msgstr "Procentowy udział przepływu w stosunku do normalnej wysokości warstwy modelu."
@ -6360,9 +6371,9 @@ msgstr "Drukarki fizyczne"
msgid "Pick another vendor supported by %s"
msgstr "Wybierz innego producenta obsługiwanego przez %s"
#: src/libslic3r/PrintConfig.cpp:66
msgid "Picture sizes to be stored into a .gcode and .sl1 files"
msgstr "Rozmiary obrazów będą przechowywane w plikach .gcode i .sl1"
#: src/libslic3r/PrintConfig.cpp:67
msgid "Picture sizes to be stored into a .gcode and .sl1 files, in the following format: \"XxY, XxY, ...\""
msgstr "Rozmiary grafik przechowywanych w plikach .gcode i .sl1, w formacie: \"XxY, XxY, ...\""
#: src/libslic3r/PrintConfig.cpp:2822
msgid "Pillar connection mode"
@ -6485,11 +6496,7 @@ msgid "Preset \"%1%\" is not compatible with the new printer profile and it has
msgstr "Zestaw ustawień \"%1%\" jest niekompatybilny z nowym profilem drukarki i ma następujące niezapisane zmiany:"
#: src/slic3r/GUI/SavePresetDialog.cpp:136
msgid "Preset with name \"%1%\" already exists and is imcopatible with selected printer."
msgstr "Zestaw ustawień o nazwie \"%1%\" już istnieje i jest niekompatybilny z wybraną drukarką."
#: src/slic3r/GUI/SavePresetDialog.cpp:136
msgid "Preset with name \"%1%\" already exists and is incopatible with selected printer."
msgid "Preset with name \"%1%\" already exists and is incompatible with selected printer."
msgstr "Zestaw ustawień o nazwie \"%1%\" już istnieje i jest niekompatybilny z wybraną drukarką."
#: src/slic3r/GUI/SavePresetDialog.cpp:148
@ -6501,6 +6508,10 @@ msgctxt "PresetName"
msgid "Copy"
msgstr "Kopia"
#: src/slic3r/GUI/GLCanvas3D.cpp:3990
msgid "Press %1%left mouse button to enter the exact value"
msgstr "Naciśnij %1%lewy przycisk myszy, aby wprowadzić wartość liczbową."
#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
msgid "Press to activate deselection rectangle"
msgstr "Naciśnij, aby aktywować prostokąt odznaczający"
@ -6559,7 +6570,7 @@ msgstr "Średnice"
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:209 src/slic3r/GUI/Tab.cpp:2024
msgid "Print Host upload"
msgstr "Wysyłanie do serwera druku"
msgstr "Przesyłanie do serwera druku"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
#: src/slic3r/GUI/PrintHostDialogs.cpp:136
@ -6719,6 +6730,10 @@ msgstr "PrusaSlicer wykrył systemowy magazyn certyfikatów SSL w: %1%"
msgid "PrusaSlicer GUI initialization failed"
msgstr "Niepowodzenie inicjalizacji PrusaSlicer GUI"
#: src/slic3r/GUI/GUI_App.cpp:586
msgid "PrusaSlicer has encountered a localization error. Please report to PrusaSlicer team, what language was active and in which scenario this issue happened. Thank you.\n\nThe application will now terminate."
msgstr "PrusaSlicer napotkał błąd związany z tłumaczeniem tekstów. Skontaktuj się z zespołem odpowiedzialnym za rozwój PrusaSlicer i podaj język, który był włączony, gdy wystąpił błąd. Dziękujemy.\n\nAplikacja zostanie zamknięta."
#: src/slic3r/GUI/AboutDialog.cpp:285
msgid "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap community."
msgstr "PrusaSlicer bazuje na projekcie Slic3r autorstwa Alessandro Ranellucciego i społeczności RepRap."
@ -7739,10 +7754,6 @@ msgstr "Sekw."
msgid "Sequential printing"
msgstr "Drukowanie sekwencyjne (model po modelu)"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
msgid "Sequential Slider"
msgstr "Suwak sekwencyjny"
#: src/slic3r/GUI/Preferences.cpp:230
msgid "Sequential slider applied only to top layer"
msgstr "Suwak sekwencyjny stosowany tylko do górnej warstwy"
@ -7788,6 +7799,14 @@ msgstr "Ustaw sekwencję ekstruderów dla całego wydruku"
msgid "Set extruder(tool) sequence"
msgstr "Ustaw sekwencję ekstruderów (narzędzi)"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:243
msgid "Set left thumb as active"
msgstr "Ustaw lewy punkt jako aktywny"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
msgid "Set lower thumb as active"
msgstr "Ustaw dolny punkt jako aktywny"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
msgid "Set lower thumb to current slider thumb"
msgstr "Przysuń dolny punkt suwaka do obecnego"
@ -7821,6 +7840,10 @@ msgstr "Zaznacz do drukowania"
msgid "Set Printable Instance"
msgstr "Włącz drukowanie instancji"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:244
msgid "Set right thumb as active"
msgstr "Ustaw prawy punkt jako aktywny"
#: src/slic3r/GUI/DoubleSlider.cpp:1836
msgid "Set ruler mode"
msgstr "Ustaw tryb linijki"
@ -7889,6 +7912,10 @@ msgstr "Zaznacz do ignorowania przy drukowaniu"
msgid "Set Unprintable Instance"
msgstr "Ignoruj drukowanie instancji"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:221
msgid "Set upper thumb as active"
msgstr "Ustaw górny punkt jako aktywny"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
msgid "Set upper thumb to current slider thumb"
msgstr "Przysuń górny punkt suwaka do obecnego"
@ -8227,10 +8254,6 @@ msgstr "PrusaSlicer może przesyłać pliki G-code do serwera druku. To pole pow
msgid "Slic3r can upload G-code files to a printer host. This field should contain the API Key or the password required for authentication."
msgstr "Slic3r może przesyłać pliki G-code do serwera druku. To pole powinno zawierać klucz API lub hasło niezbędne do uwierzytelnienia."
#: src/libslic3r/PrintConfig.cpp:100
msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance."
msgstr "Slic3r może przesyłać pliki G-code do serwera druku. Ta sekcja powinna zawierać nazwę hosta, adres IP lub adres URL serwera."
#: src/libslic3r/PrintConfig.cpp:100
msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance. Print host behind HAProxy with basic auth enabled can be accessed by putting the user name and password into the URL in the following format: https://username:password@your-octopi-address/"
msgstr "PrusaSlicer może przesyłać pliki G-code do serwera druku. To pole powinno zawierać nazwę hosta, adres IP lub URL instancji hosta drukarki. Możesz zyskać dostęp do hosta ukrytego za HAProxy z podstawową autoryzacją przez wpisanie hasła w pole URL w tym formacie: https://nazwa_użytkownika:hasło@adres-octopi/"
@ -8633,6 +8656,10 @@ msgstr "Plik STL wyeksportowany do %s"
msgid "Stop at height"
msgstr "Zakres do"
#: src/slic3r/GUI/GUI_App.cpp:1781
msgid "Stop them and continue anyway?"
msgstr "Zatrzymać i kontynuować mimo wszystko?"
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295
msgid "Success!"
msgstr "Powodzenie!"
@ -8769,10 +8796,6 @@ msgstr "Wspiera tryb Stealth"
msgid "Supports work better, if the following feature is enabled:\n- Detect bridging perimeters"
msgstr "Podpory działają lepiej, jeśli włączone jest poniższe ustawienie:\n- Wykrywanie mostów przy obrysach"
#: src/slic3r/GUI/DoubleSlider.cpp:1824
msgid "Supprese show the ruler"
msgstr "Wyłącz wyświetlanie linijki"
#: src/slic3r/GUI/Preferences.cpp:104
msgid "Suppress \" - default - \" presets"
msgstr "Ukryj \" - domyślne - \" zestawy ustawień"
@ -8987,6 +9010,18 @@ msgstr "Następujące modele drukarek FFF nie mają przypisanych filamentów:"
msgid "The following presets were modified:"
msgstr "Następujące zestawy ustawień zostały zmodyfikowane:"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:253
msgid "The following shortcuts are applicable in G-code preview when the horizontal slider is active"
msgstr "Następujące skróty mają zastosowanie w podglądzie G-code, gdy aktywny jest suwak poziomy"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "The following shortcuts are applicable in G-code preview when the vertical slider is active"
msgstr "Następujące skróty mają zastosowanie w podglądzie G-code, gdy aktywny jest suwak pionowy"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
msgid "The following shortcuts are applicable when the specified gizmo is active"
msgstr "Następujące skróty mają zastosowanie, gdy aktywy jest określony uchwyt"
#: src/slic3r/GUI/ConfigWizard.cpp:2275
msgid "The following SLA printer models have no materials selected:"
msgstr "Następujące modele drukarek SLA nie mają przypisanych materiałów:"
@ -9023,6 +9058,10 @@ msgstr "Maksymalny dystans pomiędzy słupkami podpór, które powinny zostać p
msgid "The max length of a bridge"
msgstr "Maksymalna długość mostu"
#: src/libslic3r/PrintConfig.cpp:190
msgid "The maximum detour length for avoid crossing perimeters. If the detour is longer than this value, avoid crossing perimeters is not applied for this travel path. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path."
msgstr "Maksymalna długość objazdu przy unikaniu przejeżdżania nad obrysami. Jeśli objazd miałby wykroczyć poza tę wartość, funkcja \"Unikaj ruchów nad obrysami\" zostanie zignorowana dla tej ścieżki. Długość objazdu można zdefiniować jako wartość absolutna lub obliczona procentowo (np. 50%) z długości ruchu bezpośredniego."
#: src/libslic3r/PrintConfig.cpp:2878
msgid "The minimum distance of the pillar base from the model in mm. Makes sense in zero elevation mode where a gap according to this parameter is inserted between the model and the pad."
msgstr "Minimalny odstęp stopy słupka od modelu, wyrażony w mm. Ma zastosowanie w trybie zerowego podniesienia, gdy odstęp określony tym parametrem będzie oddzielał model od podkładki."
@ -9031,6 +9070,14 @@ msgstr "Minimalny odstęp stopy słupka od modelu, wyrażony w mm. Ma zastosowan
msgid "The name cannot be empty."
msgstr "Nazwa nie może być pusta."
#: src/slic3r/GUI/SavePresetDialog.cpp:152
msgid "The name cannot end with space character."
msgstr "Nazwa nie może kończyć się spacją."
#: src/slic3r/GUI/SavePresetDialog.cpp:147
msgid "The name cannot start with space character."
msgstr "Nazwa nie może zaczynać się spacją."
#: src/libslic3r/PrintConfig.cpp:219
msgid "The number of bottom solid layers is increased above bottom_solid_layers if necessary to satisfy minimum thickness of bottom shell."
msgstr "Liczba dolnych warstw jest zwiększona ponad bottom_solid_layers, jeśli to konieczne, aby spełnić warunek minimalnej grubości powłoki."
@ -9132,10 +9179,6 @@ msgstr "Prędkość retrakcji (stosowana tylko dla silnika ekstrudera)."
msgid "The Spiral Vase mode requires:\n- one perimeter\n- no top solid layers\n- 0% fill density\n- no support material\n- Ensure vertical shell thickness enabled\n- Detect thin walls disabled"
msgstr "Wymagania trybu wazy:\n- jeden obrys\n- brak górnych warstw\n- 0% wypełnienia\n- brak materiału podporowego\n- wyłączone ustawienie \"Zagwarantuj grubość ścianki\"\n- wyłączone wykrywanie cienkich ścian"
#: src/libslic3r/Print.cpp:1263
msgid "The Spiral Vase option can only be used when printing a single object."
msgstr "Tryb Wazy może być aktywny tylko podczas druku pojedynczego modelu."
#: src/libslic3r/Print.cpp:1270
msgid "The Spiral Vase option can only be used when printing single material objects."
msgstr "Tryb Wazy może być używany jedynie podczas druku z jednego materiału."
@ -9163,6 +9206,10 @@ msgstr "Wprowadzone ustawienia spowodują pusty wydruk."
msgid "The thickness of the pad and its optional cavity walls."
msgstr "Grubość podkładki i opcjonalnie wydrążenie ścianek."
#: src/slic3r/GUI/GUI_App.cpp:1781
msgid "The uploads are still ongoing"
msgstr "Trwają jeszcze transfery"
#: src/libslic3r/PrintConfig.cpp:2053
msgid "The vertical distance between object and support material interface. Setting this to 0 will also prevent Slic3r from using bridge flow and speed for the first object layer."
msgstr "Dystans w pionie między modelem a warstwą łączącą materiału podporowego. Ustawienie na 0 wyłączy ustawienie mostu (prędkości i przepływu) dla pierwszej warstwy modelu nad warstwą łączącą."
@ -9316,9 +9363,9 @@ msgstr "Ta funkcja pozwala ustawić oddzielne wysokości dla wypełnienia i obry
msgid "This feature allows to force a solid layer every given number of layers. Zero to disable. You can set this to any value (for example 9999); Slic3r will automatically choose the maximum possible number of layers to combine according to nozzle diameter and layer height."
msgstr "Ta funkcja pozwoli wstawić zwartą warstwę wypełnienia pomiędzy określoną liczbą warstw. Ustaw zero, aby wyłączyć. Możesz ustawić tu dowolną wartość (np. 9999) a PrusaSlicer automatycznie wybierze maksymalną możliwą liczbę warstw biorąc pod uwagę średnicę dyszy i wysokość warstwy."
#: src/libslic3r/PrintConfig.cpp:1910
msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object."
msgstr "Ta funkcja pozwala drukować modele z 1 zewnętrzną ścianką z ciągłym podnoszeniem Z, aby uniknąć widocznego szwu (czyli ekstruder nie będzie drukował po 1 warstwie na 1 wysokości, lecz będzie podnosił się płynnie w formie spirali). Wymaga użycia 1 obrysu, zerowego wypełnienia, braku warstw górnych i braku podpór. Możesz ustawić dowolną ilość dolnych warstw jak i obrysów skirt/brim. Nie zadziała przy druku więcej niż jednego modelu."
#: src/libslic3r/PrintConfig.cpp:1995
msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than one single object."
msgstr "Ta funkcja pozwala drukować modele z 1 zewnętrzną ścianką z ciągłym podnoszeniem Z, aby uniknąć widocznego szwu. Wymaga włączenia 1 obrysu, zerowego wypełnienia, braku warstw górnych i braku podpór. Możesz ustawić dowolną ilość dolnych warstw jak i obrysów skirt/brim. Nie zadziała przy druku więcej niż jednego modelu."
#: src/slic3r/GUI/Plater.cpp:2329
msgid "This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?"
@ -9397,10 +9444,6 @@ msgstr "To jest przyspieszenie stosowane przy druku pierwszej warstwy. Ustaw zer
msgid "This is the acceleration your printer will use for infill. Set zero to disable acceleration control for infill."
msgstr "To jest przyspieszenie stosowane przy druku wypełnienia. Ustaw zero aby, wyłączyć osobne ustawienia przyspieszenia dla wypełnienia."
#: src/libslic3r/PrintConfig.cpp:1508
msgid "This is the acceleration your printer will use for perimeters. A high value like 9000 usually gives good results if your hardware is up to the job. Set zero to disable acceleration control for perimeters."
msgstr "To jest przyspieszenie stosowane przy druku obrysów. Wysoka wartość, np. 9000 zazwyczaj daje dobre rezultaty - pod warunkiem, że Twój sprzęt się do tego nadaje. Ustaw zero, aby wyłączyć osobne ustawienia przyspieszenia dla obrysów."
#: src/libslic3r/PrintConfig.cpp:1582
msgid "This is the acceleration your printer will use for perimeters. Set zero to disable acceleration control for perimeters."
msgstr "Z takim przyspieszeniem będą drukowane obrysy. Ustaw zero, aby wyłączyć kontrolowanie przyspieszenia tylko dla obrysów."
@ -9577,10 +9620,6 @@ msgstr "Aby użyć własnego certyfikatu, zaimportuj plik do magazynu (Certifica
msgid "Toggle %c axis mirroring"
msgstr "Włącz odbicie w osi %c"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
msgid "Toggle vertical slider one layer mode ON/OFF"
msgstr "Włącz/wyłącz tryb wyświetlania jednej warstwy suwaka pionowego"
#: src/libslic3r/miniz_extension.cpp:93
msgid "too many files"
msgstr "zbyt wiele plików"
@ -9840,11 +9879,6 @@ msgstr "Niewłaściwy wybór"
msgid "up to"
msgstr "do"
#: src/slic3r/GUI/GLCanvas3D.cpp:961
#, possible-c-format
msgid "up to %.2f mm"
msgstr "do %.2f mm"
#: src/slic3r/GUI/UpdateDialogs.cpp:38
msgid "Update available"
msgstr "Dostępna jest aktualizacja"
@ -9894,10 +9928,6 @@ msgstr "Górna warstwa"
msgid "Use another extruder"
msgstr "Użyj innego ekstrudera"
#: src/slic3r/GUI/GLCanvas3D.cpp:3959
msgid "Use CTRL+left mouse key to enter text edit mode:"
msgstr "Wciśnij CTRL+Lewy przycisk myszy, aby wejść w tryb edycji tekstu:"
#: src/slic3r/GUI/Preferences.cpp:220
msgid "Use custom size for toolbar icons"
msgstr "Użyj własnego rozmiaru ikon pasków narzędzi"
@ -10069,13 +10099,9 @@ msgstr "wersja"
msgid "Vertical shells"
msgstr "Powłoka pionowa"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:234
msgid "Vertical slider - Add color change marker for current layer"
msgstr "Suwak pionowy - dodaj punkt zmiany filamentu na obecnej warstwie"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
msgid "Vertical slider - Delete color change marker for current layer"
msgstr "Suwak pionowy - usuń punkt zmiany filamentu na obecnej warstwie"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:237
msgid "Vertical Slider"
msgstr "Suwak pionowy"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
#: src/slic3r/GUI/KBShortcutsDialog.cpp:212
@ -10089,30 +10115,6 @@ msgstr "Suwak pionowy - przesuń aktywny punkt w dół"
msgid "Vertical slider - Move active thumb Up"
msgstr "Suwak pionowy - przesuń aktywny punkt w górę"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:231
msgid "Vertical slider - Move current thumb Down"
msgstr "Suwak pionowy - przesuń obecny punkt w dół"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
msgid "Vertical slider - Move current thumb Up"
msgstr "Suwak pionowy - przesuń obecny punkt w górę"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:233
msgid "Vertical slider - Set lower thumb as active"
msgstr "Suwak pionowy - ustaw dolny punkt jako aktywny"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:233
msgid "Vertical slider - Set lower thumb to current thumb"
msgstr "Suwak pionowy - przysuń dolny punkt do obecnego"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
msgid "Vertical slider - Set upper thumb as active"
msgstr "Suwak pionowy - ustaw górny punkt jako aktywny"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
msgid "Vertical slider - Set upper thumb to current thumb"
msgstr "Suwak pionowy - przysuń górny punkt do obecnego"
#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271
msgid "View"
msgstr "Widok"
@ -10293,14 +10295,6 @@ msgstr "Średnica słupków łączących model z wygenerowaną podkładką."
msgid "Width of the display"
msgstr "Szerokość wyświetlacza"
#: src/slic3r/GUI/PresetHints.cpp:47
msgid "will always run at %1%%%"
msgstr "będzie zawsze pracować w %1%%%"
#: src/slic3r/GUI/PresetHints.cpp:54
msgid "will be turned off."
msgstr "będzie wyłączony."
#: src/libslic3r/PrintConfig.cpp:2584
msgid "Will inflate or deflate the sliced 2D polygons according to the sign of the correction."
msgstr "Trójkąty 2D zostaną rozciągnięte lub ściśnięte zgodnie z kierunkiem korekcji."
@ -10379,6 +10373,10 @@ msgstr "Globalny układ współrzędnych"
msgid "Would you like to install it?\n\nNote that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n\nUpdated configuration bundles:"
msgstr "Czy chcesz kontynuować instalację?\n\nWeź pod uwagę, że najpierw zostanie stworzony zrzut konfiguracji. Może być przywrócony w każdej chwili, gdyby okazało się, że nowa wersja powoduje problemy.\n\nZaktualizowane paczki konfiguracyjne:"
#: src/slic3r/GUI/GUI_App.cpp:1802
msgid "Would you like to stop uploads and close the program?"
msgstr "Czy chcesz zatrzymać przesyłanie i zamknąć program?"
#: src/libslic3r/miniz_extension.cpp:151
msgid "write calledback failed"
msgstr "błąd write calledback"
@ -10460,6 +10458,10 @@ 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/NotificationManager.hpp:459
msgid "You have just added a G-code for color change, but its value is empty.\nTo export the G-code correctly, check the \"Color Change G-code\" in \"Printer Settings > Custom G-code\""
msgstr "Dodany został G-code dla zmiany koloru, ale nie zawiera parametrów.\nAby poprawnie wyeksportować G-code, wybierz \"G-code dla zmiany koloru\" w sekcji \"Ustawienia drukarki -> Własny G-code\""
#: src/slic3r/GUI/SavePresetDialog.cpp:277
msgid "You have selected physical printer \"%1%\" \nwith related printer preset \"%2%\""
msgstr "Wybrana została fizyczna drukarka \"%1%\"\nz powiązanym zestawem ustawień drukarki \"%2%\""
@ -10482,8 +10484,8 @@ msgid "You need to restart %s to make the changes effective."
msgstr "Wymagany jest restart %s, aby wprowadzić zmiany."
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468
msgid "You should to change a name of your printer device. It can't be saved."
msgstr "Należy zmienić nazwę drukarki. Nie można jej zapisać."
msgid "You should change the name of your printer device."
msgstr "Należy zmienić nazwę drukarki."
#: src/slic3r/GUI/GUI_ObjectList.cpp:3884
#, possible-c-format
@ -10514,6 +10516,10 @@ msgstr "Twój plik został naprawiony."
msgid "Your object appears to be too large, so it was automatically scaled down to fit your print bed."
msgstr "Importowany model przekracza wymiary przestrzeni roboczej i został przeskalowany do odpowiednich rozmiarów."
#: src/libslic3r/GCode.cpp:1261
msgid "Your print is very close to the priming regions. Make sure there is no collision."
msgstr "Twój wydruk znajduje się bardzo blisko obszaru czyszczenia dyszy. Upewnij się, że nie dojdzie do kolizji."
#: src/libslic3r/PrintConfig.cpp:2428
msgid "Z offset"
msgstr "Z offset"

File diff suppressed because it is too large Load diff

View file

@ -5122,7 +5122,7 @@ msgid "The supplied name is empty. It can't be saved."
msgstr "Имя не задано. Невозможно сохранить."
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547
msgid "You should to change a name of your printer device. It can't be saved."
msgid "You should change the name of your printer device."
msgstr ""
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:555

View file

@ -1,7 +1,10 @@
min_slic3r_version = 2.3.0-beta2
0.0.11 Updated machine limits for Ender 5 and Ender 5 Plus.
0.0.10 Parameter consistency improvements. Enabled conservative elephant foot compensation.
0.0.9 Fixed end g-code for Ender 5.
0.0.8 Slight end g-code improvements and spool weights.
min_slic3r_version = 2.3.0-alpha2
0.0.7 Updated start g-code for Creality printers
0.0.7 Updated start g-code for Creality printers.
0.0.6 Added filament profiles, adjusted temperatures, updated start g-code for some models.
0.0.5 Added 0.08mm SUPERDETAIL and 0.28mm SUPERDRAFT print profiles. Updated OPTIMAL print profile.
0.0.4 Added initial CR-10 profile, end g-code improvements.

View file

@ -5,7 +5,7 @@
name = Creality
# Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 0.0.8
config_version = 0.0.11
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@ -172,7 +172,7 @@ clip_multipart_objects = 1
compatible_printers =
complete_objects = 0
dont_support_bridges = 1
elefant_foot_compensation = 0
elefant_foot_compensation = 0.1
ensure_vertical_shell_thickness = 1
external_fill_pattern = rectilinear
external_perimeters_first = 0
@ -588,26 +588,26 @@ extruder_offset = 0x0
gcode_flavor = marlin
silent_mode = 0
remaining_times = 0
machine_max_acceleration_e = 10000
machine_max_acceleration_extruding = 2000
machine_max_acceleration_retracting = 1500
machine_max_acceleration_x = 3000
machine_max_acceleration_y = 3000
machine_max_acceleration_z = 500
machine_max_feedrate_e = 120
machine_max_acceleration_e = 5000
machine_max_acceleration_extruding = 500
machine_max_acceleration_retracting = 1000
machine_max_acceleration_x = 500
machine_max_acceleration_y = 500
machine_max_acceleration_z = 100
machine_max_feedrate_e = 60
machine_max_feedrate_x = 500
machine_max_feedrate_y = 500
machine_max_feedrate_z = 12
machine_max_jerk_e = 2.5
machine_max_jerk_x = 20
machine_max_jerk_y = 20
machine_max_feedrate_z = 10
machine_max_jerk_e = 5
machine_max_jerk_x = 8
machine_max_jerk_y = 8
machine_max_jerk_z = 0.4
machine_min_extruding_rate = 0
machine_min_travel_rate = 0
layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z]
max_layer_height = 0.3
min_layer_height = 0.07
max_print_height = 200
max_print_height = 250
nozzle_diameter = 0.4
printer_notes =
printer_settings_id =
@ -631,8 +631,8 @@ variable_layer_height = 1
wipe = 1
z_offset = 0
printer_model =
default_print_profile =
default_filament_profile =
default_print_profile = 0.16mm OPTIMAL @CREALITY
default_filament_profile = Generic PLA @CREALITY
[printer:Creality Ender-3]
inherits = *common*
@ -666,8 +666,6 @@ retract_length = 5
retract_speed = 60
deretract_speed = 40
retract_before_wipe = 70%
default_print_profile = 0.16mm OPTIMAL @CREALITY
default_filament_profile = Creality PLA @CREALITY
start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG1 Z2 F240\nG1 X2 Y10 F3000\nG1 Z0.28 F240\nG92 E0\nG1 Y190 E15 F1500 ; intro line\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E15 F1200 ; intro line\nG92 E0
end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F600{endif} ; Move print head up\nG1 X5 Y170 F{travel_speed*60} ; present print\n{if max_layer_z < max_print_height-10}G1 Z{z_offset+min(max_layer_z+70, max_print_height-10)} F600{endif} ; Move print head further up\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors
@ -678,7 +676,7 @@ start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104
start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set extruder temp for auto bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; home all\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[first_layer_temperature] ; set extruder temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 Z0.28 F240\nG92 E0\nG1 Y190 E15 F1500 ; intro line\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E15 F1200 ; intro line\nG92 E0
[printer:*invertedz*]
end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F600{endif} ; Move print bed down\nG1 X50 Y50 F{travel_speed*60} ; present print\n{if max_layer_z < max_print_height-10}G1 Z{z_offset+max_print_height-10)} F600{endif} ; Move print bed down further down\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors
end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F600{endif} ; Move print bed down\nG1 X50 Y50 F{travel_speed*60} ; present print\n{if max_layer_z < max_print_height-10}G1 Z{z_offset+max_print_height-10} F600{endif} ; Move print bed down further down\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors
[printer:Creality Ender-3 BLTouch]
inherits = Creality Ender-3; *fastabl*
@ -692,6 +690,8 @@ bed_shape = 5x2.5,225x2.5,225x222.5,5x222.5
printer_model = ENDER5
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER5\nPRINTER_HAS_BOWDEN
max_print_height = 300
machine_max_acceleration_e = 1000
machine_max_feedrate_z = 5
[printer:Creality Ender-5 Plus]
inherits = Creality Ender-3; *slowabl*; *invertedz*
@ -700,6 +700,10 @@ bed_shape = 5x5,355x5,355x355,5x355
printer_model = ENDER5PLUS
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER5PLUS\nPRINTER_HAS_BOWDEN
max_print_height = 400
machine_max_acceleration_e = 1000
machine_max_feedrate_z = 5
machine_max_feedrate_x = 300
machine_max_feedrate_y = 300
[printer:Creality Ender-2]
inherits = Creality Ender-3

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View file

@ -0,0 +1,2 @@
min_slic3r_version = 2.3.0-rc2
0.0.1 Initial Version

View file

@ -0,0 +1,842 @@
# Print profiles for the FLSun Delta printers.
##
# Author: https://github.com/Foxies-CSTL/PrusaSlicer
## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/5582
[vendor]
# Vendor name will be shown by the Config Wizard.
name = FLSun
# Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 0.0.1
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/FLSun/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
# The printer models will be shown by the Configuration Wizard in this order,
# also the first model installed & the first nozzle installed will be activated after install.
# Printer model name will be shown by the installation wizard.
[printer_model:QQSP]
name = FLSun QQS Pro
variants = 0.4; 0.6
technology = FFF
bed_model = QQSP_bed.stl
bed_texture = QQSP.svg
default_materials = Generic PLA @FLSUN; Generic PETG @FLSUN; Generic ABS @FLSUN; Generic SPLA @FLSUN; Generic FLEX @FLSUN
[printer_model:Q5]
name = FLSun Q5
variants = 0.4; 0.6
technology = FFF
bed_model = Q5_bed.stl
bed_texture = Q5.svg
default_materials = Generic PLA @FLSUN; Generic PETG @FLSUN; Generic ABS @FLSUN; Generic SPLA @FLSUN; Generic FLEX @FLSUN
#########################################
###### begin Common print presets #######
#########################################
# Common print preset
[print:*common_flsunq*]
avoid_crossing_perimeters = 1
avoid_crossing_perimeters_max_detour = 0
bottom_solid_min_thickness = 0.5
bridge_acceleration = 800
bridge_angle = 0
bridge_flow_ratio = 0.8
bridge_speed = 30
brim_width = 0
clip_multipart_objects = 1
compatible_printers =
complete_objects = 0
default_acceleration = 800
dont_support_bridges = 1
elefant_foot_compensation = 0.2
ensure_vertical_shell_thickness = 1
external_fill_pattern = rectilinear
external_perimeters_first = 0
external_perimeter_extrusion_width = 0.45
extra_perimeters = 0
extruder_clearance_height = 45
extruder_clearance_radius = 45
extrusion_width = 0.45
fill_angle = 45
fill_density = 15%
fill_pattern = gyroid
first_layer_acceleration = 800
first_layer_extrusion_width = 0.42
first_layer_height = 0.2
first_layer_speed = 20
gap_fill_speed = 40
gcode_comments = 0
infill_acceleration = 800
infill_every_layers = 1
infill_extruder = 1
infill_extrusion_width = 0.45
infill_first = 0
infill_only_where_needed = 0
infill_overlap = 25%
interface_shells = 0
ironing = 0
ironing_flowrate = 15%
ironing_spacing = 0.1
ironing_speed = 15
ironing_type = top
max_print_speed = 200
max_volumetric_extrusion_rate_slope_negative = 0
max_volumetric_extrusion_rate_slope_positive = 0
max_volumetric_speed = 0
min_skirt_length = 4
notes =
overhangs = 1
only_retract_when_crossing_perimeters = 0
ooze_prevention = 0
output_filename_format = {input_filename_base}_{filament_type[0]}_{print_time}.gco
perimeters = 3
perimeter_acceleration = 800
perimeter_extruder = 1
perimeter_extrusion_width = 0.45
perimeter_speed = 45
post_process =
print_settings_id =
raft_layers = 0
resolution = 0
seam_position = nearest
single_extruder_multi_material_priming = 0
skirts = 2
skirt_distance = 5
skirt_height = 1
small_perimeter_speed = 25
solid_infill_below_area = 0
solid_infill_every_layers = 0
solid_infill_extruder = 1
solid_infill_extrusion_width = 0.45
spiral_vase = 0
standby_temperature_delta = -5
support_material = 1
support_material_auto = 0
support_material_extruder = 1
support_material_extrusion_width = 0.38
support_material_interface_extruder = 0
support_material_angle = 0
support_material_buildplate_only = 0
support_material_enforce_layers = 0
support_material_contact_distance = 0.2
support_material_interface_contact_loops = 0
support_material_interface_layers = 2
support_material_interface_spacing = 0.2
support_material_interface_speed = 100%
support_material_pattern = rectilinear
support_material_spacing = 2.5
support_material_speed = 60
support_material_synchronize_layers = 0
support_material_threshold = 45
support_material_with_sheath = 0
support_material_xy_spacing = 60%
thin_walls = 0
top_infill_extrusion_width = 0.4
top_solid_infill_speed = 40
top_solid_min_thickness = 0.6
travel_speed = 150
wipe_tower = 0
wipe_tower_bridging = 10
wipe_tower_rotation_angle = 0
wipe_tower_width = 60
wipe_tower_x = 170
wipe_tower_y = 140
xy_size_compensation = 0
## QQS
[print:*QQSP*]
bridge_acceleration = 1000
default_acceleration = 1500
first_layer_acceleration = 1000
infill_acceleration = 800
max_print_speed = 200
perimeter_acceleration = 800
## Q5
[print:*Q5*]
bridge_acceleration = 1000
default_acceleration = 800
first_layer_acceleration = 800
infill_acceleration = 1000
max_print_speed = 150
perimeter_acceleration = 800
# Print parameters common to a 0.6mm diameter nozzle.
[print:*0.6nozzleFLSUN*]
bridge_acceleration = 1000
bridge_flow_ratio = 0.95
bridge_speed = 25
default_acceleration = 1000
external_perimeter_extrusion_width = 0.65
extrusion_width = 0.65
first_layer_acceleration = 1000
first_layer_extrusion_width = 0.65
fill_density = 15%
fill_pattern = gyroid
infill_acceleration = 1000
infill_extrusion_width = 0.68
perimeter_acceleration = 800
perimeter_extrusion_width = 0.65
solid_infill_extrusion_width = 0.68
support_material_speed = 40
support_material_contact_distance = 0.15
support_material_extrusion_width = 0.55
support_material_xy_spacing = 80%
top_infill_extrusion_width = 0.6
travel_speed = 150
output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{filament_type[0]}_{print_time}.gco
# XXXXXXXXXXXXXXXXXXXX
# XXX--- 0.08mm ---XXX
# XXXXXXXXXXXXXXXXXXXX
[print:*0.08mm_flsunq*]
inherits = *common_flsunq*
bottom_solid_layers = 10
bridge_flow_ratio = 0.7
layer_height = 0.08
support_material_contact_distance = 0.06
support_material_spacing = 1.5
top_solid_layers = 12
[print:0.08mm DETAIL @FLSUN]
inherits = *0.08mm_flsunq*; *QQSP*
compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.4
bridge_acceleration = 200
bridge_speed = 20
external_perimeter_speed = 70%
first_layer_acceleration = 500
first_layer_speed = 40%
gap_fill_speed = 20
infill_acceleration = 800
infill_speed = 40
max_print_speed = 80
perimeter_acceleration = 300
perimeter_speed = 30
small_perimeter_speed = 70%
solid_infill_speed = 95%
support_material_speed = 40
top_solid_infill_speed = 60%
# XXXXXXXXXXXXXXXXXXXX
# XXX--- 0.15mm ---XXX
# XXXXXXXXXXXXXXXXXXXX
[print:*0.15mm_vase_flsunq*]
inherits = *common_flsunq*
avoid_crossing_perimeters = 1
bottom_solid_min_thickness = 0.5
bridge_flow_ratio = 0.9
elefant_foot_compensation = 0.15
ensure_vertical_shell_thickness = 1
external_perimeter_extrusion_width = 0.9
extra_perimeters = 1
extrusion_width = 0.9
first_layer_acceleration = 1000
first_layer_height = 0.3
first_layer_extrusion_width = 0.9
first_layer_speed = 20
fill_density = 0%
infill_extrusion_width = 0.9
ironing = 0
layer_height = 0.15
min_skirt_length = 4
max_print_speed = 100
only_retract_when_crossing_perimeters = 0
perimeters = 1
perimeter_extrusion_width = 0.9
seam_position = aligned
slice_closing_radius = 0.049
solid_infill_extrusion_width = 0.6
spiral_vase = 1
support_material = 0
top_solid_infill_speed = 40%
top_solid_min_thickness = 0.6
thin_walls = 0
top_fill_pattern = rectilinear
top_solid_layers = 0
[print:0.15mm VASE @FLSUN]
inherits = *0.15mm_vase_flsunq*
compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.4
bottom_solid_layers = 5
external_perimeter_speed = 50%
gap_fill_speed = 40
infill_speed = 100
perimeter_speed = 80
small_perimeter_speed = 25%
solid_infill_speed = 33%
[print:0.15mm VASE SPEED @FLSUN]
inherits = *0.15mm_vase_flsunq*
compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.4
bridge_speed = 80
bottom_solid_layers = 3
external_perimeter_speed = 60%
gap_fill_speed = 30
infill_speed = 80
perimeter_speed = 90
small_perimeter_speed = 50%
solid_infill_speed = 80%
# XXXXXXXXXXXXXXXXXXXX
# XXX--- 0.16mm ---XXX
# XXXXXXXXXXXXXXXXXXXX
[print:*0.16mm_flsunq*]
inherits = *common_flsunq*
bottom_solid_layers = 5
bridge_flow_ratio = 0.9
layer_height = 0.16
support_material_contact_distance = 0.12
top_solid_layers = 6
[print:0.16mm QUALITY @FLSUN]
inherits = *0.16mm_flsunq*; *QQSP*
compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.4
external_perimeter_speed = 50%
fill_density = 15%
fill_pattern = gyroid
infill_speed = 80
ironing = 0
perimeter_speed = 90
small_perimeter_speed = 25%
solid_infill_speed = 50%
top_solid_infill_speed = 30%
[print:0.16mm SPEED @FLSUN]
inherits = *0.16mm_flsunq*; *QQSP*
compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.4
external_perimeter_speed = 50%
infill_speed = 120
perimeter_speed = 60
small_perimeter_speed = 25%
solid_infill_speed = 85%
top_solid_infill_speed = 30%
[print:0.16mm DETAIL @0.6 nozzle FLSUN]
inherits = *0.16mm_flsunq*; *0.6nozzleFLSUN*
# alias = 0.16mm DETAIL
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_FLSun.*/ and printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.6
external_perimeter_speed = 35
infill_speed = 70
max_print_speed = 80
perimeter_speed = 40
solid_infill_speed = 60
top_solid_infill_speed = 45
infill_extrusion_width = 0.65
solid_infill_extrusion_width = 0.65
# XXXXXXXXXXXXXXXXXXXX
# XXX--- 0.20mm ---XXX
# XXXXXXXXXXXXXXXXXXXX
[print:*0.20mm_flsunq*]
inherits = *common_flsunq*
bottom_solid_layers = 4
bridge_flow_ratio = 0.95
layer_height = 0.20
support_material_contact_distance = 0.2
top_solid_layers = 5
[print:0.20mm QUALITY @FLSUN]
inherits = *0.20mm_flsunq*; *QQSP*
avoid_crossing_perimeters = 1
bridge_speed = 60
compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.4
external_perimeter_speed = 50%
fill_density = 15%
gap_fill_speed = 30
infill_speed = 80
ironing = 0
ironing_speed = 20
perimeter_speed = 50
small_perimeter_speed = 85%
solid_infill_speed = 90%
thin_walls = 0
top_solid_infill_speed = 50%
[print:0.20mm DETAIL @0.6 nozzle FLSUN]
inherits = *0.20mm_flsunq*; *0.6nozzleFLSUN*
# alias = 0.20mm DETAIL
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_FLSun.*/ and printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.6
external_perimeter_speed = 35
infill_speed = 70
max_print_speed = 80
perimeter_speed = 45
solid_infill_speed = 60
top_solid_infill_speed = 45
infill_extrusion_width = 0.65
solid_infill_extrusion_width = 0.65
[print:0.20mm SPEED @FLSUN]
inherits = *0.20mm_flsunq*; *QQSP*
compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.4
external_perimeter_speed = 50
extra_perimeters = 1
first_layer_speed = 35
infill_speed = 90
perimeter_speed = 60
small_perimeter_speed = 50%
solid_infill_speed = 85%
top_solid_infill_speed = 40%
# XXXXXXXXXXXXXXXXXXXX
# XXX--- 0.24mm ---XXX
# XXXXXXXXXXXXXXXXXXXX
[print:*0.24mm_flsunq*]
inherits = *common_flsunq*
bottom_solid_layers = 4
bridge_flow_ratio = 0.95
layer_height = 0.24
support_material_contact_distance = 0.18
top_solid_layers = 4
[print:0.24mm DRAFT @FLSUN]
inherits = *0.24mm_flsunq*; *QQSP*
compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.4
external_perimeter_speed = 50%
first_layer_speed = 20%
infill_speed = 120
perimeter_speed = 60
small_perimeter_speed = 50%
solid_infill_speed = 95%
top_solid_infill_speed = 50%
# XXXXXXXXXXXXXXXXXXXX
# XXX--- 0.30mm ---XXX
# XXXXXXXXXXXXXXXXXXXX
[print:*0.30mm_flsunq*]
inherits = *common_flsunq*
bottom_solid_layers = 3
bridge_flow_ratio = 0.95
external_perimeter_extrusion_width = 0.6
extrusion_width = 0.5
infill_extrusion_width = 0.5
layer_height = 0.30
perimeter_extrusion_width = 0.5
solid_infill_extrusion_width = 0.5
support_material_contact_distance = 0.22
top_infill_extrusion_width = 0.45
top_solid_layers = 4
[print:0.30mm QUALITY @0.6 nozzle FLSUN]
inherits = *0.30mm_flsunq*; *0.6nozzleFLSUN*
# alias = 0.30mm QUALITY
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_FLSun.*/ and printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.6
external_perimeter_speed = 35
infill_speed = 90
max_print_speed = 100
perimeter_speed = 45
solid_infill_speed = 65
top_solid_infill_speed = 45
external_perimeter_extrusion_width = 0.68
perimeter_extrusion_width = 0.68
[print:0.30mm SPEED @FLSUN]
inherits = *0.30mm_flsunq*; *QQSP*
compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.4
external_perimeter_speed = 50%
first_layer_speed = 20%
infill_speed = 120
perimeter_speed = 80
small_perimeter_speed = 50%
solid_infill_speed = 85%
top_solid_infill_speed = 50%
# XXXXXXXXXXXXXXXXXXXX
# XXX--- 0.35mm ---XXX
# XXXXXXXXXXXXXXXXXXXX
[print:*0.35mm_flsunq*]
inherits = *common_flsunq*
bottom_solid_layers = 3
external_perimeter_extrusion_width = 0.6
external_perimeter_speed = 40
first_layer_extrusion_width = 0.75
layer_height = 0.35
perimeter_extrusion_width = 0.65
solid_infill_extrusion_width = 0.65
solid_infill_speed = 60
top_solid_infill_speed = 50
top_solid_layers = 4
[print:0.35mm SPEED @0.6 nozzle FLSUN]
inherits = *0.35mm_flsunq*; *0.6nozzleFLSUN*
# alias = 0.35mm SPEED
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_FLSun.*/ and printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.6
external_perimeter_speed = 45
infill_speed = 100
max_print_speed = 120
perimeter_speed = 65
solid_infill_speed = 60
top_solid_infill_speed = 45
external_perimeter_extrusion_width = 0.68
perimeter_extrusion_width = 0.68
# XXXXXXXXXXXXXXXXXXXX
# XXX--- 0.40mm ---XXX
# XXXXXXXXXXXXXXXXXXXX
[print:*0.40mm_flsunq*]
inherits = *common_flsunq*
bottom_solid_layers = 3
external_perimeter_extrusion_width = 0.6
external_perimeter_speed = 40
first_layer_extrusion_width = 0.65
infill_acceleration = 2000
infill_speed = 60
layer_height = 0.4
perimeter_acceleration = 800
perimeter_extrusion_width = 0.65
perimeter_speed = 50
solid_infill_extrusion_width = 0.65
solid_infill_speed = 60
top_solid_infill_speed = 40
top_solid_layers = 4
[print:0.40mm DRAFT @0.6 nozzle FLSUN]
inherits = *0.40mm_flsunq*; *0.6nozzleFLSUN*
# alias = 0.40mm DRAFT
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_FLSun.*/ and printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/ and nozzle_diameter[0]==0.6
external_perimeter_speed = 60
infill_speed = 100
max_print_speed = 120
perimeter_speed = 60
solid_infill_speed = 60
top_solid_infill_speed = 60
external_perimeter_extrusion_width = 0.68
perimeter_extrusion_width = 0.68
infill_extrusion_width = 0.68
solid_infill_extrusion_width = 0.68
#########################################
########### end print presets ###########
#########################################
#########################################
######## begin filament presets #########
#########################################
# Common filament preset
[filament:*common_flsunq*]
cooling = 0
compatible_printers =
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_FLSun.*/ and printer_notes=~/.*PRINTER_MODEL_Q(QSP|5).*/
end_filament_gcode = "; Filament-specific end gcode"
extrusion_multiplier = 1
filament_cost = 0
filament_density = 0
filament_diameter = 1.75
filament_notes = ""
filament_settings_id = ""
filament_soluble = 0
min_fan_speed = 20
min_print_speed = 15
slowdown_below_layer_time = 15
start_filament_gcode = "; Filament gcode\n;M900 K{if nozzle_diameter[0]==0.6}0.12{else}0.22{endif} ; Linear Advance 1.5\n"
[filament:*PLA_flsunq*]
inherits = *common_flsunq*
bed_temperature = 60
bridge_fan_speed = 95
cooling = 1
disable_fan_first_layers = 1
fan_always_on = 1
fan_below_layer_time = 100
filament_colour = #FF3232
filament_density = 1.24
filament_deretract_speed = 30
filament_retract_length = 3
filament_retract_lift = nil
filament_retract_speed = 30
filament_max_volumetric_speed = 10
filament_type = PLA
filament_wipe = nil
first_layer_bed_temperature = 60
first_layer_temperature = 205
max_fan_speed = 90
min_fan_speed = 50
temperature = 200
[filament:*PLA_VASE_flsunq*]
inherits = *PLA_flsunq*
bridge_fan_speed = 100
disable_fan_first_layers = 3
fan_below_layer_time = 60
max_fan_speed = 100
min_fan_speed = 35
min_print_speed = 10
slowdown_below_layer_time = 5
[filament:*SPLA_flsunq*]
inherits = *common_flsunq*
bed_temperature = 80
bridge_fan_speed = 100
cooling = 1
disable_fan_first_layers = 1
fan_always_on = 1
fan_below_layer_time = 100
filament_colour = #008000
filament_density = 1.24
filament_deretract_speed = 70
filament_max_volumetric_speed = 8
filament_retract_length = 7.5
filament_retract_lift = nil
filament_retract_speed = 70
filament_type = PLA
filament_wipe = nil
first_layer_bed_temperature = 80
first_layer_temperature = 230
max_fan_speed = 70
min_fan_speed = 50
temperature = 215
[filament:*PET_flsunq*]
inherits = *common_flsunq*
bed_temperature = 80
bridge_fan_speed = 100
cooling = 1
disable_fan_first_layers = 3
fan_always_on = 1
fan_below_layer_time = 20
filament_colour = #FFFFFF
filament_density = 1.27
filament_deretract_speed = 25
filament_max_volumetric_speed = 8
filament_retract_length = 4
filament_retract_lift = 0.2
filament_retract_speed = 45
filament_type = PETG
filament_wipe = 1
first_layer_bed_temperature =80
first_layer_temperature = 240
max_fan_speed = 50
min_fan_speed = 20
temperature = 230
[filament:*FLEX_flsunq*]
inherits = *common_flsunq*
bed_temperature = 50
bridge_fan_speed = 80
compatible_printers_condition = nozzle_diameter[0]>0.35
cooling = 1
disable_fan_first_layers = 3
extrusion_multiplier = 1.15
fan_always_on = 0
fan_below_layer_time = 100
filament_colour = #0000FF
filament_density = 1.22
filament_deretract_speed = 25
filament_max_volumetric_speed = 1.35
filament_retract_length = 0.8
filament_retract_lift = nil
filament_retract_speed = nil
filament_type = FLEX
filament_wipe = 0
first_layer_bed_temperature = 50
first_layer_temperature = 240
slowdown_below_layer_time = 10
start_filament_gcode = "; Filament gcode\n;M900 K0; Disable Linear Advance 1.5\n"
temperature = 240
[filament:*ABS_flsunq*]
inherits = *common_flsunq*
bed_temperature = 90
bridge_fan_speed = 30
cooling = 0
disable_fan_first_layers = 3
fan_always_on = 0
fan_below_layer_time = 20
filament_colour = #FF8000
filament_density = 1.04
filament_deretract_speed = nil
filament_retract_length = 5
filament_retract_lift = nil
filament_retract_speed = 50
filament_max_volumetric_speed = 10
filament_type = ABS
filament_wipe = nil
first_layer_bed_temperature = 90
first_layer_temperature = 245
max_fan_speed = 0
min_fan_speed = 0
slowdown_below_layer_time = 20
temperature = 245
top_fan_speed = 0
[filament:Generic PLA @FLSUN]
inherits = *PLA_flsunq*
filament_vendor = Generic
[filament:Generic PLA VASE @FLSUN]
inherits = *PLA_VASE_flsunq*
filament_vendor = Generic
[filament:Generic PETG @FLSUN]
inherits = *PET_flsunq*
filament_vendor = Generic
[filament:Generic ABS @FLSUN]
inherits = *ABS_flsunq*
filament_vendor = Generic
[filament:Generic FLEX @FLSUN]
inherits = *FLEX_flsunq*
filament_vendor = Generic
[filament:Generic SPLA @FLSUN]
inherits = *SPLA_flsunq*
filament_vendor = Generic
#########################################
######### end filament presets ##########
#########################################
#########################################
######### begin printer presets #########
#########################################
# Common printer preset
[printer:*common_flsunq*]
printer_technology = FFF
before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\n\n
between_objects_gcode =
deretract_speed = 40
end_gcode =
extruder_colour = ""
extruder_offset = 0x0
gcode_flavor = marlin
layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z]
machine_min_extruding_rate = 0,0
machine_min_travel_rate = 0,0
max_layer_height = 0.32
min_layer_height = 0.08
nozzle_diameter = 0.4
printer_notes =
printer_settings_id =
remaining_times = 0
retract_before_travel = 2
retract_before_wipe = 70%
retract_layer_change = 0
retract_length = 0
retract_length_toolchange = 1
retract_lift = 0
retract_lift_above = 0
retract_lift_below = 0
retract_restart_extra = 0
retract_restart_extra_toolchange = 0
silent_mode = 0
single_extruder_multi_material = 0
start_gcode =
toolchange_gcode =
use_firmware_retraction = 0
use_relative_e_distances = 1
variable_layer_height = 1
wipe = 1
z_offset = 0
default_print_profile = 0.20mm QUALITY @FLSUN
default_filament_profile = Generic PLA @FLSUN
[printer:FLSun QQS Pro]
inherits = *common_flsunq*
bed_shape = 129.505x11.3302,128.025x22.5743,125.57x33.6465,122.16x44.4626,117.82x54.9404,112.583x65,106.49x74.5649,99.5858x83.5624,91.9239x91.9239,83.5624x99.5858,74.5649x106.49,65x112.583,54.9404x117.82,44.4626x122.16,33.6465x125.57,22.5743x128.025,11.3302x129.505,7.9602e-15x130,-11.3302x129.505,-22.5743x128.025,-33.6465x125.57,-44.4626x122.16,-54.9404x117.82,-65x112.583,-74.5649x106.49,-83.5624x99.5858,-91.9239x91.9239,-99.5858x83.5624,-106.49x74.5649,-112.583x65,-117.82x54.9404,-122.16x44.4626,-125.57x33.6465,-128.025x22.5743,-129.505x11.3302,-130x1.59204e-14,-129.505x-11.3302,-128.025x-22.5743,-125.57x-33.6465,-122.16x-44.4626,-117.82x-54.9404,-112.583x-65,-106.49x-74.5649,-99.5858x-83.5624,-91.9239x-91.9239,-83.5624x-99.5858,-74.5649x-106.49,-65x-112.583,-54.9404x-117.82,-44.4626x-122.16,-33.6465x-125.57,-22.5743x-128.025,-11.3302x-129.505,-2.38806e-14x-130,11.3302x-129.505,22.5743x-128.025,33.6465x-125.57,44.4626x-122.16,54.9404x-117.82,65x-112.583,74.5649x-106.49,83.5624x-99.5858,91.9239x-91.9239,99.5858x-83.5624,106.49x-74.5649,112.583x-65,117.82x-54.9404,122.16x-44.4626,125.57x-33.6465,128.025x-22.5743,129.505x-11.3302,130x-3.18408e-14
end_gcode = ; printing object ENDGCODE\nG92 E0.0 ; prepare to retract\nG1 E-6 F3000; retract to avoid stringing\n; Anti-stringing end wiggle\n{if layer_z < max_print_height}G1 Z{min(layer_z+100, max_print_height)}{endif} F4000 ; Move print head up\nG1 X0 Y120 F3000 ; present print\n; Reset print setting overrides\nG92 E0\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extruder factor to 100%\n;M900 K0 ; reset linear acceleration(Marlin)\n; Shut down printer\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM18 S180 ;disable motors after 180s\nM300 S40 P10 ; Bip\nM117 Print finish.
machine_max_acceleration_e = 3000,800
machine_max_acceleration_extruding = 1500,800
machine_max_acceleration_retracting = 2000,800
machine_max_acceleration_x = 1500,800
machine_max_acceleration_y = 1500,800
machine_max_acceleration_z = 1500,800
machine_max_feedrate_e = 60,30
machine_max_feedrate_x = 200,150
machine_max_feedrate_y = 200,150
machine_max_feedrate_z = 200,150
machine_max_jerk_e = 5,5
machine_max_jerk_x = 5,10
machine_max_jerk_y = 5,10
machine_max_jerk_z = 5,10
max_print_height = 360
nozzle_diameter = 0.4
printer_model = QQSP
printer_variant = 0.4
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_FLSun\nPRINTER_MODEL_QQSP\nPRINTER_HAS_BOWDEN\n
retract_length = 5
retract_speed = 30
retract_lift = 0.4
silent_mode = 1
start_gcode = ;STARTGCODE\nM117 Initializing\n; Set coordinate modes\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; Reset speed and extrusion rates\nM200 D0 ; disable volumetric E\nM220 S100 ; reset speed\n; Set initial warmup temps\nM117 Nozzle preheat\nM104 S100 ; preheat extruder to no ooze temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed final temp\nM300 S40 P10 ; Bip\n; Home\nM117 Homing\nG28 ; home all with default mesh bed level\n; For ABL users put G29 for a leveling request\n; Final warmup routine\nM117 Final warmup\nM104 S[first_layer_temperature] ; set extruder final temp\nM109 S[first_layer_temperature] ; wait for extruder final temp\nM190 S[first_layer_bed_temperature] ; wait for bed final temp\nM300 S440 P200 ; 1st beep for printer ready and allow some time to clean nozzle\nM300 S0 P250 ; wait between dual beep\nM300 S440 P200 ; 2nd beep for printer ready\nG4 S10 ; wait to clean the nozzle\nM300 S440 P200 ; 3rd beep for ready to start printing\n; Prime line routine\nM117 Printing prime line\n;M900 K0; Disable Linear Advance (Marlin) for prime line\nG92 E0.0; reset extrusion distance\nG1 X-54.672 Y-95.203 Z0.3 F4000; go outside print area\nG92 E0.0; reset extrusion distance\nG1 E2 F1000 ; de-retract and push ooze\nG3 X38.904 Y-102.668 I54.672 J95.105 E20.999\nG3 X54.671 Y-95.203 I-38.815 J102.373 E5.45800\nG92 E0.0\nG1 E-5 F3000 ; retract 5mm\nG1 X52.931 Y-96.185 F1000 ; wipe\nG1 X50.985 Y-97.231 F1000 ; wipe\nG1 X49.018 Y-98.238 F1000 ; wipe\nG1 X0 Y-109.798 F1000\nG1 E4.8 F1500; de-retract\nG92 E0.0 ; reset extrusion distance\n; Final print adjustments\nM117 Preparing to print\n;M82 ; extruder absolute mode\nM221 S{if layer_height<0.075}100{else}95{endif}\nM300 S40 P10 ; chirp\nM117 Print [input_filename]; Display: Printing started...
thumbnails = 16x16,260x260
use_relative_e_distances = 1
use_volumetric_e = 0
[printer:FLSun QQS Pro 0.6 nozzle]
inherits = FLSun QQS Pro
printer_variant = 0.6
nozzle_diameter = 0.6
max_layer_height = 0.40
min_layer_height = 0.15
default_print_profile = 0.30mm QUALITY @0.6 nozzle FLSUN
retract_length = 3.5
retract_lift = 0.4
retract_speed = 30
deretract_speed = 40
retract_before_wipe = 70%
retract_before_travel = 1
[printer:FLSun Q5]
inherits = *common_flsunq*
bed_shape = 99.6195x8.71557,98.4808x17.3648,96.5926x25.8819,93.9693x34.202,90.6308x42.2618,86.6025x50,81.9152x57.3576,76.6044x64.2788,70.7107x70.7107,64.2788x76.6044,57.3576x81.9152,50x86.6025,42.2618x90.6308,34.202x93.9693,25.8819x96.5926,17.3648x98.4808,8.71557x99.6195,6.12323e-15x100,-8.71557x99.6195,-17.3648x98.4808,-25.8819x96.5926,-34.202x93.9693,-42.2618x90.6308,-50x86.6025,-57.3576x81.9152,-64.2788x76.6044,-70.7107x70.7107,-76.6044x64.2788,-81.9152x57.3576,-86.6025x50,-90.6308x42.2618,-93.9693x34.202,-96.5926x25.8819,-98.4808x17.3648,-99.6195x8.71557,-100x1.22465e-14,-99.6195x-8.71557,-98.4808x-17.3648,-96.5926x-25.8819,-93.9693x-34.202,-90.6308x-42.2618,-86.6025x-50,-81.9152x-57.3576,-76.6044x-64.2788,-70.7107x-70.7107,-64.2788x-76.6044,-57.3576x-81.9152,-50x-86.6025,-42.2618x-90.6308,-34.202x-93.9693,-25.8819x-96.5926,-17.3648x-98.4808,-8.71557x-99.6195,-1.83697e-14x-100,8.71557x-99.6195,17.3648x-98.4808,25.8819x-96.5926,34.202x-93.9693,42.2618x-90.6308,50x-86.6025,57.3576x-81.9152,64.2788x-76.6044,70.7107x-70.7107,76.6044x-64.2788,81.9152x-57.3576,86.6025x-50,90.6308x-42.2618,93.9693x-34.202,96.5926x-25.8819,98.4808x-17.3648,99.6195x-8.71557,100x-2.44929e-14
end_gcode = M107\nM104 S0\nM140 S0\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\n;M84\nM18 S180 ;disable motors after 180s\n
machine_max_acceleration_e = 3000
machine_max_acceleration_extruding = 1500
machine_max_acceleration_retracting = 2000
machine_max_acceleration_x = 1500
machine_max_acceleration_y = 1500
machine_max_acceleration_z = 1500
machine_max_feedrate_e = 60
machine_max_feedrate_x = 200
machine_max_feedrate_y = 200
machine_max_feedrate_z = 200
machine_max_jerk_e = 5
machine_max_jerk_x = 5
machine_max_jerk_y = 5
machine_max_jerk_z = 5
max_print_height = 200
nozzle_diameter = 0.4
printer_model = Q5
printer_variant = 0.4
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_FLSun\nPRINTER_MODEL_Q5\nPRINTER_HAS_BOWDEN\n
retract_length = 3
retract_lift = 0.3
start_gcode = ;STARTGCODE\nM117 Initializing\n; G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM107\nG28 ;Home\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM104 S[first_layer_temperature] ; set extruder temp\nM109 S[first_layer_temperature] ; wait for extruder temp\n\nG92 E0\nG1 X-98 Y0 Z0.2 F4000 ; move to arc start\nG3 X0 Y-98 I98 Z0.2 E40 F400 ; lay arc stripe 90deg\nG0 Z1 \nG92 E0.0\n
thumbnails = 16x16,200x200
use_relative_e_distances = 1
use_volumetric_e = 0
[printer:FLSun Q5 0.6 nozzle]
inherits = FLSun Q5
printer_variant = 0.6
nozzle_diameter = 0.6
max_layer_height = 0.40
min_layer_height = 0.15
default_print_profile = 0.30mm QUALITY @0.6 nozzle FLSUN
retract_length = 3
retract_lift = 0.4
retract_speed = 50
deretract_speed = 40
retract_before_wipe = 0
retract_before_travel = 1
#########################################
####### end common print presets ########
#########################################

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View file

@ -1,3 +1,6 @@
min_slic3r_version = 2.3.0-rc1
1.2.1 Updated FW version for MK2.5 family printers.
1.2.0 Added full_fan_speed_layer value for PETG. Increased support interface spacing for 0.6mm nozzle profiles. Updated firmware version.
min_slic3r_version = 2.3.0-beta2
1.2.0-beta1 Updated end g-code. Added full_fan_speed_layer values.
min_slic3r_version = 2.3.0-beta0

View file

@ -5,7 +5,7 @@
name = Prusa Research
# Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 1.2.0-beta1
config_version = 1.2.1
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@ -317,6 +317,7 @@ solid_infill_extrusion_width = 0.65
top_infill_extrusion_width = 0.6
support_material_extrusion_width = 0.55
support_material_contact_distance = 0.15
support_material_interface_spacing = 0.3
support_material_xy_spacing = 80%
output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
infill_anchor_max = 15
@ -355,6 +356,7 @@ support_material_speed = 40
output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
infill_anchor_max = 15
first_layer_height = 0.3
support_material_interface_spacing = 0.3
[print:*soluble_support*]
overhangs = 1
@ -1419,6 +1421,7 @@ inherits = *common*
bed_temperature = 90
bridge_fan_speed = 50
disable_fan_first_layers = 3
full_fan_speed_layer = 5
fan_always_on = 1
fan_below_layer_time = 20
filament_colour = #FF8000
@ -5311,7 +5314,7 @@ remaining_times = 1
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK3\n
retract_lift_below = 209
max_print_height = 210
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
printer_model = MK3
default_print_profile = 0.15mm QUALITY @MK3
@ -5322,7 +5325,7 @@ max_layer_height = 0.15
min_layer_height = 0.05
printer_variant = 0.25
retract_lift = 0.15
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E8.0 F700.0 ; intro line\nG1 X100.0 E12.5 F700.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}\n\n; Don't change E value below. Excessive value can damage the printer.\n{if print_settings_id=~/.*@0.25 nozzle MK3.*/}M907 E430 ; set extruder motor current{endif}
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E8.0 F700.0 ; intro line\nG1 X100.0 E12.5 F700.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}\n\n; Don't change E value below. Excessive value can damage the printer.\n{if print_settings_id=~/.*@0.25 nozzle MK3.*/}M907 E430 ; set extruder motor current{endif}
default_print_profile = 0.10mm DETAIL @0.25 nozzle MK3
[printer:Original Prusa i3 MK3 0.6 nozzle]
@ -5337,19 +5340,19 @@ default_print_profile = 0.30mm QUALITY @0.6 nozzle MK3
inherits = Original Prusa i3 MK3
renamed_from = "Original Prusa i3 MK3S"
printer_model = MK3S
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
[printer:Original Prusa i3 MK3S & MK3S+ 0.25 nozzle]
inherits = Original Prusa i3 MK3 0.25 nozzle
renamed_from = "Original Prusa i3 MK3S 0.25 nozzle"
printer_model = MK3S
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E8.0 F700.0 ; intro line\nG1 X100.0 E12.5 F700.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}\n\n; Don't change E value below. Excessive value can damage the printer.\n{if print_settings_id=~/.*@0.25 nozzle MK3.*/}M907 E430 ; set extruder motor current{endif}
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E8.0 F700.0 ; intro line\nG1 X100.0 E12.5 F700.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}\n\n; Don't change E value below. Excessive value can damage the printer.\n{if print_settings_id=~/.*@0.25 nozzle MK3.*/}M907 E430 ; set extruder motor current{endif}
[printer:Original Prusa i3 MK3S & MK3S+ 0.6 nozzle]
inherits = Original Prusa i3 MK3 0.6 nozzle
renamed_from = "Original Prusa i3 MK3S 0.6 nozzle"
printer_model = MK3S
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
[printer:*mm2*]
inherits = Original Prusa i3 MK3
@ -5379,7 +5382,7 @@ default_filament_profile = Prusament PLA @MMU2
inherits = *mm2*
single_extruder_multi_material = 0
default_filament_profile = Prusament PLA
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+10, max_print_height)}{endif} F720 ; Move print head up\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM702 C\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM84 ; disable motors
[printer:Original Prusa i3 MK3 MMU2 Single 0.6 nozzle]
@ -5389,7 +5392,7 @@ nozzle_diameter = 0.6
max_layer_height = 0.40
min_layer_height = 0.15
printer_variant = 0.6
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0
default_print_profile = 0.30mm QUALITY @0.6 nozzle MK3
[printer:Original Prusa i3 MK3 MMU2 Single 0.25 nozzle]
@ -5400,7 +5403,7 @@ max_layer_height = 0.15
min_layer_height = 0.05
printer_variant = 0.25
retract_lift = 0.15
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 E8.0 F1000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F1400.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E value below. Excessive value can damage the printer.\n{if print_settings_id=~/.*@0.25 nozzle MK3.*/}M907 E430 ; set extruder motor current{endif}
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 E8.0 F1000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F1400.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E value below. Excessive value can damage the printer.\n{if print_settings_id=~/.*@0.25 nozzle MK3.*/}M907 E430 ; set extruder motor current{endif}
default_print_profile = 0.10mm DETAIL @0.25 nozzle MK3
[printer:Original Prusa i3 MK3 MMU2]
@ -5411,7 +5414,7 @@ inherits = *mm2*
machine_max_acceleration_e = 8000,8000
nozzle_diameter = 0.4,0.4,0.4,0.4,0.4
extruder_colour = #FF8000;#DB5182;#00FFFF;#FF4F4F;#9FFF9F
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E32.0 F1073.0\nG1 X5.0 E32.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E32.0 F1073.0\nG1 X5.0 E32.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n{endif}\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors\n
[printer:Original Prusa i3 MK3S & MK3S+ MMU2S Single]
@ -5419,7 +5422,7 @@ inherits = *mm2s*
renamed_from = "Original Prusa i3 MK3S MMU2S Single"
single_extruder_multi_material = 0
default_filament_profile = Prusament PLA
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+10, max_print_height)}{endif} F720 ; Move print head up\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM702 C\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM84 ; disable motors
[printer:Original Prusa i3 MK3S & MK3S+ MMU2S Single 0.6 nozzle]
@ -5430,7 +5433,7 @@ nozzle_diameter = 0.6
max_layer_height = 0.40
min_layer_height = 0.15
printer_variant = 0.6
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0
default_print_profile = 0.30mm QUALITY @0.6 nozzle MK3
[printer:Original Prusa i3 MK3S & MK3S+ MMU2S Single 0.25 nozzle]
@ -5442,7 +5445,7 @@ max_layer_height = 0.15
min_layer_height = 0.05
printer_variant = 0.25
retract_lift = 0.15
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F1400.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E value below. Excessive value can damage the printer.\n{if print_settings_id=~/.*@0.25 nozzle MK3.*/}M907 E430 ; set extruder motor current{endif}
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F1400.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E value below. Excessive value can damage the printer.\n{if print_settings_id=~/.*@0.25 nozzle MK3.*/}M907 E430 ; set extruder motor current{endif}
default_print_profile = 0.10mm DETAIL @0.25 nozzle MK3
[printer:Original Prusa i3 MK3S & MK3S+ MMU2S]
@ -5451,7 +5454,7 @@ renamed_from = "Original Prusa i3 MK3S MMU2S"
machine_max_acceleration_e = 8000,8000
nozzle_diameter = 0.4,0.4,0.4,0.4,0.4
extruder_colour = #FF8000;#DB5182;#00FFFF;#FF4F4F;#9FFF9F
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E29.0 F1073.0\nG1 X5.0 E29.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E29.0 F1073.0\nG1 X5.0 E29.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n{endif}\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors\n
## 0.6mm nozzle MMU2/S printer profiles
@ -5463,7 +5466,7 @@ nozzle_diameter = 0.6,0.6,0.6,0.6,0.6
max_layer_height = 0.40
min_layer_height = 0.15
printer_variant = 0.6
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E29.0 F1073.0\nG1 X5.0 E29.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E29.0 F1073.0\nG1 X5.0 E29.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0
default_print_profile = 0.30mm QUALITY @0.6 nozzle MK3
[printer:Original Prusa i3 MK3 MMU2 0.6 nozzle]
@ -5472,7 +5475,7 @@ nozzle_diameter = 0.6,0.6,0.6,0.6,0.6
max_layer_height = 0.40
min_layer_height = 0.15
printer_variant = 0.6
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E32.0 F1073.0\nG1 X5.0 E32.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.2 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E32.0 F1073.0\nG1 X5.0 E32.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0
default_print_profile = 0.30mm QUALITY @0.6 nozzle MK3
## MINI

View file

@ -1,4 +1,5 @@
min_slic3r_version = 2.3.0-alpha3
0.0.6 Added material TPU 93A (SMARTFIL)
0.0.5 Removed obsolete host keys.
0.0.4 Added PLA, PETG profiles for 0.8 nozzle, update print materials
0.0.3 Added DeltiQ 2, DeltiQ 2 Plus printers, 0.10mm, 0.20mm FLEX print profiles, updated print materials, flexprint extension support

View file

@ -6,7 +6,7 @@
name = TriLAB
# Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 0.0.5
config_version = 0.0.6
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/TriLAB/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@ -22,7 +22,7 @@ technology = FFF
family = DeltiQ 2
bed_model = dq2_bed.stl
bed_texture = dq2_bed_texture.svg
default_materials = DeltiQ - PLA - Generic; DeltiQ - PETG - Generic; DeltiQ - ABS - Generic; DeltiQ - PLA - ExtraFill (Fillamentum); DeltiQ - PETG (Devil Design); DeltiQ - ABS - ExtraFill (Fillamentum); DeltiQ - ASA - ExtraFill (Fillamentum); DeltiQ - CPE - HG100 (Fillamentum); DeltiQ FP2 - PLA - Generic; DeltiQ FP2 - PETG - Generic; DeltiQ FP2 - ABS - Generic; DeltiQ FP2 - PLA - ExtraFill (Fillamentum); DeltiQ FP2 - PETG (Devil Design); DeltiQ FP2 - ABS - ExtraFill (Fillamentum); DeltiQ FP2 - ASA - ExtraFill (Fillamentum); DeltiQ FP2 - CPE - HG100 (Fillamentum); DeltiQ FP2 - FLEX - Generic; DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum); DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum); DeltiQ - PLA - ExtraFill (Fillamentum) @0.8 nozzle
default_materials = DeltiQ - PLA - Generic; DeltiQ - PETG - Generic; DeltiQ - ABS - Generic; DeltiQ - PLA - ExtraFill (Fillamentum); DeltiQ - PETG (Devil Design); DeltiQ - ABS - ExtraFill (Fillamentum); DeltiQ - ASA - ExtraFill (Fillamentum); DeltiQ - CPE - HG100 (Fillamentum); DeltiQ FP2 - PLA - Generic; DeltiQ FP2 - PETG - Generic; DeltiQ FP2 - ABS - Generic; DeltiQ FP2 - PLA - ExtraFill (Fillamentum); DeltiQ FP2 - PETG (Devil Design); DeltiQ FP2 - ABS - ExtraFill (Fillamentum); DeltiQ FP2 - ASA - ExtraFill (Fillamentum); DeltiQ FP2 - CPE - HG100 (Fillamentum); DeltiQ FP2 - FLEX - Generic; DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum); DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum); DeltiQ FP2 - TPU 93A (SMARTFIL); DeltiQ - PLA - ExtraFill (Fillamentum) @0.8 nozzle
[printer_model:DQ2P]
name = DeltiQ 2 Plus
@ -40,7 +40,7 @@ technology = FFF
family = DeltiQ 2
bed_model = dq2_bed.stl
bed_texture = dq2_bed_texture.svg
default_materials = DeltiQ FP2 - PLA - Generic; DeltiQ FP2 - PETG - Generic; DeltiQ FP2 - ABS - Generic; DeltiQ FP2 - PLA - ExtraFill (Fillamentum); DeltiQ FP2 - PETG (Devil Design); DeltiQ FP2 - ABS - ExtraFill (Fillamentum); DeltiQ FP2 - ASA - ExtraFill (Fillamentum); DeltiQ FP2 - CPE - HG100 (Fillamentum); DeltiQ FP2 - FLEX - Generic; DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum); DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum)
default_materials = DeltiQ FP2 - PLA - Generic; DeltiQ FP2 - PETG - Generic; DeltiQ FP2 - ABS - Generic; DeltiQ FP2 - PLA - ExtraFill (Fillamentum); DeltiQ FP2 - PETG (Devil Design); DeltiQ FP2 - ABS - ExtraFill (Fillamentum); DeltiQ FP2 - ASA - ExtraFill (Fillamentum); DeltiQ FP2 - CPE - HG100 (Fillamentum); DeltiQ FP2 - FLEX - Generic; DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum); DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum); DeltiQ FP2 - TPU 93A (SMARTFIL)
[printer_model:DQ2P+FP2]
name = DeltiQ 2 Plus + FlexPrint 2
@ -49,7 +49,7 @@ technology = FFF
family = DeltiQ 2
bed_model = dq2_bed.stl
bed_texture = dq2_bed_texture.svg
default_materials = DeltiQ FP2 - PLA - Generic; DeltiQ FP2 - PETG - Generic; DeltiQ FP2 - ABS - Generic; DeltiQ FP2 - PLA - ExtraFill (Fillamentum); DeltiQ FP2 - PETG (Devil Design); DeltiQ FP2 - ABS - ExtraFill (Fillamentum); DeltiQ FP2 - ASA - ExtraFill (Fillamentum); DeltiQ FP2 - CPE - HG100 (Fillamentum); DeltiQ FP2 - FLEX - Generic; DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum); DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum)
default_materials = DeltiQ FP2 - PLA - Generic; DeltiQ FP2 - PETG - Generic; DeltiQ FP2 - ABS - Generic; DeltiQ FP2 - PLA - ExtraFill (Fillamentum); DeltiQ FP2 - PETG (Devil Design); DeltiQ FP2 - ABS - ExtraFill (Fillamentum); DeltiQ FP2 - ASA - ExtraFill (Fillamentum); DeltiQ FP2 - CPE - HG100 (Fillamentum); DeltiQ FP2 - FLEX - Generic; DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum); DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum); DeltiQ FP2 - TPU 93A (SMARTFIL)
[printer_model:DQ2+FP]
name = DeltiQ 2 + FlexPrint
@ -376,7 +376,7 @@ temperature = 215
[filament:DeltiQ - PETG - Generic]
inherits = *DeltiQ common*
bed_temperature = 90
bed_temperature = 80
bridge_fan_speed = 50
cooling = 1
fan_always_on = 1
@ -394,7 +394,7 @@ filament_retract_lift = 0.2
filament_retract_speed = 45
filament_type = PET
filament_wipe = 1
first_layer_bed_temperature = 90
first_layer_bed_temperature = 80
first_layer_temperature = 240
max_fan_speed = 50
min_fan_speed = 30
@ -695,6 +695,37 @@ filament_retract_length = 2.5
filament_retract_speed = 20
filament_type = TPU98A
[filament:DeltiQ FP2 - TPU 93A (SMARTFIL)]
inherits = DeltiQ FP2 - FLEX - Generic
bed_temperature = 50
bridge_fan_speed = 80
cooling = 1
disable_fan_first_layers = 3
extrusion_multiplier = 1.00
fan_always_on = 1
fan_below_layer_time = 10
filament_vendor = Smartfil
filament_cost = 1209
filament_density = 1.21
filament_deretract_speed = nil
filament_max_volumetric_speed = 2.5
filament_retract_before_travel = 2
filament_retract_before_wipe = nil
filament_retract_layer_change = 0
filament_retract_length = 2.9
filament_retract_lift = 0.2
filament_retract_restart_extra = nil
filament_retract_speed = 35
filament_type = TPU93A
filament_wipe = 0
first_layer_bed_temperature = 50
first_layer_temperature = 235
max_fan_speed = 70
min_fan_speed = 30
min_print_speed = 10
slowdown_below_layer_time = 4
temperature = 235
# DeltiQ Printer #

View file

@ -150,15 +150,11 @@ int CLI::run(int argc, char **argv)
}
// Read input file(s) if any.
for (const std::string& file : m_input_files) {
std::string ext = boost::filesystem::path(file).extension().string();
if (ext == ".gcode" || ext == ".g") {
if (boost::filesystem::exists(file)) {
for (const std::string& file : m_input_files)
if (is_gcode_file(file) && boost::filesystem::exists(file)) {
start_as_gcodeviewer = true;
break;
}
}
}
if (!start_as_gcodeviewer) {
for (const std::string& file : m_input_files) {
if (!boost::filesystem::exists(file)) {

View file

@ -716,45 +716,33 @@ static void traverse_pt_noholes(const ClipperLib::PolyNodes &nodes, Polygons *ou
});
}
static void traverse_pt_old(ClipperLib::PolyNodes &nodes, Polygons* retval)
static void traverse_pt_outside_in(const ClipperLib::PolyNodes &nodes, Polygons *retval)
{
/* use a nearest neighbor search to order these children
TODO: supply start_near to chained_path() too? */
// collect ordering points
Points ordering_points;
ordering_points.reserve(nodes.size());
for (ClipperLib::PolyNodes::const_iterator it = nodes.begin(); it != nodes.end(); ++it) {
Point p((*it)->Contour.front().X, (*it)->Contour.front().Y);
ordering_points.push_back(p);
}
for (const ClipperLib::PolyNode *node : nodes)
ordering_points.emplace_back(node->Contour.front().X, node->Contour.front().Y);
// perform the ordering
ClipperLib::PolyNodes ordered_nodes = chain_clipper_polynodes(ordering_points, nodes);
// push results recursively
for (ClipperLib::PolyNodes::iterator it = ordered_nodes.begin(); it != ordered_nodes.end(); ++it) {
// Perform the ordering, push results recursively.
//FIXME pass the last point to chain_clipper_polynodes?
for (const ClipperLib::PolyNode *node : chain_clipper_polynodes(ordering_points, nodes)) {
retval->emplace_back(ClipperPath_to_Slic3rPolygon(node->Contour));
if (node->IsHole())
// Orient a hole, which is clockwise oriented, to CCW.
retval->back().reverse();
// traverse the next depth
traverse_pt_old((*it)->Childs, retval);
retval->push_back(ClipperPath_to_Slic3rPolygon((*it)->Contour));
if ((*it)->IsHole()) retval->back().reverse(); // ccw
traverse_pt_outside_in(node->Childs, retval);
}
}
Polygons union_pt_chained(const Polygons &subject, bool safety_offset_)
Polygons union_pt_chained_outside_in(const Polygons &subject, bool safety_offset_)
{
ClipperLib::PolyTree polytree = union_pt(subject, safety_offset_);
Polygons retval;
traverse_pt_old(polytree.Childs, &retval);
traverse_pt_outside_in(polytree.Childs, &retval);
return retval;
// TODO: This needs to be tested:
// ClipperLib::PolyTree polytree = union_pt(subject, safety_offset_);
// Polygons retval;
// traverse_pt_noholes(polytree.Childs, &retval);
// return retval;
}
Polygons simplify_polygons(const Polygons &subject, bool preserve_collinear)

View file

@ -219,7 +219,7 @@ ClipperLib::PolyTree union_pt(const Slic3r::ExPolygons &subject, bool safety_off
ClipperLib::PolyTree union_pt(Slic3r::Polygons &&subject, bool safety_offset_ = false);
ClipperLib::PolyTree union_pt(Slic3r::ExPolygons &&subject, bool safety_offset_ = false);
Slic3r::Polygons union_pt_chained(const Slic3r::Polygons &subject, bool safety_offset_ = false);
Slic3r::Polygons union_pt_chained_outside_in(const Slic3r::Polygons &subject, bool safety_offset_ = false);
ClipperLib::PolyNodes order_nodes(const ClipperLib::PolyNodes &nodes);

View file

@ -233,6 +233,7 @@ ConfigOption* ConfigOptionDef::create_empty_option() const
case coFloats: return new ConfigOptionFloatsNullable();
case coInts: return new ConfigOptionIntsNullable();
case coPercents: return new ConfigOptionPercentsNullable();
case coFloatsOrPercents: return new ConfigOptionFloatsOrPercentsNullable();
case coBools: return new ConfigOptionBoolsNullable();
default: throw Slic3r::RuntimeError(std::string("Unknown option type for nullable option ") + this->label);
}
@ -247,6 +248,7 @@ ConfigOption* ConfigOptionDef::create_empty_option() const
case coPercent: return new ConfigOptionPercent();
case coPercents: return new ConfigOptionPercents();
case coFloatOrPercent: return new ConfigOptionFloatOrPercent();
case coFloatsOrPercents: return new ConfigOptionFloatsOrPercents();
case coPoint: return new ConfigOptionPoint();
case coPoints: return new ConfigOptionPoints();
case coPoint3: return new ConfigOptionPoint3();
@ -587,7 +589,7 @@ void ConfigBase::setenv_() const
void ConfigBase::load(const std::string &file)
{
if (boost::iends_with(file, ".gcode") || boost::iends_with(file, ".g"))
if (is_gcode_file(file))
this->load_from_gcode_file(file);
else
this->load_from_ini(file);
@ -950,6 +952,8 @@ CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionPercent)
CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionPercents)
CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionPercentsNullable)
CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionFloatOrPercent)
CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionFloatsOrPercents)
CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionFloatsOrPercentsNullable)
CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionPoint)
CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionPoints)
CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionPoint3)
@ -984,6 +988,8 @@ CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionFloat, Slic3r::ConfigOp
CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionFloats, Slic3r::ConfigOptionPercents)
CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionFloats, Slic3r::ConfigOptionPercentsNullable)
CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionPercent, Slic3r::ConfigOptionFloatOrPercent)
CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionVector<Slic3r::FloatOrPercent>, Slic3r::ConfigOptionFloatsOrPercents)
CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionVector<Slic3r::FloatOrPercent>, Slic3r::ConfigOptionFloatsOrPercentsNullable)
CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionSingle<Slic3r::Vec2d>, Slic3r::ConfigOptionPoint)
CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionVector<Slic3r::Vec2d>, Slic3r::ConfigOptionPoints)
CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionSingle<Slic3r::Vec3d>, Slic3r::ConfigOptionPoint3)

View file

@ -86,6 +86,8 @@ enum ConfigOptionType {
coPercents = coPercent + coVectorType,
// a fraction or an absolute value
coFloatOrPercent = 5,
// vector of the above
coFloatsOrPercents = coFloatOrPercent + coVectorType,
// single 2d point (Point2f). Currently not used.
coPoint = 6,
// vector of 2d points (Point2f). Currently used for the definition of the print bed and for the extruder offsets.
@ -889,6 +891,143 @@ private:
template<class Archive> void serialize(Archive &ar) { ar(cereal::base_class<ConfigOptionPercent>(this), percent); }
};
struct FloatOrPercent
{
double value;
bool percent;
private:
friend class cereal::access;
template<class Archive> void serialize(Archive & ar) { ar(this->value); ar(this->percent); }
};
inline bool operator==(const FloatOrPercent &l, const FloatOrPercent &r)
{
return l.value == r.value && l.percent == r.percent;
}
inline bool operator!=(const FloatOrPercent& l, const FloatOrPercent& r)
{
return !(l == r);
}
template<bool NULLABLE>
class ConfigOptionFloatsOrPercentsTempl : public ConfigOptionVector<FloatOrPercent>
{
public:
ConfigOptionFloatsOrPercentsTempl() : ConfigOptionVector<FloatOrPercent>() {}
explicit ConfigOptionFloatsOrPercentsTempl(size_t n, FloatOrPercent value) : ConfigOptionVector<FloatOrPercent>(n, value) {}
explicit ConfigOptionFloatsOrPercentsTempl(std::initializer_list<FloatOrPercent> il) : ConfigOptionVector<FloatOrPercent>(std::move(il)) {}
explicit ConfigOptionFloatsOrPercentsTempl(const std::vector<FloatOrPercent> &vec) : ConfigOptionVector<FloatOrPercent>(vec) {}
explicit ConfigOptionFloatsOrPercentsTempl(std::vector<FloatOrPercent> &&vec) : ConfigOptionVector<FloatOrPercent>(std::move(vec)) {}
static ConfigOptionType static_type() { return coFloatsOrPercents; }
ConfigOptionType type() const override { return static_type(); }
ConfigOption* clone() const override { return new ConfigOptionFloatsOrPercentsTempl(*this); }
bool operator==(const ConfigOptionFloatsOrPercentsTempl &rhs) const { return vectors_equal(this->values, rhs.values); }
bool operator==(const ConfigOption &rhs) const override {
if (rhs.type() != this->type())
throw Slic3r::RuntimeError("ConfigOptionFloatsOrPercentsTempl: Comparing incompatible types");
assert(dynamic_cast<const ConfigOptionVector<FloatOrPercent>*>(&rhs));
return vectors_equal(this->values, static_cast<const ConfigOptionVector<FloatOrPercent>*>(&rhs)->values);
}
// Could a special "nil" value be stored inside the vector, indicating undefined value?
bool nullable() const override { return NULLABLE; }
// Special "nil" value to be stored into the vector if this->supports_nil().
static FloatOrPercent nil_value() { return { std::numeric_limits<double>::quiet_NaN(), false }; }
// A scalar is nil, or all values of a vector are nil.
bool is_nil() const override { for (auto v : this->values) if (! std::isnan(v.value)) return false; return true; }
bool is_nil(size_t idx) const override { return std::isnan(this->values[idx].value); }
std::string serialize() const override
{
std::ostringstream ss;
for (const FloatOrPercent &v : this->values) {
if (&v != &this->values.front())
ss << ",";
serialize_single_value(ss, v);
}
return ss.str();
}
std::vector<std::string> vserialize() const override
{
std::vector<std::string> vv;
vv.reserve(this->values.size());
for (const FloatOrPercent &v : this->values) {
std::ostringstream ss;
serialize_single_value(ss, v);
vv.push_back(ss.str());
}
return vv;
}
bool deserialize(const std::string &str, bool append = false) override
{
if (! append)
this->values.clear();
std::istringstream is(str);
std::string item_str;
while (std::getline(is, item_str, ',')) {
boost::trim(item_str);
if (item_str == "nil") {
if (NULLABLE)
this->values.push_back(nil_value());
else
throw Slic3r::RuntimeError("Deserializing nil into a non-nullable object");
} else {
bool percent = item_str.find_first_of("%") != std::string::npos;
std::istringstream iss(item_str);
double value;
iss >> value;
this->values.push_back({ value, percent });
}
}
return true;
}
ConfigOptionFloatsOrPercentsTempl& operator=(const ConfigOption *opt)
{
this->set(opt);
return *this;
}
protected:
void serialize_single_value(std::ostringstream &ss, const FloatOrPercent &v) const {
if (std::isfinite(v.value)) {
ss << v.value;
if (v.percent)
ss << "%";
} else if (std::isnan(v.value)) {
if (NULLABLE)
ss << "nil";
else
throw Slic3r::RuntimeError("Serializing NaN");
} else
throw Slic3r::RuntimeError("Serializing invalid number");
}
static bool vectors_equal(const std::vector<FloatOrPercent> &v1, const std::vector<FloatOrPercent> &v2) {
if (NULLABLE) {
if (v1.size() != v2.size())
return false;
for (auto it1 = v1.begin(), it2 = v2.begin(); it1 != v1.end(); ++ it1, ++ it2)
if (! ((std::isnan(it1->value) && std::isnan(it2->value)) || *it1 == *it2))
return false;
return true;
} else
// Not supporting nullable values, the default vector compare is cheaper.
return v1 == v2;
}
private:
friend class cereal::access;
template<class Archive> void serialize(Archive &ar) { ar(cereal::base_class<ConfigOptionVector<FloatOrPercent>>(this)); }
};
using ConfigOptionFloatsOrPercents = ConfigOptionFloatsOrPercentsTempl<false>;
using ConfigOptionFloatsOrPercentsNullable = ConfigOptionFloatsOrPercentsTempl<true>;
class ConfigOptionPoint : public ConfigOptionSingle<Vec2d>
{
public:

View file

@ -301,11 +301,12 @@ std::pair<double, double> adaptive_fill_line_spacing(const PrintObject &print_ob
bool nonempty = config.fill_density > 0;
bool has_adaptive_infill = nonempty && config.fill_pattern == ipAdaptiveCubic;
bool has_support_infill = nonempty && config.fill_pattern == ipSupportCubic;
double infill_extrusion_width = config.infill_extrusion_width.percent ? default_infill_extrusion_width * 0.01 * config.infill_extrusion_width : config.infill_extrusion_width;
region_fill_data.push_back(RegionFillData({
has_adaptive_infill ? Tristate::Maybe : Tristate::No,
has_support_infill ? Tristate::Maybe : Tristate::No,
config.fill_density,
config.infill_extrusion_width != 0. ? config.infill_extrusion_width : default_infill_extrusion_width
infill_extrusion_width != 0. ? infill_extrusion_width : default_infill_extrusion_width
}));
build_octree |= has_adaptive_infill || has_support_infill;
}

View file

@ -66,7 +66,11 @@ protected:
const std::pair<float, Point> &direction,
ExPolygon expolygon,
Polylines &polylines_out) override;
bool no_sort() const override { return true; }
// Let the G-code export reoder the infill lines.
//FIXME letting the G-code exporter to reorder infill lines of Adaptive Cubic Infill
// may not be optimal as the internal infill lines may get extruded before the long infill
// lines to which the short infill lines are supposed to anchor.
bool no_sort() const override { return false; }
};
}; // namespace FillAdaptive

View file

@ -96,10 +96,10 @@ coord_t Fill::_adjust_solid_spacing(const coord_t width, const coord_t distance)
assert(width >= 0);
assert(distance > 0);
// floor(width / distance)
coord_t number_of_intervals = (width - EPSILON) / distance;
const auto number_of_intervals = coord_t((width - EPSILON) / distance);
coord_t distance_new = (number_of_intervals == 0) ?
distance :
((width - EPSILON) / number_of_intervals);
coord_t((width - EPSILON) / number_of_intervals);
const coordf_t factor = coordf_t(distance_new) / coordf_t(distance);
assert(factor > 1. - 1e-5);
// How much could the extrusion width be increased? By 20%.
@ -143,7 +143,7 @@ std::pair<float, Point> Fill::_infill_direction(const Surface *surface) const
#ifdef SLIC3R_DEBUG
printf("Filling bridge with angle %f\n", surface->bridge_angle);
#endif /* SLIC3R_DEBUG */
out_angle = surface->bridge_angle;
out_angle = float(surface->bridge_angle);
} else if (this->layer_id != size_t(-1)) {
// alternate fill direction
out_angle += this->_layer_angle(this->layer_id / surface->thickness_layers);
@ -161,15 +161,15 @@ struct ContourIntersectionPoint {
size_t contour_idx;
size_t point_idx;
// Eucleidean parameter of point_idx along its contour.
float param;
double param;
// Other intersection points along the same contour. If there is only a single T-joint on a contour
// with an intersection line, then the prev_on_contour and next_on_contour remain nulls.
ContourIntersectionPoint* prev_on_contour { nullptr };
ContourIntersectionPoint* next_on_contour { nullptr };
// Length of the contour not yet allocated to some extrusion path going back (clockwise), or masked out by some overlapping infill line.
float contour_not_taken_length_prev { std::numeric_limits<float>::max() };
double contour_not_taken_length_prev { std::numeric_limits<double>::max() };
// Length of the contour not yet allocated to some extrusion path going forward (counter-clockwise), or masked out by some overlapping infill line.
float contour_not_taken_length_next { std::numeric_limits<float>::max() };
double contour_not_taken_length_next { std::numeric_limits<double>::max() };
// End point is consumed if an infill line connected to this T-joint was already connected left or right along the contour,
// or if the infill line was processed, but it was not possible to connect it left or right along the contour.
bool consumed { false };
@ -180,13 +180,13 @@ struct ContourIntersectionPoint {
void consume_prev() { this->contour_not_taken_length_prev = 0.; this->prev_trimmed = true; this->consumed = true; }
void consume_next() { this->contour_not_taken_length_next = 0.; this->next_trimmed = true; this->consumed = true; }
void trim_prev(const float new_len) {
void trim_prev(const double new_len) {
if (new_len < this->contour_not_taken_length_prev) {
this->contour_not_taken_length_prev = new_len;
this->prev_trimmed = true;
}
}
void trim_next(const float new_len) {
void trim_next(const double new_len) {
if (new_len < this->contour_not_taken_length_next) {
this->contour_not_taken_length_next = new_len;
this->next_trimmed = true;
@ -207,24 +207,24 @@ struct ContourIntersectionPoint {
};
// Distance from param1 to param2 when going counter-clockwise.
static inline float closed_contour_distance_ccw(float param1, float param2, float contour_length)
static inline double closed_contour_distance_ccw(double param1, double param2, double contour_length)
{
assert(param1 >= 0.f && param1 <= contour_length);
assert(param2 >= 0.f && param2 <= contour_length);
float d = param2 - param1;
if (d < 0.f)
assert(param1 >= 0. && param1 <= contour_length);
assert(param2 >= 0. && param2 <= contour_length);
double d = param2 - param1;
if (d < 0.)
d += contour_length;
return d;
}
// Distance from param1 to param2 when going clockwise.
static inline float closed_contour_distance_cw(float param1, float param2, float contour_length)
static inline double closed_contour_distance_cw(double param1, double param2, double contour_length)
{
return closed_contour_distance_ccw(param2, param1, contour_length);
}
// Length along the contour from cp1 to cp2 going counter-clockwise.
float path_length_along_contour_ccw(const ContourIntersectionPoint *cp1, const ContourIntersectionPoint *cp2, float contour_length)
double path_length_along_contour_ccw(const ContourIntersectionPoint *cp1, const ContourIntersectionPoint *cp2, double contour_length)
{
assert(cp1 != nullptr);
assert(cp2 != nullptr);
@ -234,13 +234,13 @@ float path_length_along_contour_ccw(const ContourIntersectionPoint *cp1, const C
}
// Lengths along the contour from cp1 to cp2 going CCW and going CW.
std::pair<float, float> path_lengths_along_contour(const ContourIntersectionPoint *cp1, const ContourIntersectionPoint *cp2, float contour_length)
std::pair<double, double> path_lengths_along_contour(const ContourIntersectionPoint *cp1, const ContourIntersectionPoint *cp2, double contour_length)
{
// Zero'th param is the length of the contour.
float param_lo = cp1->param;
float param_hi = cp2->param;
assert(param_lo >= 0.f && param_lo <= contour_length);
assert(param_hi >= 0.f && param_hi <= contour_length);
double param_lo = cp1->param;
double param_hi = cp2->param;
assert(param_lo >= 0. && param_lo <= contour_length);
assert(param_hi >= 0. && param_hi <= contour_length);
bool reversed = false;
if (param_lo > param_hi) {
std::swap(param_lo, param_hi);
@ -267,25 +267,25 @@ static inline void take_cw_full(Polyline &pl, const Points& contour, size_t idx_
}
// Add contour points from interval (idx_start, idx_end> to polyline, limited by the Eucleidean length taken.
static inline float take_cw_limited(Polyline &pl, const Points &contour, const std::vector<float> &params, size_t idx_start, size_t idx_end, float length_to_take)
static inline double take_cw_limited(Polyline &pl, const Points &contour, const std::vector<double> &params, size_t idx_start, size_t idx_end, double length_to_take)
{
// If appending to an infill line, then the start point of a perimeter line shall match the end point of an infill line.
assert(pl.empty() || pl.points.back() == contour[idx_start]);
assert(contour.size() + 1 == params.size());
assert(length_to_take > SCALED_EPSILON);
// Length of the contour.
float length = params.back();
double length = params.back();
// Parameter (length from contour.front()) for the first point.
float p0 = params[idx_start];
double p0 = params[idx_start];
// Current (2nd) point of the contour.
size_t i = (idx_start == 0) ? contour.size() - 1 : idx_start - 1;
// Previous point of the contour.
size_t iprev = idx_start;
// Length of the contour curve taken for iprev.
float lprev = 0.f;
double lprev = 0.;
for (;;) {
float l = closed_contour_distance_cw(p0, params[i], length);
double l = closed_contour_distance_cw(p0, params[i], length);
if (l >= length_to_take) {
// Trim the last segment.
double t = double(length_to_take - lprev) / (l - lprev);
@ -323,16 +323,16 @@ static inline void take_ccw_full(Polyline &pl, const Points &contour, size_t idx
// Add contour points from interval (idx_start, idx_end> to polyline, limited by the Eucleidean length taken.
// Returns length of the contour taken.
static inline float take_ccw_limited(Polyline &pl, const Points &contour, const std::vector<float> &params, size_t idx_start, size_t idx_end, float length_to_take)
static inline double take_ccw_limited(Polyline &pl, const Points &contour, const std::vector<double> &params, size_t idx_start, size_t idx_end, double length_to_take)
{
// If appending to an infill line, then the start point of a perimeter line shall match the end point of an infill line.
assert(pl.empty() || pl.points.back() == contour[idx_start]);
assert(contour.size() + 1 == params.size());
assert(length_to_take > SCALED_EPSILON);
// Length of the contour.
float length = params.back();
double length = params.back();
// Parameter (length from contour.front()) for the first point.
float p0 = params[idx_start];
double p0 = params[idx_start];
// Current (2nd) point of the contour.
size_t i = idx_start;
if (++ i == contour.size())
@ -340,9 +340,9 @@ static inline float take_ccw_limited(Polyline &pl, const Points &contour, const
// Previous point of the contour.
size_t iprev = idx_start;
// Length of the contour curve taken at iprev.
float lprev = 0.f;
double lprev = 0;
for (;;) {
float l = closed_contour_distance_ccw(p0, params[i], length);
double l = closed_contour_distance_ccw(p0, params[i], length);
if (l >= length_to_take) {
// Trim the last segment.
double t = double(length_to_take - lprev) / (l - lprev);
@ -411,8 +411,8 @@ static void take(Polyline &pl1, const Polyline &pl2, const Points &contour, Cont
}
static void take_limited(
Polyline &pl1, const Points &contour, const std::vector<float> &params,
ContourIntersectionPoint *cp_start, ContourIntersectionPoint *cp_end, bool clockwise, float take_max_length, float line_half_width)
Polyline &pl1, const Points &contour, const std::vector<double> &params,
ContourIntersectionPoint *cp_start, ContourIntersectionPoint *cp_end, bool clockwise, double take_max_length, double line_half_width)
{
#ifndef NDEBUG
// This is a valid case, where a single infill line connect to two different contours (outer contour + hole or two holes).
@ -445,11 +445,11 @@ static void take_limited(
pl1.points.reserve(pl1.points.size() + pl_tmp.size() + size_t(new_points));
}
float length = params.back();
float length_to_go = take_max_length;
double length = params.back();
double length_to_go = take_max_length;
cp_start->consumed = true;
if (cp_start == cp_end) {
length_to_go = std::max(0.f, std::min(length_to_go, length - line_half_width));
length_to_go = std::max(0., std::min(length_to_go, length - line_half_width));
length_to_go = std::min(length_to_go, clockwise ? cp_start->contour_not_taken_length_prev : cp_start->contour_not_taken_length_next);
cp_start->consume_prev();
cp_start->consume_next();
@ -462,11 +462,11 @@ static void take_limited(
assert(cp_start != cp_end);
for (ContourIntersectionPoint *cp = cp_start; cp != cp_end; cp = cp->prev_on_contour) {
// Length of the segment from cp to cp->prev_on_contour.
float l = closed_contour_distance_cw(cp->param, cp->prev_on_contour->param, length);
double l = closed_contour_distance_cw(cp->param, cp->prev_on_contour->param, length);
length_to_go = std::min(length_to_go, cp->contour_not_taken_length_prev);
//if (cp->prev_on_contour->consumed)
// Don't overlap with an already extruded infill line.
length_to_go = std::max(0.f, std::min(length_to_go, l - line_half_width));
length_to_go = std::max(0., std::min(length_to_go, l - line_half_width));
cp->consume_prev();
if (l >= length_to_go) {
if (length_to_go > SCALED_EPSILON) {
@ -475,7 +475,7 @@ static void take_limited(
}
break;
} else {
cp->prev_on_contour->trim_next(0.f);
cp->prev_on_contour->trim_next(0.);
take_cw_full(pl1, contour, cp->point_idx, cp->prev_on_contour->point_idx);
length_to_go -= l;
}
@ -483,11 +483,11 @@ static void take_limited(
} else {
assert(cp_start != cp_end);
for (ContourIntersectionPoint *cp = cp_start; cp != cp_end; cp = cp->next_on_contour) {
float l = closed_contour_distance_ccw(cp->param, cp->next_on_contour->param, length);
double l = closed_contour_distance_ccw(cp->param, cp->next_on_contour->param, length);
length_to_go = std::min(length_to_go, cp->contour_not_taken_length_next);
//if (cp->next_on_contour->consumed)
// Don't overlap with an already extruded infill line.
length_to_go = std::max(0.f, std::min(length_to_go, l - line_half_width));
length_to_go = std::max(0., std::min(length_to_go, l - line_half_width));
cp->consume_next();
if (l >= length_to_go) {
if (length_to_go > SCALED_EPSILON) {
@ -496,7 +496,7 @@ static void take_limited(
}
break;
} else {
cp->next_on_contour->trim_prev(0.f);
cp->next_on_contour->trim_prev(0.);
take_ccw_full(pl1, contour, cp->point_idx, cp->next_on_contour->point_idx);
length_to_go -= l;
}
@ -678,19 +678,19 @@ static inline bool line_rounded_thick_segment_collision(
return intersects;
}
static inline bool inside_interval(float low, float high, float p)
static inline bool inside_interval(double low, double high, double p)
{
return p >= low && p <= high;
}
static inline bool interval_inside_interval(float outer_low, float outer_high, float inner_low, float inner_high, float epsilon)
static inline bool interval_inside_interval(double outer_low, double outer_high, double inner_low, double inner_high, double epsilon)
{
outer_low -= epsilon;
outer_high += epsilon;
return inside_interval(outer_low, outer_high, inner_low) && inside_interval(outer_low, outer_high, inner_high);
}
static inline bool cyclic_interval_inside_interval(float outer_low, float outer_high, float inner_low, float inner_high, float length)
static inline bool cyclic_interval_inside_interval(double outer_low, double outer_high, double inner_low, double inner_high, double length)
{
if (outer_low > outer_high)
outer_high += length;
@ -700,7 +700,7 @@ static inline bool cyclic_interval_inside_interval(float outer_low, float outer_
inner_low += length;
inner_high += length;
}
return interval_inside_interval(outer_low, outer_high, inner_low, inner_high, float(SCALED_EPSILON));
return interval_inside_interval(outer_low, outer_high, inner_low, inner_high, double(SCALED_EPSILON));
}
// #define INFILL_DEBUG_OUTPUT
@ -710,7 +710,7 @@ static void export_infill_to_svg(
// Boundary contour, along which the perimeter extrusions will be drawn.
const std::vector<Points> &boundary,
// Parametrization of boundary with Euclidian length.
const std::vector<std::vector<float>> &boundary_parameters,
const std::vector<std::vector<double>> &boundary_parameters,
// Intersections (T-joints) of the infill lines with the boundary.
std::vector<std::vector<ContourIntersectionPoint*>> &boundary_intersections,
// Infill lines, either completely inside the boundary, or touching the boundary.
@ -739,7 +739,7 @@ static void export_infill_to_svg(
for (const std::vector<ContourIntersectionPoint*> &intersections : boundary_intersections) {
const size_t boundary_idx = &intersections - boundary_intersections.data();
const Points &contour = boundary[boundary_idx];
const std::vector<float> &contour_param = boundary_parameters[boundary_idx];
const std::vector<double> &contour_param = boundary_parameters[boundary_idx];
for (const ContourIntersectionPoint *ip : intersections) {
assert(ip->next_trimmed == ip->next_on_contour->prev_trimmed);
assert(ip->prev_trimmed == ip->prev_on_contour->next_trimmed);
@ -834,7 +834,7 @@ void mark_boundary_segments_touching_infill(
// Boundary contour, along which the perimeter extrusions will be drawn.
const std::vector<Points> &boundary,
// Parametrization of boundary with Euclidian length.
const std::vector<std::vector<float>> &boundary_parameters,
const std::vector<std::vector<double>> &boundary_parameters,
// Intersections (T-joints) of the infill lines with the boundary.
std::vector<std::vector<ContourIntersectionPoint*>> &boundary_intersections,
// Bounding box around the boundary.
@ -865,12 +865,12 @@ void mark_boundary_segments_touching_infill(
// Make sure that the the grid is big enough for queries against the thick segment.
grid.set_bbox(boundary_bbox.inflated(distance_colliding * 1.43));
// Inflate the bounding box by a thick line width.
grid.create(boundary, std::max(clip_distance, distance_colliding) + scale_(10.));
grid.create(boundary, coord_t(std::max(clip_distance, distance_colliding) + scale_(10.)));
// Visitor for the EdgeGrid to trim boundary_intersections with existing infill lines.
struct Visitor {
Visitor(const EdgeGrid::Grid &grid,
const std::vector<Points> &boundary, const std::vector<std::vector<float>> &boundary_parameters, std::vector<std::vector<ContourIntersectionPoint*>> &boundary_intersections,
const std::vector<Points> &boundary, const std::vector<std::vector<double>> &boundary_parameters, std::vector<std::vector<ContourIntersectionPoint*>> &boundary_intersections,
const double radius) :
grid(grid), boundary(boundary), boundary_parameters(boundary_parameters), boundary_intersections(boundary_intersections), radius(radius), trim_l_threshold(0.5 * radius) {}
@ -907,10 +907,10 @@ void mark_boundary_segments_touching_infill(
// The boundary segment intersects with the infill segment thickened by radius.
// Interval is specified in Euclidian length from seg_pt1 to seg_pt2.
// 1) Find the Euclidian parameters of seg_pt1 and seg_pt2 on its boundary contour.
const std::vector<float> &contour_parameters = boundary_parameters[it_contour_and_segment->first];
const float contour_length = contour_parameters.back();
const float param_seg_pt1 = contour_parameters[it_contour_and_segment->second];
const float param_seg_pt2 = contour_parameters[it_contour_and_segment->second + 1];
const std::vector<double> &contour_parameters = boundary_parameters[it_contour_and_segment->first];
const double contour_length = contour_parameters.back();
const double param_seg_pt1 = contour_parameters[it_contour_and_segment->second];
const double param_seg_pt2 = contour_parameters[it_contour_and_segment->second + 1];
#ifdef INFILL_DEBUG_OUTPUT
this->perimeter_overlaps.push_back({ Point((seg_pt1 + (seg_pt2 - seg_pt1).normalized() * interval.first).cast<coord_t>()),
Point((seg_pt1 + (seg_pt2 - seg_pt1).normalized() * interval.second).cast<coord_t>()) });
@ -918,8 +918,8 @@ void mark_boundary_segments_touching_infill(
assert(interval.first >= 0.);
assert(interval.second >= 0.);
assert(interval.first <= interval.second);
const auto param_overlap1 = std::min(param_seg_pt2, float(param_seg_pt1 + interval.first));
const auto param_overlap2 = std::min(param_seg_pt2, float(param_seg_pt1 + interval.second));
const auto param_overlap1 = std::min(param_seg_pt2, param_seg_pt1 + interval.first);
const auto param_overlap2 = std::min(param_seg_pt2, param_seg_pt1 + interval.second);
// 2) Find the ContourIntersectionPoints before param_overlap1 and after param_overlap2.
// Find the span of ContourIntersectionPoints, that is trimmed by the interval (param_overlap1, param_overlap2).
ContourIntersectionPoint *ip_low, *ip_high;
@ -946,7 +946,7 @@ void mark_boundary_segments_touching_infill(
ip->consume_next();
}
// Subtract the interval from the first and last segments.
float trim_l = closed_contour_distance_ccw(ip_low->param, param_overlap1, contour_length);
double trim_l = closed_contour_distance_ccw(ip_low->param, param_overlap1, contour_length);
//if (trim_l > trim_l_threshold)
ip_low->trim_next(trim_l);
trim_l = closed_contour_distance_ccw(param_overlap2, ip_high->param, contour_length);
@ -978,12 +978,12 @@ void mark_boundary_segments_touching_infill(
const EdgeGrid::Grid &grid;
const std::vector<Points> &boundary;
const std::vector<std::vector<float>> &boundary_parameters;
const std::vector<std::vector<double>> &boundary_parameters;
std::vector<std::vector<ContourIntersectionPoint*>> &boundary_intersections;
// Maximum distance between the boundary and the infill line allowed to consider the boundary not touching the infill line.
const double radius;
// Region around the contour / infill line intersection point, where the intersections are ignored.
const float trim_l_threshold;
const double trim_l_threshold;
const Vec2d *infill_pt1;
const Vec2d *infill_pt2;
@ -1100,11 +1100,11 @@ void Fill::connect_infill(Polylines &&infill_ordered, const Polygons &boundary_s
void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Polygon*> &boundary_src, const BoundingBox &bbox, Polylines &polylines_out, const double spacing, const FillParams &params)
{
assert(! infill_ordered.empty());
assert(params.anchor_length >= 0.f);
assert(params.anchor_length >= 0.);
assert(params.anchor_length_max >= 0.01f);
assert(params.anchor_length_max >= params.anchor_length);
const auto anchor_length = float(scale_(params.anchor_length));
const auto anchor_length_max = float(scale_(params.anchor_length_max));
const double anchor_length = scale_(params.anchor_length);
const double anchor_length_max = scale_(params.anchor_length_max);
#if 0
append(polylines_out, infill_ordered);
@ -1113,9 +1113,9 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
// 1) Add the end points of infill_ordered to boundary_src.
std::vector<Points> boundary;
std::vector<std::vector<float>> boundary_params;
std::vector<std::vector<double>> boundary_params;
boundary.assign(boundary_src.size(), Points());
boundary_params.assign(boundary_src.size(), std::vector<float>());
boundary_params.assign(boundary_src.size(), std::vector<double>());
// Mapping the infill_ordered end point to a (contour, point) of boundary.
static constexpr auto boundary_idx_unconnected = std::numeric_limits<size_t>::max();
std::vector<ContourIntersectionPoint> map_infill_end_point_to_boundary(infill_ordered.size() * 2, ContourIntersectionPoint{ boundary_idx_unconnected, boundary_idx_unconnected });
@ -1125,11 +1125,11 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
{
EdgeGrid::Grid grid;
grid.set_bbox(bbox.inflated(SCALED_EPSILON));
grid.create(boundary_src, scale_(10.));
grid.create(boundary_src, coord_t(scale_(10.)));
intersection_points.reserve(infill_ordered.size() * 2);
for (const Polyline &pl : infill_ordered)
for (const Point *pt : { &pl.points.front(), &pl.points.back() }) {
EdgeGrid::Grid::ClosestPointResult cp = grid.closest_point(*pt, SCALED_EPSILON);
EdgeGrid::Grid::ClosestPointResult cp = grid.closest_point(*pt, coord_t(SCALED_EPSILON));
if (cp.valid()) {
// The infill end point shall lie on the contour.
assert(cp.distance <= 3.);
@ -1163,21 +1163,29 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
contour_intersection_points.reserve(n_intersection_points);
}
for (size_t idx_point = 0; idx_point < contour_src.points.size(); ++ idx_point) {
contour_dst.emplace_back(contour_src.points[idx_point]);
const Point &ipt = contour_src.points[idx_point];
if (contour_dst.empty() || contour_dst.back() != ipt)
contour_dst.emplace_back(ipt);
for (; it != it_end && it->first.contour_idx == idx_contour && it->first.start_point_idx == idx_point; ++ it) {
// Add these points to the destination contour.
const Polyline &infill_line = infill_ordered[it->second / 2];
const Point &pt = (it->second & 1) ? infill_line.points.back() : infill_line.points.front();
#ifndef NDEBUG
{
const Vec2d pt1 = contour_src[idx_point].cast<double>();
const Vec2d pt1 = ipt.cast<double>();
const Vec2d pt2 = (idx_point + 1 == contour_src.size() ? contour_src.points.front() : contour_src.points[idx_point + 1]).cast<double>();
const Vec2d ptx = lerp(pt1, pt2, it->first.t);
assert(std::abs(pt.x() - pt.x()) < SCALED_EPSILON);
assert(std::abs(pt.y() - pt.y()) < SCALED_EPSILON);
}
#endif // NDEBUG
map_infill_end_point_to_boundary[it->second] = ContourIntersectionPoint{ idx_contour, contour_dst.size() };
size_t idx_tjoint_pt = 0;
if (idx_point + 1 < contour_src.size() || pt != contour_dst.front()) {
if (pt != contour_dst.back())
contour_dst.emplace_back(pt);
idx_tjoint_pt = contour_dst.size() - 1;
}
map_infill_end_point_to_boundary[it->second] = ContourIntersectionPoint{ idx_contour, idx_tjoint_pt };
ContourIntersectionPoint *pthis = &map_infill_end_point_to_boundary[it->second];
if (pprev) {
pprev->next_on_contour = pthis;
@ -1186,8 +1194,6 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
pfirst = pthis;
contour_intersection_points.emplace_back(pthis);
pprev = pthis;
//add new point here
contour_dst.emplace_back(pt);
}
if (pfirst) {
pprev->next_on_contour = pfirst;
@ -1195,16 +1201,19 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
}
}
// Parametrize the new boundary with the intersection points inserted.
std::vector<float> &contour_params = boundary_params[idx_contour];
contour_params.assign(contour_dst.size() + 1, 0.f);
for (size_t i = 1; i < contour_dst.size(); ++ i)
contour_params[i] = contour_params[i - 1] + (contour_dst[i].cast<float>() - contour_dst[i - 1].cast<float>()).norm();
contour_params.back() = contour_params[contour_params.size() - 2] + (contour_dst.back().cast<float>() - contour_dst.front().cast<float>()).norm();
std::vector<double> &contour_params = boundary_params[idx_contour];
contour_params.assign(contour_dst.size() + 1, 0.);
for (size_t i = 1; i < contour_dst.size(); ++i) {
contour_params[i] = contour_params[i - 1] + (contour_dst[i].cast<double>() - contour_dst[i - 1].cast<double>()).norm();
assert(contour_params[i] > contour_params[i - 1]);
}
contour_params.back() = contour_params[contour_params.size() - 2] + (contour_dst.back().cast<double>() - contour_dst.front().cast<double>()).norm();
assert(contour_params.back() > contour_params[contour_params.size() - 2]);
// Map parameters from contour_params to boundary_intersection_points.
for (ContourIntersectionPoint *ip : contour_intersection_points)
ip->param = contour_params[ip->point_idx];
// and measure distance to the previous and next intersection point.
const float contour_length = contour_params.back();
const double contour_length = contour_params.back();
for (ContourIntersectionPoint *ip : contour_intersection_points)
if (ip->next_on_contour == ip) {
assert(ip->prev_on_contour == ip);
@ -1238,9 +1247,9 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
}
// Connection from end of one infill line to the start of another infill line.
//const float length_max = scale_(spacing);
// const auto length_max = float(scale_((2. / params.density) * spacing));
const auto length_max = float(scale_((1000. / params.density) * spacing));
//const double length_max = scale_(spacing);
// const auto length_max = double(scale_((2. / params.density) * spacing));
const auto length_max = double(scale_((1000. / params.density) * spacing));
std::vector<size_t> merged_with(infill_ordered.size());
std::iota(merged_with.begin(), merged_with.end(), 0);
struct ConnectionCost {
@ -1258,7 +1267,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
const ContourIntersectionPoint *cp2 = &map_infill_end_point_to_boundary[idx_chain * 2];
if (cp1->contour_idx != boundary_idx_unconnected && cp1->contour_idx == cp2->contour_idx) {
// End points on the same contour. Try to connect them.
std::pair<float, float> len = path_lengths_along_contour(cp1, cp2, boundary_params[cp1->contour_idx].back());
std::pair<double, double> len = path_lengths_along_contour(cp1, cp2, boundary_params[cp1->contour_idx].back());
if (len.first < length_max)
connections_sorted.emplace_back(idx_chain - 1, len.first, false);
if (len.second < length_max)
@ -1281,7 +1290,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
return std::numeric_limits<size_t>::max();
};
const float line_half_width = 0.5f * scale_(spacing);
const double line_half_width = 0.5 * scale_(spacing);
#if 0
for (ConnectionCost &connection_cost : connections_sorted) {
@ -1291,7 +1300,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
assert(cp1->contour_idx == cp2->contour_idx && cp1->contour_idx != boundary_idx_unconnected);
if (cp1->consumed || cp2->consumed)
continue;
const float length = connection_cost.cost;
const double length = connection_cost.cost;
bool could_connect;
{
// cp1, cp2 sorted CCW.
@ -1334,7 +1343,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
struct Arc {
ContourIntersectionPoint *intersection;
float arc_length;
double arc_length;
};
std::vector<Arc> arches;
arches.reserve(map_infill_end_point_to_boundary.size());
@ -1352,7 +1361,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
size_t polyline_idx1 = get_and_update_merged_with(((cp1 - map_infill_end_point_to_boundary.data()) / 2));
size_t polyline_idx2 = get_and_update_merged_with(((cp2 - map_infill_end_point_to_boundary.data()) / 2));
const Points &contour = boundary[cp1->contour_idx];
const std::vector<float> &contour_params = boundary_params[cp1->contour_idx];
const std::vector<double> &contour_params = boundary_params[cp1->contour_idx];
if (polyline_idx1 != polyline_idx2) {
Polyline &polyline1 = infill_ordered[polyline_idx1];
Polyline &polyline2 = infill_ordered[polyline_idx2];
@ -1386,22 +1395,22 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
for (ContourIntersectionPoint &contour_point : map_infill_end_point_to_boundary)
if (! contour_point.consumed && contour_point.contour_idx != boundary_idx_unconnected) {
const Points &contour = boundary[contour_point.contour_idx];
const std::vector<float> &contour_params = boundary_params[contour_point.contour_idx];
const std::vector<double> &contour_params = boundary_params[contour_point.contour_idx];
const size_t contour_pt_idx = contour_point.point_idx;
float lprev = contour_point.could_connect_prev() ?
double lprev = contour_point.could_connect_prev() ?
path_length_along_contour_ccw(contour_point.prev_on_contour, &contour_point, contour_params.back()) :
std::numeric_limits<float>::max();
float lnext = contour_point.could_connect_next() ?
std::numeric_limits<double>::max();
double lnext = contour_point.could_connect_next() ?
path_length_along_contour_ccw(&contour_point, contour_point.next_on_contour, contour_params.back()) :
std::numeric_limits<float>::max();
std::numeric_limits<double>::max();
size_t polyline_idx = get_and_update_merged_with(((&contour_point - map_infill_end_point_to_boundary.data()) / 2));
Polyline &polyline = infill_ordered[polyline_idx];
assert(! polyline.empty());
assert(contour[contour_point.point_idx] == polyline.points.front() || contour[contour_point.point_idx] == polyline.points.back());
bool connected = false;
for (float l : { std::min(lprev, lnext), std::max(lprev, lnext) }) {
if (l == std::numeric_limits<float>::max() || l > anchor_length_max)
for (double l : { std::min(lprev, lnext), std::max(lprev, lnext) }) {
if (l == std::numeric_limits<double>::max() || l > anchor_length_max)
break;
// Take the complete contour.
bool reversed = l == lprev;
@ -1439,7 +1448,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
// 2) Hook length
// ...
// Let's take the longer now, as this improves the chance of another hook to be placed on the other side of this contour point.
float l = std::max(contour_point.contour_not_taken_length_prev, contour_point.contour_not_taken_length_next);
double l = std::max(contour_point.contour_not_taken_length_prev, contour_point.contour_not_taken_length_next);
if (l > SCALED_EPSILON) {
if (contour_point.contour_not_taken_length_prev > contour_point.contour_not_taken_length_next)
take_limited(polyline, contour, contour_params, &contour_point, contour_point.prev_on_contour, true, anchor_length, line_half_width);

View file

@ -24,22 +24,22 @@ void FillConcentric::_fill_surface_single(
this->spacing = unscale<double>(distance);
}
Polygons loops = (Polygons)expolygon;
Polygons loops = to_polygons(std::move(expolygon));
Polygons last = loops;
while (! last.empty()) {
last = offset2(last, -(distance + min_spacing/2), +min_spacing/2);
loops.insert(loops.end(), last.begin(), last.end());
append(loops, last);
}
// generate paths from the outermost to the innermost, to avoid
// adhesion problems of the first central tiny loops
loops = union_pt_chained(loops, false);
loops = union_pt_chained_outside_in(loops, false);
// split paths using a nearest neighbor search
size_t iPathFirst = polylines_out.size();
Point last_pos(0, 0);
for (const Polygon &loop : loops) {
polylines_out.push_back(loop.split_at_index(last_pos.nearest_point_index(loop.points)));
polylines_out.emplace_back(loop.split_at_index(last_pos.nearest_point_index(loop.points)));
last_pos = polylines_out.back().last_point();
}

View file

@ -8,7 +8,7 @@ namespace Slic3r {
class FillConcentric : public Fill
{
public:
~FillConcentric() override {}
~FillConcentric() override = default;
protected:
Fill* clone() const override { return new FillConcentric(*this); };

View file

@ -37,7 +37,7 @@ protected:
bool _can_connect(coord_t dist_X, coord_t dist_Y)
{
coord_t TOLERANCE = 10 * SCALED_EPSILON;
const auto TOLERANCE = coord_t(10 * SCALED_EPSILON);
return (dist_X >= (this->_line_spacing - this->_line_oscillation) - TOLERANCE)
&& (dist_X <= (this->_line_spacing + this->_line_oscillation) + TOLERANCE)
&& (dist_Y <= this->_diagonal_distance);

View file

@ -56,58 +56,59 @@ const std::string SLA_SUPPORT_POINTS_FILE = "Metadata/Slic3r_PE_sla_support_poin
const std::string SLA_DRAIN_HOLES_FILE = "Metadata/Slic3r_PE_sla_drain_holes.txt";
const std::string CUSTOM_GCODE_PER_PRINT_Z_FILE = "Metadata/Prusa_Slicer_custom_gcode_per_print_z.xml";
const char* MODEL_TAG = "model";
const char* RESOURCES_TAG = "resources";
const char* OBJECT_TAG = "object";
const char* MESH_TAG = "mesh";
const char* VERTICES_TAG = "vertices";
const char* VERTEX_TAG = "vertex";
const char* TRIANGLES_TAG = "triangles";
const char* TRIANGLE_TAG = "triangle";
const char* COMPONENTS_TAG = "components";
const char* COMPONENT_TAG = "component";
const char* BUILD_TAG = "build";
const char* ITEM_TAG = "item";
const char* METADATA_TAG = "metadata";
static constexpr const char* MODEL_TAG = "model";
static constexpr const char* RESOURCES_TAG = "resources";
static constexpr const char* OBJECT_TAG = "object";
static constexpr const char* MESH_TAG = "mesh";
static constexpr const char* VERTICES_TAG = "vertices";
static constexpr const char* VERTEX_TAG = "vertex";
static constexpr const char* TRIANGLES_TAG = "triangles";
static constexpr const char* TRIANGLE_TAG = "triangle";
static constexpr const char* COMPONENTS_TAG = "components";
static constexpr const char* COMPONENT_TAG = "component";
static constexpr const char* BUILD_TAG = "build";
static constexpr const char* ITEM_TAG = "item";
static constexpr const char* METADATA_TAG = "metadata";
const char* CONFIG_TAG = "config";
const char* VOLUME_TAG = "volume";
static constexpr const char* CONFIG_TAG = "config";
static constexpr const char* VOLUME_TAG = "volume";
const char* UNIT_ATTR = "unit";
const char* NAME_ATTR = "name";
const char* TYPE_ATTR = "type";
const char* ID_ATTR = "id";
const char* X_ATTR = "x";
const char* Y_ATTR = "y";
const char* Z_ATTR = "z";
const char* V1_ATTR = "v1";
const char* V2_ATTR = "v2";
const char* V3_ATTR = "v3";
const char* OBJECTID_ATTR = "objectid";
const char* TRANSFORM_ATTR = "transform";
const char* PRINTABLE_ATTR = "printable";
const char* INSTANCESCOUNT_ATTR = "instances_count";
const char* CUSTOM_SUPPORTS_ATTR = "slic3rpe:custom_supports";
const char* CUSTOM_SEAM_ATTR = "slic3rpe:custom_seam";
static constexpr const char* UNIT_ATTR = "unit";
static constexpr const char* NAME_ATTR = "name";
static constexpr const char* TYPE_ATTR = "type";
static constexpr const char* ID_ATTR = "id";
static constexpr const char* X_ATTR = "x";
static constexpr const char* Y_ATTR = "y";
static constexpr const char* Z_ATTR = "z";
static constexpr const char* V1_ATTR = "v1";
static constexpr const char* V2_ATTR = "v2";
static constexpr const char* V3_ATTR = "v3";
static constexpr const char* OBJECTID_ATTR = "objectid";
static constexpr const char* TRANSFORM_ATTR = "transform";
static constexpr const char* PRINTABLE_ATTR = "printable";
static constexpr const char* INSTANCESCOUNT_ATTR = "instances_count";
static constexpr const char* CUSTOM_SUPPORTS_ATTR = "slic3rpe:custom_supports";
static constexpr const char* CUSTOM_SEAM_ATTR = "slic3rpe:custom_seam";
const char* KEY_ATTR = "key";
const char* VALUE_ATTR = "value";
const char* FIRST_TRIANGLE_ID_ATTR = "firstid";
const char* LAST_TRIANGLE_ID_ATTR = "lastid";
static constexpr const char* KEY_ATTR = "key";
static constexpr const char* VALUE_ATTR = "value";
static constexpr const char* FIRST_TRIANGLE_ID_ATTR = "firstid";
static constexpr const char* LAST_TRIANGLE_ID_ATTR = "lastid";
const char* OBJECT_TYPE = "object";
const char* VOLUME_TYPE = "volume";
static constexpr const char* OBJECT_TYPE = "object";
static constexpr const char* VOLUME_TYPE = "volume";
const char* NAME_KEY = "name";
const char* MODIFIER_KEY = "modifier";
const char* VOLUME_TYPE_KEY = "volume_type";
const char* MATRIX_KEY = "matrix";
const char* SOURCE_FILE_KEY = "source_file";
const char* SOURCE_OBJECT_ID_KEY = "source_object_id";
const char* SOURCE_VOLUME_ID_KEY = "source_volume_id";
const char* SOURCE_OFFSET_X_KEY = "source_offset_x";
const char* SOURCE_OFFSET_Y_KEY = "source_offset_y";
const char* SOURCE_OFFSET_Z_KEY = "source_offset_z";
static constexpr const char* NAME_KEY = "name";
static constexpr const char* MODIFIER_KEY = "modifier";
static constexpr const char* VOLUME_TYPE_KEY = "volume_type";
static constexpr const char* MATRIX_KEY = "matrix";
static constexpr const char* SOURCE_FILE_KEY = "source_file";
static constexpr const char* SOURCE_OBJECT_ID_KEY = "source_object_id";
static constexpr const char* SOURCE_VOLUME_ID_KEY = "source_volume_id";
static constexpr const char* SOURCE_OFFSET_X_KEY = "source_offset_x";
static constexpr const char* SOURCE_OFFSET_Y_KEY = "source_offset_y";
static constexpr const char* SOURCE_OFFSET_Z_KEY = "source_offset_z";
static constexpr const char* SOURCE_IN_INCHES = "source_in_inches";
const unsigned int VALID_OBJECT_TYPES_COUNT = 1;
const char* VALID_OBJECT_TYPES[] =
@ -1926,6 +1927,8 @@ namespace Slic3r {
volume->source.mesh_offset(1) = ::atof(metadata.value.c_str());
else if (metadata.key == SOURCE_OFFSET_Z_KEY)
volume->source.mesh_offset(2) = ::atof(metadata.value.c_str());
else if (metadata.key == SOURCE_IN_INCHES)
volume->source.is_converted_from_inches = metadata.value == "1";
else
volume->config.set_deserialize(metadata.key, metadata.value);
}
@ -2248,7 +2251,7 @@ namespace Slic3r {
stream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
stream << "<" << MODEL_TAG << " unit=\"millimeter\" xml:lang=\"en-US\" xmlns=\"http://schemas.microsoft.com/3dmanufacturing/core/2015/02\" xmlns:slic3rpe=\"http://schemas.slic3r.org/3mf/2017/06\">\n";
stream << " <" << METADATA_TAG << " name=\"" << SLIC3RPE_3MF_VERSION << "\">" << VERSION_3MF << "</" << METADATA_TAG << ">\n";
std::string name = boost::filesystem::path(filename).stem().string();
std::string name = xml_escape(boost::filesystem::path(filename).stem().string());
stream << " <" << METADATA_TAG << " name=\"Title\">" << name << "</" << METADATA_TAG << ">\n";
stream << " <" << METADATA_TAG << " name=\"Designer\">" << "</" << METADATA_TAG << ">\n";
stream << " <" << METADATA_TAG << " name=\"Description\">" << name << "</" << METADATA_TAG << ">\n";
@ -2749,15 +2752,20 @@ namespace Slic3r {
stream << "\"/>\n";
// stores volume's source data
if (!volume->source.input_file.empty())
{
std::string input_file = xml_escape(m_fullpath_sources ? volume->source.input_file : boost::filesystem::path(volume->source.input_file).filename().string());
stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << VOLUME_TYPE << "\" " << KEY_ATTR << "=\"" << SOURCE_FILE_KEY << "\" " << VALUE_ATTR << "=\"" << input_file << "\"/>\n";
stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << VOLUME_TYPE << "\" " << KEY_ATTR << "=\"" << SOURCE_OBJECT_ID_KEY << "\" " << VALUE_ATTR << "=\"" << volume->source.object_idx << "\"/>\n";
stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << VOLUME_TYPE << "\" " << KEY_ATTR << "=\"" << SOURCE_VOLUME_ID_KEY << "\" " << VALUE_ATTR << "=\"" << volume->source.volume_idx << "\"/>\n";
stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << VOLUME_TYPE << "\" " << KEY_ATTR << "=\"" << SOURCE_OFFSET_X_KEY << "\" " << VALUE_ATTR << "=\"" << volume->source.mesh_offset(0) << "\"/>\n";
stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << VOLUME_TYPE << "\" " << KEY_ATTR << "=\"" << SOURCE_OFFSET_Y_KEY << "\" " << VALUE_ATTR << "=\"" << volume->source.mesh_offset(1) << "\"/>\n";
stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << VOLUME_TYPE << "\" " << KEY_ATTR << "=\"" << SOURCE_OFFSET_Z_KEY << "\" " << VALUE_ATTR << "=\"" << volume->source.mesh_offset(2) << "\"/>\n";
std::string prefix = std::string(" <") + METADATA_TAG + " " + TYPE_ATTR + "=\"" + VOLUME_TYPE + "\" " + KEY_ATTR + "=\"";
if (! volume->source.input_file.empty()) {
stream << prefix << SOURCE_FILE_KEY << "\" " << VALUE_ATTR << "=\"" << input_file << "\"/>\n";
stream << prefix << SOURCE_OBJECT_ID_KEY << "\" " << VALUE_ATTR << "=\"" << volume->source.object_idx << "\"/>\n";
stream << prefix << SOURCE_VOLUME_ID_KEY << "\" " << VALUE_ATTR << "=\"" << volume->source.volume_idx << "\"/>\n";
stream << prefix << SOURCE_OFFSET_X_KEY << "\" " << VALUE_ATTR << "=\"" << volume->source.mesh_offset(0) << "\"/>\n";
stream << prefix << SOURCE_OFFSET_Y_KEY << "\" " << VALUE_ATTR << "=\"" << volume->source.mesh_offset(1) << "\"/>\n";
stream << prefix << SOURCE_OFFSET_Z_KEY << "\" " << VALUE_ATTR << "=\"" << volume->source.mesh_offset(2) << "\"/>\n";
stream << prefix << SOURCE_OFFSET_Z_KEY << "\" " << VALUE_ATTR << "=\"" << volume->source.mesh_offset(2) << "\"/>\n";
}
if (volume->source.is_converted_from_inches)
stream << prefix << SOURCE_IN_INCHES << "\" " << VALUE_ATTR << "=\"1\"/>\n";
}
// stores volume's config data

View file

@ -778,6 +778,9 @@ void AMFParserContext::endElement(const char * /* name */)
else if (strcmp(opt_key, "source_offset_z") == 0) {
m_volume->source.mesh_offset(2) = ::atof(m_value[1].c_str());
}
else if (strcmp(opt_key, "source_in_inches") == 0) {
m_volume->source.is_converted_from_inches = m_value[1] == "1";
}
}
} else if (m_path.size() == 3) {
if (m_path[1] == NODE_TYPE_MATERIAL) {
@ -1017,6 +1020,12 @@ bool load_amf_archive(const char* path, DynamicPrintConfig* config, Model* model
#endif // forward compatibility
close_zip_reader(&archive);
for (ModelObject *o : model->objects)
for (ModelVolume *v : o->volumes)
if (v->source.input_file.empty() && (v->type() == ModelVolumeType::MODEL_PART))
v->source.input_file = path;
return true;
}
@ -1205,6 +1214,8 @@ bool store_amf(const char* path, Model* model, const DynamicPrintConfig* config,
stream << " <metadata type=\"slic3r.source_offset_y\">" << volume->source.mesh_offset(1) << "</metadata>\n";
stream << " <metadata type=\"slic3r.source_offset_z\">" << volume->source.mesh_offset(2) << "</metadata>\n";
}
if (volume->source.is_converted_from_inches)
stream << " <metadata type=\"slic3r.source_in_inches\">1</metadata>\n";
stream << std::setprecision(std::numeric_limits<float>::max_digits10);
const indexed_triangle_set &its = volume->mesh().its;
for (size_t i = 0; i < its.indices.size(); ++i) {

View file

@ -7,6 +7,8 @@
#include <string>
#include <boost/log/trivial.hpp>
#ifdef _WIN32
#define DIR_SEPARATOR '\\'
#else
@ -22,7 +24,7 @@ bool load_obj(const char *path, TriangleMesh *meshptr)
// Parse the OBJ file.
ObjParser::ObjData data;
if (! ObjParser::objparse(path, data)) {
// die "Failed to parse $file\n" if !-e $path;
BOOST_LOG_TRIVIAL(error) << "load_obj: failed to parse " << path;
return false;
}
@ -70,7 +72,8 @@ bool load_obj(const char *path, TriangleMesh *meshptr)
++ num_normals;
}
}
if (data.vertices[i].coordIdx != -1) {
// Result of obj_parseline() call is not checked, thus not all vertices are necessarily finalized with coord_Idx == -1.
if (i < data.vertices.size() && data.vertices[i].coordIdx != -1) {
// This is a quad. Produce the other triangle.
stl_facet &facet2 = stl.facet_start[i_face++];
facet2.vertex[0] = facet.vertex[0];
@ -102,7 +105,7 @@ bool load_obj(const char *path, TriangleMesh *meshptr)
stl_get_size(&stl);
mesh.repair();
if (mesh.facets_count() == 0) {
// die "This OBJ file couldn't be read because it's empty.\n"
BOOST_LOG_TRIVIAL(error) << "load_obj: This OBJ file couldn't be read because it's empty. " << path;
return false;
}

View file

@ -1,6 +1,7 @@
#include <stdlib.h>
#include <string.h>
#include <boost/log/trivial.hpp>
#include <boost/nowide/cstdio.hpp>
#include "objparser.hpp"
@ -312,7 +313,7 @@ static bool obj_parseline(const char *line, ObjData &data)
break;
}
default:
printf("ObjParser: Unknown command: %c\r\n", c1);
BOOST_LOG_TRIVIAL(error) << "ObjParser: Unknown command: " << c1;
break;
}
@ -338,15 +339,22 @@ bool objparse(const char *path, ObjData &data)
char *c = buf + lastLine;
while (*c == ' ' || *c == '\t')
++ c;
//FIXME check the return value and exit on error?
// Will it break parsing of some obj files?
obj_parseline(c, data);
lastLine = i + 1;
}
lenPrev = len - lastLine;
if (lenPrev > 65536) {
BOOST_LOG_TRIVIAL(error) << "ObjParser: Excessive line length";
::fclose(pFile);
return false;
}
memmove(buf, buf + lastLine, lenPrev);
}
}
catch (std::bad_alloc&) {
printf("Out of memory\r\n");
BOOST_LOG_TRIVIAL(error) << "ObjParser: Out of memory";
}
::fclose(pFile);
@ -378,7 +386,8 @@ bool objparse(std::istream &stream, ObjData &data)
}
}
catch (std::bad_alloc&) {
printf("Out of memory\r\n");
BOOST_LOG_TRIVIAL(error) << "ObjParser: Out of memory";
return false;
}
return true;

View file

@ -413,14 +413,11 @@ namespace Slic3r {
std::string WipeTowerIntegration::prime(GCode& gcodegen)
{
assert(m_layer_idx == 0);
std::string gcode;
for (const WipeTower::ToolChangeResult& tcr : m_priming) {
if (! tcr.extrusions.empty())
gcode += append_tcr(gcodegen, tcr, tcr.new_tool);
}
return gcode;
}
@ -718,7 +715,20 @@ namespace DoExport {
region->config().get_abs_value("solid_infill_speed") == 0 ||
region->config().get_abs_value("top_solid_infill_speed") == 0 ||
region->config().get_abs_value("bridge_speed") == 0)
mm3_per_mm.push_back(layerm->fills.min_mm3_per_mm());
{
// Minimal volumetric flow should not be calculated over ironing extrusions.
// Use following lambda instead of the built-it method.
// https://github.com/prusa3d/PrusaSlicer/issues/5082
auto min_mm3_per_mm_no_ironing = [](const ExtrusionEntityCollection& eec) -> double {
double min = std::numeric_limits<double>::max();
for (const ExtrusionEntity* ee : eec.entities)
if (ee->role() != erIroning)
min = std::min(min, ee->min_mm3_per_mm());
return min;
};
mm3_per_mm.push_back(min_mm3_per_mm_no_ironing(layerm->fills));
}
}
}
if (object->config().get_abs_value("support_material_speed") == 0 ||
@ -1243,19 +1253,31 @@ void GCode::_do_export(Print& print, FILE* file, ThumbnailsGeneratorCallback thu
bbox_print.merge(get_wipe_tower_extrusions_extents(print, twolayers_printz));
BoundingBoxf bbox_prime(get_wipe_tower_priming_extrusions_extents(print));
bbox_prime.offset(0.5f);
// Beep for 500ms, tone 800Hz. Yet better, play some Morse.
bool overlap = bbox_prime.overlap(bbox_print);
if (print.config().gcode_flavor == gcfMarlin) {
_write(file, this->retract());
_write(file, "M300 S800 P500\n");
if (bbox_prime.overlap(bbox_print)) {
// Wait for the user to remove the priming extrusions, otherwise they would
// get covered by the print.
_write(file, "M300 S800 P500\n"); // Beep for 500ms, tone 800Hz.
if (overlap) {
// Wait for the user to remove the priming extrusions.
_write(file, "M1 Remove priming towers and click button.\n");
}
else {
} else {
// Just wait for a bit to let the user check, that the priming succeeded.
//TODO Add a message explaining what the printer is waiting for. This needs a firmware fix.
_write(file, "M1 S10\n");
}
} else {
// This is not Marlin, M1 command is probably not supported.
// (See https://github.com/prusa3d/PrusaSlicer/issues/5441.)
if (overlap) {
print.active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL,
_(L("Your print is very close to the priming regions. "
"Make sure there is no collision.")));
} else {
// Just continue printing, no action necessary.
}
}
}
print.throw_if_canceled();
}
@ -1700,7 +1722,9 @@ namespace Skirt {
//FIXME infinite or high skirt does not make sense for sequential print!
(skirt_done.size() < (size_t)print.config().skirt_height.value || print.has_infinite_skirt()) &&
// This print_z has not been extruded yet (sequential print)
skirt_done.back() < layer_tools.print_z - EPSILON &&
// FIXME: The skirt_done should not be empty at this point. The check is a workaround
// of https://github.com/prusa3d/PrusaSlicer/issues/5652, but it deserves a real fix.
(! skirt_done.empty() && skirt_done.back() < layer_tools.print_z - EPSILON) &&
// and this layer is an object layer, or it is a raft layer.
(layer_tools.has_object || support_layer->id() < (size_t)support_layer->object()->config().raft_layers.value)) {
#if 0
@ -2087,6 +2111,8 @@ void GCode::process_layer(
instance_to_print.object_by_extruder.support->chained_path_from(m_last_pos, instance_to_print.object_by_extruder.support_extrusion_role));
m_layer = layers[instance_to_print.layer_id].layer();
}
//FIXME order islands?
// Sequential tool path ordering of multiple parts within the same object, aka. perimeter tracking (#5511)
for (ObjectByExtruder::Island &island : instance_to_print.object_by_extruder.islands) {
const auto& by_region_specific = is_anything_overridden ? island.by_region_per_copy(by_region_per_copy_cache, static_cast<unsigned int>(instance_to_print.instance_id), extruder_id, print_wipe_extrusions != 0) : island.by_region;
//FIXME the following code prints regions in the order they are defined, the path is not optimized in any way.

View file

@ -269,7 +269,7 @@ static std::vector<TravelPoint> simplify_travel(const AvoidCrossingPerimeters::B
}
// Called by avoid_perimeters() and by simplify_travel_heuristics().
static size_t avoid_perimeters_inner(const GCode &gcodegen, const AvoidCrossingPerimeters::Boundary &boundary,
static size_t avoid_perimeters_inner(const AvoidCrossingPerimeters::Boundary &boundary,
const Point &start,
const Point &end,
std::vector<TravelPoint> &result_out)
@ -372,14 +372,14 @@ static size_t avoid_perimeters_inner(const GCode &gcodegen, const AvoidCrossingP
}
// Called by AvoidCrossingPerimeters::travel_to()
static size_t avoid_perimeters(const GCode &gcodegen, const AvoidCrossingPerimeters::Boundary &boundary,
static size_t avoid_perimeters(const AvoidCrossingPerimeters::Boundary &boundary,
const Point &start,
const Point &end,
Polyline &result_out)
{
// Travel line is completely or partially inside the bounding box.
std::vector<TravelPoint> path;
size_t num_intersections = avoid_perimeters_inner(gcodegen, boundary, start, end, path);
size_t num_intersections = avoid_perimeters_inner(boundary, start, end, path);
result_out = to_polyline(path);
#ifdef AVOID_CROSSING_PERIMETERS_DEBUG_OUTPUT
@ -726,6 +726,7 @@ static std::vector<float> contour_distance(const EdgeGrid::Grid &grid,
}
// Polygon offset which ensures that if a polygon breaks up into several separate parts, the original polygon will be used in these places.
// ExPolygons are handled one by one so returned ExPolygons could intersect.
static ExPolygons inner_offset(const ExPolygons &ex_polygons, double offset, double min_contour_width = scale_(0.001))
{
double search_radius = 2. * (offset + min_contour_width);
@ -781,12 +782,25 @@ static ExPolygons inner_offset(const ExPolygons &ex_polygons, double offset, dou
return ex_poly_result;
}
//#define INCLUDE_SUPPORTS_IN_BOUNDARY
// called by AvoidCrossingPerimeters::travel_to()
static ExPolygons get_boundary(const Layer &layer)
{
const float perimeter_spacing = get_perimeter_spacing(layer);
const float perimeter_offset = perimeter_spacing / 2.f;
auto const *support_layer = dynamic_cast<const SupportLayer *>(&layer);
ExPolygons boundary = union_ex(inner_offset(layer.lslices, perimeter_offset));
if(support_layer) {
#ifdef INCLUDE_SUPPORTS_IN_BOUNDARY
append(boundary, inner_offset(support_layer->support_islands.expolygons, perimeter_offset));
#endif
auto *layer_below = layer.object()->get_first_layer_bellow_printz(layer.print_z, EPSILON);
if (layer_below)
append(boundary, inner_offset(layer_below->lslices, perimeter_offset));
// After calling inner_offset it is necessary to call union_ex because of the possibility of intersection ExPolygons
boundary = union_ex(boundary);
}
// Collect all top layers that will not be crossed.
size_t polygons_count = 0;
for (const LayerRegion *layer_region : layer.regions())
@ -810,20 +824,41 @@ static ExPolygons get_boundary(const Layer &layer)
// called by AvoidCrossingPerimeters::travel_to()
static Polygons get_boundary_external(const Layer &layer)
{
const float perimeter_spacing = get_perimeter_spacing(layer);
const float perimeter_spacing = get_perimeter_spacing_external(layer);
const float perimeter_offset = perimeter_spacing / 2.f;
auto const *support_layer = dynamic_cast<const SupportLayer *>(&layer);
Polygons boundary;
#ifdef INCLUDE_SUPPORTS_IN_BOUNDARY
ExPolygons supports_boundary;
#endif
// Collect all holes for all printed objects and their instances, which will be printed at the same time as passed "layer".
for (const PrintObject *object : layer.object()->print()->objects()) {
Polygons polygons_per_obj;
#ifdef INCLUDE_SUPPORTS_IN_BOUNDARY
ExPolygons supports_per_obj;
#endif
if (const Layer *l = object->get_layer_at_printz(layer.print_z, EPSILON); l)
for (const ExPolygon &island : l->lslices) append(polygons_per_obj, island.holes);
if (support_layer) {
auto *layer_below = object->get_first_layer_bellow_printz(layer.print_z, EPSILON);
if (layer_below)
for (const ExPolygon &island : layer_below->lslices) append(polygons_per_obj, island.holes);
#ifdef INCLUDE_SUPPORTS_IN_BOUNDARY
append(supports_per_obj, support_layer->support_islands.expolygons);
#endif
}
for (const PrintInstance &instance : object->instances()) {
size_t boundary_idx = boundary.size();
append(boundary, polygons_per_obj);
for (; boundary_idx < boundary.size(); ++boundary_idx)
boundary[boundary_idx].translate(instance.shift);
#ifdef INCLUDE_SUPPORTS_IN_BOUNDARY
size_t support_idx = supports_boundary.size();
append(supports_boundary, supports_per_obj);
for (; support_idx < supports_boundary.size(); ++support_idx)
supports_boundary[support_idx].translate(instance.shift);
#endif
}
}
@ -832,7 +867,9 @@ static Polygons get_boundary_external(const Layer &layer)
// Reverse all polygons for making normals point from the polygon out.
for (Polygon &poly : boundary)
poly.reverse();
#ifdef INCLUDE_SUPPORTS_IN_BOUNDARY
append(boundary, to_polygons(inner_offset(supports_boundary, perimeter_offset)));
#endif
return boundary;
}
@ -873,14 +910,17 @@ Polyline AvoidCrossingPerimeters::travel_to(const GCode &gcodegen, const Point &
Vec2d startf = start.cast<double>();
Vec2d endf = end .cast<double>();
if (!use_external && !gcodegen.layer()->lslices.empty() && !any_expolygon_contains(gcodegen.layer()->lslices, gcodegen.layer()->lslices_bboxes, m_grid_lslice, travel)) {
const ExPolygons &lslices = gcodegen.layer()->lslices;
const std::vector<BoundingBox> &lslices_bboxes = gcodegen.layer()->lslices_bboxes;
bool is_support_layer = dynamic_cast<const SupportLayer *>(gcodegen.layer()) != nullptr;
if (!use_external && (is_support_layer || (!lslices.empty() && !any_expolygon_contains(lslices, lslices_bboxes, m_grid_lslice, travel)))) {
// Initialize m_internal only when it is necessary.
if (m_internal.boundaries.empty())
init_boundary(&m_internal, to_polygons(get_boundary(*gcodegen.layer())));
// Trim the travel line by the bounding box.
if (Geometry::liang_barsky_line_clipping(startf, endf, m_internal.bbox)) {
travel_intersection_count = avoid_perimeters(gcodegen, m_internal, startf.cast<coord_t>(), endf.cast<coord_t>(), result_pl);
if (!m_internal.boundaries.empty() && Geometry::liang_barsky_line_clipping(startf, endf, m_internal.bbox)) {
travel_intersection_count = avoid_perimeters(m_internal, startf.cast<coord_t>(), endf.cast<coord_t>(), result_pl);
result_pl.points.front() = start;
result_pl.points.back() = end;
}
@ -891,7 +931,7 @@ Polyline AvoidCrossingPerimeters::travel_to(const GCode &gcodegen, const Point &
// Trim the travel line by the bounding box.
if (!m_external.boundaries.empty() && Geometry::liang_barsky_line_clipping(startf, endf, m_external.bbox)) {
travel_intersection_count = avoid_perimeters(gcodegen, m_external, startf.cast<coord_t>(), endf.cast<coord_t>(), result_pl);
travel_intersection_count = avoid_perimeters(m_external, startf.cast<coord_t>(), endf.cast<coord_t>(), result_pl);
result_pl.points.front() = start;
result_pl.points.back() = end;
}
@ -903,13 +943,25 @@ Polyline AvoidCrossingPerimeters::travel_to(const GCode &gcodegen, const Point &
travel_intersection_count = 0;
}
double max_detour_length scale_(gcodegen.config().avoid_crossing_perimeters_max_detour);
if (max_detour_length > 0 && (result_pl.length() - travel.length()) > max_detour_length)
const ConfigOptionFloatOrPercent &opt_max_detour = gcodegen.config().avoid_crossing_perimeters_max_detour;
bool max_detour_length_exceeded = false;
if (opt_max_detour.value > 0) {
double direct_length = travel.length();
double detour = result_pl.length() - direct_length;
double max_detour_length = opt_max_detour.percent ?
direct_length * 0.01 * opt_max_detour.value :
scale_(opt_max_detour.value);
if (detour > max_detour_length) {
result_pl = {start, end};
max_detour_length_exceeded = true;
}
}
if (use_external) {
result_pl.translate(-scaled_origin);
*could_be_wipe_disabled = false;
} else if (max_detour_length_exceeded) {
*could_be_wipe_disabled = false;
} else
*could_be_wipe_disabled = !need_wipe(gcodegen, m_grid_lslice, travel, result_pl, travel_intersection_count);

View file

@ -540,7 +540,7 @@ void GCodeProcessor::apply_config(const PrintConfig& config)
m_filament_diameters[i] = static_cast<float>(config.filament_diameter.values[i]);
}
if (config.machine_limits_usage.value != MachineLimitsUsage::Ignore)
if (m_flavor == gcfMarlin && config.machine_limits_usage.value != MachineLimitsUsage::Ignore)
m_time_processor.machine_limits = reinterpret_cast<const MachineEnvelopeConfig&>(config);
// Filament load / unload times are not specific to a firmware flavor. Let anybody use it if they find it useful.
@ -562,6 +562,10 @@ void GCodeProcessor::apply_config(const PrintConfig& config)
}
m_time_processor.export_remaining_time_enabled = config.remaining_times.value;
#if ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
m_use_volumetric_e = config.use_volumetric_e;
#endif // ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
}
void GCodeProcessor::apply_config(const DynamicPrintConfig& config)
@ -620,7 +624,6 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config)
}
}
// replace missing values with default
std::string default_color = "#FF8000";
for (size_t i = 0; i < m_result.extruder_colors.size(); ++i) {
@ -649,6 +652,7 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config)
}
}
if (m_flavor == gcfMarlin) {
const ConfigOptionFloats* machine_max_acceleration_x = config.option<ConfigOptionFloats>("machine_max_acceleration_x");
if (machine_max_acceleration_x != nullptr)
m_time_processor.machine_limits.machine_max_acceleration_x.values = machine_max_acceleration_x->values;
@ -712,12 +716,22 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config)
const ConfigOptionFloats* machine_min_travel_rate = config.option<ConfigOptionFloats>("machine_min_travel_rate");
if (machine_min_travel_rate != nullptr)
m_time_processor.machine_limits.machine_min_travel_rate.values = machine_min_travel_rate->values;
}
for (size_t i = 0; i < static_cast<size_t>(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) {
float max_acceleration = get_option_value(m_time_processor.machine_limits.machine_max_acceleration_extruding, i);
m_time_processor.machines[i].max_acceleration = max_acceleration;
m_time_processor.machines[i].acceleration = (max_acceleration > 0.0f) ? max_acceleration : DEFAULT_ACCELERATION;
}
if (m_time_processor.machine_limits.machine_max_acceleration_x.values.size() > 1)
enable_stealth_time_estimator(true);
#if ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
const ConfigOptionBool* use_volumetric_e = config.option<ConfigOptionBool>("use_volumetric_e");
if (use_volumetric_e != nullptr)
m_use_volumetric_e = use_volumetric_e->value;
#endif // ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
}
void GCodeProcessor::enable_stealth_time_estimator(bool enabled)
@ -772,6 +786,10 @@ void GCodeProcessor::reset()
m_result.reset();
m_result.id = ++s_result_id;
#if ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
m_use_volumetric_e = false;
#endif // ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
#if ENABLE_GCODE_VIEWER_DATA_CHECKING
m_mm3_per_mm_compare.reset();
m_height_compare.reset();
@ -1652,8 +1670,14 @@ void GCodeProcessor::process_G0(const GCodeReader::GCodeLine& line)
void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
{
auto absolute_position = [this](Axis axis, const GCodeReader::GCodeLine& lineG1)
{
#if ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
float filament_diameter = (static_cast<size_t>(m_extruder_id) < m_filament_diameters.size()) ? m_filament_diameters[m_extruder_id] : m_filament_diameters.back();
float filament_radius = 0.5f * filament_diameter;
float area_filament_cross_section = static_cast<float>(M_PI) * sqr(filament_radius);
auto absolute_position = [this, area_filament_cross_section](Axis axis, const GCodeReader::GCodeLine& lineG1) {
#else
auto absolute_position = [this](Axis axis, const GCodeReader::GCodeLine& lineG1) {
#endif // ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
bool is_relative = (m_global_positioning_type == EPositioningType::Relative);
if (axis == E)
is_relative |= (m_e_local_positioning_type == EPositioningType::Relative);
@ -1661,6 +1685,10 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
if (lineG1.has(Slic3r::Axis(axis))) {
float lengthsScaleFactor = (m_units == EUnits::Inches) ? INCHES_TO_MM : 1.0f;
float ret = lineG1.value(Slic3r::Axis(axis)) * lengthsScaleFactor;
#if ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
if (axis == E && m_use_volumetric_e)
ret /= area_filament_cross_section;
#endif // ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
return is_relative ? m_start_position[axis] + ret : m_origin[axis] + ret;
}
else
@ -1718,9 +1746,11 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
if (type == EMoveType::Extrude) {
float delta_xyz = std::sqrt(sqr(delta_pos[X]) + sqr(delta_pos[Y]) + sqr(delta_pos[Z]));
#if !ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
float filament_diameter = (static_cast<size_t>(m_extruder_id) < m_filament_diameters.size()) ? m_filament_diameters[m_extruder_id] : m_filament_diameters.back();
float filament_radius = 0.5f * filament_diameter;
float area_filament_cross_section = static_cast<float>(M_PI) * sqr(filament_radius);
#endif // !ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
float volume_extruded_filament = area_filament_cross_section * delta_pos[E];
float area_toolpath_cross_section = volume_extruded_filament / delta_xyz;
@ -1772,7 +1802,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
m_width = delta_pos[E] * static_cast<float>(M_PI * sqr(filament_radius)) / (delta_xyz * m_height) + static_cast<float>(1.0 - 0.25 * M_PI) * m_height;
// clamp width to avoid artifacts which may arise from wrong values of m_height
m_width = std::min(m_width, 1.0f);
m_width = std::min(m_width, std::max(1.0f, 4.0f * m_height));
#if ENABLE_GCODE_VIEWER_DATA_CHECKING
m_width_compare.update(m_width, m_extrusion_role);
@ -2113,13 +2143,12 @@ void GCodeProcessor::process_M135(const GCodeReader::GCodeLine& line)
void GCodeProcessor::process_M201(const GCodeReader::GCodeLine& line)
{
if (!m_time_processor.machine_envelope_processing_enabled)
return;
// see http://reprap.org/wiki/G-code#M201:_Set_max_printing_acceleration
float factor = ((m_flavor != gcfRepRapSprinter && m_flavor != gcfRepRapFirmware) && m_units == EUnits::Inches) ? INCHES_TO_MM : 1.0f;
for (size_t i = 0; i < static_cast<size_t>(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) {
if (static_cast<PrintEstimatedTimeStatistics::ETimeMode>(i) == PrintEstimatedTimeStatistics::ETimeMode::Normal ||
m_time_processor.machine_envelope_processing_enabled) {
if (line.has_x())
set_option_value(m_time_processor.machine_limits.machine_max_acceleration_x, i, line.x() * factor);
@ -2132,13 +2161,11 @@ void GCodeProcessor::process_M201(const GCodeReader::GCodeLine& line)
if (line.has_e())
set_option_value(m_time_processor.machine_limits.machine_max_acceleration_e, i, line.e() * factor);
}
}
}
void GCodeProcessor::process_M203(const GCodeReader::GCodeLine& line)
{
if (!m_time_processor.machine_envelope_processing_enabled)
return;
// see http://reprap.org/wiki/G-code#M203:_Set_maximum_feedrate
if (m_flavor == gcfRepetier)
return;
@ -2148,6 +2175,8 @@ void GCodeProcessor::process_M203(const GCodeReader::GCodeLine& line)
float factor = (m_flavor == gcfMarlin || m_flavor == gcfSmoothie) ? 1.0f : MMMIN_TO_MMSEC;
for (size_t i = 0; i < static_cast<size_t>(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) {
if (static_cast<PrintEstimatedTimeStatistics::ETimeMode>(i) == PrintEstimatedTimeStatistics::ETimeMode::Normal ||
m_time_processor.machine_envelope_processing_enabled) {
if (line.has_x())
set_option_value(m_time_processor.machine_limits.machine_max_feedrate_x, i, line.x() * factor);
@ -2160,15 +2189,15 @@ void GCodeProcessor::process_M203(const GCodeReader::GCodeLine& line)
if (line.has_e())
set_option_value(m_time_processor.machine_limits.machine_max_feedrate_e, i, line.e() * factor);
}
}
}
void GCodeProcessor::process_M204(const GCodeReader::GCodeLine& line)
{
if (!m_time_processor.machine_envelope_processing_enabled)
return;
float value;
for (size_t i = 0; i < static_cast<size_t>(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) {
if (static_cast<PrintEstimatedTimeStatistics::ETimeMode>(i) == PrintEstimatedTimeStatistics::ETimeMode::Normal ||
m_time_processor.machine_envelope_processing_enabled) {
if (line.has_value('S', value)) {
// Legacy acceleration format. This format is used by the legacy Marlin, MK2 or MK3 firmware,
// and it is also generated by Slic3r to control acceleration per extrusion type
@ -2190,14 +2219,14 @@ void GCodeProcessor::process_M204(const GCodeReader::GCodeLine& line)
}
}
}
}
}
void GCodeProcessor::process_M205(const GCodeReader::GCodeLine& line)
{
if (!m_time_processor.machine_envelope_processing_enabled)
return;
for (size_t i = 0; i < static_cast<size_t>(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) {
if (static_cast<PrintEstimatedTimeStatistics::ETimeMode>(i) == PrintEstimatedTimeStatistics::ETimeMode::Normal ||
m_time_processor.machine_envelope_processing_enabled) {
if (line.has_x()) {
float max_jerk = line.x();
set_option_value(m_time_processor.machine_limits.machine_max_jerk_x, i, max_jerk);
@ -2220,6 +2249,7 @@ void GCodeProcessor::process_M205(const GCodeReader::GCodeLine& line)
if (line.has_value('T', value))
set_option_value(m_time_processor.machine_limits.machine_min_travel_rate, i, value);
}
}
}
void GCodeProcessor::process_M221(const GCodeReader::GCodeLine& line)
@ -2315,6 +2345,8 @@ void GCodeProcessor::process_T(const std::string_view command)
if (command.length() > 1) {
int eid;
if (! parse_number(command.substr(1), eid) || eid < 0 || eid > 255) {
// T-1 is a valid gcode line for RepRap Firmwares (used to deselects all tools) see https://github.com/prusa3d/PrusaSlicer/issues/5677
if ((m_flavor != gcfRepRapFirmware && m_flavor != gcfRepRapSprinter) || eid != -1)
BOOST_LOG_TRIVIAL(error) << "GCodeProcessor encountered an invalid toolchange (" << command << ").";
} else {
unsigned char id = static_cast<unsigned char>(eid);

View file

@ -242,7 +242,7 @@ namespace Slic3r {
bool extruder_unloaded;
// whether or not to export post-process the gcode to export lines M73 in it
bool export_remaining_time_enabled;
// allow to skip the lines M201/M203/M204/M205 generated by GCode::print_machine_envelope()
// allow to skip the lines M201/M203/M204/M205 generated by GCode::print_machine_envelope() for non-Normal time estimate mode
bool machine_envelope_processing_enabled;
MachineEnvelopeConfig machine_limits;
// Additional load / unload times for a filament exchange sequence.
@ -421,6 +421,9 @@ namespace Slic3r {
unsigned int m_g1_line_id;
unsigned int m_layer_id;
CpColor m_cp_color;
#if ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
bool m_use_volumetric_e;
#endif // ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING
enum class EProducer
{

View file

@ -504,7 +504,7 @@ Point SeamPlacer::get_random_seam(size_t layer_idx, const Polygon& polygon, size
bool* saw_custom) const
{
// Parametrize the polygon by its length.
std::vector<float> lengths = polygon.parameter_by_length();
const std::vector<float> lengths = polygon.parameter_by_length();
// Which of the points are inside enforcers/blockers?
std::vector<size_t> enforcers_idxs;
@ -516,23 +516,73 @@ Point SeamPlacer::get_random_seam(size_t layer_idx, const Polygon& polygon, size
if (saw_custom)
*saw_custom = has_enforcers || has_blockers;
// FIXME FIXME FIXME: This is just to test the outcome and whether it is
// reasonable. The algorithm should really sum the length of all available
// pieces, get a random length and find the respective point.
float rand_len = 0.f;
size_t pt_idx = 0;
do {
rand_len = lengths.back() * (rand()/float(RAND_MAX));
auto it = std::lower_bound(lengths.begin(), lengths.end(), rand_len);
pt_idx = it == lengths.end() ? 0 : (it-lengths.begin()-1);
assert(std::is_sorted(enforcers_idxs.begin(), enforcers_idxs.end()));
assert(std::is_sorted(blockers_idxs.begin(), blockers_idxs.end()));
std::vector<float> edges;
// If there are blockers and the point is inside, repeat.
// If there are enforcers and the point is NOT inside, repeat.
} while ((has_blockers && std::binary_search(blockers_idxs.begin(), blockers_idxs.end(), pt_idx))
|| (has_enforcers && ! std::binary_search(enforcers_idxs.begin(), enforcers_idxs.end(), pt_idx)));
// Lambda to calculate lengths of all edges of interest. Last parameter
// decides whether to measure edges inside or outside idxs.
// Negative number = not an edge of interest.
auto get_valid_length = [&lengths](const std::vector<size_t>& idxs,
std::vector<float>& edges,
bool measure_inside_edges) -> float
{
// First mark edges we are interested in by assigning a positive number.
edges.assign(lengths.size()-1, measure_inside_edges ? -1.f : 1.f);
for (size_t i=0; i<idxs.size(); ++i) {
size_t this_pt_idx = idxs[i];
// Two concurrent indices in the list -> the edge between them is the enforcer/blocker.
bool inside_edge = ((i != idxs.size()-1 && idxs[i+1] == this_pt_idx + 1)
|| (i == idxs.size()-1 && idxs.back() == lengths.size()-2 && idxs[0] == 0));
if (inside_edge)
edges[this_pt_idx] = measure_inside_edges ? 1.f : -1.f;
}
// Now measure them.
float running_total = 0.f;
for (size_t i=0; i<edges.size(); ++i) {
if (edges[i] > 0.f) {
edges[i] = lengths[i+1] - lengths[i];
running_total += edges[i];
}
}
return running_total;
};
// Find all seam candidate edges and their lengths.
float valid_length = 0.f;
if (has_enforcers)
valid_length = get_valid_length(enforcers_idxs, edges, true);
if (! has_enforcers || valid_length == 0.f) {
// Second condition covers case with isolated enf points. Given how the painted
// triangles are projected, this should not happen. Stay on the safe side though.
if (has_blockers)
valid_length = get_valid_length(blockers_idxs, edges, false);
if (valid_length == 0.f) // No blockers or everything blocked - use the whole polygon.
valid_length = lengths.back();
}
assert(valid_length != 0.f);
// Now generate a random length and find the respective edge.
float rand_len = valid_length * (rand()/float(RAND_MAX));
size_t pt_idx = 0; // Index of the edge where to put the seam.
if (valid_length == lengths.back()) {
// Whole polygon is used for placing the seam.
auto it = std::lower_bound(lengths.begin(), lengths.end(), rand_len);
pt_idx = it == lengths.begin() ? 0 : (it-lengths.begin()-1); // this takes care of a corner case where rand() returns 0
} else {
float running = 0.f;
for (size_t i=0; i<edges.size(); ++i) {
running += edges[i] > 0.f ? edges[i] : 0.f;
if (running >= rand_len) {
pt_idx = i;
break;
}
}
}
if (! has_enforcers && ! has_blockers) {
// The polygon may be too coarse, calculate the point exactly.
assert(valid_length == lengths.back());
bool last_seg = pt_idx == polygon.points.size()-1;
size_t next_idx = last_seg ? 0 : pt_idx+1;
const Point& prev = polygon.points[pt_idx];

View file

@ -461,11 +461,11 @@ bool Model::looks_like_imperial_units() const
return false;
}
void Model::convert_from_imperial_units()
void Model::convert_from_imperial_units(bool only_small_volumes)
{
double in_to_mm = 25.4;
for (ModelObject* obj : this->objects)
if (obj->get_object_stl_stats().volume < 9.0) { // 9 = 3*3*3;
if (! only_small_volumes || obj->get_object_stl_stats().volume < 9.0) { // 9 = 3*3*3;
obj->scale_mesh_after_creation(Vec3d(in_to_mm, in_to_mm, in_to_mm));
for (ModelVolume* v : obj->volumes)
v->source.is_converted_from_inches = true;
@ -1042,8 +1042,6 @@ void ModelObject::convert_units(ModelObjectPtrs& new_objects, bool from_imperial
int vol_idx = 0;
for (ModelVolume* volume : volumes)
{
volume->supported_facets.clear();
volume->seam_facets.clear();
if (!volume->mesh().empty()) {
TriangleMesh mesh(volume->mesh());
mesh.require_shared_vertices();
@ -1060,9 +1058,14 @@ void ModelObject::convert_units(ModelObjectPtrs& new_objects, bool from_imperial
vol->source.object_idx = (int)new_objects.size();
vol->source.volume_idx = vol_idx;
// Perform conversion
if (volume_idxs.empty() ||
std::find(volume_idxs.begin(), volume_idxs.end(), vol_idx) != volume_idxs.end()) {
vol->supported_facets.assign(volume->supported_facets);
vol->seam_facets.assign(volume->seam_facets);
// Perform conversion only if the target "imperial" state is different from the current one.
// This check supports conversion of "mixed" set of volumes, each with different "imperial" state.
if (//vol->source.is_converted_from_inches != from_imperial &&
(volume_idxs.empty() ||
std::find(volume_idxs.begin(), volume_idxs.end(), vol_idx) != volume_idxs.end())) {
vol->scale_geometry_after_creation(versor);
vol->set_offset(versor.cwiseProduct(volume->get_offset()));
vol->source.is_converted_from_inches = from_imperial;

View file

@ -1018,7 +1018,7 @@ public:
bool looks_like_multipart_object() const;
void convert_multipart_object(unsigned int max_extruders);
bool looks_like_imperial_units() const;
void convert_from_imperial_units();
void convert_from_imperial_units(bool only_small_volumes);
// Ensures that the min z of the model is not negative
void adjust_min_z();

View file

@ -1152,11 +1152,14 @@ inline t_config_option_keys deep_diff(const ConfigBase &config_this, const Confi
if (this_opt != nullptr && other_opt != nullptr && *this_opt != *other_opt)
{
if (opt_key == "bed_shape" || opt_key == "thumbnails" || opt_key == "compatible_prints" || opt_key == "compatible_printers") {
// Scalar variable, or a vector variable, which is independent from number of extruders,
// thus the vector is presented to the user as a single input.
diff.emplace_back(opt_key);
continue;
}
switch (other_opt->type())
{
} else if (opt_key == "default_filament_profile") {
// Ignore this field, it is not presented to the user, therefore showing a "modified" flag for this parameter does not help.
// Also the length of this field may differ, which may lead to a crash if the block below is used.
} else {
switch (other_opt->type()) {
case coInts: add_correct_opts_to_diff<ConfigOptionInts >(opt_key, diff, config_other, config_this); break;
case coBools: add_correct_opts_to_diff<ConfigOptionBools >(opt_key, diff, config_other, config_this); break;
case coFloats: add_correct_opts_to_diff<ConfigOptionFloats >(opt_key, diff, config_other, config_this); break;
@ -1167,6 +1170,7 @@ inline t_config_option_keys deep_diff(const ConfigBase &config_this, const Confi
}
}
}
}
return diff;
}
@ -1849,6 +1853,13 @@ void PhysicalPrinterCollection::select_printer(const std::string& full_name)
m_selected_preset = it->get_preset_name(full_name);
}
void PhysicalPrinterCollection::select_printer(const std::string& printer_name, const std::string& preset_name)
{
if (preset_name.empty())
return select_printer(printer_name);
return select_printer(printer_name + PhysicalPrinter::separator() + preset_name);
}
void PhysicalPrinterCollection::select_printer(const PhysicalPrinter& printer)
{
return select_printer(printer.name);

View file

@ -701,6 +701,7 @@ public:
// If full_name doesn't contain name of selected preset, then select first preset in the list for this printer
void select_printer(const std::string& full_name);
void select_printer(const PhysicalPrinter& printer);
void select_printer(const std::string& printer_name, const std::string& preset_name);
bool has_selection() const;
void unselect_printer() ;
bool is_selected(ConstIterator it, const std::string &preset_name) const;

View file

@ -86,9 +86,8 @@ PresetBundle::PresetBundle() :
preset.config.optptr(key, true);
if (i == 0) {
preset.config.optptr("default_print_profile", true);
preset.config.option<ConfigOptionStrings>("default_filament_profile", true)->values = { "" };
}
else {
preset.config.option<ConfigOptionStrings>("default_filament_profile", true);
} else {
preset.config.optptr("default_sla_print_profile", true);
preset.config.optptr("default_sla_material_profile", true);
}
@ -668,7 +667,7 @@ DynamicPrintConfig PresetBundle::full_sla_config() const
// If the file is loaded successfully, its print / filament / printer profiles will be activated.
void PresetBundle::load_config_file(const std::string &path)
{
if (boost::iends_with(path, ".gcode") || boost::iends_with(path, ".g")) {
if (is_gcode_file(path)) {
DynamicPrintConfig config;
config.apply(FullPrintConfig::defaults());
config.load_from_gcode_file(path);
@ -752,7 +751,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool
switch (printer_technology) {
case ptFFF:
config.option<ConfigOptionString>("default_print_profile", true);
config.option<ConfigOptionStrings>("default_filament_profile", true)->values.resize(num_extruders, std::string());
config.option<ConfigOptionStrings>("default_filament_profile", true);
break;
case ptSLA:
config.option<ConfigOptionString>("default_sla_print_profile", true);
@ -876,7 +875,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool
// Activate the physical printer profile if possible.
PhysicalPrinter *pp = this->physical_printers.find_printer(physical_printer, true);
if (pp != nullptr && std::find(pp->preset_names.begin(), pp->preset_names.end(), this->printers.get_edited_preset().name) != pp->preset_names.end())
this->physical_printers.select_printer(*pp);
this->physical_printers.select_printer(pp->name, this->printers.get_edited_preset().name);
else
this->physical_printers.unselect_printer();
}
@ -1396,7 +1395,7 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla
if (! active_printer.empty())
printers.select_preset_by_name(active_printer, true);
if (! active_physical_printer.empty())
physical_printers.select_printer(active_physical_printer +" * " + active_printer);
physical_printers.select_printer(active_physical_printer, active_printer);
// Activate the first filament preset.
if (! active_filaments.empty() && ! active_filaments.front().empty())
filaments.select_preset_by_name(active_filaments.front(), true);

View file

@ -1851,10 +1851,7 @@ void Print::_make_brim()
}
polygons_append(loops, offset(islands, -0.5f * float(flow.scaled_spacing())));
}
loops = union_pt_chained(loops, false);
// The function above produces ordering well suited for concentric infill (from outside to inside).
// For Brim, the ordering should be reversed (from inside to outside).
std::reverse(loops.begin(), loops.end());
loops = union_pt_chained_outside_in(loops, false);
// If there is a possibility that brim intersects skirt, go through loops and split those extrusions
// The result is either the original Polygon or a list of Polylines

View file

@ -161,6 +161,8 @@ public:
// Get a layer approximately at print_z.
const Layer* get_layer_at_printz(coordf_t print_z, coordf_t epsilon) const;
Layer* get_layer_at_printz(coordf_t print_z, coordf_t epsilon);
// Get the first layer approximately bellow print_z.
const Layer* get_first_layer_bellow_printz(coordf_t print_z, coordf_t epsilon) const;
// print_z: top of the layer; slice_z: center of the layer.
Layer* add_layer(int id, coordf_t height, coordf_t print_z, coordf_t slice_z);

View file

@ -64,7 +64,7 @@ void PrintConfigDef::init_common_params()
def = this->add("thumbnails", coPoints);
def->label = L("G-code thumbnails");
def->tooltip = L("Picture sizes to be stored into a .gcode and .sl1 files");
def->tooltip = L("Picture sizes to be stored into a .gcode and .sl1 files, in the following format: \"XxY, XxY, ...\"");
def->mode = comExpert;
def->gui_type = "one_string";
def->set_default_value(new ConfigOptionPoints());
@ -184,15 +184,16 @@ void PrintConfigDef::init_fff_params()
def->mode = comExpert;
def->set_default_value(new ConfigOptionBool(false));
def = this->add("avoid_crossing_perimeters_max_detour", coFloat);
def->label = L("Avoid crossing perimeters - The max detour lenght");
def = this->add("avoid_crossing_perimeters_max_detour", coFloatOrPercent);
def->label = L("Avoid crossing perimeters - Max detour length");
def->category = L("Layers and Perimeters");
def->tooltip = L("The maximum detour length for avoid crossing perimeters. "
"If the detour is longer than this value, avoid crossing perimeters is not applied for this path.");
def->sidetext = L("mm (zero to disable)");
"If the detour is longer than this value, avoid crossing perimeters is not applied for this travel path. "
"Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path.");
def->sidetext = L("mm or % (zero to disable)");
def->min = 0;
def->mode = comExpert;
def->set_default_value(new ConfigOptionFloat(0.));
def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
def = this->add("bed_temperature", coInts);
def->label = L("Other layers");
@ -606,6 +607,7 @@ void PrintConfigDef::init_fff_params()
"this setting to get nice surface finish and correct single wall widths. "
"Usual values are between 0.9 and 1.1. If you think you need to change this more, "
"check filament diameter and your firmware E steps.");
def->max = 2;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloats { 1. });
@ -618,6 +620,7 @@ void PrintConfigDef::init_fff_params()
"If expressed as percentage (for example: 230%), it will be computed over layer height.");
def->sidetext = L("mm or %");
def->min = 0;
def->max = 1000;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
@ -3375,6 +3378,8 @@ void DynamicPrintConfig::set_num_extruders(unsigned int num_extruders)
const auto &defaults = FullPrintConfig::defaults();
for (const std::string &key : print_config_def.extruder_option_keys()) {
if (key == "default_filament_profile")
// Don't resize this field, as it is presented to the user at the "Dependencies" page of the Printer profile and we don't want to present
// empty fields there, if not defined by the system profile.
continue;
auto *opt = this->option(key, false);
assert(opt != nullptr);

View file

@ -828,7 +828,7 @@ class PrintConfig : public MachineEnvelopeConfig, public GCodeConfig
public:
ConfigOptionBool avoid_crossing_perimeters;
ConfigOptionFloat avoid_crossing_perimeters_max_detour;
ConfigOptionFloatOrPercent avoid_crossing_perimeters_max_detour;
ConfigOptionPoints bed_shape;
ConfigOptionInts bed_temperature;
ConfigOptionFloat bridge_acceleration;

View file

@ -567,12 +567,18 @@ bool PrintObject::invalidate_state_by_config_options(const std::vector<t_config_
|| opt_key == "dont_support_bridges"
|| opt_key == "first_layer_extrusion_width") {
steps.emplace_back(posSupportMaterial);
} else if (opt_key == "bottom_solid_layers") {
steps.emplace_back(posPrepareInfill);
if(m_print->config().spiral_vase) {
// Changing the number of bottom layers when a spiral vase is enabled requires re-slicing the object again.
// Otherwise, holes in the bottom layers could be filled, as is reported in GH #5528.
steps.emplace_back(posSlice);
}
} else if (
opt_key == "interface_shells"
|| opt_key == "infill_only_where_needed"
|| opt_key == "infill_every_layers"
|| opt_key == "solid_infill_every_layers"
|| opt_key == "bottom_solid_layers"
|| opt_key == "bottom_solid_min_thickness"
|| opt_key == "top_solid_layers"
|| opt_key == "top_solid_min_thickness"
@ -655,6 +661,7 @@ bool PrintObject::invalidate_step(PrintObjectStep step)
} else if (step == posPrepareInfill) {
invalidated |= this->invalidate_steps({ posInfill, posIroning });
} else if (step == posInfill) {
invalidated |= this->invalidate_steps({ posIroning });
invalidated |= m_print->invalidate_steps({ psSkirt, psBrim });
} else if (step == posSlice) {
invalidated |= this->invalidate_steps({ posPerimeters, posPrepareInfill, posInfill, posIroning, posSupportMaterial });
@ -2943,4 +2950,11 @@ const Layer* PrintObject::get_layer_at_printz(coordf_t print_z, coordf_t epsilon
Layer* PrintObject::get_layer_at_printz(coordf_t print_z, coordf_t epsilon) { return const_cast<Layer*>(std::as_const(*this).get_layer_at_printz(print_z, epsilon)); }
const Layer *PrintObject::get_first_layer_bellow_printz(coordf_t print_z, coordf_t epsilon) const
{
coordf_t limit = print_z + epsilon;
auto it = Slic3r::lower_bound_by_predicate(m_layers.begin(), m_layers.end(), [limit](const Layer *layer) { return layer->print_z < limit; });
return (it == m_layers.begin()) ? nullptr : *(--it);
}
} // namespace Slic3r

View file

@ -906,13 +906,15 @@ namespace SupportMaterialInternal {
polyline.extend_start(fw);
polyline.extend_end(fw);
// Is the straight perimeter segment supported at both sides?
for (size_t i = 0; i < lower_layer.lslices.size(); ++ i)
if (lower_layer.lslices_bboxes[i].contains(polyline.first_point()) && lower_layer.lslices_bboxes[i].contains(polyline.last_point()) &&
lower_layer.lslices[i].contains(polyline.first_point()) && lower_layer.lslices[i].contains(polyline.last_point())) {
Point pts[2] = { polyline.first_point(), polyline.last_point() };
bool supported[2] = { false, false };
for (size_t i = 0; i < lower_layer.lslices.size() && ! (supported[0] && supported[1]); ++ i)
for (int j = 0; j < 2; ++ j)
if (! supported[j] && lower_layer.lslices_bboxes[i].contains(pts[j]) && lower_layer.lslices[i].contains(pts[j]))
supported[j] = true;
if (supported[0] && supported[1])
// Offset a polyline into a thick line.
polygons_append(bridges, offset(polyline, 0.5f * w + 10.f));
break;
}
}
bridges = union_(bridges);
}

View file

@ -12,7 +12,7 @@
// Renders a small sphere in the center of the bounding box of the current selection when no gizmo is active
#define ENABLE_RENDER_SELECTION_CENTER 0
// Shows an imgui dialog with render related data
#define ENABLE_RENDER_STATISTICS 1
#define ENABLE_RENDER_STATISTICS 0
// Shows an imgui dialog with camera related data
#define ENABLE_CAMERA_STATISTICS 0
// Render the picking pass instead of the main scene (use [T] key to toggle between regular rendering and picking pass only rendering)
@ -99,4 +99,12 @@
#define ENABLE_TOOLPATHS_WIDTH_HEIGHT_FROM_GCODE (1 && ENABLE_2_3_0_BETA3)
#define ENABLE_RENDER_PATH_REFRESH_AFTER_OPTIONS_CHANGE (1 && ENABLE_2_3_0_BETA3)
//=================
// 2.3.0.rc1 techs
//=================
#define ENABLE_2_3_0_RC1 1
#define ENABLE_VOLUMETRIC_EXTRUSION_PROCESSING (1 && ENABLE_2_3_0_RC1)
#endif // _prusaslicer_technologies_h_

View file

@ -6,13 +6,14 @@
#include <pthread.h>
#endif
#include <atomic>
#include <condition_variable>
#include <mutex>
#include <tbb/parallel_for.h>
#include <tbb/tbb_thread.h>
#include <tbb/task_arena.h>
#include <tbb/task_scheduler_init.h>
#include "Thread.hpp"
namespace Slic3r {
@ -194,7 +195,10 @@ void name_tbb_thread_pool_threads()
return;
initialized = true;
const size_t nthreads_hw = std::thread::hardware_concurrency();
// see GH issue #5661 PrusaSlicer hangs on Linux when run with non standard task affinity
// TBB will respect the task affinity mask on Linux and spawn less threads than std::thread::hardware_concurrency().
// const size_t nthreads_hw = std::thread::hardware_concurrency();
const size_t nthreads_hw = tbb::this_task_arena::max_concurrency();
size_t nthreads = nthreads_hw;
#ifdef SLIC3R_PROFILE

View file

@ -45,9 +45,11 @@ void TriangleSelector::select_patch(const Vec3f& hit, int facet_start,
m_cursor = Cursor(hit, source, radius, cursor_type, trafo);
// In case user changed cursor size since last time, update triangle edge limit.
if (m_old_cursor_radius != radius) {
set_edge_limit(radius / 5.f);
m_old_cursor_radius = radius;
// It is necessary to compare the internal radius in m_cursor! radius is in
// world coords and does not change after scaling.
if (m_old_cursor_radius_sqr != m_cursor.radius_sqr) {
set_edge_limit(std::sqrt(m_cursor.radius_sqr) / 5.f);
m_old_cursor_radius_sqr = m_cursor.radius_sqr;
}
// Now start with the facet the pointer points to and check all adjacent facets.

View file

@ -146,7 +146,7 @@ protected:
};
Cursor m_cursor;
float m_old_cursor_radius;
float m_old_cursor_radius_sqr;
// Private functions:
bool select_triangle(int facet_idx, EnforcerBlockerType type,

View file

@ -90,6 +90,7 @@ extern CopyFileResult check_copy(const std::string& origin, const std::string& c
extern bool is_plain_file(const boost::filesystem::directory_entry &path);
extern bool is_ini_file(const boost::filesystem::directory_entry &path);
extern bool is_idx_file(const boost::filesystem::directory_entry &path);
extern bool is_gcode_file(const std::string &path);
// File path / name / extension splitting utilities, working with UTF-8,
// to be published to Perl.
@ -353,8 +354,12 @@ inline std::string get_time_dhm(float time_in_secs)
#if WIN32
#define SLIC3R_STDVEC_MEMSIZE(NAME, TYPE) NAME.capacity() * ((sizeof(TYPE) + __alignof(TYPE) - 1) / __alignof(TYPE)) * __alignof(TYPE)
//FIXME this is an inprecise hack. Add the hash table size and possibly some estimate of the linked list at each of the used bin.
#define SLIC3R_STDUNORDEREDSET_MEMSIZE(NAME, TYPE) NAME.size() * ((sizeof(TYPE) + __alignof(TYPE) - 1) / __alignof(TYPE)) * __alignof(TYPE)
#else
#define SLIC3R_STDVEC_MEMSIZE(NAME, TYPE) NAME.capacity() * ((sizeof(TYPE) + alignof(TYPE) - 1) / alignof(TYPE)) * alignof(TYPE)
//FIXME this is an inprecise hack. Add the hash table size and possibly some estimate of the linked list at each of the used bin.
#define SLIC3R_STDUNORDEREDSET_MEMSIZE(NAME, TYPE) NAME.size() * ((sizeof(TYPE) + alignof(TYPE) - 1) / alignof(TYPE)) * alignof(TYPE)
#endif
#endif // slic3r_Utils_hpp_

View file

@ -522,6 +522,12 @@ bool is_idx_file(const boost::filesystem::directory_entry &dir_entry)
return is_plain_file(dir_entry) && strcasecmp(dir_entry.path().extension().string().c_str(), ".idx") == 0;
}
bool is_gcode_file(const std::string &path)
{
return boost::iends_with(path, ".gcode") || boost::iends_with(path, ".gco") ||
boost::iends_with(path, ".g") || boost::iends_with(path, ".ngc");
}
} // namespace Slic3r
#ifdef WIN32

View file

@ -1,7 +1,7 @@
[Desktop Entry]
Name=Prusa GCode viewer
Exec=prusa-slicer --gcodeviewer %F
Icon=PrusaSlicer # TODO: change when the new icon is ready
Icon=PrusaSlicer-gcodeviewer
Terminal=false
Type=Application
MimeType=text/x.gcode;

View file

@ -35,6 +35,11 @@
#include "slic3r/Config/Snapshot.hpp"
#include "slic3r/Utils/PresetUpdater.hpp"
#if defined(__linux__) && defined(__WXGTK3__)
#define wxLinux_gtk3 true
#else
#define wxLinux_gtk3 false
#endif //defined(__linux__) && defined(__WXGTK3__)
namespace Slic3r {
namespace GUI {
@ -209,7 +214,7 @@ PrinterPicker::PrinterPicker(wxWindow *parent, const VendorProfile &vendor, wxSt
load_bitmap(Slic3r::var(PRINTER_PLACEHOLDER), bitmap, bitmap_width);
}
}
auto *title = new wxStaticText(this, wxID_ANY, model.name, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
auto *title = new wxStaticText(this, wxID_ANY, from_u8(model.name), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
title->SetFont(font_name);
const int wrap_width = std::max((int)MODEL_MIN_WRAP, bitmap_width);
title->Wrap(wrap_width);
@ -409,6 +414,10 @@ ConfigWizardPage::ConfigWizardPage(ConfigWizard *parent, wxString title, wxStrin
SetSizer(sizer);
// There is strange layout on Linux with GTK3,
// see https://github.com/prusa3d/PrusaSlicer/issues/5103 and https://github.com/prusa3d/PrusaSlicer/issues/4861
// So, non-active pages will be hidden later, on wxEVT_SHOW, after completed Layout() for all pages
if (!wxLinux_gtk3)
this->Hide();
Bind(wxEVT_SIZE, [this](wxSizeEvent &event) {
@ -2271,7 +2280,6 @@ bool ConfigWizard::priv::check_and_install_missing_materials(Technology technolo
wxString out;
for (const VendorProfile::PrinterModel *printer_model : printer_models) {
wxString name = from_u8(printer_model->name);
name.Replace("&", "&&", true);
out += "\t\t";
out += name;
out += "\n";
@ -2643,6 +2651,20 @@ ConfigWizard::ConfigWizard(wxWindow *parent)
Layout();
});
if (wxLinux_gtk3)
this->Bind(wxEVT_SHOW, [this, vsizer](const wxShowEvent& e) {
ConfigWizardPage* active_page = p->index->active_page();
if (!active_page)
return;
for (auto page : p->all_pages)
if (page != active_page)
page->Hide();
// update best size for the dialog after hiding of the non-active pages
vsizer->SetSizeHints(this);
// set initial dialog size
p->init_dialog_size();
});
}
ConfigWizard::~ConfigWizard() {}

View file

@ -971,11 +971,15 @@ void Control::draw_ruler(wxDC& dc)
double value = 0.0;
int sequence = 0;
int prev_y_pos = -1;
wxCoord label_height = dc.GetMultiLineTextExtent("0").y - 2;
int values_size = (int)m_values.size();
while (tick <= m_max_value) {
value += m_ruler.long_step;
if (value > m_values.back() && sequence < m_ruler.count) {
value = m_ruler.long_step;
for (tick; tick < m_values.size(); tick++)
for (; tick < values_size; tick++)
if (m_values[tick] < value)
break;
// short ticks from the last tick to the end of current sequence
@ -984,7 +988,7 @@ void Control::draw_ruler(wxDC& dc)
}
short_tick = tick;
for (tick; tick < m_values.size(); tick++) {
for (; tick < values_size; tick++) {
if (m_values[tick] == value)
break;
if (m_values[tick] > value) {
@ -998,7 +1002,10 @@ void Control::draw_ruler(wxDC& dc)
wxCoord pos = get_position_from_value(tick);
draw_ticks_pair(dc, pos, mid, 5);
if (prev_y_pos < 0 || prev_y_pos - pos >= label_height) {
draw_tick_text(dc, wxPoint(mid, pos), tick);
prev_y_pos = pos;
}
draw_short_ticks(dc, short_tick, tick);

View file

@ -57,9 +57,10 @@ wxString double_to_string(double const value, const int max_precision /*= 4*/)
wxString get_thumbnails_string(const std::vector<Vec2d>& values)
{
wxString ret_str;
if (!values.empty())
for (auto el : values)
ret_str += wxString::Format("%ix%i, ", int(el[0]), int(el[1]));
for (size_t i = 0; i < values.size(); ++ i) {
const Vec2d& el = values[i];
ret_str += wxString::Format((i == 0) ? "%ix%i" : ", %ix%i", int(el[0]), int(el[1]));
}
return ret_str;
}
@ -258,12 +259,30 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
m_value.clear();
break;
}
show_error(m_parent, _(L("Input value is out of range")));
if (m_opt_id == "extrusion_multiplier") {
if (m_value.empty() || boost::any_cast<double>(m_value) != val) {
wxString msg_text = format_wxstr(_L("Input value is out of range\n"
"Are you sure that %s is a correct value and that you want to continue?"), str);
wxMessageDialog dialog(m_parent, msg_text, _L("Parameter validation") + ": " + m_opt_id, wxICON_WARNING | wxYES | wxNO);
if (dialog.ShowModal() == wxID_NO) {
if (m_value.empty()) {
if (m_opt.min > val) val = m_opt.min;
if (val > m_opt.max) val = m_opt.max;
}
else
val = boost::any_cast<double>(m_value);
set_value(double_to_string(val), true);
}
}
}
else {
show_error(m_parent, _L("Input value is out of range"));
if (m_opt.min > val) val = m_opt.min;
if (val > m_opt.max) val = m_opt.max;
set_value(double_to_string(val), true);
}
}
}
m_value = val;
break; }
case coString:
@ -359,7 +378,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
if (!m_value.empty())
text_value = get_thumbnails_string(boost::any_cast<std::vector<Vec2d>>(m_value));
set_value(text_value, true);
show_error(m_parent, format_wxstr(_L("Invalid input format. It must be represented like \"%1%\""),"XxY, XxY, ..." ));
show_error(m_parent, format_wxstr(_L("Invalid input format. Expected vector of dimensions in the following format: \"%1%\""),"XxY, XxY, ..." ));
}
}
@ -898,6 +917,12 @@ void Choice::BUILD() {
#endif //__WXOSX__
}
#ifdef __WXGTK3__
wxSize best_sz = temp->GetBestSize();
if (best_sz.x > size.x)
temp->SetSize(best_sz);
#endif //__WXGTK3__
temp->SetFont(Slic3r::GUI::wxGetApp().normal_font());
if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT);

View file

@ -147,9 +147,9 @@ void GCodeViewer::TBuffer::reset()
}
// release cpu memory
indices = std::vector<IBuffer>();
paths = std::vector<Path>();
render_paths = std::vector<RenderPath>();
indices.clear();
paths.clear();
render_paths.clear();
}
void GCodeViewer::TBuffer::add_path(const GCodeProcessor::MoveVertex& move, unsigned int b_id, size_t i_id, size_t s_id)
@ -370,6 +370,13 @@ void GCodeViewer::load(const GCodeProcessor::Result& gcode_result, const Print&
}
m_time_statistics = gcode_result.time_statistics;
if (m_time_estimate_mode != PrintEstimatedTimeStatistics::ETimeMode::Normal) {
float time = m_time_statistics.modes[static_cast<size_t>(m_time_estimate_mode)].time;
if (time == 0.0f ||
short_time(get_time_dhms(time)) == short_time(get_time_dhms(m_time_statistics.modes[static_cast<size_t>(PrintEstimatedTimeStatistics::ETimeMode::Normal)].time)))
m_time_estimate_mode = PrintEstimatedTimeStatistics::ETimeMode::Normal;
}
}
void GCodeViewer::refresh(const GCodeProcessor::Result& gcode_result, const std::vector<std::string>& str_tool_colors)
@ -445,6 +452,12 @@ void GCodeViewer::refresh_render_paths()
}
#endif // ENABLE_RENDER_PATH_REFRESH_AFTER_OPTIONS_CHANGE
void GCodeViewer::update_shells_color_by_extruder(const DynamicPrintConfig* config)
{
if (config != nullptr)
m_shells.volumes.update_colors_by_extruder(config);
}
void GCodeViewer::reset()
{
m_initialized = false;
@ -467,7 +480,6 @@ void GCodeViewer::reset()
m_layers_z_range = { 0, 0 };
m_roles = std::vector<ExtrusionRole>();
m_time_statistics.reset();
m_time_estimate_mode = PrintEstimatedTimeStatistics::ETimeMode::Normal;
#if ENABLE_GCODE_VIEWER_STATISTICS
m_statistics.reset_all();
@ -769,9 +781,9 @@ void GCodeViewer::export_toolpaths_to_obj(const char* filename) const
unsigned int start_vertex_offset = buffer.start_segment_vertex_offset();
unsigned int end_vertex_offset = buffer.end_segment_vertex_offset();
for (size_t i = 0; i < buffer.render_paths.size(); ++i) {
size_t i = 0;
for (const RenderPath& render_path : buffer.render_paths) {
// get paths segments from buffer paths
const RenderPath& render_path = buffer.render_paths[i];
const IndexBuffer& ibuffer = indices[render_path.index_buffer_id];
const Path& path = buffer.paths[render_path.path_id];
float half_width = 0.5f * path.width;
@ -936,6 +948,8 @@ void GCodeViewer::export_toolpaths_to_obj(const char* filename) const
for (const Triangle& t : out_triangles) {
fprintf(fp, "f %zu//%zu %zu//%zu %zu//%zu\n", t[0], t[0], t[1], t[1], t[2], t[2]);
}
++ i;
}
fclose(fp);
@ -1888,6 +1902,7 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool
}
// second pass: filter paths by sequential data and collect them by color
RenderPath *render_path = nullptr;
for (const auto& [buffer, index_buffer_id, path_id] : paths) {
const Path& path = buffer->paths[path_id];
if (m_sequential_view.current.last <= path.first.s_id || path.last.s_id <= m_sequential_view.current.first)
@ -1918,16 +1933,9 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool
default: { color = { 0.0f, 0.0f, 0.0f }; break; }
}
unsigned int ibuffer_id = index_buffer_id;
auto it = std::find_if(buffer->render_paths.begin(), buffer->render_paths.end(),
[color, ibuffer_id](const RenderPath& path) { return path.index_buffer_id == ibuffer_id && path.color == color; });
if (it == buffer->render_paths.end()) {
it = buffer->render_paths.insert(buffer->render_paths.end(), RenderPath());
it->color = color;
it->path_id = path_id;
it->index_buffer_id = index_buffer_id;
}
RenderPath key{ color, static_cast<unsigned int>(index_buffer_id), path_id };
if (render_path == nullptr || ! RenderPathPropertyEqual()(*render_path, key))
render_path = const_cast<RenderPath*>(&(*buffer->render_paths.emplace(key).first));
unsigned int segments_count = std::min(m_sequential_view.current.last, path.last.s_id) - std::max(m_sequential_view.current.first, path.first.s_id) + 1;
unsigned int size_in_indices = 0;
switch (buffer->render_primitive_type)
@ -1936,7 +1944,7 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool
case TBuffer::ERenderPrimitiveType::Line:
case TBuffer::ERenderPrimitiveType::Triangle: { size_in_indices = buffer->indices_per_segment() * (segments_count - 1); break; }
}
it->sizes.push_back(size_in_indices);
render_path->sizes.push_back(size_in_indices);
unsigned int delta_1st = 0;
if (path.first.s_id < m_sequential_view.current.first && m_sequential_view.current.first <= path.last.s_id)
@ -1945,7 +1953,7 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool
if (buffer->render_primitive_type == TBuffer::ERenderPrimitiveType::Triangle)
delta_1st *= buffer->indices_per_segment();
it->offsets.push_back(static_cast<size_t>((path.first.i_id + delta_1st) * sizeof(unsigned int)));
render_path->offsets.push_back(static_cast<size_t>((path.first.i_id + delta_1st) * sizeof(unsigned int)));
}
// set sequential data to their final value
@ -2931,7 +2939,7 @@ void GCodeViewer::log_memory_used(const std::string& label, int64_t additional)
int64_t render_paths_size = 0;
for (const TBuffer& buffer : m_buffers) {
paths_size += SLIC3R_STDVEC_MEMSIZE(buffer.paths, Path);
render_paths_size += SLIC3R_STDVEC_MEMSIZE(buffer.render_paths, RenderPath);
render_paths_size += SLIC3R_STDUNORDEREDSET_MEMSIZE(buffer.render_paths, RenderPath);
for (const RenderPath& path : buffer.render_paths) {
render_paths_size += SLIC3R_STDVEC_MEMSIZE(path.sizes, unsigned int);
render_paths_size += SLIC3R_STDVEC_MEMSIZE(path.offsets, size_t);

View file

@ -7,6 +7,8 @@
#include <cstdint>
#include <float.h>
#include <set>
#include <unordered_set>
namespace Slic3r {
@ -146,12 +148,36 @@ class GCodeViewer
// Used to batch the indices needed to render paths
struct RenderPath
{
// Render path property
Color color;
unsigned int path_id;
unsigned int index_buffer_id;
// Render path content
unsigned int path_id;
std::vector<unsigned int> sizes;
std::vector<size_t> offsets; // use size_t because we need an unsigned int whose size matches pointer's size (used in the call glMultiDrawElements())
};
struct RenderPathPropertyHash {
size_t operator() (const RenderPath &p) const {
// Conver the RGB value to an integer hash.
// return (size_t(int(p.color[0] * 255) + 255 * int(p.color[1] * 255) + (255 * 255) * int(p.color[2] * 255)) * 7919) ^ size_t(p.index_buffer_id);
return size_t(int(p.color[0] * 255) + 255 * int(p.color[1] * 255) + (255 * 255) * int(p.color[2] * 255)) ^ size_t(p.index_buffer_id);
}
};
struct RenderPathPropertyLower {
bool operator() (const RenderPath &l, const RenderPath &r) const {
for (int i = 0; i < 3; ++ i)
if (l.color[i] < r.color[i])
return true;
else if (l.color[i] > r.color[i])
return false;
return l.index_buffer_id < r.index_buffer_id;
}
};
struct RenderPathPropertyEqual {
bool operator() (const RenderPath &l, const RenderPath &r) const {
return l.color == r.color && l.index_buffer_id == r.index_buffer_id;
}
};
// buffer containing data for rendering a specific toolpath type
struct TBuffer
@ -169,7 +195,9 @@ class GCodeViewer
std::string shader;
std::vector<Path> paths;
std::vector<RenderPath> render_paths;
// std::set seems to perform singificantly better, at least on Windows.
// std::unordered_set<RenderPath, RenderPathPropertyHash, RenderPathPropertyEqual> render_paths;
std::set<RenderPath, RenderPathPropertyLower> render_paths;
bool visible{ false };
void reset();
@ -472,6 +500,7 @@ public:
#if ENABLE_RENDER_PATH_REFRESH_AFTER_OPTIONS_CHANGE
void refresh_render_paths();
#endif // ENABLE_RENDER_PATH_REFRESH_AFTER_OPTIONS_CHANGE
void update_shells_color_by_extruder(const DynamicPrintConfig* config);
void reset();
void render() const;

View file

@ -86,6 +86,13 @@ static const size_t VERTEX_BUFFER_RESERVE_SIZE_SUM_MAX = 1024 * 1024 * 128 / 4;
namespace Slic3r {
namespace GUI {
#ifdef __WXGTK3__
// wxGTK3 seems to simulate OSX behavior in regard to HiDPI scaling support.
RetinaHelper::RetinaHelper(wxWindow* window) : m_window(window), m_self(nullptr) {}
RetinaHelper::~RetinaHelper() {}
float RetinaHelper::get_scale_factor() { return float(m_window->GetContentScaleFactor()); }
#endif // __WXGTK3__
Size::Size()
: m_width(0)
, m_height(0)
@ -1093,6 +1100,7 @@ wxDEFINE_EVENT(EVT_GLCANVAS_RESET_LAYER_HEIGHT_PROFILE, SimpleEvent);
wxDEFINE_EVENT(EVT_GLCANVAS_ADAPTIVE_LAYER_HEIGHT_PROFILE, Event<float>);
wxDEFINE_EVENT(EVT_GLCANVAS_SMOOTH_LAYER_HEIGHT_PROFILE, HeightProfileSmoothEvent);
wxDEFINE_EVENT(EVT_GLCANVAS_RELOAD_FROM_DISK, SimpleEvent);
wxDEFINE_EVENT(EVT_GLCANVAS_RENDER_TIMER, wxTimerEvent/*RenderTimerEvent*/);
const double GLCanvas3D::DefaultCameraZoomToBoxMarginFactor = 1.25;
@ -1177,6 +1185,7 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas)
{
if (m_canvas != nullptr) {
m_timer.SetOwner(m_canvas);
m_render_timer.SetOwner(m_canvas);
#if ENABLE_RETINA_GL
m_retina_helper.reset(new RetinaHelper(canvas));
#endif // ENABLE_RETINA_GL
@ -1602,6 +1611,9 @@ void GLCanvas3D::render()
wxGetApp().plater()->init_environment_texture();
#endif // ENABLE_ENVIRONMENT_MAP
m_render_timer.Stop();
m_extra_frame_requested_delayed = std::numeric_limits<int>::max();
const Size& cnv_size = get_canvas_size();
// Probably due to different order of events on Linux/GTK2, when one switched from 3D scene
// to preview, this was called before canvas had its final size. It reported zero width
@ -2276,8 +2288,11 @@ static void reserve_new_volume_finalize_old_volume(GLVolume& vol_new, GLVolume&
void GLCanvas3D::load_gcode_preview(const GCodeProcessor::Result& gcode_result)
{
m_gcode_viewer.load(gcode_result, *this->fff_print(), m_initialized);
if (wxGetApp().is_editor())
if (wxGetApp().is_editor()) {
m_gcode_viewer.update_shells_color_by_extruder(m_config);
_show_warning_texture_if_needed(WarningTexture::ToolpathOutside);
}
}
void GLCanvas3D::refresh_gcode_preview(const GCodeProcessor::Result& gcode_result, const std::vector<std::string>& str_tool_colors)
@ -2339,6 +2354,7 @@ void GLCanvas3D::bind_event_handlers()
m_canvas->Bind(wxEVT_KEY_UP, &GLCanvas3D::on_key, this);
m_canvas->Bind(wxEVT_MOUSEWHEEL, &GLCanvas3D::on_mouse_wheel, this);
m_canvas->Bind(wxEVT_TIMER, &GLCanvas3D::on_timer, this);
m_canvas->Bind(EVT_GLCANVAS_RENDER_TIMER, &GLCanvas3D::on_render_timer, this);
m_canvas->Bind(wxEVT_LEFT_DOWN, &GLCanvas3D::on_mouse, this);
m_canvas->Bind(wxEVT_LEFT_UP, &GLCanvas3D::on_mouse, this);
m_canvas->Bind(wxEVT_MIDDLE_DOWN, &GLCanvas3D::on_mouse, this);
@ -2368,6 +2384,7 @@ void GLCanvas3D::unbind_event_handlers()
m_canvas->Unbind(wxEVT_KEY_UP, &GLCanvas3D::on_key, this);
m_canvas->Unbind(wxEVT_MOUSEWHEEL, &GLCanvas3D::on_mouse_wheel, this);
m_canvas->Unbind(wxEVT_TIMER, &GLCanvas3D::on_timer, this);
m_canvas->Unbind(EVT_GLCANVAS_RENDER_TIMER, &GLCanvas3D::on_render_timer, this);
m_canvas->Unbind(wxEVT_LEFT_DOWN, &GLCanvas3D::on_mouse, this);
m_canvas->Unbind(wxEVT_LEFT_UP, &GLCanvas3D::on_mouse, this);
m_canvas->Unbind(wxEVT_MIDDLE_DOWN, &GLCanvas3D::on_mouse, this);
@ -2396,13 +2413,12 @@ void GLCanvas3D::on_idle(wxIdleEvent& evt)
{
if (!m_initialized)
return;
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
NotificationManager* notification_mgr = wxGetApp().plater()->get_notification_manager();
/*NotificationManager* notification_mgr = wxGetApp().plater()->get_notification_manager();
if (notification_mgr->requires_update())
notification_mgr->update_notifications();
m_dirty |= notification_mgr->requires_render();
m_dirty |= notification_mgr->requires_render();*/
#endif // ENABLE_NEW_NOTIFICATIONS_FADE_OUT
// FIXME
m_dirty |= m_main_toolbar.update_items_state();
@ -2413,9 +2429,10 @@ void GLCanvas3D::on_idle(wxIdleEvent& evt)
m_dirty |= mouse3d_controller_applied;
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
/*
if (notification_mgr->requires_update()) {
evt.RequestMore();
}
}*/
#endif // ENABLE_NEW_NOTIFICATIONS_FADE_OUT
if (!m_dirty)
@ -2454,21 +2471,6 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
if (m_gizmos.on_char(evt))
return;
auto action_plus = [this](wxKeyEvent& evt) {
if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
post_event(wxKeyEvent(EVT_GLCANVAS_EDIT_COLOR_CHANGE, evt));
else
post_event(Event<int>(EVT_GLCANVAS_INCREASE_INSTANCES, +1));
};
auto action_a = [this]() {
post_event(SimpleEvent(EVT_GLCANVAS_ARRANGE));
};
auto action_question_mark = [this]() {
post_event(SimpleEvent(EVT_GLCANVAS_QUESTION_MARK));
};
if ((evt.GetModifiers() & ctrlMask) != 0) {
// CTRL is pressed
switch (keyCode) {
@ -2562,35 +2564,13 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
post_event(SimpleEvent(EVT_GLTOOLBAR_DELETE_ALL)); break;
default: evt.Skip();
}
}
else if ((evt.GetModifiers() & shiftMask) != 0) {
// SHIFT is pressed
switch (keyCode) {
case '+': { action_plus(evt); break; }
case 'A':
case 'a': { action_a(); break; }
case 'G':
case 'g': {
if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
post_event(wxKeyEvent(EVT_GLCANVAS_JUMP_TO, evt));
break;
}
case '?': { action_question_mark(); break; }
default:
evt.Skip();
}
} else if (evt.HasModifiers()) {
evt.Skip();
} else {
switch (keyCode)
{
case WXK_BACK:
case WXK_DELETE:
post_event(SimpleEvent(EVT_GLTOOLBAR_DELETE));
break;
case WXK_DELETE: { post_event(SimpleEvent(EVT_GLTOOLBAR_DELETE)); break; }
case WXK_ESCAPE: { deselect_all(); break; }
case WXK_F5:
{
case WXK_F5: {
if ((wxGetApp().is_editor() && !wxGetApp().plater()->model().objects.empty()) ||
(wxGetApp().is_gcode_viewer() && !wxGetApp().plater()->get_last_loaded_gcode().empty()))
post_event(SimpleEvent(EVT_GLCANVAS_RELOAD_FROM_DISK));
@ -2603,20 +2583,35 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
case '4': { select_view("rear"); break; }
case '5': { select_view("left"); break; }
case '6': { select_view("right"); break; }
case '+': { action_plus(evt); break; }
case '+': {
if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
post_event(wxKeyEvent(EVT_GLCANVAS_EDIT_COLOR_CHANGE, evt));
else
post_event(Event<int>(EVT_GLCANVAS_INCREASE_INSTANCES, +1));
break;
}
case '-': {
if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
post_event(wxKeyEvent(EVT_GLCANVAS_EDIT_COLOR_CHANGE, evt));
else
post_event(Event<int>(EVT_GLCANVAS_INCREASE_INSTANCES, -1));
break; }
case '?': { action_question_mark(); break; }
break;
}
case '?': { post_event(SimpleEvent(EVT_GLCANVAS_QUESTION_MARK)); break; }
case 'A':
case 'a': { action_a(); break; }
case 'a': { post_event(SimpleEvent(EVT_GLCANVAS_ARRANGE)); break; }
case 'B':
case 'b': { zoom_to_bed(); break; }
case 'E':
case 'e': { m_labels.show(!m_labels.is_shown()); m_dirty = true; break; }
case 'G':
case 'g': {
if ((evt.GetModifiers() & shiftMask) != 0) {
if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
post_event(wxKeyEvent(EVT_GLCANVAS_JUMP_TO, evt));
}
break;
}
case 'I':
case 'i': { _update_camera_zoom(1.0); break; }
case 'K':
@ -2641,8 +2636,7 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
}
#endif // ENABLE_RENDER_PICKING_PASS
case 'Z':
case 'z':
{
case 'z': {
if (!m_selection.is_empty())
zoom_to_selection();
else {
@ -2651,7 +2645,6 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
else
_zoom_to_box(m_gcode_viewer.get_paths_bounding_box());
}
break;
}
default: { evt.Skip(); break; }
@ -2990,6 +2983,39 @@ void GLCanvas3D::on_timer(wxTimerEvent& evt)
_perform_layer_editing_action();
}
void GLCanvas3D::on_render_timer(wxTimerEvent& evt)
{
// If slicer is not top window -> restart timer with one second to try again
wxWindow* p = dynamic_cast<wxWindow*>(wxGetApp().plater());
while (p->GetParent() != nullptr)
p = p->GetParent();
wxTopLevelWindow* top_level_wnd = dynamic_cast<wxTopLevelWindow*>(p);
if (!top_level_wnd->IsActive()) {
request_extra_frame_delayed(1000);
return;
}
//render();
m_dirty = true;
}
void GLCanvas3D::request_extra_frame_delayed(int miliseconds)
{
int64_t now = timestamp_now();
if (! m_render_timer.IsRunning()) {
m_extra_frame_requested_delayed = miliseconds;
m_render_timer.StartOnce(miliseconds);
m_render_timer_start = now;
} else {
const int64_t remaining_time = (m_render_timer_start + m_extra_frame_requested_delayed) - now;
if (miliseconds < remaining_time) {
m_render_timer.Stop();
m_extra_frame_requested_delayed = miliseconds;
m_render_timer.StartOnce(miliseconds);
m_render_timer_start = now;
}
}
}
#ifndef NDEBUG
// #define SLIC3R_DEBUG_MOUSE_EVENTS
#endif
@ -3116,6 +3142,10 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
}
if (m_gizmos.on_mouse(evt)) {
if (wxWindow::FindFocus() != this->m_canvas)
// Grab keyboard focus for input in gizmo dialogs.
m_canvas->SetFocus();
if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp())
mouse_up_cleanup();
@ -3752,7 +3782,8 @@ void GLCanvas3D::update_ui_from_settings()
{
m_dirty = true;
#if ENABLE_RETINA_GL
#if __APPLE__
// Update OpenGL scaling on OSX after the user toggled the "use_retina_opengl" settings in Preferences dialog.
const float orig_scaling = m_retina_helper->get_scale_factor();
const bool use_retina = wxGetApp().app_config->get("use_retina_opengl") == "1";
@ -3999,7 +4030,7 @@ bool GLCanvas3D::_render_arrange_menu(float pos_x)
dist_key += postfix;
rot_key += postfix;
imgui->text(GUI::format_wxstr(_L("Use %1%left mouse key to enter text edit mode:"), shortkey_ctrl_prefix()));
imgui->text(GUI::format_wxstr(_L("Press %1%left mouse button to enter the exact value"), shortkey_ctrl_prefix()));
if (imgui->slider_float(_L("Spacing"), &settings.distance, dist_min, 100.0f, "%5.2f") || dist_min > settings.distance) {
settings.distance = std::max(dist_min, settings.distance);
@ -4120,9 +4151,13 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, bool
shader->start_using();
shader->set_uniform("print_box.volume_detection", 0);
for (const GLVolume* vol : visible_volumes) {
for (GLVolume* vol : visible_volumes) {
shader->set_uniform("uniform_color", (vol->printable && !vol->is_outside) ? orange : gray);
// the volume may have been deactivated by an active gizmo
bool is_active = vol->is_active;
vol->is_active = true;
vol->render();
vol->is_active = is_active;
}
shader->stop_using();
@ -5301,14 +5336,16 @@ void GLCanvas3D::_render_view_toolbar() const
GLToolbar& view_toolbar = wxGetApp().plater()->get_view_toolbar();
#if ENABLE_RETINA_GL
// m_view_toolbar.set_scale(m_retina_helper->get_scale_factor());
const float scale = m_retina_helper->get_scale_factor() * wxGetApp().toolbar_icon_scale();
view_toolbar.set_scale(scale); //! #ys_FIXME_experiment
#if __APPLE__
view_toolbar.set_scale(scale);
#else // if GTK3
const float size = int(GLGizmosManager::Default_Icons_Size * scale);
view_toolbar.set_icons_size(size);
#endif // __APPLE__
#else
// m_view_toolbar.set_scale(m_canvas->GetContentScaleFactor());
// m_view_toolbar.set_scale(wxGetApp().em_unit()*0.1f);
const float size = int(GLGizmosManager::Default_Icons_Size * wxGetApp().toolbar_icon_scale());
view_toolbar.set_icons_size(size); //! #ys_FIXME_experiment
view_toolbar.set_icons_size(size);
#endif // ENABLE_RETINA_GL
Size cnv_size = get_canvas_size();
@ -6451,5 +6488,10 @@ void GLCanvas3D::WipeTowerInfo::apply_wipe_tower() const
wxGetApp().get_tab(Preset::TYPE_PRINT)->load_config(cfg);
}
void GLCanvas3D::RenderTimer::Notify()
{
wxPostEvent((wxEvtHandler*)GetOwner(), RenderTimerEvent( EVT_GLCANVAS_RENDER_TIMER, *this));
}
} // namespace GUI
} // namespace Slic3r

View file

@ -31,8 +31,9 @@ class wxPaintEvent;
class wxGLCanvas;
class wxGLContext;
// Support for Retina OpenGL on Mac OS
#define ENABLE_RETINA_GL __APPLE__
// Support for Retina OpenGL on Mac OS.
// wxGTK3 seems to simulate OSX behavior in regard to HiDPI scaling support, enable it as well.
#define ENABLE_RETINA_GL (__APPLE__ || __WXGTK3__)
namespace Slic3r {
@ -73,6 +74,25 @@ public:
};
class RenderTimerEvent : public wxEvent
{
public:
RenderTimerEvent(wxEventType type, wxTimer& timer)
: wxEvent(timer.GetId(), type),
m_timer(&timer)
{
SetEventObject(timer.GetOwner());
}
int GetInterval() const { return m_timer->GetInterval(); }
wxTimer& GetTimer() const { return *m_timer; }
virtual wxEvent* Clone() const { return new RenderTimerEvent(*this); }
virtual wxEventCategory GetEventCategory() const { return wxEVT_CATEGORY_TIMER; }
private:
wxTimer* m_timer;
};
wxDECLARE_EVENT(EVT_GLCANVAS_OBJECT_SELECT, SimpleEvent);
using Vec2dEvent = Event<Vec2d>;
@ -118,6 +138,7 @@ wxDECLARE_EVENT(EVT_GLCANVAS_RESET_LAYER_HEIGHT_PROFILE, SimpleEvent);
wxDECLARE_EVENT(EVT_GLCANVAS_ADAPTIVE_LAYER_HEIGHT_PROFILE, Event<float>);
wxDECLARE_EVENT(EVT_GLCANVAS_SMOOTH_LAYER_HEIGHT_PROFILE, HeightProfileSmoothEvent);
wxDECLARE_EVENT(EVT_GLCANVAS_RELOAD_FROM_DISK, SimpleEvent);
wxDECLARE_EVENT(EVT_GLCANVAS_RENDER_TIMER, wxTimerEvent/*RenderTimerEvent*/);
class GLCanvas3D
{
@ -328,7 +349,7 @@ class GLCanvas3D
public:
void add_frame(int64_t frame) {
int64_t now = wxGetLocalTimeMillis().GetValue();
int64_t now = GLCanvas3D::timestamp_now();
if (!m_frames.empty() && now - m_frames.front().first > 1000) {
m_curr_total -= m_frames.front().second;
m_frames.pop();
@ -390,6 +411,11 @@ class GLCanvas3D
static float get_window_width() { return s_window_width; };
};
class RenderTimer : public wxTimer {
private:
virtual void Notify() override;
};
public:
enum ECursorType : unsigned char
{
@ -428,11 +454,15 @@ private:
// when true renders an extra frame by not resetting m_dirty to false
// see request_extra_frame()
bool m_extra_frame_requested;
int m_extra_frame_requested_delayed { std::numeric_limits<int>::max() };
bool m_event_handlers_bound{ false };
mutable GLVolumeCollection m_volumes;
GCodeViewer m_gcode_viewer;
RenderTimer m_render_timer;
int64_t m_render_timer_start;
Selection m_selection;
const DynamicPrintConfig* m_config;
Model* m_model;
@ -649,6 +679,7 @@ public:
void on_key(wxKeyEvent& evt);
void on_mouse_wheel(wxMouseEvent& evt);
void on_timer(wxTimerEvent& evt);
void on_render_timer(wxTimerEvent& evt);
void on_mouse(wxMouseEvent& evt);
void on_paint(wxPaintEvent& evt);
void on_set_focus(wxFocusEvent& evt);
@ -711,6 +742,7 @@ public:
void msw_rescale();
void request_extra_frame() { m_extra_frame_requested = true; }
void request_extra_frame_delayed(int miliseconds);
int get_main_toolbar_item_id(const std::string& name) const { return m_main_toolbar.get_item_id(name); }
void force_main_toolbar_left_action(int item_id) { m_main_toolbar.force_left_action(item_id, *this); }
@ -741,6 +773,17 @@ public:
return ret;
}
// Timestamp for FPS calculation and notification fade-outs.
static int64_t timestamp_now() {
#ifdef _WIN32
// Cheaper on Windows, calls GetSystemTimeAsFileTime()
return wxGetUTCTimeMillis().GetValue();
#else
// calls clock()
return wxGetLocalTimeMillis().GetValue();
#endif
}
private:
bool _is_shown_on_screen() const;

View file

@ -3,12 +3,14 @@
#include "GUI_Init.hpp"
#include "GUI_ObjectList.hpp"
#include "GUI_ObjectManipulation.hpp"
#include "format.hpp"
#include "I18N.hpp"
#include <algorithm>
#include <iterator>
#include <exception>
#include <cstdlib>
#include <regex>
#include <boost/algorithm/string.hpp>
#include <boost/format.hpp>
#include <boost/lexical_cast.hpp>
@ -129,7 +131,7 @@ public:
memDC.SetFont(m_action_font);
memDC.SetTextForeground(wxColour(237, 107, 33));
memDC.DrawText(text, int(m_scale * 60), int(m_scale * 275));
memDC.DrawText(text, int(m_scale * 60), m_action_line_y_position);
memDC.SelectObject(wxNullBitmap);
set_bitmap(bitmap);
@ -204,14 +206,22 @@ public:
memDc.SetFont(m_constant_text.version_font);
memDc.DrawLabel(m_constant_text.version, banner_rect, wxALIGN_TOP | wxALIGN_LEFT);
int version_height = memDc.GetTextExtent(m_constant_text.version).GetY();
memDc.SetFont(m_constant_text.credits_font);
memDc.DrawLabel(m_constant_text.credits, banner_rect, wxALIGN_BOTTOM | wxALIGN_LEFT);
int credits_height = memDc.GetMultiLineTextExtent(m_constant_text.credits).GetY();
int text_height = memDc.GetTextExtent("text").GetY();
// calculate position for the dynamic text
int logo_and_header_height = margin + logo_size + title_height + version_height;
m_action_line_y_position = logo_and_header_height + 0.5 * (bmp.GetHeight() - margin - credits_height - logo_and_header_height - text_height);
}
private:
wxBitmap m_main_bitmap;
wxFont m_action_font;
int m_action_line_y_position;
float m_scale {1.0};
struct ConstantText
@ -256,7 +266,8 @@ private:
float title_font_scale = (float)text_banner_width / GetTextExtent(m_constant_text.title).GetX();
scale_font(m_constant_text.title_font, title_font_scale > 3.5f ? 3.5f : title_font_scale);
scale_font(m_constant_text.version_font, 2.f);
float version_font_scale = (float)text_banner_width / GetTextExtent(m_constant_text.version).GetX();
scale_font(m_constant_text.version_font, version_font_scale > 2.f ? 2.f : version_font_scale);
// The width of the credits information string doesn't respect to the banner width some times.
// So, scale credits_font in the respect to the longest string width
@ -667,14 +678,20 @@ wxGLContext* GUI_App::init_glcontext(wxGLCanvas& canvas)
bool GUI_App::init_opengl()
{
#ifdef __linux__
bool status = m_opengl_mgr.init_gl();
m_opengl_initialized = true;
return status;
#else
return m_opengl_mgr.init_gl();
#endif
}
void GUI_App::init_app_config()
{
// Profiles for the alpha are stored into the PrusaSlicer-alpha directory to not mix with the current release.
// SetAppName(SLIC3R_APP_KEY);
SetAppName(SLIC3R_APP_KEY "-beta");
SetAppName(SLIC3R_APP_KEY);
// SetAppName(SLIC3R_APP_KEY "-beta");
// SetAppDisplayName(SLIC3R_APP_NAME);
// Set the Slic3r data directory at the Slic3r XS module.
@ -745,7 +762,7 @@ bool GUI_App::on_init_inner()
#ifdef __linux__
if (! check_old_linux_datadir(GetAppName())) {
std::cerr << "Quitting, user chose to move his data to new location." << std::endl;
std::cerr << "Quitting, user chose to move their data to new location." << std::endl;
return false;
}
#endif
@ -884,6 +901,23 @@ bool GUI_App::on_init_inner()
m_printhost_job_queue.reset(new PrintHostJobQueue(mainframe->printhost_queue_dlg()));
if (is_gcode_viewer()) {
mainframe->update_layout();
if (plater_ != nullptr)
// ensure the selected technology is ptFFF
plater_->set_printer_technology(ptFFF);
}
else
load_current_presets();
mainframe->Show(true);
obj_list()->set_min_height();
update_mode(); // update view mode after fix of the object_list size
#ifdef __APPLE__
other_instance_message_handler()->bring_instance_forward();
#endif //__APPLE__
Bind(wxEVT_IDLE, [this](wxIdleEvent& event)
{
@ -897,7 +931,14 @@ bool GUI_App::on_init_inner()
this->obj_manipul()->update_if_dirty();
static bool update_gui_after_init = true;
// An ugly solution to GH #5537 in which GUI_App::init_opengl (normally called from events wxEVT_PAINT
// and wxEVT_SET_FOCUS before GUI_App::post_init is called) wasn't called before GUI_App::post_init and OpenGL wasn't initialized.
#ifdef __linux__
if (update_gui_after_init && m_opengl_initialized) {
#else
if (update_gui_after_init) {
#endif
update_gui_after_init = false;
#ifdef WIN32
this->mainframe->register_win32_callbacks();
@ -933,24 +974,6 @@ bool GUI_App::on_init_inner()
}
});
if (is_gcode_viewer()) {
mainframe->update_layout();
if (plater_ != nullptr)
// ensure the selected technology is ptFFF
plater_->set_printer_technology(ptFFF);
}
else
load_current_presets();
mainframe->Show(true);
obj_list()->set_min_height();
update_mode(); // update view mode after fix of the object_list size
#ifdef __APPLE__
other_instance_message_handler()->bring_instance_forward();
#endif //__APPLE__
m_initialized = true;
return true;
}
@ -1271,22 +1294,85 @@ bool GUI_App::switch_language()
}
}
#ifdef __linux__
static const wxLanguageInfo* linux_get_existing_locale_language(const wxLanguageInfo* language,
const wxLanguageInfo* system_language)
{
constexpr size_t max_len = 50;
char path[max_len] = "";
std::vector<std::string> locales;
const std::string lang_prefix = into_u8(language->CanonicalName.BeforeFirst('_'));
// Call locale -a so we can parse the output to get the list of available locales
// We expect lines such as "en_US.utf8". Pick ones starting with the language code
// we are switching to. Lines with different formatting will be removed later.
FILE* fp = popen("locale -a", "r");
if (fp != NULL) {
while (fgets(path, max_len, fp) != NULL) {
std::string line(path);
line = line.substr(0, line.find('\n'));
if (boost::starts_with(line, lang_prefix))
locales.push_back(line);
}
pclose(fp);
}
// locales now contain all candidates for this language.
// Sort them so ones containing anything about UTF-8 are at the end.
std::sort(locales.begin(), locales.end(), [](const std::string& a, const std::string& b)
{
auto has_utf8 = [](const std::string & s) {
auto S = boost::to_upper_copy(s);
return S.find("UTF8") != std::string::npos || S.find("UTF-8") != std::string::npos;
};
return ! has_utf8(a) && has_utf8(b);
});
// Remove the suffix behind a dot, if there is one.
for (std::string& s : locales)
s = s.substr(0, s.find("."));
// We just hope that dear Linux "locale -a" returns country codes
// in ISO 3166-1 alpha-2 code (two letter) format.
// https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
// To be sure, remove anything not looking as expected
// (any number of lowercase letters, underscore, two uppercase letters).
locales.erase(std::remove_if(locales.begin(),
locales.end(),
[](const std::string& s) {
return ! std::regex_match(s,
std::regex("^[a-z]+_[A-Z]{2}$"));
}),
locales.end());
// Is there a candidate matching a country code of a system language? Move it to the end,
// while maintaining the order of matches, so that the best match ends up at the very end.
std::string system_country = "_" + into_u8(system_language->CanonicalName.AfterFirst('_')).substr(0, 2);
int cnt = locales.size();
for (int i=0; i<cnt; ++i)
if (locales[i].find(system_country) != std::string::npos) {
locales.emplace_back(std::move(locales[i]));
locales[i].clear();
}
// Now try them one by one.
for (auto it = locales.rbegin(); it != locales.rend(); ++ it)
if (! it->empty()) {
const std::string &locale = *it;
const wxLanguageInfo* lang = wxLocale::FindLanguageInfo(from_u8(locale));
if (wxLocale::IsAvailable(lang->Language))
return lang;
}
return language;
}
#endif
// select language from the list of installed languages
bool GUI_App::select_language()
{
wxArrayString translations = wxTranslations::Get()->GetAvailableTranslations(SLIC3R_APP_KEY);
std::vector<const wxLanguageInfo*> language_infos;
language_infos.emplace_back(wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH));
#ifdef __linux__
// wxWidgets consider the default English locale to be en_GB, which is often missing on Linux.
// Thus we offer en_US on Linux as well.
language_infos.emplace_back(wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH_US));
//FIXME https://github.com/prusa3d/PrusaSlicer/issues/2580#issuecomment-524546743
// In a correctly set up system, "locale -a" will get all the installed locales on that system.
// According to the installed locales, the locales for the dictionaries may be modified with the available
// CanonicalName of the locale, possibly duplicating the entries for each CanonicalName of the dictionary.
// Other languages with missing locales of the system can be greyed out or not shown at all.
#endif // __linux__
for (size_t i = 0; i < translations.GetCount(); ++ i) {
const wxLanguageInfo *langinfo = wxLocale::FindLanguageInfo(translations[i]);
if (langinfo != nullptr)
@ -1315,13 +1401,6 @@ bool GUI_App::select_language()
if (language_infos[i]->CanonicalName.BeforeFirst('_') == "en")
// This will be the default selection if the active language does not match any dictionary.
init_selection_default = i;
#ifdef __linux__
// wxWidgets consider the default English locale to be en_GB, which is often missing on Linux.
// Thus we make the distintion between "en_US" and "en_GB" clear.
if (language_infos[i]->CanonicalName == "en_GB" && language_infos[i]->Description == "English")
names.Add("English (U.K.)");
else
#endif // __linux__
names.Add(language_infos[i]->Description);
}
if (init_selection == -1)
@ -1388,6 +1467,14 @@ bool GUI_App::load_language(wxString language, bool initial)
m_language_info_best = wxLocale::FindLanguageInfo(best_language);
BOOST_LOG_TRIVIAL(trace) << boost::format("Best translation language detected (may be different from user locales): %1%") % m_language_info_best->CanonicalName.ToUTF8().data();
}
#ifdef __linux__
wxString lc_all;
if (wxGetEnv("LC_ALL", &lc_all) && ! lc_all.IsEmpty()) {
// Best language returned by wxWidgets on Linux apparently does not respect LC_ALL.
// Disregard the "best" suggestion in case LC_ALL is provided.
m_language_info_best = nullptr;
}
#endif
}
}
@ -1433,6 +1520,17 @@ bool GUI_App::load_language(wxString language, bool initial)
} else if (m_language_info_system != nullptr && language_info->CanonicalName.BeforeFirst('_') == m_language_info_system->CanonicalName.BeforeFirst('_'))
language_info = m_language_info_system;
#ifdef __linux__
// If we can't find this locale , try to use different one for the language
// instead of just reporting that it is impossible to switch.
if (! wxLocale::IsAvailable(language_info->Language)) {
std::string original_lang = into_u8(language_info->CanonicalName);
language_info = linux_get_existing_locale_language(language_info, m_language_info_system);
BOOST_LOG_TRIVIAL(trace) << boost::format("Can't switch language to %1% (missing locales). Using %2% instead.")
% original_lang % language_info->CanonicalName.ToUTF8().data();
}
#endif
if (! wxLocale::IsAvailable(language_info->Language)) {
// Loading the language dictionary failed.
wxString message = "Switching PrusaSlicer to language " + language_info->CanonicalName + " failed.";
@ -1719,7 +1817,7 @@ bool GUI_App::check_print_host_queue()
// Show dialog
wxString job_string = wxString();
for (const auto& job : jobs) {
job_string += (boost::format(" %1% : %2% \n") % job.first % job.second).str();
job_string += format_wxstr(" %1% : %2% \n", job.first, job.second);
}
wxString message;
message += _(L("The uploads are still ongoing")) + ":\n\n" + job_string +"\n" + _(L("Stop them and continue anyway?"));
@ -1777,11 +1875,9 @@ bool GUI_App::OnExceptionInMainLoop()
void GUI_App::OSXStoreOpenFiles(const wxArrayString &fileNames)
{
size_t num_gcodes = 0;
for (const wxString &filename : fileNames) {
wxString fn = filename.Upper();
if (fn.EndsWith(".G") || fn.EndsWith(".GCODE"))
for (const wxString &filename : fileNames)
if (is_gcode_file(into_u8(filename)))
++ num_gcodes;
}
if (fileNames.size() == num_gcodes) {
// Opening PrusaSlicer by drag & dropping a G-Code onto PrusaSlicer icon in Finder,
// just G-codes were passed. Switch to G-code viewer mode.
@ -1801,8 +1897,7 @@ void GUI_App::MacOpenFiles(const wxArrayString &fileNames)
std::vector<wxString> gcode_files;
std::vector<wxString> non_gcode_files;
for (const auto& filename : fileNames) {
wxString fn = filename.Upper();
if (fn.EndsWith(".G") || fn.EndsWith(".GCODE"))
if (is_gcode_file(into_u8(filename)))
gcode_files.emplace_back(filename);
else {
files.emplace_back(into_u8(filename));

View file

@ -109,6 +109,9 @@ private:
bool m_app_conf_exists{ false };
EAppMode m_app_mode{ EAppMode::Editor };
bool m_is_recreating_gui{ false };
#ifdef __linux__
bool m_opengl_initialized{ false };
#endif
wxColour m_color_label_modified;
wxColour m_color_label_sys;

View file

@ -261,10 +261,10 @@ ObjectList::~ObjectList()
void ObjectList::set_min_height()
{
/* Temporary workaround for the correct behavior of the Scrolled sidebar panel:
* change min hight of object list to the normal min value (35 * wxGetApp().em_unit())
* change min hight of object list to the normal min value (20 * wxGetApp().em_unit())
* after first whole Mainframe updating/layouting
*/
const int list_min_height = 35 * wxGetApp().em_unit();
const int list_min_height = 20 * wxGetApp().em_unit();
if (this->GetMinSize().GetY() > list_min_height)
this->SetMinSize(wxSize(-1, list_min_height));
}
@ -274,7 +274,7 @@ void ObjectList::create_objects_ctrl()
{
/* Temporary workaround for the correct behavior of the Scrolled sidebar panel:
* 1. set a height of the list to some big value
* 2. change it to the normal min value (15 * wxGetApp().em_unit()) after first whole Mainframe updating/layouting
* 2. change it to the normal min value (20 * wxGetApp().em_unit()) after first whole Mainframe updating/layouting
*/
SetMinSize(wxSize(-1, 3000));
@ -1070,6 +1070,8 @@ bool ObjectList::copy_to_clipboard()
{
wxDataViewItemArray sels;
GetSelections(sels);
if (sels.IsEmpty())
return false;
ItemType type = m_objects_model->GetItemType(sels.front());
if (!(type & (itSettings | itLayer | itLayerRoot))) {
m_clipboard.reset();
@ -2391,6 +2393,8 @@ void ObjectList::del_settings_from_config(const wxDataViewItem& parent_item)
m_config->set_key_value("extruder", new ConfigOptionInt(extruder));
if (is_layer_settings)
m_config->set_key_value("layer_height", new ConfigOptionFloat(layer_height));
changed_object();
}
void ObjectList::del_instances_from_object(const int obj_idx)

View file

@ -420,7 +420,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) :
m_main_grid_sizer->Add(editors_grid_sizer, 1, wxEXPAND);
m_check_inch = new wxCheckBox(parent, wxID_ANY, "Inches");
m_check_inch = new wxCheckBox(parent, wxID_ANY, _L("Inches"));
m_check_inch->SetFont(wxGetApp().normal_font());
m_check_inch->SetValue(m_imperial_units);

View file

@ -84,9 +84,8 @@ void GLGizmoCut::on_start_dragging()
void GLGizmoCut::on_update(const UpdateData& data)
{
if (m_hover_id != -1) {
if (m_hover_id != -1)
set_cut_z(m_start_z + calc_projection(data.mouse_ray));
}
}
void GLGizmoCut::on_render() const
@ -149,7 +148,7 @@ void GLGizmoCut::on_render_input_window(float x, float y, float bottom_limit)
static float last_y = 0.0f;
static float last_h = 0.0f;
m_imgui->begin(_(L("Cut")), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse);
m_imgui->begin(_L("Cut"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse);
bool imperial_units = wxGetApp().app_config->get("use_inches") == "1";
@ -157,8 +156,7 @@ void GLGizmoCut::on_render_input_window(float x, float y, float bottom_limit)
float win_h = ImGui::GetWindowHeight();
y = std::min(y, bottom_limit - win_h);
ImGui::SetWindowPos(ImVec2(x, y), ImGuiCond_Always);
if ((last_h != win_h) || (last_y != y))
{
if (last_h != win_h || last_y != y) {
// ask canvas for another frame to render the window in the correct position
m_parent.request_extra_frame();
if (last_h != win_h)
@ -180,26 +178,24 @@ void GLGizmoCut::on_render_input_window(float x, float y, float bottom_limit)
ImGui::SameLine();
m_imgui->text(imperial_units ? _L("in") : _L("mm"));
if (imperial_units)
m_cut_z = cut_z * ObjectManipulation::in_to_mm;
m_cut_z = cut_z * (imperial_units ? ObjectManipulation::in_to_mm : 1.0);
ImGui::Separator();
m_imgui->checkbox(_(L("Keep upper part")), m_keep_upper);
m_imgui->checkbox(_(L("Keep lower part")), m_keep_lower);
m_imgui->checkbox(_(L("Rotate lower part upwards")), m_rotate_lower);
m_imgui->checkbox(_L("Keep upper part"), m_keep_upper);
m_imgui->checkbox(_L("Keep lower part"), m_keep_lower);
m_imgui->checkbox(_L("Rotate lower part upwards"), m_rotate_lower);
ImGui::Separator();
m_imgui->disabled_begin(!m_keep_upper && !m_keep_lower);
const bool cut_clicked = m_imgui->button(_(L("Perform cut")));
m_imgui->disabled_begin((!m_keep_upper && !m_keep_lower) || m_cut_z <= 0.0 || m_max_z < m_cut_z);
const bool cut_clicked = m_imgui->button(_L("Perform cut"));
m_imgui->disabled_end();
m_imgui->end();
if (cut_clicked && (m_keep_upper || m_keep_lower)) {
if (cut_clicked && (m_keep_upper || m_keep_lower))
perform_cut(m_parent.get_selection());
}
}
void GLGizmoCut::update_max_z(const Selection& selection) const

View file

@ -963,6 +963,8 @@ void ImGuiWrapper::init_font(bool compress)
// Fill rectangles from the SVG-icons
for (auto icon : font_icons) {
if (const ImFontAtlas::CustomRect* rect = io.Fonts->GetCustomRectByIndex(rect_id)) {
assert(rect->Width == icon_sz);
assert(rect->Height == icon_sz);
std::vector<unsigned char> raw_data = load_svg(icon.second, icon_sz, icon_sz);
const ImU32* pIn = (ImU32*)raw_data.data();
for (int y = 0; y < icon_sz; y++) {
@ -973,10 +975,12 @@ void ImGuiWrapper::init_font(bool compress)
}
rect_id++;
}
icon_sz = lround(32 * font_scale); // default size of large icon is 32 px
icon_sz *= 2; // default size of large icon is 32 px
for (auto icon : font_icons_large) {
if (const ImFontAtlas::CustomRect* rect = io.Fonts->GetCustomRectByIndex(rect_id)) {
assert(rect->Width == icon_sz);
assert(rect->Height == icon_sz);
std::vector<unsigned char> raw_data = load_svg(icon.second, icon_sz, icon_sz);
const ImU32* pIn = (ImU32*)raw_data.data();
for (int y = 0; y < icon_sz; y++) {

View file

@ -73,9 +73,14 @@ void FillBedJob::prepare()
// This is the maximum number of items, the real number will always be close but less.
int needed_items = (bed_area - fixed_area) / poly_area;
ModelInstance *mi = model_object->instances[0];
int sel_id = m_plater->get_selection().get_instance_idx();
// if the selection is not a single instance, choose the first as template
sel_id = std::max(sel_id, 0);
ModelInstance *mi = model_object->instances[sel_id];
ArrangePolygon template_ap = get_arrange_poly(PtrWrapper{mi}, m_plater);
for (int i = 0; i < needed_items; ++i) {
ArrangePolygon ap;
ArrangePolygon ap = template_ap;
ap.poly = m_selected.front().poly;
ap.bed_idx = arrangement::UNARRANGED;
ap.setter = [this, mi](const ArrangePolygon &p) {

View file

@ -234,7 +234,7 @@ void KBShortcutsDialog::fill_shortcuts()
{ ctrl, L("Press to speed up 5 times while moving thumb\nwith arrow keys or mouse wheel") },
};
m_full_shortcuts.push_back({ { _L("Vertical Slider"), _L("The following shortcuts are applicable when the vertical slider, in preview, is active") }, layers_slider_shortcuts });
m_full_shortcuts.push_back({ { _L("Vertical Slider"), _L("The following shortcuts are applicable in G-code preview when the vertical slider is active") }, layers_slider_shortcuts });
Shortcuts sequential_slider_shortcuts = {
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
@ -250,7 +250,7 @@ void KBShortcutsDialog::fill_shortcuts()
{ ctrl, L("Press to speed up 5 times while moving thumb\nwith arrow keys or mouse wheel") },
};
m_full_shortcuts.push_back({ { _L("Horizontal Slider"), _L("The following shortcuts are applicable when the horizontal slider, in preview, is active") }, sequential_slider_shortcuts });
m_full_shortcuts.push_back({ { _L("Horizontal Slider"), _L("The following shortcuts are applicable in G-code preview when the horizontal slider is active") }, sequential_slider_shortcuts });
}
wxPanel* KBShortcutsDialog::create_header(wxWindow* parent, const wxFont& bold_font)

View file

@ -59,10 +59,9 @@ public:
PrusaSlicerTaskBarIcon(wxTaskBarIconType iconType = wxTBI_DEFAULT_TYPE) : wxTaskBarIcon(iconType) {}
wxMenu *CreatePopupMenu() override {
wxMenu *menu = new wxMenu;
if(wxGetApp().app_config->get("single_instance") == "1") {
if(wxGetApp().app_config->get("single_instance") == "0") {
// Only allow opening a new PrusaSlicer instance on OSX if "single_instance" is disabled,
// as starting new instances would interfere with the locking mechanism of "single_instance" support.
//FIXME Vojtech thinks the condition is wrong.
append_menu_item(menu, wxID_ANY, _L("Open new instance"), _L("Open a new PrusaSlicer instance"),
[this](wxCommandEvent&) { start_new_slicer(); }, "", nullptr);
}
@ -229,7 +228,8 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
// OSX specific issue:
// When we move application between Retina and non-Retina displays, The legend on a canvas doesn't redraw
// So, redraw explicitly canvas, when application is moved
#if ENABLE_RETINA_GL
//FIXME maybe this is useful for __WXGTK3__ as well?
#if __APPLE__
Bind(wxEVT_MOVE, [this](wxMoveEvent& event) {
wxGetApp().plater()->get_current_canvas3D()->set_as_dirty();
wxGetApp().plater()->get_current_canvas3D()->request_extra_frame();

View file

@ -346,7 +346,6 @@ bool Mouse3DController::State::apply(const Mouse3DController::Params &params, Ca
if (params.swap_yz)
rot = Vec3d(rot.x(), -rot.z(), rot.y());
camera.rotate_local_around_target(Vec3d(rot.x(), - rot.z(), rot.y()));
break;
} else {
assert(input_queue_item.is_buttons());
switch (input_queue_item.type_or_buttons) {
@ -895,7 +894,10 @@ bool Mouse3DController::connect_device()
if (device.second.size() == 1) {
#if defined(__linux__)
hid_device* test_device = hid_open(device.first.first, device.first.second, nullptr);
if (test_device != nullptr) {
if (test_device == nullptr) {
BOOST_LOG_TRIVIAL(error) << "3DConnexion device cannot be opened: " << device.second.front().path <<
" You may need to update /etc/udev/rules.d";
} else {
hid_close(test_device);
#else
if (device.second.front().has_valid_usage()) {
@ -940,11 +942,14 @@ bool Mouse3DController::connect_device()
break;
}
#endif // __linux__
else {
BOOST_LOG_TRIVIAL(error) << "3DConnexion device cannot be opened: " << data.path <<
" You may need to update /etc/udev/rules.d";
#if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
else
std::cout << "-> NOT PASSED" << std::endl;
#endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
}
}
if (found)
break;

View file

@ -9,6 +9,7 @@
#include "hidapi.h"
#include <queue>
#include <atomic>
#include <thread>
#include <vector>
#include <chrono>

View file

@ -77,7 +77,7 @@ ErrorDialog::ErrorDialog(wxWindow *parent, const wxString &msg, bool monospaced_
{
html->SetMinSize(wxSize(40 * wxGetApp().em_unit(), monospaced_font ? 30 * wxGetApp().em_unit() : -1));
wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
wxFont monospace = wxSystemSettings::GetFont(wxSYS_ANSI_FIXED_FONT);
wxFont monospace = wxGetApp().code_font();
wxColour text_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
auto text_clr_str = wxString::Format(wxT("#%02X%02X%02X"), text_clr.Red(), text_clr.Green(), text_clr.Blue());

View file

@ -20,8 +20,11 @@ static constexpr float GAP_WIDTH = 10.0f;
static constexpr float SPACE_RIGHT_PANEL = 10.0f;
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
static constexpr float FADING_OUT_DURATION = 2.0f;
// Time in Miliseconds after next render is requested
// Time in Miliseconds after next render when fading out is requested
static constexpr int FADING_OUT_TIMEOUT = 100;
// If timeout is changed to higher than 1 second, substract_time call should be revorked
//static constexpr int MAX_TIMEOUT_MILISECONDS = 1000;
//static constexpr int MAX_TIMEOUT_SECONDS = 1;
#endif // ENABLE_NEW_NOTIFICATIONS_FADE_OUT
namespace Slic3r {
@ -136,17 +139,25 @@ NotificationManager::PopNotification::PopNotification(const NotificationData &n,
, m_hypertext (n.hypertext)
, m_text2 (n.text2)
, m_evt_handler (evt_handler)
, m_notification_start (GLCanvas3D::timestamp_now())
{
//init();
}
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
void NotificationManager::PopNotification::render(GLCanvas3D& canvas, float initial_y, bool move_from_overlay, float overlay_width)
{
if (!m_initialized) {
init();
}
if (m_hidden) {
m_top_y = initial_y - GAP_WIDTH;
return;
}
if (m_fading_out)
m_last_render_fading = GLCanvas3D::timestamp_now();
Size cnv_size = canvas.get_canvas_size();
ImGuiWrapper& imgui = *wxGetApp().imgui();
ImVec2 mouse_pos = ImGui::GetMousePos();
@ -747,49 +758,66 @@ void NotificationManager::PopNotification::update_state()
if (!m_initialized)
init();
m_next_render = std::numeric_limits<int64_t>::max();
if (m_hidden) {
m_state = EState::Hidden;
return;
}
int64_t now = GLCanvas3D::timestamp_now();
if (m_hovered) {
// reset fading
m_fading_out = false;
m_current_fade_opacity = 1.0f;
m_remaining_time = m_data.duration;
m_notification_start = now;
}
if (m_counting_down) {
int64_t up_time = now - m_notification_start;
if (m_fading_out && m_current_fade_opacity <= 0.0f)
m_finished = true;
else if (!m_fading_out && m_remaining_time == 0) {
else if (!m_fading_out && /*m_remaining_time <=0*/up_time >= m_data.duration * 1000) {
m_fading_out = true;
m_fading_start = wxGetLocalTimeMillis();
m_fading_start = now;
m_last_render_fading = now;
} else if (!m_fading_out) {
m_next_render = m_data.duration * 1000 - up_time;//std::min<int64_t>(/*m_data.duration * 1000 - up_time*/m_remaining_time * 1000, MAX_TIMEOUT_MILISECONDS);
}
}
if (m_finished) {
m_state = EState::Finished;
m_next_render = 0;
return;
}
if (m_close_pending) {
m_finished = true;
m_state = EState::ClosePending;
m_next_render = 0;
return;
}
if (m_fading_out) {
if (!m_paused) {
m_state = EState::FadingOutStatic;
wxMilliClock_t curr_time = wxGetLocalTimeMillis() - m_fading_start;
wxMilliClock_t no_render_time = wxGetLocalTimeMillis() - m_last_render_fading;
m_current_fade_opacity = std::clamp(1.0f - 0.001f * static_cast<float>(curr_time.GetValue()) / FADING_OUT_DURATION, 0.0f, 1.0f);
if (no_render_time > FADING_OUT_TIMEOUT) {
m_last_render_fading = wxGetLocalTimeMillis();
int64_t curr_time = now - m_fading_start;
int64_t no_render_time = now - m_last_render_fading;
m_current_fade_opacity = std::clamp(1.0f - 0.001f * static_cast<float>(curr_time) / FADING_OUT_DURATION, 0.0f, 1.0f);
auto next_render = FADING_OUT_TIMEOUT - no_render_time;
if (next_render <= 0) {
//m_last_render_fading = GLCanvas3D::timestamp_now();
m_state = EState::FadingOutRender;
m_next_render = 0;
} else
m_next_render = next_render;
}
}
}
}
#endif // ENABLE_NEW_NOTIFICATIONS_FADE_OUT
@ -919,7 +947,7 @@ void NotificationManager::ExportFinishedNotification::render_eject_button(ImGuiW
if (m_hover_time > 0 && m_hover_time < time_now) {
ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND);
ImGui::BeginTooltip();
imgui.text(_u8L("Eject drive"));
imgui.text(_u8L("Eject drive") + " " + GUI::shortkey_ctrl_prefix() + "T");
ImGui::EndTooltip();
ImGui::PopStyleColor();
}
@ -1011,7 +1039,13 @@ void NotificationManager::push_notification(const std::string& text, int timesta
{
push_notification_data({ NotificationType::CustomNotification, NotificationLevel::RegularNotification, 10, text }, timestamp);
}
void NotificationManager::push_notification(const std::string& text, NotificationManager::NotificationLevel level, int timestamp)
void NotificationManager::push_notification(NotificationType type,
NotificationLevel level,
const std::string& text,
const std::string& hypertext,
std::function<bool(wxEvtHandler*)> callback,
int timestamp)
{
int duration = 0;
switch (level) {
@ -1022,7 +1056,7 @@ void NotificationManager::push_notification(const std::string& text, Notificatio
assert(false);
return;
}
push_notification_data({ NotificationType::CustomNotification, level, duration, text }, timestamp);
push_notification_data({ type, level, duration, text, hypertext, callback }, timestamp);
}
void NotificationManager::push_slicing_error_notification(const std::string& text)
{
@ -1181,10 +1215,11 @@ bool NotificationManager::push_notification_data(const NotificationData& notific
}
bool NotificationManager::push_notification_data(std::unique_ptr<NotificationManager::PopNotification> notification, int timestamp)
{
/*
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
m_requires_update = true;
#endif // ENABLE_NEW_NOTIFICATIONS_FADE_OUT
*/
// if timestamped notif, push only new one
if (timestamp != 0) {
if (m_used_timestamps.find(timestamp) == m_used_timestamps.end()) {
@ -1209,6 +1244,7 @@ bool NotificationManager::push_notification_data(std::unique_ptr<NotificationMan
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
void NotificationManager::render_notifications(float overlay_width)
{
sort_notifications();
GLCanvas3D& canvas = *wxGetApp().plater()->get_current_canvas3D();
@ -1222,6 +1258,7 @@ void NotificationManager::render_notifications(float overlay_width)
}
}
update_notifications();
}
#else
void NotificationManager::render_notifications(float overlay_width)
@ -1342,6 +1379,14 @@ void NotificationManager::set_in_preview(bool preview)
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
void NotificationManager::update_notifications()
{
// no update if not top window
wxWindow* p = dynamic_cast<wxWindow*>(wxGetApp().plater());
while (p->GetParent() != nullptr)
p = p->GetParent();
wxTopLevelWindow* top_level_wnd = dynamic_cast<wxTopLevelWindow*>(p);
if (!top_level_wnd->IsActive())
return;
static size_t last_size = m_pop_notifications.size();
for (auto it = m_pop_notifications.begin(); it != m_pop_notifications.end();) {
@ -1354,7 +1399,7 @@ void NotificationManager::update_notifications()
++it;
}
}
/*
m_requires_update = false;
for (const std::unique_ptr<PopNotification>& notification : m_pop_notifications) {
if (notification->requires_update()) {
@ -1362,7 +1407,7 @@ void NotificationManager::update_notifications()
break;
}
}
*/
// update hovering state
m_hovered = false;
for (const std::unique_ptr<PopNotification>& notification : m_pop_notifications) {
@ -1372,6 +1417,7 @@ void NotificationManager::update_notifications()
}
}
/*
// Reuire render if some notification was just deleted.
size_t curr_size = m_pop_notifications.size();
m_requires_render = m_hovered || (last_size != curr_size);
@ -1389,7 +1435,20 @@ void NotificationManager::update_notifications()
// Make sure there will be update after last notification erased
if (m_requires_render)
m_requires_update = true;
*/
//request frames
int64_t next_render = std::numeric_limits<int64_t>::max();
const int64_t max = std::numeric_limits<int64_t>::max();
for (const std::unique_ptr<PopNotification>& notification : m_pop_notifications) {
next_render = std::min<int64_t>(next_render, notification->next_render());
}
if (next_render == 0)
wxGetApp().plater()->get_current_canvas3D()->request_extra_frame();
else if (next_render < max)
wxGetApp().plater()->get_current_canvas3D()->request_extra_frame_delayed(int(next_render));
/*
// actualizate timers
wxWindow* p = dynamic_cast<wxWindow*>(wxGetApp().plater());
while (p->GetParent() != nullptr)
@ -1404,15 +1463,16 @@ void NotificationManager::update_notifications()
long now = wxGetLocalTime();
// Pausing fade-out when the mouse is over some notification.
if (!m_hovered && m_last_time < now) {
if (now - m_last_time >= 1) {
if (now - m_last_time >= MAX_TIMEOUT_SECONDS) {
for (auto& notification : m_pop_notifications) {
//if (notification->get_state() != PopNotification::EState::Static)
notification->substract_remaining_time();
}
notification->substract_remaining_time(MAX_TIMEOUT_SECONDS);
}
m_last_time = now;
}
}
}
*/
}
#endif // ENABLE_NEW_NOTIFICATIONS_FADE_OUT

View file

@ -67,7 +67,9 @@ enum class NotificationType
// Progress bar instead of text.
ProgressBar,
// Notification, when Color Change G-code is empty and user try to add color change on DoubleSlider.
EmptyColorChangeCode
EmptyColorChangeCode,
// Notification that custom supports/seams were deleted after mesh repair.
CustomSupportsAndSeamRemovedAfterRepair
};
class NotificationManager
@ -97,7 +99,8 @@ public:
void push_notification(const std::string& text, int timestamp = 0);
// Push a NotificationType::CustomNotification with provided notification level and 10s for RegularNotification.
// ErrorNotification and ImportantNotification are never faded out.
void push_notification(const std::string& text, NotificationLevel level, int timestamp = 0);
void push_notification(NotificationType type, NotificationLevel level, const std::string& text, const std::string& hypertext = "",
std::function<bool(wxEvtHandler*)> callback = std::function<bool(wxEvtHandler*)>(), int timestamp = 0);
// Creates Slicing Error notification with a custom text and no fade out.
void push_slicing_error_notification(const std::string& text);
// Creates Slicing Warning notification with a custom text and no fade out.
@ -145,13 +148,13 @@ public:
void set_in_preview(bool preview);
// Move to left to avoid colision with variable layer height gizmo.
void set_move_from_overlay(bool move) { m_move_from_overlay = move; }
/*
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
void update_notifications();
bool requires_update() const { return m_requires_update; }
bool requires_render() const { return m_requires_render; }
#endif // ENABLE_NEW_NOTIFICATIONS_FADE_OUT
*/
private:
// duration 0 means not disapearing
struct NotificationData {
@ -186,6 +189,7 @@ private:
class PopNotification
{
public:
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
enum class EState
{
@ -206,6 +210,7 @@ private:
Hovered
};
#endif // ENABLE_NEW_NOTIFICATIONS_FADE_OUT
PopNotification(const NotificationData &n, NotificationIDProvider &id_provider, wxEvtHandler* evt_handler);
virtual ~PopNotification() { if (m_id) m_id_provider.release_id(m_id); }
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
@ -229,18 +234,21 @@ private:
const NotificationData get_data() const { return m_data; }
const bool is_gray() const { return m_is_gray; }
// Call equals one second down
void substract_remaining_time() { m_remaining_time--; }
void substract_remaining_time(int seconds) { m_remaining_time -= seconds; }
void set_gray(bool g) { m_is_gray = g; }
void set_paused(bool p) { m_paused = p; }
bool compare_text(const std::string& text);
void hide(bool h) { m_hidden = h; }
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
// sets m_next_render with time of next mandatory rendering
void update_state();
int64_t next_render() const { return m_next_render; }
/*
bool requires_render() const { return m_state == EState::FadingOutRender || m_state == EState::ClosePending || m_state == EState::Finished; }
bool requires_update() const { return m_state != EState::Hidden; }
*/
EState get_state() const { return m_state; }
#endif // ENABLE_NEW_NOTIFICATIONS_FADE_OUT
protected:
// Call after every size change
void init();
@ -275,9 +283,11 @@ private:
// For reusing ImGUI windows.
NotificationIDProvider &m_id_provider;
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
EState m_state { EState::Unknown };
#endif // ENABLE_NEW_NOTIFICATIONS_FADE_OUT
int m_id { 0 };
bool m_initialized { false };
// Main text
@ -294,8 +304,13 @@ private:
int m_countdown_frame { 0 };
bool m_fading_out { false };
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
wxMilliClock_t m_fading_start { 0LL };
wxMilliClock_t m_last_render_fading { 0LL };
int64_t m_fading_start { 0LL };
// time of last done render when fading
int64_t m_last_render_fading { 0LL };
// first appereance of notification or last hover;
int64_t m_notification_start;
// time to next must-do render
int64_t m_next_render { std::numeric_limits<int64_t>::max() };
#else
// total time left when fading beggins
float m_fading_time{ 0.0f };
@ -423,6 +438,10 @@ private:
void sort_notifications();
// If there is some error notification active, then the "Export G-code" notification after the slicing is finished is suppressed.
bool has_slicing_error_notification();
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
// perform update_state on each notification and ask for more frames if needed
void update_notifications();
#endif // ENABLE_NEW_NOTIFICATIONS_FADE_OUT
// Target for wxWidgets events sent by clicking on the hyperlink available at some notifications.
wxEvtHandler* m_evt_handler;
@ -439,11 +458,12 @@ private:
bool m_in_preview { false };
// True if the layer editing is enabled in Plater, so that the notifications are shifted left of it.
bool m_move_from_overlay { false };
/*
#if ENABLE_NEW_NOTIFICATIONS_FADE_OUT
bool m_requires_update{ false };
bool m_requires_render{ false };
#endif // ENABLE_NEW_NOTIFICATIONS_FADE_OUT
*/
//prepared (basic) notifications
const std::vector<NotificationData> basic_notifications = {
// {NotificationType::SlicingNotPossible, NotificationLevel::RegularNotification, 10, _u8L("Slicing is not possible.")},

View file

@ -544,7 +544,7 @@ void PhysicalPrinterDialog::OnOK(wxEvent& event)
return;
}
if (printer_name == m_default_name) {
warning_catcher(this, _L("You should to change a name of your printer device. It can't be saved."));
warning_catcher(this, _L("You should change the name of your printer device."));
return;
}

View file

@ -630,7 +630,7 @@ void Sidebar::priv::show_preset_comboboxes()
// Sidebar / public
Sidebar::Sidebar(Plater *parent)
: wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(40 * wxGetApp().em_unit(), -1)), p(new priv(parent))
: wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(42 * wxGetApp().em_unit(), -1)), p(new priv(parent))
{
p->scrolled = new wxScrolledWindow(this);
p->scrolled->SetScrollbars(0, 100, 1, 2);
@ -1336,6 +1336,9 @@ void Sidebar::update_ui_from_settings()
p->object_manipulation->update_ui_from_settings();
show_info_sizer();
update_sliced_info_sizer();
// update Cut gizmo, if it's open
p->plater->canvas3D()->update_gizmos_on_off_state();
p->plater->canvas3D()->request_extra_frame();
}
std::vector<PlaterPresetComboBox*>& Sidebar::combos_filament()
@ -2121,11 +2124,15 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
if (evt.data.second) {
this->show_action_buttons(this->ready_to_slice);
notification_manager->close_notification_of_type(NotificationType::ExportFinished);
notification_manager->push_notification(format(_L("Successfully unmounted. The device %s(%s) can now be safely removed from the computer."), evt.data.first.name, evt.data.first.path),
NotificationManager::NotificationLevel::RegularNotification);
notification_manager->push_notification(NotificationType::CustomNotification,
NotificationManager::NotificationLevel::RegularNotification,
format(_L("Successfully unmounted. The device %s(%s) can now be safely removed from the computer."), evt.data.first.name, evt.data.first.path)
);
} else {
notification_manager->push_notification(format(_L("Ejecting of device %s(%s) has failed."), evt.data.first.name, evt.data.first.path),
NotificationManager::NotificationLevel::ErrorNotification);
notification_manager->push_notification(NotificationType::CustomNotification,
NotificationManager::NotificationLevel::ErrorNotification,
format(_L("Ejecting of device %s(%s) has failed."), evt.data.first.name, evt.data.first.path)
);
}
});
this->q->Bind(EVT_REMOVABLE_DRIVES_CHANGED, [this, q](RemovableDrivesChangedEvent &) {
@ -2393,22 +2400,24 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
{
// The model should now be initialized
auto convert_from_imperial_units = [](Model& model) {
model.convert_from_imperial_units();
wxGetApp().app_config->set("use_inches", "1");
auto convert_from_imperial_units = [](Model& model, bool only_small_volumes) {
model.convert_from_imperial_units(only_small_volumes);
// wxGetApp().app_config->set("use_inches", "1");
wxGetApp().sidebar().update_ui_from_settings();
};
if (!is_project_file) {
if (imperial_units)
convert_from_imperial_units(model);
// Convert even if the object is big.
convert_from_imperial_units(model, false);
else if (model.looks_like_imperial_units()) {
wxMessageDialog msg_dlg(q, format_wxstr(_L(
"Some object(s) in file %s looks like saved in inches.\n"
"Should I consider them as a saved in inches and convert them?"), from_path(filename)) + "\n",
_L("The object appears to be saved in inches"), wxICON_WARNING | wxYES | wxNO);
if (msg_dlg.ShowModal() == wxID_YES)
convert_from_imperial_units(model);
//FIXME up-scale only the small parts?
convert_from_imperial_units(model, true);
}
if (model.looks_like_multipart_object()) {
@ -3356,10 +3365,54 @@ void Plater::priv::fix_through_netfabb(const int obj_idx, const int vol_idx/* =
if (obj_idx < 0)
return;
Plater::TakeSnapshot snapshot(q, _L("Fix Throught NetFabb"));
// Do not fix anything when a gizmo is open. There might be issues with updates
// and what is worse, the snapshot time would refer to the internal stack.
if (q->canvas3D()->get_gizmos_manager().get_current_type() != GLGizmosManager::Undefined) {
notification_manager->push_notification(
NotificationType::CustomSupportsAndSeamRemovedAfterRepair,
NotificationManager::NotificationLevel::RegularNotification,
_u8L("ERROR: Please close all manipulators available from "
"the left toolbar before fixing the mesh."));
return;
}
fix_model_by_win10_sdk_gui(*model.objects[obj_idx], vol_idx);
sla::reproject_points_and_holes(model.objects[obj_idx]);
// size_t snapshot_time = undo_redo_stack().active_snapshot_time();
Plater::TakeSnapshot snapshot(q, _L("Fix through NetFabb"));
ModelObject* mo = model.objects[obj_idx];
// If there are custom supports/seams, remove them. Fixed mesh
// may be different and they would make no sense.
bool paint_removed = false;
for (ModelVolume* mv : mo->volumes) {
paint_removed |= ! mv->supported_facets.empty() || ! mv->seam_facets.empty();
mv->supported_facets.clear();
mv->seam_facets.clear();
}
if (paint_removed) {
// snapshot_time is captured by copy so the lambda knows where to undo/redo to.
notification_manager->push_notification(
NotificationType::CustomSupportsAndSeamRemovedAfterRepair,
NotificationManager::NotificationLevel::RegularNotification,
_u8L("Custom supports and seams were removed after repairing the mesh."));
// _u8L("Undo the repair"),
// [this, snapshot_time](wxEvtHandler*){
// // Make sure the snapshot is still available and that
// // we are in the main stack and not in a gizmo-stack.
// if (undo_redo_stack().has_undo_snapshot(snapshot_time)
// && q->canvas3D()->get_gizmos_manager().get_current() == nullptr)
// undo_redo_to(snapshot_time);
// else
// notification_manager->push_notification(
// NotificationType::CustomSupportsAndSeamRemovedAfterRepair,
// NotificationManager::NotificationLevel::RegularNotification,
// _u8L("Cannot undo to before the mesh repair!"));
// return true;
// });
}
fix_model_by_win10_sdk_gui(*mo, vol_idx);
sla::reproject_points_and_holes(mo);
this->update();
this->object_list_changed();
this->schedule_background_process();
@ -3505,6 +3558,14 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt)
*/
wxGetApp().obj_list()->update_object_list_by_printer_technology();
}
#ifdef __WXMSW__
// From the Win 2004 preset combobox lose a focus after change the preset selection
// and that is why the up/down arrow doesn't work properly
// (see https://github.com/prusa3d/PrusaSlicer/issues/5531 ).
// So, set the focus to the combobox explicitly
combo->SetFocus();
#endif
}
void Plater::priv::on_slicing_update(SlicingStatusEvent &evt)
@ -4786,9 +4847,7 @@ void Plater::load_gcode()
void Plater::load_gcode(const wxString& filename)
{
if (filename.empty() ||
(!filename.Lower().EndsWith(".gcode") && !filename.Lower().EndsWith(".g")) ||
m_last_loaded_gcode == filename)
if (! is_gcode_file(into_u8(filename)) || m_last_loaded_gcode == filename)
return;
m_last_loaded_gcode = filename;
@ -4804,7 +4863,6 @@ void Plater::load_gcode(const wxString& filename)
// process gcode
GCodeProcessor processor;
processor.enable_producers(true);
processor.enable_machine_envelope_processing(true);
processor.process_file(filename.ToUTF8().data(), false);
p->gcode_result = std::move(processor.extract_result());
@ -5860,15 +5918,14 @@ void Plater::force_print_bed_update()
void Plater::on_activate()
{
#ifdef __linux__
#if defined(__linux__) || defined(_WIN32)
wxWindow *focus_window = wxWindow::FindFocus();
// Activating the main frame, and no window has keyboard focus.
// Set the keyboard focus to the visible Canvas3D.
if (this->p->view3D->IsShown() && (!focus_window || focus_window == this->p->view3D->get_wxglcanvas()))
this->p->view3D->get_wxglcanvas()->SetFocus();
else if (this->p->preview->IsShown() && (!focus_window || focus_window == this->p->view3D->get_wxglcanvas()))
this->p->preview->get_wxglcanvas()->SetFocus();
if (this->p->view3D->IsShown() && wxWindow::FindFocus() != this->p->view3D->get_wxglcanvas())
CallAfter([this]() { this->p->view3D->get_wxglcanvas()->SetFocus(); });
else if (this->p->preview->IsShown() && wxWindow::FindFocus() != this->p->view3D->get_wxglcanvas())
CallAfter([this]() { this->p->preview->get_wxglcanvas()->SetFocus(); });
#endif
this->p->show_delayed_error_message();

View file

@ -156,11 +156,14 @@ void PreferencesDialog::build()
option = Option(def, "show_drop_project_dialog");
m_optgroup_general->append_single_option_line(option);
def.label = L("Single instance mode");
def.type = coBool;
#if __APPLE__
def.label = L("Allow just a single PrusaSlicer instance");
def.type = coBool;
def.tooltip = L("On OSX there is always only one instance of app running by default. However it is allowed to run multiple instances of same app from the command line. In such case this settings will allow only one instance.");
#else
def.label = L("Allow just a single PrusaSlicer instance");
def.type = coBool;
def.tooltip = L("If this is enabled, when starting PrusaSlicer and another instance of the same PrusaSlicer is already running, that instance will be reactivated instead.");
#endif
def.set_default_value(new ConfigOptionBool{ app_config->has("single_instance") ? app_config->get("single_instance") == "1" : false });

View file

@ -905,6 +905,13 @@ TabPresetComboBox::TabPresetComboBox(wxWindow* parent, Preset::Type preset_type)
}
evt.StopPropagation();
#ifdef __WXMSW__
// From the Win 2004 preset combobox lose a focus after change the preset selection
// and that is why the up/down arrow doesn't work properly
// (see https://github.com/prusa3d/PrusaSlicer/issues/5531 ).
// So, set the focus to the combobox explicitly
this->SetFocus();
#endif
});
}

View file

@ -80,6 +80,17 @@ PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, bool can_start_pr
Fit();
CenterOnParent();
#ifdef __linux__
// On Linux with GTK2 when text control lose the focus then selection (colored background) disappears but text color stay white
// and as a result the text is invisible with light mode
// see https://github.com/prusa3d/PrusaSlicer/issues/4532
// Workaround: Unselect text selection explicitly on kill focus
txt_filename->Bind(wxEVT_KILL_FOCUS, [this](wxEvent& e) {
e.Skip();
txt_filename->SetInsertionPoint(txt_filename->GetLastPosition());
}, txt_filename->GetId());
#endif /* __linux__ */
Bind(wxEVT_SHOW, [=](const wxShowEvent &) {
// Another similar case where the function only works with EVT_SHOW + CallAfter,
// this time on Mac.
@ -230,6 +241,7 @@ void PrintHostQueueDialog::append_job(const PrintHostJob &job)
fields.push_back(wxVariant(job.upload_data.upload_path.string()));
fields.push_back(wxVariant(""));
job_list->AppendItem(fields, static_cast<wxUIntPtr>(ST_NEW));
// Both strings are UTF-8 encoded.
upload_names.emplace_back(job.printhost->get_host(), job.upload_data.upload_path.string());
}

View file

@ -277,6 +277,7 @@ void RemovableDriveManager::eject_drive()
//std::cout<<"Ejecting "<<(*it).name<<" from "<< correct_path<<"\n";
// there is no usable command in c++ so terminal command is used instead
// but neither triggers "succesful safe removal messege"
BOOST_LOG_TRIVIAL(info) << "Ejecting started";
boost::process::ipstream istd_err;
boost::process::child child(
@ -293,7 +294,18 @@ void RemovableDriveManager::eject_drive()
BOOST_LOG_TRIVIAL(trace) << line;
}
// wait for command to finnish (blocks ui thread)
child.wait();
std::error_code ec;
child.wait(ec);
if (ec) {
// The wait call can fail, as it did in https://github.com/prusa3d/PrusaSlicer/issues/5507
// It can happen even in cases where the eject is sucessful, but better report it as failed.
// We did not find a way to reliably retrieve the exit code of the process.
BOOST_LOG_TRIVIAL(error) << "boost::process::child::wait() failed during Ejection. State of Ejection is unknown. Error code: " << ec.value();
assert(m_callback_evt_handler);
if (m_callback_evt_handler)
wxPostEvent(m_callback_evt_handler, RemovableDriveEjectEvent(EVT_REMOVABLE_DRIVE_EJECTED, std::pair<DriveData, bool>(*it_drive_data, false)));
return;
}
int err = child.exit_code();
if (err) {
BOOST_LOG_TRIVIAL(error) << "Ejecting failed. Exit code: " << err;

View file

@ -2803,7 +2803,7 @@ void TabPrinter::toggle_options()
toggle_option("retract_restart_extra_toolchange", have_multiple_extruders && toolchange_retraction, i);
}
if (m_active_page->title() == "Machine limits") {
if (m_active_page->title() == "Machine limits" && m_machine_limits_description_line) {
assert(m_config->option<ConfigOptionEnum<GCodeFlavor>>("gcode_flavor")->value == gcfMarlin);
const auto *machine_limits_usage = m_config->option<ConfigOptionEnum<MachineLimitsUsage>>("machine_limits_usage");
bool enabled = machine_limits_usage->value != MachineLimitsUsage::Ignore;
@ -2963,7 +2963,7 @@ void Tab::rebuild_page_tree()
continue;
auto itemId = m_treectrl->AppendItem(rootItem, translate_category(p->title(), m_type), p->iconID());
m_treectrl->SetItemTextColour(itemId, p->get_item_colour());
if (p->title() == selected)
if (translate_category(p->title(), m_type) == selected)
item = itemId;
}
if (!item) {
@ -3269,7 +3269,7 @@ void Tab::clear_pages()
void Tab::update_description_lines()
{
if (m_active_page && m_active_page->title() == "Dependencies")
if (m_active_page && m_active_page->title() == "Dependencies" && m_parent_preset_description_line)
update_preset_description_line();
}

View file

@ -51,7 +51,12 @@ static std::string get_icon_name(Preset::Type type, PrinterTechnology pt) {
return pt == ptSLA && type == Preset::TYPE_PRINTER ? "sla_printer" : type_icon_names.at(type);
}
static std::string black = "#000000";
static std::string def_text_color()
{
wxColour def_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
auto clr_str = wxString::Format(wxT("#%02X%02X%02X"), def_colour.Red(), def_colour.Green(), def_colour.Blue());
return clr_str.ToStdString();
}
static std::string grey = "#808080";
static std::string orange = "#ed6b21";
@ -158,7 +163,7 @@ ModelNode::ModelNode(ModelNode* parent, const wxString& text, const wxString& ol
}
// "color" strings
color_string(m_old_value, black);
color_string(m_old_value, def_text_color());
color_string(m_new_value, orange);
UpdateIcons();
@ -176,13 +181,13 @@ void ModelNode::UpdateEnabling()
};
if (!m_toggle) {
change_text_color(m_text, black, grey);
change_text_color(m_old_value, black, grey);
change_text_color(m_text, def_text_color(), grey);
change_text_color(m_old_value, def_text_color(), grey);
change_text_color(m_new_value, orange,grey);
}
else {
change_text_color(m_text, grey, black);
change_text_color(m_old_value, grey, black);
change_text_color(m_text, grey, def_text_color());
change_text_color(m_old_value, grey, def_text_color());
change_text_color(m_new_value, grey, orange);
}
// update icons for the colors
@ -227,7 +232,7 @@ UnsavedChangesModel::~UnsavedChangesModel()
wxDataViewItem UnsavedChangesModel::AddPreset(Preset::Type type, wxString preset_name, PrinterTechnology pt)
{
// "color" strings
color_string(preset_name, black);
color_string(preset_name, def_text_color());
make_string_bold(preset_name);
auto preset = new ModelNode(type, m_parent_win, preset_name, get_icon_name(type, pt));
@ -274,9 +279,9 @@ wxDataViewItem UnsavedChangesModel::AddOption(Preset::Type type, wxString catego
wxString old_value, wxString new_value, const std::string category_icon_name)
{
// "color" strings
color_string(category_name, black);
color_string(group_name, black);
color_string(option_name, black);
color_string(category_name, def_text_color());
color_string(group_name, def_text_color());
color_string(option_name, def_text_color());
// "make" strings bold
make_string_bold(category_name);

Some files were not shown because too many files have changed in this diff Show more