Merge remote-tracking branch 'origin/master' into ys_improvements

This commit is contained in:
YuSanka 2020-03-13 16:05:46 +01:00
commit 380fffd248
61 changed files with 3004 additions and 2239 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-03-11 15:15+0100\n"
"POT-Creation-Date: 2020-03-12 13:09+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -71,56 +71,56 @@ msgid ""
"not be affected."
msgstr ""
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:109
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:108
msgid ""
"Copying of the temporary G-code to the output G-code failed. Maybe the SD "
"card is write locked?"
msgstr ""
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:112
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:111
msgid ""
"Copying of the temporary G-code to the output G-code failed. There might be "
"problem with target device, please try exporting again or using different "
"device. The corrupted output G-code is at %1%.tmp."
msgstr ""
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:115
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:114
msgid ""
"Renaming of the G-code after copying to the selected destination folder has "
"failed. Current path is %1%.tmp. Please try exporting again."
msgstr ""
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:118
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:117
msgid ""
"Copying of the temporary G-code has finished but the original code at %1% "
"couldn't be opened during copy check. The output G-code is at %2%.tmp."
msgstr ""
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:121
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:120
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 ""
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:128
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:478
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:127
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:479
msgid "Running post-processing scripts"
msgstr ""
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:130
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:129
msgid "G-code file exported to %1%"
msgstr ""
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:134
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:184
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:133
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:183
msgid "Slicing complete"
msgstr ""
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:180
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:179
msgid "Masked SLA file exported to %1%"
msgstr ""
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:222
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:221
#, possible-c-format
msgid ""
"%s has encountered an error. It was likely caused by running out of memory. "
@ -128,11 +128,11 @@ msgid ""
"and we would be glad if you reported it."
msgstr ""
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:480
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:481
msgid "Copying of the temporary G-code to the output G-code failed"
msgstr ""
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:505
#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:506
msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"
msgstr ""
@ -480,7 +480,7 @@ msgstr ""
msgid "PrusaSlicer version"
msgstr ""
#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/slic3r/GUI/Preset.cpp:1551
#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/slic3r/GUI/Preset.cpp:1554
msgid "print"
msgstr ""
@ -488,7 +488,7 @@ msgstr ""
msgid "filaments"
msgstr ""
#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/slic3r/GUI/Preset.cpp:1555
#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/slic3r/GUI/Preset.cpp:1558
msgid "printer"
msgstr ""
@ -663,8 +663,8 @@ msgid ""
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:813 src/slic3r/GUI/GUI_ObjectList.cpp:1680
#: src/slic3r/GUI/GUI_ObjectList.cpp:3984 src/slic3r/GUI/Plater.cpp:3282
#: src/slic3r/GUI/Plater.cpp:3986 src/slic3r/GUI/Plater.cpp:4015
#: src/slic3r/GUI/GUI_ObjectList.cpp:3984 src/slic3r/GUI/Plater.cpp:3288
#: src/slic3r/GUI/Plater.cpp:3992 src/slic3r/GUI/Plater.cpp:4021
msgid "Reload from disk"
msgstr ""
@ -805,11 +805,11 @@ msgstr ""
msgid "Bed Temperature:"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:1486 src/slic3r/GUI/ConfigWizard.cpp:2028
#: src/slic3r/GUI/ConfigWizard.cpp:1486 src/slic3r/GUI/ConfigWizard.cpp:2029
msgid "Filaments"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:1486 src/slic3r/GUI/ConfigWizard.cpp:2030
#: src/slic3r/GUI/ConfigWizard.cpp:1486 src/slic3r/GUI/ConfigWizard.cpp:2031
msgid "SLA Materials"
msgstr ""
@ -842,64 +842,64 @@ msgstr ""
msgid "Do you want to automatic select default materials?"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:1991
#: src/slic3r/GUI/ConfigWizard.cpp:1992
msgid "Select all standard printers"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:1994
#: src/slic3r/GUI/ConfigWizard.cpp:1995
msgid "< &Back"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:1995
#: src/slic3r/GUI/ConfigWizard.cpp:1996
msgid "&Next >"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:1996
#: src/slic3r/GUI/ConfigWizard.cpp:1997
msgid "&Finish"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:1997 src/slic3r/GUI/FirmwareDialog.cpp:151
#: src/slic3r/GUI/ConfigWizard.cpp:1998 src/slic3r/GUI/FirmwareDialog.cpp:151
#: src/slic3r/GUI/ProgressStatusBar.cpp:26
msgid "Cancel"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:2010
#: src/slic3r/GUI/ConfigWizard.cpp:2011
msgid "Prusa FFF Technology Printers"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:2013
#: src/slic3r/GUI/ConfigWizard.cpp:2014
msgid "Prusa MSLA Technology Printers"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:2028
#: src/slic3r/GUI/ConfigWizard.cpp:2029
msgid "Filament Profiles Selection"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:2028 src/slic3r/GUI/GUI_ObjectList.cpp:3581
#: src/slic3r/GUI/ConfigWizard.cpp:2029 src/slic3r/GUI/GUI_ObjectList.cpp:3581
msgid "Type:"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:2030
#: src/slic3r/GUI/ConfigWizard.cpp:2031
msgid "SLA Material Profiles Selection"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:2030
#: src/slic3r/GUI/ConfigWizard.cpp:2031
msgid "Layer height:"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:2124
#: src/slic3r/GUI/ConfigWizard.cpp:2125
msgid "Configuration Assistant"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:2125
#: src/slic3r/GUI/ConfigWizard.cpp:2126
msgid "Configuration &Assistant"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:2127
#: src/slic3r/GUI/ConfigWizard.cpp:2128
msgid "Configuration Wizard"
msgstr ""
#: src/slic3r/GUI/ConfigWizard.cpp:2128
#: src/slic3r/GUI/ConfigWizard.cpp:2129
msgid "Configuration &Wizard"
msgstr ""
@ -1543,18 +1543,18 @@ msgid "Add..."
msgstr ""
#: src/slic3r/GUI/GLCanvas3D.cpp:4474 src/slic3r/GUI/GUI_ObjectList.cpp:1734
#: src/slic3r/GUI/Plater.cpp:3983 src/slic3r/GUI/Plater.cpp:4005
#: src/slic3r/GUI/Plater.cpp:3989 src/slic3r/GUI/Plater.cpp:4011
#: src/slic3r/GUI/Tab.cpp:3144
msgid "Delete"
msgstr ""
#: src/slic3r/GUI/GLCanvas3D.cpp:4483 src/slic3r/GUI/KBShortcutsDialog.cpp:131
#: src/slic3r/GUI/Plater.cpp:4725
#: src/slic3r/GUI/Plater.cpp:4731
msgid "Delete all"
msgstr ""
#: src/slic3r/GUI/GLCanvas3D.cpp:4492 src/slic3r/GUI/KBShortcutsDialog.cpp:159
#: src/slic3r/GUI/Plater.cpp:2806
#: src/slic3r/GUI/Plater.cpp:2812
msgid "Arrange"
msgstr ""
@ -1570,12 +1570,12 @@ msgstr ""
msgid "Paste"
msgstr ""
#: src/slic3r/GUI/GLCanvas3D.cpp:4525 src/slic3r/GUI/Plater.cpp:3840
#: src/slic3r/GUI/Plater.cpp:3852 src/slic3r/GUI/Plater.cpp:3992
#: src/slic3r/GUI/GLCanvas3D.cpp:4525 src/slic3r/GUI/Plater.cpp:3846
#: src/slic3r/GUI/Plater.cpp:3858 src/slic3r/GUI/Plater.cpp:3998
msgid "Add instance"
msgstr ""
#: src/slic3r/GUI/GLCanvas3D.cpp:4536 src/slic3r/GUI/Plater.cpp:3994
#: src/slic3r/GUI/GLCanvas3D.cpp:4536 src/slic3r/GUI/Plater.cpp:4000
msgid "Remove instance"
msgstr ""
@ -1609,11 +1609,11 @@ msgstr ""
msgid "Next Redo action: %1%"
msgstr ""
#: src/slic3r/GUI/GLCanvas3D.cpp:6586
#: src/slic3r/GUI/GLCanvas3D.cpp:6588
msgid "Selection-Add from rectangle"
msgstr ""
#: src/slic3r/GUI/GLCanvas3D.cpp:6605
#: src/slic3r/GUI/GLCanvas3D.cpp:6607
msgid "Selection-Remove from rectangle"
msgstr ""
@ -2127,7 +2127,7 @@ msgstr ""
msgid "Please check and fix your object list."
msgstr ""
#: src/slic3r/GUI/GUI_App.cpp:1073 src/slic3r/GUI/Plater.cpp:2365
#: src/slic3r/GUI/GUI_App.cpp:1073 src/slic3r/GUI/Plater.cpp:2371
#: src/slic3r/GUI/Tab.cpp:2948
msgid "Attention!"
msgstr ""
@ -2459,12 +2459,12 @@ msgstr ""
msgid "Fix through the Netfabb"
msgstr ""
#: src/slic3r/GUI/GUI_ObjectList.cpp:1673 src/slic3r/GUI/Plater.cpp:4018
#: src/slic3r/GUI/GUI_ObjectList.cpp:1673 src/slic3r/GUI/Plater.cpp:4024
msgid "Export as STL"
msgstr ""
#: src/slic3r/GUI/GUI_ObjectList.cpp:1680
#: src/slic3r/GUI/GUI_ObjectList.cpp:3984 src/slic3r/GUI/Plater.cpp:3986
#: src/slic3r/GUI/GUI_ObjectList.cpp:3984 src/slic3r/GUI/Plater.cpp:3992
msgid "Reload the selected volumes from disk"
msgstr ""
@ -2534,7 +2534,7 @@ msgstr ""
msgid "Delete Instance"
msgstr ""
#: src/slic3r/GUI/GUI_ObjectList.cpp:2286 src/slic3r/GUI/Plater.cpp:3035
#: src/slic3r/GUI/GUI_ObjectList.cpp:2286 src/slic3r/GUI/Plater.cpp:3041
msgid ""
"The selected object couldn't be split because it contains only one part."
msgstr ""
@ -2978,11 +2978,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge"
msgstr ""
#: src/slic3r/GUI/KBShortcutsDialog.cpp:122 src/slic3r/GUI/Plater.cpp:896
#: src/slic3r/GUI/Plater.cpp:5546 src/libslic3r/PrintConfig.cpp:3363
#: src/slic3r/GUI/Plater.cpp:5553 src/libslic3r/PrintConfig.cpp:3363
msgid "Export G-code"
msgstr ""
#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Plater.cpp:5547
#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Plater.cpp:5554
msgid "Send G-code"
msgstr ""
@ -3263,7 +3263,7 @@ msgstr ""
msgid "Show/Hide Legend"
msgstr ""
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213 src/slic3r/GUI/Plater.cpp:4157
#: src/slic3r/GUI/KBShortcutsDialog.cpp:213 src/slic3r/GUI/Plater.cpp:4163
#: src/slic3r/GUI/Tab.cpp:2374
msgid "Preview"
msgstr ""
@ -3850,8 +3850,8 @@ msgstr ""
msgid "Save zip file as:"
msgstr ""
#: src/slic3r/GUI/MainFrame.cpp:894 src/slic3r/GUI/Plater.cpp:3178
#: src/slic3r/GUI/Plater.cpp:5150 src/slic3r/GUI/Tab.cpp:1281
#: src/slic3r/GUI/MainFrame.cpp:894 src/slic3r/GUI/Plater.cpp:3184
#: src/slic3r/GUI/Plater.cpp:5156 src/slic3r/GUI/Tab.cpp:1281
#: src/slic3r/GUI/Tab.cpp:3720
msgid "Slicing"
msgstr ""
@ -4077,7 +4077,7 @@ msgstr ""
msgid "SLA print settings"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:823 src/slic3r/GUI/Preset.cpp:1554
#: src/slic3r/GUI/Plater.cpp:823 src/slic3r/GUI/Preset.cpp:1557
msgid "SLA material"
msgstr ""
@ -4085,7 +4085,7 @@ msgstr ""
msgid "Printer"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:883 src/slic3r/GUI/Plater.cpp:5547
#: src/slic3r/GUI/Plater.cpp:883 src/slic3r/GUI/Plater.cpp:5554
msgid "Send to printer"
msgstr ""
@ -4093,8 +4093,8 @@ msgstr ""
msgid "Remove device"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:897 src/slic3r/GUI/Plater.cpp:3178
#: src/slic3r/GUI/Plater.cpp:5153
#: src/slic3r/GUI/Plater.cpp:897 src/slic3r/GUI/Plater.cpp:3184
#: src/slic3r/GUI/Plater.cpp:5159
msgid "Slice now"
msgstr ""
@ -4172,411 +4172,416 @@ msgstr ""
msgid "Load Files"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2196
#: src/slic3r/GUI/Plater.cpp:2199
#, possible-c-format
msgid ""
"Unmounting successful. The device %s(%s) can now be safely removed from the "
"computer."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2204
#: src/slic3r/GUI/Plater.cpp:2202
#, possible-c-format
msgid "Ejecting of device %s(%s) has failed."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2210
msgid "New Project"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2325
#: src/slic3r/GUI/Plater.cpp:2331
msgid "Loading"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2335
#: src/slic3r/GUI/Plater.cpp:2341
#, possible-c-format
msgid "Processing input file %s"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2363
#: src/slic3r/GUI/Plater.cpp:2369
msgid "You cannot load SLA project with a multi-part object on the bed"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2364 src/slic3r/GUI/Tab.cpp:2947
#: src/slic3r/GUI/Plater.cpp:2370 src/slic3r/GUI/Tab.cpp:2947
msgid "Please check your object list before preset changing."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2409
#: src/slic3r/GUI/Plater.cpp:2415
msgid ""
"This file contains several objects positioned at multiple heights.\n"
"Instead of considering them as multiple objects, should I consider\n"
"this file as a single object having multiple parts?"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2412 src/slic3r/GUI/Plater.cpp:2465
#: src/slic3r/GUI/Plater.cpp:2418 src/slic3r/GUI/Plater.cpp:2471
msgid "Multi-part object detected"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2419
#: src/slic3r/GUI/Plater.cpp:2425
msgid ""
"This file cannot be loaded in a simple mode. Do you want to switch to an "
"advanced mode?"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2420
#: src/slic3r/GUI/Plater.cpp:2426
msgid "Detected advanced data"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2442
#: src/slic3r/GUI/Plater.cpp:2448
#, possible-c-format
msgid ""
"You can't to add the object(s) from %s because of one or some of them "
"is(are) multi-part"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2462
#: src/slic3r/GUI/Plater.cpp:2468
msgid ""
"Multiple objects were loaded for a multi-material printer.\n"
"Instead of considering them as multiple objects, should I consider\n"
"these files to represent a single object having multiple parts?"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2478
#: src/slic3r/GUI/Plater.cpp:2484
msgid "Loaded"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2580
#: src/slic3r/GUI/Plater.cpp:2586
msgid ""
"Your object appears to be too large, so it was automatically scaled down to "
"fit your print bed."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2581
#: src/slic3r/GUI/Plater.cpp:2587
msgid "Object too large?"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2643
#: src/slic3r/GUI/Plater.cpp:2649
msgid "Export STL file:"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2650
#: src/slic3r/GUI/Plater.cpp:2656
msgid "Export AMF file:"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2656
#: src/slic3r/GUI/Plater.cpp:2662
msgid "Save file as:"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2662
#: src/slic3r/GUI/Plater.cpp:2668
msgid "Export OBJ file:"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2764
#: src/slic3r/GUI/Plater.cpp:2770
msgid "Delete Object"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2775
#: src/slic3r/GUI/Plater.cpp:2781
msgid "Reset Project"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2812
#: src/slic3r/GUI/Plater.cpp:2818
msgid "Hollow"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2819
#: src/slic3r/GUI/Plater.cpp:2825
msgid "Optimize Rotation"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2865
#: src/slic3r/GUI/Plater.cpp:2871
msgid "Arranging"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2892
#: src/slic3r/GUI/Plater.cpp:2898
msgid "Could not arrange model objects! Some geometries may be invalid."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2898
#: src/slic3r/GUI/Plater.cpp:2904
msgid "Arranging canceled."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2899
#: src/slic3r/GUI/Plater.cpp:2905
msgid "Arranging done."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2915
#: src/slic3r/GUI/Plater.cpp:2921
msgid "Searching for optimal orientation"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2948
#: src/slic3r/GUI/Plater.cpp:2954
msgid "Orientation search canceled."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2949
#: src/slic3r/GUI/Plater.cpp:2955
msgid "Orientation found."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2979
#: src/slic3r/GUI/Plater.cpp:2985
msgid "Indexing hollowed object"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2983
#: src/slic3r/GUI/Plater.cpp:2989
msgid "Hollowing cancelled."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2984
#: src/slic3r/GUI/Plater.cpp:2990
msgid "Hollowing done."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:2986
#: src/slic3r/GUI/Plater.cpp:2992
msgid "Hollowing failed."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3027
#: src/slic3r/GUI/Plater.cpp:3033
msgid ""
"The selected object can't be split because it contains more than one volume/"
"material."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3038
#: src/slic3r/GUI/Plater.cpp:3044
msgid "Split to Objects"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3163
#: src/slic3r/GUI/Plater.cpp:3169
msgid "Invalid data"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3172
#: src/slic3r/GUI/Plater.cpp:3178
msgid "Ready to slice"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3210 src/slic3r/GUI/PrintHostDialogs.cpp:232
#: src/slic3r/GUI/Plater.cpp:3216 src/slic3r/GUI/PrintHostDialogs.cpp:232
msgid "Cancelling"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3227
#: src/slic3r/GUI/Plater.cpp:3233
msgid "Another export job is currently running."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3343
#: src/slic3r/GUI/Plater.cpp:3349
msgid "Please select the file to reload"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3378
#: src/slic3r/GUI/Plater.cpp:3384
msgid "It is not allowed to change the file to reload"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3378
#: src/slic3r/GUI/Plater.cpp:3384
msgid "Do you want to retry"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3396
#: src/slic3r/GUI/Plater.cpp:3402
msgid "Reload from:"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3485
#: src/slic3r/GUI/Plater.cpp:3491
msgid "Unable to reload:"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3490
#: src/slic3r/GUI/Plater.cpp:3496
msgid "Error during reload"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3509
#: src/slic3r/GUI/Plater.cpp:3515
msgid "Reload all from disk"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3530
#: src/slic3r/GUI/Plater.cpp:3536
msgid "Fix Throught NetFabb"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3721
#: src/slic3r/GUI/Plater.cpp:3727
msgid "Export failed"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3726 src/slic3r/GUI/PrintHostDialogs.cpp:233
#: src/slic3r/GUI/Plater.cpp:3732 src/slic3r/GUI/PrintHostDialogs.cpp:233
msgid "Cancelled"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3983 src/slic3r/GUI/Plater.cpp:4005
#: src/slic3r/GUI/Plater.cpp:3989 src/slic3r/GUI/Plater.cpp:4011
msgid "Remove the selected object"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3992
#: src/slic3r/GUI/Plater.cpp:3998
msgid "Add one more instance of the selected object"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3994
#: src/slic3r/GUI/Plater.cpp:4000
msgid "Remove one instance of the selected object"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3996
#: src/slic3r/GUI/Plater.cpp:4002
msgid "Set number of instances"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:3996
#: src/slic3r/GUI/Plater.cpp:4002
msgid "Change the number of instances of the selected object"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4015
#: src/slic3r/GUI/Plater.cpp:4021
msgid "Reload the selected object from disk"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4018
#: src/slic3r/GUI/Plater.cpp:4024
msgid "Export the selected object as STL file"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4047
#: src/slic3r/GUI/Plater.cpp:4053
msgid "Along X axis"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4047
#: src/slic3r/GUI/Plater.cpp:4053
msgid "Mirror the selected object along the X axis"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4049
#: src/slic3r/GUI/Plater.cpp:4055
msgid "Along Y axis"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4049
#: src/slic3r/GUI/Plater.cpp:4055
msgid "Mirror the selected object along the Y axis"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4051
#: src/slic3r/GUI/Plater.cpp:4057
msgid "Along Z axis"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4051
#: src/slic3r/GUI/Plater.cpp:4057
msgid "Mirror the selected object along the Z axis"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4054
#: src/slic3r/GUI/Plater.cpp:4060
msgid "Mirror"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4054
#: src/slic3r/GUI/Plater.cpp:4060
msgid "Mirror the selected object"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4066
#: src/slic3r/GUI/Plater.cpp:4072
msgid "To objects"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4066 src/slic3r/GUI/Plater.cpp:4086
#: src/slic3r/GUI/Plater.cpp:4072 src/slic3r/GUI/Plater.cpp:4092
msgid "Split the selected object into individual objects"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4068
#: src/slic3r/GUI/Plater.cpp:4074
msgid "To parts"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4068 src/slic3r/GUI/Plater.cpp:4100
#: src/slic3r/GUI/Plater.cpp:4074 src/slic3r/GUI/Plater.cpp:4106
msgid "Split the selected object into individual sub-parts"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4071 src/slic3r/GUI/Plater.cpp:4086
#: src/slic3r/GUI/Plater.cpp:4100 src/libslic3r/PrintConfig.cpp:3481
#: src/slic3r/GUI/Plater.cpp:4077 src/slic3r/GUI/Plater.cpp:4092
#: src/slic3r/GUI/Plater.cpp:4106 src/libslic3r/PrintConfig.cpp:3481
msgid "Split"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4071
#: src/slic3r/GUI/Plater.cpp:4077
msgid "Split the selected object"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4092
#: src/slic3r/GUI/Plater.cpp:4098
msgid "Optimize orientation"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4092
#: src/slic3r/GUI/Plater.cpp:4098
msgid "Optimize the rotation of the object for better print results."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4149
#: src/slic3r/GUI/Plater.cpp:4155
msgid "3D editor view"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4456
#: src/slic3r/GUI/Plater.cpp:4462
msgid ""
"%1% printer was active at the time the target Undo / Redo snapshot was "
"taken. Switching to %1% printer requires reloading of %1% presets."
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4631
#: src/slic3r/GUI/Plater.cpp:4637
msgid "Load Project"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4659
#: src/slic3r/GUI/Plater.cpp:4665
msgid "Import Object"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4663
#: src/slic3r/GUI/Plater.cpp:4669
msgid "Import Objects"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4725
#: src/slic3r/GUI/Plater.cpp:4731
msgid "All objects will be removed, continue?"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4733
#: src/slic3r/GUI/Plater.cpp:4739
msgid "Delete Selected Objects"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4741
#: src/slic3r/GUI/Plater.cpp:4747
msgid "Increase Instances"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4776
#: src/slic3r/GUI/Plater.cpp:4782
msgid "Decrease Instances"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4807
#: src/slic3r/GUI/Plater.cpp:4813
msgid "Enter the number of copies:"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4808
#: src/slic3r/GUI/Plater.cpp:4814
msgid "Copies of the selected object"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4812
#: src/slic3r/GUI/Plater.cpp:4818
#, possible-c-format
msgid "Set numbers of copies to %d"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4842
#: src/slic3r/GUI/Plater.cpp:4848
msgid "Cut by Plane"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4893
#: src/slic3r/GUI/Plater.cpp:4899
msgid "Save G-code file as:"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:4893
#: src/slic3r/GUI/Plater.cpp:4899
msgid "Save SL1 file as:"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:5028
#: src/slic3r/GUI/Plater.cpp:5034
#, possible-c-format
msgid "STL file exported to %s"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:5045
#: src/slic3r/GUI/Plater.cpp:5051
#, possible-c-format
msgid "AMF file exported to %s"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:5048
#: src/slic3r/GUI/Plater.cpp:5054
#, possible-c-format
msgid "Error exporting AMF file %s"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:5081
#: src/slic3r/GUI/Plater.cpp:5087
#, possible-c-format
msgid "3MF file exported to %s"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:5086
#: src/slic3r/GUI/Plater.cpp:5092
#, possible-c-format
msgid "Error exporting 3MF file %s"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:5546
#: src/slic3r/GUI/Plater.cpp:5553
msgid "Export"
msgstr ""
#: src/slic3r/GUI/Plater.cpp:5632
#: src/slic3r/GUI/Plater.cpp:5639
msgid "Paste From Clipboard"
msgstr ""
@ -4717,34 +4722,34 @@ msgstr ""
msgid "Select toolbar icon size in respect to the default one."
msgstr ""
#: src/slic3r/GUI/Preset.cpp:247
#: src/slic3r/GUI/Preset.cpp:250
msgid "modified"
msgstr ""
#: src/slic3r/GUI/Preset.cpp:1139 src/slic3r/GUI/Preset.cpp:1194
#: src/slic3r/GUI/Preset.cpp:1272 src/slic3r/GUI/Preset.cpp:1314
#: src/slic3r/GUI/Preset.cpp:1142 src/slic3r/GUI/Preset.cpp:1197
#: src/slic3r/GUI/Preset.cpp:1275 src/slic3r/GUI/Preset.cpp:1317
#: src/slic3r/GUI/PresetBundle.cpp:1591 src/slic3r/GUI/PresetBundle.cpp:1689
msgid "System presets"
msgstr ""
#: src/slic3r/GUI/Preset.cpp:1198 src/slic3r/GUI/Preset.cpp:1318
#: src/slic3r/GUI/Preset.cpp:1201 src/slic3r/GUI/Preset.cpp:1321
#: src/slic3r/GUI/PresetBundle.cpp:1694
msgid "User presets"
msgstr ""
#: src/slic3r/GUI/Preset.cpp:1231
#: src/slic3r/GUI/Preset.cpp:1234
msgid "Add/Remove materials"
msgstr ""
#: src/slic3r/GUI/Preset.cpp:1233
#: src/slic3r/GUI/Preset.cpp:1236
msgid "Add/Remove printers"
msgstr ""
#: src/slic3r/GUI/Preset.cpp:1552
#: src/slic3r/GUI/Preset.cpp:1555
msgid "filament"
msgstr ""
#: src/slic3r/GUI/Preset.cpp:1553
#: src/slic3r/GUI/Preset.cpp:1556
msgid "SLA print"
msgstr ""

