diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index 950f131fcf..6efd0fac67 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-12-13 20:02+0800\n" +"POT-Creation-Date: 2022-12-24 13:01+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1328,6 +1328,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing via LAN." msgstr "" +msgid "Failed to send the print job. Please try again." +msgstr "" + msgid "Send to Printer failed. Please try again." msgstr "" @@ -1770,8 +1773,8 @@ msgid "" msgstr "" msgid "" -"Spiral mode only works when wall loops is 1, \n" -"support is disabled, top shell layers is 0 and sparse infill density is 0\n" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional" msgstr "" msgid "" @@ -3098,6 +3101,12 @@ msgstr "" msgid "Undo integration was successful." msgstr "" +msgid "New network plug-in available." +msgstr "" + +msgid "Details" +msgstr "" + msgid "Undo integration failed." msgstr "" @@ -4229,6 +4238,30 @@ msgid "" "model without prime tower. Do you want to enable prime tower?" msgstr "" +msgid "" +"We have added an experimental style \"Tree Slim\" that features smaller " +"support volume but weaker strength.\n" +"We recommand using it with: 0 interface layers, 0 top distance, 2 walls." +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" + +msgid "" +"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommand the following " +"settings: at least 2 interface layers, at least 0.1 top z distance or using " +"support materials on interface." +msgstr "" + +msgid "" +"When using support material for the support interface, We recommand the " +"following settings:\n" +"0 top distance, 0 interface spacing, concentric pattern." +msgstr "" + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -4943,6 +4976,17 @@ msgstr "" msgid "version %s update information :" msgstr "" +msgid "Network plug-in update" +msgstr "" + +msgid "" +"Click OK to update the Network plug-in when Bambu Studio launches next time." +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "" + msgid "New version of Bambu Studio" msgstr "" @@ -5583,20 +5627,6 @@ msgstr "" msgid "Bridge flow" msgstr "" -msgid "Top surface flow ratio" -msgstr "" - -msgid "Bottom surface flow ratio" -msgstr "" - -msgid "This factor affects the amount of material for bottom solid infill" -msgstr "" - -msgid "" -"This factor affects the amount of material for top solid infill. " -"You can decrease it slightly to have smooth surface finish" -msgstr "" - msgid "" "Decrease this value slightly(for example 0.9) to reduce the amount of " "material for bridge, to improve sag" @@ -5605,19 +5635,11 @@ msgstr "" msgid "Only one wall on top surfaces" msgstr "" -msgid "Only one wall on first layer" -msgstr "" - msgid "" "Use only one wall on flat top surface, to give more space to the top infill " "pattern" msgstr "" -msgid "" -"Use only one wall on first layer, to give more space to the bottom infill " -"pattern" -msgstr "" - msgid "Slow down for overhang" msgstr "" @@ -6698,7 +6720,8 @@ msgstr "" msgid "" "normal(auto) and tree(auto) is used to generate support automatically. If " -"normal or tree is selected, only support enforcers are generated" +"normal(manual) or tree(manual) is selected, only support enforcers are " +"generated" msgstr "" msgid "normal(auto)" @@ -6707,9 +6730,6 @@ msgstr "" msgid "tree(auto)" msgstr "" -msgid "hybrid(auto)" -msgstr "" - msgid "normal(manual)" msgstr "" @@ -6754,9 +6774,12 @@ msgstr "" msgid "The z gap between the bottom support interface and object" msgstr "" +msgid "Support base" +msgstr "" + msgid "" -"Filament to print support and raft. \"Default\" means no specific filament " -"for support and current filament is used" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" msgstr "" msgid "Line width of support" @@ -6807,6 +6830,9 @@ msgstr "" msgid "Rectilinear grid" msgstr "" +msgid "Hollow" +msgstr "" + msgid "Interface pattern" msgstr "" @@ -6834,9 +6860,27 @@ msgstr "" msgid "Style" msgstr "" +msgid "" +"Style and shape of the support. For normal support, projecting the supports " +"into a regular grid will create more stable supports (default), while snug " +"support towers will save material and reduce object scarring.\n" +"For tree support, tight style will merge branches more aggressively and save " +"a lot of material (default), while hybrid style will create similar " +"structure to normal support under large flat overhangs." +msgstr "" + msgid "Snug" msgstr "" +msgid "Tree Slim" +msgstr "" + +msgid "Tree Strong" +msgstr "" + +msgid "Tree Hybrid" +msgstr "" + msgid "Independent support layer height" msgstr "" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index 8de39dc828..d3bd7c2133 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,16 +2,13 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-12-13 20:02+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2022-12-24 13:01+0800\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.1\n" msgid "Supports Painting" msgstr "Supports aufmalen" @@ -1395,6 +1392,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing via LAN." msgstr "" +msgid "Failed to send the print job. Please try again." +msgstr "" + msgid "Send to Printer failed. Please try again." msgstr "" @@ -1903,12 +1903,9 @@ msgstr "" "Der Wert wird auf 0 zurückgesetzt." msgid "" -"Spiral mode only works when wall loops is 1, \n" -"support is disabled, top shell layers is 0 and sparse infill density is 0\n" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional" msgstr "" -"Der Spiralmodus funktioniert nur, wenn die Wand 1 Linienweite breit sind, \n" -"Support ist deaktiviert, die oberen Schalenschichten sind 0 und die Dichte " -"der Füllung ist 0\n" msgid "" "Change these settings automatically? \n" @@ -3259,6 +3256,12 @@ msgstr "Die Integration ist gescheitert." msgid "Undo integration was successful." msgstr "Die Rückgängigmachung der Integration war erfolgreich." +msgid "New network plug-in available." +msgstr "" + +msgid "Details" +msgstr "" + msgid "Undo integration failed." msgstr "Die Rückgängigmachung der Integration war nicht erfolgreich." @@ -3558,11 +3561,11 @@ msgstr "Sie sollten Ihre Software aktualisieren.\n" msgid "Newer 3mf version" msgstr "Neuere 3mf-Version" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software.\n" -msgstr "" +msgstr "\n" msgid "The 3mf is not compatible, load geometry data only!" msgstr "" @@ -3843,9 +3846,9 @@ msgid "" "on Bambu Studio(windows) or CAD softwares." msgstr "" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s (%s).\n" -msgstr "" +msgstr "\n" msgid "Switching the language requires application restart.\n" msgstr "Der Wechsel der Sprache erfordert einen Neustart der Anwendung.\n" @@ -4442,6 +4445,30 @@ msgid "" "model without prime tower. Do you want to enable prime tower?" msgstr "" +msgid "" +"We have added an experimental style \"Tree Slim\" that features smaller " +"support volume but weaker strength.\n" +"We recommand using it with: 0 interface layers, 0 top distance, 2 walls." +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" + +msgid "" +"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommand the following " +"settings: at least 2 interface layers, at least 0.1 top z distance or using " +"support materials on interface." +msgstr "" + +msgid "" +"When using support material for the support interface, We recommand the " +"following settings:\n" +"0 top distance, 0 interface spacing, concentric pattern." +msgstr "" + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -5213,6 +5240,17 @@ msgstr "" msgid "version %s update information :" msgstr "" +msgid "Network plug-in update" +msgstr "" + +msgid "" +"Click OK to update the Network plug-in when Bambu Studio launches next time." +msgstr "" + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "" + msgid "New version of Bambu Studio" msgstr "Neue Version von Bambu Studio" @@ -5635,9 +5673,9 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "Schichthöhe kann Druckdüsendurchmesser nicht überschreiten" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s\n" -msgstr "" +msgstr "\n" msgid "Generating skirt & brim" msgstr "Erzeugen von Schürze und Rand (skirt & brim)" @@ -7169,11 +7207,9 @@ msgstr "Support-Erzeugung aktivieren." msgid "" "normal(auto) and tree(auto) is used to generate support automatically. If " -"normal or tree is selected, only support enforcers are generated" +"normal(manual) or tree(manual) is selected, only support enforcers are " +"generated" msgstr "" -"Normal(automatisch) und Baum(automatisch) wird verwendet, um automatischen " -"Support zu erzeugen. Wenn Normal oder Baum ausgewählt ist, werden nur " -"Support Enforcer erzeugt" msgid "normal(auto)" msgstr "Normal(automatisch)" @@ -7181,9 +7217,6 @@ msgstr "Normal(automatisch)" msgid "tree(auto)" msgstr "Baum(automatisch)" -msgid "hybrid(auto)" -msgstr "Hybrid(automatisch)" - msgid "normal(manual)" msgstr "" @@ -7232,9 +7265,12 @@ msgstr "" msgid "The z gap between the bottom support interface and object" msgstr "" +msgid "Support base" +msgstr "" + msgid "" -"Filament to print support and raft. \"Default\" means no specific filament " -"for support and current filament is used" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" msgstr "" msgid "Line width of support" @@ -7288,6 +7324,9 @@ msgstr "Linienmuster der Supports" msgid "Rectilinear grid" msgstr "Rechtwinkliges Gitter" +msgid "Hollow" +msgstr "" + msgid "Interface pattern" msgstr "Schnittstellenmuster" @@ -7318,9 +7357,27 @@ msgstr "Druckgeschwindigkeit für Supports" msgid "Style" msgstr "Stil" +msgid "" +"Style and shape of the support. For normal support, projecting the supports " +"into a regular grid will create more stable supports (default), while snug " +"support towers will save material and reduce object scarring.\n" +"For tree support, tight style will merge branches more aggressively and save " +"a lot of material (default), while hybrid style will create similar " +"structure to normal support under large flat overhangs." +msgstr "" + msgid "Snug" msgstr "Nahtlos" +msgid "Tree Slim" +msgstr "" + +msgid "Tree Strong" +msgstr "" + +msgid "Tree Hybrid" +msgstr "" + msgid "Independent support layer height" msgstr "Unabhängige Support-Schichthöhe" @@ -7988,55 +8045,6 @@ msgid "" "density to improve the strength of the model?" msgstr "" -#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" -#~ msgstr "Wählen sie eine oder mer Dateien (3mf/step/stl/obj/amf):" - -#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" -#~ msgstr "Importiere 3MF/STL/STEP/OBJ/AMF" - -#~ msgid "Part Cooling" -#~ msgstr "BAuteilkühlung" - -#~ msgid "Aux Cooling" -#~ msgstr "Hilfskühlung" - -#~ msgid "" -#~ "Filament to print support and skirt. 0 means no specific filament for " -#~ "support and current filament is used" -#~ msgstr "" -#~ "Filament für den Druck der Supports und der Umrandung. 0 bedeutet, dass " -#~ "kein spezielles Filament für den Support und das aktuelle Filament wird " -#~ "verwendet" - -#~ msgid "" -#~ "Filament to print support interface. 0 means no specific filament for " -#~ "support interface and current filament is used" -#~ msgstr "" -#~ "Filament zum Drucken der Support-Schnittstelle. 0 bedeutet, dass kein " -#~ "spezielles Filament für die Support-Schnittstelle vorhanden ist und das " -#~ "aktuelle Filament verwendet wird" - -#~ msgid "Repair" -#~ msgstr "Reparieren" - -#~ msgid "Repair the model's meshes if it is non-manifold mesh" -#~ msgstr "" -#~ "Reparieren Sie die Maschen des Modells, wenn es sich um nicht-verzweigte " -#~ "Maschen handelt" - -#~ msgid "Monitoring Recording" -#~ msgstr "Überwachung der Aufzeichnung" - -#~ msgid "Tree support with infill" -#~ msgstr "Baumsupport mit Füllung" - -#~ msgid "" -#~ "This setting specifies whether to add infill inside large hollows of tree " -#~ "support" -#~ msgstr "" -#~ "Diese Einstellung legt fest, ob in großen Hohlräumen von Baumsupports " -#~ "Füllmaterial hinzugefügt werden soll" - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -8078,6 +8086,9 @@ msgstr "" #~ "Wenn es ausgewählte Objekte gibt, werden nur die ausgewählten Objekte " #~ "ausgerichtet, ansonsten werden alle Objekte im Projekt ausgerichtet." +#~ msgid "Aux Cooling" +#~ msgstr "Hilfskühlung" + #~ msgid "Avoid crossing wall when travel" #~ msgstr "Vermeiden Sie das Überqueren von Mauern während der Fahrt" @@ -8090,6 +8101,9 @@ msgstr "" #~ "dieses Filaments.\n" #~ "Dies kann zu einer Verstopfung der Düse und zu Druckfehlern führen" +#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" +#~ msgstr "Wählen sie eine oder mer Dateien (3mf/step/stl/obj/amf):" + #~ msgid "Clear all" #~ msgstr "Alles löschen" @@ -8201,6 +8215,22 @@ msgstr "" #~ msgid "Filament N XX" #~ msgstr "Filament N XX" +#~ msgid "" +#~ "Filament to print support and skirt. 0 means no specific filament for " +#~ "support and current filament is used" +#~ msgstr "" +#~ "Filament für den Druck der Supports und der Umrandung. 0 bedeutet, dass " +#~ "kein spezielles Filament für den Support und das aktuelle Filament wird " +#~ "verwendet" + +#~ msgid "" +#~ "Filament to print support interface. 0 means no specific filament for " +#~ "support interface and current filament is used" +#~ msgstr "" +#~ "Filament zum Drucken der Support-Schnittstelle. 0 bedeutet, dass kein " +#~ "spezielles Filament für die Support-Schnittstelle vorhanden ist und das " +#~ "aktuelle Filament verwendet wird" + #~ msgid "Filaments Selection" #~ msgstr "Auswahl der Filamente" @@ -8251,6 +8281,9 @@ msgstr "" #~ "automatische Anordnung verwendet, um Kollisionen zu vermeiden, wenn " #~ "Objekt für Objekt gedruckt wird" +#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" +#~ msgstr "Importiere 3MF/STL/STEP/OBJ/AMF" + #~ msgid "In the calibration of extrusion flow" #~ msgstr "Kalibrierung des Materialflusses" @@ -8292,6 +8325,9 @@ msgstr "" #~ msgid "Monitoring" #~ msgstr "Überwachung" +#~ msgid "Monitoring Recording" +#~ msgstr "Überwachung der Aufzeichnung" + #~ msgid "Open" #~ msgstr "Öffnen" @@ -8304,6 +8340,9 @@ msgstr "" #~ msgid "Output file" #~ msgstr "Ausgabedatei" +#~ msgid "Part Cooling" +#~ msgstr "BAuteilkühlung" + #~ msgid "Pause(heated bed temperature error)" #~ msgstr "Pause (Temperaturfehler beim Heizbett)" @@ -8385,6 +8424,14 @@ msgstr "" #~ msgid "Reload items" #~ msgstr "Elemente neu laden" +#~ msgid "Repair" +#~ msgstr "Reparieren" + +#~ msgid "Repair the model's meshes if it is non-manifold mesh" +#~ msgstr "" +#~ "Reparieren Sie die Maschen des Modells, wenn es sich um nicht-verzweigte " +#~ "Maschen handelt" + #~ msgid "Report" #~ msgstr "Bericht" @@ -8418,6 +8465,16 @@ msgstr "" #~ msgid "Spiral mode" #~ msgstr "Spiralförmiger Modus" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, \n" +#~ "support is disabled, top shell layers is 0 and sparse infill density is " +#~ "0\n" +#~ msgstr "" +#~ "Der Spiralmodus funktioniert nur, wenn die Wand 1 Linienweite breit " +#~ "sind, \n" +#~ "Support ist deaktiviert, die oberen Schalenschichten sind 0 und die " +#~ "Dichte der Füllung ist 0\n" + #~ msgid "Successfully sent.Will automatically jump to the device page in %s s" #~ msgstr "Erfolgreich gesendet, springt automatisch zur Geräteseite in %s" @@ -8475,6 +8532,13 @@ msgstr "" #~ "säubern, um Filament zu sparen und die Druckzeit zu verkürzen. Die Farben " #~ "der Objekte werden als Ergebnis gemischt" +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "Diese Einstellung legt fest, ob in großen Hohlräumen von Baumsupports " +#~ "Füllmaterial hinzugefügt werden soll" + #~ msgid "" #~ "This setting stands for how much volume of filament can be melted and " #~ "extruded per second. Printing speed is limited by max volumetric speed, " @@ -8491,6 +8555,9 @@ msgstr "" #~ msgid "Translation" #~ msgstr "Übersetzung" +#~ msgid "Tree support with infill" +#~ msgstr "Baumsupport mit Füllung" + #~ msgid "Unable to create zip file" #~ msgstr "ZIP-Datei kann nicht erstellt werden" @@ -8525,9 +8592,20 @@ msgstr "" #~ msgid " is too close to others, there will be collisions when printing.\n" #~ msgstr " zu nahe an anderen, es kommt beim Drucken zu Kollisionen.\n" +#~ msgid "hybrid(auto)" +#~ msgstr "Hybrid(automatisch)" + #~ msgid "normal" #~ msgstr "Normal" +#~ msgid "" +#~ "normal(auto) and tree(auto) is used to generate support automatically. If " +#~ "normal or tree is selected, only support enforcers are generated" +#~ msgstr "" +#~ "Normal(automatisch) und Baum(automatisch) wird verwendet, um " +#~ "automatischen Support zu erzeugen. Wenn Normal oder Baum ausgewählt ist, " +#~ "werden nur Support Enforcer erzeugt" + #~ msgid "the 3mf is not compatible, load geometry data only!" #~ msgstr "die 3mf ist nicht kompatibel, laden Sie nur Geometriedaten!" diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 9ea01cb7c1..7a5e2f3e6f 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-12-13 20:02+0800\n" +"POT-Creation-Date: 2022-12-24 13:01+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -485,7 +485,7 @@ msgid "Click to download new version in default browser: %s" msgstr "Click to download new version in default browser: %s" msgid "The Bambu Studio needs an upgrade" -msgstr "Bambu Studio needs an update!" +msgstr "Bambu Studio needs an update" msgid "This is the newest version." msgstr "This is the newest version." @@ -741,13 +741,13 @@ msgid "Flush into objects' support" msgstr "Flush into objects' support" msgid "Convert from inch" -msgstr "Convert from Inch" +msgstr "Convert from Inches" msgid "Restore to inch" msgstr "Restore to Inch" msgid "Convert from meter" -msgstr "Convert from Meter" +msgstr "Convert from Meters" msgid "Restore to meter" msgstr "Restore to Meter" @@ -894,7 +894,7 @@ msgid "Name" msgstr "Name" msgid "Fila." -msgstr "" +msgstr "Fila." #, c-format, boost-format msgid "%1$d error repaired" @@ -930,13 +930,13 @@ msgid "Right button click the icon to drop the object printable property" msgstr "Right click the icon to drop the object printable property" msgid "Click the icon to toggle printable property of the object" -msgstr "Click the icon to toggle printable property of the object" +msgstr "Click the icon to toggle printable properties of the object" msgid "Click the icon to edit support painting of the object" msgstr "Click the icon to edit support painting of the object" msgid "Click the icon to edit color painting of the object" -msgstr "Click the icon to edit color painting of the object" +msgstr "Click the icon to edit color painting for the object" msgid "Loading file" msgstr "Loading file" @@ -1042,8 +1042,7 @@ msgid "Remove parameter" msgstr "Remove parameter" msgid "one cell can only be copied to one or multiple cells in the same column" -msgstr "" -"One cell can only be copied to one or multiple cells in the same column." +msgstr "One cell can only be copied to one or more cells in the same column." msgid "multiple cells copy is not supported" msgstr "Copying multiple cells is not supported." @@ -1361,6 +1360,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing via LAN." msgstr "" +msgid "Failed to send the print job. Please try again." +msgstr "" + msgid "Send to Printer failed. Please try again." msgstr "" @@ -1384,7 +1386,7 @@ msgid "Please log out and login to the printer again." msgstr "" msgid "Downloading" -msgstr "" +msgstr "Downloading" msgid "Download failed" msgstr "" @@ -1554,7 +1556,7 @@ msgstr "" "information, leaving it blank for you to enter manually." msgid "Power on update" -msgstr "Power on update" +msgstr "Update on startup" msgid "" "The AMS will automatically read the information of inserted filament on " @@ -1622,7 +1624,7 @@ msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" msgstr "" -"A error occurred. The system may have run out of memory, or a bug may have " +"An error occurred. The system may have run out of memory, or a bug may have " "occurred." msgid "Please save project and restart the program. " @@ -1776,8 +1778,8 @@ msgid "" "Recommended nozzle temperature of this filament type is [%d, %d] degree " "centigrade" msgstr "" -"The recommended nozzle temperature for this filament type is [%d, %d] degree " -"centigrade" +"The recommended nozzle temperature for this filament type is [%d, %d] " +"degrees centigrade" #, c-format, boost-format msgid "" @@ -1786,7 +1788,7 @@ msgid "" "This may cause model broken free from build plate during printing" msgstr "" "The bed temperature of other layers is lower than the bed temperature of the " -"first layer by more than %d degree centigrade.\n" +"first layer by more than %d degrees centigrade.\n" "This may cause models to break free from the build plate during printing." msgid "" @@ -1859,11 +1861,9 @@ msgstr "" "The value will be reset to 0." msgid "" -"Spiral mode only works when wall loops is 1, \n" -"support is disabled, top shell layers is 0 and sparse infill density is 0\n" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional" msgstr "" -"Spiral mode only works when wall loops is set to 1, \n" -"support is disabled, top shell layers is 0, and sparse infill density is 0\n" msgid "" "Change these settings automatically? \n" @@ -1871,7 +1871,7 @@ msgid "" "No - Give up using spiral mode this time" msgstr "" "Change these settings automatically? \n" -"Yes - Change these settings and enable spiral mode automatically\n" +"Yes - Change these settings and enable spiral/vase mode automatically\n" "No - Cancel enabling spiral mode" msgid "" @@ -2112,7 +2112,7 @@ msgid "Temperature: " msgstr "" msgid "Loading G-codes" -msgstr "Loading G-codes" +msgstr "Loading G-code" msgid "Generating geometry vertex data" msgstr "Generating geometry vertex data" @@ -2391,7 +2391,7 @@ msgid "A G-code path goes beyond the boundary of plate." msgstr "A G-code path goes beyond plate boundaries." msgid "Only the object being edit is visible." -msgstr "Only the object being edit is visible." +msgstr "Only the object being edited is visible." msgid "" "An object is laid over the boundary of plate or exceeds the height limit.\n" @@ -2466,7 +2466,7 @@ msgid "" "You can find it in \"Settings > Network > Connection code\"\n" "on the printer, as shown in the figure:" msgstr "" -"You can find it in \"Settings > Network > Connection code\"\n" +"You can find it in \"Settings > Network > Access code\"\n" "on the printer, as shown in the figure:" msgid "Invalid input." @@ -2644,22 +2644,22 @@ msgid "Load a model" msgstr "Load a model" msgid "Import Configs" -msgstr "Import Presets" +msgstr "Import Configs" msgid "Load configs" -msgstr "" +msgstr "Load configs" msgid "Import" -msgstr "" +msgstr "Import" msgid "Export all objects as STL" msgstr "Export All Objects as STL" msgid "Export Generic 3MF" -msgstr "" +msgstr "Export Generic 3MF" msgid "Export 3mf file without using some 3mf-extensions" -msgstr "" +msgstr "Export 3mf file without using some 3mf-extensions" msgid "Export current sliced file" msgstr "" @@ -2674,7 +2674,7 @@ msgid "Export current plate as G-code" msgstr "" msgid "Export &Configs" -msgstr "Export Presets" +msgstr "Export &Configs" msgid "Export current configuration to files" msgstr "" @@ -2801,13 +2801,13 @@ msgid "&Help" msgstr "&Help" msgid "Overwrite file" -msgstr "" +msgstr "Overwrite file" msgid "Yes to All" -msgstr "" +msgstr "Yes to All" msgid "No to All" -msgstr "" +msgstr "No to All" msgid "Choose a directory" msgstr "" @@ -2816,12 +2816,10 @@ msgstr "" msgid "There is %d config exported. (Only non-system configs)" msgid_plural "There are %d configs exported. (Only non-system configs)" msgstr[0] "" -"There is %d preset exported. (Only non-system and currently used presets)" msgstr[1] "" -"There are %d presets exported. (Only non-system and currently used presets)" msgid "Export result" -msgstr "" +msgstr "Export Result" msgid "Select profile to load:" msgstr "" @@ -2831,12 +2829,10 @@ msgid "There is %d config imported. (Only non-system and compatible configs)" msgid_plural "" "There are %d configs imported. (Only non-system and compatible configs)" msgstr[0] "" -"There is %d preset imported. (Only non-system and compatible presets)" msgstr[1] "" -"There are %d presets imported. (Only non-system and compatible presets)" msgid "Import result" -msgstr "" +msgstr "Import result" msgid "File is missing" msgstr "File is missing" @@ -2925,10 +2921,10 @@ msgid "Load failed [%d]!" msgstr "Loading failed [%d]!" msgid "Year" -msgstr "" +msgstr "Year" msgid "Month" -msgstr "" +msgstr "Month" msgid "All Files" msgstr "" @@ -2949,7 +2945,7 @@ msgid "Switch to timelapse files." msgstr "" msgid "Video" -msgstr "" +msgstr "Video" msgid "Switch to video files." msgstr "" @@ -2970,23 +2966,23 @@ msgid "Batch manage files." msgstr "" msgid "No printers." -msgstr "" +msgstr "No printers." msgid "Not supported by this model of printer!" msgstr "" msgid "Connecting..." -msgstr "" +msgstr "Connecting..." #, c-format, boost-format msgid "Connect failed [%d]!" -msgstr "" +msgstr "Connection failed [%d]!" msgid "Loading file list..." -msgstr "" +msgstr "Loading file list..." msgid "No files" -msgstr "" +msgstr "No files" msgid "Not accessible in LAN-only mode!" msgstr "" @@ -3114,7 +3110,7 @@ msgid "" msgstr "" msgid "Downloading..." -msgstr "" +msgstr "Downloading..." msgid "Cloud Slicing..." msgstr "" @@ -3217,6 +3213,12 @@ msgstr "Integration failed." msgid "Undo integration was successful." msgstr "Undo integration was successful." +msgid "New network plug-in available." +msgstr "" + +msgid "Details" +msgstr "" + msgid "Undo integration failed." msgstr "Undo integration failed." @@ -3510,16 +3512,16 @@ msgstr "" "unrecognized keys:\n" msgid "You'd better upgrade your software.\n" -msgstr "You'd better upgrade your software.\n" +msgstr "You should update your software.\n" msgid "Newer 3mf version" msgstr "Newer 3mf version" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software.\n" -msgstr "" +msgstr "\n" msgid "The 3mf is not compatible, load geometry data only!" msgstr "" @@ -3792,9 +3794,9 @@ msgid "" "on Bambu Studio(windows) or CAD softwares." msgstr "" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s (%s).\n" -msgstr "" +msgstr "\n" msgid "Switching the language requires application restart.\n" msgstr "Switching languages requires the application to restart.\n" @@ -4037,7 +4039,7 @@ msgid "Add/Remove printers" msgstr "" msgid "Slice all plate to obtain time and filament estimation" -msgstr "Slice all plate to obtain time and filament estimation" +msgstr "Slice all plates to obtain time and filament estimation" msgid "Packing project data into 3mf file" msgstr "Packing project data into 3mf file" @@ -4200,7 +4202,7 @@ msgid "Synchronizing device information" msgstr "Synchronizing device information" msgid "Synchronizing device information time out" -msgstr "Synchronizing device information time out" +msgstr "Synchronizing device information timed out" msgid "Cannot send the print job when the printer is updating firmware" msgstr "" @@ -4302,7 +4304,7 @@ msgid "Send to Printer SD card" msgstr "" msgid "Cannot send the print task when the upgrade is in progress" -msgstr "Cannot send the print task when the upgrade is in progress" +msgstr "Cannot send print tasks when an update is in progress" msgid "The printer is required to be in the same LAN as Bambu Studio." msgstr "" @@ -4373,6 +4375,30 @@ msgid "" "model without prime tower. Do you want to enable prime tower?" msgstr "" +msgid "" +"We have added an experimental style \"Tree Slim\" that features smaller " +"support volume but weaker strength.\n" +"We recommand using it with: 0 interface layers, 0 top distance, 2 walls." +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" + +msgid "" +"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommand the following " +"settings: at least 2 interface layers, at least 0.1 top z distance or using " +"support materials on interface." +msgstr "" + +msgid "" +"When using support material for the support interface, We recommand the " +"following settings:\n" +"0 top distance, 0 interface spacing, concentric pattern." +msgstr "" + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -4426,7 +4452,7 @@ msgid "Raft" msgstr "" msgid "Support filament" -msgstr "Support filament" +msgstr "Filament for Supports" msgid "Prime tower" msgstr "Prime tower" @@ -4665,7 +4691,7 @@ msgid "Old Value" msgstr "Old value" msgid "New Value" -msgstr "New value" +msgstr "New Value" msgid "Transfer" msgstr "Transfer" @@ -4931,9 +4957,9 @@ msgid "" "objects, it just orientates the selected ones.Otherwise, it will orientates " "all objects in the current disk." msgstr "" -"Auto orients selected objects or all objects.If there are selected objects, " -"it just orients the selected ones.Otherwise, it will orient all objects in " -"the current disk." +"This auto orients selected objects or all objects. If there are selected " +"objects, it just orients the selected ones. Otherwise, it will orient all " +"objects in the current plate." msgid "Collapse/Expand the sidebar" msgstr "Collapse/Expand the sidebar" @@ -5125,6 +5151,17 @@ msgstr "" msgid "version %s update information :" msgstr "" +msgid "Network plug-in update" +msgstr "" + +msgid "" +"Click OK to update the Network plug-in when Bambu Studio launches next time." +msgstr "" + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "" + msgid "New version of Bambu Studio" msgstr "New version of Bambu Studio" @@ -5475,7 +5512,7 @@ msgid "" "The spiral vase mode does not work when an object contains more than one " "materials." msgstr "" -"Spiral vase mode does not work when an object contains more than one " +"Spiral (vase) mode does not work when an object contains more than one " "material." msgid "The prime tower is not supported in \"By object\" print." @@ -5533,9 +5570,9 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "Layer height cannot exceed nozzle diameter." -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s\n" -msgstr "" +msgstr "\n" msgid "Generating skirt & brim" msgstr "Generating skirt & brim" @@ -5967,8 +6004,8 @@ msgid "" "Don't support the whole bridge area which make support very large. Bridge " "usually can be printing directly without support if not very long" msgstr "" -"This disables supporting bridges, which decreasing the mount of support " -"required. Bridges can usually be printed directly without support for a " +"This disables supporting bridges, which decreases the amount of support " +"required. Bridges can usually be printed directly without support over a " "reasonable distance." msgid "Thick bridges" @@ -6339,8 +6376,8 @@ msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" msgstr "" -"Acceleration of top surface infill. Using a lower value may improve top " -"surface quality" +"This is the acceleration of top surface infill. Using a lower value may " +"improve top surface quality." msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "" @@ -6415,7 +6452,7 @@ msgid "" "The average diatance between the random points introducded on each line " "segment" msgstr "" -"The average diatance between the random points introducded on each line " +"The average distance between the random points introduced on each line " "segment" msgid "" @@ -7045,11 +7082,9 @@ msgstr "This enables support generation." msgid "" "normal(auto) and tree(auto) is used to generate support automatically. If " -"normal or tree is selected, only support enforcers are generated" +"normal(manual) or tree(manual) is selected, only support enforcers are " +"generated" msgstr "" -"normal(auto), hybrid(auto) and tree(auto) are used to generate support " -"automatically. If normal or tree is selected, only support enforcers are " -"generated." msgid "normal(auto)" msgstr "normal(auto)" @@ -7057,9 +7092,6 @@ msgstr "normal(auto)" msgid "tree(auto)" msgstr "tree(auto)" -msgid "hybrid(auto)" -msgstr "hybrid(auto)" - msgid "normal(manual)" msgstr "" @@ -7105,9 +7137,12 @@ msgstr "" msgid "The z gap between the bottom support interface and object" msgstr "" +msgid "Support base" +msgstr "" + msgid "" -"Filament to print support and raft. \"Default\" means no specific filament " -"for support and current filament is used" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" msgstr "" msgid "Line width of support" @@ -7161,6 +7196,9 @@ msgstr "This is the line pattern for support." msgid "Rectilinear grid" msgstr "Rectilinear grid" +msgid "Hollow" +msgstr "" + msgid "Interface pattern" msgstr "Interface pattern" @@ -7191,9 +7229,27 @@ msgstr "This is the speed for support." msgid "Style" msgstr "Style" +msgid "" +"Style and shape of the support. For normal support, projecting the supports " +"into a regular grid will create more stable supports (default), while snug " +"support towers will save material and reduce object scarring.\n" +"For tree support, tight style will merge branches more aggressively and save " +"a lot of material (default), while hybrid style will create similar " +"structure to normal support under large flat overhangs." +msgstr "" + msgid "Snug" msgstr "Snug" +msgid "Tree Slim" +msgstr "" + +msgid "Tree Strong" +msgstr "" + +msgid "Tree Hybrid" +msgstr "" + msgid "Independent support layer height" msgstr "Independent support layer height" @@ -7850,144 +7906,6 @@ msgid "" "density to improve the strength of the model?" msgstr "" -#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" -#~ msgstr "Choose one or more files (3mf/step/stl/obj/amf):" - -#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" -#~ msgstr "Import 3MF/STL/STEP/OBJ/AMF" - -#~ msgid "Part Cooling" -#~ msgstr "Part Cooling" - -#~ msgid "Aux Cooling" -#~ msgstr "Aux Cooling" - -#~ msgid "" -#~ "Filament to print support and skirt. 0 means no specific filament for " -#~ "support and current filament is used" -#~ msgstr "" -#~ "This is the filament used to print supports and skirts. 0 means no " -#~ "specific filament for support and the current filament is used." - -#~ msgid "" -#~ "Filament to print support interface. 0 means no specific filament for " -#~ "support interface and current filament is used" -#~ msgstr "" -#~ "This is the filament to print support interfaces. 0 means no specific " -#~ "filament for support interfaces and the current filament is used" - -#~ msgid "Repair" -#~ msgstr "Repair" - -#~ msgid "Repair the model's meshes if it is non-manifold mesh" -#~ msgstr "Repair the model’s meshes if they are non-manifold." - -#~ msgid "Monitoring Recording" -#~ msgstr "Monitoring Recording" - -#~ msgid "Tree support with infill" -#~ msgstr "Tree support with infill" - -#~ msgid "" -#~ "This setting specifies whether to add infill inside large hollows of tree " -#~ "support" -#~ msgstr "" -#~ "This setting specifies whether to add infill inside large hollows of tree " -#~ "support." - -#~ msgid "Export ok." -#~ msgstr "Export ok." - -#~ msgid "Plate %d: %s does not support filament %s.\n" -#~ msgstr "Plate %d: %s does not support filament %s.\n" - -#~ msgid "Filament N XX" -#~ msgstr "Filament N XX" - -#~ msgid "Color Print" -#~ msgstr "Color print" - -#~ msgid "Comsumption" -#~ msgstr "Consumption" - -#~ msgid "Filament 1" -#~ msgstr "Filament 1" - -#~ msgid "Flushed filament" -#~ msgstr "Flushed filament" - -#~ msgid "Adaptive layer height" -#~ msgstr "Adaptive layer height" - -#~ msgid "" -#~ "Enabling this option means the height of every layer except the first " -#~ "will be automatically calculated during slicing according to the slope of " -#~ "the model’s surface.\n" -#~ "Note that this option only takes effect if no prime tower is generated in " -#~ "current plate." -#~ msgstr "" -#~ "Enabling this option means that the height of each layer after the first " -#~ "will be automatically calculated according to the slope of the model’s " -#~ "surface.\n" -#~ "Please note that this option only takes effect if there is no prime tower " -#~ "generated on the current plate." - -#~ msgid "normal" -#~ msgstr "normal" - -#~ msgid "tree" -#~ msgstr "tree" - -#~ msgid " Object:" -#~ msgstr " Object:" - -#~ msgid "" -#~ "You have changed some preset settings. \n" -#~ "Would you like to keep these changed settings after switching preset?" -#~ msgstr "" -#~ "You have changed some preset settings. \n" -#~ "Would you like to keep these changed settings after switching presets?" - -#~ msgid "Export sliced file" -#~ msgstr "Export Sliced File" - -#~ msgid "Export Sliced File" -#~ msgstr "Export Sliced File" - -#~ msgid "Export current Sliced file" -#~ msgstr "Export Sliced File" - -#~ msgid "" -#~ "Force cooling fan to be specific speed when overhang degree of printed " -#~ "part exceeds this value. Expressed as percentage which indicides how much " -#~ "width of the line without support from lower layer" -#~ msgstr "" -#~ "This forces the cooling fan to use a specific speed when overhang degrees " -#~ "of parts exceed the set value. It is expressed as percentage which " -#~ "indicates how much line is acceptable without support from lower layers." - -#~ msgid "Erase painting" -#~ msgstr "Erase painting" - -#~ msgid "Set pen size" -#~ msgstr "Set pen size" - -#~ msgid "Rotation:" -#~ msgstr "Rotation:" - -#~ msgid "Height:" -#~ msgstr "Height:" - -#~ msgid "Initialize failed [%d]!" -#~ msgstr "Initalization failed [%d]!" - -#~ msgid "" -#~ "%1% is too close to exclusion area, there will be collisions when " -#~ "printing." -#~ msgstr "" -#~ "%1% is too close to an exclusion area; there will be collisions when " -#~ "printing." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -7997,171 +7915,18 @@ msgstr "" #~ "%1% is too close to an exclusion area; there will be collisions when " #~ "printing." -#~ msgid " is too close to others, there will be collisions when printing.\n" -#~ msgstr " is too close to others, there will be collisions when printing.\n" - #~ msgid "" -#~ " is too close to exclusion area, there will be collisions when printing.\n" +#~ "%1% is too close to exclusion area, there will be collisions when " +#~ "printing." #~ msgstr "" -#~ " is too close to an exclusion area, there will be collisions when " -#~ "printing.\n" - -#~ msgid "Avoid crossing wall when travel" -#~ msgstr "Avoid walls when traveling" - -#~ msgid "Max travel detour distance" -#~ msgstr "Max travel detour distance" - -#~ msgid "" -#~ "Maximum detour distance for avoiding crossing wall. Don't detour if the " -#~ "detour distance is large than this value" -#~ msgstr "" -#~ "Maximum detour distance for avoiding travel across walls. If the distance " -#~ "is larger than this value, there will be no detour." - -#~ msgid "" -#~ "Height of the clearance cylinder around extruder. Used as input of auto-" -#~ "arrange to avoid collision when print object by object" -#~ msgstr "" -#~ "Height of the clearance cylinder around extruder: used as input for auto-" -#~ "arranging to avoid collisions when printing object by object" - -#~ msgid "" -#~ "Clearance radius around extruder. Used as input of auto-arrange to avoid " -#~ "collision when print object by object" -#~ msgstr "" -#~ "Clearance radius around extruder: used as input for auto-arranging to " -#~ "avoid collisions when printing object by object" - -#~ msgid "Error at line %1%:\n" -#~ msgstr "Error at line %1%:\n" - -#~ msgid "Reduce Triangles" -#~ msgstr "Reduce Triangles" - -#~ msgid "" -#~ "Switch to zig-zag pattern?\n" -#~ "Yes - switch to zig-zag pattern automaticlly\n" -#~ "No - reset density to default non 100% value automaticlly\n" -#~ msgstr "" -#~ "Switch to zig-zag pattern?\n" -#~ "Yes - Switch to zig-zag pattern automatically\n" -#~ "No - Reset density to default non-100% value automatically\n" - -#~ msgid "Extruder position" -#~ msgstr "Extruder position" - -#~ msgid "Zig zag" -#~ msgstr "Zig zag" - -#~ msgid "" -#~ "Bed temperature is higher than vitrification temperature of this " -#~ "filament.\n" -#~ "This may cause nozzle blocked and printing failure" -#~ msgstr "" -#~ "The bed temperature is higher than the vitrification temperature of this " -#~ "filament.\n" -#~ "This may cause a nozzle blockage or print failure" - -#~ msgid "Enter a search term" -#~ msgstr "Enter a search term" - -#~ msgid "Debug" -#~ msgstr "Debug" - -#~ msgid "Waiting" -#~ msgstr "Waiting" - -#~ msgid "Finished" -#~ msgstr "Finished" - -#~ msgid "Per object edit" -#~ msgstr "Per Object Edit" - -#~ msgid "Inner wall speed" -#~ msgstr "Inner wall speed" - -#~ msgid "the 3mf is not compatible, load geometry data only!" -#~ msgstr "The 3mf is not compatible, loading geometry data only!" - -#~ msgid "Save configuration as:" -#~ msgstr "Save configuration as:" - -#~ msgid "Line type" -#~ msgstr "Line type" - -#~ msgid "Designer" -#~ msgstr "Designer" - -#~ msgid "Report" -#~ msgstr "Report" +#~ "%1% is too close to an exclusion area; there will be collisions when " +#~ "printing." #~ msgid "0%" #~ msgstr "0%" -#~ msgid "Timelapse Wipe Tower" -#~ msgstr "Timelapse Wipe Tower" - -#~ msgid "Device:" -#~ msgstr "Device:" - -#~ msgid "Translation" -#~ msgstr "Translation" - -#~ msgid "" -#~ "It seems object %s needs support to print. Please enable support " -#~ "generation." -#~ msgstr "" -#~ "It seems object %s needs support to print. Please enable support " -#~ "generation." - -#~ msgid "" -#~ "The model has overlapping or self-intersecting facets. I tried to repair " -#~ "it, however you might want to check the results or repair the input file " -#~ "and retry." -#~ msgstr "" -#~ "The model has overlapping or self-intersecting facets. Repair was " -#~ "attempted, however we recommend checking the results or repairing the " -#~ "input file and retrying." - -#~ msgid "" -#~ "Auto orientates selected objects or all objects.If there are selected " -#~ "objects, it just orientates the selected ones.Otherwise, it will " -#~ "orientates all objects in the project." -#~ msgstr "" -#~ "Auto orients selected objects or all objects.If there are selected " -#~ "objects, it just orients the selected ones.Otherwise, it will orient all " -#~ "objects in the project." - -#~ msgid "The Config is not compatible and can not be loaded." -#~ msgstr "The configuration is not compatible and cannot be loaded!" - -#~ msgid "Creating" -#~ msgstr "Creating" - -#~ msgid "Uploading" -#~ msgstr "Uploading" - -#~ msgid "Sending" -#~ msgstr "Sending" - -#~ msgid "Please fill report first." -#~ msgstr "Please fill report first." - -#~ msgid "Unable to create zip file" -#~ msgstr "Unable to create zip file" - -#~ msgid "Filaments Selection" -#~ msgstr "Filaments selection" - -#~ msgid "Printer Selection" -#~ msgstr "Printer Selection" - -#~ msgid "Auto arrange" -#~ msgstr "Auto Arrange" - -#~ msgid "Spiral mode" -#~ msgstr "Spiral mode" +#~ msgid "Adaptive layer height" +#~ msgstr "Adaptive layer height" #~ msgid "" #~ "An object is layed over the boundary of plate.\n" @@ -8172,15 +7937,70 @@ msgstr "" #~ "Please solve the problem by moving it totally on or off the plate, and " #~ "confirming that the height is within the build volume." +#~ msgid "Auto arrange" +#~ msgstr "Auto Arrange" + +#~ msgid "" +#~ "Auto orientates selected objects or all objects.If there are selected " +#~ "objects, it just orientates the selected ones.Otherwise, it will " +#~ "orientates all objects in the project." +#~ msgstr "" +#~ "This anuto orients selected objects or all objects.\n" +#~ "If there are selected objects, it just orients the selected ones. " +#~ "Otherwise, it will orient all objects in the project." + +#~ msgid "Aux Cooling" +#~ msgstr "Aux Cooling" + +#~ msgid "Avoid crossing wall when travel" +#~ msgstr "Avoid walls when traveling" + +#~ msgid "" +#~ "Bed temperature is higher than vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause nozzle blocked and printing failure" +#~ msgstr "" +#~ "The bed temperature is higher than the vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause a nozzle blockage or print failure" + +#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" +#~ msgstr "Choose one or more files (3mf/step/stl/obj/amf):" + #~ msgid "Clear all" #~ msgstr "Clear all" +#~ msgid "" +#~ "Clearance radius around extruder. Used as input of auto-arrange to avoid " +#~ "collision when print object by object" +#~ msgstr "" +#~ "Clearance radius around extruder: used as input for auto-arranging to " +#~ "avoid collisions when printing object by object" + +#~ msgid "Color Print" +#~ msgstr "Color print" + +#~ msgid "Comsumption" +#~ msgstr "Consumption" + +#~ msgid "Creating" +#~ msgstr "Creating" + #~ msgid "Ctrl + Any arrow" #~ msgstr "Ctrl + Any arrow" #~ msgid "Ctrl + Left mouse button" #~ msgstr "Ctrl + Left mouse button" +#~ msgid "Debug" +#~ msgstr "Debug" + +#~ msgid "Designer" +#~ msgstr "Designer" + +#~ msgid "Device:" +#~ msgstr "Device:" + #~ msgid "Display printable box" #~ msgstr "Display printable box" @@ -8198,7 +8018,7 @@ msgstr "" #~ "3. The Printer presets\n" #~ msgstr "" #~ "Do you want to synchronize your personal data from Bambu Cloud? \n" -#~ "Contains the following information:\n" +#~ "This includes the following information:\n" #~ "1. Process presets\n" #~ "2. Filament presets\n" #~ "3. Printer presets\n" @@ -8210,12 +8030,93 @@ msgstr "" #~ "This disables retraction when travel is entirely within an infill area " #~ "and oozing can’t be seen." +#~ msgid "" +#~ "Enabling this option means the height of every layer except the first " +#~ "will be automatically calculated during slicing according to the slope of " +#~ "the model’s surface.\n" +#~ "Note that this option only takes effect if no prime tower is generated in " +#~ "current plate." +#~ msgstr "" +#~ "Enabling this option means that the height of each layer after the first " +#~ "will be automatically calculated according to the slope of the model’s " +#~ "surface.\n" +#~ "Please note that this option only takes effect if there is no prime tower " +#~ "generated on the current plate." + +#~ msgid "Enter a search term" +#~ msgstr "Enter a search term" + +#~ msgid "Erase painting" +#~ msgstr "Erase painting" + +#~ msgid "Error at line %1%:\n" +#~ msgstr "Error at line %1%:\n" + +#~ msgid "Export Sliced File" +#~ msgstr "Export Sliced File" + +#~ msgid "Export current Sliced file" +#~ msgstr "Export Sliced File" + +#~ msgid "Export ok." +#~ msgstr "Export ok." + +#~ msgid "Export sliced file" +#~ msgstr "Export Sliced File" + +#~ msgid "Extruder position" +#~ msgstr "Extruder position" + +#~ msgid "Failed" +#~ msgstr "Failed" + +#~ msgid "Filament 1" +#~ msgstr "Filament 1" + +#~ msgid "Filament N XX" +#~ msgstr "Filament N XX" + +#~ msgid "" +#~ "Filament to print support and skirt. 0 means no specific filament for " +#~ "support and current filament is used" +#~ msgstr "" +#~ "This is the filament used to print supports and skirts. 0 means no " +#~ "specific filament for support and the current filament is used." + +#~ msgid "" +#~ "Filament to print support interface. 0 means no specific filament for " +#~ "support interface and current filament is used" +#~ msgstr "" +#~ "This is the filament to print support interfaces. 0 means no specific " +#~ "filament for support interfaces and the current filament is used" + +#~ msgid "Filaments Selection" +#~ msgstr "Filaments selection" + +#~ msgid "Finish" +#~ msgstr "Finish" + +#~ msgid "Finished" +#~ msgstr "Finished" + #~ msgid "Fix model locally" #~ msgstr "Fix model locally" #~ msgid "Fix model through cloud" #~ msgstr "Fix model through cloud" +#~ msgid "Flushed filament" +#~ msgstr "Flushed filament" + +#~ msgid "" +#~ "Force cooling fan to be specific speed when overhang degree of printed " +#~ "part exceeds this value. Expressed as percentage which indicides how much " +#~ "width of the line without support from lower layer" +#~ msgstr "" +#~ "This forces the cooling fan to use a specific speed when overhang degrees " +#~ "of parts exceed the set value. It is expressed as percentage which " +#~ "indicates how much line is acceptable without support from lower layers." + #~ msgid "Fragment Filter" #~ msgstr "Fragment Filter" @@ -8232,21 +8133,78 @@ msgstr "" #~ "Heat the nozzle to the target \n" #~ "temperature" +#~ msgid "Height:" +#~ msgstr "Height:" + +#~ msgid "" +#~ "Height of the clearance cylinder around extruder. Used as input of auto-" +#~ "arrange to avoid collision when print object by object" +#~ msgstr "" +#~ "Height of the clearance cylinder around extruder: used as input for auto-" +#~ "arranging to avoid collisions when printing object by object" + +#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" +#~ msgstr "Import 3MF/STL/STEP/OBJ/AMF" + #~ msgid "In the calibration of extrusion flow" #~ msgstr "In the calibration of extrusion flow" #~ msgid "In the calibration of laser scanner" #~ msgstr "In the calibration of laser scanner" +#~ msgid "Initialize failed [%d]!" +#~ msgstr "Initalization failed [%d]!" + +#~ msgid "Inner wall speed" +#~ msgstr "Inner wall speed" + +#~ msgid "" +#~ "It seems object %s needs support to print. Please enable support " +#~ "generation." +#~ msgstr "" +#~ "It seems object %s needs support to print. Please enable support " +#~ "generation." + +#~ msgid "Line type" +#~ msgstr "Line type" + +#~ msgid "Management" +#~ msgstr "Management" + +#~ msgid "Max travel detour distance" +#~ msgstr "Max travel detour distance" + +#~ msgid "" +#~ "Maximum detour distance for avoiding crossing wall. Don't detour if the " +#~ "detour distance is large than this value" +#~ msgstr "" +#~ "Maximum detour distance for avoiding travel across walls. If the distance " +#~ "is larger than this value, there will be no detour." + #~ msgid "Module" #~ msgstr "Module" #~ msgid "Monitoring" #~ msgstr "Monitoring" +#~ msgid "Monitoring Recording" +#~ msgstr "Monitoring Recording" + +#~ msgid "Open" +#~ msgstr "Open" + +#~ msgid "Open &PrusaSlicer" +#~ msgstr "Open &PrusaSlicer" + +#~ msgid "Open PrusaSlicer" +#~ msgstr "Open PrusaSlicer" + #~ msgid "Output file" #~ msgstr "Output file" +#~ msgid "Part Cooling" +#~ msgstr "Part Cooling" + #~ msgid "Pause(heated bed temperature error)" #~ msgstr "Pause(heated bed temperature error)" @@ -8256,8 +8214,17 @@ msgstr "" #~ msgid "Pause(toolhead shell off)" #~ msgstr "Pause(toolhead shell off)" +#~ msgid "Per object edit" +#~ msgstr "Per Object Edit" + +#~ msgid "Plate %d: %s does not support filament %s.\n" +#~ msgstr "Plate %d: %s does not support filament %s.\n" + +#~ msgid "Please fill report first." +#~ msgstr "Please fill report first." + #~ msgid "Please upgrade your printer first" -#~ msgstr "Please upgrade your printer first" +#~ msgstr "Please update your printer first" #~ msgid "Position:" #~ msgstr "Position:" @@ -8272,6 +8239,27 @@ msgstr "" #~ msgid "Preview only mode for gcode file." #~ msgstr "Preview only mode for G-code file." +#~ msgid "Printer Selection" +#~ msgstr "Printer Selection" + +#~ msgid "" +#~ "Purging after filament change will be done inside objects' infills. This " +#~ "may lower the amount of waste and decrease the print time. If the walls " +#~ "are printed with transparent filament, the mixed color infill will be " +#~ "seen outside" +#~ msgstr "" +#~ "Purging after filament change will be done inside objects' infill. This " +#~ "may lower the amount of waste and decrease the print time. If the walls " +#~ "are printed with transparent filament, the mixed color infill will be " +#~ "visible." + +#~ msgid "" +#~ "Purging after filament change will be done inside objects' support. This " +#~ "may lower the amount of waste and decrease the print time" +#~ msgstr "" +#~ "Purging after filament change will be done inside objects' support. This " +#~ "may lower the amount of waste and decrease the print time." + #~ msgid "" #~ "Push new filament \n" #~ "into extruder" @@ -8279,6 +8267,47 @@ msgstr "" #~ "Push new filament \n" #~ "into extruder" +#~ msgid "" +#~ "Record timelapse video of printing without showing toolhead. In this mode " +#~ "the toolhead docks near the excess chute at each layer change, and then a " +#~ "snapshot is taken with the chamber camera. When printing finishes a " +#~ "timelapse video is composed of all the snapshots." +#~ msgstr "" +#~ "Record timelapse video of printing without showing the toolhead. In this " +#~ "mode the toolhead docks near the excess chute at each layer change, and " +#~ "then a snapshot is taken with the chamber camera. When printing finishes, " +#~ "a timelapse video is created from all the snapshots." + +#~ msgid "Reduce Triangles" +#~ msgstr "Reduce Triangles" + +#~ msgid "Reload item" +#~ msgstr "Reload item" + +#~ msgid "Reload items" +#~ msgstr "Reload items" + +#~ msgid "Repair" +#~ msgstr "Repair" + +#~ msgid "Repair the model's meshes if it is non-manifold mesh" +#~ msgstr "Repair the model’s meshes if they are non-manifold." + +#~ msgid "Report" +#~ msgstr "Report" + +#~ msgid "Rotation:" +#~ msgstr "Rotation:" + +#~ msgid "Save configuration as:" +#~ msgstr "Save configuration as:" + +#~ msgid "Sending" +#~ msgstr "Sending" + +#~ msgid "Set pen size" +#~ msgstr "Set pen size" + #~ msgid "Shift + Any arrow" #~ msgstr "Shift + Any arrow" @@ -8294,12 +8323,45 @@ msgstr "" #~ msgid "Show Printable Box(TODO)" #~ msgstr "Show Printable Box(TODO)" +#~ msgid "Spiral mode" +#~ msgstr "Spiral/Vase mode" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, \n" +#~ "support is disabled, top shell layers is 0 and sparse infill density is " +#~ "0\n" +#~ msgstr "" +#~ "Spiral (vase) mode only works when wall loops is set to 1, \n" +#~ "support is disabled, top shell layers is 0, and sparse infill density is " +#~ "0\n" + #~ msgid "Successfully sent.Will automatically jump to the device page in %s s" #~ msgstr "" #~ "Successfully sent. Will automatically jump to the device page in %s s" +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support custom support gap,but may cause extra filament switches if " +#~ "support is specified as different extruder with object" +#~ msgstr "" +#~ "The support layer uses layer height independent of object layers. This is " +#~ "to support custom support gaps, but may cause extra filament switches if " +#~ "support is specified as a different filament from the object." + +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - Switch to zig-zag pattern automatically\n" +#~ "No - Reset density to default non-100% value automatically\n" + #~ msgid "Swith cloud environment, Please login again!" -#~ msgstr "Switch cloud environment, Please login again!" +#~ msgstr "Cloud environment has switched; please login again!" + +#~ msgid "The Config is not compatible and can not be loaded." +#~ msgstr "The configuration is not compatible and cannot be loaded!" #~ msgid "" #~ "The firmware versions of printer and AMS are too low.Please update to the " @@ -8308,5 +8370,99 @@ msgstr "" #~ "The firmware versions of the printer and AMS are too low. Please update " #~ "them to the latest version before sending any print jobs." +#~ msgid "" +#~ "The model has overlapping or self-intersecting facets. I tried to repair " +#~ "it, however you might want to check the results or repair the input file " +#~ "and retry." +#~ msgstr "" +#~ "The model has overlapping or self-intersecting facets. Repair was " +#~ "attempted, however we recommend checking the results or repairing the " +#~ "input file and retrying." + +#~ msgid "" +#~ "This object will be used to purge the nozzle after a filament change to " +#~ "save filament and decrease the print time. Colours of the objects will be " +#~ "mixed as a result" +#~ msgstr "" +#~ "This object will be used to purge the nozzle after a filament change to " +#~ "save filament and decrease the print time. Colors of the objects will be " +#~ "mixed as a result." + +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support." + +#~ msgid "" +#~ "This setting stands for how much volume of filament can be melted and " +#~ "extruded per second. Printing speed is limited by max volumetric speed, " +#~ "in case of too high and unreasonable speed setting. Zero means no limit" +#~ msgstr "" +#~ "Use this to set the maximum volume of filament that can be melted and " +#~ "extruded per second. Printing speed is limited by maximum volumetric " +#~ "speed if settings are unreasonably high. 0 means there is no limit." + +#~ msgid "Timelapse Wipe Tower" +#~ msgstr "Timelapse Wipe Tower" + +#~ msgid "Translation" +#~ msgstr "Translation" + +#~ msgid "Tree support with infill" +#~ msgstr "Tree support with infill" + +#~ msgid "Unable to create zip file" +#~ msgstr "Unable to create zip file" + +#~ msgid "Uploading" +#~ msgstr "Uploading" + #~ msgid "User pause" #~ msgstr "User pause" + +#~ msgid "Waiting" +#~ msgstr "Waiting" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings after switching preset?" +#~ msgstr "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings after switching presets?" + +#~ msgid "Zig zag" +#~ msgstr "Zig zag" + +#~ msgid " Object:" +#~ msgstr " Object:" + +#~ msgid "" +#~ " is too close to exclusion area, there will be collisions when printing.\n" +#~ msgstr "" +#~ " is too close to an exclusion area, there will be collisions when " +#~ "printing.\n" + +#~ msgid " is too close to others, there will be collisions when printing.\n" +#~ msgstr " is too close to others, there will be collisions when printing.\n" + +#~ msgid "hybrid(auto)" +#~ msgstr "hybrid(auto)" + +#~ msgid "normal" +#~ msgstr "normal" + +#~ msgid "" +#~ "normal(auto) and tree(auto) is used to generate support automatically. If " +#~ "normal or tree is selected, only support enforcers are generated" +#~ msgstr "" +#~ "normal(auto), hybrid(auto) and tree(auto) are used to generate support " +#~ "automatically. If normal or tree is selected, only support enforcers are " +#~ "generated." + +#~ msgid "the 3mf is not compatible, load geometry data only!" +#~ msgstr "The 3mf is not compatible, loading geometry data only!" + +#~ msgid "tree" +#~ msgstr "tree" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index 4d6b5a1252..9a3c1a72cf 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,16 +2,13 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-12-13 20:02+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2022-12-24 13:01+0800\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.1\n" msgid "Supports Painting" msgstr "Pintando Soportes" @@ -1392,6 +1389,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing via LAN." msgstr "" +msgid "Failed to send the print job. Please try again." +msgstr "" + msgid "Send to Printer failed. Please try again." msgstr "" @@ -1896,12 +1896,9 @@ msgstr "" "El valor se restablecerá a 0." msgid "" -"Spiral mode only works when wall loops is 1, \n" -"support is disabled, top shell layers is 0 and sparse infill density is 0\n" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional" msgstr "" -"El modo espiral sólo funciona cuando los bucles de pared son 1, \n" -"el soporte está desactivado, las capas superiores de la cáscara es 0 y la " -"densidad de relleno dispersa es 0\n" msgid "" "Change these settings automatically? \n" @@ -3257,6 +3254,12 @@ msgstr "La integración ha fallado." msgid "Undo integration was successful." msgstr "La operación de deshacer se ha realizado con éxito." +msgid "New network plug-in available." +msgstr "" + +msgid "Details" +msgstr "" + msgid "Undo integration failed." msgstr "La operación de deshacer ha fallado." @@ -3557,11 +3560,11 @@ msgstr "Será mejor que actualices tu software.\n" msgid "Newer 3mf version" msgstr "Nueva versión 3mf" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software.\n" -msgstr "" +msgstr "\n" msgid "The 3mf is not compatible, load geometry data only!" msgstr "" @@ -3844,9 +3847,9 @@ msgid "" "on Bambu Studio(windows) or CAD softwares." msgstr "" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s (%s).\n" -msgstr "" +msgstr "\n" msgid "Switching the language requires application restart.\n" msgstr "El cambio de idioma requiere el reinicio de la aplicación.\n" @@ -4439,6 +4442,30 @@ msgid "" "model without prime tower. Do you want to enable prime tower?" msgstr "" +msgid "" +"We have added an experimental style \"Tree Slim\" that features smaller " +"support volume but weaker strength.\n" +"We recommand using it with: 0 interface layers, 0 top distance, 2 walls." +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" + +msgid "" +"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommand the following " +"settings: at least 2 interface layers, at least 0.1 top z distance or using " +"support materials on interface." +msgstr "" + +msgid "" +"When using support material for the support interface, We recommand the " +"following settings:\n" +"0 top distance, 0 interface spacing, concentric pattern." +msgstr "" + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -5204,6 +5231,17 @@ msgstr "" msgid "version %s update information :" msgstr "" +msgid "Network plug-in update" +msgstr "" + +msgid "" +"Click OK to update the Network plug-in when Bambu Studio launches next time." +msgstr "" + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "" + msgid "New version of Bambu Studio" msgstr "Nueva versión de Bambu Studio" @@ -5625,9 +5663,9 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "La altura de la capa no puede superar el diámetro de la boquilla" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s\n" -msgstr "" +msgstr "\n" msgid "Generating skirt & brim" msgstr "Generando falda y ala" @@ -7160,10 +7198,9 @@ msgstr "Habilitar la generación de soporte." msgid "" "normal(auto) and tree(auto) is used to generate support automatically. If " -"normal or tree is selected, only support enforcers are generated" +"normal(manual) or tree(manual) is selected, only support enforcers are " +"generated" msgstr "" -"normal(auto) y tree(auto) se utiliza para generar soporte automáticamente. " -"Si se selecciona normal o árbol, sólo se generan los soportes" msgid "normal(auto)" msgstr "normal(auto)" @@ -7171,9 +7208,6 @@ msgstr "normal(auto)" msgid "tree(auto)" msgstr "árbol(auto)" -msgid "hybrid(auto)" -msgstr "híbrido(auto)" - msgid "normal(manual)" msgstr "" @@ -7220,9 +7254,12 @@ msgstr "" msgid "The z gap between the bottom support interface and object" msgstr "" +msgid "Support base" +msgstr "" + msgid "" -"Filament to print support and raft. \"Default\" means no specific filament " -"for support and current filament is used" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" msgstr "" msgid "Line width of support" @@ -7278,6 +7315,9 @@ msgstr "Patrón lineal de apoyo" msgid "Rectilinear grid" msgstr "Rejilla rectilínea" +msgid "Hollow" +msgstr "" + msgid "Interface pattern" msgstr "Patrón de interfaz" @@ -7308,9 +7348,27 @@ msgstr "Velocidad de la asistencia" msgid "Style" msgstr "Estilo" +msgid "" +"Style and shape of the support. For normal support, projecting the supports " +"into a regular grid will create more stable supports (default), while snug " +"support towers will save material and reduce object scarring.\n" +"For tree support, tight style will merge branches more aggressively and save " +"a lot of material (default), while hybrid style will create similar " +"structure to normal support under large flat overhangs." +msgstr "" + msgid "Snug" msgstr "Ajustado" +msgid "Tree Slim" +msgstr "" + +msgid "Tree Strong" +msgstr "" + +msgid "Tree Hybrid" +msgstr "" + msgid "Independent support layer height" msgstr "Altura de la capa de soporte independiente" @@ -7976,55 +8034,6 @@ msgid "" "density to improve the strength of the model?" msgstr "" -#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" -#~ msgstr "Elija uno o varios archivos (3mf/step/stl/obj/amf):" - -#~ msgid "Finish" -#~ msgstr "Finalizar" - -#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" -#~ msgstr "Importar 3MF/STL/STEP/OBJ/AMF" - -#~ msgid "Part Cooling" -#~ msgstr "Refrigeración de Piezas" - -#~ msgid "Aux Cooling" -#~ msgstr "Enfriamiento Auxiliar" - -#~ msgid "" -#~ "Filament to print support and skirt. 0 means no specific filament for " -#~ "support and current filament is used" -#~ msgstr "" -#~ "Filamento para imprimir el soporte y el faldón. 0 significa que no hay " -#~ "filamento específico para el soporte y se utiliza el filamento actual" - -#~ msgid "" -#~ "Filament to print support interface. 0 means no specific filament for " -#~ "support interface and current filament is used" -#~ msgstr "" -#~ "Filamento para imprimir la interfaz de soporte. 0 significa que no hay " -#~ "filamento específico para la interfaz de soporte y se utiliza el " -#~ "filamento actual" - -#~ msgid "Repair" -#~ msgstr "Reparar" - -#~ msgid "Repair the model's meshes if it is non-manifold mesh" -#~ msgstr "Reparar las mallas del modelo si se trata de una malla no plegable" - -#~ msgid "Monitoring Recording" -#~ msgstr "Monitoreo de grabación" - -#~ msgid "Tree support with infill" -#~ msgstr "Soporte para árboles con relleno" - -#~ msgid "" -#~ "This setting specifies whether to add infill inside large hollows of tree " -#~ "support" -#~ msgstr "" -#~ "Este ajuste especifica si se añade relleno dentro de los grandes huecos " -#~ "del soporte del árbol" - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -8067,6 +8076,9 @@ msgstr "" #~ "hay objetos seleccionados, sólo orienta los seleccionados.En caso " #~ "contrario, orienta todos los objetos del proyecto." +#~ msgid "Aux Cooling" +#~ msgstr "Enfriamiento Auxiliar" + #~ msgid "Avoid crossing wall when travel" #~ msgstr "Evitar cruzar el muro en los desplazamientos" @@ -8079,6 +8091,9 @@ msgstr "" #~ "este filamento.\n" #~ "Esto puede causar el bloqueo de la boquilla y el fracaso de la impresión" +#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" +#~ msgstr "Elija uno o varios archivos (3mf/step/stl/obj/amf):" + #~ msgid "Clear all" #~ msgstr "Borrar todo" @@ -8189,9 +8204,27 @@ msgstr "" #~ msgid "Filament N XX" #~ msgstr "Filamento N XX" +#~ msgid "" +#~ "Filament to print support and skirt. 0 means no specific filament for " +#~ "support and current filament is used" +#~ msgstr "" +#~ "Filamento para imprimir el soporte y el faldón. 0 significa que no hay " +#~ "filamento específico para el soporte y se utiliza el filamento actual" + +#~ msgid "" +#~ "Filament to print support interface. 0 means no specific filament for " +#~ "support interface and current filament is used" +#~ msgstr "" +#~ "Filamento para imprimir la interfaz de soporte. 0 significa que no hay " +#~ "filamento específico para la interfaz de soporte y se utiliza el " +#~ "filamento actual" + #~ msgid "Filaments Selection" #~ msgstr "Selección de filamentos" +#~ msgid "Finish" +#~ msgstr "Finalizar" + #~ msgid "Finished" #~ msgstr "Terminado" @@ -8240,6 +8273,9 @@ msgstr "" #~ "entrada de auto-organización para evitar la colisión cuando se imprime " #~ "objeto por objeto." +#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" +#~ msgstr "Importar 3MF/STL/STEP/OBJ/AMF" + #~ msgid "In the calibration of extrusion flow" #~ msgstr "En la calibración del flujo de extrusión" @@ -8281,6 +8317,9 @@ msgstr "" #~ msgid "Monitoring" #~ msgstr "Monitorizando" +#~ msgid "Monitoring Recording" +#~ msgstr "Monitoreo de grabación" + #~ msgid "Open" #~ msgstr "Abrir" @@ -8293,6 +8332,9 @@ msgstr "" #~ msgid "Output file" #~ msgstr "Archivo de salida" +#~ msgid "Part Cooling" +#~ msgstr "Refrigeración de Piezas" + #~ msgid "Pause(heated bed temperature error)" #~ msgstr "Pausa (error de temperatura de la cama caliente)" @@ -8376,6 +8418,12 @@ msgstr "" #~ msgid "Reload items" #~ msgstr "Recarga de objetos" +#~ msgid "Repair" +#~ msgstr "Reparar" + +#~ msgid "Repair the model's meshes if it is non-manifold mesh" +#~ msgstr "Reparar las mallas del modelo si se trata de una malla no plegable" + #~ msgid "Report" #~ msgstr "Informe" @@ -8409,6 +8457,15 @@ msgstr "" #~ msgid "Spiral mode" #~ msgstr "Modo espiral" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, \n" +#~ "support is disabled, top shell layers is 0 and sparse infill density is " +#~ "0\n" +#~ msgstr "" +#~ "El modo espiral sólo funciona cuando los bucles de pared son 1, \n" +#~ "el soporte está desactivado, las capas superiores de la cáscara es 0 y la " +#~ "densidad de relleno dispersa es 0\n" + #~ msgid "Successfully sent.Will automatically jump to the device page in %s s" #~ msgstr "" #~ "Enviado con éxito. Saltará automáticamente a la página del dispositivo en " @@ -8466,6 +8523,13 @@ msgstr "" #~ "filamento para ahorrar filamento y disminuir el tiempo de impresión. Los " #~ "colores de los objetos se mezclarán como resultado" +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "Este ajuste especifica si se añade relleno dentro de los grandes huecos " +#~ "del soporte del árbol" + #~ msgid "" #~ "This setting stands for how much volume of filament can be melted and " #~ "extruded per second. Printing speed is limited by max volumetric speed, " @@ -8482,6 +8546,9 @@ msgstr "" #~ msgid "Translation" #~ msgstr "Translación" +#~ msgid "Tree support with infill" +#~ msgstr "Soporte para árboles con relleno" + #~ msgid "Unable to create zip file" #~ msgstr "No se puede crear un archivo zip" @@ -8516,9 +8583,20 @@ msgstr "" #~ msgid " is too close to others, there will be collisions when printing.\n" #~ msgstr " está demasiado cerca de otros, habrá colisiones al imprimir.\n" +#~ msgid "hybrid(auto)" +#~ msgstr "híbrido(auto)" + #~ msgid "normal" #~ msgstr "normal" +#~ msgid "" +#~ "normal(auto) and tree(auto) is used to generate support automatically. If " +#~ "normal or tree is selected, only support enforcers are generated" +#~ msgstr "" +#~ "normal(auto) y tree(auto) se utiliza para generar soporte " +#~ "automáticamente. Si se selecciona normal o árbol, sólo se generan los " +#~ "soportes" + #~ msgid "the 3mf is not compatible, load geometry data only!" #~ msgstr "el 3mf no es compatible, ¡cargue sólo los datos geométricos!" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index 71240fe325..da70014791 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-12-13 20:02+0800\n" +"POT-Creation-Date: 2022-12-24 13:01+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1386,6 +1386,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing via LAN." msgstr "" +msgid "Failed to send the print job. Please try again." +msgstr "" + msgid "Send to Printer failed. Please try again." msgstr "" @@ -1877,12 +1880,9 @@ msgstr "" "La valeur sera remise à 0." msgid "" -"Spiral mode only works when wall loops is 1, \n" -"support is disabled, top shell layers is 0 and sparse infill density is 0\n" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional" msgstr "" -"Le mode spirale ne fonctionne que lorsque les boucles murales sont à 1, \n" -"le support est désactivé, les couches de coque supérieures sont à 0 et la " -"densité de remplissage clairsemée est à 0\n" msgid "" "Change these settings automatically? \n" @@ -3231,6 +3231,12 @@ msgstr "L'intégration a échoué." msgid "Undo integration was successful." msgstr "Annuler l'intégration a réussi." +msgid "New network plug-in available." +msgstr "" + +msgid "Details" +msgstr "" + msgid "Undo integration failed." msgstr "L'annulation de l'intégration a échoué." @@ -3527,11 +3533,11 @@ msgstr "Vous feriez mieux de mettre à jour votre logiciel.\n" msgid "Newer 3mf version" msgstr "Nouvelle version 3mf" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software.\n" -msgstr "" +msgstr "\n" msgid "The 3mf is not compatible, load geometry data only!" msgstr "" @@ -3814,9 +3820,9 @@ msgid "" "on Bambu Studio(windows) or CAD softwares." msgstr "" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s (%s).\n" -msgstr "" +msgstr "\n" msgid "Switching the language requires application restart.\n" msgstr "Le changement de langue nécessite le redémarrage de l'application.\n" @@ -4310,8 +4316,6 @@ msgid "" "Please check the following infomation and click Confirm to continue sending " "print:\n" msgstr "" -"Please check the following infomation and click Confirm to continue sending " -"print:\n" msgid "" "The printer type used to generate G-code is not the same type as the " @@ -4415,6 +4419,30 @@ msgid "" "model without prime tower. Do you want to enable prime tower?" msgstr "" +msgid "" +"We have added an experimental style \"Tree Slim\" that features smaller " +"support volume but weaker strength.\n" +"We recommand using it with: 0 interface layers, 0 top distance, 2 walls." +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" + +msgid "" +"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommand the following " +"settings: at least 2 interface layers, at least 0.1 top z distance or using " +"support materials on interface." +msgstr "" + +msgid "" +"When using support material for the support interface, We recommand the " +"following settings:\n" +"0 top distance, 0 interface spacing, concentric pattern." +msgstr "" + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -5185,6 +5213,17 @@ msgstr "" msgid "version %s update information :" msgstr "" +msgid "Network plug-in update" +msgstr "" + +msgid "" +"Click OK to update the Network plug-in when Bambu Studio launches next time." +msgstr "" + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "" + msgid "New version of Bambu Studio" msgstr "Nouvelle version de Bambu Studio" @@ -5498,7 +5537,7 @@ msgid "%1% is too tall, and collisions will be caused." msgstr "%1% est trop grand, cela pourrait provoquer des collisions." msgid " is too close to others, there may be collisions when printing.\n" -msgstr " is too close to others, there may be collisions when printing.\n" +msgstr "" msgid "" " is too close to exclusion area, there may be collisions when printing.\n" @@ -5608,9 +5647,9 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "La hauteur de la couche ne peut pas dépasser le diamètre de la buse" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s\n" -msgstr "" +msgstr "\n" msgid "Generating skirt & brim" msgstr "Génération jupe et bord" @@ -7156,11 +7195,9 @@ msgstr "Activer la génération de support." msgid "" "normal(auto) and tree(auto) is used to generate support automatically. If " -"normal or tree is selected, only support enforcers are generated" +"normal(manual) or tree(manual) is selected, only support enforcers are " +"generated" msgstr "" -"normal(auto) et tree(auto) sont utilisés pour générer automatiquement le " -"support. Si normal ou arbre est sélectionné, seuls les exécuteurs de support " -"sont générés" msgid "normal(auto)" msgstr "normale (auto)" @@ -7168,9 +7205,6 @@ msgstr "normale (auto)" msgid "tree(auto)" msgstr "arbre (auto)" -msgid "hybrid(auto)" -msgstr "hybride (auto)" - msgid "normal(manual)" msgstr "" @@ -7219,9 +7253,12 @@ msgstr "" msgid "The z gap between the bottom support interface and object" msgstr "" +msgid "Support base" +msgstr "" + msgid "" -"Filament to print support and raft. \"Default\" means no specific filament " -"for support and current filament is used" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" msgstr "" msgid "Line width of support" @@ -7276,6 +7313,9 @@ msgstr "Motif de ligne de support" msgid "Rectilinear grid" msgstr "Grille rectiligne" +msgid "Hollow" +msgstr "" + msgid "Interface pattern" msgstr "Modèle d'interface" @@ -7306,9 +7346,27 @@ msgstr "Vitesse pour les supports" msgid "Style" msgstr "Style" +msgid "" +"Style and shape of the support. For normal support, projecting the supports " +"into a regular grid will create more stable supports (default), while snug " +"support towers will save material and reduce object scarring.\n" +"For tree support, tight style will merge branches more aggressively and save " +"a lot of material (default), while hybrid style will create similar " +"structure to normal support under large flat overhangs." +msgstr "" + msgid "Snug" msgstr "Confortable" +msgid "Tree Slim" +msgstr "" + +msgid "Tree Strong" +msgstr "" + +msgid "Tree Hybrid" +msgstr "" + msgid "Independent support layer height" msgstr "Hauteur de la couche de support indépendante" @@ -7977,56 +8035,6 @@ msgid "" "density to improve the strength of the model?" msgstr "" -#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" -#~ msgstr "Choisissez un ou plusieurs fichiers (3mf/step/stl/obj/amf) :" - -#~ msgid "Finish" -#~ msgstr "Finish" - -#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" -#~ msgstr "Importer 3MF/STL/STEP/OBJ/AMF" - -#~ msgid "Part Cooling" -#~ msgstr "Refroidissement des pièces" - -#~ msgid "Aux Cooling" -#~ msgstr "Refroidissement auxiliaire" - -#~ msgid "" -#~ "Filament to print support and skirt. 0 means no specific filament for " -#~ "support and current filament is used" -#~ msgstr "" -#~ "Filament pour imprimer le support et la jupe. 0 signifie qu'aucun " -#~ "filament spécifique pour le support et le filament actuel est utilisé" - -#~ msgid "" -#~ "Filament to print support interface. 0 means no specific filament for " -#~ "support interface and current filament is used" -#~ msgstr "" -#~ "Filament pour imprimer l'interface de support. 0 signifie qu'aucun " -#~ "filament spécifique pour l'interface de support et le filament actuel est " -#~ "utilisé" - -#~ msgid "Repair" -#~ msgstr "Réparation" - -#~ msgid "Repair the model's meshes if it is non-manifold mesh" -#~ msgstr "" -#~ "Réparer les maillages du modèle s'il s'agit d'un maillage non multiple" - -#~ msgid "Monitoring Recording" -#~ msgstr "Enregistrement de surveillance" - -#~ msgid "Tree support with infill" -#~ msgstr "Support d'arbre avec remplissage" - -#~ msgid "" -#~ "This setting specifies whether to add infill inside large hollows of tree " -#~ "support" -#~ msgstr "" -#~ "Ce paramètre spécifie s'il faut ajouter un remplissage à l'intérieur des " -#~ "grands creux du support d'arbre" - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -8069,6 +8077,9 @@ msgstr "" #~ "y a des objets sélectionnés, il oriente uniquement ceux qui sont " #~ "sélectionnés. Sinon, il oriente tous les objets du projet." +#~ msgid "Aux Cooling" +#~ msgstr "Refroidissement auxiliaire" + #~ msgid "Avoid crossing wall when travel" #~ msgstr "Évitez de traverser le mur lorsque vous voyagez" @@ -8081,6 +8092,9 @@ msgstr "" #~ "ce filament. Cela peut entraîner le blocage de la buse et l'échec de " #~ "l'impression" +#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" +#~ msgstr "Choisissez un ou plusieurs fichiers (3mf/step/stl/obj/amf) :" + #~ msgid "Clear all" #~ msgstr "Tout effacer" @@ -8192,9 +8206,27 @@ msgstr "" #~ msgid "Filament N XX" #~ msgstr "Filament N XX" +#~ msgid "" +#~ "Filament to print support and skirt. 0 means no specific filament for " +#~ "support and current filament is used" +#~ msgstr "" +#~ "Filament pour imprimer le support et la jupe. 0 signifie qu'aucun " +#~ "filament spécifique pour le support et le filament actuel est utilisé" + +#~ msgid "" +#~ "Filament to print support interface. 0 means no specific filament for " +#~ "support interface and current filament is used" +#~ msgstr "" +#~ "Filament pour imprimer l'interface de support. 0 signifie qu'aucun " +#~ "filament spécifique pour l'interface de support et le filament actuel est " +#~ "utilisé" + #~ msgid "Filaments Selection" #~ msgstr "Sélection de filaments" +#~ msgid "Finish" +#~ msgstr "Finish" + #~ msgid "Finished" #~ msgstr "Terminé" @@ -8242,6 +8274,9 @@ msgstr "" #~ "entrée de l'auto-arrangement pour éviter les collisions lors de " #~ "l'impression objet par objet" +#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" +#~ msgstr "Importer 3MF/STL/STEP/OBJ/AMF" + #~ msgid "In the calibration of extrusion flow" #~ msgstr "Calibrage du flux d'extrusion en cours" @@ -8283,6 +8318,9 @@ msgstr "" #~ msgid "Monitoring" #~ msgstr "Surveillance" +#~ msgid "Monitoring Recording" +#~ msgstr "Enregistrement de surveillance" + #~ msgid "Open" #~ msgstr "Open" @@ -8295,6 +8333,9 @@ msgstr "" #~ msgid "Output file" #~ msgstr "Fichier de sortie" +#~ msgid "Part Cooling" +#~ msgstr "Refroidissement des pièces" + #~ msgid "Pause(heated bed temperature error)" #~ msgstr "Pause (erreur de température du plateau chauffant)" @@ -8376,6 +8417,13 @@ msgstr "" #~ msgid "Reload items" #~ msgstr "Recharger les éléments" +#~ msgid "Repair" +#~ msgstr "Réparation" + +#~ msgid "Repair the model's meshes if it is non-manifold mesh" +#~ msgstr "" +#~ "Réparer les maillages du modèle s'il s'agit d'un maillage non multiple" + #~ msgid "Report" #~ msgstr "Signaler" @@ -8409,6 +8457,15 @@ msgstr "" #~ msgid "Spiral mode" #~ msgstr "Mode spirale" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, \n" +#~ "support is disabled, top shell layers is 0 and sparse infill density is " +#~ "0\n" +#~ msgstr "" +#~ "Le mode spirale ne fonctionne que lorsque les boucles murales sont à 1, \n" +#~ "le support est désactivé, les couches de coque supérieures sont à 0 et la " +#~ "densité de remplissage clairsemée est à 0\n" + #~ msgid "Successfully sent.Will automatically jump to the device page in %s s" #~ msgstr "" #~ "Envoyé avec succès. Sautera automatiquement à la page de l'appareil " @@ -8466,6 +8523,13 @@ msgstr "" #~ "filament afin d'économiser du filament et de diminuer le temps " #~ "d'impression. Les couleurs des objets seront mélangées en conséquence." +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "Ce paramètre spécifie s'il faut ajouter un remplissage à l'intérieur des " +#~ "grands creux du support d'arbre" + #~ msgid "" #~ "This setting stands for how much volume of filament can be melted and " #~ "extruded per second. Printing speed is limited by max volumetric speed, " @@ -8482,6 +8546,9 @@ msgstr "" #~ msgid "Translation" #~ msgstr "Traduction" +#~ msgid "Tree support with infill" +#~ msgstr "Support d'arbre avec remplissage" + #~ msgid "Unable to create zip file" #~ msgstr "Création du fichier zip impossible" @@ -8518,9 +8585,20 @@ msgstr "" #~ "est trop proche des autres, il y aura des collisions lors de " #~ "l'impression.\n" +#~ msgid "hybrid(auto)" +#~ msgstr "hybride (auto)" + #~ msgid "normal" #~ msgstr "Ordinaire" +#~ msgid "" +#~ "normal(auto) and tree(auto) is used to generate support automatically. If " +#~ "normal or tree is selected, only support enforcers are generated" +#~ msgstr "" +#~ "normal(auto) et tree(auto) sont utilisés pour générer automatiquement le " +#~ "support. Si normal ou arbre est sélectionné, seuls les exécuteurs de " +#~ "support sont générés" + #~ msgid "the 3mf is not compatible, load geometry data only!" #~ msgstr "" #~ "le 3mf n'est pas compatible, chargez uniquement les données de géométrie !" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index 33b73cf4fb..ab452d3fb6 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,16 +2,13 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-12-13 20:02+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2022-12-24 13:01+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.1\n" msgid "Supports Painting" msgstr "Támaszok festése" @@ -1387,6 +1384,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing via LAN." msgstr "A LAN-on keresztüli nyomtatáshoz helyezz be egy SD kártyát." +msgid "Failed to send the print job. Please try again." +msgstr "" + msgid "Send to Printer failed. Please try again." msgstr "" @@ -1892,12 +1892,9 @@ msgstr "" "Az érték 0-ra áll vissza." msgid "" -"Spiral mode only works when wall loops is 1, \n" -"support is disabled, top shell layers is 0 and sparse infill density is 0\n" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional" msgstr "" -"A spirál mód csak akkor működik, ha a falak száma 1,\n" -"a támaszok ki vannak kapcsolva, a felső rétegek száma 0 és a hiányos " -"kitöltés sűrűsége 0\n" msgid "" "Change these settings automatically? \n" @@ -1965,9 +1962,6 @@ msgid "" "Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly\n" msgstr "" -"Switch to rectilinear pattern?\n" -"Yes - switch to rectilinear pattern automaticlly\n" -"No - reset density to default non 100% value automaticlly\n" msgid "Auto bed leveling" msgstr "Automatikus asztalszintezés" @@ -3261,6 +3255,12 @@ msgstr "Az integráció nem sikerült." msgid "Undo integration was successful." msgstr "Az integráció visszavonása sikeres volt." +msgid "New network plug-in available." +msgstr "" + +msgid "Details" +msgstr "" + msgid "Undo integration failed." msgstr "Az integráció visszavonása nem sikerült." @@ -3559,11 +3559,11 @@ msgstr "Jobb lenne, ha frissítenéd a szoftvert.\n" msgid "Newer 3mf version" msgstr "Újabb 3mf verzió" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software.\n" -msgstr "" +msgstr "\n" msgid "The 3mf is not compatible, load geometry data only!" msgstr "" @@ -3843,9 +3843,9 @@ msgid "" "on Bambu Studio(windows) or CAD softwares." msgstr "" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s (%s).\n" -msgstr "" +msgstr "\n" msgid "Switching the language requires application restart.\n" msgstr "A nyelvváltáshoz az alkalmazás újraindítása szükséges.\n" @@ -4335,10 +4335,6 @@ msgid "" "currently selected physical printer. It is recommend to re-slice by " "selecting the same printer type.\n" msgstr "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice by " -"selecting the same printer type.\n" -"\n" #, c-format, boost-format msgid "The %s filament is too soft to be used with the AMS" @@ -4433,6 +4429,30 @@ msgid "" "model without prime tower. Do you want to enable prime tower?" msgstr "" +msgid "" +"We have added an experimental style \"Tree Slim\" that features smaller " +"support volume but weaker strength.\n" +"We recommand using it with: 0 interface layers, 0 top distance, 2 walls." +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" + +msgid "" +"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommand the following " +"settings: at least 2 interface layers, at least 0.1 top z distance or using " +"support materials on interface." +msgstr "" + +msgid "" +"When using support material for the support interface, We recommand the " +"following settings:\n" +"0 top distance, 0 interface spacing, concentric pattern." +msgstr "" + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -5194,6 +5214,17 @@ msgstr "" msgid "version %s update information :" msgstr "" +msgid "Network plug-in update" +msgstr "" + +msgid "" +"Click OK to update the Network plug-in when Bambu Studio launches next time." +msgstr "" + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "" + msgid "New version of Bambu Studio" msgstr "A Bambu Studio új verziója" @@ -5509,7 +5540,7 @@ msgid "%1% is too tall, and collisions will be caused." msgstr "%1% túl magas, a nyomtatás során előfordulhatnak ütközések." msgid " is too close to others, there may be collisions when printing.\n" -msgstr " is too close to others, there may be collisions when printing.\n" +msgstr "" msgid "" " is too close to exclusion area, there may be collisions when printing.\n" @@ -5614,9 +5645,9 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "A rétegmagasság nem lehet nagyobb a fúvóka átmérőjénél." -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s\n" -msgstr "" +msgstr "\n" msgid "Generating skirt & brim" msgstr "Szoknya & perem generálása" @@ -7148,11 +7179,9 @@ msgstr "Engedélyezi a támasz generálását." msgid "" "normal(auto) and tree(auto) is used to generate support automatically. If " -"normal or tree is selected, only support enforcers are generated" +"normal(manual) or tree(manual) is selected, only support enforcers are " +"generated" msgstr "" -"A normál (auto), hibrid (auto) és fa (auto) támaszok automatikus " -"generálására szolgál. Ha normál vagy fa van kiválasztva, akkor csak a támasz " -"kényszerítők kerülnek legenerálásra." msgid "normal(auto)" msgstr "normál (auto)" @@ -7160,9 +7189,6 @@ msgstr "normál (auto)" msgid "tree(auto)" msgstr "fa (auto)" -msgid "hybrid(auto)" -msgstr "hibrid (auto)" - msgid "normal(manual)" msgstr "" @@ -7210,9 +7236,12 @@ msgstr "" msgid "The z gap between the bottom support interface and object" msgstr "" +msgid "Support base" +msgstr "" + msgid "" -"Filament to print support and raft. \"Default\" means no specific filament " -"for support and current filament is used" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" msgstr "" msgid "Line width of support" @@ -7267,6 +7296,9 @@ msgstr "A támasz mintázata." msgid "Rectilinear grid" msgstr "Vonalrács" +msgid "Hollow" +msgstr "" + msgid "Interface pattern" msgstr "Érintkező felület mintázata" @@ -7297,9 +7329,27 @@ msgstr "Támaszok sebessége" msgid "Style" msgstr "Stílus" +msgid "" +"Style and shape of the support. For normal support, projecting the supports " +"into a regular grid will create more stable supports (default), while snug " +"support towers will save material and reduce object scarring.\n" +"For tree support, tight style will merge branches more aggressively and save " +"a lot of material (default), while hybrid style will create similar " +"structure to normal support under large flat overhangs." +msgstr "" + msgid "Snug" msgstr "Szoros" +msgid "Tree Slim" +msgstr "" + +msgid "Tree Strong" +msgstr "" + +msgid "Tree Hybrid" +msgstr "" + msgid "Independent support layer height" msgstr "Független támasz rétegmagassága" @@ -7960,63 +8010,6 @@ msgid "" "density to improve the strength of the model?" msgstr "" -#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" -#~ msgstr "Válassz ki egy vagy több fájlt (3mf/step/stl/obj/amf):" - -#~ msgid "Finish" -#~ msgstr "Kész" - -#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" -#~ msgstr "3MF/STL/STEP/OBJ/AMF importálása" - -#~ msgid "Part Cooling" -#~ msgstr "Tárgyhűtés" - -#~ msgid "Aux Cooling" -#~ msgstr "Segédhűtés" - -#~ msgid "" -#~ "Filament to print support and skirt. 0 means no specific filament for " -#~ "support and current filament is used" -#~ msgstr "" -#~ "Filament a támasz és perem nyomtatásához. A 0 azt jelenti, hogy nincs " -#~ "erre külön kijelölt filament és a jelenleg használt kerül felhasználásra" - -#~ msgid "" -#~ "Filament to print support interface. 0 means no specific filament for " -#~ "support interface and current filament is used" -#~ msgstr "" -#~ "Filament a támasz érintkező felületének nyomtatásához. A 0 azt jelenti, " -#~ "hogy nincs erre külön kijelölt filament és a jelenleg használt kerül " -#~ "felhasználásra" - -#~ msgid "Repair" -#~ msgstr "Javítás" - -#~ msgid "Repair the model's meshes if it is non-manifold mesh" -#~ msgstr "Megjavítja a modell hálóit, ha azok hibásak" - -#~ msgid "Heat the nozzle to target temperature" -#~ msgstr "Fúvóka felmelegítése a kívánt hőmérsékletre" - -#~ msgid "" -#~ "Successfully sent. Will automatically jump to the device page in %s s" -#~ msgstr "" -#~ "Sikeresen elküldve. Az eszköz oldala automatikusan megjelenik %s mp belül" - -#~ msgid "Monitoring Recording" -#~ msgstr "Felvétel monitorozása" - -#~ msgid "Tree support with infill" -#~ msgstr "Fa támasz kitöltéssel" - -#~ msgid "" -#~ "This setting specifies whether to add infill inside large hollows of tree " -#~ "support" -#~ msgstr "" -#~ "Ez a beállítás határozza meg, hogy a fa támasz nagyobb üregeiben legyen-e " -#~ "kitöltés." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -8060,6 +8053,9 @@ msgstr "" #~ "ellenkező esetben az aktuális projektben lévő összes objektumot " #~ "orientálja." +#~ msgid "Aux Cooling" +#~ msgstr "Segédhűtés" + #~ msgid "Avoid crossing wall when travel" #~ msgstr "Falak elkerülése mozgáskor" @@ -8072,6 +8068,9 @@ msgstr "" #~ "hőmérséklete.\n" #~ "Ez a fúvóka eltömődését és nyomtatási hibákat okozhat" +#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" +#~ msgstr "Válassz ki egy vagy több fájlt (3mf/step/stl/obj/amf):" + #~ msgid "Clear all" #~ msgstr "Összes törlése" @@ -8182,9 +8181,27 @@ msgstr "" #~ msgid "Filament N XX" #~ msgstr "Filament N XX" +#~ msgid "" +#~ "Filament to print support and skirt. 0 means no specific filament for " +#~ "support and current filament is used" +#~ msgstr "" +#~ "Filament a támasz és perem nyomtatásához. A 0 azt jelenti, hogy nincs " +#~ "erre külön kijelölt filament és a jelenleg használt kerül felhasználásra" + +#~ msgid "" +#~ "Filament to print support interface. 0 means no specific filament for " +#~ "support interface and current filament is used" +#~ msgstr "" +#~ "Filament a támasz érintkező felületének nyomtatásához. A 0 azt jelenti, " +#~ "hogy nincs erre külön kijelölt filament és a jelenleg használt kerül " +#~ "felhasználásra" + #~ msgid "Filaments Selection" #~ msgstr "Filamentek kiválasztása" +#~ msgid "Finish" +#~ msgstr "Kész" + #~ msgid "Finished" #~ msgstr "Kész" @@ -8223,6 +8240,9 @@ msgstr "" #~ "Fúvóka felfűtése a\n" #~ "célhőmérsékletre" +#~ msgid "Heat the nozzle to target temperature" +#~ msgstr "Fúvóka felmelegítése a kívánt hőmérsékletre" + #~ msgid "Height:" #~ msgstr "Magasság:" @@ -8234,6 +8254,9 @@ msgstr "" #~ "automatikus elrendezéshez van használva az ütközések elkerülése " #~ "érdekében, amikor a nyomtatás tárgyanként történik." +#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" +#~ msgstr "3MF/STL/STEP/OBJ/AMF importálása" + #~ msgid "In the calibration of extrusion flow" #~ msgstr "Az anyagáramlás kalibrálásában" @@ -8275,6 +8298,9 @@ msgstr "" #~ msgid "Monitoring" #~ msgstr "Monitorozás" +#~ msgid "Monitoring Recording" +#~ msgstr "Felvétel monitorozása" + #~ msgid "Open" #~ msgstr "Open" @@ -8287,6 +8313,9 @@ msgstr "" #~ msgid "Output file" #~ msgstr "Kimeneti fájl" +#~ msgid "Part Cooling" +#~ msgstr "Tárgyhűtés" + #~ msgid "Pause(heated bed temperature error)" #~ msgstr "Szünet (tárgyasztal hőmérséklet hiba)" @@ -8370,6 +8399,12 @@ msgstr "" #~ msgid "Reload items" #~ msgstr "Tárgyak újbóli betöltése" +#~ msgid "Repair" +#~ msgstr "Javítás" + +#~ msgid "Repair the model's meshes if it is non-manifold mesh" +#~ msgstr "Megjavítja a modell hálóit, ha azok hibásak" + #~ msgid "Report" #~ msgstr "Jelentés" @@ -8403,11 +8438,25 @@ msgstr "" #~ msgid "Spiral mode" #~ msgstr "Spirál/Váza mód" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, \n" +#~ "support is disabled, top shell layers is 0 and sparse infill density is " +#~ "0\n" +#~ msgstr "" +#~ "A spirál mód csak akkor működik, ha a falak száma 1,\n" +#~ "a támaszok ki vannak kapcsolva, a felső rétegek száma 0 és a hiányos " +#~ "kitöltés sűrűsége 0\n" + #~ msgid "Successfully sent.Will automatically jump to the device page in %s s" #~ msgstr "" #~ "Sikeresen elküldve. Automatikus átváltás a készülék oldalára %s mp-en " #~ "belül" +#~ msgid "" +#~ "Successfully sent. Will automatically jump to the device page in %s s" +#~ msgstr "" +#~ "Sikeresen elküldve. Az eszköz oldala automatikusan megjelenik %s mp belül" + #~ msgid "" #~ "Support layer uses layer height independent with object layer. This is to " #~ "support custom support gap,but may cause extra filament switches if " @@ -8459,6 +8508,13 @@ msgstr "" #~ "nyomtatási idő csökkentése és némi filament megtakarításának érdekében. " #~ "Az objektum színei ennek eredményeképpen keveredni fognak." +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "Ez a beállítás határozza meg, hogy a fa támasz nagyobb üregeiben legyen-e " +#~ "kitöltés." + #~ msgid "" #~ "This setting stands for how much volume of filament can be melted and " #~ "extruded per second. Printing speed is limited by max volumetric speed, " @@ -8477,6 +8533,9 @@ msgstr "" #~ msgid "Translation" #~ msgstr "Fordítás" +#~ msgid "Tree support with infill" +#~ msgstr "Fa támasz kitöltéssel" + #~ msgid "Unable to create zip file" #~ msgstr "Nem sikerült létrehozni a zip fájlt" @@ -8514,9 +8573,20 @@ msgstr "" #~ " túl közel van a tiltott területhez, a nyomtatás során előfordulhatnak " #~ "ütközések.\n" +#~ msgid "hybrid(auto)" +#~ msgstr "hibrid (auto)" + #~ msgid "normal" #~ msgstr "normál" +#~ msgid "" +#~ "normal(auto) and tree(auto) is used to generate support automatically. If " +#~ "normal or tree is selected, only support enforcers are generated" +#~ msgstr "" +#~ "A normál (auto), hibrid (auto) és fa (auto) támaszok automatikus " +#~ "generálására szolgál. Ha normál vagy fa van kiválasztva, akkor csak a " +#~ "támasz kényszerítők kerülnek legenerálásra." + #~ msgid "the 3mf is not compatible, load geometry data only!" #~ msgstr "A 3mf nem kompatibilis, csak geometriai adatok kerülnek betöltésre!" diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po new file mode 100644 index 0000000000..091e73bc1e --- /dev/null +++ b/bbl/i18n/it/BambuStudio_it.po @@ -0,0 +1,8471 @@ +msgid "" +msgstr "" +"Project-Id-Version: Bambu Studio\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-24 13:01+0800\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" +"Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" + +msgid "Supports Painting" +msgstr "Support Painting" + +msgid "Alt + Mouse wheel" +msgstr "Alt + Rotella del mouse" + +msgid "Section view" +msgstr "Section view" + +msgid "Reset direction" +msgstr "" + +msgid "Ctrl + Mouse wheel" +msgstr "Ctrl + Rotella del mouse" + +msgid "Pen size" +msgstr "Pen size" + +msgid "Left mouse button" +msgstr "Tasto sinistro mouse" + +msgid "Enforce supports" +msgstr "Rinforzi supporti" + +msgid "Right mouse button" +msgstr "Tasto destro mouse" + +msgid "Block supports" +msgstr "Blocca supporti" + +msgid "Shift + Left mouse button" +msgstr "Shift + Tasto sinistro mouse" + +msgid "Erase" +msgstr "Erase" + +msgid "Erase all painting" +msgstr "Erase all painting" + +msgid "Highlight overhang areas" +msgstr "Highlight overhangs" + +msgid "Gap fill" +msgstr "" + +msgid "Perform" +msgstr "Eseguire" + +msgid "Gap area" +msgstr "" + +msgid "Tool type" +msgstr "Tipo di strumento" + +msgid "Smart fill angle" +msgstr "Angolo riempimento intelligente" + +msgid "On overhangs only" +msgstr "" + +msgid "Auto support threshold angle: " +msgstr "Auto support threshold angle: " + +msgid "Circle" +msgstr "Cerchio" + +msgid "Sphere" +msgstr "Sfera" + +msgid "Fill" +msgstr "Fill" + +msgid "Gap Fill" +msgstr "" + +#, boost-format +msgid "Allows painting only on facets selected by: \"%1%\"" +msgstr "" + +msgid "Highlight faces according to overhang angle." +msgstr "Highlight faces according to overhang angle." + +msgid "No auto support" +msgstr "No auto support" + +msgid "Support Generated" +msgstr "Support generated" + +msgid "Lay on face" +msgstr "Lay on Face" + +#, boost-format +msgid "" +"Filament count exceeds the maximum number that painting tool supports. only " +"the first %1% filaments will be available in painting tool." +msgstr "" +"Filament count exceeds the maximum number that painting tool supports. Only " +"the first %1% filaments will be available in painting tool." + +msgid "Color Painting" +msgstr "Color painting" + +msgid "Pen shape" +msgstr "Pen shape" + +msgid "Paint" +msgstr "Paint" + +msgid "Key 1~9" +msgstr "Key 1~9" + +msgid "Choose filament" +msgstr "Choose filament" + +msgid "Edge detection" +msgstr "Edge detection" + +msgid "Triangles" +msgstr "Triangoli" + +msgid "Filaments" +msgstr "Filamenti" + +msgid "Brush" +msgstr "Pennello" + +msgid "Smart fill" +msgstr "Riempimento intelligente" + +msgid "Bucket fill" +msgstr "Riempimento Secchio" + +msgid "Height range" +msgstr "Height range" + +msgid "Ctrl + Shift + Enter" +msgstr "" + +msgid "Toggle Wireframe" +msgstr "" + +msgid "Shortcut Key " +msgstr "Shortcut Key " + +msgid "Triangle" +msgstr "Triangle" + +msgid "Height Range" +msgstr "Height Range" + +msgid "Remove painted color" +msgstr "Rimuovi colore dipinto" + +#, boost-format +msgid "Painted using: Filament %1%" +msgstr "Painted using: Filament %1%" + +msgid "Move" +msgstr "Sposta" + +msgid "Rotate" +msgstr "Ruota" + +msgid "Optimize orientation" +msgstr "Ottimizza orientamento" + +msgid "Apply" +msgstr "Applica" + +msgid "Scale" +msgstr "Ridimensiona" + +msgid "Error: Please close all toolbar menus first" +msgstr "Error: Please close all toolbar menus first" + +msgid "Tool-Lay on Face" +msgstr "Tool-Lay on Face" + +msgid "in" +msgstr "in" + +msgid "mm" +msgstr "mm" + +msgid "Position" +msgstr "Posizione" + +msgid "Rotation" +msgstr "Rotazione" + +msgid "Scale ratios" +msgstr "Scale ratios" + +msgid "Object Operations" +msgstr "Object operations" + +msgid "Volume Operations" +msgstr "Volume operations" + +msgid "Translate" +msgstr "Traduci" + +msgid "Group Operations" +msgstr "Group operations" + +msgid "Set Position" +msgstr "Imposta posizione" + +msgid "Set Orientation" +msgstr "Imposta orientamento" + +msgid "Set Scale" +msgstr "Imposta scala" + +msgid "Reset Position" +msgstr "Reset position" + +msgid "Reset Rotation" +msgstr "Reimposta rotazione" + +msgid "World coordinates" +msgstr "Coordinate reali" + +msgid "°" +msgstr "°" + +msgid "Size" +msgstr "Dimensioni" + +msgid "%" +msgstr "%" + +msgid "uniform scale" +msgstr "Uniform scale" + +msgid "Cut" +msgstr "Taglia" + +msgid "Movement:" +msgstr "Movement:" + +msgid "Movement" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Keep upper part" +msgstr "Mantieni parte superiore" + +msgid "Keep lower part" +msgstr "Mantieni parte inferiore" + +msgid "Cut to parts" +msgstr "Cut to parts" + +msgid "Auto Segment" +msgstr "Auto Segment" + +msgid "Perform cut" +msgstr "Effettua taglio" + +msgid "Reset" +msgstr "Reimposta" + +msgid "Mesh name" +msgstr "Nome mesh" + +msgid "Detail level" +msgstr "Livello di dettaglio" + +msgid "Decimate ratio" +msgstr "Rapporto di decimazione" + +#, boost-format +msgid "" +"Processing model '%1%' with more than 1M triangles could be slow. It is " +"highly recommended to simplify the model." +msgstr "" +"Processing model '%1%' with more than 1M triangles could be slow. It is " +"highly recommended to simplify the model." + +msgid "Simplify model" +msgstr "Semplifica modello" + +msgid "Simplify" +msgstr "Semplifica" + +msgid "Simplification is currently only allowed when a single part is selected" +msgstr "" +"La semplificazione è attualmente consentita solo quando è selezionata una " +"singola parte" + +msgid "Error" +msgstr "Errore" + +msgid "Extra high" +msgstr "Molto alto" + +msgid "High" +msgstr "Alto" + +msgid "Medium" +msgstr "Medio" + +msgid "Low" +msgstr "Basso" + +msgid "Extra low" +msgstr "Molto basso" + +#, c-format, boost-format +msgid "%d triangles" +msgstr "%d triangoli" + +msgid "Show wireframe" +msgstr "Mostra wireframe" + +#, boost-format +msgid "%1%" +msgstr "%1%" + +msgid "Can't apply when proccess preview." +msgstr "Non si può applicare durante la creazione dell'anteprima." + +msgid "Cancel" +msgstr "Annulla" + +msgid "Operation already cancelling. Please wait few seconds." +msgstr "Operazione già annullata. Si prega di attendere qualche secondo." + +msgid "Face recognition" +msgstr "Face recognition" + +msgid "Perform Recognition" +msgstr "Perform Recognition" + +msgid "Brush size" +msgstr "" + +msgid "Brush shape" +msgstr "" + +msgid "Enforce seam" +msgstr "" + +msgid "Block seam" +msgstr "" + +msgid "Seam painting" +msgstr "" + +msgid "Remove selection" +msgstr "" + +msgid "Text shape" +msgstr "" + +msgid "Font" +msgstr "" + +msgid "Thickness" +msgstr "" + +msgid "Input text" +msgstr "" + +msgid "Add" +msgstr "Aggiungi" + +msgid "Notice" +msgstr "Avvertenza" + +msgid "Warning" +msgstr "Attenzione" + +msgid "Undefined" +msgstr "Indefinito" + +#, boost-format +msgid "%1% was replaced with %2%" +msgstr "%1% was replaced with %2%" + +msgid "The configuration may be generated by a newer version of BambuStudio." +msgstr "" +"The configuration may have been generated by a newer version of Bambu Studio." + +msgid "Some values have been replaced. Please check them:" +msgstr "Some values have been replaced. Please check them:" + +msgid "Process" +msgstr "Process" + +msgid "Filament" +msgstr "Filamento" + +msgid "Machine" +msgstr "Machine" + +msgid "Configuration package was loaded, but some values were not recognized." +msgstr "" +"The configuration package was loaded, but some values were not recognized." + +#, boost-format +msgid "" +"Configuration file \"%1%\" was loaded, but some values were not recognized." +msgstr "" +"The configuration file “%1%” was loaded, but some values were not recognized." + +msgid "V" +msgstr "V" + +msgid "Internal Version" +msgstr "" + +msgid "Version" +msgstr "Versione" + +msgid "" +"BambuStudio will terminate because of running out of memory.It may be a bug. " +"It will be appreciated if you report the issue to our team." +msgstr "" +"Bambu Studio has run out of memory and will close. This may be a bug. Please " +"report this error to Technical Support." + +msgid "Fatal error" +msgstr "Errore irreversibile" + +msgid "" +"BambuStudio will terminate because of a localization error. It will be " +"appreciated if you report the specific scenario this issue happened." +msgstr "A localization error has occurred, and Bambu Studio will close. " + +msgid "Critical error" +msgstr "Errore critico" + +#, boost-format +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "BambuStudio got an unhandled exception: %1%" + +msgid "Downloading Bambu Network Plug-in" +msgstr "" + +msgid "Incorrect password" +msgstr "" + +#, c-format, boost-format +msgid "Connect %s failed! [SN:%s, code=%s]" +msgstr "" + +msgid "" +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." +msgstr "" +"Bambu Studio configuration file is not able to be parsed and may be " +"corrupted. Please delete the file and try again." + +#, c-format, boost-format +msgid "" +"%s\n" +"Do you want to continue?" +msgstr "" +"%s\n" +"Vuoi continuare?" + +msgid "Remember my choice" +msgstr "Ricorda la mia scelta" + +msgid "Loading configuration" +msgstr "Caricamento configurazione" + +#, c-format, boost-format +msgid "Click to download new version in default browser: %s" +msgstr "Click to download new version in default browser: %s" + +msgid "The Bambu Studio needs an upgrade" +msgstr "Bambu Studio needs an update" + +msgid "This is the newest version." +msgstr "This is the newest version." + +msgid "Info" +msgstr "Info" + +msgid "Loading user presets..." +msgstr "Loading user presets..." + +msgid "Rebuild" +msgstr "Rebuild" + +msgid "Loading current presets" +msgstr "Loading current presets" + +msgid "Loading a mode view" +msgstr "Loading a mode view" + +msgid "Choose one file (3mf):" +msgstr "Choose one file (3mf):" + +msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" +msgstr "" + +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "Choose one file (.gcode/.gco/.g/.ngc/ngc):" + +msgid "Some presets are modified." +msgstr "Some presets are modified." + +msgid "" +"You can keep the modifield presets to the new project, discard or save " +"changes as new presets." +msgstr "" +"You can keep the modified presets for the new project, discard, or save " +"changes as new presets." + +msgid "User logged out" +msgstr "" + +msgid "new or open project file is not allowed during the slicing process!" +msgstr "" + +msgid "Open Project" +msgstr "Open Project" + +msgid "" +"The version of Bambu studio is too low and needs to be updated to the latest " +"version before it can be used normally" +msgstr "" +"The version of Bambu Studio is too low and needs to be updated to the latest " +"version before it can be used normally" + +msgid "Login information expired. Please login again." +msgstr "Login information expired. Please login again." + +msgid "Loading" +msgstr "Caricamento" + +msgid "Loading user preset" +msgstr "Loading user preset" + +msgid "Switching application language" +msgstr "Switching application language" + +msgid "Select the language" +msgstr "Seleziona la lingua" + +msgid "Language" +msgstr "Lingua" + +msgid "*" +msgstr "*" + +msgid "The uploads are still ongoing" +msgstr "" + +msgid "Stop them and continue anyway?" +msgstr "" + +msgid "Ongoing uploads" +msgstr "" + +msgid "Select a G-code file:" +msgstr "Select a G-code file:" + +msgid "Bambu Studio GUI initialization failed" +msgstr "Bambu Studio GUI initialization failed" + +#, boost-format +msgid "Fatal error, exception catched: %1%" +msgstr "Fatal error, eccezione registrata: %1%" + +msgid "Quality" +msgstr "Qualità" + +msgid "Shell" +msgstr "Shell" + +msgid "Infill" +msgstr "Riempimento" + +msgid "Support" +msgstr "Support" + +msgid "Flush options" +msgstr "Flush options" + +msgid "Speed" +msgstr "Velocità" + +msgid "Strength" +msgstr "Strength" + +msgid "Top Solid Layers" +msgstr "Top solid layers" + +msgid "Top Minimum Shell Thickness" +msgstr "Top minimum shell thickness" + +msgid "Bottom Solid Layers" +msgstr "Bottom solid layers" + +msgid "Bottom Minimum Shell Thickness" +msgstr "Bottom minimum shell thickness" + +msgid "Ironing" +msgstr "Stiratura" + +msgid "Fuzzy Skin" +msgstr "Superficie Crespa" + +msgid "Extruders" +msgstr "Estrusori" + +msgid "Extrusion Width" +msgstr "Larghezza Estrusione" + +msgid "Wipe options" +msgstr "Opzioni pulitura" + +msgid "Bed adhension" +msgstr "Bed adhesion" + +msgid "Advanced" +msgstr "Avanzate" + +msgid "Add part" +msgstr "Aggiungi parte" + +msgid "Add negative part" +msgstr "Add Negative Part" + +msgid "Add modifier" +msgstr "Aggiungi modificatore" + +msgid "Add support blocker" +msgstr "Aggiungi blocco supporto" + +msgid "Add support enforcer" +msgstr "Aggiungi rinforzo supporto" + +msgid "Select settings" +msgstr "Select settings" + +msgid "Delete" +msgstr "Elimina" + +msgid "Delete the selected object" +msgstr "Delete the selected object" + +msgid "Load..." +msgstr "Caricamento..." + +msgid "Cube" +msgstr "Cube" + +msgid "Cylinder" +msgstr "Cilindro" + +msgid "Cone" +msgstr "Cone" + +msgid "Add settings" +msgstr "Aggiungi impostazioni" + +msgid "Change type" +msgstr "Cambia tipo" + +msgid "Set as an individual object" +msgstr "Set as An Individual Object" + +msgid "Set as individual objects" +msgstr "Set as Individual Objects" + +msgid "Printable" +msgstr "Stampabile" + +msgid "Rename" +msgstr "Rinomina" + +msgid "Fix model" +msgstr "Fix Model" + +msgid "Export as STL" +msgstr "Esporta come STL" + +msgid "Reload from disk" +msgstr "" + +msgid "Reload the selected parts from disk" +msgstr "" + +msgid "Replace with STL" +msgstr "" + +msgid "Replace the selected part with new STL" +msgstr "" + +msgid "Change filament" +msgstr "Change filament" + +msgid "Set filament for selected items" +msgstr "Set filament for selected items" + +msgid "Default" +msgstr "Predefinito" + +#, c-format, boost-format +msgid "Filament %d" +msgstr "Filament %d" + +msgid "active" +msgstr "attivo" + +msgid "Scale to build volume" +msgstr "Scale to build volume" + +msgid "Scale an object to fit the build volume" +msgstr "Scale an object to fit the build volume" + +msgid "Flush Options" +msgstr "" + +msgid "Flush into objects' infill" +msgstr "Flush into objects' infill" + +msgid "Flush into this object" +msgstr "Flush into this object" + +msgid "Flush into objects' support" +msgstr "Flush into objects' support" + +msgid "Convert from inch" +msgstr "Convert from Inches" + +msgid "Restore to inch" +msgstr "Restore to Inch" + +msgid "Convert from meter" +msgstr "Convert from Meters" + +msgid "Restore to meter" +msgstr "Restore to Meter" + +msgid "Assemble" +msgstr "Assemble" + +msgid "Assemble the selected objects to an object with multiple parts" +msgstr "Assemble the selected objects into an object with multiple parts" + +msgid "Assemble the selected objects to an object with single part" +msgstr "Assemble the selected objects into an object with single part" + +msgid "Assemble the selected parts to a single part" +msgstr "Assemble the selected parts into a single part" + +msgid "Along X axis" +msgstr "Lungo asse X" + +msgid "Mirror along the X axis" +msgstr "Mirror along the X Axis" + +msgid "Along Y axis" +msgstr "Lungo asse Y" + +msgid "Mirror along the Y axis" +msgstr "Mirror along the Y Axis" + +msgid "Along Z axis" +msgstr "Lungo l'asse Z" + +msgid "Mirror along the Z axis" +msgstr "Mirror along the Z Axis" + +msgid "Mirror" +msgstr "Specchia" + +msgid "Mirror object" +msgstr "Mirror object" + +msgid "Add Primitive" +msgstr "Add Primitive" + +msgid "Show Labels" +msgstr "" + +msgid "To objects" +msgstr "In oggetti" + +msgid "Split the selected object into multiple objects" +msgstr "Split the selected object into multiple objects" + +msgid "To parts" +msgstr "In parti" + +msgid "Split the selected object into multiple parts" +msgstr "Split the selected object into multiple parts" + +msgid "Split" +msgstr "Dividi" + +msgid "Split the selected object" +msgstr "Dividi l'oggetto selezionato" + +msgid "Auto orientation" +msgstr "Auto orientation" + +msgid "Auto orient the object to improve print quality." +msgstr "Auto orient the object to improve print quality." + +msgid "Split the selected object into mutiple objects" +msgstr "Split the selected object into mutiple objects" + +msgid "Split the selected object into mutiple parts" +msgstr "Split the selected object into mutiple parts" + +msgid "Select All" +msgstr "Select All" + +msgid "select all objects on current plate" +msgstr "Select all objects on the current plate" + +msgid "Delete All" +msgstr "Delete All" + +msgid "delete all objects on current plate" +msgstr "Delete all objects on the current plate" + +msgid "Arrange" +msgstr "Disponi" + +msgid "arrange current plate" +msgstr "Arrange current plate" + +msgid "Auto Rotate" +msgstr "Auto Rotate" + +msgid "auto rotate current plate" +msgstr "Auto rotate current plate" + +msgid "Remove the selected plate" +msgstr "Remove the selected plate" + +msgid "Clone" +msgstr "Clone" + +msgid "Simplify Model" +msgstr "" + +msgid "Center" +msgstr "" + +msgid "Edit Process Settings" +msgstr "" + +msgid "Edit in Parameter Table" +msgstr "" + +msgid "Edit print parameters for a single object" +msgstr "Edit print parameters for a single object" + +msgid "Change Filament" +msgstr "Change Filament" + +msgid "Set Filament for selected items" +msgstr "Set Filament for selected items" + +msgid "current" +msgstr "current" + +msgid "Set Unprintable" +msgstr "Imposta non stampabile" + +msgid "Set Printable" +msgstr "Imposta stampabile" + +msgid "Unlock" +msgstr "Unlock" + +msgid "Lock" +msgstr "Lock" + +msgid "Name" +msgstr "Nome" + +msgid "Fila." +msgstr "Fila." + +#, c-format, boost-format +msgid "%1$d error repaired" +msgid_plural "%1$d errors repaired" +msgstr[0] "%1$d error repaired" +msgstr[1] "%1$d errors repaired" + +#, c-format, boost-format +msgid "Error: %1$d non-manifold edge." +msgid_plural "Error: %1$d non-manifold edges." +msgstr[0] "Error: %1$d non-manifold edge." +msgstr[1] "Error: %1$d non-manifold edges." + +msgid "Remaining errors" +msgstr "Errori rimanenti" + +#, c-format, boost-format +msgid "%1$d non-manifold edge" +msgid_plural "%1$d non-manifold edges" +msgstr[0] "%1$d non-manifold edge" +msgstr[1] "%1$d non-manifold edges" + +msgid "Right click the icon to fix model object" +msgstr "Right click the icon to fix model object" + +msgid "Right button click the icon to drop the object settings" +msgstr "Right click the icon to drop the object settings" + +msgid "Click the icon to reset all settings of the object" +msgstr "Click the icon to reset all settings of the object" + +msgid "Right button click the icon to drop the object printable property" +msgstr "Right click the icon to drop the object printable property" + +msgid "Click the icon to toggle printable property of the object" +msgstr "Click the icon to toggle printable properties of the object" + +msgid "Click the icon to edit support painting of the object" +msgstr "Click the icon to edit support painting of the object" + +msgid "Click the icon to edit color painting of the object" +msgstr "Click the icon to edit color painting for the object" + +msgid "Loading file" +msgstr "Caricamento file" + +msgid "Error!" +msgstr "Errore!" + +msgid "Generic" +msgstr "Generico" + +msgid "Add Modifier" +msgstr "Add Modifier" + +msgid "Switch to per-object setting mode to edit modifier settings." +msgstr "Switch to per-object setting mode to edit modifier settings." + +msgid "" +"Switch to per-object setting mode to edit process settings of selected " +"objects." +msgstr "" + +msgid "Deleting the last solid part is not allowed." +msgstr "Deleting the last solid part is not allowed." + +msgid "The target object contains only one part and can not be splited." +msgstr "The target object contains only one part and cannot be split." + +msgid "Assembly" +msgstr "Assembly" + +msgid "Object" +msgstr "Object" + +msgid "Part" +msgstr "Parte" + +msgid "Layer" +msgstr "Layer" + +msgid "Selection conflicts" +msgstr "Selection conflicts" + +msgid "" +"If first selected item is an object, the second one should also be object." +msgstr "" +"If the first selected item is an object, the second one should also be an " +"object." + +msgid "" +"If first selected item is a part, the second one should be part in the same " +"object." +msgstr "" +"If the first selected item is a part, the second one should be a part in the " +"same object." + +msgid "The type of the last solid object part is not to be changed." +msgstr "The type of the last solid object part cannot be changed." + +msgid "Negative Part" +msgstr "Negative Part" + +msgid "Modifier" +msgstr "Modificatore" + +msgid "Support Blocker" +msgstr "Blocco Supporto" + +msgid "Support Enforcer" +msgstr "Rinforzo Supporto" + +msgid "Type:" +msgstr "Tipo:" + +msgid "Choose part type" +msgstr "Choose part type" + +msgid "Enter new name" +msgstr "Inserisci un nuovo nome" + +msgid "Renaming" +msgstr "Rinomina" + +msgid "Repairing model object" +msgstr "Repairing model object" + +msgid "Following model object has been repaired" +msgid_plural "Following model objects have been repaired" +msgstr[0] "The following model object has been repaired" +msgstr[1] "The following model objects have been repaired" + +msgid "Failed to repair folowing model object" +msgid_plural "Failed to repair folowing model objects" +msgstr[0] "Failed to repair the following model object" +msgstr[1] "Failed to repair the following model objects" + +msgid "Repairing was canceled" +msgstr "La riparazione è stata annullata" + +msgid "Additional process preset" +msgstr "Additional process preset" + +msgid "Remove parameter" +msgstr "Rimuovi parametro" + +msgid "one cell can only be copied to one or multiple cells in the same column" +msgstr "One cell can only be copied to one or more cells in the same column." + +msgid "multiple cells copy is not supported" +msgstr "Copying multiple cells is not supported." + +msgid "Outside" +msgstr "Outside" + +msgid "Auto" +msgstr "Auto" + +msgid "Manual" +msgstr "Manual" + +msgid "No-brim" +msgstr "No-brim" + +msgid " " +msgstr "" + +msgid "Layer height" +msgstr "Altezza layer" + +msgid "Wall loops" +msgstr "Wall loops" + +msgid "Infill density(%)" +msgstr "Infill density(%)" + +msgid "Auto Brim" +msgstr "Auto Brim" + +msgid "Outer wall speed" +msgstr "" + +msgid "Plate" +msgstr "Plate" + +msgid "Brim" +msgstr "Brim" + +msgid "Object/Part Setting" +msgstr "Object/part setting" + +msgid "Reset parameter" +msgstr "Reset parameter" + +msgid "Multicolor Print" +msgstr "Multicolor Print" + +msgid "Line Type" +msgstr "Line Type" + +msgid "More" +msgstr "Altro" + +msgid "Open Preferences." +msgstr "" + +msgid "Open next tip." +msgstr "" + +msgid "Open Documentation in web browser." +msgstr "" + +msgid "Custom G-code" +msgstr "G-code personalizzato" + +msgid "Enter Custom G-code used on current layer:" +msgstr "" + +msgid "OK" +msgstr "OK" + +msgid "Jump to layer" +msgstr "" + +msgid "Please enter the layer number" +msgstr "" + +msgid "Jump to Layer" +msgstr "" + +msgid "Add Pause" +msgstr "" + +msgid "Add Custom G-code" +msgstr "" + +msgid "Add Custom Template" +msgstr "" + +msgid "Filament " +msgstr "" + +msgid "Start" +msgstr "" + +msgid "G-code" +msgstr "" + +msgid "No printer" +msgstr "No printer" + +msgid "Heat the nozzle" +msgstr "" + +msgid "Cut filament" +msgstr "Cut filament" + +msgid "Pull back current filament" +msgstr "Pull back the current filament" + +msgid "Push new filament into extruder" +msgstr "" + +msgid "Purge old filament" +msgstr "Purge old filament" + +msgid "?" +msgstr "?" + +msgid "Empty" +msgstr "Empty" + +msgid "Click the pencil icon to edit the filament." +msgstr "Click the pencil icon to edit the filament." + +msgid "Load Filament" +msgstr "Load" + +msgid "Unload Filament" +msgstr "Unload" + +msgid "Tips" +msgstr "Tips" + +msgid "Guide" +msgstr "" + +msgid "Retry" +msgstr "" + +msgid "Calibrating AMS..." +msgstr "Calibrating AMS..." + +msgid "A problem occured during calibration. Click to view the solution." +msgstr "A problem occured during calibration. Click to view the solution." + +msgid "Calibrate again" +msgstr "Calibrate again" + +msgid "Cancel calibration" +msgstr "Cancel calibration" + +msgid "" +"Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " +"load or unload filiament." +msgstr "" +"Choose an AMS slot then press \"Load\" or \"Unload\" to automatically load " +"or unload filament." + +msgid "Edit" +msgstr "Modifica" + +msgid "" +"All the selected objects are on the locked plate,\n" +"We can not do auto-arrange on these objects." +msgstr "" +"All the selected objects are on a locked plate.\n" +"Cannot auto-arrange these objects." + +msgid "No arrangable objects are selected." +msgstr "No arrangable objects are selected." + +msgid "" +"This plate is locked,\n" +"We can not do auto-arrange on this plate." +msgstr "" +"This plate is locked.\n" +"We cannot auto-arrange this plate." + +msgid "Arranging..." +msgstr "Arranging..." + +msgid "" +"Arrange failed. Found some exceptions when processing object geometries." +msgstr "" +"Arrange failed. Found some exceptions when processing object geometries." + +msgid "Arranging" +msgstr "" + +msgid "Arranging canceled." +msgstr "Disposizione annullata." + +msgid "" +"Arranging is done but there are unpacked items. Reduce spacing and try again." +msgstr "" +"Arranging complete, but some items were not able to be arranged. Reduce " +"spacing and try again." + +msgid "Arranging done." +msgstr "Disposizione completata." + +#, c-format, boost-format +msgid "" +"Arrangement ignored the following objects which can't fit into a single " +"bed:\n" +"%s" +msgstr "" +"La disposizione ha ignorato i seguenti oggetti che non possono entrare in un " +"singolo piano:\n" +"%s" + +msgid "" +"All the selected objects are on the locked plate,\n" +"We can not do auto-orient on these objects." +msgstr "" +"All the selected objects are on a locked plate,\n" +"We cannot auto-orient these objects." + +msgid "" +"This plate is locked,\n" +"We can not do auto-orient on this plate." +msgstr "" +"This plate is locked.\n" +"We cannot auto-orient this plate." + +msgid "Orienting..." +msgstr "Orienting..." + +msgid "Orienting" +msgstr "" + +msgid "Error! Unable to create thread!" +msgstr "Error. Unable to create thread." + +msgid "Exception" +msgstr "Exception" + +msgid "Logging in" +msgstr "Logging in" + +msgid "Login failed" +msgstr "Login failed" + +msgid "The region parameter is incorrrect" +msgstr "The region parameter is incorrrect." + +msgid "Failure of printer login" +msgstr "Printer login failure" + +msgid "Failed to get ticket" +msgstr "Failed to get ticket" + +msgid "User authorization timeout" +msgstr "User authorization timeout" + +msgid "Failure of bind" +msgstr "Binding failure" + +msgid "Unknown Failure" +msgstr "Unknown Failure" + +msgid "Please check the printer network connection." +msgstr "" + +msgid "Abnormal print file data. Please slice again" +msgstr "Abnormal print file data. Please slice again" + +msgid "Task canceled" +msgstr "Task canceled" + +msgid "Upload task timed out. Please check the network problem and try again" +msgstr "Upload task timed out. Please check the network and try again" + +msgid "Cloud service connection failed. Please try again." +msgstr "Cloud service connection failed. Please try again." + +msgid "Print file not found, please slice again" +msgstr "Print file not found, please slice again" + +msgid "" +"The print file exceeds the maximum allowable size (1GB). Please simplify the " +"model and slice again" +msgstr "" +"The print file exceeds the maximum allowable size (1GB). Please simplify the " +"model and slice again" + +msgid "Failed uploading print file" +msgstr "Failed uploading print file" + +msgid "Wrong Access code" +msgstr "Wrong Access code" + +msgid "Sending print job over LAN" +msgstr "Sending print job over LAN" + +msgid "Sending print job through cloud service" +msgstr "Sending print job through cloud service" + +msgid "Service Unavailable" +msgstr "" + +msgid "Unkown Error." +msgstr "" + +msgid "Sending print configuration" +msgstr "Sending print configuration" + +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the device page in %ss" +msgstr "" + +msgid "An SD card needs to be inserted before printing via LAN." +msgstr "" + +msgid "Failed to send the print job. Please try again." +msgstr "" + +msgid "Send to Printer failed. Please try again." +msgstr "" + +msgid "Sending gcode file over LAN" +msgstr "" + +msgid "Sending gcode file through cloud service" +msgstr "" + +msgid "Sending gcode file to sdcard" +msgstr "" + +#, c-format, boost-format +msgid "Successfully sent. Close current page in %s s" +msgstr "" + +msgid "An SD card needs to be inserted before sending to printer." +msgstr "" + +msgid "Please log out and login to the printer again." +msgstr "" + +msgid "Downloading" +msgstr "Downloading" + +msgid "Download failed" +msgstr "" + +msgid "Cancelled" +msgstr "" + +msgid "Install successfully." +msgstr "" + +msgid "Installing" +msgstr "" + +msgid "Install failed" +msgstr "" + +msgid "Portions copyright" +msgstr "Porzioni di copyright" + +msgid "Copyright" +msgstr "Copyright" + +msgid "License" +msgstr "License" + +msgid "Bambu Studio is licensed under " +msgstr "Bambu Studio is licensed under " + +msgid "GNU Affero General Public License, version 3" +msgstr "GNU Affero General Public License, versione 3" + +msgid "" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" +msgstr "" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is based on " +"Slic3r by Alessandro Ranellucci and the RepRap community" + +msgid "Libraries" +msgstr "Libraries" + +msgid "" +"This software uses open source components whose copyright and other " +"proprietary rights belong to their respective owners" +msgstr "" +"This software uses open source components whose copyright and other " +"proprietary rights belong to their respective owners" + +#, c-format, boost-format +msgid "About %s" +msgstr "Informazioni su %s" + +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." +msgstr "" + +msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." +msgstr "" + +msgid "" +"Slic3r was created by Alessandro Ranellucci with the help of many other " +"contributors." +msgstr "" + +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "" + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." +msgstr "" + +msgid "AMS Materials Setting" +msgstr "" + +msgid "Colour" +msgstr "Color" + +msgid "" +"Nozzle\n" +"Temperature" +msgstr "" +"Nozzle\n" +"Temperature" + +msgid "max" +msgstr "max" + +msgid "min" +msgstr "min" + +#, boost-format +msgid "The input value should be greater than %1% and less than %2%" +msgstr "The input value should be greater than %1% and less than %2%" + +msgid "SN" +msgstr "SN" + +msgid "Setting AMS slot information while printing is not supported" +msgstr "" + +msgid "Confirm" +msgstr "Confirm" + +msgid "Close" +msgstr "Chiudi" + +msgid "AMS Slots" +msgstr "" + +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "" + +msgid "Enable AMS" +msgstr "" + +msgid "Print with filaments in the AMS" +msgstr "" + +msgid "Disable AMS" +msgstr "" + +msgid "Print with the filament mounted on the back of chassis" +msgstr "" + +msgid "" +"Config which AMS slot should be used for a filament used in the print job" +msgstr "" + +msgid "Filament used in this print job" +msgstr "" + +msgid "AMS slot used for this filament" +msgstr "" + +msgid "Click to select AMS slot manually" +msgstr "" + +msgid "AMS Settings" +msgstr "AMS Settings" + +msgid "Insertion update" +msgstr "Insertion update" + +msgid "" +"The AMS will automatically read the filament information when inserting a " +"new Bambu Lab filament. This takes about 20 seconds." +msgstr "" +"The AMS will automatically read the filament information when inserting a " +"new Bambu Lab filament spool. This takes about 20 seconds." + +msgid "" +"Note: if new filament is inserted during printing, the AMS will not " +"automatically read any information until printing is completed." +msgstr "" +"Note: if new filament is inserted during printing, the AMS will not " +"automatically read any information until printing has finished." + +msgid "" +"When inserting a new filament, the AMS will not automatically read its " +"information, leaving it blank for you to enter manually." +msgstr "" +"When inserting a new filament, the AMS will not automatically read its " +"information, leaving it blank for you to enter manually." + +msgid "Power on update" +msgstr "Update on startup" + +msgid "" +"The AMS will automatically read the information of inserted filament on " +"start-up. It will take about 1 minute.The reading process will roll filament " +"spools." +msgstr "" +"The AMS will automatically read the information of inserted filament on " +"start-up. It will take about 1 minute.The reading process will rotate the " +"filament spools." + +msgid "" +"The AMS will not automatically read information from inserted filament " +"during startup and will continue to use the information recorded before the " +"last shutdown." +msgstr "" +"The AMS will not automatically read information from inserted filament " +"during startup and will continue to use the information recorded before the " +"last shutdown." + +msgid "Update remaining capacity" +msgstr "" + +msgid "" +"The AMS will estimate Bambu filament's remaining capacity after the filament " +"info is updated. During printing, remaining capacity will be updated " +"automatically." +msgstr "" + +msgid "AMS auto switch filament" +msgstr "" + +msgid "" +"AMS will continue to another spool with the same properties of filament " +"automatically when current filament runs out" +msgstr "" + +msgid "File" +msgstr "File" + +msgid "" +"Failed to download the plug-in. Please check your firewall settings and vpn " +"software, check and retry." +msgstr "" + +msgid "" +"Failed to install the plug-in. Please check whether it is blocked or deleted " +"by anti-virus software." +msgstr "" + +msgid "click here to see more info" +msgstr "" + +msgid "Please home all axes (click " +msgstr "" + +msgid "" +") to locate the toolhead's position. This prevents device moving beyond the " +"printable boundary and causing equipment wear." +msgstr "" + +msgid "Go Home" +msgstr "" + +msgid "" +"A error occurred. Maybe memory of system is not enough or it's a bug of the " +"program" +msgstr "" +"An error occurred. The system may have run out of memory, or a bug may have " +"occurred." + +msgid "Please save project and restart the program. " +msgstr "Please save your project and restart the application." + +msgid "Processing G-Code from Previous file..." +msgstr "Processing G-Code from previous file…" + +msgid "Slicing complete" +msgstr "Slicing completato" + +msgid "Access violation" +msgstr "Violazione di accesso" + +msgid "Illegal instruction" +msgstr "Istruzione illegale" + +msgid "Divide by zero" +msgstr "Dividi per zero" + +msgid "Overflow" +msgstr "Overflow" + +msgid "Underflow" +msgstr "Underflow" + +msgid "Floating reserved operand" +msgstr "Floating reserved operand" + +msgid "Stack overflow" +msgstr "Stack overflow" + +msgid "Unknown error when export G-code." +msgstr "Unknown error with G-code export" + +#, boost-format +msgid "" +"Failed to save gcode file.\n" +"Error message: %1%.\n" +"Source file %2%." +msgstr "" +"Failed to save G-code file.\n" +"Error message: %1%.\n" +"Source file %2%." + +#, boost-format +msgid "Succeed to export G-code to %1%" +msgstr "Success! G-code exported to %1%" + +msgid "Running post-processing scripts" +msgstr "" + +msgid "Copying of the temporary G-code to the output G-code failed" +msgstr "" + +#, boost-format +msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" +msgstr "" + +msgid "Origin" +msgstr "Origine" + +msgid "Diameter" +msgstr "Diametro" + +msgid "Size in X and Y of the rectangular plate." +msgstr "Dimensioni X e Y del piano rettangolare." + +msgid "" +"Distance of the 0,0 G-code coordinate from the front left corner of the " +"rectangle." +msgstr "" +"Distanza della coordinata 0,0 del G-code dall'angolo frontale sinistro del " +"rettangolo." + +msgid "" +"Diameter of the print bed. It is assumed that origin (0,0) is located in the " +"center." +msgstr "" +"Diametro del piano di stampa. Si presume che l'origine (0,0) si trovi al " +"centro." + +msgid "Rectangular" +msgstr "Rettangolare" + +msgid "Circular" +msgstr "Circolare" + +msgid "Custom" +msgstr "Personalizzato" + +msgid "Shape" +msgstr "Forma" + +msgid "Load shape from STL..." +msgstr "Carica forma da STL..." + +msgid "Settings" +msgstr "Impostazioni" + +msgid "Texture" +msgstr "Texture" + +msgid "Remove" +msgstr "Rimuovi" + +msgid "Not found:" +msgstr "Non trovato:" + +msgid "Model" +msgstr "Modello" + +msgid "Choose an STL file to import bed shape from:" +msgstr "Scegli un file STL da cui importare la forma del piano:" + +msgid "Invalid file format." +msgstr "Formato file non valido." + +msgid "Error! Invalid model" +msgstr "Errore! Modello non valido" + +msgid "The selected file contains no geometry." +msgstr "Il file selezionato non contiene geometrie." + +msgid "" +"The selected file contains several disjoint areas. This is not supported." +msgstr "" +"Il file selezionato contiene molteplici aree disgiunte. Non è supportato." + +msgid "Choose a file to import bed texture from (PNG/SVG):" +msgstr "" +"Seleziona un file da cui importare la forma del piano di stampa (PNG/SVG):" + +msgid "Choose an STL file to import bed model from:" +msgstr "Scegli un file STL da cui importare il modello del piano:" + +msgid "Bed Shape" +msgstr "Forma Piano" + +msgid "" +"Nozzle may be blocked when the temperature is out of recommended range.\n" +"Please make sure whether to use the temperature to print.\n" +"\n" +msgstr "" +"The nozzle may become clogged when the temperature is out of the recommended " +"range.\n" +"Please make sure whether to use this temperature to print.\n" +"\n" + +#, c-format, boost-format +msgid "" +"Recommended nozzle temperature of this filament type is [%d, %d] degree " +"centigrade" +msgstr "" +"The recommended nozzle temperature for this filament type is [%d, %d] " +"degrees centigrade" + +#, c-format, boost-format +msgid "" +"Bed temperature of other layer is lower than bed temperature of initial " +"layer for more than %d degree centigrade.\n" +"This may cause model broken free from build plate during printing" +msgstr "" +"The bed temperature of other layers is lower than the bed temperature of the " +"first layer by more than %d degrees centigrade.\n" +"This may cause models to break free from the build plate during printing." + +msgid "" +"Bed temperature is higher than vitrification temperature of this filament.\n" +"This may cause nozzle blocked and printing failure\n" +"Please keep the printer open during the printing process to ensure air " +"circulation or reduce the temperature of the hot bed" +msgstr "" + +msgid "" +"Too small max volumetric speed.\n" +"Reset to 0.5" +msgstr "" + +msgid "" +"Too small layer height.\n" +"Reset to 0.2" +msgstr "" +"Layer height too small\n" +"It has been reset to 0.2" + +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "" +"Layer height too large\n" +"It has been reset to 0.2" + +msgid "" +"Too small ironing spacing.\n" +"Reset to 0.1" +msgstr "" +"Ironing spacing too small\n" +"It has been reset to 0.1" + +msgid "" +"Zero initial layer height is invalid.\n" +"\n" +"The first layer height will be reset to 0.2." +msgstr "" +"Zero first layer height is invalid.\n" +"\n" +"The first layer height will be reset to 0.2." + +msgid "" +"This setting is only used for model size tunning with small value in some " +"cases.\n" +"For example, when model size has small error and hard to be assembled.\n" +"For large size tuning, please use model scale function.\n" +"\n" +"The value will be reset to 0." +msgstr "" +"This setting is only used for tuning model size by small amounts.\n" +"For example, when the model size has small errors or when tolerances are " +"incorrect. For large adjustments, please use the model scale function.\n" +"\n" +"The value will be reset to 0." + +msgid "" +"Too large elefant foot compensation is unreasonable.\n" +"If really have serious elephant foot effect, please check other settings.\n" +"For example, whether bed temperature is too high.\n" +"\n" +"The value will be reset to 0." +msgstr "" +"The elephant foot compensation value is too large.\n" +"If there are significant elephant foot issues, please check other settings.\n" +"The bed temperature may be too high, for example.\n" +"\n" +"The value will be reset to 0." + +msgid "" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional" +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings and enable spiral mode automatically\n" +"No - Give up using spiral mode this time" +msgstr "" +"Change these settings automatically? \n" +"Yes - Change these settings and enable spiral/vase mode automatically\n" +"No - Cancel enabling spiral mode" + +msgid "" +"Arachne engine only works when overhang slowing down is disabled.\n" +"This may cause decline in the quality of overhang surface when print fastly\n" +msgstr "" + +msgid "" +"Disable overhang slowing down automatically? \n" +"Yes - Enable arachne and disable overhang slowing down\n" +"No - Give up using arachne this time" +msgstr "" + +msgid "" +"Prime tower does not work when Adaptive Layer Height or Independent Support " +"Layer Height is on.\n" +"Which do you want to keep?\n" +"YES - Keep Prime Tower\n" +"NO - Keep Adaptive Layer Height and Independent Support Layer Height" +msgstr "" +"Prime tower does not work when Adaptive Layer Height or Independent Support " +"Layer Height is on.\n" +"Which do you want to keep?\n" +"YES - Keep Prime Tower\n" +"NO - Keep Adaptive Layer Height and Independent Support Layer Height" + +msgid "" +"Prime tower does not work when Adaptive Layer Height is on.\n" +"Which do you want to keep?\n" +"YES - Keep Prime Tower\n" +"NO - Keep Adaptive Layer Height" +msgstr "" +"Prime tower does not work when Adaptive Layer Height is on.\n" +"Which do you want to keep?\n" +"YES - Keep Prime Tower\n" +"NO - Keep Adaptive Layer Height" + +msgid "" +"Prime tower does not work when Independent Support Layer Height is on.\n" +"Which do you want to keep?\n" +"YES - Keep Prime Tower\n" +"NO - Keep Independent Support Layer Height" +msgstr "" +"Prime tower does not work when Independent Support Layer Height is on.\n" +"Which do you want to keep?\n" +"YES - Keep Prime Tower\n" +"NO - Keep Independent Support Layer Height" + +#, boost-format +msgid "%1% infill pattern doesn't support 100%% density." +msgstr "%1% infill pattern doesn't support 100%% density." + +msgid "" +"Switch to rectilinear pattern?\n" +"Yes - switch to rectilinear pattern automaticlly\n" +"No - reset density to default non 100% value automaticlly\n" +msgstr "" + +msgid "Auto bed leveling" +msgstr "Auto bed leveling" + +msgid "Heatbed preheating" +msgstr "Heatbed preheating" + +msgid "Sweeping XY mech mode" +msgstr "Sweeping XY mech mode" + +msgid "Changing filament" +msgstr "Changing filament" + +msgid "M400 pause" +msgstr "M400 pause" + +msgid "Paused due to filament runout" +msgstr "Paused due to filament runout" + +msgid "Heating hotend" +msgstr "Heating hotend" + +msgid "Calibrating extrusion" +msgstr "Calibrating extrusion" + +msgid "Scanning bed surface" +msgstr "Scanning bed surface" + +msgid "Inspecting first layer" +msgstr "Inspecting first layer" + +msgid "Identifying build plate type" +msgstr "Identifying build plate type" + +msgid "Calibrating Micro Lidar" +msgstr "Calibrating Micro Lidar" + +msgid "Homing toolhead" +msgstr "Homing toolhead" + +msgid "Cleaning nozzle tip" +msgstr "Cleaning nozzle tip" + +msgid "Checking extruder temperature" +msgstr "Checking extruder temperature" + +msgid "Printing was paused by the user" +msgstr "Printing was paused by the user" + +msgid "Pause of front cover falling" +msgstr "Pause of front cover falling" + +msgid "Calibrating the micro lida" +msgstr "Calibrating the micro lidar" + +msgid "Calibrating extrusion flow" +msgstr "Calibrating extrusion flow" + +msgid "Paused due to nozzle temperature malfunction" +msgstr "Paused due to nozzle temperature malfunction" + +msgid "Paused due to heat bed temperature malfunction" +msgstr "Paused due to heat bed temperature malfunction" + +msgid "MC" +msgstr "MC" + +msgid "MainBoard" +msgstr "MainBoard" + +msgid "AMS" +msgstr "AMS" + +msgid "TH" +msgstr "TH" + +msgid "XCam" +msgstr "XCam" + +msgid "Unknown" +msgstr "Sconosciuto" + +msgid "Fatal" +msgstr "Fatal" + +msgid "Serious" +msgstr "Serious" + +msgid "Common" +msgstr "Common" + +msgid "Update successful." +msgstr "Update successful." + +msgid "Downloading failed." +msgstr "Downloading failed." + +msgid "Verification failed." +msgstr "Verification failed." + +msgid "Update failed." +msgstr "Update failed." + +msgid "Failed to start printing job" +msgstr "" + +msgid "default" +msgstr "predefinito" + +msgid "parameter name" +msgstr "" + +msgid "N/A" +msgstr "N/A" + +msgid "Invalid numeric." +msgstr "Invalid numeric." + +#, c-format, boost-format +msgid "%s can't be percentage" +msgstr "%s can’t be a percentage" + +#, c-format, boost-format +msgid "Value %s is out of range, continue?" +msgstr "Value %s is out of range, continue?" + +msgid "Parameter validation" +msgstr "Validazione parametri" + +msgid "Value is out of range." +msgstr "Value is out of range." + +#, c-format, boost-format +msgid "" +"Is it %s%% or %s %s?\n" +"YES for %s%%, \n" +"NO for %s %s." +msgstr "" +"Is it %s%% or %s %s?\n" +"YES for %s%%, \n" +"NO for %s %s." + +#, boost-format +msgid "Invalid format. Expected vector format: \"%1%\"" +msgstr "Invalid format. Expected vector format: \"%1%\"" + +msgid "Layer Height" +msgstr "Layer Height" + +msgid "Line Width" +msgstr "Line Width" + +msgid "Fan Speed" +msgstr "Fan Speed" + +msgid "Temperature" +msgstr "Temperatura" + +msgid "Flow" +msgstr "Flusso" + +msgid "Tool" +msgstr "Strumento" + +msgid "Height: " +msgstr "" + +msgid "Width: " +msgstr "" + +msgid "Speed: " +msgstr "" + +msgid "Flow: " +msgstr "" + +msgid "Fan Speed: " +msgstr "" + +msgid "Temperature: " +msgstr "" + +msgid "Loading G-codes" +msgstr "Loading G-code" + +msgid "Generating geometry vertex data" +msgstr "Generating geometry vertex data" + +msgid "Generating geometry index data" +msgstr "Generating geometry index data" + +msgid "Display" +msgstr "Display" + +msgid "up to" +msgstr "fino a" + +msgid "above" +msgstr "sopra" + +msgid "from" +msgstr "da" + +msgid "to" +msgstr "a" + +msgid "Color Scheme" +msgstr "Color scheme" + +msgid "Time" +msgstr "Tempo" + +msgid "Percent" +msgstr "Percent" + +msgid "Layer Height (mm)" +msgstr "Layer height (mm)" + +msgid "Line Width (mm)" +msgstr "Line width (mm)" + +msgid "Speed (mm/s)" +msgstr "Velocità (mm/s)" + +msgid "Fan Speed (%)" +msgstr "Velocità ventola (%)" + +msgid "Temperature (°C)" +msgstr "Temperatura (°C)" + +msgid "Volumetric flow rate (mm³/s)" +msgstr "Flusso volumetrico (mm³/s)" + +msgid "Used filament" +msgstr "Filamento usato" + +msgid "Flushed" +msgstr "" + +msgid "Total" +msgstr "Totale" + +msgid "Travel" +msgstr "Spostamento" + +msgid "Seams" +msgstr "Giunzioni" + +msgid "Retract" +msgstr "Retract" + +msgid "Unretract" +msgstr "Unretract" + +msgid "Filament Changes" +msgstr "Filament changes" + +msgid "Wipe" +msgstr "Pulitura" + +msgid "Options" +msgstr "Opzioni" + +msgid "travel" +msgstr "Travel" + +msgid "Extruder" +msgstr "Estrusore" + +msgid "Filament change times" +msgstr "Filament change times" + +msgid "Cost" +msgstr "Costo" + +msgid "Color change" +msgstr "Cambio colore" + +msgid "Print" +msgstr "Stampa" + +msgid "Pause" +msgstr "Pausa" + +msgid "Printer" +msgstr "Stampante" + +msgid "Print settings" +msgstr "Impostazioni di stampa" + +msgid "Total Estimation" +msgstr "Total estimation" + +msgid "Time Estimation" +msgstr "" + +msgid "Normal mode" +msgstr "Modalità normale" + +msgid "Prepare time" +msgstr "Prepare time" + +msgid "Model printing time" +msgstr "Model printing time" + +msgid "Total time" +msgstr "" + +msgid "Switch to silent mode" +msgstr "Switch to silent mode" + +msgid "Switch to normal mode" +msgstr "Switch to normal mode" + +msgid "Variable layer height" +msgstr "" + +msgid "Adaptive" +msgstr "" + +msgid "Quality / Speed" +msgstr "" + +msgid "Smooth" +msgstr "" + +msgid "Radius" +msgstr "Raggio" + +msgid "Keep min" +msgstr "" + +msgid "Left mouse button:" +msgstr "" + +msgid "Add detail" +msgstr "" + +msgid "Right mouse button:" +msgstr "" + +msgid "Remove detail" +msgstr "" + +msgid "Shift + Left mouse button:" +msgstr "" + +msgid "Reset to base" +msgstr "" + +msgid "Shift + Right mouse button:" +msgstr "" + +msgid "Smoothing" +msgstr "" + +msgid "Mouse wheel:" +msgstr "" + +msgid "Increase/decrease edit area" +msgstr "" + +msgid "Sequence" +msgstr "Sequence" + +msgid "Mirror Object" +msgstr "Specchia Oggetto" + +msgid "Tool Move" +msgstr "Tool move" + +msgid "Move Object" +msgstr "Sposta oggetto" + +msgid "Auto Orientation options" +msgstr "Auto orientation options" + +msgid "Enable rotation" +msgstr "Enable rotation" + +msgid "Optimize support interface area" +msgstr "Optimize support interface area" + +msgid "Orient" +msgstr "Orient" + +msgid "Arrange options" +msgstr "Opzioni di disposizione" + +msgid "Spacing" +msgstr "Spaziatura " + +msgid "Auto rotate for arrangement" +msgstr "Auto rotate for arrangement" + +msgid "Allow multiple materials on same plate" +msgstr "Allow multiple materials on same plate" + +msgid "Avoid extrusion calibration region" +msgstr "Avoid extrusion calibration region" + +msgid "Add plate" +msgstr "Add Plate" + +msgid "Auto orient" +msgstr "Auto Orient" + +msgid "Arrange all objects" +msgstr "Arrange all objects" + +msgid "Arrange objects on selected plates" +msgstr "Arrange objects on selected plates" + +msgid "Split to objects" +msgstr "Dividi in oggetti" + +msgid "Split to parts" +msgstr "Dividi in parti" + +msgid "Assembly View" +msgstr "Assembly View" + +msgid "Select Plate" +msgstr "Select Plate" + +msgid "Assembly Return" +msgstr "Assembly Return" + +msgid "return" +msgstr "return" + +msgid "Paint Toolbar" +msgstr "Paint Toolbar" + +msgid "Explosion Ratio" +msgstr "Explosion Ratio" + +msgid "Section View" +msgstr "" + +msgid "Assemble Control" +msgstr "" + +msgid "Total Volume:" +msgstr "Total Volume:" + +msgid "Assembly Info" +msgstr "Assembly Info" + +msgid "Volume:" +msgstr "Volume:" + +msgid "Size:" +msgstr "Size:" + +msgid "An object is layed over the boundary of plate." +msgstr "An object is laid over the boundary of the plate." + +msgid "A G-code path goes beyond the boundary of plate." +msgstr "A G-code path goes beyond plate boundaries." + +msgid "Only the object being edit is visible." +msgstr "Only the object being edited is visible." + +msgid "" +"An object is laid over the boundary of plate or exceeds the height limit.\n" +"Please solve the problem by moving it totally on or off the plate, and " +"confirming that the height is within the build volume." +msgstr "" + +msgid "Calibration" +msgstr "Calibration" + +msgid "Calibration step selection" +msgstr "" + +msgid "Micro lidar calibration" +msgstr "" + +msgid "Bed leveling" +msgstr "" + +msgid "Resonance frequency identification" +msgstr "" + +msgid "Calibration program" +msgstr "Calibration program" + +msgid "" +"The calibration program detects the status of your device automatically to " +"minimize deviation.\n" +"It keeps the device performing optimally." +msgstr "" +"The calibration program detects the status of your device automatically to " +"minimize deviation.\n" +"It keeps the device performing optimally." + +msgid "Calibration Flow" +msgstr "Calibration Flow" + +msgid "Start Calibration" +msgstr "Start Calibration" + +msgid "Completed" +msgstr "" + +msgid "Calibrating" +msgstr "Calibrating" + +msgid "Auto-record Monitoring" +msgstr "" + +msgid "Go Live" +msgstr "" + +msgid "Resolution" +msgstr "Resolution" + +msgid "Show \"Live Video\" guide page." +msgstr "" + +msgid "720p" +msgstr "" + +msgid "1080p" +msgstr "" + +msgid "ConnectPrinter(LAN)" +msgstr "Connect Printer (LAN)" + +msgid "Please input the printer access code:" +msgstr "Please input the printer access code:" + +msgid "" +"You can find it in \"Settings > Network > Connection code\"\n" +"on the printer, as shown in the figure:" +msgstr "" +"You can find it in \"Settings > Network > Access code\"\n" +"on the printer, as shown in the figure:" + +msgid "Invalid input." +msgstr "" + +msgid "New Window" +msgstr "" + +msgid "Open a new window" +msgstr "" + +msgid "Application is closing" +msgstr "Closing application" + +msgid "Closing Application while some presets are modified." +msgstr "Closing Application while some presets are modified." + +msgid "Logging" +msgstr "Logging" + +msgid "Prepare" +msgstr "Prepare" + +msgid "Preview" +msgstr "Anteprima" + +msgid "Device" +msgstr "Device" + +msgid "Project" +msgstr "Project" + +msgid "Yes" +msgstr "Yes" + +msgid "No" +msgstr "No" + +msgid " will be closed before creating a new model. Do you want to continue?" +msgstr "" + +msgid "Slice" +msgstr "Processa" + +msgid "Slice all" +msgstr "Slice all" + +msgid "Slice plate" +msgstr "Slice plate" + +msgid "Export G-code file" +msgstr "" + +msgid "Send" +msgstr "Send" + +msgid "Print plate" +msgstr "" + +msgid "Export plate sliced file" +msgstr "" + +msgid "Export all sliced file" +msgstr "" + +msgid "Print all" +msgstr "Print all" + +msgid "Send all" +msgstr "" + +msgid "Keyboard Shortcuts" +msgstr "Scorciatoie Tastiera" + +msgid "Show the list of the keyboard shortcuts" +msgstr "Mostra l'elenco delle scorciatoie di tastiera" + +msgid "Setup Wizard" +msgstr "Setup Wizard" + +msgid "Show Configuration Folder" +msgstr "Show Configuration Folder" + +msgid "Show Tip of the Day" +msgstr "" + +msgid "Check for Update" +msgstr "Check for Updates" + +msgid "Open Network Test" +msgstr "" + +#, c-format, boost-format +msgid "&About %s" +msgstr "Inform&azioni su %s" + +msgid "Upload Models" +msgstr "" + +msgid "Download Models" +msgstr "" + +msgid "Default View" +msgstr "Default View" + +#. TRN To be shown in the main menu View->Top +msgid "Top" +msgstr "Superiore" + +msgid "Top View" +msgstr "Vista superiore" + +#. TRN To be shown in the main menu View->Bottom +msgid "Bottom" +msgstr "Inferiore" + +msgid "Bottom View" +msgstr "Vista inferiore" + +msgid "Front" +msgstr "Frontale" + +msgid "Front View" +msgstr "Vista anteriore" + +msgid "Rear" +msgstr "Posteriore" + +msgid "Rear View" +msgstr "Vista posteriore" + +msgid "Left" +msgstr "Sinistra" + +msgid "Left View" +msgstr "Vista sinistra" + +msgid "Right" +msgstr "Destra" + +msgid "Right View" +msgstr "Vista destra" + +msgid "Start a new window" +msgstr "" + +msgid "New Project" +msgstr "Nuovo progetto" + +msgid "Start a new project" +msgstr "Inizia un nuovo progetto" + +msgid "Open a project file" +msgstr "Apri un file progetto" + +msgid "Recent projects" +msgstr "Prog&etti recenti" + +msgid "Save Project" +msgstr "Save Project" + +msgid "Save current project to file" +msgstr "Save current project to file" + +msgid "Save Project as" +msgstr "Save Project as" + +msgid "Save current project as" +msgstr "Save current project as" + +msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" +msgstr "" + +msgid "Load a model" +msgstr "Carica modello" + +msgid "Import Configs" +msgstr "Import Configs" + +msgid "Load configs" +msgstr "Load configs" + +msgid "Import" +msgstr "Import" + +msgid "Export all objects as STL" +msgstr "Export All Objects as STL" + +msgid "Export Generic 3MF" +msgstr "Export Generic 3MF" + +msgid "Export 3mf file without using some 3mf-extensions" +msgstr "Export 3mf file without using some 3mf-extensions" + +msgid "Export current sliced file" +msgstr "" + +msgid "Export all plate sliced file" +msgstr "" + +msgid "Export G-code" +msgstr "Esporta G-code" + +msgid "Export current plate as G-code" +msgstr "" + +msgid "Export &Configs" +msgstr "Export &Configs" + +msgid "Export current configuration to files" +msgstr "" + +msgid "Export" +msgstr "Esporta" + +msgid "Quit" +msgstr "Quit" + +msgid "Undo" +msgstr "Annulla" + +msgid "Redo" +msgstr "Ripeti" + +msgid "Cut selection to clipboard" +msgstr "Cut selection to clipboard" + +msgid "Copy" +msgstr "Copia" + +msgid "Copy selection to clipboard" +msgstr "Copia selezione negli appunti" + +msgid "Paste" +msgstr "Incolla" + +msgid "Paste clipboard" +msgstr "Incolla appunti" + +msgid "Delete selected" +msgstr "Elimina selezionato" + +msgid "Deletes the current selection" +msgstr "Elimina la selezione corrente" + +msgid "Delete all" +msgstr "Elimina tutto" + +msgid "Deletes all objects" +msgstr "Elimina tutti gli oggetti" + +msgid "Clone selected" +msgstr "Clone Selected" + +msgid "Clone copies of selections" +msgstr "Clone copies of selections" + +msgid "Select all" +msgstr "Select All" + +msgid "Selects all objects" +msgstr "Seleziona tutti gli oggetti" + +msgid "Deselect all" +msgstr "Deseleziona tutto" + +msgid "Deselects all objects" +msgstr "Deseleziona tutti gli oggetti" + +msgid "Use Perspective View" +msgstr "Use Perspective View" + +msgid "Use Orthogonal View" +msgstr "Use Orthogonal View" + +msgid "Show &Labels" +msgstr "" + +msgid "Show object labels in 3D scene" +msgstr "" + +msgid "Preferences" +msgstr "Preferenze" + +msgid "View" +msgstr "Vista" + +msgid "Help" +msgstr "Aiuto" + +msgid "3D Models" +msgstr "" + +msgid "&Open G-code" +msgstr "Apri G-code" + +msgid "Open a G-code file" +msgstr "Apri un file G-code" + +msgid "Re&load from Disk" +msgstr "R&icarica da disco" + +msgid "Reload the plater from disk" +msgstr "Ricarica piano da disco" + +msgid "Export &Toolpaths as OBJ" +msgstr "Esporta percorso strumen&to come OBJ" + +msgid "Export toolpaths as OBJ" +msgstr "Esporta percorso strumento come OBJ" + +msgid "Open &Studio" +msgstr "" + +msgid "Open Studio" +msgstr "" + +msgid "&Quit" +msgstr "Es&ci" + +#, c-format, boost-format +msgid "Quit %s" +msgstr "Chiudi %s" + +msgid "&File" +msgstr "&File" + +msgid "&View" +msgstr "&Vista" + +msgid "&Help" +msgstr "&Aiuto" + +msgid "Overwrite file" +msgstr "Overwrite file" + +msgid "Yes to All" +msgstr "Yes to All" + +msgid "No to All" +msgstr "No to All" + +msgid "Choose a directory" +msgstr "" + +#, c-format, boost-format +msgid "There is %d config exported. (Only non-system configs)" +msgid_plural "There are %d configs exported. (Only non-system configs)" +msgstr[0] "" +msgstr[1] "" + +msgid "Export result" +msgstr "Export Result" + +msgid "Select profile to load:" +msgstr "" + +#, c-format, boost-format +msgid "There is %d config imported. (Only non-system and compatible configs)" +msgid_plural "" +"There are %d configs imported. (Only non-system and compatible configs)" +msgstr[0] "" +msgstr[1] "" + +msgid "Import result" +msgstr "Import result" + +msgid "File is missing" +msgstr "File is missing" + +msgid "The project is no longer available." +msgstr "The project is no longer available." + +msgid "Filament Settings" +msgstr "Impostazioni Filamento" + +msgid "" +"Do you want to synchronize your personal data from Bambu Cloud? \n" +"It contains the following information:\n" +"1. The Process presets\n" +"2. The Filament presets\n" +"3. The Printer presets\n" +msgstr "" + +msgid "Synchronization" +msgstr "Synchronization" + +msgid "Initialize failed (No Device)!" +msgstr "Initialization failed (No Device)!" + +msgid "Initialize failed (No Camera Device)!" +msgstr "" + +msgid "Initializing..." +msgstr "Initializing..." + +msgid "Loading..." +msgstr "Loading..." + +msgid "Initialize failed (Not supported with LAN-only mode)!" +msgstr "" + +msgid "Initialize failed (Not accessible in LAN-only mode)!" +msgstr "" + +msgid "Initialize failed (Missing LAN ip of printer)!" +msgstr "" + +msgid "Initialize failed (Not supported by printer)!" +msgstr "" + +#, c-format, boost-format +msgid "Initialize failed (%s)!" +msgstr "" + +msgid "Network unreachable" +msgstr "" + +#, c-format, boost-format +msgid "Stopped [%d]!" +msgstr "" + +msgid "Stopped." +msgstr "Stopped." + +msgid "" +"Virtual Camera Tools is required for this task!\n" +"Do you want to install them?" +msgstr "" + +msgid "Downloading Virtual Camera Tools" +msgstr "" + +msgid "" +"Another virtual camera is running.\n" +"Bambu Studio supports only a single virtual camera.\n" +"Do you want to stop this virtual camera?" +msgstr "" + +#, c-format, boost-format +msgid "Virtual camera initialize failed (%s)!" +msgstr "" + +msgid "Information" +msgstr "" + +msgid "Playing..." +msgstr "Playing..." + +#, c-format, boost-format +msgid "Load failed [%d]!" +msgstr "Loading failed [%d]!" + +msgid "Year" +msgstr "Year" + +msgid "Month" +msgstr "Month" + +msgid "All Files" +msgstr "" + +msgid "Group files by year, recent first." +msgstr "" + +msgid "Group files by month, recent first." +msgstr "" + +msgid "Show all files, recent first." +msgstr "" + +msgid "Timelapse" +msgstr "Timelapse" + +msgid "Switch to timelapse files." +msgstr "" + +msgid "Video" +msgstr "Video" + +msgid "Switch to video files." +msgstr "" + +msgid "Delete selected files from printer." +msgstr "" + +msgid "Download" +msgstr "Download" + +msgid "Download selected files from printer." +msgstr "" + +msgid "Select" +msgstr "" + +msgid "Batch manage files." +msgstr "" + +msgid "No printers." +msgstr "No printers." + +msgid "Not supported by this model of printer!" +msgstr "" + +msgid "Connecting..." +msgstr "Connecting..." + +#, c-format, boost-format +msgid "Connect failed [%d]!" +msgstr "Connection failed [%d]!" + +msgid "Loading file list..." +msgstr "Loading file list..." + +msgid "No files" +msgstr "No files" + +msgid "Not accessible in LAN-only mode!" +msgstr "" + +msgid "Missing LAN ip of printer!" +msgstr "" + +#, c-format, boost-format +msgid "File '%s' was lost! Please download it again." +msgstr "" + +msgid "Download waiting..." +msgstr "" + +msgid "Play" +msgstr "" + +msgid "Open Folder" +msgstr "" + +msgid "Download finished" +msgstr "" + +#, c-format, boost-format +msgid "Downloading %d%%..." +msgstr "" + +msgid "Speed:" +msgstr "Velocità:" + +msgid "Deadzone:" +msgstr "Zona morta:" + +msgid "Options:" +msgstr "Opzioni:" + +msgid "Zoom" +msgstr "Zoom" + +msgid "Translation/Zoom" +msgstr "" + +msgid "3Dconnexion settings" +msgstr "Impostazioni 3Dconnexion" + +msgid "Swap Y/Z axes" +msgstr "Inverti assi Y/Z" + +msgid "Camera" +msgstr "" + +msgid "SD Card" +msgstr "" + +msgid "Camera Setting" +msgstr "" + +msgid "Printing Progress" +msgstr "Printing progress" + +msgid "Resume" +msgstr "Resume" + +msgid "Stop" +msgstr "Stop" + +msgid "0" +msgstr "" + +msgid "Clean" +msgstr "" + +msgid "Control" +msgstr "Control" + +msgid "Print Options" +msgstr "" + +msgid "100%" +msgstr "100%" + +msgid "Lamp" +msgstr "Lamp" + +msgid "Aux" +msgstr "" + +msgid "Cham" +msgstr "" + +msgid "Bed" +msgstr "Piano" + +msgid "Unload" +msgstr "Unload" + +msgid "Debug Info" +msgstr "Debug Info" + +msgid "No SD Card" +msgstr "" + +msgid "SD Card Abnormal" +msgstr "" + +msgid "Printing List" +msgstr "Printing list" + +msgid "Cancel print" +msgstr "" + +msgid "Are you sure you want to cancel this print?" +msgstr "" + +#, c-format, boost-format +msgid "" +"Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " +"printer by logging in with your user account." +msgstr "" + +#, c-format, boost-format +msgid "" +"Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " +"printer by inputting Access Code which can be gotten from printer screen." +msgstr "" + +msgid "Downloading..." +msgstr "Downloading..." + +msgid "Cloud Slicing..." +msgstr "" + +msgid "Please heat the nozzle to above 170 degree before loading filament." +msgstr "" + +msgid "Still unload" +msgstr "" + +msgid "Still load" +msgstr "" + +msgid "" +"Cannot read filament info: the filament is loaded to the tool head,please " +"unload the filament and try again." +msgstr "" + +msgid "This only takes effect during printing" +msgstr "" + +msgid "Silent" +msgstr "Silent" + +msgid "Standard" +msgstr "Standard" + +msgid "Sport" +msgstr "Sport" + +msgid "Ludicrous" +msgstr "Ludicrous" + +msgid "Can't start this without SD card." +msgstr "" + +msgid "Failed to connect to the server" +msgstr "Failed to connect to the server" + +msgid "Status" +msgstr "Stato" + +msgid "Media" +msgstr "Media" + +msgid "Update" +msgstr "Update" + +msgid "HMS" +msgstr "HMS" + +msgid "Failed to connect to the printer" +msgstr "Failed to connect to the printer" + +msgid "Don't show again" +msgstr "Non mostrare più" + +#, c-format, boost-format +msgid "%s error" +msgstr "errore %s" + +#, c-format, boost-format +msgid "%s has encountered an error" +msgstr "%s ha riscontrato un errore" + +#, c-format, boost-format +msgid "%s warning" +msgstr "Avviso %s" + +#, c-format, boost-format +msgid "%s has a warning" +msgstr "%s ha un avviso" + +#, c-format, boost-format +msgid "%s info" +msgstr "Informazioni %s " + +#, c-format, boost-format +msgid "%s information" +msgstr "%s informazioni" + +msgid "Skip" +msgstr "Skip" + +msgid "3D Mouse disconnected." +msgstr "Mouse 3D disconnesso." + +msgid "Configuration can update now." +msgstr "A new configuration is available. Update now?" + +msgid "Detail." +msgstr "More" + +msgid "Integration was successful." +msgstr "Integration was successful." + +msgid "Integration failed." +msgstr "Integration failed." + +msgid "Undo integration was successful." +msgstr "Undo integration was successful." + +msgid "New network plug-in available." +msgstr "" + +msgid "Details" +msgstr "" + +msgid "Undo integration failed." +msgstr "Undo integration failed." + +msgid "Exporting." +msgstr "Esportazione." + +msgid "Software has New version." +msgstr "An update is available!" + +msgid "Goto download page." +msgstr "Go to download page" + +msgid "Open Folder." +msgstr "Apri Cartella." + +#, c-format, boost-format +msgid "%1$d Object has custom supports." +msgid_plural "%1$d Objects have custom supports." +msgstr[0] "%1$d Object has custom supports." +msgstr[1] "%1$d Objects have custom supports." + +#, c-format, boost-format +msgid "%1$d Object has color painting." +msgid_plural "%1$d Objects have color painting." +msgstr[0] "%1$d Object has color painting." +msgstr[1] "%1$d Objects have color painting." + +msgid "ERROR" +msgstr "" + +msgid "CANCELED" +msgstr "" + +msgid "COMPLETED" +msgstr "" + +msgid "Cancel upload" +msgstr "" + +msgid "Slice ok." +msgstr "Slice complete" + +msgid "Export G-Code." +msgstr "Esporta G-code." + +msgid "Export." +msgstr "Esporta." + +msgid "Jump to" +msgstr "Jump to" + +msgid "Error:" +msgstr "Error:" + +msgid "Warning:" +msgstr "Warning:" + +msgid "Export successfully." +msgstr "" + +msgid " (Repair)" +msgstr " (Repair)" + +msgid " Click here to install it." +msgstr "" + +msgid "WARNING:" +msgstr "ATTENZIONE:" + +msgid "Your model needs support ! Please make support material enable." +msgstr "Your model needs support! Please enable support material." + +msgid "Gcode path overlap" +msgstr "G-code path overlap" + +msgid "Support painting" +msgstr "Support Painting" + +msgid "Color painting" +msgstr "Color Painting" + +msgid "Layers" +msgstr "Layer" + +msgid "Range" +msgstr "Intervallo" + +msgid "" +"The application cannot run normally because OpenGL version is lower than " +"2.0.\n" +msgstr "" +"The application cannot run normally because your OpenGL version is lower " +"than 2.0.\n" + +msgid "Please upgrade your graphics card driver." +msgstr "Please upgrade your graphics card driver." + +msgid "Unsupported OpenGL version" +msgstr "Versione OpenGL non supportata" + +#, c-format, boost-format +msgid "" +"Unable to load shaders:\n" +"%s" +msgstr "" +"Unable to load shaders:\n" +"%s" + +msgid "Error loading shaders" +msgstr "Errore caricamento shader" + +msgctxt "Layers" +msgid "Top" +msgstr "Superiore" + +msgctxt "Layers" +msgid "Bottom" +msgstr "Inferiore" + +msgid "Enable AI monitoring of printing" +msgstr "" + +msgid "Sensitivity of pausing is" +msgstr "" + +msgid "Enable detection of build plate position" +msgstr "" + +msgid "" +"The localization tag of build plate is detected, and printing is paused if " +"the tag is not in predefined range." +msgstr "" + +msgid "First Layer Inspection" +msgstr "" + +msgid "Auto-recovery from step loss" +msgstr "" + +msgid "Global" +msgstr "Global" + +msgid "Objects" +msgstr "Objects" + +msgid "Advance" +msgstr "Advanced" + +msgid "Compare presets" +msgstr "Confronta i preset" + +msgid "View all object's settings" +msgstr "View all object's settings" + +msgid "Filament settings" +msgstr "Filament settings" + +msgid "Printer settings" +msgstr "Printer settings" + +#, boost-format +msgid " plate %1%:" +msgstr " plate %1%:" + +msgid "Invalid name, the following characters are not allowed:" +msgstr "Invalid name, the following characters are not allowed:" + +msgid "Sliced Info" +msgstr "Informazioni processo" + +msgid "Used Filament (m)" +msgstr "Filamento usato (m)" + +msgid "Used Filament (mm³)" +msgstr "Filamento usato (mm³)" + +msgid "Used Filament (g)" +msgstr "Filamento usato (g)" + +msgid "Used Materials" +msgstr "Used Materials" + +msgid "Estimated time" +msgstr "Estimated time" + +msgid "Filament changes" +msgstr "Filament changes" + +msgid "Click to edit preset" +msgstr "Clicca per modificare il preset" + +msgid "Connection" +msgstr "" + +msgid "Bed type" +msgstr "Bed type" + +msgid "Flushing volumes" +msgstr "Flushing volumes" + +msgid "Add one filament" +msgstr "" + +msgid "Remove last filament" +msgstr "" + +msgid "Synchronize filament list from AMS" +msgstr "" + +msgid "Set filaments to use" +msgstr "" + +msgid "" +"No AMS filaments. Please select a printer in 'Device' page to load AMS info." +msgstr "" + +msgid "Sync filaments with AMS" +msgstr "" + +msgid "" +"Sync filaments with AMS will drop all current selected filament presets and " +"colors. Do you want to continue?" +msgstr "" + +msgid "There are no compatible filaments, and sync is not performed." +msgstr "" + +msgid "" +"There are some unknown filaments mapped to generic preset. Please update " +"Bambu Studio or restart Bambu Studio to check if there is an update to " +"system presets." +msgstr "" + +msgid "Untitled" +msgstr "Senza titolo" + +#, boost-format +msgid "Do you want to save changes to \"%1%\"?" +msgstr "Do you want to save changes to \"%1%\"?" + +#, c-format, boost-format +msgid "" +"Successfully unmounted. The device %s(%s) can now be safely removed from the " +"computer." +msgstr "" + +#, c-format, boost-format +msgid "Ejecting of device %s(%s) has failed." +msgstr "" + +msgid "Previous unsaved project detected, do you want to restore it?" +msgstr "" +"Previously unsaved items have been detected. Do you want to restore them?" + +msgid "Restore" +msgstr "Restore" + +msgid "" +"The bed temperature exceeds filament's vitrification temperature. Please " +"open the front door of printer before printing to avoid nozzle clog." +msgstr "" + +msgid "" +"The nozzle hardness required by the filament is higher than the default " +"nozzle hardness of the printer. Please replace the hardened nozzle or " +"filament, otherwise, the nozzle will be attrited or damaged." +msgstr "" + +#, c-format, boost-format +msgid "Loading file: %s" +msgstr "Loading file: %s" + +msgid "The 3mf is not from Bambu Lab, load geometry data only." +msgstr "" + +msgid "Load 3mf" +msgstr "" + +msgid "The Config can not be loaded." +msgstr "" + +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." +msgstr "" + +#, c-format, boost-format +msgid "" +"The 3mf's version %s is newer than %s's version %s, Found following keys " +"unrecognized:\n" +msgstr "" +"The 3mf file's version %s is newer than %s's version %s, Found the following " +"unrecognized keys:\n" + +msgid "You'd better upgrade your software.\n" +msgstr "You should update your software.\n" + +msgid "Newer 3mf version" +msgstr "Newer 3mf version" + +#, fuzzy, c-format, boost-format +msgid "" +"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " +"software.\n" +msgstr "\n" + +msgid "The 3mf is not compatible, load geometry data only!" +msgstr "" + +msgid "Incompatible 3mf" +msgstr "Incompatible 3mf" + +msgid "Name of components inside step file is not UTF8 format!" +msgstr "Component name(s) inside step file not in UTF8 format!" + +msgid "The name may show garbage characters!" +msgstr "Because of unsupported text encoding, garbage characters may appear!" + +msgid "Attention!" +msgstr "Attenzione!" + +#, boost-format +msgid "Failed loading file \"%1%\". An invalid configuration was found." +msgstr "Failed loading file \"%1%\". An invalid configuration was found." + +msgid "Objects with zero volume removed" +msgstr "Objects with zero volume removed" + +msgid "The volume of the object is zero" +msgstr "The volume of the object is zero" + +#, c-format, boost-format +msgid "" +"The object from file %s is too small, and maybe in meters or inches.\n" +" Do you want to scale to millimeters?" +msgstr "" +"The object from file %s is too small, and may be in meters or inches.\n" +" Do you want to scale to millimeters?" + +msgid "Object too small" +msgstr "Object too small" + +msgid "" +"This file contains several objects positioned at multiple heights.\n" +"Instead of considering them as multiple objects, should \n" +"the file be loaded as a single object having multiple parts?" +msgstr "" + +msgid "Multi-part object detected" +msgstr "" + +msgid "Load these files as a single object with multiple parts?\n" +msgstr "Load these files as a single object with multiple parts?\n" + +msgid "Object with multiple parts was detected" +msgstr "An object with multiple parts was detected" + +msgid "The file does not contain any geometry data." +msgstr "The file does not contain any geometry data." + +msgid "" +"Your object appears to be too large, Do you want to scale it down to fit the " +"heat bed automatically?" +msgstr "" + +msgid "Object too large" +msgstr "" + +msgid "Export STL file:" +msgstr "Esporta file STL:" + +msgid "Save file as:" +msgstr "Salva come:" + +msgid "The selected object couldn't be split." +msgstr "The selected object couldn't be split." + +msgid "Another export job is running." +msgstr "Another export job is running." + +msgid "Select a new file" +msgstr "" + +msgid "File for the replace wasn't selected" +msgstr "" + +msgid "Error during replace" +msgstr "" + +msgid "Please select a file" +msgstr "Please select a file" + +msgid "Slicing" +msgstr "Slicing" + +msgid "There are warnings after slicing models:" +msgstr "There are warnings after slicing models:" + +msgid "warnings" +msgstr "warnings" + +msgid "Invalid data" +msgstr "Dati non validi" + +msgid "Slicing Canceled" +msgstr "" + +#, c-format, boost-format +msgid "Slicing Plate %d" +msgstr "Slicing Plate %d" + +msgid "Please resolve the slicing errors and publish again." +msgstr "Please resolve the slicing errors and publish again." + +msgid "" +"Network Plug-in is not detected. Network related features are unavailable." +msgstr "" + +msgid "" +"Preview only mode:\n" +"The loaded file contains gcode only, Can not enter the Prepare page" +msgstr "" + +msgid "You can keep the modified presets to the new project or discard them" +msgstr "You can keep the modified presets for the new project or discard them" + +msgid "Creating a new project" +msgstr "Creazione nuovo progetto" + +msgid "Load project" +msgstr "Load project" + +msgid "" +"Failed to save the project.\n" +"Please check whether the folder exists online or if other programs open the " +"project file." +msgstr "" + +msgid "Save project" +msgstr "" + +msgid "Importing Model" +msgstr "" + +msgid "prepare 3mf file..." +msgstr "" + +msgid "downloading project ..." +msgstr "" + +#, c-format, boost-format +msgid "Project downloaded %d%%" +msgstr "" + +msgid "The selected file" +msgstr "Il file selezionato" + +msgid "does not contain valid gcode." +msgstr "non contiene un g-code valido." + +msgid "Error occurs while loading G-code file" +msgstr "An Error has occurred while loading the G-code file." + +msgid "Drop project file" +msgstr "Drop project file" + +msgid "Please select an action" +msgstr "Please select an action" + +msgid "Open as project" +msgstr "Apri come progetto" + +msgid "Import geometry only" +msgstr "Importa solo la geometria" + +msgid "Only one G-code file can be opened at the same time." +msgstr "Only one G-code file can be opened at a time." + +msgid "G-code loading" +msgstr "G-code loading" + +msgid "G-code files can not be loaded with models together!" +msgstr "G-code files and models cannot be loaded together!" + +msgid "Can not add models when in preview mode!" +msgstr "Unable to add models in preview mode" + +msgid "Add Models" +msgstr "Add Models" + +msgid "All objects will be removed, continue?" +msgstr "Saranno rimossi tutti gli oggetti, continuare?" + +msgid "The current project has unsaved changes, save it before continue?" +msgstr "" +"The current project has unsaved changes. Would you like to save before " +"continuing?" + +msgid "Save" +msgstr "Salva" + +msgid "Number of copies:" +msgstr "Number of copies:" + +msgid "Copies of the selected object" +msgstr "Copie dell'oggetto selezionato" + +msgid "Save G-code file as:" +msgstr "Salva il file G-code come:" + +msgid "Save Sliced file as:" +msgstr "Save Sliced file as:" + +#, c-format, boost-format +msgid "" +"The file %s has been sent to the printer's storage space and can be viewed " +"on the printer." +msgstr "" + +msgid "" +"Print By Object: \n" +"Suggest to use auto-arrange to avoid collisions when printing." +msgstr "" +"Print By Object: \n" +"We suggest using auto-arrange to avoid collisions when printing." + +msgid "Send G-code" +msgstr "Invia G-code" + +msgid "Send to printer" +msgstr "Manda alla stampante" + +msgid "Custom supports and color painting were removed before repairing." +msgstr "Custom supports and color painting were removed before repairing." + +msgid "Invalid number" +msgstr "Invalid number" + +msgid "Select Bed Type" +msgstr "" + +#, boost-format +msgid "Part name: %1%\n" +msgstr "Part name: %1%\n" + +#, boost-format +msgid "Object name: %1%\n" +msgstr "Object name: %1%\n" + +#, boost-format +msgid "Size: %1% x %2% x %3% in\n" +msgstr "Size: %1% x %2% x %3% in\n" + +#, boost-format +msgid "Size: %1% x %2% x %3% mm\n" +msgstr "Size: %1% x %2% x %3% mm\n" + +#, boost-format +msgid "Volume: %1% in³\n" +msgstr "Volume: %1% in³\n" + +#, boost-format +msgid "Volume: %1% mm³\n" +msgstr "Volume: %1% mm³\n" + +#, boost-format +msgid "Triangles: %1%\n" +msgstr "Triangles: %1%\n" + +msgid "Tips:" +msgstr "" + +msgid "" +"\"Fix Model\" feature is currently only on Windows. Please repair the model " +"on Bambu Studio(windows) or CAD softwares." +msgstr "" + +#, fuzzy, c-format, boost-format +msgid "Plate %d: %s does not support filament %s (%s).\n" +msgstr "\n" + +msgid "Switching the language requires application restart.\n" +msgstr "Switching languages requires the application to restart.\n" + +msgid "Do you want to continue?" +msgstr "Do you want to continue?" + +msgid "Language selection" +msgstr "Selezione lingua" + +msgid "Switching application language while some presets are modified." +msgstr "Switching application language while some presets are modified." + +msgid "Changing application language" +msgstr "Changing application language" + +msgid "Changing the region will log out your account.\n" +msgstr "Changing the region will log you out of your account.\n" + +msgid "Region selection" +msgstr "Region selection" + +msgid "Second" +msgstr "Second" + +msgid "Browse" +msgstr "" + +msgid "Choose Download Directory" +msgstr "" + +msgid "General Settings" +msgstr "General Settings" + +msgid "Asia-Pacific" +msgstr "Asia-Pacific" + +msgid "China" +msgstr "China" + +msgid "Europe" +msgstr "Europe" + +msgid "North America" +msgstr "North America" + +msgid "Others" +msgstr "Others" + +msgid "Login Region" +msgstr "Login Region" + +msgid "Metric" +msgstr "Metric" + +msgid "Imperial" +msgstr "Imperial" + +msgid "Units" +msgstr "Units" + +msgid "Show \"Tip of the day\" notification after start" +msgstr "" + +msgid "If enabled, useful hints are displayed at startup." +msgstr "" + +msgid "User sync" +msgstr "User sync" + +msgid "Auto sync user presets(Printer/Filament/Process)" +msgstr "Auto sync user presets (Printer/Filament/Process)" + +msgid "User Sync" +msgstr "User Sync" + +msgid "Associate files to BambuStudio" +msgstr "Associate files to Bambu Studio" + +msgid "Associate .3mf files to BambuStudio" +msgstr "Associate .3mf files to Bambu Studio" + +msgid "If enabled, sets BambuStudio as default application to open .3mf files" +msgstr "" +"If enabled, this sets Bambu Studio as the default application to open .3mf " +"files." + +msgid "Associate .stl files to BambuStudio" +msgstr "Associate .stl files to Bambu Studio" + +msgid "If enabled, sets BambuStudio as default application to open .stl files" +msgstr "" +"If enabled, this sets Bambu Studio as the default application to open .stl " +"files." + +msgid "Associate .step/.stp files to BambuStudio" +msgstr "Associate .step/.stp files to Bambu Studio" + +msgid "If enabled, sets BambuStudio as default application to open .step files" +msgstr "" +"If enabled, this sets Bambu Studio as the default application to open .step " +"files." + +msgid "Backup" +msgstr "Backup" + +msgid "Auto-Backup" +msgstr "Auto-Backup" + +msgid "Backup interval" +msgstr "Backup interval" + +msgid "Downloads" +msgstr "" + +msgid "Dark Mode" +msgstr "" + +msgid "Enable Dark mode" +msgstr "" + +msgid "Home page and daily tips" +msgstr "Home page and daily tips" + +msgid "Show home page on startup" +msgstr "Show home page on startup" + +msgid "Sync settings" +msgstr "Sync settings" + +msgid "Preset sync" +msgstr "Preset sync" + +msgid "Preferences sync" +msgstr "Preferences sync" + +msgid "View control settings" +msgstr "View control settings" + +msgid "Rotate of view" +msgstr "Rotate View" + +msgid "Move of view" +msgstr "Pan View" + +msgid "Zoom of view" +msgstr "Zoom View" + +msgid "Other" +msgstr "Altro" + +msgid "Mouse wheel reverses when zooming" +msgstr "Reverse scroll direction while zooming" + +msgid "Develop mode" +msgstr "Developer mode" + +msgid "Dump video" +msgstr "Dump video" + +msgid "Log Level" +msgstr "Log Level" + +msgid "fatal" +msgstr "fatal" + +msgid "error" +msgstr "error" + +msgid "warning" +msgstr "warning" + +msgid "info" +msgstr "info" + +msgid "debug" +msgstr "debug" + +msgid "trace" +msgstr "trace" + +msgid "Host Setting" +msgstr "Host Setting" + +msgid "DEV host: api-dev.bambu-lab.com/v1" +msgstr "DEV host: api-dev.bambu-lab.com/v1" + +msgid "QA host: api-qa.bambu-lab.com/v1" +msgstr "QA host: api-qa.bambu-lab.com/v1" + +msgid "PRE host: api-pre.bambu-lab.com/v1" +msgstr "PRE host: api-pre.bambu-lab.com/v1" + +msgid "Product host" +msgstr "Product host" + +msgid "debug save button" +msgstr "Debug save button" + +msgid "save debug settings" +msgstr "save debug settings" + +msgid "DEBUG settings have saved successfully!" +msgstr "Debug settings have been saved successfully!" + +msgid "Switch cloud environment, Please login again!" +msgstr "" + +msgid "System presets" +msgstr "Preset di sistema" + +msgid "User presets" +msgstr "Preset utente" + +msgid "Incompatible presets" +msgstr "Preset incompatibili" + +msgid "AMS filaments" +msgstr "AMS filament" + +msgid "Click to pick filament color" +msgstr "Click to select filament color" + +msgid "Add/Remove presets" +msgstr "Aggiungi/Rimuovi preset" + +msgid "Edit preset" +msgstr "Modifica preset" + +msgid "Project-inside presets" +msgstr "Project-inside presets" + +msgid "Add/Remove filaments" +msgstr "" + +msgid "Add/Remove materials" +msgstr "" + +msgid "Add/Remove printers" +msgstr "" + +msgid "Slice all plate to obtain time and filament estimation" +msgstr "Slice all plates to obtain time and filament estimation" + +msgid "Packing project data into 3mf file" +msgstr "Packing project data into 3mf file" + +msgid "Uploading 3mf" +msgstr "Uploading 3mf" + +msgid "Jump to model publish web page" +msgstr "Jump to model publish web page" + +msgid "Note: The preparation may takes several minutes. Please be patiant." +msgstr "Note: The preparation may take several minutes. Please be patient." + +msgid "Publish" +msgstr "Publish" + +msgid "Publish was cancelled" +msgstr "Publish was cancelled" + +msgid "Slicing Plate 1" +msgstr "Slicing Plate 1" + +msgid "Packing data to 3mf" +msgstr "Packing data to 3mf" + +msgid "Jump to webpage" +msgstr "Jump to webpage" + +#, c-format, boost-format +msgid "Save %s as" +msgstr "Save %s as" + +msgid "User Preset" +msgstr "User Preset" + +msgid "Project Inside Preset" +msgstr "Project Inside Preset" + +msgid "Name is invalid;" +msgstr "Name is invalid;" + +msgid "illegal characters:" +msgstr "Illegal characters:" + +msgid "illegal suffix:" +msgstr "Illegal suffix:" + +msgid "Name is unavailable." +msgstr "Name is unavailable." + +msgid "Overwrite a system profile is not allowed" +msgstr "Overwriting a system profile is not allowed." + +#, boost-format +msgid "Preset \"%1%\" already exists." +msgstr "Preset \"%1%\" already exists." + +#, boost-format +msgid "Preset \"%1%\" already exists and is incompatible with current printer." +msgstr "" +"Preset \"%1%\" already exists and is incompatible with the current printer." + +msgid "Please note that saving action will replace this preset" +msgstr "Please note that saving will overwrite the current preset." + +msgid "The name is not allowed to be empty." +msgstr "The name field is not allowed to be empty." + +msgid "The name is not allowed to start with space character." +msgstr "The name is not allowed to start with a space." + +msgid "The name is not allowed to end with space character." +msgstr "The name is not allowed to end with a space." + +msgid "The name cannot be the same as a preset alias name." +msgstr "Il nome non può essere uguale a quello di un preset." + +msgid "Save preset" +msgstr "Salva preset" + +msgctxt "PresetName" +msgid "Copy" +msgstr "Copia" + +#, boost-format +msgid "Printer \"%1%\" is selected with preset \"%2%\"" +msgstr "Printer \"%1%\" is selected with preset \"%2%\"" + +#, boost-format +msgid "Please choose an action with \"%1%\" preset after saving." +msgstr "Please choose an action with \"%1%\" preset after saving." + +#, boost-format +msgid "For \"%1%\", change \"%2%\" to \"%3%\" " +msgstr "For \"%1%\", change \"%2%\" to \"%3%\" " + +#, boost-format +msgid "For \"%1%\", add \"%2%\" as a new preset" +msgstr "For \"%1%\", add \"%2%\" as a new preset" + +#, boost-format +msgid "Simply switch to \"%1%\"" +msgstr "Simply switch to \"%1%\"" + +msgid "Online" +msgstr "Online" + +msgid "Offline" +msgstr "Offline" + +msgid "My Device" +msgstr "My Device" + +msgid "Other Device" +msgstr "Other Device" + +msgid "Input access code" +msgstr "Input access code" + +msgid "Can't find my devices?" +msgstr "" + +msgid "Log out successful." +msgstr "Log out successful." + +msgid "Busy" +msgstr "Busy" + +msgid "Bambu Cool Plate" +msgstr "Bambu Cool Plate" + +msgid "Bamabu Engineering Plate" +msgstr "Bambu Engineering Plate" + +msgid "Bamabu High Temperature Plate" +msgstr "Bambu High Temperature Plate" + +msgid "Send print job to" +msgstr "Send print job to" + +msgid "Refresh" +msgstr "Refresh" + +msgid "Bed Leveling" +msgstr "Bed leveling" + +msgid "Flow Calibration" +msgstr "Flow calibration" + +msgid "send completed" +msgstr "Send complete" + +msgid "No login account, only printers in LAN mode are displayed" +msgstr "No login account, only printers in LAN mode are displayed" + +msgid "Connecting to server" +msgstr "Connecting to server" + +msgid "Synchronizing device information" +msgstr "Synchronizing device information" + +msgid "Synchronizing device information time out" +msgstr "Synchronizing device information timed out" + +msgid "Cannot send the print job when the printer is updating firmware" +msgstr "" + +msgid "" +"The printer is executing instructions. Please restart printing after it ends" +msgstr "" +"The printer is executing instructions. Please restart printing after it ends" + +msgid "The printer is busy on other print job" +msgstr "The printer is busy with another print job." + +#, c-format, boost-format +msgid "" +"Filament %s exceeds the number of AMS slots. Please update the printer " +"firmware to support AMS slot assignment." +msgstr "" + +msgid "" +"Filament exceeds the number of AMS slots. Please update the printer firmware " +"to support AMS slot assignment." +msgstr "" + +msgid "" +"Filaments to AMS slots mappings have been established. You can click a " +"filament above to change its mapping AMS slot" +msgstr "" +"Filaments to AMS slots mappings have been established. You can click a " +"filament above to change its mapping AMS slot" + +msgid "" +"Please click each filament above to specify its mapping AMS slot before " +"sending the print job" +msgstr "" +"Please click each filament above to specify its mapping AMS slot before " +"sending the print job" + +#, c-format, boost-format +msgid "" +"Filament %s does not match the filament in AMS slot %s. Please update the " +"printer firmware to support AMS slot assignment." +msgstr "" + +msgid "" +"Filament does not match the filament in AMS slot. Please update the printer " +"firmware to support AMS slot assignment." +msgstr "" + +msgid "" +"The printer firmware only supports sequential mapping of filament => AMS " +"slot." +msgstr "" + +msgid "An SD card needs to be inserted before printing." +msgstr "" + +msgid "An SD card needs to be inserted to record timelapse." +msgstr "" + +msgid "" +"Cannot send the print job to a printer whose firmware is required to get " +"updated." +msgstr "" + +msgid "Cannot send the print job for empty plate" +msgstr "" + +msgid "Errors" +msgstr "" + +msgid "" +"Please check the following infomation and click Confirm to continue sending " +"print:\n" +msgstr "" + +msgid "" +"The printer type used to generate G-code is not the same type as the " +"currently selected physical printer. It is recommend to re-slice by " +"selecting the same printer type.\n" +msgstr "" + +#, c-format, boost-format +msgid "The %s filament is too soft to be used with the AMS" +msgstr "" + +msgid "" +"There are some unknown filaments in the AMS mappings. Please check whether " +"they are the required filaments. If they are okay, press \"Confirm\" to " +"start printing." +msgstr "" + +msgid "Preparing print job" +msgstr "Preparing print job" + +msgid "Modifying the device name" +msgstr "Modifying the device name" + +msgid "Send to Printer SD card" +msgstr "" + +msgid "Cannot send the print task when the upgrade is in progress" +msgstr "Cannot send print tasks when an update is in progress" + +msgid "The printer is required to be in the same LAN as Bambu Studio." +msgstr "" + +msgid "The printer does not support sending to printer SD card." +msgstr "" + +msgid "Same as Global Bed Type" +msgstr "" + +msgid "Cool Plate" +msgstr "Cool Plate" + +msgid "Engineering Plate" +msgstr "Engineering Plate" + +msgid "High Temp Plate" +msgstr "High Temp Plate" + +msgid "Textured PEI Plate" +msgstr "" + +msgid "Log in printer" +msgstr "Log in printer" + +msgid "Would you like to log in this printer with current account?" +msgstr "Would you like to log in this printer with the current account?" + +msgid "Log in successful." +msgstr "Log in successful." + +msgid "Log out printer" +msgstr "Log out printer" + +msgid "Would you like to log out the printer?" +msgstr "Would you like to log out the printer?" + +msgid "Please log in first." +msgstr "Please log in first." + +msgid "There was a problem connecting to the printer. Please try again." +msgstr "There was a problem connecting to the printer. Please try again." + +msgid "Failed to log out." +msgstr "Failed to log out." + +#. TRN "Save current Settings" +#, c-format, boost-format +msgid "Save current %s" +msgstr "Salva le %s attuali" + +msgid "Delete this preset" +msgstr "Elimina questo preset" + +msgid "Search in preset" +msgstr "" + +msgid "Click to reset all settings to the last saved preset." +msgstr "" + +msgid "" +"Prime tower is required for smooth timeplase. There may be flaws on the " +"model without prime tower. Are you sure you want to disable prime tower?" +msgstr "" + +msgid "" +"Prime tower is required for smooth timelapse. There may be flaws on the " +"model without prime tower. Do you want to enable prime tower?" +msgstr "" + +msgid "" +"We have added an experimental style \"Tree Slim\" that features smaller " +"support volume but weaker strength.\n" +"We recommand using it with: 0 interface layers, 0 top distance, 2 walls." +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" + +msgid "" +"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommand the following " +"settings: at least 2 interface layers, at least 0.1 top z distance or using " +"support materials on interface." +msgstr "" + +msgid "" +"When using support material for the support interface, We recommand the " +"following settings:\n" +"0 top distance, 0 interface spacing, concentric pattern." +msgstr "" + +msgid "" +"When recording timelapse without toolhead, it is recommended to add a " +"\"Timelapse Wipe Tower\" \n" +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\".\n" +msgstr "" + +msgid "Line width" +msgstr "Line width" + +msgid "Seam" +msgstr "Seam" + +msgid "Precision" +msgstr "Precision" + +msgid "Wall generator" +msgstr "" + +msgid "Walls" +msgstr "Walls" + +msgid "Top/bottom shells" +msgstr "Top/bottom shells" + +msgid "Initial layer speed" +msgstr "First layer speed" + +msgid "Other layers speed" +msgstr "Other layers speed" + +msgid "Overhang speed" +msgstr "Overhang speed" + +msgid "" +"This is the speed for various overhang degrees. Overhang degrees are " +"expressed as a percentage of line width. 0 speed means no slowing down for " +"the overhang degree range and wall speed is used" +msgstr "" +"This is the speed for various overhang degrees. Overhang degrees are " +"expressed as a percentage of line width. 0 speed means no slowing down for " +"the overhang degree range and wall speed is used" + +msgid "Travel speed" +msgstr "Travel speed" + +msgid "Acceleration" +msgstr "Acceleration" + +msgid "Raft" +msgstr "" + +msgid "Support filament" +msgstr "Filament for Supports" + +msgid "Prime tower" +msgstr "Prime tower" + +msgid "Special mode" +msgstr "Special mode" + +msgid "G-code output" +msgstr "" + +msgid "Frequent" +msgstr "Frequent" + +#, c-format, boost-format +msgid "" +"Following line %s contains reserved keywords.\n" +"Please remove it, or will beat G-code visualization and printing time " +"estimation." +msgid_plural "" +"Following lines %s contain reserved keywords.\n" +"Please remove them, or will beat G-code visualization and printing time " +"estimation." +msgstr[0] "" +"Following line %s contains reserved keywords.\n" +"Please remove it, or G-code visualization and print time estimation will be " +"broken." +msgstr[1] "" +"Following lines %s contain reserved keywords.\n" +"Please remove them, or G-code visualization and print time estimation will " +"be broken." + +msgid "Reserved keywords found" +msgstr "Reserved keywords found" + +msgid "Setting Overrides" +msgstr "Setting Overrides" + +msgid "Retraction" +msgstr "Retrazione" + +msgid "Basic information" +msgstr "Basic information" + +msgid "Recommended nozzle temperature" +msgstr "Recommended nozzle temperature" + +msgid "Recommended nozzle temperature range of this filament. 0 means no set" +msgstr "Recommended nozzle temperature range of this filament. 0 means not set" + +msgid "Recommended temperature range" +msgstr "Recommended temperature range" + +msgid "Print temperature" +msgstr "Print temperature" + +msgid "Nozzle" +msgstr "Ugello" + +msgid "Nozzle temperature when printing" +msgstr "Nozzle temperature when printing" + +msgid "Cool plate" +msgstr "Cool plate" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate" +msgstr "" +"This is the bed temperature when the cool plate is installed. A value of 0 " +"means the filament does not support printing on the Cool Plate." + +msgid "Engineering plate" +msgstr "Engineering plate" + +msgid "" +"Bed temperature when engineering plate is installed. Value 0 means the " +"filament does not support to print on the Engineering Plate" +msgstr "" +"This is the bed temperature when the engineering plate is installed. A value " +"of 0 means the filament does not support printing on the Engineering Plate." + +msgid "" +"Bed temperature when high temperature plate is installed. Value 0 means the " +"filament does not support to print on the High Temp Plate" +msgstr "" +"This is the bed temperature when the high temperature plate is installed. A " +"value of 0 means the filament does not support printing on the High Temp " +"Plate." + +msgid "" +"Bed temperature when Textured PEI Plate is installed. Value 0 means the " +"filament does not support to print on the Textured PEI Plate" +msgstr "" + +msgid "Volumetric speed limitation" +msgstr "Volumetric speed limitation" + +msgid "Cooling" +msgstr "Raffreddamento" + +msgid "Cooling for specific layer" +msgstr "Cooling for specific layer" + +msgid "Part cooling fan" +msgstr "Part cooling fan" + +msgid "Min fan speed threshold" +msgstr "Min fan speed threshold" + +msgid "" +"Part cooling fan speed will start to run at min speed when the estimated " +"layer time is no longer than the layer time in setting. When layer time is " +"shorter than threshold, fan speed is interpolated between the minimum and " +"maximum fan speed according to layer printing time" +msgstr "" +"The part cooling fan will run at the minimum fan speed when the estimated " +"layer time is longer than the threshold value. When the layer time is " +"shorter than the threshold, the fan speed will be interpolated between the " +"minimum and maximum fan speed according to layer printing time." + +msgid "Max fan speed threshold" +msgstr "Max fan speed threshold" + +msgid "" +"Part cooling fan speed will be max when the estimated layer time is shorter " +"than the setting value" +msgstr "" +"The part cooling fan will run at maximum speed when the estimated layer time " +"is shorter than the threshold value." + +msgid "Auxiliary part cooling fan" +msgstr "Auxiliary part cooling fan" + +msgid "Filament start G-code" +msgstr "Filament start G-code" + +msgid "Filament end G-code" +msgstr "Filament end G-code" + +msgid "Printable space" +msgstr "Printable space" + +msgid "Extruder Clearance" +msgstr "" + +msgid "Accessory" +msgstr "Accessory" + +msgid "Machine gcode" +msgstr "Machine G-code" + +msgid "Machine start G-code" +msgstr "Machine start G-code" + +msgid "Machine end G-code" +msgstr "Machine end G-code" + +msgid "Before layer change G-code" +msgstr "G-code prima del cambio layer" + +msgid "Layer change G-code" +msgstr "Layer change G-code" + +msgid "Change filament G-code" +msgstr "Change filament G-code" + +msgid "Pause G-code" +msgstr "Pause G-code" + +msgid "Template Custom G-code" +msgstr "" + +msgid "Motion ability" +msgstr "Motion ability" + +msgid "Normal" +msgstr "Normale" + +msgid "Speed limitation" +msgstr "Speed limitation" + +msgid "Acceleration limitation" +msgstr "Acceleration limitation" + +msgid "Jerk limitation" +msgstr "Jerk limitation" + +msgid "Layer height limits" +msgstr "Limiti altezza layer" + +msgid "Retraction when switching material" +msgstr "Retraction when switching material" + +msgid "Detached" +msgstr "Distaccato" + +msgid "Following preset will be deleted too." +msgid_plural "Following presets will be deleted too." +msgstr[0] "The following preset will be deleted too:" +msgstr[1] "The following presets will be deleted too:" + +#, boost-format +msgid "Are you sure to %1% the selected preset?" +msgstr "Are you sure you want to %1% the selected preset?" + +#. TRN Remove/Delete +#, boost-format +msgid "%1% Preset" +msgstr "%1% Preset" + +msgid "All" +msgstr "Tutto" + +msgid "Set" +msgstr "Imposta" + +msgid "Click to reset current value and attach to the global value." +msgstr "Click to reset current value and attach to the global value." + +msgid "Click to drop current modify and reset to saved value." +msgstr "Click to drop current modifications and reset to saved value." + +msgid "Process Settings" +msgstr "Process Settings" + +msgid "Undef" +msgstr "Undef" + +msgid "Unsaved Changes" +msgstr "Modifiche non salvate" + +msgid "Discard or Keep changes" +msgstr "Discard or keep changes" + +msgid "Old Value" +msgstr "Valore precedente" + +msgid "New Value" +msgstr "Nuovo valore" + +msgid "Transfer" +msgstr "Trasferisci" + +msgid "Don't save" +msgstr "Non salvare" + +msgid "Discard" +msgstr "Cancella" + +msgid "Click the right mouse button to display the full text." +msgstr "Click the right mouse button to display the full text." + +msgid "All changes will not be saved" +msgstr "No changes will be saved." + +msgid "All changes will be discarded." +msgstr "All changes will be discarded." + +msgid "Save the selected options." +msgstr "Salvare le opzioni selezionate." + +msgid "Keep the selected options." +msgstr "Keep the selected options." + +msgid "Transfer the selected options to the newly selected preset." +msgstr "Transfer the selected options to the newly selected preset." + +#, boost-format +msgid "" +"Save the selected options to preset \n" +"\"%1%\"." +msgstr "" +"Save the selected options to preset \n" +"\"%1%\"." + +#, boost-format +msgid "" +"Transfer the selected options to the newly selected preset \n" +"\"%1%\"." +msgstr "" +"Transfer the selected options to the newly selected preset \n" +"\"%1%\"." + +#, boost-format +msgid "Preset \"%1%\" contains the following unsaved changes:" +msgstr "Preset \"%1%\" contains the following unsaved changes:" + +#, boost-format +msgid "" +"Preset \"%1%\" is not compatible with the new printer profile and it " +"contains the following unsaved changes:" +msgstr "" +"Preset \"%1%\" is not compatible with the new printer profile and it " +"contains the following unsaved changes:" + +#, boost-format +msgid "" +"Preset \"%1%\" is not compatible with the new process profile and it " +"contains the following unsaved changes:" +msgstr "" +"Preset \"%1%\" is not compatible with the new process profile and it " +"contains the following unsaved changes:" + +#, boost-format +msgid "" +"You have changed some settings of preset \"%1%\". \n" +"Would you like to keep these changed settings (new value) after switching " +"preset?" +msgstr "" + +msgid "" +"You have changed some preset settings. \n" +"Would you like to keep these changed settings (new value) after switching " +"preset?" +msgstr "" + +msgid "Extruders count" +msgstr "Conteggio estrusori" + +msgid "General" +msgstr "Generale" + +msgid "Capabilities" +msgstr "Caratteristiche" + +msgid "" +"The P1P printer does not support smooth timelapse, use traditional timelapse " +"instead." +msgstr "" + +msgid "Show all presets (including incompatible)" +msgstr "" + +msgid "Add File" +msgstr "" + +msgid "Set as cover" +msgstr "Set as cover" + +msgid "Cover" +msgstr "Cover" + +#, boost-format +msgid "The name \"%1%\" already exists." +msgstr "The name \"%1%\" already exists." + +msgid "Basic Info" +msgstr "Basic Info" + +msgid "Pictures" +msgstr "Pictures" + +msgid "Bill of Materials" +msgstr "Bill of Materials" + +msgid "Assembly Guide" +msgstr "Assembly Guide" + +msgid "Choose files" +msgstr "Choose files" + +msgid "Author" +msgstr "" + +msgid "Model Name" +msgstr "Model Name" + +#, c-format, boost-format +msgid "%s Update" +msgstr "%s Update" + +msgid "A new version is available" +msgstr "A new version is available" + +msgid "Configuration update" +msgstr "Aggiornamento di configurazione" + +msgid "A new configuration package available, Do you want to install it?" +msgstr "A new configuration package is available. Do you want to install it?" + +msgid "Description:" +msgstr "Description:" + +msgid "Configuration incompatible" +msgstr "Configuration incompatible" + +msgid "the configuration package is incompatible with current application." +msgstr "" +"the configuration package is incompatible with the current application." + +#, c-format, boost-format +msgid "" +"The configuration package is incompatible with current application.\n" +"%s will update the configuration package, Otherwise it won't be able to start" +msgstr "" +"The configuration package is incompatible with the current application.\n" +"%s will update the configuration package to allow the application to start." + +#, c-format, boost-format +msgid "Exit %s" +msgstr "Chiudi %s" + +msgid "the Configuration package is incompatible with current APP." +msgstr "" +"The configuration package is incompatible with the current version of Bambu " +"Studio." + +msgid "Configuration updates" +msgstr "Aggiornamenti di configurazione" + +msgid "No updates available." +msgstr "No updates available." + +msgid "The configuration is up to date." +msgstr "The configuration is up to date." + +msgid "Flushing volumes for filament change" +msgstr "Flushing volumes for filament change" + +msgid "Auto-Calc" +msgstr "Auto-Calc" + +msgid "Flushing volume (mm³) for each filament pair." +msgstr "Flushing volume (mm³) for each filament pair." + +msgid "Multiplier" +msgstr "" + +msgid "Actual Volume = Flushing Volume * Multiplier" +msgstr "" + +#, c-format, boost-format +msgid "Suggestion: Actual Volume in range [%d, %d]" +msgstr "" + +#, c-format, boost-format +msgid "The multiplier should be in range [%.2f, %.2f]." +msgstr "" + +msgid "unloaded" +msgstr "scaricato" + +msgid "loaded" +msgstr "caricato" + +msgid "Filament #" +msgstr "Filament #" + +msgid "From" +msgstr "Da" + +msgid "To" +msgstr "To" + +msgid "Login" +msgstr "Login" + +msgid "The configuration package is changed in previous Config Guide" +msgstr "The configuration package is changed in previous Config Guide" + +msgid "Configuration package changed" +msgstr "Configuration package changed" + +msgid "Toolbar" +msgstr "Toolbar" + +msgid "Objects list" +msgstr "Objects list" + +msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." +msgstr "Import geometry data from STL/STEP/3MF/OBJ/AMF files." + +msgid "Copy to clipboard" +msgstr "Copia negli appunti" + +msgid "Paste from clipboard" +msgstr "Incolla dagli appunti" + +msgid "Show/Hide 3Dconnexion devices settings dialog" +msgstr "" + +msgid "Show keyboard shortcuts list" +msgstr "Mostra elenco scorciatoie di tastiera" + +msgid "Global shortcuts" +msgstr "Global shortcuts" + +msgid "Rotate View" +msgstr "" + +msgid "Pan View" +msgstr "" + +msgid "Mouse wheel" +msgstr "" + +msgid "Zoom View" +msgstr "" + +msgid "" +"Auto orientates selected objects or all objects.If there are selected " +"objects, it just orientates the selected ones.Otherwise, it will orientates " +"all objects in the current disk." +msgstr "" +"This auto orients selected objects or all objects. If there are selected " +"objects, it just orients the selected ones. Otherwise, it will orient all " +"objects in the current plate." + +msgid "Collapse/Expand the sidebar" +msgstr "Riduci/Espandi barra laterale" + +msgid "⌘+Any arrow" +msgstr "" + +msgid "Movement in camera space" +msgstr "Movimento nello spazio della camera" + +msgid "⌥+Left mouse button" +msgstr "" + +msgid "Select a part" +msgstr "" + +msgid "⌘+Left mouse button" +msgstr "" + +msgid "Select multiple objects" +msgstr "Select multiple objects" + +msgid "Ctrl+Any arrow" +msgstr "" + +msgid "Alt+Left mouse button" +msgstr "" + +msgid "Ctrl+Left mouse button" +msgstr "" + +msgid "Shift+Left mouse button" +msgstr "" + +msgid "Select objects by rectangle" +msgstr "Select objects by rectangle" + +msgid "Arrow Up" +msgstr "Freccia Su" + +msgid "Move selection 10 mm in positive Y direction" +msgstr "Sposta selezione 10 mm in direzione Y positiva" + +msgid "Arrow Down" +msgstr "Freccia Giù" + +msgid "Move selection 10 mm in negative Y direction" +msgstr "Sposta selezione 10 mm in direzione Y negativa" + +msgid "Arrow Left" +msgstr "Freccia Sinistra" + +msgid "Move selection 10 mm in negative X direction" +msgstr "Sposta selezione 10 mm in direzione X negativa" + +msgid "Arrow Right" +msgstr "Freccia Destra" + +msgid "Move selection 10 mm in positive X direction" +msgstr "Sposta selezione 10 mm in direzione X positiva" + +msgid "Shift+Any arrow" +msgstr "" + +msgid "Movement step set to 1 mm" +msgstr "Passo movimento impostato a 1 mm" + +msgid "keyboard 1-9: set filament for object/part" +msgstr "Keyboard 1-9: set filament for object/part" + +msgid "Camera view - Default" +msgstr "Camera view - Default" + +msgid "Camera view - Top" +msgstr "Camera view - Top" + +msgid "Camera view - Bottom" +msgstr "Camera view - Bottom" + +msgid "Camera view - Front" +msgstr "Camera view - Front" + +msgid "Camera view - Behind" +msgstr "Camera view - Behind" + +msgid "Camera Angle - Left side" +msgstr "Camera Angle - Left side" + +msgid "Camera Angle - Right side" +msgstr "Camera Angle - Right side" + +msgid "Select all objects" +msgstr "Seleziona tutti gli oggetti" + +msgid "Gizmo move" +msgstr "" + +msgid "Gizmo scale" +msgstr "" + +msgid "Gizmo rotate" +msgstr "" + +msgid "Gizmo cut" +msgstr "" + +msgid "Gizmo Place face on bed" +msgstr "" + +msgid "Gizmo SLA support points" +msgstr "" + +msgid "Gizmo FDM paint-on seam" +msgstr "" + +msgid "Plater" +msgstr "Piano" + +msgid "Move: press to snap by 1mm" +msgstr "Move: press to snap by 1mm" + +msgid "⌘+Mouse wheel" +msgstr "" + +msgid "Support/Color Painting: adjust pen radius" +msgstr "Support/Color Painting: adjust pen radius" + +msgid "⌥+Mouse wheel" +msgstr "" + +msgid "Support/Color Painting: adjust section position" +msgstr "Support/Color Painting: adjust section position" + +msgid "Ctrl+Mouse wheel" +msgstr "" + +msgid "Alt+Mouse wheel" +msgstr "" + +msgid "Gizmo" +msgstr "Gizmo" + +msgid "Set extruder number for the objects and parts" +msgstr "Set extruder number for the objects and parts" + +msgid "Delete objects, parts, modifiers " +msgstr "Delete objects, parts, modifiers" + +msgid "Space" +msgstr "Space" + +msgid "Select the object/part and press space to change the name" +msgstr "Select the object/part and press space to change the name" + +msgid "Mouse click" +msgstr "Mouse click" + +msgid "Select the object/part and mouse click to change the name" +msgstr "Select the object/part and mouse click to change the name" + +msgid "Objects List" +msgstr "Elenco oggetti" + +msgid "Vertical slider - Move active thumb Up" +msgstr "Cursore di scorrimento verticale - Solleva cursore attivo" + +msgid "Vertical slider - Move active thumb Down" +msgstr "Cursore di scorrimento verticale - Abbassa cursore attivo" + +msgid "Horizontal slider - Move active thumb Left" +msgstr "" +"Cursore di scorrimento orizzontale - Sposta a sinistra il cursore attivo" + +msgid "Horizontal slider - Move active thumb Right" +msgstr "Cursore di scorrimento orizzontale - Sposta a destra il cursore attivo" + +msgid "On/Off one layer mode of the vertical slider" +msgstr "On/Off modalità un layer del cursore di scorrimento verticale" + +msgid "Move slider 5x faster" +msgstr "Move slider 5x faster" + +msgid "Shift+Mouse wheel" +msgstr "" + +msgid "Release Note" +msgstr "" + +#, c-format, boost-format +msgid "version %s update information :" +msgstr "" + +msgid "Network plug-in update" +msgstr "" + +msgid "" +"Click OK to update the Network plug-in when Bambu Studio launches next time." +msgstr "" + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "" + +msgid "New version of Bambu Studio" +msgstr "New version of Bambu Studio" + +msgid "Don't remind me of this version again" +msgstr "" + +msgid "Model:" +msgstr "" + +msgid "Serial:" +msgstr "" + +msgid "Version:" +msgstr "" + +msgid "Update firmware" +msgstr "" + +msgid "Printing" +msgstr "" + +msgid "Idle" +msgstr "" + +msgid "Latest version" +msgstr "" + +msgid "Updating" +msgstr "" + +msgid "Updating failed" +msgstr "" + +msgid "Updating successful" +msgstr "" + +msgid "" +"Are you sure you want to update? This will take about 10 minutes. Do not " +"turn off the power while the printer is updating." +msgstr "" + +msgid "" +"An important update was detected and needs to be run before printing can " +"continue. Do you want to update now? You can also update later from 'Upgrade " +"firmware'." +msgstr "" + +msgid "" +"The firmware version is abnormal. Repairing and updating are required before " +"printing. Do you want to update now? You can also update later on printer or " +"update next time starting the studio." +msgstr "" + +msgid "Extension Board" +msgstr "" + +msgid "Saving objects into the 3mf failed." +msgstr "Saving objects into the 3mf failed." + +msgid "Only Windows 10 is supported." +msgstr "Only Windows 10 is supported." + +msgid "Failed to initialize the WinRT library." +msgstr "Failed to initialize the WinRT library." + +msgid "Exporting objects" +msgstr "Exporting objects" + +msgid "Failed loading objects." +msgstr "Failed loading objects." + +msgid "Repairing object by Windows service" +msgstr "Repairing object by Windows service" + +msgid "Repair failed." +msgstr "Repair failed." + +msgid "Loading repaired objects" +msgstr "Loading repaired objects" + +msgid "Exporting 3mf file failed" +msgstr "Exporting 3mf file failed" + +msgid "Import 3mf file failed" +msgstr "Import 3mf file failed" + +msgid "Repaired 3mf file does not contain any object" +msgstr "The repaired 3mf file does not contain any objects." + +msgid "Repaired 3mf file contains more than one object" +msgstr "The repaired 3mf file contains more than one object." + +msgid "Repaired 3mf file does not contain any volume" +msgstr "The repaired 3mf file does not contain any volume." + +msgid "Repaired 3mf file contains more than one volume" +msgstr "The repaired 3mf file contains more than one volume." + +msgid "Repair finished" +msgstr "Repair finished" + +msgid "Repair canceled" +msgstr "Repair canceled" + +#, boost-format +msgid "Copying of file %1% to %2% failed: %3%" +msgstr "Copia del file %1% su %2% non riuscita: %3%" + +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "Copying directory %1% to %2% failed: %3%" + +msgid "Need to check the unsaved changes before configuration updates." +msgstr "Please check any unsaved changes before updating the configuration." + +msgid "Configuration package updated to " +msgstr "Configuration package updated to " + +msgid "Open G-code file:" +msgstr "Apri un file G-code:" + +msgid "" +"One object has empty initial layer and can't be printed. Please Cut the " +"bottom or enable supports." +msgstr "" +"One object has empty initial layer and can't be printed. Please Cut the " +"bottom or enable supports." + +#, boost-format +msgid "Object can't be printed for empty layer between %1% and %2%." +msgstr "The object has empty layers between %1% and %2% and can’t be printed." + +#, boost-format +msgid "Object: %1%" +msgstr "Object: %1%" + +msgid "" +"Maybe parts of the object at these height are too thin, or the object has " +"faulty mesh" +msgstr "" +"Parts of the object at these heights may be too thin or the object may have " +"a faulty mesh." + +msgid "No object can be printed. Maybe too small" +msgstr "No object can be printed. It may be too small." + +msgid "" +"Failed to generate gcode for invalid custom G-code.\n" +"\n" +msgstr "" +"Failed to generate G-code for invalid custom G-code.\n" +"\n" + +msgid "Please check the custom G-code or use the default custom G-code." +msgstr "Please check the custom G-code or use the default custom G-code." + +#, boost-format +msgid "Generating G-code: layer %1%" +msgstr "Generating G-code: layer %1%" + +msgid "Inner wall" +msgstr "Inner wall" + +msgid "Outer wall" +msgstr "Outer wall" + +msgid "Overhang wall" +msgstr "Overhang wall" + +msgid "Sparse infill" +msgstr "Sparse infill" + +msgid "Internal solid infill" +msgstr "Internal solid infill" + +msgid "Top surface" +msgstr "Top surface" + +msgid "Bottom surface" +msgstr "Bottom surface" + +msgid "Bridge" +msgstr "Bridge" + +msgid "Gap infill" +msgstr "Gap infill" + +msgid "Support interface" +msgstr "Support interface" + +msgid "Support transition" +msgstr "Support transition" + +msgid "Multiple" +msgstr "Multiple" + +#, boost-format +msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " +msgstr "Failed to calculate line width of %1%. Cannot get value of “%2%” " + +msgid "undefined error" +msgstr "errore non definito" + +msgid "too many files" +msgstr "troppi file" + +msgid "file too large" +msgstr "file troppo grande" + +msgid "unsupported method" +msgstr "metodo non supportato" + +msgid "unsupported encryption" +msgstr "criptaggio non supportato" + +msgid "unsupported feature" +msgstr "caratteristica non supportata" + +msgid "failed finding central directory" +msgstr "directory centrale non trovata" + +msgid "not a ZIP archive" +msgstr "non un archivio ZIP" + +msgid "invalid header or corrupted" +msgstr "invalid header or corrupted" + +msgid "unsupported multidisk" +msgstr "Saving to RAID is not supported." + +msgid "decompression failed" +msgstr "decompression failed" + +msgid "compression failed" +msgstr "compressione fallita" + +msgid "unexpected decompressed size" +msgstr "dimensione decompressa imprevista" + +msgid "CRC check failed" +msgstr "CRC check failed" + +msgid "unsupported central directory size" +msgstr "dimensione della directory centrale non supportata" + +msgid "allocation failed" +msgstr "allocazione fallita" + +msgid "file open failed" +msgstr "apertura file non riuscita" + +msgid "file create failed" +msgstr "generazione del file non riuscita" + +msgid "file write failed" +msgstr "scrittura file fallita" + +msgid "file read failed" +msgstr "lettura del file non riuscita" + +msgid "file close failed" +msgstr "chiusura del file fallita" + +msgid "file seek failed" +msgstr "ricerca file fallita" + +msgid "file stat failed" +msgstr "statistica file non riuscita" + +msgid "invalid parameter" +msgstr "parametro non valido" + +msgid "invalid filename" +msgstr "nome file non valido" + +msgid "buffer too small" +msgstr "buffer troppo piccolo" + +msgid "internal error" +msgstr "errore interno" + +msgid "file not found" +msgstr "file non trovato" + +msgid "archive too large" +msgstr "Archive too large" + +msgid "validation failed" +msgstr "convalida non riuscita" + +msgid "write callback failed" +msgstr "write callback failed" + +#, boost-format +msgid "" +"%1% is too close to exclusion area, there may be collisions when printing." +msgstr "" + +#, boost-format +msgid "%1% is too close to others, and collisions may be caused." +msgstr "%1% is too close to others, and collisions may be caused." + +#, boost-format +msgid "%1% is too tall, and collisions will be caused." +msgstr "%1% is too tall, and collisions will be caused." + +msgid " is too close to others, there may be collisions when printing.\n" +msgstr "" + +msgid "" +" is too close to exclusion area, there may be collisions when printing.\n" +msgstr "" + +msgid "Prime Tower" +msgstr "Prime Tower" + +msgid " is too close to others, and collisions may be caused.\n" +msgstr " is too close to others, and collisions may be caused.\n" + +msgid " is too close to exclusion area, and collisions will be caused.\n" +msgstr " is too close to an exclusion area, and collisions will be caused.\n" + +msgid "" +"Can not print multiple filaments which have large difference of temperature " +"together. Otherwise, the extruder and nozzle may be blocked or damaged " +"during printing" +msgstr "" +"Unable to print multiple filaments which have large temperature differences " +"together. Otherwise, the extruder and nozzle may be blocked or damaged " +"during printing." + +msgid "No extrusions under current settings." +msgstr "No extrusions under current settings." + +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "" + +msgid "" +"Please select \"By object\" print sequence to print multiple objects in " +"spiral vase mode." +msgstr "" +"Please select \"By object\" print sequence to print multiple objects in " +"spiral vase mode." + +msgid "" +"The spiral vase mode does not work when an object contains more than one " +"materials." +msgstr "" +"Spiral (vase) mode does not work when an object contains more than one " +"material." + +msgid "The prime tower is not supported in \"By object\" print." +msgstr "A prime tower is not supported in “By object” print." + +msgid "" +"The prime tower is not supported when adaptive layer height is on. It " +"requires that all objects have the same layer height." +msgstr "" +"A prime tower is not supported when adaptive layer height is on. It requires " +"that all objects have the same layer height." + +msgid "The prime tower requires \"support gap\" to be multiple of layer height" +msgstr "" +"A prime tower requires any “support gap” to be a multiple of layer height." + +msgid "The prime tower requires that all objects have the same layer heights" +msgstr "A prime tower requires that all objects have the same layer height." + +msgid "" +"The prime tower requires that all objects are printed over the same number " +"of raft layers" +msgstr "" +"A prime tower requires that all objects are printed over the same number of " +"raft layers." + +msgid "" +"The prime tower requires that all objects are sliced with the same layer " +"heights." +msgstr "" +"A prime tower requires that all objects are sliced with the same layer " +"height." + +msgid "" +"The prime tower is only supported if all objects have the same variable " +"layer height" +msgstr "" + +msgid "Too small line width" +msgstr "Line width too small" + +msgid "Too large line width" +msgstr "Line width too large" + +msgid "" +"The prime tower requires that support has the same layer height with object." +msgstr "" +"A prime tower requires that support has the same layer height as the object." + +msgid "" +"Support enforcers are used but support is not enabled. Please enable support." +msgstr "" +"Support enforcers are used but support is not enabled. Please enable support." + +msgid "Layer height cannot exceed nozzle diameter" +msgstr "Layer height cannot exceed nozzle diameter." + +#, fuzzy, c-format, boost-format +msgid "Plate %d: %s does not support filament %s\n" +msgstr "\n" + +msgid "Generating skirt & brim" +msgstr "Generating skirt & brim" + +msgid "Exporting G-code" +msgstr "Esportando il G-code" + +msgid "Generating G-code" +msgstr "Generazione G-code" + +msgid "Failed processing of the filename_format template." +msgstr "Processing of the filename_format template failed." + +msgid "Printable area" +msgstr "Printable area" + +msgid "Bed exclude area" +msgstr "Excluded bed area" + +msgid "" +"Unprintable area in XY plane. For example, X1 Series printers use the front " +"left corner to cut filament during filament change. The area is expressed as " +"polygon by points in following format: \"XxY, XxY, ...\"" +msgstr "" + +msgid "Bed custom texture" +msgstr "" + +msgid "Bed custom model" +msgstr "" + +msgid "Elephant foot compensation" +msgstr "Compensazione zampa d'elefante" + +msgid "" +"Shrink the initial layer on build plate to compensate for elephant foot " +"effect" +msgstr "" +"This shrinks the first layer on the build plate to compensate for elephant " +"foot effect." + +msgid "" +"Slicing height for each layer. Smaller layer height means more accurate and " +"more printing time" +msgstr "" +"This is the height for each layer. Smaller layer heights give greater " +"accuracy but longer printing time." + +msgid "Printable height" +msgstr "Printable height" + +msgid "Maximum printable height which is limited by mechanism of printer" +msgstr "" +"This is the maximum printable height which is limited by the height of the " +"build area." + +msgid "Printer preset names" +msgstr "Nomi dei preset della stampante" + +msgid "Hostname, IP or URL" +msgstr "" + +msgid "" +"Slic3r can upload G-code files to a printer host. This field should contain " +"the hostname, IP address or URL of the printer host instance. Print host " +"behind HAProxy with basic auth enabled can be accessed by putting the user " +"name and password into the URL in the following format: https://username:" +"password@your-octopi-address/" +msgstr "" + +msgid "API Key / Password" +msgstr "" + +msgid "" +"Slic3r can upload G-code files to a printer host. This field should contain " +"the API Key or the password required for authentication." +msgstr "" + +msgid "Name of the printer" +msgstr "" + +msgid "HTTPS CA File" +msgstr "" + +msgid "" +"Custom CA certificate file can be specified for HTTPS OctoPrint connections, " +"in crt/pem format. If left blank, the default OS CA certificate repository " +"is used." +msgstr "" + +msgid "User" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Ignore HTTPS certificate revocation checks" +msgstr "" + +msgid "" +"Ignore HTTPS certificate revocation checks in case of missing or offline " +"distribution points. One may want to enable this option for self signed " +"certificates if connection fails." +msgstr "" + +msgid "Names of presets related to the physical printer" +msgstr "" + +msgid "Authorization Type" +msgstr "" + +msgid "API key" +msgstr "" + +msgid "HTTP digest" +msgstr "" + +msgid "Avoid crossing wall" +msgstr "" + +msgid "Detour and avoid to travel across wall which may cause blob on surface" +msgstr "" +"This detours to avoid traveling across walls, which may cause blobs on the " +"surface" + +msgid "Avoid crossing wall - Max detour length" +msgstr "" + +msgid "" +"Maximum detour distance for avoiding crossing wall. Don't detour if the " +"detour distance is large than this value. Detour length could be specified " +"either as an absolute value or as percentage (for example 50%) of a direct " +"travel path. Zero to disable" +msgstr "" + +msgid "mm or %" +msgstr "" + +msgid "Other layers" +msgstr "Altri layer" + +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the Cool Plate" +msgstr "" +"This is the bed temperature for layers except for the first one. A value of " +"0 means the filament does not support printing on the Cool Plate." + +msgid "°C" +msgstr "°C" + +msgid "Bed temperature" +msgstr "Temperatura piano" + +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the Engineering Plate" +msgstr "" +"This is the bed temperature for layers except for the first one. A value of " +"0 means the filament does not support printing on the Engineering Plate." + +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the High Temp Plate" +msgstr "" +"This is the bed temperature for layers except for the first one. A value of " +"0 means the filament does not support printing on the High Temp Plate." + +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the Textured PEI Plate" +msgstr "" + +msgid "Initial layer" +msgstr "First layer" + +msgid "Initial layer bed temperature" +msgstr "First layer bed temperature" + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate" +msgstr "" +"This is the bed temperature of the first layer. A value of 0 means the " +"filament does not support printing on the Cool Plate." + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Engineering Plate" +msgstr "" +"This is the bed temperature of the first layer. A value of 0 means the " +"filament does not support printing on the Engineering Plate." + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the High Temp Plate" +msgstr "" +"This is the bed temperature of the first layer. A value of 0 means the " +"filament does not support printing on the High Temp Plate." + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Textured PEI Plate" +msgstr "" + +msgid "Bed types supported by the printer" +msgstr "Bed types supported by the printer" + +msgid "This G-code is inserted at every layer change before lifting z" +msgstr "This G-code is inserted at every layer change before lifting z." + +msgid "Bottom shell layers" +msgstr "Bottom shell layers" + +msgid "" +"This is the number of solid layers of bottom shell, including the bottom " +"surface layer. When the thickness calculated by this value is thinner than " +"bottom shell thickness, the bottom shell layers will be increased" +msgstr "" +"This is the number of solid layers of bottom shell, including the bottom " +"surface layer. When the thickness calculated by this value is thinner than " +"bottom shell thickness, the bottom shell layers will be increased" + +msgid "Bottom shell thickness" +msgstr "Bottom shell thickness" + +msgid "" +"The number of bottom solid layers is increased when slicing if the thickness " +"calculated by bottom shell layers is thinner than this value. This can avoid " +"having too thin shell when layer height is small. 0 means that this setting " +"is disabled and thickness of bottom shell is absolutely determained by " +"bottom shell layers" +msgstr "" +"The number of bottom solid layers is increased when slicing if the thickness " +"calculated by bottom shell layers is thinner than this value. This can avoid " +"having too thin a shell when layer height is small. 0 means that this " +"setting is disabled and the thickness of the bottom shell is determined " +"simply by the number of bottom shell layers." + +msgid "Force cooling for overhang and bridge" +msgstr "Force cooling for overhangs and bridges" + +msgid "" +"Enable this option to optimize part cooling fan speed for overhang and " +"bridge to get better cooling" +msgstr "" +"Enable this option to optimize the part cooling fan speed for overhangs and " +"bridges to get better cooling" + +msgid "Fan speed for overhang" +msgstr "Fan speed for overhangs" + +msgid "" +"Force part cooling fan to be this speed when printing bridge or overhang " +"wall which has large overhang degree. Forcing cooling for overhang and " +"bridge can get better quality for these part" +msgstr "" +"Force part cooling fan to be this speed when printing bridges or overhang " +"walls which have a large overhang degree. Forcing cooling for overhangs and " +"bridges can achieve better quality for these parts." + +msgid "Cooling overhang threshold" +msgstr "Cooling overhang threshold" + +#, c-format +msgid "" +"Force cooling fan to be specific speed when overhang degree of printed part " +"exceeds this value. Expressed as percentage which indicides how much width " +"of the line without support from lower layer. 0% means forcing cooling for " +"all outer wall no matter how much overhang degree" +msgstr "" + +msgid "Bridge direction" +msgstr "" + +msgid "" +"Bridging angle override. If left to zero, the bridging angle will be " +"calculated automatically. Otherwise the provided angle will be used for " +"external bridges. Use 180°for zero angle." +msgstr "" + +msgid "Bridge flow" +msgstr "Bridge flow" + +msgid "" +"Decrease this value slightly(for example 0.9) to reduce the amount of " +"material for bridge, to improve sag" +msgstr "" +"Decrease this value slightly (for example 0.9) to reduce the amount of " +"material extruded for bridges to avoid sagging." + +msgid "Only one wall on top surfaces" +msgstr "Only one wall on top surfaces" + +msgid "" +"Use only one wall on flat top surface, to give more space to the top infill " +"pattern" +msgstr "" +"Use only one wall on flat top surfaces, to give more space to the top infill " +"pattern" + +msgid "Slow down for overhang" +msgstr "Slow down for overhangs" + +msgid "Enable this option to slow printing down for different overhang degree" +msgstr "" +"Enable this option to slow down when printing overhangs. The speeds for " +"different overhang percentages are set below." + +msgid "mm/s" +msgstr "mm/s" + +msgid "Speed of bridge and completely overhang wall" +msgstr "This is the speed for bridges and 100% overhang walls." + +msgid "Brim width" +msgstr "Larghezza brim" + +msgid "Distance from model to the outermost brim line" +msgstr "This is the distance from the model to the outermost brim line." + +msgid "Brim type" +msgstr "Tipo di brim" + +msgid "" +"This controls brim position including outer side of models, inner side of " +"holes or both. Auto means both the brim position and brim width is analysed " +"and calculated automatically" +msgstr "" +"This controls brim position including outer side of models, inner side of " +"holes, or both. Auto means both the brim position and brim width are " +"analyzed and calculated automatically." + +msgid "Brim-object gap" +msgstr "Brim-object gap" + +msgid "" +"A gap between innermost brim line and object can make brim be removed more " +"easily" +msgstr "" +"This creates a gap between the innermost brim line and the object and can " +"make the brim easier to remove." + +msgid "Compatible machine" +msgstr "Compatible machine" + +msgid "upward compatible machine" +msgstr "" + +msgid "Compatible machine condition" +msgstr "Compatible machine condition" + +msgid "Compatible process profiles" +msgstr "Compatible process profiles" + +msgid "Compatible process profiles condition" +msgstr "Compatible process profiles condition" + +msgid "Print sequence" +msgstr "Print sequence" + +msgid "Print sequence, layer by layer or object by object" +msgstr "" +"This determines the print sequence, allowing you to print layer-by-layer or " +"object-by-object." + +msgid "By layer" +msgstr "By layer" + +msgid "By object" +msgstr "By object" + +msgid "Slow printing down for better layer cooling" +msgstr "Slow printing down for better layer cooling" + +msgid "" +"Enable this option to slow printing speed down to make the final layer time " +"not shorter than the layer time threshold in \"Max fan speed threshold\", so " +"that layer can be cooled for longer time. This can improve the cooling " +"quality for needle and small details" +msgstr "" +"Enable this option to slow printing speed down to ensure that the final " +"layer time is not shorter than the layer time threshold in \"Max fan speed " +"threshold\", so that the layer can be cooled for a longer time. This can " +"improve the quality for small details." + +msgid "Normal printing" +msgstr "Normal printing" + +msgid "" +"The default acceleration of both normal printing and travel except initial " +"layer" +msgstr "" +"This is the default acceleration for both normal printing and travel after " +"the first layer." + +msgid "mm/s²" +msgstr "mm/s²" + +msgid "Default filament profile" +msgstr "Profilo filamento predefinito" + +msgid "Default filament profile when switch to this machine profile" +msgstr "Default filament profile when switching to this machine profile" + +msgid "Default process profile" +msgstr "Default process profile" + +msgid "Default process profile when switch to this machine profile" +msgstr "Default process profile when switching to this machine profile" + +msgid "No cooling for the first" +msgstr "No cooling for the first" + +msgid "" +"Close all cooling fan for the first certain layers. Cooling fan of the first " +"layer used to be closed to get better build plate adhesion" +msgstr "" +"Turn off all cooling fans for the first few layers. This can be used to " +"improve bed adhesion." + +msgid "layers" +msgstr "layer" + +msgid "Don't support bridges" +msgstr "Non supportare i bridge" + +msgid "" +"Don't support the whole bridge area which make support very large. Bridge " +"usually can be printing directly without support if not very long" +msgstr "" +"This disables supporting bridges, which decreases the amount of support " +"required. Bridges can usually be printed directly without support over a " +"reasonable distance." + +msgid "Thick bridges" +msgstr "" + +msgid "" +"If enabled, bridges are more reliable, can bridge longer distances, but may " +"look worse. If disabled, bridges look better but are reliable just for " +"shorter bridged distances." +msgstr "" + +msgid "Max bridge length" +msgstr "Lunghezza massima Bridge" + +msgid "" +"Max length of bridges that don't need support. Set it to 0 if you want all " +"bridges to be supported, and set it to a very large value if you don't want " +"any bridges to be supported." +msgstr "" +"This is the maximum length of bridges that don't need support. Set it to 0 " +"if you want all bridges to be supported, and set it to a very large value if " +"you don't want any bridges to be supported." + +msgid "End G-code" +msgstr "G-code finale" + +msgid "End G-code when finish the whole printing" +msgstr "Add end G-Code when finishing the entire print." + +msgid "End G-code when finish the printing of this filament" +msgstr "Add end G-code when finishing the printing of this filament." + +msgid "Ensure vertical shell thickness" +msgstr "" + +msgid "" +"Add solid infill near sloping surfaces to guarantee the vertical shell " +"thickness (top+bottom solid layers)" +msgstr "" + +msgid "Internal bridge support thickness" +msgstr "" + +msgid "" +"If enabled, Studio will generate support loops under the contours of " +"internal bridges.These support loops could prevent internal bridges from " +"extruding over the air and improve the top surface quality, especially when " +"the sparse infill density is low.This value determines the thickness of the " +"support loops. 0 means disable this feature" +msgstr "" + +msgid "Top surface pattern" +msgstr "Top surface pattern" + +msgid "Line pattern of top surface infill" +msgstr "This is the line pattern for top surface infill." + +msgid "Concentric" +msgstr "Concentrico" + +msgid "Rectilinear" +msgstr "Rettilineo" + +msgid "Monotonic" +msgstr "Monotonico" + +msgid "Monotonic line" +msgstr "Monotonic line" + +msgid "Aligned Rectilinear" +msgstr "" + +msgid "Hilbert Curve" +msgstr "" + +msgid "Archimedean Chords" +msgstr "" + +msgid "Octagram Spiral" +msgstr "" + +msgid "Bottom surface pattern" +msgstr "Bottom surface pattern" + +msgid "Line pattern of bottom surface infill, not bridge infill" +msgstr "" +"This is the line pattern of bottom surface infill, not including bridge " +"infill." + +msgid "Line width of outer wall" +msgstr "Line width of outer wall" + +msgid "" +"Speed of outer wall which is outermost and visible. It's used to be slower " +"than inner wall speed to get better quality." +msgstr "" +"This is the printing speed for the outer walls of parts. These are generally " +"printed slower than inner walls for higher quality." + +msgid "Order of inner wall/outer wall/infil" +msgstr "Order of inner wall/outer wall/infill" + +msgid "Print sequence of inner wall, outer wall and infill. " +msgstr "This is the print sequence of inner walls, outer walls, and infill." + +msgid "inner/outer/infill" +msgstr "inner/outer/infill" + +msgid "outer/inner/infill" +msgstr "outer/inner/infill" + +msgid "infill/inner/outer" +msgstr "infill/inner/outer" + +msgid "infill/outer/inner" +msgstr "infill/outer/inner" + +msgid "Height to rod" +msgstr "Height to rod" + +msgid "" +"Distance of the nozzle tip to the lower rod. Used for collision avoidance in " +"by-object printing." +msgstr "" + +msgid "Height to lid" +msgstr "Height to lid" + +msgid "" +"Distance of the nozzle tip to the lid. Used for collision avoidance in by-" +"object printing." +msgstr "" + +msgid "" +"Clearance radius around extruder. Used for collision avoidance in by-object " +"printing." +msgstr "" + +msgid "Max Radius" +msgstr "" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "" + +msgid "Extruder Color" +msgstr "Colore estrusore" + +msgid "Only used as a visual help on UI" +msgstr "Only used as a visual help on UI" + +msgid "Extruder offset" +msgstr "Offset estrusore" + +msgid "Flow ratio" +msgstr "Flow ratio" + +msgid "" +"The material may have volumetric change after switching between molten state " +"and crystalline state. This setting changes all extrusion flow of this " +"filament in gcode proportionally. Recommended value range is between 0.95 " +"and 1.05. Maybe you can tune this value to get nice flat surface when there " +"has slight overflow or underflow" +msgstr "" +"The material may have volumetric change after switching between molten and " +"crystalline states. This setting changes all extrusion flow of this filament " +"in G-code proportionally. The recommended value range is between 0.95 and " +"1.05. You may be able to tune this value to get a nice flat surface if there " +"is slight overflow or underflow." + +msgid "Default line width if some line width is set to be zero" +msgstr "Default line width for line widths set to 0" + +msgid "Keep fan always on" +msgstr "Mantieni la ventola sempre accesa" + +msgid "" +"If enable this setting, part cooling fan will never be stoped and will run " +"at least at minimum speed to reduce the frequency of starting and stoping" +msgstr "" +"Enabling this setting means that part cooling fan will never stop entirely " +"and will instead run at least at minimum speed to reduce the frequency of " +"starting and stopping." + +msgid "Layer time" +msgstr "Layer time" + +msgid "" +"Part cooling fan will be enabled for layers of which estimated time is " +"shorter than this value. Fan speed is interpolated between the minimum and " +"maximum fan speeds according to layer printing time" +msgstr "" +"The part cooling fan will be enabled for layers where the estimated time is " +"shorter than this value. Fan speed is interpolated between the minimum and " +"maximum fan speeds according to layer printing time." + +msgid "s" +msgstr "s" + +msgid "Default color" +msgstr "" + +msgid "Default filament color" +msgstr "" + +msgid "Color" +msgstr "Colore" + +msgid "Required nozzle HRC" +msgstr "" + +msgid "" +"Minimum HRC of nozzle required to print the filament. Zero means no checking " +"of nozzle's HRC." +msgstr "" + +msgid "Max volumetric speed" +msgstr "Massima velocità volumetrica" + +msgid "" +"This setting stands for how much volume of filament can be melted and " +"extruded per second. Printing speed is limited by max volumetric speed, in " +"case of too high and unreasonable speed setting. Can't be zero" +msgstr "" + +msgid "mm³/s" +msgstr "mm³/s" + +msgid "Minimal purge on wipe tower" +msgstr "Spurgo minimo sulla torre di pulitura" + +msgid "mm³" +msgstr "mm³" + +msgid "Filament load time" +msgstr "Durata caricamento filamento" + +msgid "Time to load new filament when switch filament. For statistics only" +msgstr "" +"Time to load new filament when switching filament, for statistical purposes " +"only." + +msgid "Filament unload time" +msgstr "Durata scaricamento filamento" + +msgid "Time to unload old filament when switch filament. For statistics only" +msgstr "" +"Time to unload old filament when switching filament, for statistical " +"purposes only." + +msgid "" +"Filament diameter is used to calculate extrusion in gcode, so it's important " +"and should be accurate" +msgstr "" +"Filament diameter is used to calculate extrusion variables in G-code, so it " +"is important that this is accurate and precise." + +msgid "Density" +msgstr "Densità" + +msgid "Filament density. For statistics only" +msgstr "Filament density, for statistical purposes only." + +msgid "g/cm³" +msgstr "g/cm³" + +msgid "Type" +msgstr "Type" + +msgid "The material type of filament" +msgstr "Filament material type" + +msgid "Soluble material" +msgstr "Materiale solubile" + +msgid "" +"Soluble material is commonly used to print support and support interface" +msgstr "" +"Soluble material is commonly used to print support and support interfaces" + +msgid "Support material" +msgstr "Materiale di supporto" + +msgid "" +"Support material is commonly used to print support and support interface" +msgstr "" +"Support material is commonly used to print support and support interfaces." + +msgid "Temperature of vitrificaiton" +msgstr "Temperature of vitrification" + +msgid "" +"Material becomes soft at this temperature. Thus the heatbed cannot be hotter " +"than this tempature" +msgstr "" +"Material becomes soft at this temperature. Thus, the heat bed cannot be " +"hotter than this temperature." + +msgid "Price" +msgstr "Price" + +msgid "Filament price. For statistics only" +msgstr "Filament price, for statistical purposes only." + +msgid "money/kg" +msgstr "soldi/kg" + +msgid "(Undefined)" +msgstr "(Undefined)" + +msgid "Infill direction" +msgstr "Infill direction" + +msgid "" +"Angle for sparse infill pattern, which controls the start or main direction " +"of line" +msgstr "" +"This is the angle for sparse infill pattern, which controls the start or " +"main direction of lines." + +msgid "Sparse infill density" +msgstr "Sparse infill density" + +#, c-format +msgid "Density of internal sparse infill, 100% means solid throughout" +msgstr "" +"This is the density of internal sparse infill. 100% means that the object " +"will be solid throughout." + +msgid "Sparse infill pattern" +msgstr "Sparse infill pattern" + +msgid "Line pattern for internal sparse infill" +msgstr "This is the line pattern for internal sparse infill." + +msgid "Grid" +msgstr "Griglia" + +msgid "Line" +msgstr "Linea" + +msgid "Cubic" +msgstr "Cubico" + +msgid "Tri-hexagon" +msgstr "Tri-hexagon" + +msgid "Gyroid" +msgstr "Giroide" + +msgid "Honeycomb" +msgstr "Nido d'ape" + +msgid "Adaptive Cubic" +msgstr "Adattivo Cubico" + +msgid "3D Honeycomb" +msgstr "" + +msgid "Support Cubic" +msgstr "" + +msgid "Lightning" +msgstr "" + +msgid "" +"Acceleration of top surface infill. Using a lower value may improve top " +"surface quality" +msgstr "" +"This is the acceleration of top surface infill. Using a lower value may " +"improve top surface quality." + +msgid "Acceleration of outer wall. Using a lower value can improve quality" +msgstr "" + +msgid "" +"Acceleration of initial layer. Using a lower value can improve build plate " +"adhensive" +msgstr "" +"This is the printing acceleration for the first layer. Using limited " +"acceleration can improve build plate adhesion." + +msgid "Line width of initial layer" +msgstr "Line width of first layer" + +msgid "Initial layer height" +msgstr "Altezza layer iniziale" + +msgid "" +"Height of initial layer. Making initial layer height to be thick slightly " +"can improve build plate adhension" +msgstr "" +"This is the height of the first layer. Making the first layer height thicker " +"can improve build plate adhesion." + +msgid "Speed of initial layer except the solid infill part" +msgstr "" +"This is the speed for the first layer except for solid infill sections." + +msgid "Initial layer infill" +msgstr "First layer infill" + +msgid "Speed of solid infill part of initial layer" +msgstr "This is the speed for solid infill parts of the first layer." + +msgid "Initial layer nozzle temperature" +msgstr "First layer nozzle temperature" + +msgid "Nozzle temperature to print initial layer when using this filament" +msgstr "Nozzle temperature for printing the first layer with this filament" + +msgid "Full fan speed at layer" +msgstr "Massima velocità della ventola al layer" + +msgid "" +"Randomly jitter while printing the wall, so that the surface has a rough " +"look. This setting controls the fuzzy position" +msgstr "" +"This setting makes the toolhead randomly jitter while printing walls so that " +"the surface has a rough textured look. This setting controls the fuzzy " +"position." + +msgid "None" +msgstr "Nessuno" + +msgid "All walls" +msgstr "Tutte le pareti" + +msgid "Fuzzy skin thickness" +msgstr "Spessore superficie crespa" + +msgid "" +"The width within which to jitter. It's adversed to be below outer wall line " +"width" +msgstr "" +"The width of jittering: it’s recommended to keep this lower than the outer " +"wall line width." + +msgid "Fuzzy skin point distance" +msgstr "Distanza punti superficie crespa" + +msgid "" +"The average diatance between the random points introducded on each line " +"segment" +msgstr "" +"The average distance between the random points introduced on each line " +"segment" + +msgid "" +"Speed of gap infill. Gap usually has irregular line width and should be " +"printed more slowly" +msgstr "" +"This is the speed for gap infill. Gaps usually have irregular line width and " +"should be printed more slowly." + +msgid "Arc fitting" +msgstr "Arc fitting" + +msgid "" +"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " +"tolerance is same with resolution" +msgstr "" +"Enable this to get a G-code file with G2 and G3 moves. The fitting tolerance " +"is the same as the resolution." + +msgid "Add line number" +msgstr "Add line number" + +msgid "Enable this to add line number(Nx) at the beginning of each G-Code line" +msgstr "" +"Enable this to add line number(Nx) at the beginning of each G-Code line." + +msgid "Scan first layer" +msgstr "Scan first layer" + +msgid "" +"Enable this to enable the camera on printer to check the quality of first " +"layer" +msgstr "" +"Enable this to allow the camera on the printer to check the quality of the " +"first layer." + +msgid "Nozzle type" +msgstr "Nozzle type" + +msgid "" +"The metallic material of nozzle. This determines the abrasive resistance of " +"nozzle, and what kind of filament can be printed" +msgstr "" +"The metallic material of the nozzle: This determines the abrasive resistance " +"of the nozzle and what kind of filament can be printed." + +msgid "Undefine" +msgstr "" + +msgid "Hardened steel" +msgstr "Hardened steel" + +msgid "Stainless steel" +msgstr "Stainless steel" + +msgid "Brass" +msgstr "Brass" + +msgid "Nozzle HRC" +msgstr "" + +msgid "" +"The nozzle's hardness. Zero means no checking for nozzle's hardness during " +"slicing." +msgstr "" + +msgid "HRC" +msgstr "" + +msgid "Enable this option if machine has auxiliary part cooling fan" +msgstr "Enable this option if the machine has an auxiliary part cooling fan" + +msgid "G-code flavor" +msgstr "Formato G-code" + +msgid "What kind of gcode the printer is compatible with" +msgstr "What kind of G-code the printer is compatible with." + +msgid "Infill combination" +msgstr "Infill combination" + +msgid "" +"Automatically Combine sparse infill of several layers to print together to " +"reduce time. Wall is still printed with original layer height." +msgstr "" +"Automatically combine sparse infill of several layers to print together in " +"order to reduce time. Walls are still printed with original layer height." + +msgid "Filament to print internal sparse infill." +msgstr "This is the filament for printing internal sparse infill." + +msgid "Line width of internal sparse infill" +msgstr "Line width of internal sparse infill" + +msgid "Infill/Wall overlap" +msgstr "Infill/wall overlap" + +msgid "" +"Infill area is enlarged slightly to overlap with wall for better bonding. " +"The percentage value is relative to line width of sparse infill" +msgstr "" +"This allows the infill area to be enlarged slightly to overlap with walls " +"for better bonding. The percentage value is relative to line width of sparse " +"infill." + +msgid "Speed of internal sparse infill" +msgstr "This is the speed for internal sparse infill." + +msgid "Ironing Type" +msgstr "Tipo di stiratura" + +msgid "" +"Ironing is using small flow to print on same height of surface again to make " +"flat surface more smooth. This setting controls which layer being ironed" +msgstr "" +"Ironing uses a small flow to print at the same height of a surface to make " +"flat surfaces smoother. This setting controls which layers are being ironed." + +msgid "No ironing" +msgstr "No ironing" + +msgid "Top surfaces" +msgstr "All top surfaces" + +msgid "Topmost surface" +msgstr "Topmost surface only" + +msgid "All solid layer" +msgstr "All solid layers" + +msgid "Ironing flow" +msgstr "Ironing flow" + +msgid "" +"The amount of material to extrude during ironing. Relative to flow of normal " +"layer height. Too high value results in overextrusion on the surface" +msgstr "" +"This is the amount of material to be extruded during ironing. It is relative " +"to the flow of normal layer height. Too high a value will result in " +"overextrusion on the surface." + +msgid "Ironing line spacing" +msgstr "Ironing line spacing" + +msgid "The distance between the lines of ironing" +msgstr "This is the distance between the lines used for ironing." + +msgid "Ironing speed" +msgstr "Ironing speed" + +msgid "Print speed of ironing lines" +msgstr "This is the print speed for ironing lines." + +msgid "This gcode part is inserted at every layer change after lift z" +msgstr "This G-code is inserted at every layer change after the z lift." + +msgid "Supports silent mode" +msgstr "Silent Mode" + +msgid "" +"Whether the machine supports silent mode in which machine use lower " +"acceleration to print" +msgstr "" +"Whether the machine supports silent mode in which machine uses lower " +"acceleration to print more quietly" + +msgid "" +"This G-code will be used as a code for the pause print. User can insert " +"pause G-code in gcode viewer" +msgstr "" + +msgid "This G-code will be used as a custom code" +msgstr "" + +msgid "Maximum speed X" +msgstr "Maximum speed X" + +msgid "Maximum speed Y" +msgstr "Maximum speed Y" + +msgid "Maximum speed Z" +msgstr "Maximum speed Z" + +msgid "Maximum speed E" +msgstr "Maximum speed E" + +msgid "Machine limits" +msgstr "Limiti macchina" + +msgid "Maximum X speed" +msgstr "Maximum X speed" + +msgid "Maximum Y speed" +msgstr "Maximum Y speed" + +msgid "Maximum Z speed" +msgstr "Maximum Z speed" + +msgid "Maximum E speed" +msgstr "Maximum E speed" + +msgid "Maximum acceleration X" +msgstr "Accelerazione massima X" + +msgid "Maximum acceleration Y" +msgstr "Accelerazione massima Y" + +msgid "Maximum acceleration Z" +msgstr "Accelerazione massima Z" + +msgid "Maximum acceleration E" +msgstr "Accelerazione massima E" + +msgid "Maximum acceleration of the X axis" +msgstr "Accelerazione massima dell'asse X" + +msgid "Maximum acceleration of the Y axis" +msgstr "Accelerazione massima dell'asse Y" + +msgid "Maximum acceleration of the Z axis" +msgstr "Accelerazione massima dell'asse Z" + +msgid "Maximum acceleration of the E axis" +msgstr "Accelerazione massima dell'asse E" + +msgid "Maximum jerk X" +msgstr "Jerk massimo X" + +msgid "Maximum jerk Y" +msgstr "Jerk massimo Y" + +msgid "Maximum jerk Z" +msgstr "Jerk massimo Z" + +msgid "Maximum jerk E" +msgstr "Jerk massimo E" + +msgid "Maximum jerk of the X axis" +msgstr "Jerk massimo dell'asse X" + +msgid "Maximum jerk of the Y axis" +msgstr "Jerk massimo dell'asse Y" + +msgid "Maximum jerk of the Z axis" +msgstr "Jerk massimo dell'asse Z" + +msgid "Maximum jerk of the E axis" +msgstr "Jerk massimo dell'asse E" + +msgid "Minimum speed for extruding" +msgstr "Minimum speed for extruding" + +msgid "Minimum speed for extruding (M205 S)" +msgstr "Minimum speed for extruding (M205 S)" + +msgid "Minimum travel speed" +msgstr "Minimum travel speed" + +msgid "Minimum travel speed (M205 T)" +msgstr "Minimum travel speed (M205 T)" + +msgid "Maximum acceleration for extruding" +msgstr "Maximum acceleration for extruding" + +msgid "Maximum acceleration for extruding (M204 P)" +msgstr "Maximum acceleration for extruding (M204 P)" + +msgid "Maximum acceleration for retracting" +msgstr "Maximum acceleration for retracting" + +msgid "Maximum acceleration for retracting (M204 R)" +msgstr "Maximum acceleration for retracting (M204 R)" + +msgid "Maximum acceleration for travel" +msgstr "Maximum acceleration for travel" + +msgid "Maximum acceleration for travel (M204 T)" +msgstr "Maximum acceleration for travel (M204 T)" + +msgid "Fan speed" +msgstr "Velocità ventola" + +msgid "" +"Part cooling fan speed may be increased when auto cooling is enabled. This " +"is the maximum speed limitation of part cooling fan" +msgstr "" +"The part cooling fan speed may be increased when auto cooling is enabled. " +"This is the maximum speed for the part cooling fan." + +msgid "Max" +msgstr "Massimo" + +msgid "" +"The largest printable layer height for extruder. Used tp limits the maximum " +"layer hight when enable adaptive layer height" +msgstr "" +"The highest printable layer height for the extruder: this is used to limit " +"the maximum layer height when adaptive layer height is enabled." + +msgid "Minimum speed for part cooling fan" +msgstr "Minimum speed for part cooling fan" + +msgid "" +"Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed " +"during printing except the first several layers which is defined by no " +"cooling layers" +msgstr "" +"This is the speed of auxiliary part cooling fan. The auxiliary fan will run " +"at this speed during printing except for during the first several layers " +"which may be set to have no part cooling." + +msgid "Min" +msgstr "Minimo" + +msgid "" +"The lowest printable layer height for extruder. Used tp limits the minimum " +"layer hight when enable adaptive layer height" +msgstr "" +"The lowest printable layer height for the extruder. This is used to limit " +"the minimum layer height when adaptive layer height is enabled." + +msgid "Min print speed" +msgstr "Velocità minima di stampa" + +msgid "The minimum printing speed when slow down for cooling" +msgstr "The minimum printing speed when slowing down for cooling." + +msgid "Nozzle diameter" +msgstr "Diametro ugello" + +msgid "Diameter of nozzle" +msgstr "The diameter of the nozzle" + +msgid "Host Type" +msgstr "" + +msgid "" +"Slic3r can upload G-code files to a printer host. This field must contain " +"the kind of the host." +msgstr "" + +msgid "Nozzle volume" +msgstr "Nozzle volume" + +msgid "Volume of nozzle between the cutter and the end of nozzle" +msgstr "Volume of nozzle between the filament cutter and the end of the nozzle" + +msgid "Reduce infill retraction" +msgstr "Reduce infill retraction" + +msgid "" +"Don't retract when the travel is in infill area absolutely. That means the " +"oozing can't been seen. This can reduce times of retraction for complex " +"model and save printing time, but make slicing and G-code generating slower" +msgstr "" + +msgid "Enable" +msgstr "Abilita" + +msgid "Filename format" +msgstr "Filename format" + +msgid "User can self-define the project file name when export" +msgstr "Users can decide project file names when exporting." + +msgid "Detect overhang wall" +msgstr "Detect overhang walls" + +#, c-format, boost-format +msgid "" +"Detect the overhang percentage relative to line width and use different " +"speed to print. For 100%% overhang, bridge speed is used." +msgstr "" +"This detects the overhang percentage relative to line width and uses a " +"different speed to print. For 100%% overhang, bridging speed is used." + +msgid "Line width of inner wall" +msgstr "Line width of inner walls" + +msgid "Speed of inner wall" +msgstr "This is the speed for inner walls." + +msgid "Number of walls of every layer" +msgstr "This is the number of walls per layer." + +msgid "Raft contact Z distance" +msgstr "Distanza di contatto Z Raft" + +msgid "Z gap between object and raft. Ignored for soluble interface" +msgstr "" +"This is the Z gap between an object and a raft. It is ignored for soluble " +"interfaces." + +msgid "Raft expansion" +msgstr "Espansione del raft" + +msgid "Expand all raft layers in XY plane" +msgstr "This expands all raft layers in XY plane." + +msgid "Initial layer density" +msgstr "First layer density" + +msgid "Density of the first raft or support layer" +msgstr "This is the density of the first raft or support layer." + +msgid "Initial layer expansion" +msgstr "First layer expansion" + +msgid "Expand the first raft or support layer to improve bed plate adhesion" +msgstr "This expands the first raft or support layer to improve bed adhesion." + +msgid "Raft layers" +msgstr "Layer raft" + +msgid "" +"Object will be raised by this number of support layers. Use this function to " +"avoid wrapping when print ABS" +msgstr "" +"Object will be raised by this number of support layers. Use this function to " +"avoid warping when printing ABS." + +msgid "" +"G-code path is genereated after simplifing the contour of model to avoid too " +"much points and gcode lines in gcode file. Smaller value means higher " +"resolution and more time to slice" +msgstr "" +"The G-code path is generated after simplifying the contour of models to " +"avoid too many points and G-code lines. Smaller values mean higher " +"resolution and more time required to slice." + +msgid "Travel distance threshold" +msgstr "Travel distance threshold" + +msgid "" +"Only trigger retraction when the travel distance is longer than this " +"threshold" +msgstr "" +"Only trigger retraction when the travel distance is longer than this " +"threshold." + +msgid "Retract amount before wipe" +msgstr "Retrai la quantità prima di pulire" + +msgid "" +"The length of fast retraction before wipe, relative to retraction length" +msgstr "" +"This is the length of fast retraction before a wipe, relative to retraction " +"length." + +msgid "Retract when change layer" +msgstr "Retract on layer change" + +msgid "Force a retraction when changes layer" +msgstr "This forces a retraction on layer changes." + +msgid "Length" +msgstr "Lunghezza" + +msgid "Retraction Length" +msgstr "Lunghezza Retrazione" + +msgid "" +"Some amount of material in extruder is pulled back to avoid ooze during long " +"travel. Set zero to disable retraction" +msgstr "" +"This is the amount of filament in the extruder that is pulled back to avoid " +"oozing during long travel distances. Set to 0 to disable retraction." + +msgid "Z hop when retract" +msgstr "Z hop when retracting" + +msgid "" +"Whenever the retraction is done, the nozzle is lifted a little to create " +"clearance between nozzle and the print. It prevents nozzle from hitting the " +"print when travel move. Using spiral line to lift z can prevent stringing" +msgstr "" +"Whenever there is a retraction, the nozzle is lifted a little to create " +"clearance between the nozzle and the print. This prevents the nozzle from " +"hitting the print when traveling more. Using spiral lines to lift z can " +"prevent stringing." + +msgid "Retraction Speed" +msgstr "Velocità di retrazione" + +msgid "Speed of retractions" +msgstr "This is the speed for retraction." + +msgid "Deretraction Speed" +msgstr "Velocità di deretrazione" + +msgid "" +"Speed for reloading filament into extruder. Zero means same speed with " +"retraction" +msgstr "" +"The speed for reloading filament into the extruder after a retraction; " +"setting this to 0 means that it will be the same speed as the retraction." + +msgid "Seam position" +msgstr "Posizione giunzione" + +msgid "The start position to print each part of outer wall" +msgstr "This is the starting position for each part of the outer wall." + +msgid "Nearest" +msgstr "Più vicino" + +msgid "Aligned" +msgstr "Allineato" + +msgid "Back" +msgstr "Back" + +msgid "Random" +msgstr "" + +msgid "Skirt distance" +msgstr "Skirt distance" + +msgid "Distance from skirt to brim or object" +msgstr "This is the distance from the skirt to the brim or the object." + +msgid "Skirt loops" +msgstr "Skirt loops" + +msgid "Number of loops for the skirt. Zero means disabling skirt" +msgstr "" +"This is the number of loops for the skirt. 0 means the skirt is disabled." + +msgid "" +"The printing speed in exported gcode will be slowed down, when the estimated " +"layer time is shorter than this value, to get better cooling for these layers" +msgstr "" +"The printing speed in exported G-code will be slowed down when the estimated " +"layer time is shorter than this value in order to get better cooling for " +"these layers." + +msgid "Minimum sparse infill threshold" +msgstr "Minimum sparse infill threshold" + +msgid "" +"Sparse infill area which is smaller than threshold value is replaced by " +"internal solid infill" +msgstr "" +"Sparse infill areas which are smaller than this threshold value are replaced " +"by internal solid infill." + +msgid "mm²" +msgstr "mm²" + +msgid "Line width of internal solid infill" +msgstr "Line width of internal solid infill" + +msgid "Speed of internal solid infill, not the top and bottom surface" +msgstr "" +"This is the speed for internal solid infill, not including the top or bottom " +"surface." + +msgid "Spiral vase" +msgstr "" + +msgid "" +"Spiralize smooths out the z moves of the outer contour. And turns a solid " +"model into a single walled print with solid bottom layers. The final " +"generated model has no seam" +msgstr "" +"This enables spiraling, which smooths out the Z moves of the outer contour " +"and turns a solid model into a single walled print with solid bottom layers. " +"The final generated model has no seam." + +msgid "" +"If smooth or traditional mode is selected, a timelapse video will be " +"generated for each print. After each layer is printed, a snapshot is taken " +"with the chamber camera. All of these snapshots are composed into a " +"timelapse video when printing completes. If smooth mode is selected, the " +"toolhead will move to the excess chute after each layer is printed and then " +"take a snapshot. Since the melt filament may leak from the nozzle during the " +"process of taking a snapshot, prime tower is required for smooth mode to " +"wipe nozzle." +msgstr "" + +msgid "Traditional" +msgstr "" + +msgid "Temperature variation" +msgstr "Variazione di temperatura" + +msgid "Start G-code" +msgstr "G-code iniziale" + +msgid "Start G-code when start the whole printing" +msgstr "G-code added when starting a print" + +msgid "Start G-code when start the printing of this filament" +msgstr "G-code added when the printer starts using this filament" + +msgid "Slice gap closing radius" +msgstr "" + +msgid "" +"Cracks smaller than 2x gap closing radius are being filled during the " +"triangle mesh slicing. The gap closing operation may reduce the final print " +"resolution, therefore it is advisable to keep the value reasonably low." +msgstr "" + +msgid "Slicing Mode" +msgstr "" + +msgid "" +"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " +"close all holes in the model." +msgstr "" + +msgid "Regular" +msgstr "" + +msgid "Even-odd" +msgstr "" + +msgid "Close holes" +msgstr "" + +msgid "Enable support" +msgstr "Enable support" + +msgid "Enable support generation." +msgstr "This enables support generation." + +msgid "" +"normal(auto) and tree(auto) is used to generate support automatically. If " +"normal(manual) or tree(manual) is selected, only support enforcers are " +"generated" +msgstr "" + +msgid "normal(auto)" +msgstr "normal(auto)" + +msgid "tree(auto)" +msgstr "tree(auto)" + +msgid "normal(manual)" +msgstr "" + +msgid "tree(manual)" +msgstr "" + +msgid "Support/object xy distance" +msgstr "Support/object xy distance" + +msgid "XY separation between an object and its support" +msgstr "Separazione XY tra un oggetto e il suo supporto" + +msgid "Pattern angle" +msgstr "Angolo trama" + +msgid "Use this setting to rotate the support pattern on the horizontal plane." +msgstr "" +"Use this setting to rotate the support pattern on the horizontal plane." + +msgid "On build plate only" +msgstr "On build plate only" + +msgid "Don't create support on model surface, only on build plate" +msgstr "This setting only generates supports that begin on the build plate." + +msgid "Support critical regions only" +msgstr "" + +msgid "" +"Only create support for critical regions including sharp tail, cantilever, " +"etc." +msgstr "" + +msgid "Top Z distance" +msgstr "Top Z distance" + +msgid "The z gap between the top support interface and object" +msgstr "This determines the Z gap between top support interfaces and objects." + +msgid "Bottom Z distance" +msgstr "" + +msgid "The z gap between the bottom support interface and object" +msgstr "" + +msgid "Support base" +msgstr "" + +msgid "" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" +msgstr "" + +msgid "Line width of support" +msgstr "Line width of support" + +msgid "Interface use loop pattern" +msgstr "Loop pattern interface" + +msgid "" +"Cover the top contact layer of the supports with loops. Disabled by default." +msgstr "" +"Copre con anelli il layer superiore del supporto a contatto. Disattivato per " +"impostazione predefinita." + +msgid "" +"Filament to print support interface. \"Default\" means no specific filament " +"for support interface and current filament is used" +msgstr "" + +msgid "Top interface layers" +msgstr "Layer superiori di interfaccia " + +msgid "Number of top interface layers" +msgstr "This is the number of top interface layers." + +msgid "Bottom interface layers" +msgstr "Layer inferiori di interfaccia " + +msgid "Top interface spacing" +msgstr "Top interface spacing" + +msgid "Spacing of interface lines. Zero means solid interface" +msgstr "This is the spacing of interface lines. 0 means solid interface." + +msgid "Bottom interface spacing" +msgstr "Bottom interface spacing" + +msgid "Spacing of bottom interface lines. Zero means solid interface" +msgstr "" +"This is the spacing of bottom interface lines. 0 means solid interface." + +msgid "Speed of support interface" +msgstr "This is the speed for support interfaces." + +msgid "Base pattern" +msgstr "Base pattern" + +msgid "Line pattern of support" +msgstr "This is the line pattern for support." + +msgid "Rectilinear grid" +msgstr "Griglia rettilinea" + +msgid "Hollow" +msgstr "" + +msgid "Interface pattern" +msgstr "Trama interfaccia" + +msgid "" +"Line pattern of support interface. Default pattern for non-soluble support " +"interface is Rectilinear, while default pattern for soluble support " +"interface is Concentric" +msgstr "" +"This is the line pattern for support interfaces. The default pattern for non-" +"soluble support interfaces is Rectilinear while the default pattern for " +"soluble support interfaces is Concentric." + +msgid "Base pattern spacing" +msgstr "Base pattern spacing" + +msgid "Spacing between support lines" +msgstr "This determines the spacing between support lines." + +msgid "Normal Support expansion" +msgstr "" + +msgid "Expand (+) or shrink (-) the horizontal span of normal support" +msgstr "" + +msgid "Speed of support" +msgstr "This is the speed for support." + +msgid "Style" +msgstr "Stile" + +msgid "" +"Style and shape of the support. For normal support, projecting the supports " +"into a regular grid will create more stable supports (default), while snug " +"support towers will save material and reduce object scarring.\n" +"For tree support, tight style will merge branches more aggressively and save " +"a lot of material (default), while hybrid style will create similar " +"structure to normal support under large flat overhangs." +msgstr "" + +msgid "Snug" +msgstr "Aderenti" + +msgid "Tree Slim" +msgstr "" + +msgid "Tree Strong" +msgstr "" + +msgid "Tree Hybrid" +msgstr "" + +msgid "Independent support layer height" +msgstr "Independent support layer height" + +msgid "" +"Support layer uses layer height independent with object layer. This is to " +"support customizing z-gap and save print time." +msgstr "" + +msgid "Threshold angle" +msgstr "Threshold angle" + +msgid "" +"Support will be generated for overhangs whose slope angle is below the " +"threshold." +msgstr "" +"Support will be generated for overhangs whose slope angle is below this " +"threshold." + +msgid "Tree support branch angle" +msgstr "Tree support branch angle" + +msgid "" +"This setting determines the maximum overhang angle that t he branches of " +"tree support allowed to make.If the angle is increased, the branches can be " +"printed more horizontally, allowing them to reach farther." +msgstr "" +"This setting determines the maximum overhang angle that the branches of tree " +"support are allowed to make. If the angle is increased, the branches can be " +"printed more horizontally, allowing them to reach farther." + +msgid "Tree support branch distance" +msgstr "Tree support branch distance" + +msgid "" +"This setting determines the distance between neighboring tree support nodes." +msgstr "" +"This setting determines the distance between neighboring tree support nodes." + +msgid "Tree support branch diameter" +msgstr "Tree support branch diameter" + +msgid "This setting determines the initial diameter of support nodes." +msgstr "This setting determines the initial diameter of support nodes." + +msgid "Tree support wall loops" +msgstr "Tree support wall loops" + +msgid "This setting specify the count of walls around tree support" +msgstr "This setting specifies the wall count around tree support." + +msgid "Nozzle temperature for layers after the initial one" +msgstr "Nozzle temperature after the first layer" + +msgid "Nozzle temperature" +msgstr "Temperatura ugello" + +msgid "Bed temperature difference" +msgstr "Bed temperature difference" + +msgid "" +"Do not recommand bed temperature of other layer to be lower than initial " +"layer for more than this threshold. Too low bed temperature of other layer " +"may cause the model broken free from build plate" +msgstr "" +"It is not recommended to have the bed temperature of other layers to be " +"lower than the first layer by more than this threshold. Bed temperatures " +"that are too low may cause models to break free from the build plate." + +msgid "Detect thin wall" +msgstr "Detect thin walls" + +msgid "" +"Detect thin wall which can't contain two line width. And use single line to " +"print. Maybe printed not very well, because it's not closed loop" +msgstr "" +"This detects thin walls which can’t contain two lines and uses a single line " +"to print. It may not print as well because it’s not a closed loop." + +msgid "" +"This gcode is inserted when change filament, including T command to trigger " +"tool change" +msgstr "" +"This G-code is inserted when filament is changed, including T commands to " +"trigger tool change." + +msgid "Line width for top surfaces" +msgstr "Line width for top surfaces" + +msgid "Speed of top surface infill which is solid" +msgstr "This is the speed for solid top surface infill." + +msgid "Top shell layers" +msgstr "Top shell layers" + +msgid "" +"This is the number of solid layers of top shell, including the top surface " +"layer. When the thickness calculated by this value is thinner than top shell " +"thickness, the top shell layers will be increased" +msgstr "" +"This is the number of solid layers of top shell, including the top surface " +"layer. When the thickness calculated by this value is thinner than the top " +"shell thickness, the top shell layers will be increased" + +msgid "Top solid layers" +msgstr "Layer solidi superiori" + +msgid "Top shell thickness" +msgstr "Top shell thickness" + +msgid "" +"The number of top solid layers is increased when slicing if the thickness " +"calculated by top shell layers is thinner than this value. This can avoid " +"having too thin shell when layer height is small. 0 means that this setting " +"is disabled and thickness of top shell is absolutely determained by top " +"shell layers" +msgstr "" +"The number of top solid layers is increased when slicing if the thickness " +"calculated by top shell layers is thinner than this value. This can avoid " +"having too thin a shell when layer height is small. 0 means that this " +"setting is disabled and thickness of top shell is determined simply by the " +"number of top shell layers." + +msgid "Speed of travel which is faster and without extrusion" +msgstr "This is the speed at which traveling is done." + +msgid "Wipe while retracting" +msgstr "Pulisci durante la retrazione" + +msgid "" +"Move nozzle along the last extrusion path when retracting to clean leaked " +"material on nozzle. This can minimize blob when print new part after travel" +msgstr "" +"This moves the nozzle along the last extrusion path when retracting to clean " +"any leaked material on the nozzle. This can minimize blobs when printing a " +"new part after traveling." + +msgid "Wipe Distance" +msgstr "Wipe distance" + +msgid "" +"Discribe how long the nozzle will move along the last path when retracting" +msgstr "" +"This describes how long the nozzle will move along the last path while " +"retracting." + +msgid "" +"Print a tower to prime material in nozzle after switching to a new material." +msgstr "" +"This option enables printing a tower to prime material in the nozzle after " +"switching to a new material." + +msgid "Purging volumes" +msgstr "Volumi di spurgo" + +msgid "Flush multiplier" +msgstr "Flush multiplier" + +msgid "" +"The actual flushing volumes is equal to the flush multiplier multiplied by " +"the flushing volumes in the table." +msgstr "" + +msgid "Prime volume" +msgstr "Prime volume" + +msgid "The volume of material to prime extruder on tower." +msgstr "" +"This is the volume of material to prime the extruder with on the tower." + +msgid "Width" +msgstr "Larghezza" + +msgid "Width of prime tower" +msgstr "This is the width of prime towers." + +msgid "" +"Purging after filament change will be done inside objects' infills. This may " +"lower the amount of waste and decrease the print time. If the walls are " +"printed with transparent filament, the mixed color infill will be seen " +"outside. It will not take effect, unless the prime tower is enabled." +msgstr "" + +msgid "" +"Purging after filament change will be done inside objects' support. This may " +"lower the amount of waste and decrease the print time. It will not take " +"effect, unless the prime tower is enabled." +msgstr "" + +msgid "" +"This object will be used to purge the nozzle after a filament change to save " +"filament and decrease the print time. Colours of the objects will be mixed " +"as a result. It will not take effect, unless the prime tower is enabled." +msgstr "" + +msgid "X-Y hole compensation" +msgstr "X-Y hole compensation" + +msgid "" +"Holes of object will be grown or shrunk in XY plane by the configured value. " +"Positive value makes holes bigger. Negative value makes holes smaller. This " +"function is used to adjust size slightly when the object has assembling issue" +msgstr "" +"Holes in objects will be grown or shrunk in the XY plane by the set value. " +"Positive values make holes bigger and negative values make holes smaller. " +"This function is used to adjust size slightly when objects have assembly " +"issues." + +msgid "X-Y contour compensation" +msgstr "X-Y contour compensation" + +msgid "" +"Contour of object will be grown or shrunk in XY plane by the configured " +"value. Positive value makes contour bigger. Negative value makes contour " +"smaller. This function is used to adjust size slightly when the object has " +"assembling issue" +msgstr "" +"The contour of objects will be grown or shrunk in the XY plane by the set " +"value. Positive values make contours bigger, and negative values make " +"contours smaller. This function is used to adjust sizes slightly when " +"objects have assembly issues." + +msgid "" +"Classic wall generator produces walls with constant extrusion width and for " +"very thin areas is used gap-fill. Arachne engine produces walls with " +"variable extrusion width" +msgstr "" + +msgid "Classic" +msgstr "" + +msgid "Arachne" +msgstr "" + +msgid "Wall transition length" +msgstr "" + +msgid "" +"When transitioning between different numbers of walls as the part becomes " +"thinner, a certain amount of space is allotted to split or join the wall " +"segments. It's expressed as a percentage over nozzle diameter" +msgstr "" + +msgid "Wall transitioning filter margin" +msgstr "" + +msgid "" +"Prevent transitioning back and forth between one extra wall and one less. " +"This margin extends the range of extrusion widths which follow to [Minimum " +"wall width - margin, 2 * Minimum wall width + margin]. Increasing this " +"margin reduces the number of transitions, which reduces the number of " +"extrusion starts/stops and travel time. However, large extrusion width " +"variation can lead to under- or overextrusion problems. It's expressed as a " +"percentage over nozzle diameter" +msgstr "" + +msgid "Wall transitioning threshold angle" +msgstr "" + +msgid "" +"When to create transitions between even and odd numbers of walls. A wedge " +"shape with an angle greater than this setting will not have transitions and " +"no walls will be printed in the center to fill the remaining space. Reducing " +"this setting reduces the number and length of these center walls, but may " +"leave gaps or overextrude" +msgstr "" + +msgid "Wall distribution count" +msgstr "" + +msgid "" +"The number of walls, counted from the center, over which the variation needs " +"to be spread. Lower values mean that the outer walls don't change in width" +msgstr "" + +msgid "Minimum feature size" +msgstr "" + +msgid "" +"Minimum thickness of thin features. Model features that are thinner than " +"this value will not be printed, while features thicker than the Minimum " +"feature size will be widened to the Minimum wall width. It's expressed as a " +"percentage over nozzle diameter" +msgstr "" + +msgid "Minimum wall width" +msgstr "" + +msgid "" +"Width of the wall that will replace thin features (according to the Minimum " +"feature size) of the model. If the Minimum wall width is thinner than the " +"thickness of the feature, the wall will become as thick as the feature " +"itself. It's expressed as a percentage over nozzle diameter" +msgstr "" + +msgid "Detect narrow internal solid infill" +msgstr "Detect narrow internal solid infill" + +msgid "" +"This option will auto detect narrow internal solid infill area. If enabled, " +"concentric pattern will be used for the area to speed printing up. " +"Otherwise, rectilinear pattern is used defaultly." +msgstr "" +"This option will auto-detect narrow internal solid infill areas. If enabled, " +"the concentric pattern will be used for the area to speed up printing. " +"Otherwise, the rectilinear pattern will be used by default." + +msgid "Export 3MF" +msgstr "Esporta 3MF" + +msgid "Export project as 3MF." +msgstr "This exports the project as a 3mf file." + +msgid "Export slicing data" +msgstr "" + +msgid "Export slicing data to a folder." +msgstr "" + +msgid "Load slicing data" +msgstr "" + +msgid "Load cached slicing data from directory" +msgstr "" + +msgid "Slice the plates: 0-all plates, i-plate i, others-invalid" +msgstr "Slice the plates: 0-all plates, i-plate i, others-invalid" + +msgid "Show command help." +msgstr "This shows command help." + +msgid "UpToDate" +msgstr "" + +msgid "Update the configs values of 3mf to latest." +msgstr "" + +msgid "Output Model Info" +msgstr "Info Modello di output" + +msgid "Output the model's information." +msgstr "This outputs the model’s information." + +msgid "Export Settings" +msgstr "Export Settings" + +msgid "Export settings to a file." +msgstr "This exports settings to a file." + +msgid "Send progress to pipe" +msgstr "" + +msgid "Send progress to pipe." +msgstr "" + +msgid "Arrange Options" +msgstr "Arrange Options" + +msgid "Arrange options: 0-disable, 1-enable, others-auto" +msgstr "Arrange options: 0-disable, 1-enable, others-auto" + +msgid "Convert Unit" +msgstr "Convert Unit" + +msgid "Convert the units of model" +msgstr "Convert the units of model" + +msgid "Orient the model" +msgstr "Orient the model" + +msgid "Scale the model by a float factor" +msgstr "Scale the model by a float factor" + +msgid "Load General Settings" +msgstr "Load General Settings" + +msgid "Load process/machine settings from the specified file" +msgstr "Load process/machine settings from the specified file" + +msgid "Load Filament Settings" +msgstr "Load Filament Settings" + +msgid "Load filament settings from the specified file list" +msgstr "Load filament settings from the specified file list" + +msgid "Output directory" +msgstr "Output directory" + +msgid "Output directory for the exported files." +msgstr "This is the output directory for exported files." + +msgid "Debug level" +msgstr "Debug level" + +msgid "" +"Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" +"trace\n" +msgstr "" +"Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" +"trace\n" + +msgid "Error in zip archive" +msgstr "Error in zip archive" + +msgid "Generating walls" +msgstr "Generating walls" + +msgid "Generating infill regions" +msgstr "Generating infill regions" + +msgid "Generating infill toolpath" +msgstr "Generating infill toolpath" + +msgid "Generating support" +msgstr "Generating support" + +msgid "Checking support necessity" +msgstr "Checking support necessity" + +#, c-format, boost-format +msgid "" +"It seems object %s has completely floating regions. Please re-orient the " +"object or enable support generation." +msgstr "" + +#, c-format, boost-format +msgid "" +"It seems object %s has large overhangs. Please enable support generation." +msgstr "" + +msgid "Optimizing toolpath" +msgstr "Optimizing toolpath" + +msgid "Empty layers around bottom are replaced by nearest normal layers." +msgstr "Empty layers around bottom are replaced by nearest normal layers." + +msgid "The model has too many empty layers." +msgstr "" + +msgid "Slicing mesh" +msgstr "Slicing mesh" + +#, c-format, boost-format +msgid "Support: generate toolpath at layer %d" +msgstr "Support: generate toolpath at layer %d" + +msgid "Support: detect overhangs" +msgstr "Support: detect overhangs" + +msgid "Support: generate contact points" +msgstr "Support: generate contact points" + +msgid "Support: propagate branches" +msgstr "Support: propagate branches" + +msgid "Support: draw polygons" +msgstr "Support: draw polygons" + +msgid "Support: generate toolpath" +msgstr "Support: generate toolpath" + +#, c-format, boost-format +msgid "Support: generate polygons at layer %d" +msgstr "Support: generate polygons at layer %d" + +#, c-format, boost-format +msgid "Support: fix holes at layer %d" +msgstr "Support: fix holes at layer %d" + +#, c-format, boost-format +msgid "Support: propagate branches at layer %d" +msgstr "Support: propagate branches at layer %d" + +#: resources/data/hints.ini: [hint:3D Scene Operations] +msgid "" +"3D Scene Operations\n" +"Did you know how to control view and object/part selection with mouse and " +"touchpanel in the 3D scene?" +msgstr "" + +#: resources/data/hints.ini: [hint:Cut Tool] +msgid "" +"Cut Tool\n" +"Did you know that you can cut a model at any angle and position with the " +"cutting tool?" +msgstr "" + +#: resources/data/hints.ini: [hint:Fix Model] +msgid "" +"Fix Model\n" +"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " +"problems?" +msgstr "" + +#: resources/data/hints.ini: [hint:Timelapse] +msgid "" +"Timelapse\n" +"Did you know that you can generate a timelapse video during each print?" +msgstr "" + +#: resources/data/hints.ini: [hint:Auto-Arrange] +msgid "" +"Auto-Arrange\n" +"Did you know that you can auto-arrange all objects in your project?" +msgstr "" + +#: resources/data/hints.ini: [hint:Auto-Orient] +msgid "" +"Auto-Orient\n" +"Did you know that you can rotate objects to an optimal orientation for " +"printing by a simple click?" +msgstr "" + +#: resources/data/hints.ini: [hint:Lay on Face] +msgid "" +"Lay on Face\n" +"Did you know that you can quickly orient a model so that one of its faces " +"sits on the print bed? Select the \"Place on face\" function or press the " +"F key." +msgstr "" + +#: resources/data/hints.ini: [hint:Object List] +msgid "" +"Object List\n" +"Did you know that you can view all objects/parts in a list and change " +"settings for each object/part?" +msgstr "" + +#: resources/data/hints.ini: [hint:Simplify Model] +msgid "" +"Simplify Model\n" +"Did you know that you can reduce the number of triangles in a mesh using the " +"Simplify mesh feature? Right-click the model and select Simplify model. Read " +"more in the documentation." +msgstr "" + +#: resources/data/hints.ini: [hint:Slicing Parameter Table] +msgid "" +"Slicing Parameter Table\n" +"Did you know that you can view all objects/parts on a table and change " +"settings for each object/part?" +msgstr "" + +#: resources/data/hints.ini: [hint:Split to Objects/Parts] +msgid "" +"Split to Objects/Parts\n" +"Did you know that you can split a big object into small ones for easy " +"colorizing or printing?" +msgstr "" + +#: resources/data/hints.ini: [hint:Subtract a Part] +msgid "" +"Subtract a Part\n" +"Did you know that you can subtract one mesh from another using the Negative " +"part modifier? That way you can, for example, create easily resizable holes " +"directly in Bambu Studio. Read more in the documentation." +msgstr "" + +#: resources/data/hints.ini: [hint:STEP] +msgid "" +"STEP\n" +"Did you know that you can improve your print quality by slicing a STEP file " +"instead of an STL?\n" +"Bambu Studio supports slicing STEP files, providing smoother results than a " +"lower resolution STL. Give it a try!" +msgstr "" + +#: resources/data/hints.ini: [hint:Z seam location] +msgid "" +"Z seam location\n" +"Did you know that you can customize the location of the Z seam, and even " +"paint it on your print, to have it in a less visible location? This improves " +"the overall look of your model. Check it out!" +msgstr "" + +#: resources/data/hints.ini: [hint:Fine-tuning for flow rate] +msgid "" +"Fine-tuning for flow rate\n" +"Did you know that flow rate can be fine-tuned for even better-looking " +"prints? Depending on the material, you can improve the overall finish of the " +"printed model by doing some fine-tuning." +msgstr "" + +#: resources/data/hints.ini: [hint:Split your prints into plates] +msgid "" +"Split your prints into plates\n" +"Did you know that you can split a model that has a lot of parts into " +"individual plates ready to print? This will simplify the process of keeping " +"track of all the parts." +msgstr "" + +#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer +#: Height] +msgid "" +"Speed up your print with Adaptive Layer Height\n" +"Did you know that you can print a model even faster, by using the Adaptive " +"Layer Height option? Check it out!" +msgstr "" + +#: resources/data/hints.ini: [hint:Support painting] +msgid "" +"Support painting\n" +"Did you know that you can paint the location of your supports? This feature " +"makes it easy to place the support material only on the sections of the " +"model that actually need it." +msgstr "" + +#: resources/data/hints.ini: [hint:Different types of supports] +msgid "" +"Different types of supports\n" +"Did you know that you can choose from multiple types of supports? Tree " +"supports work great for organic models, while saving filament and improving " +"print speed. Check them out!" +msgstr "" + +#: resources/data/hints.ini: [hint:Printing Silk Filament] +msgid "" +"Printing Silk Filament\n" +"Did you know that Silk filament needs special consideration to print it " +"successfully? Higher temperature and lower speed are always recommended for " +"the best results." +msgstr "" + +#: resources/data/hints.ini: [hint:Brim for better adhesion] +msgid "" +"Brim for better adhesion\n" +"Did you know that when printing models have a small contact interface with " +"the printing surface, it's recommended to use a brim?" +msgstr "" + +#: resources/data/hints.ini: [hint:Set parameters for multiple objects] +msgid "" +"Set parameters for multiple objects\n" +"Did you know that you can set slicing parameters for all selected objects at " +"one time?" +msgstr "" + +#: resources/data/hints.ini: [hint:Stack objects] +msgid "" +"Stack objects\n" +"Did you know that you can stack objects as a whole one?" +msgstr "" + +#: resources/data/hints.ini: [hint:Flush into support/objects/infill] +msgid "" +"Flush into support/objects/infill\n" +"Did you know that you can save the wasted filament by flushing them into " +"support/objects/infill during filament change?" +msgstr "" + +#: resources/data/hints.ini: [hint:Improve strength] +msgid "" +"Improve strength\n" +"Did you know that you can use more wall loops and higher sparse infill " +"density to improve the strength of the model?" +msgstr "" + +#~ msgid "" +#~ "\n" +#~ "%1% is too close to exclusion area, there will be collisions when " +#~ "printing." +#~ msgstr "" +#~ "\n" +#~ "%1% is too close to an exclusion area; there will be collisions when " +#~ "printing." + +#~ msgid "" +#~ "%1% is too close to exclusion area, there will be collisions when " +#~ "printing." +#~ msgstr "" +#~ "%1% is too close to an exclusion area; there will be collisions when " +#~ "printing." + +#~ msgid "0%" +#~ msgstr "0%" + +#~ msgid "Adaptive layer height" +#~ msgstr "Adaptive layer height" + +#~ msgid "" +#~ "An object is layed over the boundary of plate.\n" +#~ "Please solve the problem by moving it totally inside or outside plate." +#~ msgstr "" +#~ "An object is laid over the edge of the plate or exceeds the height " +#~ "limit.\n" +#~ "Please solve the problem by moving it totally on or off the plate, and " +#~ "confirming that the height is within the build volume." + +#~ msgid "Auto arrange" +#~ msgstr "Auto Arrange" + +#~ msgid "" +#~ "Auto orientates selected objects or all objects.If there are selected " +#~ "objects, it just orientates the selected ones.Otherwise, it will " +#~ "orientates all objects in the project." +#~ msgstr "" +#~ "This anuto orients selected objects or all objects.\n" +#~ "If there are selected objects, it just orients the selected ones. " +#~ "Otherwise, it will orient all objects in the project." + +#~ msgid "Aux Cooling" +#~ msgstr "Aux Cooling" + +#~ msgid "Avoid crossing wall when travel" +#~ msgstr "Avoid walls when traveling" + +#~ msgid "" +#~ "Bed temperature is higher than vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause nozzle blocked and printing failure" +#~ msgstr "" +#~ "The bed temperature is higher than the vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause a nozzle blockage or print failure" + +#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" +#~ msgstr "Choose one or more files (3mf/step/stl/obj/amf):" + +#~ msgid "Clear all" +#~ msgstr "Pulisci tutto" + +#~ msgid "" +#~ "Clearance radius around extruder. Used as input of auto-arrange to avoid " +#~ "collision when print object by object" +#~ msgstr "" +#~ "Clearance radius around extruder: used as input for auto-arranging to " +#~ "avoid collisions when printing object by object" + +#~ msgid "Color Print" +#~ msgstr "Color Print (Stampa a Colori)" + +#~ msgid "Comsumption" +#~ msgstr "Consumption" + +#~ msgid "Creating" +#~ msgstr "Creating" + +#~ msgid "Ctrl + Any arrow" +#~ msgstr "Ctrl + Any arrow" + +#~ msgid "Ctrl + Left mouse button" +#~ msgstr "Ctrl + Left mouse button" + +#~ msgid "Debug" +#~ msgstr "Debug" + +#~ msgid "Designer" +#~ msgstr "Designer" + +#~ msgid "Device:" +#~ msgstr "Dispositivo:" + +#~ msgid "Display printable box" +#~ msgstr "Display printable box" + +#~ msgid "Display shadow of objects" +#~ msgstr "Display shadow of objects" + +#~ msgid "Display triangles of models" +#~ msgstr "Display triangles of models" + +#~ msgid "" +#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" +#~ "Contains the following information:\n" +#~ "1. The Process presets\n" +#~ "2. The Filament presets\n" +#~ "3. The Printer presets\n" +#~ msgstr "" +#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" +#~ "This includes the following information:\n" +#~ "1. Process presets\n" +#~ "2. Filament presets\n" +#~ "3. Printer presets\n" + +#~ msgid "" +#~ "Don't retract when the travel is in infill area absolutely. That means " +#~ "the oozing can't been seen" +#~ msgstr "" +#~ "This disables retraction when travel is entirely within an infill area " +#~ "and oozing can’t be seen." + +#~ msgid "" +#~ "Enabling this option means the height of every layer except the first " +#~ "will be automatically calculated during slicing according to the slope of " +#~ "the model’s surface.\n" +#~ "Note that this option only takes effect if no prime tower is generated in " +#~ "current plate." +#~ msgstr "" +#~ "Enabling this option means that the height of each layer after the first " +#~ "will be automatically calculated according to the slope of the model’s " +#~ "surface.\n" +#~ "Please note that this option only takes effect if there is no prime tower " +#~ "generated on the current plate." + +#~ msgid "Enter a search term" +#~ msgstr "Inserire un termine di ricerca" + +#~ msgid "Erase painting" +#~ msgstr "Erase painting" + +#~ msgid "Error at line %1%:\n" +#~ msgstr "Error at line %1%:\n" + +#~ msgid "Export Sliced File" +#~ msgstr "Export Sliced File" + +#~ msgid "Export current Sliced file" +#~ msgstr "Export Sliced File" + +#~ msgid "Export ok." +#~ msgstr "Export ok." + +#~ msgid "Export sliced file" +#~ msgstr "Export Sliced File" + +#~ msgid "Extruder position" +#~ msgstr "Extruder position" + +#~ msgid "Failed" +#~ msgstr "Failed" + +#~ msgid "Filament 1" +#~ msgstr "Filament 1" + +#~ msgid "Filament N XX" +#~ msgstr "Filament N XX" + +#~ msgid "" +#~ "Filament to print support and skirt. 0 means no specific filament for " +#~ "support and current filament is used" +#~ msgstr "" +#~ "This is the filament used to print supports and skirts. 0 means no " +#~ "specific filament for support and the current filament is used." + +#~ msgid "" +#~ "Filament to print support interface. 0 means no specific filament for " +#~ "support interface and current filament is used" +#~ msgstr "" +#~ "This is the filament to print support interfaces. 0 means no specific " +#~ "filament for support interfaces and the current filament is used" + +#~ msgid "Filaments Selection" +#~ msgstr "Filaments selection" + +#~ msgid "Finish" +#~ msgstr "Finish" + +#~ msgid "Finished" +#~ msgstr "Finito" + +#~ msgid "Fix model locally" +#~ msgstr "Fix model locally" + +#~ msgid "Fix model through cloud" +#~ msgstr "Fix model through cloud" + +#~ msgid "Flushed filament" +#~ msgstr "Flushed filament" + +#~ msgid "" +#~ "Force cooling fan to be specific speed when overhang degree of printed " +#~ "part exceeds this value. Expressed as percentage which indicides how much " +#~ "width of the line without support from lower layer" +#~ msgstr "" +#~ "This forces the cooling fan to use a specific speed when overhang degrees " +#~ "of parts exceed the set value. It is expressed as percentage which " +#~ "indicates how much line is acceptable without support from lower layers." + +#~ msgid "Fragment Filter" +#~ msgstr "Fragment Filter" + +#~ msgid "Fragment area" +#~ msgstr "Fragment area" + +#~ msgid "Fragment filter" +#~ msgstr "Fragment filter" + +#~ msgid "" +#~ "Heat the nozzle to target \n" +#~ "temperature" +#~ msgstr "" +#~ "Heat the nozzle to the target \n" +#~ "temperature" + +#~ msgid "Height:" +#~ msgstr "Height:" + +#~ msgid "" +#~ "Height of the clearance cylinder around extruder. Used as input of auto-" +#~ "arrange to avoid collision when print object by object" +#~ msgstr "" +#~ "Height of the clearance cylinder around extruder: used as input for auto-" +#~ "arranging to avoid collisions when printing object by object" + +#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" +#~ msgstr "Import 3MF/STL/STEP/OBJ/AMF" + +#~ msgid "In the calibration of extrusion flow" +#~ msgstr "In the calibration of extrusion flow" + +#~ msgid "In the calibration of laser scanner" +#~ msgstr "In the calibration of laser scanner" + +#~ msgid "Initialize failed [%d]!" +#~ msgstr "Initalization failed [%d]!" + +#~ msgid "Inner wall speed" +#~ msgstr "Inner wall speed" + +#~ msgid "" +#~ "It seems object %s needs support to print. Please enable support " +#~ "generation." +#~ msgstr "" +#~ "It seems object %s needs support to print. Please enable support " +#~ "generation." + +#~ msgid "Line type" +#~ msgstr "Line type" + +#~ msgid "Management" +#~ msgstr "Management" + +#~ msgid "Max travel detour distance" +#~ msgstr "Max travel detour distance" + +#~ msgid "" +#~ "Maximum detour distance for avoiding crossing wall. Don't detour if the " +#~ "detour distance is large than this value" +#~ msgstr "" +#~ "Maximum detour distance for avoiding travel across walls. If the distance " +#~ "is larger than this value, there will be no detour." + +#~ msgid "Module" +#~ msgstr "Module" + +#~ msgid "Monitoring" +#~ msgstr "Monitoring" + +#~ msgid "Monitoring Recording" +#~ msgstr "Monitoring Recording" + +#~ msgid "Open" +#~ msgstr "Open" + +#~ msgid "Open &PrusaSlicer" +#~ msgstr "Apri &PrusaSlicer" + +#~ msgid "Open PrusaSlicer" +#~ msgstr "Apri PrusaSlicer" + +#~ msgid "Output file" +#~ msgstr "File di output" + +#~ msgid "Part Cooling" +#~ msgstr "Part Cooling" + +#~ msgid "Pause(heated bed temperature error)" +#~ msgstr "Pause(heated bed temperature error)" + +#~ msgid "Pause(hotend temperature error)" +#~ msgstr "Pause(hotend temperature error)" + +#~ msgid "Pause(toolhead shell off)" +#~ msgstr "Pause(toolhead shell off)" + +#~ msgid "Per object edit" +#~ msgstr "Per Object Edit" + +#~ msgid "Plate %d: %s does not support filament %s.\n" +#~ msgstr "Plate %d: %s does not support filament %s.\n" + +#~ msgid "Please fill report first." +#~ msgstr "Please fill report first." + +#~ msgid "Please upgrade your printer first" +#~ msgstr "Please update your printer first" + +#~ msgid "Position:" +#~ msgstr "Position:" + +#~ msgid "" +#~ "Preview only mode:\n" +#~ "The loaded file contains gcode only." +#~ msgstr "" +#~ "Preview only mode:\n" +#~ "The loaded file contains G-code only." + +#~ msgid "Preview only mode for gcode file." +#~ msgstr "Preview only mode for G-code file." + +#~ msgid "Printer Selection" +#~ msgstr "Printer Selection" + +#~ msgid "" +#~ "Purging after filament change will be done inside objects' infills. This " +#~ "may lower the amount of waste and decrease the print time. If the walls " +#~ "are printed with transparent filament, the mixed color infill will be " +#~ "seen outside" +#~ msgstr "" +#~ "Purging after filament change will be done inside objects' infill. This " +#~ "may lower the amount of waste and decrease the print time. If the walls " +#~ "are printed with transparent filament, the mixed color infill will be " +#~ "visible." + +#~ msgid "" +#~ "Purging after filament change will be done inside objects' support. This " +#~ "may lower the amount of waste and decrease the print time" +#~ msgstr "" +#~ "Purging after filament change will be done inside objects' support. This " +#~ "may lower the amount of waste and decrease the print time." + +#~ msgid "" +#~ "Push new filament \n" +#~ "into extruder" +#~ msgstr "" +#~ "Push new filament \n" +#~ "into extruder" + +#~ msgid "" +#~ "Record timelapse video of printing without showing toolhead. In this mode " +#~ "the toolhead docks near the excess chute at each layer change, and then a " +#~ "snapshot is taken with the chamber camera. When printing finishes a " +#~ "timelapse video is composed of all the snapshots." +#~ msgstr "" +#~ "Record timelapse video of printing without showing the toolhead. In this " +#~ "mode the toolhead docks near the excess chute at each layer change, and " +#~ "then a snapshot is taken with the chamber camera. When printing finishes, " +#~ "a timelapse video is created from all the snapshots." + +#~ msgid "Reduce Triangles" +#~ msgstr "Reduce Triangles" + +#~ msgid "Reload item" +#~ msgstr "Reload item" + +#~ msgid "Reload items" +#~ msgstr "Reload items" + +#~ msgid "Repair" +#~ msgstr "Ripara" + +#~ msgid "Repair the model's meshes if it is non-manifold mesh" +#~ msgstr "Repair the model’s meshes if they are non-manifold." + +#~ msgid "Report" +#~ msgstr "Report" + +#~ msgid "Rotation:" +#~ msgstr "Rotation:" + +#~ msgid "Save configuration as:" +#~ msgstr "Salva configurazione come:" + +#~ msgid "Sending" +#~ msgstr "Sending" + +#~ msgid "Set pen size" +#~ msgstr "Set pen size" + +#~ msgid "Shift + Any arrow" +#~ msgstr "Shift + Any arrow" + +#~ msgid "Shift + Mouse wheel" +#~ msgstr "Shift + Mouse wheel" + +#~ msgid "Show Model Mesh(TODO)" +#~ msgstr "Show Model Mesh(TODO)" + +#~ msgid "Show Model Shadow(TODO)" +#~ msgstr "Show Model Shadow(TODO)" + +#~ msgid "Show Printable Box(TODO)" +#~ msgstr "Show Printable Box(TODO)" + +#~ msgid "Spiral mode" +#~ msgstr "Spiral/Vase mode" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, \n" +#~ "support is disabled, top shell layers is 0 and sparse infill density is " +#~ "0\n" +#~ msgstr "" +#~ "Spiral (vase) mode only works when wall loops is set to 1, \n" +#~ "support is disabled, top shell layers is 0, and sparse infill density is " +#~ "0\n" + +#~ msgid "Successfully sent.Will automatically jump to the device page in %s s" +#~ msgstr "" +#~ "Successfully sent. Will automatically jump to the device page in %s s" + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support custom support gap,but may cause extra filament switches if " +#~ "support is specified as different extruder with object" +#~ msgstr "" +#~ "The support layer uses layer height independent of object layers. This is " +#~ "to support custom support gaps, but may cause extra filament switches if " +#~ "support is specified as a different filament from the object." + +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - Switch to zig-zag pattern automatically\n" +#~ "No - Reset density to default non-100% value automatically\n" + +#~ msgid "Swith cloud environment, Please login again!" +#~ msgstr "Cloud environment has switched; please login again!" + +#~ msgid "The Config is not compatible and can not be loaded." +#~ msgstr "The configuration is not compatible and cannot be loaded!" + +#~ msgid "" +#~ "The firmware versions of printer and AMS are too low.Please update to the " +#~ "latest version before sending the print job" +#~ msgstr "" +#~ "The firmware versions of the printer and AMS are too low. Please update " +#~ "them to the latest version before sending any print jobs." + +#~ msgid "" +#~ "The model has overlapping or self-intersecting facets. I tried to repair " +#~ "it, however you might want to check the results or repair the input file " +#~ "and retry." +#~ msgstr "" +#~ "The model has overlapping or self-intersecting facets. Repair was " +#~ "attempted, however we recommend checking the results or repairing the " +#~ "input file and retrying." + +#~ msgid "" +#~ "This object will be used to purge the nozzle after a filament change to " +#~ "save filament and decrease the print time. Colours of the objects will be " +#~ "mixed as a result" +#~ msgstr "" +#~ "This object will be used to purge the nozzle after a filament change to " +#~ "save filament and decrease the print time. Colors of the objects will be " +#~ "mixed as a result." + +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support." + +#~ msgid "" +#~ "This setting stands for how much volume of filament can be melted and " +#~ "extruded per second. Printing speed is limited by max volumetric speed, " +#~ "in case of too high and unreasonable speed setting. Zero means no limit" +#~ msgstr "" +#~ "Use this to set the maximum volume of filament that can be melted and " +#~ "extruded per second. Printing speed is limited by maximum volumetric " +#~ "speed if settings are unreasonably high. 0 means there is no limit." + +#~ msgid "Timelapse Wipe Tower" +#~ msgstr "Timelapse Wipe Tower" + +#~ msgid "Translation" +#~ msgstr "Traduzione" + +#~ msgid "Tree support with infill" +#~ msgstr "Tree support with infill" + +#~ msgid "Unable to create zip file" +#~ msgstr "Unable to create zip file" + +#~ msgid "Uploading" +#~ msgstr "Caricamento" + +#~ msgid "User pause" +#~ msgstr "User pause" + +#~ msgid "Waiting" +#~ msgstr "Waiting" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings after switching preset?" +#~ msgstr "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings after switching presets?" + +#~ msgid "Zig zag" +#~ msgstr "Zig zag" + +#~ msgid " Object:" +#~ msgstr " Object:" + +#~ msgid "" +#~ " is too close to exclusion area, there will be collisions when printing.\n" +#~ msgstr "" +#~ " is too close to an exclusion area, there will be collisions when " +#~ "printing.\n" + +#~ msgid " is too close to others, there will be collisions when printing.\n" +#~ msgstr " is too close to others, there will be collisions when printing.\n" + +#~ msgid "hybrid(auto)" +#~ msgstr "hybrid(auto)" + +#~ msgid "normal" +#~ msgstr "normal" + +#~ msgid "" +#~ "normal(auto) and tree(auto) is used to generate support automatically. If " +#~ "normal or tree is selected, only support enforcers are generated" +#~ msgstr "" +#~ "normal(auto), hybrid(auto) and tree(auto) are used to generate support " +#~ "automatically. If normal or tree is selected, only support enforcers are " +#~ "generated." + +#~ msgid "the 3mf is not compatible, load geometry data only!" +#~ msgstr "The 3mf is not compatible, loading geometry data only!" + +#~ msgid "tree" +#~ msgstr "tree" diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index 3dd3539e03..f64d14892c 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,16 +2,13 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-12-13 20:02+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2022-12-24 13:01+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.1\n" msgid "Supports Painting" msgstr "Onderteuning (Support) tekenen" @@ -1393,6 +1390,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing via LAN." msgstr "" +msgid "Failed to send the print job. Please try again." +msgstr "" + msgid "Send to Printer failed. Please try again." msgstr "" @@ -1898,12 +1898,9 @@ msgstr "" "De waarde wordt teruggezet naar 0." msgid "" -"Spiral mode only works when wall loops is 1, \n" -"support is disabled, top shell layers is 0 and sparse infill density is 0\n" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional" msgstr "" -"Spiraal modus werkt alleen indien indien er 1 wall gekozen is, \n" -"support uitgeschakeld is, er 0 top layers gekozen zijn en de vulling " -"dichtheid 0 is\n" msgid "" "Change these settings automatically? \n" @@ -2891,11 +2888,6 @@ msgid "" "2. The Filament presets\n" "3. The Printer presets\n" msgstr "" -"Do you want to synchronize your personal data from Bambu Cloud? \n" -"It contains the following information:\n" -"1. The Process presets\n" -"2. The Filament presets\n" -"3. The Printer presets\n" msgid "Synchronization" msgstr "Synchronisatie" @@ -3259,6 +3251,12 @@ msgstr "Integratie is mislukt." msgid "Undo integration was successful." msgstr "Het ongedaan maken van de integratie is gelukt." +msgid "New network plug-in available." +msgstr "" + +msgid "Details" +msgstr "" + msgid "Undo integration failed." msgstr "Het ongedaan maken van de integratie is mislukt." @@ -3565,11 +3563,11 @@ msgstr "U dient de software te upgraden.\n" msgid "Newer 3mf version" msgstr "Nieuwere versie 3mf" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software.\n" -msgstr "" +msgstr "\n" msgid "The 3mf is not compatible, load geometry data only!" msgstr "" @@ -3851,9 +3849,9 @@ msgid "" "on Bambu Studio(windows) or CAD softwares." msgstr "" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s (%s).\n" -msgstr "" +msgstr "\n" msgid "Switching the language requires application restart.\n" msgstr "" @@ -4447,6 +4445,30 @@ msgid "" "model without prime tower. Do you want to enable prime tower?" msgstr "" +msgid "" +"We have added an experimental style \"Tree Slim\" that features smaller " +"support volume but weaker strength.\n" +"We recommand using it with: 0 interface layers, 0 top distance, 2 walls." +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" + +msgid "" +"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommand the following " +"settings: at least 2 interface layers, at least 0.1 top z distance or using " +"support materials on interface." +msgstr "" + +msgid "" +"When using support material for the support interface, We recommand the " +"following settings:\n" +"0 top distance, 0 interface spacing, concentric pattern." +msgstr "" + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -5215,6 +5237,17 @@ msgstr "" msgid "version %s update information :" msgstr "" +msgid "Network plug-in update" +msgstr "" + +msgid "" +"Click OK to update the Network plug-in when Bambu Studio launches next time." +msgstr "" + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "" + msgid "New version of Bambu Studio" msgstr "Nieuwe versie van Bambu Studio" @@ -5635,9 +5668,9 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "De laaghoogte kan niet groter zijn dan de diameter van de nozzle" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s\n" -msgstr "" +msgstr "\n" msgid "Generating skirt & brim" msgstr "Skirt en brim worden gegenereerd" @@ -7180,11 +7213,9 @@ msgstr "Dit maakt het genereren van support mogelijk." msgid "" "normal(auto) and tree(auto) is used to generate support automatically. If " -"normal or tree is selected, only support enforcers are generated" +"normal(manual) or tree(manual) is selected, only support enforcers are " +"generated" msgstr "" -"normal (auto), hybride (auto) en tree (auto) worden gebruikt om automatisch " -"support te genereren. Als normaal of tree is geselecteerd, worden alleen " -"vereiste support gegenereerd." msgid "normal(auto)" msgstr "Normaal (automatisch)" @@ -7192,9 +7223,6 @@ msgstr "Normaal (automatisch)" msgid "tree(auto)" msgstr "tree(auto)" -msgid "hybrid(auto)" -msgstr "Hybride (automatisch)" - msgid "normal(manual)" msgstr "" @@ -7242,9 +7270,12 @@ msgstr "" msgid "The z gap between the bottom support interface and object" msgstr "" +msgid "Support base" +msgstr "" + msgid "" -"Filament to print support and raft. \"Default\" means no specific filament " -"for support and current filament is used" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" msgstr "" msgid "Line width of support" @@ -7300,6 +7331,9 @@ msgstr "Dit is het lijnpatroon voor support." msgid "Rectilinear grid" msgstr "Rechtlijnig raster" +msgid "Hollow" +msgstr "" + msgid "Interface pattern" msgstr "Interfacepatroon" @@ -7330,9 +7364,27 @@ msgstr "Dit is de snelheid voor het printen van support." msgid "Style" msgstr "Stijl" +msgid "" +"Style and shape of the support. For normal support, projecting the supports " +"into a regular grid will create more stable supports (default), while snug " +"support towers will save material and reduce object scarring.\n" +"For tree support, tight style will merge branches more aggressively and save " +"a lot of material (default), while hybrid style will create similar " +"structure to normal support under large flat overhangs." +msgstr "" + msgid "Snug" msgstr "Nauwsluitend" +msgid "Tree Slim" +msgstr "" + +msgid "Tree Strong" +msgstr "" + +msgid "Tree Hybrid" +msgstr "" + msgid "Independent support layer height" msgstr "Onafhankelijke support laaghoogte" @@ -7998,54 +8050,6 @@ msgid "" "density to improve the strength of the model?" msgstr "" -#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" -#~ msgstr "Kies een of meer bestanden (3mf/step/stl/obj/amf):" - -#~ msgid "Finish" -#~ msgstr "Klaar" - -#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" -#~ msgstr "Importeer 3MF/STL/STEP/OBJ/AMF" - -#~ msgid "Part Cooling" -#~ msgstr "Koeling van de printkop" - -#~ msgid "Aux Cooling" -#~ msgstr "Extra koeling" - -#~ msgid "" -#~ "Filament to print support and skirt. 0 means no specific filament for " -#~ "support and current filament is used" -#~ msgstr "" -#~ "Filament om randen (skirt) en support te printen. Indien u kiest voor 0 " -#~ "dan is er geen specifiek filament en wordt het huidige filament gebruikt" - -#~ msgid "" -#~ "Filament to print support interface. 0 means no specific filament for " -#~ "support interface and current filament is used" -#~ msgstr "" -#~ "Filament om support te printen. Indien u kiest voor 0 dan is er geen " -#~ "specifiek filament en wordt het huidige filament gebruikt" - -#~ msgid "Repair" -#~ msgstr "Repareren" - -#~ msgid "Repair the model's meshes if it is non-manifold mesh" -#~ msgstr "Repareer de meshes van het model als ze niet-manifold zijn." - -#~ msgid "Monitoring Recording" -#~ msgstr "Monitoring en opname" - -#~ msgid "Tree support with infill" -#~ msgstr "Tree support met vulling" - -#~ msgid "" -#~ "This setting specifies whether to add infill inside large hollows of tree " -#~ "support" -#~ msgstr "" -#~ "Deze instelling geeft aan of er opvulling moet worden toegevoegd in grote " -#~ "holtes van de tree support." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -8088,6 +8092,9 @@ msgstr "" #~ "deze georiënteert. Anders worden alle objecten op de huidige project " #~ "georiënteert." +#~ msgid "Aux Cooling" +#~ msgstr "Extra koeling" + #~ msgid "Avoid crossing wall when travel" #~ msgstr "Vermijd wanden tijdens het verplaatsen" @@ -8100,6 +8107,9 @@ msgstr "" #~ "filament. Hierdoor kan de nozzle verstopt raken en kan het printen " #~ "mislukken" +#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" +#~ msgstr "Kies een of meer bestanden (3mf/step/stl/obj/amf):" + #~ msgid "Clear all" #~ msgstr "Alles wissen" @@ -8210,9 +8220,26 @@ msgstr "" #~ msgid "Filament N XX" #~ msgstr "Filament N XX" +#~ msgid "" +#~ "Filament to print support and skirt. 0 means no specific filament for " +#~ "support and current filament is used" +#~ msgstr "" +#~ "Filament om randen (skirt) en support te printen. Indien u kiest voor 0 " +#~ "dan is er geen specifiek filament en wordt het huidige filament gebruikt" + +#~ msgid "" +#~ "Filament to print support interface. 0 means no specific filament for " +#~ "support interface and current filament is used" +#~ msgstr "" +#~ "Filament om support te printen. Indien u kiest voor 0 dan is er geen " +#~ "specifiek filament en wordt het huidige filament gebruikt" + #~ msgid "Filaments Selection" #~ msgstr "Filaments selectie" +#~ msgid "Finish" +#~ msgstr "Klaar" + #~ msgid "Finished" #~ msgstr "Voltooid" @@ -8258,6 +8285,9 @@ msgstr "" #~ "voor automatisch rangschikken om botsingen te voorkomen bij object voor " #~ "object printen." +#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" +#~ msgstr "Importeer 3MF/STL/STEP/OBJ/AMF" + #~ msgid "In the calibration of extrusion flow" #~ msgstr "Bij de kalibratie van de extrusieflow" @@ -8299,6 +8329,9 @@ msgstr "" #~ msgid "Monitoring" #~ msgstr "Monitoren" +#~ msgid "Monitoring Recording" +#~ msgstr "Monitoring en opname" + #~ msgid "Open" #~ msgstr "Open" @@ -8311,6 +8344,9 @@ msgstr "" #~ msgid "Output file" #~ msgstr "Bestand weergeven" +#~ msgid "Part Cooling" +#~ msgstr "Koeling van de printkop" + #~ msgid "Pause(heated bed temperature error)" #~ msgstr "Pauze (fout in temperatuur printbed)" @@ -8391,6 +8427,12 @@ msgstr "" #~ msgid "Reload items" #~ msgstr "Onderdelen opnieuw laden" +#~ msgid "Repair" +#~ msgstr "Repareren" + +#~ msgid "Repair the model's meshes if it is non-manifold mesh" +#~ msgstr "Repareer de meshes van het model als ze niet-manifold zijn." + #~ msgid "Report" #~ msgstr "Rapport" @@ -8424,6 +8466,15 @@ msgstr "" #~ msgid "Spiral mode" #~ msgstr "Spiraal modus" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, \n" +#~ "support is disabled, top shell layers is 0 and sparse infill density is " +#~ "0\n" +#~ msgstr "" +#~ "Spiraal modus werkt alleen indien indien er 1 wall gekozen is, \n" +#~ "support uitgeschakeld is, er 0 top layers gekozen zijn en de vulling " +#~ "dichtheid 0 is\n" + #~ msgid "Successfully sent.Will automatically jump to the device page in %s s" #~ msgstr "" #~ "Succesvol verzonden. Automatisch terug naar de apparaatpagina in %s s" @@ -8478,6 +8529,13 @@ msgstr "" #~ "om filament te besparen en de print tijd te verkorten. De kleuren van de " #~ "objecten worden gemengd als resultaat" +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "Deze instelling geeft aan of er opvulling moet worden toegevoegd in grote " +#~ "holtes van de tree support." + #~ msgid "" #~ "This setting stands for how much volume of filament can be melted and " #~ "extruded per second. Printing speed is limited by max volumetric speed, " @@ -8494,6 +8552,9 @@ msgstr "" #~ msgid "Translation" #~ msgstr "Vertaling" +#~ msgid "Tree support with infill" +#~ msgstr "Tree support met vulling" + #~ msgid "Unable to create zip file" #~ msgstr "Kan het zip-bestand niet aanmaken" @@ -8531,9 +8592,20 @@ msgstr "" #~ " bevindt zich te dichtbij andere objecten, er zullen botsingen optreden " #~ "tijdens het printen.\n" +#~ msgid "hybrid(auto)" +#~ msgstr "Hybride (automatisch)" + #~ msgid "normal" #~ msgstr "Normaal" +#~ msgid "" +#~ "normal(auto) and tree(auto) is used to generate support automatically. If " +#~ "normal or tree is selected, only support enforcers are generated" +#~ msgstr "" +#~ "normal (auto), hybride (auto) en tree (auto) worden gebruikt om " +#~ "automatisch support te genereren. Als normaal of tree is geselecteerd, " +#~ "worden alleen vereiste support gegenereerd." + #~ msgid "the 3mf is not compatible, load geometry data only!" #~ msgstr "" #~ "Het 3mf bestand is niet compatibel, enkel de geometrische data wordt " diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index 49046d80cf..1994d80d05 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,16 +2,13 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-12-13 20:02+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2022-12-24 13:01+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.1\n" msgid "Supports Painting" msgstr "Färgläggning av Support" @@ -1373,6 +1370,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing via LAN." msgstr "" +msgid "Failed to send the print job. Please try again." +msgstr "" + msgid "Send to Printer failed. Please try again." msgstr "" @@ -1868,11 +1868,9 @@ msgstr "" "Värdet kommer att återställas till 0." msgid "" -"Spiral mode only works when wall loops is 1, \n" -"support is disabled, top shell layers is 0 and sparse infill density is 0\n" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional" msgstr "" -"Spiral läge fungerar bara när vägg antalet är 1,\n" -"support är inaktiverad, top lager är 0 och låg ifyllnads densitet är 0\n" msgid "" "Change these settings automatically? \n" @@ -1938,9 +1936,6 @@ msgid "" "Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly\n" msgstr "" -"Switch to rectilinear pattern?\n" -"Yes - switch to rectilinear pattern automaticlly\n" -"No - reset density to default non 100% value automaticlly\n" msgid "Auto bed leveling" msgstr "Auto justera byggplattan" @@ -3225,6 +3220,12 @@ msgstr "Integrationen misslyckades." msgid "Undo integration was successful." msgstr "Återställande av integrationen lyckades." +msgid "New network plug-in available." +msgstr "" + +msgid "Details" +msgstr "" + msgid "Undo integration failed." msgstr "Återställande av integrationen misslyckades." @@ -3521,11 +3522,11 @@ msgstr "Uppdatera mjukvaran.\n" msgid "Newer 3mf version" msgstr "Nyare 3mf version" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software.\n" -msgstr "" +msgstr "\n" msgid "The 3mf is not compatible, load geometry data only!" msgstr "" @@ -3798,9 +3799,9 @@ msgid "" "on Bambu Studio(windows) or CAD softwares." msgstr "" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s (%s).\n" -msgstr "" +msgstr "\n" msgid "Switching the language requires application restart.\n" msgstr "Byte av språk krävs för omstart.\n" @@ -4378,6 +4379,30 @@ msgid "" "model without prime tower. Do you want to enable prime tower?" msgstr "" +msgid "" +"We have added an experimental style \"Tree Slim\" that features smaller " +"support volume but weaker strength.\n" +"We recommand using it with: 0 interface layers, 0 top distance, 2 walls." +msgstr "" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" + +msgid "" +"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommand the following " +"settings: at least 2 interface layers, at least 0.1 top z distance or using " +"support materials on interface." +msgstr "" + +msgid "" +"When using support material for the support interface, We recommand the " +"following settings:\n" +"0 top distance, 0 interface spacing, concentric pattern." +msgstr "" + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -5136,6 +5161,17 @@ msgstr "" msgid "version %s update information :" msgstr "" +msgid "Network plug-in update" +msgstr "" + +msgid "" +"Click OK to update the Network plug-in when Bambu Studio launches next time." +msgstr "" + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "" + msgid "New version of Bambu Studio" msgstr "Ny version av Bambu Studio" @@ -5444,13 +5480,11 @@ msgid "%1% is too tall, and collisions will be caused." msgstr "%1% är för hög, och kollisioner kommer att uppstå." msgid " is too close to others, there may be collisions when printing.\n" -msgstr " is too close to others, there may be collisions when printing.\n" +msgstr "" msgid "" " is too close to exclusion area, there may be collisions when printing.\n" msgstr "" -" is too close to exclusion area, there may be collisions when printing.\n" -"\n" msgid "Prime Tower" msgstr "Prime Torn" @@ -5543,9 +5577,9 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "Lagerhöjden kan inte överstiga nozzel diametern" -#, c-format, boost-format +#, fuzzy, c-format, boost-format msgid "Plate %d: %s does not support filament %s\n" -msgstr "" +msgstr "\n" msgid "Generating skirt & brim" msgstr "Skapar Skirt & Brim" @@ -7048,11 +7082,9 @@ msgstr "Aktivera support generering." msgid "" "normal(auto) and tree(auto) is used to generate support automatically. If " -"normal or tree is selected, only support enforcers are generated" +"normal(manual) or tree(manual) is selected, only support enforcers are " +"generated" msgstr "" -"normal(auto), hybrid(auto) och tree(auto) används för att skapa support " -"automatiskt. Om normal eller tree är vald, kommer endast tvingande support " -"skapas" msgid "normal(auto)" msgstr "normal (auto)" @@ -7060,9 +7092,6 @@ msgstr "normal (auto)" msgid "tree(auto)" msgstr "träd(auto)" -msgid "hybrid(auto)" -msgstr "hybrid(auto)" - msgid "normal(manual)" msgstr "" @@ -7110,9 +7139,12 @@ msgstr "" msgid "The z gap between the bottom support interface and object" msgstr "" +msgid "Support base" +msgstr "" + msgid "" -"Filament to print support and raft. \"Default\" means no specific filament " -"for support and current filament is used" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" msgstr "" msgid "Line width of support" @@ -7166,6 +7198,9 @@ msgstr "Supportens linje mönster" msgid "Rectilinear grid" msgstr "Rät linjärt nät" +msgid "Hollow" +msgstr "" + msgid "Interface pattern" msgstr "Gränssnitts mönster" @@ -7196,9 +7231,27 @@ msgstr "Support hastighet" msgid "Style" msgstr "Stil" +msgid "" +"Style and shape of the support. For normal support, projecting the supports " +"into a regular grid will create more stable supports (default), while snug " +"support towers will save material and reduce object scarring.\n" +"For tree support, tight style will merge branches more aggressively and save " +"a lot of material (default), while hybrid style will create similar " +"structure to normal support under large flat overhangs." +msgstr "" + msgid "Snug" msgstr "Tight" +msgid "Tree Slim" +msgstr "" + +msgid "Tree Strong" +msgstr "" + +msgid "Tree Hybrid" +msgstr "" + msgid "Independent support layer height" msgstr "Oberoende support lagerhöjd" @@ -7853,54 +7906,6 @@ msgid "" "density to improve the strength of the model?" msgstr "" -#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" -#~ msgstr "Välj en eller flera filer (3mf/step/stl/obj/amf):" - -#~ msgid "Finish" -#~ msgstr "Slutför" - -#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" -#~ msgstr "Importera 3MF/STL/STEP/OBJ/AMF" - -#~ msgid "Part Cooling" -#~ msgstr "Del Kylning" - -#~ msgid "Aux Cooling" -#~ msgstr "Extra Kylning" - -#~ msgid "" -#~ "Filament to print support and skirt. 0 means no specific filament for " -#~ "support and current filament is used" -#~ msgstr "" -#~ "Filament för att skriva ut support och skirt med. 0 betyder inget " -#~ "speciellt filament för support och nuvarande filament används" - -#~ msgid "" -#~ "Filament to print support interface. 0 means no specific filament for " -#~ "support interface and current filament is used" -#~ msgstr "" -#~ "Support filament för utskrift. 0 betyder att inget specifikt filament för " -#~ "support gränssnitt och nuvarande filament används" - -#~ msgid "Repair" -#~ msgstr "Reparera" - -#~ msgid "Repair the model's meshes if it is non-manifold mesh" -#~ msgstr "Reparera modellens mesh om den inte är mångfaldig" - -#~ msgid "Monitoring Recording" -#~ msgstr "Övervaknings Inspelning" - -#~ msgid "Tree support with infill" -#~ msgstr "Tree support med ifyllnad" - -#~ msgid "" -#~ "This setting specifies whether to add infill inside large hollows of tree " -#~ "support" -#~ msgstr "" -#~ "Inställningen bestämmer om det ska läggas till ifyllnad i stora hålrum av " -#~ "tree support" - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -7938,6 +7943,9 @@ msgstr "" #~ "Auto placera valda objekt eller alla objekt. Om det finns valda objekt så " #~ "placeras endast dem. Alternativt så placeras alla objekt i projektet." +#~ msgid "Aux Cooling" +#~ msgstr "Extra Kylning" + #~ msgid "Avoid crossing wall when travel" #~ msgstr "Undvik väggar vid förflyttning" @@ -7950,6 +7958,9 @@ msgstr "" #~ "filament.\n" #~ "Detta kan orsaka att nozzeln blockeras och utskriften misslyckas" +#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" +#~ msgstr "Välj en eller flera filer (3mf/step/stl/obj/amf):" + #~ msgid "Clear all" #~ msgstr "Rensa allt" @@ -8059,9 +8070,26 @@ msgstr "" #~ msgid "Filament N XX" #~ msgstr "Filament N XX" +#~ msgid "" +#~ "Filament to print support and skirt. 0 means no specific filament for " +#~ "support and current filament is used" +#~ msgstr "" +#~ "Filament för att skriva ut support och skirt med. 0 betyder inget " +#~ "speciellt filament för support och nuvarande filament används" + +#~ msgid "" +#~ "Filament to print support interface. 0 means no specific filament for " +#~ "support interface and current filament is used" +#~ msgstr "" +#~ "Support filament för utskrift. 0 betyder att inget specifikt filament för " +#~ "support gränssnitt och nuvarande filament används" + #~ msgid "Filaments Selection" #~ msgstr "Filament Val" +#~ msgid "Finish" +#~ msgstr "Slutför" + #~ msgid "Finished" #~ msgstr "Färdig" @@ -8110,6 +8138,9 @@ msgstr "" #~ "auto-placering för att undvika kollision när man skriver ut objekt för " #~ "objekt" +#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" +#~ msgstr "Importera 3MF/STL/STEP/OBJ/AMF" + #~ msgid "In the calibration of extrusion flow" #~ msgstr "Vid kalibrering av extruderingsflödet" @@ -8151,6 +8182,9 @@ msgstr "" #~ msgid "Monitoring" #~ msgstr "Övervakar" +#~ msgid "Monitoring Recording" +#~ msgstr "Övervaknings Inspelning" + #~ msgid "Open" #~ msgstr "Öppna" @@ -8163,6 +8197,9 @@ msgstr "" #~ msgid "Output file" #~ msgstr "Utdatafil" +#~ msgid "Part Cooling" +#~ msgstr "Del Kylning" + #~ msgid "Pause(heated bed temperature error)" #~ msgstr "Paus (temperaturfel i byggplattan)" @@ -8245,6 +8282,12 @@ msgstr "" #~ msgid "Reload items" #~ msgstr "Ladda om objekten" +#~ msgid "Repair" +#~ msgstr "Reparera" + +#~ msgid "Repair the model's meshes if it is non-manifold mesh" +#~ msgstr "Reparera modellens mesh om den inte är mångfaldig" + #~ msgid "Report" #~ msgstr "Rapportera" @@ -8278,6 +8321,14 @@ msgstr "" #~ msgid "Spiral mode" #~ msgstr "Spiral läge" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, \n" +#~ "support is disabled, top shell layers is 0 and sparse infill density is " +#~ "0\n" +#~ msgstr "" +#~ "Spiral läge fungerar bara när vägg antalet är 1,\n" +#~ "support är inaktiverad, top lager är 0 och låg ifyllnads densitet är 0\n" + #~ msgid "Successfully sent.Will automatically jump to the device page in %s s" #~ msgstr "" #~ "Framgångsrikt skickat. Kommer automatiskt att hoppa till enhetssidan om " @@ -8331,6 +8382,13 @@ msgstr "" #~ "byte för att spara filament och minska utskriftstiden. Objektens färger " #~ "blandas som ett resultat" +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "Inställningen bestämmer om det ska läggas till ifyllnad i stora hålrum av " +#~ "tree support" + #~ msgid "" #~ "This setting stands for how much volume of filament can be melted and " #~ "extruded per second. Printing speed is limited by max volumetric speed, " @@ -8347,6 +8405,9 @@ msgstr "" #~ msgid "Translation" #~ msgstr "Översättning" +#~ msgid "Tree support with infill" +#~ msgstr "Tree support med ifyllnad" + #~ msgid "Unable to create zip file" #~ msgstr "Det gick inte att skapa zip-fil" @@ -8379,9 +8440,20 @@ msgstr "" #~ msgid " is too close to others, there will be collisions when printing.\n" #~ msgstr " för tätt inpå andra, utskriften kolliderar.\n" +#~ msgid "hybrid(auto)" +#~ msgstr "hybrid(auto)" + #~ msgid "normal" #~ msgstr "normal" +#~ msgid "" +#~ "normal(auto) and tree(auto) is used to generate support automatically. If " +#~ "normal or tree is selected, only support enforcers are generated" +#~ msgstr "" +#~ "normal(auto), hybrid(auto) och tree(auto) används för att skapa support " +#~ "automatiskt. Om normal eller tree är vald, kommer endast tvingande " +#~ "support skapas" + #~ msgid "the 3mf is not compatible, load geometry data only!" #~ msgstr "3mf ej kompatibel, laddar endast geometrin !" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 5c9af28777..610e74edeb 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-12-13 20:02+0800\n" -"PO-Revision-Date: 2022-12-13 20:18+0800\n" +"POT-Creation-Date: 2022-12-24 13:01+0800\n" +"PO-Revision-Date: 2022-12-22 17:47+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" "Language: zh_CN\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.0.1\n" +"X-Generator: Poedit 3.1\n" msgid "Supports Painting" msgstr "支撑绘制" @@ -708,7 +708,7 @@ msgid "Set filament for selected items" msgstr "设置所选项的耗材丝" msgid "Default" -msgstr "默认" +msgstr "缺省" #, c-format, boost-format msgid "Filament %d" @@ -1824,10 +1824,11 @@ msgstr "" "这个数值将被重置为0。" msgid "" -"Spiral mode only works when wall loops is 1, \n" -"support is disabled, top shell layers is 0 and sparse infill density is 0\n" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional" msgstr "" -"旋转模式只能在外墙层数为1,关闭支撑,顶层层数为0,稀疏填充密度为0时有效。\n" +"旋转模式只能在外墙层数为1,关闭支撑,顶层层数为0,稀疏填充密度为0,传统延时摄" +"影时有效" msgid "" "Change these settings automatically? \n" @@ -1983,10 +1984,10 @@ msgid "Unknown" msgstr "未定义" msgid "Fatal" -msgstr "" +msgstr "致命" msgid "Serious" -msgstr "" +msgstr "严重" msgid "Common" msgstr "" @@ -2479,7 +2480,7 @@ msgid "No" msgstr "否" msgid " will be closed before creating a new model. Do you want to continue?" -msgstr "会被关闭以创建新模型。是否继续?" +msgstr "将会被关闭以创建新模型。是否继续?" msgid "Slice" msgstr "切片" @@ -3229,6 +3230,12 @@ msgstr "集成失败。" msgid "Undo integration was successful." msgstr "集成取消成功。" +msgid "New network plug-in available." +msgstr "新的网络插件可用。" + +msgid "Details" +msgstr "详情" + msgid "Undo integration failed." msgstr "集成取消失败。" @@ -4386,6 +4393,38 @@ msgid "" msgstr "" "平滑模式的延时摄影需要擦料塔,否则打印件上可能会有瑕疵。您想打开擦料塔吗?" +msgid "" +"We have added an experimental style \"Tree Slim\" that features smaller " +"support volume but weaker strength.\n" +"We recommand using it with: 0 interface layers, 0 top distance, 2 walls." +msgstr "" +"我们加入一个新的实验性风格\\\"苗条树\\\",它使用更少的支撑体积,但强度可能较" +"弱。\n" +"\"因此我们推荐以下参数:接触层数为0,顶部Z距离为0,墙层数为2。" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" +"自动调整这些设置?\n" +"是 - 自动调整这些设置\n" +"否 - 不用为我调整这些设置" + +msgid "" +"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommand the following " +"settings: at least 2 interface layers, at least 0.1 top z distance or using " +"support materials on interface." +msgstr "" + +msgid "" +"When using support material for the support interface, We recommand the " +"following settings:\n" +"0 top distance, 0 interface spacing, concentric pattern." +msgstr "" +"当使用支撑材料作为支撑面,我们推荐以下设置:\n" +"顶部Z距离为0, 支撑面线距为0,接触面图案为同。" + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -5114,6 +5153,17 @@ msgstr "更新说明" msgid "version %s update information :" msgstr "版本 %s 更新信息" +msgid "Network plug-in update" +msgstr "网络插件升级" + +msgid "" +"Click OK to update the Network plug-in when Bambu Studio launches next time." +msgstr "点击OK将在Bambu Studio下次启动之后自动升级网络插件" + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "新的网络插件(%s) 可用,您是否需要安装它?" + msgid "New version of Bambu Studio" msgstr "新版本的Bambu Studio" @@ -7008,10 +7058,11 @@ msgstr "开启支撑生成。" msgid "" "normal(auto) and tree(auto) is used to generate support automatically. If " -"normal or tree is selected, only support enforcers are generated" +"normal(manual) or tree(manual) is selected, only support enforcers are " +"generated" msgstr "" -"普通(自动)和树状(自动)用于自动生成支撑体。如果选择普通或树状,仅会在支撑" -"强制面上生成支撑。" +"普通(自动)和树状(自动)用于自动生成支撑体。如果选择普通(手动)或树状(手" +"动),仅会在支撑强制面上生成支撑。" msgid "normal(auto)" msgstr "普通(自动)" @@ -7019,9 +7070,6 @@ msgstr "普通(自动)" msgid "tree(auto)" msgstr "树状(自动)" -msgid "hybrid(auto)" -msgstr "混合(自动)" - msgid "normal(manual)" msgstr "普通(手动)" @@ -7066,10 +7114,14 @@ msgstr "底部Z距离" msgid "The z gap between the bottom support interface and object" msgstr "支撑生成于模型表面时,支撑面底部和模型之间的z间隙" +msgid "Support base" +msgstr "支撑主体" + msgid "" -"Filament to print support and raft. \"Default\" means no specific filament " -"for support and current filament is used" -msgstr "打印支撑和筏层的耗材丝。“默认”代表不指定特定的耗材丝,并使用当前耗材" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" +msgstr "" +"打印支撑主体和筏层的耗材丝。\"缺省\"代表不指定特定的耗材丝,并使用当前耗材" msgid "Line width of support" msgstr "支撑的线宽" @@ -7084,7 +7136,7 @@ msgstr "使用圈形走线覆盖顶部接触面。默认关闭。" msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" -msgstr "打印支撑接触面的耗材丝。“默认”代表不指定特定的耗材丝,并使用当前耗材" +msgstr "打印支撑接触面的耗材丝。\"缺省\"代表不指定特定的耗材丝,并使用当前耗材" msgid "Top interface layers" msgstr "顶部接触面层数" @@ -7119,6 +7171,9 @@ msgstr "支撑走线图案" msgid "Rectilinear grid" msgstr "直线网格" +msgid "Hollow" +msgstr "空心" + msgid "Interface pattern" msgstr "支撑面图案" @@ -7148,9 +7203,27 @@ msgstr "支撑打印速度" msgid "Style" msgstr "样式" +msgid "" +"Style and shape of the support. For normal support, projecting the supports " +"into a regular grid will create more stable supports (default), while snug " +"support towers will save material and reduce object scarring.\n" +"For tree support, tight style will merge branches more aggressively and save " +"a lot of material (default), while hybrid style will create similar " +"structure to normal support under large flat overhangs." +msgstr "" + msgid "Snug" msgstr "紧贴" +msgid "Tree Slim" +msgstr "苗条树" + +msgid "Tree Strong" +msgstr "粗壮树" + +msgid "Tree Hybrid" +msgstr "混合树" + msgid "Independent support layer height" msgstr "支撑独立层高" @@ -7874,6 +7947,30 @@ msgstr "" "提高强度\n" "你知道吗?你可以使用更多的墙层数和更高的疏散填充密度来提高模型的强度。" +#~ msgid "" +#~ "normal(auto) and tree(auto) is used to generate support automatically. If " +#~ "normal or tree is selected, only support enforcers are generated" +#~ msgstr "" +#~ "普通(自动)和树状(自动)用于自动生成支撑体。如果选择普通或树状,仅会在支" +#~ "撑强制面上生成支撑。" + +#~ msgid "hybrid(auto)" +#~ msgstr "混合(自动)" + +#~ msgid "" +#~ "Filament to print support and raft. \"Default\" means no specific " +#~ "filament for support and current filament is used" +#~ msgstr "" +#~ "打印支撑和筏层的耗材丝。\"缺省\"代表不指定特定的耗材丝,并使用当前耗材" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, \n" +#~ "support is disabled, top shell layers is 0 and sparse infill density is " +#~ "0\n" +#~ msgstr "" +#~ "旋转模式只能在外墙层数为1,关闭支撑,顶层层数为0,稀疏填充密度为0时有" +#~ "效。\n" + #~ msgid "" #~ "When sparse infill density is low, the internal solid infill or internal " #~ "bridge may have no archor at the end of line. This cause falling and bad " diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index 5d65f784f5..7828a4c39e 100644 Binary files a/resources/i18n/de/BambuStudio.mo and b/resources/i18n/de/BambuStudio.mo differ diff --git a/resources/i18n/en/BambuStudio.mo b/resources/i18n/en/BambuStudio.mo index f5952f13f2..381beada5e 100644 Binary files a/resources/i18n/en/BambuStudio.mo and b/resources/i18n/en/BambuStudio.mo differ diff --git a/resources/i18n/es/BambuStudio.mo b/resources/i18n/es/BambuStudio.mo index 741ca77c63..6c78d61655 100644 Binary files a/resources/i18n/es/BambuStudio.mo and b/resources/i18n/es/BambuStudio.mo differ diff --git a/resources/i18n/fr/BambuStudio.mo b/resources/i18n/fr/BambuStudio.mo index 5067d1175c..925ca319e6 100644 Binary files a/resources/i18n/fr/BambuStudio.mo and b/resources/i18n/fr/BambuStudio.mo differ diff --git a/resources/i18n/hu/BambuStudio.mo b/resources/i18n/hu/BambuStudio.mo index 870b9b4f9f..45f7a5397a 100644 Binary files a/resources/i18n/hu/BambuStudio.mo and b/resources/i18n/hu/BambuStudio.mo differ diff --git a/resources/i18n/it/BambuStudio.mo b/resources/i18n/it/BambuStudio.mo new file mode 100644 index 0000000000..4f44dd8cd9 Binary files /dev/null and b/resources/i18n/it/BambuStudio.mo differ diff --git a/resources/i18n/nl/BambuStudio.mo b/resources/i18n/nl/BambuStudio.mo index 386dd88b24..9eb030952b 100644 Binary files a/resources/i18n/nl/BambuStudio.mo and b/resources/i18n/nl/BambuStudio.mo differ diff --git a/resources/i18n/sv/BambuStudio.mo b/resources/i18n/sv/BambuStudio.mo index b419318549..f6ae25a8ef 100644 Binary files a/resources/i18n/sv/BambuStudio.mo and b/resources/i18n/sv/BambuStudio.mo differ diff --git a/resources/i18n/zh_cn/BambuStudio.mo b/resources/i18n/zh_cn/BambuStudio.mo index 8e2fc32210..1be1fd1353 100644 Binary files a/resources/i18n/zh_cn/BambuStudio.mo and b/resources/i18n/zh_cn/BambuStudio.mo differ diff --git a/resources/images/BambuStudio_about.png b/resources/images/BambuStudio_about.png deleted file mode 100644 index 70ee6c37fd..0000000000 Binary files a/resources/images/BambuStudio_about.png and /dev/null differ diff --git a/resources/images/BambuStudio_about.svg b/resources/images/BambuStudio_about.svg new file mode 100644 index 0000000000..34c346c2e4 --- /dev/null +++ b/resources/images/BambuStudio_about.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/images/param_hollow.svg b/resources/images/param_hollow.svg new file mode 100644 index 0000000000..01ddd94f28 --- /dev/null +++ b/resources/images/param_hollow.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 1a3167ac9a..bc24f99352 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.04.00.16", + "version": "01.04.01.01", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ @@ -123,6 +123,30 @@ "name":"0.30mm Standard @BBL P1P 0.6 nozzle", "sub_path":"process/0.30mm Standard @BBL P1P 0.6 nozzle.json" }, + { + "name":"0.08mm Extra Fine @BBL P1P", + "sub_path":"process/0.08mm Extra Fine @BBL P1P.json" + }, + { + "name":"0.12mm Fine @BBL P1P", + "sub_path":"process/0.12mm Fine @BBL P1P.json" + }, + { + "name":"0.16mm Optimal @BBL P1P", + "sub_path":"process/0.16mm Optimal @BBL P1P.json" + }, + { + "name":"0.20mm Strength @BBL P1P", + "sub_path":"process/0.20mm Strength @BBL P1P.json" + }, + { + "name":"0.24mm Draft @BBL P1P", + "sub_path":"process/0.24mm Draft @BBL P1P.json" + }, + { + "name":"0.28mm Extra Draft @BBL P1P", + "sub_path":"process/0.28mm Extra Draft @BBL P1P.json" + }, { "name":"0.40mm Standard @BBL P1P 0.8 nozzle", "sub_path":"process/0.40mm Standard @BBL P1P 0.8 nozzle.json" @@ -505,6 +529,38 @@ "name":"Generic PETG @0.2 nozzle", "sub_path":"filament/Generic PETG @0.2 nozzle.json" }, + { + "name":"Bambu PLA Metal @BBL X1C 0.2 nozzle", + "sub_path":"filament/Bambu PLA Metal @BBL X1C 0.2 nozzle.json" + }, + { + "name":"Bambu PLA Metal @BBL X1", + "sub_path":"filament/Bambu PLA Metal @BBL X1.json" + }, + { + "name":"Bambu PLA Metal @BBL X1C", + "sub_path":"filament/Bambu PLA Metal @BBL X1C.json" + }, + { + "name":"Bambu PLA-CF @base", + "sub_path":"filament/Bambu PLA-CF @base.json" + }, + { + "name":"Bambu PLA-CF @BBL X1C 0.8 nozzle", + "sub_path":"filament/Bambu PLA-CF @BBL X1C 0.8 nozzle.json" + }, + { + "name":"Bambu PLA-CF @BBL X1C", + "sub_path":"filament/Bambu PLA-CF @BBL X1C.json" + }, + { + "name":"Bambu PAHT-CF @base", + "sub_path":"filament/Bambu PAHT-CF @base.json" + }, + { + "name":"Bambu PAHT-CF @BBL X1C", + "sub_path":"filament/Bambu PAHT-CF @BBL X1C.json" + }, { "name": "Generic PETG @BBL P1P", "sub_path": "filament/P1P/Generic PETG @BBL P1P.json" @@ -553,9 +609,29 @@ "name":"Generic PETG @BBL P1P 0.2 nozzle", "sub_path":"filament/P1P/Generic PETG @BBL P1P 0.2 nozzle.json" }, + { + "name":"Bambu PAHT-CF @BBL P1P", + "sub_path":"filament/P1P/Bambu PAHT-CF @BBL P1P.json" + }, + { + "name":"Bambu PLA Metal @BBL P1P 0.2 nozzle", + "sub_path":"filament/P1P/Bambu PLA Metal @BBL P1P 0.2 nozzle.json" + }, + { + "name":"Bambu PLA Metal @BBL P1P", + "sub_path":"filament/P1P/Bambu PLA Metal @BBL P1P.json" + }, + { + "name":"Bambu PLA-CF @BBL P1P", + "sub_path":"filament/P1P/Bambu PLA-CF @BBL P1P.json" + }, { "name":"Generic PLA-CF @BBL P1P", "sub_path":"filament/P1P/Generic PLA-CF @BBL P1P.json" + }, + { + "name":"Bambu PLA-CF @BBL P1P 0.8 nozzle", + "sub_path":"filament/P1P/Bambu PLA-CF @BBL P1P 0.8 nozzle.json" } ], "machine_list": [ diff --git a/resources/profiles/BBL/filament/Bambu PA-CF @base.json b/resources/profiles/BBL/filament/Bambu PA-CF @base.json index 6091597136..894ebb411e 100644 --- a/resources/profiles/BBL/filament/Bambu PA-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PA-CF @base.json @@ -6,7 +6,7 @@ "instantiation": "false", "inherits": "fdm_filament_pa", "required_nozzle_HRC": [ - "55" + "40" ], "filament_vendor": [ "Bambu Lab" @@ -30,7 +30,7 @@ "PA-CF" ], "filament_cost": [ - "44.99" + "84.99" ], "nozzle_temperature": [ "280" diff --git a/resources/profiles/BBL/filament/Bambu PAHT-CF @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PAHT-CF @BBL X1C.json new file mode 100644 index 0000000000..78d7c29370 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PAHT-CF @BBL X1C.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "setting_id": "GFSN04", + "name": "Bambu PAHT-CF @BBL X1C", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PAHT-CF @base", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PAHT-CF @base.json b/resources/profiles/BBL/filament/Bambu PAHT-CF @base.json new file mode 100644 index 0000000000..5f0e6cfecf --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PAHT-CF @base.json @@ -0,0 +1,56 @@ +{ + "type": "filament", + "filament_id": "GFN04", + "name": "Bambu PAHT-CF @base", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_pa", + "filament_max_volumetric_speed": [ + "8" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "fan_cooling_layer_time": [ + "5" + ], + "full_fan_speed_layer": [ + "2" + ], + "required_nozzle_HRC": [ + "40" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "filament_density": [ + "1.06" + ], + "filament_flow_ratio": [ + "0.96" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "overhang_fan_threshold": [ + "0%" + ], + "overhang_fan_speed": [ + "40" + ], + "filament_type": [ + "PA-CF" + ], + "filament_cost": [ + "94.99" + ], + "temperature_vitrification": [ + "180" + ], + "nozzle_temperature": [ + "290" + ] +} diff --git a/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1.json b/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1.json new file mode 100644 index 0000000000..93217b3f81 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "setting_id": "GFSA02_02", + "name": "Bambu PLA Metal @BBL X1", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA Metal @base", + "filament_max_volumetric_speed": [ + "21" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..e68814b8eb --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C 0.2 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "setting_id": "GFSA02_01", + "name": "Bambu PLA Metal @BBL X1C 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA Metal @base", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C.json index 186b47e7ab..b21c661b22 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C.json @@ -6,10 +6,11 @@ "instantiation": "true", "inherits": "Bambu PLA Metal @base", "filament_max_volumetric_speed": [ - "25" + "21" ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", - "Bambu Lab X1 0.4 nozzle" + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle" ] } diff --git a/resources/profiles/BBL/filament/Bambu PLA Metal @base.json b/resources/profiles/BBL/filament/Bambu PLA Metal @base.json index 46719729e2..c456f963a0 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Metal @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Metal @base.json @@ -9,12 +9,12 @@ "Bambu Lab" ], "filament_cost": [ - "25.4" + "29.99" ], "filament_flow_ratio": [ - "0.95" + "0.98" ], "filament_density": [ - "1.24" + "1.25" ] } diff --git a/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C 0.8 nozzle.json new file mode 100644 index 0000000000..c7dfbb3d52 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C 0.8 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "setting_id": "GFSA50_02", + "name": "Bambu PLA-CF @BBL X1C 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA-CF @base", + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "230" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C.json new file mode 100644 index 0000000000..c93d5803da --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "setting_id": "GFSA50_01", + "name": "Bambu PLA-CF @BBL X1C", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA-CF @base", + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "2" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "230" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 0.4 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/Bambu PLA-CF @base.json b/resources/profiles/BBL/filament/Bambu PLA-CF @base.json new file mode 100644 index 0000000000..23eea64440 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PLA-CF @base.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "filament_id": "GFA50", + "name": "Bambu PLA-CF @base", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_pla", + "filament_vendor": [ + "Bambu Lab" + ], + "filament_cost": [ + "34.99" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_density": [ + "1.22" + ], + "required_nozzle_HRC": [ + "40" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ] +} diff --git a/resources/profiles/BBL/filament/P1P/Bambu PAHT-CF @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Bambu PAHT-CF @BBL P1P.json new file mode 100644 index 0000000000..7d988b5665 --- /dev/null +++ b/resources/profiles/BBL/filament/P1P/Bambu PAHT-CF @BBL P1P.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "setting_id": "GFSN04_10", + "name": "Bambu PAHT-CF @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PAHT-CF @base", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/P1P/Bambu PLA Metal @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/P1P/Bambu PLA Metal @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..76b9e91b83 --- /dev/null +++ b/resources/profiles/BBL/filament/P1P/Bambu PLA Metal @BBL P1P 0.2 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "setting_id": "GFSA02_11", + "name": "Bambu PLA Metal @BBL P1P 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA Metal @base", + "filament_max_volumetric_speed": [ + "2" + ], + "hot_plate_temp" : [ + "65" + ], + "hot_plate_temp_initial_layer" : [ + "65" + ], + "textured_plate_temp" : [ + "65" + ], + "textured_plate_temp_initial_layer" : [ + "65" + ], + "fan_min_speed": [ + "50" + ], + "fan_cooling_layer_time": [ + "80" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/P1P/Bambu PLA Metal @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Bambu PLA Metal @BBL P1P.json new file mode 100644 index 0000000000..80918deaf9 --- /dev/null +++ b/resources/profiles/BBL/filament/P1P/Bambu PLA Metal @BBL P1P.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "setting_id": "GFSA02_10", + "name": "Bambu PLA Metal @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA Metal @base", + "filament_max_volumetric_speed": [ + "21" + ], + "slow_down_layer_time": [ + "8" + ], + "hot_plate_temp" : [ + "65" + ], + "hot_plate_temp_initial_layer" : [ + "65" + ], + "textured_plate_temp" : [ + "65" + ], + "textured_plate_temp_initial_layer" : [ + "65" + ], + "fan_min_speed": [ + "50" + ], + "fan_cooling_layer_time": [ + "80" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/P1P/Bambu PLA-CF @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/filament/P1P/Bambu PLA-CF @BBL P1P 0.8 nozzle.json new file mode 100644 index 0000000000..370f48f5df --- /dev/null +++ b/resources/profiles/BBL/filament/P1P/Bambu PLA-CF @BBL P1P 0.8 nozzle.json @@ -0,0 +1,39 @@ +{ + "type": "filament", + "setting_id": "GFSA50_11", + "name": "Bambu PLA-CF @BBL P1P 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA-CF @base", + "filament_max_volumetric_speed": [ + "18" + ], + "hot_plate_temp" : [ + "65" + ], + "hot_plate_temp_initial_layer" : [ + "65" + ], + "textured_plate_temp" : [ + "65" + ], + "textured_plate_temp_initial_layer" : [ + "65" + ], + "fan_min_speed": [ + "50" + ], + "fan_cooling_layer_time": [ + "80" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/P1P/Bambu PLA-CF @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Bambu PLA-CF @BBL P1P.json new file mode 100644 index 0000000000..66eca224d2 --- /dev/null +++ b/resources/profiles/BBL/filament/P1P/Bambu PLA-CF @BBL P1P.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "setting_id": "GFSA50_10", + "name": "Bambu PLA-CF @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA-CF @base", + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "2" + ], + "hot_plate_temp" : [ + "65" + ], + "hot_plate_temp_initial_layer" : [ + "65" + ], + "textured_plate_temp" : [ + "65" + ], + "textured_plate_temp_initial_layer" : [ + "65" + ], + "fan_min_speed": [ + "50" + ], + "fan_cooling_layer_time": [ + "80" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle" + ] +} diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json index ca21332295..8d3282f9f9 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json @@ -22,6 +22,7 @@ "18x28", "0x28" ], + "extruder_clearance_max_radius": "56", "machine_pause_gcode": "M400 U1\n", "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202201114 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0.0 ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", "machine_end_gcode": ";===== date: 20221202 =====================\n{if timelapse_type == 0}\nM991 S0 P-1 ;end traditional timelapse immediately\n{endif}\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n{if timelapse_type == 1}\nM991 S0 P-1 ;end smooth timelapse at safe pos\n{endif}\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X128 Y250 F3600\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\n", diff --git a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL P1P.json b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL P1P.json new file mode 100644 index 0000000000..6db745a9a9 --- /dev/null +++ b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL P1P.json @@ -0,0 +1,11 @@ +{ + "type": "process", + "setting_id": "GP018", + "name": "0.08mm Extra Fine @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.08", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.12mm Fine @BBL P1P.json b/resources/profiles/BBL/process/0.12mm Fine @BBL P1P.json new file mode 100644 index 0000000000..276726a7fb --- /dev/null +++ b/resources/profiles/BBL/process/0.12mm Fine @BBL P1P.json @@ -0,0 +1,11 @@ +{ + "type": "process", + "setting_id": "GP019", + "name": "0.12mm Fine @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.12", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.16mm Optimal @BBL P1P.json b/resources/profiles/BBL/process/0.16mm Optimal @BBL P1P.json new file mode 100644 index 0000000000..d276425b61 --- /dev/null +++ b/resources/profiles/BBL/process/0.16mm Optimal @BBL P1P.json @@ -0,0 +1,11 @@ +{ + "type": "process", + "setting_id": "GP020", + "name": "0.16mm Optimal @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.16", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.20mm Strength @BBL P1P.json b/resources/profiles/BBL/process/0.20mm Strength @BBL P1P.json new file mode 100644 index 0000000000..5a9ef9a384 --- /dev/null +++ b/resources/profiles/BBL/process/0.20mm Strength @BBL P1P.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "setting_id": "GP021", + "name": "0.20mm Strength @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.20", + "outer_wall_speed": "60", + "wall_loops": "6", + "sparse_infill_density": "25%", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.24mm Draft @BBL P1P.json b/resources/profiles/BBL/process/0.24mm Draft @BBL P1P.json new file mode 100644 index 0000000000..46ef476717 --- /dev/null +++ b/resources/profiles/BBL/process/0.24mm Draft @BBL P1P.json @@ -0,0 +1,11 @@ +{ + "type": "process", + "setting_id": "GP022", + "name": "0.24mm Draft @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.24", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL P1P.json b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL P1P.json new file mode 100644 index 0000000000..764059d139 --- /dev/null +++ b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL P1P.json @@ -0,0 +1,11 @@ +{ + "type": "process", + "setting_id": "GP023", + "name": "0.28mm Extra Draft @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.28", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_common.json b/resources/profiles/BBL/process/fdm_process_bbl_common.json index e0fccd4be6..1341fa4f56 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_common.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_common.json @@ -73,6 +73,7 @@ "enable_support": "0", "resolution": "0.012", "support_type": "normal(auto)", + "support_style": "default", "support_on_build_plate_only": "0", "support_top_z_distance": "0.2", "support_bottom_z_distance": "0.2", @@ -92,7 +93,7 @@ "support_object_xy_distance": "0.35", "tree_support_branch_diameter": "2", "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", + "tree_support_wall_count": "1", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.42", diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 8c684de428..8531c050c1 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "01.04.00.03", + "version": "01.04.01.00", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ diff --git a/resources/profiles/Creality/process/fdm_process_creality_common.json b/resources/profiles/Creality/process/fdm_process_creality_common.json index 958327cd45..4c73471a8e 100644 --- a/resources/profiles/Creality/process/fdm_process_creality_common.json +++ b/resources/profiles/Creality/process/fdm_process_creality_common.json @@ -64,6 +64,7 @@ "enable_support": "0", "resolution": "0.012", "support_type": "normal(auto)", + "support_style": "default", "support_on_build_plate_only": "0", "support_top_z_distance": "0.2", "support_filament": "0", diff --git a/resources/profiles/Voron.json b/resources/profiles/Voron.json index 13e1e7f953..db6ae9233c 100644 --- a/resources/profiles/Voron.json +++ b/resources/profiles/Voron.json @@ -1,6 +1,6 @@ { "name": "Voron", - "version": "01.04.00.02", + "version": "01.04.01.00", "force_update": "0", "description": "Voron configurations", "machine_model_list": [ diff --git a/resources/profiles/Voron/process/fdm_process_voron_common.json b/resources/profiles/Voron/process/fdm_process_voron_common.json index 3b09d6103e..6f195c1278 100644 --- a/resources/profiles/Voron/process/fdm_process_voron_common.json +++ b/resources/profiles/Voron/process/fdm_process_voron_common.json @@ -65,6 +65,7 @@ "enable_support": "0", "resolution": "0.012", "support_type": "normal(auto)", + "support_style": "default", "support_on_build_plate_only": "0", "support_top_z_distance": "0.2", "support_filament": "0", diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index 4aa959a61d..83c803b3ce 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -78,6 +78,7 @@ using ItemGroup = std::vector>; // A coefficient used in separating bigger items and smaller items. const double BIG_ITEM_TRESHOLD = 0.02; +#define VITRIFY_TEMP_DIFF_THRSH 15 // bed temp can be higher than vitrify temp, but not higher than this thresh // Fill in the placer algorithm configuration with values carefully chosen for // Slic3r. @@ -423,9 +424,9 @@ protected: for (int i = 0; i < m_items.size(); i++) { Item& p = m_items[i]; if (p.is_virt_object) continue; - score += lambda3 * (item.bed_temp - p.vitrify_temp > 0); + score += lambda3 * (item.bed_temp - p.vitrify_temp > VITRIFY_TEMP_DIFF_THRSH); } - score += lambda3 * (item.bed_temp - item.vitrify_temp > 0); + score += lambda3 * (item.bed_temp - item.vitrify_temp > VITRIFY_TEMP_DIFF_THRSH); score += lambda4 * hasRowHeightConflict + lambda4 * hasLidHeightConflict; } else { diff --git a/src/libslic3r/GCode/CoolingBuffer.cpp b/src/libslic3r/GCode/CoolingBuffer.cpp index 6bfe742db4..fe14a9e492 100644 --- a/src/libslic3r/GCode/CoolingBuffer.cpp +++ b/src/libslic3r/GCode/CoolingBuffer.cpp @@ -775,7 +775,7 @@ std::string CoolingBuffer::apply_layer_cooldown( new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_fan_speed); } //BBS - if (additional_fan_speed_new != m_additional_fan_speed && m_config.auxiliary_fan.value) { + if (additional_fan_speed_new != m_additional_fan_speed) { m_additional_fan_speed = additional_fan_speed_new; if (immediately_apply) new_gcode += GCodeWriter::set_additional_fan(m_additional_fan_speed); @@ -813,7 +813,7 @@ std::string CoolingBuffer::apply_layer_cooldown( //BBS: force to write a fan speed command again if (m_current_fan_speed != -1) new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_current_fan_speed); - if (m_additional_fan_speed != -1 && m_config.auxiliary_fan.value) + if (m_additional_fan_speed != -1) new_gcode += GCodeWriter::set_additional_fan(m_additional_fan_speed); } else if (line->type & CoolingLine::TYPE_EXTRUDE_END) { diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index a72e6e10cb..3440e404ab 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -260,8 +260,8 @@ public: { ExPolygon *area; int type; - int dist_to_top; - AreaGroup(ExPolygon *a, int t, int d) : area(a), type(t), dist_to_top(d) {} + coordf_t dist_to_top; // mm dist to top + AreaGroup(ExPolygon *a, int t, coordf_t d) : area(a), type(t), dist_to_top(d) {} }; std::vector area_groups; diff --git a/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp index a64b3b8786..82ad753bec 100644 --- a/src/libslic3r/Point.hpp +++ b/src/libslic3r/Point.hpp @@ -184,6 +184,12 @@ inline Point operator* (const Point& l, const double& r) return { coord_t(l.x() * r), coord_t(l.y() * r) }; } +inline std::ostream &operator<<(std::ostream &os, const Point &pt) +{ + os << unscale_(pt.x()) << "," << unscale_(pt.y()); + return os; +} + inline bool is_approx(const Point &p1, const Point &p2, coord_t epsilon = coord_t(SCALED_EPSILON)) { Point d = (p2 - p1).cwiseAbs(); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index ce5a4505d9..fe03d48c58 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -457,7 +457,7 @@ StringObjectException Print::sequential_print_clearance_valid(const Print &print convex_hull = offset(convex_hull_no_offset, // Shrink the extruder_clearance_radius a tiny bit, so that if the object arrangement algorithm placed the objects // exactly by satisfying the extruder_clearance_radius, this test will not trigger collision. - float(scale_(0.5 * print.config().extruder_clearance_radius.value - EPSILON)), + float(scale_(0.5 * print.config().extruder_clearance_max_radius.value - EPSILON)), jtRound, scale_(0.1)).front(); // instance.shift is a position of a centered object, while model object may not be centered. // Convert the shift from the PrintObject's coordinates into ModelObject's coordinates by removing the centering offset. diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 337981df2c..32ef8f2e85 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -360,6 +360,7 @@ public: // Get a layer approximately at print_z. const Layer* get_layer_at_printz(coordf_t print_z, coordf_t epsilon) const; Layer* get_layer_at_printz(coordf_t print_z, coordf_t epsilon); + int get_layer_idx_get_printz(coordf_t print_z, coordf_t epsilon); // BBS const Layer* get_layer_at_bottomz(coordf_t bottom_z, coordf_t epsilon) const; Layer* get_layer_at_bottomz(coordf_t bottom_z, coordf_t epsilon); diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 51e7947819..63e66a37d2 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -183,13 +183,17 @@ static t_config_enum_values s_keys_map_SupportMaterialPattern { { "honeycomb", smpHoneycomb }, { "lightning", smpLightning }, { "default", smpDefault}, - { "none", smpNone}, + { "hollow", smpNone}, }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SupportMaterialPattern) static t_config_enum_values s_keys_map_SupportMaterialStyle { + { "default", smsDefault }, { "grid", smsGrid }, - { "snug", smsSnug } + { "snug", smsSnug }, + { "tree_slim", smsTreeSlim }, + { "tree_strong", smsTreeStrong }, + { "tree_hybrid", smsTreeHybrid } }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SupportMaterialStyle) @@ -203,7 +207,6 @@ CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SupportMaterialInterfacePattern) static t_config_enum_values s_keys_map_SupportType{ { "normal(auto)", stNormalAuto }, { "tree(auto)", stTreeAuto }, - { "hybrid(auto)", stHybridAuto }, { "normal(manual)", stNormal }, { "tree(manual)", stTree } }; @@ -2543,16 +2546,14 @@ void PrintConfigDef::init_fff_params() def->label = L("Type"); def->category = L("Support"); def->tooltip = L("normal(auto) and tree(auto) is used to generate support automatically. " - "If normal or tree is selected, only support enforcers are generated"); + "If normal(manual) or tree(manual) is selected, only support enforcers are generated"); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("normal(auto)"); def->enum_values.push_back("tree(auto)"); - def->enum_values.push_back("hybrid(auto)"); def->enum_values.push_back("normal(manual)"); def->enum_values.push_back("tree(manual)"); def->enum_labels.push_back(L("normal(auto)")); def->enum_labels.push_back(L("tree(auto)")); - def->enum_labels.push_back(L("hybrid(auto)")); def->enum_labels.push_back(L("normal(manual)")); def->enum_labels.push_back(L("tree(manual)")); def->mode = comSimple; @@ -2591,7 +2592,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Support critical regions only"); def->category = L("Support"); def->tooltip = L("Only create support for critical regions including sharp tail, cantilever, etc."); - def->mode = comSimple; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); // BBS: change type to common float. @@ -2639,9 +2640,9 @@ void PrintConfigDef::init_fff_params() def = this->add("support_filament", coInt); def->gui_type = ConfigOptionDef::GUIType::i_enum_open; - def->label = L("Support"); + def->label = L("Support base"); def->category = L("Support"); - def->tooltip = L("Filament to print support and raft. \"Default\" means no specific filament for support and current filament is used"); + def->tooltip = L("Filament to print support base and raft. \"Default\" means no specific filament for support and current filament is used"); def->min = 0; def->mode = comSimple; def->set_default_value(new ConfigOptionInt(1)); @@ -2744,13 +2745,13 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("rectilinear-grid"); def->enum_values.push_back("honeycomb"); def->enum_values.push_back("lightning"); - def->enum_values.push_back("none"); + def->enum_values.push_back("hollow"); def->enum_labels.push_back(L("Default")); def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Rectilinear grid")); def->enum_labels.push_back(L("Honeycomb")); def->enum_labels.push_back(L("Lightning")); - def->enum_labels.push_back(L("None")); + def->enum_labels.push_back(L("Hollow")); def->mode = comAdvanced; def->set_default_value(new ConfigOptionEnum(smpRectilinear)); @@ -2799,16 +2800,27 @@ void PrintConfigDef::init_fff_params() def = this->add("support_style", coEnum); def->label = L("Style"); def->category = L("Support"); - //def->tooltip = L("Style and shape of the support towers. Projecting the supports into a regular grid " - // "will create more stable supports, while snug support towers will save material and reduce " - // "object scarring"); + def->tooltip = L("Style and shape of the support. For normal support, projecting the supports into a regular grid " + "will create more stable supports (default), while snug support towers will save material and reduce " + "object scarring.\n" + "For tree support, slim style will merge branches more aggressively and save " + "a lot of material (default), while hybrid style will create similar structure to normal support " + "under large flat overhangs."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("default"); def->enum_values.push_back("grid"); def->enum_values.push_back("snug"); + def->enum_values.push_back("tree_slim"); + def->enum_values.push_back("tree_strong"); + def->enum_values.push_back("tree_hybrid"); + def->enum_labels.push_back(L("Default")); def->enum_labels.push_back(L("Grid")); def->enum_labels.push_back(L("Snug")); + def->enum_labels.push_back(L("Tree Slim")); + def->enum_labels.push_back(L("Tree Strong")); + def->enum_labels.push_back(L("Tree Hybrid")); def->mode = comAdvanced; - def->set_default_value(new ConfigOptionEnum(smsGrid)); + def->set_default_value(new ConfigOptionEnum(smsDefault)); def = this->add("independent_support_layer_height", coBool); def->label = L("Independent support layer height"); @@ -2909,7 +2921,7 @@ void PrintConfigDef::init_fff_params() def = this->add("bed_temperature_difference", coInts); def->label = L("Bed temperature difference"); - def->tooltip = L("Do not recommand bed temperature of other layer to be lower than initial layer for more than this threshold. " + def->tooltip = L("Do not recommend bed temperature of other layer to be lower than initial layer for more than this threshold. " "Too low bed temperature of other layer may cause the model broken free from build plate"); def->sidetext = L("°C"); def->min = 0; @@ -4026,6 +4038,10 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va value = "normal(manual)"; } else if (opt_key == "support_type" && value == "tree") { value = "tree(manual)"; + } else if (opt_key == "support_type" && value == "hybrid(auto)") { + value = "tree(auto)"; + } else if (opt_key == "support_base_pattern" && value == "none") { + value = "hollow"; } else if (opt_key == "different_settings_to_system") { std::string copy_value = value; copy_value.erase(std::remove(copy_value.begin(), copy_value.end(), '\"'), copy_value.end()); // remove '"' in string diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index dfc4d15f4d..e8341c2e26 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -99,7 +99,7 @@ enum SupportMaterialPattern { }; enum SupportMaterialStyle { - smsGrid, smsSnug, + smsDefault, smsGrid, smsSnug, smsTreeSlim, smsTreeStrong, smsTreeHybrid }; enum SupportMaterialInterfacePattern { @@ -108,7 +108,19 @@ enum SupportMaterialInterfacePattern { // BBS enum SupportType { - stNormalAuto, stTreeAuto, stHybridAuto, stNormal, stTree + stNormalAuto, stTreeAuto, stNormal, stTree +}; +inline bool is_tree(SupportType stype) +{ + return std::set{stTreeAuto, stTree}.count(stype) != 0; +}; +inline bool is_tree_slim(SupportType type, SupportMaterialStyle style) +{ + return is_tree(type) && (style==smsDefault || style==smsTreeSlim); +}; +inline bool is_auto(SupportType stype) +{ + return std::set{stNormalAuto, stTreeAuto}.count(stype) != 0; }; enum SeamPosition { diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index d1e1e578e0..d85bd9d9a7 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -2871,7 +2871,11 @@ const Layer *PrintObject::get_first_layer_bellow_printz(coordf_t print_z, coordf auto it = Slic3r::lower_bound_by_predicate(m_layers.begin(), m_layers.end(), [limit](const Layer *layer) { return layer->print_z < limit; }); return (it == m_layers.begin()) ? nullptr : *(--it); } - +int PrintObject::get_layer_idx_get_printz(coordf_t print_z, coordf_t epsilon) { + coordf_t limit = print_z + epsilon; + auto it = Slic3r::lower_bound_by_predicate(m_layers.begin(), m_layers.end(), [limit](const Layer *layer) { return layer->print_z < limit; }); + return (it == m_layers.begin()) ? -1 : std::distance(m_layers.begin(), it); +} // BBS const Layer* PrintObject::get_layer_at_bottomz(coordf_t bottom_z, coordf_t epsilon) const { coordf_t limit_upper = bottom_z + epsilon; diff --git a/src/libslic3r/Slicing.cpp b/src/libslic3r/Slicing.cpp index 36c04a523b..53f70a81d5 100644 --- a/src/libslic3r/Slicing.cpp +++ b/src/libslic3r/Slicing.cpp @@ -110,7 +110,7 @@ SlicingParameters SlicingParameters::create_from_config( params.min_layer_height = std::min(params.min_layer_height, params.layer_height); params.max_layer_height = std::max(params.max_layer_height, params.layer_height); - if (! soluble_interface) { + if (! soluble_interface || is_tree_slim(object_config.support_type.value, object_config.support_style.value)) { params.gap_raft_object = object_config.raft_contact_distance.value; //BBS params.gap_object_support = object_config.support_bottom_z_distance.value; diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index 78a156c989..e40040fa05 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -790,6 +790,7 @@ public: m_extrusion_width(params.extrusion_width), m_support_material_closing_radius(params.support_closing_radius) { + if (m_style != smsSnug) m_style = smsGrid; switch (m_style) { case smsGrid: { @@ -1578,9 +1579,8 @@ static inline Polygons detect_overhangs( // Offset the support regions back to a full overhang, restrict them to the full overhang. // This is done to increase size of the supporting columns below, as they are calculated by // propagating these contact surfaces downwards. - diff_polygons = - expand(diff(intersection(expand(diff_polygons, lower_layer_offset, SUPPORT_SURFACES_OFFSET_PARAMETERS), layerm_polygons), lower_layer_polygons), - xy_expansion, SUPPORT_SURFACES_OFFSET_PARAMETERS); + diff_polygons = diff(intersection(expand(diff_polygons, lower_layer_offset, SUPPORT_SURFACES_OFFSET_PARAMETERS), layerm_polygons), lower_layer_polygons); + if (xy_expansion != 0) { diff_polygons = expand(diff_polygons, xy_expansion, SUPPORT_SURFACES_OFFSET_PARAMETERS); } } //FIXME add user defined filtering here based on minimal area or minimum radius or whatever. @@ -2191,7 +2191,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ // BBS: tree support is selected so normal supports need not be generated. // Note we still need to go through the following steps if support is disabled but raft is enabled. - if (m_object_config->enable_support.value && (m_object_config->support_type.value == stTreeAuto || m_object_config->support_type.value == stTree || m_object_config->support_type.value == stHybridAuto)) { + if (m_object_config->enable_support.value && (m_object_config->support_type.value != stNormalAuto && m_object_config->support_type.value != stNormal)) { return MyLayersPtr(); } @@ -2889,7 +2889,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int // Generate intermediate layers. // The first intermediate layer is the same as the 1st layer if there is no raft, // or the bottom of the first intermediate layer is aligned with the bottom of the raft contact layer. - // Intermediate layers are always printed with a normal etrusion flow (non-bridging). + // Intermediate layers are always printed with a normal extrusion flow (non-bridging). size_t idx_layer_object = 0; size_t idx_extreme_first = 0; if (! extremes.empty() && std::abs(extremes.front()->extreme_z() - m_slicing_params.raft_interface_top_z) < EPSILON) { diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 24fb7f65c8..7c51520cf4 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -5,6 +5,7 @@ #include "Print.hpp" #include "Layer.hpp" #include "Fill/FillBase.hpp" +#include "Fill/FillConcentric.hpp" #include "CurveAnalyzer.hpp" #include "SVG.hpp" #include "ShortestPath.hpp" @@ -15,10 +16,8 @@ #define _L(s) Slic3r::I18N::translate(s) - -#define MAX_BRANCH_RADIUS 10.0 +#define USE_PLAN_LAYER_HEIGHTS 1 #define HEIGHT_TO_SWITCH_INFILL_DIRECTION 30 // change infill direction every 20mm -#define DO_NOT_MOVER_UNDER_MM 5 // do not move contact points under 5mm #ifndef M_PI #define M_PI 3.1415926535897932384626433832795 @@ -36,7 +35,6 @@ namespace Slic3r #define unscale_(val) ((val) * SCALING_FACTOR) #define FIRST_LAYER_EXPANSION 1.2 -static constexpr float tree_support_branch_diameter_angle = 5.0; inline unsigned int round_divide(unsigned int dividend, unsigned int divisor) //!< Return dividend divided by divisor rounded to the nearest integer { @@ -201,7 +199,7 @@ static std::string get_svg_filename(std::string layer_nr_or_z, std::string tag static void draw_contours_and_nodes_to_svg ( - int layer_nr, + std::string layer_nr_or_z, const ExPolygons &overhangs, const ExPolygons &overhangs_after_offset, const ExPolygons &outlines_below, @@ -224,8 +222,8 @@ static void draw_contours_and_nodes_to_svg bbox.max.y() = std::max(bbox.max.y(), (coord_t)scale_(10)); SVG svg; - if(layer_nr>=0) - svg.open(get_svg_filename(std::to_string(layer_nr), name_prefix), bbox); + if(!layer_nr_or_z.empty()) + svg.open(get_svg_filename(layer_nr_or_z, name_prefix), bbox); else svg.open(name_prefix, bbox); if (!svg.is_opened()) return; @@ -247,7 +245,7 @@ static void draw_contours_and_nodes_to_svg // draw layer nodes svg.draw(layer_pts, "green", coord_t(scale_(0.1))); - +#if 0 // lower layer points layer_pts.clear(); for (TreeSupport::Node *node : lower_layer_nodes) { @@ -262,11 +260,11 @@ static void draw_contours_and_nodes_to_svg layer_pts.push_back(node->parent->position); } svg.draw(layer_pts, "blue", coord_t(scale_(0.1))); +#endif } static void draw_layer_mst -( - int layer_nr, +(const std::string &layer_nr_or_z, const std::vector &spanning_trees, const ExPolygons& outline ) @@ -279,11 +277,13 @@ static void draw_layer_mst bbox.merge(bb); } - SVG svg(get_svg_filename(std::to_string(layer_nr), "mstree").c_str(), bbox); + SVG svg(get_svg_filename(layer_nr_or_z, "mstree").c_str(), bbox); if (!svg.is_opened()) return; svg.draw(lines, "blue", coord_t(scale_(0.05))); svg.draw_outline(outline, "yellow"); + for (auto &spanning_tree : spanning_trees) + svg.draw(spanning_tree.vertices(), "black", coord_t(scale_(0.1))); } static void draw_two_overhangs_to_svg(TreeSupportLayer* ts_layer, const ExPolygons& overhangs1, const ExPolygons& overhangs2) @@ -686,6 +686,7 @@ TreeSupport::TreeSupport(PrintObject& object, const SlicingParameters &slicing_p m_raft_layers = slicing_params.base_raft_layers + slicing_params.interface_raft_layers; SupportMaterialPattern support_pattern = m_object_config->support_base_pattern; + if (m_object_config->support_style == smsTreeHybrid && support_pattern == smpDefault) support_pattern = smpRectilinear; m_support_params.base_fill_pattern = support_pattern == smpLightning ? ipLightning : support_pattern == smpHoneycomb ? ipHoneycomb : @@ -697,6 +698,12 @@ TreeSupport::TreeSupport(PrintObject& object, const SlicingParameters &slicing_p m_object_config->support_interface_pattern == smipConcentric ? ipConcentric : (m_support_params.interface_density > 0.95 ? ipRectilinear : ipSupportBase); + m_support_params.support_extrusion_width = m_object_config->support_line_width.value > 0 ? m_object_config->support_line_width : m_object_config->line_width; + is_slim = is_tree_slim(m_object_config->support_type, m_object_config->support_style); + MAX_BRANCH_RADIUS = is_slim ? 5.0 : 10.0; + tree_support_branch_diameter_angle = 5.0;//is_slim ? 10.0 : 5.0; + // by default tree support needs no infill, unless it's tree hybrid which contains normal nodes. + with_infill = support_pattern != smpNone && support_pattern != smpDefault; } @@ -713,6 +720,7 @@ void TreeSupport::detect_object_overhangs() create_tree_support_layers(); m_ts_data = m_object->alloc_tree_support_preview_cache(); + m_ts_data->is_slim = is_slim; const PrintObjectConfig& config = m_object->config(); SupportType stype = config.support_type.value; @@ -729,7 +737,6 @@ void TreeSupport::detect_object_overhangs() // a region is considered well supported if the number of layers below it exceeds this threshold const int thresh_layers_below = 10 / config.layer_height; double obj_height = m_object->size().z(); - bool is_auto = (stype == stTreeAuto || stype == stHybridAuto); struct ExPolygonComp { bool operator()(const ExPolygon& a, const ExPolygon& b) const { @@ -822,7 +829,7 @@ void TreeSupport::detect_object_overhangs() } }; // main part of sharptail detections - if (std::set{stTreeAuto, stHybridAuto, stTree}.count(stype))// == stTreeAuto || stype == stHybridAuto || stype == stTree) + if (is_tree(stype)) { double threshold_rad = (config.support_threshold_angle.value < EPSILON ? 30 : config.support_threshold_angle.value+1) * M_PI / 180.; ExPolygons regions_well_supported; @@ -833,7 +840,7 @@ void TreeSupport::detect_object_overhangs() if (m_object->print()->canceled()) break; - if (!is_auto && layer_nr > enforce_support_layers) + if (!is_auto(stype) && layer_nr > enforce_support_layers) continue; Layer* layer = m_object->get_layer(layer_nr); @@ -881,7 +888,7 @@ void TreeSupport::detect_object_overhangs() ExPolygons overhangs_sharp_tail; - if (is_auto && g_config_support_sharp_tails) + if (is_auto(stype) && g_config_support_sharp_tails) { #if 0 // detect sharp tail and add more supports around @@ -996,13 +1003,13 @@ void TreeSupport::detect_object_overhangs() ts_layer->overhang_areas.emplace_back(poly); } - if (is_auto && g_config_remove_small_overhangs) { + if (is_auto(stype) && g_config_remove_small_overhangs) { for (auto& overhang : ts_layer->overhang_areas) { find_and_insert_cluster(overhangClusters, overhang2clusterInd, overhang, layer_nr, extrusion_width_scaled); } } - if (is_auto && /*g_config_support_sharp_tails*/0) + if (is_auto(stype) && /*g_config_support_sharp_tails*/0) { // update well supported regions ExPolygons regions_well_supported2; // regions intersects with lower regions_well_supported or large support are also well supported @@ -1074,7 +1081,7 @@ void TreeSupport::detect_object_overhangs() } } - if (is_auto && g_config_remove_small_overhangs) { + if (is_auto(stype) && g_config_remove_small_overhangs) { if (blockers.size() < m_object->layer_count()) blockers.resize(m_object->layer_count()); for (auto& cluster : overhangClusters) { @@ -1266,18 +1273,17 @@ static inline std::vector fill_expolygons_generate_paths( return fill_boxes; } -static void make_perimeter_and_inner_brim(ExtrusionEntitiesPtr &dst, const Print &print, const ExPolygon &support_area, size_t wall_count, const Flow &flow, bool is_interface) +static void _make_loops(ExtrusionEntitiesPtr& loops_entities, ExPolygons &support_area, ExtrusionRole role, size_t wall_count, const Flow &flow) { - Polygons loops; - ExPolygons support_area_new = offset_ex(support_area, -0.5f * float(flow.scaled_spacing()), jtSquare); - + Polygons loops; std::map depth_per_expoly; std::list expoly_list; - for (ExPolygon &expoly : support_area_new) { + for (ExPolygon &expoly : support_area) { expoly_list.emplace_back(std::move(expoly)); depth_per_expoly.insert({&expoly_list.back(), 0}); } + if (expoly_list.empty()) return; while (!expoly_list.empty()) { polygons_append(loops, to_polygons(expoly_list.front())); @@ -1285,22 +1291,69 @@ static void make_perimeter_and_inner_brim(ExtrusionEntitiesPtr &dst, const Print auto first_iter = expoly_list.begin(); auto depth_iter = depth_per_expoly.find(&expoly_list.front()); if (depth_iter->second + 1 < wall_count) { + //ExPolygons expolys_new = offset_ex(expoly_list.front(), -float(flow.scaled_spacing()), jtSquare); // shrink and then dilate to prevent overlapping and overflow - ExPolygons expolys_new = offset_ex(expoly_list.front(), -1.4 * float(flow.scaled_spacing()), jtSquare); - expolys_new = offset_ex(expolys_new, .4*float(flow.scaled_spacing()), jtSquare); + ExPolygons expolys_new = offset2_ex({expoly_list.front()}, -1.4 * float(flow.scaled_spacing()), .4 * float(flow.scaled_spacing())); for (ExPolygon &expoly : expolys_new) { auto new_iter = expoly_list.insert(expoly_list.begin(), expoly); - depth_per_expoly.insert({ &*new_iter, depth_iter->second + 1 }); + depth_per_expoly.insert({&*new_iter, depth_iter->second + 1}); } } depth_per_expoly.erase(depth_iter); expoly_list.erase(first_iter); } - ExtrusionRole role = is_interface ? erSupportMaterialInterface : erSupportMaterial; - extrusion_entities_append_loops(dst, std::move(loops), role, - float(flow.mm3_per_mm()), float(flow.width()), float(flow.height())); + // draw connected loops + if (/*wall_count > 1 && wall_count<5*/0) { + // TODO this method may drop some contours + wall_count = std::min(wall_count, loops.size()); + Polylines polylines; + polylines.push_back(Polyline()); + Polyline& polyline = polylines.back(); + Point end_pt; + Point end_dir; + for (int wall_idx = 0; wall_idx < wall_count; wall_idx++) { + Polygon &loop = loops[wall_idx]; + if (loop.size()<3) continue; + // break the closed loop if this is not the last loop, so the next loop can attach to the end_pt + //if (wall_idx != wall_count - 1 && loop.first_point() == loop.last_point()) + // loop.points.pop_back(); + + if (wall_idx == 0) { + polyline.append(loop.points); + } else { + double d = loop.distance_to(end_pt); + if (d < scale_(2)) { // if current loop is close to the previous one + polyline.append(end_pt); + ExtrusionPath expath; + expath.polyline.append(loop.points); + ExtrusionLoop extru_loop(expath); + extru_loop.split_at(end_pt, false); + polyline.append(extru_loop.as_polyline()); + }else{// create a new polylie if they are far away + polylines.push_back(Polyline()); + polyline = polylines.back(); + polyline.append(loop.points); + } + } + end_pt = polyline.points.back(); + end_dir = end_pt - polyline.points[polyline.points.size() - 2]; + Point perpendicular_dir = turn90_ccw(end_dir); + end_pt = end_pt + normal(perpendicular_dir, flow.scaled_spacing()); + } + + extrusion_entities_append_paths(loops_entities, polylines, role, float(flow.mm3_per_mm()), float(flow.width()), float(flow.height())); + } else { + extrusion_entities_append_loops(loops_entities, std::move(loops), role, float(flow.mm3_per_mm()), float(flow.width()), float(flow.height())); + } + } + +static void make_perimeter_and_inner_brim(ExtrusionEntitiesPtr &dst, const ExPolygon &support_area, size_t wall_count, const Flow &flow, ExtrusionRole role) +{ + Polygons loops; + ExPolygons support_area_new = offset_ex(support_area, -0.5f * float(flow.scaled_spacing()), jtSquare); + _make_loops(dst, support_area_new, role, wall_count, flow); } static void make_perimeter_and_infill(ExtrusionEntitiesPtr& dst, const Print& print, const ExPolygon& support_area, size_t wall_count, const Flow& flow, ExtrusionRole role, Fill* filler_support, double support_density, bool infill_first=true) @@ -1338,39 +1391,13 @@ static void make_perimeter_and_infill(ExtrusionEntitiesPtr& dst, const Print& pr } } - { - std::map depth_per_expoly; - std::list expoly_list; - - for (ExPolygon& expoly : support_area_new) { - expoly_list.emplace_back(std::move(expoly)); - depth_per_expoly.insert({ &expoly_list.back(), 0 }); - } - - while (!expoly_list.empty()) { - polygons_append(loops, to_polygons(expoly_list.front())); - - auto first_iter = expoly_list.begin(); - auto depth_iter = depth_per_expoly.find(&expoly_list.front()); - if (depth_iter->second + 1 < wall_count) { - ExPolygons expolys_new = offset_ex(expoly_list.front(), -float(flow.scaled_spacing()), jtSquare); - - for (ExPolygon& expoly : expolys_new) { - auto new_iter = expoly_list.insert(expoly_list.begin(), expoly); - depth_per_expoly.insert({ &*new_iter, depth_iter->second + 1 }); - } - } - depth_per_expoly.erase(depth_iter); - expoly_list.erase(first_iter); - } + { // draw loops + ExtrusionEntitiesPtr loops_entities; + _make_loops(loops_entities, support_area_new, role, wall_count, flow); if (infill_first) - extrusion_entities_append_loops(dst, std::move(loops), role, - float(flow.mm3_per_mm()), float(flow.width()), float(flow.height())); - else { // loops first - ExtrusionEntitiesPtr loops_entities; - extrusion_entities_append_loops(loops_entities, std::move(loops), role, - float(flow.mm3_per_mm()), float(flow.width()), float(flow.height())); + dst.insert(dst.end(), loops_entities.begin(), loops_entities.end()); + else { // loops first loops_entities.insert(loops_entities.end(), dst.begin(), dst.end()); dst = std::move(loops_entities); } @@ -1393,13 +1420,10 @@ void TreeSupport::generate_toolpaths() { const PrintConfig &print_config = m_object->print()->config(); const PrintObjectConfig &object_config = m_object->config(); - coordf_t support_extrusion_width = object_config.support_line_width.value > 0 ? object_config.support_line_width : object_config.line_width; + coordf_t support_extrusion_width = m_support_params.support_extrusion_width; coordf_t nozzle_diameter = print_config.nozzle_diameter.get_at(object_config.support_filament - 1); coordf_t layer_height = object_config.layer_height.value; - const size_t wall_count = object_config.tree_support_wall_count.value; - const bool with_infill = object_config.support_base_pattern != smpNone && object_config.support_base_pattern != smpDefault; - auto m_support_material_flow = support_material_flow(m_object, float(m_slicing_params.layer_height)); // coconut: use same intensity settings as SupportMaterial.cpp auto m_support_material_interface_flow = support_material_interface_flow(m_object, float(m_slicing_params.layer_height)); @@ -1407,8 +1431,6 @@ void TreeSupport::generate_toolpaths() coordf_t bottom_interface_spacing = object_config.support_bottom_interface_spacing.value + m_support_material_interface_flow.spacing(); coordf_t interface_density = std::min(1., m_support_material_interface_flow.spacing() / interface_spacing); coordf_t bottom_interface_density = std::min(1., m_support_material_interface_flow.spacing() / bottom_interface_spacing); - coordf_t support_spacing = object_config.support_base_pattern_spacing.value + m_support_material_flow.spacing(); - coordf_t support_density = std::min(1., m_support_material_flow.spacing() / support_spacing); const coordf_t branch_radius = object_config.tree_support_branch_diameter.value / 2; const coordf_t branch_radius_scaled = scale_(branch_radius); @@ -1518,6 +1540,9 @@ void TreeSupport::generate_toolpaths() TreeSupportLayer* ts_layer = m_object->get_tree_support_layer(layer_id); Flow support_flow(support_extrusion_width, ts_layer->height, nozzle_diameter); + coordf_t support_spacing = object_config.support_base_pattern_spacing.value + support_flow.spacing(); + coordf_t support_density = std::min(1., support_flow.spacing() / support_spacing); + ts_layer->support_fills.no_sort = false; for (auto& area_group : ts_layer->area_groups) { @@ -1528,8 +1553,8 @@ void TreeSupport::generate_toolpaths() // interface if (layer_id == 0) { Flow flow = m_raft_layers == 0 ? m_object->print()->brim_flow() : support_flow; - make_perimeter_and_inner_brim(ts_layer->support_fills.entities, *m_object->print(), poly, wall_count, flow, - area_group.type == TreeSupportLayer::RoofType); + make_perimeter_and_inner_brim(ts_layer->support_fills.entities, poly, wall_count, flow, + area_group.type == TreeSupportLayer::RoofType ? erSupportMaterialInterface : erSupportMaterial); polys = std::move(offset_ex(poly, -flow.scaled_spacing())); } else if (area_group.type == TreeSupportLayer::Roof1stLayer) { polys = std::move(offset_ex(poly, 0.5*support_flow.scaled_width())); @@ -1569,12 +1594,14 @@ void TreeSupport::generate_toolpaths() } else { // base_areas - filler_support->spacing = m_support_material_flow.spacing(); - Flow flow = (layer_id == 0 && m_raft_layers == 0) ? m_object->print()->brim_flow() : - (m_support_params.base_fill_pattern == ipRectilinear && (layer_id % num_layers_to_change_infill_direction == 0) ? support_transition_flow(m_object) : support_flow); - if (area_group.dist_to_top < 10 / layer_height) { - // extra 2 walls for the top tips - make_perimeter_and_inner_brim(ts_layer->support_fills.entities, *m_object->print(), poly, wall_count + 2, flow, false); + filler_support->spacing = support_flow.spacing(); + Flow flow = (layer_id == 0 && m_raft_layers == 0) ? m_object->print()->brim_flow() : support_flow; + if (area_group.dist_to_top < 10 && !with_infill && m_object_config->support_style!=smsTreeHybrid) { + if (area_group.dist_to_top < 5) // 1 wall at the top <5mm + make_perimeter_and_inner_brim(ts_layer->support_fills.entities, poly, 1, flow, erSupportMaterial); + else // at least 2 walls for range [5,10) + make_perimeter_and_inner_brim(ts_layer->support_fills.entities, poly, std::max(wall_count, size_t(2)), flow, erSupportMaterial); + } else { if (with_infill && layer_id > 0 && m_support_params.base_fill_pattern != ipLightning) { filler_support->angle = Geometry::deg2rad(object_config.support_angle.value); @@ -1588,8 +1615,8 @@ void TreeSupport::generate_toolpaths() erSupportMaterial, filler_support.get(), support_density); } } else { - make_perimeter_and_inner_brim(ts_layer->support_fills.entities, *m_object->print(), poly, - layer_id > 0 ? wall_count : std::numeric_limits::max(), flow, false); + make_perimeter_and_inner_brim(ts_layer->support_fills.entities, poly, + layer_id > 0 ? wall_count : std::numeric_limits::max(), flow, erSupportMaterial); } } } @@ -1862,9 +1889,7 @@ Polygons TreeSupport::contact_nodes_to_polygon(const std::vector& contact void TreeSupport::generate_support_areas() { - const PrintObjectConfig &config = m_object->config(); - bool tree_support_enable = config.enable_support.value && - (config.support_type.value == stTreeAuto || config.support_type.value == stTree || config.support_type.value == stHybridAuto); + bool tree_support_enable = m_object_config->enable_support.value && is_tree(m_object_config->support_type.value); if (!tree_support_enable) return; @@ -1878,8 +1903,6 @@ void TreeSupport::generate_support_areas() detect_object_overhangs(); profiler.stage_finish(STAGE_DETECT_OVERHANGS); - if (!has_overhangs) return; - // Generate contact points of tree support profiler.stage_start(STAGE_GENERATE_CONTACT_NODES); m_object->print()->set_status(56, _L("Support: generate contact points")); @@ -1892,8 +1915,12 @@ void TreeSupport::generate_support_areas() drop_nodes(contact_nodes); profiler.stage_finish(STAGE_DROP_DOWN_NODES); + smooth_nodes(contact_nodes); + +#if !USE_PLAN_LAYER_HEIGHTS // Adjust support layer heights adjust_layer_heights(contact_nodes); +#endif //Generate support areas. profiler.stage_start(STAGE_DRAW_CIRCLES); @@ -1920,24 +1947,45 @@ void TreeSupport::generate_support_areas() BOOST_LOG_TRIVIAL(debug) << "tree support time " << profiler.report(); } -inline coordf_t calc_branch_radius(coordf_t base_radius, size_t layers_to_top, size_t tip_layers, double diameter_angle_scale_factor) +coordf_t TreeSupport::calc_branch_radius(coordf_t base_radius, size_t layers_to_top, size_t tip_layers, double diameter_angle_scale_factor) { double radius; -#if 1 - if ((layers_to_top + 1) > tip_layers) + if (!is_slim) { + if ((layers_to_top + 1) > tip_layers) { + radius = base_radius + base_radius * (layers_to_top + 1) * diameter_angle_scale_factor; + } else { + radius = base_radius * (layers_to_top + 1) / tip_layers; + } + } else { + if ((layers_to_top + 1) > tip_layers * 2) { + radius = base_radius + base_radius * (layers_to_top + 1) * diameter_angle_scale_factor; + } else { + radius = base_radius * (layers_to_top + 1) / (tip_layers * 2); + } + radius = std::max(radius, MIN_BRANCH_RADIUS); + } + radius = std::min(radius, MAX_BRANCH_RADIUS); + return radius; +} + +coordf_t TreeSupport::calc_branch_radius(coordf_t base_radius, coordf_t mm_to_top, double diameter_angle_scale_factor) +{ + double radius; + coordf_t tip_height = base_radius;// this is a 45 degree tip + if (mm_to_top > tip_height) { - radius = base_radius + base_radius * (layers_to_top + 1) * diameter_angle_scale_factor; + radius = base_radius + (mm_to_top-tip_height) * diameter_angle_scale_factor; } else { - radius = base_radius * (layers_to_top + 1) / tip_layers; + radius = mm_to_top;// this is a 45 degree tip } -#else - double scale = static_cast(layers_to_top + 1) / tip_layers; - scale = layers_to_top < tip_layers ? (0.5 + scale / 2) : (1 + static_cast(layers_to_top - tip_layers) * diameter_angle_scale_factor); - radius = scale * base_radius; -#endif + + radius = std::max(radius, MIN_BRANCH_RADIUS); radius = std::min(radius, MAX_BRANCH_RADIUS); + // if have interface layers, radius should be larger + if (m_object_config->support_interface_top_layers.value > 0) + radius = std::max(radius, base_radius); return radius; } @@ -1964,7 +2012,6 @@ void TreeSupport::draw_circles(const std::vector>& contact_no const PrintObjectConfig &config = m_object->config(); const Print* print = m_object->print(); bool has_brim = print->has_brim(); - bool has_infill = config.support_base_pattern.value != smpNone && config.support_base_pattern != smpDefault; int bottom_gap_layers = round(m_slicing_params.gap_object_support / m_slicing_params.layer_height); const coordf_t branch_radius = config.tree_support_branch_diameter.value / 2; const coordf_t branch_radius_scaled = scale_(branch_radius); @@ -2000,12 +2047,12 @@ void TreeSupport::draw_circles(const std::vector>& contact_no const size_t top_interface_layers = config.support_interface_top_layers.value; const size_t bottom_interface_layers = config.support_interface_bottom_layers.value; const size_t tip_layers = branch_radius / layer_height; //The number of layers to be shrinking the circle to create a tip. This produces a 45 degree angle. - const double diameter_angle_scale_factor = sin(tree_support_branch_diameter_angle * M_PI / 180.) * layer_height / branch_radius; //Scale factor per layer to produce the desired angle. + const double diameter_angle_scale_factor = tan(tree_support_branch_diameter_angle * M_PI / 180.);// * layer_height / branch_radius; //Scale factor per layer to produce the desired angle. const coordf_t line_width = config.support_line_width; const coordf_t line_width_scaled = scale_(line_width); const bool with_lightning_infill = m_support_params.base_fill_pattern == ipLightning; - coordf_t support_extrusion_width = config.support_line_width.value > 0 ? config.support_line_width : config.line_width; + coordf_t support_extrusion_width = m_support_params.support_extrusion_width; const size_t wall_count = config.tree_support_wall_count.value; const PrintObjectConfig& object_config = m_object->config(); @@ -2023,29 +2070,33 @@ void TreeSupport::draw_circles(const std::vector>& contact_no { if (print->canceled()) break; + const std::vector& curr_layer_nodes = contact_nodes[layer_nr]; TreeSupportLayer* ts_layer = m_object->get_tree_support_layer(layer_nr + m_raft_layers); assert(ts_layer != nullptr); // skip if current layer has no points. This fixes potential crash in get_collision (see jira BBL001-355) - if (curr_layer_nodes.empty()) + if (curr_layer_nodes.empty()) { + ts_layer->print_z = 0.0; + ts_layer->height = 0.0; continue; + } Node* first_node = curr_layer_nodes.front(); ts_layer->print_z = first_node->print_z; ts_layer->height = first_node->height; - - if (ts_layer->height < EPSILON) + if (ts_layer->height < EPSILON) { continue; + } ExPolygons& base_areas = ts_layer->base_areas; ExPolygons& roof_areas = ts_layer->roof_areas; ExPolygons& roof_1st_layer = ts_layer->roof_1st_layer; ExPolygons& floor_areas = ts_layer->floor_areas; ExPolygons& roof_gap_areas = ts_layer->roof_gap_areas; - int max_layers_above_base = 0; - int max_layers_above_roof = 0; - int max_layers_above_roof1 = 0; + coordf_t max_layers_above_base = 0; + coordf_t max_layers_above_roof = 0; + coordf_t max_layers_above_roof1 = 0; BOOST_LOG_TRIVIAL(debug) << "circles at layer " << layer_nr << " contact nodes size=" << contact_nodes[layer_nr].size(); //Draw the support areas and add the roofs appropriately to the support roof instead of normal areas. @@ -2056,64 +2107,78 @@ void TreeSupport::draw_circles(const std::vector>& contact_no break; const Node& node = *p_node; - ExPolygon area; - // 直接从overhang多边形生成,如果�? - // 1) 是混合支撑里的普通部分, - // 2) 启用了顶部接触层�? - // 3) 是顶部空�? - if (node.type == ePolygon || (top_interface_layers>0 &&node.support_roof_layers_below > 0) || node.distance_to_top<0) { + ExPolygons area; + // Generate directly from overhang polygon if one of the following is true: + // 1) node is a normal part of hybrid support + // 2) node is virtual + if (node.type == ePolygon || node.distance_to_top<0) { if (node.overhang->contour.size() > 100 || node.overhang->holes.size()>1) - area = *node.overhang; + area.emplace_back(*node.overhang); else { - auto tmp = offset_ex({ *node.overhang }, scale_(m_ts_data->m_xy_distance)); - if(!tmp.empty()) // 对于有缺陷的模型,overhang膨胀以后可能是空的! - area = tmp[0]; + area = offset_ex({ *node.overhang }, scale_(m_ts_data->m_xy_distance)); } } else { Polygon circle; size_t layers_to_top = node.distance_to_top; - double scale; - if (top_interface_layers>0) { // if has interface, branch circles should be larger - scale = static_cast(layers_to_top + 1) / tip_layers; - scale = layers_to_top < tip_layers ? (0.5 + scale / 2) : (1 + static_cast(layers_to_top - tip_layers) * diameter_angle_scale_factor); - } else { - scale = calc_branch_radius(1, node.distance_to_top, tip_layers, diameter_angle_scale_factor); - scale = std::min(scale, MAX_BRANCH_RADIUS / branch_radius); - } - for (auto iter = branch_circle.points.begin(); iter != branch_circle.points.end(); iter++) - { - Point corner = (*iter) * scale; - circle.append(node.position + corner); - } + double scale = calc_branch_radius(branch_radius, node.dist_mm_to_top, diameter_angle_scale_factor) / branch_radius; + if (/*is_slim*/1) { // draw ellipse along movement direction + double moveX = node.movement.x() / (scale * branch_radius_scaled); + double moveY = node.movement.y() / (scale * branch_radius_scaled); + const double vsize_inv = 0.5 / (0.01 + std::sqrt(moveX * moveX + moveY * moveY)); + double matrix[2*2] = { + scale * (1 + moveX * moveX * vsize_inv),scale * (0 + moveX * moveY * vsize_inv), + scale * (0 + moveX * moveY * vsize_inv),scale * (1 + moveY * moveY * vsize_inv), + }; + for (auto vertex: branch_circle.points) { + vertex = Point(matrix[0] * vertex.x() + matrix[1] * vertex.y(), matrix[2] * vertex.x() + matrix[3] * vertex.y()); + circle.append(node.position + vertex); + } + } else { + for (auto iter = branch_circle.points.begin(); iter != branch_circle.points.end(); iter++) { + Point corner = (*iter) * scale; + circle.append(node.position + corner); + } + } if (layer_nr == 0 && m_raft_layers == 0) { double brim_width = layers_to_top * layer_height / (scale * branch_radius) * 0.5; circle = offset(circle, scale_(brim_width))[0]; } - area = ExPolygon(circle); + area.emplace_back(ExPolygon(circle)); + // merge overhang to get a smoother interface surface + if (top_interface_layers > 0 && node.support_roof_layers_below > 0) { + ExPolygons overhang_expanded; + if (node.overhang->contour.size() > 100 || node.overhang->holes.size()>1) + overhang_expanded.emplace_back(*node.overhang); + else { + // 对于有缺陷的模型,overhang膨胀以后可能是空的! + overhang_expanded = offset_ex({ *node.overhang }, scale_(m_ts_data->m_xy_distance)); + } + append(area, overhang_expanded); + } } if (node.distance_to_top < 0) - roof_gap_areas.emplace_back(area); + append(roof_gap_areas, area); else if (node.support_roof_layers_below == 1) { - roof_1st_layer.emplace_back(area); - max_layers_above_roof1 = std::max(max_layers_above_roof1, node.distance_to_top); + append(roof_1st_layer, area); + max_layers_above_roof1 = std::max(max_layers_above_roof1, node.dist_mm_to_top); } else if (node.support_roof_layers_below > 0) { - roof_areas.emplace_back(area); - max_layers_above_roof = std::max(max_layers_above_roof, node.distance_to_top); + append(roof_areas, area); + max_layers_above_roof = std::max(max_layers_above_roof, node.dist_mm_to_top); } else { - base_areas.emplace_back(area); - max_layers_above_base = std::max(max_layers_above_base, node.distance_to_top); + append(base_areas, area); + max_layers_above_base = std::max(max_layers_above_base, node.dist_mm_to_top); } if (layer_nr < brim_skirt_layers) - ts_layer->lslices.emplace_back(area); + append(ts_layer->lslices, area); } ts_layer->lslices = std::move(union_ex(ts_layer->lslices)); @@ -2128,7 +2193,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no m_object->print()->set_status(65, (boost::format( _L("Support: generate polygons at layer %d")) % layer_nr).str()); // join roof segments - double contact_dist_scaled = scale_(m_slicing_params.gap_support_object); + double contact_dist_scaled = scale_(0.5);// scale_(m_slicing_params.gap_support_object); roof_areas = std::move(offset2_ex(roof_areas, contact_dist_scaled, -contact_dist_scaled)); roof_1st_layer = std::move(offset2_ex(roof_1st_layer, contact_dist_scaled, -contact_dist_scaled)); @@ -2177,9 +2242,9 @@ void TreeSupport::draw_circles(const std::vector>& contact_no } if (bottom_gap_layers > 0 && layer_nr > bottom_gap_layers) { const Layer* below_layer = m_object->get_layer(layer_nr - bottom_gap_layers); - ExPolygons bottom_gap = std::move(intersection_ex(floor_areas, below_layer->lslices)); - if (!bottom_gap.empty()) { - floor_areas = std::move(diff_ex(floor_areas, bottom_gap)); + ExPolygons bottom_gap_area = std::move(intersection_ex(floor_areas, below_layer->lslices)); + if (!bottom_gap_area.empty()) { + floor_areas = std::move(diff_ex(floor_areas, bottom_gap_area)); } } auto &area_groups = ts_layer->area_groups; @@ -2267,7 +2332,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no generator = std::make_unique(m_object, contours, overhangs, []() {}, support_density); } - else if (!has_infill) { + else if (!with_infill) { // move the holes to contour so they can be well supported // check if poly's contour intersects with expoly's contour @@ -2394,9 +2459,24 @@ void TreeSupport::draw_circles(const std::vector>& contact_no ExPolygons& floor_areas = ts_layer->floor_areas; if (base_areas.empty() && roof_areas.empty() && roof_1st_layer.empty()) continue; char fname[10]; sprintf(fname, "%d_%.2f", layer_nr, ts_layer->print_z); - draw_contours_and_nodes_to_svg(-1, base_areas, roof_areas, roof_1st_layer, {}, {}, get_svg_filename(fname, "circles"), { "base", "roof", "roof1st" }); + draw_contours_and_nodes_to_svg("", base_areas, roof_areas, roof_1st_layer, {}, {}, get_svg_filename(fname, "circles"), {"base", "roof", "roof1st"}); } -#endif + + // export layer & print_z log + std::ofstream draw_circles_layer_out; + draw_circles_layer_out.open("./SVG/layer_heights_draw_circles.txt"); + if (draw_circles_layer_out.is_open()) { + for (int layer_nr = m_object->layer_count() - 1; layer_nr > 0; layer_nr--) { + TreeSupportLayer* ts_layer = m_object->get_tree_support_layer(layer_nr + m_raft_layers); + ExPolygons& base_areas = ts_layer->base_areas; + ExPolygons& roof_areas = ts_layer->roof_areas; + ExPolygons& roof_1st_layer = ts_layer->roof_1st_layer; + ExPolygons& floor_areas = ts_layer->floor_areas; + if (base_areas.empty() && roof_areas.empty() && roof_1st_layer.empty()) continue; + draw_circles_layer_out << layer_nr << " " << ts_layer->print_z << " " << ts_layer->height << std::endl; + } + } +#endif // SUPPORT_TREE_DEBUG_TO_SVG TreeSupportLayerPtrs& ts_layers = m_object->tree_support_layers(); auto iter = std::remove_if(ts_layers.begin(), ts_layers.end(), [](TreeSupportLayer* ts_layer) { return ts_layer->height < EPSILON; }); @@ -2410,73 +2490,103 @@ void TreeSupport::draw_circles(const std::vector>& contact_no void TreeSupport::drop_nodes(std::vector>& contact_nodes) { const PrintObjectConfig &config = m_object->config(); - //Use Minimum Spanning Tree to connect the points on each layer and move them while dropping them down. + // Use Minimum Spanning Tree to connect the points on each layer and move them while dropping them down. + const coordf_t support_extrusion_width = m_support_params.support_extrusion_width; const coordf_t layer_height = config.layer_height.value; const double angle = config.tree_support_branch_angle.value * M_PI / 180.; const int wall_count = std::max(1, config.tree_support_wall_count.value); - const double tan_angle = tan(angle); + double tan_angle = tan(angle); // when nodes are thick, they can move further. this is the max angle const coordf_t max_move_distance = (angle < M_PI / 2) ? (coordf_t)(tan_angle * layer_height)*wall_count : std::numeric_limits::max(); const double max_move_distance2 = max_move_distance * max_move_distance; const coordf_t branch_radius = config.tree_support_branch_diameter.value / 2; const size_t tip_layers = branch_radius / layer_height; //The number of layers to be shrinking the circle to create a tip. This produces a 45 degree angle. - const double diameter_angle_scale_factor = sin(tree_support_branch_diameter_angle * M_PI / 180.) * layer_height / branch_radius; //Scale factor per layer to produce the desired angle. + const double diameter_angle_scale_factor = tan(tree_support_branch_diameter_angle * M_PI / 180.);//*layer_height / branch_radius; // Scale factor per layer to produce the desired angle. const coordf_t radius_sample_resolution = m_ts_data->m_radius_sample_resolution; const bool support_on_buildplate_only = config.support_on_build_plate_only.value; const size_t bottom_interface_layers = config.support_interface_bottom_layers.value; const size_t top_interface_layers = config.support_interface_top_layers.value; + float DO_NOT_MOVER_UNDER_MM = is_slim ? 0 : 5; // do not move contact points under 5mm + + auto get_branch_angle = [this,&config](coordf_t radius) { + if (config.tree_support_branch_angle.value < 30.0) return config.tree_support_branch_angle.value; + return (radius - MIN_BRANCH_RADIUS) / (MAX_BRANCH_RADIUS - MIN_BRANCH_RADIUS) * (config.tree_support_branch_angle.value - 30.0) + 30.0; + }; + auto get_max_move_dist = [this, &config, branch_radius, tip_layers, diameter_angle_scale_factor, wall_count, support_extrusion_width](const Node *node, int power = 1) { + double move_dist = node->max_move_dist; + if (node->max_move_dist == 0) { + if (node->radius == 0) node->radius = calc_branch_radius(branch_radius, node->dist_mm_to_top, diameter_angle_scale_factor); + double angle = config.tree_support_branch_angle.value; + if (angle > 30.0 && node->radius > MIN_BRANCH_RADIUS) + angle = (node->radius - MIN_BRANCH_RADIUS) / (MAX_BRANCH_RADIUS - MIN_BRANCH_RADIUS) * (config.tree_support_branch_angle.value - 30.0) + 30.0; + double tan_angle = tan(angle * M_PI / 180); + int wall_count_ = node->radius > 2 * config.support_line_width ? wall_count : 1; + node->max_move_dist = (angle < 90) ? (coordf_t) (tan_angle * node->height) * wall_count_ : std::numeric_limits::max(); + node->max_move_dist = std::min(node->max_move_dist, support_extrusion_width); + move_dist = node->max_move_dist; + } + if (power == 2) move_dist = SQ(move_dist); + return move_dist; + }; + + std::vector> layer_heights = plan_layer_heights(contact_nodes); + if (layer_heights.empty()) return; std::unordered_set to_free_node_set; m_spanning_trees.resize(contact_nodes.size()); //m_mst_line_x_layer_contour_caches.resize(contact_nodes.size()); + if (!is_slim) {// get outlines below and avoidance area using tbb //m_object->print()->set_status(59, "Support: preparing avoidance regions "); // get all the possible radiis std::vector > all_layer_radius(m_highest_overhang_layer+1); - std::vector > all_layer_node_dist(m_highest_overhang_layer+1); + std::vector> all_layer_node_dist(m_highest_overhang_layer + 1); for (size_t layer_nr = m_highest_overhang_layer; layer_nr > 0; layer_nr--) { - auto& layer_contact_nodes = contact_nodes[layer_nr]; auto& layer_radius = all_layer_radius[layer_nr]; auto& layer_node_dist = all_layer_node_dist[layer_nr]; - if (!layer_contact_nodes.empty()) { - for (Node* p_node : layer_contact_nodes) { - layer_node_dist.emplace(p_node->distance_to_top); - } + for (Node *p_node : contact_nodes[layer_nr]) { + layer_node_dist.emplace(p_node->dist_mm_to_top); } - if (layer_nr < m_highest_overhang_layer) { + if (layer_nr < m_highest_overhang_layer && layer_heights[layer_nr].second>0) { for (auto node_dist : all_layer_node_dist[layer_nr + 1]) - layer_node_dist.emplace(node_dist+1); + layer_node_dist.emplace(node_dist + layer_heights[layer_nr].second); } for (auto node_dist : layer_node_dist) { - layer_radius.emplace(calc_branch_radius(branch_radius, node_dist, tip_layers, diameter_angle_scale_factor)); + layer_radius.emplace(calc_branch_radius(branch_radius, node_dist, diameter_angle_scale_factor)); } } // parallel pre-compute avoidance - tbb::parallel_for(tbb::blocked_range(1, m_highest_overhang_layer), - [&](const tbb::blocked_range& range) { - for (size_t layer_nr = range.begin(); layer_nr < range.end(); layer_nr++) { - for (auto node_dist : all_layer_node_dist[layer_nr]) - { - m_ts_data->get_avoidance(0, layer_nr - 1); - m_ts_data->get_avoidance(calc_branch_radius(branch_radius, node_dist, tip_layers, diameter_angle_scale_factor), layer_nr - 1); - } + tbb::parallel_for(tbb::blocked_range(1, m_highest_overhang_layer), [&](const tbb::blocked_range &range) { + for (size_t layer_nr = range.begin(); layer_nr < range.end(); layer_nr++) { + for (auto node_radius : all_layer_radius[layer_nr]) { + m_ts_data->get_avoidance(0, layer_nr); + m_ts_data->get_avoidance(node_radius, layer_nr); } - }); + } + }); BOOST_LOG_TRIVIAL(debug) << "before m_avoidance_cache.size()=" << m_ts_data->m_avoidance_cache.size(); } - for (size_t layer_nr = contact_nodes.size() - 1; layer_nr > 0; layer_nr--) //Skip layer 0, since we can't drop down the vertices there. + for (size_t layer_nr = contact_nodes.size() - 1; layer_nr > 0; layer_nr--) // Skip layer 0, since we can't drop down the vertices there. { if (m_object->print()->canceled()) break; auto& layer_contact_nodes = contact_nodes[layer_nr]; - std::deque> unsupported_branch_leaves; // All nodes that are leaves on this layer that would result in unsupported ('mid-air') branches. - const Layer* ts_layer = m_object->get_tree_support_layer(layer_nr); if (layer_contact_nodes.empty()) continue; + + int layer_nr_next = layer_nr - 1; + while (layer_nr_next>=0 && layer_heights[layer_nr_next].second < EPSILON) + layer_nr_next--; + coordf_t print_z_next = layer_heights[layer_nr_next].first; + coordf_t height_next = layer_heights[layer_nr_next].second; + + std::deque> unsupported_branch_leaves; // All nodes that are leaves on this layer that would result in unsupported ('mid-air') branches. + const Layer* ts_layer = m_object->get_tree_support_layer(layer_nr); + m_object->print()->set_status(60, (boost::format(_L("Support: propagate branches at layer %d")) % layer_nr).str()); Polygons layer_contours = std::move(m_ts_data->get_contours_with_holes(layer_nr)); @@ -2510,10 +2620,12 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) const Node& node = *p_node; if (node.distance_to_top < 0) { - // virtual node do not merge or move + // gap nodes do not merge or move Node* next_node = new Node(p_node->position, p_node->distance_to_top + 1, p_node->skin_direction, p_node->support_roof_layers_below - 1, p_node->to_buildplate, p_node, - m_object->get_layer(layer_nr - 1)->print_z, m_object->get_layer(layer_nr - 1)->height); - contact_nodes[layer_nr - 1].emplace_back(next_node); + print_z_next, height_next); + get_max_move_dist(next_node); + next_node->is_merged = false; + contact_nodes[layer_nr_next].emplace_back(next_node); continue; } if (support_on_buildplate_only && !node.to_buildplate) //Can't rest on model and unable to reach the build plate. Then we must drop the node and leave parts unsupported. @@ -2526,14 +2638,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) nodes_per_part[0][node.position] = p_node; continue; } - if (node.type == ePolygon) { - // polygon node do not merge or move - const bool to_buildplate = !is_inside_ex(m_ts_data->m_layer_outlines[layer_nr], p_node->position); - Node *next_node = new Node(p_node->position, p_node->distance_to_top + 1, p_node->skin_direction, p_node->support_roof_layers_below - 1, to_buildplate, p_node, - m_object->get_layer(layer_nr - 1)->print_z, m_object->get_layer(layer_nr - 1)->height); - contact_nodes[layer_nr - 1].emplace_back(next_node); - continue; - } + /* Find which part this node is located in and group the nodes in * the same part together. Since nodes have a radius and the * avoidance areas are offset by that radius, the set of parts may @@ -2585,7 +2690,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) #ifdef SUPPORT_TREE_DEBUG_TO_SVG coordf_t branch_radius_temp = 0; coordf_t max_y = std::numeric_limits::min(); - draw_layer_mst(layer_nr, spanning_trees, m_object->get_layer(layer_nr)->lslices); + draw_layer_mst(std::to_string(ts_layer->print_z), spanning_trees, m_object->get_layer(layer_nr)->lslices); #endif for (size_t group_index = 0; group_index < nodes_per_part.size(); group_index++) { @@ -2601,14 +2706,36 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) continue; //Delete this node (don't create a new node for it on the next layer). } const std::vector& neighbours = mst.adjacent_nodes(node.position); - if (neighbours.size() == 1 && vsize2_with_unscale(neighbours[0] - node.position) < max_move_distance2 && mst.adjacent_nodes(neighbours[0]).size() == 1) //We have just two nodes left, and they're very close! + if (node.type == ePolygon) { + #if 1 + // Remove all neighbours that are completely inside the polygon and merge them into this node. + for (const Point &neighbour : neighbours) { + Node * neighbour_node = nodes_per_part[group_index][neighbour]; + coord_t neighbour_radius = scale_(calc_branch_radius(branch_radius, neighbour_node->dist_mm_to_top, diameter_angle_scale_factor)); + Point pt_north = neighbour + Point(0, neighbour_radius), pt_south = neighbour - Point(0, neighbour_radius), + pt_west = neighbour - Point(neighbour_radius, 0), pt_east = neighbour + Point(neighbour_radius, 0); + if (is_inside_ex(*node.overhang, neighbour) && is_inside_ex(*node.overhang, pt_north) && is_inside_ex(*node.overhang, pt_south) + && is_inside_ex(*node.overhang, pt_west) && is_inside_ex(*node.overhang, pt_east)){ + node.distance_to_top = std::max(node.distance_to_top, neighbour_node->distance_to_top); + node.support_roof_layers_below = std::max(node.support_roof_layers_below, neighbour_node->support_roof_layers_below); + node.dist_mm_to_top = std::max(node.dist_mm_to_top, neighbour_node->dist_mm_to_top); + node.merged_neighbours.push_front(neighbour_node); + node.merged_neighbours.insert(node.merged_neighbours.end(), neighbour_node->merged_neighbours.begin(), neighbour_node->merged_neighbours.end()); + node.is_merged = true; + to_delete.insert(neighbour_node); + } + } + #endif + } + else if (neighbours.size() == 1 && vsize2_with_unscale(neighbours[0] - node.position) < max_move_distance2 && mst.adjacent_nodes(neighbours[0]).size() == 1 && + nodes_per_part[group_index][neighbours[0]]->type!=ePolygon) // We have just two nodes left, and they're very close, and the only neighbor is not ePolygon { //Insert a completely new node and let both original nodes fade. Point next_position = (node.position + neighbours[0]) / 2; //Average position of the two nodes. - const coordf_t branch_radius_node = calc_branch_radius(branch_radius, node.distance_to_top, tip_layers, diameter_angle_scale_factor); + const coordf_t branch_radius_node = calc_branch_radius(branch_radius, node.dist_mm_to_top, diameter_angle_scale_factor); - auto avoid_layer = m_ts_data->get_avoidance(branch_radius_node, layer_nr - 1); + auto avoid_layer = m_ts_data->get_avoidance(branch_radius_node, layer_nr_next); if (group_index == 0) { //Avoid collisions. @@ -2619,12 +2746,22 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) Node* neighbour = nodes_per_part[group_index][neighbours[0]]; size_t new_distance_to_top = std::max(node.distance_to_top, neighbour->distance_to_top) + 1; size_t new_support_roof_layers_below = std::max(node.support_roof_layers_below, neighbour->support_roof_layers_below) - 1; + double new_dist_mm_to_top = std::max(node.dist_mm_to_top + node.height, neighbour->dist_mm_to_top+neighbour->height); + Node * parent; + if (p_node->parent && neighbour->parent) + parent = ((node.dist_mm_to_top >= neighbour->dist_mm_to_top && p_node->parent) ? p_node : neighbour)->parent; + else if (p_node->parent) + parent = p_node->parent; + else + parent = neighbour->parent; - const bool to_buildplate = !is_inside_ex(m_ts_data->get_avoidance(0, layer_nr - 1), next_position); + const bool to_buildplate = !is_inside_ex(m_ts_data->get_avoidance(0, layer_nr_next), next_position); Node * next_node = new Node(next_position, new_distance_to_top, node.skin_direction, new_support_roof_layers_below, to_buildplate, p_node, - m_object->get_layer(layer_nr - 1)->print_z, p_node->height); + layer_heights[layer_nr_next].first, layer_heights[layer_nr_next].second, new_dist_mm_to_top); next_node->movement = next_position - node.position; - contact_nodes[layer_nr - 1].push_back(next_node); + get_max_move_dist(next_node); + next_node->is_merged = true; + contact_nodes[layer_nr_next].push_back(next_node); // Make sure the next pass doesn't drop down either of these (since that already happened). node.merged_neighbours.push_front(neighbour); @@ -2636,13 +2773,17 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) //Remove all neighbours that are too close and merge them into this node. for (const Point& neighbour : neighbours) { - if (vsize2_with_unscale(neighbour - node.position) < max_move_distance2) + if (vsize2_with_unscale(neighbour - node.position) < /*max_move_distance2*/get_max_move_dist(&node,2)) { Node* neighbour_node = nodes_per_part[group_index][neighbour]; + if (neighbour_node->type == ePolygon) continue; + node.distance_to_top = std::max(node.distance_to_top, neighbour_node->distance_to_top); node.support_roof_layers_below = std::max(node.support_roof_layers_below, neighbour_node->support_roof_layers_below); + node.dist_mm_to_top = std::max(node.dist_mm_to_top, neighbour_node->dist_mm_to_top); node.merged_neighbours.push_front(neighbour_node); - node.merged_neighbours.insert_after(node.merged_neighbours.end(), neighbour_node->merged_neighbours.begin(), neighbour_node->merged_neighbours.end()); + node.merged_neighbours.insert(node.merged_neighbours.end(), neighbour_node->merged_neighbours.begin(), neighbour_node->merged_neighbours.end()); + node.is_merged = true; to_delete.insert(neighbour_node); } } @@ -2658,10 +2799,21 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) { continue; } + if (node.type == ePolygon) { + // polygon node do not merge or move + const bool to_buildplate = !is_inside_ex(m_ts_data->m_layer_outlines[layer_nr], p_node->position); + Node * next_node = new Node(p_node->position, p_node->distance_to_top + 1, p_node->skin_direction, p_node->support_roof_layers_below - 1, to_buildplate, + p_node, print_z_next, height_next); + next_node->max_move_dist = 0; + next_node->is_merged = false; + contact_nodes[layer_nr_next].emplace_back(next_node); + continue; + } + //If the branch falls completely inside a collision area (the entire branch would be removed by the X/Y offset), delete it. if (group_index > 0 && is_inside_ex(m_ts_data->get_collision(m_ts_data->m_xy_distance, layer_nr), node.position)) { - const coordf_t branch_radius_node = calc_branch_radius(branch_radius, node.distance_to_top, tip_layers, diameter_angle_scale_factor); + const coordf_t branch_radius_node = calc_branch_radius(branch_radius, node.dist_mm_to_top, diameter_angle_scale_factor); Point to_outside = projection_onto_ex(m_ts_data->get_collision(m_ts_data->m_xy_distance, layer_nr), node.position); double dist2_to_outside = vsize2_with_unscale(node.position - to_outside); if (dist2_to_outside >= branch_radius_node * branch_radius_node) //Too far inside. @@ -2690,110 +2842,132 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) } Point next_layer_vertex = node.position; Point move_to_neighbor_center; + std::vector moves; + std::vector weights; const std::vector neighbours = mst.adjacent_nodes(node.position); // 1. do not merge neighbors under 5mm // 2. Only merge node with single neighbor in distance between [max_move_distance, 10mm/layer_height] float dist2_to_first_neighbor = neighbours.empty() ? 0 : vsize2_with_unscale(neighbours[0] - node.position); - float max_dist_to_move = 10.0*tan_angle; // don't move if moving down by 10mm and they still can't merge if (ts_layer->print_z > DO_NOT_MOVER_UNDER_MM && - (neighbours.size() > 1 || (neighbours.size() == 1 && dist2_to_first_neighbor >= max_move_distance2))) //Only nodes that aren't about to collapse. + (neighbours.size() > 1 || (neighbours.size() == 1 && dist2_to_first_neighbor >= max_move_distance2))) // Only nodes that aren't about to collapse. { - //Move towards the average position of all neighbours. + // Move towards the average position of all neighbours. Point sum_direction(0, 0); - for (const Point& neighbour : neighbours) - { - // do not move to neighbor that's too far away - float dist2_to_neighbor = vsize2_with_unscale(neighbour - node.position); - if (dist2_to_neighbor > SQ(max_dist_to_move)) continue; + for (const Point &neighbour : neighbours) { + // do not move to the neighbor to be deleted + Node *neighbour_node = nodes_per_part[group_index][neighbour]; + if (to_delete.find(neighbour_node) != to_delete.end()) continue; Point direction = neighbour - node.position; - Node *neighbour_node = nodes_per_part[group_index][neighbour]; - coordf_t branch_bottom_radius = calc_branch_radius(branch_radius, node.distance_to_top + layer_nr, tip_layers, diameter_angle_scale_factor); - coordf_t neighbour_bottom_radius = calc_branch_radius(branch_radius, neighbour_node->distance_to_top + layer_nr, tip_layers, diameter_angle_scale_factor); - const coordf_t min_overlap = branch_radius; - double max_converge_distance = tan_angle * (ts_layer->print_z - DO_NOT_MOVER_UNDER_MM) + branch_bottom_radius + neighbour_bottom_radius - min_overlap; - if (vsize2_with_unscale(direction) > max_converge_distance * max_converge_distance) - continue; + // do not move to neighbor that's too far away (即使以最大速度移动,在接触热床之前都无法汇聚) + float dist2_to_neighbor = vsize2_with_unscale(direction); - if (is_line_cut_by_contour(node.position, neighbour)) - continue; + coordf_t branch_bottom_radius = calc_branch_radius(branch_radius, node.dist_mm_to_top + node.print_z, diameter_angle_scale_factor); + coordf_t neighbour_bottom_radius = calc_branch_radius(branch_radius, neighbour_node->dist_mm_to_top + neighbour_node->print_z, diameter_angle_scale_factor); + double max_converge_distance = tan_angle * (ts_layer->print_z - DO_NOT_MOVER_UNDER_MM) + std::max(branch_bottom_radius, neighbour_bottom_radius); + if (dist2_to_neighbor > max_converge_distance * max_converge_distance) continue; - sum_direction += direction; + if (is_line_cut_by_contour(node.position, neighbour)) continue; + + if (is_slim) + sum_direction += direction * (1 / dist2_to_neighbor); + else + sum_direction += direction; } - if(vsize2_with_unscale(sum_direction) <= max_move_distance2) - { + if (is_slim) move_to_neighbor_center = sum_direction; + else { + if (vsize2_with_unscale(sum_direction) <= max_move_distance2) { + move_to_neighbor_center = sum_direction; + } else { + move_to_neighbor_center = normal(sum_direction, scale_(get_max_move_dist(&node))); + } } - else - { - move_to_neighbor_center = normal(sum_direction, scale_(max_move_distance)); - } - // add momentum to force smooth movement - move_to_neighbor_center = move_to_neighbor_center * 0.5 + p_node->movement * 0.5; } - const coordf_t branch_radius_node = calc_branch_radius(branch_radius, node.distance_to_top, tip_layers, diameter_angle_scale_factor); + const coordf_t branch_radius_node = calc_branch_radius(branch_radius, node.dist_mm_to_top/*+node.print_z*/, diameter_angle_scale_factor); #ifdef SUPPORT_TREE_DEBUG_TO_SVG if (node.position(1) > max_y) { - max_y = node.position(1); + max_y = node.position(1); branch_radius_temp = branch_radius_node; } #endif - auto avoid_layer = m_ts_data->get_avoidance(branch_radius_node, layer_nr - 1); + auto avoid_layer = m_ts_data->get_avoidance(branch_radius_node, layer_nr_next); - Point to_outside = projection_onto_ex(avoid_layer, node.position); - Point movement = to_outside - node.position; - double movelength2 = vsize2_with_unscale(movement); + Point to_outside = projection_onto_ex(avoid_layer, node.position); + Point direction_to_outer = to_outside - node.position; + double dist2_to_outer = vsize2_with_unscale(direction_to_outer); // don't move if // 1) line of node and to_outside is cut by contour (means supports may intersect with object) // 2) it's impossible to move to build plate - if (is_line_cut_by_contour(node.position, to_outside) || movelength2 > max_move_distance2 * SQ(layer_nr)) - movement = Point(0, 0); - else if (movelength2 > max_move_distance2) { - if (is_inside_ex(avoid_layer, node.position)) - movement = normal(movement, scale_(max_move_distance)); - else - movement = Point(0, 0); // point is already outside contour, no need to move + if (is_line_cut_by_contour(node.position, to_outside) || dist2_to_outer > max_move_distance2 * SQ(layer_nr) || + !is_inside_ex(avoid_layer, node.position)) { + // try move to outside of lower layer instead + Point candidate_vertex = node.position; + const coordf_t max_move_between_samples = max_move_distance + radius_sample_resolution + EPSILON; // 100 micron extra for rounding errors. + bool is_outside = move_out_expolys(avoid_layer, candidate_vertex, max_move_between_samples, max_move_between_samples); + if (is_outside) { + direction_to_outer = candidate_vertex - node.position; + dist2_to_outer = vsize2_with_unscale(direction_to_outer); + } else { + direction_to_outer = Point(0, 0); + dist2_to_outer = 0; + } } // move to the averaged direction of neighbor center and contour edge if they are roughly same direction - if (movement.dot(move_to_neighbor_center) >= 0) - movement = movement + move_to_neighbor_center; - // Cant do this. Otherwise we'll get a lot of supports in-the-air (nodes terminated too early) - else - movement = move_to_neighbor_center; // otherwise move to neighbor center first + Point movement; + if (/*is_slim*/1) + movement = move_to_neighbor_center*2 + (dist2_to_outer > EPSILON ? direction_to_outer * (1 / dist2_to_outer) : Point(0, 0)); + else { + if (movement.dot(move_to_neighbor_center) >= 0.2 || move_to_neighbor_center == Point(0, 0)) + movement = direction_to_outer + move_to_neighbor_center; + else + movement = move_to_neighbor_center; // otherwise move to neighbor center first + } - if (vsize2_with_unscale(movement) > max_move_distance2) - movement = normal(movement, scale_(max_move_distance)); + if (vsize2_with_unscale(movement) > get_max_move_dist(&node,2)) + movement = normal(movement, scale_(get_max_move_dist(&node))); + + // add momentum to force smooth movement + //movement = movement * 0.5 + p_node->movement * 0.5; next_layer_vertex += movement; - - if (/*group_index ==*/ 0) - { - //Avoid collisions. - const coordf_t max_move_between_samples = max_move_distance + radius_sample_resolution + EPSILON; //100 micron extra for rounding errors. - bool is_outside = move_out_expolys(avoid_layer, next_layer_vertex, radius_sample_resolution + EPSILON, max_move_between_samples); + if (group_index == 0) { + // Avoid collisions. + const coordf_t max_move_between_samples = get_max_move_dist(&node, 1) + radius_sample_resolution + EPSILON; // 100 micron extra for rounding errors. + bool is_outside = move_out_expolys(avoid_layer, next_layer_vertex, radius_sample_resolution + EPSILON, max_move_between_samples); if (!is_outside) { Point candidate_vertex = node.position; - is_outside = move_out_expolys(avoid_layer, candidate_vertex, radius_sample_resolution + EPSILON, max_move_between_samples); - if (is_outside) { - next_layer_vertex = candidate_vertex; - } + is_outside = move_out_expolys(avoid_layer, candidate_vertex, radius_sample_resolution + EPSILON, max_move_between_samples); + if (is_outside) { next_layer_vertex = candidate_vertex; } } } const bool to_buildplate = !is_inside_ex(m_ts_data->m_layer_outlines[layer_nr], next_layer_vertex);// !is_inside_ex(m_ts_data->get_avoidance(m_ts_data->m_xy_distance, layer_nr - 1), next_layer_vertex); Node * next_node = new Node(next_layer_vertex, node.distance_to_top + 1, node.skin_direction, node.support_roof_layers_below - 1, to_buildplate, p_node, - m_object->get_layer(layer_nr - 1)->print_z, m_object->get_layer(layer_nr-1)->height); + print_z_next, height_next); next_node->movement = movement; - contact_nodes[layer_nr - 1].push_back(next_node); + get_max_move_dist(next_node); + next_node->is_merged = false; + contact_nodes[layer_nr_next].push_back(next_node); } } #ifdef SUPPORT_TREE_DEBUG_TO_SVG - draw_contours_and_nodes_to_svg(layer_nr, m_ts_data->get_avoidance(0, layer_nr), m_ts_data->get_avoidance(branch_radius_temp, layer_nr), m_ts_data->m_layer_outlines_below[layer_nr], - contact_nodes[layer_nr], contact_nodes[layer_nr - 1], "contact_points", { "overhang","avoid","outline" }, { "blue","red","yellow" }); + if (contact_nodes[layer_nr].empty() == false) { + draw_contours_and_nodes_to_svg((boost::format("%.2f") % contact_nodes[layer_nr][0]->print_z).str(), m_ts_data->get_avoidance(0, layer_nr), + m_ts_data->get_avoidance(branch_radius_temp, layer_nr), + m_ts_data->m_layer_outlines_below[layer_nr], + contact_nodes[layer_nr], contact_nodes[layer_nr_next], "contact_points", { "overhang","avoid","outline" }, { "blue","red","yellow" }); + + BOOST_LOG_TRIVIAL(debug) << "drop_nodes layer " << layer_nr << ", print_z=" << ts_layer->print_z; + for (size_t i = 0; i < std::min(size_t(5), contact_nodes[layer_nr].size()); i++) { + auto &node = contact_nodes[layer_nr][i]; + BOOST_LOG_TRIVIAL(debug) << "\t node " << i << ", pos=" << node->position << ", move = " << node->movement << ", is_merged=" << node->is_merged; + } + } #endif // Prune all branches that couldn't find support on either the model or the buildplate (resulting in 'mid-air' branches). @@ -2818,7 +2992,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) } } } - + #if 0 // delete nodes with no children (means either it's a single layer nodes, or the branch has been deleted but not completely) for (size_t layer_nr = contact_nodes.size() - 1; layer_nr > 0; layer_nr--){ auto layer_contact_nodes = contact_nodes[layer_nr]; @@ -2832,7 +3006,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) } } } - + #endif BOOST_LOG_TRIVIAL(debug) << "after m_avoidance_cache.size()=" << m_ts_data->m_avoidance_cache.size(); for (Node *node : to_free_node_set) @@ -2840,6 +3014,90 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) delete node; } to_free_node_set.clear(); + + // Merge empty contact_nodes layers + + +#ifdef SUPPORT_TREE_DEBUG_TO_SVG + // export all print_z and layer height into .txt + std::ofstream layer_heights_out; + layer_heights_out.open("./SVG/layer_heights_drop_nodes.txt"); + //layer_heights_out.open("layer_heights_out.txt"); + if (layer_heights_out.is_open()) { + for (int i = 0; i < layer_heights.size(); i++) { + if (contact_nodes[i].empty()) { + layer_heights_out << 0 << " " << 0 << std::endl; + } + else { + layer_heights_out << contact_nodes[i][0]->print_z << " " << contact_nodes[i][0]->height << std::endl; + } + } + layer_heights_out.close(); + } +#endif +} + +void TreeSupport::smooth_nodes(std::vector> &contact_nodes) +{ + std::map is_processed; + for (int layer_nr = 0; layer_nr < contact_nodes.size(); layer_nr++) { + std::vector &curr_layer_nodes = contact_nodes[layer_nr]; + if (curr_layer_nodes.empty()) continue; + for (Node *node : curr_layer_nodes) { + is_processed.emplace(node, false); + if (layer_nr == 0) node->is_merged = true; // nodes on plate are also merged nodes + } + } + + for (int layer_nr = contact_nodes.size()-1; layer_nr >=0 ; layer_nr--) { + std::vector &curr_layer_nodes = contact_nodes[layer_nr]; + if (curr_layer_nodes.empty()) continue; + for (Node *node : curr_layer_nodes) { + if (!is_processed[node]) { + std::vector pts; + std::vector branch; + Node * p_node = node; + // add head for second path from the merged node if there are multiple ones + if (!node->is_merged && node->parent) { + pts.push_back(p_node->parent->position); + branch.push_back(p_node->parent); + } + do { + pts.push_back(p_node->position); + //is_processed[p_node] = true; + branch.push_back(p_node); + p_node = p_node->child; + } while (p_node && !p_node->is_merged && !is_processed[p_node]); + // TODO is it necessary to add tail also? + if (p_node && p_node->is_merged) { + pts.push_back(p_node->position); + branch.push_back(p_node); + } + if (pts.size() < 3) continue; + + std::vector pts1 = pts; + // TODO here we assume layer height gap is constant. If not true, need to consider height jump + // TODO it seems the smooth iterations can't be larger than 1, otherwise some nodes will fly away + for (size_t k = 0; k < 1; k++) { + for (size_t i = 1; i < pts.size() - 1; i++) { + size_t i2 = i >= 2 ? i - 2 : 0; + size_t i3 = i < pts.size() - 2 ? i + 2 : pts.size() - 1; + Point pt = (pts[i2] + pts[i - 1] + pts[i] + pts[i + 1] + pts[i3]) / 5; + pts1[i] = pt; + } + std::swap(pts, pts1); + } + for (size_t i = 1; i < pts.size() - 1; i++) { + if (!is_processed[branch[i]]) { + // do not move if the new position is too far away + if (vsize2_with_unscale(branch[i]->position - pts[i]) < SQ(m_support_params.support_extrusion_width * 2)) { branch[i]->position = pts[i]; } + branch[i]->movement = branch[i]->parent ? (branch[i]->position - branch[i]->parent->position) : Point(0, 0); + is_processed[branch[i]] = true; + } + } + } + } + } } void TreeSupport::adjust_layer_heights(std::vector>& contact_nodes) @@ -2849,7 +3107,9 @@ void TreeSupport::adjust_layer_heights(std::vector>& contact_ const PrintConfig& print_config = m_object->print()->config(); const PrintObjectConfig& config = m_object->config(); - if (!print_config.independent_support_layer_height) { + // don't merge layers for Vine support, or the branches will be unsmooth + // TODO can we merge layers in a way that guaranttees smoothness? + if (!print_config.independent_support_layer_height || is_slim) { for (int layer_nr = 0; layer_nr < contact_nodes.size(); layer_nr++) { std::vector& curr_layer_nodes = contact_nodes[layer_nr]; for (Node* node : curr_layer_nodes) { @@ -2932,6 +3192,105 @@ void TreeSupport::adjust_layer_heights(std::vector>& contact_ } } +std::vector> TreeSupport::plan_layer_heights(std::vector>& contact_nodes) +{ + const PrintObjectConfig& config = m_object->config(); + const PrintConfig & print_config = m_object->print()->config(); + const coordf_t max_layer_height = m_slicing_params.max_layer_height; + const coordf_t layer_height = config.layer_height.value; + coordf_t z_distance_top = m_slicing_params.gap_support_object; + // BBS: add extra distance if thick bridge is enabled + // Note: normal support uses print_z, but tree support uses integer layers, so we need to subtract layer_height + if (!m_slicing_params.soluble_interface && m_object_config->thick_bridges) { + z_distance_top += m_object->layers()[0]->regions()[0]->region().bridging_height_avg(m_object->print()->config()) - layer_height; + } + const size_t support_roof_layers = config.support_interface_top_layers.value; + const int z_distance_top_layers = round_up_divide(scale_(z_distance_top), scale_(layer_height)) + 1; + std::vector> layer_heights(contact_nodes.size(), std::pair(0.0, 0.0)); + std::vector bounds; + + if (!USE_PLAN_LAYER_HEIGHTS || layer_height == max_layer_height || !print_config.independent_support_layer_height) { + for (int layer_nr = 0; layer_nr < contact_nodes.size(); layer_nr++) { + layer_heights[layer_nr].first = m_object->get_layer(layer_nr)->print_z; + layer_heights[layer_nr].second = m_object->get_layer(layer_nr)->height; + } + return layer_heights; + } + + bounds.push_back(0); + // Keep first layer still + layer_heights[0].first = m_object->get_layer(0)->print_z; + layer_heights[0].second = m_object->get_layer(0)->height; + // Collect top contact layers + for (int layer_nr = 1; layer_nr < contact_nodes.size(); layer_nr++) + { + if (!contact_nodes[layer_nr].empty()) + for (int i = 0; i < support_roof_layers + z_distance_top_layers + 1; i++) { + if (layer_nr - i > 0) { + bounds.push_back(layer_nr - i); + layer_heights[layer_nr - i].first = m_object->get_layer(layer_nr - i)->print_z; + layer_heights[layer_nr - i].second = m_object->get_layer(layer_nr - i)->height; + } + else { + break; + } + + } + } + std::set s(bounds.begin(), bounds.end()); + bounds.assign(s.begin(), s.end()); + + for (size_t idx_extreme = 0; idx_extreme < bounds.size(); idx_extreme++) { + int extr2_layer_nr = bounds[idx_extreme]; + coordf_t extr2z = m_object->get_layer(extr2_layer_nr)->bottom_z(); + int extr1_layer_nr = idx_extreme == 0 ? -1 : bounds[idx_extreme - 1]; + coordf_t extr1z = idx_extreme == 0 ? 0.f : m_object->get_layer(extr1_layer_nr)->print_z; + coordf_t dist = extr2z - extr1z; + + // Insert intermediate layers. + size_t n_layers_extra = size_t(ceil(dist / (m_slicing_params.max_suport_layer_height + EPSILON))); + int actual_internel_layers = extr2_layer_nr - extr1_layer_nr - 1; + int extr_layers_left = extr2_layer_nr - extr1_layer_nr - n_layers_extra - 1; + if (n_layers_extra < 1) + continue; + + coordf_t step = dist / coordf_t(n_layers_extra); + coordf_t print_z = extr1z + step; + assert(step >= layer_height - EPSILON); + for (int layer_nr = extr1_layer_nr + 1; layer_nr < extr2_layer_nr; layer_nr++) { + // if (curr_layer_nodes.empty()) continue; + if (std::abs(print_z - m_object->get_layer(layer_nr)->print_z) < step / 2 + EPSILON || extr_layers_left < 1) { + layer_heights[layer_nr].first = print_z; + layer_heights[layer_nr].second = step; + print_z += step; + } + else { + // can't clear curr_layer_nodes, or the model will have empty layers + layer_heights[layer_nr].first = 0.0; + layer_heights[layer_nr].second = 0.0; + extr_layers_left--; + } + } + } + +#ifdef SUPPORT_TREE_DEBUG_TO_SVG + // check bounds + if (1) + { + std::ofstream bounds_out; + bounds_out.open("bounds.txt"); + if (bounds_out.is_open()) { + for (int i = 0; i < bounds.size(); i++) { + bounds_out << bounds[i] << std::endl; + } + } + } +#endif + for (int i = 0; i < layer_heights.size(); i++) { BOOST_LOG_TRIVIAL(info) << "plan_layer_heights print_z, height: "<< layer_heights[i].first << " " << layer_heights[i].second << std::endl; } + + return layer_heights; +} + void TreeSupport::generate_contact_points(std::vector>& contact_nodes) { const PrintObjectConfig &config = m_object->config(); @@ -2971,7 +3330,9 @@ void TreeSupport::generate_contact_points(std::vector 0) + support_roof_layers += 1; // BBS: add a normal support layer below interface (if we have interface) coordf_t thresh_angle = config.support_threshold_angle.value < EPSILON ? 30.f : config.support_threshold_angle.value; coordf_t half_overhang_distance = scale_(tan(thresh_angle * M_PI / 180.0) * layer_height / 2); @@ -2999,11 +3360,12 @@ void TreeSupport::generate_contact_points(std::vector thresh_big_overhang) { + if (config.support_style.value==smsTreeHybrid && overhang_part.area() > thresh_big_overhang) { Point candidate = overhang_bounds.center(); if (!overhang_part.contains(candidate)) move_inside_expoly(overhang_part, candidate); - Node *contact_node = new Node(candidate, -z_distance_top_layers, (layer_nr) % 2, support_roof_layers+ z_distance_top_layers, true, Node::NO_PARENT, print_z, height); + Node *contact_node = new Node(candidate, -z_distance_top_layers, (layer_nr) % 2, support_roof_layers + z_distance_top_layers, true, Node::NO_PARENT, print_z, + height, z_distance_top); contact_node->type = ePolygon; contact_node->overhang = &overhang_part; curr_nodes.emplace_back(contact_node); @@ -3030,7 +3392,8 @@ void TreeSupport::generate_contact_points(std::vectorget_collision(0, layer_nr), candidate)) { constexpr bool to_buildplate = true; - Node* contact_node = new Node(candidate, -z_distance_top_layers, (layer_nr) % 2, support_roof_layers+ z_distance_top_layers, to_buildplate, Node::NO_PARENT,print_z,height); + Node * contact_node = new Node(candidate, -z_distance_top_layers, (layer_nr) % 2, support_roof_layers + z_distance_top_layers, to_buildplate, + Node::NO_PARENT, print_z, height, z_distance_top); contact_node->overhang = &overhang_part; curr_nodes.emplace_back(contact_node); added = true; @@ -3052,7 +3415,8 @@ void TreeSupport::generate_contact_points(std::vectoroverhang = &overhang_part; curr_nodes.emplace_back(contact_node); } @@ -3060,30 +3424,36 @@ void TreeSupport::generate_contact_points(std::vectoroverhang_types[&overhang_part] == TreeSupportLayer::Detected) { // add points at corners auto &points = overhang_part.contour.points; - for (int i = 0; i < points.size(); i++) { + int nSize = points.size(); + for (int i = 0; i < nSize; i++) { auto pt = points[i]; - auto v1 = (pt - points[(i - 1 + points.size()) % points.size()]).normalized(); - auto v2 = (pt - points[(i + 1) % points.size()]).normalized(); - if (v1.dot(v2) > -0.7) { - Node *contact_node = new Node(pt, -z_distance_top_layers, layer_nr % 2, support_roof_layers+ z_distance_top_layers, true, Node::NO_PARENT, print_z, height); + auto v1 = (pt - points[(i - 1 + nSize) % nSize]).cast().normalized(); + auto v2 = (pt - points[(i + 1) % nSize]).cast().normalized(); + if (v1.dot(v2) > -0.7) { // angle smaller than 135 degrees + Node *contact_node = new Node(pt, -z_distance_top_layers, layer_nr % 2, support_roof_layers + z_distance_top_layers, true, Node::NO_PARENT, print_z, + height, z_distance_top); contact_node->overhang = &overhang_part; + contact_node->is_corner = true; curr_nodes.emplace_back(contact_node); } } - } else if(ts_layer->overhang_types[&overhang_part] == TreeSupportLayer::Enforced){ + } + if(ts_layer->overhang_types[&overhang_part] == TreeSupportLayer::Enforced || is_slim){ // remove close points in Enforcers - auto above_nodes = contact_nodes[layer_nr - 1]; - if (!curr_nodes.empty() && !above_nodes.empty()) { + // auto above_nodes = contact_nodes[layer_nr - 1]; + if (!curr_nodes.empty() /*&& !above_nodes.empty()*/) { for (auto it = curr_nodes.begin(); it != curr_nodes.end();) { bool is_duplicate = false; - Slic3r::Vec3f curr_pt((*it)->position(0), (*it)->position(1), scale_((*it)->print_z)); - for (auto &pt : all_nodes) { - auto dif = curr_pt - pt; - if (dif.norm() < scale_(2)) { - delete (*it); - it = curr_nodes.erase(it); - is_duplicate = true; - break; + if (!(*it)->is_corner) { + Slic3r::Vec3f curr_pt((*it)->position(0), (*it)->position(1), scale_((*it)->print_z)); + for (auto &pt : all_nodes) { + auto dif = curr_pt - pt; + if (dif.norm() < point_spread / 2) { + delete (*it); + it = curr_nodes.erase(it); + is_duplicate = true; + break; + } } } if (!is_duplicate) it++; @@ -3094,7 +3464,7 @@ void TreeSupport::generate_contact_points(std::vectorposition(0), node->position(1), scale_(node->print_z)); } #ifdef SUPPORT_TREE_DEBUG_TO_SVG - draw_contours_and_nodes_to_svg(layer_nr, overhang, m_ts_data->m_layer_outlines_below[layer_nr], {}, + draw_contours_and_nodes_to_svg(std::to_string(print_z), overhang, m_ts_data->m_layer_outlines_below[layer_nr], {}, contact_nodes[layer_nr], {}, "init_contact_points", { "overhang","outlines","" }); #endif } @@ -3118,6 +3488,16 @@ void TreeSupport::generate_contact_points(std::vector& nodes_layer, Node* p_node) @@ -3198,7 +3578,7 @@ Polygons TreeSupportData::get_contours_with_holes(size_t layer_nr) const coordf_t TreeSupportData::ceil_radius(coordf_t radius) const { -#if 0 +#if 1 size_t factor = (size_t)(radius / m_radius_sample_resolution); coordf_t remains = radius - m_radius_sample_resolution * factor; if (remains > EPSILON) { @@ -3228,39 +3608,37 @@ const ExPolygons& TreeSupportData::calculate_collision(const RadiusLayerPair& ke const ExPolygons& TreeSupportData::calculate_avoidance(const RadiusLayerPair& key) const { const auto& radius = key.first; - const auto& layer_idx = key.second; -#if 0 - if (layer_idx == 0) - { - m_avoidance_cache[key] = get_collision(radius, 0); - return m_avoidance_cache[key]; - } + const auto& layer_nr = key.second; + std::pair::iterator,bool> ret; + if (/*is_slim*/1) { + if (layer_nr == 0) { + m_avoidance_cache[key] = get_collision(radius, 0); + return m_avoidance_cache[key]; + } - // Avoidance for a given layer depends on all layers beneath it so could have very deep recursion depths if - // called at high layer heights. We can limit the reqursion depth to N by checking if the layer N - // below the current one exists and if not, forcing the calculation of that layer. This may cause another recursion - // if the layer at 2N below the current one but we won't exceed our limit unless there are N*N uncalculated layers - // below our current one. - constexpr auto max_recursion_depth = 100; - // Check if we would exceed the recursion limit by trying to process this layer - if (layer_nr >= max_recursion_depth - && m_avoidance_cache.find({radius, layer_nr - max_recursion_depth}) == m_avoidance_cache.end()) - { - // Force the calculation of the layer `max_recursion_depth` below our current one, ignoring the result. - get_avoidance(radius, layer_nr - max_recursion_depth); - } + // Avoidance for a given layer depends on all layers beneath it so could have very deep recursion depths if + // called at high layer heights. We can limit the reqursion depth to N by checking if the layer N + // below the current one exists and if not, forcing the calculation of that layer. This may cause another recursion + // if the layer at 2N below the current one but we won't exceed our limit unless there are N*N uncalculated layers + // below our current one. + constexpr auto max_recursion_depth = 100; + // Check if we would exceed the recursion limit by trying to process this layer + if (layer_nr >= max_recursion_depth && m_avoidance_cache.find({radius, layer_nr - max_recursion_depth}) == m_avoidance_cache.end()) { + // Force the calculation of the layer `max_recursion_depth` below our current one, ignoring the result. + get_avoidance(radius, layer_nr - max_recursion_depth); + } - ExPolygons avoidance_areas = std::move(offset_ex(get_avoidance(radius, layer_nr - 1), scale_(-m_max_move))); - const ExPolygons& collision = get_collision(radius, layer_nr); - avoidance_areas.insert(avoidance_areas.end(), collision.begin(), collision.end()); - avoidance_areas = std::move(union_ex(avoidance_areas)); - const auto ret = m_avoidance_cache.insert({key, std::move(avoidance_areas)}); - assert(ret.second); -#else - ExPolygons avoidance_areas = std::move(offset_ex(m_layer_outlines_below[layer_idx], scale_(m_xy_distance+radius))); - const auto ret = m_avoidance_cache.insert({ key, std::move(avoidance_areas) }); - assert(ret.second); -#endif + ExPolygons avoidance_areas = std::move(offset_ex(get_avoidance(radius, layer_nr - 1), scale_(-m_max_move))); + const ExPolygons &collision = get_collision(radius, layer_nr); + avoidance_areas.insert(avoidance_areas.end(), collision.begin(), collision.end()); + avoidance_areas = std::move(union_ex(avoidance_areas)); + ret = m_avoidance_cache.insert({key, std::move(avoidance_areas)}); + //assert(ret.second); + } else { + ExPolygons avoidance_areas = std::move(offset_ex(m_layer_outlines_below[layer_nr], scale_(m_xy_distance + radius))); + ret = m_avoidance_cache.insert({key, std::move(avoidance_areas)}); + assert(ret.second); + } return ret.first->second; } diff --git a/src/libslic3r/TreeSupport.hpp b/src/libslic3r/TreeSupport.hpp index b5f25a507b..b725b84228 100644 --- a/src/libslic3r/TreeSupport.hpp +++ b/src/libslic3r/TreeSupport.hpp @@ -121,6 +121,7 @@ private: ExPolygon m_machine_border; public: + bool is_slim = false; /*! * \brief The required clearance between the model and the tree branches */ @@ -170,7 +171,7 @@ public: struct LineHash { size_t operator()(const Line& line) const { return (std::hash()(line.a(0)) ^ std::hash()(line.b(1))) * 102 + - (std::hash()(line.a(0)) ^ std::hash()(line.b(1))) * 10222; + (std::hash()(line.a(1)) ^ std::hash()(line.b(0))) * 10222; } }; @@ -224,7 +225,7 @@ public: {} Node(const Point position, const int distance_to_top, const bool skin_direction, const int support_roof_layers_below, const bool to_buildplate, Node* parent, - coordf_t print_z_, coordf_t height_) + coordf_t print_z_, coordf_t height_, coordf_t dist_mm_to_top_=0) : distance_to_top(distance_to_top) , position(position) , skin_direction(skin_direction) @@ -234,10 +235,13 @@ public: , parent(parent) , print_z(print_z_) , height(height_) + , dist_mm_to_top(dist_mm_to_top_) { if (parent) { type = parent->type; overhang = parent->overhang; + if (dist_mm_to_top==0) + dist_mm_to_top = parent->dist_mm_to_top + parent->height; parent->child = this; } } @@ -255,6 +259,7 @@ public: * Negative value means it's a virtual node between support and overhang, which doesn't need to be extruded. */ int distance_to_top; + coordf_t dist_mm_to_top = 0; // dist to bottom contact in mm /*! * \brief The position of this node on the layer. @@ -262,8 +267,11 @@ public: Point position; Point movement; // movement towards neighbor center or outline - double radius; + mutable double radius = 0.0; + mutable double max_move_dist = 0.0; NodeType type = eCircle; + bool is_merged = false; // this node is generated by merging upper nodes + bool is_corner = false; const ExPolygon* overhang = nullptr; // when type==ePolygon, set this value to get original overhang area /*! @@ -311,7 +319,7 @@ public: * can't be on the model and the path to the buildplate isn't clear), * the entire branch needs to be known. */ - std::forward_list merged_neighbours; + std::list merged_neighbours; coordf_t print_z; coordf_t height; @@ -328,6 +336,7 @@ public: Flow support_material_flow; Flow support_material_interface_flow; Flow support_material_bottom_interface_flow; + coordf_t support_extrusion_width; // Is merging of regions allowed? Could the interface & base support regions be printed with the same extruder? bool can_merge_support_regions; @@ -368,10 +377,16 @@ private: SlicingParameters m_slicing_params; // Various precomputed support parameters to be shared with external functions. SupportParams m_support_params; - size_t m_raft_layers; - size_t m_highest_overhang_layer; + size_t m_raft_layers = 0; + size_t m_highest_overhang_layer = 0; std::vector> m_spanning_trees; std::vector< std::unordered_map> m_mst_line_x_layer_contour_caches; + coordf_t MAX_BRANCH_RADIUS = 10.0; + coordf_t MIN_BRANCH_RADIUS = 0.5; + float tree_support_branch_diameter_angle = 5.0; + bool is_slim = false; + bool with_infill = false; + /*! * \brief Draws circles around each node of the tree into the final support. @@ -397,10 +412,18 @@ private: * dropped down. The nodes are dropped to lower layers inside the same * vector of layers. */ - void drop_nodes(std::vector>& contact_nodes); + void drop_nodes(std::vector> &contact_nodes); + + void smooth_nodes(std::vector> &contact_nodes); void adjust_layer_heights(std::vector>& contact_nodes); + /*! BBS: MusangKing: maximum layer height + * \brief Optimize the generation of tree support by pre-planning the layer_heights + * + */ + + std::vector> plan_layer_heights(std::vector>& contact_nodes); /*! * \brief Creates points where support contacts the model. * @@ -426,6 +449,8 @@ private: void generate_toolpaths(); Polygons spanning_tree_to_polygon(const std::vector& spanning_trees, Polygons layer_contours, int layer_nr); Polygons contact_nodes_to_polygon(const std::vector& contact_nodes, Polygons layer_contours, int layer_nr, std::vector& radiis, std::vector& is_interface); + coordf_t calc_branch_radius(coordf_t base_radius, size_t layers_to_top, size_t tip_layers, double diameter_angle_scale_factor); + coordf_t calc_branch_radius(coordf_t base_radius, coordf_t mm_to_top, double diameter_angle_scale_factor); }; } diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index f509a2681a..1dc4aef593 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -64,7 +64,7 @@ void AMSMaterialsSetting::create() m_clrData->SetChooseFull(true); m_clrData->SetChooseAlpha(false); - m_clr_picker = new Button(this, "", ""); + m_clr_picker = new Button(this, wxEmptyString, wxEmptyString, wxBU_AUTODRAW); m_clr_picker->SetCanFocus(false); m_clr_picker->SetSize(FromDIP(50), FromDIP(25)); m_clr_picker->SetMinSize(wxSize(FromDIP(50), FromDIP(25))); @@ -364,7 +364,12 @@ void AMSMaterialsSetting::on_clr_picker(wxCommandEvent & event) show_flag = true; if (clr_dialog->ShowModal() == wxID_OK) { m_clrData = &(clr_dialog->GetColourData()); - m_clr_picker->SetBackgroundColor(m_clrData->GetColour()); + m_clr_picker->SetBackgroundColor(wxColour( + m_clrData->GetColour().Red(), + m_clrData->GetColour().Green(), + m_clrData->GetColour().Blue(), + 254 + )); } } @@ -374,13 +379,19 @@ bool AMSMaterialsSetting::Show(bool show) m_button_confirm->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE); m_input_nozzle_max->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); m_input_nozzle_min->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); + m_clr_picker->SetBackgroundColour(m_clr_picker->GetParent()->GetBackgroundColour()); } return DPIDialog::Show(show); } void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_min, wxString temp_max) { - m_clr_picker->SetBackgroundColor(m_clrData->GetColour()); + m_clr_picker->SetBackgroundColor(wxColour( + m_clrData->GetColour().Red(), + m_clrData->GetColour().Green(), + m_clrData->GetColour().Blue(), + 254 + )); if (!m_is_third) { m_button_confirm->Hide(); diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index 8b950bf8e0..4a4b635be6 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -83,7 +83,7 @@ protected: Button * m_button_confirm; wxStaticText* m_tip_readonly; Button * m_button_close; - Button * m_clr_picker; + Button * m_clr_picker; wxColourData * m_clrData; #ifdef __APPLE__ wxComboBox *m_comboBox_filament_mac; diff --git a/src/slic3r/GUI/AMSSetting.cpp b/src/slic3r/GUI/AMSSetting.cpp index 020f115ee8..687888e7e9 100644 --- a/src/slic3r/GUI/AMSSetting.cpp +++ b/src/slic3r/GUI/AMSSetting.cpp @@ -200,6 +200,11 @@ void AMSSetting::create() m_panel_img->Layout(); m_sizer_img->Fit(m_panel_img); + m_sizer_remain_block = new wxBoxSizer(wxVERTICAL); + m_sizer_remain_block->Add(m_sizer_remain, 0, wxEXPAND | wxTOP, FromDIP(8)); + m_sizer_remain_block->Add(0, 0, 0, wxTOP, 8); + m_sizer_remain_block->Add(m_sizer_remain_tip, 0, wxLEFT, 18); + m_sizer_remain_block->Add(0, 0, 0, wxTOP, 15); m_sizerl_body->Add(m_sizer_Insert_material, 0, wxEXPAND, 0); m_sizerl_body->Add(0, 0, 0, wxTOP, 8); @@ -209,10 +214,7 @@ void AMSSetting::create() m_sizerl_body->Add(0, 0, 0, wxTOP, 8); m_sizerl_body->Add(m_sizer_starting_tip, 0, wxLEFT, 18); m_sizerl_body->Add(0, 0, 0, wxTOP, 15); - m_sizerl_body->Add(m_sizer_remain, 0, wxEXPAND | wxTOP, FromDIP(8)); - m_sizerl_body->Add(0, 0, 0, wxTOP, 8); - m_sizerl_body->Add(m_sizer_remain_tip, 0, wxLEFT, 18); - m_sizerl_body->Add(0, 0, 0, wxTOP, 15); + m_sizerl_body->Add(m_sizer_remain_block, 0, wxEXPAND, 0); m_sizerl_body->Add(m_sizer_switch_filament, 0, wxEXPAND | wxTOP, FromDIP(8)); m_sizerl_body->Add(0, 0, 0, wxTOP, 8); m_sizerl_body->Add(m_sizer_switch_filament_tip, 0, wxLEFT, 18); @@ -231,6 +233,17 @@ void AMSSetting::create() this->Centre(wxBOTH); wxGetApp().UpdateDlgDarkUI(this); + + Bind(wxEVT_SHOW, [this](auto& e) { + if (this->IsShown()) { + if (ams_support_remain) { + m_sizer_remain_block->Show(true); + } + else { + m_sizer_remain_block->Show(false); + } + } + }); } void AMSSetting::update_insert_material_read_mode(bool selected) diff --git a/src/slic3r/GUI/AMSSetting.hpp b/src/slic3r/GUI/AMSSetting.hpp index 7958fa1a0e..1f49d5973e 100644 --- a/src/slic3r/GUI/AMSSetting.hpp +++ b/src/slic3r/GUI/AMSSetting.hpp @@ -39,6 +39,7 @@ public: wxString append_title(wxString text); wxStaticText *append_text(wxString text); MachineObject *obj{nullptr}; + bool ams_support_remain{false}; int ams_id { 0 }; protected: @@ -72,6 +73,7 @@ protected: wxBoxSizer *m_sizer_starting_tip_inline; wxBoxSizer *m_sizer_remain_inline; wxBoxSizer *m_sizer_switch_filament_inline; + wxBoxSizer *m_sizer_remain_block; }; }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index be5a62451b..ca12552708 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -250,7 +250,7 @@ AboutDialog::AboutDialog() #endif version_font.SetPointSize(FromDIP(16)); version->SetFont(version_font); - version->SetForegroundColour(wxColour("#FFFFFE")); + version->SetForegroundColour(wxColour("#FFFFFD")); version->SetBackgroundColour(wxColour("#00AF42")); vesizer->Add(version, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); vesizer->Add(0, 0, 1, wxEXPAND, FromDIP(5)); diff --git a/src/slic3r/GUI/Auxiliary.cpp b/src/slic3r/GUI/Auxiliary.cpp index e3d9f5560d..823322f642 100644 --- a/src/slic3r/GUI/Auxiliary.cpp +++ b/src/slic3r/GUI/Auxiliary.cpp @@ -456,7 +456,9 @@ void AuFile::on_set_cover() { if (wxGetApp().plater()->model().model_info == nullptr) { wxGetApp().plater()->model().model_info = std::make_shared(); } - wxGetApp().plater()->model().model_info->cover_file = m_file_name.ToStdString(); + fs::path path(into_path(m_file_name)); + wxGetApp().plater()->model().model_info->cover_file = path.string(); + //wxGetApp().plater()->model().model_info->cover_file = m_file_name.ToStdString(); auto full_path = m_file_path.branch_path(); auto full_root_path = full_path.branch_path(); @@ -696,7 +698,8 @@ void AuFolderPanel::update_cover() if (wxGetApp().plater()->model().model_info != nullptr) { for (auto i = 0; i < m_aufiles_list.GetCount(); i++) { AuFiles *aufile = m_aufiles_list[i]; - if (wxGetApp().plater()->model().model_info->cover_file == aufile->file->m_file_name) { + + if (wxString::FromUTF8(wxGetApp().plater()->model().model_info->cover_file) == aufile->file->m_file_name) { aufile->file->set_cover(true); } else { aufile->file->set_cover(false); diff --git a/src/slic3r/GUI/CameraPopup.cpp b/src/slic3r/GUI/CameraPopup.cpp index 99b18be551..d102ecafed 100644 --- a/src/slic3r/GUI/CameraPopup.cpp +++ b/src/slic3r/GUI/CameraPopup.cpp @@ -257,17 +257,23 @@ void CameraPopup::check_func_supported() allow_alter_resolution = (m_obj->is_function_supported(PrinterFunction::FUNC_ALTER_RESOLUTION) && m_obj->has_ipcam); + //check u2 version + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + MachineObject* obj = dev->get_selected_machine(); + if (!obj) return; + //resolution supported std::vector resolution_supported = m_obj->get_resolution_supported(); auto support_count = resolution_supported.size(); for (int i = 0; i < (int)RESOLUTION_OPTIONS_NUM; ++i){ auto curr_res = to_resolution_msg_string(CameraResolution(i)); std::vector ::iterator it = std::find(resolution_supported.begin(), resolution_supported.end(), curr_res); - if ((it == resolution_supported.end())||(support_count <= 1)) + if ((it == resolution_supported.end())||(support_count <= 1) || !obj->is_support_1080dpi) m_resolution_options[i] -> Hide(); } //hide resolution if there is only one choice - if (support_count <= 1) { + if (support_count <= 1 || !obj->is_support_1080dpi) { m_text_resolution->Hide(); } } diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 86c01705ba..d249fa4c7c 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -271,6 +271,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con } double sparse_infill_density = config->option("sparse_infill_density")->value; + auto timelapse_type = config->opt_enum("timelapse_type"); if (config->opt_bool("spiral_mode") && ! (config->opt_int("wall_loops") == 1 && @@ -279,12 +280,12 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con ! config->opt_bool("enable_support") && config->opt_int("enforce_support_layers") == 0 && config->opt_bool("ensure_vertical_shell_thickness") && - ! config->opt_bool("detect_thin_wall"))) + ! config->opt_bool("detect_thin_wall") && + config->opt_enum("timelapse_type") == TimelapseType::tlTraditional)) { - wxString msg_text = _(L("Spiral mode only works when wall loops is 1, \n" - "support is disabled, top shell layers is 0 and sparse infill density is 0\n")); + wxString msg_text = _(L("Spiral mode only works when wall loops is 1, support is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional")); if (is_global_config) - msg_text += "\n" + _(L("Change these settings automatically? \n" + msg_text += "\n\n" + _(L("Change these settings automatically? \n" "Yes - Change these settings and enable spiral mode automatically\n" "No - Give up using spiral mode this time")); MessageDialog dialog(m_msg_dlg_parent, msg_text, "", @@ -301,7 +302,9 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con new_conf.set_key_value("enforce_support_layers", new ConfigOptionInt(0)); new_conf.set_key_value("ensure_vertical_shell_thickness", new ConfigOptionBool(true)); new_conf.set_key_value("detect_thin_wall", new ConfigOptionBool(false)); + new_conf.set_key_value("timelapse_type", new ConfigOptionEnum(tlTraditional)); sparse_infill_density = 0; + timelapse_type = TimelapseType::tlTraditional; support = false; } else { @@ -310,6 +313,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con apply(config, &new_conf); if (cb_value_change) { cb_value_change("sparse_infill_density", sparse_infill_density); + cb_value_change("timelapse_type", timelapse_type); if (!support) cb_value_change("enable_support", false); } @@ -574,19 +578,16 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co "support_type", "support_on_build_plate_only", "support_critical_regions_only", "support_object_xy_distance", "independent_support_layer_height"}) toggle_field(el, have_support_material); - toggle_field("support_threshold_angle", have_support_material && (support_type == stNormalAuto || support_type == stTreeAuto || support_type==stHybridAuto)); + toggle_field("support_threshold_angle", have_support_material && is_auto(support_type)); //toggle_field("support_closing_radius", have_support_material && support_style == smsSnug); + bool support_is_tree = config->opt_bool("enable_support") && is_tree(support_type); for (auto el : {"tree_support_branch_angle", "tree_support_wall_count", "tree_support_branch_distance", "tree_support_branch_diameter"}) - toggle_field(el, config->opt_bool("enable_support") && (support_type == stTreeAuto || support_type == stTree || support_type == stHybridAuto)); + toggle_field(el, support_is_tree); // hide tree support settings when normal is selected - bool support_is_tree = std::set{stTreeAuto, stHybridAuto, stTree}.count(support_type) != 0; - toggle_line("tree_support_branch_distance", support_is_tree); - toggle_line("tree_support_branch_diameter", support_is_tree); - toggle_line("tree_support_branch_angle", support_is_tree); - toggle_line("tree_support_wall_count", support_is_tree); - toggle_line("max_bridge_length", support_is_tree); + for (auto el : {"tree_support_branch_angle", "tree_support_wall_count", "tree_support_branch_distance", "tree_support_branch_diameter", "max_bridge_length"}) + toggle_line(el, support_is_tree); // tree support use max_bridge_length instead of bridge_no_support toggle_line("bridge_no_support", !support_is_tree); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 05ff4e63e8..159169d6c5 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1259,6 +1259,35 @@ bool MachineObject::is_recording() return camera_recording; } +void MachineObject::parse_version_func() +{ + auto ota_version = module_vers.find("ota"); + if (printer_type == "BL-P001" || + printer_type == "BL-P002") { + if (ota_version != module_vers.end()) { + if (ota_version->second.sw_ver.compare("01.01.01.00") <= 0) { + ams_support_remain = false; + ams_support_auto_switch_filament_flag = false; + is_xcam_buildplate_supported = false; + xcam_support_recovery_step_loss = false; + is_support_send_to_sdcard = false; + is_support_1080dpi = false; + is_support_ai_monitoring = false; + is_support_ams_humidity = false; + } else { + ams_support_remain = true; + ams_support_auto_switch_filament_flag = true; + is_xcam_buildplate_supported = true; + xcam_support_recovery_step_loss = true; + is_support_send_to_sdcard = true; + is_support_1080dpi = true; + is_support_ai_monitoring = true; + is_support_ams_humidity = true; + } + } + } +} + int MachineObject::command_get_version(bool with_retry) { BOOST_LOG_TRIVIAL(info) << "command_get_version"; @@ -1987,12 +2016,21 @@ bool MachineObject::is_function_supported(PrinterFunction func) func_name = "FUNC_FIRSTLAYER_INSPECT"; break; case FUNC_AI_MONITORING: + parse_version_func(); + if (!is_support_ai_monitoring) + return false; func_name = "FUNC_AI_MONITORING"; break; case FUNC_BUILDPLATE_MARKER_DETECT: + parse_version_func(); + if (!is_xcam_buildplate_supported) + return false; func_name = "FUNC_BUILDPLATE_MARKER_DETECT"; break; case FUNC_AUTO_RECOVERY_STEP_LOSS: + parse_version_func(); + if (!xcam_support_recovery_step_loss) + return false; func_name = "FUNC_AUTO_RECOVERY_STEP_LOSS"; break; case FUNC_FLOW_CALIBRATION: @@ -2026,9 +2064,15 @@ bool MachineObject::is_function_supported(PrinterFunction func) func_name = "FUNC_ALTER_RESOLUTION"; break; case FUNC_SEND_TO_SDCARD: + parse_version_func(); + if (!is_support_send_to_sdcard) + return false; func_name = "FUNC_SEND_TO_SDCARD"; break; case FUNC_AUTO_SWITCH_FILAMENT: + parse_version_func(); + if (!ams_support_auto_switch_filament_flag) + return false; func_name = "FUNC_AUTO_SWITCH_FILAMENT"; break; case FUNC_VIRTUAL_CAMERA: @@ -2615,6 +2659,9 @@ int MachineObject::parse_json(std::string payload) else { if (jj["xcam"].contains("buildplate_marker_detector")) { xcam_buildplate_marker_detector = jj["xcam"]["buildplate_marker_detector"].get(); + is_xcam_buildplate_supported = true; + } else { + is_xcam_buildplate_supported = false; } } } @@ -2874,6 +2921,8 @@ int MachineObject::parse_json(std::string payload) } if (tray_it->contains("remain")) { curr_tray->remain = (*tray_it)["remain"].get(); + } else { + curr_tray->remain = -1; } try { if (!ams_id.empty() && !curr_tray->id.empty()) { @@ -3021,6 +3070,7 @@ int MachineObject::parse_json(std::string payload) ver_info.hw_ver = (*it)["hw_ver"].get(); module_vers.emplace(ver_info.name, ver_info); } + parse_version_func(); bool get_version_result = true; if (j["info"].contains("result")) if (j["info"]["result"].get() == "fail") diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 2eb3095f80..90245aa205 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -423,8 +423,10 @@ public: bool ams_insert_flag { false }; bool ams_power_on_flag { false }; bool ams_calibrate_remain_flag { false }; + bool ams_support_auto_switch_filament_flag { true }; bool ams_auto_switch_filament_flag { false }; bool ams_support_use_ams { false }; + bool ams_support_remain { true }; int ams_humidity; int ams_user_setting_hold_count = 0; AmsStatusMain ams_status_main; @@ -579,15 +581,23 @@ public: bool xcam_ai_monitoring{ false }; int xcam_ai_monitoring_hold_count = 0; std::string xcam_ai_monitoring_sensitivity; + bool is_xcam_buildplate_supported { true }; bool xcam_buildplate_marker_detector{ false }; int xcam_buildplate_marker_hold_count = 0; + bool xcam_support_recovery_step_loss { true }; bool xcam_auto_recovery_step_loss{ false }; int xcam_auto_recovery_hold_count = 0; int ams_print_option_count = 0; + /*not support U2*/ + bool is_support_1080dpi {false}; + bool is_support_ai_monitoring {false}; + bool is_support_ams_humidity {false}; + /* sdcard */ MachineObject::SdcardState sdcard_state { NO_SDCARD }; MachineObject::SdcardState get_sdcard_state(); + bool is_support_send_to_sdcard { true }; /* HMS */ std::vector hms_list; @@ -622,6 +632,8 @@ public: MachineObject(NetworkAgent* agent, std::string name, std::string id, std::string ip); ~MachineObject(); + + void parse_version_func(); /* command commands */ int command_get_version(bool with_retry = true); int command_request_push_all(); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index f5e4c104af..03895b6932 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1249,7 +1249,7 @@ void GLCanvas3D::on_change_color_mode(bool is_dark, bool reinit) { m_is_dark = is_dark; // Bed color m_bed.on_change_color_mode(is_dark); - // GcodeViewer color + // GcodeViewer color m_gcode_viewer.on_change_color_mode(is_dark); // ImGui Style wxGetApp().imgui()->on_change_color_mode(is_dark); @@ -3827,7 +3827,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) while (p->GetParent()) p = p->GetParent(); auto *top_level_wnd = dynamic_cast(p); - if (top_level_wnd && top_level_wnd->IsActive()) + if (top_level_wnd && top_level_wnd->IsActive() && !wxGetApp().get_side_menu_popup_status()) m_canvas->SetFocus(); m_mouse.position = pos.cast(); m_tooltip_enabled = false; @@ -4891,7 +4891,7 @@ void GLCanvas3D::update_sequential_clearance() // the results are then cached for following displacements if (m_sequential_print_clearance_first_displacement) { m_sequential_print_clearance.m_hull_2d_cache.clear(); - float shrink_factor = static_cast(scale_(0.5 * fff_print()->config().extruder_clearance_radius.value - EPSILON)); + float shrink_factor = static_cast(scale_(0.5 * fff_print()->config().extruder_clearance_max_radius.value - EPSILON)); double mitter_limit = scale_(0.1); m_sequential_print_clearance.m_hull_2d_cache.reserve(m_model->objects.size()); for (size_t i = 0; i < m_model->objects.size(); ++i) { @@ -5689,7 +5689,7 @@ void GLCanvas3D::_switch_toolbars_icon_filename() m_assemble_view_toolbar.init(background_data); m_separator_toolbar.init(background_data); wxGetApp().plater()->get_collapse_toolbar().init(background_data); - + // main toolbar { GLToolbarItem* item; diff --git a/src/slic3r/GUI/GLShadersManager.cpp b/src/slic3r/GUI/GLShadersManager.cpp index e4ed4555cb..33e5a09540 100644 --- a/src/slic3r/GUI/GLShadersManager.cpp +++ b/src/slic3r/GUI/GLShadersManager.cpp @@ -71,16 +71,16 @@ std::pair GLShadersManager::init() // Since macOS 12 (Monterey), this issue with the opposite direction on Apple's Arm CPU seems to be fixed, and computed // triangle normals inside fragment shader have the right direction. if (platform_flavor() == PlatformFlavor::OSXOnArm && wxPlatformInfo::Get().GetOSMajorVersion() < 12) { - //if (GUI::wxGetApp().is_gl_version_greater_or_equal_to(3, 0)) - valid &= append_shader("mm_gouraud", {"mm_gouraud_130.vs", "mm_gouraud_130.fs"}, {"FLIP_TRIANGLE_NORMALS"sv}); + //if (GUI::wxGetApp().plater() && GUI::wxGetApp().plater()->is_wireframe_enabled()) + // valid &= append_shader("mm_gouraud", {"mm_gouraud_wireframe.vs", "mm_gouraud_wireframe.fs"}, {"FLIP_TRIANGLE_NORMALS"sv}); //else - // valid &= append_shader("mm_gouraud", {"mm_gouraud.vs", "mm_gouraud.fs"}, {"FLIP_TRIANGLE_NORMALS"sv}); + valid &= append_shader("mm_gouraud", {"mm_gouraud.vs", "mm_gouraud.fs"}, {"FLIP_TRIANGLE_NORMALS"sv}); } else { - //if (GUI::wxGetApp().is_gl_version_greater_or_equal_to(3, 0)) - valid &= append_shader("mm_gouraud", {"mm_gouraud_wireframe.vs", "mm_gouraud_wireframe.fs"}); + //if (GUI::wxGetApp().plater() && GUI::wxGetApp().plater()->is_wireframe_enabled()) + // valid &= append_shader("mm_gouraud", {"mm_gouraud_wireframe.vs", "mm_gouraud_wireframe.fs"}); //else - // valid &= append_shader("mm_gouraud", {"mm_gouraud.vs", "mm_gouraud.fs"}); + valid &= append_shader("mm_gouraud", {"mm_gouraud.vs", "mm_gouraud.fs"}); } //BBS: add shader for outline diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 8104e8cf60..713d06c0f2 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1892,6 +1892,9 @@ void GUI_App::init_app_config() if (! wxGetEnv(wxS("XDG_CONFIG_HOME"), &dir) || dir.empty() ) dir = wxFileName::GetHomeDir() + wxS("/.config"); set_data_dir((dir + "/" + GetAppName()).ToUTF8().data()); + boost::filesystem::path data_dir_path(data_dir()); + if (!boost::filesystem::exists(data_dir_path)) + boost::filesystem::create_directory(data_dir_path); #endif } else { m_datadir_redefined = true; @@ -2492,11 +2495,14 @@ bool GUI_App::on_init_inner() void GUI_App::copy_network_if_available() { + if (app_config->get("update_network_plugin") != "true") + return; std::string network_library, player_library, network_library_dst, player_library_dst; std::string data_dir_str = data_dir(); boost::filesystem::path data_dir_path(data_dir_str); auto plugin_folder = data_dir_path / "plugins"; auto cache_folder = data_dir_path / "ota"; + std::string changelog_file = cache_folder.string() + "/network_plugins.json"; #if defined(_MSC_VER) || defined(_WIN32) network_library = cache_folder.string() + "/bambu_networking.dll"; player_library = cache_folder.string() + "/BambuSource.dll"; @@ -2545,6 +2551,9 @@ void GUI_App::copy_network_if_available() fs::remove(player_library); BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< ": Copying player library from" << player_library << " to " << player_library_dst<<" successfully."; } + if (boost::filesystem::exists(changelog_file)) + fs::remove(changelog_file); + app_config->set("update_network_plugin", "false"); } bool GUI_App::on_init_network(bool try_backup) @@ -2905,6 +2914,16 @@ void GUI_App::set_label_clr_sys(const wxColour& clr) */ } +bool GUI_App::get_side_menu_popup_status() +{ + return m_side_popup_status; +} + +void GUI_App::set_side_menu_popup_status(bool status) +{ + m_side_popup_status = status; +} + bool GUI_App::tabs_as_menu() const { return false; @@ -5717,5 +5736,21 @@ void GUI_App::disassociate_files(std::wstring extend) #endif // __WXMSW__ +bool is_support_filament(int extruder_id) +{ + auto &filament_presets = Slic3r::GUI::wxGetApp().preset_bundle->filament_presets; + auto &filaments = Slic3r::GUI::wxGetApp().preset_bundle->filaments; + + if (extruder_id >= filament_presets.size()) return false; + + Slic3r::Preset *filament = filaments.find_preset(filament_presets[extruder_id]); + if (filament == nullptr) return false; + + Slic3r::ConfigOptionBools *support_option = dynamic_cast(filament->config.option("filament_is_support")); + if (support_option == nullptr) return false; + + return support_option->get_at(0); +}; + } // GUI } //Slic3r diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 1345843f63..6685b86585 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -7,7 +7,6 @@ #include "ConfigWizard.hpp" #include "OpenGLManager.hpp" #include "libslic3r/Preset.hpp" -#include "wxExtensions.hpp" #include "libslic3r/PresetBundle.hpp" #include "slic3r/GUI/DeviceManager.hpp" #include "slic3r/Utils/NetworkAgent.hpp" @@ -53,7 +52,6 @@ class AppConfig; class PresetBundle; class PresetUpdater; class ModelObject; -// class PrintHostJobQueue; class Model; class DeviceManager; class NetworkAgent; @@ -284,6 +282,7 @@ private: bool enable_sync = false; bool m_is_dark_mode{ false }; bool m_adding_script_handler { false }; + bool m_side_popup_status{false}; public: std::string get_local_models_path(); bool OnInit() override; @@ -338,6 +337,9 @@ public: void update_fonts(const MainFrame *main_frame = nullptr); void set_label_clr_modified(const wxColour& clr); void set_label_clr_sys(const wxColour& clr); + //update side popup status + bool get_side_menu_popup_status(); + void set_side_menu_popup_status(bool status); const wxColour& get_label_clr_modified(){ return m_color_label_modified; } const wxColour& get_label_clr_sys() { return m_color_label_sys; } @@ -588,7 +590,9 @@ private: DECLARE_APP(GUI_App) wxDECLARE_EVENT(EVT_CONNECT_LAN_MODE_PRINT, wxCommandEvent); -} // GUI + +bool is_support_filament(int extruder_id); +} // namespace GUI } // Slic3r #endif // slic3r_GUI_App_hpp_ diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 7c30f17e68..8c0ab3ebee 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -78,7 +78,7 @@ std::map> SettingsFactory::OBJECT_C }}, { L("Support"), {{"brim_type", "",1},{"brim_width", "",2},{"brim_object_gap", "",3}, {"enable_support", "",4},{"support_type", "",5},{"support_threshold_angle", "",6},{"support_on_build_plate_only", "",7}, - {"support_filament", "",8},{"support_interface_filament", "",9},{"support_expansion", "",24}, + {"support_filament", "",8},{"support_interface_filament", "",9},{"support_expansion", "",24},{"support_style", "",25}, {"tree_support_branch_angle", "",10}, {"tree_support_wall_count", "",11},//tree support {"support_top_z_distance", "",13},{"support_bottom_z_distance", "",12},{"support_base_pattern", "",14},{"support_base_pattern_spacing", "",15}, {"support_interface_top_layers", "",16},{"support_interface_bottom_layers", "",17},{"support_interface_spacing", "",18},{"support_bottom_interface_spacing", "",19}, diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 79628e2222..06eeefc65a 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -171,6 +171,16 @@ void GridCellFilamentsEditor::Create(wxWindow* parent, } m_control = bitmap_combo; wxGridCellEditor::Create(parent, id, evtHandler); + + /* bitmap_combo->GetDropDown().Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& e) { + const wxString value = Combo()->GetValue(); + if (value == m_value) + return false; + + m_value = value; + return true; + e.Skip(); + });*/ } void GridCellFilamentsEditor::SetSize(const wxRect& rect) @@ -242,7 +252,7 @@ void GridCellFilamentsEditor::BeginEdit(int row, int col, wxGrid* grid) // When dropping down the menu, a kill focus event // happens after this point, so we can't reset the flag yet. #if !defined(__WXGTK20__) - evtHandler->SetInSetFocus(false); + //evtHandler->SetInSetFocus(false); #endif } } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index 22bebc27dd..1f2a159791 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -540,10 +540,7 @@ int GLGizmoFdmSupports::get_selection_support_threshold_angle() SupportType support_type = obj_cfg.option("support_type") ? obj_cfg.opt_enum("support_type") : glb_cfg.opt_enum("support_type"); int support_threshold_angle = obj_cfg.option("support_threshold_angle") ? obj_cfg.opt_int("support_threshold_angle") : glb_cfg.opt_int("support_threshold_angle"); - bool auto_support = enable_support && - (support_type == SupportType::stHybridAuto || - support_type == SupportType::stTreeAuto || - support_type == SupportType::stNormalAuto); + bool auto_support = enable_support && is_auto(support_type); return auto_support ? support_threshold_angle : 0; } @@ -725,8 +722,7 @@ void GLGizmoFdmSupports::init_print_instance() const PrintObjectConfig& config = m_print_instance.print_object->config(); m_angle_threshold_deg = config.support_angle; - m_is_tree_support = config.enable_support.value && - (config.support_type.value == stTreeAuto || config.support_type.value == stTree || config.support_type.value==stHybridAuto); + m_is_tree_support = config.enable_support.value && is_tree(config.support_type.value); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ",get support_angle "<< m_angle_threshold_deg<<", is_tree "< tip_items; switch (m_tool_type) { case ToolType::BRUSH: - tip_items = {"paint", "erase", "cursor_size", "clipping_of_view", "toggle_wireframe"}; + tip_items = {"paint", "erase", "cursor_size", "clipping_of_view"}; break; case ToolType::BUCKET_FILL: - tip_items = {"paint", "erase", "smart_fill_angle", "clipping_of_view", "toggle_wireframe"}; + tip_items = {"paint", "erase", "smart_fill_angle", "clipping_of_view"}; break; case ToolType::SMART_FILL: // TODO: break; case ToolType::GAP_FILL: - tip_items = {"gap_area", "toggle_wireframe"}; + tip_items = {"gap_area"}; break; default: break; @@ -357,7 +357,7 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott // First calculate width of all the texts that are could possibly be shown. We will decide set the dialog width based on that: const float space_size = m_imgui->get_style_scaling() * 8; - const float clipping_slider_left = std::max(m_imgui->calc_text_size(m_desc.at("clipping_of_view")).x + m_imgui->scaled(1.5f), + const float clipping_slider_left = std::max(m_imgui->calc_text_size(m_desc.at("clipping_of_view")).x + m_imgui->scaled(1.5f), m_imgui->calc_text_size(m_desc.at("reset_direction")).x + m_imgui->scaled(1.5f) + ImGui::GetStyle().FramePadding.x * 2); const float cursor_slider_left = m_imgui->calc_text_size(m_desc.at("cursor_size")).x + m_imgui->scaled(1.5f); const float smart_fill_slider_left = m_imgui->calc_text_size(m_desc.at("smart_fill_angle")).x + m_imgui->scaled(1.5f); diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index fc7b6025af..187e1dc270 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -388,7 +388,7 @@ void ArrangeJob::prepare() params.clearance_height_to_rod = print.config().extruder_clearance_height_to_rod.value; params.clearance_height_to_lid = print.config().extruder_clearance_height_to_lid.value; - params.cleareance_radius = print.config().extruder_clearance_radius.value; + params.cleareance_radius = print.config().extruder_clearance_max_radius.value; params.printable_height = print.config().printable_height.value; params.allow_rotations = settings.enable_rotation; params.allow_multi_materials_on_same_plate = settings.allow_multi_materials_on_same_plate; diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 4c84afc0c1..de4462b217 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1361,9 +1361,6 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_option_btn = new SideButton(this, "", "sidebutton_dropdown", 0, FromDIP(14)); update_side_button_style(); - m_print_option_btn->Enable(); - sizer->Add(FromDIP(15), 0, 0, 0, 0); - m_slice_option_btn->Enable(); m_print_option_btn->Enable(); sizer->Add(m_slice_option_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(1)); diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 342c1405da..8161632146 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -8,6 +8,7 @@ #include "MsgDialog.hpp" #include "DownloadProgressDialog.hpp" +#include #undef pid_t #include #ifdef __WIN32__ diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp index b71f487d2b..a821acc905 100644 --- a/src/slic3r/GUI/NotificationManager.hpp +++ b/src/slic3r/GUI/NotificationManager.hpp @@ -135,6 +135,7 @@ enum class NotificationType BBLSeqPrintInfo, //BBL: plugin install hint BBLPluginInstallHint, + BBLPluginUpdateAvailable, BBLPreviewOnlyMode, }; @@ -873,6 +874,17 @@ private: _u8L("Integration failed.") }, NotificationData{NotificationType::UndoDesktopIntegrationSuccess, NotificationLevel::RegularNotificationLevel, 10, _u8L("Undo integration was successful.") }, + + NotificationData{NotificationType::BBLPluginUpdateAvailable, NotificationLevel::ImportantNotificationLevel, BBL_NOTICE_MAX_INTERVAL, + _u8L("New network plug-in available."), + _u8L("Details"), + [](wxEvtHandler* evnthndlr) { + //BBS set feishu release page by default + wxCommandEvent* evt = new wxCommandEvent(EVT_UPDATE_PLUGINS_WHEN_LAUNCH); + wxQueueEvent(wxGetApp().plater(), evt); + return true; + }}, + NotificationData{NotificationType::UndoDesktopIntegrationFail, NotificationLevel::WarningNotificationLevel, 10, _u8L("Undo integration failed.") }, NotificationData{NotificationType::ExportOngoing, NotificationLevel::RegularNotificationLevel, 0, _u8L("Exporting.")}, diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 922d2c8743..303e307a5c 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1198,6 +1198,28 @@ std::vector PartPlate::get_extruders() const return plate_extruders; } +std::vector PartPlate::get_used_extruders() +{ + std::vector used_extruders; + // if gcode.3mf file + if (m_model->objects.empty()) { + for (int i = 0; i < slice_filaments_info.size(); i++) { + used_extruders.push_back(slice_filaments_info[i].id + 1); + } + return used_extruders; + } + + GCodeProcessorResult* result = get_slice_result(); + if (!result) + return used_extruders; + + PrintEstimatedStatistics& ps = result->print_statistics; + for (auto it = ps.volumes_per_extruder.begin(); it != ps.volumes_per_extruder.end(); it++) { + used_extruders.push_back(it->first + 1); + } + return used_extruders; +} + Vec3d PartPlate::estimate_wipe_tower_size(const double w, const double wipe_volume) const { Vec3d wipe_tower_size; diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 3544ad69d0..2a44cdfa06 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -259,6 +259,7 @@ public: Vec3d get_origin() { return m_origin; } Vec3d estimate_wipe_tower_size(const double w, const double wipe_volume) const; std::vector get_extruders() const; + std::vector get_used_extruders(); /* instance related operations*/ //judge whether instance is bound in plate or not diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index bad42f7abe..3a5abed735 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -160,6 +160,7 @@ wxDEFINE_EVENT(EVT_PUBLISH_FINISHED, wxCommandEvent); wxDEFINE_EVENT(EVT_REPAIR_MODEL, wxCommandEvent); wxDEFINE_EVENT(EVT_FILAMENT_COLOR_CHANGED, wxCommandEvent); wxDEFINE_EVENT(EVT_INSTALL_PLUGIN_NETWORKING, wxCommandEvent); +wxDEFINE_EVENT(EVT_UPDATE_PLUGINS_WHEN_LAUNCH, wxCommandEvent); wxDEFINE_EVENT(EVT_INSTALL_PLUGIN_HINT, wxCommandEvent); wxDEFINE_EVENT(EVT_PREVIEW_ONLY_MODE_HINT, wxCommandEvent); //BBS: change light/dark mode @@ -1101,7 +1102,7 @@ void Sidebar::update_presets(Preset::Type preset_type) Tab* print_tab = wxGetApp().get_tab(Preset::TYPE_PRINT); if (print_tab) { print_tab->get_combo_box()->update(); - } + } break; } case Preset::TYPE_SLA_PRINT: @@ -1116,7 +1117,7 @@ void Sidebar::update_presets(Preset::Type preset_type) { update_all_preset_comboboxes(); p->show_preset_comboboxes(); - + /* update bed shape */ Tab* printer_tab = wxGetApp().get_tab(Preset::TYPE_PRINTER); if (printer_tab) { @@ -2135,6 +2136,7 @@ private: void update_after_undo_redo(const UndoRedo::Snapshot& snapshot, bool temp_snapshot_was_taken = false); void on_action_export_to_sdcard(SimpleEvent&); void on_action_export_to_sdcard_all(SimpleEvent&); + void update_plugin_when_launch(wxCommandEvent& event); // path to project folder stored with no extension boost::filesystem::path m_project_folder; @@ -2229,6 +2231,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) this->q->Bind(EVT_FILAMENT_COLOR_CHANGED, &priv::on_filament_color_changed, this); this->q->Bind(EVT_INSTALL_PLUGIN_NETWORKING, &priv::install_network_plugin, this); this->q->Bind(EVT_INSTALL_PLUGIN_HINT, &priv::show_install_plugin_hint, this); + this->q->Bind(EVT_UPDATE_PLUGINS_WHEN_LAUNCH, &priv::update_plugin_when_launch, this); this->q->Bind(EVT_PREVIEW_ONLY_MODE_HINT, &priv::show_preview_only_hint, this); this->q->Bind(EVT_GLCANVAS_COLOR_MODE_CHANGED, &priv::on_change_color_mode, this); this->q->Bind(wxEVT_SYS_COLOUR_CHANGED, &priv::on_apple_change_color_mode, this); @@ -6212,6 +6215,29 @@ void Plater::priv::install_network_plugin(wxCommandEvent &event) return; } +void Plater::priv::update_plugin_when_launch(wxCommandEvent &event) +{ + std::string data_dir_str = data_dir(); + boost::filesystem::path data_dir_path(data_dir_str); + auto cache_folder = data_dir_path / "ota"; + std::string changelog_file = cache_folder.string() + "/network_plugins.json"; + + UpdatePluginDialog dlg(wxGetApp().mainframe); + dlg.update_info(changelog_file); + auto result = dlg.ShowModal(); + + auto app_config = wxGetApp().app_config; + if (!app_config) return; + + if (result == wxID_OK) { + app_config->set("update_network_plugin", "true"); + } + else if (result == wxID_NO) { + app_config->set("update_network_plugin", "false"); + } + app_config->save(); +} + void Plater::priv::show_install_plugin_hint(wxCommandEvent &event) { notification_manager->bbl_show_plugin_install_notification(into_u8(_L("Network Plug-in is not detected. Network related features are unavailable."))); @@ -7376,6 +7402,7 @@ Plater::Plater(wxWindow *parent, MainFrame *main_frame) , p(new priv(this, main_frame)) { // Initialization performed in the private c-tor + enable_wireframe(false); } bool Plater::Show(bool show) diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 1efee732c0..cc2b4d3975 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -87,6 +87,7 @@ wxDECLARE_EVENT(EVT_REPAIR_MODEL, wxCommandEvent); wxDECLARE_EVENT(EVT_FILAMENT_COLOR_CHANGED, wxCommandEvent); wxDECLARE_EVENT(EVT_INSTALL_PLUGIN_NETWORKING, wxCommandEvent); wxDECLARE_EVENT(EVT_INSTALL_PLUGIN_HINT, wxCommandEvent); +wxDECLARE_EVENT(EVT_UPDATE_PLUGINS_WHEN_LAUNCH, wxCommandEvent); wxDECLARE_EVENT(EVT_PREVIEW_ONLY_MODE_HINT, wxCommandEvent); wxDECLARE_EVENT(EVT_GLCANVAS_COLOR_MODE_CHANGED, SimpleEvent); diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 01d9b2917f..5893d63492 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -44,7 +44,7 @@ ReleaseNoteDialog::ReleaseNoteDialog(Plater *plater /*= nullptr*/) m_sizer_body->Add(0, 0, 0, wxLEFT, FromDIP(38)); - auto sm = create_scaled_bitmap("BambuStudio", nullptr, 70); + auto sm = create_scaled_bitmap("BambuStudio", nullptr, 70); auto brand = new wxStaticBitmap(this, wxID_ANY, sm, wxDefaultPosition, wxSize(FromDIP(70), FromDIP(70))); m_sizer_body->Add(brand, 0, wxALL, 0); @@ -85,8 +85,8 @@ void ReleaseNoteDialog::on_dpi_changed(const wxRect &suggested_rect) { } -void ReleaseNoteDialog::update_release_note(wxString release_note, std::string version) -{ +void ReleaseNoteDialog::update_release_note(wxString release_note, std::string version) +{ m_text_up_info->SetLabel(wxString::Format(_L("version %s update information :"), version)); wxBoxSizer * sizer_text_release_note = new wxBoxSizer(wxVERTICAL); auto m_staticText_release_note = new wxStaticText(m_vebview_release_note, wxID_ANY, release_note, wxDefaultPosition, wxDefaultSize, 0); @@ -97,34 +97,175 @@ void ReleaseNoteDialog::update_release_note(wxString release_note, std::string v m_vebview_release_note->Fit(); } -void UpdateVersionDialog::alter_choice(wxCommandEvent& event) -{ - wxGetApp().set_skip_version(m_remind_choice->GetValue()); -} - -UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) - : DPIDialog(parent, wxID_ANY, _L("New version of Bambu Studio"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) +UpdatePluginDialog::UpdatePluginDialog(wxWindow* parent /*= nullptr*/) + : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Network plug-in update"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); SetBackgroundColour(*wxWHITE); - wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); - auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); + wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(30)); + wxBoxSizer* m_sizer_body = new wxBoxSizer(wxHORIZONTAL); + + + + auto sm = create_scaled_bitmap("BambuStudio", nullptr, 55); + auto brand = new wxStaticBitmap(this, wxID_ANY, sm, wxDefaultPosition, wxSize(FromDIP(55), FromDIP(55))); + + wxBoxSizer* m_sizer_right = new wxBoxSizer(wxVERTICAL); + + m_text_up_info = new wxStaticText(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + m_text_up_info->SetFont(::Label::Head_13); + m_text_up_info->SetMaxSize(wxSize(FromDIP(260), -1)); + m_text_up_info->Wrap(FromDIP(260)); + m_text_up_info->SetForegroundColour(wxColour(0x26, 0x2E, 0x30)); + + + operation_tips = new ::Label(this, _L("Click OK to update the Network plug-in when Bambu Studio launches next time.")); + operation_tips->SetFont(::Label::Body_12); + operation_tips->SetSize(wxSize(FromDIP(260), -1)); + operation_tips->Wrap(FromDIP(260)); + operation_tips->SetForegroundColour(*wxBLACK); + + + m_vebview_release_note = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + m_vebview_release_note->SetScrollRate(5, 5); + m_vebview_release_note->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8)); + m_vebview_release_note->SetMinSize(wxSize(FromDIP(260), FromDIP(150))); + m_vebview_release_note->SetMaxSize(wxSize(FromDIP(260), FromDIP(150))); + + auto sizer_button = new wxBoxSizer(wxHORIZONTAL); + + StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); + + StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), + std::pair(*wxWHITE, StateColor::Normal)); + + auto m_button_ok = new Button(this, _L("OK")); + m_button_ok->SetBackgroundColor(btn_bg_green); + m_button_ok->SetBorderColor(*wxWHITE); + m_button_ok->SetTextColor(wxColour(0xFFFFFE)); + m_button_ok->SetFont(Label::Body_12); + m_button_ok->SetSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_ok->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_ok->SetCornerRadius(FromDIP(12)); + + m_button_ok->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + EndModal(wxID_OK); + }); + + auto m_button_cancel = new Button(this, _L("Cancel")); + m_button_cancel->SetBackgroundColor(btn_bg_white); + m_button_cancel->SetBorderColor(wxColour(38, 46, 48)); + m_button_cancel->SetFont(Label::Body_12); + m_button_cancel->SetSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_cancel->SetCornerRadius(FromDIP(12)); + + m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + EndModal(wxID_NO); + }); + + sizer_button->AddStretchSpacer(); + sizer_button->Add(m_button_ok, 0, wxALL, FromDIP(5)); + sizer_button->Add(m_button_cancel, 0, wxALL, FromDIP(5)); + + m_sizer_right->Add(m_text_up_info, 0, 0, 0); + m_sizer_right->Add(0, 0, 0, wxTOP, FromDIP(5)); + m_sizer_right->Add(m_vebview_release_note, 0, wxEXPAND | wxRIGHT, FromDIP(20)); + m_sizer_right->Add(0, 0, 0, wxTOP, FromDIP(5)); + m_sizer_right->Add(operation_tips, 1, wxEXPAND | wxRIGHT, FromDIP(20)); + m_sizer_right->Add(0, 0, 0, wxTOP, FromDIP(5)); + m_sizer_right->Add(sizer_button, 0, wxEXPAND | wxRIGHT, FromDIP(20)); + + m_sizer_body->Add(0, 0, 0, wxLEFT, FromDIP(24)); + m_sizer_body->Add(brand, 0, wxALL, 0); + m_sizer_body->Add(0, 0, 0, wxRIGHT, FromDIP(20)); + m_sizer_body->Add(m_sizer_right, 1, wxBOTTOM | wxEXPAND, FromDIP(18)); + m_sizer_main->Add(m_sizer_body, 0, wxEXPAND, 0); + + SetSizer(m_sizer_main); + Layout(); + m_sizer_main->Fit(this); + + Centre(wxBOTH); + wxGetApp().UpdateDlgDarkUI(this); +} + +UpdatePluginDialog::~UpdatePluginDialog() {} + + +void UpdatePluginDialog::on_dpi_changed(const wxRect& suggested_rect) +{ +} + +void UpdatePluginDialog::update_info(std::string json_path) +{ + std::string version_str, description_str; + wxString version; + wxString description; + + try { + boost::nowide::ifstream ifs(json_path); + json j; + ifs >> j; + + version_str = j["version"]; + description_str = j["description"]; + } + catch(nlohmann::detail::parse_error &err) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse "<SetMaxSize(wxSize(FromDIP(260), -1)); + m_text_up_info->Wrap(FromDIP(260)); + wxBoxSizer* sizer_text_release_note = new wxBoxSizer(wxVERTICAL); + auto m_text_label = new ::Label(m_vebview_release_note, description); + m_text_label->SetFont(::Label::Body_13); + m_text_label->SetForegroundColour(*wxBLACK); + m_text_label->SetMaxSize(wxSize(FromDIP(235), -1)); + m_text_label->Wrap(FromDIP(235)); + + sizer_text_release_note->Add(m_text_label, 0, wxALL, 5); + m_vebview_release_note->SetSizer(sizer_text_release_note); + m_vebview_release_note->Layout(); + m_vebview_release_note->Fit(); + Layout(); + Fit(); +} + +UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) + : DPIDialog(parent, wxID_ANY, _L("New version of Bambu Studio"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) +{ + std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + SetBackgroundColour(*wxWHITE); + + wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); + m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); + + wxBoxSizer *m_sizer_body = new wxBoxSizer(wxHORIZONTAL); - m_sizer_body->Add(0, 0, 0, wxLEFT, FromDIP(38)); + auto sm = create_scaled_bitmap("BambuStudio", nullptr, 70); - auto brand = new wxStaticBitmap(this, wxID_ANY, sm, wxDefaultPosition, wxSize(FromDIP(70), FromDIP(70))); + m_brand = new wxStaticBitmap(this, wxID_ANY, sm, wxDefaultPosition, wxSize(FromDIP(70), FromDIP(70))); - m_sizer_body->Add(brand, 0, wxALL, 0); - - m_sizer_body->Add(0, 0, 0, wxRIGHT, FromDIP(25)); + wxBoxSizer *m_sizer_right = new wxBoxSizer(wxVERTICAL); @@ -132,14 +273,12 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) m_text_up_info->SetFont(::Label::Head_14); m_text_up_info->SetForegroundColour(wxColour(0x26, 0x2E, 0x30)); m_text_up_info->Wrap(-1); - m_sizer_right->Add(m_text_up_info, 0, 0, 0); - m_sizer_right->Add(0, 0, 1, wxTOP, FromDIP(15)); + m_simplebook_release_note = new wxSimplebook(this); m_simplebook_release_note->SetSize(wxSize(FromDIP(560), FromDIP(430))); m_simplebook_release_note->SetMinSize(wxSize(FromDIP(560), FromDIP(430))); - m_simplebook_release_note->SetMaxSize(wxSize(FromDIP(560), FromDIP(430))); m_simplebook_release_note->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8)); m_scrollwindows_release_note = new wxScrolledWindow(m_simplebook_release_note, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(560), FromDIP(430)), wxVSCROLL); @@ -151,7 +290,7 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) m_vebview_release_note->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8)); m_vebview_release_note->SetSize(wxSize(FromDIP(560), FromDIP(430))); m_vebview_release_note->SetMinSize(wxSize(FromDIP(560), FromDIP(430))); - m_vebview_release_note->SetMaxSize(wxSize(FromDIP(560), FromDIP(430))); + //m_vebview_release_note->SetMaxSize(wxSize(FromDIP(560), FromDIP(430))); fs::path ph(data_dir()); ph /= "resources/tooltip/common/releasenote.html"; @@ -174,7 +313,7 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) auto sizer_button = new wxBoxSizer(wxHORIZONTAL); - + StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); @@ -184,7 +323,7 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) m_button_ok = new Button(this, _L("OK")); m_button_ok->SetBackgroundColor(btn_bg_green); m_button_ok->SetBorderColor(*wxWHITE); - m_button_ok->SetTextColor(*wxWHITE); + m_button_ok->SetTextColor(wxColour("#FFFFFE")); m_button_ok->SetFont(Label::Body_12); m_button_ok->SetSize(wxSize(FromDIP(58), FromDIP(24))); m_button_ok->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); @@ -202,26 +341,32 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); m_button_cancel->SetCornerRadius(FromDIP(12)); - m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { - EndModal(wxID_NO); + m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { + EndModal(wxID_NO); }); - + + m_sizer_main->Add(m_line_top, 0, wxEXPAND | wxBOTTOM, 0); + sizer_button->Add(m_remind_choice, 0, wxALL | wxEXPAND, FromDIP(5)); sizer_button->AddStretchSpacer(); sizer_button->Add(m_button_ok, 0, wxALL, FromDIP(5)); sizer_button->Add(m_button_cancel, 0, wxALL, FromDIP(5)); - - m_sizer_right->Add(m_simplebook_release_note, 0, wxEXPAND | wxRIGHT, FromDIP(20)); + m_sizer_right->Add(m_text_up_info, 0, wxBOTTOM|wxTOP, FromDIP(15)); + m_sizer_right->Add(m_simplebook_release_note, 1, wxEXPAND | wxRIGHT, 0); m_sizer_right->Add(sizer_button, 0, wxEXPAND | wxRIGHT, FromDIP(20)); - + + m_sizer_body->Add(m_brand, 0, wxTOP|wxRIGHT|wxLEFT, FromDIP(15)); + m_sizer_body->Add(0, 0, 0, wxRIGHT, 0); m_sizer_body->Add(m_sizer_right, 1, wxBOTTOM | wxEXPAND, FromDIP(8)); - m_sizer_main->Add(m_sizer_body, 0, wxEXPAND, 0); + m_sizer_main->Add(m_sizer_body, 1, wxEXPAND, 0); m_sizer_main->Add(0, 0, 0, wxBOTTOM, 10); SetSizer(m_sizer_main); Layout(); - m_sizer_main->Fit(this); + Fit(); + + SetMinSize(GetSize()); Centre(wxBOTH); wxGetApp().UpdateDlgDarkUI(this); @@ -229,6 +374,11 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) UpdateVersionDialog::~UpdateVersionDialog() {} +void UpdateVersionDialog::alter_choice(wxCommandEvent& event) +{ + wxGetApp().set_skip_version(m_remind_choice->GetValue()); +} + wxWebView* UpdateVersionDialog::CreateTipView(wxWindow* parent) { wxWebView* tipView = WebView::CreateWebView(parent, ""); @@ -312,26 +462,32 @@ std::vector UpdateVersionDialog::splitWithStl(std::string str,std:: } void UpdateVersionDialog::update_version_info(wxString release_note, wxString version) -{ +{ //bbs check whether the web display is used bool use_web_link = false; std::string url_line = ""; /*auto split_array = splitWithStl(release_note.ToStdString(), "\r\n"); - for (auto i = 0; i < split_array.size(); i++) { - std::string url = split_array[i]; - if (std::strstr (url.c_str(), "http://") != NULL || std::strstr (url.c_str(), "https://") != NULL) { - use_web_link = true; - url_line = url; - break; + if (split_array.size() >= 3) { + for (auto i = 0; i < split_array.size(); i++) { + std::string url = split_array[i]; + if (std::strstr(url.c_str(), "http://") != NULL || std::strstr(url.c_str(), "https://") != NULL) { + use_web_link = true; + url_line = url; + break; + } } } + if (use_web_link) { + m_brand->Hide(); + m_text_up_info->Hide(); m_simplebook_release_note->SetSelection(1); m_vebview_release_note->LoadURL(from_u8(url_line)); } else {*/ + m_simplebook_release_note->SetMaxSize(wxSize(FromDIP(560), FromDIP(430))); m_simplebook_release_note->SetSelection(0); m_text_up_info->SetLabel(wxString::Format(_L("Click to download new version in default browser: %s"), version)); wxBoxSizer* sizer_text_release_note = new wxBoxSizer(wxVERTICAL); @@ -341,7 +497,11 @@ void UpdateVersionDialog::update_version_info(wxString release_note, wxString ve m_scrollwindows_release_note->SetSizer(sizer_text_release_note); m_scrollwindows_release_note->Layout(); m_scrollwindows_release_note->Fit(); - //} + SetMinSize(GetSize()); + SetMaxSize(GetSize()); + //} + Layout(); + Fit(); } SecondaryCheckDialog::SecondaryCheckDialog(wxWindow* parent, wxWindowID id, const wxString& title, enum ButtonStyle btn_style, const wxPoint& pos, const wxSize& size, long style, bool not_show_again_check) diff --git a/src/slic3r/GUI/ReleaseNote.hpp b/src/slic3r/GUI/ReleaseNote.hpp index 19fbdc25a1..cfc1eab574 100644 --- a/src/slic3r/GUI/ReleaseNote.hpp +++ b/src/slic3r/GUI/ReleaseNote.hpp @@ -53,6 +53,20 @@ public: wxScrolledWindow *m_vebview_release_note {nullptr}; }; +class UpdatePluginDialog : public DPIDialog +{ +public: + UpdatePluginDialog(wxWindow* parent = nullptr); + ~UpdatePluginDialog(); + + void on_dpi_changed(const wxRect& suggested_rect) override; + void update_info(std::string json_path); + + wxStaticText* m_text_up_info{ nullptr }; + Label* operation_tips{ nullptr }; + wxScrolledWindow* m_vebview_release_note{ nullptr }; +}; + class UpdateVersionDialog : public DPIDialog { public: @@ -70,6 +84,7 @@ public: void alter_choice(wxCommandEvent& event); std::vector splitWithStl(std::string str, std::string pattern); + wxStaticBitmap* m_brand{nullptr}; wxStaticText * m_text_up_info{nullptr}; wxWebView* m_vebview_release_note{nullptr}; wxSimplebook* m_simplebook_release_note{nullptr}; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 576cd257d1..4fc8fb1be9 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -2927,7 +2927,7 @@ void SelectMachineDialog::set_default() } // material info - auto extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_extruders(); + auto extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_extruders(); BitmapCache bmcache; MaterialHash::iterator iter = m_materialList.begin(); diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index fa13ca0aeb..6f404bfbc7 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -2707,7 +2707,7 @@ void Selection::paste_objects_from_clipboard() auto start_offset = in_current ? src_object->instances.front()->get_offset() : plate->get_build_volume().center(); auto point_offset = start_offset - start_point; auto empty_cell = wxGetApp().plater()->canvas3D()->get_nearest_empty_cell({start_point(0), start_point(1)}, {bbox.size()(0)+1, bbox.size()(1)+1}); - displacement = {empty_cell.x() + point_offset.x(), empty_cell.y() + point_offset.y(), start_point(2)}; + displacement = {empty_cell.x() + point_offset.x(), empty_cell.y() + point_offset.y(), start_offset(2)}; } for (ModelInstance* inst : dst_object->instances) diff --git a/src/slic3r/GUI/SendToPrinter.cpp b/src/slic3r/GUI/SendToPrinter.cpp index 92f4395712..b5fa7ba4a5 100644 --- a/src/slic3r/GUI/SendToPrinter.cpp +++ b/src/slic3r/GUI/SendToPrinter.cpp @@ -892,6 +892,12 @@ void SendToPrinterDialog::update_show_status() reset_timeout(); + bool is_suppt = obj_->is_function_supported(PrinterFunction::FUNC_SEND_TO_SDCARD); + if (!is_suppt) { + show_status(PrintDialogStatus::PrintStatusNotSupportedSendToSDCard); + return; + } + // reading done if (obj_->is_in_upgrading()) { show_status(PrintDialogStatus::PrintStatusInUpgrading); @@ -914,12 +920,6 @@ void SendToPrinterDialog::update_show_status() show_status(PrintDialogStatus::PrintStatusNotOnTheSameLAN); return; } - - bool is_suppt = obj_->is_function_supported(PrinterFunction::FUNC_SEND_TO_SDCARD); - if (!is_suppt) { - show_status(PrintDialogStatus::PrintStatusNotSupportedSendToSDCard); - return; - } show_status(PrintDialogStatus::PrintStatusReadingFinished); } diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index aa76bc129e..1c915cf381 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1807,6 +1807,7 @@ void StatusPanel::update_ams(MachineObject *obj) // update obj in sub dlg if (m_ams_setting_dlg) { m_ams_setting_dlg->obj = obj; + if (obj && m_ams_setting_dlg->IsShown()) { m_ams_setting_dlg->update_insert_material_read_mode(obj->ams_insert_flag); m_ams_setting_dlg->update_starting_read_mode(obj->ams_power_on_flag); @@ -1842,7 +1843,7 @@ void StatusPanel::update_ams(MachineObject *obj) for (auto ams = obj->amsList.begin(); ams != obj->amsList.end(); ams++) { AMSinfo info; info.ams_id = ams->first; - if (ams->second->is_exists && info.parse_ams_info(ams->second, obj->ams_calibrate_remain_flag)) ams_info.push_back(info); + if (ams->second->is_exists && info.parse_ams_info(ams->second, obj->ams_calibrate_remain_flag, obj->is_support_ams_humidity)) ams_info.push_back(info); } //if (obj->ams_exist_bits != last_ams_exist_bits || obj->tray_exist_bits != last_tray_exist_bits || obj->tray_is_bbl_bits != last_tray_is_bbl_bits || // obj->tray_read_done_bits != last_read_done_bits || obj->ams_version != last_ams_version) { @@ -2445,6 +2446,7 @@ void StatusPanel::on_ams_setting_click(SimpleEvent &event) try { int ams_id_int = atoi(ams_id.c_str()); m_ams_setting_dlg->ams_id = ams_id_int; + m_ams_setting_dlg->ams_support_remain = obj->ams_support_remain; m_ams_setting_dlg->Show(); } catch (...) { ; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 966ac31ff1..17da824fc7 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1418,6 +1418,65 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) } } + // BBS popup a message to ask the user to set optimum parameters for tree support + if (opt_key == "support_type" || opt_key == "support_style") { + if (is_tree_slim(m_config->opt_enum("support_type"), m_config->opt_enum("support_style")) && + !(m_config->opt_float("support_top_z_distance") == 0 && m_config->opt_int("support_interface_top_layers") == 0 && m_config->opt_int("tree_support_wall_count") == 2)) { + wxString msg_text = _L("We have added an experimental style \"Tree Slim\" that features smaller support volume but weaker strength.\n" + "We recommend using it with: 0 interface layers, 0 top distance, 2 walls."); + msg_text += "\n\n" + _L("Change these settings automatically? \n" + "Yes - Change these settings automatically\n" + "No - Do not change these settings for me"); + MessageDialog dialog(wxGetApp().plater(), msg_text, "Suggestion", wxICON_WARNING | wxYES | wxNO); + DynamicPrintConfig new_conf = *m_config; + if (dialog.ShowModal() == wxID_YES) { + new_conf.set_key_value("support_top_z_distance", new ConfigOptionFloat(0)); + new_conf.set_key_value("support_interface_top_layers", new ConfigOptionInt(0)); + new_conf.set_key_value("tree_support_wall_count", new ConfigOptionInt(2)); + m_config_manipulation.apply(m_config, &new_conf); + } + wxGetApp().plater()->update(); + } else if ((m_config->opt_enum("support_type")==stTreeAuto && (m_config->opt_enum("support_style")==smsTreeStrong || m_config->opt_enum("support_style") == smsTreeHybrid)) && + !((m_config->opt_float("support_top_z_distance") >=0.1 || is_support_filament(m_config->opt_int("support_interface_filament") - 1)) + && m_config->opt_int("support_interface_top_layers") >1) ) { + wxString msg_text = _L("For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following settings: at least 2 interface layers, at least 0.1mm top z distance or using support materials on interface."); + msg_text += "\n\n" + _L("Change these settings automatically? \n" + "Yes - Change these settings automatically\n" + "No - Do not change these settings for me"); + MessageDialog dialog(wxGetApp().plater(), msg_text, "Suggestion", wxICON_WARNING | wxYES | wxNO); + DynamicPrintConfig new_conf = *m_config; + if (dialog.ShowModal() == wxID_YES) { + if (!is_support_filament(m_config->opt_int("support_interface_filament") - 1) && m_config->opt_float("support_top_z_distance") < 0.1) + new_conf.set_key_value("support_top_z_distance", new ConfigOptionFloat(0.2)); + new_conf.set_key_value("support_interface_top_layers", new ConfigOptionInt(2)); + m_config_manipulation.apply(m_config, &new_conf); + } + wxGetApp().plater()->update(); + } + } + + // BBS popup a message to ask the user to set optimum parameters for support interface if support materials are used + if (opt_key == "support_interface_filament") { + int interface_filament_id = m_config->opt_int("support_interface_filament") - 1; // the displayed id is based from 1, while internal id is based from 0 + if (is_support_filament(interface_filament_id) && !(m_config->opt_float("support_top_z_distance") == 0 && m_config->opt_float("support_interface_spacing") == 0 && + m_config->opt_enum("support_interface_pattern") == SupportMaterialInterfacePattern::smipConcentric)) { + wxString msg_text = _L("When using support material for the support interface, We recommend the following settings:\n" + "0 top z distance, 0 interface spacing, concentric pattern."); + msg_text += "\n\n" + _L("Change these settings automatically? \n" + "Yes - Change these settings automatically\n" + "No - Do not change these settings for me"); + MessageDialog dialog(wxGetApp().plater(), msg_text, "Suggestion", wxICON_WARNING | wxYES | wxNO); + DynamicPrintConfig new_conf = *m_config; + if (dialog.ShowModal() == wxID_YES) { + new_conf.set_key_value("support_top_z_distance", new ConfigOptionFloat(0)); + new_conf.set_key_value("support_interface_spacing", new ConfigOptionFloat(0)); + new_conf.set_key_value("support_interface_pattern", new ConfigOptionEnum(SupportMaterialInterfacePattern::smipConcentric)); + m_config_manipulation.apply(m_config, &new_conf); + } + wxGetApp().plater()->update(); + } + } + // BBS #if 0 if (opt_key == "extruders_count") @@ -1893,6 +1952,7 @@ void TabPrint::build() optgroup = page->new_optgroup(L("Support"), L"param_support"); optgroup->append_single_option_line("enable_support", "support"); optgroup->append_single_option_line("support_type", "support#support-types"); + optgroup->append_single_option_line("support_style", "support#support-styles"); optgroup->append_single_option_line("support_threshold_angle", "support#threshold-angle"); optgroup->append_single_option_line("support_on_build_plate_only"); optgroup->append_single_option_line("support_critical_regions_only"); @@ -1908,7 +1968,6 @@ void TabPrint::build() optgroup->append_single_option_line("support_interface_filament", "support#support-filament"); //optgroup = page->new_optgroup(L("Options for support material and raft")); - //optgroup->append_single_option_line("support_style"); //BBS optgroup = page->new_optgroup(L("Advanced"), L"param_advanced"); diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 8027ac3e94..4eb30cc296 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -35,11 +35,18 @@ wxDEFINE_EVENT(EVT_AMS_CLIBRATION_CANCEL, wxCommandEvent); wxDEFINE_EVENT(EVT_AMS_GUIDE_WIKI, wxCommandEvent); wxDEFINE_EVENT(EVT_AMS_RETRY, wxCommandEvent); -bool AMSinfo::parse_ams_info(Ams *ams, bool remain_flag) +bool AMSinfo::parse_ams_info(Ams *ams, bool remain_flag, bool humidity_flag) { if (!ams) return false; this->ams_id = ams->id; - this->ams_humidity = ams->humidity; + + if (humidity_flag) { + this->ams_humidity = ams->humidity; + } + else { + this->ams_humidity = -1; + } + cans.clear(); for (int i = 0; i < 4; i++) { auto it = ams->trayList.find(std::to_string(i)); @@ -917,7 +924,8 @@ void AMSRoad::doRender(wxDC &dc) dc.DrawBitmap(ams_humidity_0.bmp(), wxPoint(size.x - ams_humidity_0.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_0.GetBmpSize().y - FromDIP(8))); } else { - dc.DrawBitmap(ams_humidity_4.bmp(), wxPoint(size.x - ams_humidity_4.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_4.GetBmpSize().y - FromDIP(8))); + /*dc.DrawBitmap(ams_humidity_4.bmp(), wxPoint(size.x - ams_humidity_4.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_4.GetBmpSize().y - FromDIP(8)));*/ + //to do ... } } } diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 73a91f8a41..a7390afed4 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -126,7 +126,7 @@ public: int curreent_filamentstep; int ams_humidity = 0; - bool parse_ams_info(Ams *ams, bool remain_flag = false); + bool parse_ams_info(Ams *ams, bool remain_flag = false, bool humidity_flag = false); }; /************************************************* diff --git a/src/slic3r/GUI/Widgets/SideMenuPopup.cpp b/src/slic3r/GUI/Widgets/SideMenuPopup.cpp index 083d02978f..21faf613bd 100644 --- a/src/slic3r/GUI/Widgets/SideMenuPopup.cpp +++ b/src/slic3r/GUI/Widgets/SideMenuPopup.cpp @@ -2,6 +2,7 @@ #include "Label.hpp" #include +#include "../GUI_App.hpp" @@ -17,7 +18,6 @@ SidePopup::SidePopup(wxWindow* parent) #ifdef __WINDOWS__ SetDoubleBuffered(true); #endif //__WINDOWS__ - } SidePopup::~SidePopup() @@ -27,6 +27,7 @@ SidePopup::~SidePopup() void SidePopup::OnDismiss() { + Slic3r::GUI::wxGetApp().set_side_menu_popup_status(false); wxPopupTransientWindow::OnDismiss(); } @@ -64,6 +65,7 @@ void SidePopup::Popup(wxWindow* focus) else Position(pos, {0, focus->GetSize().y + 12}); } + Slic3r::GUI::wxGetApp().set_side_menu_popup_status(true); wxPopupTransientWindow::Popup(); } diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index e452687c79..1afa07f919 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -611,24 +611,6 @@ void WipingPanel::update_warning_texts() void WipingPanel::calc_flushing_volumes() { - auto is_support_filament = [](int extruder_id) -> bool { - auto& filament_presets = Slic3r::GUI::wxGetApp().preset_bundle->filament_presets; - auto& filaments = Slic3r::GUI::wxGetApp().preset_bundle->filaments; - - if (extruder_id >= filament_presets.size()) - return false; - - Slic3r::Preset* filament = filaments.find_preset(filament_presets[extruder_id]); - if (filament == nullptr) - return false; - - Slic3r::ConfigOptionBools* support_option = dynamic_cast(filament->config.option("filament_is_support")); - if (support_option == nullptr) - return false; - - return support_option->get_at(0); - }; - for (int from_idx = 0; from_idx < m_colours.size(); from_idx++) { const wxColour& from = m_colours[from_idx]; bool is_from_support = is_support_filament(from_idx); diff --git a/src/slic3r/GUI/fts_fuzzy_match.h b/src/slic3r/GUI/fts_fuzzy_match.h index 379fd9c74e..c20960e372 100644 --- a/src/slic3r/GUI/fts_fuzzy_match.h +++ b/src/slic3r/GUI/fts_fuzzy_match.h @@ -33,6 +33,7 @@ #include // uint8_t #include // ::tolower, ::toupper +#include // ::towlower #include // memcpy #include diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 2f69533952..b6a4a5ed62 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -231,10 +231,11 @@ struct PresetUpdater::priv void prune_tmps() const; void sync_version() const; void parse_version_string(const std::string& body) const; - void sync_resources(std::string http_url, std::map &resources, bool check_patch = false, std::string current_version=""); + void sync_resources(std::string http_url, std::map &resources, bool check_patch = false, std::string current_version="", std::string changelog_file=""); void sync_config(std::string http_url, const VendorMap vendors); void sync_tooltip(std::string http_url, std::string language); void sync_plugins(std::string http_url, std::string plugin_version); + bool get_cached_plugins_version(std::string& cached_version); //BBS: refine preset update logic bool install_bundles_rsrc(std::vector bundles, bool snapshot) const; @@ -482,7 +483,7 @@ void PresetUpdater::priv::parse_version_string(const std::string& body) const //BBS: refine the Preset Updater logic // Download vendor indices. Also download new bundles if an index indicates there's a new one available. // Both are saved in cache. -void PresetUpdater::priv::sync_resources(std::string http_url, std::map &resources, bool check_patch, std::string current_version_str) +void PresetUpdater::priv::sync_resources(std::string http_url, std::map &resources, bool check_patch, std::string current_version_str, std::string changelog_file) { std::map resource_list; @@ -616,15 +617,26 @@ void PresetUpdater::priv::sync_resources(std::string http_url, std::mapsecond.description.empty()) { - // save the description to disk - std::string changelog_file = (cache_path / "changelog").string(); + // save the description to disk + if (changelog_file.empty()) + changelog_file = (cache_path / "changelog.json").string(); + else + changelog_file = (cache_path / changelog_file).string(); + + try { + json j; + //record the headers + j["version"] = resource_update->second.version; + j["description"] = resource_update->second.description; boost::nowide::ofstream c; c.open(changelog_file, std::ios::out | std::ios::trunc); - c << resource_update->second.description << std::endl; + c << std::setw(4) << j << std::endl; c.close(); } + catch(std::exception &err) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": save to "<> j; + + cached_version = j["version"]; + } + catch(nlohmann::detail::parse_error &err) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse "< resources { {"slicer/plugins/cloud", { using_version, "", "", cache_path.string(), {"plugins"}}} }; - sync_resources(http_url, resources, true, plugin_version); + sync_resources(http_url, resources, true, plugin_version, "network_plugins.json"); } catch (std::exception& e) { BOOST_LOG_TRIVIAL(warning) << format("[BBL Updater] sync_plugins: %1%", e.what()); } + + bool result = get_cached_plugins_version(cached_version); + if (result) { + BOOST_LOG_TRIVIAL(info) << format("[BBL Updater] found new plugins: %1%, prompt to update", cached_version); + GUI::wxGetApp().plater()->get_notification_manager()->push_notification(GUI::NotificationType::BBLPluginUpdateAvailable); + } } diff --git a/src/slic3r/Utils/bambu_networking.hpp b/src/slic3r/Utils/bambu_networking.hpp index 41c5049f41..939f4f5d39 100644 --- a/src/slic3r/Utils/bambu_networking.hpp +++ b/src/slic3r/Utils/bambu_networking.hpp @@ -39,7 +39,7 @@ namespace BBL { #define BAMBU_NETWORK_LIBRARY "bambu_networking" #define BAMBU_NETWORK_AGENT_NAME "bambu_network_agent" -#define BAMBU_NETWORK_AGENT_VERSION "01.04.00.12" +#define BAMBU_NETWORK_AGENT_VERSION "01.04.01.01" //iot preset type strings diff --git a/version.inc b/version.inc index 4ec021a3e3..177413d1cf 100644 --- a/version.inc +++ b/version.inc @@ -10,5 +10,5 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.04.00.18") -set(SoftFever_VERSION "1.4.1-dev") \ No newline at end of file +set(SoftFever_VERSION "1.4.1-dev") +set(SLIC3R_VERSION "01.04.01.52")