View file

@ -337,6 +337,10 @@ msgstr "Logický výraz může používat konfigurační hodnoty aktivního prof
msgid "A boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile."
msgstr "Logický výraz může používat konfigurační hodnoty aktivního profilu tiskárny. Pokud je tento logický výraz pravdivý, potom je tento profil považován za kompatibilní s aktivním profilem tiskárny."
#: src/slic3r/GUI/Tab.cpp:975
msgid "A copy of the current system preset will be created, which will be detached from the system preset."
msgstr "Bude vytvořena oddělená kopie aktuálního systémového přednastavení."
#: src/slic3r/GUI/ConfigWizard.cpp:1034
msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
msgstr "Obecným pravidlem je 160 až 230 °C pro PLA a 215 až 250 °C pro ABS."
@ -1569,15 +1573,6 @@ msgstr "Aktuální nastavení je zděděné od"
msgid "Current preset is inherited from the default preset."
msgstr "Aktuální nastavení je zděděno z výchozího nastavení."
#: src/slic3r/GUI/Tab.cpp:960
#, c-format
msgid ""
"Current preset is inherited from:\n"
"\t%s"
msgstr ""
"Aktuální nastavení je zděděné od:\n"
"%s"
#: src/slic3r/GUI/UpdateDialogs.cpp:43
msgid "Current version:"
msgstr "Aktuální verze:"
@ -1877,6 +1872,18 @@ msgstr "Odznačit obdélníkovým výběrem myši"
msgid "Deselects all objects"
msgstr "Odznačit všechny objekty"
#: src/slic3r/GUI/Tab.cpp:963
msgid "Detach from system preset"
msgstr "Oddělit od systémového přednastavení"
#: src/slic3r/GUI/Tab.cpp:984
msgid "Detach preset"
msgstr "Oddělení přednastavení"
#: src/slic3r/GUI/Tab.cpp:3029
msgid "Detached"
msgstr "Odpojeno"
#: src/libslic3r/PrintConfig.cpp:1373
msgid "Detect bridging perimeters"
msgstr "Detekovat perimetry přemostění"
@ -2152,6 +2159,11 @@ msgstr "Vysunout SD kartu / Flash disk"
msgid "Eject SD card / Flash drive after the G-code was exported to it."
msgstr "Vysunout SD kartu / Flash disk po vyexportování G-codu."
#: src/slic3r/GUI/Plater.cpp:2202
#, c-format
msgid "Ejecting of device %s(%s) has failed."
msgstr "Vysunutí zařízení %s(%s) se nezdařilo."
#: src/libslic3r/PrintConfig.cpp:118
msgid "Elephant foot compensation"
msgstr "Kompenzace rozplácnutí první vrstvy"
@ -2971,15 +2983,6 @@ msgstr "Pro více informací prosím navštivte naší wiki stránku:"
msgid "For support enforcers only"
msgstr "Pouze pro vynucené podpěry"
#. TRN Description for "WHITE BULLET"
#: src/slic3r/GUI/Tab.cpp:3265
msgid ""
"for the left button: \tindicates a non-system (or non-default) preset,\n"
"for the right button: \tindicates that the settings hasn't been modified."
msgstr ""
"na levé straně: indikuje nesystémové (jiné než výchozí) přednastavení,\n"
"na pravé straně: indikuje, že nastavení nebylo změněno."
#. TRN Description for "WHITE BULLET"
#: src/slic3r/GUI/Tab.cpp:3267
msgid ""
@ -3401,16 +3404,6 @@ msgstr "Soubor HTTPS CA"
msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate."
msgstr "Soubor HTTPS CA je volitelný. Je nutný pouze pokud použijte HTTPS certifikát s vlastním podpisem."
#: src/slic3r/GUI/Tab.cpp:1757
#, c-format
msgid ""
"HTTPS CA File:\n"
" \tOn this system, %s uses HTTPS certificates from the system Certificate Store or Keychain.\n"
" \tTo use a custom CA file, please import your CA file into Certificate Store / Keychain."
msgstr ""
"Soubor HTTPS CA:\n"
"V tomto systému používá %s certifikáty HTTPS ze systému Certificate Store nebo Keychain. Chcete-li použít vlastní soubor CA, importujte soubor CA do Certificate Store / Keychain."
#: src/slic3r/GUI/Preferences.cpp:222
msgid "Icon size in a respect to the default size"
msgstr "Velikost ikon vůči výchozí velikosti"
@ -4627,6 +4620,10 @@ msgstr "Oprava modelu byla dokončena"
msgid "Model repaired successfully"
msgstr "Model byl úspěšně opraven"
#: src/slic3r/GUI/Tab.cpp:979
msgid "Modifications to the current profile will be saved."
msgstr "Úpravy aktuálního profilu budou uloženy."
#: src/slic3r/GUI/Preset.cpp:247
msgid "modified"
msgstr "upraveno"
@ -5425,10 +5422,10 @@ msgstr "Přednastavení (%s)"
msgid "Preset with name \"%1%\" already exists."
msgstr "Přednastavení s názvem \"%1%\" již existuje."
#: src/slic3r/GUI/Tab.cpp:3045
#: src/slic3r/GUI/Tab.cpp:3029
msgctxt "PresetName"
msgid "%1% - Copy"
msgstr "%1% - Kopie"
msgid "Copy"
msgstr "Kopie"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
msgid "Press to activate deselection rectangle"
@ -6468,16 +6465,6 @@ msgstr "Vyberte, jaký typ podložky potřebujete"
msgid "Select what kind of support do you need"
msgstr "Vyberte typ podpěr, které potřebujete"
#: src/slic3r/GUI/DoubleSlider.cpp:1917
msgid ""
"Select YES if you want to delete all saved tool changes, \n"
"\tNO if you want all tool changes switch to color changes, \n"
"\tor CANCEL to leave it unchanged."
msgstr ""
"Vyberte ANO, pokud chcete odstranit všechny uložené změny nástroje,\n"
"NE, pokud chcete, aby se všechny změny nástroje přepnout na změny barev,\n"
"nebo ZRUŠIT pro ponechání beze změny."
#: src/slic3r/GUI/DoubleSlider.cpp:1917
msgid ""
"Select YES if you want to delete all saved tool changes, \n"
@ -7641,6 +7628,10 @@ msgid ""
"If the device is connected, please press the Reset button next to the USB connector ..."
msgstr "Zařízení %s nebylo nalezeno. Pokud je zařízení připojeno, stiskněte tlačítko Reset vedle USB konektoru ..."
#: src/slic3r/GUI/Tab.cpp:976
msgid "The current custom preset will be detached from the parent system preset."
msgstr "Aktuální vlastní přednastavení bude odděleno od rodičovského systémového přednastavení."
#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875
msgid ""
"The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n"
@ -7795,18 +7786,14 @@ msgstr "Vybraný objekt nemůže být rozdělen, protože obsahuje více než je
msgid "The selected object couldn't be split because it contains only one part."
msgstr "Vybraný objekt nemůže být rozdělen, protože obsahuje pouze jednu část."
#: src/slic3r/GUI/MainFrame.cpp:432
#: src/slic3r/GUI/MainFrame.cpp:461
msgid ""
"The selected project is no longer available.\n"
"Do you want to remove it from the recent projects list ?"
"Do you want to remove it from the recent projects list?"
msgstr ""
"Vybraný projekt již není k dispozici.\n"
"Chcete ho odstranit ze seznamu posledních projektů?"
#: src/slic3r/GUI/MainFrame.cpp:422
msgid "The selected project is no more available"
msgstr "Vybraný projekt již není dostupný"
#: src/slic3r/GUI/DoubleSlider.cpp:998
msgid ""
"The sequential print is on.\n"
@ -7982,6 +7969,14 @@ msgstr ""
msgid "This %s version: %s"
msgstr "Tento %s verze: %s"
#: src/slic3r/GUI/Tab.cpp:982
msgid ""
"This action is not revertable.\n"
"Do you want to proceed?"
msgstr ""
"Tato akce je nevratná.\n"
"Chcete pokračovat?"
#: src/libslic3r/PrintConfig.cpp:165
msgid "This code is inserted between objects when using sequential printing. By default extruder and bed temperature are reset using non-wait command; however if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not add temperature commands. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
msgstr "Tento kód je vložen mezi objekty, pokud je použit sekvenční tisk. Ve výchozím nastavení je resetován extruder a tisková podložka pomocí non-wait (nečekacím) příkazem; nicméně pokud jsou příkazy M104, M109, 140 nebo M190 detekovány v tomto vlastním kódu, Slic3r nebude přidávat teplotní příkazy. Můžete přidávat zástupné proměnné pro veškeré nastavení Slic3ru, takže můžete vložit příkaz “M109 S[first_layer_temperature]” kamkoliv chcete."
@ -8149,10 +8144,6 @@ msgstr "Toto je největší možná výška vrstvy pro tento extruder, který se
msgid "This is the lowest printable layer height for this extruder and limits the resolution for variable layer height. Typical values are between 0.05 mm and 0.1 mm."
msgstr "Nejmenší tisknutelná výška vrstvy pro tento extruder. Omezuje rozlišení pro výšku proměnné vrstvy. Typické hodnoty jsou mezi 0,05 mm a 0,1 mm."
#: src/libslic3r/GCode.cpp:639
msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
msgstr "To je obvykle způsobeno zanedbatelně malým množstvím extrudovaného materiálu nebo chybným modelem. Zkuste model opravit nebo změnit jeho orientaci na podložce."
#: src/libslic3r/GCode.cpp:639
msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
msgstr "To je obvykle způsobeno zanedbatelně malým množstvím extrudovaného materiálu nebo chybným modelem. Zkuste model opravit nebo změnit jeho orientaci na podložce."

View file

@ -337,6 +337,10 @@ msgstr "Ein boolescher Ausdruck, der die Konfigurationswerte eines aktiven Druck
msgid "A boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile."
msgstr "Ein boolescher Ausdruck, der die Konfigurationswerte eines aktiven Druckerprofils verwendet. Wenn dieser Ausdruck als wahr bewertet wird, wird dieses Profil als kompatibel mit dem aktiven Druckerprofil angesehen."
#: src/slic3r/GUI/Tab.cpp:975
msgid "A copy of the current system preset will be created, which will be detached from the system preset."
msgstr "Es wird eine Kopie der aktuellen Systemvoreinstellung erstellt, die von der Systemvoreinstellung gelöst wird."
#: src/slic3r/GUI/ConfigWizard.cpp:1034
msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
msgstr "Ein Daumenwert ist 160 bis 230 °C für PLA, und 215 bis 250 °C für ABS."
@ -1565,15 +1569,6 @@ msgstr "Aktuelle Voreinstellung ist abgeleitet von"
msgid "Current preset is inherited from the default preset."
msgstr "Aktuelle Voreinstellung ist abgeleitet von der Standardvoreinstellung."
#: src/slic3r/GUI/Tab.cpp:960
#, c-format
msgid ""
"Current preset is inherited from:\n"
"\t%s"
msgstr ""
"Aktuelle Voreinstellung ist abgeleitet von:\n"
"%s"
#: src/slic3r/GUI/UpdateDialogs.cpp:43
msgid "Current version:"
msgstr "Aktuelle Version:"
@ -1873,6 +1868,18 @@ msgstr "Abwahl über Rechteck"
msgid "Deselects all objects"
msgstr "Alle Objekte abwählen"
#: src/slic3r/GUI/Tab.cpp:963
msgid "Detach from system preset"
msgstr "Lösen von der Systemvoreinstellung"
#: src/slic3r/GUI/Tab.cpp:984
msgid "Detach preset"
msgstr "Lösen der Voreinstellugen"
#: src/slic3r/GUI/Tab.cpp:3029
msgid "Detached"
msgstr "Losgelöst"
#: src/libslic3r/PrintConfig.cpp:1373
msgid "Detect bridging perimeters"
msgstr "Umfangbrücken entdecken"
@ -2136,6 +2143,23 @@ msgstr "Häkchen bearbeiten - Rechtsklick"
msgid "Editing"
msgstr "Bearbeitung"
#: src/slic3r/GUI/MainFrame.cpp:547
msgid "Ejec&t SD card / Flash drive"
msgstr "SD-Kar&te/Flash-Laufwerk auswerfen"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
msgid "Eject SD card / Flash drive"
msgstr "SD-Karte/Flash-Laufwerk auswerfen"
#: src/slic3r/GUI/MainFrame.cpp:547
msgid "Eject SD card / Flash drive after the G-code was exported to it."
msgstr "SD-Karte / Flash-Laufwerk auswerfen, nachdem der G-Code dorthin exportiert wurde."
#: src/slic3r/GUI/Plater.cpp:2202
#, c-format
msgid "Ejecting of device %s(%s) has failed."
msgstr "Das Auswerfen von Gerät %s(%s) ist fehlgeschlagen."
#: src/libslic3r/PrintConfig.cpp:118
msgid "Elephant foot compensation"
msgstr "Elefantenfußkompensation"
@ -2426,6 +2450,10 @@ msgstr "Exportiere die aktuelle Plattenbelegung als AMF"
msgid "Export current plate as G-code"
msgstr "Exportiere die aktuelle Plattenbelegung als G-Code"
#: src/slic3r/GUI/MainFrame.cpp:521
msgid "Export current plate as G-code to SD card / Flash drive"
msgstr "Aktuelle Druckplatte als G-Code auf SD-Karte/Flash-Laufwerk exportieren"
#: src/slic3r/GUI/MainFrame.cpp:486
msgid "Export current plate as STL"
msgstr "Exportiere die aktuelle Plattenbelegung als STL"
@ -2447,6 +2475,10 @@ msgstr "Exportieren Sie die vollständigen Pfadnamen der Modelle und Teilequelle
msgid "Export G-code"
msgstr "Export G-Code"
#: src/slic3r/GUI/MainFrame.cpp:521
msgid "Export G-code to SD card / Flash drive"
msgstr "G-Code auf SD-Karte/Flash-Laufwerk exportieren"
#: src/libslic3r/PrintConfig.cpp:3320
msgid "Export OBJ"
msgstr "Exportiere OBJ"
@ -2947,15 +2979,6 @@ msgstr "Für weitere Informationen besuchen Sie bitte unsere Wiki-Seite:"
msgid "For support enforcers only"
msgstr "Nur für Stützverstärker"
#. TRN Description for "WHITE BULLET"
#: src/slic3r/GUI/Tab.cpp:3265
msgid ""
"for the left button: \tindicates a non-system (or non-default) preset,\n"
"for the right button: \tindicates that the settings hasn't been modified."
msgstr ""
"Beim linken Knopf: zeigt eine Nicht-System- (oder Nicht-Standard-) Einstellung an.\n"
"Beim rechten Knopf: zeigt an, dass die Einstellung nicht geändert wurde."
#. TRN Description for "WHITE BULLET"
#: src/slic3r/GUI/Tab.cpp:3267
msgid ""
@ -3373,16 +3396,6 @@ msgstr "HTTPS CA Datei"
msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate."
msgstr "HTTPS-CA-Datei ist optional. Sie wird nur benötigt, wenn Sie HTTPS mit einem selbstsignierten Zertifikat verwenden."
#: src/slic3r/GUI/Tab.cpp:1757
#, c-format
msgid ""
"HTTPS CA File:\n"
" \tOn this system, %s uses HTTPS certificates from the system Certificate Store or Keychain.\n"
" \tTo use a custom CA file, please import your CA file into Certificate Store / Keychain."
msgstr ""
"HTTPS CA-Datei:\n"
"Auf diesem System verwendet %s HTTPS-Zertifikate aus dem System Zertifikatsspeicher oder Schlüsselbund. Um eine benutzerdefinierte CA-Datei zu verwenden, importieren Sie bitte Ihre CA-Datei in den Zertifikatsspeicher / Schlüsselbund."
#: src/slic3r/GUI/Preferences.cpp:222
msgid "Icon size in a respect to the default size"
msgstr "Symbolgröße in Bezug auf die Standardgröße"
@ -4599,6 +4612,10 @@ msgstr "Modellreparatur beendet"
msgid "Model repaired successfully"
msgstr "Modellreparatur erfolgreich"
#: src/slic3r/GUI/Tab.cpp:979
msgid "Modifications to the current profile will be saved."
msgstr "Änderungen am aktuellen Profil werden gespeichert."
#: src/slic3r/GUI/Preset.cpp:247
msgid "modified"
msgstr "geändert"
@ -5397,10 +5414,10 @@ msgstr "Voreinstellung (%s)"
msgid "Preset with name \"%1%\" already exists."
msgstr "Eine Voreinstellung mit dem Namen \"%1%\" existiert bereits."
#: src/slic3r/GUI/Tab.cpp:3045
#: src/slic3r/GUI/Tab.cpp:3029
msgctxt "PresetName"
msgid "%1% - Copy"
msgstr "%1% - Kopieren"
msgid "Copy"
msgstr "Kopieren"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
msgid "Press to activate deselection rectangle"
@ -6437,16 +6454,6 @@ msgstr "Wählen Sie aus, welche Art von Grundschicht Sie benötigen"
msgid "Select what kind of support do you need"
msgstr "Wählen Sie aus, welche Art von Unterstützung Sie benötigen"
#: src/slic3r/GUI/DoubleSlider.cpp:1917
msgid ""
"Select YES if you want to delete all saved tool changes, \n"
"\tNO if you want all tool changes switch to color changes, \n"
"\tor CANCEL to leave it unchanged."
msgstr ""
"Wählen Sie JA, wenn Sie alle gespeicherten Werkzeugänderungen löschen möchten, \n"
"NEIN, wenn Sie möchten, dass alle Werkzeugänderungen auf Farbwechsel umgestellt werden, \n"
"oder ABBRECHEN, um sie unverändert zu lassen."
#: src/slic3r/GUI/DoubleSlider.cpp:1917
msgid ""
"Select YES if you want to delete all saved tool changes, \n"
@ -7612,6 +7619,10 @@ msgstr ""
"Das %s-Gerät wurde nicht gefunden.\n"
"Wenn das Gerät angeschlossen ist, drücken Sie bitte die Reset-Taste neben dem USB-Anschluss...."
#: src/slic3r/GUI/Tab.cpp:976
msgid "The current custom preset will be detached from the parent system preset."
msgstr "Die aktuelle benutzerdefinierte Voreinstellung wird von der Voreinstellung des übergeordneten Systems gelöst."
#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875
msgid ""
"The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n"
@ -7769,17 +7780,13 @@ msgstr "Das ausgewählte Objekt konnte nicht getrennt werden, weil es aus mehr a
msgid "The selected object couldn't be split because it contains only one part."
msgstr "Das ausgewählte Objekt konnte nicht getrennt werden, da es nur aus einem Teil besteht."
#: src/slic3r/GUI/MainFrame.cpp:432
#: src/slic3r/GUI/MainFrame.cpp:461
msgid ""
"The selected project is no longer available.\n"
"Do you want to remove it from the recent projects list ?"
"Do you want to remove it from the recent projects list?"
msgstr ""
"Das ausgewählte Projekt ist nicht mehr verfügbar.\n"
"Wollen Sie es aus der Liste der letzten Projekte entfernen ?"
#: src/slic3r/GUI/MainFrame.cpp:422
msgid "The selected project is no more available"
msgstr "Das ausgewählte Projekt ist nicht mehr verfügbar"
"Wollen Sie es aus der Liste der letzten Projekte entfernen?"
#: src/slic3r/GUI/DoubleSlider.cpp:998
msgid ""
@ -7952,6 +7959,14 @@ msgstr ""
msgid "This %s version: %s"
msgstr "Diese %s Version: %s"
#: src/slic3r/GUI/Tab.cpp:982
msgid ""
"This action is not revertable.\n"
"Do you want to proceed?"
msgstr ""
"Diese Aktion ist nicht umkehrbar.\n"
"Wollen Sie fortfahren?"
#: src/libslic3r/PrintConfig.cpp:165
msgid "This code is inserted between objects when using sequential printing. By default extruder and bed temperature are reset using non-wait command; however if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not add temperature commands. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
msgstr "Dieser Code wird beim sequentiellen Drucken zwischen Objekten eingefügt. Standardmäßig werden Extruder- und Betttemperatur mit dem Befehl, der nicht auf die Änderung wartet, zurückgesetzt. Wenn jedoch M104, M109, M140 oder M190 in diesem benutzerdefinierten Code erkannt werden, fügt Slic3r keine Temperaturbefehle hinzu. Beachten Sie, dass Sie Platzhaltervariablen für alle PrusaSlicer-Einstellungen verwenden können, so dass Sie einen \"M109 S[first_layer_temperature]\"-Befehl an beliebiger Stelle platzieren können."
@ -8117,10 +8132,6 @@ msgstr "Dies ist die höchste druckbare Schichthöhe für diesen Extruder, mit d
msgid "This is the lowest printable layer height for this extruder and limits the resolution for variable layer height. Typical values are between 0.05 mm and 0.1 mm."
msgstr "Dies ist die niedrigste druckbare Schichthöhe für diesen Extruder und begrenzt die Auflösung bei variabler Schichthöhe. Typische Werte liegen zwischen 0,05 mm und 0,1 mm."
#: src/libslic3r/GCode.cpp:639
msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
msgstr "Dies wird in der Regel durch vernachlässigbar kleine Extrusionen oder durch ein fehlerhaftes Modell verursacht. Versuchen Sie, das Modell zu reparieren oder seine Ausrichtung auf dem Druckbett zu ändern."
#: src/libslic3r/GCode.cpp:639
msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
msgstr "Dies wird in der Regel durch vernachlässigbar kleine Extrusionen oder durch ein fehlerhaftes Modell verursacht. Versuchen Sie, das Modell zu reparieren oder seine Ausrichtung auf dem Druckbett zu ändern."

Binary file not shown.

View file

@ -0,0 +1,155 @@
msgid ""
msgstr ""
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
"X-Generator: Poedit 2.3\n"
#: src/slic3r/GUI/UpdateDialogs.cpp:71
msgid "Don't notify about new releases any more"
msgstr "Don't notify about new releases anymore"
#: src/libslic3r/PrintConfig.cpp:287
msgid "A boolean expression using the configuration values of an active print profile. If this expression evaluates to true, this profile is considered compatible with the active print profile."
msgstr "A Boolean expression using the configuration values of an active print profile. If this expression evaluates to true, this profile is considered compatible with the active print profile."
#: src/libslic3r/PrintConfig.cpp:272
msgid "A boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile."
msgstr "A Boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile."
#: src/libslic3r/PrintConfig.cpp:409
msgid "Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top+bottom solid layers)."
msgstr "Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top + bottom solid layers)."
#: src/slic3r/GUI/ConfigWizard.cpp:791
msgid "Additionally a backup snapshot of the whole configuration is created before an update is applied."
msgstr "Additionally, a backup snapshot of the whole configuration is created before an update is applied."
#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1268
msgid "Autogeneration will erase all manually edited points."
msgstr "Auto Generation will erase all manually edited points."
#: src/slic3r/GUI/Tab.cpp:1171
msgid "Autospeed (advanced)"
msgstr "Auto Speed (advanced)"
#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:22
msgid "Before roll back"
msgstr "Before rollback"
#: src/slic3r/GUI/ButtonsDescription.cpp:16
msgid "Buttons And Text Colors Description"
msgstr "Buttons and Text Colors Description"
#: src/libslic3r/PrintConfig.cpp:791
msgid "Density of internal infill, expressed in the range 0% - 100%."
msgstr "Density of internal infill, expressed in the range 0 % - 100 %."
#: src/slic3r/GUI/ConfigWizard.cpp:773
#, c-format
msgid "If enabled, %s checks for new application versions online. When a new version becomes available, a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."
msgstr "If enabled, %s checks for new application versions online. When a new version becomes available, a notification is displayed at the next application startup (never during program usage). This is only a notification mechanism, no automatic installation is done."
#: src/slic3r/GUI/ConfigWizard.cpp:783
#, c-format
msgid "If enabled, %s downloads updates of built-in system presets in the background.These updates are downloaded into a separate temporary location.When a new preset version becomes available it is offered at application startup."
msgstr "If enabled, %s downloads updates of built-in system presets in the background. These updates are downloaded into a separate temporary location. When a new preset version becomes available it is offered at application startup."
#: src/slic3r/GUI/Preferences.cpp:66
msgid "If enabled, PrusaSlicer will check for the new versions of itself online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."
msgstr "If enabled, PrusaSlicer will check for the new versions of itself online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanism, no automatic installation is done."
#: src/libslic3r/PrintConfig.cpp:1858
msgid "If enabled, the wipe tower will not be printed on layers with no toolchanges. On layers with a toolchange, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print."
msgstr "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print."
#: src/libslic3r/PrintConfig.cpp:2262
msgid "Object will be used to purge the nozzle after a toolchange to save material that would otherwise end up in the wipe tower and decrease print time. Colours of the objects will be mixed as a result."
msgstr "Object will be used to purge the nozzle after a tool change to save material that would otherwise end up in the wipe tower and decrease print time. Colours of the objects will be mixed as a result."
#: src/libslic3r/Print.cpp:1365
msgid "One or more object were assigned an extruder that the printer does not have."
msgstr "One or more objects were assigned an extruder that the printer does not have."
#: src/libslic3r/PrintConfig.cpp:2254
msgid "Purging after toolchange will done inside this object's infills. This lowers the amount of waste but may result in longer print time due to additional travel moves."
msgstr "Purging after tool change will done inside this object's infills. This lowers the amount of waste but may result in longer print time due to additional travel moves."
#: src/libslic3r/PrintConfig.cpp:1552
msgid "Retraction Length (Toolchange)"
msgstr "Retraction Length (Tool change)"
#: src/libslic3r/PrintConfig.cpp:556
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 "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."
#: src/libslic3r/PrintConfig.cpp:2824
msgid "Some objects can get along with a few smaller pads instead of a single big one. This parameter defines how far the center of two smaller pads should be. If theyare closer, they will get merged into one pad."
msgstr "Some objects can get along with a few smaller pads instead of a single big one. This parameter defines how far the center of two smaller pads should be. If they are closer, they will get merged into one pad."
#: src/libslic3r/PrintConfig.cpp:624
msgid "Speed used for unloading the filament on the wipe tower (does not affect initial part of unloading just after ramming)."
msgstr "Speed used for unloading the filament on the wipe tower (does not affect initial part of unloading just after ramming)."
#: src/libslic3r/PrintConfig.cpp:2044
msgid "Support material will not be generated for overhangs whose slope angle (90° = vertical) is above the given threshold. In other words, this value represent the most horizontal slope (measured from the horizontal plane) that you can print without support material. Set to zero for automatic detection (recommended)."
msgstr "Support material will not be generated for overhangs whose slope angle (90° = vertical) is above the given threshold. In other words, this value represents the most horizontal slope (measured from the horizontal plane) that you can print without support material. Set to zero for automatic detection (recommended)."
#: src/slic3r/GUI/DoubleSlider.cpp:998
msgid ""
"The sequential print is on.\n"
"It's impossible to apply any custom G-code for objects printing sequentually.\n"
"This code won't be processed during G-code generation."
msgstr ""
"The sequential print is on.\n"
"It's impossible to apply any custom G-code for objects printing sequentially.\n"
"This code won't be processed during G-code generation."
#: src/libslic3r/PrintConfig.cpp:2094
msgid "This custom code is inserted before every toolchange. Placeholder variables for all PrusaSlicer settings as well as {previous_extruder} and {next_extruder} can be used. When a tool-changing command which changes to the correct extruder is included (such as T{next_extruder}), PrusaSlicer will emit no other such command. It is therefore possible to script custom behaviour both before and after the toolchange."
msgstr "This custom code is inserted before every tool change. Placeholder variables for all PrusaSlicer settings as well as {previous_extruder} and {next_extruder} can be used. When a tool-changing command which changes to the correct extruder is included (such as T{next_extruder}), PrusaSlicer will emit no other such command. It is therefore possible to script custom behaviour both before and after the tool change."
#: src/libslic3r/PrintConfig.cpp:396
msgid "This end procedure is inserted at the end of the output file, before the printer end gcode (and before any toolchange from this filament in case of multimaterial printers). Note that you can use placeholder variables for all PrusaSlicer settings. If you have multiple extruders, the gcode is processed in extruder order."
msgstr "This end procedure is inserted at the end of the output file, before the printer end gcode (and before any tool change from this filament in case of multimaterial printers). Note that you can use placeholder variables for all PrusaSlicer settings. If you have multiple extruders, the gcode is processed in extruder order."
#: src/libslic3r/PrintConfig.cpp:2215
msgid "This matrix describes volumes (in cubic milimetres) required to purge the new filament on the wipe tower for any given pair of tools."
msgstr "This matrix describes volumes (in cubic millimetres) required to purge the new filament on the wipe tower for any given pair of tools."
#: src/libslic3r/PrintConfig.cpp:1829
msgid "This start procedure is inserted at the beginning, after any printer start gcode (and after any toolchange to this filament in case of multi-material printers). This is used to override settings for a specific filament. If PrusaSlicer detects M104, M109, M140 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. If you have multiple extruders, the gcode is processed in extruder order."
msgstr "This start procedure is inserted at the beginning, after any printer start gcode (and after any tool change to this filament in case of multi-material printers). This is used to override settings for a specific filament. If PrusaSlicer detects M104, M109, M140 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. If you have multiple extruders, the gcode is processed in extruder order."
#: src/libslic3r/PrintConfig.cpp:641
msgid "Time to wait after the filament is unloaded. May help to get reliable toolchanges with flexible materials that may need more time to shrink to original dimensions."
msgstr "Time to wait after the filament is unloaded. May help to get reliable tool changes with flexible materials that may need more time to shrink to original dimensions."
#: src/slic3r/GUI/Tab.cpp:1491
msgid "Toolchange parameters with single extruder MM printers"
msgstr "Toolchange parameters with single extruder MM printers"
#: src/slic3r/Utils/Duet.cpp:82 src/slic3r/Utils/Duet.cpp:137
#: src/slic3r/Utils/FlashAir.cpp:119 src/slic3r/Utils/FlashAir.cpp:140
#: src/slic3r/Utils/FlashAir.cpp:156
msgid "Unknown error occured"
msgstr "Unknown error occurred"
#: src/libslic3r/PrintConfig.cpp:253
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 "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.)."
#: src/libslic3r/PrintConfig.cpp:1391
msgid "When set to zero, the distance the filament is moved from parking position during load is exactly the same as it was moved back during unload. When positive, it is loaded further, if negative, the loading move is shorter than unloading."
msgstr "When set to zero, the distance the filament is moved from parking position during load is exactly the same as it was moved back during unload. When positive, it is loaded further, if negative, the loading move is shorter than unloading."
#: src/slic3r/GUI/Tab.cpp:3285
msgid "WHITE BULLET icon indicates a non system (or non default) preset."
msgstr "WHITE BULLET icon indicates a non-system (or non-default) preset."

File diff suppressed because it is too large Load diff

View file

@ -337,6 +337,10 @@ msgstr "Une expression booléenne utilisant les valeurs de configuration d'un pr
msgid "A boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile."
msgstr "Une expression booléenne utilisant les valeurs de configuration d'un profil d'imprimante actif. Si cette expression est évaluée comme vraie, ce profil est considéré comme compatible avec le profil d'imprimante actif."
#: src/slic3r/GUI/Tab.cpp:975
msgid "A copy of the current system preset will be created, which will be detached from the system preset."
msgstr "Une copie du préréglage système actuel sera créé, et il sera détaché du préréglage système."
#: src/slic3r/GUI/ConfigWizard.cpp:1034
msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
msgstr "La règle générale est 160 à 230 °C pour le PLA et 215 à 250 °C pour l'ABS."
@ -1569,15 +1573,6 @@ msgstr "Le préréglage actuel est hérité de"
msgid "Current preset is inherited from the default preset."
msgstr "Le préréglage actuel est hérité du préréglage par défaut."
#: src/slic3r/GUI/Tab.cpp:960
#, c-format
msgid ""
"Current preset is inherited from:\n"
"\t%s"
msgstr ""
"Le préréglage actuel est hérité de :\n"
"%s"
#: src/slic3r/GUI/UpdateDialogs.cpp:43
msgid "Current version:"
msgstr "Version actuelle :"
@ -1877,6 +1872,18 @@ msgstr "Désélectionner par rectangle"
msgid "Deselects all objects"
msgstr "Désélectionner tous les objets"
#: src/slic3r/GUI/Tab.cpp:963
msgid "Detach from system preset"
msgstr "Détacher du préréglage système"
#: src/slic3r/GUI/Tab.cpp:984
msgid "Detach preset"
msgstr "Détacher le préréglage"
#: src/slic3r/GUI/Tab.cpp:3029
msgid "Detached"
msgstr "Détaché"
#: src/libslic3r/PrintConfig.cpp:1373
msgid "Detect bridging perimeters"
msgstr "Détecter les périmètres faisant des ponts"
@ -2140,6 +2147,23 @@ msgstr "Modifier la coche - Clic droit"
msgid "Editing"
msgstr "Édition"
#: src/slic3r/GUI/MainFrame.cpp:547
msgid "Ejec&t SD card / Flash drive"
msgstr "Éjec&ter la carte SD / la clef USB"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
msgid "Eject SD card / Flash drive"
msgstr "Éjecter la carte SD / la clef USB"
#: src/slic3r/GUI/MainFrame.cpp:547
msgid "Eject SD card / Flash drive after the G-code was exported to it."
msgstr "Éjecter la carte SD / la clef USB une fois que la G-code y a été exporté."
#: src/slic3r/GUI/Plater.cpp:2202
#, c-format
msgid "Ejecting of device %s(%s) has failed."
msgstr "L'éjection de l'appareil %s(%s) a échoué."
#: src/libslic3r/PrintConfig.cpp:118
msgid "Elephant foot compensation"
msgstr "Compensation de l'effet patte d'éléphant"
@ -2430,6 +2454,10 @@ msgstr "Exporter le plateau courant en AMF"
msgid "Export current plate as G-code"
msgstr "Exporter le plateau courant en G-code"
#: src/slic3r/GUI/MainFrame.cpp:521
msgid "Export current plate as G-code to SD card / Flash drive"
msgstr "Exporter le plateau actuel en tant que G-code vers la carte SD / la clef USB"
#: src/slic3r/GUI/MainFrame.cpp:486
msgid "Export current plate as STL"
msgstr "Exporter le plateau courant en STL"
@ -2451,6 +2479,10 @@ msgstr "Exportez les chemins d'accès complets des modèles et des sources de pi
msgid "Export G-code"
msgstr "Exporter le G-code"
#: src/slic3r/GUI/MainFrame.cpp:521
msgid "Export G-code to SD card / Flash drive"
msgstr "Exporter le G-code vers la carte SD / la clef USB"
#: src/libslic3r/PrintConfig.cpp:3320
msgid "Export OBJ"
msgstr "Exporter OBJ"
@ -2951,15 +2983,6 @@ msgstr "Pour plus d'informations, merci de visiter notre page wiki :"
msgid "For support enforcers only"
msgstr "Seulement pour les générateur de supports"
#. TRN Description for "WHITE BULLET"
#: src/slic3r/GUI/Tab.cpp:3265
msgid ""
"for the left button: \tindicates a non-system (or non-default) preset,\n"
"for the right button: \tindicates that the settings hasn't been modified."
msgstr ""
"pour le bouton gauche : indique un préréglage non-système (ou non par défaut),\n"
"pour le bouton droit : indique que le réglage n'a pas été modifié."
#. TRN Description for "WHITE BULLET"
#: src/slic3r/GUI/Tab.cpp:3267
msgid ""
@ -3381,17 +3404,6 @@ msgstr "HTTPS CA Fichier"
msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate."
msgstr "Le fichier HTTPS CA est optionnel. Il est uniquement requis si vous utilisez le HTTPS avec un certificat auto-signé."
#: src/slic3r/GUI/Tab.cpp:1757
#, c-format
msgid ""
"HTTPS CA File:\n"
" \tOn this system, %s uses HTTPS certificates from the system Certificate Store or Keychain.\n"
" \tTo use a custom CA file, please import your CA file into Certificate Store / Keychain."
msgstr ""
"Fichier HTTPS CA :\n"
"\tDans ce système, %s utilise des certificats HTTPS issus du système Magasin de Certificats ou Trousseau.\n"
"\tPour utiliser un fichier CA personnalisé, veuillez importer votre fichier CA dans le Magasin de Certificats / Trousseau."
#: src/slic3r/GUI/Preferences.cpp:222
msgid "Icon size in a respect to the default size"
msgstr "Taille de l'icône par rapport à la taille par défaut"
@ -4608,6 +4620,10 @@ msgstr "Réparation du modèle terminée"
msgid "Model repaired successfully"
msgstr "Réparation du modèle réussie"
#: src/slic3r/GUI/Tab.cpp:979
msgid "Modifications to the current profile will be saved."
msgstr "Les modifications du profil actuel vont être sauvegardées."
#: src/slic3r/GUI/Preset.cpp:247
msgid "modified"
msgstr "modifié"
@ -5406,10 +5422,10 @@ msgstr "Préréglage (%s)"
msgid "Preset with name \"%1%\" already exists."
msgstr "Un préréglage avec le nom \"%1%\" existe déjà."
#: src/slic3r/GUI/Tab.cpp:3045
#: src/slic3r/GUI/Tab.cpp:3029
msgctxt "PresetName"
msgid "%1% - Copy"
msgstr "%1% - Copie"
msgid "Copy"
msgstr "Copie"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
msgid "Press to activate deselection rectangle"
@ -6452,16 +6468,6 @@ msgstr "Choisissez le type de socle dont vous avez besoin"
msgid "Select what kind of support do you need"
msgstr "Choisissez le type de support dont vous avez besoin"
#: src/slic3r/GUI/DoubleSlider.cpp:1917
msgid ""
"Select YES if you want to delete all saved tool changes, \n"
"\tNO if you want all tool changes switch to color changes, \n"
"\tor CANCEL to leave it unchanged."
msgstr ""
"Sélectionnez OUI si vous souhaitez supprimer tous les changements d'outil enregistrées, \n"
"NON si vous souhaitez que tous les changements d'outil soient remplacés par des modifications de couleur, \n"
"ou ANNULER pour ne pas les modifier."
#: src/slic3r/GUI/DoubleSlider.cpp:1917
msgid ""
"Select YES if you want to delete all saved tool changes, \n"
@ -7626,6 +7632,10 @@ msgstr ""
"L'équipement %s n'a pas été trouvé.\n"
"Si l'équipement est connecté, veuillez appuyer sur le bouton Reset à côté du connecteur USB ..."
#: src/slic3r/GUI/Tab.cpp:976
msgid "The current custom preset will be detached from the parent system preset."
msgstr "Le préréglage personnalisé actuel sera détaché du préréglage système parent."
#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875
msgid ""
"The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n"
@ -7780,17 +7790,13 @@ msgstr "L'objet sélectionné ne peut être scindé car il contient plus d'un vo
msgid "The selected object couldn't be split because it contains only one part."
msgstr "L'objet sélectionné n'a pu être scindé car il ne contient qu'une seule pièce."
#: src/slic3r/GUI/MainFrame.cpp:432
#: src/slic3r/GUI/MainFrame.cpp:461
msgid ""
"The selected project is no longer available.\n"
"Do you want to remove it from the recent projects list ?"
"Do you want to remove it from the recent projects list?"
msgstr ""
"Le projet sélectionné n'est plus disponible.\n"
"Voulez-vous le retirer de la liste des projets récents ?"
#: src/slic3r/GUI/MainFrame.cpp:422
msgid "The selected project is no more available"
msgstr "Le projet sélectionné n'est plus disponible"
"Voulez-vous le retirer de la liste des projets récents?"
#: src/slic3r/GUI/DoubleSlider.cpp:998
msgid ""
@ -7964,6 +7970,14 @@ msgstr ""
msgid "This %s version: %s"
msgstr "Version de ce %s : %s"
#: src/slic3r/GUI/Tab.cpp:982
msgid ""
"This action is not revertable.\n"
"Do you want to proceed?"
msgstr ""
"Cette action n'est pas réversible.\n"
"Voulez-vous continuer ?"
#: src/libslic3r/PrintConfig.cpp:165
msgid "This code is inserted between objects when using sequential printing. By default extruder and bed temperature are reset using non-wait command; however if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not add temperature commands. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
msgstr "Ce code est inséré entre des objets lorsque vous utilisez l'impression séquentielle. Par défaut la température de l'extrudeur et du plateau est réinitialisée et utilise la commande sans-attente ; toutefois si des commandes M104, M109, M140 ou M190 sont détectées dans ce code personnalisé, Slic3r n'ajoutera pas de commandes de température. Notez que vous pouvez utiliser des variables génériques pour tous les réglages de Slic3r, donc vous pouvez entrer une commande \"M109S[first_layer_temperature]\" où vous le souhaitez."
@ -8131,10 +8145,6 @@ msgstr "Ceci est la hauteur de couche imprimable maximum pour cet extrudeur, uti
msgid "This is the lowest printable layer height for this extruder and limits the resolution for variable layer height. Typical values are between 0.05 mm and 0.1 mm."
msgstr "Cette valeur est la hauteur de couche imprimable minimum pour cet extrudeur et elle limite la résolution pour la hauteur de couche variable. Les valeurs type se situent entre 0.05 mm et 0.1 mm."
#: src/libslic3r/GCode.cpp:639
msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
msgstr "Ceci est généralement provoqué par de petites extrusions négligeables ou par un modèle défectueux. Essayez de réparer le modèle ou de changer son orientation sur le lit."
#: src/libslic3r/GCode.cpp:639
msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
msgstr "Ceci est généralement provoqué par de petites extrusions négligeables ou par un modèle défectueux. Essayez de réparer le modèle ou de changer son orientation sur le lit."

View file

@ -337,6 +337,10 @@ msgstr "Un'espressione booleana che usa i valori di configurazione di un profilo
msgid "A boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile."
msgstr "Un'espressione booleana che usa i valori di configurazione di un profilo stampante attivo. Se questa espressione produce un risultato vero, questo profilo si considera compatibile con il profilo stampante attivo."
#: src/slic3r/GUI/Tab.cpp:975
msgid "A copy of the current system preset will be created, which will be detached from the system preset."
msgstr "Verrà creata una copia del preset di sistema corrente, e verrà distaccata dal preset di sistema."
#: src/slic3r/GUI/ConfigWizard.cpp:1034
msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
msgstr "Una regola generale è da 160 a 230°C per il PLA, e da 215 a 250°C per l'ABS."
@ -1569,15 +1573,6 @@ msgstr "Il preset corrente è ereditato da"
msgid "Current preset is inherited from the default preset."
msgstr "Il preset attuale è stato ereditato dal preset predefinito."
#: src/slic3r/GUI/Tab.cpp:960
#, c-format
msgid ""
"Current preset is inherited from:\n"
"\t%s"
msgstr ""
"Il preset corrente è ereditato da:\n"
"%s"
#: src/slic3r/GUI/UpdateDialogs.cpp:43
msgid "Current version:"
msgstr "Versione corrente:"
@ -1877,6 +1872,18 @@ msgstr "Deseleziona con rettangolo"
msgid "Deselects all objects"
msgstr "Deseleziona tutti gli oggetti"
#: src/slic3r/GUI/Tab.cpp:963
msgid "Detach from system preset"
msgstr "Distacco dal preset di sistema"
#: src/slic3r/GUI/Tab.cpp:984
msgid "Detach preset"
msgstr "Preset distacco"
#: src/slic3r/GUI/Tab.cpp:3029
msgid "Detached"
msgstr "Distaccato"
#: src/libslic3r/PrintConfig.cpp:1373
msgid "Detect bridging perimeters"
msgstr "Rileva perimetri ponte (bridge)"
@ -2140,6 +2147,23 @@ msgstr "Modifica segno di spunta - Clic destro"
msgid "Editing"
msgstr "Editing"
#: src/slic3r/GUI/MainFrame.cpp:547
msgid "Ejec&t SD card / Flash drive"
msgstr "(&t) Espelli Scheda SD / Memoria flash"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
msgid "Eject SD card / Flash drive"
msgstr "Espelli scheda SD / Memoria flash"
#: src/slic3r/GUI/MainFrame.cpp:547
msgid "Eject SD card / Flash drive after the G-code was exported to it."
msgstr "Espelli scheda SD / Memoria flash dopo l'esportazione del G-code in essa."
#: src/slic3r/GUI/Plater.cpp:2202
#, c-format
msgid "Ejecting of device %s(%s) has failed."
msgstr "Espulsione del dispositivo %s(%s) non riuscita."
#: src/libslic3r/PrintConfig.cpp:118
msgid "Elephant foot compensation"
msgstr "Compensazione zampa d'elefante"
@ -2430,6 +2454,10 @@ msgstr "Esporta il piano corrente come AMF"
msgid "Export current plate as G-code"
msgstr "Esporta il piano corrente come G-code"
#: src/slic3r/GUI/MainFrame.cpp:521
msgid "Export current plate as G-code to SD card / Flash drive"
msgstr "Esporta il piano corrente come G-code su scheda SD / Memoria flash"
#: src/slic3r/GUI/MainFrame.cpp:486
msgid "Export current plate as STL"
msgstr "Esporta il piano corrente come STL"
@ -2451,6 +2479,10 @@ msgstr "Esporta il percorso completo dei modelli e fonti delle parti nei file 3m
msgid "Export G-code"
msgstr "Esporta G-code"
#: src/slic3r/GUI/MainFrame.cpp:521
msgid "Export G-code to SD card / Flash drive"
msgstr "Esporta G-code su Scheda SD / Memoria flash"
#: src/libslic3r/PrintConfig.cpp:3320
msgid "Export OBJ"
msgstr "Esporta OBJ"
@ -2951,15 +2983,6 @@ msgstr "Per maggiori informazioni visita la nostra pagina wiki:"
msgid "For support enforcers only"
msgstr "Solo per rinforzi supporto"
#. TRN Description for "WHITE BULLET"
#: src/slic3r/GUI/Tab.cpp:3265
msgid ""
"for the left button: \tindicates a non-system (or non-default) preset,\n"
"for the right button: \tindicates that the settings hasn't been modified."
msgstr ""
"per il tasto sinistro: indica un preset non di sistema (o non-predefinito),\n"
"per il tasto destro: indica che le impostazioni non sono state modificate."
#. TRN Description for "WHITE BULLET"
#: src/slic3r/GUI/Tab.cpp:3267
msgid ""
@ -3375,17 +3398,6 @@ msgstr "File HTTPS CA"
msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate."
msgstr "File HTTPS CA opzionale. È necessario solo se si intende usare un HTTPS con certificato autofirmato."
#: src/slic3r/GUI/Tab.cpp:1757
#, c-format
msgid ""
"HTTPS CA File:\n"
" \tOn this system, %s uses HTTPS certificates from the system Certificate Store or Keychain.\n"
" \tTo use a custom CA file, please import your CA file into Certificate Store / Keychain."
msgstr ""
"File HTTPS CA:\n"
"Su questo sistema, %s utilizza certificati HTTPS provenienti dal sistema Certificate Store o da Keychain.\n"
"Per utilizzare un file CA personalizzato, importa il tuo file CA sul Certificate Store / Keychain."
#: src/slic3r/GUI/Preferences.cpp:222
msgid "Icon size in a respect to the default size"
msgstr "Dimensioni icona rispetto alla dimensione predefinita"
@ -4170,7 +4182,7 @@ msgstr "Distanza massima bridging"
#: src/libslic3r/PrintConfig.cpp:2269
msgid "Maximal distance between supports on sparse infill sections."
msgstr "Distanza massima tra supporti in sezioni a scarso riempimento."
msgstr "Distanza massima tra supporti in sezioni a riempimento sparso."
#: src/libslic3r/PrintConfig.cpp:1145
msgid "Maximum acceleration E"
@ -4602,6 +4614,10 @@ msgstr "Riparazione modello terminata"
msgid "Model repaired successfully"
msgstr "Modello riparato con successo"
#: src/slic3r/GUI/Tab.cpp:979
msgid "Modifications to the current profile will be saved."
msgstr "Verranno salvate le modifiche al profilo attuale."
#: src/slic3r/GUI/Preset.cpp:247
msgid "modified"
msgstr "modificato"
@ -4792,7 +4808,7 @@ msgstr "NESSUN RAMMING"
#: src/libslic3r/PrintConfig.cpp:1857
msgid "No sparse layers (EXPERIMENTAL)"
msgstr "Nessun layer rado (SPERIMENTALE)"
msgstr "Nessun layer sparso (SPERIMENTALE)"
#: src/libslic3r/PrintConfig.cpp:2774
msgid "No support points will be placed closer than this threshold."
@ -5399,10 +5415,10 @@ msgstr "Preset (%s)"
msgid "Preset with name \"%1%\" already exists."
msgstr "Preset con il nome \"%1%\" già esistente."
#: src/slic3r/GUI/Tab.cpp:3045
#: src/slic3r/GUI/Tab.cpp:3029
msgctxt "PresetName"
msgid "%1% - Copy"
msgstr "%1% - Copia"
msgid "Copy"
msgstr "Copia"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
msgid "Press to activate deselection rectangle"
@ -6441,16 +6457,6 @@ msgstr "Seleziona il tipo di Pad richiesto"
msgid "Select what kind of support do you need"
msgstr "Seleziona il tipo di supporto richiesto"
#: src/slic3r/GUI/DoubleSlider.cpp:1917
msgid ""
"Select YES if you want to delete all saved tool changes, \n"
"\tNO if you want all tool changes switch to color changes, \n"
"\tor CANCEL to leave it unchanged."
msgstr ""
"Seleziona SI se vuoi cancellare tutti i cambi attrezzo salvati,\n"
"NO se vuoi che tutti i cambi attrezzo passino a cambi colore,\n"
"o ANNULLA per lasciarlo invariato."
#: src/slic3r/GUI/DoubleSlider.cpp:1917
msgid ""
"Select YES if you want to delete all saved tool changes, \n"
@ -7616,6 +7622,10 @@ msgstr ""
"Il dispositivo %s non è stato trovato.\n"
"Se il dispositivo è connesso, premi il pulsante Reset vicino al connettore USB ..."
#: src/slic3r/GUI/Tab.cpp:976
msgid "The current custom preset will be detached from the parent system preset."
msgstr "Il preset personalizzato corrente sarà staccato dal preset del sistema padre."
#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875
msgid ""
"The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n"
@ -7772,18 +7782,14 @@ msgstr "L'oggetto selezionato non può essere diviso perché contiene più di un
msgid "The selected object couldn't be split because it contains only one part."
msgstr "L'oggetto selezionato non può essere diviso perché contiene solo una parte."
#: src/slic3r/GUI/MainFrame.cpp:432
#: src/slic3r/GUI/MainFrame.cpp:461
msgid ""
"The selected project is no longer available.\n"
"Do you want to remove it from the recent projects list ?"
"Do you want to remove it from the recent projects list?"
msgstr ""
"Il progetto selezionato non è più disponibile.\n"
"Vuoi rimuoverlo dall'elenco dei progetti recenti?"
#: src/slic3r/GUI/MainFrame.cpp:422
msgid "The selected project is no more available"
msgstr "Il progetto selezionato non è più disponibile"
#: src/slic3r/GUI/DoubleSlider.cpp:998
msgid ""
"The sequential print is on.\n"
@ -7953,6 +7959,14 @@ msgstr ""
msgid "This %s version: %s"
msgstr "%s versione: %s"
#: src/slic3r/GUI/Tab.cpp:982
msgid ""
"This action is not revertable.\n"
"Do you want to proceed?"
msgstr ""
"Questa azione non è reversibile.\n"
"Vuoi continuare?"
#: src/libslic3r/PrintConfig.cpp:165
msgid "This code is inserted between objects when using sequential printing. By default extruder and bed temperature are reset using non-wait command; however if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not add temperature commands. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
msgstr "Questo codice è inserito tra gli oggetti quando si utilizza una stampa sequenziale. Come predefinito, la temperatura di estrusione e del piano sono resettate con il comando non-attesa; in ogni caso se nel codice personalizzato vengono rilevati i comandi M104,M109,M140 o M190, Slic3r non aggiungerà i comandi di temperatura. Si fa presente che puoi usare variabili sostitutive per tutte le impostazioni di Slic3r, quindi puoi inserire un comando \"M109 S[first_layer_temperature]\" quando preferisci."
@ -8120,10 +8134,6 @@ msgstr "Questa è la massima altezza layer stampabile per questo estrusore, usat
msgid "This is the lowest printable layer height for this extruder and limits the resolution for variable layer height. Typical values are between 0.05 mm and 0.1 mm."
msgstr "Questa è l'altezza minima stampabile per questo estrusore e limita la risoluzione per l'altezza variabile dei layer. Valori tipici sono compresi tra 0.05 mm e 0.1 mm."
#: src/libslic3r/GCode.cpp:639
msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
msgstr "Questo solitamente è causato da estrusioni molto piccole o da un modello difettoso. Provare a riparare il modello o cambiare il suo orientamento sul piano."
#: src/libslic3r/GCode.cpp:639
msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
msgstr "Questo solitamente è causato da estrusioni molto piccole o da un modello difettoso. Provare a riparare il modello o cambiare il suo orientamento sul piano."

View file

@ -331,6 +331,10 @@ msgstr "アクティブなプリントプロファイルの構成値を使用す
msgid "A boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile."
msgstr "アクティブなプリンタープロファイルの構成値を使った論理式です。 この論理式が真の場合、このプロファイルはアクティブなプリンタープロファイルと互換性があると見なされます。"
#: src/slic3r/GUI/Tab.cpp:975
msgid "A copy of the current system preset will be created, which will be detached from the system preset."
msgstr "現在のシステムプリセットからコピーを作成し、システムプリセットから切り離します。"
#: src/slic3r/GUI/ConfigWizard.cpp:1034
msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
msgstr "一般的には、PLAは160〜230℃、ABSは215〜250℃です。"
@ -1561,13 +1565,6 @@ msgstr "現在のプリセット継承元"
msgid "Current preset is inherited from the default preset."
msgstr "現在の設定はデフォルト設定から継承されます。"
#: src/slic3r/GUI/Tab.cpp:960
#, c-format
msgid ""
"Current preset is inherited from:\n"
"\t%s"
msgstr "現在のプリセット継承元:%s"
#: src/slic3r/GUI/UpdateDialogs.cpp:43
msgid "Current version:"
msgstr "現在のバージョン:"
@ -1867,6 +1864,18 @@ msgstr "方形で選択解除"
msgid "Deselects all objects"
msgstr "全てのオブジェクトの選択解除"
#: src/slic3r/GUI/Tab.cpp:963
msgid "Detach from system preset"
msgstr "システムプリセットから取り外す"
#: src/slic3r/GUI/Tab.cpp:984
msgid "Detach preset"
msgstr "プリセットを切り離す"
#: src/slic3r/GUI/Tab.cpp:3029
msgid "Detached"
msgstr "取り外しました"
#: src/libslic3r/PrintConfig.cpp:1373
msgid "Detect bridging perimeters"
msgstr "ブリッジ外周の検出"
@ -2127,6 +2136,23 @@ msgstr "マーカーの編集-マウスの右ボタン"
msgid "Editing"
msgstr "編集中"
#: src/slic3r/GUI/MainFrame.cpp:547
msgid "Ejec&t SD card / Flash drive"
msgstr "SDカード/USBメモリーを取り出す(&t)"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
msgid "Eject SD card / Flash drive"
msgstr "SDカード/USBメモリーを取り出す"
#: src/slic3r/GUI/MainFrame.cpp:547
msgid "Eject SD card / Flash drive after the G-code was exported to it."
msgstr "Gコードをエクスポートした後に、SDカード/USBメモリーを取り出します。"
#: src/slic3r/GUI/Plater.cpp:2202
#, c-format
msgid "Ejecting of device %s(%s) has failed."
msgstr "デバイス %s(%s) の取り出しに失敗しました。"
#: src/libslic3r/PrintConfig.cpp:118
msgid "Elephant foot compensation"
msgstr "最初の層の広がり補正"
@ -2417,6 +2443,10 @@ msgstr "現在のプレートをAMFとしてエクスポート"
msgid "Export current plate as G-code"
msgstr "現在のプレートをGコードとしてエクスポート"
#: src/slic3r/GUI/MainFrame.cpp:521
msgid "Export current plate as G-code to SD card / Flash drive"
msgstr "現在のプレートをGコードとしてSDカード/USBメモリーにエクスポート"
#: src/slic3r/GUI/MainFrame.cpp:486
msgid "Export current plate as STL"
msgstr "現在のプレートをSTLとしてエクスポート"
@ -2438,6 +2468,10 @@ msgstr "モデルのフルパス名とパーツソースを3mfおよびamfファ
msgid "Export G-code"
msgstr "Gコードのエクスポート"
#: src/slic3r/GUI/MainFrame.cpp:521
msgid "Export G-code to SD card / Flash drive"
msgstr "GコードをSDカード/USBメモリーにエクスポート"
#: src/libslic3r/PrintConfig.cpp:3320
msgid "Export OBJ"
msgstr "OBJのエクスポート"
@ -2938,13 +2972,6 @@ msgstr "詳細については、Wikiページをご覧ください:"
msgid "For support enforcers only"
msgstr "強制サポートのみ"
#. TRN Description for "WHITE BULLET"
#: src/slic3r/GUI/Tab.cpp:3265
msgid ""
"for the left button: \tindicates a non-system (or non-default) preset,\n"
"for the right button: \tindicates that the settings hasn't been modified."
msgstr "左ボタンの場合:システム(デフォルト)プリセットでないことを示し、右側ボタンの場合:設定が変更されていないことを示します。"
#. TRN Description for "WHITE BULLET"
#: src/slic3r/GUI/Tab.cpp:3267
msgid ""
@ -3362,17 +3389,6 @@ msgstr "HTTPS CAファイル"
msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate."
msgstr "HTTPS CAファイルはオプションです。 HTTPSを自己署名証明書で使用する場合にのみ必要です。"
#: src/slic3r/GUI/Tab.cpp:1757
#, c-format
msgid ""
"HTTPS CA File:\n"
" \tOn this system, %s uses HTTPS certificates from the system Certificate Store or Keychain.\n"
" \tTo use a custom CA file, please import your CA file into Certificate Store / Keychain."
msgstr ""
"HTTPS CAファイル\n"
"     このシステムでは、%sはシステムの証明書ストアまたはキーチェーンからのHTTPS証明書を使用します。\n"
"     カスタムCAファイルを使用するには、CAファイルを証明書ストア/キーチェーンにインポートしてください。"
#: src/slic3r/GUI/Preferences.cpp:222
msgid "Icon size in a respect to the default size"
msgstr "デフォルトのサイズと相対的なアイコンのサイズ"
@ -4572,6 +4588,10 @@ msgstr "モデル修正完了"
msgid "Model repaired successfully"
msgstr "モデルの修復完了"
#: src/slic3r/GUI/Tab.cpp:979
msgid "Modifications to the current profile will be saved."
msgstr "現在のプロファイルの編集が保存されます。"
#: src/slic3r/GUI/Preset.cpp:247
msgid "modified"
msgstr "変更あり"
@ -5370,10 +5390,10 @@ msgstr "プリセット(%s)"
msgid "Preset with name \"%1%\" already exists."
msgstr "\"%1%\"というプリセット名は既に存在します。"
#: src/slic3r/GUI/Tab.cpp:3045
#: src/slic3r/GUI/Tab.cpp:3029
msgctxt "PresetName"
msgid "%1% - Copy"
msgstr "%1% - コピー"
msgid "Copy"
msgstr "コピー"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
msgid "Press to activate deselection rectangle"
@ -6409,16 +6429,6 @@ msgstr "必要なパッドの種類を選択してください"
msgid "Select what kind of support do you need"
msgstr "必要なサポートの種類を選択してください"
#: src/slic3r/GUI/DoubleSlider.cpp:1917
msgid ""
"Select YES if you want to delete all saved tool changes, \n"
"\tNO if you want all tool changes switch to color changes, \n"
"\tor CANCEL to leave it unchanged."
msgstr ""
"保存したツールの変更をすべて削除する場合は、「はい」を選択します。\n"
"すべてのツールの変更を色の変更に切り替えたい場合は「いいえ」、\n"
"または「キャンセル」で変更せずにそのままにします"
#: src/slic3r/GUI/DoubleSlider.cpp:1917
msgid ""
"Select YES if you want to delete all saved tool changes, \n"
@ -7579,6 +7589,10 @@ msgstr ""
"%sデバイスが見つかりませんでした。\n"
"デバイスが接続されている場合は、USBコネクタの横にあるリセットボタンを押してください..."
#: src/slic3r/GUI/Tab.cpp:976
msgid "The current custom preset will be detached from the parent system preset."
msgstr "現在のカスタムプリセットは、親システムプリセットから切り離されます。"
#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875
msgid ""
"The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n"
@ -7734,18 +7748,14 @@ msgstr "選択したオブジェクトには複数のボリューム/マテリ
msgid "The selected object couldn't be split because it contains only one part."
msgstr "選択したオブジェクトには、1つのパーツしか含まれていないため、分割できませんでした。"
#: src/slic3r/GUI/MainFrame.cpp:432
#: src/slic3r/GUI/MainFrame.cpp:461
msgid ""
"The selected project is no longer available.\n"
"Do you want to remove it from the recent projects list ?"
"Do you want to remove it from the recent projects list?"
msgstr ""
"選択したプロジェクトは使用できなくなりました。\n"
"最近のプロジェクトリストから削除しますか?"
#: src/slic3r/GUI/MainFrame.cpp:422
msgid "The selected project is no more available"
msgstr "選択したプロジェクトはもう利用できません"
#: src/slic3r/GUI/DoubleSlider.cpp:998
msgid ""
"The sequential print is on.\n"
@ -7914,6 +7924,14 @@ msgstr ""
msgid "This %s version: %s"
msgstr "この%sのバージョン: %s"
#: src/slic3r/GUI/Tab.cpp:982
msgid ""
"This action is not revertable.\n"
"Do you want to proceed?"
msgstr ""
"この操作は元に戻せません。\n"
"続行しますか?"
#: src/libslic3r/PrintConfig.cpp:165
msgid "This code is inserted between objects when using sequential printing. By default extruder and bed temperature are reset using non-wait command; however if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not add temperature commands. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
msgstr "このコードは、オブジェクト別の順次プリンティングを使用するとき、オブジェクト間に挿入されます。 デフォルトでは、エクストルーダーとベッドの温度は非待機コマンドを使用します(M104/M140)。 ただし、このカスタムコードでM104、M109、M140またはM190が記述された場合、Slic3rは温度コマンドを追加しません。 すべてのSlic3r代替変数を使用できるため、「M109 S [first_layer_temperature]」コマンドを必要な場所に記述できます。"
@ -8082,10 +8100,6 @@ msgstr "これは、このエクストルーダーの最大プリント可能レ
msgid "This is the lowest printable layer height for this extruder and limits the resolution for variable layer height. Typical values are between 0.05 mm and 0.1 mm."
msgstr "このエクストルーダーの最小プリント可能なレイヤー高さ。 可変レイヤー高の解像度を制限します。一般的な値は0.05mmと0.1mmの間です。"
#: src/libslic3r/GCode.cpp:639
msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
msgstr "これは通常、無視できるほど少量の押出量またはモデルの欠陥が原因です。 ベッド上のモデルの修復または向きを再配置してみてください。"
#: src/libslic3r/GCode.cpp:639
msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
msgstr "これは通常、無視できるほど少量の押出量またはモデルの欠陥が原因です。 ベッド上のモデルの修復または向きを再配置してみてください。"

File diff suppressed because it is too large Load diff

View file

@ -337,6 +337,10 @@ msgstr "Wyrażenie logiczne (Boole'owskie) używające wartości konfiguracji ak
msgid "A boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile."
msgstr "Wyrażenie logiczne (Boole'owskie) używające wartości konfiguracji aktywnego profilu drukarki. Jeśli to wyrażenie jest prawdziwe to znaczy, że aktywny profil jest kompatybilny z drukarką."
#: src/slic3r/GUI/Tab.cpp:975
msgid "A copy of the current system preset will be created, which will be detached from the system preset."
msgstr "Zostanie utworzona kopia obecnego zestawu ustawień i odłączona od ustawień systemowych."
#: src/slic3r/GUI/ConfigWizard.cpp:1034
msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
msgstr "Generalną zasadą jest 160 do 230 °C dla PLA i 215 do 250 °C dla ABS."
@ -1569,15 +1573,6 @@ msgstr "Obecny zestaw ustawień jest dziedziczony z"
msgid "Current preset is inherited from the default preset."
msgstr "Obecny zestaw ustawień jest dziedziczony z zestawu domyślnego."
#: src/slic3r/GUI/Tab.cpp:960
#, c-format
msgid ""
"Current preset is inherited from:\n"
"\t%s"
msgstr ""
"Obecny zestaw ustawień jest dziedziczony z:\n"
"%s"
#: src/slic3r/GUI/UpdateDialogs.cpp:43
msgid "Current version:"
msgstr "Obecna wersja:"
@ -1877,6 +1872,18 @@ msgstr "Odznaczenie prostokątem"
msgid "Deselects all objects"
msgstr "Odznacza wszystkie modele"
#: src/slic3r/GUI/Tab.cpp:963
msgid "Detach from system preset"
msgstr "Odłącz od ustawień systemowych"
#: src/slic3r/GUI/Tab.cpp:984
msgid "Detach preset"
msgstr "Odłącz zestaw ustawień"
#: src/slic3r/GUI/Tab.cpp:3029
msgid "Detached"
msgstr "Odłączono"
#: src/libslic3r/PrintConfig.cpp:1373
msgid "Detect bridging perimeters"
msgstr "Wykrywanie mostów przy obrysach"
@ -2140,6 +2147,23 @@ msgstr "Edytuj zaznaczenie - kliknij prawym przyciskiem"
msgid "Editing"
msgstr "Edytowanie"
#: src/slic3r/GUI/MainFrame.cpp:547
msgid "Ejec&t SD card / Flash drive"
msgstr "Wysuń kar&tę SD / pamięć flash"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
msgid "Eject SD card / Flash drive"
msgstr "Wysuń kartę SD / pamięć flash"
#: src/slic3r/GUI/MainFrame.cpp:547
msgid "Eject SD card / Flash drive after the G-code was exported to it."
msgstr "Wysuń kartę SD / pamięć flash po wyeksportowaniu na nią G-code."
#: src/slic3r/GUI/Plater.cpp:2202
#, c-format
msgid "Ejecting of device %s(%s) has failed."
msgstr "Wysuwanie urządzenia %s(%s) nie powiodło się."
#: src/libslic3r/PrintConfig.cpp:118
msgid "Elephant foot compensation"
msgstr "Kompensacja \"stopy słonia\""
@ -2430,6 +2454,10 @@ msgstr "Eksport zawartości stołu jako AMF"
msgid "Export current plate as G-code"
msgstr "Eksport zawartości stołu jako G-code"
#: src/slic3r/GUI/MainFrame.cpp:521
msgid "Export current plate as G-code to SD card / Flash drive"
msgstr "Eksport zawartości stołu jako G-gode na kartę SD / pamięć flash"
#: src/slic3r/GUI/MainFrame.cpp:486
msgid "Export current plate as STL"
msgstr "Eksport zawartości stołu jako STL"
@ -2451,6 +2479,10 @@ msgstr "Eksport pełnych ścieżek źródłowych modeli i części do plików 3M
msgid "Export G-code"
msgstr "Eksport G-code"
#: src/slic3r/GUI/MainFrame.cpp:521
msgid "Export G-code to SD card / Flash drive"
msgstr "Eksport G-gode na kartę SD / pamięć flash"
#: src/libslic3r/PrintConfig.cpp:3320
msgid "Export OBJ"
msgstr "Eksport OBJ"
@ -2951,15 +2983,6 @@ msgstr "Aby uzyskać więcej informacji odwiedź naszą wiki:"
msgid "For support enforcers only"
msgstr "Tylko dla wymuszania podpór"
#. TRN Description for "WHITE BULLET"
#: src/slic3r/GUI/Tab.cpp:3265
msgid ""
"for the left button: \tindicates a non-system (or non-default) preset,\n"
"for the right button: \tindicates that the settings hasn't been modified."
msgstr ""
"dla lewego przycisku: wskazuje na niesystemowy (lub inny niż domyślny) zestaw ustawień,\n"
"dla prawego przycisku: wskazuje, że ustawienia nie zostały zmodyfikowane."
#. TRN Description for "WHITE BULLET"
#: src/slic3r/GUI/Tab.cpp:3267
msgid ""
@ -3377,16 +3400,6 @@ msgstr "Plik certyfikatu HTTPS CA"
msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate."
msgstr "Plik HTTPS CA jest opcjonalny. Jest potrzebny jedynie w sytuacji, gdy używasz HTTPS z certyfikatem samopodpisanym."
#: src/slic3r/GUI/Tab.cpp:1757
#, c-format
msgid ""
"HTTPS CA File:\n"
" \tOn this system, %s uses HTTPS certificates from the system Certificate Store or Keychain.\n"
" \tTo use a custom CA file, please import your CA file into Certificate Store / Keychain."
msgstr ""
"Plik certyfikatu HTTPS:\n"
"W tym systemie, %s używa certyfikatu HTTPS z magazynu systemowego (Certificate Store) lub Keychain. Aby użyć własnego certyfikatu, zaimportuj plik do Certificate Store / Keychain."
#: src/slic3r/GUI/Preferences.cpp:222
msgid "Icon size in a respect to the default size"
msgstr "Rozmiar ikon w odniesieniu do domyślnego"
@ -4603,6 +4616,10 @@ msgstr "Ukończono naprawę modelu"
msgid "Model repaired successfully"
msgstr "Model naprawiono pomyślnie"
#: src/slic3r/GUI/Tab.cpp:979
msgid "Modifications to the current profile will be saved."
msgstr "Modyfikacje zostaną zapisane na obecnym profilu."
#: src/slic3r/GUI/Preset.cpp:247
msgid "modified"
msgstr "zmodyfikowano"
@ -5400,10 +5417,10 @@ msgstr "Zestaw ustawień (%s)"
msgid "Preset with name \"%1%\" already exists."
msgstr "Zestaw ustawień o nazwie \"%1%\" już istnieje."
#: src/slic3r/GUI/Tab.cpp:3045
#: src/slic3r/GUI/Tab.cpp:3029
msgctxt "PresetName"
msgid "%1% - Copy"
msgstr "%1% - Kopia"
msgid "Copy"
msgstr "Kopia"
#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
msgid "Press to activate deselection rectangle"
@ -6446,16 +6463,6 @@ msgstr "Wybierz rodzaj wymaganej podkładki"
msgid "Select what kind of support do you need"
msgstr "Wybierz rodzaj potrzebnych podpór"
#: src/slic3r/GUI/DoubleSlider.cpp:1917
msgid ""
"Select YES if you want to delete all saved tool changes, \n"
"\tNO if you want all tool changes switch to color changes, \n"
"\tor CANCEL to leave it unchanged."
msgstr ""
"Wybierz TAK, jeśli chcesz usunąć wszystkie zapisane zmiany narzędzi,\n"
"NIE, jeśli chcesz przełączyć zmiany narzędzi na zmiany koloru lub\n"
"ANULUJ, aby pozostawić bez zmian."
#: src/slic3r/GUI/DoubleSlider.cpp:1917
msgid ""
"Select YES if you want to delete all saved tool changes, \n"
@ -7618,6 +7625,10 @@ msgstr ""
"Nie znaleziono urządzenia %s .\n"
"Jeśli urządzenie jest podłączone, to naciśnij przycisk Reset obok złącza USB ..."
#: src/slic3r/GUI/Tab.cpp:976
msgid "The current custom preset will be detached from the parent system preset."
msgstr "Obecny niestandardowy zestaw ustawień zostanie odłączony od dziedziczącego zestawu systemowego."
#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875
msgid ""
"The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n"
@ -7774,18 +7785,14 @@ msgstr "Wybrany model nie może być podzielony ponieważ składa się z więcej
msgid "The selected object couldn't be split because it contains only one part."
msgstr "Wybrany model nie może być rozdzielony ponieważ zawiera tylko jedną część."
#: src/slic3r/GUI/MainFrame.cpp:432
#: src/slic3r/GUI/MainFrame.cpp:461
msgid ""
"The selected project is no longer available.\n"
"Do you want to remove it from the recent projects list ?"
"Do you want to remove it from the recent projects list?"
msgstr ""
"Wybrany obiekt nie jest już dostępny.\n"
"Czy chcesz usunąć go z listy niedawno używanych projektów?"
#: src/slic3r/GUI/MainFrame.cpp:422
msgid "The selected project is no more available"
msgstr "Wybrany projekt nie jest dostępny"
#: src/slic3r/GUI/DoubleSlider.cpp:998
msgid ""
"The sequential print is on.\n"
@ -7955,6 +7962,14 @@ msgstr ""
msgid "This %s version: %s"
msgstr "%s wersja: %s"
#: src/slic3r/GUI/Tab.cpp:982
msgid ""
"This action is not revertable.\n"
"Do you want to proceed?"
msgstr ""
"Tej czynności nie można odwrócić.\n"
"Czy chcesz kontynuować?"
#: src/libslic3r/PrintConfig.cpp:165
msgid "This code is inserted between objects when using sequential printing. By default extruder and bed temperature are reset using non-wait command; however if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not add temperature commands. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
msgstr "Ten kod jest wykonywany pomiędzy drukiem poszczególnych modeli w trybie druku sekwencyjnego. Domyślnie przy komendzie non-wait temperatury dyszy i stołu są resetowane; jednakże jeśli przy tej opcji zostaną użyte komendy M104, M109, M140 lub M190 to Slic3r nie doda własnych komend do kontroli temperatury. Pamiętaj, że możesz używać zmiennych typu placeholder, więc np. komendę \"M109 S[first_layer_temperature]\" (temperatura pierwszej warstwy) możesz umieścić gdzie chcesz."
@ -8123,10 +8138,6 @@ msgstr "To jest najwyższa możliwa do wydrukowania wysokość warstwy dla tego
msgid "This is the lowest printable layer height for this extruder and limits the resolution for variable layer height. Typical values are between 0.05 mm and 0.1 mm."
msgstr "To jest najniższa możliwa do wydrukowania wysokość warstwy dla tego ekstrudera i jednocześnie dolny limit dla funkcji zmiennej wysokości warstwy. Zazwyczaj jest to 0.05 lub 0.1 mm."
#: src/libslic3r/GCode.cpp:639
msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
msgstr "Dzieje się to zazwyczaj z powodu zbyt małych odcinków ekstruzji (są one pomijane) lub uszkodzenia modelu. Spróbuj naprawić model lub zmienić jego orientację na stole."
#: src/libslic3r/GCode.cpp:639
msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
msgstr "Dzieje się to zazwyczaj z powodu zbyt małych odcinków ekstruzji (są one pomijane) lub uszkodzenia modelu. Spróbuj naprawić model lub zmienić jego orientację na stole."

View file

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View file

@ -0,0 +1,2 @@
min_slic3r_version = 2.2.0-alpha3
0.0.1 Initial version

View file

@ -2,9 +2,9 @@
[vendor]
# Vendor name will be shown by the Config Wizard.
name = Lulzbot
name = LulzBot
config_version = 0.0.1
config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Lulzbot/
config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/LulzBot/
[printer_model:MINI_AERO]
name = Mini Aero

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View file

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View file

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View file

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View file

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View file

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View file

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

View file

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

View file

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View file

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View file

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View file

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View file

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View file

@ -470,7 +470,7 @@ void GCodeAnalyzer::_processM106(const GCodeReader::GCodeLine& line)
// The absence of P means the print cooling fan, so ignore anything else.
float new_fan_speed;
if (line.has_value('S', new_fan_speed))
_set_fan_speed((100.0f / 256.0f) * new_fan_speed);
_set_fan_speed((100.0f / 255.0f) * new_fan_speed);
else
_set_fan_speed(100.0f);
}

View file

@ -101,8 +101,7 @@ void BackgroundSlicingProcess::process_fff()
//FIXME localize the messages
// Perform the final post-processing of the export path by applying the print statistics over the file name.
std::string export_path = m_fff_print->print_statistics().finalize_output_path(m_export_path);
bool with_check = GUI::wxGetApp().removable_drive_manager()->is_path_on_removable_drive(export_path);
int copy_ret_val = copy_file(m_temp_output_path, export_path, with_check);
int copy_ret_val = copy_file(m_temp_output_path, export_path, m_export_path_on_removable_media);
switch (copy_ret_val) {
case SUCCESS: break; // no error
case FAIL_COPY_FILE:
@ -402,7 +401,7 @@ void BackgroundSlicingProcess::set_task(const PrintBase::TaskParams &params)
}
// Set the output path of the G-code.
void BackgroundSlicingProcess::schedule_export(const std::string &path)
void BackgroundSlicingProcess::schedule_export(const std::string &path, bool export_path_on_removable_media)
{
assert(m_export_path.empty());
if (! m_export_path.empty())
@ -412,6 +411,7 @@ void BackgroundSlicingProcess::schedule_export(const std::string &path)
tbb::mutex::scoped_lock lock(m_print->state_mutex());
this->invalidate_step(bspsGCodeFinalize);
m_export_path = path;
m_export_path_on_removable_media = export_path_on_removable_media;
}
void BackgroundSlicingProcess::schedule_upload(Slic3r::PrintHostJob upload_job)
@ -432,6 +432,7 @@ void BackgroundSlicingProcess::reset_export()
assert(! this->running());
if (! this->running()) {
m_export_path.clear();
m_export_path_on_removable_media = false;
// invalidate_step expects the mutex to be locked.
tbb::mutex::scoped_lock lock(m_print->state_mutex());
this->invalidate_step(bspsGCodeFinalize);

View file

@ -98,7 +98,7 @@ public:
// Set the export path of the G-code.
// Once the path is set, the G-code
void schedule_export(const std::string &path);
void schedule_export(const std::string &path, bool export_path_on_removable_media);
// Set print host upload job data to be enqueued to the PrintHostJobQueue
// after current print slicing is complete
void schedule_upload(Slic3r::PrintHostJob upload_job);
@ -157,13 +157,14 @@ private:
GCodePreviewData *m_gcode_preview_data = nullptr;
#if ENABLE_THUMBNAIL_GENERATOR
// Callback function, used to write thumbnails into gcode.
ThumbnailsGeneratorCallback m_thumbnail_cb = nullptr;
ThumbnailsGeneratorCallback m_thumbnail_cb = nullptr;
#endif // ENABLE_THUMBNAIL_GENERATOR
// Temporary G-code, there is one defined for the BackgroundSlicingProcess, differentiated from the other processes by a process ID.
std::string m_temp_output_path;
// Output path provided by the user. The output path may be set even if the slicing is running,
// but once set, it cannot be re-set.
std::string m_export_path;
bool m_export_path_on_removable_media = false;
// Print host upload job to schedule after slicing is complete, used by schedule_upload(),
// empty by default (ie. no upload to schedule)
PrintHostJob m_upload_job;

View file

@ -188,7 +188,7 @@ PrinterPicker::PrinterPicker(wxWindow *parent, const VendorProfile &vendor, wxSt
wxBitmap bitmap;
int bitmap_width = 0;
const wxString bitmap_file = GUI::from_u8(Slic3r::var((boost::format("printers/%1%_%2%.png") % vendor.id % model.id).str()));
const wxString bitmap_file = GUI::from_u8(Slic3r::resources_dir() + "/profiles/" + vendor.id + "/" + model.id + "_thumbnail.png");
if (wxFileExists(bitmap_file)) {
bitmap.LoadFile(bitmap_file, wxBITMAP_TYPE_PNG);
bitmap_width = bitmap.GetWidth();

View file

@ -663,7 +663,7 @@ void GLCanvas3D::WarningTexture::activate(WarningTexture::Warning warning, bool
if (it != m_warnings.end()) // this warning is already set to be shown
return;
m_warnings.push_back(warning);
m_warnings.emplace_back(warning);
std::sort(m_warnings.begin(), m_warnings.end());
}
else {
@ -1289,7 +1289,7 @@ void GLCanvas3D::Labels::render(const std::vector<const ModelInstance*>& sorted_
if (model_object->instances.size() > 1)
owner.label += " (" + std::to_string(inst_idx + 1) + ")";
owner.selected = volume->selected;
owners.push_back(owner);
owners.emplace_back(owner);
}
}
}
@ -2029,7 +2029,7 @@ std::vector<int> GLCanvas3D::load_object(const ModelObject& model_object, int ob
{
for (unsigned int i = 0; i < model_object.instances.size(); ++i)
{
instance_idxs.push_back(i);
instance_idxs.emplace_back(i);
}
}
return m_volumes.load_object(&model_object, obj_idx, instance_idxs, m_color_by, m_initialized);
@ -2469,9 +2469,9 @@ static void load_gcode_retractions(const GCodePreviewData::Retraction& retractio
for (const GCodePreviewData::Retraction::Position& position : copy)
{
volume->print_zs.push_back(unscale<double>(position.position(2)));
volume->offsets.push_back(volume->indexed_vertex_array.quad_indices.size());
volume->offsets.push_back(volume->indexed_vertex_array.triangle_indices.size());
volume->print_zs.emplace_back(unscale<double>(position.position(2)));
volume->offsets.emplace_back(volume->indexed_vertex_array.quad_indices.size());
volume->offsets.emplace_back(volume->indexed_vertex_array.triangle_indices.size());
_3DScene::point3_to_verts(position.position, position.width, position.height, *volume);
@ -4109,7 +4109,7 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, bool
if (!vol->is_modifier && !vol->is_wipe_tower && (!parts_only || (vol->composite_id.volume_id >= 0)))
{
if (!printable_only || is_visible(*vol))
visible_volumes.push_back(vol);
visible_volumes.emplace_back(vol);
}
}
@ -4813,7 +4813,7 @@ void GLCanvas3D::_picking_pass() const
}
if ((0 <= volume_id) && (volume_id < (int)m_volumes.volumes.size()))
{
m_hover_volume_idxs.push_back(volume_id);
m_hover_volume_idxs.emplace_back(volume_id);
m_gizmos.set_hover_id(-1);
}
else
@ -5057,7 +5057,7 @@ void GLCanvas3D::_render_overlays() const
if (sequential_print) {
for (ModelObject* model_object : m_model->objects)
for (ModelInstance* model_instance : model_object->instances) {
sorted_instances.push_back(model_instance);
sorted_instances.emplace_back(model_instance);
}
}
m_labels.render(sorted_instances);
@ -5515,29 +5515,26 @@ void GLCanvas3D::_load_print_toolpaths()
if ((skirt_height == 0) && (print->config().brim_width.value > 0))
skirt_height = 1;
// get first skirt_height layers (maybe this should be moved to a PrintObject method?)
const PrintObject* object0 = print->objects().front();
// Get first skirt_height layers.
//FIXME This code is fishy. It may not work for multiple objects with different layering due to variable layer height feature.
// This is not critical as this is just an initial preview.
const PrintObject* highest_object = *std::max_element(print->objects().begin(), print->objects().end(), [](auto l, auto r){ return l->layers().size() < r->layers().size(); });
std::vector<float> print_zs;
print_zs.reserve(skirt_height * 2);
for (size_t i = 0; i < std::min(skirt_height, object0->layers().size()); ++i)
{
print_zs.push_back(float(object0->layers()[i]->print_z));
}
//FIXME why there are support layers?
for (size_t i = 0; i < std::min(skirt_height, object0->support_layers().size()); ++i)
{
print_zs.push_back(float(object0->support_layers()[i]->print_z));
}
for (size_t i = 0; i < std::min(skirt_height, highest_object->layers().size()); ++ i)
print_zs.emplace_back(float(highest_object->layers()[i]->print_z));
// Only add skirt for the raft layers.
for (size_t i = 0; i < std::min(skirt_height, std::min(highest_object->slicing_parameters().raft_layers(), highest_object->support_layers().size())); ++ i)
print_zs.emplace_back(float(highest_object->support_layers()[i]->print_z));
sort_remove_duplicates(print_zs);
if (print_zs.size() > skirt_height)
print_zs.erase(print_zs.begin() + skirt_height, print_zs.end());
skirt_height = std::min(skirt_height, print_zs.size());
print_zs.erase(print_zs.begin() + skirt_height, print_zs.end());
GLVolume *volume = m_volumes.new_toolpath_volume(color, VERTEX_BUFFER_RESERVE_SIZE);
for (size_t i = 0; i < skirt_height; ++i) {
volume->print_zs.push_back(print_zs[i]);
volume->offsets.push_back(volume->indexed_vertex_array.quad_indices.size());
volume->offsets.push_back(volume->indexed_vertex_array.triangle_indices.size());
for (size_t i = 0; i < skirt_height; ++ i) {
volume->print_zs.emplace_back(print_zs[i]);
volume->offsets.emplace_back(volume->indexed_vertex_array.quad_indices.size());
volume->offsets.emplace_back(volume->indexed_vertex_array.triangle_indices.size());
if (i == 0)
_3DScene::extrusionentity_to_verts(print->brim(), print_zs[i], Point(0, 0), *volume);
_3DScene::extrusionentity_to_verts(print->skirt(), print_zs[i], Point(0, 0), *volume);
@ -5703,10 +5700,10 @@ void GLCanvas3D::_load_print_object_toolpaths(const PrintObject& print_object, c
}
if (ctxt.has_perimeters || ctxt.has_infill)
for (const Layer *layer : print_object.layers())
ctxt.layers.push_back(layer);
ctxt.layers.emplace_back(layer);
if (ctxt.has_support)
for (const Layer *layer : print_object.support_layers())
ctxt.layers.push_back(layer);
ctxt.layers.emplace_back(layer);
std::sort(ctxt.layers.begin(), ctxt.layers.end(), [](const Layer *l1, const Layer *l2) { return l1->print_z < l2->print_z; });
// Maximum size of an allocation block: 32MB / sizeof(float)
@ -5775,9 +5772,9 @@ void GLCanvas3D::_load_print_object_toolpaths(const PrintObject& print_object, c
for (GLVolume *vol : vols)
if (vol->print_zs.empty() || vol->print_zs.back() != layer->print_z) {
vol->print_zs.push_back(layer->print_z);
vol->offsets.push_back(vol->indexed_vertex_array.quad_indices.size());
vol->offsets.push_back(vol->indexed_vertex_array.triangle_indices.size());
vol->print_zs.emplace_back(layer->print_z);
vol->offsets.emplace_back(vol->indexed_vertex_array.quad_indices.size());
vol->offsets.emplace_back(vol->indexed_vertex_array.triangle_indices.size());
}
for (const PrintInstance &instance : *ctxt.shifted_copies) {
const Point &copy = instance.shift;
@ -5933,9 +5930,9 @@ void GLCanvas3D::_load_wipe_tower_toolpaths(const std::vector<std::string>& str_
for (size_t i = 0; i < vols.size(); ++i) {
GLVolume &vol = *vols[i];
if (vol.print_zs.empty() || vol.print_zs.back() != layer.front().print_z) {
vol.print_zs.push_back(layer.front().print_z);
vol.offsets.push_back(vol.indexed_vertex_array.quad_indices.size());
vol.offsets.push_back(vol.indexed_vertex_array.triangle_indices.size());
vol.print_zs.emplace_back(layer.front().print_z);
vol.offsets.emplace_back(vol.indexed_vertex_array.quad_indices.size());
vol.offsets.emplace_back(vol.indexed_vertex_array.triangle_indices.size());
}
}
for (const WipeTower::ToolChangeResult &extrusions : layer) {
@ -6148,9 +6145,9 @@ void GLCanvas3D::_load_gcode_extrusion_paths(const GCodePreviewData& preview_dat
assert(it_filter != filters.end() && key.first == it_filter->first);
GLVolume& vol = *it_filter->second;
vol.print_zs.push_back(layer.z);
vol.offsets.push_back(vol.indexed_vertex_array.quad_indices.size());
vol.offsets.push_back(vol.indexed_vertex_array.triangle_indices.size());
vol.print_zs.emplace_back(layer.z);
vol.offsets.emplace_back(vol.indexed_vertex_array.quad_indices.size());
vol.offsets.emplace_back(vol.indexed_vertex_array.triangle_indices.size());
_3DScene::extrusionentity_to_verts(path.polyline, path.width, path.height, layer.z, vol);
}
@ -6222,9 +6219,9 @@ inline void travel_paths_internal(
assert(it != by_type.end() && it->first == func_value(polyline));
GLVolume& vol = *it->second;
vol.print_zs.push_back(unscale<double>(polyline.polyline.bounding_box().min(2)));
vol.offsets.push_back(vol.indexed_vertex_array.quad_indices.size());
vol.offsets.push_back(vol.indexed_vertex_array.triangle_indices.size());
vol.print_zs.emplace_back(unscale<double>(polyline.polyline.bounding_box().min(2)));
vol.offsets.emplace_back(vol.indexed_vertex_array.quad_indices.size());
vol.offsets.emplace_back(vol.indexed_vertex_array.triangle_indices.size());
_3DScene::polyline3_to_verts(polyline.polyline, preview_data.travel.width, preview_data.travel.height, vol);

View file

@ -10,6 +10,7 @@
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/log/trivial.hpp>
#include <boost/nowide/convert.hpp>
#include <wx/stdpaths.h>
#include <wx/imagpng.h>
@ -50,6 +51,7 @@
#ifdef __WXMSW__
#include <Shlobj.h>
#include <dbt.h>
#endif // __WXMSW__
#if ENABLE_THUMBNAIL_GENERATOR_DEBUG
@ -60,6 +62,7 @@
namespace Slic3r {
namespace GUI {
class MainFrame;
wxString file_wildcards(FileType file_type, const std::string &custom_extension)
{
@ -96,9 +99,9 @@ wxString file_wildcards(FileType file_type, const std::string &custom_extension)
static std::string libslic3r_translate_callback(const char *s) { return wxGetTranslation(wxString(s, wxConvUTF8)).utf8_str().data(); }
static void register_dpi_event()
{
#ifdef WIN32
static void register_win32_dpi_event()
{
enum { WM_DPICHANGED_ = 0x02e0 };
wxWindow::MSWRegisterMessageHandler(WM_DPICHANGED_, [](wxWindow *win, WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) {
@ -111,9 +114,52 @@ static void register_dpi_event()
return true;
});
#endif
}
static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 };
static void register_win32_device_notification_event()
{
enum { WM_DPICHANGED_ = 0x02e0 };
wxWindow::MSWRegisterMessageHandler(WM_DEVICECHANGE, [](wxWindow *win, WXUINT /* nMsg */, WXWPARAM wParam, WXLPARAM lParam) {
// Some messages are sent to top level windows by default, some messages are sent to only registered windows, and we explictely register on MainFrame only.
auto main_frame = dynamic_cast<MainFrame*>(win);
auto plater = (main_frame == nullptr) ? nullptr : main_frame->plater();
if (plater == nullptr)
// Maybe some other top level window like a dialog or maybe a pop-up menu?
return true;
PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
switch (wParam) {
case DBT_DEVICEARRIVAL:
if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
plater->GetEventHandler()->AddPendingEvent(VolumeAttachedEvent(EVT_VOLUME_ATTACHED));
else if (lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) {
PDEV_BROADCAST_DEVICEINTERFACE lpdbi = (PDEV_BROADCAST_DEVICEINTERFACE)lpdb;
// if (lpdbi->dbcc_classguid == GUID_DEVINTERFACE_VOLUME) {
// printf("DBT_DEVICEARRIVAL %d - Media has arrived: %ws\n", msg_count, lpdbi->dbcc_name);
if (lpdbi->dbcc_classguid == GUID_DEVINTERFACE_HID)
plater->GetEventHandler()->AddPendingEvent(HIDDeviceAttachedEvent(EVT_HID_DEVICE_ATTACHED, boost::nowide::narrow(lpdbi->dbcc_name)));
}
break;
case DBT_DEVICEREMOVECOMPLETE:
if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
plater->GetEventHandler()->AddPendingEvent(VolumeDetachedEvent(EVT_VOLUME_DETACHED));
else if (lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) {
PDEV_BROADCAST_DEVICEINTERFACE lpdbi = (PDEV_BROADCAST_DEVICEINTERFACE)lpdb;
// if (lpdbi->dbcc_classguid == GUID_DEVINTERFACE_VOLUME)
// printf("DBT_DEVICEARRIVAL %d - Media was removed: %ws\n", msg_count, lpdbi->dbcc_name);
if (lpdbi->dbcc_classguid == GUID_DEVINTERFACE_HID)
plater->GetEventHandler()->AddPendingEvent(HIDDeviceDetachedEvent(EVT_HID_DEVICE_DETACHED, boost::nowide::narrow(lpdbi->dbcc_name)));
}
break;
default:
break;
}
return true;
});
}
#endif // WIN32
static void generic_exception_handle()
{
@ -248,7 +294,10 @@ bool GUI_App::on_init_inner()
show_error(nullptr, ex.what());
}
register_dpi_event();
#ifdef WIN32
register_win32_dpi_event();
register_win32_device_notification_event();
#endif // WIN32
// Let the libslic3r know the callback, which will translate messages on demand.
Slic3r::I18N::set_translate_callback(libslic3r_translate_callback);

View file

@ -21,6 +21,12 @@
namespace Slic3r {
namespace GUI {
#ifdef _WIN32
wxDEFINE_EVENT(EVT_HID_DEVICE_ATTACHED, HIDDeviceAttachedEvent);
wxDEFINE_EVENT(EVT_HID_DEVICE_DETACHED, HIDDeviceDetachedEvent);
wxDEFINE_EVENT(EVT_VOLUME_ATTACHED, VolumeAttachedEvent);
wxDEFINE_EVENT(EVT_VOLUME_DETACHED, VolumeDetachedEvent);
#endif // _WIN32
wxTopLevelWindow* find_toplevel_parent(wxWindow *window)
{

View file

@ -18,6 +18,8 @@
#include <wx/debug.h>
#include <wx/settings.h>
#include "Event.hpp"
class wxCheckBox;
class wxTopLevelWindow;
class wxRect;
@ -26,6 +28,19 @@ class wxRect;
namespace Slic3r {
namespace GUI {
#ifdef _WIN32
// USB HID attach / detach events from Windows OS.
using HIDDeviceAttachedEvent = Event<std::string>;
using HIDDeviceDetachedEvent = Event<std::string>;
wxDECLARE_EVENT(EVT_HID_DEVICE_ATTACHED, HIDDeviceAttachedEvent);
wxDECLARE_EVENT(EVT_HID_DEVICE_DETACHED, HIDDeviceDetachedEvent);
// Disk aka Volume attach / detach events from Windows OS.
using VolumeAttachedEvent = SimpleEvent;
using VolumeDetachedEvent = SimpleEvent;
wxDECLARE_EVENT(EVT_VOLUME_ATTACHED, VolumeAttachedEvent);
wxDECLARE_EVENT(EVT_VOLUME_DETACHED, VolumeDetachedEvent);
#endif /* _WIN32 */
wxTopLevelWindow* find_toplevel_parent(wxWindow *window);

View file

@ -144,9 +144,7 @@ void KBShortcutsDialog::fill_shortcuts()
{ ctrl + "J", L("Print host upload queue") },
// View
{ "0-6", L("Camera view") },
#if ENABLE_SHOW_SCENE_LABELS
{ "E", L("Show/Hide object/instance labels") },
#endif // ENABLE_SHOW_SCENE_LABELS
// Configuration
{ ctrl + "P", L("Preferences") },
// Help

View file

@ -31,6 +31,10 @@
#include <fstream>
#include "GUI_App.hpp"
#ifdef _WIN32
#include <dbt.h>
#endif // _WIN32
namespace Slic3r {
namespace GUI {
@ -104,6 +108,31 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
update_title();
// declare events
Bind(wxEVT_CREATE, [this](wxWindowCreateEvent& event) {
#ifdef _WIN32
//static GUID GUID_DEVINTERFACE_USB_DEVICE = { 0xA5DCBF10, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED };
//static GUID GUID_DEVINTERFACE_DISK = { 0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b };
//static GUID GUID_DEVINTERFACE_VOLUME = { 0x71a27cdd, 0x812a, 0x11d0, 0xbe, 0xc7, 0x08, 0x00, 0x2b, 0xe2, 0x09, 0x2f };
static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 };
// Register USB HID (Human Interface Devices) notifications to trigger the 3DConnexion enumeration.
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter = { 0 };
NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_HID;
m_hDeviceNotify = ::RegisterDeviceNotification(this->GetHWND(), &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
// or register for file handle change?
// DEV_BROADCAST_HANDLE NotificationFilter = { 0 };
// NotificationFilter.dbch_size = sizeof(DEV_BROADCAST_HANDLE);
// NotificationFilter.dbch_devicetype = DBT_DEVTYP_HANDLE;
#endif // _WIN32
// propagate event
event.Skip();
});
Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& event) {
if (event.CanVeto() && !wxGetApp().check_unsaved_changes()) {
event.Veto();
@ -131,6 +160,11 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
// Called when closing the application and when switching the application language.
void MainFrame::shutdown()
{
#ifdef _WIN32
::UnregisterDeviceNotification(HDEVNOTIFY(m_hDeviceNotify));
m_hDeviceNotify = nullptr;
#endif // _WIN32
if (m_plater)
m_plater->stop_jobs();

View file

@ -141,6 +141,10 @@ public:
wxNotebook* m_tabpanel { nullptr };
wxProgressDialog* m_progress_dialog { nullptr };
std::shared_ptr<ProgressStatusBar> m_statusbar;
#ifdef _WIN32
void* m_hDeviceNotify { nullptr };
#endif // _WIN32
};
} // GUI

View file

@ -99,6 +99,25 @@ void Mouse3DController::State::append_button(unsigned int id, size_t /* input_qu
}
#ifdef WIN32
// Called by Win32 HID enumeration callback.
void Mouse3DController::device_attached(const std::string &device)
{
int vid = 0;
int pid = 0;
if (sscanf(device.c_str(), "\\\\?\\HID#VID_%x&PID_%x&", &vid, &pid) == 2) {
// BOOST_LOG_TRIVIAL(trace) << boost::format("Mouse3DController::device_attached(VID_%04xxPID_%04x)") % vid % pid;
// BOOST_LOG_TRIVIAL(trace) << "Mouse3DController::device_attached: " << device;
if (std::find(_3DCONNEXION_VENDORS.begin(), _3DCONNEXION_VENDORS.end(), vid) != _3DCONNEXION_VENDORS.end()) {
// Signal the worker thread to wake up and enumerate HID devices, if not connected at the moment.
// The message may come multiple times per each USB device. For example, some USB wireless dongles register as multiple HID sockets
// for multiple devices to connect to.
// Never mind, enumeration will be performed until connected.
m_wakeup = true;
m_stop_condition.notify_all();
}
}
}
// Filter out mouse scroll events produced by the 3DConnexion driver.
bool Mouse3DController::State::process_mouse_wheel()
{
@ -388,9 +407,13 @@ void Mouse3DController::disconnected()
m_params_by_device[m_device_str] = m_params_ui;
m_device_str.clear();
m_connected = false;
wxGetApp().plater()->get_camera().recover_from_free_camera();
wxGetApp().plater()->set_current_canvas_as_dirty();
wxWakeUpIdle();
wxGetApp().plater()->CallAfter([]() {
Plater *plater = wxGetApp().plater();
if (plater != nullptr) {
plater->get_camera().recover_from_free_camera();
plater->set_current_canvas_as_dirty();
}
});
}
}
@ -486,6 +509,11 @@ void Mouse3DController::run()
return;
}
#ifdef _WIN32
// Enumerate once just after thread start.
m_wakeup = true;
#endif // _WIN32
for (;;) {
{
tbb::mutex::scoped_lock lock(m_params_ui_mutex);
@ -518,7 +546,13 @@ bool Mouse3DController::connect_device()
{
// Wait for 2 seconds, but cancellable by m_stop.
std::unique_lock<std::mutex> lock(m_stop_condition_mutex);
m_stop_condition.wait_for(lock, std::chrono::seconds(2), [this]{ return this->m_stop; });
#ifdef _WIN32
// Wait indifinetely for the stop signal.
m_stop_condition.wait(lock, [this]{ return m_stop || m_wakeup; });
m_wakeup = false;
#else
m_stop_condition.wait_for(lock, std::chrono::seconds(2), [this]{ return m_stop; });
#endif
}
if (m_stop)
@ -528,10 +562,14 @@ bool Mouse3DController::connect_device()
hid_device_info* devices = hid_enumerate(0, 0);
if (devices == nullptr)
{
BOOST_LOG_TRIVIAL(error) << "Unable to enumerate HID devices";
BOOST_LOG_TRIVIAL(trace) << "Mouse3DController::connect_device() - no HID device enumerated.";
return false;
}
#ifdef _WIN32
BOOST_LOG_TRIVIAL(trace) << "Mouse3DController::connect_device() - enumerating HID devices.";
#endif // _WIN32
// Searches for 1st connected 3Dconnexion device
struct DeviceData
{
@ -785,9 +823,17 @@ void Mouse3DController::disconnect_device()
}
m_device_str.clear();
m_connected = false;
wxGetApp().plater()->get_camera().recover_from_free_camera();
wxGetApp().plater()->set_current_canvas_as_dirty();
wxWakeUpIdle();
#ifdef _WIN32
// Enumerate once immediately after disconnect.
m_wakeup = true;
#endif // _WIN32
wxGetApp().plater()->CallAfter([]() {
Plater *plater = wxGetApp().plater();
if (plater != nullptr) {
plater->get_camera().recover_from_free_camera();
plater->set_current_canvas_as_dirty();
}
});
}
}

View file

@ -148,6 +148,9 @@ class Mouse3DController
hid_device* m_device { nullptr };
// Using m_stop_condition_mutex to synchronize m_stop.
bool m_stop { false };
#ifdef _WIN32
std::atomic<bool> m_wakeup { false };
#endif /* _WIN32 */
// Mutex and condition variable for sleeping during the detection of 3DConnexion devices by polling while allowing
// cancellation before the end of the polling interval.
std::mutex m_stop_condition_mutex;
@ -185,6 +188,9 @@ public:
#endif // __APPLE__
#ifdef WIN32
// Called by Win32 HID enumeration callback.
void device_attached(const std::string &device);
// On Windows, the 3DConnexion driver sends out mouse wheel rotation events to an active application
// if the application does not register at the driver. This is a workaround to ignore these superfluous
// mouse wheel events.

View file

@ -1955,7 +1955,7 @@ struct Plater::priv
GUI::show_error(this->q, msg);
}
}
void export_gcode(fs::path output_path, PrintHostJob upload_job);
void export_gcode(fs::path output_path, bool output_path_on_removable_media, PrintHostJob upload_job);
void reload_from_disk();
void reload_all_from_disk();
void fix_through_netfabb(const int obj_idx, const int vol_idx = -1);
@ -2214,17 +2214,34 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
// Load the 3DConnexion device database.
mouse3d_controller.load_config(*wxGetApp().app_config);
// Start the background thread to detect and connect to a HID device (Windows and Linux).
// Connect to a 3DConnextion driver (OSX).
// Connect to a 3DConnextion driver (OSX).
mouse3d_controller.init();
#ifdef _WIN32
// Register an USB HID (Human Interface Device) attach event. evt contains Win32 path to the USB device containing VID, PID and other info.
// This event wakes up the Mouse3DController's background thread to enumerate HID devices, if the VID of the callback event
// is one of the 3D Mouse vendors (3DConnexion or Logitech).
this->q->Bind(EVT_HID_DEVICE_ATTACHED, [this](HIDDeviceAttachedEvent &evt) {
mouse3d_controller.device_attached(evt.data);
});
#endif /* _WIN32 */
this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this](RemovableDriveEjectEvent &evt) {
this->show_action_buttons(this->ready_to_slice);
Slic3r::GUI::show_info(this->q, (boost::format(_utf8(L("Unmounting successful. The device %s(%s) can now be safely removed from the computer.")))
% evt.data.name % evt.data.path).str());
if (evt.data.second) {
this->show_action_buttons(this->ready_to_slice);
Slic3r::GUI::show_info(this->q, (boost::format(_utf8(L("Unmounting successful. The device %s(%s) can now be safely removed from the computer.")))
% evt.data.first.name % evt.data.first.path).str());
} else
Slic3r::GUI::show_info(this->q, (boost::format(_utf8(L("Ejecting of device %s(%s) has failed.")))
% evt.data.first.name % evt.data.first.path).str());
});
this->q->Bind(EVT_REMOVABLE_DRIVES_CHANGED, [this](RemovableDrivesChangedEvent &) { this->show_action_buttons(this->ready_to_slice); });
// Start the background thread and register this window as a target for update events.
wxGetApp().removable_drive_manager()->init(this->q);
#ifdef _WIN32
// Trigger enumeration of removable media on Win32 notification.
this->q->Bind(EVT_VOLUME_ATTACHED, [this](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); });
this->q->Bind(EVT_VOLUME_DETACHED, [this](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); });
#endif /* _WIN32 */
// Initialize the Undo / Redo stack with a first snapshot.
this->take_snapshot(_(L("New Project")));
@ -3242,7 +3259,7 @@ bool Plater::priv::restart_background_process(unsigned int state)
return false;
}
void Plater::priv::export_gcode(fs::path output_path, PrintHostJob upload_job)
void Plater::priv::export_gcode(fs::path output_path, bool output_path_on_removable_media, PrintHostJob upload_job)
{
wxCHECK_RET(!(output_path.empty() && upload_job.empty()), "export_gcode: output_path and upload_job empty");
@ -3263,7 +3280,7 @@ void Plater::priv::export_gcode(fs::path output_path, PrintHostJob upload_job)
return;
if (! output_path.empty()) {
background_process.schedule_export(output_path.string());
background_process.schedule_export(output_path.string(), output_path_on_removable_media);
} else {
background_process.schedule_upload(std::move(upload_job));
}
@ -3745,7 +3762,12 @@ void Plater::priv::on_process_completed(wxCommandEvent &evt)
wxString message = evt.GetString();
if (message.IsEmpty())
message = _(L("Export failed"));
show_error(q, message);
if (q->m_tracking_popup_menu)
// We don't want to pop-up a message box when tracking a pop-up menu.
// We postpone the error message instead.
q->m_tracking_popup_menu_error_message = message;
else
show_error(q, message);
this->statusbar()->set_status_text(message);
}
if (canceled)
@ -4927,8 +4949,8 @@ void Plater::export_gcode(bool prefer_removable)
}
if (! output_path.empty()) {
p->export_gcode(output_path, PrintHostJob());
bool path_on_removable_media = removable_drive_manager.set_and_verify_last_save_path(output_path.string());
p->export_gcode(output_path, path_on_removable_media, PrintHostJob());
// Storing a path to AppConfig either as path to removable media or a path to internal media.
// is_path_on_removable_drive() is called with the "true" parameter to update its internal database as the user may have shuffled the external drives
// while the dialog was open.
@ -5251,7 +5273,7 @@ void Plater::send_gcode()
upload_job.upload_data.upload_path = dlg.filename();
upload_job.upload_data.start_print = dlg.start_print();
p->export_gcode(fs::path(), std::move(upload_job));
p->export_gcode(fs::path(), false, std::move(upload_job));
}
}
@ -5627,7 +5649,7 @@ void Plater::schedule_background_process(bool schedule/* = true*/)
this->p->suppressed_backround_processing_update = false;
}
bool Plater::is_background_process_running() const
bool Plater::is_background_process_update_scheduled() const
{
return this->p->background_process_timer.IsRunning();
}
@ -5749,15 +5771,34 @@ const UndoRedo::Stack& Plater::undo_redo_stack_main() const { return p->undo_red
void Plater::enter_gizmos_stack() { p->enter_gizmos_stack(); }
void Plater::leave_gizmos_stack() { p->leave_gizmos_stack(); }
SuppressBackgroundProcessingUpdate::SuppressBackgroundProcessingUpdate() :
m_was_running(wxGetApp().plater()->is_background_process_running())
// Wrapper around wxWindow::PopupMenu to suppress error messages popping out while tracking the popup menu.
bool Plater::PopupMenu(wxMenu *menu, const wxPoint& pos)
{
wxGetApp().plater()->suppress_background_process(m_was_running);
// Don't want to wake up and trigger reslicing while tracking the pop-up menu.
SuppressBackgroundProcessingUpdate sbpu;
// When tracking a pop-up menu, postpone error messages from the slicing result.
m_tracking_popup_menu = true;
bool out = this->wxPanel::PopupMenu(menu, pos);
m_tracking_popup_menu = false;
if (! m_tracking_popup_menu_error_message.empty()) {
// Don't know whether the CallAfter is necessary, but it should not hurt.
// The menus likely sends out some commands, so we may be safer if the dialog is shown after the menu command is processed.
wxString message = std::move(m_tracking_popup_menu_error_message);
wxTheApp->CallAfter([message, this]() { show_error(this, message); });
m_tracking_popup_menu_error_message.clear();
}
return out;
}
SuppressBackgroundProcessingUpdate::SuppressBackgroundProcessingUpdate() :
m_was_scheduled(wxGetApp().plater()->is_background_process_update_scheduled())
{
wxGetApp().plater()->suppress_background_process(m_was_scheduled);
}
SuppressBackgroundProcessingUpdate::~SuppressBackgroundProcessingUpdate()
{
wxGetApp().plater()->schedule_background_process(m_was_running);
wxGetApp().plater()->schedule_background_process(m_was_scheduled);
}
}} // namespace Slic3r::GUI

View file

@ -208,7 +208,7 @@ public:
void changed_object(int obj_idx);
void changed_objects(const std::vector<size_t>& object_idxs);
void schedule_background_process(bool schedule = true);
bool is_background_process_running() const;
bool is_background_process_update_scheduled() const;
void suppress_background_process(const bool stop_background_process) ;
void fix_through_netfabb(const int obj_idx, const int vol_idx = -1);
void send_gcode();
@ -319,10 +319,20 @@ public:
Plater *m_plater;
};
// Wrapper around wxWindow::PopupMenu to suppress error messages popping out while tracking the popup menu.
bool PopupMenu(wxMenu *menu, const wxPoint& pos = wxDefaultPosition);
bool PopupMenu(wxMenu *menu, int x, int y) { return this->PopupMenu(menu, wxPoint(x, y)); }
private:
struct priv;
std::unique_ptr<priv> p;
// Set true during PopupMenu() tracking to suppress immediate error message boxes.
// The error messages are collected to m_tracking_popup_menu_error_message instead and these error messages
// are shown after the pop-up dialog closes.
bool m_tracking_popup_menu = false;
wxString m_tracking_popup_menu_error_message;
void suppress_snapshots();
void allow_snapshots();
@ -335,7 +345,7 @@ public:
SuppressBackgroundProcessingUpdate();
~SuppressBackgroundProcessingUpdate();
private:
bool m_was_running;
bool m_was_scheduled;
};
}}

View file

@ -56,7 +56,7 @@ std::vector<DriveData> RemovableDriveManager::search_for_removable_drives() cons
volume_name.erase(volume_name.begin() + wcslen(volume_name.c_str()), volume_name.end());
if (! file_system_name.empty()) {
ULARGE_INTEGER free_space;
::GetDiskFreeSpaceExA(path.c_str(), &free_space, nullptr, nullptr);
::GetDiskFreeSpaceExW(wpath.c_str(), &free_space, nullptr, nullptr);
if (free_space.QuadPart > 0) {
path += "\\";
current_drives.emplace_back(DriveData{ boost::nowide::narrow(volume_name), path });
@ -86,9 +86,12 @@ void RemovableDriveManager::eject_drive()
// get handle to device
std::string mpath = "\\\\.\\" + m_last_save_path;
mpath = mpath.substr(0, mpath.size() - 1);
HANDLE handle = CreateFileA(mpath.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);
HANDLE handle = CreateFileW(boost::nowide::widen(mpath).c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);
if (handle == INVALID_HANDLE_VALUE) {
std::cerr << "Ejecting " << mpath << " failed " << GetLastError() << " \n";
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;
}
DWORD deviceControlRetVal(0);
@ -101,12 +104,15 @@ void RemovableDriveManager::eject_drive()
if (error == 0) {
CloseHandle(handle);
BOOST_LOG_TRIVIAL(error) << "Ejecting " << mpath << " failed " << deviceControlRetVal << " " << GetLastError() << " \n";
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;
}
CloseHandle(handle);
assert(m_callback_evt_handler);
if (m_callback_evt_handler)
wxPostEvent(m_callback_evt_handler, RemovableDriveEjectEvent(EVT_REMOVABLE_DRIVE_EJECTED, std::move(*it_drive_data)));
wxPostEvent(m_callback_evt_handler, RemovableDriveEjectEvent(EVT_REMOVABLE_DRIVE_EJECTED, std::pair< DriveData, bool >(std::move(*it_drive_data), true)));
m_current_drives.erase(it_drive_data);
}
}
@ -122,7 +128,7 @@ std::string RemovableDriveManager::get_removable_drive_path(const std::string &p
return std::string();
std::size_t found = path.find_last_of("\\");
std::string new_path = path.substr(0, found);
int letter = PathGetDriveNumberA(new_path.c_str());
int letter = PathGetDriveNumberW(boost::nowide::widen(new_path).c_str());
for (const DriveData &drive_data : m_current_drives) {
char drive = drive_data.path[0];
if (drive == 'A' + letter)
@ -136,7 +142,7 @@ std::string RemovableDriveManager::get_removable_drive_from_path(const std::stri
tbb::mutex::scoped_lock lock(m_drives_mutex);
std::size_t found = path.find_last_of("\\");
std::string new_path = path.substr(0, found);
int letter = PathGetDriveNumberA(new_path.c_str());
int letter = PathGetDriveNumberW(boost::nowide::widen(new_path).c_str());
for (const DriveData &drive_data : m_current_drives) {
assert(! drive_data.path.empty());
if (drive_data.path.front() == 'A' + letter)
@ -145,93 +151,16 @@ std::string RemovableDriveManager::get_removable_drive_from_path(const std::stri
return std::string();
}
#if 0
// currently not used, left for possible future use
INT_PTR WINAPI WinProcCallback(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
// Called by Win32 Volume arrived / detached callback.
void RemovableDriveManager::volumes_changed()
{
// here we need to catch messeges about device removal
// problem is that when ejecting usb (how is it implemented above) there is no messege dispached. Only after physical removal of the device.
//uncomment register_window() in init() to register and comment update() in GUI_App.cpp (only for windows!) to stop recieving periodical updates
LRESULT lRet = 1;
static HDEVNOTIFY hDeviceNotify;
static constexpr GUID WceusbshGUID = { 0x25dbce51, 0x6c8f, 0x4a72, 0x8a,0x6d,0xb5,0x4c,0x2b,0x4f,0xc8,0x35 };
switch (message)
{
case WM_CREATE:
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
ZeroMemory(&NotificationFilter, sizeof(NotificationFilter));
NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
NotificationFilter.dbcc_classguid = WceusbshGUID;
hDeviceNotify = RegisterDeviceNotification(hWnd, &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
break;
case WM_DEVICECHANGE:
{
// here is the important
if(wParam == DBT_DEVICEREMOVECOMPLETE)
{
RemovableDriveManager::get_instance().update(0, true);
}
if (m_initialized) {
// Signal the worker thread to wake up and enumerate removable drives.
m_wakeup = true;
m_thread_stop_condition.notify_all();
}
break;
default:
// Send all other messages on to the default windows handler.
lRet = DefWindowProc(hWnd, message, wParam, lParam);
break;
}
return lRet;
}
void RemovableDriveManager::register_window()
{
//creates new unvisible window that is recieving callbacks from system
// structure to register
// currently not used, left for possible future use
WNDCLASSEX wndClass;
wndClass.cbSize = sizeof(WNDCLASSEX);
wndClass.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wndClass.hInstance = reinterpret_cast<HINSTANCE>(GetModuleHandle(0));
wndClass.lpfnWndProc = reinterpret_cast<WNDPROC>(WinProcCallback);//this is callback
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hIcon = LoadIcon(0, IDI_APPLICATION);
wndClass.hbrBackground = CreateSolidBrush(RGB(192, 192, 192));
wndClass.hCursor = LoadCursor(0, IDC_ARROW);
wndClass.lpszClassName = L"PrusaSlicer_aux_class";
wndClass.lpszMenuName = NULL;
wndClass.hIconSm = wndClass.hIcon;
if(!RegisterClassEx(&wndClass))
{
DWORD err = GetLastError();
return;
}
HWND hWnd = CreateWindowEx(
WS_EX_NOACTIVATE,
L"PrusaSlicer_aux_class",
L"PrusaSlicer_aux_wnd",
WS_DISABLED, // style
CW_USEDEFAULT, 0,
640, 480,
NULL, NULL,
GetModuleHandle(NULL),
NULL);
if(hWnd == NULL)
{
DWORD err = GetLastError();
}
//ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);
}
#endif
#else
namespace search_for_drives_internal
@ -358,16 +287,18 @@ void RemovableDriveManager::eject_drive()
// wait for command to finnish (blocks ui thread)
child.wait();
int err = child.exit_code();
if(err)
{
if (err) {
BOOST_LOG_TRIVIAL(error) << "Ejecting failed";
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;
}
BOOST_LOG_TRIVIAL(info) << "Ejecting finished";
assert(m_callback_evt_handler);
if (m_callback_evt_handler)
wxPostEvent(m_callback_evt_handler, RemovableDriveEjectEvent(EVT_REMOVABLE_DRIVE_EJECTED, std::move(*it_drive_data)));
wxPostEvent(m_callback_evt_handler, RemovableDriveEjectEvent(EVT_REMOVABLE_DRIVE_EJECTED, std::pair<DriveData, bool>(std::move(*it_drive_data), true)));
m_current_drives.erase(it_drive_data);
}
}
@ -416,9 +347,7 @@ void RemovableDriveManager::init(wxEvtHandler *callback_evt_handler)
m_initialized = true;
m_callback_evt_handler = callback_evt_handler;
#if _WIN32
//this->register_window_msw();
#elif __APPLE__
#if __APPLE__
this->register_window_osx();
#endif
@ -432,6 +361,10 @@ void RemovableDriveManager::init(wxEvtHandler *callback_evt_handler)
void RemovableDriveManager::shutdown()
{
#if __APPLE__
this->unregister_window_osx();
#endif
#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
if (m_thread.joinable()) {
// Stop the worker thread, if running.
@ -447,12 +380,6 @@ void RemovableDriveManager::shutdown()
}
#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
#if _WIN32
//this->unregister_window_msw();
#elif __APPLE__
this->unregister_window_osx();
#endif
m_initialized = false;
m_callback_evt_handler = nullptr;
}
@ -469,9 +396,6 @@ bool RemovableDriveManager::set_and_verify_last_save_path(const std::string &pat
RemovableDriveManager::RemovableDrivesStatus RemovableDriveManager::status()
{
#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
this->update();
#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
RemovableDriveManager::RemovableDrivesStatus out;
{
@ -488,6 +412,10 @@ RemovableDriveManager::RemovableDrivesStatus RemovableDriveManager::status()
void RemovableDriveManager::update()
{
tbb::mutex::scoped_lock inside_update_lock;
#ifdef _WIN32
// All wake up calls up to now are now consumed when the drive enumeration starts.
m_wakeup = false;
#endif // _WIN32
if (inside_update_lock.try_acquire(m_inside_update_mutex)) {
// Got the lock without waiting. That means, the update was not running.
// Run the update.
@ -511,12 +439,23 @@ void RemovableDriveManager::update()
#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
void RemovableDriveManager::thread_proc()
{
// Signal the worker thread to update initially.
#ifdef _WIN32
m_wakeup = true;
#endif // _WIN32
for (;;) {
// Wait for 2 seconds before running the disk enumeration.
// Cancellable.
{
std::unique_lock<std::mutex> lck(m_thread_stop_mutex);
#ifdef _WIN32
// Wait 30 seconds for the stop signal, wake up time to time to remove those devices that the user ejected in file explorer
// or another application (for example in Cura). This is a workaround, as Windows does not send an event on software eject of a drive.
m_thread_stop_condition.wait_for(lck, std::chrono::seconds(30), [this]{ return m_stop || m_wakeup; });
#else
m_thread_stop_condition.wait_for(lck, std::chrono::seconds(2), [this]{ return m_stop; });
#endif
}
if (m_stop)
// Stop the worker thread.

View file

@ -32,7 +32,7 @@ inline bool operator< (const DriveData &lhs, const DriveData &rhs) { return lhs.
inline bool operator> (const DriveData &lhs, const DriveData &rhs) { return lhs.path > rhs.path; }
inline bool operator==(const DriveData &lhs, const DriveData &rhs) { return lhs.path == rhs.path; }
using RemovableDriveEjectEvent = Event<DriveData>;
using RemovableDriveEjectEvent = Event<std::pair<DriveData, bool>>;
wxDECLARE_EVENT(EVT_REMOVABLE_DRIVE_EJECTED, RemovableDriveEjectEvent);
using RemovableDrivesChangedEvent = SimpleEvent;
@ -69,6 +69,8 @@ public:
// On Windows, the function does not block, and the eject is detected in the background thread.
void eject_drive();
// Status is used to retrieve info for showing UI buttons.
// Status is called every time when change of UI buttons is possible therefore should not perform update.
struct RemovableDrivesStatus {
bool has_removable_drives { false };
bool has_eject { false };
@ -82,6 +84,11 @@ public:
// It would be better to make this method private and friend to RemovableDriveManagerMM, but RemovableDriveManagerMM is an ObjectiveC class.
void update();
#ifdef _WIN32
// Called by Win32 Volume arrived / detached callback.
void volumes_changed();
#endif // _WIN32
private:
bool m_initialized { false };
wxEvtHandler* m_callback_evt_handler { nullptr };
@ -93,6 +100,9 @@ private:
std::condition_variable m_thread_stop_condition;
mutable std::mutex m_thread_stop_mutex;
bool m_stop { false };
#ifdef _WIN32
std::atomic<bool> m_wakeup { false };
#endif /* _WIN32 */
#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
// Called from update() to enumerate removable drives.
@ -112,10 +122,7 @@ private:
// Set with set_and_verify_last_save_path() to a removable drive path to be ejected.
std::string m_last_save_path;
#if _WIN32
//registers for notifications by creating invisible window
//void register_window_msw();
#elif __APPLE__
#if __APPLE__
void register_window_osx();
void unregister_window_osx();
void list_devices(std::vector<DriveData> &out) const;