diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index e508e3646dc..6b746fd6d0b 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-07-23 18:15+0800\n" +"POT-Creation-Date: 2022-08-08 20:01+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -57,7 +57,7 @@ msgstr "" msgid "Perform" msgstr "" -msgid "Fragment area" +msgid "Gap area" msgstr "" msgid "Set pen size" @@ -126,9 +126,6 @@ msgstr "" msgid "Edge detection" msgstr "" -msgid "Clear all" -msgstr "" - msgid "Triangles" msgstr "" @@ -339,19 +336,34 @@ msgstr "" msgid "Perform Recognition" msgstr "" -msgid "Cube" +msgid "Reset direction" msgstr "" -msgid "Cylinder" +msgid "Brush size" msgstr "" -msgid "Cone" +msgid "Brush shape" msgstr "" -msgid "Timelapse Wipe Tower" +msgid "Enforce seam" msgstr "" -msgid "Add Modifier" +msgid "Block seam" +msgstr "" + +msgid "Remove selection" +msgstr "" + +msgid "Seam painting" +msgstr "" + +msgid "Entering Seam painting" +msgstr "" + +msgid "Leaving Seam painting" +msgstr "" + +msgid "Paint-on seam editing" msgstr "" msgid "Notice" @@ -416,11 +428,14 @@ msgstr "" msgid "BambuStudio got an unhandled exception: %1%" msgstr "" -msgid "Downloading Bambu Network plug-in" +msgid "Downloading Bambu Network Plug-in" +msgstr "" + +msgid "Incorrect password" msgstr "" #, possible-c-format, possible-boost-format -msgid "Connect %s[SN:%s] failed!" +msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "" msgid "" @@ -474,6 +489,23 @@ msgstr "" msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" msgstr "" +msgid "Some presets are modified." +msgstr "" + +msgid "" +"You can keep the modifield presets to the new project, discard or save " +"changes as new presets." +msgstr "" + +msgid "User logged out" +msgstr "" + +msgid "new or open project file is not allowed during the slicing process!" +msgstr "" + +msgid "Open Project" +msgstr "" + msgid "" "The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" @@ -500,12 +532,6 @@ msgstr "" msgid "*" msgstr "" -msgid "G-code files can not be loaded with models together!" -msgstr "" - -msgid "G-code loading" -msgstr "" - msgid "Select a G-code file:" msgstr "" @@ -594,6 +620,18 @@ msgstr "" msgid "Load..." msgstr "" +msgid "Cube" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Timelapse Wipe Tower" +msgstr "" + msgid "Add settings" msgstr "" @@ -790,6 +828,9 @@ msgstr "" msgid "Name" msgstr "" +msgid "Fila." +msgstr "" + #, possible-c-format, possible-boost-format msgid "%1$d error repaired" msgid_plural "%1$d errors repaired" @@ -841,6 +882,9 @@ msgstr "" msgid "Generic" msgstr "" +msgid "Add Modifier" +msgstr "" + msgid "Deleting the last solid part is not allowed." msgstr "" @@ -1053,6 +1097,9 @@ msgid "" "Arrange failed. Found some exceptions when processing object geometries." msgstr "" +msgid "Arranging" +msgstr "" + msgid "Arranging canceled." msgstr "" @@ -1236,10 +1283,10 @@ msgid "" "the corresponding code comments." msgstr "" -msgid "Colour" +msgid "AMSMaterialsSetting" msgstr "" -msgid "SN" +msgid "Colour" msgstr "" msgid "" @@ -1257,9 +1304,22 @@ msgstr "" msgid "The input value should be greater than %1% and less than %2%" msgstr "" +msgid "SN" +msgstr "" + msgid "Confirm" msgstr "" +msgid "Close" +msgstr "" + +msgid "AMS Slots" +msgstr "" + +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "" + msgid "Insertion update" msgstr "" @@ -1296,9 +1356,6 @@ msgstr "" msgid "File" msgstr "" -msgid "Close" -msgstr "" - msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" @@ -1495,13 +1552,6 @@ msgid "" "No - Give up using spiral mode this time" 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 "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -1639,6 +1689,9 @@ msgstr "" msgid "Failed to start printing job" msgstr "" +msgid "parameter name" +msgstr "" + msgid "N/A" msgstr "" @@ -1877,7 +1930,10 @@ msgstr "" msgid "Auto orient" msgstr "" -msgid "Auto arrange" +msgid "Arrange all objects" +msgstr "" + +msgid "Arrange objects on selected plates" msgstr "" msgid "Split to objects" @@ -1972,6 +2028,9 @@ msgid "" "on the printer, as shown in the figure:" msgstr "" +msgid "Invalid input." +msgstr "" + msgid "Application is closing" msgstr "" @@ -2077,9 +2136,6 @@ msgstr "" msgid "Start a new project" msgstr "" -msgid "Open Project" -msgstr "" - msgid "Open a project file" msgstr "" @@ -2188,6 +2244,18 @@ msgstr "" msgid "Help" msgstr "" +msgid "&File" +msgstr "" + +msgid "&Edit" +msgstr "" + +msgid "&View" +msgstr "" + +msgid "&Help" +msgstr "" + msgid "&Open G-code" msgstr "" @@ -2219,15 +2287,6 @@ msgstr "" msgid "Quit %s" msgstr "" -msgid "&File" -msgstr "" - -msgid "&View" -msgstr "" - -msgid "&Help" -msgstr "" - msgid "Save configuration as:" msgstr "" @@ -2316,9 +2375,15 @@ msgstr "" msgid "0%" msgstr "" +msgid "Clean" +msgstr "" + msgid "Control" msgstr "" +msgid "Print Options" +msgstr "" + msgid "100%" msgstr "" @@ -2548,6 +2613,15 @@ msgctxt "Layers" msgid "Bottom" msgstr "" +msgid "Spaghetti Detection" +msgstr "" + +msgid "Stop printing when spaghetti detected" +msgstr "" + +msgid "First Layer Inspection" +msgstr "" + msgid "Switch to per-object setting mode to edit modifier settings." msgstr "" @@ -2632,13 +2706,16 @@ msgstr "" msgid "Loading file: %s" msgstr "" -msgid "The Config is not compatible and can not be loaded." +msgid "The 3mf is not from Bambu Lab, load geometry data only." msgstr "" -msgid "Incompatible 3mf" +msgid "Load 3mf" +msgstr "" + +msgid "The Config can not be loaded." msgstr "" -msgid "the 3mf is not compatible, load geometry data only!" +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" #, possible-c-format, possible-boost-format @@ -2653,6 +2730,12 @@ msgstr "" msgid "Newer 3mf version" msgstr "" +msgid "The 3mf is not compatible, load geometry data only!" +msgstr "" + +msgid "Incompatible 3mf" +msgstr "" + msgid "Name of components inside step file is not UTF8 format!" msgstr "" @@ -2690,6 +2773,14 @@ msgstr "" msgid "The file does not contain any geometry data." msgstr "" +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 "" @@ -2733,17 +2824,9 @@ msgid "" "The loaded file contains gcode only, Can not enter the Prepare page" msgstr "" -msgid "Some presets are modified." -msgstr "" - msgid "You can keep the modified presets to the new project or discard them" msgstr "" -msgid "" -"You can keep the modifield presets to the new project, discard or save " -"changes as new presets." -msgstr "" - msgid "Creating a new project" msgstr "" @@ -2774,6 +2857,12 @@ msgstr "" msgid "Only one G-code file can be opened at the same time." msgstr "" +msgid "G-code loading" +msgstr "" + +msgid "G-code files can not be loaded with models together!" +msgstr "" + msgid "Can not add models when in preview mode!" msgstr "" @@ -3225,9 +3314,15 @@ msgstr "" msgid "The printer is busy on other print job" msgstr "" +#, possible-c-format, possible-boost-format +msgid "" +"Filament %s exceeds the number of AMS slots. Please update the printer " +"firmware to support AMS slot assignment." +msgstr "" + msgid "" -"The filament index exceeds the AMS's slot count and cannot send the print " -"job." +"Filament exceeds the number of AMS slots. Please update the printer firmware " +"to support AMS slot assignment." msgstr "" msgid "" @@ -3240,6 +3335,17 @@ msgid "" "sending the print job" msgstr "" +#, possible-c-format, possible-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." @@ -3283,6 +3389,13 @@ msgstr "" msgid "Delete this preset" 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 "" @@ -3714,12 +3827,6 @@ msgstr "" msgid "Login" msgstr "" -msgid "Filaments Selection" -msgstr "" - -msgid "Printer Selection" -msgstr "" - msgid "The configuration package is changed in previous Config Guide" msgstr "" @@ -3735,67 +3842,49 @@ msgstr "" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." msgstr "" -msgid "Select all objects" -msgstr "" - msgid "Copy to clipboard" msgstr "" msgid "Paste from clipboard" msgstr "" -msgid "Camera view - Default" -msgstr "" - -msgid "Camera view - Top" -msgstr "" - -msgid "Camera view - Bottom" -msgstr "" - -msgid "Camera view - Front" -msgstr "" - -msgid "Camera view - Behind" +msgid "Show keyboard shortcuts list" msgstr "" -msgid "Camera Angle - Left side" +msgid "Global shortcuts" msgstr "" -msgid "Camera Angle - Right side" +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 "" -msgid "keyboard 1-9: set filament for object/part" +msgid "Collapse/Expand the sidebar" msgstr "" -msgid "Show keyboard shortcuts list" +msgid "⌘+Any arrow" msgstr "" -msgid "Global shortcuts" +msgid "Movement in camera space" msgstr "" -msgid "Arrange all objects" +msgid "⌥+Left mouse button" msgstr "" -msgid "Arrange objects on selected plates" +msgid "Select a part" 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 project." +msgid "⌘+Left mouse button" 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." +msgid "Select multiple objects" msgstr "" -msgid "⌘+Left mouse button" +msgid "Ctrl+Any arrow" msgstr "" -msgid "Select multiple objects" +msgid "Alt+Left mouse button" msgstr "" msgid "Ctrl+Left mouse button" @@ -3837,16 +3926,52 @@ msgstr "" msgid "Movement step set to 1 mm" msgstr "" -msgid "⌘+Any arrow" +msgid "keyboard 1-9: set filament for object/part" msgstr "" -msgid "Movement in camera space" +msgid "Camera view - Default" msgstr "" -msgid "Ctrl+Any arrow" +msgid "Camera view - Top" msgstr "" -msgid "Collapse/Expand the sidebar" +msgid "Camera view - Bottom" +msgstr "" + +msgid "Camera view - Front" +msgstr "" + +msgid "Camera view - Behind" +msgstr "" + +msgid "Camera Angle - Left side" +msgstr "" + +msgid "Camera Angle - Right side" +msgstr "" + +msgid "Select all objects" +msgstr "" + +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" @@ -4263,6 +4388,12 @@ msgstr "" msgid "Bed exclude area" msgstr "" +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 "Elephant foot compensation" msgstr "" @@ -5343,7 +5474,7 @@ msgstr "" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" -msgid "Spiral mode" +msgid "Spiral vase" msgstr "" msgid "" @@ -5352,9 +5483,6 @@ msgid "" "generated model has no seam" msgstr "" -msgid "Timelapse without toolhead" -msgstr "" - 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 " diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index 0abaa1cb636..29e09ac492b 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-07-23 18:15+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2022-08-08 20: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" @@ -52,8 +49,8 @@ msgstr "" msgid "Perform" msgstr "Ausführen" -msgid "Fragment area" -msgstr "Fragment area" +msgid "Gap area" +msgstr "" msgid "Set pen size" msgstr "Pinselgröße festlegen" @@ -77,7 +74,7 @@ msgid "Sphere" msgstr "Kugel" msgid "Fill" -msgstr "Fill" +msgstr "Ausfüllen" msgid "Gap Fill" msgstr "" @@ -99,9 +96,9 @@ msgid "" "Filament count exceeds the maximum number that painting tool supports. only " "the first %1% filaments will be available in painting tool." msgstr "" -"Die Anzahl der Materialien übersteigt die maximale Anzahl, die das " -"Malwerkzeug unterstützt. Nur die ersten %1% der Materialien werden im " -"Malwerkzeug verfügbar sein." +"Die Anzahl der Filamente übersteigt die maximale Anzahl, die das Malwerkzeug " +"unterstützt. Nur die ersten %1% der Filamente werden im Malwerkzeug " +"verfügbar sein." msgid "Color Painting" msgstr "Farben malen" @@ -119,19 +116,16 @@ msgid "Key 1~9" msgstr "Schlüssel 1~9" msgid "Choose filament" -msgstr "Wähle Material" +msgstr "Filament wählen" msgid "Edge detection" msgstr "Kantenerkennung" -msgid "Clear all" -msgstr "Alles löschen" - msgid "Triangles" msgstr "Dreiecke" msgid "Filaments" -msgstr "Materialien" +msgstr "Filamente" msgid "Brush" msgstr "Pinsel" @@ -149,17 +143,17 @@ msgid "Shortcut Key " msgstr "Shortcut Taste " msgid "Triangle" -msgstr "Triangle" +msgstr "Dreieck" msgid "Height Range" -msgstr "Height Range" +msgstr "Höhenreichweite" msgid "Remove painted color" msgstr "Gemalte Farbe entfernen" #, boost-format msgid "Painted using: Filament %1%" -msgstr "Gemalt mit: Material %1%" +msgstr "Gemalt mit: Filament %1%" msgid "Move" msgstr "Bewegen" @@ -192,7 +186,7 @@ msgid "Position" msgstr "Position" msgid "Rotation" -msgstr "Rotation" +msgstr "Drehung" msgid "Scale ratios" msgstr "Skalierungsverhältnisse" @@ -246,7 +240,7 @@ msgid "Movement:" msgstr "Bewegung:" msgid "Rotation:" -msgstr "Rotation:" +msgstr "Drehung:" msgid "Height:" msgstr "Höhe:" @@ -307,7 +301,7 @@ msgid "High" msgstr "Hoch" msgid "Medium" -msgstr "Medium" +msgstr "Mittel" msgid "Low" msgstr "Niedrig" @@ -336,25 +330,40 @@ msgid "Operation already cancelling. Please wait few seconds." msgstr "Operation wird bereits abgebrochen. Bitte warten Sie einige Sekunden." msgid "Face recognition" -msgstr "Face recognition" +msgstr "Gesichtserkennung" msgid "Perform Recognition" -msgstr "Perform Recognition" +msgstr "Erkennung durchführen" -msgid "Cube" -msgstr "Würfel" +msgid "Reset direction" +msgstr "" -msgid "Cylinder" -msgstr "Zylinder" +msgid "Brush size" +msgstr "" -msgid "Cone" -msgstr "Kegel" +msgid "Brush shape" +msgstr "" -msgid "Timelapse Wipe Tower" -msgstr "Timelapse Wipe Tower" +msgid "Enforce seam" +msgstr "" -msgid "Add Modifier" -msgstr "Modifizierer hinzufügen" +msgid "Block seam" +msgstr "" + +msgid "Remove selection" +msgstr "" + +msgid "Seam painting" +msgstr "" + +msgid "Entering Seam painting" +msgstr "" + +msgid "Leaving Seam painting" +msgstr "" + +msgid "Paint-on seam editing" +msgstr "" msgid "Notice" msgstr "Hinweis" @@ -381,7 +390,7 @@ msgid "Process" msgstr "Prozess" msgid "Filament" -msgstr "Material" +msgstr "Filament" msgid "Machine" msgstr "Maschine" @@ -427,11 +436,14 @@ msgstr "Kritischer Fehler" msgid "BambuStudio got an unhandled exception: %1%" msgstr "BambuStudio hat eine unbehandelte Ausnahme erhalten: %1%" -msgid "Downloading Bambu Network plug-in" +msgid "Downloading Bambu Network Plug-in" +msgstr "" + +msgid "Incorrect password" msgstr "" #, c-format, boost-format -msgid "Connect %s[SN:%s] failed!" +msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "" msgid "" @@ -468,7 +480,7 @@ msgid "This is the newest version." msgstr "Das ist die aktuellste Version." msgid "Info" -msgstr "Info" +msgstr "Infos" msgid "Loading user presets..." msgstr "Nutzervoreistellungen laden..." @@ -491,12 +503,31 @@ msgstr "Wählen sie eine oder mer Dateien (3mf/step/stl/obj/amf):" msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" msgstr "Wählen sie eine Datei (gcode/.gco/.g/.ngc/ngc):" +msgid "Some presets are modified." +msgstr "Einige Voreinstellungen wurden geändert." + msgid "" -"The version of Bambu studio is too low and needs to be updated to the latest " -"version before it can be used normally" +"You can keep the modifield presets to the new project, discard or save " +"changes as new presets." +msgstr "" +"Sie können die geänderten Voreinstellungen in das neue Projekt übernehmen, " +"verwerfen oder als neue Voreinstellungen speichern." + +msgid "User logged out" +msgstr "" + +msgid "new or open project file is not allowed during the slicing process!" msgstr "" + +msgid "Open Project" +msgstr "Projekt öffnen" + +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 "" +"Die Version von Bambu Studio ist zu niedrig und muss auf die neueste Version " +"aktualisiert werden, bevor sie normal verwendet werden kann" msgid "Login information expired. Please login again." msgstr "Login abgelaufen. Bitte neu einloggen." @@ -505,7 +536,7 @@ msgid "Loading" msgstr "Lade" msgid "Loading user preset" -msgstr "Loading user preset" +msgstr "Benutzervoreinstellung wird geladen" msgid "Switching application language" msgstr "Wechsel der Sprache" @@ -519,17 +550,11 @@ msgstr "Spache" msgid "*" msgstr "*" -msgid "G-code files can not be loaded with models together!" -msgstr "G-Code-Dateien können nicht mit Modellen zusammen geladen werden!" - -msgid "G-code loading" -msgstr "G-Code ladend" - msgid "Select a G-code file:" msgstr "Wähle eine G-Code Datei:" msgid "Bambu Studio GUI initialization failed" -msgstr "Bambu Studio GUI initialization failed" +msgstr "Initialisierung der Bambu Studio GUI ist fehlgeschlagen" #, boost-format msgid "Fatal error, exception catched: %1%" @@ -542,7 +567,7 @@ msgid "Shell" msgstr "Schale" msgid "Infill" -msgstr "Infill" +msgstr "Füllung" msgid "Support" msgstr "Support" @@ -566,7 +591,7 @@ msgid "Bottom Minimum Shell Thickness" msgstr "Minimale Dicke der unteren Schichten" msgid "Ironing" -msgstr "Ironing" +msgstr "glätten" msgid "Fuzzy Skin" msgstr "Fuzzy Skin" @@ -613,6 +638,18 @@ msgstr "Ausgewähltes Objekt löschen" msgid "Load..." msgstr "Laden..." +msgid "Cube" +msgstr "Würfel" + +msgid "Cylinder" +msgstr "Zylinder" + +msgid "Cone" +msgstr "Kegel" + +msgid "Timelapse Wipe Tower" +msgstr "Zeitraffer-Wischturm" + msgid "Add settings" msgstr "Einstellungen hinzufügen" @@ -644,17 +681,17 @@ msgid "Reload items" msgstr "Elemente neu laden" msgid "Change filament" -msgstr "Material wechseln" +msgstr "Filament wechseln" msgid "Set filament for selected items" -msgstr "Material für ausgewählte Objekte festlegen" +msgstr "Filament für ausgewählte Elemente festlegen" msgid "Default" msgstr "Standard" #, c-format, boost-format msgid "Filament %d" -msgstr "Material %d" +msgstr "Filament %d" msgid "active" msgstr "aktiv" @@ -788,10 +825,10 @@ msgid "Edit print parameters for a single object" msgstr "Druckparameter für ein einzelnes Objekt bearbeiten" msgid "Change Filament" -msgstr "Material ändern" +msgstr "Filament wechseln" msgid "Set Filament for selected items" -msgstr "Materialfür ausgewählte Teile festlegen" +msgstr "Filament für ausgewählte Elemente festlegen" msgid "current" msgstr "aktuell" @@ -811,6 +848,9 @@ msgstr "Schließen" msgid "Name" msgstr "Name" +msgid "Fila." +msgstr "" + #, c-format, boost-format msgid "%1$d error repaired" msgid_plural "%1$d errors repaired" @@ -874,6 +914,9 @@ msgstr "Fehler!" msgid "Generic" msgstr "Generisch" +msgid "Add Modifier" +msgstr "Modifizierer hinzufügen" + msgid "Deleting the last solid part is not allowed." msgstr "Das Löschen des letzten festen Teils ist nicht erlaubt." @@ -987,7 +1030,7 @@ msgid "Wall loops" msgstr "Wandschleifen" msgid "Infill density(%)" -msgstr "Infill-Dichte(%)" +msgstr "Füllungsdichte(%)" msgid "Auto Brim" msgstr "Automatische Umrandung" @@ -1020,16 +1063,16 @@ msgid "Heat the nozzle to target temperature" msgstr "" msgid "Cut filament" -msgstr "Material schneiden" +msgstr "Material abschneiden" msgid "Pull back current filament" -msgstr "Aktuelles Material zurückziehen" +msgstr "Ziehen Sie das aktuelle Filament zurück" msgid "Push new filament into extruder" msgstr "" msgid "Purge old filament" -msgstr "Purge old filament" +msgstr "Altes Filament entfernen" msgid "?" msgstr "?" @@ -1038,13 +1081,13 @@ msgid "Empty" msgstr "Leer" msgid "Click the pencil icon to edit the filament." -msgstr "Das Stift-Symbol drücken um das Material zu bearbeiten." +msgstr "Das Stift-Symbol drücken um das Filament zu bearbeiten." msgid "Load Filament" -msgstr "Load" +msgstr "Laden" msgid "Unload Filament" -msgstr "Unload" +msgstr "Entladen" msgid "Tips" msgstr "Tipps" @@ -1071,7 +1114,7 @@ msgid "" "load or unload filiament." msgstr "" "Wählen Sie einen AMS-Slot und drücken Sie dann die Taste \"Laden\" oder " -"\"Entladen\", um automatisch Material zu laden oder zu entladen." +"\"Entladen\", um automatisch Filament zu laden oder zu entladen." msgid "Edit" msgstr "Bearbeiten" @@ -1102,6 +1145,9 @@ msgstr "" "Anordnen fehlgeschlagen. Bei der Verarbeitung von Objektgeometrien wurden " "einige Ausnahmen gefunden." +msgid "Arranging" +msgstr "Anordnen" + msgid "Arranging canceled." msgstr "Anordnen abgebrochen." @@ -1151,62 +1197,65 @@ msgid "Exception" msgstr "Ausnahme" msgid "Logging in" -msgstr "Logging in" +msgstr "Einloggen" msgid "Login failed" -msgstr "Login failed" +msgstr "Anmeldung fehlgeschlagen" msgid "The region parameter is incorrrect" -msgstr "The region parameter is incorrrect." +msgstr "Der Regionsparameter ist falsch." msgid "Failure of printer login" -msgstr "Failure of printer login" +msgstr "Druckeranmeldung fehlgeschlagen" msgid "Failed to get ticket" -msgstr "Failed to get ticket" +msgstr "Ticket konnte nicht abgerufen werden" msgid "User authorization timeout" -msgstr "User authorization timeout" +msgstr "Zeitüberschreitung der Benutzerautorisierung" msgid "Failure of bind" -msgstr "Failure of bind" +msgstr "Bindungsfehler" msgid "Unknown Failure" -msgstr "Unknown Failure" +msgstr "Unbekannter Fehler" msgid "Abnormal print file data. Please slice again" -msgstr "Abnormal print file data. Please slice again" +msgstr "Abnormale Daten in der Druckdatei. Bitte slicen Sie erneut" msgid "Task canceled" -msgstr "Task canceled" +msgstr "Auftrag abgebrochen" msgid "Upload task timed out. Please check the network problem and try again" -msgstr "Upload task timed out. Please check the network problem and try again" +msgstr "" +"Upload-Aufgabe wurde abgebrochen. Bitte überprüfen Sie das Netzwerkproblem " +"und versuchen Sie es erneut" msgid "Cloud service connection failed. Please try again." -msgstr "Cloud service connection failed. Please try again." +msgstr "" +"Die Verbindung zum Cloud-Dienst ist fehlgeschlagen. Bitte versuche es erneut." msgid "Print file not found, please slice again" -msgstr "Print file not found, please slice again" +msgstr "Druckdatei nicht gefunden, bitte noch einmal probieren (erneut Slicen)" 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" +"Die Druckdatei überschreitet die maximal zulässige Größe (1 GB). Bitte " +"vereinfachen Sie das Modell und slicen Sie es erneut" msgid "Failed uploading print file" -msgstr "Failed uploading print file" +msgstr "Fehler beim Hochladen der Druckdatei" msgid "Wrong Access code" -msgstr "Wrong Access code" +msgstr "Falscher Zugangscode" msgid "Sending print job over LAN" -msgstr "Sending print job over LAN" +msgstr "Druckauftrag über LAN senden" msgid "Sending print job through cloud service" -msgstr "Sending print job through cloud service" +msgstr "Druckauftrag über den Cloud-Dienst senden" msgid "Service Unavailable" msgstr "" @@ -1215,7 +1264,7 @@ msgid "Unkown Error." msgstr "" msgid "Sending print configuration" -msgstr "Sending print configuration" +msgstr "Druckkonfiguration senden" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %s s" @@ -1252,7 +1301,7 @@ msgid "License" msgstr "Lizenz" msgid "Bambu Studio is licensed under " -msgstr "Bambu Studio is licensed under " +msgstr "Bambu Studio ist lizenziert unter " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, Version 3" @@ -1261,18 +1310,18 @@ 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 from Slic3r " -"by Alessandro Ranellucci and the RepRap community" +"Bambu Studio basiert auf PrusaSlicer von Prusa Research, das von Slic3r von " +"Alessandro Ranellucci und der RepRap Community stammt." msgid "Libraries" -msgstr "Libraries" +msgstr "Bibliotheken" 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" +"Diese Software verwendet Open-Source-Komponenten, deren Urheberrechte und " +"andere Eigentumsrechte den jeweiligen Eigentümern gehören." #, c-format, boost-format msgid "About %s" @@ -1300,18 +1349,16 @@ msgid "" "the corresponding code comments." msgstr "" -msgid "Colour" -msgstr "Colour" +msgid "AMSMaterialsSetting" +msgstr "" -msgid "SN" -msgstr "SN" +msgid "Colour" +msgstr "Farbe" msgid "" "Nozzle\n" "Temperature" -msgstr "" -"Nozzle\n" -"Temperature" +msgstr "Druckdüsentemperatur" msgid "max" msgstr "max" @@ -1321,62 +1368,74 @@ 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%" +msgstr "Der Eingabewert sollte größer als %1% und kleiner als %2% sein" + +msgid "SN" +msgstr "SN" msgid "Confirm" msgstr "Bestätigen" +msgid "Close" +msgstr "Schließen" + +msgid "AMS Slots" +msgstr "" + +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "" + msgid "Insertion update" -msgstr "Insertion update" +msgstr "Update einfügen" 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. This takes about 20 seconds." +"Die AMS liest automatisch die Filamentinformationen, wenn ein neues Bambu " +"Lab Filament eingesetzt wird. Dies dauert etwa 20 Sekunden." 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 is completed." +"Hinweis: Wenn während des Drucks neues Filament eingelegt wird, liest das " +"AMS nicht automatisch Informationen ein, bis der Druckvorgang abgeschlossen " +"ist." 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." +"Hinweis: Wenn während des Drucks neues Filament eingelegt wird, liest das " +"AMS nicht automatisch Informationen ein, bis der Druckvorgang abgeschlossen " +"ist." msgid "Power on update" -msgstr "Power on update" +msgstr "Update beim einschalten" 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 roll filament " -"spools." +"Das AMS liest beim Einschalten automatisch die Informationen über das " +"eingelegte Filament. Der Lesevorgang dauert ca. 1 Minute und lässt die " +"Filamentspulen rotieren." 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." +"Das AMS liest beim Start nicht automatisch Informationen vom eingesetzten " +"Filament und verwendet weiterhin die vor dem letzten Herunterfahren " +"aufgezeichneten Informationen." msgid "File" msgstr "Datei" -msgid "Close" -msgstr "Schließen" - msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" @@ -1550,7 +1609,7 @@ msgid "" "This may cause nozzle blocked and printing failure" msgstr "" "Die Temperatur des Druckbett ist höher als die Verglasungstemperatur dieses " -"Materials.\n" +"Filaments.\n" "Dies kann zu einer Verstopfung der Düse und zu Druckfehlern führen" msgid "" @@ -1617,10 +1676,9 @@ 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 Wandschleifen 1 Linienweite breit " -"sind, \n" -"Support idt deaktiviert, die oberen Schalenschichten sind 0 und die Dichte " -"der dünnen Füllung ist 0\n" +"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" @@ -1631,13 +1689,6 @@ msgstr "" "Ja - Diese Einstellungen ändern und den Spiralmodus automatisch aktivieren\n" "Nein - Verzichten Sie dieses Mal auf den Spiralmodus" -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 "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -1689,67 +1740,67 @@ msgstr "" "zurück\n" msgid "Auto bed leveling" -msgstr "Auto bed leveling" +msgstr "Automatische Druckbettnivellierung" msgid "Heatbed preheating" -msgstr "Heatbed preheating" +msgstr "Heizbett vorheitzen" msgid "Sweeping XY mech mode" -msgstr "Sweeping XY mech mode" +msgstr "Säubern von XY mechanisch Modus" msgid "Changing filament" -msgstr "Changing filament" +msgstr "Filament wechseln" msgid "M400 pause" -msgstr "M400 pause" +msgstr "M400 Pause" msgid "Paused due to filament runout" -msgstr "Paused due to filament runout" +msgstr "Angehalten wegen Filament-Auslauf" msgid "Heating hotend" -msgstr "Heating hotend" +msgstr "Heizen des Hotend" msgid "Calibrating extrusion" -msgstr "Calibrating extrusion" +msgstr "Kalibrierung der Extrusion" msgid "Scanning bed surface" -msgstr "Scanning bed surface" +msgstr "Scan der Druckbettoberfläche" msgid "Inspecting first layer" -msgstr "Inspecting first layer" +msgstr "Überprüfung der ersten Schicht" msgid "Identifying build plate type" -msgstr "Identifying build plate type" +msgstr "Identifikation der Bauplatte" msgid "Calibrating Micro Lidar" -msgstr "Calibrating Micro Lidar" +msgstr "Kalibrierung des Mikro-Lidars" msgid "Homing toolhead" -msgstr "Homing toolhead" +msgstr "Homing des Werkzeugkopfes" msgid "Cleaning nozzle tip" -msgstr "Cleaning nozzle tip" +msgstr "Reinigen der Druckdüsenspitze" msgid "Checking extruder temperature" -msgstr "Checking extruder temperature" +msgstr "Überprüfen der Extruder Temperatur" msgid "Printing was paused by the user" -msgstr "Printing was paused by the user" +msgstr "Der Druckvorgang wurde vom Benutzer angehalten" msgid "Pause of front cover falling" -msgstr "Pause of front cover falling" +msgstr "Pause, da die Abdeckung des Werkzeugkopfes abgefallen ist" msgid "Calibrating the micro lida" -msgstr "Calibrating the micro lidar" +msgstr "Kalibrierung des Mikro-Lidars" msgid "Calibrating extrusion flow" -msgstr "Calibrating extrusion flow" +msgstr "Kalibrieren des Materialflusses" msgid "Paused due to nozzle temperature malfunction" -msgstr "Paused due to nozzle temperature malfunction" +msgstr "Pausiert aufgrund einer Fehlfunktion der Düsentemperatur" msgid "Paused due to heat bed temperature malfunction" -msgstr "Paused due to heat bed temperature malfunction" +msgstr "Pausiert aufgrund einer Fehlfunktion der Heizbetttemperatur" msgid "MC" msgstr "MC" @@ -1793,6 +1844,9 @@ msgstr "Update fehlgeschlagen." msgid "Failed to start printing job" msgstr "" +msgid "parameter name" +msgstr "" + msgid "N/A" msgstr "N/A" @@ -1879,7 +1933,7 @@ msgid "Time" msgstr "Zeit" msgid "Display" -msgstr "Display" +msgstr "Anzeigen" msgid "Line type" msgstr "Linientyp" @@ -1903,10 +1957,10 @@ msgid "Volumetric flow rate (mm³/s)" msgstr "Volumetrische Flussrate (mm³/s)" msgid "Used filament" -msgstr "Genutztes Material" +msgstr "Genutztes Filament" msgid "Filament N XX" -msgstr "Material N XX" +msgstr "Filament N XX" msgid "Color Print" msgstr "Farbdruck" @@ -1927,7 +1981,7 @@ msgid "Unretract" msgstr "Auseinzug" msgid "Filament Changes" -msgstr "Materialwechsel" +msgstr "Filamentwechsel" msgid "Wipe" msgstr "Reinigen" @@ -1942,13 +1996,13 @@ msgid "Extruder" msgstr "Extruder" msgid "Filament 1" -msgstr "Material 1" +msgstr "Filament 1" msgid "Flushed filament" -msgstr "Flushed filament" +msgstr "gereinigtes Filament" msgid "Filament change times" -msgstr "Filament change times" +msgstr "Filamentwechselzeiten" msgid "Color change" msgstr "Farbwechsel" @@ -2034,8 +2088,11 @@ msgstr "Druckplatte hinzufügen" msgid "Auto orient" msgstr "Automatische Orientierung" -msgid "Auto arrange" -msgstr "Automatische Anordnung" +msgid "Arrange all objects" +msgstr "Alle Objekte anordnen" + +msgid "Arrange objects on selected plates" +msgstr "Objekte auf ausgewählten Druckplatten anordnen" msgid "Split to objects" msgstr "In Objekte trennen" @@ -2053,7 +2110,7 @@ msgid "Assembly Return" msgstr "Zurücksetzen der Montage" msgid "return" -msgstr "return" +msgstr "Zurück" msgid "Paint Toolbar" msgstr "Malwerkzeuge" @@ -2099,9 +2156,8 @@ msgid "" "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." +"Das Kalibrierungsprogramm erkennt den Status Ihres Geräts automatisch, um " +"Abweichungen zu minimieren. Es sorgt für eine optimale Leistung des Geräts." msgid "Calibration Flow" msgstr "Flusskalibrierung" @@ -2119,20 +2175,23 @@ msgid "Timelapse" msgstr "Zeitraffer" msgid "Monitoring Recording" -msgstr "Monitoring Recording" +msgstr "Überwachung der Aufzeichnung" msgid "ConnectPrinter(LAN)" -msgstr "ConnectPrinter(LAN)" +msgstr "Drucker anschließen (LAN)" msgid "Please input the printer access code:" -msgstr "Please input the printer access code:" +msgstr "Bitte geben Sie den Zugangscode zum Drucker ein:" 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" -"on the printer, as shown in the figure:" +"Sie finden ihn unter \"Einstellungen > Netzwerk > Verbindungscode\".\n" +"auf dem Drucker, wie in der Abbildung gezeigt:" + +msgid "Invalid input." +msgstr "" msgid "Application is closing" msgstr "Anwendung schließt" @@ -2151,7 +2210,7 @@ msgid "Preview" msgstr "Vorschau" msgid "Device" -msgstr "Device" +msgstr "Gerät" msgid "Project" msgstr "Projekt" @@ -2240,9 +2299,6 @@ msgstr "Neues Projekt" msgid "Start a new project" msgstr "Ein neues Projekt beginnen" -msgid "Open Project" -msgstr "Projekt öffnen" - msgid "Open a project file" msgstr "Öffne eine Projektdatei" @@ -2351,6 +2407,18 @@ msgstr "Ansicht" msgid "Help" msgstr "Hilfe" +msgid "&File" +msgstr "&Datei" + +msgid "&Edit" +msgstr "" + +msgid "&View" +msgstr "&Anzeige" + +msgid "&Help" +msgstr "&Hilfe" + msgid "&Open G-code" msgstr "Öffne G-C&ode" @@ -2382,15 +2450,6 @@ msgstr "&Beenden" msgid "Quit %s" msgstr "%s verlassen" -msgid "&File" -msgstr "&Datei" - -msgid "&View" -msgstr "&Anzeige" - -msgid "&Help" -msgstr "&Hilfe" - msgid "Save configuration as:" msgstr "Konfiguration speichern unter:" @@ -2401,7 +2460,7 @@ msgid "The project is no longer available." msgstr "Das Projekt ist nicht mehr verfügbar." msgid "Filament Settings" -msgstr "Materialeinstellungen" +msgstr "Filamenteinstellungen" msgid "" "Do you want to synchronize your personal data from Bambu Cloud? \n" @@ -2450,7 +2509,7 @@ msgid "Translation" msgstr "Übersetzung" msgid "Zoom" -msgstr "Zoom" +msgstr "Vergrößern" msgid "Deadzone:" msgstr "Todeszone:" @@ -2479,8 +2538,14 @@ msgstr "Stop" msgid "0%" msgstr "0%" +msgid "Clean" +msgstr "" + msgid "Control" -msgstr "Control" +msgstr "Steuerung" + +msgid "Print Options" +msgstr "" msgid "100%" msgstr "100%" @@ -2579,7 +2644,7 @@ msgid "%s information" msgstr "%s Information" msgid "Download" -msgstr "Download" +msgstr "Herunterladen" msgid "Skip" msgstr "Überspringen" @@ -2651,7 +2716,7 @@ msgid "Warning:" msgstr "Warnung:" msgid "Export ok." -msgstr "Export ok." +msgstr "Exportieren ok." msgid " (Repair)" msgstr " (Reparatur)" @@ -2715,6 +2780,15 @@ msgctxt "Layers" msgid "Bottom" msgstr "Untere" +msgid "Spaghetti Detection" +msgstr "" + +msgid "Stop printing when spaghetti detected" +msgstr "" + +msgid "First Layer Inspection" +msgstr "" + msgid "Switch to per-object setting mode to edit modifier settings." msgstr "" "Wechseln Sie in den objektbezogenen Einstellungsmodus, um die " @@ -2730,7 +2804,7 @@ msgid "Objects" msgstr "Objekte" msgid "Advance" -msgstr "Fortfahren" +msgstr "Fortgeschritten" msgid "Compare presets" msgstr "Voreinstellungen vergleichen" @@ -2739,7 +2813,7 @@ msgid "View all object's settings" msgstr "Alle Einstellungen des Objekts anzeigen" msgid "Filament settings" -msgstr "Material-Einstellungen" +msgstr "Filamenteinstellungen" msgid "Printer settings" msgstr "Drucker-Einstellungen" @@ -2755,13 +2829,13 @@ msgid "Sliced Info" msgstr "Slice-Info" msgid "Used Filament (m)" -msgstr "Materialbedarf (Meter)" +msgstr "Filamentbedarf (Meter)" msgid "Used Filament (mm³)" -msgstr "Materialbedarf (mm³)" +msgstr "Filamentbedarf (mm³)" msgid "Used Filament (g)" -msgstr "Materialbedarf (g)" +msgstr "Filamentbedarf (g)" msgid "Used Materials" msgstr "Genutztes Material" @@ -2773,7 +2847,7 @@ msgid "Estimated time" msgstr "Geschätzte Zeit" msgid "Filament changes" -msgstr "Materialwechsel" +msgstr "Filamentwechsel" msgid "Click to edit preset" msgstr "Klicken zum Bearbeiten der Voreinstellung" @@ -2782,7 +2856,7 @@ msgid "Bed type" msgstr "Druckbetttyp" msgid "Flushing volumes" -msgstr "Spülvolumen" +msgstr "Säuberungsvolumen" msgid "Untitled" msgstr "Unbenannt" @@ -2803,14 +2877,17 @@ msgstr "Wiederherstellen" msgid "Loading file: %s" msgstr "Datei wird geladen: %s" -msgid "The Config is not compatible and can not be loaded." -msgstr "Die Konfiguration ist nicht kompatibel und kann nicht geladen werden." +msgid "The 3mf is not from Bambu Lab, load geometry data only." +msgstr "" -msgid "Incompatible 3mf" -msgstr "Inkompatible 3mf" +msgid "Load 3mf" +msgstr "" -msgid "the 3mf is not compatible, load geometry data only!" -msgstr "die 3mf ist nicht kompatibel, laden Sie nur Geometriedaten!" +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 "" @@ -2826,6 +2903,12 @@ msgstr "Sie sollten Ihre Software aktualisieren.\n" msgid "Newer 3mf version" msgstr "Neuere 3mf-Version" +msgid "The 3mf is not compatible, load geometry data only!" +msgstr "" + +msgid "Incompatible 3mf" +msgstr "Inkompatible 3mf" + msgid "Name of components inside step file is not UTF8 format!" msgstr "Der Name der Komponenten in der Step-Datei ist nicht im UTF8-Format!" @@ -2866,7 +2949,15 @@ msgid "Object with multiple parts was detected" msgstr "Objekt mit mehreren Teilen wurde entdeckt" msgid "The file does not contain any geometry data." -msgstr "The file does not contain any geometry data." +msgstr "Die Datei enthält keine Geometriedaten." + +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 "Exportiere STL Datei:" @@ -2911,21 +3002,11 @@ msgid "" "The loaded file contains gcode only, Can not enter the Prepare page" msgstr "" -msgid "Some presets are modified." -msgstr "Einige Voreinstellungen wurden geändert." - msgid "You can keep the modified presets to the new project or discard them" msgstr "" "Sie können die geänderten Voreinstellungen in das neue Projekt übernehmen " "oder sie verwerfen" -msgid "" -"You can keep the modifield presets to the new project, discard or save " -"changes as new presets." -msgstr "" -"Sie können die geänderten Voreinstellungen in das neue Projekt übernehmen, " -"verwerfen oder als neue Voreinstellungen speichern." - msgid "Creating a new project" msgstr "Neues Projekt erstellen" @@ -2956,11 +3037,17 @@ msgstr "Nur Geometrie importieren" msgid "Only one G-code file can be opened at the same time." msgstr "Es kann immer nur eine G-Code-Datei gleichzeitig geöffnet werden." +msgid "G-code loading" +msgstr "G-Code ladend" + +msgid "G-code files can not be loaded with models together!" +msgstr "G-Code-Dateien können nicht mit Modellen zusammen geladen werden!" + msgid "Can not add models when in preview mode!" -msgstr "Unable to add models in preview mode" +msgstr "Modelle können im Vorschaumodus nicht hinzugefügt werden" msgid "Add Models" -msgstr "Add Models" +msgstr "Modelle hinzufügen" msgid "All objects will be removed, continue?" msgstr "Alle Objekte werden entfernt, fortfahren?" @@ -3025,7 +3112,7 @@ msgstr "Größe: %1% x %2% x %3% mm\n" #, boost-format msgid "Volume: %1% in³\n" -msgstr "Volume: %1% in³\n" +msgstr "Volumen: %1% in³\n" #, boost-format msgid "Volume: %1% mm³\n" @@ -3053,34 +3140,34 @@ msgid "Changing application language" msgstr "Wechsel der Sprache der Anwendung" msgid "Changing the region will log out your account.\n" -msgstr "Changing the region will log you out of your account.\n" +msgstr "Wenn Sie die Region ändern, werden Sie von Ihrem Konto abgemeldet.\n" msgid "Region selection" -msgstr "Region selection" +msgstr "Auswahl der Region" msgid "Second" msgstr "Sekunde" msgid "General Settings" -msgstr "General Settings" +msgstr "Allgemeine Einstellungen" msgid "Asia-Pacific" -msgstr "Asia-Pacific" +msgstr "Asien-Pazifik" msgid "China" msgstr "China" msgid "Europe" -msgstr "Europe" +msgstr "Europa" msgid "North America" -msgstr "North America" +msgstr "Nordamerika" msgid "Others" msgstr "Sonstige" msgid "Login Region" -msgstr "Login Region" +msgstr "Login-Region" msgid "Metric" msgstr "Metrisch" @@ -3095,10 +3182,12 @@ msgid "User sync" msgstr "Benutzer-Synchronisation" msgid "Auto sync user presets(Printer/Filament/Process)" -msgstr "Auto sync user presets(Printer/Filament/Process)" +msgstr "" +"Benutzervoreinstellungen automatisch synchronisieren (Drucker/Filament/" +"Prozess)" msgid "User Sync" -msgstr "User Sync" +msgstr "Benutzer-Synchronisation" msgid "Associate files to BambuStudio" msgstr "Dateien mit BambuStudio verknüpfen" @@ -3120,7 +3209,7 @@ msgstr "" "Dateien festgelegt" msgid "Associate .step/.stp files to BambuStudio" -msgstr "Associate .step/.stp files to BambuStudio" +msgstr "Verknüpfen Sie .step/.stp-Dateien mit BambuStudio" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" @@ -3197,7 +3286,7 @@ msgid "trace" msgstr "Spurensuche" msgid "Host Setting" -msgstr "Host Setting" +msgstr "Host-Einstellung" msgid "DEV host: api-dev.bambu-lab.com/v1" msgstr "DEV host: api-dev.bambu-lab.com/v1" @@ -3233,10 +3322,10 @@ msgid "Incompatible presets" msgstr "Inkompatible Voreinstellungen" msgid "AMS filaments" -msgstr "AMS Materialien" +msgstr "AMS Filament" msgid "Click to pick filament color" -msgstr "Pressen um Materialfarbe zu wählen" +msgstr "Klicken, um die Farbe des Filaments auszuwählen" msgid "Add/Remove presets" msgstr "Voreinstellungen hinzufügen/entfernen" @@ -3248,7 +3337,8 @@ msgid "Project-inside presets" msgstr "Projektinterne Voreinstellungen" msgid "Slice all plate to obtain time and filament estimation" -msgstr "Alle Bauplatten für Zeit- und Materialvorhersage slicen" +msgstr "" +"Slicen Sie alle Druckplatten, um Zeit- und Filamentschätzungen zu erhalten" msgid "Packing project data into 3mf file" msgstr "Packen der Projektdaten in eine 3mf-Datei" @@ -3373,13 +3463,13 @@ msgid "Other Device" msgstr "Anderes Gerät" msgid "Input access code" -msgstr "Input access code" +msgstr "Zugangscode eingeben" msgid "Log out successful." msgstr "Abmeldung erfolgreich." msgid "Busy" -msgstr "Busy" +msgstr "Beschäftigt" msgid "Bambu Cool Plate" msgstr "Bambu kalte Druckplatte" @@ -3388,13 +3478,13 @@ msgid "Bamabu Engineering Plate" msgstr "Bambu technische Druckplatte" msgid "Bamabu High Temperature Plate" -msgstr "Bambu Hochtemperatur-Druckplatte" +msgstr "Bambu Hochtemperaturdruckplatte" msgid "Send print job to" msgstr "Druckauftrag senden an" msgid "Refresh" -msgstr "Refresh" +msgstr "Aktualisieren" msgid "Bed Leveling" msgstr "Druckbettnivellierung" @@ -3409,46 +3499,66 @@ msgid "send completed" msgstr "senden abgeschlossen" msgid "No login account, only printers in LAN mode are displayed" -msgstr "No login account, only printers in LAN mode are displayed" +msgstr "Kein Anmeldekonto, nur Drucker im LAN-Modus werden angezeigt" msgid "Connecting to server" -msgstr "Connecting to server" +msgstr "Verbindung zum Server wird hergestellt" msgid "Synchronizing device information" -msgstr "Synchronizing device information" +msgstr "Geräteinformationen synchronisieren" msgid "Synchronizing device information time out" -msgstr "Synchronizing device information time out" +msgstr "Zeitüberschreitung bei der Synchronisierung von Geräteinformationen" 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 "" +"Die Druckaufgabe kann nicht gesendet werden, während das Upgrade ausgeführt " +"wird" msgid "" "The printer is executing instructions. Please restart printing after it ends" msgstr "" -"The printer is executing instructions. Please restart printing after it ends" +"Der Drucker führt gerade Anweisungen aus. Bitte starten Sie den Druckvorgang " +"nach deren Beendigung erneut" msgid "The printer is busy on other print job" -msgstr "The printer is busy with another print job." +msgstr "Der Drucker ist mit einem anderen Druckauftrag beschäftigt." +#, c-format, boost-format msgid "" -"The filament index exceeds the AMS's slot count and cannot send the print " -"job." +"Filament %s 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" +"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 "" +"Die Zuordnung von Filament zu AMS-Slots wurde eingerichtet. Sie können oben " +"auf ein Filament klicken, um dessen Zuordnung zum AMS-Steckplatz zu ändern" 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" +"Bitte klicken Sie oben auf jedes Filament, um den zugehörigen AMS-Slot " +"anzugeben, bevor Sie den Druckauftrag abschicken." + +#, 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 " @@ -3456,10 +3566,10 @@ msgid "" msgstr "" msgid "Preparing print job" -msgstr "Preparing print job" +msgstr "Druckauftrag vorbereiten" msgid "Modifying the device name" -msgstr "Modifying the device name" +msgstr "Den Gerätenamen ändern" msgid "Log in printer" msgstr "Drucker anmelden" @@ -3496,6 +3606,13 @@ msgstr "Speichere aktuelle %s" msgid "Delete this preset" msgstr "Lösche diese Voreinstellung" +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 "Breite der Linie" @@ -3537,13 +3654,13 @@ msgid "Acceleration" msgstr "Beschleunigung" msgid "Support filament" -msgstr "Supportmaterial" +msgstr "Supportfilament" msgid "Prime tower" msgstr "Prime-Turm" msgid "Flush options" -msgstr "Flush options" +msgstr "Optionen für die Druckdüsensäuberung" msgid "Special mode" msgstr "Spezialmodus" @@ -3576,7 +3693,7 @@ msgid "Reserved keywords found" msgstr "Reservierte Schlüsselwörter gefunden" msgid "Setting Overrides" -msgstr "Setting Overrides" +msgstr "überschreiben der Einstellungen" msgid "Retraction" msgstr "Einzug" @@ -3611,8 +3728,9 @@ 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." +"Dies ist die Betttemperatur, wenn die cool plate installiert ist. Ein Wert " +"von 0 bedeutet, dass das Filament das Drucken auf der cool plate nicht " +"unterstützt." msgid "Engineering plate" msgstr "technische Druckplatte" @@ -3621,8 +3739,9 @@ 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." +"Dies ist die Betttemperatur, wenn die technische Druckplatte installiert " +"wird. Ein Wert von 0 bedeutet, dass das Filament das Drucken auf der " +"technischen Druckplatte nicht unterstützt." msgid "High Temp Plate" msgstr "Hochtemperaturdruckplatte" @@ -3631,9 +3750,9 @@ 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." +"Dies ist die Betttemperatur, wenn die Hochtemperaturdruckplatte installiert " +"ist. Ein Wert von 0 bedeutet, dass das Filament das Drucken auf der " +"Hochtemperaturdruckplatte nicht unterstützt." msgid "Volumetric speed limitation" msgstr "Volumetrische Geschwindigkeitsbegrenzung" @@ -3676,10 +3795,10 @@ msgid "Auxiliary part cooling fan" msgstr "Hilfslüfter" msgid "Filament start G-code" -msgstr "Material Start G-Code" +msgstr "Filament Start G-Code" msgid "Filament end G-code" -msgstr "Material Ende G-Code" +msgstr "Filament End G-Code" msgid "Printable space" msgstr "Druckbarer Raum" @@ -3703,7 +3822,7 @@ msgid "Layer change G-code" msgstr "Schichtwechsel G-Code" msgid "Change filament G-code" -msgstr "Materialwechsel G-Code" +msgstr "Filamentwechsel G-Code" msgid "Pause G-code" msgstr "Pausen G-Code" @@ -3784,7 +3903,7 @@ msgid "New Value" msgstr "Neuer Wert" msgid "Transfer" -msgstr "Transfer" +msgstr "Übertragen" msgid "Don't save" msgstr "Nicht sichern" @@ -3879,7 +3998,7 @@ msgid "The name \"%1%\" already exists." msgstr "Der Name \"%1%\" existiert bereits." msgid "Basic Info" -msgstr "Basic Info" +msgstr "Basis-Info" msgid "Pictures" msgstr "Bilder" @@ -3901,7 +4020,7 @@ msgstr "Modellname" #, c-format, boost-format msgid "%s Update" -msgstr "%s Update" +msgstr "%s Aktualisieren" msgid "A new version is available" msgstr "Eine neue Version ist verfügbar" @@ -3949,16 +4068,16 @@ msgid "The configuration is up to date." msgstr "Die Konfiguration ist auf dem neuesten Stand." msgid "Auto-Calc" -msgstr "Auto-Calc" +msgstr "Automatisch berechnen" msgid "Flushing volumes for filament change" -msgstr "Spülvolumen für Materialwechsel" +msgstr "Säuberungsvolumen für Filamentwechsel" msgid "Flushing volume (mm³) for each filament pair." -msgstr "Spülvolumen (mm³) für jedes Materialpaar." +msgstr "Säuberungvolumen (mm³) für jedes Filamentpaar." msgid "Flush multiplier" -msgstr "Flush multiplier" +msgstr "Multiplikator der Druckdüsensäuberung" msgid "unloaded" msgstr "entladen wird" @@ -3967,7 +4086,7 @@ msgid "loaded" msgstr "geladen wird" msgid "Filament #" -msgstr "Material #" +msgstr "Filament #" msgid "From" msgstr "Von" @@ -3976,13 +4095,7 @@ msgid "To" msgstr "Zu" msgid "Login" -msgstr "Login" - -msgid "Filaments Selection" -msgstr "Auswahl der Materialien" - -msgid "Printer Selection" -msgstr "Auswahl der Drucker" +msgstr "Anmelden" msgid "The configuration package is changed in previous Config Guide" msgstr "Das Konfigurationspaket wurde im vorherigen Config Guide geändert" @@ -3999,59 +4112,18 @@ msgstr "Liste der Objekte" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." msgstr "Importieren Sie Geometriedaten aus STL/STEP/3MF/OBJ/AMF-Dateien." -msgid "Select all objects" -msgstr "Alle Objekte auswählen" - msgid "Copy to clipboard" msgstr "Zu Zwischenablage kopieren" msgid "Paste from clipboard" msgstr "Aus Zwischenablage einfügen" -msgid "Camera view - Default" -msgstr "Kameraperspektive - Standard" - -msgid "Camera view - Top" -msgstr "Kameraperspektive - Oben" - -msgid "Camera view - Bottom" -msgstr "Kameraperspektive - Unten" - -msgid "Camera view - Front" -msgstr "Kameraperspektive - Vorderseite" - -msgid "Camera view - Behind" -msgstr "Kameraperspektive - Hinten" - -msgid "Camera Angle - Left side" -msgstr "Kameraperspektive - Links" - -msgid "Camera Angle - Right side" -msgstr "Kameraperspektive - Rechts" - -msgid "keyboard 1-9: set filament for object/part" -msgstr "Tastatur 1-9: Material für Objekt/Teil einstellen" - msgid "Show keyboard shortcuts list" msgstr "Liste der Tastaturkürzel anzeigen" msgid "Global shortcuts" msgstr "Globale Tastaturkürzel" -msgid "Arrange all objects" -msgstr "Alle Objekte anordnen" - -msgid "Arrange objects on selected plates" -msgstr "Objekte auf ausgewählten Druckplatten anordnen" - -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 "" -"Wenn es ausgewählte Objekte gibt, werden nur die ausgewählten Objekte " -"ausgerichtet, ansonsten werden alle Objekte im Projekt ausgerichtet." - msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -4061,12 +4133,33 @@ msgstr "" "ausgerichtet, andernfalls werden alle Objekte auf der aktuellen Druckplatte " "ausgerichtet." +msgid "Collapse/Expand the sidebar" +msgstr "Seitenleiste zu-/ausklappen" + +msgid "⌘+Any arrow" +msgstr "⌘+beliebiger Pfeil" + +msgid "Movement in camera space" +msgstr "Bewegung im Kameraraum" + +msgid "⌥+Left mouse button" +msgstr "" + +msgid "Select a part" +msgstr "" + msgid "⌘+Left mouse button" msgstr "" msgid "Select multiple objects" msgstr "Mehrere Objekte auswählen" +msgid "Ctrl+Any arrow" +msgstr "Strg+beliebiger Pfeil" + +msgid "Alt+Left mouse button" +msgstr "" + msgid "Ctrl+Left mouse button" msgstr "" @@ -4106,17 +4199,53 @@ msgstr "Umschalttaste+beliebiger Pfeil" msgid "Movement step set to 1 mm" msgstr "Bewegungsschritt auf 1 mm eingestellt" -msgid "⌘+Any arrow" -msgstr "⌘+beliebiger Pfeil" +msgid "keyboard 1-9: set filament for object/part" +msgstr "Tastatur 1-9: Filament für Objekt/Teil einstellen" -msgid "Movement in camera space" -msgstr "Bewegung im Kameraraum" +msgid "Camera view - Default" +msgstr "Kameraperspektive - Standard" -msgid "Ctrl+Any arrow" -msgstr "Strg+beliebiger Pfeil" +msgid "Camera view - Top" +msgstr "Kameraperspektive - Oben" -msgid "Collapse/Expand the sidebar" -msgstr "Seitenleiste zu-/ausklappen" +msgid "Camera view - Bottom" +msgstr "Kameraperspektive - Unten" + +msgid "Camera view - Front" +msgstr "Kameraperspektive - Vorderseite" + +msgid "Camera view - Behind" +msgstr "Kameraperspektive - Hinten" + +msgid "Camera Angle - Left side" +msgstr "Kameraperspektive - Links" + +msgid "Camera Angle - Right side" +msgstr "Kameraperspektive - Rechts" + +msgid "Select all objects" +msgstr "Alle Objekte auswählen" + +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 "Druckplatte" @@ -4309,7 +4438,7 @@ msgid "Overhang wall" msgstr "Überhang Wand" msgid "Sparse infill" -msgstr "Spärliche Füllung" +msgstr "Füllung" msgid "Internal solid infill" msgstr "Interne massive Füllung" @@ -4450,11 +4579,12 @@ 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." +msgstr "" +"%1% ist zu nah an anderen, und es können Kollisionen verursacht werden." #, boost-format msgid "%1% is too tall, and collisions will be caused." -msgstr "%1% is too tall, and collisions will be caused." +msgstr "%1% ist zu hoch und es kommt zu Kollisionen." 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" @@ -4467,17 +4597,17 @@ msgid "Prime Tower" msgstr "Prime Turm" msgid " is too close to others, and collisions may be caused.\n" -msgstr " is too close to others, and collisions may be caused.\n" +msgstr " ist zu nah an anderen und es können Kollisionen verursacht werden.\n" msgid " is too close to exclusion area, and collisions will be caused.\n" -msgstr " is too close to exclusion area, and collisions will be caused.\n" +msgstr " ist zu nahe am Sperrgebiet und es werden Kollisionen verursacht.\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 "" -"Es können nicht mehrere Materialien mit einem großen Temperaturunterschied " +"Es können nicht mehrere Filamente mit einem großen Temperaturunterschied " "zusammen gedruckt werden. Andernfalls können der Extruder und die Druckdüse " "während des Drucks blockiert oder beschädigt werden" @@ -4554,7 +4684,7 @@ msgstr "Schichthöhe kann Druckdüsendurchmesser nicht überschreiten" #, c-format, boost-format msgid "Plate %d: %s does not support filament %s.\n" -msgstr "Druckplatte %d: %s unterstützt kein Material %s.\n" +msgstr "Druckplatte %d: %s unterstützt kein Filament %s.\n" msgid "Generating skirt & brim" msgstr "Erzeugen von Schürze und Rand (skirt & brim)" @@ -4574,6 +4704,12 @@ msgstr "Druckbarer Bereich" msgid "Bed exclude area" msgstr "ausgenommene Druckbettfläche" +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 "Elephant foot compensation" msgstr "Elefantenfußkompensation" @@ -4627,8 +4763,9 @@ 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 initial one. A value " -"of 0 means the filament does not support printing on the Cool Plate." +"Dies ist die Betttemperatur für Schichten mit Ausnahme der Ersten. Ein Wert " +"von 0 bedeutet, dass das Filament das Drucken auf der kalten Druckplatte " +"nicht unterstützt." msgid "°C" msgstr "°C" @@ -4640,15 +4777,17 @@ 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 initial one. A value " -"of 0 means the filament does not support printing on the Engineering Plate." +"Dies ist die Betttemperatur für Schichten mit Ausnahme der Ersten. Ein Wert " +"von 0 bedeutet, dass das Filament das Drucken auf der technischen " +"Druckplatte nicht unterstützt." 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 initial one. A value " -"of 0 means the filament does not support printing on the High Temp Plate." +"Dies ist die Betttemperatur für Schichten mit Ausnahme der Ersten. Ein Wert " +"von 0 bedeutet, dass das Filament das Drucken auf der " +"Hochtemperaturdruckplatte nicht unterstützt." msgid "Initial layer" msgstr "Erste Schicht" @@ -4660,22 +4799,24 @@ 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 initial layer. A value of 0 means the " -"filament does not support printing on the Cool Plate." +"Dies ist die Betttemperatur der Ausgangsschicht. Ein Wert von 0 bedeutet, " +"dass das Filament das Drucken auf der kalten Druckplatte nicht unterstützt." 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 initial layer. A value of 0 means the " -"filament does not support printing on the Engineering Plate." +"Dies ist die Betttemperatur der Ausgangsschicht. Ein Wert von 0 bedeutet, " +"dass das Filament das Drucken auf der technischen Druckplatte nicht " +"unterstützt." 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 initial layer. A value of 0 means the " -"filament does not support printing on the High Temp Plate." +"Dies ist die Betttemperatur der Ausgangsschicht. Ein Wert von 0 bedeutet, " +"dass das Filament das Drucken auf der Hochtemperaturdruckplatte nicht " +"unterstützt." msgid "Bed types supported by the printer" msgstr "Vom Drucker unterstützte Druckbettypen" @@ -4767,14 +4908,14 @@ msgstr "" "die Brücke zu verringern und den Durchhang zu verbessern" msgid "Only one wall on top surfaces" -msgstr "Only one wall on top surfaces" +msgstr "Nur eine Wand auf den oberen Flächen" 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 surface, to give more space to the top infill " -"pattern" +"Verwenden Sie nur eine Wand auf der flachen Oberseite, um mehr Platz für das " +"obere Füllungsmuster zu schaffen." msgid "Slow down for overhang" msgstr "Verlangsamen bei Überhängen" @@ -4872,10 +5013,10 @@ msgid "mm/s²" msgstr "mm/s²" msgid "Default filament profile" -msgstr "Standard-Materialprofil" +msgstr "Standard-Filamentprofil" msgid "Default filament profile when switch to this machine profile" -msgstr "Standard-Materialprofil beim Wechsel zu diesem Maschinenprofil" +msgstr "Standard-Filamentprofil beim Wechsel zu diesem Maschinenprofil" msgid "Default process profile" msgstr "Standard-Prozessprofil" @@ -4928,9 +5069,9 @@ msgid "" "bridges to be supported, and set it to a very large value if you don't want " "any bridges to be supported." msgstr "" -"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." +"Maximale Länge der Brücken, die keine Unterstützung benötigen. Setzen Sie " +"den Wert auf 0, wenn alle Brücken unterstützt werden sollen und legen Sie " +"einen sehr großen Wert fest, wenn keine Brücken unterstützt werden sollen." msgid "End G-code" msgstr "G-Code am Ende" @@ -4939,7 +5080,8 @@ msgid "End G-code when finish the whole printing" msgstr "End G-Code nach dem fertigstellen des kompletten Drucks" msgid "End G-code when finish the printing of this filament" -msgstr "End G-Code nach Beendigung des Druckvorgangs mit diesem Material" +msgstr "" +"Fügen Sie den End-G-Code hinzu, wenn Sie den Druck dieses Filaments beenden." msgid "Top surface pattern" msgstr "Muster der oberen Oberfläche" @@ -4957,7 +5099,7 @@ msgid "Monotonic" msgstr "Monotonisch" msgid "Monotonic line" -msgstr "Monotonic line" +msgstr "Monotone Linie" msgid "Bottom surface pattern" msgstr "Muster der unteren Oberfläche" @@ -4977,7 +5119,7 @@ msgstr "" "Qualität zu erzielen." msgid "Order of inner wall/outer wall/infil" -msgstr "Reihenfolge Innenwand/Außenwand/Infil" +msgstr "Reihenfolge Innenwand/Außenwand/Füllung" msgid "Print sequence of inner wall, outer wall and infill. " msgstr "Druckreihenfolge von Innenwand, Außenwand und Füllung. " @@ -5089,7 +5231,7 @@ msgstr "" "Diese Einstellung gibt an, wie viel Volumen an Material pro Sekunde " "geschmolzen und extrudiert werden kann. Die Druckgeschwindigkeit wird durch " "die maximale volumetrische Geschwindigkeit begrenzt, falls die Einstellung " -"zu hoch und unangemessen ist. Null bedeutet keine Begrenzung" +"zu hoch und unangemessen ist. Null bedeutet keine Begrenzung." msgid "mm³/s" msgstr "mm³/s" @@ -5101,33 +5243,33 @@ msgid "mm³" msgstr "mm³" msgid "Filament load time" -msgstr "Material Ladezeit" +msgstr "Ladedauer des Filaments" msgid "Time to load new filament when switch filament. For statistics only" msgstr "" -"Zeit zum Laden eines neuen Materials beim Wechsel des Materials. Nur für " -"Statistiken" +"Zeit zum Laden des neuen Filaments beim Wechseln des Filaments, nur für " +"statistische Zwecke." msgid "Filament unload time" -msgstr "Material Entladezeit" +msgstr "Entladezeit des Filaments" msgid "Time to unload old filament when switch filament. For statistics only" msgstr "" -"Zeit zum Entladen des alten Materials beim Wechsel des Materials. Nur für " -"Statistiken" +"Zeit zum Entladen des alten Filaments beim Wechseln des Filaments, nur für " +"statistische Zwecke." msgid "" "Filament diameter is used to calculate extrusion in gcode, so it's important " "and should be accurate" msgstr "" -"Der Materialdurchmesser wird für die Berechnung der Extrusion im G-Code " +"Der Filamentdurchmesser wird für die Berechnung der Extrusion im G-Code " "verwendet, er ist also wichtig und sollte genau sein" msgid "Density" msgstr "Dichte" msgid "Filament density. For statistics only" -msgstr "Materialdichte. Nur für die Statistik" +msgstr "Filamentdichte. Nur für die Statistik" msgid "g/cm³" msgstr "g/cm³" @@ -5136,7 +5278,7 @@ msgid "Type" msgstr "Typ" msgid "The material type of filament" -msgstr "Der Materialtyp des Materials" +msgstr "Material des Filaments." msgid "Soluble material" msgstr "Lösliches Material" @@ -5153,7 +5295,8 @@ msgstr "Stützmaterial" msgid "" "Support material is commonly used to print support and support interface" msgstr "" -"Support material is commonly used to print support and support interface" +"Stützmaterial wird üblicherweise zum Drucken von Stützen und " +"Stützschnittstellen verwendet." msgid "Temperature of vitrificaiton" msgstr "Verglasungstemperatur" @@ -5169,7 +5312,7 @@ msgid "Price" msgstr "Preis" msgid "Filament price. For statistics only" -msgstr "Preis des Materials. Nur für die Statistik" +msgstr "Filamentpreis, nur für statistische Zwecke." msgid "money/kg" msgstr "Kosten/kg" @@ -5184,22 +5327,21 @@ msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" msgstr "" -"Winkel für das spärliche Infill-Muster, das die Anfangs- oder Hauptrichtung " -"der Linie bestimmt" +"Winkel für das Infill-Muster, das die Anfangs- oder Hauptrichtung der Linie " +"bestimmt" msgid "Sparse infill density" -msgstr "Dichte der spärlichen Füllung" +msgstr "Dichte der Füllung" -#, c-format +#, fuzzy, c-format msgid "Density of internal sparse infill, 100% means solid throughout" -msgstr "" -"Dichte der internen spärlichen Füllung, 100%% bedeutet durchgehend fest" +msgstr "Dichte des internen Infill, 100% bedeutet durchgehend fest" msgid "Sparse infill pattern" -msgstr "Muster der spärlichen Füllung" +msgstr "Muster der Füllung" msgid "Line pattern for internal sparse infill" -msgstr "Linienmuster für interne spärliche Füllung" +msgstr "Linienmuster für interne Füllung." msgid "Grid" msgstr "Gitternetz" @@ -5226,8 +5368,9 @@ 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" +"Dies ist die Beschleunigung der Füllung der oberen Oberfläche. Die " +"Verwendung eines niedrigeren Werts kann die Qualität der oberen Oberfläche " +"verbessern." msgid "" "Acceleration of initial layer. Using a lower value can improve build plate " @@ -5280,7 +5423,7 @@ msgstr "Druckdüsentemperatur für die erste Schicht" msgid "Nozzle temperature to print initial layer when using this filament" msgstr "" "Druckdüsentemperatur zum Drucken der ersten Schicht bei Verwendung dieses " -"Materials" +"Filaments" msgid "Full fan speed at layer" msgstr "Volle Lüfterdrehzahl ab Schicht" @@ -5326,7 +5469,7 @@ msgstr "" "unregelmäßige Linienbreite und sollte langsamer gedruckt werden" msgid "Arc fitting" -msgstr "Arc fitting" +msgstr "Bogenanpassung" msgid "" "Enable this to get a G-code file which has G2 and G3 moves. And the fitting " @@ -5361,7 +5504,7 @@ msgid "" "nozzle, and what kind of filament can be printed" msgstr "" "Das metallische Material der Druckdüse. Dies bestimmt die Abriebfestigkeit " -"der Druckdüse und welche Art von Material gedruckt werden kann" +"der Druckdüse und welche Art von Filament gedruckt werden kann" msgid "Hardened steel" msgstr "Gehärteter Stahl" @@ -5390,18 +5533,18 @@ msgid "" "Automatically Combine sparse infill of several layers to print together to " "reduce time. Wall is still printed with original layer height." msgstr "" -"Kombinieren Sie automatisch spärliche Füllung aus mehreren Schichten, um " -"gemeinsam zu drucken und die Zeit zu reduzieren. Die Wand wird weiterhin mit " -"der ursprünglichen Schichthöhe gedruckt." +"Kombinieren Sie automatisch das Infill aus mehreren Schichten, um gemeinsam " +"zu drucken und die Zeit zu reduzieren. Die Wand wird weiterhin mit der " +"ursprünglichen Schichthöhe gedruckt." msgid "Filament to print internal sparse infill." -msgstr "Filament für den Druck von spärlicher interner Füllung." +msgstr "Filament für den Druck von Infill." msgid "Line width of internal sparse infill" -msgstr "Linienbreite der internen spärlichen Ausfüllung" +msgstr "Linienbreite der internen Füllung" msgid "Infill/Wall overlap" -msgstr "Füllung/Wand überstand" +msgstr "Überstand Füllung/Wand" msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " @@ -5409,10 +5552,10 @@ msgid "" msgstr "" "Der Bereich der Füllung wird leicht vergrößert, damit er sich mit der Wand " "überschneidet, um eine bessere Haftung zu erreichen. Der Prozentwert bezieht " -"sich auf die Linienbreite der spärlichen Füllung" +"sich auf die Linienbreite der Füllung." msgid "Speed of internal sparse infill" -msgstr "Geschwindigkeit der internen spärlichen Füllung" +msgstr "Geschwindigkeit der internen Füllung." msgid "Ironing Type" msgstr "Glätten-Typ" @@ -5592,7 +5735,7 @@ msgstr "" "Teilelüfter" msgid "Max" -msgstr "Max" +msgstr "Maximal" msgid "" "The largest printable layer height for extruder. Used tp limits the maximum " @@ -5638,10 +5781,10 @@ msgid "Diameter of nozzle" msgstr "Druckdüsendurchmesser" msgid "Nozzle volume" -msgstr "Nozzle volume" +msgstr "Volumen der Druckdüse" msgid "Volume of nozzle between the cutter and the end of nozzle" -msgstr "Volume of nozzle between the cutter and the end of nozzle" +msgstr "Volumen der Düse zwischen dem Messer und dem Ende der Düse" msgid "Reduce infill retraction" msgstr "Rückzug bei der Füllung verringern" @@ -5833,14 +5976,14 @@ msgstr "" "für diese Schichten zu erreichen" msgid "Minimum sparse infill threshold" -msgstr "Mindestschwelle für spärliche Füllung" +msgstr "Mindestschwelle für Füllung" msgid "" "Sparse infill area which is smaller than threshold value is replaced by " "internal solid infill" msgstr "" -"Spärliche Füllbereiche, die kleiner als der Schwellenwert sind, werden durch " -"interne massive Füllungen ersetzt" +"Füllbereiche, die kleiner als der Schwellenwert sind, werden durch interne " +"massive Füllungen ersetzt" msgid "mm²" msgstr "mm²" @@ -5852,8 +5995,8 @@ msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" "Geschwindigkeit der inneren festen Füllung, nicht der Ober- und Unterseite" -msgid "Spiral mode" -msgstr "Spiralförmiger Modus" +msgid "Spiral vase" +msgstr "" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " @@ -5864,15 +6007,16 @@ msgstr "" "Volumenmodell in einen einwandigen Druck mit soliden unteren Schichten. Das " "endgültig erzeugte Modell hat keine Naht" -msgid "Timelapse without toolhead" -msgstr "" - 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 "Temperature variation" msgstr "Temperaturvariation" @@ -5884,7 +6028,7 @@ msgid "Start G-code when start the whole printing" msgstr "G-Code starten, wenn der gesamte Druckvorgang beginnt" msgid "Start G-code when start the printing of this filament" -msgstr "G-Code starten, wenn der Druck dieses Materials beginnt" +msgstr "G-Code starten, wenn der Druck dieses Filaments beginnt" msgid "Enable support" msgstr "Support aktivieren" @@ -5947,7 +6091,7 @@ msgid "" "Filament to print support and skirt. 0 means no specific filament for " "support and current filament is used" msgstr "" -"Material für den Druck der Supports und der Schürze. 0 bedeutet, dass kein " +"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 "Line width of support" @@ -5966,9 +6110,9 @@ msgid "" "Filament to print support interface. 0 means no specific filament for " "support interface and current filament is used" msgstr "" -"Material zum Drucken der Support-Schnittstelle. 0 bedeutet, dass kein " -"spezielles Material für die Support-Schnittstelle vorhanden ist und das " -"aktuelle Material verwendet wird" +"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 "Top interface layers" msgstr "Obere Schnittstellenschichten" @@ -6044,8 +6188,8 @@ msgid "" msgstr "" "Die Support-Schicht verwendet eine von der Objektschicht unabhängige " "Schichthöhe. Dies dient der Unterstützung benutzerdefinierter Supportlücken, " -"kann aber zusätzliche Materialwechsel verursachen, wenn die Supportschicht " -"von einem anderen Material gedruckt wird" +"kann aber zusätzliche Filamentwechsel verursachen, wenn die Supportschicht " +"von einem anderen Filament gedruckt wird" msgid "Threshold angle" msgstr "Schwellenwinkel" @@ -6134,7 +6278,7 @@ msgid "" "This gcode is inserted when change filament, including T command to trigger " "tool change" msgstr "" -"Dieser G-Code wird beim Materialwechsel eingefügt, einschließlich des T-" +"Dieser G-Code wird beim Filamentwechsel eingefügt, einschließlich des T-" "Befehls zum Auslösen des Werkzeugwechsels" msgid "Line width for top surfaces" @@ -6221,7 +6365,7 @@ msgid "Width of prime tower" msgstr "Breite des Prime-Turms" msgid "Flush into objects' infill" -msgstr "Flush into objects' infill" +msgstr "Druckdüse in der Füllung der Objekte säubern" msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -6229,31 +6373,33 @@ msgid "" "printed with transparent filament, the mixed color infill will be seen " "outside" msgstr "" -"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 visible." +"Die Spülung der Druckdüse nach dem Filamentwechsel erfolgt innerhalb der " +"Füllungen der Objekte. Dies kann die Abfallmenge verringern und die " +"Druckzeit verkürzen. Wenn die Wände mit transparentem Filament gedruckt " +"werden, ist die gemischte Farbe der Füllung sichtbar." msgid "Flush into objects' support" -msgstr "Flush into objects' support" +msgstr "Druckdüse in der Supportstruktur des Objekts säubern" 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." +"Die Reinigung der Druckdüse nach dem Filamentwechsel erfolgt innerhalb des " +"Objektsupport. Dies kann die Abfallmenge verringern und die Druckzeit " +"verkürzen." msgid "Flush into this object" -msgstr "Flush into this object" +msgstr "Druckdüse in diesem Objekt säubern" 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. Colours of the objects will be mixed " -"as a result" +"Dieses Objekt wird verwendet, um die Düse nach einem Filamentwechsel zu " +"säubern, um Filament zu sparen und die Druckzeit zu verkürzen. Die Farben " +"der Objekte werden als Ergebnis gemischt" msgid "X-Y hole compensation" msgstr "X-Y-Loch-Kompensation" @@ -6330,10 +6476,10 @@ msgid "Arrange options: 0-disable, 1-enable, others-auto" msgstr "Anordnungsoptionen: 0-deaktiviert; 1-aktiviert; andere-automatisch" msgid "Convert Unit" -msgstr "Convert Unit" +msgstr "Einheit umrechnen" msgid "Convert the units of model" -msgstr "Convert the units of model" +msgstr "Einheiten des Modells umrechnen" msgid "Orient the model" msgstr "Das Modell ausrichten" @@ -6356,10 +6502,10 @@ msgid "Load process/machine settings from the specified file" msgstr "Laden von Prozess-/Maschineneinstellungen aus der angegebenen Datei" msgid "Load Filament Settings" -msgstr "Lade Materialeinstellungen" +msgstr "Filamenteinstellungen laden" msgid "Load filament settings from the specified file list" -msgstr "Materialeinstellungen aus der angegebenen Dateiliste laden" +msgstr "Filamenteinstellungen aus der angegebenen Dateiliste laden" msgid "Output directory" msgstr "Ausgabeverzeichnis" @@ -6384,7 +6530,7 @@ msgid "Generating walls" msgstr "Erzeugen von Wänden" msgid "Generating infill regions" -msgstr "Erzeugung von Füllregionen" +msgstr "Generierung von Füllbereichen" msgid "Generating infill toolpath" msgstr "Füllwerkzeugweg generieren" @@ -6431,73 +6577,34 @@ msgstr "Fehler auf Zeile %1%:\n" #, c-format, boost-format msgid "Support: generate toolpath at layer %d" -msgstr "Support: generate toolpath at layer %d" +msgstr "Support: Werkzeugpfad auf Ebene %d erzeugen" msgid "Support: detect overhangs" -msgstr "Support: detect overhangs" +msgstr "Support: Überhänge erkennen" msgid "Support: generate contact points" -msgstr "Support: generate contact points" +msgstr "Support: Kontaktstellen erstellen" msgid "Support: propagate branches" -msgstr "Support: propagate branches" +msgstr "Support: Zweige vermehren" msgid "Support: draw polygons" -msgstr "Support: draw polygons" +msgstr "Support: Polygone zeichnen" msgid "Support: generate toolpath" -msgstr "Support: generate toolpath" +msgstr "Support: Werkzeugweg generieren" #, c-format, boost-format msgid "Support: generate polygons at layer %d" -msgstr "Support: generate polygons at layer %d" +msgstr "Support: Polygone auf Ebene %d erzeugen" #, c-format, boost-format msgid "Support: fix holes at layer %d" -msgstr "Support: fix holes at layer %d" +msgstr "Support: Löcher in Schicht %d repairieren" #, c-format, boost-format msgid "Support: propagate branches at layer %d" -msgstr "Support: propagate branches at layer %d" - -#~ msgid "Creating" -#~ msgstr "Creating" - -#~ msgid "Uploading" -#~ msgstr "Lade hoch" - -#~ msgid "Waiting" -#~ msgstr "Waiting" - -#~ msgid "Sending" -#~ msgstr "Sending" - -#~ msgid "Finished" -#~ msgstr "Fertig" - -#~ msgid "Please fill report first." -#~ msgstr "Bitte füllen Sie zuerst den Bericht aus." - -#~ msgid "Unable to create zip file" -#~ msgstr "Unable to create zip file" - -#~ msgid "Enter a search term" -#~ msgstr "Suchbegriff eingeben" - -#~ msgid "Debug" -#~ msgstr "Debuggen" - -#~ msgid "Monitoring" -#~ msgstr "Überwachung" - -#~ msgid "Fragment filter" -#~ msgstr "Fragment filter" - -#~ msgid "Fragment Filter" -#~ msgstr "Fragment Filter" - -#~ msgid "Position:" -#~ msgstr "Position:" +msgstr "Support: Verbreiten von Zweigen auf Ebene %d" #~ msgid "Alt + Mouse wheel" #~ msgstr "Alt + Mausrad" @@ -6510,14 +6617,31 @@ msgstr "Support: propagate branches at layer %d" #~ "Lösen Sie das Problem, indem Sie es vollständig innerhalb oder außerhalb " #~ "der Druckplatte verschieben." -#~ msgid "Arranging" -#~ msgstr "Anordnen" +#~ msgid "Auto arrange" +#~ msgstr "Automatische Anordnung" + +#~ 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 "" +#~ "Wenn es ausgewählte Objekte gibt, werden nur die ausgewählten Objekte " +#~ "ausgerichtet, ansonsten werden alle Objekte im Projekt ausgerichtet." + +#~ msgid "Clear all" +#~ msgstr "Alles löschen" + +#~ msgid "Creating" +#~ msgstr "Wird erstellt..." #~ msgid "Ctrl + Any arrow" #~ msgstr "Strg + beliebiger Pfeil" #~ msgid "Ctrl + Left mouse button" -#~ msgstr "Ctrl + Left mouse button" +#~ msgstr "Strg + Linke Maustaste" + +#~ msgid "Debug" +#~ msgstr "Debuggen" #~ msgid "Display printable box" #~ msgstr "Bedruckbare Box anzeigen" @@ -6535,11 +6659,12 @@ msgstr "Support: propagate branches at layer %d" #~ "2. The Filament presets\n" #~ "3. The Printer presets\n" #~ msgstr "" -#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" -#~ "Contains the following information:\n" -#~ "1. Process presets\n" -#~ "2. Filament presets\n" -#~ "3. Printer presets\n" +#~ "Möchten Sie Ihre persönlichen Daten aus der Bambu Cloud " +#~ "synchronisieren? \n" +#~ "Enthält die folgenden Informationen:\n" +#~ "1. Prozess-Voreinstellungen\n" +#~ "2. Filament-Voreinstellungen\n" +#~ "3. Drucker-Voreinstellungen\n" #~ msgid "" #~ "Don't retract when the travel is in infill area absolutely. That means " @@ -6548,26 +6673,47 @@ msgstr "Support: propagate branches at layer %d" #~ "Ziehen Sie nicht zurück, wenn sich der Weg im Füllbereich befindet. Das " #~ "bedeutet, dass man die Quellung nicht sehen kann" +#~ msgid "Enter a search term" +#~ msgstr "Suchbegriff eingeben" + +#~ msgid "Filaments Selection" +#~ msgstr "Auswahl der Filamente" + +#~ msgid "Finished" +#~ msgstr "Fertig" + #~ msgid "Fix model locally" #~ msgstr "Modell lokal reparieren" #~ msgid "Fix model through cloud" #~ msgstr "Modell durch die Cloud reparieren" +#~ msgid "Fragment Filter" +#~ msgstr "Fragment-Filter" + +#~ msgid "Fragment area" +#~ msgstr "Fragment-Bereich" + +#~ msgid "Fragment filter" +#~ msgstr "Fragment-Filter" + #~ msgid "" #~ "Heat the nozzle to target \n" #~ "temperature" #~ msgstr "Die Druckdüse auf die Zieltemperatur heitzen" #~ msgid "In the calibration of extrusion flow" -#~ msgstr "In the calibration of extrusion flow" +#~ msgstr "Kalibrierung des Materialflusses" #~ msgid "In the calibration of laser scanner" -#~ msgstr "In the calibration of laser scanner" +#~ msgstr "Kalibrierung des Laser-Scanner" #~ msgid "Module" #~ msgstr "Modul" +#~ msgid "Monitoring" +#~ msgstr "Überwachung" + #~ msgid "New version of Bambu Studio" #~ msgstr "Neue Version von Bambu Studio" @@ -6575,32 +6721,44 @@ msgstr "Support: propagate branches at layer %d" #~ msgstr "Ausgabedatei" #~ msgid "Pause(heated bed temperature error)" -#~ msgstr "Pause(heated bed temperature error)" +#~ msgstr "Pause (Temperaturfehler beim Heizbett)" #~ msgid "Pause(hotend temperature error)" -#~ msgstr "Pause(hotend temperature error)" +#~ msgstr "Pause (Temperaturfehler im Hotend)" #~ msgid "Pause(toolhead shell off)" -#~ msgstr "Pause(toolhead shell off)" +#~ msgstr "Pause (Werkzeugkopfabdeckung abgefallen)" + +#~ msgid "Please fill report first." +#~ msgstr "Bitte füllen Sie zuerst den Bericht aus." #~ msgid "Please upgrade your printer first" -#~ msgstr "Please upgrade your printer first" +#~ msgstr "Bitte aktualisieren Sie zuerst Ihren Drucker" + +#~ msgid "Position:" +#~ msgstr "Position:" #~ msgid "" #~ "Preview only mode:\n" #~ "The loaded file contains gcode only." #~ msgstr "" -#~ "Preview only mode:\n" -#~ "The loaded file contains gcode only." +#~ "Nur Vorschaumodus:\n" +#~ "Die geladene Datei enthält nur G-Code." #~ msgid "Preview only mode for gcode file." -#~ msgstr "Preview only mode for gcode file." +#~ msgstr "Nur Vorschaumodus für Gcode-Datei." + +#~ msgid "Printer Selection" +#~ msgstr "Auswahl der Drucker" #~ msgid "" #~ "Push new filament \n" #~ "into extruder" #~ msgstr "Neues Filament in den Extruder drücken" +#~ msgid "Sending" +#~ msgstr "Senden" + #~ msgid "Shift + Any arrow" #~ msgstr "Umschalttaste + beliebiger Pfeil" @@ -6616,19 +6774,38 @@ msgstr "Support: propagate branches at layer %d" #~ msgid "Show Printable Box(TODO)" #~ msgstr "Druckbare Box anzeigen(TODO)" +#~ msgid "Spiral mode" +#~ msgstr "Spiralförmiger Modus" + #~ 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" +#~ msgstr "Erfolgreich gesendet, springt automatisch zur Geräteseite in %s" #~ msgid "Swith cloud environment, Please login again!" #~ msgstr "Cloud-Umgebung wechseln, bitte erneut anmelden!" +#~ msgid "The Config is not compatible and can not be loaded." +#~ msgstr "" +#~ "Die Konfiguration ist nicht kompatibel und kann nicht geladen werden." + #~ 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 printer and AMS are too low.Please update to the " -#~ "latest version before sending the print job" +#~ "Die Firmware-Versionen von Drucker und AMS sind zu niedrig. Bitte " +#~ "aktualisieren Sie auf die neueste Version, bevor Sie den Druckauftrag " +#~ "senden" + +#~ msgid "Unable to create zip file" +#~ msgstr "ZIP-Datei kann nicht erstellt werden" + +#~ msgid "Uploading" +#~ msgstr "Lade hoch" #~ msgid "User pause" -#~ msgstr "User pause" +#~ msgstr "Benutzerpause" + +#~ msgid "Waiting" +#~ msgstr "Warten" + +#~ 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 3a313e16bd3..7f12a2141d3 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-07-23 18:15+0800\n" +"POT-Creation-Date: 2022-08-08 20:01+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -52,8 +52,8 @@ msgstr "" msgid "Perform" msgstr "Perform" -msgid "Fragment area" -msgstr "Fragment area" +msgid "Gap area" +msgstr "" msgid "Set pen size" msgstr "Set pen size" @@ -123,9 +123,6 @@ msgstr "Choose filament" msgid "Edge detection" msgstr "Edge detection" -msgid "Clear all" -msgstr "Clear all" - msgid "Triangles" msgstr "Triangles" @@ -339,20 +336,35 @@ msgstr "Face recognition" msgid "Perform Recognition" msgstr "Perform Recognition" -msgid "Cube" -msgstr "Cube" +msgid "Reset direction" +msgstr "" -msgid "Cylinder" -msgstr "Cylinder" +msgid "Brush size" +msgstr "" -msgid "Cone" -msgstr "Cone" +msgid "Brush shape" +msgstr "" -msgid "Timelapse Wipe Tower" -msgstr "Timelapse Wipe Tower" +msgid "Enforce seam" +msgstr "" -msgid "Add Modifier" -msgstr "Add Modifier" +msgid "Block seam" +msgstr "" + +msgid "Remove selection" +msgstr "" + +msgid "Seam painting" +msgstr "" + +msgid "Entering Seam painting" +msgstr "" + +msgid "Leaving Seam painting" +msgstr "" + +msgid "Paint-on seam editing" +msgstr "" msgid "Notice" msgstr "Notice" @@ -421,11 +433,14 @@ msgstr "Critical error" msgid "BambuStudio got an unhandled exception: %1%" msgstr "BambuStudio got an unhandled exception: %1%" -msgid "Downloading Bambu Network plug-in" +msgid "Downloading Bambu Network Plug-in" +msgstr "" + +msgid "Incorrect password" msgstr "" #, c-format, boost-format -msgid "Connect %s[SN:%s] failed!" +msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "" msgid "" @@ -483,6 +498,25 @@ msgstr "Choose one or more files (3mf/step/stl/obj/amf):" 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" @@ -511,12 +545,6 @@ msgstr "Language" msgid "*" msgstr "*" -msgid "G-code files can not be loaded with models together!" -msgstr "G-code files and models cannot be loaded together!" - -msgid "G-code loading" -msgstr "G-code loading" - msgid "Select a G-code file:" msgstr "Select a G-code file:" @@ -605,6 +633,18 @@ msgstr "Delete the selected object" msgid "Load..." msgstr "Load..." +msgid "Cube" +msgstr "Cube" + +msgid "Cylinder" +msgstr "Cylinder" + +msgid "Cone" +msgstr "Cone" + +msgid "Timelapse Wipe Tower" +msgstr "Timelapse Wipe Tower" + msgid "Add settings" msgstr "Add Settings" @@ -801,6 +841,9 @@ msgstr "Lock" msgid "Name" msgstr "Name" +msgid "Fila." +msgstr "" + #, c-format, boost-format msgid "%1$d error repaired" msgid_plural "%1$d errors repaired" @@ -852,6 +895,9 @@ msgstr "Error!" msgid "Generic" msgstr "Generic" +msgid "Add Modifier" +msgstr "Add Modifier" + msgid "Deleting the last solid part is not allowed." msgstr "Deleting the last solid part is not allowed." @@ -1076,6 +1122,9 @@ msgid "" msgstr "" "Arrange failed. Found some exceptions when processing object geometries." +msgid "Arranging" +msgstr "" + msgid "Arranging canceled." msgstr "Arranging canceled." @@ -1274,12 +1323,12 @@ msgid "" "the corresponding code comments." msgstr "" +msgid "AMSMaterialsSetting" +msgstr "" + msgid "Colour" msgstr "Colour" -msgid "SN" -msgstr "SN" - msgid "" "Nozzle\n" "Temperature" @@ -1297,9 +1346,22 @@ msgstr "min" 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 "Confirm" msgstr "Confirm" +msgid "Close" +msgstr "Close" + +msgid "AMS Slots" +msgstr "" + +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "" + msgid "Insertion update" msgstr "Insertion update" @@ -1348,9 +1410,6 @@ msgstr "" msgid "File" msgstr "File" -msgid "Close" -msgstr "Close" - msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" @@ -1593,13 +1652,6 @@ msgstr "" "Yes - Change these settings and enable spiral mode automatically\n" "No - Give up using spiral mode this time" -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 "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -1753,6 +1805,9 @@ msgstr "Update failed." msgid "Failed to start printing job" msgstr "" +msgid "parameter name" +msgstr "" + msgid "N/A" msgstr "N/A" @@ -1994,8 +2049,11 @@ msgstr "Add Plate" msgid "Auto orient" msgstr "Auto Orient" -msgid "Auto arrange" -msgstr "Auto Arrange" +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 "Split to Objects" @@ -2094,6 +2152,9 @@ msgstr "" "You can find it in \"Settings > Network > Connection code\"\n" "on the printer, as shown in the figure:" +msgid "Invalid input." +msgstr "" + msgid "Application is closing" msgstr "Closing application" @@ -2199,9 +2260,6 @@ msgstr "New Project" msgid "Start a new project" msgstr "Start a new project" -msgid "Open Project" -msgstr "Open Project" - msgid "Open a project file" msgstr "Open a project file" @@ -2310,6 +2368,18 @@ msgstr "View" msgid "Help" msgstr "Help" +msgid "&File" +msgstr "&File" + +msgid "&Edit" +msgstr "" + +msgid "&View" +msgstr "&View" + +msgid "&Help" +msgstr "&Help" + msgid "&Open G-code" msgstr "&Open G-code" @@ -2341,15 +2411,6 @@ msgstr "&Quit" msgid "Quit %s" msgstr "Quit %s" -msgid "&File" -msgstr "&File" - -msgid "&View" -msgstr "&View" - -msgid "&Help" -msgstr "&Help" - msgid "Save configuration as:" msgstr "Save configuration as:" @@ -2438,9 +2499,15 @@ msgstr "Stop" msgid "0%" msgstr "0%" +msgid "Clean" +msgstr "" + msgid "Control" msgstr "Control" +msgid "Print Options" +msgstr "" + msgid "100%" msgstr "100%" @@ -2674,6 +2741,15 @@ msgctxt "Layers" msgid "Bottom" msgstr "Bottom" +msgid "Spaghetti Detection" +msgstr "" + +msgid "Stop printing when spaghetti detected" +msgstr "" + +msgid "First Layer Inspection" +msgstr "" + msgid "Switch to per-object setting mode to edit modifier settings." msgstr "Switch to per-object setting mode to edit modifier settings." @@ -2758,14 +2834,17 @@ msgstr "Restore" msgid "Loading file: %s" msgstr "Loading file: %s" -msgid "The Config is not compatible and can not be loaded." -msgstr "The configuration is not compatible; it cannot be loaded!" +msgid "The 3mf is not from Bambu Lab, load geometry data only." +msgstr "" -msgid "Incompatible 3mf" -msgstr "Incompatible 3mf" +msgid "Load 3mf" +msgstr "" -msgid "the 3mf is not compatible, load geometry data only!" -msgstr "The 3mf is not compatible, loading geometry data only!" +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 "" @@ -2781,6 +2860,12 @@ msgstr "You'd better upgrade your software.\n" msgid "Newer 3mf version" msgstr "Newer 3mf version" +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!" @@ -2820,6 +2905,14 @@ 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 "Export STL file:" @@ -2865,19 +2958,9 @@ msgstr "" "Preview only mode:\n" "The loaded file contains G-code only and can not enter the Prepare page" -msgid "Some presets are modified." -msgstr "Some presets are modified." - 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 "" -"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 "Creating a new project" msgstr "Creating a new project" @@ -2908,6 +2991,12 @@ msgstr "Import geometry only" 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" @@ -3371,9 +3460,15 @@ msgstr "" 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 "" -"The filament index exceeds the AMS's slot count and cannot send the print " -"job." +"Filament exceeds the number of AMS slots. Please update the printer firmware " +"to support AMS slot assignment." msgstr "" msgid "" @@ -3390,6 +3485,17 @@ 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." @@ -3433,6 +3539,13 @@ msgstr "Save current %s" msgid "Delete this preset" msgstr "Delete this preset" +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" @@ -3901,12 +4014,6 @@ msgstr "To" msgid "Login" msgstr "Login" -msgid "Filaments Selection" -msgstr "Filaments selection" - -msgid "Printer Selection" -msgstr "Printer Selection" - msgid "The configuration package is changed in previous Config Guide" msgstr "The configuration package is changed in previous Config Guide" @@ -3922,68 +4029,41 @@ 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 "Select all objects" -msgstr "Select all objects" - msgid "Copy to clipboard" msgstr "Copy to clipboard" msgid "Paste from clipboard" msgstr "Paste from clipboard" -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 "keyboard 1-9: set filament for object/part" -msgstr "keyboard 1-9: set filament for object/part" - msgid "Show keyboard shortcuts list" msgstr "Show keyboard shortcuts list" msgid "Global shortcuts" msgstr "Global shortcuts" -msgid "Arrange all objects" -msgstr "Arrange all objects" - -msgid "Arrange objects on selected plates" -msgstr "Arrange objects on selected plates" - 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." +"all objects in the current disk." msgstr "" -"Auto orientates selected objects or all objects.\n" -"If there are selected objects, it just orientates the selected ones." -"Otherwise, it will orientates all objects in the project." - -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." + +msgid "Collapse/Expand the sidebar" +msgstr "Collapse/Expand the sidebar" + +msgid "⌘+Any arrow" +msgstr "" + +msgid "Movement in camera space" +msgstr "Movement in camera space" + +msgid "⌥+Left mouse button" +msgstr "" + +msgid "Select a part" msgstr "" -"Auto orientates selected objects or all objects.\n" -"If there are selected objects, it just orientates the selected ones." -"Otherwise, it will orientates all objects in the current disk." msgid "⌘+Left mouse button" msgstr "" @@ -3991,6 +4071,12 @@ 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 "" @@ -4030,17 +4116,53 @@ msgstr "" msgid "Movement step set to 1 mm" msgstr "Movement step set to 1 mm" -msgid "⌘+Any arrow" +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 "Select all objects" + +msgid "Gizmo move" msgstr "" -msgid "Movement in camera space" -msgstr "Movement in camera space" +msgid "Gizmo scale" +msgstr "" -msgid "Ctrl+Any arrow" +msgid "Gizmo rotate" msgstr "" -msgid "Collapse/Expand the sidebar" -msgstr "Collapse/Expand the sidebar" +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 "Plater" @@ -4482,6 +4604,12 @@ 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 "Elephant foot compensation" msgstr "Elephant foot compensation" @@ -5735,8 +5863,8 @@ msgstr "" "This is the speed for internal solid infill, but not the top or bottom " "surface." -msgid "Spiral mode" -msgstr "Spiral mode" +msgid "Spiral vase" +msgstr "" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " @@ -5747,9 +5875,6 @@ msgstr "" "and turns a solid model into a single walled print with solid bottom layers. " "The final generated model has no seam." -msgid "Timelapse without toolhead" -msgstr "" - 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 " @@ -6324,6 +6449,39 @@ msgstr "Support: fix holes at layer %d" msgid "Support: propagate branches at layer %d" msgstr "Support: propagate branches at layer %d" +#~ msgid "the 3mf is not compatible, load geometry data only!" +#~ msgstr "The 3mf is not compatible, loading geometry data only!" + +#~ 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 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." + +#~ msgid "The Config is not compatible and can not be loaded." +#~ msgstr "The configuration is not compatible; it cannot be loaded!" + +#~ msgid "Auto arrange" +#~ msgstr "Auto Arrange" + +#~ msgid "Filaments Selection" +#~ msgstr "Filaments selection" + +#~ msgid "Printer Selection" +#~ msgstr "Printer Selection" + +#~ msgid "Spiral mode" +#~ msgstr "Spiral mode" + +#~ msgid "Fragment area" +#~ msgstr "Fragment area" + +#~ msgid "Clear all" +#~ msgstr "Clear all" + #~ msgid "Creating" #~ msgstr "Creating" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index 9a444fdd010..f444f3bdb08 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-07-23 18:15+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2022-08-08 20: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" @@ -52,8 +49,8 @@ msgstr "" msgid "Perform" msgstr "Realizar" -msgid "Fragment area" -msgstr "Fragment area" +msgid "Gap area" +msgstr "" msgid "Set pen size" msgstr "Ajustar el tamaño del lápiz" @@ -77,7 +74,7 @@ msgid "Sphere" msgstr "Esfera" msgid "Fill" -msgstr "Fill" +msgstr "Llenar" msgid "Gap Fill" msgstr "" @@ -124,9 +121,6 @@ msgstr "Elegir filamento" msgid "Edge detection" msgstr "Detección de bordes" -msgid "Clear all" -msgstr "Borrar todo" - msgid "Triangles" msgstr "Triángulos" @@ -149,10 +143,10 @@ msgid "Shortcut Key " msgstr "Tecla de acceso directo " msgid "Triangle" -msgstr "Triangle" +msgstr "Triángulo" msgid "Height Range" -msgstr "Height Range" +msgstr "Rango de altura" msgid "Remove painted color" msgstr "Eliminar color pintado" @@ -337,25 +331,40 @@ msgid "Operation already cancelling. Please wait few seconds." msgstr "Operación ya cancelada. Por favor, espere unos segundos." msgid "Face recognition" -msgstr "Face recognition" +msgstr "Reconocimiento facial" msgid "Perform Recognition" -msgstr "Perform Recognition" +msgstr "Realizar el reconocimiento" -msgid "Cube" -msgstr "Cubo" +msgid "Reset direction" +msgstr "" -msgid "Cylinder" -msgstr "Cilindro" +msgid "Brush size" +msgstr "" -msgid "Cone" -msgstr "Cono" +msgid "Brush shape" +msgstr "" -msgid "Timelapse Wipe Tower" -msgstr "Timelapse Wipe Tower" +msgid "Enforce seam" +msgstr "" -msgid "Add Modifier" -msgstr "Añadir modificador" +msgid "Block seam" +msgstr "" + +msgid "Remove selection" +msgstr "" + +msgid "Seam painting" +msgstr "" + +msgid "Entering Seam painting" +msgstr "" + +msgid "Leaving Seam painting" +msgstr "" + +msgid "Paint-on seam editing" +msgstr "" msgid "Notice" msgstr "Date cuenta" @@ -430,11 +439,14 @@ msgstr "Error crítico" msgid "BambuStudio got an unhandled exception: %1%" msgstr "BambuStudio recibió una notificación de excepción no controlada: %1%." -msgid "Downloading Bambu Network plug-in" +msgid "Downloading Bambu Network Plug-in" +msgstr "" + +msgid "Incorrect password" msgstr "" #, c-format, boost-format -msgid "Connect %s[SN:%s] failed!" +msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "" msgid "" @@ -493,12 +505,31 @@ msgstr "Elija uno o varios archivos (3mf/step/stl/obj/amf):" msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" msgstr "Elija un archivo (gcode/.gco/.g/.ngc/ngc):" +msgid "Some presets are modified." +msgstr "Algunos preajustes se modifican." + msgid "" -"The version of Bambu studio is too low and needs to be updated to the latest " -"version before it can be used normally" +"You can keep the modifield presets to the new project, discard or save " +"changes as new presets." +msgstr "" +"Puede mantener los preajustes de los campos de trabajo en el nuevo proyecto, " +"descartar o guardar los cambios como nuevos preajustes." + +msgid "User logged out" +msgstr "" + +msgid "new or open project file is not allowed during the slicing process!" msgstr "" + +msgid "Open Project" +msgstr "Proyesto Abierto" + +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 "" +"La versión de Bambu Studio es una versión demasiado antigua y necesita ser " +"actualizada a la última versión antes de poder utilizarla con normalidad" msgid "Login information expired. Please login again." msgstr "Los datos de acceso han caducado. Por favor, inicie sesión de nuevo." @@ -507,7 +538,7 @@ msgid "Loading" msgstr "Cargando" msgid "Loading user preset" -msgstr "Loading user preset" +msgstr "Cargando la preselección del usuario" msgid "Switching application language" msgstr "Cambio de idioma de la aplicación" @@ -521,12 +552,6 @@ msgstr "Idioma" msgid "*" msgstr "*" -msgid "G-code files can not be loaded with models together!" -msgstr "¡Los archivos de código G no pueden cargarse con los modelos juntos!" - -msgid "G-code loading" -msgstr "Carga del código G" - msgid "Select a G-code file:" msgstr "Seleccione un archivo de código G:" @@ -615,6 +640,18 @@ msgstr "Eliminar el objeto seleccionado" msgid "Load..." msgstr "Cargar..." +msgid "Cube" +msgstr "Cubo" + +msgid "Cylinder" +msgstr "Cilindro" + +msgid "Cone" +msgstr "Cono" + +msgid "Timelapse Wipe Tower" +msgstr "Timelapse Torre de limpieza" + msgid "Add settings" msgstr "Añadir ajustes" @@ -812,6 +849,9 @@ msgstr "Bloquear" msgid "Name" msgstr "Nombre" +msgid "Fila." +msgstr "" + #, c-format, boost-format msgid "%1$d error repaired" msgid_plural "%1$d errors repaired" @@ -870,6 +910,9 @@ msgstr "¡Error!" msgid "Generic" msgstr "Genérico" +msgid "Add Modifier" +msgstr "Añadir modificador" + msgid "Deleting the last solid part is not allowed." msgstr "No se permite borrar la última parte sólida." @@ -1024,7 +1067,7 @@ msgid "Push new filament into extruder" msgstr "" msgid "Purge old filament" -msgstr "Purge old filament" +msgstr "Purgar el filamento viejo" msgid "?" msgstr "?" @@ -1036,10 +1079,10 @@ msgid "Click the pencil icon to edit the filament." msgstr "Haga clic en el icono del lápiz para editar el filamento." msgid "Load Filament" -msgstr "Load" +msgstr "Cargar filamento" msgid "Unload Filament" -msgstr "Unload" +msgstr "Descargar" msgid "Tips" msgstr "Consejos" @@ -1097,6 +1140,9 @@ msgstr "" "El posicionamiento ha fallado. Se han encontrado algunas excepciones al " "procesar las geometrías de los objetos." +msgid "Arranging" +msgstr "Organizando" + msgid "Arranging canceled." msgstr "Ordenamiento cancelado." @@ -1146,62 +1192,67 @@ msgid "Exception" msgstr "Excepción" msgid "Logging in" -msgstr "Logging in" +msgstr "Iniciando sesión" msgid "Login failed" -msgstr "Login failed" +msgstr "Fallo en el inicio de sesión" msgid "The region parameter is incorrrect" -msgstr "The region parameter is incorrrect." +msgstr "El parámetro de región es incorrecto." msgid "Failure of printer login" -msgstr "Failure of printer login" +msgstr "Fallo en el inicio de sesión de la impresora" msgid "Failed to get ticket" -msgstr "Failed to get ticket" +msgstr "No se ha podido conseguir el ticket" msgid "User authorization timeout" -msgstr "User authorization timeout" +msgstr "Límite de tiempo de espera de la autorización del usuario" msgid "Failure of bind" -msgstr "Failure of bind" +msgstr "Fallo en la vinculación" msgid "Unknown Failure" -msgstr "Unknown Failure" +msgstr "Error desconocido" msgid "Abnormal print file data. Please slice again" -msgstr "Abnormal print file data. Please slice again" +msgstr "Datos anormales del archivo de impresión. Por favor, procese de nuevo" msgid "Task canceled" -msgstr "Task canceled" +msgstr "Tarea cancelada" msgid "Upload task timed out. Please check the network problem and try again" -msgstr "Upload task timed out. Please check the network problem and try again" +msgstr "" +"La tarea de carga ha terminado. Por favor, compruebe el problema de red e " +"inténtelo de nuevo" msgid "Cloud service connection failed. Please try again." -msgstr "Cloud service connection failed. Please try again." +msgstr "" +"Ha fallado la conexión con el servicio de la nube. Por favor, inténtelo de " +"nuevo." msgid "Print file not found, please slice again" -msgstr "Print file not found, please slice again" +msgstr "" +"No se ha encontrado el archivo de impresión, por favor, vuelva a procesarlo" 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" +"El archivo de impresión supera el tamaño máximo permitido (1GB). Por favor, " +"simplifique el modelo y vuelva a procesarlo" msgid "Failed uploading print file" -msgstr "Failed uploading print file" +msgstr "Fallo al cargar el archivo de impresión" msgid "Wrong Access code" -msgstr "Wrong Access code" +msgstr "Código de acceso incorrecto" msgid "Sending print job over LAN" -msgstr "Sending print job over LAN" +msgstr "Enviando el trabajo de impresión a través de la LAN" msgid "Sending print job through cloud service" -msgstr "Sending print job through cloud service" +msgstr "Enviando trabajo de impresión a través del servicio en la nube" msgid "Service Unavailable" msgstr "" @@ -1210,7 +1261,7 @@ msgid "Unkown Error." msgstr "" msgid "Sending print configuration" -msgstr "Sending print configuration" +msgstr "Enviando la configuración de impresión" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %s s" @@ -1247,7 +1298,7 @@ msgid "License" msgstr "Licencia" msgid "Bambu Studio is licensed under " -msgstr "Bambu Studio is licensed under " +msgstr "Bambu Studio tiene licencia bajo " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, versión 3" @@ -1256,18 +1307,18 @@ 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 from Slic3r " -"by Alessandro Ranellucci and the RepRap community" +"Bambu Studio se basa en PrusaSlicer de Prusa Research, que proviene de " +"Slic3r de Alessandro Ranellucci y la comunidad RepRap" msgid "Libraries" -msgstr "Libraries" +msgstr "Librerías" 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" +"Este software utiliza componentes de código abierto cuyos derechos de autor " +"y otros derechos de propiedad pertenecen a sus respectivos propietarios" #, c-format, boost-format msgid "About %s" @@ -1295,18 +1346,18 @@ msgid "" "the corresponding code comments." msgstr "" -msgid "Colour" -msgstr "Colour" +msgid "AMSMaterialsSetting" +msgstr "" -msgid "SN" -msgstr "SN" +msgid "Colour" +msgstr "Color" msgid "" "Nozzle\n" "Temperature" msgstr "" -"Nozzle\n" -"Temperature" +"Boquilla\n" +"Temperatura" msgid "max" msgstr "max" @@ -1316,62 +1367,72 @@ 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%" +msgstr "El valor de entrada debe ser mayor que %1% y menor que %2%" + +msgid "SN" +msgstr "SN" msgid "Confirm" msgstr "Confirmar" +msgid "Close" +msgstr "Cerrar" + +msgid "AMS Slots" +msgstr "" + +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "" + msgid "Insertion update" -msgstr "Insertion update" +msgstr "Actualización de la inserción" 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. This takes about 20 seconds." +"El AMS leerá automáticamente la información del filamento al insertar un " +"nuevo filamento de Bambu Lab. Esto tardara unos 20 segundos." 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 is completed." +"Nota: si se inserta un nuevo filamento durante la impresión, el AMS no leerá " +"automáticamente ninguna información hasta que la impresión haya finalizado." 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." +"Al insertar un nuevo filamento, el AMS no leerá automáticamente su " +"información, dejándola en blanco para que usted la introduzca manualmente." msgid "Power on update" -msgstr "Power on update" +msgstr "Actualización de encendido" 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 roll filament " -"spools." +"El AMS leerá automáticamente la información del filamento insertado al " +"arrancar. Tomará aproximadamente 1 minuto. El proceso de lectura hará rodar " +"las bobinas de filamento." 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." +"El AMS no leerá automáticamente la información del filamento insertado " +"durante el arranque y seguirá utilizando la información registrada antes del " +"último apagado." msgid "File" msgstr "Archivo" -msgid "Close" -msgstr "Cerrar" - msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" @@ -1621,13 +1682,6 @@ msgstr "" "Sí - Cambiar estos ajustes y activar el modo espiral automáticamente\n" "No - Dejar de usar el modo espiral esta vez" -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 "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -1681,67 +1735,70 @@ msgstr "" "del 100%.\n" msgid "Auto bed leveling" -msgstr "Auto bed leveling" +msgstr "Nivelación de cama automática" msgid "Heatbed preheating" -msgstr "Heatbed preheating" +msgstr "Precalentamiento de la cama caliente" msgid "Sweeping XY mech mode" -msgstr "Sweeping XY mech mode" +msgstr "Barrido en XY modo mecánico" msgid "Changing filament" -msgstr "Changing filament" +msgstr "Cambiando el filamento" msgid "M400 pause" -msgstr "M400 pause" +msgstr "Pausa M400" msgid "Paused due to filament runout" -msgstr "Paused due to filament runout" +msgstr "Pausa por agotamiento del filamento" msgid "Heating hotend" -msgstr "Heating hotend" +msgstr "Calentando boquilla" msgid "Calibrating extrusion" -msgstr "Calibrating extrusion" +msgstr "Calibrando la extrusión" msgid "Scanning bed surface" -msgstr "Scanning bed surface" +msgstr "Escaneando la superficie de la cama" msgid "Inspecting first layer" -msgstr "Inspecting first layer" +msgstr "Inspeccionando la primera capa" msgid "Identifying build plate type" -msgstr "Identifying build plate type" +msgstr "Identificando el tipo de placa de impresión" msgid "Calibrating Micro Lidar" -msgstr "Calibrating Micro Lidar" +msgstr "Calibrando el Micro Lidar" msgid "Homing toolhead" -msgstr "Homing toolhead" +msgstr "Homing del Cabezal" msgid "Cleaning nozzle tip" -msgstr "Cleaning nozzle tip" +msgstr "Limpiando la boquilla" msgid "Checking extruder temperature" -msgstr "Checking extruder temperature" +msgstr "Comprobando la temperatura del extrusor" msgid "Printing was paused by the user" -msgstr "Printing was paused by the user" +msgstr "El usuario ha interrumpido la impresión" msgid "Pause of front cover falling" -msgstr "Pause of front cover falling" +msgstr "Pausa al caer la cubierta frontal" msgid "Calibrating the micro lida" -msgstr "Calibrating the micro lidar" +msgstr "Calibrando el micro lidar" msgid "Calibrating extrusion flow" -msgstr "Calibrating extrusion flow" +msgstr "Calibrando el flujo de extrusión" msgid "Paused due to nozzle temperature malfunction" -msgstr "Paused due to nozzle temperature malfunction" +msgstr "" +"Pausado debido a un mal funcionamiento de la temperatura de la boquilla" msgid "Paused due to heat bed temperature malfunction" -msgstr "Paused due to heat bed temperature malfunction" +msgstr "" +"Se ha interrumpido debido a un mal funcionamiento de la temperatura de la " +"cama caliente" msgid "MC" msgstr "MC" @@ -1785,6 +1842,9 @@ msgstr "Actualización fallida." msgid "Failed to start printing job" msgstr "" +msgid "parameter name" +msgstr "" + msgid "N/A" msgstr "N/A" @@ -1937,10 +1997,10 @@ msgid "Filament 1" msgstr "Filamento 1" msgid "Flushed filament" -msgstr "Flushed filament" +msgstr "Filamento limpiado" msgid "Filament change times" -msgstr "Filament change times" +msgstr "Tiempos de cambio de filamento" msgid "Color change" msgstr "Cambio de color" @@ -2026,8 +2086,11 @@ msgstr "Añadir placa" msgid "Auto orient" msgstr "Orientar automáticamente" -msgid "Auto arrange" -msgstr "Auto posicionamiento" +msgid "Arrange all objects" +msgstr "Ordenar todos los objetos" + +msgid "Arrange objects on selected plates" +msgstr "Colocar los objetos en las placas seleccionadas" msgid "Split to objects" msgstr "Partir en varias piezas" @@ -2091,9 +2154,9 @@ msgid "" "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." +"El programa de calibración detecta el estado de su dispositivo " +"automáticamente para minimizar la desviación.\n" +"Mantiene el dispositivo con un rendimiento óptimo." msgid "Calibration Flow" msgstr "Calibración del flujo" @@ -2111,20 +2174,23 @@ msgid "Timelapse" msgstr "Timelapse" msgid "Monitoring Recording" -msgstr "Monitoring Recording" +msgstr "Monitoreo de grabación" msgid "ConnectPrinter(LAN)" -msgstr "ConnectPrinter(LAN)" +msgstr "Conectar Impresora (LAN)" msgid "Please input the printer access code:" -msgstr "Please input the printer access code:" +msgstr "Por favor, introduzca el código de acceso a la impresora:" 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" -"on the printer, as shown in the figure:" +"Puede encontrarse en \"Configuración > Red > Código de conexión\"\n" +"en la impresora, como se muestra en la figura:" + +msgid "Invalid input." +msgstr "" msgid "Application is closing" msgstr "La aplicación se está cerrando" @@ -2142,7 +2208,7 @@ msgid "Preview" msgstr "Previsualización" msgid "Device" -msgstr "Device" +msgstr "Dispositivo" msgid "Project" msgstr "Proyecto" @@ -2231,9 +2297,6 @@ msgstr "Nuevo proyecto" msgid "Start a new project" msgstr "Empezar un nuevo proyecto" -msgid "Open Project" -msgstr "Proyesto Abierto" - msgid "Open a project file" msgstr "Abrir un archivo de proyecto" @@ -2342,6 +2405,18 @@ msgstr "Vista" msgid "Help" msgstr "Ayuda" +msgid "&File" +msgstr "&Archivo" + +msgid "&Edit" +msgstr "" + +msgid "&View" +msgstr "Ve&r" + +msgid "&Help" +msgstr "Ayu&da" + msgid "&Open G-code" msgstr "Abrir código G (&O)" @@ -2373,15 +2448,6 @@ msgstr "Sa&lir" msgid "Quit %s" msgstr "Cerrar %s" -msgid "&File" -msgstr "&Archivo" - -msgid "&View" -msgstr "Ve&r" - -msgid "&Help" -msgstr "Ayu&da" - msgid "Save configuration as:" msgstr "Guardar la configuración como:" @@ -2470,9 +2536,15 @@ msgstr "Detener" msgid "0%" msgstr "0%" +msgid "Clean" +msgstr "" + msgid "Control" msgstr "Control" +msgid "Print Options" +msgstr "" + msgid "100%" msgstr "100%" @@ -2708,6 +2780,15 @@ msgctxt "Layers" msgid "Bottom" msgstr "Inferior" +msgid "Spaghetti Detection" +msgstr "" + +msgid "Stop printing when spaghetti detected" +msgstr "" + +msgid "First Layer Inspection" +msgstr "" + msgid "Switch to per-object setting mode to edit modifier settings." msgstr "" "Cambia al modo de ajuste por objeto para editar los ajustes de los " @@ -2795,14 +2876,17 @@ msgstr "Restaurar" msgid "Loading file: %s" msgstr "Cargando archivo: %s" -msgid "The Config is not compatible and can not be loaded." -msgstr "La configuración no es compatible y no se puede cargar." +msgid "The 3mf is not from Bambu Lab, load geometry data only." +msgstr "" + +msgid "Load 3mf" +msgstr "" -msgid "Incompatible 3mf" -msgstr "3mf Incompatible " +msgid "The Config can not be loaded." +msgstr "" -msgid "the 3mf is not compatible, load geometry data only!" -msgstr "el 3mf no es compatible, ¡cargue sólo los datos geométricos!" +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." +msgstr "" #, c-format, boost-format msgid "" @@ -2818,6 +2902,12 @@ msgstr "Será mejor que actualices tu software.\n" msgid "Newer 3mf version" msgstr "Nueva versión 3mf" +msgid "The 3mf is not compatible, load geometry data only!" +msgstr "" + +msgid "Incompatible 3mf" +msgstr "3mf Incompatible " + msgid "Name of components inside step file is not UTF8 format!" msgstr "" "El nombre de los componentes dentro del archivo de pasos no tiene formato " @@ -2860,7 +2950,15 @@ msgid "Object with multiple parts was detected" msgstr "Se ha detectado un objeto con varias partes" msgid "The file does not contain any geometry data." -msgstr "The file does not contain any geometry data." +msgstr "El archivo no contiene ninguna información geométrica." + +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 "Exportar archivo STL:" @@ -2905,21 +3003,11 @@ msgid "" "The loaded file contains gcode only, Can not enter the Prepare page" msgstr "" -msgid "Some presets are modified." -msgstr "Algunos preajustes se modifican." - msgid "You can keep the modified presets to the new project or discard them" msgstr "" "Puedes mantener los preajustes modificados en el nuevo proyecto o " "descartarlos" -msgid "" -"You can keep the modifield presets to the new project, discard or save " -"changes as new presets." -msgstr "" -"Puede mantener los preajustes de los campos de trabajo en el nuevo proyecto, " -"descartar o guardar los cambios como nuevos preajustes." - msgid "Creating a new project" msgstr "Creando un nuevo proyecto" @@ -2950,11 +3038,17 @@ msgstr "Importar geometría solo" msgid "Only one G-code file can be opened at the same time." msgstr "Sólo se puede abrir un archivo de código G al mismo tiempo." +msgid "G-code loading" +msgstr "Carga del código G" + +msgid "G-code files can not be loaded with models together!" +msgstr "¡Los archivos de código G no pueden cargarse con los modelos juntos!" + msgid "Can not add models when in preview mode!" -msgstr "Unable to add models in preview mode" +msgstr "No se pueden añadir modelos en el modo de vista previa" msgid "Add Models" -msgstr "Add Models" +msgstr "Añadir Modelos" msgid "All objects will be removed, continue?" msgstr "Todos los objetos serán eliminados, deseas continuar?" @@ -3017,7 +3111,9 @@ msgstr "Tamaño: %1% x %2% x %3% mm\n" #, boost-format msgid "Volume: %1% in³\n" -msgstr "Volume: %1% in³\n" +msgstr "" +"Volumen: %1% pulgadas³\n" +" \n" #, boost-format msgid "Volume: %1% mm³\n" @@ -3045,34 +3141,34 @@ msgid "Changing application language" msgstr "Cambiar el idioma de la aplicación" msgid "Changing the region will log out your account.\n" -msgstr "Changing the region will log you out of your account.\n" +msgstr "Si cambias de región, saldrás de tu cuenta.\n" msgid "Region selection" -msgstr "Region selection" +msgstr "Selección de región" msgid "Second" msgstr "Segundo" msgid "General Settings" -msgstr "General Settings" +msgstr "Configuración General" msgid "Asia-Pacific" -msgstr "Asia-Pacific" +msgstr "Asia-Pacífico" msgid "China" msgstr "China" msgid "Europe" -msgstr "Europe" +msgstr "Europa" msgid "North America" -msgstr "North America" +msgstr "América del Norte" msgid "Others" msgstr "Otros" msgid "Login Region" -msgstr "Login Region" +msgstr "Región de inicio de sesión" msgid "Metric" msgstr "Métrico" @@ -3087,10 +3183,12 @@ msgid "User sync" msgstr "Sincronización del usuario" msgid "Auto sync user presets(Printer/Filament/Process)" -msgstr "Auto sync user presets(Printer/Filament/Process)" +msgstr "" +"Sincronización automática de los preajustes del usuario (Impresora/Filamento/" +"Proceso)" msgid "User Sync" -msgstr "User Sync" +msgstr "Sincronización de usuario" msgid "Associate files to BambuStudio" msgstr "Asociar archivos a BambuStudio" @@ -3112,7 +3210,7 @@ msgstr "" "archivos .stl" msgid "Associate .step/.stp files to BambuStudio" -msgstr "Associate .step/.stp files to BambuStudio" +msgstr "Asociar archivos .step/.stp a BambuStudio" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" @@ -3189,7 +3287,7 @@ msgid "trace" msgstr "traza" msgid "Host Setting" -msgstr "Host Setting" +msgstr "Ajuste del Host" msgid "DEV host: api-dev.bambu-lab.com/v1" msgstr "DEV host: api-dev.bambu-lab.com/v1" @@ -3362,13 +3460,13 @@ msgid "Other Device" msgstr "Otro dispositivo" msgid "Input access code" -msgstr "Input access code" +msgstr "Introducir el código de acceso" msgid "Log out successful." msgstr "Cierre de sesión con éxito." msgid "Busy" -msgstr "Busy" +msgstr "Ocupado" msgid "Bambu Cool Plate" msgstr "Placa frío Bambu" @@ -3383,7 +3481,7 @@ msgid "Send print job to" msgstr "Enviar el trabajo de impresión a" msgid "Refresh" -msgstr "Refresh" +msgstr "Actualizar" msgid "Bed Leveling" msgstr "Nivelación de la cama" @@ -3398,46 +3496,67 @@ msgid "send completed" msgstr "envío completo" msgid "No login account, only printers in LAN mode are displayed" -msgstr "No login account, only printers in LAN mode are displayed" +msgstr "Sin cuenta de acceso, sólo se muestran las impresoras en modo LAN" msgid "Connecting to server" -msgstr "Connecting to server" +msgstr "Conectando al servidor" msgid "Synchronizing device information" -msgstr "Synchronizing device information" +msgstr "Sincronizando la información del dispositivo" msgid "Synchronizing device information time out" -msgstr "Synchronizing device information time out" +msgstr "" +"Finalización del tiempo de sincronización de la información del dispositivo" 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 "" +"No se puede enviar la tarea de impresión cuando la actualización está en " +"curso" msgid "" "The printer is executing instructions. Please restart printing after it ends" msgstr "" -"The printer is executing instructions. Please restart printing after it ends" +"La impresora está ejecutando instrucciones. Por favor, reinicie la impresión " +"cuando termine" msgid "The printer is busy on other print job" -msgstr "The printer is busy with another print job." +msgstr "La impresora está ocupada con otro trabajo de impresión." +#, c-format, boost-format msgid "" -"The filament index exceeds the AMS's slot count and cannot send the print " -"job." +"Filament %s 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" +"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 "" +"Se han establecido mapeos de filamentos a ranuras AMS. Puede hacer clic en " +"un filamento de arriba para cambiar su asignación de ranura AMS" 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" +"Por favor, haga clic en cada filamento de arriba para especificar su " +"asignación de ranura AMS antes de enviar el trabajo de impresión" + +#, 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 " @@ -3445,10 +3564,10 @@ msgid "" msgstr "" msgid "Preparing print job" -msgstr "Preparing print job" +msgstr "Preparando el trabajo de impresión" msgid "Modifying the device name" -msgstr "Modifying the device name" +msgstr "Modificar el nombre del dispositivo" msgid "Log in printer" msgstr "Iniciar sesión en la impresora" @@ -3484,6 +3603,13 @@ msgstr "Guardar %s actuales" msgid "Delete this preset" msgstr "Borra este ajuste" +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 "Ancho de línea" @@ -3564,7 +3690,7 @@ msgid "Reserved keywords found" msgstr "Palabras clave utilizadas y encontradas" msgid "Setting Overrides" -msgstr "Setting Overrides" +msgstr "Anulaciones de configuración" msgid "Retraction" msgstr "Retracción" @@ -3599,8 +3725,9 @@ 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." +"Esta es la temperatura de la cama cuando la placa fría está instalada. Un " +"valor de 0 significa que el filamento no admite la impresión en la placa " +"fría." msgid "Engineering plate" msgstr "Placa de ingeniería" @@ -3609,8 +3736,9 @@ 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." +"Esta es la temperatura de la cama cuando la placa de ingeniería está " +"instalada. Un valor de 0 significa que el filamento no admite la impresión " +"en la placa de ingeniería." msgid "High Temp Plate" msgstr "Placa de alta temperatura" @@ -3619,9 +3747,9 @@ 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." +"Esta es la temperatura de la cama cuando la placa de alta temperatura está " +"instalada. Un valor de 0 significa que el filamento no admite la impresión " +"en la placa de alta temperatura." msgid "Volumetric speed limitation" msgstr "Limitación de la velocidad volumétrica" @@ -3733,7 +3861,7 @@ msgstr "¿Está seguro de %1% el preajuste seleccionado?" #. TRN Remove/Delete #, boost-format msgid "%1% Preset" -msgstr "%1% Preset" +msgstr "%1% Preestablecido" msgid "All" msgstr "Todo" @@ -3861,7 +3989,7 @@ msgid "The name \"%1%\" already exists." msgstr "El nombre \"%1%\" ya existe." msgid "Basic Info" -msgstr "Basic Info" +msgstr "Información Básica" msgid "Pictures" msgstr "Fotos" @@ -3957,12 +4085,6 @@ msgstr "A" msgid "Login" msgstr "Inicio de sesión" -msgid "Filaments Selection" -msgstr "Selección de filamentos" - -msgid "Printer Selection" -msgstr "Selección de la impresora" - msgid "The configuration package is changed in previous Config Guide" msgstr "" "El paquete de configuración se cambia en la Guía de configuración anterior" @@ -3979,60 +4101,18 @@ msgstr "Lista de objetos" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." msgstr "Importación de datos geométricos desde archivos STL/STEP/3MF/OBJ/AMF." -msgid "Select all objects" -msgstr "Seleccionar todos los objetos" - msgid "Copy to clipboard" msgstr "Copiar al portapapeles" msgid "Paste from clipboard" msgstr "Pegar desde el portapapeles" -msgid "Camera view - Default" -msgstr "Vista de la cámara - Por defecto" - -msgid "Camera view - Top" -msgstr "Vista de la cámara Superior" - -msgid "Camera view - Bottom" -msgstr "Vista de la cámara - Parte inferior" - -msgid "Camera view - Front" -msgstr "Vista de la cámara - Frontal" - -msgid "Camera view - Behind" -msgstr "Vista de la cámara - Posterior" - -msgid "Camera Angle - Left side" -msgstr "Ángulo de la cámara - Lado izquierdo" - -msgid "Camera Angle - Right side" -msgstr "Ángulo de la cámara - Lado derecho" - -msgid "keyboard 1-9: set filament for object/part" -msgstr "teclado 1-9: ajustar el filamento para el objeto/pieza" - msgid "Show keyboard shortcuts list" msgstr "Muestra lista de atajos de teclado" msgid "Global shortcuts" msgstr "Atajos globales" -msgid "Arrange all objects" -msgstr "Ordenar todos los objetos" - -msgid "Arrange objects on selected plates" -msgstr "Colocar los objetos en las placas seleccionadas" - -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 "" -"Orienta automáticamente los objetos seleccionados o todos los objetos.Si hay " -"objetos seleccionados, sólo orienta los seleccionados.En caso contrario, " -"orienta todos los objetos del proyecto." - msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -4042,12 +4122,33 @@ msgstr "" "objetos seleccionados, sólo orienta los seleccionados.En caso contrario, " "orientará todos los objetos del disco actual." +msgid "Collapse/Expand the sidebar" +msgstr "Ocultar/Expandir barra lateral" + +msgid "⌘+Any arrow" +msgstr "⌘+Cualquier tecla" + +msgid "Movement in camera space" +msgstr "Movimiento en el espacio de la cámara" + +msgid "⌥+Left mouse button" +msgstr "" + +msgid "Select a part" +msgstr "" + msgid "⌘+Left mouse button" msgstr "" msgid "Select multiple objects" msgstr "Seleccionar varios objetos" +msgid "Ctrl+Any arrow" +msgstr "Ctrl+Cualquier flecha" + +msgid "Alt+Left mouse button" +msgstr "" + msgid "Ctrl+Left mouse button" msgstr "" @@ -4087,17 +4188,53 @@ msgstr "Mayúsculas+Cualquier flecha" msgid "Movement step set to 1 mm" msgstr "Paso de movimiento configurado a 1 mm" -msgid "⌘+Any arrow" -msgstr "⌘+Cualquier tecla" +msgid "keyboard 1-9: set filament for object/part" +msgstr "teclado 1-9: ajustar el filamento para el objeto/pieza" -msgid "Movement in camera space" -msgstr "Movimiento en el espacio de la cámara" +msgid "Camera view - Default" +msgstr "Vista de la cámara - Por defecto" -msgid "Ctrl+Any arrow" -msgstr "Ctrl+Cualquier flecha" +msgid "Camera view - Top" +msgstr "Vista de la cámara Superior" -msgid "Collapse/Expand the sidebar" -msgstr "Ocultar/Expandir barra lateral" +msgid "Camera view - Bottom" +msgstr "Vista de la cámara - Parte inferior" + +msgid "Camera view - Front" +msgstr "Vista de la cámara - Frontal" + +msgid "Camera view - Behind" +msgstr "Vista de la cámara - Posterior" + +msgid "Camera Angle - Left side" +msgstr "Ángulo de la cámara - Lado izquierdo" + +msgid "Camera Angle - Right side" +msgstr "Ángulo de la cámara - Lado derecho" + +msgid "Select all objects" +msgstr "Seleccionar todos los objetos" + +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 "Plataforma" @@ -4313,7 +4450,7 @@ msgid "Support transition" msgstr "Apoyo a la transición" msgid "Multiple" -msgstr "Multiple" +msgstr "Múltiple" #, boost-format msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " @@ -4430,11 +4567,11 @@ 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." +msgstr "%1% está demasiado cerca de otros, y pueden producirse colisiones." #, boost-format msgid "%1% is too tall, and collisions will be caused." -msgstr "%1% is too tall, and collisions will be caused." +msgstr "%1% es demasiado alto, y se producirán colisiones." msgid " is too close to others, there will be collisions when printing.\n" msgstr " está demasiado cerca de otros, habrá colisiones al imprimir.\n" @@ -4448,10 +4585,11 @@ msgid "Prime Tower" msgstr "Torre principal" msgid " is too close to others, and collisions may be caused.\n" -msgstr " is too close to others, and collisions may be caused.\n" +msgstr "está demasiado cerca de otros, y se pueden producir colisiones.\n" msgid " is too close to exclusion area, and collisions will be caused.\n" -msgstr " is too close to exclusion area, and collisions will be caused.\n" +msgstr "" +" está demasiado cerca del área de exclusión, y se producirán colisiones.\n" msgid "" "Can not print multiple filaments which have large difference of temperature " @@ -4556,6 +4694,12 @@ msgstr "Área imprimible" msgid "Bed exclude area" msgstr "La cama excluye el área" +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 "Elephant foot compensation" msgstr "Compensación del pie de elefante" @@ -4607,8 +4751,9 @@ 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 initial one. A value " -"of 0 means the filament does not support printing on the Cool Plate." +"Esta es la temperatura de la cama para las capas excepto la inicial. Un " +"valor de 0 significa que el filamento no admite la impresión en la placa " +"fría." msgid "°C" msgstr "°C" @@ -4620,15 +4765,17 @@ 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 initial one. A value " -"of 0 means the filament does not support printing on the Engineering Plate." +"Esta es la temperatura de la cama para las capas excepto la inicial. Un " +"valor de 0 significa que el filamento no admite la impresión en la placa de " +"ingeniería." 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 initial one. A value " -"of 0 means the filament does not support printing on the High Temp Plate." +"Esta es la temperatura de la cama para las capas excepto la inicial. Un " +"valor de 0 significa que el filamento no admite la impresión en la placa de " +"alta temperatura." msgid "Initial layer" msgstr "Capa inicial" @@ -4640,22 +4787,23 @@ 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 initial layer. A value of 0 means the " -"filament does not support printing on the Cool Plate." +"Esta es la temperatura de la cama de la capa inicial. Un valor de 0 " +"significa que el filamento no admite la impresión en la placa fría." 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 initial layer. A value of 0 means the " -"filament does not support printing on the Engineering Plate." +"Esta es la temperatura de la cama de la capa inicial. Un valor de 0 " +"significa que el filamento no admite la impresión en la placa de ingeniería." 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 initial layer. A value of 0 means the " -"filament does not support printing on the High Temp Plate." +"Esta es la temperatura de la cama de la capa inicial. Un valor de 0 " +"significa que el filamento no admite la impresión en la placa de alta " +"temperatura." msgid "Bed types supported by the printer" msgstr "Tipos de cama que admite la impresora" @@ -4906,9 +5054,9 @@ msgid "" "bridges to be supported, and set it to a very large value if you don't want " "any bridges to be supported." msgstr "" -"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." +"Esta es la longitud máxima de los puentes que no necesitan soporte. Ajústalo " +"a 0 si quieres que todos los puentes sean soportados, y ajústalo a un valor " +"muy grande si no quieres que ningún puente sea soportado." msgid "End G-code" msgstr "Código G final" @@ -5132,7 +5280,8 @@ msgstr "Material de soporte" msgid "" "Support material is commonly used to print support and support interface" msgstr "" -"Support material is commonly used to print support and support interface" +"El material de soporte se utiliza habitualmente para imprimir el soporte y " +"interficies de soporte" msgid "Temperature of vitrificaiton" msgstr "Temperatura de vitrificación" @@ -5289,7 +5438,7 @@ msgstr "" "de la anchura de la línea de la pared exterior" msgid "Fuzzy skin point distance" -msgstr "Fuzzy skin point distance" +msgstr "Distancia al punto de superficie irregular" msgid "" "The average diatance between the random points introducded on each line " @@ -5835,8 +5984,8 @@ msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" "Velocidad del relleno sólido interno, no la superficie superior e inferior" -msgid "Spiral mode" -msgstr "Modo espiral" +msgid "Spiral vase" +msgstr "" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " @@ -5847,15 +5996,16 @@ msgstr "" "modelo sólido en una impresión de una sola pared con capas inferiores " "sólidas. El modelo final generado no tiene costura" -msgid "Timelapse without toolhead" -msgstr "" - 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 "Temperature variation" msgstr "Variación de temperatura" @@ -6218,26 +6368,27 @@ msgstr "" "mezclado se podrá ver en el exterior." msgid "Flush into objects' support" -msgstr "Flush into objects' support" +msgstr "Depositar en el soporte de los objetos" 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." +"La purga después del cambio de filamento se hará dentro del soporte de los " +"objetos. Esto puede reducir la cantidad de residuos y disminuir el tiempo de " +"impresión." msgid "Flush into this object" -msgstr "Flush into this object" +msgstr "Descarga en este objeto" 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. Colours of the objects will be mixed " -"as a result" +"Este objeto se utilizará para purgar la boquilla después de un cambio de " +"filamento para ahorrar filamento y disminuir el tiempo de impresión. Los " +"colores de los objetos se mezclarán como resultado" msgid "X-Y hole compensation" msgstr "Compensación de huecos X-Y" @@ -6439,45 +6590,6 @@ msgstr "Soporte: arreglar huecos en la capa %d" msgid "Support: propagate branches at layer %d" msgstr "Soporte: propagar ramas en la capa %d" -#~ msgid "Creating" -#~ msgstr "Creando" - -#~ msgid "Uploading" -#~ msgstr "Subiendo" - -#~ msgid "Waiting" -#~ msgstr "Esperando" - -#~ msgid "Sending" -#~ msgstr "Enviando" - -#~ msgid "Finished" -#~ msgstr "Terminado" - -#~ msgid "Please fill report first." -#~ msgstr "Por favor, rellene primero el informe." - -#~ msgid "Unable to create zip file" -#~ msgstr "Unable to create zip file" - -#~ msgid "Enter a search term" -#~ msgstr "Teclea un término de búsqueda" - -#~ msgid "Debug" -#~ msgstr "Depurar" - -#~ msgid "Monitoring" -#~ msgstr "Monitorizando" - -#~ msgid "Fragment filter" -#~ msgstr "Fragment filter" - -#~ msgid "Fragment Filter" -#~ msgstr "Fragment Filter" - -#~ msgid "Position:" -#~ msgstr "Posición:" - #~ msgid "Alt + Mouse wheel" #~ msgstr "Alt + Rueda del ratón" @@ -6489,14 +6601,32 @@ msgstr "Soporte: propagar ramas en la capa %d" #~ "Por favor, resuelva el problema moviéndolo totalmente dentro o fuera de " #~ "la placa." -#~ msgid "Arranging" -#~ msgstr "Organizando" +#~ msgid "Auto arrange" +#~ msgstr "Auto posicionamiento" + +#~ 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 "" +#~ "Orienta automáticamente los objetos seleccionados o todos los objetos.Si " +#~ "hay objetos seleccionados, sólo orienta los seleccionados.En caso " +#~ "contrario, orienta todos los objetos del proyecto." + +#~ msgid "Clear all" +#~ msgstr "Borrar todo" + +#~ msgid "Creating" +#~ msgstr "Creando" #~ msgid "Ctrl + Any arrow" #~ msgstr "Ctrl + Cualquier tecla" #~ msgid "Ctrl + Left mouse button" -#~ msgstr "Ctrl + Left mouse button" +#~ msgstr "Ctrl + Botón izquierdo del ratón" + +#~ msgid "Debug" +#~ msgstr "Depurar" #~ msgid "Display printable box" #~ msgstr "Caja de visualización imprimible " @@ -6514,11 +6644,11 @@ msgstr "Soporte: propagar ramas en la capa %d" #~ "2. The Filament presets\n" #~ "3. The Printer presets\n" #~ msgstr "" -#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" -#~ "Contains the following information:\n" -#~ "1. Process presets\n" -#~ "2. Filament presets\n" -#~ "3. Printer presets\n" +#~ "¿Quieres sincronizar tus datos personales desde Bambu Cloud? \n" +#~ "Contiene la siguiente información:\n" +#~ "1. Preajustes del proceso\n" +#~ "2. Preajustese de filamentos\n" +#~ "3. Preajustes de la impresora\n" #~ msgid "" #~ "Don't retract when the travel is in infill area absolutely. That means " @@ -6527,12 +6657,30 @@ msgstr "Soporte: propagar ramas en la capa %d" #~ "No se repliegue cuando el recorrido esté en zona de relleno " #~ "absolutamente. Eso significa que el rezago no puede ser visto" +#~ msgid "Enter a search term" +#~ msgstr "Teclea un término de búsqueda" + +#~ msgid "Filaments Selection" +#~ msgstr "Selección de filamentos" + +#~ msgid "Finished" +#~ msgstr "Terminado" + #~ msgid "Fix model locally" #~ msgstr "Fijar el modelo localmente" #~ msgid "Fix model through cloud" #~ msgstr "Fijar el modelo a través de la nube" +#~ msgid "Fragment Filter" +#~ msgstr "Filtro de fragmentos" + +#~ msgid "Fragment area" +#~ msgstr "Zona de fragmentos" + +#~ msgid "Fragment filter" +#~ msgstr "Filtro de Fragmentos" + #~ msgid "" #~ "Heat the nozzle to target \n" #~ "temperature" @@ -6541,14 +6689,17 @@ msgstr "Soporte: propagar ramas en la capa %d" #~ "temperatura" #~ msgid "In the calibration of extrusion flow" -#~ msgstr "In the calibration of extrusion flow" +#~ msgstr "En la calibración del flujo de extrusión" #~ msgid "In the calibration of laser scanner" -#~ msgstr "In the calibration of laser scanner" +#~ msgstr "En la calibración del escáner láser" #~ msgid "Module" #~ msgstr "Módulo" +#~ msgid "Monitoring" +#~ msgstr "Monitorizando" + #~ msgid "New version of Bambu Studio" #~ msgstr "Nueva versión de Bambu Studio" @@ -6556,26 +6707,35 @@ msgstr "Soporte: propagar ramas en la capa %d" #~ msgstr "Archivo de salida" #~ msgid "Pause(heated bed temperature error)" -#~ msgstr "Pause(heated bed temperature error)" +#~ msgstr "Pausa (error de temperatura de la cama caliente)" #~ msgid "Pause(hotend temperature error)" -#~ msgstr "Pause(hotend temperature error)" +#~ msgstr "Pausa (error de temperatura del hotend)" #~ msgid "Pause(toolhead shell off)" -#~ msgstr "Pause(toolhead shell off)" +#~ msgstr "Pausa (cabezal apagado)" + +#~ msgid "Please fill report first." +#~ msgstr "Por favor, rellene primero el informe." #~ msgid "Please upgrade your printer first" -#~ msgstr "Please upgrade your printer first" +#~ msgstr "Por favor, actualice su impresora primero" + +#~ msgid "Position:" +#~ msgstr "Posición:" #~ msgid "" #~ "Preview only mode:\n" #~ "The loaded file contains gcode only." #~ msgstr "" -#~ "Preview only mode:\n" -#~ "The loaded file contains gcode only." +#~ "Modo de vista previa solamente:\n" +#~ "El archivo cargado sólo contiene gcode." #~ msgid "Preview only mode for gcode file." -#~ msgstr "Preview only mode for gcode file." +#~ msgstr "Modo de vista previa sólo para el archivo gcode." + +#~ msgid "Printer Selection" +#~ msgstr "Selección de la impresora" #~ msgid "" #~ "Push new filament \n" @@ -6584,6 +6744,9 @@ msgstr "Soporte: propagar ramas en la capa %d" #~ "Empujar el nuevo filamento \n" #~ "en el extrusor" +#~ msgid "Sending" +#~ msgstr "Enviando" + #~ msgid "Shift + Any arrow" #~ msgstr "Mayúsculas + Cualquier flecha" @@ -6599,19 +6762,39 @@ msgstr "Soporte: propagar ramas en la capa %d" #~ msgid "Show Printable Box(TODO)" #~ msgstr "Mostrar caja imprimible(TODO)" +#~ msgid "Spiral mode" +#~ msgstr "Modo espiral" + #~ 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" +#~ "Enviado con éxito. Saltará automáticamente a la página del dispositivo en " +#~ "%s s" #~ msgid "Swith cloud environment, Please login again!" #~ msgstr "Cambiar el entorno de la nube, ¡Por favor, inicie sesión de nuevo!" +#~ msgid "The Config is not compatible and can not be loaded." +#~ msgstr "La configuración no es compatible y no se puede cargar." + #~ 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 printer and AMS are too low.Please update to the " -#~ "latest version before sending the print job" +#~ "Las versiones del firmware de la impresora y del AMS son demasiado " +#~ "antiguas, por favor, actualice a la última versión antes de enviar el " +#~ "trabajo de impresión." + +#~ msgid "Unable to create zip file" +#~ msgstr "No se puede crear un archivo zip" + +#~ msgid "Uploading" +#~ msgstr "Subiendo" #~ msgid "User pause" -#~ msgstr "User pause" +#~ msgstr "Pausa de usuario" + +#~ msgid "Waiting" +#~ msgstr "Esperando" + +#~ 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 b3ae6e11320..951483f829c 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,16 +2,13 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-07-23 18:15+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2022-08-08 20:01+0800\n" "Language: fr\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==0 || n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.1\n" msgid "Supports Painting" msgstr "Prend en charge la peinture" @@ -52,8 +49,8 @@ msgstr "" msgid "Perform" msgstr "Exécuter" -msgid "Fragment area" -msgstr "Fragment area" +msgid "Gap area" +msgstr "" msgid "Set pen size" msgstr "Définir la taille du stylo" @@ -124,9 +121,6 @@ msgstr "Choisissez le filament" msgid "Edge detection" msgstr "Détection des contours" -msgid "Clear all" -msgstr "Tout effacer" - msgid "Triangles" msgstr "Triangles" @@ -341,20 +335,35 @@ msgstr "Face recognition" msgid "Perform Recognition" msgstr "Perform Recognition" -msgid "Cube" -msgstr "Cube" +msgid "Reset direction" +msgstr "" -msgid "Cylinder" -msgstr "Cylindre" +msgid "Brush size" +msgstr "" -msgid "Cone" -msgstr "Cône" +msgid "Brush shape" +msgstr "" -msgid "Timelapse Wipe Tower" -msgstr "Timelapse Wipe Tower" +msgid "Enforce seam" +msgstr "" -msgid "Add Modifier" -msgstr "Ajouter un modificateur" +msgid "Block seam" +msgstr "" + +msgid "Remove selection" +msgstr "" + +msgid "Seam painting" +msgstr "" + +msgid "Entering Seam painting" +msgstr "" + +msgid "Leaving Seam painting" +msgstr "" + +msgid "Paint-on seam editing" +msgstr "" msgid "Notice" msgstr "Remarque" @@ -430,11 +439,14 @@ msgstr "Erreur critique" msgid "BambuStudio got an unhandled exception: %1%" msgstr "BambuStudio a reçu une exception non gérée : %1%" -msgid "Downloading Bambu Network plug-in" +msgid "Downloading Bambu Network Plug-in" +msgstr "" + +msgid "Incorrect password" msgstr "" #, c-format, boost-format -msgid "Connect %s[SN:%s] failed!" +msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "" msgid "" @@ -494,11 +506,30 @@ msgstr "Choisissez un ou plusieurs fichiers (3mf/step/stl/obj/amf) :" msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" msgstr "Choisissez un fichier (gcode/.gco/.g/.ngc/ngc) :" +msgid "Some presets are modified." +msgstr "Certains préréglages sont modifiés." + +msgid "" +"You can keep the modifield presets to the new project, discard or save " +"changes as new presets." +msgstr "" +"Vous pouvez conserver les préréglages modifiés dans le nouveau projet, " +"annuler ou enregistrer les modifications en tant que nouveaux préréglages." + +msgid "User logged out" +msgstr "" + +msgid "new or open project file is not allowed during the slicing process!" +msgstr "" + +msgid "Open Project" +msgstr "Projet ouvert" + 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 " +"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." @@ -522,13 +553,6 @@ msgstr "Langue" msgid "*" msgstr "*" -msgid "G-code files can not be loaded with models together!" -msgstr "" -"Les fichiers G-code ne peuvent pas être chargés avec des modèles ensemble !" - -msgid "G-code loading" -msgstr "Chargement du code G" - msgid "Select a G-code file:" msgstr "Sélectionnez un fichier G-code :" @@ -617,6 +641,18 @@ msgstr "Supprimer l'objet sélectionné" msgid "Load..." msgstr "Charger..." +msgid "Cube" +msgstr "Cube" + +msgid "Cylinder" +msgstr "Cylindre" + +msgid "Cone" +msgstr "Cône" + +msgid "Timelapse Wipe Tower" +msgstr "Timelapse Wipe Tower" + msgid "Add settings" msgstr "Ajouter des réglages" @@ -814,17 +850,18 @@ msgstr "Bloquer" msgid "Name" msgstr "Nom" +msgid "Fila." +msgstr "" + #, c-format, boost-format msgid "%1$d error repaired" msgid_plural "%1$d errors repaired" msgstr[0] "%1$d erreur réparée" -msgstr[1] "" #, c-format, boost-format msgid "Error: %1$d non-manifold edge." msgid_plural "Error: %1$d non-manifold edges." msgstr[0] "Erreur : %1$d arête non multiple." -msgstr[1] "" msgid "Remaining errors" msgstr "Erreurs restantes" @@ -833,7 +870,6 @@ msgstr "Erreurs restantes" msgid "%1$d non-manifold edge" msgid_plural "%1$d non-manifold edges" msgstr[0] "%1$d arête non multiple" -msgstr[1] "" msgid "Right click the icon to fix model object" msgstr "Cliquez avec le bouton droit sur l'icône pour fixer l'objet modèle" @@ -869,6 +905,9 @@ msgstr "Erreur!" msgid "Generic" msgstr "Générique" +msgid "Add Modifier" +msgstr "Ajouter un modificateur" + msgid "Deleting the last solid part is not allowed." msgstr "La suppression de la dernière partie solide n'est pas autorisée." @@ -938,12 +977,10 @@ msgstr "Réparer l'objet modèle" msgid "Following model object has been repaired" msgid_plural "Following model objects have been repaired" msgstr[0] "L'objet modèle suivant a été réparé" -msgstr[1] "" msgid "Failed to repair folowing model object" msgid_plural "Failed to repair folowing model objects" msgstr[0] "Échec de la réparation de l'objet modèle suivant" -msgstr[1] "" msgid "Repairing was canceled" msgstr "La réparation a été annulée" @@ -1038,7 +1075,7 @@ msgid "Click the pencil icon to edit the filament." msgstr "Cliquez sur l'icône du crayon pour modifier le filament." msgid "Load Filament" -msgstr "Load" +msgstr "Charger le filament" msgid "Unload Filament" msgstr "Unload" @@ -1098,6 +1135,9 @@ msgstr "" "Échec de l'arrangement. Trouvé quelques exceptions lors du traitement des " "géométries d'objets." +msgid "Arranging" +msgstr "" + msgid "Arranging canceled." msgstr "Agencement annulé." @@ -1156,7 +1196,7 @@ msgid "The region parameter is incorrrect" msgstr "The region parameter is incorrrect." msgid "Failure of printer login" -msgstr "Failure of printer login" +msgstr "Printer login failure" msgid "Failed to get ticket" msgstr "Failed to get ticket" @@ -1165,7 +1205,7 @@ msgid "User authorization timeout" msgstr "User authorization timeout" msgid "Failure of bind" -msgstr "Failure of bind" +msgstr "Binding failure" msgid "Unknown Failure" msgstr "Unknown Failure" @@ -1177,7 +1217,7 @@ 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 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." @@ -1257,8 +1297,8 @@ 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 from Slic3r " -"by Alessandro Ranellucci and the RepRap community" +"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" @@ -1296,11 +1336,11 @@ msgid "" "the corresponding code comments." msgstr "" -msgid "Colour" -msgstr "Colour" +msgid "AMSMaterialsSetting" +msgstr "" -msgid "SN" -msgstr "SN" +msgid "Colour" +msgstr "Color" msgid "" "Nozzle\n" @@ -1319,9 +1359,22 @@ msgstr "min" 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 "Confirm" msgstr "Confirmer" +msgid "Close" +msgstr "Fermer" + +msgid "AMS Slots" +msgstr "" + +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "" + msgid "Insertion update" msgstr "Insertion update" @@ -1330,14 +1383,14 @@ msgid "" "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. This takes about 20 seconds." +"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 is completed." +"automatically read any information until printing has finished." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -1355,8 +1408,8 @@ msgid "" "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 roll filament " -"spools." +"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 " @@ -1370,9 +1423,6 @@ msgstr "" msgid "File" msgstr "Dossier" -msgid "Close" -msgstr "Fermer" - msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" @@ -1609,13 +1659,6 @@ msgstr "" "support est désactivé, les couches de coque supérieures sont à 0 et la " "densité de remplissage clairsemée est à 0" -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 "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -1699,7 +1742,7 @@ msgid "Identifying build plate type" msgstr "Identifying build plate type" msgid "Calibrating Micro Lidar" -msgstr "Calibrating Micro Lidar" +msgstr "Calibrage du Micro-Lidar" msgid "Homing toolhead" msgstr "Homing toolhead" @@ -1770,6 +1813,9 @@ msgstr "Mise à jour a échoué." msgid "Failed to start printing job" msgstr "" +msgid "parameter name" +msgstr "" + msgid "N/A" msgstr "N / A" @@ -2008,8 +2054,11 @@ msgstr "Ajouter une assiette" msgid "Auto orient" msgstr "Orientation automatique" -msgid "Auto arrange" -msgstr "Organisation automatique" +msgid "Arrange all objects" +msgstr "Disposer tous les objets" + +msgid "Arrange objects on selected plates" +msgstr "Disposer les objets sur les plaques sélectionnées" msgid "Split to objects" msgstr "Diviser en objets individuels" @@ -2096,7 +2145,7 @@ msgid "Monitoring Recording" msgstr "Monitoring Recording" msgid "ConnectPrinter(LAN)" -msgstr "ConnectPrinter(LAN)" +msgstr "Connect Printer (LAN)" msgid "Please input the printer access code:" msgstr "Please input the printer access code:" @@ -2108,6 +2157,9 @@ msgstr "" "You can find it in \"Settings > Network > Connection code\"\n" "on the printer, as shown in the figure:" +msgid "Invalid input." +msgstr "" + msgid "Application is closing" msgstr "L'application se ferme" @@ -2214,9 +2266,6 @@ msgstr "Nouveau Projet" msgid "Start a new project" msgstr "Démarrer un nouveau projet" -msgid "Open Project" -msgstr "Projet ouvert" - msgid "Open a project file" msgstr "Ouvrir un fichier de projet" @@ -2325,6 +2374,18 @@ msgstr "Vue" msgid "Help" msgstr "Aide" +msgid "&File" +msgstr "&File" + +msgid "&Edit" +msgstr "" + +msgid "&View" +msgstr "&View" + +msgid "&Help" +msgstr "&Help" + msgid "&Open G-code" msgstr "&Open G-code" @@ -2356,15 +2417,6 @@ msgstr "&Quit" msgid "Quit %s" msgstr "Quit %s" -msgid "&File" -msgstr "&File" - -msgid "&View" -msgstr "&View" - -msgid "&Help" -msgstr "&Help" - msgid "Save configuration as:" msgstr "Enregistrer la configuration sous :" @@ -2453,9 +2505,15 @@ msgstr "Arrêt" msgid "0%" msgstr "0%" +msgid "Clean" +msgstr "" + msgid "Control" msgstr "Control" +msgid "Print Options" +msgstr "" + msgid "100%" msgstr "100%" @@ -2598,13 +2656,11 @@ msgstr "Ouvrir un répertoire." msgid "%1$d Object has custom supports." msgid_plural "%1$d Objects have custom supports." msgstr[0] "L'objet %1$d a des supports personnalisés." -msgstr[1] "" #, c-format, boost-format msgid "%1$d Object has color painting." msgid_plural "%1$d Objects have color painting." msgstr[0] "%1$d L'objet est peint en couleur." -msgstr[1] "" msgid "Slice ok." msgstr "Slice complete" @@ -2688,6 +2744,15 @@ msgctxt "Layers" msgid "Bottom" msgstr "Du bas" +msgid "Spaghetti Detection" +msgstr "" + +msgid "Stop printing when spaghetti detected" +msgstr "" + +msgid "First Layer Inspection" +msgstr "" + msgid "Switch to per-object setting mode to edit modifier settings." msgstr "" "Basculez vers le mode de réglage par objet pour modifier les paramètres du " @@ -2774,15 +2839,17 @@ msgstr "Restaurer" msgid "Loading file: %s" msgstr "Chargement du fichier : %s" -msgid "The Config is not compatible and can not be loaded." -msgstr "La Config n'est pas compatible et ne peut pas être chargée." +msgid "The 3mf is not from Bambu Lab, load geometry data only." +msgstr "" -msgid "Incompatible 3mf" -msgstr "Incompatible 3mf" +msgid "Load 3mf" +msgstr "" + +msgid "The Config can not be loaded." +msgstr "" -msgid "the 3mf is not compatible, load geometry data only!" +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" -"le 3mf n'est pas compatible, chargez uniquement les données de géométrie !" #, c-format, boost-format msgid "" @@ -2798,6 +2865,12 @@ msgstr "Vous feriez mieux de mettre à jour votre logiciel.\n" msgid "Newer 3mf version" msgstr "Nouvelle version 3mf" +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 "" "Le nom des composants à l'intérieur du fichier d'étape n'est pas au format " @@ -2842,6 +2915,14 @@ msgstr "Un objet en plusieurs parties a été détecté" 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 "Exporter le fichier STL :" @@ -2885,21 +2966,11 @@ msgid "" "The loaded file contains gcode only, Can not enter the Prepare page" msgstr "" -msgid "Some presets are modified." -msgstr "Certains préréglages sont modifiés." - msgid "You can keep the modified presets to the new project or discard them" msgstr "" "Vous pouvez conserver les préréglages modifiés dans le nouveau projet ou les " "supprimer" -msgid "" -"You can keep the modifield presets to the new project, discard or save " -"changes as new presets." -msgstr "" -"Vous pouvez conserver les préréglages modifiés dans le nouveau projet, " -"annuler ou enregistrer les modifications en tant que nouveaux préréglages." - msgid "Creating a new project" msgstr "Création d'un nouveau projet" @@ -2930,6 +3001,13 @@ msgstr "Importer la géométrie uniquement" msgid "Only one G-code file can be opened at the same time." msgstr "Un seul fichier G-code peut être ouvert à la fois." +msgid "G-code loading" +msgstr "Chargement du code G" + +msgid "G-code files can not be loaded with models together!" +msgstr "" +"Les fichiers G-code ne peuvent pas être chargés avec des modèles ensemble !" + msgid "Can not add models when in preview mode!" msgstr "Unable to add models in preview mode" @@ -3068,7 +3146,7 @@ msgid "User sync" msgstr "Synchronisation utilisateur" msgid "Auto sync user presets(Printer/Filament/Process)" -msgstr "Auto sync user presets(Printer/Filament/Process)" +msgstr "Auto sync user presets (Printer/Filament/Process)" msgid "User Sync" msgstr "User Sync" @@ -3093,7 +3171,7 @@ msgstr "" "fichiers .stl" msgid "Associate .step/.stp files to BambuStudio" -msgstr "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 "" @@ -3403,9 +3481,15 @@ msgstr "" msgid "The printer is busy on other print job" msgstr "The printer is busy with another print job." +#, c-format, boost-format msgid "" -"The filament index exceeds the AMS's slot count and cannot send the print " -"job." +"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 "" @@ -3422,6 +3506,17 @@ 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." @@ -3468,6 +3563,13 @@ msgstr "Enregistrer l'état actuel %s" msgid "Delete this preset" msgstr "Supprimer ce préréglage" +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 "Largeur de ligne" @@ -3539,7 +3641,6 @@ msgstr[0] "" "La ligne suivante %s contient des mots clés réservés. Veuillez le supprimer, " "ou il battra la visualisation du code G et l'estimation du temps " "d'impression." -msgstr[1] "" msgid "Reserved keywords found" msgstr "Mots clés réservés trouvés" @@ -3705,7 +3806,6 @@ msgstr "Détaché" msgid "Following preset will be deleted too." msgid_plural "Following presets will be deleted too." msgstr[0] "Le préréglage suivant sera également supprimé." -msgstr[1] "" #, boost-format msgid "Are you sure to %1% the selected preset?" @@ -3944,12 +4044,6 @@ msgstr "À" msgid "Login" msgstr "Connexion" -msgid "Filaments Selection" -msgstr "Sélection de filaments" - -msgid "Printer Selection" -msgstr "Sélection de l'imprimante" - msgid "The configuration package is changed in previous Config Guide" msgstr "" "Le package de configuration est modifié dans le guide de configuration " @@ -3968,60 +4062,18 @@ msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." msgstr "" "Importez des données de géométrie à partir de fichiers STL/STEP/3MF/OBJ/AMF." -msgid "Select all objects" -msgstr "Sélectionner tous les objets" - msgid "Copy to clipboard" msgstr "Copier dans le presse-papier" msgid "Paste from clipboard" msgstr "Coller depuis le presse-papier" -msgid "Camera view - Default" -msgstr "Vue caméra - Par défaut" - -msgid "Camera view - Top" -msgstr "Vue caméra - Haut" - -msgid "Camera view - Bottom" -msgstr "Vue caméra - Bas" - -msgid "Camera view - Front" -msgstr "Vue de la caméra - Avant" - -msgid "Camera view - Behind" -msgstr "Vue caméra - Derrière" - -msgid "Camera Angle - Left side" -msgstr "Angle de caméra - Côté gauche" - -msgid "Camera Angle - Right side" -msgstr "Angle de caméra - Côté droit" - -msgid "keyboard 1-9: set filament for object/part" -msgstr "clavier 1-9 : définir le filament pour l'objet/la pièce" - msgid "Show keyboard shortcuts list" msgstr "Afficher la liste des raccourcis clavier" msgid "Global shortcuts" msgstr "Raccourcis globaux" -msgid "Arrange all objects" -msgstr "Disposer tous les objets" - -msgid "Arrange objects on selected plates" -msgstr "Disposer les objets sur les plaques sélectionnées" - -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 "" -"Oriente automatiquement les objets sélectionnés ou tous les objets. S'il 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 "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -4031,12 +4083,33 @@ msgstr "" "des objets sélectionnés, il oriente uniquement ceux qui sont sélectionnés. " "Sinon, il oriente tous les objets du disque actuel." +msgid "Collapse/Expand the sidebar" +msgstr "Réduire/développer la barre latérale" + +msgid "⌘+Any arrow" +msgstr "⌘+n'importe quelle flèche" + +msgid "Movement in camera space" +msgstr "Mouvement dans l'espace de la caméra" + +msgid "⌥+Left mouse button" +msgstr "" + +msgid "Select a part" +msgstr "" + msgid "⌘+Left mouse button" msgstr "" msgid "Select multiple objects" msgstr "sélectionnez tous les objets sur la plaque actuelle" +msgid "Ctrl+Any arrow" +msgstr "Ctrl+n'importe quelle flèche" + +msgid "Alt+Left mouse button" +msgstr "" + msgid "Ctrl+Left mouse button" msgstr "" @@ -4076,17 +4149,53 @@ msgstr "Maj+n'importe quelle flèche" msgid "Movement step set to 1 mm" msgstr "Pas du mouvement réglé sur 1 mm" -msgid "⌘+Any arrow" -msgstr "⌘+n'importe quelle flèche" +msgid "keyboard 1-9: set filament for object/part" +msgstr "clavier 1-9 : définir le filament pour l'objet/la pièce" -msgid "Movement in camera space" -msgstr "Mouvement dans l'espace de la caméra" +msgid "Camera view - Default" +msgstr "Vue caméra - Par défaut" -msgid "Ctrl+Any arrow" -msgstr "Ctrl+n'importe quelle flèche" +msgid "Camera view - Top" +msgstr "Vue caméra - Haut" -msgid "Collapse/Expand the sidebar" -msgstr "Réduire/développer la barre latérale" +msgid "Camera view - Bottom" +msgstr "Vue caméra - Bas" + +msgid "Camera view - Front" +msgstr "Vue de la caméra - Avant" + +msgid "Camera view - Behind" +msgstr "Vue caméra - Derrière" + +msgid "Camera Angle - Left side" +msgstr "Angle de caméra - Côté gauche" + +msgid "Camera Angle - Right side" +msgstr "Angle de caméra - Côté droit" + +msgid "Select all objects" +msgstr "Sélectionner tous les objets" + +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 "Plateau" @@ -4418,11 +4527,12 @@ 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." +msgstr "" +"%1% est trop proche des autres, cela pourrait provoquer des collisions." #, boost-format msgid "%1% is too tall, and collisions will be caused." -msgstr "%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 will be collisions when printing.\n" msgstr "" @@ -4441,7 +4551,7 @@ 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 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 " @@ -4548,6 +4658,12 @@ msgstr "Zone imprimable" msgid "Bed exclude area" msgstr "Zone d'exclusion de lit" +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 "Elephant foot compensation" msgstr "Compensation de l'effet patte d'éléphant" @@ -4599,8 +4715,8 @@ 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 initial one. A value " -"of 0 means the filament does not support printing on the Cool Plate." +"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" @@ -4612,15 +4728,15 @@ 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 initial one. A value " -"of 0 means the filament does not support printing on the Engineering Plate." +"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 initial one. A value " -"of 0 means the filament does not support printing on the High Temp Plate." +"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 "Initial layer" msgstr "Couche initiale" @@ -4632,21 +4748,21 @@ 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 initial layer. A value of 0 means the " +"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 initial layer. A value of 0 means the " +"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 initial layer. A value of 0 means the " +"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 types supported by the printer" @@ -4745,7 +4861,7 @@ 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 surface, to give more space to the top infill " +"Use only one wall on flat top surfaces, to give more space to the top infill " "pattern" msgid "Slow down for overhang" @@ -4899,9 +5015,9 @@ msgid "" "bridges to be supported, and set it to a very large value if you don't want " "any bridges to be supported." msgstr "" -"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." +"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 de fin" @@ -5094,8 +5210,8 @@ 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 in G-code, so it is " -"important and should be accurate" +"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é" @@ -5127,7 +5243,7 @@ msgstr "Supports" msgid "" "Support material is commonly used to print support and support interface" msgstr "" -"Support material is commonly used to print support and support interface" +"Support material is commonly used to print support and support interfaces." msgid "Temperature of vitrificaiton" msgstr "Température de vitrification" @@ -5200,8 +5316,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 initial layer. Using a lower value can improve build plate " @@ -5237,7 +5353,7 @@ 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 not that this option only takes effect if there is no prime tower " +"Please note that this option only takes effect if there is no prime tower " "generated on the current plate." msgid "Speed of initial layer except the solid infill part" @@ -5620,7 +5736,7 @@ msgid "Nozzle volume" msgstr "Nozzle volume" msgid "Volume of nozzle between the cutter and the end of nozzle" -msgstr "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 "Réduire la rétraction du remplissage" @@ -5836,8 +5952,8 @@ msgstr "" "Vitesse du remplissage solide interne, pas de la surface supérieure et " "inférieure" -msgid "Spiral mode" -msgstr "Mode spirale" +msgid "Spiral vase" +msgstr "" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " @@ -5848,15 +5964,16 @@ msgstr "" "modèle solide en une impression à paroi unique avec des couches inférieures " "solides. Le modèle généré final n'a pas de couture" -msgid "Timelapse without toolhead" -msgstr "" - 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 "Temperature variation" msgstr "Variation de température" @@ -6237,8 +6354,8 @@ msgid "" "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. Colours of the objects will be mixed " -"as a result" +"filament and decrease the print time. Colors of the objects will be mixed as " +"a result." msgid "X-Y hole compensation" msgstr "Compensation de trou X-Y" @@ -6442,45 +6559,6 @@ msgstr "Support: fix holes at layer %d" msgid "Support: propagate branches at layer %d" msgstr "Support: propagate branches at layer %d" -#~ msgid "Creating" -#~ msgstr "Creating" - -#~ msgid "Uploading" -#~ msgstr "Téléchargement" - -#~ msgid "Waiting" -#~ msgstr "Waiting" - -#~ msgid "Sending" -#~ msgstr "Sending" - -#~ msgid "Finished" -#~ msgstr "Terminé" - -#~ msgid "Please fill report first." -#~ msgstr "Veuillez d'abord remplir le rapport." - -#~ msgid "Unable to create zip file" -#~ msgstr "Unable to create zip file" - -#~ msgid "Enter a search term" -#~ msgstr "Entrer un terme de recherche" - -#~ msgid "Debug" -#~ msgstr "Déboguer" - -#~ msgid "Monitoring" -#~ msgstr "Surveillance" - -#~ msgid "Fragment filter" -#~ msgstr "Fragment filter" - -#~ msgid "Fragment Filter" -#~ msgstr "Fragment Filter" - -#~ msgid "Position:" -#~ msgstr "Position:" - #~ msgid "Alt + Mouse wheel" #~ msgstr "Alt + molette de la souris" @@ -6492,12 +6570,33 @@ msgstr "Support: propagate branches at layer %d" #~ "problème en le déplaçant totalement à l'intérieur ou à l'extérieur de la " #~ "plaque." +#~ msgid "Auto arrange" +#~ msgstr "Organisation automatique" + +#~ 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 "" +#~ "Oriente automatiquement les objets sélectionnés ou tous les objets. S'il " +#~ "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 "Clear all" +#~ msgstr "Tout effacer" + +#~ msgid "Creating" +#~ msgstr "Creating" + #~ msgid "Ctrl + Any arrow" #~ msgstr "Ctrl + n'importe quelle flèche" #~ msgid "Ctrl + Left mouse button" #~ msgstr "Ctrl + Left mouse button" +#~ msgid "Debug" +#~ msgstr "Déboguer" + #~ msgid "Display printable box" #~ msgstr "Afficher la boîte imprimable" @@ -6527,12 +6626,30 @@ msgstr "Support: propagate branches at layer %d" #~ "Ne vous rétractez absolument pas lorsque le déplacement est dans la zone " #~ "de remplissage. Cela signifie que le suintement ne peut pas être vu" +#~ msgid "Enter a search term" +#~ msgstr "Entrer un terme de recherche" + +#~ msgid "Filaments Selection" +#~ msgstr "Sélection de filaments" + +#~ msgid "Finished" +#~ msgstr "Terminé" + #~ msgid "Fix model locally" #~ msgstr "Corriger le modèle localement" #~ msgid "Fix model through cloud" #~ msgstr "Correction du modèle via le cloud" +#~ 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" @@ -6547,6 +6664,9 @@ msgstr "Support: propagate branches at layer %d" #~ msgid "Module" #~ msgstr "Module" +#~ msgid "Monitoring" +#~ msgstr "Surveillance" + #~ msgid "New version of Bambu Studio" #~ msgstr "Nouvelle version de Bambu Studio" @@ -6562,24 +6682,36 @@ msgstr "Support: propagate branches at layer %d" #~ msgid "Pause(toolhead shell off)" #~ msgstr "Pause(toolhead shell off)" +#~ msgid "Please fill report first." +#~ msgstr "Veuillez d'abord remplir le rapport." + #~ msgid "Please upgrade your printer first" #~ msgstr "Please upgrade 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 gcode only." +#~ "The loaded file contains G-code only." #~ msgid "Preview only mode for gcode file." -#~ msgstr "Preview only mode for gcode file." +#~ msgstr "Preview only mode for G-code file." + +#~ msgid "Printer Selection" +#~ msgstr "Sélection de l'imprimante" #~ msgid "" #~ "Push new filament \n" #~ "into extruder" #~ msgstr "Poussez le nouveau filament dans l'extruder" +#~ msgid "Sending" +#~ msgstr "Sending" + #~ msgid "Shift + Any arrow" #~ msgstr "Maj + n'importe quelle flèche" @@ -6595,19 +6727,38 @@ msgstr "Support: propagate branches at layer %d" #~ msgid "Show Printable Box(TODO)" #~ msgstr "Afficher la boîte imprimable (TODO)" +#~ msgid "Spiral mode" +#~ msgstr "Mode spirale" + #~ 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" +#~ "Successfully sent. Will automatically jump to the device page in %s s" #~ msgid "Swith cloud environment, Please login again!" #~ msgstr "Changez d'environnement cloud, veuillez vous reconnecter !" +#~ msgid "The Config is not compatible and can not be loaded." +#~ msgstr "La Config n'est pas compatible et ne peut pas être chargée." + #~ 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 printer and AMS are too low.Please update to the " -#~ "latest version before sending the print job" +#~ "The firmware versions of the printer and AMS are too low. Please update " +#~ "them to the latest version before sending any print jobs." + +#~ msgid "Unable to create zip file" +#~ msgstr "Unable to create zip file" + +#~ msgid "Uploading" +#~ msgstr "Téléchargement" #~ msgid "User pause" #~ msgstr "User pause" + +#~ msgid "Waiting" +#~ msgstr "Waiting" + +#~ 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 new file mode 100644 index 00000000000..029ba742d85 --- /dev/null +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -0,0 +1,6763 @@ +msgid "" +msgstr "" +"Project-Id-Version: Bambu Studio\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-08-08 20: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" + +msgid "Supports Painting" +msgstr "Támaszok festése" + +msgid "Section view" +msgstr "Keresztmetszet nézet" + +msgid "Pen size" +msgstr "Tollméret" + +msgid "Left mouse button" +msgstr "Bal egérgomb" + +msgid "Enforce supports" +msgstr "Támaszok kényszerítése" + +msgid "Right mouse button" +msgstr "Jobb egérgomb" + +msgid "Block supports" +msgstr "Támaszok blokkolása" + +msgid "Shift + Left mouse button" +msgstr "Shift + bal egérgomb" + +msgid "Erase painting" +msgstr "Festés törlése" + +msgid "Erase all painting" +msgstr "Minden festés törlése" + +msgid "Highlight overhang areas" +msgstr "Túlnyúló területek kiemelése" + +msgid "Gap fill" +msgstr "Hézagok kitöltése" + +msgid "Perform" +msgstr "Alkalmaz" + +msgid "Gap area" +msgstr "" + +msgid "Set pen size" +msgstr "Tollméret beállítása" + +msgid "Ctrl + Mouse wheel" +msgstr "Ctrl + Egérgörgő" + +msgid "Tool type" +msgstr "Eszköz típusa" + +msgid "Smart fill angle" +msgstr "Okos kitöltési szög" + +msgid "Auto support threshold angle: " +msgstr "Automatikus támasz szögének határértéke: " + +msgid "Circle" +msgstr "Kör" + +msgid "Sphere" +msgstr "Gömb" + +msgid "Fill" +msgstr "Kitöltés" + +msgid "Gap Fill" +msgstr "Hézagok kitöltése" + +msgid "Highlight faces according to overhang angle." +msgstr "Felületek kiemelése a túlnyúlási szögnek megfelelően." + +msgid "No auto support" +msgstr "Nincs automatikus támasz" + +msgid "Support Generated" +msgstr "Támasz legenerálva" + +msgid "Lay on face" +msgstr "Felületre fektetés" + +#, 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 "" +"A filamentek száma meghaladja a festés által támogatott maximális " +"mennyiséget. Csak az első %1% filament lesz használható a festéshez." + +msgid "Color Painting" +msgstr "Színfestés" + +msgid "Pen shape" +msgstr "Toll formája" + +msgid "Paint" +msgstr "Festés" + +msgid "Erase" +msgstr "Törlés" + +msgid "Key 1~9" +msgstr "Számgombok 1-9" + +msgid "Choose filament" +msgstr "Válassz filamentet" + +msgid "Edge detection" +msgstr "Élek felismerése" + +msgid "Triangles" +msgstr "Háromszögek" + +msgid "Filaments" +msgstr "Filamentek" + +msgid "Brush" +msgstr "Ecset" + +msgid "Smart fill" +msgstr "Okos kitöltés" + +msgid "Bucket fill" +msgstr "Vödör kitöltés" + +msgid "Height range" +msgstr "Magasságtartomány" + +msgid "Shortcut Key " +msgstr "Gyorsgomb " + +msgid "Triangle" +msgstr "Háromszög" + +msgid "Height Range" +msgstr "Magasságtartomány" + +msgid "Remove painted color" +msgstr "Festett szín eltávolítása" + +#, boost-format +msgid "Painted using: Filament %1%" +msgstr "A következővel festve: %1% filament" + +msgid "Move" +msgstr "Mozgatás" + +msgid "Rotate" +msgstr "Forgatás" + +msgid "Optimize orientation" +msgstr "Orientáció optimalizálása" + +msgid "Apply" +msgstr "Alkalmaz" + +msgid "Scale" +msgstr "Átméretezés" + +msgid "Error: Please close all toolbar menus first" +msgstr "Hiba: Kérjük, először zárd be az összes eszköztár menüt" + +msgid "Tool-Lay on Face" +msgstr "Tool-Lay on Face" + +msgid "in" +msgstr "in" + +msgid "mm" +msgstr "mm" + +msgid "Position" +msgstr "Pozíció" + +msgid "Rotation" +msgstr "Forgatás" + +msgid "Scale ratios" +msgstr "Méretarányok" + +msgid "Object Operations" +msgstr "Objektum műveletek" + +msgid "Volume Operations" +msgstr "Térfogat műveletek" + +msgid "Translate" +msgstr "Translate" + +msgid "Group Operations" +msgstr "Csoportos műveletek" + +msgid "Set Position" +msgstr "Pozíció beállítása" + +msgid "Set Orientation" +msgstr "Orientáció beállítása" + +msgid "Set Scale" +msgstr "Méretarány beállítása" + +msgid "Reset Position" +msgstr "Pozíció visszaállítása" + +msgid "Reset Rotation" +msgstr "Forgatás visszaállítása" + +msgid "World coordinates" +msgstr "Világkoordináták" + +msgid "°" +msgstr "°" + +msgid "Size" +msgstr "Méret" + +msgid "%" +msgstr "%" + +msgid "uniform scale" +msgstr "egységes méretarány" + +msgid "Cut" +msgstr "Vágás" + +msgid "Movement:" +msgstr "Mozgatás:" + +msgid "Rotation:" +msgstr "Forgatás:" + +msgid "Height:" +msgstr "Magasság:" + +msgid "Keep upper part" +msgstr "Felső rész megtartása" + +msgid "Keep lower part" +msgstr "Alsó rész megtartása" + +msgid "Cut to parts" +msgstr "Részekre darabolás" + +msgid "Auto Segment" +msgstr "Auto Segment" + +msgid "Perform cut" +msgstr "Vágás" + +msgid "Reset" +msgstr "Visszaállítás" + +msgid "Mesh name" +msgstr "Háló neve" + +msgid "Detail level" +msgstr "Részletesség szintje" + +msgid "Decimate ratio" +msgstr "Csökkentési arány" + +#, boost-format +msgid "" +"Processing model '%1%' with more than 1M triangles could be slow. It is " +"highly recommended to simplify the model." +msgstr "" +"A több mint 1M háromszöget tartalmazó '%1%' modell feldolgozása lehet, hogy " +"lassú lesz. Erősen ajánlott a modell leegyszerűsítése." + +msgid "Simplify model" +msgstr "Modell egyszerűsítése" + +msgid "Simplify" +msgstr "Egyszerűsítés" + +msgid "Simplification is currently only allowed when a single part is selected" +msgstr "" +"Az egyszerűsítés jelenleg csak akkor engedélyezett, ha egyetlen tárgy van " +"kiválasztva" + +msgid "Error" +msgstr "Hiba" + +msgid "Extra high" +msgstr "Extra magas" + +msgid "High" +msgstr "Magas" + +msgid "Medium" +msgstr "Közepes" + +msgid "Low" +msgstr "Alacsony" + +msgid "Extra low" +msgstr "Extra alacsony" + +#, c-format, boost-format +msgid "%d triangles" +msgstr "%d háromszög" + +msgid "Show wireframe" +msgstr "Drótváz megjelenítése" + +#, boost-format +msgid "%1%" +msgstr "%1%" + +msgid "Can't apply when proccess preview." +msgstr "Nem használható folyamat előnézetben." + +msgid "Cancel" +msgstr "Mégse" + +msgid "Operation already cancelling. Please wait few seconds." +msgstr "" +"A művelet törlése már folyamatban van. Kérjük, várj néhány másodpercet." + +msgid "Face recognition" +msgstr "Face recognition" + +msgid "Perform Recognition" +msgstr "Felismerés" + +msgid "Reset direction" +msgstr "" + +msgid "Brush size" +msgstr "" + +msgid "Brush shape" +msgstr "" + +msgid "Enforce seam" +msgstr "" + +msgid "Block seam" +msgstr "" + +msgid "Remove selection" +msgstr "" + +msgid "Seam painting" +msgstr "" + +msgid "Entering Seam painting" +msgstr "" + +msgid "Leaving Seam painting" +msgstr "" + +msgid "Paint-on seam editing" +msgstr "" + +msgid "Notice" +msgstr "Megjegyzés" + +msgid "Warning" +msgstr "Figyelmeztetés" + +msgid "Undefined" +msgstr "Definiálatlan" + +#, boost-format +msgid "%1% was replaced with %2%" +msgstr "%1% lecserélve a következővel: %2%" + +msgid "The configuration may be generated by a newer version of BambuStudio." +msgstr "" +"Előfordulhat, hogy a konfigurációt a BambuStudio egy újabb verziójával " +"generálták." + +msgid "Some values have been replaced. Please check them:" +msgstr "Néhány érték lecserélődött. Kérjük, ellenőrizd őket:" + +msgid "Process" +msgstr "Folyamat" + +msgid "Filament" +msgstr "Filament" + +msgid "Machine" +msgstr "Gép" + +msgid "Configuration package was loaded, but some values were not recognized." +msgstr "" +"A konfigurációs csomag betöltődött, de néhány értéket nem sikerült " +"felismerni." + +#, boost-format +msgid "" +"Configuration file \"%1%\" was loaded, but some values were not recognized." +msgstr "" +"A(z) \"%1%\" konfigurációs csomag betöltődött, de néhány értéket nem " +"sikerült felismerni." + +msgid "V" +msgstr "V" + +msgid "Version" +msgstr "Verzió" + +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 "" +"A BambuStudio leáll, mert elfogy a memória. Lehet, hogy ez egy hiba. " +"Örülnénk, ha jelentenéd a problémát a csapatunknak." + +msgid "Fatal error" +msgstr "Súlyos hiba" + +msgid "" +"BambuStudio will terminate because of a localization error. It will be " +"appreciated if you report the specific scenario this issue happened." +msgstr "" +"A BambuStudio lokalizációs hiba miatt leáll. Nagyra értékelnénk, ha " +"jelentenéd a konkrét esetet, amikor ez a probléma előfordult." + +msgid "Critical error" +msgstr "Kritikus hiba" + +#, boost-format +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "A BambuStudio kezeletlen kivételbe ütközött: %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 "" +"A BambuStudio konfigurációs fájl valószínűleg megsérült, ezért nem " +"használható. Kérjük, töröld a fájlt, és próbáld meg újra." + +#, c-format, boost-format +msgid "" +"%s\n" +"Do you want to continue?" +msgstr "" +"%s\n" +"Szeretnéd folytatni?" + +msgid "Remember my choice" +msgstr "Emlékezz a választásomra" + +msgid "Loading configuration" +msgstr "Konfiguráció betöltése" + +#, c-format, boost-format +msgid "Click to download new version in default browser: %s" +msgstr "Kattints az új verzió letöltéséhez az alapértelmezett böngészőben: %s" + +msgid "The Bambu Studio needs an upgrade" +msgstr "A Bambu Studiot frissíteni kell" + +msgid "This is the newest version." +msgstr "Ez a legújabb verzió." + +msgid "Info" +msgstr "Infó" + +msgid "Loading user presets..." +msgstr "Felhasználói beállítások betöltése..." + +msgid "Rebuild" +msgstr "Újraindítás" + +msgid "Loading current presets" +msgstr "Jelenlegi beállítások betöltése" + +msgid "Loading a mode view" +msgstr "Mód nézet betöltése" + +msgid "Choose one file (3mf):" +msgstr "Válassz ki egy fájlt (3mf):" + +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 "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "Válassz ki egy fájlt (gcode/.gco/.g/.ngc/ngc):" + +msgid "Some presets are modified." +msgstr "Néhány beállítás megváltozott." + +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 "Projekt megnyitása" + +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 "" +"A Bambu Studio ezen verziója túl régi és a legfrissebb verzióra kell " +"frissíteni, mielőtt rendesen használható lenne" + +msgid "Login information expired. Please login again." +msgstr "A bejelentkezési adatok érvénytelenek. Kérjük, jelentkezz be újra." + +msgid "Loading" +msgstr "Betöltés" + +msgid "Loading user preset" +msgstr "Felhasználói beállítás betöltése" + +msgid "Switching application language" +msgstr "Alkalmazás nyelvének váltása" + +msgid "Select the language" +msgstr "Válaszd ki a nyelvet" + +msgid "Language" +msgstr "Nyelv" + +msgid "*" +msgstr "*" + +msgid "Select a G-code file:" +msgstr "Válassz egy G-code fájlt:" + +msgid "Bambu Studio GUI initialization failed" +msgstr "Nem sikerült a Bambu Studio GUI inicializálása" + +#, boost-format +msgid "Fatal error, exception catched: %1%" +msgstr "Súlyos hiba, a következő kivételt találtuk: %1%" + +msgid "Quality" +msgstr "Minőség" + +msgid "Shell" +msgstr "Héj" + +msgid "Infill" +msgstr "Kitöltés" + +msgid "Support" +msgstr "Támasz" + +msgid "Speed" +msgstr "Sebesség" + +msgid "Strength" +msgstr "Szilárdság" + +msgid "Top Solid Layers" +msgstr "Felső tömör rétegek" + +msgid "Top Minimum Shell Thickness" +msgstr "Minimális fedőréteg vastagság" + +msgid "Bottom Solid Layers" +msgstr "Alsó tömör rétegek" + +msgid "Bottom Minimum Shell Thickness" +msgstr "Alsó minimális héjvastagság" + +msgid "Ironing" +msgstr "Vasalás" + +msgid "Fuzzy Skin" +msgstr "Fuzzy skin" + +msgid "Extruders" +msgstr "Extruderek" + +msgid "Extrusion Width" +msgstr "Extrudálási szélesség" + +msgid "Wipe options" +msgstr "Törlés opciók" + +msgid "Bed adhension" +msgstr "Asztalra tapadás" + +msgid "Advanced" +msgstr "Haladó" + +msgid "Add part" +msgstr "Tárgy hozzáadása" + +msgid "Add negative part" +msgstr "Negatív tárgy hozzáadása" + +msgid "Add modifier" +msgstr "Módosító hozzáadása" + +msgid "Add support blocker" +msgstr "Támasz blokkoló hozzáadása" + +msgid "Add support enforcer" +msgstr "Támasz kényszerítő hozzáadása" + +msgid "Select settings" +msgstr "Beállítások kiválasztása" + +msgid "Delete" +msgstr "Törlés" + +msgid "Delete the selected object" +msgstr "Kiválasztott objektum törlése" + +msgid "Load..." +msgstr "Betöltés..." + +msgid "Cube" +msgstr "Kocka" + +msgid "Cylinder" +msgstr "Henger" + +msgid "Cone" +msgstr "Kúp" + +msgid "Timelapse Wipe Tower" +msgstr "Timelapse törlő torony" + +msgid "Add settings" +msgstr "Beállítások hozzáadása" + +msgid "Change type" +msgstr "Típus megváltoztatása" + +msgid "Set as an individual object" +msgstr "Beállítás különálló objektumként" + +msgid "Set as individual objects" +msgstr "Beállítás különálló objektumokként" + +msgid "Printable" +msgstr "Nyomtatható" + +msgid "Rename" +msgstr "Átnevezés" + +msgid "Fix model" +msgstr "Model javítása" + +msgid "Export as STL" +msgstr "Exportálás STL-ként" + +msgid "Reload item" +msgstr "Tárgy újbóli betöltése" + +msgid "Reload items" +msgstr "Tárgyak újbóli betöltése" + +msgid "Change filament" +msgstr "Filament csere" + +msgid "Set filament for selected items" +msgstr "Filament beállítása a kiválasztott tárgyakhoz" + +msgid "Default" +msgstr "Alapértelmezett" + +#, c-format, boost-format +msgid "Filament %d" +msgstr "Filament %d" + +msgid "active" +msgstr "aktív" + +msgid "Scale to build volume" +msgstr "Átméretezés a nyomtatótérhez" + +msgid "Scale an object to fit the build volume" +msgstr "Átméretez egy objektumot, hogy beférjen a nyomtatótérbe" + +msgid "Convert from inch" +msgstr "Átváltás hüvelykről" + +msgid "Restore to inch" +msgstr "Visszaállítás hüvelykre" + +msgid "Convert from meter" +msgstr "Átváltás méterről" + +msgid "Restore to meter" +msgstr "Visszaállítás méterre" + +msgid "Assemble" +msgstr "Összeállítás" + +msgid "Assemble the selected objects to an object with multiple parts" +msgstr "Összeállítja a kijelölt objektumot egy több részből álló objektummá" + +msgid "Assemble the selected objects to an object with single part" +msgstr "" +"Összeállítja a kijelölt objektumokat egy egyetlen részből álló objektummá" + +msgid "Assemble the selected parts to a single part" +msgstr "Összeállítja a kijelölt tárgyakat egyetlen tárggyá" + +msgid "Along X axis" +msgstr "X-tengely mentén" + +msgid "Mirror along the X axis" +msgstr "Tükrözés az X-tengely mentén" + +msgid "Along Y axis" +msgstr "Y-tengely mentén" + +msgid "Mirror along the Y axis" +msgstr "Tükrözés az Y-tengely mentén" + +msgid "Along Z axis" +msgstr "Z-tengely mentén" + +msgid "Mirror along the Z axis" +msgstr "Tükrözés a Z-tengely mentén" + +msgid "Mirror" +msgstr "Tükrözés" + +msgid "Mirror object" +msgstr "Objektum tükrözése" + +msgid "Add Primitive" +msgstr "Primitív hozzáadása" + +msgid "To objects" +msgstr "Objektumokra" + +msgid "Split the selected object into multiple objects" +msgstr "Szétválasztja a kijelölt objektumot több objektumra" + +msgid "To parts" +msgstr "Tárgyakra" + +msgid "Split the selected object into multiple parts" +msgstr "Szétválasztja a kijelölt objektumot több tárgyra" + +msgid "Split" +msgstr "Szétválaszt" + +msgid "Split the selected object" +msgstr "Szétválasztja a kijelölt objektumot" + +msgid "Auto orientation" +msgstr "Automatikus orientáció" + +msgid "Auto orient the object to improve print quality." +msgstr "" +"Az objektum automatikus tájolása a nyomtatási minőség javítása érdekében." + +msgid "Split the selected object into mutiple objects" +msgstr "Szétválasztja a kijelölt objektumot több tárgyra" + +msgid "Split the selected object into mutiple parts" +msgstr "Szétválasztja a kijelölt objektumot több tárgyra" + +msgid "Select All" +msgstr "Összes kijelölése" + +msgid "select all objects on current plate" +msgstr "az aktuális tálca összes objektumának kijelölése" + +msgid "Delete All" +msgstr "Összes törlése" + +msgid "delete all objects on current plate" +msgstr "az aktuális tálca összes objektumának törlése" + +msgid "Arrange" +msgstr "Elrendezés" + +msgid "arrange current plate" +msgstr "aktuális tálca elrendezése" + +msgid "Auto Rotate" +msgstr "Automatikus forgatás" + +msgid "auto rotate current plate" +msgstr "aktuális tálca automatikus forgatása" + +msgid "Remove the selected plate" +msgstr "Kiválasztott tálca eltávolítása" + +msgid "Clone" +msgstr "Klónozás" + +msgid "Reduce Triangles" +msgstr "Háromszögek csökkentése" + +msgid "Per object edit" +msgstr "Szerkesztés objektumonként" + +msgid "Edit print parameters for a single object" +msgstr "Nyomtatási paraméterek szerkesztése egy objektumhoz" + +msgid "Change Filament" +msgstr "Filament csere" + +msgid "Set Filament for selected items" +msgstr "Filament beállítása a kiválasztott tárgyakhoz" + +msgid "current" +msgstr "jelenlegi" + +msgid "Set Unprintable" +msgstr "Beállítás nyomtathatatlannak" + +msgid "Set Printable" +msgstr "Beállítás nyomtathatónak" + +msgid "Unlock" +msgstr "Feloldás" + +msgid "Lock" +msgstr "Lezárás" + +msgid "Name" +msgstr "Név" + +msgid "Fila." +msgstr "" + +#, c-format, boost-format +msgid "%1$d error repaired" +msgid_plural "%1$d errors repaired" +msgstr[0] "%1$d hiba megjavítva" +msgstr[1] "%1$d hiba megjavítva" + +#, c-format, boost-format +msgid "Error: %1$d non-manifold edge." +msgid_plural "Error: %1$d non-manifold edges." +msgstr[0] "Hiba: %1$d hibás él." +msgstr[1] "Hiba: %1$d hibás él." + +msgid "Remaining errors" +msgstr "Fennmaradó hibák" + +#, c-format, boost-format +msgid "%1$d non-manifold edge" +msgid_plural "%1$d non-manifold edges" +msgstr[0] "%1$d hibás él" +msgstr[1] "%1$d hibás él" + +msgid "Right click the icon to fix model object" +msgstr "Kattints jobb gombbal az ikonra a modell objektum javításához" + +msgid "Right button click the icon to drop the object settings" +msgstr "Kattints jobb gombbal az ikonra az objektum beállításainak elvetéséhez" + +msgid "Click the icon to reset all settings of the object" +msgstr "Kattints az ikonra az objektum összes beállításának visszaállításához" + +msgid "Right button click the icon to drop the object printable property" +msgstr "" +"Kattints jobb gombbal az ikonra az objektum nyomtatható tulajdonságának " +"elvetéséhez" + +msgid "Click the icon to toggle printable property of the object" +msgstr "" +"Kattints az ikonra az objektum nyomtatható tulajdonságának módosításához" + +msgid "Click the icon to edit support painting of the object" +msgstr "Kattints az ikonra az objektum támasz festésének szerkesztéséhez" + +msgid "Click the icon to edit color painting of the object" +msgstr "Kattints az ikonra az objektum színfestésének szerkesztéséhez" + +msgid "Loading file" +msgstr "Fájl betöltése" + +msgid "Error!" +msgstr "Hiba!" + +msgid "Generic" +msgstr "Általános" + +msgid "Add Modifier" +msgstr "Módosító hozzáadása" + +msgid "Deleting the last solid part is not allowed." +msgstr "Az utolsó szilárd rész törlése nem megengedett." + +msgid "The target object contains only one part and can not be splited." +msgstr "" +"A kijelölt objektum csak egy tárgyat tartalmaz, ezért nem lehet tovább " +"bontani." + +msgid "Assembly" +msgstr "Összeállítás" + +msgid "Object" +msgstr "Objektum" + +msgid "Part" +msgstr "Tárgy" + +msgid "Layer" +msgstr "Réteg" + +msgid "Selection conflicts" +msgstr "Kijelölési ütközések" + +msgid "" +"If first selected item is an object, the second one should also be object." +msgstr "" +"Ha az első kiválasztott elem egy objektum, akkor a másodiknak is objektumnak " +"kell lennie." + +msgid "" +"If first selected item is a part, the second one should be part in the same " +"object." +msgstr "" +"Ha az első kiválasztott elem egy tárgy, akkor a másodiknak is tárgynak kell " +"lennie." + +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 "Negatív tárgy" + +msgid "Modifier" +msgstr "Módosító" + +msgid "Support Blocker" +msgstr "Támasz blokkoló" + +msgid "Support Enforcer" +msgstr "Támasz kényszerítő" + +msgid "Type:" +msgstr "Típus:" + +msgid "Choose part type" +msgstr "Alkatrésztípus kiválasztása" + +msgid "Enter new name" +msgstr "Adj meg egy új nevet" + +msgid "Renaming" +msgstr "Átnevezés" + +msgid "Repairing model object" +msgstr "Modell javítása" + +msgid "Following model object has been repaired" +msgid_plural "Following model objects have been repaired" +msgstr[0] "A következő modell sikeresen megjavítva" +msgstr[1] "A következő modellek sikeresen megjavítva" + +msgid "Failed to repair folowing model object" +msgid_plural "Failed to repair folowing model objects" +msgstr[0] "Nem sikerült megjavítani a következő modellt" +msgstr[1] "Nem sikerült megjavítani a következő modelleket" + +msgid "Repairing was canceled" +msgstr "A javítás meg lett szakítva" + +msgid "Additional process preset" +msgstr "További folyamatbeállítások" + +msgid "Remove parameter" +msgstr "Paraméter eltávolítása" + +msgid "one cell can only be copied to one or multiple cells in the same column" +msgstr "" +"egy cellát csak az ugyanabban az oszlopban lévő egy vagy több cellába lehet " +"másolni" + +msgid "multiple cells copy is not supported" +msgstr "a több cellás másolás nem támogatott" + +msgid "Outside" +msgstr "Kívül" + +msgid "Auto" +msgstr "Auto" + +msgid "Manual" +msgstr "Manuális" + +msgid "No-brim" +msgstr "Nincs perem" + +msgid " " +msgstr "" + +msgid "Layer height" +msgstr "Rétegmagasság" + +msgid "Wall loops" +msgstr "Falak száma" + +msgid "Infill density(%)" +msgstr "Kitöltési sűrűség (%)" + +msgid "Auto Brim" +msgstr "Automatikus perem" + +msgid "Inner wall speed" +msgstr "Belső fal sebessége" + +msgid "Plate" +msgstr "Tálca" + +msgid "Brim" +msgstr "Perem" + +msgid "Object/Part Setting" +msgstr "Objektum/tárgy beállítások" + +msgid "Reset parameter" +msgstr "Paraméter visszaállítása" + +msgid "Multicolor Print" +msgstr "Többszínű nyomtatás" + +msgid "Line Type" +msgstr "Vonaltípus" + +msgid "No printer" +msgstr "Nincs nyomtató" + +msgid "Heat the nozzle to target temperature" +msgstr "Fúvóka felmelegítése a kívánt hőmérsékletre" + +msgid "Cut filament" +msgstr "Filament vágása" + +msgid "Pull back current filament" +msgstr "Jelenlegi filament visszahúzása" + +msgid "Push new filament into extruder" +msgstr "Új filament betöltése az extruderbe" + +msgid "Purge old filament" +msgstr "Régi filament kiöblítése" + +msgid "?" +msgstr "?" + +msgid "Empty" +msgstr "Üres" + +msgid "Click the pencil icon to edit the filament." +msgstr "Kattints a ceruza ikonra a filament szerkesztéséhez." + +msgid "Load Filament" +msgstr "Filament betöltés" + +msgid "Unload Filament" +msgstr "Filament kitöltése" + +msgid "Tips" +msgstr "Tippek" + +msgid "AMS Settings" +msgstr "AMS beállítások" + +msgid "Calibrating AMS..." +msgstr "AMS kalibrálása..." + +msgid "A problem occured during calibration. Click to view the solution." +msgstr "" +"A kalibráció során probléma merült fel. Kattintson a megoldás " +"megtekintéséhez." + +msgid "Calibrate again" +msgstr "Kalibrálja újra" + +msgid "Cancel calibration" +msgstr "Kalibrálás megszakítása" + +msgid "" +"Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " +"load or unload filiament." +msgstr "" +"Válassz egy AMS rekeszt, majd nyomd meg a \"Load\" vagy \"Unload\" gombot a " +"filament automatikus be- vagy kitöltéséhez." + +msgid "Edit" +msgstr "Szerkesztés" + +msgid "" +"All the selected objects are on the locked plate,\n" +"We can not do auto-arrange on these objects." +msgstr "" +"Az összes kijelölt objektum egy zárolt tálcán van,\n" +"nem lehet automatikus elrendezést használni rajtuk." + +msgid "No arrangable objects are selected." +msgstr "Nincsenek elrendezhető objektumok kijelölve." + +msgid "" +"This plate is locked,\n" +"We can not do auto-arrange on this plate." +msgstr "" +"Ez a tálca zárolva van.\n" +"Nem lehetséges az automatikus elrendezés ezen a tálcán." + +msgid "Arranging..." +msgstr "Elrendezés..." + +msgid "" +"Arrange failed. Found some exceptions when processing object geometries." +msgstr "" +"Sikertelen elrendezés. Néhány kivételt találtunk az objektumgeometriák " +"feldolgozásakor." + +msgid "Arranging" +msgstr "" + +msgid "Arranging canceled." +msgstr "Elrendezése törölve." + +msgid "" +"Arranging is done but there are unpacked items. Reduce spacing and try again." +msgstr "" +"Az elrendezés megtörtént, de maradtak összeragadt tárgyak. Csökkentsd a " +"térközt, és próbáld meg újra." + +msgid "Arranging done." +msgstr "Elrendezés kész." + +#, c-format, boost-format +msgid "" +"Arrangement ignored the following objects which can't fit into a single " +"bed:\n" +"%s" +msgstr "" +"Az elrendezés figyelmen kívül hagyta a következő objektumokat, amelyek nem " +"férnek el egy tálcán:\n" +"%s" + +msgid "" +"All the selected objects are on the locked plate,\n" +"We can not do auto-orient on these objects." +msgstr "" +"Az összes kijelölt objektum egy zárolt tálcán van,\n" +"nem lehet automatikus orientációt használni rajtuk." + +msgid "" +"This plate is locked,\n" +"We can not do auto-orient on this plate." +msgstr "" +"Ez a tálca zárolva van.\n" +"Nem lehetséges az automatikus orientáció ezen a tálcán." + +msgid "Orienting..." +msgstr "Orientáció folyamatban..." + +msgid "Orienting" +msgstr "Orientáció" + +msgid "Error! Unable to create thread!" +msgstr "Error. Unable to create thread." + +msgid "Exception" +msgstr "Kivétel" + +msgid "Logging in" +msgstr "Bejelentkezés" + +msgid "Login failed" +msgstr "Sikertelen bejelentkezés" + +msgid "The region parameter is incorrrect" +msgstr "A régió paramétere helytelen" + +msgid "Failure of printer login" +msgstr "Sikertelen bejelentkezés a nyomtatóra" + +msgid "Failed to get ticket" +msgstr "Failed to get ticket" + +msgid "User authorization timeout" +msgstr "Felhasználó hitelesítési időtúllépés" + +msgid "Failure of bind" +msgstr "Sikertelen párosítás" + +msgid "Unknown Failure" +msgstr "Ismeretlen hiba" + +msgid "Abnormal print file data. Please slice again" +msgstr "Rendellenes nyomtatási fájladatok. Kérjük, szeleteld újra" + +msgid "Task canceled" +msgstr "Feladat törölve" + +msgid "Upload task timed out. Please check the network problem and try again" +msgstr "" +"A feltöltési folyamat időtúllépés miatt megszakadt. Kérjük, ellenőrizd a " +"hálózati beállításokat és próbáld újra" + +msgid "Cloud service connection failed. Please try again." +msgstr "" +"A felhőszolgáltatáshoz való csatlakozás sikertelen. Kérjük, próbáld újra." + +msgid "Print file not found, please slice again" +msgstr "A nyomtatási fájl nem található, kérjük, szeleteld újra" + +msgid "" +"The print file exceeds the maximum allowable size (1GB). Please simplify the " +"model and slice again" +msgstr "" +"A nyomtatási fájl mérete meghaladja a megengedett maximális méretet (1 GB). " +"Kérjük, egyszerűsítsd a modellt és szeleteld újra" + +msgid "Failed uploading print file" +msgstr "Sikertelen nyomtatási fájl feltöltés" + +msgid "Wrong Access code" +msgstr "Hibás hozzáférési kód" + +msgid "Sending print job over LAN" +msgstr "Nyomtatási munka küldése LAN-on keresztül" + +msgid "Sending print job through cloud service" +msgstr "Nyomtatási munka küldése felhőszolgáltatáson keresztül" + +msgid "Service Unavailable" +msgstr "Szolgáltatás nem elérhető" + +msgid "Unkown Error." +msgstr "Ismeretlen hiba." + +msgid "Sending print configuration" +msgstr "Nyomtatási konfiguráció küldése" + +#, c-format, boost-format +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 "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 "Downloading" +msgstr "Letöltés" + +msgid "Download failed" +msgstr "Letöltés sikertelen" + +msgid "Cancelled" +msgstr "Megszakítva" + +msgid "Finish" +msgstr "Kész" + +msgid "Installing" +msgstr "Telepítés" + +msgid "Install failed" +msgstr "Sikertelen telepítés" + +msgid "Portions copyright" +msgstr "Szerzői jogok" + +msgid "Copyright" +msgstr "Copyright" + +msgid "License" +msgstr "Licenc" + +msgid "Bambu Studio is licensed under " +msgstr "A Bambu Studio a következő licencet használja " + +msgid "GNU Affero General Public License, version 3" +msgstr "GNU Affero General Public License, version 3" + +msgid "" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" +msgstr "" +"A Bambu Studio a Prusa Research által készített PrusaSliceren alapul, amely " +"az Alessandro Ranellucci és a RepRap közösség által készített Slic3r-ből " +"származik" + +msgid "Libraries" +msgstr "Könyvtárak" + +msgid "" +"This software uses open source components whose copyright and other " +"proprietary rights belong to their respective owners" +msgstr "" +"Ez a szoftver olyan nyílt forráskódú komponenseket használ, amelyek szerzői- " +"és egyéb tulajdonjogai a megfelelő tulajdonosok tulajdonát képezik" + +#, c-format, boost-format +msgid "About %s" +msgstr "%s névjegye" + +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." +msgstr "" +"A Bambu Studio a PrusaResearch által készített PrusaSlicer és Merill " +"(supermerill) által készített SuperSlicer alapján készült." + +msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." +msgstr "" +"A PrusaSlicer eredetileg az Alessandro Ranellucci által készített Slic3r-en " +"alapul." + +msgid "" +"Slic3r was created by Alessandro Ranellucci with the help of many other " +"contributors." +msgstr "" +"A Slic3r-t Alessandro Ranellucci készítette sok más közreműködő segítségével." + +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "A Bambu Studio az Ultimaker Cura néhány ötletére is támaszkodott." + +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 "" +"A szoftver számos része származik közösségi közreműködésből, így nem tudjuk " +"őket egyenként felsorolni, ezért a megfelelő helyeken a kód kommentekben " +"vannak feltüntetve." + +msgid "AMSMaterialsSetting" +msgstr "" + +msgid "Colour" +msgstr "Szín" + +msgid "" +"Nozzle\n" +"Temperature" +msgstr "" +"Fúvóka\n" +"Hőmérséklet" + +msgid "max" +msgstr "max" + +msgid "min" +msgstr "min" + +#, boost-format +msgid "The input value should be greater than %1% and less than %2%" +msgstr "" +"A megadott értéknek nagyobbnak kell lennie, mint %1% és kisebbnek, mint %2%" + +msgid "SN" +msgstr "SN" + +msgid "Confirm" +msgstr "Megerősítés" + +msgid "Close" +msgstr "Bezárás" + +msgid "AMS Slots" +msgstr "" + +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "" + +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 "" +"Az AMS automatikusan kiolvassa a filament információkat egy új Bambu Lab " +"filament tekercs behelyezésekor. Ez körülbelül 20 másodpercet vesz igénybe." + +msgid "" +"Note: if new filament is inserted during printing, the AMS will not " +"automatically read any information until printing is completed." +msgstr "" +"Megjegyzés: ha az új tekercs nyomtatás során kerül behelyezésre, az AMS nem " +"fogja automatikusan kiolvasni az információkat a nyomtatás végéig." + +msgid "" +"When inserting a new filament, the AMS will not automatically read its " +"information, leaving it blank for you to enter manually." +msgstr "" +"Új filament behelyezésekor az AMS nem fogja automatikusan kiolvasni az " +"információkat, hanem üresen hagyja azokat, így kézzel kell megadnod." + +msgid "Power on update" +msgstr "Frissítés bekapcsoláskor" + +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 "" +"Az AMS indításkor automatikusan kiolvassa a behelyezett filament adatait. Ez " +"körülbelül 1 percet vesz igénybe. A leolvasási folyamat során a " +"filamenttekercsek feltekercselésre kerülnek." + +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 "" +"Az AMS indításkor nem olvassa ki automatikusan az információkat a " +"behelyezett filamentről, és továbbra is a legutóbbi leállítás előtt " +"rögzített információkat használja." + +msgid "File" +msgstr "Fájl" + +msgid "" +"A error occurred. Maybe memory of system is not enough or it's a bug of the " +"program" +msgstr "" +"Hiba történt. Lehet, hogy a rendszer memóriája nem elég, vagy a program hibás" + +msgid "Please save project and restart the program. " +msgstr "Kérjük, mentsd el a projektet és indítsd újra a programot. " + +msgid "Processing G-Code from Previous file..." +msgstr "G-kód feldolgozása egy előző fájlból..." + +msgid "Slicing complete" +msgstr "Szeletelés kész" + +msgid "Access violation" +msgstr "Hozzáférés megsértése" + +msgid "Illegal instruction" +msgstr "Érvénytelen utasítás" + +msgid "Divide by zero" +msgstr "Nullával való osztás" + +msgid "Overflow" +msgstr "Túlcsordulás" + +msgid "Underflow" +msgstr "Alulcsordulás" + +msgid "Floating reserved operand" +msgstr "Lebegőpontos foglalt operandus" + +msgid "Stack overflow" +msgstr "Verem túlcsordulás" + +msgid "Unknown error when export G-code." +msgstr "Ismeretlen hiba a G-kód exportálásakor." + +#, boost-format +msgid "" +"Failed to save gcode file.\n" +"Error message: %1%.\n" +"Source file %2%." +msgstr "" +"Nem sikerült elmenteni a G-kód fájlt.\n" +"Hibaüzenet: %1%.\n" +"Forrás fájl: %2%." + +#, boost-format +msgid "Succeed to export G-code to %1%" +msgstr "G-kód sikeresen exportálva ide: %1%" + +msgid "Origin" +msgstr "Origó" + +msgid "Diameter" +msgstr "Átmérő" + +msgid "Size in X and Y of the rectangular plate." +msgstr "A téglalap alakú tálca mérete X-ben és Y-ban." + +msgid "" +"Distance of the 0,0 G-code coordinate from the front left corner of the " +"rectangle." +msgstr "A 0,0 G-kód koordinátájának távolsága a téglalap bal első sarkától." + +msgid "" +"Diameter of the print bed. It is assumed that origin (0,0) is located in the " +"center." +msgstr "" +"A tárgyasztal átmérője. Feltételezzük, hogy az origó (0,0) középen van." + +msgid "Rectangular" +msgstr "Téglalap" + +msgid "Circular" +msgstr "Kör" + +msgid "Custom" +msgstr "Egyéni" + +msgid "Shape" +msgstr "Forma" + +msgid "Load shape from STL..." +msgstr "Forma betöltése STL-ből..." + +msgid "Settings" +msgstr "Beállítások" + +msgid "Texture" +msgstr "Textúra" + +msgid "Remove" +msgstr "Eltávolítás" + +msgid "Not found:" +msgstr "Nem található:" + +msgid "Model" +msgstr "Modell" + +msgid "Choose an STL file to import bed shape from:" +msgstr "Válassz egy STL fájlt az asztal alakjának importálásához (PNG/SVG):" + +msgid "Invalid file format." +msgstr "Érvénytelen fájl formátum." + +msgid "Error! Invalid model" +msgstr "Hiba! Érvénytelen modell" + +msgid "The selected file contains no geometry." +msgstr "A kiválasztott fájl nem tartalmaz geometriát." + +msgid "" +"The selected file contains several disjoint areas. This is not supported." +msgstr "" +"A kiválasztott fájl több, egymástól elkülönülő területet tartalmaz. Ez nem " +"támogatott." + +msgid "Choose a file to import bed texture from (PNG/SVG):" +msgstr "Válassz egy fájlt az asztal textúrájának importálásához (PNG/SVG):" + +msgid "Choose an STL file to import bed model from:" +msgstr "Válassz egy STL fájlt az asztal textúrájának importálásához:" + +msgid "Bed Shape" +msgstr "Asztal alakja" + +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 "" +"A fúvóka eltömődhet, ha a hőmérséklet az ajánlott tartományon kívül van.\n" +"Kérjük, bizonyosodj meg róla, hogy a megfelelő hőmérsékletet használod a " +"nyomtatáshoz.\n" +"\n" + +#, c-format, boost-format +msgid "" +"Recommended nozzle temperature of this filament type is [%d, %d] degree " +"centigrade" +msgstr "" +"Az ajánlott fúvóka hőmérséklet ehhez a filament típushoz [%d, %d] Celsius-fok" + +#, 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 "" +"A többi réteg asztalhőmérséklete több mint %d Celsius-fokkal alacsonyabb, " +"mint a kezdőréteg hőmérséklete.\n" +"Ez azt okozhatja, hogy a modell a nyomtatás során leválik a tárgyasztalról" + +msgid "" +"Bed temperature is higher than vitrification temperature of this filament.\n" +"This may cause nozzle blocked and printing failure" +msgstr "" +"Az asztalhőmérséklet magasabb, mint ennek a filamentnek az üvegesedési " +"hőmérséklete.\n" +"Ez a fúvóka eltömődését és nyomtatási hibákat okozhat" + +msgid "" +"Too small layer height.\n" +"Reset to 0.2" +msgstr "" +"Túl alacsony rétegmagasság.\n" +"Visszaállítva 0,2-re" + +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "" +"Túl nagy rétegmagasság.\n" +"Visszaállítva 0,2-re" + +msgid "" +"Too small ironing spacing.\n" +"Reset to 0.1" +msgstr "" +"Túl kicsi vasalási térköz.\n" +"Visszaállítva 0,1-re" + +msgid "" +"Zero initial layer height is invalid.\n" +"\n" +"The first layer height will be reset to 0.2." +msgstr "" +"A nulla kezdőréteg magasság érvénytelen.\n" +"\n" +"A kezdőréteg magassága vissza fog állni 0,2-re." + +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, \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 "" +"Change these settings automatically? \n" +"Yes - Change these settings and enable spiral mode automatically\n" +"No - Give up using spiral mode this time" +msgstr "" +"Automatikusan megváltoztatod ezeket a beállításokat?\n" +"Igen - Módosítsa ezeket a beállításokat, és automatikusan engedélyezze a " +"spirál mód használatát\n" +"Nem - Ne használja a spirál módot ez alkalommal" + +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 "" +"A törlő torony nem működik ha az adaptív- és a független támasz " +"rétegmagasság engedélyezve van.\n" +"Melyiket szeretnéd megtartani?\n" +"IGEN - Törlő torony megtartása\n" +"NEM - Adaptív és független támasz rétegmagasság megtartása" + +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 "" +"A törlő torony nem működik ha az adaptív rétegmagasság engedélyezve van.\n" +"Melyiket szeretnéd megtartani?\n" +"IGEN - Törlő torony megtartása\n" +"NEM - Adaptív rétegmagasság megtartása" + +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 "" +"A törlő torony nem működik ha a független támasz rétegmagasság engedélyezve " +"van.\n" +"Melyiket szeretnéd megtartani?\n" +"IGEN - Törlő torony megtartása\n" +"NEM - Független támasz rétegmagasság megtartása" + +#, boost-format +msgid "%1% infill pattern doesn't support 100%% density." +msgstr "%1% kitöltési mintázat nem támogatja a 100%%-os kitöltés." + +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 "Auto bed leveling" +msgstr "Automatikus asztalszintezés" + +msgid "Heatbed preheating" +msgstr "Asztal előfűtése" + +msgid "Sweeping XY mech mode" +msgstr "Sweeping XY mech mode" + +msgid "Changing filament" +msgstr "Filament váltása" + +msgid "M400 pause" +msgstr "M400 pause" + +msgid "Paused due to filament runout" +msgstr "Megállítva, mert kifogyott a filament" + +msgid "Heating hotend" +msgstr "Hotend fűtése" + +msgid "Calibrating extrusion" +msgstr "Extrudálás kalibrálása" + +msgid "Scanning bed surface" +msgstr "Asztalfelület szkennelése" + +msgid "Inspecting first layer" +msgstr "Első réteg vizsgálata" + +msgid "Identifying build plate type" +msgstr "Tárgyasztal azonosítása" + +msgid "Calibrating Micro Lidar" +msgstr "Micro Lidar kalibrálása" + +msgid "Homing toolhead" +msgstr "Nyomtatófej alaphelyzetbe mozgatása" + +msgid "Cleaning nozzle tip" +msgstr "Fúvóka hegyének tisztítása" + +msgid "Checking extruder temperature" +msgstr "Extruder hőmérsékletének ellenőrzése" + +msgid "Printing was paused by the user" +msgstr "Nyomtatás szüneteltetve a felhasználó által" + +msgid "Pause of front cover falling" +msgstr "Pause of front cover falling" + +msgid "Calibrating the micro lida" +msgstr "Micro Lidar kalibrálása" + +msgid "Calibrating extrusion flow" +msgstr "Anyagáramlás kalibrálása" + +msgid "Paused due to nozzle temperature malfunction" +msgstr "Szüneteltetve a fúvóka hőmérsékletének rendellenessége miatt" + +msgid "Paused due to heat bed temperature malfunction" +msgstr "Szüneteltetve a tárgyasztal hőmérsékletének rendellenessége miatt" + +msgid "MC" +msgstr "MC" + +msgid "MainBoard" +msgstr "MainBoard" + +msgid "AMS" +msgstr "AMS" + +msgid "TH" +msgstr "TH" + +msgid "XCam" +msgstr "XCam" + +msgid "Unknown" +msgstr "Ismeretlen" + +msgid "Fatal" +msgstr "Súlyos" + +msgid "Serious" +msgstr "Komoly" + +msgid "Common" +msgstr "Gyakori" + +msgid "Update successful." +msgstr "Sikeres frissítés." + +msgid "Downloading failed." +msgstr "Letöltés sikertelen." + +msgid "Verification failed." +msgstr "Sikertelen ellenőrzés." + +msgid "Update failed." +msgstr "A frissítés sikertelen." + +msgid "Failed to start printing job" +msgstr "Nem sikerült elindítani a nyomtatási feladatot" + +msgid "parameter name" +msgstr "" + +msgid "N/A" +msgstr "N/A" + +#, c-format, boost-format +msgid "%s can't be percentage" +msgstr "%s nem lehet százalék" + +msgid "Invalid numeric." +msgstr "Érvénytelen számjegy." + +#, c-format, boost-format +msgid "Value %s is out of range, continue?" +msgstr "Value %s is out of range, continue?" + +msgid "Parameter validation" +msgstr "Paraméter validáció" + +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 "Rétegmagasság" + +msgid "Line Width" +msgstr "Vonalszélesség" + +msgid "Fan Speed" +msgstr "Ventilátor fordulatszám" + +msgid "Temperature" +msgstr "Temperature" + +msgid "Flow" +msgstr "Anyagáramlás" + +msgid "Tool" +msgstr "Tool" + +msgid "Extruder position" +msgstr "Extruder pozíció" + +msgid "Loading G-codes" +msgstr "Loading G-codes" + +msgid "Generating geometry vertex data" +msgstr "Geometriai vertex adatok generálása" + +msgid "Generating geometry index data" +msgstr "Geometriai index adatok generálása" + +msgid "up to" +msgstr "up to" + +msgid "above" +msgstr "above" + +msgid "from" +msgstr "from" + +msgid "to" +msgstr "to" + +msgid "Color Scheme" +msgstr "Színséma" + +msgid "Percent" +msgstr "Százalék" + +msgid "Time" +msgstr "Idő" + +msgid "Display" +msgstr "Megjelenítés" + +msgid "Line type" +msgstr "Vonal típusa" + +msgid "Layer Height (mm)" +msgstr "Rétegmagasság (mm)" + +msgid "Line Width (mm)" +msgstr "Vonalszélesség (mm)" + +msgid "Speed (mm/s)" +msgstr "Sebesség (mm/s)" + +msgid "Fan Speed (%)" +msgstr "Ventilátor fordulatszám (%)" + +msgid "Temperature (°C)" +msgstr "Temperature (°C)" + +msgid "Volumetric flow rate (mm³/s)" +msgstr "Térfogatáramlás (mm³/s)" + +msgid "Used filament" +msgstr "Used filament" + +msgid "Filament N XX" +msgstr "Filament N XX" + +msgid "Color Print" +msgstr "Színes nyomtatás" + +msgid "Comsumption" +msgstr "Felhasználás" + +msgid "Travel" +msgstr "Mozgás" + +msgid "Seams" +msgstr "Varratok" + +msgid "Retract" +msgstr "Visszahúzás" + +msgid "Unretract" +msgstr "Unretract" + +msgid "Filament Changes" +msgstr "Filamentcserék" + +msgid "Wipe" +msgstr "Wipe" + +msgid "Options" +msgstr "Opciók" + +msgid "travel" +msgstr "mozgás" + +msgid "Extruder" +msgstr "Extruder" + +msgid "Filament 1" +msgstr "Filament 1" + +msgid "Flushed filament" +msgstr "Öblített filament" + +msgid "Filament change times" +msgstr "Filamentcserék száma" + +msgid "Color change" +msgstr "Színváltás" + +msgid "Print" +msgstr "Nyomtatás" + +msgid "Pause" +msgstr "Szünet" + +msgid "Printer" +msgstr "Nyomtató" + +msgid "Print settings" +msgstr "Nyomtatási beállítások" + +msgid "Total Estimation" +msgstr "Összesített becslés" + +msgid "Normal mode" +msgstr "Normal mode" + +msgid "Prepare time" +msgstr "Előkészítési idő" + +msgid "Model printing time" +msgstr "Modell nyomtatási ideje" + +msgid "Total" +msgstr "Összesen" + +msgid "Switch to silent mode" +msgstr "Switch to silent mode" + +msgid "Switch to normal mode" +msgstr "Switch to normal mode" + +msgid "Sequence" +msgstr "Sorrend" + +msgid "Mirror Object" +msgstr "Mirror object" + +msgid "Tool Move" +msgstr "Tool move" + +msgid "Move Object" +msgstr "Move object" + +msgid "Auto Orientation options" +msgstr "Automatikus orientáció beállításai" + +msgid "Enable rotation" +msgstr "Forgatás engedélyezése" + +msgid "Optimize support interface area" +msgstr "Optimize support interface area" + +msgid "Orient" +msgstr "Orientáció" + +msgid "Arrange options" +msgstr "Elrendezési lehetőségek" + +msgid "Spacing" +msgstr "Térköz" + +msgid "Auto rotate for arrangement" +msgstr "Automatikus forgatás az elrendezéshez" + +msgid "Allow multiple materials on same plate" +msgstr "Többféle anyag használata egy tálcán" + +msgid "Avoid extrusion calibration region" +msgstr "Extrudáláskalibráció környékének elkerülése" + +msgid "Add" +msgstr "Hozzáadás" + +msgid "Add plate" +msgstr "Tálca hozzáadása" + +msgid "Auto orient" +msgstr "Automatikus orientáció" + +msgid "Arrange all objects" +msgstr "Összes objektum elrendezése" + +msgid "Arrange objects on selected plates" +msgstr "Objektumok elrendezése a kiválasztott tálcákon" + +msgid "Split to objects" +msgstr "Felosztás objektumokra" + +msgid "Split to parts" +msgstr "Felosztás tárgyakra" + +msgid "Assembly View" +msgstr "Összeszerelési nézet" + +msgid "Select Plate" +msgstr "Tálca kiválasztása" + +msgid "Assembly Return" +msgstr "Assembly Return" + +msgid "return" +msgstr "vissza" + +msgid "Paint Toolbar" +msgstr "Festés eszköztár" + +msgid "Explosion Ratio" +msgstr "Robbantási arány" + +msgid "Total Volume:" +msgstr "Total Volume:" + +msgid "Assembly Info" +msgstr "Összeállítási információ" + +msgid "Volume:" +msgstr "Térfogat:" + +msgid "Size:" +msgstr "Méret:" + +msgid "An object is layed over the boundary of plate." +msgstr "Egy objektum a tálca határvonalán túlra került." + +msgid "A G-code path goes beyond the boundary of plate." +msgstr "A G-kód útvonala túlmegy a tálca peremén." + +msgid "Only the object being edit is visible." +msgstr "Csak az éppen szerkesztett objektum látható." + +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 "" +"Egy objektum a tálca határvonalán túlra került, vagy túllépi a magassági " +"határt.\n" +"Kérjük, orvosold a problémát azzal, hogy teljesen a lemezre helyezed és " +"győződj meg, hogy a magassága belefér a nyomtatótérbe." + +msgid "Calibration" +msgstr "Kalibrálás" + +msgid "Calibration program" +msgstr "Kalibrációs 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 "Kalibrációs anyagáramlás" + +msgid "Start Calibration" +msgstr "Kalibrálás" + +msgid "Completed" +msgstr "Befejezve" + +msgid "Calibrating" +msgstr "Kalibrálás" + +msgid "Timelapse" +msgstr "Timelapse" + +msgid "Monitoring Recording" +msgstr "Monitoring Recording" + +msgid "ConnectPrinter(LAN)" +msgstr "Nyomtató csatlakoztatása (LAN)" + +msgid "Please input the printer access code:" +msgstr "Kérjük, add meg a nyomtató hozzáférési kódját:" + +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" +"on the printer, as shown in the figure:" + +msgid "Invalid input." +msgstr "" + +msgid "Application is closing" +msgstr "Az alkalmazás bezárul" + +msgid "Closing Application while some presets are modified." +msgstr "Alkalmazás bezárása egyes beállítások módosítása közben." + +msgid "Logging" +msgstr "Logging" + +msgid "Prepare" +msgstr "Előkészítés" + +msgid "Preview" +msgstr "Előnézet" + +msgid "Device" +msgstr "Nyomtató" + +msgid "Project" +msgstr "Projekt" + +msgid "Slice" +msgstr "Szeletelés" + +msgid "Slice all" +msgstr "Összes szeletelése" + +msgid "Slice plate" +msgstr "Tálca szeletelése" + +msgid "Print all" +msgstr "Összes nyomtatása" + +msgid "Export sliced file" +msgstr "Szeletelt fájl exportálása" + +msgid "Export Sliced File" +msgstr "Szeletelt fájl exportálása" + +msgid "Keyboard Shortcuts" +msgstr "Gyorsbillentyűk" + +msgid "Show the list of the keyboard shortcuts" +msgstr "Gyorsgombok listájának megjelenítése" + +msgid "Setup Wizard" +msgstr "Beállítás varázsló" + +msgid "Show Configuration Folder" +msgstr "Konfigurációs mappa megjelenítése" + +msgid "Check for Update" +msgstr "Frissítés keresése" + +#, c-format, boost-format +msgid "&About %s" +msgstr "&%s névjegye" + +msgid "Default View" +msgstr "Alapértelmezett nézet" + +#. TRN To be shown in the main menu View->Top +msgid "Top" +msgstr "Felül" + +msgid "Top View" +msgstr "Felülnézet" + +#. TRN To be shown in the main menu View->Bottom +msgid "Bottom" +msgstr "Alul" + +msgid "Bottom View" +msgstr "Alsó nézet" + +msgid "Front" +msgstr "Elöl" + +msgid "Front View" +msgstr "Előlnézet" + +msgid "Rear" +msgstr "Hátul" + +msgid "Rear View" +msgstr "Hátulnézet" + +msgid "Left" +msgstr "Bal" + +msgid "Left View" +msgstr "Bal nézet" + +msgid "Right" +msgstr "Jobb" + +msgid "Right View" +msgstr "Jobb nézet" + +msgid "New Project" +msgstr "Új projekt" + +msgid "Start a new project" +msgstr "Új projekt indítása" + +msgid "Open a project file" +msgstr "Projektfájl megnyitása" + +msgid "Recent projects" +msgstr "Legutóbbi projektek" + +msgid "Save Project" +msgstr "Projekt mentése" + +msgid "Save current project to file" +msgstr "Jelenlegi projekt mentése egy fájlba" + +msgid "Save Project as" +msgstr "Projekt mentése másként" + +msgid "Save current project as" +msgstr "Jelenlegi projekt mentése másként" + +msgid "Import 3MF/STL/STEP/OBJ/AMF" +msgstr "3MF/STL/STEP/OBJ/AMF importálása" + +msgid "Load a model" +msgstr "Load a model" + +msgid "Export all objects as STL" +msgstr "Összes objektum exportálása STL-ként" + +msgid "Export current Sliced file" +msgstr "Jelenlegi szeletelt fájl exportálása" + +msgid "Export G-code" +msgstr "G-kód exportálása" + +msgid "Export current plate as G-code" +msgstr "Jelenlegi tálca exportálása G-kódként" + +msgid "Export" +msgstr "Exportálás" + +msgid "Quit" +msgstr "Kilépés" + +msgid "Undo" +msgstr "Visszavonás" + +msgid "Redo" +msgstr "Mégis" + +msgid "Cut selection to clipboard" +msgstr "Kijelölés kivágása a vágólapra" + +msgid "Copy" +msgstr "Másolás" + +msgid "Copy selection to clipboard" +msgstr "Kijelölés másolása a vágólapra" + +msgid "Paste" +msgstr "Beillesztés" + +msgid "Paste clipboard" +msgstr "Beillesztés vágólapról" + +msgid "Delete selected" +msgstr "Kijelölt törlése" + +msgid "Deletes the current selection" +msgstr "Törli a jelenlegi kiválasztást" + +msgid "Delete all" +msgstr "Összes törlése" + +msgid "Deletes all objects" +msgstr "Töröl minden objektumot" + +msgid "Clone selected" +msgstr "Kijelölt klónozása" + +msgid "Clone copies of selections" +msgstr "A kijelölések klónmásolatai" + +msgid "Select all" +msgstr "Összes kijelölése" + +msgid "Selects all objects" +msgstr "Kijelöl minden objektumot" + +msgid "Deselect all" +msgstr "Kijelölés megszüntetése" + +msgid "Deselects all objects" +msgstr "Megszünteti az összes objektum kijelölését" + +msgid "Use Perspective View" +msgstr "Perspektivikus nézet használata" + +msgid "Use Orthogonal View" +msgstr "Ortogonális nézet használata" + +msgid "Preferences" +msgstr "Beállítások" + +msgid "View" +msgstr "Nézet" + +msgid "Help" +msgstr "Segítség" + +msgid "&File" +msgstr "&File" + +msgid "&Edit" +msgstr "" + +msgid "&View" +msgstr "&View" + +msgid "&Help" +msgstr "&Help" + +msgid "&Open G-code" +msgstr "&Open G-code" + +msgid "Open a G-code file" +msgstr "G-kód fájl megnyitása" + +msgid "Re&load from Disk" +msgstr "Re&load from Disk" + +msgid "Reload the plater from disk" +msgstr "Reload the plater from disk" + +msgid "Export &Toolpaths as OBJ" +msgstr "Export &Toolpaths as OBJ" + +msgid "Export toolpaths as OBJ" +msgstr "Szerszámút exportálása OBJ-ként" + +msgid "Open &PrusaSlicer" +msgstr "Open &PrusaSlicer" + +msgid "Open PrusaSlicer" +msgstr "Open PrusaSlicer" + +msgid "&Quit" +msgstr "&Kilépés" + +#, c-format, boost-format +msgid "Quit %s" +msgstr "Kilépés %s" + +msgid "Save configuration as:" +msgstr "Konfiguráció mentése mint:" + +msgid "File is missing" +msgstr "Hiányzik a fájl" + +msgid "The project is no longer available." +msgstr "The project is no longer available." + +msgid "Filament Settings" +msgstr "Filament beállítások" + +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 "" +"Szeretnéd szinkronizálni személyes adataidat a Bambu Cloudból?\n" +"Ezek az adatok a következő információkat tartalmazzák:\n" +"1. Folyamat beállítások\n" +"2. Filament beállítások\n" +"3. Nyomtató beállítások\n" + +msgid "Synchronization" +msgstr "Synchronization" + +msgid "Initialize failed (No Device)!" +msgstr "Sikertelen inicializálás (Nincs eszköz)!" + +msgid "Initializing..." +msgstr "Initializing..." + +#, c-format, boost-format +msgid "Initialize failed [%d]!" +msgstr "Initalization failed [%d]!" + +msgid "Loading..." +msgstr "Loading..." + +msgid "Stopped." +msgstr "Megállítva." + +msgid "Playing..." +msgstr "Lejátszás..." + +#, c-format, boost-format +msgid "Load failed [%d]!" +msgstr "Loading failed [%d]!" + +msgid "3Dconnexion settings" +msgstr "3Dconnexion beállítások" + +msgid "Device:" +msgstr "Eszköz:" + +msgid "Speed:" +msgstr "Sebesség:" + +msgid "Translation" +msgstr "Translation" + +msgid "Zoom" +msgstr "Zoom" + +msgid "Deadzone:" +msgstr "Tiltott zóna:" + +msgid "Options:" +msgstr "Opciók:" + +msgid "Swap Y/Z axes" +msgstr "Swap Y/Z axes" + +msgid "Camera" +msgstr "Kamera" + +msgid "Video" +msgstr "" + +msgid "Printing Progress" +msgstr "Nyomtatás folyamata" + +msgid "Report" +msgstr "Report" + +msgid "Stop" +msgstr "Állj" + +msgid "0%" +msgstr "0%" + +msgid "Clean" +msgstr "" + +msgid "Control" +msgstr "Vezérlés" + +msgid "Print Options" +msgstr "" + +msgid "100%" +msgstr "100%" + +msgid "Lamp" +msgstr "Világítás" + +msgid "Part Cooling" +msgstr "Tárgyhűtés" + +msgid "Aux Cooling" +msgstr "Segédhűtés" + +msgid "Bed" +msgstr "Asztal" + +msgid "Unload" +msgstr "Kitöltés" + +msgid "Debug Info" +msgstr "Hibakeresési infó" + +msgid "Printing List" +msgstr "Nyomtatási lista" + +msgid "Downloading..." +msgstr "Letöltés..." + +msgid "Resume" +msgstr "Folytatás" + +msgid "Silent" +msgstr "Csendes" + +msgid "Standard" +msgstr "Normál" + +msgid "Sport" +msgstr "Sport" + +msgid "Ludicrous" +msgstr "Őrült" + +msgid "Status" +msgstr "Állapot" + +msgid "Media" +msgstr "Media" + +msgid "Update" +msgstr "Update" + +msgid "HMS" +msgstr "HMS" + +msgid "Failed to connect to the server" +msgstr "Nem sikerült csatlakozni a szerverhez" + +msgid "Failed to connect to the printer" +msgstr "Nem sikerült csatlakozni a nyomtatóhoz" + +msgid "Connecting..." +msgstr "Csatlakozás..." + +msgid "OK" +msgstr "OK" + +msgid "Yes" +msgstr "Igen" + +msgid "No" +msgstr "Nem" + +#, c-format, boost-format +msgid "%s error" +msgstr "%s hiba" + +#, c-format, boost-format +msgid "%s has encountered an error" +msgstr "%s hibát észlelt" + +#, c-format, boost-format +msgid "%s warning" +msgstr "%s figyelmeztetés" + +#, c-format, boost-format +msgid "%s has a warning" +msgstr "%s figyelmeztetést tartalmaz" + +#, c-format, boost-format +msgid "%s info" +msgstr "%s infó" + +#, c-format, boost-format +msgid "%s information" +msgstr "%s információ" + +msgid "Download" +msgstr "Letöltés" + +msgid "Skip" +msgstr "Kihagyás" + +msgid "3D Mouse disconnected." +msgstr "3D Mouse csatlakoztatva." + +msgid "Configuration can update now." +msgstr "A konfiguráció már frissíthető." + +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 "Undo integration failed." +msgstr "Undo integration failed." + +msgid "Exporting." +msgstr "Exportálás." + +msgid "Software has New version." +msgstr "Új szoftververzió érhető el." + +msgid "Goto download page." +msgstr "Látogass el a letöltési oldalra." + +msgid "More" +msgstr "Több" + +msgid "Open Folder." +msgstr "Mappa megnyitása." + +#, c-format, boost-format +msgid "%1$d Object has custom supports." +msgid_plural "%1$d Objects have custom supports." +msgstr[0] "%1$d objektum egyedi támaszokat tartalmaz." +msgstr[1] "%1$d objektum egyedi támaszokat tartalmaz." + +#, c-format, boost-format +msgid "%1$d Object has color painting." +msgid_plural "%1$d Objects have color painting." +msgstr[0] "%1$d objektum színfestést tartalmaz." +msgstr[1] "%1$d objektum színfestést tartalmaz." + +msgid "Slice ok." +msgstr "Szeletelés kész." + +msgid "Export G-Code." +msgstr "G-kód exportálása." + +msgid "Export." +msgstr "Exportálás." + +msgid "Jump to" +msgstr "Jump to" + +msgid "Error:" +msgstr "Hiba:" + +msgid "Warning:" +msgstr "Figyelem:" + +msgid "Export ok." +msgstr "Exportálás kész." + +msgid " (Repair)" +msgstr " (Javítás)" + +msgid " Click here to install it." +msgstr " Kattints ide a telepítéshez." + +msgid "WARNING:" +msgstr "WARNING:" + +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-kód útvonal átfedés" + +msgid "Support painting" +msgstr "Támasz festése" + +msgid "Color painting" +msgstr "Színfestés" + +msgid "Layers" +msgstr "Layers" + +msgid "Range" +msgstr "Tartomány" + +msgid "default" +msgstr "alapértelmezett" + +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 "Kérjük, frissítsd a grafikus kártya illesztőprogramját." + +msgid "Unsupported OpenGL version" +msgstr "Unsupported OpenGL version" + +#, c-format, boost-format +msgid "" +"Unable to load shaders:\n" +"%s" +msgstr "" +"Unable to load shaders:\n" +"%s" + +msgid "Error loading shaders" +msgstr "Hiba a shaderek betöltésében" + +msgctxt "Layers" +msgid "Top" +msgstr "Felső" + +msgctxt "Layers" +msgid "Bottom" +msgstr "Alsó" + +msgid "Spaghetti Detection" +msgstr "" + +msgid "Stop printing when spaghetti detected" +msgstr "" + +msgid "First Layer Inspection" +msgstr "" + +msgid "Switch to per-object setting mode to edit modifier settings." +msgstr "Switch to per-object setting mode to edit modifier settings." + +msgid "Don't show again" +msgstr "Ne mutasd újra" + +msgid "Global" +msgstr "Globális" + +msgid "Objects" +msgstr "Tárgyak" + +msgid "Advance" +msgstr "Haladó" + +msgid "Compare presets" +msgstr "Beállítások összehasonlítása" + +msgid "View all object's settings" +msgstr "View all object's settings" + +msgid "Filament settings" +msgstr "Filament beállítások" + +msgid "Printer settings" +msgstr "Nyomtató beállítások" + +#, boost-format +msgid " plate %1%:" +msgstr " %1% tálca:" + +msgid "Invalid name, the following characters are not allowed:" +msgstr "Invalid name, the following characters are not allowed:" + +msgid "Sliced Info" +msgstr "Szeletelési infó" + +msgid "Used Filament (m)" +msgstr "Used Filament (m)" + +msgid "Used Filament (mm³)" +msgstr "Used Filament (mm³)" + +msgid "Used Filament (g)" +msgstr "Used Filament (g)" + +msgid "Used Materials" +msgstr "Used Materials" + +msgid "Cost" +msgstr "Költség" + +msgid "Estimated time" +msgstr "Becsült idő" + +msgid "Filament changes" +msgstr "Filamentcserék" + +msgid "Click to edit preset" +msgstr "Kattints a beállítás szerkesztéséhez" + +msgid "Bed type" +msgstr "Asztaltípus" + +msgid "Flushing volumes" +msgstr "Öblítési mennyiségek" + +msgid "Untitled" +msgstr "Untitled" + +#, boost-format +msgid "Do you want to save changes to \"%1%\"?" +msgstr "Szeretnéd elmenteni \"%1%\" változásait?" + +msgid "Previous unsaved project detected, do you want to restore it?" +msgstr "Korábbi, nem mentett projektet találtunk, vissza szeretnéd állítani?" + +msgid "Restore" +msgstr "Visszaállítás" + +#, 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'd better upgrade your software.\n" + +msgid "Newer 3mf version" +msgstr "Newer 3mf version" + +msgid "The 3mf is not compatible, load geometry data only!" +msgstr "" + +msgid "Incompatible 3mf" +msgstr "Nem kompatibilis 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 "Figyelem!" + +#, boost-format +msgid "Failed loading file \"%1%\". An invalid configuration was found." +msgstr "Nem sikerült betölteni \"%1%\" fájlt. Érvénytelen konfiguráció." + +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 "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 "STL fájl exportálása:" + +msgid "Save file as:" +msgstr "Fájl mentése mint:" + +msgid "The selected object couldn't be split." +msgstr "The selected object couldn't be split." + +msgid "Another export job is running." +msgstr "Egy másik exportálási feladat is fut." + +msgid "Please select a file" +msgstr "Kérjük, válassz egy fájlt" + +msgid "Slicing" +msgstr "Szeletelés" + +msgid "There are warnings after slicing models:" +msgstr "There are warnings after slicing models:" + +msgid "warnings" +msgstr "warnings" + +msgid "Invalid data" +msgstr "Invalid data" + +#, c-format, boost-format +msgid "Slicing Plate %d" +msgstr "%d tálca szeletelése" + +msgid "Please resolve the slicing errors and publish again." +msgstr "Kérjük, orvosold a szeletelési hibákat, és próbáld meg újra." + +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 "" +"Csak előnézeti mód:\n" +"A betöltött fájl csak G-kódot tartalmaz, nem lehet továbblépni az " +"Előkészítés fülre" + +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 "Új projekt létrehozása" + +msgid "Load project" +msgstr "Load project" + +msgid "The selected file" +msgstr "The selected file" + +msgid "does not contain valid gcode." +msgstr "nem tartalmaz érvényes G-kódot." + +msgid "Error occurs while loading G-code file" +msgstr "Hiba a G-kód betöltésének során" + +msgid "Drop project file" +msgstr "Projekt fájl elvetése" + +msgid "Please select an action" +msgstr "Kérjük, válassz ki egy műveletet" + +msgid "Open as project" +msgstr "Megnyitás projektként" + +msgid "Import geometry only" +msgstr "Csak a geometria importálása" + +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 betöltése" + +msgid "G-code files can not be loaded with models together!" +msgstr "A G-code fájlokat nem lehet a modellekkel együtt betölteni!" + +msgid "Can not add models when in preview mode!" +msgstr "Előnézeti módban nem lehet modelleket hozzáadni!" + +msgid "Add Models" +msgstr "Modellek hozzáadása" + +msgid "All objects will be removed, continue?" +msgstr "Minden tárgyat eltávolítunk, folytatod?" + +msgid "The current project has unsaved changes, save it before continue?" +msgstr "" +"Az aktuális projektben el nem mentett módosítások vannak, mentsük el a " +"folytatás előtt?" + +msgid "Save" +msgstr "Mentés" + +msgid "Number of copies:" +msgstr "Másolatok száma:" + +msgid "Copies of the selected object" +msgstr "Kijelölt objektum másolatai" + +msgid "Save G-code file as:" +msgstr "G-kód fájl mentése mint:" + +msgid "Save Sliced file as:" +msgstr "Szeletelt fájl mentése mint:" + +msgid "" +"Print By Object: \n" +"Suggest to use auto-arrange to avoid collisions when printing." +msgstr "" +"Nyomtatás tárgyanként: \n" +"Javasoljuk, hogy használd az automatikus elrendezést az ütközések elkerülése " +"érdekében." + +msgid "Send G-code" +msgstr "G-kód küldése" + +msgid "Send to printer" +msgstr "Nyomtatóra küldés" + +msgid "Custom supports and color painting were removed before repairing." +msgstr "" +"Az egyedi támaszok és a színfestés eltávolításra került a javítást előtt." + +msgid "Invalid number" +msgstr "Invalid number" + +#, boost-format +msgid "Part name: %1%\n" +msgstr "Tárgy név: %1%\n" + +#, boost-format +msgid "Object name: %1%\n" +msgstr "Objektum neve: %1%\n" + +#, boost-format +msgid "Size: %1% x %2% x %3% in\n" +msgstr "Méret: %1% x %2% x %3% in\n" + +#, boost-format +msgid "Size: %1% x %2% x %3% mm\n" +msgstr "Méret: %1% x %2% x %3% mm\n" + +#, boost-format +msgid "Volume: %1% in³\n" +msgstr "Térfogat: %1% in³\n" + +#, boost-format +msgid "Volume: %1% mm³\n" +msgstr "Térfogat: %1% mm³\n" + +#, boost-format +msgid "Triangles: %1%\n" +msgstr "Háromszögek: %1%\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 "Szeretnéd folytatni?" + +msgid "Language selection" +msgstr "Language selection" + +msgid "Switching application language while some presets are modified." +msgstr "Switching application language while some presets are modified." + +msgid "Changing application language" +msgstr "Alkalmazás nyelvének megváltoztatása" + +msgid "Changing the region will log out your account.\n" +msgstr "A régió megváltoztatásával a fiókod kijelentkezik.\n" + +msgid "Region selection" +msgstr "Régió kiválasztása" + +msgid "Second" +msgstr "Másodperc" + +msgid "General Settings" +msgstr "Általános beállítások" + +msgid "Asia-Pacific" +msgstr "Ázsia-Csendes-óceáni térség" + +msgid "China" +msgstr "Kína" + +msgid "Europe" +msgstr "Európa" + +msgid "North America" +msgstr "Észak-Amerika" + +msgid "Others" +msgstr "Egyéb" + +msgid "Login Region" +msgstr "Régió" + +msgid "Metric" +msgstr "Metrikus" + +msgid "Imperial" +msgstr "Angolszász" + +msgid "Units" +msgstr "Mértékegység" + +msgid "User sync" +msgstr "Felhasználói szinkronizálás" + +msgid "Auto sync user presets(Printer/Filament/Process)" +msgstr "" +"Felhasználói beállítások automatikus szinkronizálása (Nyomtató/Filament/" +"Folyamat)" + +msgid "User Sync" +msgstr "User Sync" + +msgid "Associate files to BambuStudio" +msgstr "Fájlok társítása a BambuStudiohoz" + +msgid "Associate .3mf files to BambuStudio" +msgstr ".3mf fájlok társítása a BambuStudiohoz" + +msgid "If enabled, sets BambuStudio as default application to open .3mf files" +msgstr "" +"Ha engedélyezve van, a BambuStudio-t állítja be alapértelmezett " +"alkalmazásként a .3mf fájlok megnyitásához" + +msgid "Associate .stl files to BambuStudio" +msgstr ".stl fájlok társítása a BambuStudiohoz" + +msgid "If enabled, sets BambuStudio as default application to open .stl files" +msgstr "" +"Ha engedélyezve van, a BambuStudio-t állítja be alapértelmezett " +"alkalmazásként az .stl fájlok megnyitásához" + +msgid "Associate .step/.stp files to BambuStudio" +msgstr ".step/.stp fájlok társítása a BambuStudiohoz" + +msgid "If enabled, sets BambuStudio as default application to open .step files" +msgstr "" +"Ha engedélyezve van, a BambuStudio-t állítja be alapértelmezett " +"alkalmazásként a .step fájlok megnyitásához" + +msgid "Backup" +msgstr "Biztonsági mentés" + +msgid "Auto-Backup" +msgstr "Automatikus biztonsági mentés" + +msgid "Backup interval" +msgstr "Intervallum" + +msgid "Home page and daily tips" +msgstr "Kezdőoldal és napi tippek" + +msgid "Show home page on startup" +msgstr "Kezdőlap megjelenítése indításkor" + +msgid "Sync settings" +msgstr "Sync settings" + +msgid "Preset sync" +msgstr "Beállítások szinkronizálása" + +msgid "Preferences sync" +msgstr "Beállítások szinkronizálása" + +msgid "View control settings" +msgstr "View control settings" + +msgid "Rotate of view" +msgstr "Nézet elforgatása" + +msgid "Move of view" +msgstr "Pan View" + +msgid "Zoom of view" +msgstr "Zoom View" + +msgid "Other" +msgstr "Egyéb" + +msgid "Mouse wheel reverses when zooming" +msgstr "Reverse scroll direction while zooming" + +msgid "Develop mode" +msgstr "Fejlesztői mód" + +msgid "Dump video" +msgstr "Dump video" + +msgid "Log Level" +msgstr "Log Level" + +msgid "fatal" +msgstr "súlyos" + +msgid "error" +msgstr "hiba" + +msgid "warning" +msgstr "warning" + +msgid "info" +msgstr "info" + +msgid "debug" +msgstr "debug" + +msgid "trace" +msgstr "trace" + +msgid "Host Setting" +msgstr "Host beállítás" + +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 mentés gomb" + +msgid "save debug settings" +msgstr "save debug settings" + +msgid "DEBUG settings have saved successfully!" +msgstr "DEBUG beállítások sikeresen elmentve!" + +msgid "Switch cloud environment, Please login again!" +msgstr "" + +msgid "System presets" +msgstr "System presets" + +msgid "User presets" +msgstr "User presets" + +msgid "Incompatible presets" +msgstr "Nem kompatibilis beállítások" + +msgid "AMS filaments" +msgstr "AMS filamentek" + +msgid "Click to pick filament color" +msgstr "Kattints a filament szín kiválasztásához" + +msgid "Add/Remove presets" +msgstr "Beállítások hozzáadása/eltávolítása" + +msgid "Edit preset" +msgstr "Beállítás módosítása" + +msgid "Project-inside presets" +msgstr "Projekten belüli beállítások" + +msgid "Slice all plate to obtain time and filament estimation" +msgstr "Szeleteld fel az összes tálcát az idő és a filament becsléséhez" + +msgid "Packing project data into 3mf file" +msgstr "Projektadatok csomagolása 3mf fájlba" + +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 "Közzététel" + +msgid "Publish was cancelled" +msgstr "A közzététel törlésre került" + +msgid "Slicing Plate 1" +msgstr "1. tálca szeletelése" + +msgid "Packing data to 3mf" +msgstr "Adatok csomagolása 3mf-be" + +msgid "Jump to webpage" +msgstr "Jump to webpage" + +#, c-format, boost-format +msgid "Save %s as" +msgstr "%s mentése" + +msgid "User Preset" +msgstr "Felhasználói beállítás" + +msgid "Project Inside Preset" +msgstr "Projekt a beállításon belül" + +msgid "Name is invalid;" +msgstr "Name is invalid;" + +msgid "illegal characters:" +msgstr "tiltott karakterek:" + +msgid "illegal suffix:" +msgstr "tiltott utótag:" + +msgid "Name is unavailable." +msgstr "Name is unavailable." + +msgid "Overwrite a system profile is not allowed" +msgstr "A rendszerprofil felülírása nem engedélyezett" + +#, boost-format +msgid "Preset \"%1%\" already exists." +msgstr "A(z) \"%1%\" már létezik." + +#, boost-format +msgid "Preset \"%1%\" already exists and is incompatible with current printer." +msgstr "A(z) \"%1%\" már létezik és nem kompatibilis a jelenlegi nyomtatóval." + +msgid "Please note that saving action will replace this preset" +msgstr "Figyelem, a mentési művelet lecseréli ezt a beállítást" + +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 "The name cannot be the same as a preset alias name." + +msgid "Save preset" +msgstr "Beállítás mentése" + +msgctxt "PresetName" +msgid "Copy" +msgstr "Másolás" + +#, boost-format +msgid "Printer \"%1%\" is selected with preset \"%2%\"" +msgstr "\"%1%\" nyomtató kiválasztva a következő beállítással: \"%2%\"" + +#, boost-format +msgid "Please choose an action with \"%1%\" preset after saving." +msgstr "Kérjük, válassz egy műveletet a(z) \"%1%\" beállítással a mentés után." + +#, 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 "Csak válts a(z) \"%1%\"-ra" + +msgid "Online" +msgstr "Online" + +msgid "Offline" +msgstr "Offline" + +msgid "My Device" +msgstr "Saját eszköz" + +msgid "Other Device" +msgstr "Egyéb eszköz" + +msgid "Input access code" +msgstr "Input access code" + +msgid "Log out successful." +msgstr "Log out successful." + +msgid "Busy" +msgstr "Elfoglalt" + +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 "Nyomtatási feladat küldése" + +msgid "Refresh" +msgstr "Frissítés" + +msgid "Bed Leveling" +msgstr "Asztalszintezés" + +msgid "Flow Calibration" +msgstr "Anyagáramlás kalibráció" + +msgid "Send" +msgstr "Küldés" + +msgid "send completed" +msgstr "küldés befejezve" + +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 "Csatlakozás a szerverhez" + +msgid "Synchronizing device information" +msgstr "Synchronizing device information" + +msgid "Synchronizing device information time out" +msgstr "Synchronizing device information time out" + +msgid "Cannot send the print task when the upgrade is in progress" +msgstr "" +"Nem küldhetsz nyomtatási feladatot a nyomtatóra, amikor frissítés van " +"folyamatban" + +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 "Preparing print job" +msgstr "Nyomtatási feladat előkészítése" + +msgid "Modifying the device name" +msgstr "Modifying the device name" + +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 "Kérjük, előbb jelentkezz be." + +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 "Sikertelen kijelentkezés." + +#. TRN "Save current Settings" +#, c-format, boost-format +msgid "Save current %s" +msgstr "Jelenlegi %s mentése" + +msgid "Delete this preset" +msgstr "Ezen beállítás törlése" + +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 "Nyomtatott vonal szélessége" + +msgid "Seam" +msgstr "Varrat" + +msgid "Precision" +msgstr "Pontosság" + +msgid "Walls" +msgstr "Falak" + +msgid "Top/bottom shells" +msgstr "Felső/alsó héjak" + +msgid "Initial layer speed" +msgstr "Kezdőréteg sebessége" + +msgid "Other layers speed" +msgstr "Többi réteg sebessége" + +msgid "Overhang speed" +msgstr "Sebesség túlnyúlásnál" + +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 "Mozgás sebessége" + +msgid "Acceleration" +msgstr "Gyorsulás" + +msgid "Support filament" +msgstr "Filament a támaszhoz" + +msgid "Prime tower" +msgstr "Törlő torony" + +msgid "Flush options" +msgstr "Öblítési lehetőségek" + +msgid "Special mode" +msgstr "Speciális mód" + +msgid "G-code output" +msgstr "G-kód kimenet" + +msgid "Frequent" +msgstr "Gyakori" + +#, 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] "" +"A következő sor foglalt kulcsszavakat tartalmaz: %s.\n" +"Kérjük, távolítsd el, vagy különben problémát fog okozni a G-kód " +"megjelenítésében és a nyomtatási idő becslésében." +msgstr[1] "" +"A következő sorok foglalt kulcsszavakat tartalmaz: %s.\n" +"Kérjük, távolítsd el, vagy különben problémát fog okozni a G-kód " +"megjelenítésében és a nyomtatási idő becslésében." + +msgid "Reserved keywords found" +msgstr "Foglalt kulcsszavakat találtunk" + +msgid "Setting Overrides" +msgstr "Beállítások felülbírálása" + +msgid "Retraction" +msgstr "Visszahúzás" + +msgid "Basic information" +msgstr "Alapinformációk" + +msgid "Recommended nozzle temperature" +msgstr "Ajánlott fúvóka hőmérséklet" + +msgid "Recommended nozzle temperature range of this filament. 0 means no set" +msgstr "" +"Az ajánlott fúvóka hőmérséklet-tartomány ehhez a filamenthez. A 0 azt " +"jelenti, hogy nincs beállítva" + +msgid "Recommended temperature range" +msgstr "Ajánlott hőmérséklet-tartomány" + +msgid "Print temperature" +msgstr "Nyomtatási hőmérséklet" + +msgid "Nozzle" +msgstr "Fúvóka" + +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 "" +"Asztalhőmérséklet a hideg tálca használatával. A 0 érték azt jelenti, hogy a " +"filament nem támogatja a Cool Plate-re történő nyomtatást" + +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 "" +"Asztalhőmérséklet a mérnöki tálca használatával. A 0 érték azt jelenti, hogy " +"a filament nem támogatja az Engineering Plate-re történő nyomtatást" + +msgid "High Temp Plate" +msgstr "High Temp 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 "" +"Asztalhőmérséklet a magas hőmérsékletű tálca használatával. A 0 érték azt " +"jelenti, hogy a filament nem támogatja a High Temp Plate-re történő " +"nyomtatást" + +msgid "Volumetric speed limitation" +msgstr "Volumetrikus sebességhatár" + +msgid "Cooling" +msgstr "Hűtés" + +msgid "Cooling for specific layer" +msgstr "Hűtés a megadott rétegtől" + +msgid "Part cooling fan" +msgstr "Tárgyhűtő ventilátor" + +msgid "Min fan speed threshold" +msgstr "Min. ventilátor fordulatszám" + +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 "" +"A tárgyhűtő ventilátor akkor kezd el min. fordulatszámon működni, amikor a " +"becsült rétegidő nem hosszabb, mint a rétegidő a beállítoskban. Ha a " +"rétegidő rövidebb a küszöbértéknél, a ventilátor fordulatszáma a " +"rétegnyomtatási időnek megfelelően skálázódik a minimális és maximális " +"ventilátor fordulatszám között" + +msgid "Max fan speed threshold" +msgstr "Max. ventilátor fordulatszám" + +msgid "" +"Part cooling fan speed will be max when the estimated layer time is shorter " +"than the setting value" +msgstr "" +"A tárgyhűtő ventilátor fordulatszáma a maximális lesz, ha a becsült rétegidő " +"rövidebb, mint a beállított érték" + +msgid "Auxiliary part cooling fan" +msgstr "Kiegészítő tárgyhűtő ventilátor" + +msgid "Filament start G-code" +msgstr "Filament kezdő G-kód" + +msgid "Filament end G-code" +msgstr "Filament befejező G-kód" + +msgid "Printable space" +msgstr "Nyomtatási terület" + +msgid "Accessory" +msgstr "Tartozékok" + +msgid "Machine gcode" +msgstr "Gép G-kód" + +msgid "Machine start G-code" +msgstr "Gép kezdő G-kód" + +msgid "Machine end G-code" +msgstr "Gép befejező G-kód" + +msgid "Before layer change G-code" +msgstr "Rétegváltás előtti G-kód" + +msgid "Layer change G-code" +msgstr "Rétegváltás G-kód" + +msgid "Change filament G-code" +msgstr "Filament csere G-kód" + +msgid "Pause G-code" +msgstr "Szünet G-kód" + +msgid "Motion ability" +msgstr "Géplimitek" + +msgid "Normal" +msgstr "Normal" + +msgid "Speed limitation" +msgstr "Sebesség limitek" + +msgid "Acceleration limitation" +msgstr "Gyorsulási limitek" + +msgid "Jerk limitation" +msgstr "Jerk limitek" + +msgid "Layer height limits" +msgstr "Layer height limits" + +msgid "Retraction when switching material" +msgstr "Visszahúzás anyagváltáskor" + +msgid "Detached" +msgstr "Detached" + +msgid "Following preset will be deleted too." +msgid_plural "Following presets will be deleted too." +msgstr[0] "A következő beállítás szintén törlődni fog." +msgstr[1] "A következő beállítások szintén törlődni fognak." + +#, 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% beállítás" + +msgid "All" +msgstr "Összes" + +msgid "Set" +msgstr "Beállít" + +msgid "Custom G-code" +msgstr "Egyedi G-kód" + +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 "" +"Kattints a gombra az aktuális módosítás elvetéséhez és a mentett értékre " +"való visszaállításhoz." + +msgid "Process Settings" +msgstr "Folyamatbeállítások" + +msgid "Undef" +msgstr "Undefined" + +msgid "Unsaved Changes" +msgstr "unsaved changes" + +msgid "Discard or Keep changes" +msgstr "Változások elvetése vagy megtartása" + +msgid "Old Value" +msgstr "Régi érték" + +msgid "New Value" +msgstr "Új érték" + +msgid "Transfer" +msgstr "Transfer" + +msgid "Don't save" +msgstr "Ne mentsd" + +msgid "Discard" +msgstr "Elvetés" + +msgid "Click the right mouse button to display the full text." +msgstr "Kattints a jobb egérgombbal a teljes szöveg megjelenítéséhez." + +msgid "All changes will not be saved" +msgstr "A módosítások nem kerülnek mentésre" + +msgid "All changes will be discarded." +msgstr "Minden változtatás el lesz vetve." + +msgid "Save the selected options." +msgstr "A kiválasztott beállítások mentése." + +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 "" +"A kiválasztott beállítások mentése előbeállításba\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 "" +"A(z) \"%1%\" beállítás a következő elmentetlen változásokat tartalmazza:" + +#, boost-format +msgid "" +"Preset \"%1%\" is not compatible with the new printer profile and it " +"contains the following unsaved changes:" +msgstr "" +"A(z) \"%1%\" beállítás nem kompatibilis az új nyomtató profillal és a " +"következő elmentetlen változásokat tartalmazza:" + +#, boost-format +msgid "" +"Preset \"%1%\" is not compatible with the new process profile and it " +"contains the following unsaved changes:" +msgstr "" +"A(z) \"%1%\" beállítás nem kompatibilis az új folyamat profillal és a " +"következő elmentetlen változásokat tartalmazza:" + +msgid "" +"You have changed some preset settings. \n" +"Would you like to keep these changed settings after switching preset?" +msgstr "" +"Megváltoztattál néhány beállítást.\n" +"Szeretnéd megtartani ezeket a megváltozott beállításokat az előbeállítás " +"váltás után?" + +msgid "Extruders count" +msgstr "Extruderek száma" + +msgid "General" +msgstr "Általános" + +msgid "Capabilities" +msgstr "Képességek" + +msgid "Set as cover" +msgstr "Beállítás borítóként" + +msgid "Cover" +msgstr "Lefedés" + +#, boost-format +msgid "The name \"%1%\" already exists." +msgstr "The name \"%1%\" already exists." + +msgid "Basic Info" +msgstr "Alapinformáció" + +msgid "Pictures" +msgstr "Képek" + +msgid "Bill of Materials" +msgstr "Alkatrészlista" + +msgid "Assembly Guide" +msgstr "Összeszerelési útmutató" + +msgid "Choose files" +msgstr "Fájlok kiválasztása" + +msgid "Designer" +msgstr "Tervező" + +msgid "Model Name" +msgstr "Model Name" + +#, c-format, boost-format +msgid "%s Update" +msgstr "%s frissítés" + +msgid "A new version is available" +msgstr "Új verzió érhető el" + +msgid "Configuration update" +msgstr "Konfiguráció frissítés" + +msgid "A new configuration package available, Do you want to install it?" +msgstr "Új konfigurációs csomag elérhető, szeretnéd telepíteni?" + +msgid "Description:" +msgstr "Leírás:" + +msgid "Configuration incompatible" +msgstr "Nem kompatibilis konfiguráció" + +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 "Kilépés %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 "Konfiguráció frissítések" + +msgid "No updates available." +msgstr "No updates available." + +msgid "The configuration is up to date." +msgstr "The configuration is up to date." + +msgid "Auto-Calc" +msgstr "Automatikus számítás" + +msgid "Flushing volumes for filament change" +msgstr "Filament csere öblítési mennyisége" + +msgid "Flushing volume (mm³) for each filament pair." +msgstr "Egyes filament párok öblítési mennyisége (mm³)." + +msgid "Flush multiplier" +msgstr "Öblítési szorzó" + +msgid "unloaded" +msgstr "unloaded" + +msgid "loaded" +msgstr "loaded" + +msgid "Filament #" +msgstr "Filament #" + +msgid "From" +msgstr "From" + +msgid "To" +msgstr "To" + +msgid "Login" +msgstr "Bejelentkezés" + +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 "Konfigurációs csomag megváltozott" + +msgid "Toolbar" +msgstr "Toolbar" + +msgid "Objects list" +msgstr "Objects list" + +msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." +msgstr "Geometriai adatok importálása STL/STEP/3MF/OBJ/AMF fájlokból." + +msgid "Copy to clipboard" +msgstr "Másolás a vágólapra" + +msgid "Paste from clipboard" +msgstr "Beillesztés a vágólapról" + +msgid "Show keyboard shortcuts list" +msgstr "Gyorsgombok listájának megjelenítése" + +msgid "Global shortcuts" +msgstr "Globális gyorsbillentyűk" + +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 "" +"Automatikusan beállítja a kijelölt objektumok vagy az összes objektum " +"tájolását. Ha vannak kijelölt objektumok, akkor csak a kijelölteket, " +"ellenkező esetben az aktuális tálcán lévő összes objektumot orientálja." + +msgid "Collapse/Expand the sidebar" +msgstr "Az oldalsáv összecsukása/kinyitása" + +msgid "⌘+Any arrow" +msgstr "⌘+Bármilyen nyíl gomb" + +msgid "Movement in camera space" +msgstr "Movement in camera space" + +msgid "⌥+Left mouse button" +msgstr "" + +msgid "Select a part" +msgstr "" + +msgid "⌘+Left mouse button" +msgstr "⌘+Bal egérgomb" + +msgid "Select multiple objects" +msgstr "Több objektum kijelölése" + +msgid "Ctrl+Any arrow" +msgstr "Ctrl+Bármelyik nyílgomb" + +msgid "Alt+Left mouse button" +msgstr "" + +msgid "Ctrl+Left mouse button" +msgstr "Ctrl+Bal egérgomb" + +msgid "Shift+Left mouse button" +msgstr "Shift+Bal egérgomb" + +msgid "Select objects by rectangle" +msgstr "Objektumok kijelölése téglalapok alapján" + +msgid "Arrow Up" +msgstr "Felfelé nyíl" + +msgid "Move selection 10 mm in positive Y direction" +msgstr "Move selection 10mm in positive Y direction" + +msgid "Arrow Down" +msgstr "Lefelé nyíl" + +msgid "Move selection 10 mm in negative Y direction" +msgstr "Move selection 10mm in negative Y direction" + +msgid "Arrow Left" +msgstr "Balra nyíl" + +msgid "Move selection 10 mm in negative X direction" +msgstr "Move selection 10mm in negative X direction" + +msgid "Arrow Right" +msgstr "Jobbra nyíl" + +msgid "Move selection 10 mm in positive X direction" +msgstr "Move selection 10mm in positive X direction" + +msgid "Shift+Any arrow" +msgstr "Shift+Bármelyik nyílgomb" + +msgid "Movement step set to 1 mm" +msgstr "Movement step set to 1mm" + +msgid "keyboard 1-9: set filament for object/part" +msgstr "filament hozzárendelése az objektumhoz/tárgyhoz" + +msgid "Camera view - Default" +msgstr "Kameranézet - Alapértelmezett" + +msgid "Camera view - Top" +msgstr "Kameranézet - Felülről" + +msgid "Camera view - Bottom" +msgstr "Kameranézet - Alulról" + +msgid "Camera view - Front" +msgstr "Kameranézet - Elölről" + +msgid "Camera view - Behind" +msgstr "Kameranézet - Hátulról" + +msgid "Camera Angle - Left side" +msgstr "Kameranézet - Bal oldal" + +msgid "Camera Angle - Right side" +msgstr "Kameranézet - Jobb oldal" + +msgid "Select all objects" +msgstr "Összes objektum kijelölése" + +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 "Plater" + +msgid "Move: press to snap by 1mm" +msgstr "Move: press to snap by 1mm" + +msgid "⌘+Mouse wheel" +msgstr "⌘+Egérgörgő" + +msgid "Support/Color Painting: adjust pen radius" +msgstr "Support/Color Painting: adjust pen radius" + +msgid "Support/Color Painting: adjust section position" +msgstr "Support/Color Painting: adjust section position" + +msgid "Ctrl+Mouse wheel" +msgstr "Ctrl+Egérgörgő" + +msgid "Alt+Mouse wheel" +msgstr "Alt+Egérgörgő" + +msgid "Gizmo" +msgstr "Gizmo" + +msgid "Set extruder number for the objects and parts" +msgstr "Extruder szám beállítása az objektumok és tárgyak számára" + +msgid "Delete objects, parts, modifiers " +msgstr "Objektumok, tárgyak, módosítók törlése " + +msgid "Space" +msgstr "Space" + +msgid "Select the object/part and press space to change the name" +msgstr "" +"Válaszd ki az objektumot/tárgyat, és nyomd meg a szóközt a név " +"megváltoztatásához" + +msgid "Mouse click" +msgstr "Mouse click" + +msgid "Select the object/part and mouse click to change the name" +msgstr "" +"Válaszd ki az objektumot/tárgyat, és kattints az egérrel a név " +"megváltoztatásához" + +msgid "Objects List" +msgstr "Objects List" + +msgid "Vertical slider - Move active thumb Up" +msgstr "Vertical slider - Move active thumb Up" + +msgid "Vertical slider - Move active thumb Down" +msgstr "Vertical slider - Move active thumb Down" + +msgid "Horizontal slider - Move active thumb Left" +msgstr "Horizontal slider - Move active thumb Left" + +msgid "Horizontal slider - Move active thumb Right" +msgstr "Horizontal slider - Move active thumb Right" + +msgid "On/Off one layer mode of the vertical slider" +msgstr "On/Off one layer mode of the vertical slider" + +msgid "Move slider 5x faster" +msgstr "Move slider 5x faster" + +msgid "Shift+Mouse wheel" +msgstr "Shift+Egérgörgő" + +msgid "Saving objects into the 3mf failed." +msgstr "Az objektumok mentése a 3mf-be sikertelen volt." + +msgid "Only Windows 10 is supported." +msgstr "Csak a Windows 10 támogatott." + +msgid "Failed to initialize the WinRT library." +msgstr "Nem sikerült a WinRT könyvtár inicializálása." + +msgid "Exporting objects" +msgstr "Objektumok exportálása" + +msgid "Failed loading objects." +msgstr "Nem sikerült betölteni az objektumokat." + +msgid "Repairing object by Windows service" +msgstr "Objektum javítása Windows szolgáltatással" + +msgid "Repair failed." +msgstr "Sikertelen javítás." + +msgid "Loading repaired objects" +msgstr "Loading repaired objects" + +msgid "Exporting 3mf file failed" +msgstr "3MF fájl exportálása sikertelen" + +msgid "Import 3mf file failed" +msgstr "3mf fájl importálása sikertelen" + +msgid "Repaired 3mf file does not contain any object" +msgstr "A megjavított 3mf fájl nem tartalmaz objektumot" + +msgid "Repaired 3mf file contains more than one object" +msgstr "A megjavított 3mf fájl egynél több objektumot tartalmaz" + +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 "Javítás befejezve" + +msgid "Repair canceled" +msgstr "Javítás megszakítva" + +#, boost-format +msgid "Copying of file %1% to %2% failed: %3%" +msgstr "%1% fájl másolása sikertelen a következő helyre: %2% Hiba: %3%" + +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "%1% mappa másolása sikertelen a következő helyre: %2% Hiba: %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 "Konfigurációs csomag frissítve a következőre " + +msgid "Open G-code file:" +msgstr "Open G-code file:" + +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 "" +"Nem sikerült a G-kód generálása érvénytelen egyedi G-kód miatt.\n" +"\n" + +msgid "Please check the custom G-code or use the default custom G-code." +msgstr "" +"Kérjük, ellenőrizd az egyedi G-kódot vagy használd az alapértelmezett egyedi " +"G-kódot." + +#, boost-format +msgid "Generating G-code: layer %1%" +msgstr "G-kód generálása: %1% réteg" + +msgid "Inner wall" +msgstr "Belső fal" + +msgid "Outer wall" +msgstr "Külső fal" + +msgid "Overhang wall" +msgstr "Túlnyúló fal" + +msgid "Sparse infill" +msgstr "Kitöltés" + +msgid "Internal solid infill" +msgstr "Belső szilárd kitöltés" + +msgid "Top surface" +msgstr "Felső felület" + +msgid "Bottom surface" +msgstr "Alsó felület" + +msgid "Bridge" +msgstr "Áthidalás" + +msgid "Gap infill" +msgstr "Réskitöltés" + +msgid "Support interface" +msgstr "Támasz érintkező felület" + +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 "undefined error" + +msgid "too many files" +msgstr "too many files" + +msgid "file too large" +msgstr "fájl túl nagy" + +msgid "unsupported method" +msgstr "unsupported method" + +msgid "unsupported encryption" +msgstr "unsupported encryption" + +msgid "unsupported feature" +msgstr "unsupported feature" + +msgid "failed finding central directory" +msgstr "nem sikerült megtalálni a központi könyvtárat" + +msgid "not a ZIP archive" +msgstr "not a ZIP archive" + +msgid "invalid header or corrupted" +msgstr "invalid header or corrupted" + +msgid "unsupported multidisk" +msgstr "Saving to RAID is not supported." + +msgid "decompression failed" +msgstr "sikertelen kicsomagolás" + +msgid "compression failed" +msgstr "tömörítés sikertelen" + +msgid "unexpected decompressed size" +msgstr "unexpected decompressed size" + +msgid "CRC check failed" +msgstr "CRC-ellenőrzés sikertelen" + +msgid "unsupported central directory size" +msgstr "unsupported central directory size" + +msgid "allocation failed" +msgstr "sikertelen allokáció" + +msgid "file open failed" +msgstr "fájl megnyitása sikertelen" + +msgid "file create failed" +msgstr "fájl létrehozása sikertelen" + +msgid "file write failed" +msgstr "fájl írása sikertelen" + +msgid "file read failed" +msgstr "fájl olvasása sikertelen" + +msgid "file close failed" +msgstr "fájl bezárása sikertelen" + +msgid "file seek failed" +msgstr "fájl beolvasása sikertelen" + +msgid "file stat failed" +msgstr "fájl stat sikertelen" + +msgid "invalid parameter" +msgstr "invalid parameter" + +msgid "invalid filename" +msgstr "invalid filename" + +msgid "buffer too small" +msgstr "túl kicsi puffer" + +msgid "internal error" +msgstr "internal error" + +msgid "file not found" +msgstr "fájl nem található" + +msgid "archive too large" +msgstr "archívum túl nagy" + +msgid "validation failed" +msgstr "validation failed" + +msgid "write callback failed" +msgstr "write callback failed" + +#, boost-format +msgid "" +"%1% is too close to exclusion area, there will be collisions when printing." +msgstr "" +"%1% túl közel van a tiltott területhez, a nyomtatás során előfordulhatnak " +"ütközések." + +#, boost-format +msgid "" +"\n" +"%1% is too close to exclusion area, there will be collisions when printing." +msgstr "" +"\n" +"%1% túl közel van a tiltott területhez, a nyomtatás során előfordulhatnak " +"ütközések." + +#, boost-format +msgid "%1% is too close to others, and collisions may be caused." +msgstr "" +"%1% túl közel van más tárgyakhoz, a nyomtatás során előfordulhatnak " +"ütközések." + +#, boost-format +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 will be collisions when printing.\n" +msgstr "" +" túl közel van a tiltott területhez, a nyomtatás során előfordulhatnak " +"ütközések.\n" + +msgid "" +" is too close to exclusion area, there will be collisions when printing.\n" +msgstr "" +" túl közel van a tiltott területhez, a nyomtatás során előfordulhatnak " +"ütközések.\n" + +msgid "Prime Tower" +msgstr "Törlő torony" + +msgid " is too close to others, and collisions may be caused.\n" +msgstr "" +" túl közel van más tárgyakhoz, a nyomtatás során előfordulhatnak ütközések.\n" + +msgid " is too close to exclusion area, and collisions will be caused.\n" +msgstr "" +" túl közel van a tiltott területhez, a nyomtatás során előfordulhatnak " +"ütközések.\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 "" +"Nem nyomtathatsz több, nagy hőmérséklet-különbséggel rendelkező filamentet " +"egyidőben. Ellenkező esetben az extruder és a fúvóka eltömődhet vagy " +"megsérülhet nyomtatás közben" + +msgid "No extrusions under current settings." +msgstr "No extrusions under current settings." + +msgid "" +"Please select \"By object\" print sequence to print multiple objects in " +"spiral vase mode." +msgstr "" +"Kérjük, válaszd a \"Tárgyanként\" nyomtatási sorrendet több tárgy spirálváza " +"módban történő nyomtatásához." + +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 "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." + +#, c-format, boost-format +msgid "Plate %d: %s does not support filament %s.\n" +msgstr "%d. tálca: %s nem használható %s filamenttel.\n" + +msgid "Generating skirt & brim" +msgstr "Szoknya & perem generálása" + +msgid "Exporting G-code" +msgstr "G-kód exportálása" + +msgid "Generating G-code" +msgstr "G-kód generálása" + +msgid "Failed processing of the filename_format template." +msgstr "Nem sikerült feldolgozni a fájlnév_formátum sablont." + +msgid "Printable area" +msgstr "Nyomtatható terület" + +msgid "Bed exclude area" +msgstr "Asztal kizárási terület" + +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 "Elephant foot compensation" +msgstr "Elefántláb kompenzáció" + +msgid "" +"Shrink the initial layer on build plate to compensate for elephant foot " +"effect" +msgstr "" +"Zsugorítja a kezdőréteget a tárgyasztalon, hogy kompenzálja az elefántláb-" +"hatást" + +msgid "" +"Slicing height for each layer. Smaller layer height means more accurate and " +"more printing time" +msgstr "" +"Az egyes rétegek szeletelési magassága. A kisebb rétegmagasság pontosabb " +"nyomtatást és több időt jelent" + +msgid "Printable height" +msgstr "Nyomtatási magasság" + +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 "Nyomtató beállítások neve" + +msgid "Avoid crossing wall when travel" +msgstr "Falak elkerülése mozgáskor" + +msgid "Detour and avoid to travel across wall which may cause blob on surface" +msgstr "" +"Kerülje a falon keresztül való áthaladást, ami nyomot hagyhat a felületen" + +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 "Other layers" +msgstr "Többi réteg" + +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the Cool Plate" +msgstr "" +"Az asztal hőmérséklete a kezdőréteg kivételével. A 0 érték azt jelenti, hogy " +"a filament nem támogatja a Cool Plate-re történő nyomtatást" + +msgid "°C" +msgstr "°C" + +msgid "Bed temperature" +msgstr "Asztalhőmérséklet" + +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the Engineering Plate" +msgstr "" +"Az asztal hőmérséklete a kezdeti réteg kivételével. A 0 érték azt jelenti, " +"hogy a szál nem támogatja az Engineering Plate-re történő nyomtatást" + +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 "" +"Az asztal hőmérséklete a kezdeti réteg kivételével. A 0 érték azt jelenti, " +"hogy a szál nem támogatja a High Temp Plate-re történő nyomtatást" + +msgid "Initial layer" +msgstr "Kezdőréteg" + +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 "" +"A kezdőréteg asztalhőmérséklete. A 0 érték azt jelenti, hogy a filament nem " +"támogatja a Cool Plate-re történő nyomtatást" + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Engineering Plate" +msgstr "" +"A kezdőréteg asztalhőmérséklete. A 0 érték azt jelenti, hogy a filament nem " +"támogatja a Engineering Plate-re történő nyomtatást" + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the High Temp Plate" +msgstr "" +"A kezdőréteg asztalhőmérséklete. A 0 érték azt jelenti, hogy a filament nem " +"támogatja a High Temp Plate-re történő nyomtatást" + +msgid "Bed types supported by the printer" +msgstr "Nyomtató által támogatott asztaltípusok" + +msgid "Cool Plate" +msgstr "Cool Plate" + +msgid "Engineering Plate" +msgstr "Engineering Plate" + +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 "Alsó héj rétegek" + +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 "Alsó héj vastagság" + +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 "Hűtés kényszerítése túlnyúlásoknál és áthidalásoknál" + +msgid "" +"Enable this option to optimize part cooling fan speed for overhang and " +"bridge to get better cooling" +msgstr "" +"Engedélyezd ezt az opciót a tárgyhűtő ventilátor fordulatszámának " +"optimalizálásához a jobb hűtés érdekében túlnyúlásoknál és áthidalásoknál" + +msgid "Fan speed for overhang" +msgstr "Ventilátor fordulatszám túlnyúlásnál" + +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 "Túlnyúlás hűtésének küszöbértéke" + +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 "Bridge flow" +msgstr "Áthidalás áramlási sebessége" + +msgid "" +"Decrease this value slightly(for example 0.9) to reduce the amount of " +"material for bridge, to improve sag" +msgstr "" +"Csökkentsd kicsit ezt az értéket (például 0,9-re), hogy ezzel csökkentsd az " +"áthidaláshoz használt anyag mennyiségét, és a megereszkedést" + +msgid "Only one wall on top surfaces" +msgstr "Csak egy fal a felső felületeken" + +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 "Lassítás túlnyúlásoknál" + +msgid "Enable this option to slow printing down for different overhang degree" +msgstr "" +"Engedélyezd ezt az opciót a nyomtatási sebesség lassításához különböző " +"túlnyúlási szögeknél" + +msgid "mm/s" +msgstr "mm/s" + +msgid "Speed of bridge and completely overhang wall" +msgstr "Az áthidalások és a teljesen túlnyúló falak nyomtatási sebessége" + +msgid "Brim width" +msgstr "Perem szélessége" + +msgid "Distance from model to the outermost brim line" +msgstr "A modell és a legkülső peremvonal közötti távolság" + +msgid "Brim type" +msgstr "Perem típusa" + +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 "Perem-tárgy közötti rés" + +msgid "" +"A gap between innermost brim line and object can make brim be removed more " +"easily" +msgstr "" +"A legbelső peremvonal és a tárgy közötti rés, ami megkönnyítheti a perem " +"eltávolítását" + +msgid "Compatible machine" +msgstr "Kompatibilis gép" + +msgid "Compatible machine condition" +msgstr "Kompatibilis gépállapot" + +msgid "Compatible process profiles" +msgstr "Kompatibilis folyamatprofilok" + +msgid "Compatible process profiles condition" +msgstr "Kompatibilis folyamatprofil állapot" + +msgid "Print sequence" +msgstr "Nyomtatás sorrendje" + +msgid "Print sequence, layer by layer or object by object" +msgstr "Nyomtatási sorrend, rétegenként vagy tárgyanként" + +msgid "By layer" +msgstr "Rétegenként" + +msgid "By object" +msgstr "Tárgyanként" + +msgid "Slow printing down for better layer cooling" +msgstr "Nyomtatás lelassítása a jobb hűtés érdekében" + +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 "" +"Engedélyezd ezt az opciót a nyomtatási sebesség lassításához, hogy a " +"rétegidő ne lehessen kevesebb, mint a \"Max. ventilátor fordulatszám\"-nál " +"megadott küszöbérték.\n" +"Ezáltal a rétegnek több ideje marad visszahűlni és javulhat a kisebb " +"részletek nyomtatási minősége" + +msgid "Normal printing" +msgstr "Normál nyomtatás" + +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 "Alapértelmezett filament profil" + +msgid "Default filament profile when switch to this machine profile" +msgstr "Alapértelmezett filament profil, ha erre a gép profilra váltasz" + +msgid "Default process profile" +msgstr "Alapértelmezett folyamat profil" + +msgid "Default process profile when switch to this machine profile" +msgstr "Alapértelmezett folyamat profil, ha erre a gép profilra váltasz" + +msgid "No cooling for the first" +msgstr "Nincs hűtés az első" + +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 "" +"Kikapcsolja a hűtést a megadott első pár rétegnél. A hűtés kikapcsolása " +"segítheti a jobb tárgyasztalhoz való tapadást" + +msgid "layers" +msgstr "réteg" + +msgid "Don't support bridges" +msgstr "Ne támassza alá az áthidalásokat" + +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 "" +"Nem támasztja alá az áthidalásokat, ezáltal támaszanyagot spórolva. Az " +"áthidalások általában támasz nélkül is jól nyomtathatók, ha nem túl hosszúak" + +msgid "Thick bridges" +msgstr "Vastag áthidalások" + +msgid "Layers and Perimeters" +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 "" +"Ha engedélyezve van, az áthidalások megbízhatóbbak, nagyobb távolságokat " +"tudnak áthidalni, de rosszabbul nézhetnek ki.\n" +"Ha ki van kapcsolva, az áthidalások jobban néznek ki, de csak a rövidebb " +"áthidalt távolságokon megbízhatóak." + +msgid "Max bridge length" +msgstr "Maximum áthidalás hossza" + +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 "Befejező G-kód" + +msgid "End G-code when finish the whole printing" +msgstr "Befejező G-kód az egész nyomtatás befejezésekor" + +msgid "End G-code when finish the printing of this filament" +msgstr "Befejező G-kód a filament nyomtatásának befejezésekor" + +msgid "Top surface pattern" +msgstr "Felső felület mintázata" + +msgid "Line pattern of top surface infill" +msgstr "This is the line pattern for top surface infill." + +msgid "Concentric" +msgstr "Koncentrikus" + +msgid "Zig zag" +msgstr "Cikcakk" + +msgid "Monotonic" +msgstr "Monotonikus" + +msgid "Monotonic line" +msgstr "Monotonikus vonal" + +msgid "Bottom surface pattern" +msgstr "Alsó felület mintázata" + +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 "" +"A legkülső látható fal sebessége. A jobb minőség érdekében ez lassabb, mint " +"a belső fal sebessége." + +msgid "Order of inner wall/outer wall/infil" +msgstr "Belső/külső fal és kitöltés sorrendje" + +msgid "Print sequence of inner wall, outer wall and infill. " +msgstr "A belső fal, a külső fal és a kitöltés nyomtatási sorrendje. " + +msgid "inner/outer/infill" +msgstr "belső/külső/kitöltés" + +msgid "outer/inner/infill" +msgstr "külső/belső/kitöltés" + +msgid "infill/inner/outer" +msgstr "kitöltés/belső/külső" + +msgid "infill/outer/inner" +msgstr "kitöltés/külső/belső" + +msgid "Height to rod" +msgstr "Height to rod" + +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 "Height to lid" +msgstr "Height to lid" + +msgid "Radius" +msgstr "Radius" + +msgid "" +"Clearance radius around extruder. Used as input of auto-arrange to avoid " +"collision when print object by object" +msgstr "" +"Az extruder körüli biztonságos terület sugara. Az automatikus elrendezéshez " +"használatos az ütközések elkerülése érdekében, amikor objektumonként " +"nyomtatsz" + +msgid "Extruder Color" +msgstr "Extruder szín" + +msgid "Only used as a visual help on UI" +msgstr "Only used as a visual help on UI" + +msgid "Extruder offset" +msgstr "Extruder offszet" + +msgid "Flow ratio" +msgstr "Anyagáramlás" + +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 "" +"Alapértelmezett vonalszélesség, ha valamilyen vonalszélesség nullára van " +"állítva" + +msgid "Keep fan always on" +msgstr "Ventilátor mindig bekapcsolva" + +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 "" +"Ezen beállítás engedélyezése esetén a tárgyhűtő ventilátor soha nem áll le, " +"és legalább a minimális fordulatszámon fog járni, hogy csökkentse az indítás " +"és leállítás gyakoriságát" + +msgid "Layer time" +msgstr "Rétegidő" + +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 "" +"A tárgyhűtő ventilátor azon rétegek esetében lesz engedélyezve, amelyek " +"becsült ideje rövidebb ennél az értéknél. A ventilátor fordulatszáma a " +"rétegnyomtatási időnek megfelelően skálázódik a minimális és maximális " +"ventilátor fordulatszám között" + +msgid "s" +msgstr "mp" + +msgid "Color" +msgstr "Szín" + +msgid "Max volumetric speed" +msgstr "Max. volumetrikus sebesség" + +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 "mm³/s" +msgstr "mm³/s" + +msgid "Minimal purge on wipe tower" +msgstr "Minimal purge on wipe tower" + +msgid "mm³" +msgstr "mm³" + +msgid "Filament load time" +msgstr "Filament betöltési idő" + +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 "Filament kitöltési idő" + +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 "" +"A filament átmérő a G-kódban az extrudálás kiszámításához szükséges, ezért " +"fontos, hogy pontos legyen" + +msgid "Density" +msgstr "Sűrűség" + +msgid "Filament density. For statistics only" +msgstr "Filament sűrűsége. Csak statisztikákhoz kerül felhasználásra" + +msgid "g/cm³" +msgstr "g/cm³" + +msgid "Type" +msgstr "Típus" + +msgid "The material type of filament" +msgstr "Filament material type" + +msgid "Soluble material" +msgstr "Oldható anyag" + +msgid "" +"Soluble material is commonly used to print support and support interface" +msgstr "" +"Az oldható anyagot általában a támaszok és érintkező felületek nyomtatására " +"használják" + +msgid "Support material" +msgstr "Support material" + +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 "Üvegesedési hőmérséklet" + +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 "Költség" + +msgid "Filament price. For statistics only" +msgstr "Filament költsége. Csak statisztikákhoz kerül felhasználásra" + +msgid "money/kg" +msgstr "money/kg" + +msgid "(Undefined)" +msgstr "(Undefined)" + +msgid "Infill direction" +msgstr "Kitöltés iránya" + +msgid "" +"Angle for sparse infill pattern, which controls the start or main direction " +"of line" +msgstr "" +"A ritkás kitöltési minta szöge, amely a vonal kezdő- vagy fő irányát " +"szabályozza" + +msgid "Sparse infill density" +msgstr "Kitöltés sűrűsége" + +#, 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 "Kitöltési mintázat" + +msgid "Line pattern for internal sparse infill" +msgstr "This is the line pattern for internal sparse infill." + +msgid "Grid" +msgstr "Rács" + +msgid "Line" +msgstr "Vonal" + +msgid "Cubic" +msgstr "Kockás" + +msgid "Tri-hexagon" +msgstr "Háromszögletű" + +msgid "Gyroid" +msgstr "Gyroid" + +msgid "Honeycomb" +msgstr "Méhsejt" + +msgid "Adaptive Cubic" +msgstr "Adaptív kocka" + +msgid "" +"Acceleration of top surface infill. Using a lower value may improve top " +"surface quality" +msgstr "" +"A felső felületi kitöltés gyorsulása. Alacsonyabb érték használata " +"javíthatja a felső felület minőségét" + +msgid "" +"Acceleration of initial layer. Using a lower value can improve build plate " +"adhensive" +msgstr "" +"A kezdőréteg gyorsulása. Alacsonyabb érték használata javíthatja a " +"tárgyasztalhoz való tapadást" + +msgid "Line width of initial layer" +msgstr "Line width of first layer" + +msgid "Initial layer height" +msgstr "Kezdő rétegmagasság" + +msgid "" +"Height of initial layer. Making initial layer height to be thick slightly " +"can improve build plate adhension" +msgstr "" +"Kezdőréteg magassága. A vastagabb kezdőréteg javíthatja a tárgy asztalhoz " +"való tapadását" + +msgid "Adaptive layer height" +msgstr "Adaptív rétegmagasság" + +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 "" +"Ha engedélyezed ezt az opciót, akkor az első réteg kivételével minden réteg " +"magassága automatikusan kiszámításra kerül a szeletelés során a " +"modellfelület lejtésének megfelelően.\n" +"Felhívjuk a figyelmed, hogy ez az opció csak akkor működik, ha az aktuális " +"tálcán nincs törlő torony generálva." + +msgid "Speed of initial layer except the solid infill part" +msgstr "A kezdőréteg nyomtatási sebessége a szilárd kitöltési rész kivételével" + +msgid "Initial layer infill" +msgstr "Kezdőréteg kitöltése" + +msgid "Speed of solid infill part of initial layer" +msgstr "A kezdőréteg szilárd kitöltési részének sebessége" + +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 "Teljes ventilátor fordulatszám ennél a rétegnél" + +msgid "" +"Randomly jitter while printing the wall, so that the surface has a rough " +"look. This setting controls the fuzzy position" +msgstr "" +"A nyomtató véletlenszerűen vibrál a fal nyomtatása közben, így a felület " +"durva megjelenésű lesz" + +msgid "None" +msgstr "Sehol" + +msgid "All walls" +msgstr "Összes fal" + +msgid "Fuzzy skin thickness" +msgstr "Fuzzy skin vastagsága" + +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 "Fuzzy skin pontok távolsága" + +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 " +"segment" + +msgid "" +"Speed of gap infill. Gap usually has irregular line width and should be " +"printed more slowly" +msgstr "" +"A hézagkitöltés nyomtatási sebessége. A rés általában szabálytalan " +"vonalszélességű, és lassabban kell nyomtatni" + +msgid "Arc fitting" +msgstr "Íves illesztés" + +msgid "" +"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " +"tolerance is same with resolution" +msgstr "" +"Engedélyezd ezt az opciót, hogy olyan G-kódot kapj, amiben G2 és G3 mozgások " +"vannak" + +msgid "Add line number" +msgstr "Vonalszám hozzáadása" + +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 "Az első réteg szkennelése" + +msgid "" +"Enable this to enable the camera on printer to check the quality of first " +"layer" +msgstr "" +"Engedélyezd ezt az opciót, hogy a nyomtató kamerája ellenőrizze az első " +"réteg minőségét" + +msgid "Nozzle type" +msgstr "Fúvóka típus" + +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 "Hardened steel" +msgstr "Edzett acél" + +msgid "Stainless steel" +msgstr "Rozsdamentes acél" + +msgid "Brass" +msgstr "Sárgaréz" + +msgid "Enable this option if machine has auxiliary part cooling fan" +msgstr "" +"Engedélyezd ezt az opciót, ha a gép rendelkezik kiegészítő tárgyhűtő " +"ventilátorral" + +msgid "G-code flavor" +msgstr "G-kód változat" + +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 "Kitöltés összevonása" + +msgid "" +"Automatically Combine sparse infill of several layers to print together to " +"reduce time. Wall is still printed with original layer height." +msgstr "" +"Több réteg ritkás kitöltésének automatikus kombinálása a nyomtatási idő " +"csökkentése érdekében. A fal továbbra is az eredeti rétegmagassággal kerül " +"kinyomtatásra." + +msgid "Filament to print internal sparse infill." +msgstr "Filament a belső ritkás kitöltésekhez." + +msgid "Line width of internal sparse infill" +msgstr "Line width of internal sparse infill" + +msgid "Infill/Wall overlap" +msgstr "Kitöltés/fal átfedés" + +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 "A belső ritkás kitöltés sebessége" + +msgid "Ironing Type" +msgstr "Vasalás típusa" + +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 "Nincs vasalás" + +msgid "Top surfaces" +msgstr "Felső felületek" + +msgid "Topmost surface" +msgstr "Legfelső felület" + +msgid "All solid layer" +msgstr "Összes szilárd réteg" + +msgid "Ironing flow" +msgstr "Vasalás áramlási sebesség" + +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 "Vasalási vonalak közötti távolság" + +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 "A vasalási vonalak nyomtatási sebessége" + +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 "Maximum speed X" +msgstr "Maximális sebesség X" + +msgid "Maximum speed Y" +msgstr "Maximális sebesség Y" + +msgid "Maximum speed Z" +msgstr "Maximális sebesség Z" + +msgid "Maximum speed E" +msgstr "Maximális sebesség E" + +msgid "Machine limits" +msgstr "Géplimitek" + +msgid "Maximum X speed" +msgstr "Maximális X sebesség" + +msgid "Maximum Y speed" +msgstr "Maximális Y sebesség" + +msgid "Maximum Z speed" +msgstr "Maximális Z sebesség" + +msgid "Maximum E speed" +msgstr "Maximális E sebesség" + +msgid "Maximum acceleration X" +msgstr "Maximális sebesség X" + +msgid "Maximum acceleration Y" +msgstr "Maximális gyorsulás Y" + +msgid "Maximum acceleration Z" +msgstr "Maximális gyorsulás Z" + +msgid "Maximum acceleration E" +msgstr "Maximális gyorsulás E" + +msgid "Maximum acceleration of the X axis" +msgstr "X-tengely maximális gyorsulás" + +msgid "Maximum acceleration of the Y axis" +msgstr "Y-tengely maximális gyorsulás" + +msgid "Maximum acceleration of the Z axis" +msgstr "Z-tengely maximális gyorsulás" + +msgid "Maximum acceleration of the E axis" +msgstr "E-tengely maximális gyorsulás" + +msgid "Maximum jerk X" +msgstr "Maximális jerk X" + +msgid "Maximum jerk Y" +msgstr "Maximális jerk Y" + +msgid "Maximum jerk Z" +msgstr "Maximális jerk Z" + +msgid "Maximum jerk E" +msgstr "Maximális jerk E" + +msgid "Maximum jerk of the X axis" +msgstr "Maximum jerk of the X axis" + +msgid "Maximum jerk of the Y axis" +msgstr "Maximum jerk of the Y axis" + +msgid "Maximum jerk of the Z axis" +msgstr "Maximum jerk of the Z axis" + +msgid "Maximum jerk of the E axis" +msgstr "Maximum jerk of the E axis" + +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 "Ventilátor fordulatszám" + +msgid "" +"Part cooling fan speed may be increased when auto cooling is enabled. This " +"is the maximum speed limitation of part cooling fan" +msgstr "" +"A tárgyhűtő ventilátor fordulatszáma növelhető, ha az automatikus hűtés " +"engedélyezve van. Ez a tárgyhűtő ventilátor maximális fordulatszám-határa" + +msgid "Max" +msgstr "Max" + +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 "" +"A kiegészítő tárgyhűtő ventilátor fordulatszáma. A kiegészítő ventilátor " +"ezen a fordulatszámon fog működni a nyomtatás során, kivéve az első néhány " +"réteget, amelynél kikapcsolt hűtés van megadva" + +msgid "Min" +msgstr "Min" + +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 "Min print speed" + +msgid "The minimum printing speed when slow down for cooling" +msgstr "The minimum printing speed when slowing down for cooling." + +msgid "Nozzle diameter" +msgstr "Nozzle diameter" + +msgid "Diameter of nozzle" +msgstr "Fúvóka átmérője" + +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 "Csökkentett visszahúzás kitöltésnél" + +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 "" +"Nem történik visszahúzás, amikor a fej csak kitöltés felett halad el, mert " +"az itt történő szivárgás egyébként sem látható.\n" +"Ez az opció lerövidítheti a nyomtatási időt a visszahúzások csökkentésével " +"komplex modelleknél, de egyúttal lassabbá teszi a szeletelést és a G-kód " +"generálást" + +msgid "Enable" +msgstr "Engedélyezve" + +msgid "Filename format" +msgstr "Fájlnév formátum" + +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 "Túlnyúló fal felismerése" + +#, 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 "" +"Felismeri a túlnyúlás százalékos arányát a vonalszélességhez viszonyítva, és " +"más sebességet használ. A 100%%-os túlnyúlás esetén az áthidaláshoz " +"beállított sebességet használja." + +msgid "Line width of inner wall" +msgstr "Line width of inner walls" + +msgid "Speed of inner wall" +msgstr "A belső fal nyomtatási sebessége" + +msgid "Number of walls of every layer" +msgstr "This is the number of walls per layer." + +msgid "Raft contact Z distance" +msgstr "Tutaj érintkezés Z távolság" + +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 "Tutaj kibővítése" + +msgid "Expand all raft layers in XY plane" +msgstr "Összes tutaj réteg kiterjesztése az XY síkban" + +msgid "Initial layer density" +msgstr "First layer density" + +msgid "Density of the first raft or support layer" +msgstr "Az első tutaj vagy támasz réteg sűrűsége" + +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 "Tutaj rétegek" + +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 "Resolution" +msgstr "Felbontás" + +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 "" +"A G-kód útvonal a modell kontúrjának egyszerűsítése után jön létre, hogy " +"elkerüljük a túl sok sort a G-kód fájlban. A kisebb érték nagyobb felbontást " +"és több időt jelent a szeletelésnél" + +msgid "Travel distance threshold" +msgstr "Mozgás távolságának küszöbértéke" + +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 "Visszahúzott mennyiség törlés előtt" + +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 "Visszahúzás rétegváltáskor" + +msgid "Force a retraction when changes layer" +msgstr "Kényszeríti a visszahúzást minden rétegváltáskor" + +msgid "Length" +msgstr "Hossz" + +msgid "Retraction Length" +msgstr "Visszahúzás hossza" + +msgid "" +"Some amount of material in extruder is pulled back to avoid ooze during long " +"travel. Set zero to disable retraction" +msgstr "" +"Az extruderben lévő anyag egy része visszahúzásra kerül, ezáltal elkerülve a " +"hosszabb mozgás során történő szivárgást. A visszahúzás kikapcsolásához " +"állítsd nullára" + +msgid "Z hop when retract" +msgstr "Z-tengely emelés visszahúzáskor" + +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 "Visszahúzás sebessége" + +msgid "Speed of retractions" +msgstr "Visszahúzások sebessége" + +msgid "Deretraction Speed" +msgstr "Betöltési sebesség" + +msgid "" +"Speed for reloading filament into extruder. Zero means same speed with " +"retraction" +msgstr "" +"A filament extruderbe történő visszatöltésének sebessége. A nulla azonos " +"sebességet jelent a visszahúzással" + +msgid "Seam position" +msgstr "Varrat pozíció" + +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 "Legközelebbi" + +msgid "Aligned" +msgstr "Igazított" + +msgid "Back" +msgstr "Hátul" + +msgid "Skirt distance" +msgstr "Szoknya távolsága" + +msgid "Distance from skirt to brim or object" +msgstr "A szoknyától a peremig vagy tárgyig mért távolság" + +msgid "Skirt loops" +msgstr "Szoknya hurkok száma" + +msgid "Number of loops for the skirt. Zero means disabling skirt" +msgstr "" +"A szoknya hurkainak száma. A nulla a szoknya kikapcsolását jelenti.\n" +"\n" +"A szoknya (Skirt) egy körvonal, amit a tárgyasztalon lévő összes modell köré " +"nyomtatnak.\n" +"Még a tárgyak előtt kerül nyomtatásra és a feladata a fúvóka " +"anyagáramlásának stabilizálása" + +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 "Ritkás kitöltés küszöbértéke" + +msgid "" +"Sparse infill area which is smaller than threshold value is replaced by " +"internal solid infill" +msgstr "" +"A küszöbérték alatti ritkás kitöltési terület belső szilárd kitöltéssel " +"kerül leváltásra" + +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 "" +"A belső szilárd kitöltés sebessége, de az az érték nem vonatkozik a felső és " +"alsó felületre" + +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 "" +"A spirál mód kisimítja a külső kontúr Z mozgásait. A tömör modellt egyfalú " +"nyomatokká alakítja, tömör alsó rétegekkel. A végső modellen nincsenek " +"varratok" + +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 "" +"Timelapse videófelvétel készítése a nyomtatásról a nyomtatófej megjelenítése " +"nélkül. Ebben az üzemmódban a nyomtatófej minden rétegváltásnál kiáll a " +"felesleges anyagot kidobó nyílás közelében, majd a kamerával " +"pillanatfelvétel készül. A nyomtatás befejezésekor egy timelapse videó áll " +"össze az összes pillanatfelvételből." + +msgid "Temperature variation" +msgstr "Temperature variation" + +msgid "Start G-code" +msgstr "Kezdő G-kód" + +msgid "Start G-code when start the whole printing" +msgstr "Kezdő G-kód az egész nyomtatás megkezdésekor" + +msgid "Start G-code when start the printing of this filament" +msgstr "Kezdő G-kód a filament nyomtatásának megkezdésekor" + +msgid "Enable support" +msgstr "Támasz engedélyezése" + +msgid "Enable support generation." +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" +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 "normál (auto)" + +msgid "tree(auto)" +msgstr "fa (auto)" + +msgid "hybrid(auto)" +msgstr "hibrid (auto)" + +msgid "normal" +msgstr "normál" + +msgid "tree" +msgstr "fa" + +msgid "Support/object xy distance" +msgstr "Támasz/tárgy XY távolság" + +msgid "XY separation between an object and its support" +msgstr "This controls the XY separation between an object and its support." + +msgid "Pattern angle" +msgstr "Mintázat szöge" + +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 "Csak a tárgyasztaltól" + +msgid "Don't create support on model surface, only on build plate" +msgstr "Nem generál támaszt a modell felületén, csak a tárgyasztalon" + +msgid "Top Z distance" +msgstr "Z távolság" + +msgid "The z gap between the top support interface and object" +msgstr "This determines the Z gap between top support interfaces and objects." + +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 "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 "" +"Lefedi a támasz felső érintkező rétegét körökkel. Alapértelmezés szerint " +"letiltva." + +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 "Top interface layers" +msgstr "Felső érintkező rétegek" + +msgid "Number of top interface layers" +msgstr "This is the number of top interface layers." + +msgid "Bottom interface layers" +msgstr "Alsó érintkező rétegek" + +msgid "Top interface spacing" +msgstr "Felső érintkező felület térköze" + +msgid "Spacing of interface lines. Zero means solid interface" +msgstr "" +"Az érintkező réteg vonalai közötti távolság. A nulla szilárd kitöltést jelent" + +msgid "Bottom interface spacing" +msgstr "Alső érintkező réteg térköz" + +msgid "Spacing of bottom interface lines. Zero means solid interface" +msgstr "" +"Az érintkező réteg vonalai közötti távolság. A nulla szilárd kitöltést jelent" + +msgid "Speed of support interface" +msgstr "Támasz érintkező felületek sebessége" + +msgid "Base pattern" +msgstr "Alap mintázata" + +msgid "Line pattern of support" +msgstr "This is the line pattern for support." + +msgid "Rectilinear" +msgstr "Vonalak" + +msgid "Rectilinear grid" +msgstr "Vonalrács" + +msgid "Interface pattern" +msgstr "Érintkező felület mintázata" + +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 "" +"A támasz érintkezési felületének vonalmintája. A nem oldható támaszfelület " +"alapértelmezett mintázata egyenes vonalú, míg az oldható támaszfelület " +"alapértelmezett mintázata koncentrikus" + +msgid "Base pattern spacing" +msgstr "Alap mintázatának térköze" + +msgid "Spacing between support lines" +msgstr "A támasz vonalai közötti távolság" + +msgid "Speed of support" +msgstr "Támaszok sebessége" + +msgid "Style" +msgstr "Stílus" + +msgid "Snug" +msgstr "Snug" + +msgid "Independent support layer height" +msgstr "Független támasz rétegmagassága" + +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 "Threshold angle" +msgstr "Dőlésszög küszöbértéke" + +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 "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 "Nozzle temperature for layers after the initial one" +msgstr "Nozzle temperature after the first layer" + +msgid "Nozzle temperature" +msgstr "Nozzle temperature" + +msgid "Bed temperature difference" +msgstr "Asztalhőmérséklet különbség" + +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 "" +"Nem ajánlott, hogy a kezdőréteget követő többi réteg asztalhőmérséklete " +"alacsonyabb legyen ennél a küszöbértéknél. Ha a többi rétegnél túl alacsony " +"asztalhőmérsékletet használsz, előfordulhat, hogy a tárgy leválik a tálcáról " +"nyomtatás közben" + +msgid "Detect thin wall" +msgstr "Vékony fal felismerése" + +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 "" +"Felismeri a vékony falat, amit nem lehet két vonalnyi szélességgel " +"nyomtatni, és egyetlen vonallal nyomtatja" + +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 "A felső felületi kitöltés sebessége, amely szilárd" + +msgid "Top shell layers" +msgstr "Felső héj rétegek" + +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 "Top solid layers" + +msgid "Top shell thickness" +msgstr "Felső héj vastagság" + +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 "Mozgási sebesség, amikor nem történik extrudálás" + +msgid "Wipe while retracting" +msgstr "Törlés visszahúzás közben" + +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 "Törlési távolság" + +msgid "" +"Discribe how long the nozzle will move along the last path when retracting" +msgstr "" +"Megszabja, hogy a fúvóka visszahúzáskor mekkora távot mozog az utolsó " +"útvonalán" + +msgid "" +"Print a tower to prime material in nozzle after switching to a new material." +msgstr "" +"Egy tornyot nyomtat a fúvókában lévő anyag kiöblítéséhez új anyagra váltás " +"után." + +msgid "Purging volumes" +msgstr "Tisztítási mennyiségek" + +msgid "Prime volume" +msgstr "Öblítési mennyiség" + +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 "Szélesség" + +msgid "Width of prime tower" +msgstr "This is the width of prime towers." + +msgid "Flush into objects' infill" +msgstr "Öblítés a tárgyak kitöltésébe" + +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 "" +"A filament csere utáni tisztítás a tárgyak kitöltésén belül történik. Ez " +"csökkentheti a hulladék mennyiségét és a nyomtatási időt. Ha a falakat " +"átlátszó filamenttel nyomtatod, a vegyes színű kitöltés kívülről látható lesz" + +msgid "Flush into objects' support" +msgstr "Öblítés a tárgyak támaszába" + +msgid "" +"Purging after filament change will be done inside objects' support. This may " +"lower the amount of waste and decrease the print time" +msgstr "" +"A filament csere utáni tisztítás a tárgyak támaszon belül történik. Ez " +"csökkentheti a hulladék mennyiségét és a nyomtatási időt" + +msgid "Flush into this object" +msgstr "Öblítés ebbe a tárgyba" + +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 "X-Y hole compensation" +msgstr "X-Y furatkompenzáció" + +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 "" +"A tárgy furatai az XY síkban a beállított értékkel nőnek vagy zsugorodnak. " +"Pozitív érték esetén a furatok nagyobbak lesznek, míg a negatív értéktől " +"kisebbek.\n" +"Ez a funkció a méret kismértékű módosítására szolgál, ha a tárgy " +"összeszerelése során probléma merül fel" + +msgid "X-Y contour compensation" +msgstr "X-Y körvonal kompenzáció" + +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 "" +"Az objektum körvonala az XY síkban a beállított értékkel növekszik vagy " +"zsugorodik. Pozitív érték esetén a kontúr nagyobb lesz, negatív érték esetén " +"kisebb. Ez a funkció a méret kismértékű módosítására szolgál, ha a " +"kinyomtatott tárggyal összeszerelési problémák akadnak" + +msgid "Detect narrow internal solid infill" +msgstr "Keskeny belső szilárd kitöltés felismerése" + +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 "3MF exportálása" + +msgid "Export project as 3MF." +msgstr "Projekt exportálása 3MF formátumban." + +msgid "Slice the plates: 0-all plates, i-plate i, others-invalid" +msgstr "Tálcák szeletelése: 0 - összes tálca, i - i tálca, egyéb - érvénytelen" + +msgid "Show command help." +msgstr "Parancs súgó megjelenítése." + +msgid "Output Model Info" +msgstr "Kimeneti modell információ" + +msgid "Output the model's information." +msgstr "Kimeneti modell információ." + +msgid "Export Settings" +msgstr "Beállítások exportálása" + +msgid "Export settings to a file." +msgstr "Beállítások exportálása egy fájlba." + +msgid "Arrange Options" +msgstr "Elrendezési lehetőségek" + +msgid "Arrange options: 0-disable, 1-enable, others-auto" +msgstr "Elrendezési lehetőségek: 0-letiltás, 1-engedélyezés, egyéb-auto" + +msgid "Convert Unit" +msgstr "Mértékegység átváltása" + +msgid "Convert the units of model" +msgstr "Modell mértékegységének átváltása" + +msgid "Orient the model" +msgstr "Modell orientációja" + +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 "Scale the model by a float factor" +msgstr "A modell méretezése egy lebegő tényezővel" + +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 "Kimeneti mappa" + +msgid "Output directory for the exported files." +msgstr "Az exportált fájlok kimeneti mappája." + +msgid "Debug level" +msgstr "Hibakeresés szintje" + +msgid "" +"Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" +"trace\n" +msgstr "" +"A hibakeresési naplózási szint beállítása. 0:fatal, 1:error, 2:warning, 3:" +"info, 4:debug, 5:trace\n" + +msgid "Error in zip archive" +msgstr "Hiba a zip fájlban" + +msgid "Generating walls" +msgstr "Falak generálása" + +msgid "Generating infill regions" +msgstr "Kitöltési területek generálása" + +msgid "Generating infill toolpath" +msgstr "Kitöltési szerszámút generálás" + +msgid "Generating support" +msgstr "Támaszok generálása" + +msgid "Checking support necessity" +msgstr "Támasz szükségességének ellenőrzése" + +#, c-format, boost-format +msgid "" +"It seems object %s needs support to print. Please enable support generation." +msgstr "" +"Úgy tűnik %s objektumnak támaszra lenne szüksége a nyomtatáshoz. Kérjük, " +"engedélyezd a támasz generálását." + +msgid "Optimizing toolpath" +msgstr "Szerszámút optimalizálása" + +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 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 "Slicing mesh" +msgstr "Háló szeletelése" + +msgid " Object:" +msgstr " Objektum:" + +#, boost-format +msgid "Error at line %1%:\n" +msgstr "Hiba a következő sorban %1%:\n" + +#, 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" + +#~ msgid "Alt + Mouse wheel" +#~ msgstr "Alt + Mouse wheel" + +#~ 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 "" +#~ "Automatikusan beállítja a kijelölt objektumok vagy az összes objektum " +#~ "tájolását. Ha vannak kijelölt objektumok, akkor csak a kijelölteket, " +#~ "ellenkező esetben az aktuális projektben lévő összes objektumot " +#~ "orientálja." + +#~ msgid "Clear all" +#~ msgstr "Clear all" + +#~ 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 "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" +#~ "Contains 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 "Enter a search term" +#~ msgstr "Enter a search term" + +#~ msgid "Filaments Selection" +#~ msgstr "Filaments selection" + +#~ msgid "Finished" +#~ msgstr "Finished" + +#~ msgid "Fix model locally" +#~ msgstr "Fix model locally" + +#~ msgid "Fix model through cloud" +#~ msgstr "Fix model through cloud" + +#~ 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 "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 "Module" +#~ msgstr "Module" + +#~ msgid "Monitoring" +#~ msgstr "Monitoring" + +#~ msgid "New version of Bambu Studio" +#~ msgstr "New version of Bambu Studio" + +#~ msgid "Output file" +#~ msgstr "Output file" + +#~ 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 "Please fill report first." +#~ msgstr "Please fill report first." + +#~ msgid "Please upgrade your printer first" +#~ msgstr "Please upgrade 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 "" +#~ "Push new filament \n" +#~ "into extruder" +#~ msgstr "" +#~ "Push new filament \n" +#~ "into extruder" + +#~ msgid "Sending" +#~ msgstr "Sending" + +#~ 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 "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 "Swith cloud environment, Please login again!" +#~ msgstr "Switch cloud environment, 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 "Timelapse without toolhead" +#~ msgstr "Nyomtatófej nélküli timelapse" + +#~ 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 "the 3mf is not compatible, load geometry data only!" +#~ msgstr "The 3mf is not compatible, loading geometry data only!" diff --git a/bbl/i18n/list.txt b/bbl/i18n/list.txt index 2ca2d825d3b..e8e87f4a273 100644 --- a/bbl/i18n/list.txt +++ b/bbl/i18n/list.txt @@ -10,7 +10,8 @@ src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp src/slic3r/GUI/Gizmos/GLGizmoFaceDetector.cpp -src/slic3r/GUI/Gizmos/GLGizmoModifier.cpp +src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp +src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp src/slic3r/GUI/GUI.cpp src/slic3r/GUI/GUI_App.cpp src/slic3r/GUI/GUI_Init.cpp @@ -36,6 +37,7 @@ src/slic3r/GUI/Jobs/PrintJob.cpp src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp src/slic3r/GUI/AboutDialog.cpp src/slic3r/GUI/AMSMaterialsSetting.cpp +src/slic3r/GUI/AMSMappingPopup.cpp src/slic3r/GUI/AMSSetting.cpp src/slic3r/GUI/BBLTopbar.cpp src/slic3r/GUI/DownloadProgressDialog.cpp @@ -63,6 +65,7 @@ src/slic3r/GUI/NotificationManager.cpp src/slic3r/GUI/ObjectDataViewModel.cpp src/slic3r/GUI/OpenGLManager.cpp src/slic3r/GUI/OptionsGroup.cpp +src/slic3r/GUI/PrintOptionsDialog.cpp src/slic3r/GUI/ParamsPanel.cpp src/slic3r/GUI/PartPlate.cpp src/slic3r/GUI/Plater.cpp diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index fce24136802..19580a4d3c1 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-07-23 18:15+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2022-08-08 20: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" @@ -26,7 +23,7 @@ msgid "Left mouse button" msgstr "Linker muisknop" msgid "Enforce supports" -msgstr "Ondersteuning (support) afdwingen" +msgstr "Support afdwingen" msgid "Right mouse button" msgstr "Rechter muisknop" @@ -50,10 +47,10 @@ msgid "Gap fill" msgstr "" msgid "Perform" -msgstr "Perform" +msgstr "Apply" -msgid "Fragment area" -msgstr "Fragment area" +msgid "Gap area" +msgstr "" msgid "Set pen size" msgstr "Selecteer pen formaat" @@ -68,7 +65,7 @@ msgid "Smart fill angle" msgstr "Slim vullen hoek" msgid "Auto support threshold angle: " -msgstr "Hoek voor automatische support: " +msgstr "Maximale hoek automatische support: " msgid "Circle" msgstr "Cirkel" @@ -77,7 +74,7 @@ msgid "Sphere" msgstr "Gebied" msgid "Fill" -msgstr "Fill" +msgstr "Vullen" msgid "Gap Fill" msgstr "" @@ -124,9 +121,6 @@ msgstr "Kies filament" msgid "Edge detection" msgstr "Rand detectie" -msgid "Clear all" -msgstr "Alles wissen" - msgid "Triangles" msgstr "Driehoeken" @@ -152,7 +146,7 @@ msgid "Triangle" msgstr "Triangle" msgid "Height Range" -msgstr "Height Range" +msgstr "Hoogtebereik" msgid "Remove painted color" msgstr "Getekende kleur verwijderen" @@ -273,7 +267,7 @@ msgid "Mesh name" msgstr "Constructie name" msgid "Detail level" -msgstr "Detail level" +msgstr "Detailniveau" msgid "Decimate ratio" msgstr "Decimeren verhouding" @@ -336,25 +330,40 @@ msgid "Operation already cancelling. Please wait few seconds." msgstr "De toepassing wordt al geannuleerd. Wacht even alstublieft." msgid "Face recognition" -msgstr "Face recognition" +msgstr "Gezichtsherkenning" msgid "Perform Recognition" msgstr "Perform Recognition" -msgid "Cube" -msgstr "Kubus" +msgid "Reset direction" +msgstr "" -msgid "Cylinder" -msgstr "Cilinder" +msgid "Brush size" +msgstr "" -msgid "Cone" -msgstr "Kegel" +msgid "Brush shape" +msgstr "" -msgid "Timelapse Wipe Tower" -msgstr "Timelapse Wipe Tower" +msgid "Enforce seam" +msgstr "" -msgid "Add Modifier" -msgstr "Aanpasser toevoegen" +msgid "Block seam" +msgstr "" + +msgid "Remove selection" +msgstr "" + +msgid "Seam painting" +msgstr "" + +msgid "Entering Seam painting" +msgstr "" + +msgid "Leaving Seam painting" +msgstr "" + +msgid "Paint-on seam editing" +msgstr "" msgid "Notice" msgstr "Let op" @@ -407,8 +416,8 @@ 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 "" -"BambuStudio wordt beëindigd omdat het geheugen bijna vol is. Het kan een bug " -"zijn. Meldt dit probleem alstublieft bij support." +"Bambu Studio wordt beëindigd omdat het geheugen bijna vol is. Het kan een " +"bug zijn. Meldt dit probleem alstublieft bij support." msgid "Fatal error" msgstr "Fatale fout" @@ -423,13 +432,16 @@ msgstr "Kritische fout" #, boost-format msgid "BambuStudio got an unhandled exception: %1%" -msgstr "Er is een onbekende uitzondering opgetreden in BambuStudio : %1%" +msgstr "Er is een onbekende uitzondering opgetreden in Bambu Studio : %1%" + +msgid "Downloading Bambu Network Plug-in" +msgstr "" -msgid "Downloading Bambu Network plug-in" +msgid "Incorrect password" msgstr "" #, c-format, boost-format -msgid "Connect %s[SN:%s] failed!" +msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "" msgid "" @@ -488,11 +500,30 @@ msgstr "Kies een of meer bestanden (3mf/step/stl/obj/amf):" msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" msgstr "Kies een bestand (.gcode/.gco/.g/.ngc/ngc):" +msgid "Some presets are modified." +msgstr "Sommige voorinstellingen zijn aangepast." + +msgid "" +"You can keep the modifield presets to the new project, discard or save " +"changes as new presets." +msgstr "" +"Je kunt de aangepaste voorinstellingen bewaren voor het nieuwe project ze " +"laten vervallen of opslaan als nieuwe voorinstelling." + +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 " +"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." @@ -516,21 +547,15 @@ msgstr "Taal" msgid "*" msgstr "*" -msgid "G-code files can not be loaded with models together!" -msgstr "G-Code bestanden en modellen kunnen niet tegelijk geladen worden!" - -msgid "G-code loading" -msgstr "G-Code wordt geladen" - msgid "Select a G-code file:" msgstr "Selecteer een G-code bestand:" msgid "Bambu Studio GUI initialization failed" -msgstr "Bambu Studio GUI initialization failed" +msgstr "Initialisatie van Bambu Studio GUI is mislukt" #, boost-format msgid "Fatal error, exception catched: %1%" -msgstr "Fatal error, exception catched: %1%" +msgstr "Fatale fout, uitzondering: %1%" msgid "Quality" msgstr "Kwaliteit" @@ -610,6 +635,18 @@ msgstr "Verwijder het geselecteerde object" msgid "Load..." msgstr "Laden..." +msgid "Cube" +msgstr "Kubus" + +msgid "Cylinder" +msgstr "Cilinder" + +msgid "Cone" +msgstr "Kegel" + +msgid "Timelapse Wipe Tower" +msgstr "Timelapse Wipe Tower" + msgid "Add settings" msgstr "Instellingen toevoegen" @@ -738,8 +775,7 @@ msgstr "Automatisch oriënteren" msgid "Auto orient the object to improve print quality." msgstr "" -"Stel de orientatie van het object automatisch in om de print kwaliteit de " -"verbeteren." +"Automatisch oriënteren van het object om de printkwaliteit te verbeteren." msgid "Split the selected object into mutiple objects" msgstr "Splits het geselecteerde object op in meerdere objecten" @@ -775,7 +811,7 @@ msgid "Remove the selected plate" msgstr "Verwijder het huidige printbed" msgid "Clone" -msgstr "Kopieren" +msgstr "Dupliceren" msgid "Reduce Triangles" msgstr "Aantal driehoeken verkleinen (vereenvoudigen)" @@ -810,6 +846,9 @@ msgstr "Vergrendelen" msgid "Name" msgstr "Naam" +msgid "Fila." +msgstr "" + #, c-format, boost-format msgid "%1$d error repaired" msgid_plural "%1$d errors repaired" @@ -853,9 +892,7 @@ msgstr "" "Klik op het pictogram om de afdruk eigenschap van het object in te schakelen" msgid "Click the icon to edit support painting of the object" -msgstr "" -"Klik op het pictogram om de ondersteuning (support) van het object te " -"bewerken" +msgstr "Klik op het pictogram om de support van het object te bewerken" msgid "Click the icon to edit color painting of the object" msgstr "Klik op het pictogram om de kleur van het object te bewerken" @@ -869,6 +906,9 @@ msgstr "Fout!" msgid "Generic" msgstr "Algemeen" +msgid "Add Modifier" +msgstr "Aanpasser toevoegen" + msgid "Deleting the last solid part is not allowed." msgstr "Het is niet toegestaand om het laaste vaste deel te verwijderen." @@ -1034,7 +1074,7 @@ msgid "Purge old filament" msgstr "Purge old filament" msgid "?" -msgstr "?" +msgstr " ?" msgid "Empty" msgstr "Leeg" @@ -1043,7 +1083,7 @@ msgid "Click the pencil icon to edit the filament." msgstr "Klik op het potlood icoon om het filament aan te passen." msgid "Load Filament" -msgstr "Load" +msgstr "Laden" msgid "Unload Filament" msgstr "Unload" @@ -1059,8 +1099,8 @@ msgstr "AMS kalibreren..." msgid "A problem occured during calibration. Click to view the solution." msgstr "" -"Er is een probleem opgetreden tijdens het kalibreren. Klik hier om tips te " -"krijgen." +"Er is een probleem opgetreden tijdens de kalibratie. Klik om de oplossing te " +"bekijken." msgid "Calibrate again" msgstr "Opnieuw kalibreren" @@ -1083,7 +1123,7 @@ msgid "" "We can not do auto-arrange on these objects." msgstr "" "De geselecteerde objecten bevinden zich op een vergrendeld printbed.\n" -"Deze obhjecten kunnen niet automatisch worden gerangschikt." +"Deze objecten kunnen niet automatisch worden gerangschikt." msgid "No arrangable objects are selected." msgstr "Er zijn geen objecten geselecteerd die geschikt kunnen worden." @@ -1096,7 +1136,7 @@ msgstr "" "Het is niet mogelijk om automatisch te rangschikken op dit printbed." msgid "Arranging..." -msgstr "Rangschikken" +msgstr "Rangschikken..." msgid "" "Arrange failed. Found some exceptions when processing object geometries." @@ -1104,6 +1144,9 @@ msgstr "" "Het rangschikken is mislukt. Er zijn enkele uitzonderingen gevonden tijdens " "het verwerken van het object." +msgid "Arranging" +msgstr "" + msgid "Arranging canceled." msgstr "Rangschikken geannuleerd." @@ -1131,7 +1174,7 @@ msgid "" "We can not do auto-orient on these objects." msgstr "" "De geselecteerde objecten bevinden zich op een vergrendeld printbed.\n" -"Deze obhjecten kunnen niet automatisch worden gerangschikt." +"Deze objecten kunnen niet automatisch worden georiënteerd." msgid "" "This plate is locked,\n" @@ -1162,31 +1205,31 @@ msgid "The region parameter is incorrrect" msgstr "The region parameter is incorrrect." msgid "Failure of printer login" -msgstr "Failure of printer login" +msgstr "Fout bij inloggen op printer" msgid "Failed to get ticket" -msgstr "Failed to get ticket" +msgstr "Het is niet gelukt om een ticket te verkrijgen" msgid "User authorization timeout" msgstr "User authorization timeout" msgid "Failure of bind" -msgstr "Failure of bind" +msgstr "Koppeling mislukt" msgid "Unknown Failure" msgstr "Unknown Failure" msgid "Abnormal print file data. Please slice again" -msgstr "Abnormal print file data. Please slice again" +msgstr "Abnormale printbestand. Slice opnieuw" 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 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." +msgstr "Verbinding met cloudservice is mislukt. Probeer het nog eens." msgid "Print file not found, please slice again" msgstr "Print file not found, please slice again" @@ -1199,7 +1242,7 @@ msgstr "" "model and slice again" msgid "Failed uploading print file" -msgstr "Failed uploading print file" +msgstr "Uploaden van het printbestand is mislukt" msgid "Wrong Access code" msgstr "Wrong Access code" @@ -1248,26 +1291,26 @@ msgid "Portions copyright" msgstr "License Info" msgid "Copyright" -msgstr "Copyright" +msgstr "Auteursrecht" msgid "License" msgstr "Licentie" msgid "Bambu Studio is licensed under " -msgstr "Bambu Studio is licensed under " +msgstr "Bambu Studio is gelicentieerd onder " msgid "GNU Affero General Public License, version 3" -msgstr "GNU Affero General Public License, version 3" +msgstr "GNU Affero Algemene Openbare Licentie, versie 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 from Slic3r " -"by Alessandro Ranellucci and the RepRap community" +"Bambu Studio is gebaseerd op PrusaSlicer van Prusa Research, welke is " +"afgeleid van Slic3r van Alessandro Ranellucci en de RepRap gemeenschap" msgid "Libraries" -msgstr "Libraries" +msgstr "Bibliotheken" msgid "" "This software uses open source components whose copyright and other " @@ -1278,7 +1321,7 @@ msgstr "" #, c-format, boost-format msgid "About %s" -msgstr "About %s" +msgstr "Over %s" msgid "" "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " @@ -1302,11 +1345,11 @@ msgid "" "the corresponding code comments." msgstr "" -msgid "Colour" -msgstr "Colour" +msgid "AMSMaterialsSetting" +msgstr "" -msgid "SN" -msgstr "SN" +msgid "Colour" +msgstr "Kleur" msgid "" "Nozzle\n" @@ -1325,25 +1368,38 @@ msgstr "min" 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 "Confirm" msgstr "Bevestigen" +msgid "Close" +msgstr "Sluiten" + +msgid "AMS Slots" +msgstr "" + +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "" + msgid "Insertion update" -msgstr "Insertion update" +msgstr "Update gegevens bij invoeren" 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. This takes about 20 seconds." +"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 is completed." +"automatically read any information until printing has finished." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -1361,8 +1417,8 @@ msgid "" "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 roll filament " -"spools." +"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 " @@ -1376,9 +1432,6 @@ msgstr "" msgid "File" msgstr "Bestand" -msgid "Close" -msgstr "Sluiten" - msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" @@ -1411,7 +1464,7 @@ msgid "Underflow" msgstr "Underflow" msgid "Floating reserved operand" -msgstr "Floating reserved operand" +msgstr "Zwevende gereserveerde operand" msgid "Stack overflow" msgstr "Stack overflow" @@ -1627,13 +1680,6 @@ msgstr "" "Ja - Pas de instellingen aan en zet de vaas modus automatisch aan\n" "Nee - Pas de vaas modus deze keer niet toe" -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 "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -1684,16 +1730,16 @@ msgstr "" "Nee - Reset vulling automatisch naar de standaard niet-100% waarde\n" msgid "Auto bed leveling" -msgstr "Auto bed leveling" +msgstr "Automatisch bed levellen" msgid "Heatbed preheating" -msgstr "Heatbed preheating" +msgstr "Printbed opwarmen" msgid "Sweeping XY mech mode" msgstr "Sweeping XY mech mode" msgid "Changing filament" -msgstr "Changing filament" +msgstr "Filament wordt gewisseld" msgid "M400 pause" msgstr "M400 pause" @@ -1702,31 +1748,31 @@ msgid "Paused due to filament runout" msgstr "Paused due to filament runout" msgid "Heating hotend" -msgstr "Heating hotend" +msgstr "Hotend opwarmen" msgid "Calibrating extrusion" -msgstr "Calibrating extrusion" +msgstr "Extrusie wordt gecalibreerd" msgid "Scanning bed surface" msgstr "Scanning bed surface" msgid "Inspecting first layer" -msgstr "Inspecting first layer" +msgstr "De eerste laag wordt geinspecteerd" msgid "Identifying build plate type" -msgstr "Identifying build plate type" +msgstr "Vastellen printbedtype" msgid "Calibrating Micro Lidar" -msgstr "Calibrating Micro Lidar" +msgstr "Micro Lidar wordt gecalibreerd" msgid "Homing toolhead" -msgstr "Homing toolhead" +msgstr "Printkop naar beginpositie" msgid "Cleaning nozzle tip" -msgstr "Cleaning nozzle tip" +msgstr "Nozzle wordt schoongemaakt" msgid "Checking extruder temperature" -msgstr "Checking extruder temperature" +msgstr "Extruder temperatuur wordt gecontroleerd" msgid "Printing was paused by the user" msgstr "Printing was paused by the user" @@ -1735,10 +1781,10 @@ msgid "Pause of front cover falling" msgstr "Pause of front cover falling" msgid "Calibrating the micro lida" -msgstr "Calibrating the micro lidar" +msgstr "Micro Lidar wordt gecalibreerd" msgid "Calibrating extrusion flow" -msgstr "Calibrating extrusion flow" +msgstr "De extrusieflow kalibreren" msgid "Paused due to nozzle temperature malfunction" msgstr "Paused due to nozzle temperature malfunction" @@ -1788,6 +1834,9 @@ msgstr "Updaten mislukt." msgid "Failed to start printing job" msgstr "" +msgid "parameter name" +msgstr "" + msgid "N/A" msgstr "N/A" @@ -1943,7 +1992,7 @@ msgid "Flushed filament" msgstr "Flushed filament" msgid "Filament change times" -msgstr "Filament change times" +msgstr "Filamentwisseltijden" msgid "Color change" msgstr "Kleur veranderen" @@ -2012,7 +2061,7 @@ msgid "Spacing" msgstr "Uitlijning" msgid "Auto rotate for arrangement" -msgstr "Automatisch roteren voor indeling" +msgstr "Automatisch roteren voor rankschikking" msgid "Allow multiple materials on same plate" msgstr "Sta verschillende materiaalsoorten op hetzelfde printbed toe" @@ -2029,8 +2078,11 @@ msgstr "Printbed toevoegen" msgid "Auto orient" msgstr "Automatisch oriënteren" -msgid "Auto arrange" -msgstr "Automatisch rangschikken" +msgid "Arrange all objects" +msgstr "Alle objecten rangschikken" + +msgid "Arrange objects on selected plates" +msgstr "Rangschikt de objecten op de gelecteerde printbedden" msgid "Split to objects" msgstr "Opsplitsen in objecten" @@ -2117,7 +2169,7 @@ msgid "Monitoring Recording" msgstr "Monitoring Recording" msgid "ConnectPrinter(LAN)" -msgstr "ConnectPrinter(LAN)" +msgstr "Printer aansluiten (LAN)" msgid "Please input the printer access code:" msgstr "Please input the printer access code:" @@ -2129,6 +2181,9 @@ msgstr "" "You can find it in \"Settings > Network > Connection code\"\n" "on the printer, as shown in the figure:" +msgid "Invalid input." +msgstr "" + msgid "Application is closing" msgstr "De toepassing wordt afgesloten" @@ -2145,7 +2200,7 @@ msgid "Preview" msgstr "Preview" msgid "Device" -msgstr "Device" +msgstr "Apparaat" msgid "Project" msgstr "Project" @@ -2234,9 +2289,6 @@ msgstr "Nieuw project" msgid "Start a new project" msgstr "Start een nieuw project" -msgid "Open Project" -msgstr "Open Project" - msgid "Open a project file" msgstr "Op een project bestand" @@ -2313,10 +2365,10 @@ msgid "Deletes all objects" msgstr "Verwijder alle objecten" msgid "Clone selected" -msgstr "Kopie geselecteerd" +msgstr "Duplicaat geselecteerd" msgid "Clone copies of selections" -msgstr "Kopieën van selecties maken" +msgstr "Duplicaten van selecties maken" msgid "Select all" msgstr "Alles selecteren" @@ -2345,6 +2397,18 @@ msgstr "Weergave" msgid "Help" msgstr "Help" +msgid "&File" +msgstr "&Bestand" + +msgid "&Edit" +msgstr "" + +msgid "&View" +msgstr "&Bekijken" + +msgid "&Help" +msgstr "&Help" + msgid "&Open G-code" msgstr "&Open G-code" @@ -2358,10 +2422,10 @@ msgid "Reload the plater from disk" msgstr "Reload the plater from disk" msgid "Export &Toolpaths as OBJ" -msgstr "Export &Toolpaths as OBJ" +msgstr "Exporteer &Toolpaths als OBJ" msgid "Export toolpaths as OBJ" -msgstr "Export toolpaths as OBJ" +msgstr "Toolpaths exporteren als OBJ" msgid "Open &PrusaSlicer" msgstr "Open &PrusaSlicer" @@ -2370,21 +2434,12 @@ msgid "Open PrusaSlicer" msgstr "Open PrusaSlicer" msgid "&Quit" -msgstr "&Quit" +msgstr "&Afsluiten" #, c-format, boost-format msgid "Quit %s" msgstr "Quit %s" -msgid "&File" -msgstr "&File" - -msgid "&View" -msgstr "&View" - -msgid "&Help" -msgstr "&Help" - msgid "Save configuration as:" msgstr "Bewaar configuratie als:" @@ -2473,8 +2528,14 @@ msgstr "Stop" msgid "0%" msgstr "0%" +msgid "Clean" +msgstr "" + msgid "Control" -msgstr "Control" +msgstr "Besturing" + +msgid "Print Options" +msgstr "" msgid "100%" msgstr "100%" @@ -2573,7 +2634,7 @@ msgid "%s information" msgstr "%s informatie" msgid "Download" -msgstr "Download" +msgstr "Downloaden" msgid "Skip" msgstr "Overslaan" @@ -2676,7 +2737,7 @@ msgid "Support painting" msgstr "Ondersteuning (support) intekenen" msgid "Color painting" -msgstr "Kleur schilderen" +msgstr "Kleur aanbrengen" msgid "Layers" msgstr "Lagen" @@ -2719,6 +2780,15 @@ msgctxt "Layers" msgid "Bottom" msgstr "Onderste" +msgid "Spaghetti Detection" +msgstr "" + +msgid "Stop printing when spaghetti detected" +msgstr "" + +msgid "First Layer Inspection" +msgstr "" + msgid "Switch to per-object setting mode to edit modifier settings." msgstr "" "Schakel over naar instellingsmodus per object om instellingen van de " @@ -2806,15 +2876,17 @@ msgstr "Herstellen" msgid "Loading file: %s" msgstr "Bestand laden: %s" -msgid "The Config is not compatible and can not be loaded." -msgstr "De configuratie is niet compatibel en kan niet geladen worden!" +msgid "The 3mf is not from Bambu Lab, load geometry data only." +msgstr "" -msgid "Incompatible 3mf" -msgstr "Onbruikbaar 3mf bestand" +msgid "Load 3mf" +msgstr "" + +msgid "The Config can not be loaded." +msgstr "" -msgid "the 3mf is not compatible, load geometry data only!" +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" -"Het 3mf bestand is niet compatibel, enkel de geometrische data wordt geladen!" #, c-format, boost-format msgid "" @@ -2830,6 +2902,12 @@ msgstr "U dient de software te upgraden.\n" msgid "Newer 3mf version" msgstr "Nieuwere versie 3mf" +msgid "The 3mf is not compatible, load geometry data only!" +msgstr "" + +msgid "Incompatible 3mf" +msgstr "Onbruikbaar 3mf bestand" + msgid "Name of components inside step file is not UTF8 format!" msgstr "Naam van componenten in step-bestand is niet UTF8-formaat!" @@ -2874,6 +2952,14 @@ msgstr "Er is een object met meerdere onderdelen gedetecteerd" 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 "Exporteer STL bestand:" @@ -2917,21 +3003,11 @@ msgid "" "The loaded file contains gcode only, Can not enter the Prepare page" msgstr "" -msgid "Some presets are modified." -msgstr "Sommige voorinstellingen zijn aangepast." - msgid "You can keep the modified presets to the new project or discard them" msgstr "" "Je kunt de aangepaste voorinstellingen bewaren voor het nieuwe project of ze " "laten vervallen" -msgid "" -"You can keep the modifield presets to the new project, discard or save " -"changes as new presets." -msgstr "" -"Je kunt de aangepaste voorinstellingen bewaren voor het nieuwe project ze " -"laten vervallen of opslaan als nieuwe voorinstelling." - msgid "Creating a new project" msgstr "Start een nieuw project" @@ -2948,7 +3024,7 @@ msgid "Error occurs while loading G-code file" msgstr "Er is een fout opgetreden tijdens het laden van het G-codebestand." msgid "Drop project file" -msgstr "Drop project file" +msgstr "Projectbestand neerzetten" msgid "Please select an action" msgstr "Selecteer een actie" @@ -2962,11 +3038,17 @@ msgstr "Alleen geometrische data importeren" msgid "Only one G-code file can be opened at the same time." msgstr "Er kan slechts 1 G-code bestand tegelijkertijd geopend worden." +msgid "G-code loading" +msgstr "G-Code wordt geladen" + +msgid "G-code files can not be loaded with models together!" +msgstr "G-Code bestanden en modellen kunnen niet tegelijk geladen worden!" + msgid "Can not add models when in preview mode!" -msgstr "Unable to add models in preview mode" +msgstr "Modellen kunnen niet worden toegevoegd in voorbeeldmodus" msgid "Add Models" -msgstr "Add Models" +msgstr "Modellen toevoegen" msgid "All objects will be removed, continue?" msgstr "Alle objecten zullen verwijderd worden, doorgaan?" @@ -3007,8 +3089,7 @@ msgstr "Stuur naar printer" msgid "Custom supports and color painting were removed before repairing." msgstr "" -"Handmatig ingetekende ondersteuning (support) en kleuren zijn verwijdererd " -"voor het repareren." +"Handmatig aangebrachte support en kleuren zijn verwijderd voor het repareren." msgid "Invalid number" msgstr "Ongeldig nummer" @@ -3060,7 +3141,7 @@ msgid "Changing application language" msgstr "Taal van de applicatie wijzigen" msgid "Changing the region will log out your account.\n" -msgstr "Changing the region will log you out of your account.\n" +msgstr "Als u de regio wijzigt, wordt u afgemeld bij uw account.\n" msgid "Region selection" msgstr "Region selection" @@ -3069,16 +3150,16 @@ msgid "Second" msgstr "Seconde" msgid "General Settings" -msgstr "General Settings" +msgstr "Algemene instellingen" msgid "Asia-Pacific" -msgstr "Asia-Pacific" +msgstr "Azië-Pacific" msgid "China" msgstr "China" msgid "Europe" -msgstr "Europe" +msgstr "Europa" msgid "North America" msgstr "North America" @@ -3102,16 +3183,18 @@ msgid "User sync" msgstr "Gebruikerssynchronisatie" msgid "Auto sync user presets(Printer/Filament/Process)" -msgstr "Auto sync user presets(Printer/Filament/Process)" +msgstr "" +"Gebruikersvoorinstellingen automatisch synchroniseren (printer/filament/" +"proces)" msgid "User Sync" msgstr "User Sync" msgid "Associate files to BambuStudio" -msgstr "Koppel bestanden aan BambuStudio" +msgstr "Koppel bestanden aan Bambu Studio" msgid "Associate .3mf files to BambuStudio" -msgstr "Koppel .3mf-bestanden aan BambuStudio" +msgstr "Koppel .3mf-bestanden aan Bambu Studio" msgid "If enabled, sets BambuStudio as default application to open .3mf files" msgstr "" @@ -3119,7 +3202,7 @@ msgstr "" "om .3mf-bestanden te openen" msgid "Associate .stl files to BambuStudio" -msgstr "Koppel .stl-bestanden aan BambuStudio" +msgstr "Koppel .stl-bestanden aan Bambu Studio" msgid "If enabled, sets BambuStudio as default application to open .stl files" msgstr "" @@ -3127,7 +3210,7 @@ msgstr "" "om .stl-bestanden te openen" msgid "Associate .step/.stp files to BambuStudio" -msgstr "Associate .step/.stp files to BambuStudio" +msgstr "Koppel .step/.stp bestanden aan Bambu Studio" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" @@ -3141,7 +3224,7 @@ msgid "Auto-Backup" msgstr "Automatisch backup maken" msgid "Backup interval" -msgstr "Backup interval" +msgstr "Backupinterval" msgid "Home page and daily tips" msgstr "Startpagina en dagelijkse tips" @@ -3180,7 +3263,7 @@ msgid "Develop mode" msgstr "Ontwikkelmodus" msgid "Dump video" -msgstr "Dump video" +msgstr "Video verwijderen" msgid "Log Level" msgstr "Log level" @@ -3204,10 +3287,10 @@ msgid "trace" msgstr "Traceren" msgid "Host Setting" -msgstr "Host Setting" +msgstr "Host-instelling" msgid "DEV host: api-dev.bambu-lab.com/v1" -msgstr "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" @@ -3240,7 +3323,7 @@ msgid "Incompatible presets" msgstr "Onbruikbare voorinstellingen" msgid "AMS filaments" -msgstr "AMS-filamenten" +msgstr "AMS-filament" msgid "Click to pick filament color" msgstr "Klik om de filament kleur te kiezen" @@ -3380,13 +3463,13 @@ msgid "Other Device" msgstr "Ander apparaat" msgid "Input access code" -msgstr "Input access code" +msgstr "Toegangscode invoeren" msgid "Log out successful." msgstr "Uitloggen gelukt." msgid "Busy" -msgstr "Busy" +msgstr "Bezet" msgid "Bambu Cool Plate" msgstr "Bambu Cool (koude) Plate" @@ -3419,7 +3502,7 @@ 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" +msgstr "Verbinding maken met server" msgid "Synchronizing device information" msgstr "Synchronizing device information" @@ -3428,7 +3511,7 @@ msgid "Synchronizing device information time out" msgstr "Synchronizing device information time out" 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 "Kan de printtaak niet verzenden wanneer de upgrade wordt uitgevoerd" msgid "" "The printer is executing instructions. Please restart printing after it ends" @@ -3438,17 +3521,23 @@ msgstr "" msgid "The printer is busy on other print job" msgstr "The printer is busy with another print job." +#, c-format, boost-format msgid "" -"The filament index exceeds the AMS's slot count and cannot send the print " -"job." +"Filament %s 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" +"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 "" +"De toewijzingen van filamenten aan AMS-slots zijn vastgesteld. U kunt op een " +"filament hierboven klikken om de toewijzing van het AMS slot te wijzigen" msgid "" "Please click each filament above to specify its mapping AMS slot before " @@ -3457,6 +3546,17 @@ 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." @@ -3502,6 +3602,13 @@ msgstr "Bewaar huidige %s" msgid "Delete this preset" msgstr "Verwijder deze voorinstelling" +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 "Lijn dikte" @@ -3549,7 +3656,7 @@ msgid "Prime tower" msgstr "Prime toren" msgid "Flush options" -msgstr "Flush options" +msgstr "Flush-opties" msgid "Special mode" msgstr "Speciale modus" @@ -3558,7 +3665,7 @@ msgid "G-code output" msgstr "" msgid "Frequent" -msgstr "Frequent" +msgstr "Veelgebruikt" #, c-format, boost-format msgid "" @@ -3617,8 +3724,8 @@ 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." +"Dit is de bedtemperatuur wanneer de koelplaat is geïnstalleerd. Een waarde " +"van 0 betekent dat het filament printen op de Cool Plate niet ondersteunt." msgid "Engineering plate" msgstr "Engineering plate (technisch printbed)" @@ -3627,8 +3734,9 @@ 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." +"Dit is de bedtemperatuur wanneer de technische plaat is geïnstalleerd. Een " +"waarde van 0 betekent dat het filament afdrukken op de Engineering Plate " +"niet ondersteunt." msgid "High Temp Plate" msgstr "High Temp Plate (hoge temperatuur printbed)" @@ -3637,9 +3745,9 @@ 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." +"Dit is de bedtemperatuur wanneer de hogetemperatuurplaat is geïnstalleerd. " +"Een waarde van 0 betekent dat het filament printen op de High Temp Plate " +"niet ondersteunt." msgid "Volumetric speed limitation" msgstr "Volumetrische snelheidsbeperking" @@ -3864,7 +3972,7 @@ msgstr "" "voorinstelling?" msgid "Extruders count" -msgstr "Extruders count" +msgstr "Extruder aantal" msgid "General" msgstr "Algemeen" @@ -3883,7 +3991,7 @@ msgid "The name \"%1%\" already exists." msgstr "De naam \"%1%\" bestaat reeds." msgid "Basic Info" -msgstr "Basic Info" +msgstr "Basisinfo" msgid "Pictures" msgstr "Afbeeldingen" @@ -3905,7 +4013,7 @@ msgstr "Model naam" #, c-format, boost-format msgid "%s Update" -msgstr "%s Update" +msgstr "%s Bijwerken" msgid "A new version is available" msgstr "Er is een nieuwe versie beschikbaar" @@ -3954,7 +4062,7 @@ msgid "The configuration is up to date." msgstr "De configuratie is up to date." msgid "Auto-Calc" -msgstr "Auto-Calc" +msgstr "Automatisch berekenen" msgid "Flushing volumes for filament change" msgstr "Volumes reinigen voor filament wijziging" @@ -3963,7 +4071,7 @@ msgid "Flushing volume (mm³) for each filament pair." msgstr "Spoelvolume (mm³) voor elk filamentpaar." msgid "Flush multiplier" -msgstr "Flush multiplier" +msgstr "Flush-vermenigvuldiger" msgid "unloaded" msgstr "uitgeladen" @@ -3983,12 +4091,6 @@ msgstr "Naar" msgid "Login" msgstr "Inloggen" -msgid "Filaments Selection" -msgstr "Filaments selectie" - -msgid "Printer Selection" -msgstr "Printer selectie" - msgid "The configuration package is changed in previous Config Guide" msgstr "Het configuratiebestand is aangepast in de vorige Config Guide" @@ -4004,68 +4106,41 @@ msgstr "Object lijst" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." msgstr "Importeer geometrische data uit STL/STEP/3MF/OBJ/AMF bestanden." -msgid "Select all objects" -msgstr "Selecteer alle objecten" - msgid "Copy to clipboard" msgstr "Kopieer naar klembord" msgid "Paste from clipboard" msgstr "Plakken vanuit klembord" -msgid "Camera view - Default" -msgstr "Camera hoek - Standaard" - -msgid "Camera view - Top" -msgstr "Camera hoek - Bovenkant" - -msgid "Camera view - Bottom" -msgstr "Camera hoek - Onderkant" - -msgid "Camera view - Front" -msgstr "Camera hoek - Voorkant" - -msgid "Camera view - Behind" -msgstr "Camera hoek - Achter" - -msgid "Camera Angle - Left side" -msgstr "Camera hoek - Linker zijde" - -msgid "Camera Angle - Right side" -msgstr "Camera hoek - Rechter zijde" - -msgid "keyboard 1-9: set filament for object/part" -msgstr "Toets 1-9: kies filament voor het object/onderdeel" - msgid "Show keyboard shortcuts list" msgstr "Toon lijst met sneltoetsen" msgid "Global shortcuts" msgstr "Globale snelkoppelingen" -msgid "Arrange all objects" -msgstr "Alle objecten rangschikken" - -msgid "Arrange objects on selected plates" -msgstr "Rangschikt de objecten op de gelecteerde printbedden" - 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." +"all objects in the current disk." msgstr "" -"Automatisch oriënteren. Als er geselecteerde objecten zijn worden alleen " -"deze georiënteert. Anders worden alle objecten op de huidige project " -"georiënteert." +"Automatisch geselecteerde en georiënteerde objecten, of alle objecten.\n" +"Indien er objecten geselecteerd en georiënteerd zijn worden alleen deze " +"georiënteerd. Anders worden alle objecten op de huidige volume georiënteerd." -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." +msgid "Collapse/Expand the sidebar" +msgstr "De menubalk in-/uitschuiven" + +msgid "⌘+Any arrow" +msgstr "⌘+willekeurige pijl" + +msgid "Movement in camera space" +msgstr "Beweging in cameragebied" + +msgid "⌥+Left mouse button" +msgstr "" + +msgid "Select a part" msgstr "" -"Automatisch oriënteren. Als er geselecteerde objecten zijn worden alleen " -"deze georiënteert. Anders worden alle objecten op de huidige schijf " -"georiënteert." msgid "⌘+Left mouse button" msgstr "" @@ -4073,6 +4148,12 @@ msgstr "" msgid "Select multiple objects" msgstr "Selecteer meerdere objecten" +msgid "Ctrl+Any arrow" +msgstr "CTRL+willekeurige pijl" + +msgid "Alt+Left mouse button" +msgstr "" + msgid "Ctrl+Left mouse button" msgstr "" @@ -4112,17 +4193,53 @@ msgstr "Shift+willekeurige pijl" msgid "Movement step set to 1 mm" msgstr "Bewegingsinterval ingesteld op 1mm" -msgid "⌘+Any arrow" -msgstr "⌘+willekeurige pijl" +msgid "keyboard 1-9: set filament for object/part" +msgstr "Toets 1-9: kies filament voor het object/onderdeel" -msgid "Movement in camera space" -msgstr "Beweging in cameragebied" +msgid "Camera view - Default" +msgstr "Camera hoek - Standaard" -msgid "Ctrl+Any arrow" -msgstr "CTRL+willekeurige pijl" +msgid "Camera view - Top" +msgstr "Camera hoek - Bovenkant" -msgid "Collapse/Expand the sidebar" -msgstr "De menubalk in-/uitschuiven" +msgid "Camera view - Bottom" +msgstr "Camera hoek - Onderkant" + +msgid "Camera view - Front" +msgstr "Camera hoek - Voorkant" + +msgid "Camera view - Behind" +msgstr "Camera hoek - Achter" + +msgid "Camera Angle - Left side" +msgstr "Camera hoek - Linker zijde" + +msgid "Camera Angle - Right side" +msgstr "Camera hoek - Rechter zijde" + +msgid "Select all objects" +msgstr "Selecteer alle objecten" + +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 "Plaat" @@ -4179,10 +4296,10 @@ msgid "Vertical slider - Move active thumb Down" msgstr "Verticale schuifregelaar - Actieve thumb omlaag bewegen" msgid "Horizontal slider - Move active thumb Left" -msgstr "Horizontal slider - Move active thumb Left" +msgstr "Horizontale schuifbalk - Beweeg actieve duim naar links" msgid "Horizontal slider - Move active thumb Right" -msgstr "Horizontal slider - Move active thumb Right" +msgstr "Horizontale schuifbalk - Beweeg actieve duim naar rechts" msgid "On/Off one layer mode of the vertical slider" msgstr "On/Off one layer mode of the vertical slider" @@ -4449,16 +4566,16 @@ msgid "" "%1% is too close to exclusion area, there will be collisions when printing." msgstr "" "\n" -"%1% bevindt zich te dicht bij een uitgesloten gebied, er zullen botsingen " +"%1% bevindt zich te dicht bij een uitgesloten gebied, er kunnen botsingen " "optreden tijdens het printen." #, 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." +msgstr "%1% staat te dicht bij anderen en er kunnen botsingen ontstaan." #, boost-format msgid "%1% is too tall, and collisions will be caused." -msgstr "%1% is too tall, and collisions will be caused." +msgstr "%1% is te hoog en er kunnen botsingen ontstaan." msgid " is too close to others, there will be collisions when printing.\n" msgstr "" @@ -4478,7 +4595,7 @@ 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 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 " @@ -4581,6 +4698,12 @@ msgstr "Gebeid waarbinnen geprint kan worden" msgid "Bed exclude area" msgstr "Uitgesloten printbed gebied" +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 "Elephant foot compensation" msgstr "\"Elephant foot\" compensatie" @@ -4634,8 +4757,8 @@ 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 initial one. A value " -"of 0 means the filament does not support printing on the Cool Plate." +"Dit is de bedtemperatuur voor alle lagen behalve de eerste. Een waarde van 0 " +"betekent dat het filament het afdrukken op de Cool Plate niet ondersteunt." msgid "°C" msgstr "°C" @@ -4647,15 +4770,16 @@ 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 initial one. A value " -"of 0 means the filament does not support printing on the Engineering Plate." +"Dit is de bedtemperatuur voor lagen, behalve voor de eerste. Een waarde van " +"0 betekent dat het filament afdrukken op de Engineering Plate niet " +"ondersteunt." 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 initial one. A value " -"of 0 means the filament does not support printing on the High Temp Plate." +"Dit is de bedtemperatuur voor lagen, behalve voor de eerste. Een waarde van " +"0 betekent dat het filament printen op de High Temp Plate niet ondersteunt." msgid "Initial layer" msgstr "Eerste laag" @@ -4667,22 +4791,22 @@ 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 initial layer. A value of 0 means the " -"filament does not support printing on the Cool Plate." +"Dit is de bedtemperatuur van de beginlaag. Een waarde van 0 betekent dat het " +"filament printen op de Cool Plate niet ondersteunt." 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 initial layer. A value of 0 means the " -"filament does not support printing on the Engineering Plate." +"Dit is de bedtemperatuur van de beginlaag. Een waarde van 0 betekent dat het " +"filament afdrukken op de Engineering Plate niet ondersteunt." 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 initial layer. A value of 0 means the " -"filament does not support printing on the High Temp Plate." +"Dit is de bedtemperatuur van de beginlaag. Een waarde van 0 betekent dat het " +"filament printen op de High Temp Plate niet ondersteunt." msgid "Bed types supported by the printer" msgstr "Printbedden ondersteund door de printer" @@ -4760,7 +4884,7 @@ msgstr "" "onderdeel deze waarde overschrijdt. Uitgedrukt als percentage " msgid "Bridge flow" -msgstr "Bridge flow" +msgstr "Brugflow" msgid "" "Decrease this value slightly(for example 0.9) to reduce the amount of " @@ -4776,7 +4900,7 @@ 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 surface, to give more space to the top infill " +"Use only one wall on flat top surfaces, to give more space to the top infill " "pattern" msgid "Slow down for overhang" @@ -4818,9 +4942,8 @@ msgid "" "A gap between innermost brim line and object can make brim be removed more " "easily" msgstr "" -"Dit zorgt ervoor dat er een ruimte wordt vrijgelaten tussen de binnenste " -"randlijn en het object en zorgt ervoor dat het object eenvoudiger van het " -"printbed kan worden verwijderd" +"Dit creëert ruimte tussen de binnenste brimlijn en het object en zorgt " +"ervoor dat het object eenvoudiger van het printbed kan worden verwijderd." msgid "Compatible machine" msgstr "Geschikte machine" @@ -4903,15 +5026,15 @@ msgid "layers" msgstr "Lagen" msgid "Don't support bridges" -msgstr "Geen brug ondersteuning toepassen" +msgstr "Geen support bij bruggen toepassen" 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 bridge areas, which can make support very large. " -"Bridges can usually be printed directly without support if they are not very " -"long." +"Dit schakelt de ondersteuning (support) voor bruggebieden uit, waardoor de " +"ondersteuning (support) erg groot kan worden. Bruggen kunnen meestal direct " +"zonder ondersteuning (support) worden afgedrukt als ze niet erg lang zijn." msgid "Thick bridges" msgstr "" @@ -4933,9 +5056,9 @@ msgid "" "bridges to be supported, and set it to a very large value if you don't want " "any bridges to be supported." msgstr "" -"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." +"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 "Einde G-code" @@ -5038,7 +5161,7 @@ msgid "Extruder offset" msgstr "Extruder offset" msgid "Flow ratio" -msgstr "Flow ratio" +msgstr "Flow verhouding" msgid "" "The material may have volumetric change after switching between molten state " @@ -5162,7 +5285,7 @@ msgstr "Support material" msgid "" "Support material is commonly used to print support and support interface" msgstr "" -"Support material is commonly used to print support and support interface" +"Support material is commonly used to print support and support interfaces." msgid "Temperature of vitrificaiton" msgstr "Temperatuur van verglazing" @@ -5236,8 +5359,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" +"Versnelling van de topoppervlakte-invulling. Gebruik van een lagere waarde " +"kan de kwaliteit van de bovenlaag verbeteren." msgid "" "Acceleration of initial layer. Using a lower value can improve build plate " @@ -5651,7 +5774,7 @@ msgid "Nozzle volume" msgstr "Nozzle volume" msgid "Volume of nozzle between the cutter and the end of nozzle" -msgstr "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 "Reduceer terugtrekken (retraction) bij vulling (infill)" @@ -5711,8 +5834,7 @@ msgid "Initial layer density" msgstr "Dichtheid van de eerste laag" msgid "Density of the first raft or support layer" -msgstr "" -"Dit is de dichtheid van de eerste raft- of ondersteuning (support) laag." +msgstr "Dit is de dichtheid van de eerste raft- of support laag." msgid "Initial layer expansion" msgstr "Vergroten van de eerste laag" @@ -5829,7 +5951,7 @@ msgid "Aligned" msgstr "Uitgelijnd" msgid "Back" -msgstr "Terug" +msgstr "Achterzijde" msgid "Skirt distance" msgstr "Rand (skirt) afstand" @@ -5874,8 +5996,8 @@ msgstr "" "Dit is de snelheid voor de interne solide vulling (infill), bodem en " "bovenste oppervlakte zijn hiervan uitgezonderd" -msgid "Spiral mode" -msgstr "Spiraal modus" +msgid "Spiral vase" +msgstr "" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " @@ -5886,15 +6008,16 @@ msgstr "" "worden afgevlakt en een solide model wordt omgezet in een enkelwandige print " "met solide onderlagen. Het uiteindelijke gegenereerde model heeft geen naad." -msgid "Timelapse without toolhead" -msgstr "" - 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 "Temperature variation" msgstr "Temperatuur variatie" @@ -5909,10 +6032,10 @@ msgid "Start G-code when start the printing of this filament" msgstr "Start G-code wanneer het printen van dit filament begint" msgid "Enable support" -msgstr "Ondertsteuning (support) inschakelen" +msgstr "Support inschakelen" msgid "Enable support generation." -msgstr "Ondersteuning (support) genereren inschakelen." +msgstr "Dit maakt het genereren van support mogelijk." msgid "" "normal(auto) and tree(auto) is used to generate support automatically. If " @@ -5956,9 +6079,7 @@ msgid "On build plate only" msgstr "Alleen op het printbed" msgid "Don't create support on model surface, only on build plate" -msgstr "" -"Deze instelling genereert alleen ondersteuning (support) die begint op het " -"printbed" +msgstr "Deze instelling genereert alleen support die begint op het printbed." msgid "Top Z distance" msgstr "Top Z afstand" @@ -5972,12 +6093,11 @@ 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 ondersteuning (support) te printen. Indien u " -"kiest voor 0 dan is er geen specifiek filament en wordt het huidige filament " -"gebruikt" +"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 "Line width of support" -msgstr "Lijn dikte van ondersteuning (support)" +msgstr "Lijn dikte van support" msgid "Interface use loop pattern" msgstr "Luspatroon interface" @@ -5985,15 +6105,15 @@ msgstr "Luspatroon interface" msgid "" "Cover the top contact layer of the supports with loops. Disabled by default." msgstr "" -"This covers the top contact layer of the supports with loops. It is disabled " -"by default." +"Dit bedekt de bovenste laag van de support met lussen. Het is standaard " +"uitgeschakeld." msgid "" "Filament to print support interface. 0 means no specific filament for " "support interface and current filament is used" msgstr "" -"Filament om ondersteuning (support) te printen. Indien u kiest voor 0 dan " -"is er geen specifiek filament en wordt het huidige filament gebruikt" +"Filament om support te printen. Indien u kiest voor 0 dan is er geen " +"specifiek filament en wordt het huidige filament gebruikt" msgid "Top interface layers" msgstr "Bovenste interface lagen" @@ -6027,7 +6147,7 @@ msgid "Base pattern" msgstr "Basis patroon" msgid "Line pattern of support" -msgstr "Dit is het lijnpatroon voor ondersteuning(support)" +msgstr "Dit is het lijnpatroon voor support." msgid "Rectilinear" msgstr "Rechtlijning" @@ -6043,10 +6163,9 @@ msgid "" "interface is Rectilinear, while default pattern for soluble support " "interface is Concentric" msgstr "" -"Dit is het lijnpatroon voor de ondersteuningsinterface (support). Het " -"standaardpatroon voor niet-oplosbare ondersteuningsinterface is rechtlijnig, " -"terwijl het standaardpatroon voor oplosbare ondersteuningsinterface " -"concentrisch is." +"Dit is het lijnpatroon voor support interfaces. Het standaardpatroon voor " +"niet-oplosbare support interfaces is Rechtlijnig, terwijl het " +"standaardpatroon voor oplosbare support interfaces Concentrisch is." msgid "Base pattern spacing" msgstr "Basis patroon afstand" @@ -6064,7 +6183,7 @@ msgid "Snug" msgstr "Nauwsluitend" msgid "Independent support layer height" -msgstr "Onafhankelijke support (ondersteuning) laaghoogte" +msgstr "Onafhankelijke support laaghoogte" msgid "" "Support layer uses layer height independent with object layer. This is to " @@ -6147,9 +6266,10 @@ msgid "" "layer for more than this threshold. Too low bed temperature of other layer " "may cause the model broken free from build plate" msgstr "" -"Het is wordt niet geadviseerd dat de printbed temperatuur van een laag lager " -"is dan de eerste laag voor meer dan deze drempel. Een te lage bedtemperatuur " -"van een andere laag kan ertoe leiden dat het model losraakt van de bouwplaat" +"Een verschil in bedtemperatuur groter dan deze marge en lager dan de " +"bedtemperatuur van de eerste eerste laag, wordt niet geadviseerd. Een te " +"lage bedtemperatuur van de overige lagen kan ertoe leiden dat het model " +"loskomt van het printbed." msgid "Detect thin wall" msgstr "Detecteer dunne wanden" @@ -6255,7 +6375,7 @@ msgid "Width of prime tower" msgstr "Dit is de breedte van de prime toren." msgid "Flush into objects' infill" -msgstr "Flush into objects' infill" +msgstr "Flush in de opvulling van objecten" msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -6268,7 +6388,7 @@ msgstr "" "printed with transparent filament, the mixed color infill will be visible." msgid "Flush into objects' support" -msgstr "Flush into objects' support" +msgstr "Flush in de support van objecten" msgid "" "Purging after filament change will be done inside objects' support. This may " @@ -6278,7 +6398,7 @@ msgstr "" "lower the amount of waste and decrease the print time." msgid "Flush into this object" -msgstr "Flush into this object" +msgstr "Flush in dit object" msgid "" "This object will be used to purge the nozzle after a filament change to save " @@ -6286,8 +6406,8 @@ msgid "" "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. Colours of the objects will be mixed " -"as a result" +"filament and decrease the print time. Colors of the objects will be mixed as " +"a result." msgid "X-Y hole compensation" msgstr "X-Y-gaten compensatie" @@ -6360,10 +6480,10 @@ msgid "Arrange options: 0-disable, 1-enable, others-auto" msgstr "Rangschik opties: 0-uitzetten, 1-aanzetten, anders-automatisch" msgid "Convert Unit" -msgstr "Convert Unit" +msgstr "Eenheid converteren" msgid "Convert the units of model" -msgstr "Convert the units of model" +msgstr "Converteer de eenheden van het model" msgid "Orient the model" msgstr "Oriënteer het model" @@ -6418,17 +6538,17 @@ msgid "Generating infill toolpath" msgstr "Infill toolpath genereren" msgid "Generating support" -msgstr "Ondersteuning (support) genereren" +msgstr "Support genereren" msgid "Checking support necessity" -msgstr "Controleren of er behoefte is aan ondersteuning" +msgstr "Controleren of support is noodzakelijk" #, c-format, boost-format msgid "" "It seems object %s needs support to print. Please enable support generation." msgstr "" -"Het lijkt er op dat object %s ondersteuning (support) nodig heeft om te " -"printen. Zet ondersteuning (support) genereren aan indien nodig." +"Het lijkt er op dat object %s support nodig heeft om te printen. Zet support " +"genereren aan indien nodig." msgid "Optimizing toolpath" msgstr "Optimaliseren van het pad" @@ -6488,45 +6608,6 @@ msgstr "Support: fix holes at layer %d" msgid "Support: propagate branches at layer %d" msgstr "Support: propagate branches at layer %d" -#~ msgid "Creating" -#~ msgstr "Creating" - -#~ msgid "Uploading" -#~ msgstr "Uploading" - -#~ msgid "Waiting" -#~ msgstr "Waiting" - -#~ msgid "Sending" -#~ msgstr "Sending" - -#~ msgid "Finished" -#~ msgstr "Finished" - -#~ msgid "Please fill report first." -#~ msgstr "Gelieve eerst het rapport in te vullen." - -#~ msgid "Unable to create zip file" -#~ msgstr "Unable to create zip file" - -#~ msgid "Enter a search term" -#~ msgstr "Enter a search term" - -#~ msgid "Debug" -#~ msgstr "Debuggen" - -#~ msgid "Monitoring" -#~ msgstr "Monitoren" - -#~ msgid "Fragment filter" -#~ msgstr "Fragment filter" - -#~ msgid "Fragment Filter" -#~ msgstr "Fragment Filter" - -#~ msgid "Position:" -#~ msgstr "Positie:" - #~ msgid "Alt + Mouse wheel" #~ msgstr "Alt + muiswiel" @@ -6538,11 +6619,32 @@ msgstr "Support: propagate branches at layer %d" #~ "Los dit probleem op door het object geheel binnen of buiten de printplaat " #~ "te plaatsen." +#~ msgid "Auto arrange" +#~ msgstr "Automatisch rangschikken" + +#~ 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 "" +#~ "Automatisch oriënteren. Als er geselecteerde objecten zijn worden alleen " +#~ "deze georiënteert. Anders worden alle objecten op de huidige project " +#~ "georiënteert." + +#~ msgid "Clear all" +#~ msgstr "Alles wissen" + +#~ msgid "Creating" +#~ msgstr "Bezig met creëren" + #~ msgid "Ctrl + Any arrow" #~ msgstr "CTRL + willekeurige pijl" #~ msgid "Ctrl + Left mouse button" -#~ msgstr "Ctrl + Left mouse button" +#~ msgstr "Ctrl + Linkermuisknop" + +#~ msgid "Debug" +#~ msgstr "Debuggen" #~ msgid "Display printable box" #~ msgstr "Toon printbare box" @@ -6560,11 +6662,11 @@ msgstr "Support: propagate branches at layer %d" #~ "2. The Filament presets\n" #~ "3. The Printer presets\n" #~ msgstr "" -#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" -#~ "Contains the following information:\n" -#~ "1. Process presets\n" -#~ "2. Filament presets\n" -#~ "3. Printer presets\n" +#~ "Wilt u uw persoonlijke gegevens van Bambu Cloud synchroniseren? \n" +#~ "Dit bevat de volgende informatie:\n" +#~ "1. Voorinstellingen voor processen\n" +#~ "2. Voorinstellingen voor filament\n" +#~ "3. Voorinstellingen voor printers\n" #~ msgid "" #~ "Don't retract when the travel is in infill area absolutely. That means " @@ -6573,26 +6675,47 @@ msgstr "Support: propagate branches at layer %d" #~ "Dit schakelt terugtrekken (retraction) uit wanneer reizen volledig binnen " #~ "een opvulgebied is en het druppelen uit de nozzle niet kan worden gezien." +#~ msgid "Enter a search term" +#~ msgstr "Voer een zoekterm in" + +#~ msgid "Filaments Selection" +#~ msgstr "Filaments selectie" + +#~ msgid "Finished" +#~ msgstr "Voltooid" + #~ msgid "Fix model locally" #~ msgstr "Repareer model lokaal" #~ msgid "Fix model through cloud" #~ msgstr "Repareer model in de cloud" +#~ msgid "Fragment Filter" +#~ msgstr "Fragmentfilter" + +#~ msgid "Fragment area" +#~ msgstr "Fragmentgebied" + +#~ msgid "Fragment filter" +#~ msgstr "Fragmentfilter" + #~ msgid "" #~ "Heat the nozzle to target \n" #~ "temperature" #~ msgstr "Nozzle opwarmen tot doel temperatuur" #~ msgid "In the calibration of extrusion flow" -#~ msgstr "In the calibration of extrusion flow" +#~ msgstr "Bij de kalibratie van de extrusieflow" #~ msgid "In the calibration of laser scanner" -#~ msgstr "In the calibration of laser scanner" +#~ msgstr "Bij de kalibratie van laserscanner" #~ msgid "Module" #~ msgstr "Module" +#~ msgid "Monitoring" +#~ msgstr "Monitoren" + #~ msgid "New version of Bambu Studio" #~ msgstr "Nieuwe versie van Bambu Studio" @@ -6608,24 +6731,36 @@ msgstr "Support: propagate branches at layer %d" #~ msgid "Pause(toolhead shell off)" #~ msgstr "Pause(toolhead shell off)" +#~ msgid "Please fill report first." +#~ msgstr "Gelieve eerst het rapport in te vullen." + #~ msgid "Please upgrade your printer first" #~ msgstr "Please upgrade your printer first" +#~ msgid "Position:" +#~ msgstr "Positie:" + #~ msgid "" #~ "Preview only mode:\n" #~ "The loaded file contains gcode only." #~ msgstr "" #~ "Preview only mode:\n" -#~ "The loaded file contains gcode only." +#~ "The loaded file contains G-code only." #~ msgid "Preview only mode for gcode file." -#~ msgstr "Preview only mode for gcode file." +#~ msgstr "Preview only mode for G-code file." + +#~ msgid "Printer Selection" +#~ msgstr "Printer selectie" #~ msgid "" #~ "Push new filament \n" #~ "into extruder" #~ msgstr "Nieuw filament in de extruder laden" +#~ msgid "Sending" +#~ msgstr "Sending" + #~ msgid "Shift + Any arrow" #~ msgstr "Shift + willekeurige pijl" @@ -6641,19 +6776,39 @@ msgstr "Support: propagate branches at layer %d" #~ msgid "Show Printable Box(TODO)" #~ msgstr "Toon printbare uimte(TODO)" +#~ msgid "Spiral mode" +#~ msgstr "Spiraal modus" + #~ 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" +#~ "Successfully sent. Will automatically jump to the device page in %s s" #~ msgid "Swith cloud environment, Please login again!" #~ msgstr "De cloud omgeving is aangepast. Log opnieuw in aub." +#~ msgid "The Config is not compatible and can not be loaded." +#~ msgstr "De configuratie is niet compatibel en kan niet geladen worden!" + #~ 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 printer and AMS are too low.Please update to the " -#~ "latest version before sending the print job" +#~ "The firmware versions of the printer and AMS are too low. Please update " +#~ "them to the latest version before sending any print jobs." + +#~ 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 "the 3mf is not compatible, load geometry data only!" +#~ msgstr "" +#~ "Het 3mf bestand is niet compatibel, enkel de geometrische data wordt " +#~ "geladen!" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index 46ff2a97bac..d4d7aae098a 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-07-23 18:15+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2022-08-08 20: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" @@ -50,10 +47,10 @@ msgid "Gap fill" msgstr "" msgid "Perform" -msgstr "Perform" +msgstr "Utför" -msgid "Fragment area" -msgstr "Fragment area" +msgid "Gap area" +msgstr "" msgid "Set pen size" msgstr "Välj penn storlek" @@ -77,7 +74,7 @@ msgid "Sphere" msgstr "Sfär" msgid "Fill" -msgstr "Fill" +msgstr "Fyll" msgid "Gap Fill" msgstr "" @@ -124,9 +121,6 @@ msgstr "Välj filament" msgid "Edge detection" msgstr "Kant detektering" -msgid "Clear all" -msgstr "Rensa allt" - msgid "Triangles" msgstr "Trianglar" @@ -149,10 +143,10 @@ msgid "Shortcut Key " msgstr "Snabbkommando " msgid "Triangle" -msgstr "Triangle" +msgstr "Triangel" msgid "Height Range" -msgstr "Height Range" +msgstr "Höjd intervall" msgid "Remove painted color" msgstr "Ta bort färgläggning" @@ -335,25 +329,40 @@ msgid "Operation already cancelling. Please wait few seconds." msgstr "Åtgärden avbryts redan. Vänligen vänta." msgid "Face recognition" -msgstr "Face recognition" +msgstr "Ansiktsigenkänning" msgid "Perform Recognition" -msgstr "Perform Recognition" +msgstr "Utför igenkänning" -msgid "Cube" -msgstr "Kub" +msgid "Reset direction" +msgstr "" -msgid "Cylinder" -msgstr "Cylinder" +msgid "Brush size" +msgstr "" -msgid "Cone" -msgstr "Kon" +msgid "Brush shape" +msgstr "" -msgid "Timelapse Wipe Tower" -msgstr "Timelapse Wipe Tower" +msgid "Enforce seam" +msgstr "" -msgid "Add Modifier" -msgstr "Lägg till Modifierare" +msgid "Block seam" +msgstr "" + +msgid "Remove selection" +msgstr "" + +msgid "Seam painting" +msgstr "" + +msgid "Entering Seam painting" +msgstr "" + +msgid "Leaving Seam painting" +msgstr "" + +msgid "Paint-on seam editing" +msgstr "" msgid "Notice" msgstr "Iakttag" @@ -422,11 +431,14 @@ msgstr "Kritiskt fel" msgid "BambuStudio got an unhandled exception: %1%" msgstr "Bambu Studio har ett ohanterat undantag: %1%" -msgid "Downloading Bambu Network plug-in" +msgid "Downloading Bambu Network Plug-in" +msgstr "" + +msgid "Incorrect password" msgstr "" #, c-format, boost-format -msgid "Connect %s[SN:%s] failed!" +msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "" msgid "" @@ -484,12 +496,31 @@ msgstr "Välj en eller flera filer (3mf/step/stl/obj/amf):" msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" msgstr "Välj en fil (.gcode/.gco/.g/.ngc/ngc):" +msgid "Some presets are modified." +msgstr "Några inställningar har ändrats." + msgid "" -"The version of Bambu studio is too low and needs to be updated to the latest " -"version before it can be used normally" +"You can keep the modifield presets to the new project, discard or save " +"changes as new presets." +msgstr "" +"Fortsätt med redigerings inställningarna till nytt projekt, avfärda dem " +"eller spara som ny inställning." + +msgid "User logged out" msgstr "" + +msgid "new or open project file is not allowed during the slicing process!" +msgstr "" + +msgid "Open Project" +msgstr "Öppna Projekt" + +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 "" +"Versionen av Bambu studio är för låg och behöver uppdateras till den senaste " +"versionen innan den kan användas normalt" msgid "Login information expired. Please login again." msgstr "Inloggningsinformationen har löpt ut. Logga in igen." @@ -498,7 +529,7 @@ msgid "Loading" msgstr "Laddar" msgid "Loading user preset" -msgstr "Loading user preset" +msgstr "Laddar användarens förinställning" msgid "Switching application language" msgstr "Byt applikationsspråk" @@ -512,21 +543,15 @@ msgstr "Språk" msgid "*" msgstr "*" -msgid "G-code files can not be loaded with models together!" -msgstr "G-kod filer och modeller kan inte laddas tillsammans!!" - -msgid "G-code loading" -msgstr "Laddar G-kod" - msgid "Select a G-code file:" msgstr "Välj en G-kod fil:" msgid "Bambu Studio GUI initialization failed" -msgstr "Bambu Studio GUI initialization failed" +msgstr "Bambu Studio GUI-initiering misslyckades" #, boost-format msgid "Fatal error, exception catched: %1%" -msgstr "Fatal error, exception catched: %1%" +msgstr "Allvarligt fel, undantag hittat: %1%" msgid "Quality" msgstr "Kvalitet" @@ -606,6 +631,18 @@ msgstr "Radera det valda objektet" msgid "Load..." msgstr "Ladda..." +msgid "Cube" +msgstr "Kub" + +msgid "Cylinder" +msgstr "Cylinder" + +msgid "Cone" +msgstr "Kon" + +msgid "Timelapse Wipe Tower" +msgstr "Timelapse Wipe Tower" + msgid "Add settings" msgstr "Lägg till inställning" @@ -802,6 +839,9 @@ msgstr "Lås" msgid "Name" msgstr "Namn" +msgid "Fila." +msgstr "" + #, c-format, boost-format msgid "%1$d error repaired" msgid_plural "%1$d errors repaired" @@ -853,6 +893,9 @@ msgstr "Fel!" msgid "Generic" msgstr "Allmän" +msgid "Add Modifier" +msgstr "Lägg till Modifierare" + msgid "Deleting the last solid part is not allowed." msgstr "Ej tillåtet att radera den senaste fasta delen." @@ -1013,10 +1056,10 @@ msgid "Push new filament into extruder" msgstr "" msgid "Purge old filament" -msgstr "Purge old filament" +msgstr "Rensa gammalt filament" msgid "?" -msgstr "?" +msgstr " ?" msgid "Empty" msgstr "Tom" @@ -1025,10 +1068,10 @@ msgid "Click the pencil icon to edit the filament." msgstr "Tryck på penn ikonen för att editera filament." msgid "Load Filament" -msgstr "Load" +msgstr "Ladda Filament" msgid "Unload Filament" -msgstr "Unload" +msgstr "Mata ut" msgid "Tips" msgstr "Tips" @@ -1084,6 +1127,9 @@ msgstr "" "Placering misslyckades. Avvikelser hittades när objektets geometri " "bearbetades." +msgid "Arranging" +msgstr "" + msgid "Arranging canceled." msgstr "Placering avbruten." @@ -1132,62 +1178,64 @@ msgid "Exception" msgstr "Undantag" msgid "Logging in" -msgstr "Logging in" +msgstr "Loggar in" msgid "Login failed" -msgstr "Login failed" +msgstr "Inloggning misslyckades" msgid "The region parameter is incorrrect" -msgstr "The region parameter is incorrrect." +msgstr "Region parametern är felaktig." msgid "Failure of printer login" -msgstr "Failure of printer login" +msgstr "Fel i inloggningen till skrivaren" msgid "Failed to get ticket" -msgstr "Failed to get ticket" +msgstr "Misslyckades med att få en kvittering" msgid "User authorization timeout" -msgstr "User authorization timeout" +msgstr "Timeout för användarauktorisering" msgid "Failure of bind" -msgstr "Failure of bind" +msgstr "Fel vid sammankoppling" msgid "Unknown Failure" -msgstr "Unknown Failure" +msgstr "Okänt fel" msgid "Abnormal print file data. Please slice again" -msgstr "Abnormal print file data. Please slice again" +msgstr "Onormal utskrifts fil data. Vänligen bered igen" msgid "Task canceled" -msgstr "Task canceled" +msgstr "Uppgift avbruten" msgid "Upload task timed out. Please check the network problem and try again" -msgstr "Upload task timed out. Please check the network problem and try again" +msgstr "" +"Uppladdningsuppgiften tog timeout. Kontrollera nätverksproblemet och försök " +"igen" msgid "Cloud service connection failed. Please try again." -msgstr "Cloud service connection failed. Please try again." +msgstr "Anslutningen till molntjänsten misslyckades. Försök igen." msgid "Print file not found, please slice again" -msgstr "Print file not found, please slice again" +msgstr "Det gick inte att hitta utskrifts filen, vänligen bered igen" 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" +"Utskrifts filen överskrider den högsta tillåtna storleken (1 GB). Förenkla " +"modellen och bered igen" msgid "Failed uploading print file" -msgstr "Failed uploading print file" +msgstr "Uppladdning av utskrifts filen misslyckades" msgid "Wrong Access code" -msgstr "Wrong Access code" +msgstr "Fel åtkomstkod" msgid "Sending print job over LAN" -msgstr "Sending print job over LAN" +msgstr "Skicka utskriftsjobb via LAN" msgid "Sending print job through cloud service" -msgstr "Sending print job through cloud service" +msgstr "Skicka utskriftsjobb via molntjänst" msgid "Service Unavailable" msgstr "" @@ -1196,7 +1244,7 @@ msgid "Unkown Error." msgstr "" msgid "Sending print configuration" -msgstr "Sending print configuration" +msgstr "Skicka utskrifts konfiguration" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %s s" @@ -1224,16 +1272,16 @@ msgid "Install failed" msgstr "" msgid "Portions copyright" -msgstr "License Info" +msgstr "Information om licens" msgid "Copyright" -msgstr "Copyright" +msgstr "Upphovsrätt" msgid "License" -msgstr "License" +msgstr "Licens" msgid "Bambu Studio is licensed under " -msgstr "Bambu Studio is licensed under " +msgstr "Bambu Studio är licensierad under " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, version 3" @@ -1242,22 +1290,22 @@ 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 from Slic3r " -"by Alessandro Ranellucci and the RepRap community" +"Bambu Studio är baserad på PrusaSlicer av Prusa Research, som är från Slic3r " +"av Alessandro Ranellucci och RepRap-communityn" msgid "Libraries" -msgstr "Libraries" +msgstr "Bibliotek" 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" +"Denna programvara använder komponenter med öppen källkod vars upphovsrätt " +"och andra äganderätt tillhör respektive ägare" #, c-format, boost-format msgid "About %s" -msgstr "About %s" +msgstr "Om %s" msgid "" "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " @@ -1281,18 +1329,18 @@ msgid "" "the corresponding code comments." msgstr "" -msgid "Colour" -msgstr "Colour" +msgid "AMSMaterialsSetting" +msgstr "" -msgid "SN" -msgstr "SN" +msgid "Colour" +msgstr "Färg" msgid "" "Nozzle\n" "Temperature" msgstr "" -"Nozzle\n" -"Temperature" +"Nozzle \n" +"temperatur" msgid "max" msgstr "max" @@ -1302,62 +1350,71 @@ 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%" +msgstr "Inmatningsvärdet ska vara större än %1% och mindre än %2%" + +msgid "SN" +msgstr "SN" msgid "Confirm" msgstr "Acceptera" +msgid "Close" +msgstr "Stäng" + +msgid "AMS Slots" +msgstr "" + +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "" + msgid "Insertion update" -msgstr "Insertion update" +msgstr "Infoga uppdatering" 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. This takes about 20 seconds." +"AMS läser automatiskt filament informationen när du sätter in ett nytt Bambu " +"Lab-filament. Det tar ungefär 20 sekunder." 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 is completed." +"Observera: Om nytt filament sätts in under utskrift kommer AMS inte " +"automatiskt att läsa av någon information förrän utskriften är avslutad." 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." +"Vid matning av nytt filament, AMS läser inte av dess information automatiskt " +"utan lämnar det blankt för dig att fylla i manuellt." msgid "Power on update" -msgstr "Power on update" +msgstr "Slå på uppdatering" 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 roll filament " -"spools." +"AMS läser automatiskt informationen om insatt Bambu Lab filament vid " +"uppstart. Det tar cirka 1 minut. Läsprocessen kommer att rulla " +"filamentspolarna." 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." +"AMS kommer inte att automatiskt läsa informationen ifrån imatat filament " +"under uppstart och senast använd information kommer att användas." msgid "File" msgstr "Fil" -msgid "Close" -msgstr "Stäng" - msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" @@ -1388,7 +1445,7 @@ msgid "Underflow" msgstr "Underflöde" msgid "Floating reserved operand" -msgstr "Floating reserved operand" +msgstr "Reservations operand med flytande värde" msgid "Stack overflow" msgstr "Lagra överflöde" @@ -1460,7 +1517,7 @@ msgid "Not found:" msgstr "Ej funnen:" msgid "Model" -msgstr "Model" +msgstr "Modell" msgid "Choose an STL file to import bed shape from:" msgstr "Välj en STL fil för att importera bygglattans form ifrån:" @@ -1598,13 +1655,6 @@ msgstr "" "JA -Ändra dessa inställningar och möjliggör Spiral läge automatiskt\n" "NEJ -Avbryt Spiral läge denna gång" -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 "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -1654,67 +1704,67 @@ msgstr "" "NEJ - Återställ densiteten till standard inte 100% värdet automatiskt\n" msgid "Auto bed leveling" -msgstr "Auto bed leveling" +msgstr "Auto justera byggplattan" msgid "Heatbed preheating" -msgstr "Heatbed preheating" +msgstr "Byggplattan förvärms" msgid "Sweeping XY mech mode" -msgstr "Sweeping XY mech mode" +msgstr "Sveper XY mech-läge" msgid "Changing filament" -msgstr "Changing filament" +msgstr "Byter filament" msgid "M400 pause" -msgstr "M400 pause" +msgstr "M400 paus" msgid "Paused due to filament runout" -msgstr "Paused due to filament runout" +msgstr "Pausad på grund av filament slut" msgid "Heating hotend" -msgstr "Heating hotend" +msgstr "Värmer hotend" msgid "Calibrating extrusion" -msgstr "Calibrating extrusion" +msgstr "Kalibrerar extrudering" msgid "Scanning bed surface" -msgstr "Scanning bed surface" +msgstr "Skannar byggplattan" msgid "Inspecting first layer" -msgstr "Inspecting first layer" +msgstr "Inspekterar första lager" msgid "Identifying build plate type" -msgstr "Identifying build plate type" +msgstr "Identifiering av byggplatta" msgid "Calibrating Micro Lidar" -msgstr "Calibrating Micro Lidar" +msgstr "Kalibrerar Micro Lidar" msgid "Homing toolhead" -msgstr "Homing toolhead" +msgstr "Nollställer verktygshuvudet" msgid "Cleaning nozzle tip" -msgstr "Cleaning nozzle tip" +msgstr "Rengör nozzle spetsen" msgid "Checking extruder temperature" -msgstr "Checking extruder temperature" +msgstr "Kontrollerar extruderings temperatur" msgid "Printing was paused by the user" -msgstr "Printing was paused by the user" +msgstr "Utskriften pausades av användaren" msgid "Pause of front cover falling" -msgstr "Pause of front cover falling" +msgstr "Paus av front luckan faller" msgid "Calibrating the micro lida" -msgstr "Calibrating the micro lidar" +msgstr "Kalibrerar Micro Lidar" msgid "Calibrating extrusion flow" -msgstr "Calibrating extrusion flow" +msgstr "Kalibrerar extruderings flödet" msgid "Paused due to nozzle temperature malfunction" -msgstr "Paused due to nozzle temperature malfunction" +msgstr "Pausad på grund av fel i nozzle temperaturen" msgid "Paused due to heat bed temperature malfunction" -msgstr "Paused due to heat bed temperature malfunction" +msgstr "Pausad på grund av fel i byggplattans temperatur" msgid "MC" msgstr "MC" @@ -1758,6 +1808,9 @@ msgstr "Uppdatering misslyckades." msgid "Failed to start printing job" msgstr "" +msgid "parameter name" +msgstr "" + msgid "N/A" msgstr "N/A" @@ -1910,10 +1963,10 @@ msgid "Filament 1" msgstr "Filament 1" msgid "Flushed filament" -msgstr "Flushed filament" +msgstr "Rensat filament" msgid "Filament change times" -msgstr "Filament change times" +msgstr "Filament bytes tider" msgid "Color change" msgstr "Färg byte" @@ -1925,7 +1978,7 @@ msgid "Pause" msgstr "Paus" msgid "Printer" -msgstr "Printer" +msgstr "Skrivare" msgid "Print settings" msgstr "Utskrifts inställningar" @@ -1943,7 +1996,7 @@ msgid "Model printing time" msgstr "Utskriftstid för modellen" msgid "Total" -msgstr "Total" +msgstr "Totalt" msgid "Switch to silent mode" msgstr "Ändra till tyst läge" @@ -1999,8 +2052,11 @@ msgstr "Lägg till byggplata" msgid "Auto orient" msgstr "Auto placera" -msgid "Auto arrange" -msgstr "Auto arrangera" +msgid "Arrange all objects" +msgstr "Ordna alla objekt" + +msgid "Arrange objects on selected plates" +msgstr "Ordna alla objekt på vald platta" msgid "Split to objects" msgstr "Dela upp till objekt" @@ -2018,7 +2074,7 @@ msgid "Assembly Return" msgstr "Monterings retur" msgid "return" -msgstr "return" +msgstr "tillbaka" msgid "Paint Toolbar" msgstr "Färgläggningsverktyg" @@ -2064,9 +2120,9 @@ msgid "" "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." +"Kalibreringsprogrammet avläser status på enheten för att automatiskt " +"minimera avvikelser. \n" +"Detta gör att enheten kan fungera optimalt." msgid "Calibration Flow" msgstr "Kalibrerings Flöde" @@ -2084,20 +2140,23 @@ msgid "Timelapse" msgstr "Timelapse" msgid "Monitoring Recording" -msgstr "Monitoring Recording" +msgstr "Övervaknings Inspelning" msgid "ConnectPrinter(LAN)" -msgstr "ConnectPrinter(LAN)" +msgstr "Anslut skrivare (LAN)" msgid "Please input the printer access code:" -msgstr "Please input the printer access code:" +msgstr "Ange skrivarens åtkomstkod:" 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" -"on the printer, as shown in the figure:" +"Du hittar den i ”Inställningar> Nätverk> Anslutningskod”\n" +"på skrivaren, som visas i figuren:" + +msgid "Invalid input." +msgstr "" msgid "Application is closing" msgstr "Begäran avslutas" @@ -2112,10 +2171,10 @@ msgid "Prepare" msgstr "Förbered" msgid "Preview" -msgstr "Förvisning" +msgstr "Förhandsvisning" msgid "Device" -msgstr "Device" +msgstr "Enhet" msgid "Project" msgstr "Projekt" @@ -2162,7 +2221,7 @@ msgstr "Standard Vy" #. TRN To be shown in the main menu View->Top msgid "Top" -msgstr "Top" +msgstr "Topplager" msgid "Top View" msgstr "Vy Top" @@ -2204,9 +2263,6 @@ msgstr "Nytt Pojekt" msgid "Start a new project" msgstr "Skapa nytt projekt" -msgid "Open Project" -msgstr "Öppna Projekt" - msgid "Open a project file" msgstr "Öppna en projekt fil" @@ -2315,45 +2371,48 @@ msgstr "Vy" msgid "Help" msgstr "Hjälp" +msgid "&File" +msgstr "&Fil" + +msgid "&Edit" +msgstr "" + +msgid "&View" +msgstr "&Visa" + +msgid "&Help" +msgstr "&Hjälp" + msgid "&Open G-code" -msgstr "&Open G-code" +msgstr "&Öppna G-kod" msgid "Open a G-code file" -msgstr "Open a G-code file" +msgstr "Öppna en G-kod fil" msgid "Re&load from Disk" -msgstr "Re&load from Disk" +msgstr "Ladda om från disk" msgid "Reload the plater from disk" -msgstr "Reload the plater from disk" +msgstr "Ladda om plattan från disken" msgid "Export &Toolpaths as OBJ" -msgstr "Export &Toolpaths as OBJ" +msgstr "Exportera &Toolpaths som OBJ" msgid "Export toolpaths as OBJ" -msgstr "Export toolpaths as OBJ" +msgstr "Exportera toolpaths som OBJ" msgid "Open &PrusaSlicer" -msgstr "Open &PrusaSlicer" +msgstr "Öppna &PrusaSlicer" msgid "Open PrusaSlicer" -msgstr "Open PrusaSlicer" +msgstr "Öppna PrusaSlicer" msgid "&Quit" -msgstr "&Quit" +msgstr "&Avsluta" #, c-format, boost-format msgid "Quit %s" -msgstr "Quit %s" - -msgid "&File" -msgstr "&File" - -msgid "&View" -msgstr "&View" - -msgid "&Help" -msgstr "&Help" +msgstr "Avsluta %s" msgid "Save configuration as:" msgstr "Spara konfigurationen som:" @@ -2414,7 +2473,7 @@ msgid "Translation" msgstr "Översättning" msgid "Zoom" -msgstr "Zoom" +msgstr "Zooma" msgid "Deadzone:" msgstr "Upphör:" @@ -2443,8 +2502,14 @@ msgstr "Stopp" msgid "0%" msgstr "0%" +msgid "Clean" +msgstr "" + msgid "Control" -msgstr "Control" +msgstr "Kontroll" + +msgid "Print Options" +msgstr "" msgid "100%" msgstr "100%" @@ -2678,6 +2743,15 @@ msgctxt "Layers" msgid "Bottom" msgstr "Bottenlager" +msgid "Spaghetti Detection" +msgstr "" + +msgid "Stop printing when spaghetti detected" +msgstr "" + +msgid "First Layer Inspection" +msgstr "" + msgid "Switch to per-object setting mode to edit modifier settings." msgstr "Ändra till per objekt inställningsläge till redigerings inställningar." @@ -2762,14 +2836,17 @@ msgstr "Återställ" msgid "Loading file: %s" msgstr "Laddar fil: %s" -msgid "The Config is not compatible and can not be loaded." -msgstr "Ej kompatibel konfiguration; kan inte laddas." +msgid "The 3mf is not from Bambu Lab, load geometry data only." +msgstr "" -msgid "Incompatible 3mf" -msgstr "Ej kompatibel 3mf" +msgid "Load 3mf" +msgstr "" -msgid "the 3mf is not compatible, load geometry data only!" -msgstr "3mf ej kompatibel, laddar endast geometrin !" +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 "" @@ -2785,6 +2862,12 @@ msgstr "Uppdatera mjukvaran.\n" msgid "Newer 3mf version" msgstr "Nyare 3mf version" +msgid "The 3mf is not compatible, load geometry data only!" +msgstr "" + +msgid "Incompatible 3mf" +msgstr "Ej kompatibel 3mf" + msgid "Name of components inside step file is not UTF8 format!" msgstr "Komponent namnet i step filen är inte UTF8 format!" @@ -2823,7 +2906,15 @@ msgid "Object with multiple parts was detected" msgstr "Ett objekt med multipla delar har upptäckts" msgid "The file does not contain any geometry data." -msgstr "The file does not contain any geometry data." +msgstr "Filen innehåller ingen geometrisk 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 "Exportera STL-fil:" @@ -2868,20 +2959,10 @@ msgid "" "The loaded file contains gcode only, Can not enter the Prepare page" msgstr "" -msgid "Some presets are modified." -msgstr "Några inställningar har ändrats." - msgid "You can keep the modified presets to the new project or discard them" msgstr "" "Fortsätt med redigerings inställningarna till nytt projekt eller avfärda dem" -msgid "" -"You can keep the modifield presets to the new project, discard or save " -"changes as new presets." -msgstr "" -"Fortsätt med redigerings inställningarna till nytt projekt, avfärda dem " -"eller spara som ny inställning." - msgid "Creating a new project" msgstr "Skapar nytt projekt" @@ -2912,11 +2993,17 @@ msgstr "Importera endast geometrin" msgid "Only one G-code file can be opened at the same time." msgstr "Endast en G-kod kan öppnas åt gången." +msgid "G-code loading" +msgstr "Laddar G-kod" + +msgid "G-code files can not be loaded with models together!" +msgstr "G-kod filer och modeller kan inte laddas tillsammans!!" + msgid "Can not add models when in preview mode!" -msgstr "Unable to add models in preview mode" +msgstr "Det gick inte att lägga till modeller i förhandsvisningsläge" msgid "Add Models" -msgstr "Add Models" +msgstr "Lägg till modeller" msgid "All objects will be removed, continue?" msgstr "Alla objekt kommer att raderas, fortsätta?" @@ -2976,7 +3063,7 @@ msgstr "Storlek: %1% x %2% x %3% mm\n" #, boost-format msgid "Volume: %1% in³\n" -msgstr "Volume: %1% in³\n" +msgstr "Volym: %1% i³\n" #, boost-format msgid "Volume: %1% mm³\n" @@ -3002,34 +3089,34 @@ msgid "Changing application language" msgstr "Byter språk" msgid "Changing the region will log out your account.\n" -msgstr "Changing the region will log you out of your account.\n" +msgstr "Om du ändrar regionen loggas du ut från ditt konto.\n" msgid "Region selection" -msgstr "Region selection" +msgstr "Val av region" msgid "Second" msgstr "Andra" msgid "General Settings" -msgstr "General Settings" +msgstr "Allmänna inställningar" msgid "Asia-Pacific" -msgstr "Asia-Pacific" +msgstr "Asien-Stillahavsområdet" msgid "China" -msgstr "China" +msgstr "Kina" msgid "Europe" -msgstr "Europe" +msgstr "Europa" msgid "North America" -msgstr "North America" +msgstr "Nordamerika" msgid "Others" msgstr "Andra" msgid "Login Region" -msgstr "Login Region" +msgstr "Logga in Region" msgid "Metric" msgstr "Metrisk" @@ -3044,10 +3131,12 @@ msgid "User sync" msgstr "Användar synkronisering" msgid "Auto sync user presets(Printer/Filament/Process)" -msgstr "Auto sync user presets(Printer/Filament/Process)" +msgstr "" +"Automatisk synkronisering av användarens förinställningar (skrivare/filament/" +"process)" msgid "User Sync" -msgstr "User Sync" +msgstr "Användar synkronisering" msgid "Associate files to BambuStudio" msgstr "Associerade filer till Bambu Studio" @@ -3065,7 +3154,7 @@ msgid "If enabled, sets BambuStudio as default application to open .stl files" msgstr "Om aktiverad, väljs Bambu Studio som standard att öppna .stl filer" msgid "Associate .step/.stp files to BambuStudio" -msgstr "Associate .step/.stp files to BambuStudio" +msgstr "Associera .step/.stp-filer till BambuStudio" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "Om aktiverad, väljs Bambu Studio som standard att öppna .step filer" @@ -3140,7 +3229,7 @@ msgid "trace" msgstr "spåra" msgid "Host Setting" -msgstr "Host Setting" +msgstr "Värd Inställning" msgid "DEV host: api-dev.bambu-lab.com/v1" msgstr "DEV host: api-dev.bambu-lab.com/v1" @@ -3311,13 +3400,13 @@ msgid "Other Device" msgstr "Andra Enheter" msgid "Input access code" -msgstr "Input access code" +msgstr "Inmatning av åtkomstkod" msgid "Log out successful." msgstr "Utloggning lyckades." msgid "Busy" -msgstr "Busy" +msgstr "Upptagen" msgid "Bambu Cool Plate" msgstr "Bambu Cool Plate" @@ -3332,7 +3421,7 @@ msgid "Send print job to" msgstr "Skicka utskriftsjobb till" msgid "Refresh" -msgstr "Refresh" +msgstr "Uppdatera" msgid "Bed Leveling" msgstr "Justering av Byggplattan" @@ -3347,46 +3436,64 @@ msgid "send completed" msgstr "Skicka komplett" msgid "No login account, only printers in LAN mode are displayed" -msgstr "No login account, only printers in LAN mode are displayed" +msgstr "Inget inloggningskonto, bara skrivare i LAN-läge visas" msgid "Connecting to server" -msgstr "Connecting to server" +msgstr "Ansluter till server" msgid "Synchronizing device information" -msgstr "Synchronizing device information" +msgstr "Synkroniserar enhetsinformation" msgid "Synchronizing device information time out" -msgstr "Synchronizing device information time out" +msgstr "Time-out för synkronisering av enhetsinformation" 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 "Det går inte att skicka utskriftsuppgiften när uppgraderingen pågår" msgid "" "The printer is executing instructions. Please restart printing after it ends" msgstr "" -"The printer is executing instructions. Please restart printing after it ends" +"Skrivaren utför instruktioner. Vänligen starta utskriften igen när den är " +"avslutad." msgid "The printer is busy on other print job" -msgstr "The printer is busy with another print job." +msgstr "Skrivaren är upptagen med ett annat utskriftsjobb." +#, c-format, boost-format msgid "" -"The filament index exceeds the AMS's slot count and cannot send the print " -"job." +"Filament %s 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" +"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 "" +"Filament i AMS facken har fastställts. Du kan klicka på ett filament ovan " +"för att ändra dess plats i AMS facken" 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" +"Klicka på varje filament ovan för att ange dess plats i AMS-facken innan du " +"skickar utskriftsjobbet" + +#, 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 " @@ -3394,10 +3501,10 @@ msgid "" msgstr "" msgid "Preparing print job" -msgstr "Preparing print job" +msgstr "Förbereder utskriftsjobb" msgid "Modifying the device name" -msgstr "Modifying the device name" +msgstr "Ändra enhetens namn" msgid "Log in printer" msgstr "Logga in skrivare" @@ -3431,6 +3538,13 @@ msgstr "Spara nuvarande %s" msgid "Delete this preset" msgstr "Radera denna förinställning" +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 "Linjebredd" @@ -3477,7 +3591,7 @@ msgid "Prime tower" msgstr "Prime torn" msgid "Flush options" -msgstr "Flush options" +msgstr "Rensnings alternativ" msgid "Special mode" msgstr "Special läge" @@ -3514,7 +3628,7 @@ msgid "Reserved keywords found" msgstr "Hittade reserverade nyckelord" msgid "Setting Overrides" -msgstr "Setting Overrides" +msgstr "Åsidosätter inställningar" msgid "Retraction" msgstr "Reduktion" @@ -3549,8 +3663,8 @@ 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." +"Detta är byggplattans temperatur när Cool Plate är installerad. Värdet 0 " +"betyder att filamentet inte stöder utskrift på Cool Plate." msgid "Engineering plate" msgstr "Engineering plate" @@ -3559,8 +3673,8 @@ 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." +"Detta är byggplattans temperatur när Engineering Plate är installerad. Ett " +"värde på 0 betyder att filamentet inte stöder utskrift på Engineering Plate." msgid "High Temp Plate" msgstr "High Temp Plate" @@ -3569,9 +3683,8 @@ 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." +"Detta är byggplattans temperatur när High Temp Plate är installerad. Värdet " +"0 betyder att filamentet inte stöder utskrift på High Temp Plate." msgid "Volumetric speed limitation" msgstr "Volumetrisk hastighets begränsning" @@ -3724,7 +3837,7 @@ msgid "New Value" msgstr "Nytt värde" msgid "Transfer" -msgstr "Transfer" +msgstr "Överför" msgid "Don't save" msgstr "Spara inte" @@ -3813,7 +3926,7 @@ msgid "The name \"%1%\" already exists." msgstr "Namnet \"%1%\" finns redan." msgid "Basic Info" -msgstr "Basic Info" +msgstr "Grundläggande information" msgid "Pictures" msgstr "Bilder" @@ -3865,7 +3978,7 @@ msgstr "" #, c-format, boost-format msgid "Exit %s" -msgstr "Exit %s" +msgstr "Avsluta %s" msgid "the Configuration package is incompatible with current APP." msgstr "" @@ -3882,7 +3995,7 @@ msgid "The configuration is up to date." msgstr "Konfigurationen är aktuell." msgid "Auto-Calc" -msgstr "Auto-Calc" +msgstr "Autoberäkna" msgid "Flushing volumes for filament change" msgstr "Rensnings volym för filament byte" @@ -3891,7 +4004,7 @@ msgid "Flushing volume (mm³) for each filament pair." msgstr "Rensnings volym (mm³) för varje filament." msgid "Flush multiplier" -msgstr "Flush multiplier" +msgstr "Rensnings multiplikator" msgid "unloaded" msgstr "utmatad" @@ -3911,12 +4024,6 @@ msgstr "Till" msgid "Login" msgstr "Logga in" -msgid "Filaments Selection" -msgstr "Filament Val" - -msgid "Printer Selection" -msgstr "Skrivar Val" - msgid "The configuration package is changed in previous Config Guide" msgstr "Konfigurations paketet är ändrat i föregående Kofigurations Guide" @@ -3932,59 +4039,18 @@ msgstr "Objektlista" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." msgstr "Importera geometri data från STL/STEP/3MF/OBJ/AMF filer." -msgid "Select all objects" -msgstr "Välj alla objekt" - msgid "Copy to clipboard" msgstr "Kopiera till urklipp" msgid "Paste from clipboard" msgstr "Klistra in ifrån urklipp" -msgid "Camera view - Default" -msgstr "Kamera vy - Standard" - -msgid "Camera view - Top" -msgstr "Kamera vy - Topp" - -msgid "Camera view - Bottom" -msgstr "Kamera vy - Botten" - -msgid "Camera view - Front" -msgstr "Kamera vy - Fram" - -msgid "Camera view - Behind" -msgstr "Kamera vy - Bakom" - -msgid "Camera Angle - Left side" -msgstr "Kamera vy - Vänster sida" - -msgid "Camera Angle - Right side" -msgstr "Kamera vy - Höger sida" - -msgid "keyboard 1-9: set filament for object/part" -msgstr "tangentbord 1-9: fastställer filament för objekt/del" - msgid "Show keyboard shortcuts list" msgstr "Visa tangentbordets genvägs lista" msgid "Global shortcuts" msgstr "Övergripande genvägar" -msgid "Arrange all objects" -msgstr "Ordna alla objekt" - -msgid "Arrange objects on selected plates" -msgstr "Ordna alla objekt på vald platta" - -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 placera valda objekt eller alla objekt. Om det finns valda objekt så " -"placeras endast dem. Alternativt så placeras alla objekt i projektet." - msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -3993,12 +4059,33 @@ msgstr "" "Auto placera valda objekt eller alla objekt. Om det finns valda objekt så " "placeras endast dem. Alternativt så placeras alla objekt på nuvarande disk." +msgid "Collapse/Expand the sidebar" +msgstr "Dölj/Visa meny" + +msgid "⌘+Any arrow" +msgstr "" + +msgid "Movement in camera space" +msgstr "Rörelse i kamera område" + +msgid "⌥+Left mouse button" +msgstr "" + +msgid "Select a part" +msgstr "" + msgid "⌘+Left mouse button" msgstr "" msgid "Select multiple objects" msgstr "Välj flera objekt" +msgid "Ctrl+Any arrow" +msgstr "" + +msgid "Alt+Left mouse button" +msgstr "" + msgid "Ctrl+Left mouse button" msgstr "" @@ -4038,17 +4125,53 @@ msgstr "" msgid "Movement step set to 1 mm" msgstr "Rörelse steg är vald till 1mm" -msgid "⌘+Any arrow" +msgid "keyboard 1-9: set filament for object/part" +msgstr "tangentbord 1-9: fastställer filament för objekt/del" + +msgid "Camera view - Default" +msgstr "Kamera vy - Standard" + +msgid "Camera view - Top" +msgstr "Kamera vy - Topp" + +msgid "Camera view - Bottom" +msgstr "Kamera vy - Botten" + +msgid "Camera view - Front" +msgstr "Kamera vy - Fram" + +msgid "Camera view - Behind" +msgstr "Kamera vy - Bakom" + +msgid "Camera Angle - Left side" +msgstr "Kamera vy - Vänster sida" + +msgid "Camera Angle - Right side" +msgstr "Kamera vy - Höger sida" + +msgid "Select all objects" +msgstr "Välj alla objekt" + +msgid "Gizmo move" msgstr "" -msgid "Movement in camera space" -msgstr "Rörelse i kamera område" +msgid "Gizmo scale" +msgstr "" -msgid "Ctrl+Any arrow" +msgid "Gizmo rotate" msgstr "" -msgid "Collapse/Expand the sidebar" -msgstr "Dölj/Visa meny" +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 "Plätering/Förgyllning" @@ -4081,7 +4204,7 @@ msgid "Delete objects, parts, modifiers " msgstr "Radera objekten, delarna och anpassningar " msgid "Space" -msgstr "Space" +msgstr "Mellanslag" msgid "Select the object/part and press space to change the name" msgstr "Välj objektet/delen och tryck space för att ändra namnet" @@ -4369,11 +4492,11 @@ 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." +msgstr "%1% är för nära andra och kan orsaka kollisioner." #, boost-format msgid "%1% is too tall, and collisions will be caused." -msgstr "%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 will be collisions when printing.\n" msgstr " för tätt inpå andra, utskriften kolliderar.\n" @@ -4386,10 +4509,11 @@ msgid "Prime Tower" msgstr "Prime Torn" msgid " is too close to others, and collisions may be caused.\n" -msgstr " is too close to others, and collisions may be caused.\n" +msgstr "är för nära andra och kollisioner kan orsakas.\n" msgid " is too close to exclusion area, and collisions will be caused.\n" -msgstr " is too close to exclusion area, and collisions will be caused.\n" +msgstr "" +" är för nära uteslutningsområdet, och kollisioner kommer att orsakas.\n" msgid "" "Can not print multiple filaments which have large difference of temperature " @@ -4484,6 +4608,12 @@ msgstr "Utskriftsbar yta" msgid "Bed exclude area" msgstr "Utesluten yta av byggplattan" +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 "Elephant foot compensation" msgstr "Elefant fots kompensation" @@ -4533,11 +4663,11 @@ 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 initial one. A value " -"of 0 means the filament does not support printing on the Cool Plate." +"Detta är byggplattans temperatur för lager förutom det första. Värdet 0 " +"betyder att filamentet inte stöder utskrift på Cool Plate." msgid "°C" -msgstr "°C" +msgstr "° C" msgid "Bed temperature" msgstr "Byggplattans temperatur" @@ -4546,15 +4676,15 @@ 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 initial one. A value " -"of 0 means the filament does not support printing on the Engineering Plate." +"Detta är byggplattans temperatur för lager förutom det första. Ett värde på " +"0 betyder att filamentet inte stöder utskrift på 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 initial one. A value " -"of 0 means the filament does not support printing on the High Temp Plate." +"Detta är byggplattans temperatur för lager förutom det första. Värdet 0 " +"betyder att filamentet inte stöder utskrift på High Temp Plate." msgid "Initial layer" msgstr "Första lager" @@ -4566,22 +4696,22 @@ 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 initial layer. A value of 0 means the " -"filament does not support printing on the Cool Plate." +"Detta är byggplattans temperatur för första lager. Värdet 0 betyder att " +"filamentet inte stöder utskrift på 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 initial layer. A value of 0 means the " -"filament does not support printing on the Engineering Plate." +"Detta är byggplattans temperatur för första lager. Värdet 0 betyder att " +"filamentet inte stöder utskrift på 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 initial layer. A value of 0 means the " -"filament does not support printing on the High Temp Plate." +"Detta är byggplattans temperatur för första lager. Värdet 0 betyder att " +"filamentet inte stöder utskrift på High Temp Plate." msgid "Bed types supported by the printer" msgstr "Byggplattans typ stöds av skrivaren" @@ -4667,14 +4797,14 @@ msgstr "" "bridges/bryggor, detta för att förbättra kvaliteten" msgid "Only one wall on top surfaces" -msgstr "Only one wall on top surfaces" +msgstr "Endast en vägg på topp ytan" 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 surface, to give more space to the top infill " -"pattern" +"Använd endast en vägg på topp ytan, för att ge mer utrymme till det övre " +"ifyllningsmönstret" msgid "Slow down for overhang" msgstr "Sakta ner vid överhäng" @@ -4817,16 +4947,16 @@ msgid "" msgstr "" msgid "Max bridge length" -msgstr "Max bridge length" +msgstr "Max bridge/brygg längd" 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 "" -"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." +"Maxlängd för bridge/brygga som inte behöver support. Ange 0 om du vill att " +"alla bridges/bryggor ska få support, och ett mycket stort värde om du inte " +"vill att några bridges/bryggor ska få support." msgid "End G-code" msgstr "Slut G-kod" @@ -4853,7 +4983,7 @@ msgid "Monotonic" msgstr "Monoton" msgid "Monotonic line" -msgstr "Monotonic line" +msgstr "Monoton linje" msgid "Bottom surface pattern" msgstr "Botten ytans mönster" @@ -5043,7 +5173,8 @@ msgstr "Support material" msgid "" "Support material is commonly used to print support and support interface" msgstr "" -"Support material is commonly used to print support and support interface" +"Support material används ofta för att skriva ut support och stödja " +"gränssnittet" msgid "Temperature of vitrificaiton" msgstr "Kristalliserings temperatur" @@ -5098,7 +5229,7 @@ msgid "Line" msgstr "Linje" msgid "Cubic" -msgstr "Cubic" +msgstr "Kubisk" msgid "Tri-hexagon" msgstr "Tri-hexagon" @@ -5116,8 +5247,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" +"Acceleration av fyllning av toppytan. Att använda ett lägre värde kan " +"förbättra ytkvaliteten" msgid "" "Acceleration of initial layer. Using a lower value can improve build plate " @@ -5520,10 +5651,10 @@ msgid "Diameter of nozzle" msgstr "Diametern på nozzeln" msgid "Nozzle volume" -msgstr "Nozzle volume" +msgstr "Nozzle volym" msgid "Volume of nozzle between the cutter and the end of nozzle" -msgstr "Volume of nozzle between the cutter and the end of nozzle" +msgstr "Volymen av nozzlen mellan skäraren och nozzlens ände" msgid "Reduce infill retraction" msgstr "Minska ifyllnads retraktionen" @@ -5688,7 +5819,7 @@ msgid "The start position to print each part of outer wall" msgstr "Utskriftens start position för varje del av yttre väggen" msgid "Nearest" -msgstr "Nearest" +msgstr "Närmaste" msgid "Aligned" msgstr "Linjerad" @@ -5735,8 +5866,8 @@ msgstr "Linjebredd med inre solid ifyllnad" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "Hastighet för inre solid ifyllnad, förrutom topp och botten ytorna" -msgid "Spiral mode" -msgstr "Spiral läge" +msgid "Spiral vase" +msgstr "" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " @@ -5747,15 +5878,16 @@ msgstr "" "konturen och förvandlar en solid modell till en enkelväggig utskrift med " "solida bottenlager. Den slutgiltligt genererade modellen har ingen söm" -msgid "Timelapse without toolhead" -msgstr "" - 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 "Temperature variation" msgstr "Temperatur variation" @@ -5784,10 +5916,10 @@ msgstr "" "skapas" msgid "normal(auto)" -msgstr "normal(auto)" +msgstr "normal (auto)" msgid "tree(auto)" -msgstr "tree(auto)" +msgstr "träd(auto)" msgid "hybrid(auto)" msgstr "hybrid(auto)" @@ -5796,7 +5928,7 @@ msgid "normal" msgstr "normal" msgid "tree" -msgstr "tree" +msgstr "träd" msgid "Support/object xy distance" msgstr "Support/objekt xy distans" @@ -6094,7 +6226,7 @@ msgid "Width of prime tower" msgstr "Prime tornets bredd" msgid "Flush into objects' infill" -msgstr "Flush into objects' infill" +msgstr "Rensa in i föremålens ifyllnad" msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -6102,31 +6234,32 @@ msgid "" "printed with transparent filament, the mixed color infill will be seen " "outside" msgstr "" -"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 visible." +"Rensning efter filamentbyte kommer att göras inuti objektens fyllningar. " +"Detta kan minska mängden avfall och minska utskriftstiden. Om väggarna är " +"tryckta med transparent filament kommer den blandade färgfyllningen att " +"synas." msgid "Flush into objects' support" -msgstr "Flush into objects' support" +msgstr "Rensa in i objektets support" 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." +"Rensning efter filamentändring kommer att göras inuti objektens support. " +"Detta kan minska mängden avfall och minska utskriftstiden." msgid "Flush into this object" -msgstr "Flush into this object" +msgstr "Rensa in i det här objektet" 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. Colours of the objects will be mixed " -"as a result" +"Detta objekt kommer att användas för att rensa nozzlen efter ett filament " +"byte för att spara filament och minska utskriftstiden. Objektens färger " +"blandas som ett resultat" msgid "X-Y hole compensation" msgstr "X-Y håls kompensation" @@ -6199,10 +6332,10 @@ msgid "Arrange options: 0-disable, 1-enable, others-auto" msgstr "Placera val: 0-inaktivera, 1-aktivera, andra-auto" msgid "Convert Unit" -msgstr "Convert Unit" +msgstr "Konvertera enhet" msgid "Convert the units of model" -msgstr "Convert the units of model" +msgstr "Konvertera modellens enheter" msgid "Orient the model" msgstr "Orientera modellen" @@ -6294,76 +6427,37 @@ msgstr "Fel i linje %1%:\n" #, c-format, boost-format msgid "Support: generate toolpath at layer %d" -msgstr "Support: generate toolpath at layer %d" +msgstr "Support: generera verktygsbana vid lager %d" msgid "Support: detect overhangs" -msgstr "Support: detect overhangs" +msgstr "Support: upptäck överhäng" msgid "Support: generate contact points" -msgstr "Support: generate contact points" +msgstr "Support: generera kontaktpunkter" msgid "Support: propagate branches" -msgstr "Support: propagate branches" +msgstr "Support: föröka grenar" msgid "Support: draw polygons" -msgstr "Support: draw polygons" +msgstr "Support: rita polygoner" msgid "Support: generate toolpath" -msgstr "Support: generate toolpath" +msgstr "Support: generera verktygsbana" #, c-format, boost-format msgid "Support: generate polygons at layer %d" -msgstr "Support: generate polygons at layer %d" +msgstr "Support: generera polygoner vid lager %d" #, c-format, boost-format msgid "Support: fix holes at layer %d" -msgstr "Support: fix holes at layer %d" +msgstr "Support: åtgärda hål vid lager %d" #, c-format, boost-format msgid "Support: propagate branches at layer %d" -msgstr "Support: propagate branches at layer %d" - -#~ msgid "Creating" -#~ msgstr "Creating" - -#~ msgid "Uploading" -#~ msgstr "Uploading" - -#~ msgid "Waiting" -#~ msgstr "Waiting" - -#~ msgid "Sending" -#~ msgstr "Sending" - -#~ msgid "Finished" -#~ msgstr "Finished" - -#~ msgid "Please fill report first." -#~ msgstr "Fyll i rapporten först." - -#~ msgid "Unable to create zip file" -#~ msgstr "Unable to create zip file" - -#~ msgid "Enter a search term" -#~ msgstr "Enter a search term" - -#~ msgid "Debug" -#~ msgstr "Felsök" - -#~ msgid "Monitoring" -#~ msgstr "Övervakar" - -#~ msgid "Fragment filter" -#~ msgstr "Fragment filter" - -#~ msgid "Fragment Filter" -#~ msgstr "Fragment Filter" - -#~ msgid "Position:" -#~ msgstr "Position:" +msgstr "Support: föröka grenar vid lager %d" #~ msgid "Alt + Mouse wheel" -#~ msgstr "Alt + Mouse wheel" +#~ msgstr "Alt + mushjul" #~ msgid "" #~ "An object is layed over the boundary of plate.\n" @@ -6372,11 +6466,31 @@ msgstr "Support: propagate branches at layer %d" #~ "Ett objekt är placerad över byggplattans begränsningar.\n" #~ "Flytta objektet så det är helt inom eller utom byggplattans begränsningar." +#~ msgid "Auto arrange" +#~ msgstr "Auto arrangera" + +#~ 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 placera valda objekt eller alla objekt. Om det finns valda objekt så " +#~ "placeras endast dem. Alternativt så placeras alla objekt i projektet." + +#~ msgid "Clear all" +#~ msgstr "Rensa allt" + +#~ msgid "Creating" +#~ msgstr "Skapar" + #~ msgid "Ctrl + Any arrow" -#~ msgstr "Ctrl + Any arrow" +#~ msgstr "Ctrl + Valfri pil" #~ msgid "Ctrl + Left mouse button" -#~ msgstr "Ctrl + Left mouse button" +#~ msgstr "Ctrl + Vänster musknapp" + +#~ msgid "Debug" +#~ msgstr "Felsök" #~ msgid "Display printable box" #~ msgstr "Visa utskriftbar box" @@ -6394,11 +6508,11 @@ msgstr "Support: propagate branches at layer %d" #~ "2. The Filament presets\n" #~ "3. The Printer presets\n" #~ msgstr "" -#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" -#~ "Contains the following information:\n" -#~ "1. Process presets\n" -#~ "2. Filament presets\n" -#~ "3. Printer presets\n" +#~ "Vill du synkronisera din personliga data från Bambu Cloud?\n" +#~ "Innehåller följande information:\n" +#~ "1. Process förinställningar\n" +#~ "2. Filament förinställningar\n" +#~ "3. Skrivare förinställningar\n" #~ msgid "" #~ "Don't retract when the travel is in infill area absolutely. That means " @@ -6407,11 +6521,29 @@ msgstr "Support: propagate branches at layer %d" #~ "Detta inaktiverar retraktion när rörelsen är helt inom ett ifyllnads " #~ "området och det inte kan läcka filament" +#~ msgid "Enter a search term" +#~ msgstr "Ange ett sökord" + +#~ msgid "Filaments Selection" +#~ msgstr "Filament Val" + +#~ msgid "Finished" +#~ msgstr "Färdig" + #~ msgid "Fix model locally" -#~ msgstr "Fix model locally" +#~ msgstr "Åtgärda modellen lokalt" #~ msgid "Fix model through cloud" -#~ msgstr "Fix model through cloud" +#~ msgstr "Åtgärda modellen via molnet" + +#~ msgid "Fragment Filter" +#~ msgstr "Fragment Filter" + +#~ msgid "Fragment area" +#~ msgstr "Fragmentområde" + +#~ msgid "Fragment filter" +#~ msgstr "Fragment filter" #~ msgid "" #~ "Heat the nozzle to target \n" @@ -6421,13 +6553,16 @@ msgstr "Support: propagate branches at layer %d" #~ "temperatur" #~ msgid "In the calibration of extrusion flow" -#~ msgstr "In the calibration of extrusion flow" +#~ msgstr "Vid kalibrering av extruderingsflödet" #~ msgid "In the calibration of laser scanner" -#~ msgstr "In the calibration of laser scanner" +#~ msgstr "Vid kalibrering av laserskanner" #~ msgid "Module" -#~ msgstr "Module" +#~ msgstr "Modul" + +#~ msgid "Monitoring" +#~ msgstr "Övervakar" #~ msgid "New version of Bambu Studio" #~ msgstr "Ny version av Bambu Studio" @@ -6436,26 +6571,35 @@ msgstr "Support: propagate branches at layer %d" #~ msgstr "Utdatafil" #~ msgid "Pause(heated bed temperature error)" -#~ msgstr "Pause(heated bed temperature error)" +#~ msgstr "Paus (temperaturfel i byggplattan)" #~ msgid "Pause(hotend temperature error)" -#~ msgstr "Pause(hotend temperature error)" +#~ msgstr "Paus (fel på temperaturen i hotend)" #~ msgid "Pause(toolhead shell off)" -#~ msgstr "Pause(toolhead shell off)" +#~ msgstr "Paus (verktygshuvudets skal är av)" + +#~ msgid "Please fill report first." +#~ msgstr "Fyll i rapporten först." #~ msgid "Please upgrade your printer first" -#~ msgstr "Please upgrade your printer first" +#~ msgstr "Uppgradera din skrivare först" + +#~ msgid "Position:" +#~ msgstr "Position:" #~ msgid "" #~ "Preview only mode:\n" #~ "The loaded file contains gcode only." #~ msgstr "" -#~ "Preview only mode:\n" -#~ "The loaded file contains gcode only." +#~ "Endast förhandsgranskningsläge:\n" +#~ "Den inlästa filen innehåller endast G-kod." #~ msgid "Preview only mode for gcode file." -#~ msgstr "Preview only mode for gcode file." +#~ msgstr "Endast förhandsgranskningsläge för G-kod." + +#~ msgid "Printer Selection" +#~ msgstr "Skrivar Val" #~ msgid "" #~ "Push new filament \n" @@ -6464,11 +6608,14 @@ msgstr "Support: propagate branches at layer %d" #~ "Mata nytt filament\n" #~ "till extrudern" +#~ msgid "Sending" +#~ msgstr "Skickar" + #~ msgid "Shift + Any arrow" -#~ msgstr "Shift + Any arrow" +#~ msgstr "Skift+valfri pil" #~ msgid "Shift + Mouse wheel" -#~ msgstr "Shift + Mouse wheel" +#~ msgstr "Shift+mushjulet" #~ msgid "Show Model Mesh(TODO)" #~ msgstr "Visa Modell Mesh(TODO)" @@ -6479,19 +6626,38 @@ msgstr "Support: propagate branches at layer %d" #~ msgid "Show Printable Box(TODO)" #~ msgstr "Visa Utskriftbar Box(TODO)" +#~ msgid "Spiral mode" +#~ msgstr "Spiral läge" + #~ 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" +#~ "Framgångsrikt skickat. Kommer automatiskt att hoppa till enhetssidan om " +#~ "%s s" #~ msgid "Swith cloud environment, Please login again!" #~ msgstr "Byte av moln miljö, Logga in igen!" +#~ msgid "The Config is not compatible and can not be loaded." +#~ msgstr "Ej kompatibel konfiguration; kan inte laddas." + #~ 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 printer and AMS are too low.Please update to the " -#~ "latest version before sending the print job" +#~ "Programvarans version av skrivare och AMS är för låga. Uppdatera till den " +#~ "senaste versionen innan du skickar utskriftsjobbet" + +#~ msgid "Unable to create zip file" +#~ msgstr "Det gick inte att skapa zip-fil" + +#~ msgid "Uploading" +#~ msgstr "Laddar upp" #~ msgid "User pause" -#~ msgstr "User pause" +#~ msgstr "Användarpaus" + +#~ msgid "Waiting" +#~ msgstr "Väntar" + +#~ 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 f83ab5c5783..de8200ad3a1 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-07-23 18:15+0800\n" -"PO-Revision-Date: 2022-07-22 13:28+0800\n" +"POT-Creation-Date: 2022-08-08 20:01+0800\n" +"PO-Revision-Date: 2022-08-07 21:57+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" "Language: zh_CN\n" @@ -56,8 +56,8 @@ msgstr "缝隙填充" msgid "Perform" msgstr "执行" -msgid "Fragment area" -msgstr "碎片面积阈值" +msgid "Gap area" +msgstr "" msgid "Set pen size" msgstr "设置画笔大小" @@ -126,9 +126,6 @@ msgstr "选择耗材丝" msgid "Edge detection" msgstr "边沿检测" -msgid "Clear all" -msgstr "清除所有" - msgid "Triangles" msgstr "三角形" @@ -339,20 +336,35 @@ msgstr "外观面检测" msgid "Perform Recognition" msgstr "执行检测" -msgid "Cube" -msgstr "立方体" +msgid "Reset direction" +msgstr "重置方向" -msgid "Cylinder" -msgstr "圆柱体" +msgid "Brush size" +msgstr "画刷尺寸" -msgid "Cone" -msgstr "锥体" +msgid "Brush shape" +msgstr "画刷形状" -msgid "Timelapse Wipe Tower" -msgstr "延时摄影擦料塔" +msgid "Enforce seam" +msgstr "添加Z缝" -msgid "Add Modifier" -msgstr "添加修改器" +msgid "Block seam" +msgstr "屏蔽Z缝" + +msgid "Remove selection" +msgstr "移除绘制" + +msgid "Seam painting" +msgstr "Z缝绘制" + +msgid "Entering Seam painting" +msgstr "" + +msgid "Leaving Seam painting" +msgstr "推出Z缝绘制" + +msgid "Paint-on seam editing" +msgstr "" msgid "Notice" msgstr "通知" @@ -420,12 +432,15 @@ msgstr "严重错误" msgid "BambuStudio got an unhandled exception: %1%" msgstr "Bambu Studio捕捉到一个未处理的异常:%1%" -msgid "Downloading Bambu Network plug-in" +msgid "Downloading Bambu Network Plug-in" msgstr "正在下载Bambu网络插件" +msgid "Incorrect password" +msgstr "访问码不正确" + #, c-format, boost-format -msgid "Connect %s[SN:%s] failed!" -msgstr "连接 %s[SN:%s]失败." +msgid "Connect %s failed! [SN:%s, code=%s]" +msgstr "连接 %s 失败 [SN:%s, code=%s]" msgid "" "BambuStudio configuration file may be corrupted and is not abled to be " @@ -479,6 +494,23 @@ msgstr "选择一个或多个文件(3mf/step/stl/obj/amf):" msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" msgstr "选择一个文件(gcode/.gco/.g/.ngc/ngc):" +msgid "Some presets are modified." +msgstr "预设已被修改。" + +msgid "" +"You can keep the modifield presets to the new project, discard or save " +"changes as new presets." +msgstr "您可以保留未保存修改的预设应用到新项目中,或者选择忽略。" + +msgid "User logged out" +msgstr "用户登出" + +msgid "new or open project file is not allowed during the slicing process!" +msgstr "在切片过程不允许新建或打开项目文件!" + +msgid "Open Project" +msgstr "打开项目" + msgid "" "The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" @@ -505,12 +537,6 @@ msgstr "语言" msgid "*" msgstr "*" -msgid "G-code files can not be loaded with models together!" -msgstr "G-code文件不能和模型一起加载" - -msgid "G-code loading" -msgstr "正在加载G-code文件" - msgid "Select a G-code file:" msgstr "选择一个G-code文件:" @@ -599,6 +625,18 @@ msgstr "删除所选对象" msgid "Load..." msgstr "加载..." +msgid "Cube" +msgstr "立方体" + +msgid "Cylinder" +msgstr "圆柱体" + +msgid "Cone" +msgstr "锥体" + +msgid "Timelapse Wipe Tower" +msgstr "延时摄影擦料塔" + msgid "Add settings" msgstr "添加设置" @@ -795,6 +833,9 @@ msgstr "锁定" msgid "Name" msgstr "名称" +msgid "Fila." +msgstr "耗材丝" + #, c-format, boost-format msgid "%1$d error repaired" msgid_plural "%1$d errors repaired" @@ -843,6 +884,9 @@ msgstr "错误!" msgid "Generic" msgstr "通用" +msgid "Add Modifier" +msgstr "添加修改器" + msgid "Deleting the last solid part is not allowed." msgstr "不允许删除对象的最后一个实体零件。" @@ -1055,6 +1099,9 @@ msgid "" "Arrange failed. Found some exceptions when processing object geometries." msgstr "自动摆放失败,处理对象几何数据时遇到异常。" +msgid "Arranging" +msgstr "自动摆盘中" + msgid "Arranging canceled." msgstr "已取消自动摆放。" @@ -1250,12 +1297,12 @@ msgstr "" "软件中的很多部分都来自于社区贡献,因此,我们无法逐一列出他们,相反的,他们将被" "注释于相应的代码中。" +msgid "AMSMaterialsSetting" +msgstr "" + msgid "Colour" msgstr "颜色" -msgid "SN" -msgstr "" - msgid "" "Nozzle\n" "Temperature" @@ -1271,9 +1318,22 @@ msgstr "最小" msgid "The input value should be greater than %1% and less than %2%" msgstr "输入的范围在 %1% 和 %2% 之间" +msgid "SN" +msgstr "" + msgid "Confirm" msgstr "确定" +msgid "Close" +msgstr "关闭" + +msgid "AMS Slots" +msgstr "AMS舱内材料" + +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "仅允许选择放入同种材质耗材丝的AMS槽位" + msgid "Insertion update" msgstr "插入料时更新" @@ -1318,9 +1378,6 @@ msgstr "AMS不会在启动时自动读取耗材丝信息。它会使用上次关 msgid "File" msgstr "文件" -msgid "Close" -msgstr "关闭" - msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" @@ -1543,15 +1600,6 @@ msgstr "" "是 - 自动调整这些设置并开启旋转模式\n" "否 - 暂不使用旋转模式" -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 "" -"在录制无工具头延时摄影视频时,建议添加“延时摄影擦料塔”\n" -"右键单击构建板的空白位置,选择“添加标准模型”->“延时摄影擦料塔”。\n" - msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -1704,6 +1752,9 @@ msgstr "更新失败。" msgid "Failed to start printing job" msgstr "发起打印任务失败" +msgid "parameter name" +msgstr "参数名称" + msgid "N/A" msgstr "N/A" @@ -1946,8 +1997,11 @@ msgstr "添加新盘" msgid "Auto orient" msgstr "自动朝向" -msgid "Auto arrange" -msgstr "自动摆盘" +msgid "Arrange all objects" +msgstr "全局整理" + +msgid "Arrange objects on selected plates" +msgstr "单盘整理" msgid "Split to objects" msgstr "拆分为对象" @@ -2047,6 +2101,9 @@ msgstr "" "你可以在打印机“设置->网络->连接->访问码\"\n" "查看,如下图所示:" +msgid "Invalid input." +msgstr "" + msgid "Application is closing" msgstr "正在关闭应用程序" @@ -2152,9 +2209,6 @@ msgstr "新建项目" msgid "Start a new project" msgstr "新建一个项目" -msgid "Open Project" -msgstr "打开项目" - msgid "Open a project file" msgstr "打开项目文件" @@ -2263,6 +2317,18 @@ msgstr "视图" msgid "Help" msgstr "帮助" +msgid "&File" +msgstr "" + +msgid "&Edit" +msgstr "" + +msgid "&View" +msgstr "" + +msgid "&Help" +msgstr "" + msgid "&Open G-code" msgstr "打开G-code" @@ -2294,15 +2360,6 @@ msgstr "" msgid "Quit %s" msgstr "" -msgid "&File" -msgstr "" - -msgid "&View" -msgstr "" - -msgid "&Help" -msgstr "" - msgid "Save configuration as:" msgstr "预设另存为:" @@ -2396,9 +2453,15 @@ msgstr "停止" msgid "0%" msgstr "0%" +msgid "Clean" +msgstr "清除" + msgid "Control" msgstr "控制" +msgid "Print Options" +msgstr "打印选项" + msgid "100%" msgstr "100%" @@ -2626,6 +2689,15 @@ msgctxt "Layers" msgid "Bottom" msgstr "底部" +msgid "Spaghetti Detection" +msgstr "炒面检测" + +msgid "Stop printing when spaghetti detected" +msgstr "当发生炒面时停止打印" + +msgid "First Layer Inspection" +msgstr "首层扫描" + msgid "Switch to per-object setting mode to edit modifier settings." msgstr "切换到对象模式以编辑修改器的设置。" @@ -2710,14 +2782,17 @@ msgstr "恢复" msgid "Loading file: %s" msgstr "加载文件:%s" -msgid "The Config is not compatible and can not be loaded." -msgstr "该配置不兼容,无法被加载。" +msgid "The 3mf is not from Bambu Lab, load geometry data only." +msgstr "该3mf文件不兼容,仅加载几何数据。" -msgid "Incompatible 3mf" -msgstr "不兼容的3mf" +msgid "Load 3mf" +msgstr "加载3mf" -msgid "the 3mf is not compatible, load geometry data only!" -msgstr "该3mf文件不兼容,仅加载几何数据!" +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 "" @@ -2731,6 +2806,12 @@ msgstr "建议升级您的软件版本。\n" msgid "Newer 3mf version" msgstr "较新的3mf版本" +msgid "The 3mf is not compatible, load geometry data only!" +msgstr "" + +msgid "Incompatible 3mf" +msgstr "不兼容的3mf" + msgid "Name of components inside step file is not UTF8 format!" msgstr "step 文件中的部件名称包含非UTF8格式的字符!" @@ -2770,6 +2851,14 @@ msgstr "检测到多零件对象" msgid "The file does not contain any geometry data." msgstr "此文件不包含任何几何数据。" +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 "导出 STL 文件:" @@ -2815,17 +2904,9 @@ msgstr "" "仅预览模式:\n" "被加载的文件仅包含G-Code,不支持进入准备页面" -msgid "Some presets are modified." -msgstr "预设已被修改。" - msgid "You can keep the modified presets to the new project or discard them" msgstr "您可以保留修改的预设到新项目中或者忽略这些修改" -msgid "" -"You can keep the modifield presets to the new project, discard or save " -"changes as new presets." -msgstr "您可以保留未保存修改的预设应用到新项目中,或者选择忽略。" - msgid "Creating a new project" msgstr "创建新项目" @@ -2856,6 +2937,12 @@ msgstr "仅导入模型数据" msgid "Only one G-code file can be opened at the same time." msgstr "只能同时打开一个G-code文件。" +msgid "G-code loading" +msgstr "正在加载G-code文件" + +msgid "G-code files can not be loaded with models together!" +msgstr "G-code文件不能和模型一起加载" + msgid "Can not add models when in preview mode!" msgstr "在预览模式不允许添加模型" @@ -3309,12 +3396,16 @@ msgstr "打印机正在执行指令,请在其结束后重新发起打印" msgid "The printer is busy on other print job" msgstr "打印机正在执行其他打印任务" +#, c-format, boost-format msgid "" -"The filament index exceeds the AMS's slot count and cannot send the print " -"job." -msgstr "" -"打印机固件仅支持材料=>AMS槽位的顺序映射。材料编号超过AMS的槽位数量,无法发送" -"打印任务。" +"Filament %s exceeds the number of AMS slots. Please update the printer " +"firmware to support AMS slot assignment." +msgstr "材料编号%s超出AMS槽位数量,请更新打印机固件以支持AMS槽位映射功能" + +msgid "" +"Filament exceeds the number of AMS slots. Please update the printer firmware " +"to support AMS slot assignment." +msgstr "材料编号超出AMS槽位数量,请更新打印机固件以支持AMS槽位映射功能" msgid "" "Filaments to AMS slots mappings have been established. You can click a " @@ -3328,6 +3419,20 @@ msgid "" "sending the print job" msgstr "请在发送打印前点击上方各个耗材丝,指定其所对应的AMS槽位" +#, 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 "" +"材料编号%s和AMS槽位%s中的耗材丝材质不匹配,请更新打印机固件以支持AMS槽位映射" +"功能" + +msgid "" +"Filament does not match the filament in AMS slot. Please update the printer " +"firmware to support AMS slot assignment." +msgstr "" +"材料编号和AMS槽位中的耗材丝材质不匹配,请更新打印机固件以支持AMS槽位映射功能" + msgid "" "The printer firmware only supports sequential mapping of filament => AMS " "slot." @@ -3371,6 +3476,15 @@ msgstr "保存当前 %s" msgid "Delete this preset" 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 "" +"在录制无工具头延时摄影视频时,建议添加“延时摄影擦料塔”\n" +"右键单击构建板的空白位置,选择“添加标准模型”->“延时摄影擦料塔”。\n" + msgid "Line width" msgstr "线宽" @@ -3814,12 +3928,6 @@ msgstr "到" msgid "Login" msgstr "登录" -msgid "Filaments Selection" -msgstr "材料选择" - -msgid "Printer Selection" -msgstr "打印机选择" - msgid "The configuration package is changed in previous Config Guide" msgstr "参数配置包在之前的配置向导中发生了变更" @@ -3835,59 +3943,18 @@ msgstr "对象列表" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." msgstr "从STL/STEP/3MF/OBJ/AMF文件中导入几何数据" -msgid "Select all objects" -msgstr "选择所有对象" - msgid "Copy to clipboard" msgstr "复制到剪贴板" msgid "Paste from clipboard" msgstr "从剪切板粘贴" -msgid "Camera view - Default" -msgstr "摄像机视角 - 默认" - -msgid "Camera view - Top" -msgstr "摄像机视角 - 顶部" - -msgid "Camera view - Bottom" -msgstr "摄像机视角 - 底部" - -msgid "Camera view - Front" -msgstr "摄像机视角 - 前面" - -msgid "Camera view - Behind" -msgstr "摄像机视角 - 后面" - -msgid "Camera Angle - Left side" -msgstr "摄像机视角 - 左面" - -msgid "Camera Angle - Right side" -msgstr "摄像机视角 - 右面" - -msgid "keyboard 1-9: set filament for object/part" -msgstr "按键1-9:设置对象/零件的耗材丝" - msgid "Show keyboard shortcuts list" msgstr "显示键盘快捷键列表" msgid "Global shortcuts" msgstr "全局快捷键" -msgid "Arrange all objects" -msgstr "全局整理" - -msgid "Arrange objects on selected plates" -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 project." -msgstr "" -"自动调整选定零件/所有零件的方向,\n" -"有选定零件时调整选定零件的朝向,没有选择零件时调整所有零件的朝向" - msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -3896,12 +3963,33 @@ msgstr "" "自动调整选定零件/所有零件的方向,\n" "有选定零件时调整选定零件的朝向,没有选择零件时调整当前盘所有零件的朝向" +msgid "Collapse/Expand the sidebar" +msgstr "收起/展开 侧边栏" + +msgid "⌘+Any arrow" +msgstr "⌘+方向键" + +msgid "Movement in camera space" +msgstr "沿相机视角移动对象" + +msgid "⌥+Left mouse button" +msgstr "⌥+鼠标左键" + +msgid "Select a part" +msgstr "选择单个零件" + msgid "⌘+Left mouse button" msgstr "⌘+鼠标左键" msgid "Select multiple objects" msgstr "选择多个对象" +msgid "Ctrl+Any arrow" +msgstr "Ctrl+方向键" + +msgid "Alt+Left mouse button" +msgstr "Alt+鼠标左键" + msgid "Ctrl+Left mouse button" msgstr "Ctrl+鼠标左键" @@ -3941,17 +4029,53 @@ msgstr "Shift+方向键" msgid "Movement step set to 1 mm" msgstr "沿X、Y轴以1mm为步进移动对象" -msgid "⌘+Any arrow" -msgstr "⌘+方向键" +msgid "keyboard 1-9: set filament for object/part" +msgstr "按键1-9:设置对象/零件的耗材丝" -msgid "Movement in camera space" -msgstr "沿相机视角移动对象" +msgid "Camera view - Default" +msgstr "摄像机视角 - 默认" -msgid "Ctrl+Any arrow" -msgstr "Ctrl+方向键" +msgid "Camera view - Top" +msgstr "摄像机视角 - 顶部" -msgid "Collapse/Expand the sidebar" -msgstr "收起/展开 侧边栏" +msgid "Camera view - Bottom" +msgstr "摄像机视角 - 底部" + +msgid "Camera view - Front" +msgstr "摄像机视角 - 前面" + +msgid "Camera view - Behind" +msgstr "摄像机视角 - 后面" + +msgid "Camera Angle - Left side" +msgstr "摄像机视角 - 左面" + +msgid "Camera Angle - Right side" +msgstr "摄像机视角 - 右面" + +msgid "Select all objects" +msgstr "选择所有对象" + +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 "SLA支撑点" + +msgid "Gizmo FDM paint-on seam" +msgstr "FDM绘制接缝" msgid "Plater" msgstr "准备" @@ -4372,6 +4496,14 @@ msgstr "可打印区域" msgid "Bed exclude area" msgstr "不可打印区域" +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 "" +"XY平面上的不可打印区域。例如,X1系列打印机在换料过程中,会使用左前角区域来切" +"断耗材丝。这个多边形区域由以下格式的点表示:“XxY,XxY,…”" + msgid "Elephant foot compensation" msgstr "象脚补偿" @@ -5505,8 +5637,8 @@ msgstr "内部实心填充的线宽" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "内部实心填充的速度,不是顶面和底面。" -msgid "Spiral mode" -msgstr "旋转模式" +msgid "Spiral vase" +msgstr "旋转花瓶" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " @@ -5516,9 +5648,6 @@ msgstr "" "沿着对象的外轮廓螺旋上升,将实体模型转变为只有底面实心层和侧面单层墙壁的打" "印。最后生成的打印件没有接缝。" -msgid "Timelapse without toolhead" -msgstr "无工具头延时摄影" - 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 " @@ -6057,6 +6186,60 @@ msgstr "支撑:正在修补层%d的空洞" msgid "Support: propagate branches at layer %d" msgstr "支撑:正在生长层%d的树枝" +#~ msgid "Clipping of view" +#~ msgstr "剪切视图" + +#~ msgid "the 3mf is not compatible, load geometry data only!" +#~ msgstr "该3mf文件不兼容,仅加载几何数据!" + +#~ 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 "" +#~ "自动调整选定零件/所有零件的方向,\n" +#~ "有选定零件时调整选定零件的朝向,没有选择零件时调整所有零件的朝向" + +#~ msgid "The Config is not compatible and can not be loaded." +#~ msgstr "该配置不兼容,无法被加载。" + +#~ msgid "default value" +#~ msgstr "默认值" + +#~ msgid "Auto arrange" +#~ msgstr "自动摆盘" + +#~ msgid "" +#~ "The filament index exceeds the AMS's slot count and cannot send the print " +#~ "job." +#~ msgstr "" +#~ "打印机固件仅支持材料=>AMS槽位的顺序映射。材料编号超过AMS的槽位数量,无法发" +#~ "送打印任务。" + +#~ msgid "Timelapse without toolhead" +#~ msgstr "无工具头延时摄影" + +#~ msgid "Downloading Bambu Network plug-in" +#~ msgstr "正在下载Bambu网络插件" + +#~ msgid "Filaments Selection" +#~ msgstr "材料选择" + +#~ msgid "Printer Selection" +#~ msgstr "打印机选择" + +#~ msgid "Spiral mode" +#~ msgstr "旋转模式" + +#~ msgid "Fragment area" +#~ msgstr "碎片面积阈值" + +#~ msgid "Clear all" +#~ msgstr "清除所有" + +#~ msgid "Connect %s[SN:%s] failed!" +#~ msgstr "连接 %s[SN:%s]失败." + #~ msgid "Printer firmware does not support material = >ams slot mapping." #~ msgstr "打印机固件不支持材料=>AMS槽位映射" @@ -6308,9 +6491,6 @@ msgstr "支撑:正在生长层%d的树枝" #~ msgid "Vibration Calibration" #~ msgstr "振动校准" -#~ msgid "First Layer Inspection" -#~ msgstr "首层扫描" - #~ msgid "Please select a printer first." #~ msgstr "请先选择一台打印机。" @@ -7532,12 +7712,6 @@ msgstr "支撑:正在生长层%d的树枝" #~ "Reset to 0.2" #~ msgstr "树状支撑碰撞分辨率不可为0。将重置为0.2" -#~ msgid "default value" -#~ msgstr "默认值" - -#~ msgid "parameter name" -#~ msgstr "参数名称" - #~ msgid "Add..." #~ msgstr "添加..." @@ -7899,33 +8073,9 @@ msgstr "支撑:正在生长层%d的树枝" #~ msgid "Split triangles" #~ msgstr "分割三角形" -#~ msgid "Clipping of view" -#~ msgstr "剪切视图" - -#~ msgid "Reset direction" -#~ msgstr "重置方向" - -#~ msgid "Brush size" -#~ msgstr "画刷尺寸" - -#~ msgid "Brush shape" -#~ msgstr "画刷形状" - -#~ msgid "Enforce seam" -#~ msgstr "添加Z缝" - -#~ msgid "Block seam" -#~ msgstr "屏蔽Z缝" - -#~ msgid "Remove selection" -#~ msgstr "移除绘制" - #~ msgid "Remove all selection" #~ msgstr "移除所有绘制" -#~ msgid "Seam painting" -#~ msgstr "Z缝绘制" - #~ msgid "Paints all facets inside, regardless of their orientation." #~ msgstr "绘制所有处于球体内部的面片,无论它们的方向是怎样的。" @@ -8197,24 +8347,6 @@ msgstr "支撑:正在生长层%d的树枝" #~ msgid "Remove Instance of the selected object" #~ msgstr "删除所选对象的实例" -#~ 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 "SLA支撑点" - #~ msgid "Show &Configuration Folder" #~ msgstr "打开配置文件夹" @@ -9090,9 +9222,6 @@ msgstr "支撑:正在生长层%d的树枝" #~ msgid "Entering Seam painting!" #~ msgstr "开始Z缝绘制!" -#~ msgid "Leaving Seam painting" -#~ msgstr "推出Z缝绘制" - #~ msgid "Leaving Paint-on supports" #~ msgstr "推出支撑绘制" diff --git a/cmake/modules/MacOSXBundleInfo.plist.in b/cmake/modules/MacOSXBundleInfo.plist.in index 8c4967c6535..a899a869746 100644 --- a/cmake/modules/MacOSXBundleInfo.plist.in +++ b/cmake/modules/MacOSXBundleInfo.plist.in @@ -26,6 +26,94 @@ ???? CFBundleVersion ${MACOSX_BUNDLE_BUNDLE_VERSION} + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + stl + STL + + CFBundleTypeIconFile + stl.icns + CFBundleTypeName + STL + CFBundleTypeRole + Viewer + LISsAppleDefaultForType + + LSHandlerRank + Alternate + + + CFBundleTypeExtensions + + obj + OBJ + + CFBundleTypeIconFile + BambuStudio.icns + CFBundleTypeName + STL + CFBundleTypeRole + Viewer + LISsAppleDefaultForType + + LSHandlerRank + Alternate + + + CFBundleTypeExtensions + + amf + AMF + + CFBundleTypeIconFile + BambuStudio.icns + CFBundleTypeName + AMF + CFBundleTypeRole + Viewer + LISsAppleDefaultForType + + LSHandlerRank + Alternate + + + CFBundleTypeExtensions + + 3mf + 3MF + + CFBundleTypeIconFile + BambuStudio.icns + CFBundleTypeName + 3MF + CFBundleTypeRole + Viewer + LISsAppleDefaultForType + + LSHandlerRank + Alternate + + + CFBundleTypeExtensions + + gcode + GCODE + + CFBundleTypeIconFile + gcode.icns + CFBundleTypeName + GCODE + CFBundleTypeRole + Viewer + LISsAppleDefaultForType + + LSHandlerRank + Alternate + + CSResourcesFileMapped NSRequiresAquaSystemAppearance diff --git a/localazy.json b/localazy.json index 14a2826e7cf..5e83bab32f0 100644 --- a/localazy.json +++ b/localazy.json @@ -33,6 +33,11 @@ "type": "po", "pattern": "bbl/i18n/nl/BambuStudio_nl.po", "lang": "nl" + }, + { + "type": "po", + "pattern": "bbl/i18n/hu/BambuStudio_hu.po", + "lang": "hu" } ] }, diff --git a/resources/Icon.icns b/resources/Icon.icns index f58720226ae..d045d16f638 100644 Binary files a/resources/Icon.icns and b/resources/Icon.icns differ diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index e43445e1087..690812f4ee3 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 6d236e2dbc0..248a58b197f 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 c4073f6b2da..90268ce8d40 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 2b7d74b33a6..acce4dcb7b5 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 new file mode 100644 index 00000000000..7a57f7573cb Binary files /dev/null and b/resources/i18n/hu/BambuStudio.mo differ diff --git a/resources/i18n/nl/BambuStudio.mo b/resources/i18n/nl/BambuStudio.mo index fb2434853e9..2c41f343c33 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 10b9685dc04..bb309d7d651 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 86819d6ac7e..c3dcab310cc 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-mac_256px.ico b/resources/images/BambuStudio-mac_256px.ico new file mode 100644 index 00000000000..fa9c43cdea4 Binary files /dev/null and b/resources/images/BambuStudio-mac_256px.ico differ diff --git a/resources/images/BambuStudio.icns b/resources/images/BambuStudio.icns index 522d6b4e586..d045d16f638 100644 Binary files a/resources/images/BambuStudio.icns and b/resources/images/BambuStudio.icns differ diff --git a/resources/images/ams_readonly.svg b/resources/images/ams_readonly.svg new file mode 100644 index 00000000000..561c5382b6b --- /dev/null +++ b/resources/images/ams_readonly.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/resources/images/ams_readonly_light.svg b/resources/images/ams_readonly_light.svg new file mode 100644 index 00000000000..b9404c458e4 --- /dev/null +++ b/resources/images/ams_readonly_light.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/resources/images/ams_refresh_normal.svg b/resources/images/ams_refresh_normal.svg index e12c80ad310..99ea1107a47 100644 --- a/resources/images/ams_refresh_normal.svg +++ b/resources/images/ams_refresh_normal.svg @@ -1,12 +1,14 @@ - - - background - - - + + + + + + Layer 1 - - + + + + \ No newline at end of file diff --git a/resources/images/ams_refresh_selected.svg b/resources/images/ams_refresh_selected.svg index 36dda61d7b6..653d0edc1ec 100644 --- a/resources/images/ams_refresh_selected.svg +++ b/resources/images/ams_refresh_selected.svg @@ -1,12 +1,14 @@ - - - background - - - - - Layer 1 - - + + + + + + + + Layer 1 + + + + \ No newline at end of file diff --git a/resources/images/ams_rfid_0.svg b/resources/images/ams_rfid_0.svg new file mode 100644 index 00000000000..653d0edc1ec --- /dev/null +++ b/resources/images/ams_rfid_0.svg @@ -0,0 +1,14 @@ + + + + + + + + Layer 1 + + + + + + \ No newline at end of file diff --git a/resources/images/ams_rfid_1.svg b/resources/images/ams_rfid_1.svg new file mode 100644 index 00000000000..001274d2087 --- /dev/null +++ b/resources/images/ams_rfid_1.svg @@ -0,0 +1,14 @@ + + + + + + + + Layer 1 + + + + + + \ No newline at end of file diff --git a/resources/images/ams_rfid_2.svg b/resources/images/ams_rfid_2.svg new file mode 100644 index 00000000000..12076b79bfe --- /dev/null +++ b/resources/images/ams_rfid_2.svg @@ -0,0 +1,14 @@ + + + + + + + + Layer 1 + + + + + + \ No newline at end of file diff --git a/resources/images/ams_rfid_3.svg b/resources/images/ams_rfid_3.svg new file mode 100644 index 00000000000..fb7eedd02f9 --- /dev/null +++ b/resources/images/ams_rfid_3.svg @@ -0,0 +1,14 @@ + + + + + + + + Layer 1 + + + + + + \ No newline at end of file diff --git a/resources/images/ams_rfid_4.svg b/resources/images/ams_rfid_4.svg new file mode 100644 index 00000000000..cf4e1baeb4c --- /dev/null +++ b/resources/images/ams_rfid_4.svg @@ -0,0 +1,14 @@ + + + + + + + + Layer 1 + + + + + + \ No newline at end of file diff --git a/resources/images/ams_rfid_5.svg b/resources/images/ams_rfid_5.svg new file mode 100644 index 00000000000..8cf963c6e23 --- /dev/null +++ b/resources/images/ams_rfid_5.svg @@ -0,0 +1,14 @@ + + + + + + + + Layer 1 + + + + + + \ No newline at end of file diff --git a/resources/images/ams_rfid_6.svg b/resources/images/ams_rfid_6.svg new file mode 100644 index 00000000000..422fc623a55 --- /dev/null +++ b/resources/images/ams_rfid_6.svg @@ -0,0 +1,14 @@ + + + + + + + + Layer 1 + + + + + + \ No newline at end of file diff --git a/resources/images/ams_rfid_7.svg b/resources/images/ams_rfid_7.svg new file mode 100644 index 00000000000..16a872c890e --- /dev/null +++ b/resources/images/ams_rfid_7.svg @@ -0,0 +1,14 @@ + + + + + + + + Layer 1 + + + + + + \ No newline at end of file diff --git a/resources/images/check_half_focused.svg b/resources/images/check_half_focused.svg new file mode 100644 index 00000000000..ad3f4c10136 --- /dev/null +++ b/resources/images/check_half_focused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/check_off.svg b/resources/images/check_off.svg index 601a44277c0..cf58fbc94c5 100644 --- a/resources/images/check_off.svg +++ b/resources/images/check_off.svg @@ -1,4 +1,3 @@ - - - - \ No newline at end of file + + + diff --git a/resources/images/check_off_focused.svg b/resources/images/check_off_focused.svg new file mode 100644 index 00000000000..df78824780d --- /dev/null +++ b/resources/images/check_off_focused.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/check_on.svg b/resources/images/check_on.svg index 4ecbf27056c..83a78da28ab 100644 --- a/resources/images/check_on.svg +++ b/resources/images/check_on.svg @@ -1,5 +1,4 @@ - - - - - \ No newline at end of file + + + + diff --git a/resources/images/check_on_focused.svg b/resources/images/check_on_focused.svg new file mode 100644 index 00000000000..379f61b650b --- /dev/null +++ b/resources/images/check_on_focused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/fragment_filter.svg b/resources/images/gap_fill.svg similarity index 100% rename from resources/images/fragment_filter.svg rename to resources/images/gap_fill.svg diff --git a/resources/images/lock_normal.svg b/resources/images/lock_normal.svg index fb8e0803a02..6fc10382217 100644 --- a/resources/images/lock_normal.svg +++ b/resources/images/lock_normal.svg @@ -1,6 +1,3 @@ - - - Slice 41 - - - \ No newline at end of file + + + diff --git a/resources/images/monitor_placeholder.png b/resources/images/monitor_placeholder.png deleted file mode 100644 index ad2c9ef4df6..00000000000 Binary files a/resources/images/monitor_placeholder.png and /dev/null differ diff --git a/resources/images/monitor_placeholder.svg b/resources/images/monitor_placeholder.svg new file mode 100644 index 00000000000..158a0b2b45b --- /dev/null +++ b/resources/images/monitor_placeholder.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/resources/images/plate_close.svg b/resources/images/plate_close.svg index 926727ae29f..235e135d725 100644 --- a/resources/images/plate_close.svg +++ b/resources/images/plate_close.svg @@ -1,6 +1,6 @@ - - - - + + + + diff --git a/resources/images/plate_close_hover.svg b/resources/images/plate_close_hover.svg index b2df066117e..2208d450263 100644 --- a/resources/images/plate_close_hover.svg +++ b/resources/images/plate_close_hover.svg @@ -1,6 +1,6 @@ - - - - + + + + diff --git a/resources/images/toolbar_tooltip.svg b/resources/images/toolbar_tooltip.svg index 5abfb0e8fde..c83e8f1ceac 100644 --- a/resources/images/toolbar_tooltip.svg +++ b/resources/images/toolbar_tooltip.svg @@ -1,14 +1,14 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/resources/images/toolbar_tooltip_hover.svg b/resources/images/toolbar_tooltip_hover.svg index ffdd0ee34c5..dfcd2d3851c 100644 --- a/resources/images/toolbar_tooltip_hover.svg +++ b/resources/images/toolbar_tooltip_hover.svg @@ -1,14 +1,14 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 4225c917f4e..26d8eef7593 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.01.00.10", + "version": "01.01.01.02", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ diff --git a/resources/profiles/BBL/bbl-3dp-logo.svg b/resources/profiles/BBL/bbl-3dp-logo.svg index f0062e3cf6b..d17daf639a4 100644 --- a/resources/profiles/BBL/bbl-3dp-logo.svg +++ b/resources/profiles/BBL/bbl-3dp-logo.svg @@ -1,43 +1,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/BBL/filament/Bambu PA-CF @base.json b/resources/profiles/BBL/filament/Bambu PA-CF @base.json index 99f8c876519..a9b6f16874d 100644 --- a/resources/profiles/BBL/filament/Bambu PA-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PA-CF @base.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFN00", + "filament_id": "GFN03", "name": "Bambu PA-CF @base", "from": "system", "instantiation": "false", @@ -17,6 +17,9 @@ "nozzle_temperature_initial_layer": [ "280" ], + "filament_type": [ + "PA-CF" + ], "nozzle_temperature": [ "280" ] diff --git a/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.8 nozzle.json index 56256f60902..f10699dd069 100644 --- a/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.8 nozzle.json @@ -6,7 +6,7 @@ "instantiation": "true", "inherits": "Bambu PC @base", "nozzle_temperature": [ - "270" + "260" ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.8 nozzle" diff --git a/resources/profiles/BBL/filament/Bambu PLA Basic @base.json b/resources/profiles/BBL/filament/Bambu PLA Basic @base.json index 9bb4ae56eb7..d450ad4320a 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Basic @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Basic @base.json @@ -12,7 +12,7 @@ "25.4" ], "filament_flow_ratio": [ - "0.96" + "0.98" ], "filament_density": [ "1.26" diff --git a/resources/profiles/BBL/filament/Bambu PLA Matte @base.json b/resources/profiles/BBL/filament/Bambu PLA Matte @base.json index f49165d168e..b6001992d9b 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Matte @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Matte @base.json @@ -15,6 +15,6 @@ "1.32" ], "filament_flow_ratio": [ - "0.95" + "0.98" ] } diff --git a/resources/profiles/BBL/filament/Bambu TPU 95A @base.json b/resources/profiles/BBL/filament/Bambu TPU 95A @base.json index 2c67fb7b6fd..8006c0adcca 100644 --- a/resources/profiles/BBL/filament/Bambu TPU 95A @base.json +++ b/resources/profiles/BBL/filament/Bambu TPU 95A @base.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFU00", + "filament_id": "GFU01", "name": "Bambu TPU 95A @base", "from": "system", "instantiation": "false", @@ -13,5 +13,8 @@ ], "nozzle_temperature_initial_layer": [ "230" + ], + "nozzle_temperature": [ + "230" ] } diff --git a/resources/profiles/BBL/filament/Generic PA-CF.json b/resources/profiles/BBL/filament/Generic PA-CF.json index a8fe56a7565..86383ed2d5d 100644 --- a/resources/profiles/BBL/filament/Generic PA-CF.json +++ b/resources/profiles/BBL/filament/Generic PA-CF.json @@ -1,11 +1,14 @@ { "type": "filament", - "filament_id": "GFN99", + "filament_id": "GFN98", "setting_id": "GFSN99", "name": "Generic PA-CF", "from": "system", "instantiation": "true", "inherits": "fdm_filament_pa", + "filament_type": [ + "PA-CF" + ], "nozzle_temperature_initial_layer": [ "280" ], diff --git a/resources/profiles/BBL/filament/Generic PA.json b/resources/profiles/BBL/filament/Generic PA.json index a7ec3d4597a..43be83d5e48 100644 --- a/resources/profiles/BBL/filament/Generic PA.json +++ b/resources/profiles/BBL/filament/Generic PA.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFN98", + "filament_id": "GFN99", "setting_id": "GFSN98", "name": "Generic PA", "from": "system", diff --git a/resources/profiles/BBL/filament/Generic PETG.json b/resources/profiles/BBL/filament/Generic PETG.json index 254dae6c851..d337efdd9c1 100644 --- a/resources/profiles/BBL/filament/Generic PETG.json +++ b/resources/profiles/BBL/filament/Generic PETG.json @@ -28,7 +28,7 @@ "40" ], "slow_down_min_speed": [ - "40" + "20" ], "slow_down_layer_time": [ "8" diff --git a/resources/profiles/BBL/filament/Generic PLA-CF.json b/resources/profiles/BBL/filament/Generic PLA-CF.json index e93c84bde95..95e603370ea 100644 --- a/resources/profiles/BBL/filament/Generic PLA-CF.json +++ b/resources/profiles/BBL/filament/Generic PLA-CF.json @@ -9,6 +9,9 @@ "filament_flow_ratio": [ "0.95" ], + "filament_type": [ + "PLA-CF" + ], "filament_max_volumetric_speed": [ "12" ], diff --git a/resources/profiles/BBL/filament/Generic PLA.json b/resources/profiles/BBL/filament/Generic PLA.json index c1590d3748f..e7ec4a8a935 100644 --- a/resources/profiles/BBL/filament/Generic PLA.json +++ b/resources/profiles/BBL/filament/Generic PLA.json @@ -7,7 +7,7 @@ "instantiation": "true", "inherits": "fdm_filament_pla", "filament_flow_ratio": [ - "0.95" + "0.98" ], "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/BBL/filament/Generic TPU.json b/resources/profiles/BBL/filament/Generic TPU.json index b925f1d0fb9..145bea7eb00 100644 --- a/resources/profiles/BBL/filament/Generic TPU.json +++ b/resources/profiles/BBL/filament/Generic TPU.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFR99", + "filament_id": "GFU99", "setting_id": "GFSR99", "name": "Generic TPU", "from": "system", @@ -9,9 +9,6 @@ "filament_max_volumetric_speed": [ "3.2" ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] > 60)||(bed_temperature_initial_layer[current_extruder]>60)}M106 P3 S255\n{endif};Prevent PETG from jamming" - ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", "Voron 2.4 250 0.4 nozzle", diff --git a/resources/profiles/BBL/filament/PolyLite PLA @base.json b/resources/profiles/BBL/filament/PolyLite PLA @base.json index 7382e9c6d64..4a67c093169 100644 --- a/resources/profiles/BBL/filament/PolyLite PLA @base.json +++ b/resources/profiles/BBL/filament/PolyLite PLA @base.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL19", + "filament_id": "GFL00", "name": "PolyLite PLA @base", "from": "system", "instantiation": "false", diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @base.json b/resources/profiles/BBL/filament/PolyTerra PLA @base.json index 96b5f1672b0..ccaa910c00d 100644 --- a/resources/profiles/BBL/filament/PolyTerra PLA @base.json +++ b/resources/profiles/BBL/filament/PolyTerra PLA @base.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL18", + "filament_id": "GFL01", "name": "PolyTerra PLA @base", "from": "system", "instantiation": "false", @@ -15,6 +15,6 @@ "1.24" ], "filament_flow_ratio": [ - "0.95" + "0.98" ] } diff --git a/resources/profiles/BBL/filament/fdm_filament_pet.json b/resources/profiles/BBL/filament/fdm_filament_pet.json index 449046fd31a..b7f725968ab 100644 --- a/resources/profiles/BBL/filament/fdm_filament_pet.json +++ b/resources/profiles/BBL/filament/fdm_filament_pet.json @@ -35,7 +35,7 @@ "25" ], "filament_type": [ - "PET" + "PETG" ], "filament_density": [ "1.27" diff --git a/resources/profiles/BBL/filament/fdm_filament_pla.json b/resources/profiles/BBL/filament/fdm_filament_pla.json index 388268d37ae..a3b8a8f8892 100644 --- a/resources/profiles/BBL/filament/fdm_filament_pla.json +++ b/resources/profiles/BBL/filament/fdm_filament_pla.json @@ -74,7 +74,7 @@ "230" ], "slow_down_min_speed": [ - "50" + "20" ], "slow_down_layer_time": [ "4" diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json index 5db555c6259..e2de9f562d1 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json @@ -13,13 +13,16 @@ "nozzle_diameter": [ "0.4" ], + "extruder_offset": [ + "0x2" + ], "bed_exclude_area": [ "0x0", "18x0", "18x28", "0x28" ], - "machine_start_gcode": "\n;===== date: 202200714 =====================\n;===== reset machine status =================\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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\nM975 S1\n;===== prepare print temperature and material end =====\n\n\n;===== wipe mouth ===============================\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 Z2 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\nG0 X126 F120\nG0 X130\nG0 X126\nG0 X130\nG0 X128\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG1 Z10 F1200\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 mouth 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y5.5 \nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n ;G0 Y0.5\n ;G0 X18 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\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\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": "\n;===== date: 202200731 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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\nM975 S1\n;===== prepare print temperature and material end =====\n\n\n;===== wipe mouth ===============================\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 Z2 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\nG0 X126 F120\nG0 X130\nG0 X126\nG0 X130\nG0 X128\nM109 S140 ; wait nozzle temp down to heatbed acceptable\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 mouth 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\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 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y5.5 \nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n ;G0 Y0.5\n ;G0 X18 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\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\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 1.0} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n\nM17 S\nM17 Z0.5 ; 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} F900\n{else}\n G1 Z250 F900\n{endif}\nM400 P100\nM17 R ; restore z current\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\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", "scan_first_layer": "1", "machine_load_filament_time": "17", diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json index 7252de98fc3..80a46ba7cf8 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json @@ -26,6 +26,6 @@ "retraction_minimum_travel": [ "5" ], - "machine_start_gcode": "\n;===== date: 202200710 =====================\n;===== reset machine status =================\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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\nM975 S1\n;===== prepare print temperature and material end =====\n\n\n;===== wipe mouth ===============================\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 Z2 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\nG0 X126 F120\nG0 X130\nG0 X126\nG0 X130\nG0 X128\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG1 Z10 F1200\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 mouth 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 P500\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nM400 S3\n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y5.5 \nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.160 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.080 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\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\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": "\n;===== date: 202200731 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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\nM975 S1\n;===== prepare print temperature and material end =====\n\n\n;===== wipe mouth ===============================\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 Z2 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\nG0 X126 F120\nG0 X130\nG0 X126\nG0 X130\nG0 X128\nM109 S140 ; wait nozzle temp down to heatbed acceptable\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 mouth 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 P500\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nM400 S3\n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\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 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y5.5 \nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.160 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.080 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\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\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "nozzle_type": "stainless_steel" } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json index a545ce70773..8ed4e921a19 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json @@ -13,13 +13,16 @@ "nozzle_diameter": [ "0.4" ], + "extruder_offset": [ + "0x2" + ], "bed_exclude_area": [ "0x0", "18x0", "18x28", "0x28" ], - "machine_start_gcode": "\n;===== date: 202200714 =====================\n;===== reset machine status =================\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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\nM975 S1\n;===== prepare print temperature and material end =====\n\n\n;===== wipe mouth ===============================\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 Z2 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\nG0 X126 F120\nG0 X130\nG0 X126\nG0 X130\nG0 X128\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG1 Z10 F1200\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 mouth 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y5.5 \nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n ;G0 Y0.5\n ;G0 X18 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\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\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": "\n;===== date: 202200731 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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\nM975 S1\n;===== prepare print temperature and material end =====\n\n\n;===== wipe mouth ===============================\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 Z2 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\nG0 X126 F120\nG0 X130\nG0 X126\nG0 X130\nG0 X128\nM109 S140 ; wait nozzle temp down to heatbed acceptable\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 mouth 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\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 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y5.5 \nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n ;G0 Y0.5\n ;G0 X18 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\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\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 1.0} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n\nM17 S\nM17 Z0.5 ; 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} F900\n{else}\n G1 Z250 F900\n{endif}\nM400 P100\nM17 R ; restore z current\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\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", "scan_first_layer": "1", "machine_load_filament_time": "17", diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json index ada196c74ed..e00b134574f 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json @@ -26,5 +26,5 @@ "retraction_minimum_travel": [ "3" ], - "machine_start_gcode": "\n;===== date: 202200710 =====================\n;===== reset machine status =================\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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\nM975 S1\n;===== prepare print temperature and material end =====\n\n\n;===== wipe mouth ===============================\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 Z2 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\nG0 X126 F120\nG0 X130\nG0 X126\nG0 X130\nG0 X128\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG1 Z10 F1200\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 mouth 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 P500\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \nG0 Y5.5 \nG0 X18 E25\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n ;G0 Y0.9\n ;G0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.030 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.015 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623 \n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\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\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": "\n;===== date: 202200731 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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\nM975 S1\n;===== prepare print temperature and material end =====\n\n\n;===== wipe mouth ===============================\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 Z2 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\nG0 X126 F120\nG0 X130\nG0 X126\nG0 X130\nG0 X128\nM109 S140 ; wait nozzle temp down to heatbed acceptable\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 mouth 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 P500\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\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 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \nG0 Y5.5 \nG0 X18 E25\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n ;G0 Y0.9\n ;G0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.030 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.015 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623 \n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\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\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json index f8d7c5f77ad..a9f4abc6415 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json @@ -26,5 +26,5 @@ "retraction_minimum_travel": [ "1" ], - "machine_start_gcode": "\n;===== date: 202200710 =====================\n;===== reset machine status =================\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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\nM975 S1\n;===== prepare print temperature and material end =====\n\n\n;===== wipe mouth ===============================\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 Z2 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\nG0 X126 F120\nG0 X130\nG0 X126\nG0 X130\nG0 X128\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG1 Z10 F1200\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 mouth 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 P500\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nM400 S3\n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y4.5 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 E3 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 Y5.5 \nG0 X129 E15\nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n\n T1000 \n M83 \n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800 \n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.010 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623 \n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\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\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": "\n;===== date: 202200731 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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\nM975 S1\n;===== prepare print temperature and material end =====\n\n\n;===== wipe mouth ===============================\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 Z2 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\nG0 X126 F120\nG0 X130\nG0 X126\nG0 X130\nG0 X128\nM109 S140 ; wait nozzle temp down to heatbed acceptable\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 mouth 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 P500\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nM400 S3\n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\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 Y4.5 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 E3 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 Y5.5 \nG0 X129 E15\nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n\n T1000 \n M83 \n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800 \n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.010 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623 \n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\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\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" } diff --git a/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json b/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json index 6fb39799a50..72c31636950 100644 --- a/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json +++ b/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json @@ -151,7 +151,7 @@ ], "silent_mode": "0", "single_extruder_multi_material": "1", - "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F12000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\n{if old_filament_temp > 0 && next_extruder < 255}M109 S[old_filament_temp]{endif}\nG1 X90 F3000\nG1 Y250 F4000\nG1 X100 F5000\nG1 X120 F12000\n\nG1 X20 Y50 F12000\nG1 Y-3\n\n; always use highest temperature to flush\nM109 S[nozzle_temperature_range_high]\n\nT[next_extruder]\n\n{if next_extruder < 255}\nG1 X54 F12000\nG1 Y265\n\nM400\n\nG92 E0\n{if flush_length_1 > 1}\n; FLUSH_START\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{old_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{old_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{old_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{old_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{old_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM109 S[new_filament_temp]\n\nM400\nM106 P1 S255\nM400 S3\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z[z_after_toolchange] F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A", + "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F12000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\n{if old_filament_temp > 0 && next_extruder < 255}M109 S[old_filament_temp]{endif}\nG1 X90 F3000\nG1 Y250 F4000\nG1 X100 F5000\nG1 X120 F12000\n\nG1 X20 Y50 F12000\nG1 Y-3\n\nT[next_extruder]\n\n; always use highest temperature to flush\nM400\nM109 S[nozzle_temperature_range_high]\n\n{if next_extruder < 255}\nG1 X54 F12000\nG1 Y265\n\nM400\n\nG92 E0\n{if flush_length_1 > 1}\n; FLUSH_START\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM400\nM109 S[new_filament_temp]\n\nM400\nM106 P1 S255\nM400 S3\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z[z_after_toolchange] F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A", "layer_change_gcode": "{if timelapse_no_toolhead}\nG92 E0\nG1 E-[retraction_length] F1800\nG1 X65 Y245 F12000 ; move to safe pos\nG1 Y265 F3000\nM400 P100\nM971 S11 C10 O0\nG92 E0\nG1 E[retraction_length] F300\nG1 X100 F5000\nG1 Y255\n{endif}", "machine_pause_gcode": "M400 U1\n", "wipe": [ diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.30_nozzle_0.6.json b/resources/profiles/BBL/process/fdm_process_bbl_0.30_nozzle_0.6.json index 7457ebbcac1..32925c7057f 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.30_nozzle_0.6.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.30_nozzle_0.6.json @@ -30,6 +30,6 @@ "travel_speed": "480", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", - "overhang_3_4_speed": "35", + "overhang_3_4_speed": "15", "overhang_4_4_speed": "10" } diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.40_nozzle_0.8.json b/resources/profiles/BBL/process/fdm_process_bbl_0.40_nozzle_0.8.json index 7cecf09a98b..1b316059e97 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.40_nozzle_0.8.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.40_nozzle_0.8.json @@ -18,6 +18,7 @@ "internal_solid_infill_line_width": "0.8", "support_line_width": "0.8", "top_surface_line_width": "0.8", + "top_surface_pattern": "monotonic", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "120", diff --git a/resources/web/guide/21/21.css b/resources/web/guide/21/21.css index d9f08523975..b779a78cf47 100644 --- a/resources/web/guide/21/21.css +++ b/resources/web/guide/21/21.css @@ -77,6 +77,7 @@ .PName { font-weight: 700; + text-align: left; } .pNozzel diff --git a/resources/web/guide/21/21.js b/resources/web/guide/21/21.js index 6dd7218e259..5a37c4c32e7 100644 --- a/resources/web/guide/21/21.js +++ b/resources/web/guide/21/21.js @@ -59,13 +59,17 @@ function HandleModelList( pVal ) //Add Vendor Html Node if($(".OneVendorBlock[vendor='"+strVendor+"']").length==0) { + let sVV=strVendor; + if( sVV=="BBL" ) + sVV="Bambu Lab"; + let HtmlNewVendor='
'+ '
'+ '
'+ '
all
'+ '
none
'+ '
'+ -' Bambu Lab'+ +' '+sVV+''+ '
'+ '
'+ '
'+ diff --git a/resources/web/guide/22/22.css b/resources/web/guide/22/22.css index ab8b6774cf8..49cb6fad5cd 100644 --- a/resources/web/guide/22/22.css +++ b/resources/web/guide/22/22.css @@ -8,10 +8,11 @@ .CName { width:130px; - min-width: 80px; font-weight: 700; height: 100%; text-align: right; + white-space: nowrap; + flex-shrink: 0; } .CValues diff --git a/resources/web/guide/23/23.css b/resources/web/guide/23/23.css index a47d64d797d..69be274f7a8 100644 --- a/resources/web/guide/23/23.css +++ b/resources/web/guide/23/23.css @@ -8,10 +8,11 @@ .CName { width:130px; - min-width: 80px; font-weight: 700; height: 100%; text-align: right; + white-space: nowrap; + flex-shrink: 0; } .CValues diff --git a/resources/web/guide/24/24.css b/resources/web/guide/24/24.css index e80aab5497b..057a61b1c28 100644 --- a/resources/web/guide/24/24.css +++ b/resources/web/guide/24/24.css @@ -99,6 +99,7 @@ .PName { font-weight: 700; + text-align:left; } .pNozzel diff --git a/resources/web/guide/24/24.js b/resources/web/guide/24/24.js index ccfdd6164bc..43dffda1304 100644 --- a/resources/web/guide/24/24.js +++ b/resources/web/guide/24/24.js @@ -59,13 +59,17 @@ function HandleModelList( pVal ) //Add Vendor Html Node if($(".OneVendorBlock[vendor='"+strVendor+"']").length==0) { + let sVV=strVendor; + if( sVV=="BBL" ) + sVV="Bambu Lab"; + let HtmlNewVendor='
'+ '
'+ '
'+ '
all
'+ '
none
'+ '
'+ -' Bambu Lab'+ +' '+sVV+''+ '
'+ '
'+ '
'+ diff --git a/resources/web/guide/5/5.css b/resources/web/guide/5/5.css index 62f5d90d009..2ed6be4169e 100644 --- a/resources/web/guide/5/5.css +++ b/resources/web/guide/5/5.css @@ -1,12 +1,13 @@ #Content { - padding:10% 15%; + padding:0% 15%; } #FeatureText { line-height: 30px; + margin-top: 10mm; } diff --git a/resources/web/guide/6/6.css b/resources/web/guide/6/6.css index ca27c8eaa03..b60480520ea 100644 --- a/resources/web/guide/6/6.css +++ b/resources/web/guide/6/6.css @@ -3,6 +3,7 @@ padding: 0; border: 0; margin: 0; + font-family: "system-ui", "Segoe UI", Roboto, Oxygen, Ubuntu, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-sans; } html,body diff --git a/resources/web/guide/css/common.css b/resources/web/guide/css/common.css index c7e2cc0b626..4f0a2ae7954 100644 --- a/resources/web/guide/css/common.css +++ b/resources/web/guide/css/common.css @@ -3,6 +3,7 @@ padding: 0; border: 0; margin: 0; + font-family: "system-ui", "Segoe UI", Roboto, Oxygen, Ubuntu, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-sans; } html diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index e287a76cbd0..6e2c322dd49 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -3,7 +3,7 @@ padding:0px; border: 0px; margin: 0px; - font-size: 16px; + font-family: "system-ui", "Segoe UI", Roboto, Oxygen, Ubuntu, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-sans; } html, body { @@ -12,6 +12,7 @@ html, body { margin: 0px; padding: 0px; line-height: 20px; + font-size: 16px; } .RedFont @@ -71,6 +72,12 @@ body cursor:pointer; } +#LoginBtn:hover +{ + font-size:17px; +} + + #NoPluginTip { position: absolute; @@ -79,7 +86,7 @@ body bottom: 0px; right: 0px; z-index: 1; - display: flex; + display: none; flex-direction: column; justify-content: flex-end; padding: 5px; @@ -212,7 +219,7 @@ body .MenuItem { - border: 1px solid #4CAA50; + border: 1px solid #EEEEEE; border-radius: 12px; height: 101px; width: 253px; @@ -226,6 +233,7 @@ body .MenuItem:hover { + border-color: #4CAA50; background-color: #E0FCEB; } diff --git a/resources/web/homepage/index.html b/resources/web/homepage/index.html index 2d0a4679508..b2f6a246e3b 100644 --- a/resources/web/homepage/index.html +++ b/resources/web/homepage/index.html @@ -142,6 +142,35 @@ diff --git a/resources/web/homepage/js/home.js b/resources/web/homepage/js/home.js index d77a36c00cd..e1bcdd8e8bd 100644 --- a/resources/web/homepage/js/home.js +++ b/resources/web/homepage/js/home.js @@ -215,4 +215,16 @@ function BeginDownloadNetworkPlugin() SendWXMessage( JSON.stringify(tSend) ); } +function OutputKey(keyCode, isCtrlDown, isShiftDown, isCmdDown) { + var tSend = {}; + tSend['sequence_id'] = Math.round(new Date() / 1000); + tSend['command'] = "get_web_shortcut"; + tSend['key_event'] = {}; + tSend['key_event']['key'] = keyCode; + tSend['key_event']['ctrl'] = isCtrlDown; + tSend['key_event']['shift'] = isShiftDown; + tSend['key_event']['cmd'] = isCmdDown; + + SendWXMessage(JSON.stringify(tSend)); +} window.postMessage = HandleStudio; diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 4b89913ba1b..dc3a00a8fef 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -189,7 +189,25 @@ int CLI::run(int argc, char **argv) params.argv = argv; params.load_configs = load_configs; params.extra_config = std::move(m_extra_config); - params.input_files = std::move(m_input_files); + + std::vector gcode_files; + std::vector non_gcode_files; + for (const auto& filename : m_input_files) { + if (is_gcode_file(filename)) + gcode_files.emplace_back(filename); + else { + non_gcode_files.emplace_back(filename); + } + } + if (non_gcode_files.empty() && !gcode_files.empty()) { + params.input_gcode = true; + params.input_files = std::move(gcode_files); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", gcode only, gcode_files size = "<= 2) { get_lang = get_lang.substr(0, 2); } + } + + return get_lang; +} + +std::string AppConfig::get_hms_host() +{ + std::string sel = get("iot_environment"); + std::string host = ""; +#if !BBL_RELEASE_TO_PUBLIC + if (sel == ENV_DEV_HOST) + host = "e-dev.bambu-lab.com"; + else if (sel == ENV_QAT_HOST) + host = "e-qa.bambu-lab.com"; + else if (sel == ENV_PRE_HOST) + host = "e-pre.bambu-lab.com"; + else if (sel == ENV_PRODUCT_HOST) + host = "e.bambulab.com"; + return host; +#else + return "e.bambulab.com"; +#endif +} void AppConfig::reset() { diff --git a/src/libslic3r/AppConfig.hpp b/src/libslic3r/AppConfig.hpp index a324b364dfa..69f46cdeaf4 100644 --- a/src/libslic3r/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -39,6 +39,9 @@ class AppConfig this->reset(); } + std::string get_langauge_code(); + std::string get_hms_host(); + // Clear and reset to defaults. void reset(); // Override missing or keys with their defaults. diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index c184e1039ef..f0f7f351b58 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -136,6 +136,25 @@ static double fixed_overfit(const std::tuple& result, const Box &bi return score; } +// useful for arranging big circle objects +static double fixed_overfit_topright_sliding(const std::tuple& result, const Box& binbb) +{ + double score = std::get<0>(result); + Box pilebb = std::get<1>(result); + + auto shift = binbb.maxCorner() - pilebb.maxCorner(); + shift.x() = std::max(0, shift.x()); // do not allow left shift + shift.y() = std::max(0, shift.y()); // do not allow bottom shift + pilebb.minCorner() += shift; + pilebb.maxCorner() += shift; + + Box fullbb = sl::boundingBox(pilebb, binbb); + auto diff = double(fullbb.area()) - binbb.area(); + if (diff > 0) score += diff; + + return score; +} + // A class encapsulating the libnest2d Nester class and extending it with other // management and spatial index structures for acceleration. template @@ -503,8 +522,9 @@ class AutoArranger { break; } } + cfg.object_function = [this, bb, starting_point](const Item& item) { - return fixed_overfit(objfunc(item, starting_point), bb); + return fixed_overfit_topright_sliding(objfunc(item, starting_point), bb); }; }; diff --git a/src/libslic3r/Arrange.hpp b/src/libslic3r/Arrange.hpp index 98d8a7e711a..d9a510a45bf 100644 --- a/src/libslic3r/Arrange.hpp +++ b/src/libslic3r/Arrange.hpp @@ -65,8 +65,7 @@ struct ArrangePolygon { int itemid{ 0 }; // item id in the vector, used for accessing all possible params like extrude_id int is_applied{ 0 }; // transform has been applied double height{ 0 }; // item height - double auto_brim_width{ 0 }; // auto brim width - double user_brim_width{ 0 }; // user defined brim width + double brim_width{ 0 }; // brim width std::string name; // If empty, any rotation is allowed (currently unsupported) diff --git a/src/libslic3r/Brim.cpp b/src/libslic3r/Brim.cpp index c130d482261..a7835f3e9b6 100644 --- a/src/libslic3r/Brim.cpp +++ b/src/libslic3r/Brim.cpp @@ -641,7 +641,7 @@ double getadhesionCoeff(const PrintObject* printObject) for (auto iter = extrudersFirstLayer.begin(); iter != extrudersFirstLayer.end(); iter++) if (modelVolume->extruder_id() == *iter) { if (Model::extruderParamsMap.find(modelVolume->extruder_id()) != Model::extruderParamsMap.end()) - if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PET") { + if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PETG") { adhesionCoeff = 2; } else if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "TPU") { @@ -806,7 +806,7 @@ double configBrimWidthByVolumes(double deltaT, double adhension, double maxSpeed } //BBS: config brimwidth by group of volumes -double configBrimWidthByVolumeGroups(double adhension, double maxSpeed, const std::vector modelVolumePtrs, const ExPolygons& expolys) +double configBrimWidthByVolumeGroups(double adhension, double maxSpeed, const std::vector modelVolumePtrs, const ExPolygons& expolys, double &groupHeight) { // height of a group of volumes double height = 0; @@ -824,7 +824,7 @@ double configBrimWidthByVolumeGroups(double adhension, double maxSpeed, const st } auto bbox_size = mergedBbx.size(); height = bbox_size(2); - + groupHeight = height; // second moment of the expolygons of the first layer of the volume group double Ixx = -1.e30, Iyy = -1.e30; if (!expolys.empty()) { @@ -843,8 +843,8 @@ double configBrimWidthByVolumeGroups(double adhension, double maxSpeed, const st double thermalLength = sqrt(bboxX * bboxX + bboxY * bboxY) * SCALING_FACTOR; double thermalLengthRef = Model::getThermalLength(modelVolumePtrs); - double height_to_area = std::max(height / Ixx * (bbox2.size()(1) * SCALING_FACTOR), height / Iyy * (bbox2.size()(0) * SCALING_FACTOR)); - double brim_width = adhension * std::min(std::min(std::max(height_to_area * maxSpeed / 24, thermalLength * 8. / thermalLengthRef * std::min(height, 30.) / 30.), 18.), 1.5 * thermalLength); + double height_to_area = std::max(height / Ixx * (bbox2.size()(1) * SCALING_FACTOR), height / Iyy * (bbox2.size()(0) * SCALING_FACTOR)) * height / 1920; + double brim_width = adhension * std::min(std::min(std::max(height_to_area * maxSpeed, thermalLength * 8. / thermalLengthRef * std::min(height, 30.) / 30.), 18.), 1.5 * thermalLength); // small brims are omitted if (brim_width < 5 && brim_width < 1.5 * thermalLength) brim_width = 0; @@ -915,17 +915,17 @@ static ExPolygons outer_inner_brim_area(const Print& print, if (currentModelVolumePtr != nullptr) groupVolumePtrs.push_back(currentModelVolumePtr); } if (groupVolumePtrs.empty()) continue; - + double groupHeight = 0.; // config brim width in auto-brim mode if (has_brim_auto) { - double brimWidthRaw = configBrimWidthByVolumeGroups(adhension, maxSpeed, groupVolumePtrs, volumeGroup.slices); + double brimWidthRaw = configBrimWidthByVolumeGroups(adhension, maxSpeed, groupVolumePtrs, volumeGroup.slices, groupHeight); brim_width = scale_(floor(brimWidthRaw / flowWidth / 2) * flowWidth * 2); } for (const ExPolygon& ex_poly : volumeGroup.slices) { // BBS: additional brim width will be added if part's adhension area is too small and brim is not generated float brim_width_mod; - if (brim_width < scale_(5.) && has_brim_auto) { + if (brim_width < scale_(5.) && has_brim_auto && groupHeight > 10.) { brim_width_mod = ex_poly.area() / ex_poly.contour.length() < scaled_half_min_adh_length && brim_width < scaled_flow_width ? brim_width + scaled_additional_brim_width : brim_width; } diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp index 0bf27609efb..91c7efc0899 100644 --- a/src/libslic3r/Fill/FillRectilinear.cpp +++ b/src/libslic3r/Fill/FillRectilinear.cpp @@ -3099,6 +3099,8 @@ void FillMonotonicLineWGapFill::fill_surface_extrusion(const Surface* surface, c FillParams params2 = params; params2.monotonic = true; params2.anchor_length_max = 0.0f; + //BBS: always don't adjust the spacing of top surface infill + params2.dont_adjust = true; //BBS: always use no overlap expolygons to avoid overflow in top surface for (const ExPolygon &rectilinear_area : this->no_overlap_expolygons) { @@ -3188,14 +3190,14 @@ void FillMonotonicLineWGapFill::fill_surface_by_lines(const Surface* surface, co std::pair rotate_vector = this->_infill_direction(surface); assert(params.full_infill()); - coord_t line_spacing = coord_t(scale_(this->spacing)); + coord_t line_spacing = params.flow.scaled_spacing(); // On the polygons of poly_with_offset, the infill lines will be connected. ExPolygonWithOffset poly_with_offset( surface->expolygon, - rotate_vector.first, - float(scale_(0 - (0.5 - INFILL_OVERLAP_OVER_SPACING) * this->spacing)), - float(scale_(0 - 0.5f * this->spacing))); + float(scale_(0 - (0.5 - INFILL_OVERLAP_OVER_SPACING) * params.flow.spacing())), + float(scale_(0 - 0.5f * params.flow.spacing()))); if (poly_with_offset.n_contours_inner == 0) { // Not a single infill line fits. //FIXME maybe one shall trigger the gap fill here? @@ -3205,9 +3207,18 @@ void FillMonotonicLineWGapFill::fill_surface_by_lines(const Surface* surface, co BoundingBox bounding_box = poly_with_offset.bounding_box_src(); // define flow spacing according to requested density - assert(!params.dont_adjust); - line_spacing = this->_adjust_solid_spacing(bounding_box.size()(0), line_spacing); - this->spacing = unscale(line_spacing); + if (params.full_infill() && !params.dont_adjust) { + line_spacing = this->_adjust_solid_spacing(bounding_box.size()(0), line_spacing); + this->spacing = unscale(line_spacing); + } else { + // extend bounding box so that our pattern will be aligned with other layers + // Transform the reference point to the rotated coordinate system. + Point refpt = rotate_vector.second.rotated(-rotate_vector.first); + bounding_box.merge(align_to_grid( + bounding_box.min, + Point(line_spacing, line_spacing), + refpt)); + } // Intersect a set of euqally spaced vertical lines wiht expolygon. size_t n_vlines = (bounding_box.max(0) - bounding_box.min(0) + line_spacing - 1) / line_spacing; diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp index ca177e6c56b..f74545e9821 100644 --- a/src/libslic3r/Format/3mf.cpp +++ b/src/libslic3r/Format/3mf.cpp @@ -271,6 +271,105 @@ namespace Slic3r { //! return same string #define L(s) (s) #define _(s) Slic3r::I18N::translate(s) +void XMLCALL PrusaFileParser::start_element_handler(void *userData, const char *name, const char **attributes) +{ + PrusaFileParser *prusa_parser = (PrusaFileParser *) userData; + if (prusa_parser != nullptr) { prusa_parser->_start_element_handler(name, attributes); } +} + +void XMLCALL PrusaFileParser::characters_handler(void *userData, const XML_Char *s, int len) +{ + PrusaFileParser *prusa_parser = (PrusaFileParser *) userData; + if (prusa_parser != nullptr) { prusa_parser->_characters_handler(s, len); } +} + +bool PrusaFileParser::check_3mf_from_prusa(const std::string filename) +{ + mz_zip_archive archive; + mz_zip_zero_struct(&archive); + if (!open_zip_reader(&archive, filename)) { + // throw Slic3r::RuntimeError("Loading 3mf file failed."); + return false; + } + + const std::string sub_relationship_file = "3D/_rels/3dmodel.model.rels"; + int sub_index = mz_zip_reader_locate_file(&archive, sub_relationship_file.c_str(), nullptr, 0); + if (sub_index == -1) { + const std::string model_file = "3D/3dmodel.model"; + int model_file_index = mz_zip_reader_locate_file(&archive, model_file.c_str(), nullptr, 0); + if (model_file_index != -1) { + int depth = 0; + m_parser = XML_ParserCreate(nullptr); + XML_SetUserData(m_parser, (void *) this); + XML_SetElementHandler(m_parser, start_element_handler, nullptr); + XML_SetCharacterDataHandler(m_parser, characters_handler); + + mz_zip_archive_file_stat stat; + if (!mz_zip_reader_file_stat(&archive, model_file_index, &stat)) goto EXIT; + + void *parser_buffer = XML_GetBuffer(m_parser, (int) stat.m_uncomp_size); + if (parser_buffer == nullptr) goto EXIT; + + mz_bool res = mz_zip_reader_extract_file_to_mem(&archive, stat.m_filename, parser_buffer, (size_t) stat.m_uncomp_size, 0); + if (res == 0) goto EXIT; + + XML_ParseBuffer(m_parser, (int) stat.m_uncomp_size, 1); + } + } + +EXIT: + close_zip_reader(&archive); + return m_from_prusa; +} + +void PrusaFileParser::_characters_handler(const XML_Char *s, int len) +{ + if (m_is_application_key) { + std::string str(s, len); + if (!str.empty() && str.find("PrusaSlicer") != std::string::npos) m_from_prusa = true; + } +} + +void PrusaFileParser::_start_element_handler(const char *name, const char **attributes) +{ + if (::strcmp(name, "metadata") == 0) { + unsigned int num_attributes = (unsigned int) XML_GetSpecifiedAttributeCount(m_parser); + + std::string str_name = get_attribute_value_string(attributes, num_attributes, "name"); + if (!str_name.empty() && str_name.find("Application") != std::string::npos) { m_is_application_key = true; } + } +} + +const char *PrusaFileParser::get_attribute_value_charptr(const char **attributes, unsigned int attributes_size, const char *attribute_key) +{ + if ((attributes == nullptr) || (attributes_size == 0) || (attributes_size % 2 != 0) || (attribute_key == nullptr)) return nullptr; + + for (unsigned int a = 0; a < attributes_size; a += 2) { + if (::strcmp(attributes[a], attribute_key) == 0) return attributes[a + 1]; + } + + return nullptr; +} + +std::string PrusaFileParser::get_attribute_value_string(const char **attributes, unsigned int attributes_size, const char *attribute_key) +{ + const char *text = get_attribute_value_charptr(attributes, attributes_size, attribute_key); + return (text != nullptr) ? text : ""; +} + +ModelVolumeType type_from_string(const std::string &s) +{ + // Legacy support + if (s == "1") return ModelVolumeType::PARAMETER_MODIFIER; + // New type (supporting the support enforcers & blockers) + if (s == "ModelPart") return ModelVolumeType::MODEL_PART; + if (s == "NegativeVolume") return ModelVolumeType::NEGATIVE_VOLUME; + if (s == "ParameterModifier") return ModelVolumeType::PARAMETER_MODIFIER; + if (s == "SupportEnforcer") return ModelVolumeType::SUPPORT_ENFORCER; + if (s == "SupportBlocker") return ModelVolumeType::SUPPORT_BLOCKER; + // Default value if invalud type string received. + return ModelVolumeType::MODEL_PART; +} // Base class with error messages management class _3MF_Base @@ -668,6 +767,7 @@ namespace Slic3r { std::string name(stat.m_filename); std::replace(name.begin(), name.end(), '\\', '/'); + /* if (boost::algorithm::iequals(name, LAYER_HEIGHTS_PROFILE_FILE)) { // extract slic3r layer heights profile file _extract_layer_heights_profile_config_from_archive(archive, stat); @@ -692,7 +792,9 @@ namespace Slic3r { // extract slic3r layer config ranges file _extract_custom_gcode_per_print_z_from_archive(archive, stat); } - else if (boost::algorithm::iequals(name, MODEL_CONFIG_FILE)) { + */ + // only read the model config for Prusa 3mf + if (boost::algorithm::iequals(name, MODEL_CONFIG_FILE)) { // extract slic3r model config file if (!_extract_model_config_from_archive(archive, stat, model)) { close_zip_reader(&archive); @@ -1913,6 +2015,27 @@ namespace Slic3r { std::string key = get_attribute_value_string(attributes, num_attributes, KEY_ATTR); std::string value = get_attribute_value_string(attributes, num_attributes, VALUE_ATTR); + // filter the prusa model config keys + std::vector valid_keys = { + "name", + "volume_type", + "matrix", + "source_file", + "source_object_id", + "source_volume_id", + "source_offset_x", + "source_offset_y", + "source_offset_z", + "extruder", + "modifier" + }; + + auto itor = std::find(valid_keys.begin(), valid_keys.end(), key); + if (itor == valid_keys.end()) { + // do nothing if not valid keys + return true; + } + if (type == OBJECT_TYPE) object->second.metadata.emplace_back(key, value); else if (type == VOLUME_TYPE) { @@ -2044,7 +2167,7 @@ namespace Slic3r { else if ((metadata.key == MODIFIER_KEY) && (metadata.value == "1")) volume->set_type(ModelVolumeType::PARAMETER_MODIFIER); else if (metadata.key == VOLUME_TYPE_KEY) - volume->set_type(ModelVolume::type_from_string(metadata.value)); + volume->set_type(type_from_string(metadata.value)); else if (metadata.key == SOURCE_FILE_KEY) volume->source.input_file = metadata.value; else if (metadata.key == SOURCE_OBJECT_ID_KEY) diff --git a/src/libslic3r/Format/3mf.hpp b/src/libslic3r/Format/3mf.hpp index b91e90da745..9509b2c7042 100644 --- a/src/libslic3r/Format/3mf.hpp +++ b/src/libslic3r/Format/3mf.hpp @@ -1,7 +1,30 @@ #ifndef slic3r_Format_3mf_hpp_ #define slic3r_Format_3mf_hpp_ +#include "../expat.h" namespace Slic3r { +// PrusaFileParser is used to check 3mf file is from Prusa +class PrusaFileParser +{ +public: + PrusaFileParser() {} + ~PrusaFileParser() {} + + bool check_3mf_from_prusa(const std::string filename); + void _start_element_handler(const char *name, const char **attributes); + void _characters_handler(const XML_Char *s, int len); + +private: + const char *get_attribute_value_charptr(const char **attributes, unsigned int attributes_size, const char *attribute_key); + std::string get_attribute_value_string(const char **attributes, unsigned int attributes_size, const char *attribute_key); + + static void XMLCALL start_element_handler(void *userData, const char *name, const char **attributes); + static void XMLCALL characters_handler(void *userData, const XML_Char *s, int len); +private: + bool m_from_prusa = false; + bool m_is_application_key = false; + XML_Parser m_parser; +}; /* The format for saving the SLA points was changing in the past. This enum holds the latest version that is being currently used. * Examples of the Slic3r_PE_sla_support_points.txt for historically used versions: diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 95f9b87f2c1..be32d061554 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -3755,7 +3755,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool _add_project_config_file_to_archive(mz_zip_archive& archive, const DynamicPrintConfig &config, Model& model); //BBS: add project embedded preset files bool _add_project_embedded_presets_to_archive(mz_zip_archive& archive, Model& model, std::vector project_presets); - bool _add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, const IdToObjectDataMap &objects_data, int export_plate_idx = -1); + bool _add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, const IdToObjectDataMap &objects_data, int export_plate_idx = -1, bool save_gcode = true); bool _add_slice_info_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list); bool _add_gcode_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, Export3mfProgressFn proFn = nullptr); bool _add_custom_gcode_per_print_z_file_to_archive(mz_zip_archive& archive, Model& model, const DynamicPrintConfig* config); @@ -4093,7 +4093,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // This file contains all the attributes of all ModelObjects and their ModelVolumes (names, parameter overrides). // As there is just a single Indexed Triangle Set data stored per ModelObject, offsets of volumes into their respective Indexed Triangle Set data // is stored here as well. - if (!_add_model_config_file_to_archive(archive, model, plate_data_list, objects_data, export_plate_idx)) { + if (!_add_model_config_file_to_archive(archive, model, plate_data_list, objects_data, export_plate_idx, m_save_gcode)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", _add_model_config_file_to_archive failed\n"); return false; } @@ -4414,13 +4414,13 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) region_code = project->project_country_code; } - stream << " <" << METADATA_TAG << " name=\"" << BBL_MODEL_NAME_TAG << "\">" << name << "\n"; - stream << " <" << METADATA_TAG << " name=\"" << BBL_DESIGNER_TAG << "\">" << user_name << "\n"; - stream << " <" << METADATA_TAG << " name=\"" << BBL_DESIGNER_USER_ID_TAG << "\">" << user_id << "\n"; - stream << " <" << METADATA_TAG << " name=\"" << BBL_DESIGNER_COVER_FILE_TAG << "\">" << design_cover << "\n"; - stream << " <" << METADATA_TAG << " name=\"" << BBL_DESCRIPTION_TAG << "\">" << description << "\n"; - stream << " <" << METADATA_TAG << " name=\"" << BBL_COPYRIGHT_TAG << "\">" << copyright << "\n"; - stream << " <" << METADATA_TAG << " name=\"" << BBL_LICENSE_TAG << "\">" << license << "\n"; + stream << " <" << METADATA_TAG << " name=\"" << BBL_MODEL_NAME_TAG << "\">" << xml_escape(name) << "\n"; + stream << " <" << METADATA_TAG << " name=\"" << BBL_DESIGNER_TAG << "\">" << xml_escape(user_name) << "\n"; + stream << " <" << METADATA_TAG << " name=\"" << BBL_DESIGNER_USER_ID_TAG << "\">" << user_id << "\n"; + stream << " <" << METADATA_TAG << " name=\"" << BBL_DESIGNER_COVER_FILE_TAG << "\">" << xml_escape(design_cover) << "\n"; + stream << " <" << METADATA_TAG << " name=\"" << BBL_DESCRIPTION_TAG << "\">" << xml_escape(description) << "\n"; + stream << " <" << METADATA_TAG << " name=\"" << BBL_COPYRIGHT_TAG << "\">" << xml_escape(copyright) << "\n"; + stream << " <" << METADATA_TAG << " name=\"" << BBL_LICENSE_TAG << "\">" << xml_escape(license) << "\n"; /* save model info */ if (!model_id.empty()) { @@ -5199,7 +5199,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return true; } - bool _BBS_3MF_Exporter::_add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, const IdToObjectDataMap &objects_data, int export_plate_idx) + bool _BBS_3MF_Exporter::_add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, const IdToObjectDataMap &objects_data, int export_plate_idx, bool save_gcode) { std::stringstream stream; // Store mesh transformation in full precision, as the volumes are stored transformed and they need to be transformed back @@ -5324,7 +5324,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) //plate index stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << PLATERID_ATTR << "\" " << VALUE_ATTR << "=\"" << plate_data->plate_index + 1 << "\"/>\n"; stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << LOCK_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha<< plate_data->locked<< "\"/>\n"; - stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << GCODE_FILE_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha << plate_data->gcode_file << "\"/>\n"; + if (save_gcode) + stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << GCODE_FILE_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha << xml_escape(plate_data->gcode_file) << "\"/>\n"; if (!plate_data->gcode_file.empty()) { gcode_paths.push_back(plate_data->gcode_file); } @@ -5363,8 +5364,10 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) stream << " \n"; } } + // write model rels - _add_relationships_file_to_archive(archive, BBS_MODEL_CONFIG_RELS_FILE, gcode_paths, {"http://schemas.bambulab.com/package/2021/gcode"}, Slic3r::PackingTemporaryData(), export_plate_idx); + if (save_gcode) + _add_relationships_file_to_archive(archive, BBS_MODEL_CONFIG_RELS_FILE, gcode_paths, {"http://schemas.bambulab.com/package/2021/gcode"}, Slic3r::PackingTemporaryData(), export_plate_idx); //BBS: store assemble related info stream << " <" << ASSEMBLE_TAG << ">\n"; diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 05daa99484a..1e8297b6692 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -344,7 +344,9 @@ bool GCode::gcode_label_objects = false; float purge_length = purge_volume / filament_area; int old_filament_e_feedrate = gcode_writer.extruder() != nullptr ? (int)(60.0 * full_config.filament_max_volumetric_speed.get_at(previous_extruder_id) / filament_area) : 200; + old_filament_e_feedrate = old_filament_e_feedrate == 0 ? 100 : old_filament_e_feedrate; int new_filament_e_feedrate = (int)(60.0 * full_config.filament_max_volumetric_speed.get_at(new_extruder_id) / filament_area); + new_filament_e_feedrate = new_filament_e_feedrate == 0 ? 100 : new_filament_e_feedrate; config.set_key_value("max_layer_z", new ConfigOptionFloat(gcodegen.m_max_layer_z)); config.set_key_value("relative_e_axis", new ConfigOptionBool(RELATIVE_E_AXIS)); @@ -3923,6 +3925,7 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) old_filament_temp = m_config.nozzle_temperature.get_at(previous_extruder_id); wipe_volume = flush_matrix[previous_extruder_id * number_of_extruders + extruder_id]; old_filament_e_feedrate = (int)(60.0 * m_config.filament_max_volumetric_speed.get_at(previous_extruder_id) / filament_area); + old_filament_e_feedrate = old_filament_e_feedrate == 0 ? 100 : old_filament_e_feedrate; } else { old_retract_length = 0.f; @@ -3933,6 +3936,7 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) } float wipe_length = wipe_volume / filament_area; int new_filament_e_feedrate = (int)(60.0 * m_config.filament_max_volumetric_speed.get_at(extruder_id) / filament_area); + new_filament_e_feedrate = new_filament_e_feedrate == 0 ? 100 : new_filament_e_feedrate; DynamicConfig dyn_config; dyn_config.set_key_value("previous_extruder", new ConfigOptionInt((int)(m_writer.extruder() != nullptr ? m_writer.extruder()->id() : -1))); diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 2160ff6276a..5f9c8c1cbc8 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -33,6 +33,7 @@ // BBS: for segment #include "MeshBoolean.hpp" +#include "Format/3mf.hpp" namespace Slic3r { // BBS initialization of static variables @@ -202,7 +203,7 @@ Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* c //BBS: add part plate related logic // BBS: backup & restore // Loading model from a file (3MF or AMF), not from a simple geometry file (STL or OBJ). -Model Model::read_from_archive(const std::string& input_file, DynamicPrintConfig* config, ConfigSubstitutionContext* config_substitutions, LoadStrategy options, PlateDataPtrs* plate_data, std::vector* project_presets, bool *is_bbl_3mf, Semver* file_version, Import3mfProgressFn proFn, BBLProject *project) +Model Model::read_from_archive(const std::string& input_file, DynamicPrintConfig* config, ConfigSubstitutionContext* config_substitutions, En3mfType& out_file_type, LoadStrategy options, PlateDataPtrs* plate_data, std::vector* project_presets, Semver* file_version, Import3mfProgressFn proFn, BBLProject *project) { assert(config != nullptr); assert(config_substitutions != nullptr); @@ -210,15 +211,28 @@ Model Model::read_from_archive(const std::string& input_file, DynamicPrintConfig Model model; bool result = false; - if (boost::algorithm::iends_with(input_file, ".3mf")) - //BBS: add part plate related logic - // BBS: backup & restore - result = load_bbs_3mf(input_file.c_str(), config, config_substitutions, &model, plate_data, project_presets, is_bbl_3mf, file_version, proFn, options, project); + bool is_bbl_3mf; + if (boost::algorithm::iends_with(input_file, ".3mf")) { + PrusaFileParser prusa_file_parser; + if (prusa_file_parser.check_3mf_from_prusa(input_file)) { + // for Prusa 3mf + result = load_3mf(input_file.c_str(), *config, *config_substitutions, &model, true); + out_file_type = En3mfType::From_Prusa; + } else { + // BBS: add part plate related logic + // BBS: backup & restore + result = load_bbs_3mf(input_file.c_str(), config, config_substitutions, &model, plate_data, project_presets, &is_bbl_3mf, file_version, proFn, options, project); + } + } else if (boost::algorithm::iends_with(input_file, ".zip.amf")) - result = load_amf(input_file.c_str(), config, config_substitutions, &model, is_bbl_3mf); + result = load_amf(input_file.c_str(), config, config_substitutions, &model, &is_bbl_3mf); else throw Slic3r::RuntimeError("Unknown file format. Input file must have .3mf or .zip.amf extension."); + if (out_file_type != En3mfType::From_Prusa) { + out_file_type = is_bbl_3mf ? En3mfType::From_BBS : En3mfType::From_Other; + } + if (!result) throw Slic3r::RuntimeError("Loading of a model file failed."); @@ -2837,7 +2851,7 @@ double getadhesionCoeff(const ModelVolumePtrs objectVolumes) double adhesionCoeff = 1; for (const ModelVolume* modelVolume : objectVolumes) { if (Model::extruderParamsMap.find(modelVolume->extruder_id()) != Model::extruderParamsMap.end()) - if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PET") { + if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PETG") { adhesionCoeff = 2; } else if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "TPU") { @@ -2871,6 +2885,14 @@ double getTemperatureFromExtruder(const ModelVolumePtrs objectVolumes) { #endif } +double ModelInstance::get_auto_brim_width() const +{ + double adhcoeff = getadhesionCoeff(object->volumes); + double DeltaT = getTemperatureFromExtruder(object->volumes); + // get auto brim width (Note even if the global brim_type=btOuterBrim, we can still go into this branch) + return get_auto_brim_width(DeltaT, adhcoeff); +} + void ModelInstance::get_arrange_polygon(void* ap) const { // static const double SIMPLIFY_TOLERANCE_MM = 0.1; @@ -2910,18 +2932,6 @@ void ModelInstance::get_arrange_polygon(void* ap) const ret.extrude_ids = volume->get_extruders(); if (ret.extrude_ids.empty()) //the default extruder ret.extrude_ids.push_back(1); - - // get user specified brim width per object - // Note: if global brim_type=btNoBrim or brAutoBrim, user can't set individual brim_width - if (object->config.has("brim_width")) - ret.user_brim_width = object->config.opt_float("brim_width"); - else { - // BBS: get DeltaT, adhcoeff before calculating brim width - double adhcoeff = getadhesionCoeff(object->volumes); - double DeltaT = getTemperatureFromExtruder(object->volumes); - // get auto brim width (Note even if the global brim_type=btOuterBrim, we can still go into this branch) - ret.auto_brim_width = get_auto_brim_width(DeltaT, adhcoeff); - } } indexed_triangle_set FacetsAnnotation::get_facets(const ModelVolume& mv, EnforcerBlockerType type) const diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 3a5b7e7f6d2..b9aca56de63 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -297,6 +297,12 @@ class ModelObject final : public ObjectBase const Model* get_model() const { return m_model; } // BBS: production extension int get_backup_id() const; + template const T* get_config_value(const DynamicPrintConfig& global_config, const std::string& config_option) { + if (config.has(config_option)) + return static_cast(config.option(config_option)); + else + return global_config.option(config_option); + } ModelVolume* add_volume(const TriangleMesh &mesh); ModelVolume* add_volume(TriangleMesh &&mesh, ModelVolumeType type = ModelVolumeType::MODEL_PART); @@ -577,6 +583,12 @@ enum class ConversionType : int { CONV_FROM_METER, }; +enum class En3mfType : int { + From_BBS, + From_Prusa, + From_Other +}; + class FacetsAnnotation final : public ObjectWithTimestamp { public: // Assign the content if the timestamp differs, don't assign an ObjectID. @@ -1077,6 +1089,7 @@ class ModelInstance final : public ObjectBase //BBS double get_auto_brim_width(double deltaT, double adhension) const; + double get_auto_brim_width() const; // BBS Polygon convex_hull_2d(); void invalidate_convex_hull_2d(); @@ -1280,8 +1293,8 @@ class Model final : public ObjectBase // BBS: backup static Model read_from_archive( const std::string& input_file, - DynamicPrintConfig* config, ConfigSubstitutionContext* config_substitutions, - LoadStrategy options = LoadStrategy::AddDefaultInstances, PlateDataPtrs* plate_data = nullptr, std::vector* project_presets = nullptr, bool* is_bbl_3mf = nullptr, Semver* file_version = nullptr, Import3mfProgressFn proFn = nullptr, BBLProject* project = nullptr); + DynamicPrintConfig* config, ConfigSubstitutionContext* config_substitutions, En3mfType& out_file_type, + LoadStrategy options = LoadStrategy::AddDefaultInstances, PlateDataPtrs* plate_data = nullptr, std::vector* project_presets = nullptr, Semver* file_version = nullptr, Import3mfProgressFn proFn = nullptr, BBLProject* project = nullptr); // Add a new ModelObject to this Model, generate a new ID for this ModelObject. ModelObject* add_object(); diff --git a/src/libslic3r/ModelArrange.cpp b/src/libslic3r/ModelArrange.cpp index 00e39aa3f1a..6501799029c 100644 --- a/src/libslic3r/ModelArrange.cpp +++ b/src/libslic3r/ModelArrange.cpp @@ -144,8 +144,22 @@ ArrangePolygon get_instance_arrange_poly(ModelInstance* instance, const Slic3r:: for (int i = 0; i < BedType::btCount; i++) ap.vitrify_temp += tmp * pow(100, BedType::btCount - i - 1); } - ap.height = instance->get_object()->bounding_box().size().z(); - ap.name = instance->get_object()->name; + + // get brim width + auto obj = instance->get_object(); + ap.brim_width = instance->get_auto_brim_width(); + auto brim_type_ptr = obj->get_config_value>(config, "brim_type"); + if (brim_type_ptr) { + auto brim_type = brim_type_ptr->getInt(); + if (brim_type == btOuterOnly) + ap.brim_width = obj->get_config_value(config, "brim_width")->getFloat(); + else if (brim_type == btNoBrim) + ap.brim_width = 0; + } + + + ap.height = obj->bounding_box().size().z(); + ap.name = obj->name; return ap; } diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 5d1c03921c5..6407aab34ee 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -637,9 +637,9 @@ void Preset::set_visible_from_appconfig(const AppConfig &app_config) BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": name %1%, is_visible set to %2%")%name % is_visible; } -std::string Preset::get_filament_type() +std::string Preset::get_filament_type(std::string &display_filament_type) { - return config.get_filament_type(); + return config.get_filament_type(display_filament_type); } static std::vector s_Preset_print_options { diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index 37662e6a8b7..a5a5217f2c0 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -295,7 +295,7 @@ class Preset bool operator<(const Preset &other) const { return this->name < other.name; } // special for upport G and Support W - std::string get_filament_type(); + std::string get_filament_type(std::string &display_filament_type); static const std::vector& print_options(); static const std::vector& filament_options(); diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 91c47da20c2..145535eb0cf 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -729,7 +729,7 @@ void PresetBundle::remove_users_preset(AppConfig& config) } printers.select_preset_by_name(default_printer_name, true); } else { - printers.select_preset_by_name(printer_selected_preset_name, true); + printers.select_preset_by_name(printer_selected_preset_name, false); } std::string selected_print_name = prints.get_selected_preset().name; @@ -750,7 +750,7 @@ void PresetBundle::remove_users_preset(AppConfig& config) std::string default_print_profile_name = printers.get_selected_preset().config.opt_string("default_print_profile"); prints.select_preset_by_name(default_print_profile_name, true); } else { - prints.select_preset_by_name(selected_print_name, true); + prints.select_preset_by_name(selected_print_name, false); } std::string selected_filament_name = filaments.get_selected_preset().name; @@ -771,7 +771,7 @@ void PresetBundle::remove_users_preset(AppConfig& config) if (prefered_filament_profiles.size() > 0) filaments.select_preset_by_name(prefered_filament_profiles[0], true); } else { - filaments.select_preset_by_name(selected_filament_name, true); + filaments.select_preset_by_name(selected_filament_name, false); } /* set selected preset */ diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index a4ba79b662c..710c74b18d1 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -692,14 +692,15 @@ static StringObjectException layered_print_cleareance_valid(const Print &print, //BBS static std::map filament_is_high_temp { {"PLA", false}, - {"PET", true}, + {"PLA-CF", false}, + {"PETG", true}, {"ABS", true}, {"TPU", false}, {"PA", true}, + {"PA-CF", true}, {"PET-CF", true}, {"PC", true}, - {"ASA", true}, - {"PVA", false} + {"ASA", true} }; //BBS: this function is used to check whether multi filament can be printed diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 9fdd1b37541..9241cc2ebe0 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -264,8 +264,11 @@ void PrintConfigDef::init_common_params() //BBS: add "bed_exclude_area" def = this->add("bed_exclude_area", coPoints); def->label = L("Bed exclude area"); - def->mode = comDevelop; - def->set_default_value(new ConfigOptionPoints{}); + def->tooltip = L("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, ...\""); + def->mode = comAdvanced; + def->gui_type = ConfigOptionDef::GUIType::one_string; + def->set_default_value(new ConfigOptionPoints{ Vec2d(0, 0) }); def = this->add("elefant_foot_compensation", coFloat); def->label = L("Elephant foot compensation"); @@ -290,7 +293,6 @@ void PrintConfigDef::init_common_params() def->sidetext = L("mm"); def->min = 0; def->max = 1000; - def->readonly = true; def->mode = comSimple; def->set_default_value(new ConfigOptionFloat(100.0)); @@ -720,7 +722,7 @@ void PrintConfigDef::init_fff_params() def->multiline = true; def->full_width = true; def->height = 120; - def->mode = comDevelop; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionStrings { " " }); auto def_top_fill_pattern = def = this->add("top_surface_pattern", coEnum); @@ -951,13 +953,15 @@ void PrintConfigDef::init_fff_params() def->gui_type = ConfigOptionDef::GUIType::f_enum_open; def->gui_flags = "show_value"; def->enum_values.push_back("PLA"); - def->enum_values.push_back("PET"); def->enum_values.push_back("ABS"); + def->enum_values.push_back("ASA"); + def->enum_values.push_back("PETG"); def->enum_values.push_back("TPU"); + def->enum_values.push_back("PC"); def->enum_values.push_back("PA"); + def->enum_values.push_back("PA-CF"); + def->enum_values.push_back("PLA-CF"); def->enum_values.push_back("PET-CF"); - def->enum_values.push_back("PC"); - def->enum_values.push_back("ASA"); def->enum_values.push_back("PVA"); def->mode = comSimple; def->set_default_value(new ConfigOptionStrings { "PLA" }); @@ -1970,7 +1974,7 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionFloat(100)); def = this->add("spiral_mode", coBool); - def->label = L("Spiral mode"); + def->label = L("Spiral vase"); def->tooltip = L("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"); @@ -1978,7 +1982,7 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionBool(false)); def = this->add("timelapse_no_toolhead", coBool); - def->label = L("Timelapse without toolhead"); + def->label = L("Timelapse"); def->tooltip = L("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 " @@ -2012,7 +2016,7 @@ void PrintConfigDef::init_fff_params() def->multiline = true; def->full_width = true; def->height = 12; - def->mode = comDevelop; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionStrings { " " }); def = this->add("single_extruder_multi_material", coBool); @@ -3583,7 +3587,7 @@ std::string DynamicPrintConfig::validate() } } -std::string DynamicPrintConfig::get_filament_type(int id) +std::string DynamicPrintConfig::get_filament_type(std::string &displayed_filament_type, int id) { auto* filament_id = dynamic_cast(this->option("filament_id")); auto* filament_type = dynamic_cast(this->option("filament_type")); @@ -3594,9 +3598,11 @@ std::string DynamicPrintConfig::get_filament_type(int id) if (!filament_is_support) { if (filament_type) { + displayed_filament_type = filament_type->get_at(id); return filament_type->get_at(id); } else { + displayed_filament_type = ""; return ""; } } @@ -3605,25 +3611,33 @@ std::string DynamicPrintConfig::get_filament_type(int id) if (is_support) { if (filament_id) { if (filament_id->get_at(id) == "GFS00") { - return "Support W"; + displayed_filament_type = "Support W"; + return "PLA-S"; } else if (filament_id->get_at(id) == "GFS01") { - return "Support G"; + displayed_filament_type = "Support G"; + return "PA-S"; } else { - return filament_type->get_at(id) + "-Support"; + displayed_filament_type = filament_type->get_at(id); + return filament_type->get_at(id); } } else { - if (filament_type->get_at(id) == "PLA") - return "Support W"; - else if (filament_type->get_at(id) == "PA") - return "Support G"; - else - return filament_type->get_at(id) + "-Support"; + if (filament_type->get_at(id) == "PLA") { + displayed_filament_type = "Support W"; + return "PLA-S"; + } else if (filament_type->get_at(id) == "PA") { + displayed_filament_type = "Support G"; + return "PA-S"; + } else { + displayed_filament_type = filament_type->get_at(id); + return filament_type->get_at(id); + } } } else { + displayed_filament_type = filament_type->get_at(id); return filament_type->get_at(id); } } diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index c20f9609f68..f08702299a5 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -325,7 +325,7 @@ class DynamicPrintConfig : public DynamicConfig { PrintConfigDef::handle_legacy(opt_key, value); } //BBS special case Support G/ Support W - std::string get_filament_type(int id = 0); + std::string get_filament_type(std::string &displayed_filament_type, int id = 0); }; void handle_legacy_sla(DynamicPrintConfig &config); diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 2b5a7f1c895..73acda3b4f4 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -745,7 +745,6 @@ bool doesVolumeIntersect(VolumeSlices& vs1, VolumeSlices& vs2) if (vs1.volume_id == vs2.volume_id) return true; if (vs1.slices.size() != vs2.slices.size()) return false; - double offsetValue = 0.4 / SCALING_FACTOR; for (int i = 0; i != vs1.slices.size(); ++i) { if (vs1.slices[i].empty()) continue; @@ -766,7 +765,7 @@ bool groupingVolumes(std::vector objSliceByVolume, std::vector groupIndex(objSliceByVolume.size(), -1); - double offsetValue = 0.4 / SCALING_FACTOR; + double offsetValue = 0.15 / SCALING_FACTOR; for (int i = 0; i != objSliceByVolume.size(); ++i) { for (int j = 0; j != objSliceByVolume[i].slices.size(); ++j) { diff --git a/src/libslic3r/ProjectTask.hpp b/src/libslic3r/ProjectTask.hpp index a2c6bcf4421..8d29f8ba229 100644 --- a/src/libslic3r/ProjectTask.hpp +++ b/src/libslic3r/ProjectTask.hpp @@ -27,6 +27,12 @@ enum MachineBedType { BED_TYPE_COUNT, }; +enum MappingResult { + MAPPING_RESULT_DEFAULT = 0, + MAPPING_RESULT_TYPE_MISMATCH = 1, + MAPPING_RESULT_EXCEED = 2 +}; + struct FilamentInfo { int id; // filament id = extruder id, start with 0. @@ -36,6 +42,7 @@ struct FilamentInfo float used_g; int tray_id; // start with 0 float distance; + int mapping_result = 0; }; class BBLSliceInfo { diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index d251ccc8ac9..13282b90d4d 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -3286,7 +3286,9 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::generate_raf const BrimType brim_type = object.config().brim_type; const bool brim_outer = brim_type == btOuterOnly || brim_type == btOuterAndInner; const bool brim_inner = brim_type == btInnerOnly || brim_type == btOuterAndInner; - const auto brim_object_gap = scaled(object.config().brim_object_gap.value + object.config().brim_width.value); + // BBS: the pattern of raft and brim are the same, thus the brim can be serpated by support raft. + const auto brim_object_gap = scaled(object.config().brim_object_gap.value); + //const auto brim_object_gap = scaled(object.config().brim_object_gap.value + object.config().brim_width.value); for (const ExPolygon &ex : object.layers().front()->lslices) { if (brim_outer && brim_inner) polygons_append(brim, offset(ex, brim_object_gap)); @@ -3389,7 +3391,12 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::generate_raf if (columns_base != nullptr) { // Expand the bases of the support columns in the 1st layer. Polygons &raft = columns_base->polygons; - Polygons trimming = offset(m_object->layers().front()->lslices, (float)scale_(m_support_params.gap_xy), SUPPORT_SURFACES_OFFSET_PARAMETERS); + Polygons trimming; + // BBS: if first layer of support is intersected with object island, it must have the same function as brim unless in nobrim mode. + if (object.has_brim()) + trimming = offset(m_object->layers().front()->lslices, (float)scale_(object.config().brim_object_gap.value), SUPPORT_SURFACES_OFFSET_PARAMETERS); + else + trimming = offset(m_object->layers().front()->lslices, (float)scale_(m_support_params.gap_xy), SUPPORT_SURFACES_OFFSET_PARAMETERS); if (inflate_factor_1st_layer > SCALED_EPSILON) { // Inflate in multiple steps to avoid leaking of the support 1st layer through object walls. auto nsteps = std::max(5, int(ceil(inflate_factor_1st_layer / m_support_params.first_layer_flow.scaled_width()))); diff --git a/src/libslic3r/TriangleSelector.hpp b/src/libslic3r/TriangleSelector.hpp index 0060ee4529f..645a63aefef 100644 --- a/src/libslic3r/TriangleSelector.hpp +++ b/src/libslic3r/TriangleSelector.hpp @@ -28,7 +28,7 @@ class TriangleSelector POINTER, // BBS HEIGHT_RANGE, - FRAGMENT_FILTER, + GAP_FILL, }; struct ClippingPlane diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 358557ccb6a..d85be22309b 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -68,6 +68,8 @@ set(SLIC3R_GUI_SOURCES GUI/Widgets/SideTools.hpp GUI/Widgets/WebView.cpp GUI/Widgets/WebView.hpp + GUI/Widgets/wxStaticText2.cpp + GUI/Widgets/wxStaticText2.hpp GUI/AboutDialog.cpp GUI/AboutDialog.hpp GUI/AuxiliaryDialog.cpp @@ -125,8 +127,6 @@ set(SLIC3R_GUI_SOURCES GUI/Gizmos/GLGizmoFaceDetector.hpp GUI/Gizmos/GLGizmoSeam.cpp GUI/Gizmos/GLGizmoSeam.hpp - GUI/Gizmos/GLGizmoModifier.cpp - GUI/Gizmos/GLGizmoModifier.hpp GUI/GLSelectionRectangle.cpp GUI/GLSelectionRectangle.hpp GUI/Gizmos/GizmoObjectManipulation.cpp @@ -213,6 +213,8 @@ set(SLIC3R_GUI_SOURCES GUI/MonitorPage.hpp GUI/StatusPanel.cpp GUI/StatusPanel.hpp + GUI/UpdateErrorMessage.cpp + GUI/UpdateErrorMessage.hpp GUI/SliceInfoPanel.cpp GUI/SliceInfoPanel.hpp GUI/CameraPopup.cpp @@ -344,6 +346,8 @@ set(SLIC3R_GUI_SOURCES GUI/ReleaseNote.cpp GUI/Calibration.hpp GUI/Calibration.cpp + GUI/PrintOptionsDialog.hpp + GUI/PrintOptionsDialog.cpp Utils/json_diff.hpp Utils/json_diff.cpp GUI/KBShortcutsDialog.hpp diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index e6f63fc55cb..9105b74b448 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -11,7 +11,9 @@ static bool show_flag; #else #define COMBOBOX_FILAMENT (m_comboBox_filament) #endif -AMSMaterialsSetting::AMSMaterialsSetting(wxWindow *parent, wxWindowID id) : wxPopupTransientWindow(parent, wxPU_CONTAINS_CONTROLS) { +AMSMaterialsSetting::AMSMaterialsSetting(wxWindow *parent, wxWindowID id) + : DPIDialog(parent, id, _L("AMSMaterialsSetting"), wxDefaultPosition, wxDefaultSize, wxBORDER_NONE) +{ create(); } @@ -19,13 +21,15 @@ void AMSMaterialsSetting::create() { SetBackgroundColour(*wxWHITE); wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); - wxBoxSizer *m_sizer_body = new wxBoxSizer(wxVERTICAL); + SetSize(wxSize(AMS_MATERIALS_SETTING_BODY_WIDTH, -1)); + SetMinSize(wxSize(AMS_MATERIALS_SETTING_BODY_WIDTH, -1)); + SetMaxSize(wxSize(AMS_MATERIALS_SETTING_BODY_WIDTH, -1)); + + - m_panel_body = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(AMS_MATERIALS_SETTING_BODY_WIDTH, -1), wxTAB_TRAVERSAL); - m_panel_body->SetBackgroundColour(*wxWHITE); wxBoxSizer *m_sizer_filament = new wxBoxSizer(wxHORIZONTAL); - m_title_filament = new wxStaticText(m_panel_body, wxID_ANY, _L("Filament"), wxDefaultPosition, wxSize(AMS_MATERIALS_SETTING_LABEL_WIDTH, -1), 0); + m_title_filament = new wxStaticText(this, wxID_ANY, _L("Filament"), wxDefaultPosition, wxSize(AMS_MATERIALS_SETTING_LABEL_WIDTH, -1), 0); m_title_filament->SetFont(::Label::Body_13); m_title_filament->SetForegroundColour(AMS_MATERIALS_SETTING_GREY800); m_title_filament->Wrap(-1); @@ -34,15 +38,15 @@ void AMSMaterialsSetting::create() m_sizer_filament->Add(0, 0, 0, wxEXPAND, 0); #ifdef __APPLE__ - m_comboBox_filament_mac = new wxComboBox(m_panel_body, wxID_ANY, wxEmptyString, wxDefaultPosition, AMS_MATERIALS_SETTING_COMBOX_WIDTH, 0, nullptr, wxCB_READONLY); + m_comboBox_filament_mac = new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, AMS_MATERIALS_SETTING_COMBOX_WIDTH, 0, nullptr, wxCB_READONLY); #else - m_comboBox_filament = new ::ComboBox(m_panel_body, wxID_ANY, wxEmptyString, wxDefaultPosition, AMS_MATERIALS_SETTING_COMBOX_WIDTH, 0, nullptr, wxCB_READONLY); + m_comboBox_filament = new ::ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, AMS_MATERIALS_SETTING_COMBOX_WIDTH, 0, nullptr, wxCB_READONLY); #endif m_sizer_filament->Add(COMBOBOX_FILAMENT, 1, wxALIGN_CENTER, 0); wxBoxSizer *m_sizer_colour = new wxBoxSizer(wxHORIZONTAL); - m_title_colour = new wxStaticText(m_panel_body, wxID_ANY, _L("Colour"), wxDefaultPosition, wxSize(AMS_MATERIALS_SETTING_LABEL_WIDTH, -1), 0); + m_title_colour = new wxStaticText(this, wxID_ANY, _L("Colour"), wxDefaultPosition, wxSize(AMS_MATERIALS_SETTING_LABEL_WIDTH, -1), 0); m_title_colour->SetFont(::Label::Body_13); m_title_colour->SetForegroundColour(AMS_MATERIALS_SETTING_GREY800); m_title_colour->Wrap(-1); @@ -53,30 +57,18 @@ void AMSMaterialsSetting::create() m_clrData = new wxColourData(); m_clrData->SetChooseFull(true); m_clrData->SetChooseAlpha(false); - m_clr_picker = new wxButton(m_panel_body, wxID_ANY, "", wxDefaultPosition, wxSize(FromDIP(20), FromDIP(20)), wxBU_EXACTFIT | wxBORDER_NONE); + + m_clr_picker = new Button(this, "", ""); + m_clr_picker->SetCanFocus(false); + m_clr_picker->SetSize(FromDIP(50), FromDIP(25)); + m_clr_picker->SetMinSize(wxSize(FromDIP(50), FromDIP(25))); + m_clr_picker->SetCornerRadius(FromDIP(6)); + m_clr_picker->SetBorderColor(wxColour(172, 172, 172)); m_clr_picker->Bind(wxEVT_BUTTON, &AMSMaterialsSetting::on_clr_picker, this); m_sizer_colour->Add(m_clr_picker, 0, 0, 0); - - m_panel_SN = new wxPanel(m_panel_body, wxID_ANY); - wxBoxSizer *m_sizer_SN = new wxBoxSizer(wxHORIZONTAL); - - auto m_title_SN = new wxStaticText(m_panel_SN, wxID_ANY, _L("SN"), wxDefaultPosition, wxSize(AMS_MATERIALS_SETTING_LABEL_WIDTH, -1), 0); - m_title_SN->SetFont(::Label::Body_13); - m_title_SN->SetForegroundColour(AMS_MATERIALS_SETTING_GREY800); - m_title_SN->Wrap(-1); - m_sizer_SN->Add(m_title_SN, 0, wxALIGN_CENTER, 0); - - m_sizer_SN->Add(0, 0, 0, wxEXPAND, 0); - - m_sn_number = new wxStaticText(m_panel_SN, wxID_ANY, wxEmptyString, wxDefaultPosition, AMS_MATERIALS_SETTING_COMBOX_WIDTH); - m_sizer_SN->Add(m_sn_number, 0, wxALIGN_CENTER, 0); - m_panel_SN->SetSizer(m_sizer_SN); - m_panel_SN->Layout(); - m_panel_SN->Fit(); - wxBoxSizer *m_sizer_temperature = new wxBoxSizer(wxHORIZONTAL); - m_title_temperature = new wxStaticText(m_panel_body, wxID_ANY, _L("Nozzle\nTemperature"), wxDefaultPosition, wxSize(AMS_MATERIALS_SETTING_LABEL_WIDTH, -1), 0); + m_title_temperature = new wxStaticText(this, wxID_ANY, _L("Nozzle\nTemperature"), wxDefaultPosition, wxSize(AMS_MATERIALS_SETTING_LABEL_WIDTH, -1), 0); m_title_temperature->SetFont(::Label::Body_13); m_title_temperature->SetForegroundColour(AMS_MATERIALS_SETTING_GREY800); m_title_temperature->Wrap(-1); @@ -87,8 +79,8 @@ void AMSMaterialsSetting::create() wxBoxSizer *sizer_other = new wxBoxSizer(wxVERTICAL); wxBoxSizer *sizer_tempinput = new wxBoxSizer(wxHORIZONTAL); - m_input_nozzle_max = new ::TextInput(m_panel_body, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, AMS_MATERIALS_SETTING_INPUT_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); - m_input_nozzle_min = new ::TextInput(m_panel_body, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, AMS_MATERIALS_SETTING_INPUT_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); + m_input_nozzle_max = new ::TextInput(this, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, AMS_MATERIALS_SETTING_INPUT_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); + m_input_nozzle_min = new ::TextInput(this, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, AMS_MATERIALS_SETTING_INPUT_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); m_input_nozzle_max->Enable(false); m_input_nozzle_min->Enable(false); @@ -97,8 +89,8 @@ void AMSMaterialsSetting::create() m_input_nozzle_min->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); m_input_nozzle_min->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); - auto bitmap_max_degree = new wxStaticBitmap(m_panel_body, -1, create_scaled_bitmap("degree", nullptr, 16), wxDefaultPosition, wxDefaultSize); - auto bitmap_min_degree = new wxStaticBitmap(m_panel_body, -1, create_scaled_bitmap("degree", nullptr, 16), wxDefaultPosition, wxDefaultSize); + auto bitmap_max_degree = new wxStaticBitmap(this, -1, create_scaled_bitmap("degree", nullptr, 16), wxDefaultPosition, wxDefaultSize); + auto bitmap_min_degree = new wxStaticBitmap(this, -1, create_scaled_bitmap("degree", nullptr, 16), wxDefaultPosition, wxDefaultSize); sizer_tempinput->Add(m_input_nozzle_max, 1, wxALIGN_CENTER, 0); sizer_tempinput->Add(bitmap_min_degree, 0, wxALIGN_CENTER, 0); @@ -107,10 +99,10 @@ void AMSMaterialsSetting::create() sizer_tempinput->Add(bitmap_max_degree, 0, wxALIGN_CENTER, 0); wxBoxSizer *sizer_temp_txt = new wxBoxSizer(wxHORIZONTAL); - auto m_title_max = new wxStaticText(m_panel_body, wxID_ANY, _L("max"), wxDefaultPosition, AMS_MATERIALS_SETTING_INPUT_SIZE); + auto m_title_max = new wxStaticText(this, wxID_ANY, _L("max"), wxDefaultPosition, AMS_MATERIALS_SETTING_INPUT_SIZE); m_title_max->SetForegroundColour(AMS_MATERIALS_SETTING_GREY800); m_title_max->SetFont(::Label::Body_13); - auto m_title_min = new wxStaticText(m_panel_body, wxID_ANY, _L("min"), wxDefaultPosition, AMS_MATERIALS_SETTING_INPUT_SIZE); + auto m_title_min = new wxStaticText(this, wxID_ANY, _L("min"), wxDefaultPosition, AMS_MATERIALS_SETTING_INPUT_SIZE); m_title_min->SetForegroundColour(AMS_MATERIALS_SETTING_GREY800); m_title_min->SetFont(::Label::Body_13); sizer_temp_txt->Add(m_title_max, 1, wxALIGN_CENTER, 0); @@ -126,7 +118,7 @@ void AMSMaterialsSetting::create() wxString warning_string = wxString::FromUTF8( (boost::format(_u8L("The input value should be greater than %1% and less than %2%")) % FILAMENT_MIN_TEMP % FILAMENT_MAX_TEMP).str()); - warning_text = new wxStaticText(m_panel_body, wxID_ANY, warning_string, wxDefaultPosition, wxDefaultSize, 0); + warning_text = new wxStaticText(this, wxID_ANY, warning_string, wxDefaultPosition, wxDefaultSize, 0); warning_text->SetFont(::Label::Body_13); warning_text->SetForegroundColour(wxColour(255, 111, 0)); @@ -164,42 +156,71 @@ void AMSMaterialsSetting::create() e.Skip(); }); + m_panel_SN = new wxPanel(this, wxID_ANY); + wxBoxSizer *m_sizer_SN = new wxBoxSizer(wxVERTICAL); + m_sizer_SN->AddSpacer(FromDIP(16)); + + wxBoxSizer *m_sizer_SN_inside = new wxBoxSizer(wxHORIZONTAL); + + auto m_title_SN = new wxStaticText(m_panel_SN, wxID_ANY, _L("SN"), wxDefaultPosition, wxSize(AMS_MATERIALS_SETTING_LABEL_WIDTH, -1), 0); + m_title_SN->SetFont(::Label::Body_13); + m_title_SN->SetForegroundColour(AMS_MATERIALS_SETTING_GREY800); + m_title_SN->Wrap(-1); + m_sizer_SN_inside->Add(m_title_SN, 0, wxALIGN_CENTER, 0); + + m_sizer_SN_inside->Add(0, 0, 0, wxEXPAND, 0); + + m_sn_number = new wxStaticText(m_panel_SN, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize); + m_sizer_SN_inside->Add(m_sn_number, 0, wxALIGN_CENTER, 0); + m_sizer_SN->Add(m_sizer_SN_inside); + + m_panel_SN->SetSizer(m_sizer_SN); + m_panel_SN->Layout(); + m_panel_SN->Fit(); + wxBoxSizer *m_sizer_button = new wxBoxSizer(wxHORIZONTAL); m_sizer_button->Add(0, 0, 1, wxEXPAND, 0); - m_button_confirm = new Button(m_panel_body, _L("Confirm")); + m_button_confirm = new Button(this, _L("Confirm")); m_btn_bg_green = StateColor(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), std::pair(wxColour(0, 174, 66), StateColor::Normal)); - m_button_confirm->SetBackgroundColor(m_btn_bg_green); m_button_confirm->SetBorderColor(wxColour(0, 174, 66)); m_button_confirm->SetTextColor(AMS_MATERIALS_SETTING_GREY200); m_button_confirm->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE); - m_button_confirm->SetCornerRadius(12); - m_button_confirm->Bind(wxEVT_LEFT_DOWN, &AMSMaterialsSetting::on_select_ok, this); - m_sizer_button->Add(m_button_confirm, 0, wxALIGN_CENTER, 0); - - m_sizer_body->Add(m_sizer_filament, 0, wxEXPAND, 0); - m_sizer_body->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(16)); - m_sizer_body->Add(m_sizer_colour, 0, wxEXPAND, 0); - m_sizer_body->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(16)); - m_sizer_body->Add(m_panel_SN, 0, wxEXPAND, 0); - m_sizer_body->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(10)); - m_sizer_body->Add(m_sizer_temperature, 0, wxEXPAND, 0); - m_sizer_body->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(5)); - m_sizer_body->Add(warning_text, 0, wxEXPAND, 0); - m_sizer_body->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(24)); - m_sizer_body->Add(m_sizer_button, 0, wxEXPAND, 0); - - m_panel_body->SetSizer(m_sizer_body); - m_panel_body->Layout(); - m_sizer_main->Add(m_panel_body, 0, wxALL | wxEXPAND, 24); - - this->SetSizer(m_sizer_main); - this->Layout(); - m_sizer_main->Fit(this); - - this->Centre(wxBOTH); + m_button_confirm->SetCornerRadius(FromDIP(12)); + m_button_confirm->Bind(wxEVT_BUTTON, &AMSMaterialsSetting::on_select_ok, this); + + m_button_close = new Button(this, _L("Close")); + m_btn_bg_gray = StateColor(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(*wxWHITE, StateColor::Focused), + std::pair(wxColour(238, 238, 238), StateColor::Hovered), + std::pair(*wxWHITE, StateColor::Normal)); + m_button_close->SetBackgroundColor(m_btn_bg_gray); + m_button_close->SetBorderColor(AMS_MATERIALS_SETTING_GREY900); + m_button_close->SetTextColor(AMS_MATERIALS_SETTING_GREY900); + m_button_close->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE); + m_button_close->SetCornerRadius(FromDIP(12)); + m_button_close->Bind(wxEVT_BUTTON, &AMSMaterialsSetting::on_select_close, this); + + m_sizer_button->Add(m_button_confirm, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(20)); + m_sizer_button->Add(m_button_close, 0, wxALIGN_CENTER, 0); + + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(16)); + m_sizer_main->Add(m_sizer_filament, 0, wxLEFT | wxRIGHT, FromDIP(20)); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(16)); + m_sizer_main->Add(m_sizer_colour, 0, wxLEFT | wxRIGHT, FromDIP(20)); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(16)); + m_sizer_main->Add(m_sizer_temperature, 0, wxLEFT | wxRIGHT, FromDIP(20)); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5)); + m_sizer_main->Add(warning_text, 0, wxLEFT | wxRIGHT, FromDIP(20)); + m_sizer_main->Add(m_panel_SN, 0, wxLEFT, FromDIP(20)); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(24)); + m_sizer_main->Add(m_sizer_button, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(16)); + + SetSizer(m_sizer_main); + Layout(); + Fit(); Bind(wxEVT_PAINT, &AMSMaterialsSetting::paintEvent, this); COMBOBOX_FILAMENT->Connect(wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler(AMSMaterialsSetting::on_select_filament), NULL, this); @@ -219,7 +240,6 @@ AMSMaterialsSetting::~AMSMaterialsSetting() COMBOBOX_FILAMENT->Disconnect(wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler(AMSMaterialsSetting::on_select_filament), NULL, this); } - void AMSMaterialsSetting::input_min_finish() { if (m_input_nozzle_min->GetTextCtrl()->GetValue().empty()) return; @@ -264,23 +284,29 @@ void AMSMaterialsSetting::update() void AMSMaterialsSetting::enable_confirm_button(bool en) { - if (!en) { - if (m_button_confirm->IsEnabled()) { - m_button_confirm->Disable(); - m_button_confirm->SetBackgroundColor(wxColour(0x90, 0x90, 0x90)); - m_button_confirm->SetBorderColor(wxColour(0x90, 0x90, 0x90)); - } - } else { - if (!m_button_confirm->IsEnabled()) { - m_button_confirm->Enable(); - m_button_confirm->SetBackgroundColor(m_btn_bg_green); - m_button_confirm->SetBorderColor(m_btn_bg_green); - } - } + if (m_is_third) m_button_confirm->Show(en); + + //if (!en) { + // if (m_button_confirm->IsEnabled()) { + // m_button_confirm->Disable(); + // m_button_confirm->SetBackgroundColor(wxColour(0x90, 0x90, 0x90)); + // m_button_confirm->SetBorderColor(wxColour(0x90, 0x90, 0x90)); + // } + //} else { + // if (!m_button_confirm->IsEnabled()) { + // m_button_confirm->Enable(); + // m_button_confirm->SetBackgroundColor(m_btn_bg_green); + // m_button_confirm->SetBorderColor(m_btn_bg_green); + // } + //} } -void AMSMaterialsSetting::on_select_ok(wxMouseEvent &event) +void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) { + if (!m_is_third) { + Close(); + return; + } wxString nozzle_temp_min = m_input_nozzle_min->GetTextCtrl()->GetValue(); auto filament = COMBOBOX_FILAMENT->GetValue(); @@ -310,7 +336,12 @@ void AMSMaterialsSetting::on_select_ok(wxMouseEvent &event) obj->command_ams_filament_settings(ams_id, tray_id, ams_filament_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); } } - wxPopupTransientWindow::Dismiss(); + Close(); +} + +void AMSMaterialsSetting::on_select_close(wxCommandEvent &event) +{ + Close(); } void AMSMaterialsSetting::set_color(wxColour color) @@ -320,26 +351,13 @@ void AMSMaterialsSetting::set_color(wxColour color) void AMSMaterialsSetting::on_clr_picker(wxCommandEvent & event) { + if(!m_is_third) + return; auto clr_dialog = new wxColourDialog(this, m_clrData); show_flag = true; if (clr_dialog->ShowModal() == wxID_OK) { m_clrData = &(clr_dialog->GetColourData()); - m_clr_picker->SetBackgroundColour(m_clrData->GetColour()); - } -} - -void AMSMaterialsSetting::Dismiss() -{ - if (show_flag) - { - show_flag = false; - } else - { -#ifdef __APPLE__ - -#else - wxPopupTransientWindow::Dismiss(); -#endif + m_clr_picker->SetBackgroundColor(m_clrData->GetColour()); } } @@ -350,36 +368,45 @@ bool AMSMaterialsSetting::Show(bool show) m_input_nozzle_max->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); m_input_nozzle_min->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); } - return wxPopupTransientWindow::Show(show); + return DPIDialog::Show(show); } -void AMSMaterialsSetting::Popup(bool show, bool third, wxString filament, wxColour colour, wxString sn, wxString tep) +void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_min, wxString temp_max) { + m_clr_picker->SetBackgroundColor(m_clrData->GetColour()); + if (!m_is_third) { + m_button_confirm->Hide(); + m_sn_number->SetLabel(sn); m_panel_SN->Show(); + +#ifdef __APPLE__ + wxArrayString filament_only; + filament_only.push_back(filament); + COMBOBOX_FILAMENT->Set(filament_only); +#else + COMBOBOX_FILAMENT->Set(wxArrayString()); +#endif COMBOBOX_FILAMENT->SetValue(filament); - m_sn_number->SetLabelText(sn); - m_input_nozzle_min->GetTextCtrl()->SetValue(tep); - m_clrData->SetColour(colour); - COMBOBOX_FILAMENT->Disable(); - m_input_nozzle_min->Disable(); + m_input_nozzle_min->GetTextCtrl()->SetValue(temp_min); + m_input_nozzle_max->GetTextCtrl()->SetValue(temp_max); - wxPopupTransientWindow::Popup(); Layout(); + Fit(); + ShowModal(); return; } + m_button_confirm->Show(); m_panel_SN->Hide(); Layout(); Fit(); - m_clr_picker->SetBackgroundColour(m_clrData->GetColour()); int selection_idx = -1, idx = 0; wxArrayString filament_items; std::set filament_id_set; - if (show) { PresetBundle* preset_bundle = wxGetApp().preset_bundle; if (preset_bundle) { BOOST_LOG_TRIVIAL(trace) << "system_preset_bundle filament number=" << preset_bundle->filaments.size(); @@ -436,18 +463,12 @@ void AMSMaterialsSetting::Popup(bool show, bool third, wxString filament, wxColo } } } - } COMBOBOX_FILAMENT->Set(filament_items); - if (selection_idx >= 0 && selection_idx < filament_items.size()) { - COMBOBOX_FILAMENT->SetSelection(selection_idx); - post_select_event(); - } - else { - COMBOBOX_FILAMENT->SetSelection(selection_idx); - post_select_event(); - } + COMBOBOX_FILAMENT->SetSelection(selection_idx); + post_select_event(); } - wxPopupTransientWindow::Popup(); + update(); + ShowModal(); } void AMSMaterialsSetting::post_select_event() { @@ -488,7 +509,8 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) if (opt_type_strs) { found_filament_type = true; //m_filament_type = opt_type_strs->get_at(0); - m_filament_type = it->config.get_filament_type(); + std::string display_filament_type; + m_filament_type = it->config.get_filament_type(display_filament_type); } } if (!found_filament_type) @@ -504,18 +526,6 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) } } -bool AMSMaterialsSetting::ProcessLeftDown(wxMouseEvent &evt) -{ - wxPoint mouse_pos = ClientToScreen(evt.GetPosition()); - wxPoint top_left = this->ClientToScreen(wxPoint(0, 0)); - wxPoint range = wxPoint(this->GetRect().width, this->GetRect().height); - wxPoint bottom_right = top_left + range; - if (mouse_pos.x > top_left.x && mouse_pos.y > top_left.y && mouse_pos.x < bottom_right.x && mouse_pos.y < bottom_right.y) { - return true; - } else { - wxPopupTransientWindow::Dismiss(); - return false; - } -} +void AMSMaterialsSetting::on_dpi_changed(const wxRect &suggested_rect) { this->Refresh(); } }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index 7fd7b5dbeb3..a93e6ed621c 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -15,11 +15,12 @@ #include "Widgets/TextInput.hpp" #define AMS_MATERIALS_SETTING_DEF_COLOUR wxColour(255, 255, 255) +#define AMS_MATERIALS_SETTING_GREY900 wxColour(38, 46, 48) #define AMS_MATERIALS_SETTING_GREY800 wxColour(50, 58, 61) #define AMS_MATERIALS_SETTING_GREY700 wxColour(107, 107, 107) #define AMS_MATERIALS_SETTING_GREY300 wxColour(174,174,174) #define AMS_MATERIALS_SETTING_GREY200 wxColour(248, 248, 248) -#define AMS_MATERIALS_SETTING_BODY_WIDTH FromDIP(340) +#define AMS_MATERIALS_SETTING_BODY_WIDTH FromDIP(380) #define AMS_MATERIALS_SETTING_LABEL_WIDTH FromDIP(80) #define AMS_MATERIALS_SETTING_COMBOX_WIDTH wxSize(FromDIP(250), FromDIP(30)) #define AMS_MATERIALS_SETTING_BUTTON_SIZE wxSize(FromDIP(90), FromDIP(24)) @@ -27,7 +28,7 @@ namespace Slic3r { namespace GUI { -class AMSMaterialsSetting : public wxPopupTransientWindow +class AMSMaterialsSetting : public DPIDialog { public: AMSMaterialsSetting(wxWindow *parent, wxWindowID id); @@ -39,17 +40,13 @@ class AMSMaterialsSetting : public wxPopupTransientWindow void input_max_finish(); void update(); void enable_confirm_button(bool en); - void Dismiss() override; bool Show(bool show) override; - void Popup(bool show, bool third = true, wxString filament = wxEmptyString, wxColour colour = *wxWHITE, wxString sn = wxEmptyString, wxString tep = wxEmptyString); + void Popup(wxString filament = wxEmptyString, wxString sn = wxEmptyString, wxString temp_min = wxEmptyString, wxString temp_max = wxEmptyString); void post_select_event(); - void on_select_ok(wxMouseEvent &event); void set_color(wxColour color); - void on_clr_picker(wxCommandEvent &event); - MachineObject *obj{nullptr}; int ams_id { 0 }; /* 0 ~ 3 */ int tray_id { 0 }; /* 0 ~ 3 */ @@ -64,31 +61,35 @@ class AMSMaterialsSetting : public wxPopupTransientWindow std::string m_filament_type; protected: - //void on_dpi_changed(const wxRect &suggested_rect) override; + void on_dpi_changed(const wxRect &suggested_rect) override; void on_select_filament(wxCommandEvent& evt); - - bool ProcessLeftDown(wxMouseEvent &evt); + void on_select_ok(wxCommandEvent &event); + void on_select_close(wxCommandEvent &event); + void on_clr_picker(wxCommandEvent &event); protected: StateColor m_btn_bg_green; + StateColor m_btn_bg_gray; wxPanel * m_panel_SN; wxStaticText * m_sn_number; wxStaticText * warning_text; - wxPanel * m_panel_body; + //wxPanel * m_panel_body; wxStaticText * m_title_filament; - ComboBox * m_comboBox_filament; wxStaticText * m_title_colour; - wxButton * m_clr_picker; wxStaticText * m_title_temperature; wxStaticText * m_label_other; TextInput * m_input_nozzle_min; TextInput* m_input_nozzle_max; Button * m_button_confirm; + Button * m_button_close; + Button * m_clr_picker; + wxColourData * m_clrData; + #ifdef __APPLE__ wxComboBox *m_comboBox_filament_mac; +#else + ComboBox *m_comboBox_filament; #endif - wxColourData * m_clrData; - }; }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index 74b2d74ae7b..fa99b15f78d 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -17,8 +17,8 @@ AboutDialogLogo::AboutDialogLogo(wxWindow* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize) { this->SetBackgroundColour(*wxWHITE); - this->logo = wxBitmap(from_u8(Slic3r::var("BambuStudio_192px.png")), wxBITMAP_TYPE_PNG); - this->SetMinSize(this->logo.GetSize()); + this->logo = ScalableBitmap(this, Slic3r::var("BambuStudio_192px.png"), wxBITMAP_TYPE_PNG); + this->SetMinSize(this->logo.GetBmpSize()); this->Bind(wxEVT_PAINT, &AboutDialogLogo::onRepaint, this); } @@ -29,9 +29,9 @@ void AboutDialogLogo::onRepaint(wxEvent &event) dc.SetBackgroundMode(wxTRANSPARENT); wxSize size = this->GetSize(); - int logo_w = this->logo.GetWidth(); - int logo_h = this->logo.GetHeight(); - dc.DrawBitmap(this->logo, (size.GetWidth() - logo_w)/2, (size.GetHeight() - logo_h)/2, true); + int logo_w = this->logo.GetBmpWidth(); + int logo_h = this->logo.GetBmpHeight(); + dc.DrawBitmap(this->logo.bmp(), (size.GetWidth() - logo_w)/2, (size.GetHeight() - logo_h)/2, true); event.Skip(); } diff --git a/src/slic3r/GUI/AboutDialog.hpp b/src/slic3r/GUI/AboutDialog.hpp index 8774d8ce8b5..8dc72d15a3a 100644 --- a/src/slic3r/GUI/AboutDialog.hpp +++ b/src/slic3r/GUI/AboutDialog.hpp @@ -17,7 +17,7 @@ class AboutDialogLogo : public wxPanel AboutDialogLogo(wxWindow* parent); private: - wxBitmap logo; + ScalableBitmap logo; void onRepaint(wxEvent &event); }; diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 80c1a284eff..13886fb9ee6 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -179,9 +179,9 @@ void MaterialItem::doRender(wxDC &dc) AmsMapingPopup::AmsMapingPopup(wxWindow *parent) :wxPopupTransientWindow(parent, wxBORDER_NONE) { - SetSize(wxSize(FromDIP(220), -1)); - SetMinSize(wxSize(FromDIP(220), -1)); - SetMaxSize(wxSize(FromDIP(220), -1)); + SetSize(wxSize(FromDIP(300), -1)); + SetMinSize(wxSize(FromDIP(300), -1)); + SetMaxSize(wxSize(FromDIP(300), -1)); Bind(wxEVT_PAINT, &AmsMapingPopup::paintEvent, this); @@ -193,11 +193,62 @@ void MaterialItem::doRender(wxDC &dc) m_sizer_main = new wxBoxSizer(wxVERTICAL); //m_sizer_main->Add(0, 0, 1, wxEXPAND, 0); + auto title_panel = new wxPanel(this, wxID_ANY); + title_panel->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8)); + title_panel->SetSize(wxSize(-1, FromDIP(30))); + title_panel->SetMinSize(wxSize(-1, FromDIP(30))); + + + wxBoxSizer *title_sizer_h= new wxBoxSizer(wxHORIZONTAL); + + wxBoxSizer *title_sizer_v = new wxBoxSizer(wxVERTICAL); + + auto title_text = new wxStaticText(title_panel, wxID_ANY, _L("AMS Slots")); + title_text->SetForegroundColour(wxColour(0x32, 0x3A, 0x3D)); + title_text->SetFont(::Label::Head_13); + title_sizer_v->Add(title_text, 0, wxALIGN_CENTER, 5); + title_sizer_h->Add(title_sizer_v, 1, wxALIGN_CENTER, 5); + title_panel->SetSizer(title_sizer_h); + title_panel->Layout(); + title_panel->Fit(); + + m_sizer_list = new wxBoxSizer(wxVERTICAL); + + m_warning_text = new wxStaticText(this, wxID_ANY, wxEmptyString); + m_warning_text->SetForegroundColour(wxColour(0xFF, 0x6F, 0x00)); + m_warning_text->SetFont(::Label::Body_12); + auto cant_not_match_tip = _L("Note: Only the AMS slots loaded with the same material type can be selected."); + m_warning_text->SetLabel(format_text(cant_not_match_tip)); + m_warning_text->SetMinSize(wxSize(FromDIP(280), FromDIP(-1))); + m_warning_text->Wrap(FromDIP(280)); + + m_sizer_main->Add(title_panel, 0, wxEXPAND | wxALL, FromDIP(2)); + m_sizer_main->Add(m_sizer_list, 0, wxEXPAND | wxALL, FromDIP(0)); + m_sizer_main->Add(m_warning_text, 0, wxEXPAND | wxALL, FromDIP(10)); + SetSizer(m_sizer_main); Layout(); - } + wxString AmsMapingPopup::format_text(wxString &m_msg) + { + if (wxGetApp().app_config->get("language") != "zh_CN") { return m_msg; } + + wxString out_txt = m_msg; + wxString count_txt = ""; + int new_line_pos = 0; + + for (int i = 0; i < m_msg.length(); i++) { + auto text_size = m_warning_text->GetTextExtent(count_txt); + if (text_size.x < (FromDIP(280))) { + count_txt += m_msg[i]; + } else { + out_txt.insert(i - 1, '\n'); + count_txt = ""; + } + } + return out_txt; + } void AmsMapingPopup::update_materials_list(std::vector list) { @@ -224,7 +275,7 @@ void AmsMapingPopup::on_left_down(wxMouseEvent &evt) auto left = item->GetSize(); if (pos.x > p_rect.x && pos.y > p_rect.y && pos.x < (p_rect.x + item->GetSize().x) && pos.y < (p_rect.y + item->GetSize().y)) { - if (item->m_tray_data.type == TrayType::NORMAL && !is_match_material(item->m_tray_data.name)) return; + if (item->m_tray_data.type == TrayType::NORMAL && !is_match_material(item->m_tray_data.filament_type)) return; item->send_event(m_current_filament_id); Dismiss(); } @@ -233,6 +284,7 @@ void AmsMapingPopup::on_left_down(wxMouseEvent &evt) void AmsMapingPopup::update_ams_data(std::map amsList) { + m_has_unmatch_filament = false; m_mapping_item_list.clear(); if (m_amsmapping_sizer_list.size() > 0) { for (wxBoxSizer *bz : m_amsmapping_sizer_list) { bz->Clear(true); } @@ -266,7 +318,8 @@ void AmsMapingPopup::update_ams_data(std::map amsList) } else { td.type = NORMAL; td.colour = AmsTray::decode_color(tray_data->color); - td.name = tray_data->type; + td.name = tray_data->get_display_filament_type(); + td.filament_type = tray_data->get_filament_type(); } } @@ -275,6 +328,8 @@ void AmsMapingPopup::update_ams_data(std::map amsList) add_ams_mapping(tray_datas); } + + m_warning_text->Show(m_has_unmatch_filament); Layout(); Fit(); } @@ -294,57 +349,43 @@ void AmsMapingPopup::add_ams_mapping(std::vector tray_data) // set button MappingItem *m_filament_name = new MappingItem(this); - m_filament_name->SetSize(wxSize(FromDIP(38), FromDIP(20))); - m_filament_name->SetMinSize(wxSize(FromDIP(38), FromDIP(20))); - m_filament_name->SetMaxSize(wxSize(FromDIP(38), FromDIP(20))); + m_filament_name->SetSize(wxSize(FromDIP(62), FromDIP(22))); + m_filament_name->SetMinSize(wxSize(FromDIP(62), FromDIP(22))); + m_filament_name->SetMaxSize(wxSize(FromDIP(62), FromDIP(22))); //m_filament_name->SetCornerRadius(5); m_filament_name->SetFont(::Label::Body_12); m_mapping_item_list.push_back(m_filament_name); if (tray_data[i].type == NORMAL) { - m_filament_name->set_data(tray_data[i].colour, tray_data[i].name, tray_data[i]); + if (is_match_material(tray_data[i].filament_type)) { + m_filament_name->set_data(tray_data[i].colour, tray_data[i].name, tray_data[i]); + } else { + m_filament_name->set_data(wxColour(0xEE,0xEE,0xEE), tray_data[i].name, tray_data[i], true); + m_has_unmatch_filament = true; + } + m_filament_name->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_filament_name](wxMouseEvent &e) { - if (!is_match_material(tray_data[i].name)) return; + if (!is_match_material(tray_data[i].filament_type)) return; m_filament_name->send_event(m_current_filament_id); Dismiss(); - /* wxCommandEvent event(EVT_SET_FINISH_MAPPING); - event.SetInt(tray_data[i].id); - wxString param = wxString::Format("%d|%d|%d|%02d|%d", tray_data[i].colour.Red(), tray_data[i].colour.Green(), tray_data[i].colour.Blue(), tray_data[i].id + 1, - m_current_filament_id); - event.SetString(param); - event.SetEventObject(this->GetParent()); - wxPostEvent(this->GetParent(), event); - Dismiss();*/ }); } // temp if (tray_data[i].type == EMPTY) { - m_filament_name->set_data(wxColour(0x6B, 0x6B, 0x6B), "-", tray_data[i]); + m_filament_name->set_data(wxColour(0xCE, 0xCE, 0xCE), "-", tray_data[i]); m_filament_name->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_filament_name](wxMouseEvent &e) { m_filament_name->send_event(m_current_filament_id); - /* wxCommandEvent event(EVT_SET_FINISH_MAPPING); - event.SetInt(tray_data[i].id); - wxString param = wxString::Format("%d|%d|%d|%02d|%d", 0x6B, 0x6B, 0x6B, tray_data[i].id + 1, m_current_filament_id); - event.SetString(param); - event.SetEventObject(this->GetParent()); - wxPostEvent(this->GetParent(), event);*/ Dismiss(); }); } // third party if (tray_data[i].type == THIRD) { - m_filament_name->set_data(wxColour(0x6B, 0x6B, 0x6B), "?", tray_data[i]); + m_filament_name->set_data(wxColour(0xCE, 0xCE, 0xCE), "?", tray_data[i]); m_filament_name->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_filament_name](wxMouseEvent &e) { m_filament_name->send_event(m_current_filament_id); - //wxCommandEvent event(EVT_SET_FINISH_MAPPING); - //event.SetInt(tray_data[i].id); - //wxString param = wxString::Format("%d|%d|%d|%02d|%d", 0x6B, 0x6B, 0x6B, tray_data[i].id + 1, m_current_filament_id); - //event.SetString(param); - //event.SetEventObject(this->GetParent()); - //wxPostEvent(this->GetParent(), event); Dismiss(); }); } @@ -355,7 +396,7 @@ void AmsMapingPopup::add_ams_mapping(std::vector tray_data) sizer_mapping_list->Add(sizer_mapping_item, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(5)); m_amsmapping_sizer_list.push_back(sizer_mapping_list); } - m_sizer_main->Add(sizer_mapping_list, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_sizer_list->Add(sizer_mapping_list, 0, wxALIGN_CENTER_HORIZONTAL, 0); } void AmsMapingPopup::OnDismiss() @@ -399,14 +440,6 @@ void MappingItem::send_event(int fliament_id) event.SetString(param); event.SetEventObject(this->GetParent()->GetParent()); wxPostEvent(this->GetParent()->GetParent(), event); - - /* wxCommandEvent event(EVT_SET_FINISH_MAPPING); - event.SetInt(tray_data[i].id); - wxString param = wxString::Format("%d|%d|%d|%02d|%d", tray_data[i].colour.Red(), tray_data[i].colour.Green(), tray_data[i].colour.Blue(), tray_data[i].id + 1, - m_current_filament_id); - event.SetString(param); - event.SetEventObject(this->GetParent()); - wxPostEvent(this->GetParent(), event);*/ } void MappingItem::msw_rescale() @@ -443,22 +476,25 @@ void MappingItem::render(wxDC &dc) #endif // materials name - dc.SetFont(::Label::Body_13); + dc.SetFont(::Label::Body_12); auto txt_colour = m_coloul.GetLuminance() < 0.5 ? *wxWHITE : wxColour(0x26, 0x2E, 0x30); + txt_colour = m_unmatch ? wxColour(0xCE, 0xCE, 0xCE) : txt_colour; + dc.SetTextForeground(txt_colour); - if (dc.GetTextExtent(m_name).x > GetSize().x - 10) { + /*if (dc.GetTextExtent(m_name).x > GetSize().x - 10) { dc.SetFont(::Label::Body_10); m_name = m_name.substr(0, 3) + "." + m_name.substr(m_name.length() - 1); - } + }*/ auto txt_size = dc.GetTextExtent(m_name); dc.DrawText(m_name, wxPoint((GetSize().x - txt_size.x) / 2, (GetSize().y - txt_size.y) / 2)); } -void MappingItem::set_data(wxColour colour, wxString name, TrayData data) +void MappingItem::set_data(wxColour colour, wxString name, TrayData data, bool unmatch) { + m_unmatch = unmatch; m_tray_data = data; if (m_coloul != colour || m_name != name) { m_coloul = colour; diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index fd0fe52eeea..450b1bf9ebb 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -54,6 +54,7 @@ struct TrayData TrayType type; int id; std::string name; + std::string filament_type; wxColour colour; }; @@ -96,11 +97,12 @@ class MappingItem : public wxPanel wxColour m_coloul; wxString m_name; TrayData m_tray_data; + bool m_unmatch{false}; void msw_rescale(); void paintEvent(wxPaintEvent &evt); void render(wxDC &dc); - void set_data(wxColour colour, wxString name, TrayData data); + void set_data(wxColour colour, wxString name, TrayData data, bool unmatch = false); void doRender(wxDC &dc); }; @@ -108,15 +110,19 @@ class AmsMapingPopup : public wxPopupTransientWindow { public: AmsMapingPopup(wxWindow *parent); - ~AmsMapingPopup() {}; + wxString format_text(wxString &m_msg); + ~AmsMapingPopup(){}; + wxStaticText * m_warning_text{nullptr}; std::vector m_materials_list; std::vector m_amsmapping_sizer_list; std::vector m_mapping_item_list; + bool m_has_unmatch_filament {false}; int m_current_filament_id; std::string m_tag_material; wxBoxSizer *m_sizer_main{nullptr}; + wxBoxSizer *m_sizer_list{nullptr}; void update_materials_list(std::vector list); void set_tag_texture(std::string texture); diff --git a/src/slic3r/GUI/Auxiliary.cpp b/src/slic3r/GUI/Auxiliary.cpp index 2a31af74b5d..fb49f4a9897 100644 --- a/src/slic3r/GUI/Auxiliary.cpp +++ b/src/slic3r/GUI/Auxiliary.cpp @@ -94,9 +94,9 @@ AuFile::AuFile(wxWindow *parent, fs::path file_path, wxString file_name, Auxilia cover_text_right = _L("Rename"); cover_text_cover = _L("Cover"); - m_file_cover = create_scaled_bitmap("auxiliary_cover", this, 50); - m_file_edit_mask = create_scaled_bitmap("auxiliary_edit_mask", this, 43); - m_file_delete = create_scaled_bitmap("auxiliary_delete", this, 28); + m_file_cover = ScalableBitmap(this, "auxiliary_cover", 50); + m_file_edit_mask = ScalableBitmap(this, "auxiliary_edit_mask", 43); + m_file_delete = ScalableBitmap(this, "auxiliary_delete", 28); auto m_text_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(300), FromDIP(40)), wxTAB_TRAVERSAL); m_text_panel->SetBackgroundColour(AUFILE_GREY300); @@ -183,7 +183,7 @@ void AuFile::PaintForeground(wxDC &dc) wxSize size = wxSize(FromDIP(300), FromDIP(300)); if (m_hover) { - dc.DrawBitmap(m_file_edit_mask, 0, size.y - m_file_edit_mask.GetSize().y); + dc.DrawBitmap(m_file_edit_mask.bmp(), 0, size.y - m_file_edit_mask.GetBmpSize().y); dc.SetFont(Label::Body_14); dc.SetTextForeground(*wxWHITE); if (m_type == MODEL_PICTURE) { @@ -191,14 +191,14 @@ void AuFile::PaintForeground(wxDC &dc) auto sizet = dc.GetTextExtent(cover_text_left); auto pos = wxPoint(0, 0); pos.x = (size.x / 2 - sizet.x) / 2; - pos.y = (size.y - (m_file_edit_mask.GetSize().y + sizet.y) / 2); + pos.y = (size.y - (m_file_edit_mask.GetBmpSize().y + sizet.y) / 2); dc.DrawText(cover_text_left, pos); // right text sizet = dc.GetTextExtent(cover_text_right); pos = wxPoint(0, 0); pos.x = size.x / 2 + (size.x / 2 - sizet.x) / 2; - pos.y = (size.y - (m_file_edit_mask.GetSize().y + sizet.y) / 2); + pos.y = (size.y - (m_file_edit_mask.GetBmpSize().y + sizet.y) / 2); dc.DrawText(cover_text_right, pos); // Split @@ -206,21 +206,21 @@ void AuFile::PaintForeground(wxDC &dc) dc.SetBrush(AUFILE_GREY700); pos = wxPoint(0, 0); pos.x = size.x / 2 - 1; - pos.y = size.y - FromDIP(30) - (m_file_edit_mask.GetSize().y - FromDIP(30)) / 2; + pos.y = size.y - FromDIP(30) - (m_file_edit_mask.GetBmpSize().y - FromDIP(30)) / 2; dc.DrawRectangle(pos.x, pos.y, 2, FromDIP(30)); } else { // right text auto sizet = dc.GetTextExtent(cover_text_right); auto pos = wxPoint(0, 0); pos.x = (size.x - sizet.x) / 2; - pos.y = (size.y - (m_file_edit_mask.GetSize().y + sizet.y) / 2); + pos.y = (size.y - (m_file_edit_mask.GetBmpSize().y + sizet.y) / 2); dc.DrawText(cover_text_right, pos); } } if (m_cover) { dc.SetTextForeground(*wxWHITE); - dc.DrawBitmap(m_file_cover, size.x - m_file_cover.GetSize().x, 0); + dc.DrawBitmap(m_file_cover.bmp(), size.x - m_file_cover.GetBmpSize().x, 0); dc.SetFont(Label::Body_12); auto sizet = dc.GetTextExtent(cover_text_cover); auto pos = wxPoint(0, 0); @@ -229,7 +229,7 @@ void AuFile::PaintForeground(wxDC &dc) dc.DrawText(cover_text_cover, pos); } - if (m_hover) { dc.DrawBitmap(m_file_delete, size.x - m_file_delete.GetSize().x - FromDIP(15), FromDIP(15)); } + if (m_hover) { dc.DrawBitmap(m_file_delete.bmp(), size.x - m_file_delete.GetBmpSize().x - FromDIP(15), FromDIP(15)); } } void AuFile::on_mouse_enter(wxMouseEvent &evt) @@ -337,7 +337,7 @@ void AuFile::on_mouse_left_up(wxMouseEvent &evt) auto pos = evt.GetPosition(); // set cover - auto mask_size = m_file_edit_mask.GetSize(); + auto mask_size = m_file_edit_mask.GetBmpSize(); auto cover_left = 0; auto cover_top = size.y - mask_size.y; auto cover_right = mask_size.x / 2; @@ -353,10 +353,10 @@ void AuFile::on_mouse_left_up(wxMouseEvent &evt) if (pos.x > rename_left && pos.x < rename_right && pos.y > rename_top && pos.y < rename_bottom) { on_set_rename(); } // close - auto close_left = size.x - m_file_delete.GetSize().x - FromDIP(15); + auto close_left = size.x - m_file_delete.GetBmpSize().x - FromDIP(15); auto close_top = FromDIP(15); auto close_right = size.x - FromDIP(15); - auto close_bottom = m_file_delete.GetSize().y + FromDIP(15); + auto close_bottom = m_file_delete.GetBmpSize().y + FromDIP(15); if (pos.x > close_left && pos.x < close_right && pos.y > close_top && pos.y < close_bottom) { on_set_delete(); } } @@ -449,9 +449,9 @@ AuFile::~AuFile() {} void AuFile::msw_rescale() { - m_file_cover = create_scaled_bitmap("auxiliary_cover", this, 50); - m_file_edit_mask = create_scaled_bitmap("auxiliary_edit_mask", this, 43); - m_file_delete = create_scaled_bitmap("auxiliary_delete", this, 28); + m_file_cover = ScalableBitmap(this, "auxiliary_cover", 50); + m_file_edit_mask = ScalableBitmap(this, "auxiliary_edit_mask", 43); + m_file_delete = ScalableBitmap(this, "auxiliary_delete", 28); if (m_type == MODEL_PICTURE) { if (m_file_path.empty()) { return;} diff --git a/src/slic3r/GUI/Auxiliary.hpp b/src/slic3r/GUI/Auxiliary.hpp index d4b93c03844..fd61637e440 100644 --- a/src/slic3r/GUI/Auxiliary.hpp +++ b/src/slic3r/GUI/Auxiliary.hpp @@ -81,9 +81,9 @@ class AuFile : public wxPanel wxString cover_text_right; wxString cover_text_cover; wxBitmap m_file_bitmap; - wxBitmap m_file_cover; - wxBitmap m_file_edit_mask; - wxBitmap m_file_delete; + ScalableBitmap m_file_cover; + ScalableBitmap m_file_edit_mask; + ScalableBitmap m_file_delete; wxBitmap m_bitmap_excel; wxBitmap m_bitmap_pdf; diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index b5d142154ae..d80fc478ec7 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -493,6 +493,9 @@ void BBLTopbar::OnFullScreen(wxAuiToolBarEvent& event) m_frame->Restore(); } else { + wxDisplay display(wxDisplay::GetFromWindow(this)); + auto size = display.GetClientArea().GetSize(); + m_frame->SetMaxSize(size + wxSize{16, 16}); m_normalRect = m_frame->GetRect(); m_frame->Maximize(); } @@ -505,17 +508,25 @@ void BBLTopbar::OnCloseFrame(wxAuiToolBarEvent& event) void BBLTopbar::OnMouseLeftDClock(wxMouseEvent& mouse) { + wxPoint mouse_pos = ::wxGetMousePosition(); // check whether mouse is not on any tool item if (this->FindToolByCurrentPosition() != NULL && this->FindToolByCurrentPosition() != m_title_item) { mouse.Skip(); return; } +#ifdef __W1XMSW__ + ::PostMessage((HWND) m_frame->GetHandle(), WM_NCLBUTTONDBLCLK, HTCAPTION, MAKELPARAM(mouse_pos.x, mouse_pos.y)); + return; +#endif // __WXMSW__ if (m_frame->IsMaximized()) { m_frame->Restore(); } else { + wxDisplay display(wxDisplay::GetFromWindow(this)); + auto size = display.GetClientArea().GetSize(); + m_frame->SetMaxSize(size + wxSize{16, 16}); m_normalRect = m_frame->GetRect(); m_frame->Maximize(); } @@ -561,16 +572,23 @@ void BBLTopbar::OnMouseLeftDown(wxMouseEvent& event) wxPoint frame_pos = m_frame->GetScreenPosition(); m_delta = mouse_pos - frame_pos; - if (FindToolByCurrentPosition() == NULL) + if (FindToolByCurrentPosition() == NULL + || this->FindToolByCurrentPosition() == m_title_item) { CaptureMouse(); +#ifdef __WXMSW__ + ReleaseMouse(); + ::PostMessage((HWND) m_frame->GetHandle(), WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(mouse_pos.x, mouse_pos.y)); + return; +#endif // __WXMSW__ } - + event.Skip(); } void BBLTopbar::OnMouseLeftUp(wxMouseEvent& event) { + wxPoint mouse_pos = ::wxGetMousePosition(); if (HasCapture()) { ReleaseMouse(); @@ -581,7 +599,8 @@ void BBLTopbar::OnMouseLeftUp(wxMouseEvent& event) void BBLTopbar::OnMouseMotion(wxMouseEvent& event) { - wxPoint mouse_pos = event.GetPosition(); + wxPoint mouse_pos = ::wxGetMousePosition(); + if (!HasCapture()) { //m_frame->OnMouseMotion(event); @@ -591,7 +610,6 @@ void BBLTopbar::OnMouseMotion(wxMouseEvent& event) if (event.Dragging() && event.LeftIsDown()) { - wxPoint mouse_pos = ::wxGetMousePosition(); // leave max state and adjust position if (m_frame->IsMaximized()) { wxRect rect = m_frame->GetRect(); diff --git a/src/slic3r/GUI/Calibration.cpp b/src/slic3r/GUI/Calibration.cpp index 0be5afc22fb..5994566be1b 100644 --- a/src/slic3r/GUI/Calibration.cpp +++ b/src/slic3r/GUI/Calibration.cpp @@ -148,8 +148,6 @@ CalibrationDialog::CalibrationDialog(Plater *plater) Layout(); Fit(); - Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent &evt) { Hide(); }); - m_calibration_btn->Bind(wxEVT_LEFT_DOWN, &CalibrationDialog::on_start_calibration, this); } diff --git a/src/slic3r/GUI/CameraPopup.cpp b/src/slic3r/GUI/CameraPopup.cpp index 954b1492354..42dfcda6297 100644 --- a/src/slic3r/GUI/CameraPopup.cpp +++ b/src/slic3r/GUI/CameraPopup.cpp @@ -139,10 +139,10 @@ CameraItem::CameraItem(wxWindow *parent,std::string off_normal, std::string on_n SetDoubleBuffered(true); #endif //__WINDOWS__ - m_bitmap_on_normal = create_scaled_bitmap(on_normal, nullptr, 20); - m_bitmap_off_normal = create_scaled_bitmap(off_normal, nullptr, 20); - m_bitmap_on_hover = create_scaled_bitmap(on_hover, nullptr, 20); - m_bitmap_off_hover = create_scaled_bitmap(off_hover, nullptr, 20); + m_bitmap_on_normal = ScalableBitmap(this, on_normal, 20); + m_bitmap_off_normal = ScalableBitmap(this, off_normal, 20); + m_bitmap_on_hover = ScalableBitmap(this, on_hover, 20); + m_bitmap_off_hover = ScalableBitmap(this, off_hover, 20); SetSize(wxSize(FromDIP(20), FromDIP(20))); SetMinSize(wxSize(FromDIP(20), FromDIP(20))); @@ -208,16 +208,16 @@ void CameraItem::doRender(wxDC &dc) { if (m_on) { if (m_hover) { - dc.DrawBitmap(m_bitmap_on_hover, wxPoint((GetSize().x - m_bitmap_on_hover.GetSize().x) / 2, (GetSize().y - m_bitmap_on_hover.GetSize().y) / 2)); + dc.DrawBitmap(m_bitmap_on_hover.bmp(), wxPoint((GetSize().x - m_bitmap_on_hover.GetBmpSize().x) / 2, (GetSize().y - m_bitmap_on_hover.GetBmpSize().y) / 2)); } else { - dc.DrawBitmap(m_bitmap_on_normal, wxPoint((GetSize().x - m_bitmap_on_normal.GetSize().x) / 2, (GetSize().y - m_bitmap_on_normal.GetSize().y) / 2)); + dc.DrawBitmap(m_bitmap_on_normal.bmp(), wxPoint((GetSize().x - m_bitmap_on_normal.GetBmpSize().x) / 2, (GetSize().y - m_bitmap_on_normal.GetBmpSize().y) / 2)); } } else { if (m_hover) { - dc.DrawBitmap(m_bitmap_off_hover, wxPoint((GetSize().x - m_bitmap_off_hover.GetSize().x) / 2, (GetSize().y - m_bitmap_off_hover.GetSize().y) / 2)); + dc.DrawBitmap(m_bitmap_off_hover.bmp(), wxPoint((GetSize().x - m_bitmap_off_hover.GetBmpSize().x) / 2, (GetSize().y - m_bitmap_off_hover.GetBmpSize().y) / 2)); } else { - dc.DrawBitmap(m_bitmap_off_normal, wxPoint((GetSize().x - m_bitmap_off_normal.GetSize().x) / 2, (GetSize().y - m_bitmap_off_normal.GetSize().y) / 2)); + dc.DrawBitmap(m_bitmap_off_normal.bmp(), wxPoint((GetSize().x - m_bitmap_off_normal.GetBmpSize().x) / 2, (GetSize().y - m_bitmap_off_normal.GetBmpSize().y) / 2)); } } } diff --git a/src/slic3r/GUI/CameraPopup.hpp b/src/slic3r/GUI/CameraPopup.hpp index b2adc7a0aa0..6be91177917 100644 --- a/src/slic3r/GUI/CameraPopup.hpp +++ b/src/slic3r/GUI/CameraPopup.hpp @@ -59,10 +59,10 @@ class CameraItem : public wxPanel MachineObject *m_obj{nullptr}; bool m_on{false}; bool m_hover{false}; - wxBitmap m_bitmap_on_normal; - wxBitmap m_bitmap_on_hover; - wxBitmap m_bitmap_off_normal; - wxBitmap m_bitmap_off_hover; + ScalableBitmap m_bitmap_on_normal; + ScalableBitmap m_bitmap_on_hover; + ScalableBitmap m_bitmap_off_normal; + ScalableBitmap m_bitmap_off_hover; void msw_rescale(); void set_switch(bool is_on); diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index f88d514661d..ce16875f198 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -291,17 +291,6 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con is_msg_dlg_already_exist = false; } - //BBS - if (config->opt_bool("timelapse_no_toolhead") && !is_timelapse_wipe_tower_already_prompted) { - wxString msg_text = _(L("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")); - MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK); - is_msg_dlg_already_exist = true; - dialog.ShowModal(); - is_msg_dlg_already_exist = false; - is_timelapse_wipe_tower_already_prompted = true; - } - // BBS int filament_cnt = wxGetApp().preset_bundle->filament_presets.size(); #if 0 diff --git a/src/slic3r/GUI/ConfigManipulation.hpp b/src/slic3r/GUI/ConfigManipulation.hpp index e57c848dd56..c7300639d8e 100644 --- a/src/slic3r/GUI/ConfigManipulation.hpp +++ b/src/slic3r/GUI/ConfigManipulation.hpp @@ -21,7 +21,6 @@ namespace GUI { class ConfigManipulation { bool is_msg_dlg_already_exist{ false }; - bool is_timelapse_wipe_tower_already_prompted{false}; // BBS bool m_is_initialized_support_material_overhangs_queried{ false }; bool m_support_material_overhangs_queried{ false }; diff --git a/src/slic3r/GUI/ConnectPrinter.cpp b/src/slic3r/GUI/ConnectPrinter.cpp index 0e06b6ed359..fcd8df8220e 100644 --- a/src/slic3r/GUI/ConnectPrinter.cpp +++ b/src/slic3r/GUI/ConnectPrinter.cpp @@ -33,6 +33,7 @@ ConnectPrinterDialog::ConnectPrinterDialog(wxWindow *parent, wxWindowID id, cons sizer_connect = new wxBoxSizer(wxHORIZONTAL); m_textCtrl_code = new TextInput(this, wxEmptyString); + m_textCtrl_code->GetTextCtrl()->SetMaxLength(10); m_textCtrl_code->SetFont(Label::Body_14); m_textCtrl_code->SetCornerRadius(FromDIP(5)); m_textCtrl_code->SetSize(wxSize(FromDIP(330), FromDIP(40))); @@ -132,6 +133,12 @@ void ConnectPrinterDialog::on_input_enter(wxCommandEvent& evt) void ConnectPrinterDialog::on_button_confirm(wxCommandEvent &event) { wxString code = m_textCtrl_code->GetTextCtrl()->GetValue(); + for (char c : code) { + if (!('0' <= c && c <= '9' || 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z')) { + show_error(this, _L("Invalid input.")); + return; + } + } if (m_obj) { m_obj->set_access_code(code.ToStdString()); } diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 34590047700..7b7f48769db 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -148,6 +148,47 @@ bool AmsTray::is_tray_info_ready() return true; } +bool AmsTray::is_unset_third_filament() +{ + if (this->is_bbl) + return false; + + if (color.empty() || type.empty()) + return true; + return false; +} + +std::string AmsTray::get_display_filament_type() +{ + if (type == "PLA-S") + return "Support W"; + else if (type == "PA-S") + return "Support G"; + else + return type; + return type; +} + +std::string AmsTray::get_filament_type() +{ + if (type == "Support W") { + return "PLA-S"; + } else if (type == "Support G") { + return "PA-S"; + } else if (type == "Support") { + if (setting_id == "GFS00") { + type = "PLA-S"; + } else if (setting_id == "GFS01") { + type = "PA-S"; + } else { + return "PLA-S"; + } + } else { + return type; + } + return type; +} + bool HMSItem::parse_hms_info(unsigned attr, unsigned code) { bool result = true; @@ -336,6 +377,7 @@ MachineObject::MachineObject(NetworkAgent* agent, std::string name, std::string /* printing */ mc_print_stage = 0; mc_print_error_code = 0; + print_error = 0; mc_print_line_number = 0; mc_print_percent = 0; mc_print_sub_stage = 0; @@ -350,6 +392,13 @@ MachineObject::~MachineObject() subtask_ = nullptr; } + if (get_slice_info_thread) { + if (get_slice_info_thread->joinable()) { + get_slice_info_thread->join(); + get_slice_info_thread = nullptr; + } + } + if (slice_info) { delete slice_info; slice_info = nullptr; @@ -614,7 +663,7 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std if (tray->second->is_tray_info_ready()) { FilamentInfo info; info.color = tray->second->color; - info.type = tray->second->type; + info.type = tray->second->get_filament_type(); info.id = tray_index; tray_filaments.emplace(std::make_pair(tray_index, info)); } @@ -631,7 +680,7 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std info.id = atoi(tray_it->first.c_str()) + atoi(it->first.c_str()) * 4; info.tray_id = atoi(tray_it->first.c_str()) + atoi(it->first.c_str()) * 4; info.color = tray_it->second->color; - info.type = tray_it->second->type; + info.type = tray_it->second->get_filament_type(); } else { info.id = -1; @@ -647,7 +696,29 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std for (int i = 0; i < filaments.size(); i++) { FilamentInfo info; info.id = filaments[i].id; - info.tray_id = filaments[i].id; + int ams_id = filaments[i].id / 4; + auto ams_it = amsList.find(std::to_string(ams_id)); + if (ams_it == amsList.end()) { + info.tray_id = -1; + info.mapping_result = (int)MappingResult::MAPPING_RESULT_EXCEED; + } else { + info.tray_id = filaments[i].id; + int tray_id = filaments[i].id % 4; + auto tray_it = ams_it->second->trayList.find(std::to_string(tray_id)); + if (tray_it != ams_it->second->trayList.end()) { + if (!tray_it->second->is_exists || tray_it->second->is_unset_third_filament()) { + ; + } else { + if (filaments[i].type == tray_it->second->get_filament_type()) { + info.color = tray_it->second->color; + info.type = tray_it->second->get_filament_type(); + } else { + info.tray_id = -1; + info.mapping_result = (int)MappingResult::MAPPING_RESULT_TYPE_MISMATCH; + } + } + } + } result.push_back(info); } return 1; @@ -807,11 +878,12 @@ bool MachineObject::is_valid_mapping_result(std::vector& result) for (int i = 0; i < result.size(); i++) { // invalid mapping result if (result[i].tray_id < 0) - return false; + is_valid = false; else { int ams_id = result[i].tray_id / 4; if (amsList.find(std::to_string(ams_id)) == amsList.end()) { - return false; + result[i].tray_id = -1; + is_valid = false; } } } @@ -820,12 +892,32 @@ bool MachineObject::is_valid_mapping_result(std::vector& result) return true; } +bool MachineObject::is_mapping_exceed_filament(std::vector & result, int &exceed_index) +{ + bool is_exceed = false; + for (int i = 0; i < result.size(); i++) { + int ams_id = result[i].tray_id / 4; + if (amsList.find(std::to_string(ams_id)) == amsList.end()) { + exceed_index = result[i].tray_id; + result[i].tray_id = -1; + is_exceed = true; + break; + } + if (result[i].mapping_result == MappingResult::MAPPING_RESULT_EXCEED) { + exceed_index = result[i].id; + is_exceed = true; + break; + } + } + return is_exceed; +} void MachineObject::reset_mapping_result(std::vector& result) { for (int i = 0; i < result.size(); i++) { result[i].tray_id = -1; result[i].distance = 99999; + result[i].mapping_result = 0; } } @@ -1387,6 +1479,31 @@ int MachineObject::command_ipcam_timelapse(bool on_off) return this->publish_json(j.dump()); } +int MachineObject::command_xcam_control(std::string module_name, bool on_off, bool print_halt) +{ + json j; + j["xcam"]["command"] = "xcam_control_set"; + j["xcam"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["xcam"]["module_name"] = module_name; + j["xcam"]["control"] = on_off; + j["xcam"]["print_halt"] = print_halt; + return this->publish_json(j.dump()); +} + +int MachineObject::command_xcam_control_first_layer_inspector(bool on_off, bool print_halt) +{ + xcam_first_layer_inspector = on_off; + xcam_first_layer_hold_count = HOLD_COUNT_MAX; + return command_xcam_control("first_layer_inspector", on_off, print_halt); +} + +int MachineObject::command_xcam_control_spaghetti_detector(bool on_off, bool print_halt) +{ + xcam_spaghetti_detector = on_off; + xcam_spaghetti_print_halt = print_halt; + xcam_spaghetti_hold_count = HOLD_COUNT_MAX; + return command_xcam_control("spaghetti_detector", on_off, print_halt); +} void MachineObject::set_bind_status(std::string status) { @@ -1680,8 +1797,6 @@ int MachineObject::parse_json(std::string payload) mc_print_stage = jj["mc_print_stage"].get(); } if (jj.contains("mc_print_error_code")) { - if (jj["mc_print_error_code"].is_string()) - mc_print_error_code = atoi(jj["mc_print_error_code"].get().c_str()); if (jj["mc_print_error_code"].is_number()) mc_print_error_code = jj["mc_print_error_code"].get(); @@ -1690,6 +1805,11 @@ int MachineObject::parse_json(std::string payload) if (jj["mc_print_line_number"].is_string() && !jj["mc_print_line_number"].is_null()) mc_print_line_number = atoi(jj["mc_print_line_number"].get().c_str()); } + if (jj.contains("print_error")) { + if (jj["print_error"].is_number()) + print_error = jj["print_error"].get(); + } + #pragma endregion #pragma region print_task @@ -1750,6 +1870,8 @@ int MachineObject::parse_json(std::string payload) } } + + #pragma endregion #pragma region status @@ -1967,6 +2089,32 @@ int MachineObject::parse_json(std::string payload) catch (...) { ; } + + try { + if (jj.contains("xcam")) { + if (xcam_first_layer_hold_count > 0) + xcam_first_layer_hold_count--; + else { + if (jj["xcam"].contains("first_layer_inspector")) { + xcam_first_layer_inspector = jj["xcam"]["first_layer_inspector"].get(); + } + } + + if (xcam_spaghetti_hold_count > 0) { + xcam_spaghetti_hold_count--; + } else { + if (jj["xcam"].contains("spaghetti_detector")) { + xcam_spaghetti_detector = jj["xcam"]["spaghetti_detector"].get(); + } + if (jj["xcam"].contains("print_halt")) { + xcam_spaghetti_print_halt = jj["xcam"]["print_halt"].get(); + } + } + } + } + catch (...) { + ; + } #pragma endregion #pragma region hms @@ -2112,9 +2260,10 @@ int MachineObject::parse_json(std::string payload) curr_tray->setting_id = (*tray_it)["tray_info_idx"].get(); std::string type = (*tray_it)["tray_type"].get(); if (curr_tray->setting_id == "GFS00") { - curr_tray->type = "Support W"; - } else if (curr_tray->setting_id == "GFS01") { - curr_tray->type = "Support G"; + curr_tray->type = "PLA-S"; + } + else if (curr_tray->setting_id == "GFS01") { + curr_tray->type = "PA-S"; } else { curr_tray->type = type; } @@ -2243,6 +2392,18 @@ int MachineObject::parse_json(std::string payload) BOOST_LOG_TRIVIAL(warning) << "ams_filament_setting, can not find in amsList, ams_id=" << ams_id; } } + } else if (jj["command"].get() == "xcam_control_set") { + if (jj.contains("module_name") && jj.contains("control")) { + if (jj["module_name"].get() == "first_layer_inspector") { + xcam_first_layer_inspector = jj["control"].get(); + xcam_first_layer_hold_count = HOLD_COUNT_MAX; + } else if (jj["module_name"].get() == "spaghetti_detector") { + xcam_spaghetti_detector = jj["control"].get(); + xcam_spaghetti_hold_count = HOLD_COUNT_MAX; + if (jj.contains("print_halt")) + xcam_spaghetti_print_halt = jj["print_halt"].get(); + } + } } } } @@ -2352,7 +2513,7 @@ void MachineObject::update_slice_info(std::string project_id, std::string profil BOOST_LOG_TRIVIAL(trace) << "slice_info: start"; slice_info = new BBLSliceInfo(); - auto get_slice_info_thread = boost::thread([this, project_id, profile_id, subtask_id, plate_idx] { + get_slice_info_thread = new boost::thread([this, project_id, profile_id, subtask_id, plate_idx] { int plate_index = -1; if (!m_agent) return; @@ -2360,6 +2521,8 @@ void MachineObject::update_slice_info(std::string project_id, std::string profil if (plate_idx >= 0) { plate_index = plate_idx; } else { + if (subtask_id.compare("0") == 0) + return; m_agent->get_task_plate_index(subtask_id, &plate_index); } @@ -2686,6 +2849,7 @@ void DeviceManager::clean_user_info() BOOST_LOG_TRIVIAL(trace) << "DeviceManager::clean_user_info"; // reset selected_machine selected_machine = ""; + local_selected_machine = ""; // clean access code for (auto it = userMachineList.begin(); it != userMachineList.end(); it++) { diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 8e9dcb0c59a..ba464ac968e 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -21,6 +21,8 @@ #define FILAMENT_DEF_TEMP 220 #define FILAMENT_MIN_TEMP 120 +#define HOLD_COUNT_MAX 3 + inline int correct_filament_temperature(int filament_temp) { int temp = std::min(filament_temp, FILAMENT_MAX_TEMP); @@ -159,11 +161,14 @@ class AmsTray { AmsStep step_state; AmsRfidState rfid_state; - void set_hold_count() { hold_count = 3; } + void set_hold_count() { hold_count = HOLD_COUNT_MAX; } void update_color_from_str(std::string color); wxColour get_color(); bool is_tray_info_ready(); + bool is_unset_third_filament(); + std::string get_display_filament_type(); + std::string get_filament_type(); }; @@ -362,6 +367,8 @@ class MachineObject int ams_filament_mapping(std::vector filaments, std::vector &result, std::vector exclude_id = std::vector()); bool is_valid_mapping_result(std::vector& result); + // exceed index start with 0 + bool is_mapping_exceed_filament(std::vector& result, int &exceed_index); void reset_mapping_result(std::vector& result); @@ -426,6 +433,7 @@ class MachineObject int mc_left_time; /* left time in seconds */ int last_mc_print_stage; bool is_system_printing(); + int print_error; std::vector stage_list_info; int stage_curr = 0; @@ -452,6 +460,11 @@ class MachineObject bool camera_recording { false }; bool camera_timelapse { false }; bool camera_has_sdcard { false }; + bool xcam_first_layer_inspector { false }; + int xcam_first_layer_hold_count = 0; + bool xcam_spaghetti_detector { false }; + bool xcam_spaghetti_print_halt{ false }; + int xcam_spaghetti_hold_count = 0; /* HMS */ std::vector hms_list; @@ -468,6 +481,8 @@ class MachineObject std::string task_id_; std::string subtask_id_; BBLSliceInfo* slice_info {nullptr}; + boost::thread* get_slice_info_thread { nullptr }; + int plate_index { -1 }; std::string m_gcode_file; int gcode_file_prepare_percent = 0; @@ -525,6 +540,9 @@ class MachineObject // camera control int command_ipcam_record(bool on_off); int command_ipcam_timelapse(bool on_off); + int command_xcam_control(std::string module_name, bool on_off, bool print_halt); + int command_xcam_control_first_layer_inspector(bool on_off, bool print_halt); + int command_xcam_control_spaghetti_detector(bool on_off, bool print_halt); /* common apis */ inline bool is_local() { return !dev_ip.empty(); } diff --git a/src/slic3r/GUI/ExtraRenderers.cpp b/src/slic3r/GUI/ExtraRenderers.cpp index e9a4849c1c2..70baf49fffa 100644 --- a/src/slic3r/GUI/ExtraRenderers.cpp +++ b/src/slic3r/GUI/ExtraRenderers.cpp @@ -317,25 +317,14 @@ wxWindow* BitmapChoiceRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelR c_editor->SetSelection(atoi(data.GetText().c_str()) - 1); -#ifndef _WIN32 - c_editor->Bind(wxEVT_COMBOBOX, [this, c_editor](wxCommandEvent& evt) { +#ifdef __linux__ + c_editor->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) { // to avoid event propagation to other sidebar items evt.StopPropagation(); // FinishEditing grabs new selection and triggers config update. We better call // it explicitly, automatic update on KILL_FOCUS didn't work on Linux. - c_editor->SetClientData(this); this->FinishEditing(); }); - c_editor->Bind(wxEVT_COMBOBOX_DROPDOWN, [this, c_editor](wxCommandEvent& evt) { - c_editor->SetClientData(this); - this->FinishEditing(); - }); - c_editor->Bind(wxEVT_KILL_FOCUS, [this, c_editor](wxFocusEvent& evt) { - if (!c_editor->GetDropDown().IsShown() && c_editor->GetClientData() == nullptr) { // TODO: Fix called twice - c_editor->SetClientData(this); - this->FinishEditing(); - } - }, c_editor->GetId()); #else // to avoid event propagation to other sidebar items c_editor->Bind(wxEVT_COMBOBOX, [](wxCommandEvent& evt) { evt.StopPropagation(); }); diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index de94173dd21..90d97ee43f8 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -195,22 +195,21 @@ void Field::toggle(bool en) { en && !m_opt.readonly ? enable() : disable(); } wxString Field::get_tooltip_text(const wxString &default_string) { wxString tooltip_text(""); - //wxString tooltip = _(m_opt.tooltip); - // edit_tooltip(tooltip); - - // std::string opt_id = m_opt_id; - // auto hash_pos = opt_id.find("#"); - // if (hash_pos != std::string::npos) { - // opt_id.replace(hash_pos, 1,"["); - // opt_id += "]"; - // } - - //if (tooltip.length() > 0) - // tooltip_text = tooltip + "\n" + _(L("default value")) + "\t: " + - // (boost::iends_with(opt_id, "_gcode") ? "\n" : "") + default_string + - // (boost::iends_with(opt_id, "_gcode") ? "" : "\n") + - // _(L("parameter name")) + "\t: " + opt_id; +#ifdef NDEBUG + wxString tooltip = _(m_opt.tooltip); + edit_tooltip(tooltip); + + std::string opt_id = m_opt_id; + auto hash_pos = opt_id.find("#"); + if (hash_pos != std::string::npos) { + opt_id.replace(hash_pos, 1,"["); + opt_id += "]"; + } + if (tooltip.length() > 0) + tooltip_text = tooltip + "\n" + + _(L("parameter name")) + "\t: " + opt_id; + #endif return tooltip_text; } @@ -374,9 +373,17 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true if (x_str.ToDouble(&x) && thumbnail.HasMoreTokens()) { wxString y_str = thumbnail.GetNextToken(); if (y_str.ToDouble(&y) && !thumbnail.HasMoreTokens()) { - if (0 < x && x < 1000 && 0 < y && y < 1000) { - out_values.push_back(Vec2d(x, y)); - continue; + if (m_opt_id == "bed_exclude_area") { + if (0 <= x && x <= 256 && 0 <= y && y <= 256) { + out_values.push_back(Vec2d(x, y)); + continue; + } + } + else { + if (0 < x && x < 1000 && 0 < y && y < 1000) { + out_values.push_back(Vec2d(x, y)); + continue; + } } out_of_range_val = true; break; diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 3a2ec4531ea..184e328a449 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1070,7 +1070,6 @@ void GCodeViewer::reset() } m_paths_bounding_box = BoundingBoxf3(); m_max_bounding_box = BoundingBoxf3(); - m_shell_bounding_box = BoundingBoxf3(); m_max_print_height = 0.0f; m_tools.m_tool_colors = std::vector(); m_tools.m_tool_visibles = std::vector(); @@ -4423,7 +4422,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv }; const bool visible = m_buffers[buffer_id(type)].visible; if (type == EMoveType::Travel) { - //TODO display travel time, salt.wei + //TODO display travel time append_option_item_with_type(type, Travel_Colors[0], _u8L("Travel"), visible); } else if (type == EMoveType::Seam) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 4391c8d9685..d9c5e0ab95f 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -27,6 +27,7 @@ #include "slic3r/Utils/UndoRedo.hpp" #include "slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp" #include "slic3r/GUI/BitmapCache.hpp" +#include "slic3r/Utils/MacDarkMode.hpp" #include "GUI_App.hpp" #include "GUI_ObjectList.hpp" @@ -739,6 +740,15 @@ void GLCanvas3D::set_as_dirty() m_dirty = true; } +const float GLCanvas3D::get_scale() const +{ +#if ENABLE_RETINA_GL + return m_retina_helper->get_scale_factor(); +#else + return 1.0f; +#endif +} + unsigned int GLCanvas3D::get_volumes_count() const { return (unsigned int)m_volumes.volumes.size(); @@ -2133,8 +2143,15 @@ void GLCanvas3D::bind_event_handlers() m_canvas->Bind(wxEVT_RIGHT_DCLICK, &GLCanvas3D::on_mouse, this); m_canvas->Bind(wxEVT_PAINT, &GLCanvas3D::on_paint, this); m_canvas->Bind(wxEVT_SET_FOCUS, &GLCanvas3D::on_set_focus, this); - m_canvas->Bind(wxEVT_KILL_FOCUS, &GLCanvas3D::on_kill_focus, this); m_event_handlers_bound = true; + + m_canvas->Bind(wxEVT_GESTURE_PAN, &GLCanvas3D::on_gesture, this); + m_canvas->Bind(wxEVT_GESTURE_ZOOM, &GLCanvas3D::on_gesture, this); + m_canvas->Bind(wxEVT_GESTURE_ROTATE, &GLCanvas3D::on_gesture, this); + m_canvas->EnableTouchEvents(wxTOUCH_ZOOM_GESTURE | wxTOUCH_ROTATE_GESTURE); +#if __WXOSX__ + initGestures(m_canvas->GetHandle(), m_canvas); // for UIPanGestureRecognizer allowedScrollTypesMask +#endif } } @@ -2163,9 +2180,11 @@ void GLCanvas3D::unbind_event_handlers() m_canvas->Unbind(wxEVT_RIGHT_DCLICK, &GLCanvas3D::on_mouse, this); m_canvas->Unbind(wxEVT_PAINT, &GLCanvas3D::on_paint, this); m_canvas->Unbind(wxEVT_SET_FOCUS, &GLCanvas3D::on_set_focus, this); - m_canvas->Unbind(wxEVT_KILL_FOCUS, &GLCanvas3D::on_kill_focus, this); - m_event_handlers_bound = false; + + m_canvas->Unbind(wxEVT_GESTURE_PAN, &GLCanvas3D::on_gesture, this); + m_canvas->Unbind(wxEVT_GESTURE_ZOOM, &GLCanvas3D::on_gesture, this); + m_canvas->Unbind(wxEVT_GESTURE_ROTATE, &GLCanvas3D::on_gesture, this); } } @@ -2935,6 +2954,40 @@ std::string format_mouse_event_debug_message(const wxMouseEvent &evt) } #endif /* SLIC3R_DEBUG_MOUSE_EVENTS */ +void GLCanvas3D::on_gesture(wxGestureEvent &evt) +{ + if (!m_initialized || !_set_current()) + return; + + auto & camera = wxGetApp().plater()->get_camera(); + if (evt.GetEventType() == wxEVT_GESTURE_PAN) { + auto p = evt.GetPosition(); + auto d = static_cast(evt).GetDelta(); + float z = 0; + const Vec3d &p2 = _mouse_to_3d({p.x, p.y}, &z); + const Vec3d &p1 = _mouse_to_3d({p.x - d.x, p.y - d.y}, &z); + camera.set_target(camera.get_target() + p2 - p1); + } else if (evt.GetEventType() == wxEVT_GESTURE_ZOOM) { + static float zoom_start = 1; + if (evt.IsGestureStart()) + zoom_start = camera.get_zoom(); + camera.set_zoom(zoom_start * static_cast(evt).GetZoomFactor()); + } else if (evt.GetEventType() == wxEVT_GESTURE_ROTATE) { + PartPlate* plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); + bool rotate_limit = current_printer_technology() != ptSLA; + static double last_rotate = 0; + if (evt.IsGestureStart()) + last_rotate = 0; + auto rotate = static_cast(evt).GetRotationAngle() - last_rotate; + last_rotate += rotate; + if (plate) + camera.rotate_on_sphere_with_target(-rotate, 0, rotate_limit, plate->get_bounding_box().center()); + else + camera.rotate_on_sphere(-rotate, 0, rotate_limit); + } + m_dirty = true; +} + void GLCanvas3D::on_mouse(wxMouseEvent& evt) { if (!m_initialized || !_set_current()) @@ -3136,7 +3189,9 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) return; } - if (evt.LeftDown() && (evt.ShiftDown() || evt.AltDown()) && m_picking_enabled) { + // BBS: define Alt key to enable volume selection mode + m_selection.set_volume_selection_mode(evt.AltDown() ? Selection::Volume : Selection::Instance); + if (evt.LeftDown() && evt.ShiftDown() && m_picking_enabled) { if (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports && m_gizmos.get_current_type() != GLGizmosManager::FdmSupports && m_gizmos.get_current_type() != GLGizmosManager::Seam @@ -3484,19 +3539,14 @@ void GLCanvas3D::on_set_focus(wxFocusEvent& evt) { m_tooltip_enabled = false; if (m_canvas_type == ECanvasType::CanvasPreview) { + // update thumbnails and update plate toolbar + wxGetApp().plater()->update_platplate_thumbnails(); _update_imgui_select_plate_toolbar(); } _refresh_if_shown_on_screen(); m_tooltip_enabled = true; } -void GLCanvas3D::on_kill_focus(wxFocusEvent& evt) -{ - if (m_canvas_type == ECanvasType::CanvasView3D) { - wxGetApp().plater()->update_platplate_thumbnails(); - } -} - Size GLCanvas3D::get_canvas_size() const { int w = 0; @@ -4363,7 +4413,7 @@ bool GLCanvas3D::_render_orient_menu(float left, float right, float bottom, floa //now change to left_up as {0,0}, and top is 0, bottom is canvas_h #if BBS_TOOLBAR_ON_TOP const float x = left * float(wxGetApp().plater()->get_camera().get_zoom()) + 0.5f * canvas_w; - ImGuiWrapper::push_toolbar_style(); + ImGuiWrapper::push_toolbar_style(get_scale()); imgui->set_next_window_pos(x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f); #else const float x = canvas_w - m_main_toolbar.get_width(); @@ -4459,7 +4509,7 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo #endif //BBS - ImGuiWrapper::push_toolbar_style(); + ImGuiWrapper::push_toolbar_style(get_scale()); imgui->begin(_L("Arrange options"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar); @@ -5026,7 +5076,7 @@ bool GLCanvas3D::_init_main_toolbar() item.name = "add"; item.icon_filename = "toolbar_open.svg"; - item.tooltip = _utf8(L("Add")); + item.tooltip = _utf8(L("Add")) + " [" + GUI::shortkey_ctrl_prefix() + "I]"; item.sprite_id = 0; item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_ADD)); }; item.enabling_callback = []()->bool {return wxGetApp().plater()->can_add_model(); }; @@ -5064,7 +5114,7 @@ bool GLCanvas3D::_init_main_toolbar() item.name = "arrange"; item.icon_filename = "toolbar_arrange.svg"; - item.tooltip = _utf8(L("Auto arrange")); + item.tooltip = _utf8(L("Arrange all objects")) + " [A]\n" + _utf8(L("Arrange objects on selected plates")) + " [Shift+A]"; item.sprite_id++; item.left.action_callback = []() {}; item.enabling_callback = []()->bool { return wxGetApp().plater()->can_arrange(); }; @@ -6404,7 +6454,9 @@ void GLCanvas3D::_render_paint_toolbar() const for (auto filament_name : preset_bundle->filament_presets) { for (auto iter = preset_bundle->filaments.lbegin(); iter != preset_bundle->filaments.end(); iter++) { if (filament_name.compare(iter->name) == 0) { - filament_types.push_back(iter->config.get_filament_type()); + std::string display_filament_type; + iter->config.get_filament_type(display_filament_type); + filament_types.push_back(display_filament_type); } } } @@ -6541,7 +6593,7 @@ void GLCanvas3D::_render_explosion_control() const ImGuiWrapper* imgui = wxGetApp().imgui(); - ImGuiWrapper::push_toolbar_style(); + ImGuiWrapper::push_toolbar_style(get_scale()); auto canvas_w = float(get_canvas_size().get_width()); auto canvas_h = float(get_canvas_size().get_height()); @@ -6611,7 +6663,7 @@ void GLCanvas3D::_render_assemble_info() const ImGui::PushFont(font); ImGui::PopFont(); imgui->set_next_window_pos(canvas_w - window_width, 0.0f, ImGuiCond_Always, 0, 0); - ImGuiWrapper::push_toolbar_style(); + ImGuiWrapper::push_toolbar_style(get_scale()); imgui->begin(_L("Assembly Info"), ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse); font->Scale = origScale; ImGui::PushFont(font); diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 1d37e85ff75..2d26513d635 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -361,7 +361,7 @@ class GLCanvas3D // float distance_seq_print = 6.; // Used when sequential print is ON // float distance_sla = 6.; float accuracy = 0.65f; // Unused currently - bool enable_rotation = true; + bool enable_rotation = false; bool allow_multi_materials_on_same_plate = true; bool avoid_extrusion_cali_region = true; //BBS: add more arrangeSettings @@ -600,6 +600,7 @@ class GLCanvas3D const GLVolumeCollection& get_volumes() const { return m_volumes; } void reset_volumes(); ModelInstanceEPrintVolumeState check_volumes_outside_state() const; + const float get_scale() const; //BBS GCodeViewer& get_gcode_viewer() { return m_gcode_viewer; } @@ -765,9 +766,9 @@ class GLCanvas3D void on_timer(wxTimerEvent& evt); void on_render_timer(wxTimerEvent& evt); void on_mouse(wxMouseEvent& evt); + void on_gesture(wxGestureEvent& evt); void on_paint(wxPaintEvent& evt); void on_set_focus(wxFocusEvent& evt); - void on_kill_focus(wxFocusEvent& evt); Size get_canvas_size() const; Vec2d get_local_mouse_position() const; @@ -909,6 +910,10 @@ class GLCanvas3D bool is_object_sinking(int object_idx) const; + // Convert the screen space coordinate to an object space coordinate. + // If the Z screen space coordinate is not provided, a depth buffer value is substituted. + Vec3d _mouse_to_3d(const Point& mouse_pos, float* z = nullptr); + private: bool _is_shown_on_screen() const; @@ -981,10 +986,6 @@ class GLCanvas3D void _update_volumes_hover_state(); - // Convert the screen space coordinate to an object space coordinate. - // If the Z screen space coordinate is not provided, a depth buffer value is substituted. - Vec3d _mouse_to_3d(const Point& mouse_pos, float* z = nullptr); - // Convert the screen space coordinate to world coordinate on the bed. Vec3d _mouse_to_bed_3d(const Point& mouse_pos); diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index 7add7481988..4c302392b2e 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -197,7 +197,7 @@ void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt } break; case coPoints:{ - if (opt_key == "printable_area") { + if (opt_key == "printable_area" || opt_key == "bed_exclude_area") { config.option(opt_key)->values = boost::any_cast>(value); break; } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 73ed61a739a..588bda8565a 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -187,9 +187,9 @@ class BBLSplashScreen : public wxSplashScreen scale_bitmap(m_main_bitmap, m_scale); // init constant texts and scale fonts - m_constant_text.init(get_default_font(this)); + m_constant_text.init(Label::Body_16); scale_font(m_constant_text.title_font, 2.0f); - scale_font(m_constant_text.version_font, 1.5f); + scale_font(m_constant_text.version_font, 1.2f); // this font will be used for the action string m_action_font = m_constant_text.credits_font; @@ -930,23 +930,32 @@ void GUI_App::post_init() bool switch_to_3d = false; if (!this->init_params->input_files.empty()) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", init with input files, size %1%, input_gcode %2%") + %this->init_params->input_files.size() %this->init_params->input_gcode; switch_to_3d = true; - mainframe->select_tab(size_t(MainFrame::tp3DEditor)); - plater_->select_view_3D("3D"); - const std::vector res = this->plater()->load_files(this->init_params->input_files); - if (!res.empty()) { - if (this->init_params->input_files.size() == 1) { - // Update application titlebar when opening a project file - const std::string& filename = this->init_params->input_files.front(); - //BBS: remove amf logic as project - if (boost::algorithm::iends_with(filename, ".3mf")) - this->plater()->set_project_filename(from_u8(filename)); + if (this->init_params->input_gcode) { + mainframe->select_tab(size_t(MainFrame::tp3DEditor)); + plater_->select_view_3D("3D"); + this->plater()->load_gcode(from_u8(this->init_params->input_files.front())); + } + else { + mainframe->select_tab(size_t(MainFrame::tp3DEditor)); + plater_->select_view_3D("3D"); + const std::vector res = this->plater()->load_files(this->init_params->input_files); + if (!res.empty()) { + if (this->init_params->input_files.size() == 1) { + // Update application titlebar when opening a project file + const std::string& filename = this->init_params->input_files.front(); + //BBS: remove amf logic as project + if (boost::algorithm::iends_with(filename, ".3mf")) + this->plater()->set_project_filename(from_u8(filename)); + } } } } #if BBL_HAS_FIRST_PAGE if (!switch_to_3d) { - BOOST_LOG_TRIVIAL(info) << "begin load_gl_resources"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", begin load_gl_resources"; mainframe->Freeze(); plater_->canvas3D()->enable_render(false); mainframe->select_tab(size_t(MainFrame::tp3DEditor)); @@ -954,26 +963,26 @@ void GUI_App::post_init() //BBS init the opengl resource here Size canvas_size = plater_->canvas3D()->get_canvas_size(); wxGetApp().imgui()->set_display_size(static_cast(canvas_size.get_width()), static_cast(canvas_size.get_height())); - BOOST_LOG_TRIVIAL(info) << "start to init opengl"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", start to init opengl"; wxGetApp().init_opengl(); - BOOST_LOG_TRIVIAL(info) << "finished init opengl"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished init opengl"; plater_->canvas3D()->init(); - BOOST_LOG_TRIVIAL(info) << "finished init canvas3D"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished init canvas3D"; wxGetApp().imgui()->new_frame(); - BOOST_LOG_TRIVIAL(info) << "finished init imgui frame"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished init imgui frame"; plater_->canvas3D()->enable_render(true); - BOOST_LOG_TRIVIAL(info) << "start to render a first frame for test"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", start to render a first frame for test"; plater_->canvas3D()->render(false); - BOOST_LOG_TRIVIAL(info) << "finished rendering a first frame for test"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished rendering a first frame for test"; if (is_editor()) mainframe->select_tab(size_t(0)); mainframe->Thaw(); plater_->trigger_restore_project(1); - BOOST_LOG_TRIVIAL(info) << "end load_gl_resources"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", end load_gl_resources"; } #endif @@ -1046,7 +1055,8 @@ void GUI_App::post_init() bool cw_showed = this->config_wizard_startup(); std::string http_url = get_http_url(app_config->get_country_code()); - this->preset_updater->sync(http_url, preset_bundle); + std::string language = GUI::into_u8(current_language_code()); + this->preset_updater->sync(http_url, language, preset_bundle); //BBS: check new version this->check_new_version(); @@ -1056,16 +1066,19 @@ void GUI_App::post_init() if(!m_networking_need_update && m_agent) { m_agent->set_on_ssdp_msg_fn( [this](std::string json_str) { + if (m_is_closing) { + return; + } GUI::wxGetApp().CallAfter([this, json_str] { - if (m_is_closing) { - return; - } if (m_device_manager) { m_device_manager->on_machine_alive(json_str); } }); } ); + m_agent->set_on_http_error_fn([this](unsigned int status, std::string body) { + this->handle_http_error(status, body); + }); m_agent->start_discovery(true, false); } @@ -1105,6 +1118,26 @@ GUI_App::GUI_App() reset_to_active(); } +void GUI_App::shutdown() +{ + BOOST_LOG_TRIVIAL(info) << "shutdown"; + + if (m_is_recreating_gui) return; + m_is_closing = true; + stop_sync_user_preset(); + + if (m_device_manager) { + delete m_device_manager; + m_device_manager = nullptr; + } + + if (m_agent) { + m_agent->start_discovery(false, false); + delete m_agent; + m_agent = nullptr; + } +} + std::string GUI_App::get_http_url(std::string country_code) { @@ -1196,7 +1229,7 @@ int GUI_App::download_plugin(InstallProgressFn pro_fn, WasCancelledFn cancel_fn) for (auto sub_iter = iter.value().begin(); sub_iter != iter.value().end(); sub_iter++) { if (boost::iequals(sub_iter.key(), "type")) { type = sub_iter.value(); - BOOST_LOG_TRIVIAL(info) << "[BBL Updater]: get version of settings's type, " << sub_iter.value(); + BOOST_LOG_TRIVIAL(info) << "[download_plugin]: get version of settings's type, " << sub_iter.value(); } else if (boost::iequals(sub_iter.key(), "version")) { version = *(Semver::parse(sub_iter.value())); @@ -1208,22 +1241,22 @@ int GUI_App::download_plugin(InstallProgressFn pro_fn, WasCancelledFn cancel_fn) url = sub_iter.value(); } } - BOOST_LOG_TRIVIAL(info) << "[download_plugin]: get type " << type << ", version " << version.to_string() << ", url " << url; + BOOST_LOG_TRIVIAL(info) << "[download_plugin 1]: get type " << type << ", version " << version.to_string() << ", url " << url; download_url = url; } } } else { - BOOST_LOG_TRIVIAL(info) << "[download_plugin]: get version of plugin failed, body=" << body; + BOOST_LOG_TRIVIAL(info) << "[download_plugin 1]: get version of plugin failed, body=" << body; } } catch (...) { - BOOST_LOG_TRIVIAL(error) << "[download_plugin]: catch unknown exception"; + BOOST_LOG_TRIVIAL(error) << "[download_plugin 1]: catch unknown exception"; ; } }).on_error( [&result](std::string body, std::string error, unsigned int status) { - BOOST_LOG_TRIVIAL(error) << "" << body; + BOOST_LOG_TRIVIAL(error) << "[download_plugin 1] on_error: " << error<<", body = " << body; result = -1; }).perform_sync(); @@ -1235,7 +1268,7 @@ int GUI_App::download_plugin(InstallProgressFn pro_fn, WasCancelledFn cancel_fn) if (download_url.empty()) { - BOOST_LOG_TRIVIAL(info) << "[download_plugin]: no availaible plugin found for this app version: " << SLIC3R_VERSION; + BOOST_LOG_TRIVIAL(info) << "[download_plugin 1]: no availaible plugin found for this app version: " << SLIC3R_VERSION; if (pro_fn) pro_fn(InstallStatusDownloadFailed, 0, cancel); return -1; } @@ -1244,10 +1277,10 @@ int GUI_App::download_plugin(InstallProgressFn pro_fn, WasCancelledFn cancel_fn) } if (m_networking_cancel_update || cancel) { - BOOST_LOG_TRIVIAL(info) << boost::format("download_plugin: %1%, cancelled by user") % __LINE__; + BOOST_LOG_TRIVIAL(info) << boost::format("[download_plugin 1]: %1%, cancelled by user") % __LINE__; return -1; } - BOOST_LOG_TRIVIAL(info) << "download_plugin, get_url = " << download_url; + BOOST_LOG_TRIVIAL(info) << "[download_plugin] get_url = " << download_url; // download Slic3r::Http http = Slic3r::Http::get(download_url); @@ -1261,6 +1294,7 @@ int GUI_App::download_plugin(InstallProgressFn pro_fn, WasCancelledFn cancel_fn) if (pro_fn && ((percent - reported_percent) >= 10)) { pro_fn(InstallStatusNormal, percent, was_cancel); reported_percent = percent; + BOOST_LOG_TRIVIAL(info) << "[download_plugin 2] progress: " << reported_percent; } cancel = m_networking_cancel_update || was_cancel; if (cancel_fn) @@ -1271,7 +1305,7 @@ int GUI_App::download_plugin(InstallProgressFn pro_fn, WasCancelledFn cancel_fn) result = -1; }) .on_complete([&pro_fn, tmp_path, target_file_path](std::string body, unsigned status) { - BOOST_LOG_TRIVIAL(info) << "download_plugin, completed"; + BOOST_LOG_TRIVIAL(info) << "[download_plugin 2] completed"; bool cancel = false; int percent = 0; fs::fstream file(tmp_path, std::ios::out | std::ios::binary | std::ios::trunc); @@ -1283,6 +1317,7 @@ int GUI_App::download_plugin(InstallProgressFn pro_fn, WasCancelledFn cancel_fn) .on_error([&pro_fn, &result](std::string body, std::string error, unsigned int status) { bool cancel = false; if (pro_fn) pro_fn(InstallStatusDownloadFailed, 0, cancel); + BOOST_LOG_TRIVIAL(error) << "[download_plugin 2] on_error: " << error<<", body = " << body; result = -1; }); http.perform_sync(); @@ -1293,14 +1328,22 @@ int GUI_App::install_plugin(InstallProgressFn pro_fn, WasCancelledFn cancel_fn) { bool cancel = false; std::string target_file_path = (fs::temp_directory_path() / "network_plugin.zip").string(); + + BOOST_LOG_TRIVIAL(info) << "[install_plugin] enter"; // get plugin folder auto plugin_folder = boost::filesystem::path(wxStandardPaths::Get().GetUserDataDir().ToUTF8().data()) / "plugins"; + auto backup_folder = plugin_folder/"backup"; if (!boost::filesystem::exists(plugin_folder)) { + BOOST_LOG_TRIVIAL(info) << "[install_plugin] will create directory "<set_str("app", "installed_networking", "1"); + BOOST_LOG_TRIVIAL(info) << "[install_plugin] success"; return 0; } void GUI_App::restart_networking() { BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(" enter, mainframe %1%")%mainframe; - on_init_network(); + on_init_network(true); if(m_agent) { init_networking_callbacks(); m_agent->set_on_ssdp_msg_fn( [this](std::string json_str) { + if (m_is_closing) { + return; + } GUI::wxGetApp().CallAfter([this, json_str] { - if (m_is_closing) { - return; - } if (m_device_manager) { m_device_manager->on_machine_alive(json_str); } }); } ); + m_agent->set_on_http_error_fn([this](unsigned int status, std::string body) { + this->handle_http_error(status, body); + }); m_agent->start_discovery(true, false); if (mainframe) mainframe->refresh_plugin_tips(); @@ -1412,7 +1474,7 @@ void GUI_App::restart_networking() int GUI_App::updating_bambu_networking() { - DownloadProgressDialog dlg(_L("Downloading Bambu Network plug-in")); + DownloadProgressDialog dlg(_L("Downloading Bambu Network Plug-in")); dlg.ShowModal(); return 0; } @@ -1457,20 +1519,20 @@ void GUI_App::init_networking_callbacks() }); m_agent->set_on_server_connected_fn([this]() { + if (m_is_closing) { + return; + } GUI::wxGetApp().CallAfter([this] { - if (m_is_closing) { - return; - } BOOST_LOG_TRIVIAL(trace) << "static: server connected"; m_agent->set_user_selected_machine(m_agent->get_user_selected_machine()); }); }); m_agent->set_on_printer_connected_fn([this](std::string dev_id) { + if (m_is_closing) { + return; + } GUI::wxGetApp().CallAfter([this, dev_id] { - if (m_is_closing) { - return; - } /* request_pushing */ MachineObject* obj = m_device_manager->get_my_machine(dev_id); if (obj) { @@ -1489,6 +1551,9 @@ void GUI_App::init_networking_callbacks() m_agent->set_on_local_connect_fn( [this](int state, std::string dev_id, std::string msg) { + if (m_is_closing) { + return; + } CallAfter([this, state, dev_id, msg] { if (m_is_closing) { return; @@ -1502,31 +1567,31 @@ void GUI_App::init_networking_callbacks() obj->command_get_version(); } else if (state == ConnectStatus::ConnectStatusFailed || ConnectStatus::ConnectStatusLost) { obj->set_access_code(""); - wxString text = wxString::Format(_L("Connect %s[SN:%s] failed!"), from_u8(obj->dev_name), obj->dev_id); - MessageDialog msg_dlg(nullptr, text, "", wxAPPLY | wxOK); - if (msg_dlg.ShowModal() == wxOK) { - return; + wxString text; + if (msg == "5") { + text = wxString::Format(_L("Incorrect password")); + wxGetApp().show_dialog(text); + } else { + text = wxString::Format(_L("Connect %s failed! [SN:%s, code=%s]"), from_u8(obj->dev_name), obj->dev_id, msg); + wxGetApp().show_dialog(text); } } else { BOOST_LOG_TRIVIAL(info) << "set_on_local_connect_fn: state = " << state; } } } - }); + }); } ); - m_agent->set_on_http_error_fn([this](unsigned int status, std::string body) { - this->handle_http_error(status, body); - }); - auto message_arrive_fn = [this](std::string dev_id, std::string msg) { + if (m_is_closing) { + return; + } CallAfter([this, dev_id, msg] { - if (m_is_closing) { - return; - } MachineObject* obj = this->m_device_manager->get_user_machine(dev_id); if (obj) { + obj->is_ams_need_update = false; obj->parse_json(msg); if (this->m_device_manager->get_selected_machine() == obj && obj->is_ams_need_update) { @@ -1539,11 +1604,10 @@ void GUI_App::init_networking_callbacks() m_agent->set_on_message_fn(message_arrive_fn); auto lan_message_arrive_fn = [this](std::string dev_id, std::string msg) { + if (m_is_closing) { + return; + } CallAfter([this, dev_id, msg] { - if (m_is_closing) { - return; - } - MachineObject* obj = m_device_manager->get_my_machine(dev_id); if (!obj) { obj = m_device_manager->get_local_machine(dev_id); @@ -1943,13 +2007,13 @@ bool GUI_App::on_init_inner() }); Bind(EVT_SHOW_DIALOG, [this](const wxCommandEvent& evt) { - /*wxString msg = evt.GetString(); + wxString msg = evt.GetString(); InfoDialog dlg(this->mainframe, _L("Info"), msg); - dlg.ShowModal();*/ + dlg.ShowModal(); - wxString text = evt.GetString(); + /*wxString text = evt.GetString(); Slic3r::GUI::MessageDialog msg_dlg(this->mainframe, text, "", wxAPPLY | wxOK); - msg_dlg.ShowModal(); + msg_dlg.ShowModal();*/ }); } else { @@ -2032,7 +2096,9 @@ bool GUI_App::on_init_inner() } // BBS: +#ifdef __WINDOWS__ mainframe->topbar()->SaveNormalRect(); +#endif mainframe->Show(true); BOOST_LOG_TRIVIAL(info) << "main frame firstly shown"; @@ -2093,16 +2159,17 @@ bool GUI_App::on_init_inner() // BBS //this->obj_manipul()->update_if_dirty(); - static bool update_gui_after_init = true; + //use m_post_initialized instead + //static bool update_gui_after_init = true; // An ugly solution to GH #5537 in which GUI_App::init_opengl (normally called from events wxEVT_PAINT // and wxEVT_SET_FOCUS before GUI_App::post_init is called) wasn't called before GUI_App::post_init and OpenGL wasn't initialized. #ifdef __linux__ - if (update_gui_after_init && m_opengl_initialized) { + if (!m_post_initialized && m_opengl_initialized) { #else - if (update_gui_after_init) { + if (!m_post_initialized) { #endif - update_gui_after_init = false; + m_post_initialized = true; #ifdef WIN32 this->mainframe->register_win32_callbacks(); #endif @@ -2120,10 +2187,11 @@ bool GUI_App::on_init_inner() return true; } -bool GUI_App::on_init_network() +bool GUI_App::on_init_network(bool try_backup) { int load_agent_dll = Slic3r::NetworkAgent::initialize_network_module(); bool create_network_agent = false; +__retry: if (!load_agent_dll) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": on_init_network, load dll ok"; if (check_networking_version()) { @@ -2138,6 +2206,13 @@ bool GUI_App::on_init_network() else create_network_agent = true; } else { + if (try_backup) { + int result = Slic3r::NetworkAgent::unload_network_module(); + BOOST_LOG_TRIVIAL(info) << "on_init_network, version mismatch, unload_network_module, result = " << result; + load_agent_dll = Slic3r::NetworkAgent::initialize_network_module(true); + try_backup = false; + goto __retry; + } BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": on_init_network, version dismatch, need upload network module"; if (app_config->get("installed_networking") == "1") { m_networking_need_update = true; @@ -2240,11 +2315,11 @@ const wxColour GUI_App::get_label_default_clr_modified() void GUI_App::init_label_colours() { m_color_label_modified = wxColour("#F1754E"); - m_color_label_sys = wxColour("#2B3436"); + m_color_label_sys = wxColour("#323A3D"); bool is_dark_mode = dark_mode(); #ifdef _WIN32 - m_color_label_default = is_dark_mode ? wxColour(250, 250, 250): wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); + m_color_label_default = is_dark_mode ? wxColour(250, 250, 250) : m_color_label_sys; // wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); m_color_highlight_label_default = is_dark_mode ? wxColour(230, 230, 230): wxSystemSettings::GetColour(/*wxSYS_COLOUR_HIGHLIGHTTEXT*/wxSYS_COLOUR_WINDOWTEXT); m_color_highlight_default = is_dark_mode ? wxColour(78, 78, 78) : wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT); m_color_hovered_btn_label = is_dark_mode ? wxColour(253, 111, 40) : wxColour(252, 77, 1); @@ -2523,7 +2598,7 @@ void GUI_App::recreate_GUI(const wxString& msg_name) dlg.Update(80, _L("Loading current presets") + dots); load_current_presets(); mainframe->Show(true); - mainframe->refresh_plugin_tips(); + //mainframe->refresh_plugin_tips(); dlg.Update(90, _L("Loading a mode view") + dots); @@ -2574,7 +2649,7 @@ void GUI_App::ShowUserGuide() { void GUI_App::ShowDownNetPluginDlg() { try { - DownloadProgressDialog dlg(_L("Downloading Bambu Network plug-in")); + DownloadProgressDialog dlg(_L("Downloading Bambu Network Plug-in")); dlg.ShowModal(); } catch (std::exception &e) { ; @@ -2699,21 +2774,7 @@ void GUI_App::persist_window_geometry(wxTopLevelWindow *window, bool default_max const std::string name = into_u8(window->GetName()); window->Bind(wxEVT_CLOSE_WINDOW, [=](wxCloseEvent &event) { - m_is_closing = true; window_pos_save(window, "mainframe"); - // - stop_sync_user_preset(); - - if (m_device_manager) { - delete m_device_manager; - m_device_manager = nullptr; - } - - if (m_agent) { - m_agent->start_discovery(false, false); - delete m_agent; - m_agent = nullptr; - } event.Skip(); }); @@ -2823,6 +2884,12 @@ void GUI_App::request_user_login(int online_login) void GUI_App::request_user_logout() { if (m_agent) { + bool transfer_preset_changes = false; + wxString header = _L("Some presets are modified.") + "\n" + + _L("You can keep the modifield presets to the new project, discard or save changes as new presets."); + using ab = UnsavedChangesDialog::ActionButtons; + wxGetApp().check_and_keep_current_preset_changes(_L("User logged out"), header, ab::KEEP | ab::SAVE, &transfer_preset_changes); + m_agent->user_logout(); m_agent->set_user_selected_machine(""); /* delete old user settings */ @@ -2936,6 +3003,26 @@ std::string GUI_App::handle_web_request(std::string cmd) else if (command_str.compare("begin_network_plugin_download") == 0) { CallAfter([this] { wxGetApp().ShowDownNetPluginDlg(); }); } + else if (command_str.compare("get_web_shortcut") == 0) { + if (root.get_child_optional("key_event") != boost::none) { + pt::ptree key_event_node = root.get_child("key_event"); + auto keyCode = key_event_node.get("key"); + auto ctrlKey = key_event_node.get("ctrl"); + auto shiftKey = key_event_node.get("shift"); + auto cmdKey = key_event_node.get("cmd"); + + wxKeyEvent e(wxEVT_CHAR_HOOK); +#ifdef __APPLE__ + e.SetControlDown(cmdKey); +#else + e.SetControlDown(ctrlKey); +#endif + e.SetShiftDown(shiftKey); + e.m_keyCode = keyCode; + e.SetEventObject(mainframe); + wxPostEvent(mainframe, e); + } + } } } catch (...) { @@ -2992,6 +3079,11 @@ void GUI_App::request_project_download(std::string project_id) void GUI_App::request_open_project(std::string project_id) { + if (plater()->is_background_process_slicing()) { + Slic3r::GUI::show_info(nullptr, _L("new or open project file is not allowed during the slicing process!"), _L("Open Project")); + return; + } + if (project_id == "") plater()->new_project(); else if (project_id.empty()) @@ -3624,6 +3716,7 @@ bool GUI_App::load_language(wxString language, bool initial) {"fr", wxString::FromUTF8("\x46\x72\x61\x6E\xC3\xA7\x61\x69\x73")}, {"it", wxString::FromUTF8("\x49\x74\x61\x6C\x69\x61\x6E\x6F")}, {"ru", wxString::FromUTF8("\xD1\x80\xD1\x83\xD1\x81\xD1\x81\xD0\xBA\xD0\xB8\xD0\xB9")}, + {"hu", wxString::FromUTF8("Magyar")} }; for (auto l : language_descptions) { const wxLanguageInfo *langinfo = wxLocale::FindLanguageInfo(l.first); @@ -3720,13 +3813,22 @@ bool GUI_App::load_language(wxString language, bool initial) else if (initial) { // bbs supported languages //TODO: use a global one with Preference - wxLanguage supported_languages[] {wxLANGUAGE_ENGLISH, wxLANGUAGE_CHINESE_SIMPLIFIED, wxLANGUAGE_GERMAN, wxLANGUAGE_FRENCH, wxLANGUAGE_SPANISH, wxLANGUAGE_SWEDISH, wxLANGUAGE_DUTCH }; + wxLanguage supported_languages[] { + wxLANGUAGE_ENGLISH, + wxLANGUAGE_CHINESE_SIMPLIFIED, + wxLANGUAGE_GERMAN, + wxLANGUAGE_FRENCH, + wxLANGUAGE_SPANISH, + wxLANGUAGE_SWEDISH, + wxLANGUAGE_DUTCH, + wxLANGUAGE_HUNGARIAN }; std::string cur_language = app_config->get("language"); if (cur_language != "") { //cleanup the language wrongly set before const wxLanguageInfo *langinfo = nullptr; bool embedded_language = false; - for (auto index = 0; index < 7; index++) { + int language_num = sizeof(supported_languages) / sizeof(supported_languages[0]); + for (auto index = 0; index < language_num; index++) { langinfo = wxLocale::GetLanguageInfo(supported_languages[index]); std::string temp_lan = langinfo->CanonicalName.ToUTF8().data(); if (cur_language == temp_lan) { @@ -4283,6 +4385,7 @@ void GUI_App::MacOpenFiles(const wxArrayString &fileNames) std::vector files; std::vector gcode_files; std::vector non_gcode_files; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", open files, size " << fileNames.size(); for (const auto& filename : fileNames) { if (is_gcode_file(into_u8(filename))) gcode_files.emplace_back(filename); @@ -4303,21 +4406,27 @@ void GUI_App::MacOpenFiles(const wxArrayString &fileNames) } else*/ { if (! files.empty()) { - wxArrayString input_files; - for (size_t i = 0; i < non_gcode_files.size(); ++i) { - input_files.push_back(non_gcode_files[i]); + if (m_post_initialized) { + wxArrayString input_files; + for (size_t i = 0; i < non_gcode_files.size(); ++i) { + input_files.push_back(non_gcode_files[i]); + } + this->plater()->load_files(input_files); } - this->plater()->load_files(input_files); - if (gcode_files.size() > 0) { - show_info(this->plater(), _L("G-code files can not be loaded with models together!"), _L("G-code loading")); + else { + for (size_t i = 0; i < files.size(); ++i) { + this->init_params->input_files.emplace_back(files[i]); + } } } else { - wxArrayString input_files; - for (size_t i = 0; i < gcode_files.size(); ++i) { - input_files.push_back(gcode_files[i]); + if (m_post_initialized) { + this->plater()->load_gcode(gcode_files.front()); + } + else { + this->init_params->input_gcode = true; + this->init_params->input_files = { into_u8(gcode_files.front()) }; } - this->plater()->load_files(input_files); } /*for (const wxString &filename : gcode_files) start_new_gcodeviewer(&filename);*/ @@ -4352,12 +4461,16 @@ const Plater* GUI_App::plater() const ParamsPanel* GUI_App::params_panel() { - return mainframe->m_param_panel; + if (mainframe) + return mainframe->m_param_panel; + return nullptr; } ParamsDialog* GUI_App::params_dialog() { - return mainframe->m_param_dialog; + if (mainframe) + return mainframe->m_param_dialog; + return nullptr; } Model& GUI_App::model() @@ -4367,22 +4480,28 @@ Model& GUI_App::model() void GUI_App::load_url(wxString url) { - return mainframe->load_url(url); + if (mainframe) + return mainframe->load_url(url); } void GUI_App::run_script(wxString js) { - return mainframe->RunScript(js); + if (mainframe) + return mainframe->RunScript(js); } Notebook* GUI_App::tab_panel() const { - return mainframe->m_tabpanel; + if (mainframe) + return mainframe->m_tabpanel; + return nullptr; } NotificationManager * GUI_App::notification_manager() { - return plater_->get_notification_manager(); + if (plater_) + return plater_->get_notification_manager(); + return nullptr; } // extruders count from selected printer preset @@ -4807,8 +4926,15 @@ void GUI_App::disassociate_files(std::wstring extend) bool is_new = false; is_new |= del_win_registry(HKEY_CURRENT_USER, reg_extension.c_str(), prog_id.c_str()); - is_new |= del_win_registry(HKEY_CURRENT_USER, reg_prog_id.c_str(), prog_desc.c_str()); - is_new |= del_win_registry(HKEY_CURRENT_USER, reg_prog_id_command.c_str(), prog_command.c_str()); + + bool is_associate_3mf = app_config->get("associate_3mf") == "true"; + bool is_associate_stl = app_config->get("associate_stl") == "true"; + bool is_associate_step = app_config->get("associate_step") == "true"; + if (!is_associate_3mf && !is_associate_stl && !is_associate_step) + { + is_new |= del_win_registry(HKEY_CURRENT_USER, reg_prog_id.c_str(), prog_desc.c_str()); + is_new |= del_win_registry(HKEY_CURRENT_USER, reg_prog_id_command.c_str(), prog_command.c_str()); + } if (is_new) ::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nullptr, nullptr); diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 4aeea2e0c69..d88e1053fcd 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -100,6 +100,11 @@ enum ConfigMenuIDs { ConfigMenuCnt, }; +enum BambuStudioMenuIDs { + BambuStudioMenuAbout, + BambuStudioMenuPreferences, +}; + enum CameraMenuIDs { wxID_CAMERA_PERSPECTIVE, wxID_CAMERA_ORTHOGONAL, @@ -189,7 +194,7 @@ class VersionInfo class GUI_App : public wxApp { public: - + //BBS: remove GCodeViewer as seperate APP logic enum class EAppMode : unsigned char { @@ -199,6 +204,7 @@ class GUI_App : public wxApp private: bool m_initialized { false }; + bool m_post_initialized { false }; bool m_app_conf_exists{ false }; EAppMode m_app_mode{ EAppMode::Editor }; bool m_is_recreating_gui{ false }; @@ -280,6 +286,7 @@ class GUI_App : public wxApp // Process command line parameters cached in this->init_params, // load configs, STLs etc. void post_init(); + void shutdown(); // If formatted for github, plaintext with OpenGL extensions enclosed into
. // Otherwise HTML formatted for the system info dialog. static std::string get_gl_info(bool for_github); @@ -511,7 +518,7 @@ class GUI_App : public wxApp private: int updating_bambu_networking(); bool on_init_inner(); - bool on_init_network(); + bool on_init_network(bool try_backup = false); void init_networking_callbacks(); void init_app_config(); //BBS set extra header for http request diff --git a/src/slic3r/GUI/GUI_Init.cpp b/src/slic3r/GUI/GUI_Init.cpp index 0c4d05b5713..dfc59b32fec 100644 --- a/src/slic3r/GUI/GUI_Init.cpp +++ b/src/slic3r/GUI/GUI_Init.cpp @@ -53,7 +53,16 @@ int GUI_Run(GUI_InitParams ¶ms) GUI::GUI_App::SetInstance(gui); gui->init_params = ¶ms; - return wxEntry(params.argc, params.argv); + if (params.argc > 1) { + // STUDIO-273 wxWidgets report error when opening some files with specific names + // wxWidgets does not handle parameters, so intercept parameters here, only keep the app name + int argc = 1; + std::vector argv; + argv.push_back(params.argv[0]); + return wxEntry(argc, argv.data()); + } else { + return wxEntry(params.argc, params.argv); + } } catch (const Slic3r::Exception &ex) { BOOST_LOG_TRIVIAL(error) << ex.what() << std::endl; wxMessageBox(boost::nowide::widen(ex.what()), _L("Bambu Studio GUI initialization failed"), wxICON_STOP); diff --git a/src/slic3r/GUI/GUI_Init.hpp b/src/slic3r/GUI/GUI_Init.hpp index b872c1dd689..8b30b3ed197 100644 --- a/src/slic3r/GUI/GUI_Init.hpp +++ b/src/slic3r/GUI/GUI_Init.hpp @@ -22,6 +22,7 @@ struct GUI_InitParams //BBS: remove start_as_gcodeviewer logic //bool start_as_gcodeviewer; + bool input_gcode { false }; }; int GUI_Run(GUI_InitParams ¶ms); diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 15367a2fbd2..7cb6a6156f6 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -71,9 +71,6 @@ static void take_snapshot(const std::string& snapshot_name) plater->take_snapshot(snapshot_name); } -#define ID_OBJECT_ORG_MENU_ITEM_MODULE 11000 -#define ID_OBJECT_ORG_MENU_ITEM_PLATE 11001 - ObjectList::ObjectList(wxWindow* parent) : wxDataViewCtrl(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDV_MULTIPLE) { @@ -85,17 +82,6 @@ ObjectList::ObjectList(wxWindow* parent) : //BBS: add part plate related event //Bind(EVT_PARTPLATE_LIST_PLATE_SELECT, &ObjectList::on_select_plate, this); - // BBS - wxMenuItem* org_by_plate = new wxMenuItem(&m_object_org_menu, ID_OBJECT_ORG_MENU_ITEM_PLATE, "Organize By Plate"); - m_object_org_menu.Append(org_by_plate); - - wxMenuItem* org_by_module = new wxMenuItem(&m_object_org_menu, ID_OBJECT_ORG_MENU_ITEM_MODULE, "Organize By Module"); - m_object_org_menu.Append(org_by_module); - - //Bind(wxEVT_DATAVIEW_COLUMN_HEADER_CLICK, &ObjectList::OnColumnHeadClicked, this); - Bind(wxEVT_MENU, [this](wxCommandEvent& evt) { this->OnOrganizeObjects(ortByPlate); }, ID_OBJECT_ORG_MENU_ITEM_PLATE); - Bind(wxEVT_MENU, [this](wxCommandEvent& evt) { this->OnOrganizeObjects(ortByModule); }, ID_OBJECT_ORG_MENU_ITEM_MODULE); - // describe control behavior Bind(wxEVT_DATAVIEW_SELECTION_CHANGED, [this](wxDataViewEvent& event) { // detect the current mouse position here, to pass it to list_manipulation() method @@ -266,7 +252,8 @@ ObjectList::ObjectList(wxWindow* parent) : #else update_name_column_width(); - ensure_current_item_visible(); + // BBS + this->CallAfter([this]() { ensure_current_item_visible(); }); #endif e.Skip(); })); @@ -278,10 +265,13 @@ ObjectList::~ObjectList() void ObjectList::set_min_height() { + // BBS +#if 0 if (m_items_count == size_t(-1)) m_items_count = 7; int list_min_height = lround(2.25 * (m_items_count + 1) * wxGetApp().em_unit()); // +1 is for height of control header this->SetMinSize(wxSize(1, list_min_height)); +#endif } void ObjectList::update_min_height() @@ -289,10 +279,14 @@ void ObjectList::update_min_height() wxDataViewItemArray all_items; m_objects_model->GetAllChildren(wxDataViewItem(nullptr), all_items); size_t items_cnt = all_items.Count(); +#if 0 if (items_cnt < 7) items_cnt = 7; else if (items_cnt >= 15) items_cnt = 15; +#else + items_cnt = 8; +#endif if (m_items_count == items_cnt) return; @@ -304,14 +298,14 @@ void ObjectList::update_min_height() void ObjectList::create_objects_ctrl() { + // BBS +#if 0 /* Temporary workaround for the correct behavior of the Scrolled sidebar panel: * 1. set a height of the list to some big value * 2. change it to the normal(meaningful) min value after first whole Mainframe updating/layouting */ SetMinSize(wxSize(-1, 3000)); - - m_sizer = new wxBoxSizer(wxVERTICAL); - m_sizer->Add(this, 1, wxGROW); +#endif m_objects_model = new ObjectDataViewModel; AssociateModel(m_objects_model); @@ -356,7 +350,7 @@ void ObjectList::create_objects_ctrl() bmp_choice_renderer->set_default_extruder_idx([this]() { return m_objects_model->GetDefaultExtruderIdx(GetSelection()); }); - AppendColumn(new wxDataViewColumn(_L(""), bmp_choice_renderer, + AppendColumn(new wxDataViewColumn(_L("Fila."), bmp_choice_renderer, colFilament, m_columns_width[colFilament] * em, wxALIGN_CENTER_HORIZONTAL, 0)); // BBS @@ -642,6 +636,9 @@ void ObjectList::update_plate_values_for_items() if (plate_idx == old_plate_idx) continue; + // hotfix for wxDataViewCtrl selection not updated after wxDataViewModel::ItemDeleted() + Unselect(item); + bool is_old_parent_expanded = IsExpanded(old_parent); bool is_expanded = IsExpanded(item); m_objects_model->OnPlateChange(plate_idx, item); @@ -661,20 +658,6 @@ void ObjectList::update_name_for_items() wxGetApp().plater()->update(); } -// BBS -void ObjectList::OnColumnHeadClicked(wxDataViewEvent& event) -{ - int col = event.GetColumn(); - if (col == 0) { - this->PopupMenu(&m_object_org_menu, 0, FromDIP(20)); - } -} - -void ObjectList::OnOrganizeObjects(OBJECT_ORGANIZE_TYPE type) -{ - printf("%d\n", type); -} - void ObjectList::object_config_options_changed(const ObjectVolumeID& ov_id) { if (ov_id.object == nullptr) @@ -1977,6 +1960,30 @@ void ObjectList::load_generic_subobject(const std::string& type_name, const Mode // update printable state on canvas wxGetApp().plater()->canvas3D()->update_instance_printable_state_for_object((size_t)obj_idx); + // apply the instance transform to all volumes and reset instance transform except the offset + { + const Geometry::Transformation &instance_transformation = model_object.instances[0]->get_transformation(); + Vec3d original_instance_center = instance_transformation.get_offset(); + + const Transform3d &transformation_matrix = instance_transformation.get_matrix(); + for (ModelVolume *volume : model_object.volumes) { + const Transform3d &volume_matrix = volume->get_matrix(); + Transform3d new_matrix = transformation_matrix * volume_matrix; + volume->set_transformation(new_matrix); + } + model_object.instances[0]->set_transformation(Geometry::Transformation()); + + model_object.ensure_on_bed(); + // keep new instance center the same as the original center + model_object.translate(-original_instance_center); + model_object.origin_translation += original_instance_center; + model_object.translate_instances(model_object.origin_translation); + model_object.origin_translation = Vec3d::Zero(); + + // update the cache data in selection to keep the data of ModelVolume and GLVolume are consistent + wxGetApp().plater()->update(); + } + selection_changed(); //BBS: notify partplate the modify @@ -4734,9 +4741,7 @@ void ObjectList::OnEditingStarted(wxDataViewEvent &event) auto item = event.GetItem(); if (!renderer->GetEditorCtrl()) { renderer->StartEditing(item, GetItemRect(item, column)); - if (col == colFilament) // TODO: not handle KILL_FOCUS from ComboBox - renderer->GetEditorCtrl()->PopEventHandler(); - else if (col == colName) // TODO: for colName editing, disable shortcuts + if (col == colName) // TODO: for colName editing, disable shortcuts SetAcceleratorTable(wxNullAcceleratorTable); } #endif //__WXMSW__ diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index 2e25c9b9bf7..2387142728b 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -163,8 +163,6 @@ class ObjectList : public wxDataViewCtrl } m_dragged_data; - wxBoxSizer *m_sizer {nullptr}; - ObjectDataViewModel *m_objects_model{ nullptr }; ModelConfig *m_config {nullptr}; std::vector *m_objects{ nullptr }; @@ -308,7 +306,6 @@ class ObjectList : public wxDataViewCtrl bool can_merge_to_single_object() const; wxPoint get_mouse_position_in_control() const { return wxGetMousePosition() - this->GetScreenPosition(); } - wxBoxSizer* get_sizer() {return m_sizer;} int get_selected_obj_idx() const; ModelConfig& get_item_config(const wxDataViewItem& item) const; @@ -453,11 +450,6 @@ class ObjectList : public wxDataViewCtrl void OnEditingStarted(wxDataViewEvent &event); void OnEditingDone(wxDataViewEvent &event); - // BBS - void OnColumnHeadClicked(wxDataViewEvent& event); - void OnOrganizeObjects(OBJECT_ORGANIZE_TYPE type); - wxMenu m_object_org_menu; - std::vector m_columns_width; }; diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 175515e4c0c..b92a346c5cb 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -236,6 +236,25 @@ void GridCellFilamentsEditor::BeginEdit(int row, int col, wxGrid* grid) } } +bool GridCellFilamentsEditor::EndEdit(int WXUNUSED(row), + int WXUNUSED(col), + const wxGrid* WXUNUSED(grid), + const wxString& WXUNUSED(oldval), + wxString *newval) +{ + const wxString value = Combo()->GetValue(); + if ( value == m_value ) + return false; + + m_value = value; + + if ( newval ) + *newval = value; + + return true; +} + + wxGridActivationResult GridCellFilamentsEditor::TryActivate(int row, int col, wxGrid* grid, const wxGridActivationSource& actSource) { ObjectGridTable *table = dynamic_cast(grid->GetTable()); @@ -2365,7 +2384,7 @@ ObjectTablePanel::ObjectTablePanel( wxWindow* parent, wxWindowID id, const wxPoi SetSize(wxSize(-1, FromDIP(450))); SetMinSize(wxSize(-1, FromDIP(450))); SetMaxSize(wxSize(-1, FromDIP(450))); - + //m_search_line = new wxTextCtrl(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); init_bitmap(); @@ -2401,7 +2420,7 @@ ObjectTablePanel::ObjectTablePanel( wxWindow* parent, wxWindowID id, const wxPoi m_page_top_sizer->Add(m_page_text, 0, wxEXPAND, 5);*/ - + //TODO, adjust later /* @@ -2445,7 +2464,7 @@ ObjectTablePanel::ObjectTablePanel( wxWindow* parent, wxWindowID id, const wxPoi int ObjectTablePanel::init_bitmap() { - m_undo_bitmap = create_scaled_bitmap("undo", nullptr, 24); + m_undo_bitmap = create_scaled_bitmap("lock_normal", nullptr, 24); m_color_bitmaps = get_extruder_color_icons(); return 0; diff --git a/src/slic3r/GUI/GUI_ObjectTable.hpp b/src/slic3r/GUI/GUI_ObjectTable.hpp index 382b751cd5e..ca2395d236c 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.hpp +++ b/src/slic3r/GUI/GUI_ObjectTable.hpp @@ -40,7 +40,7 @@ class GridCellIconRenderer : public wxGridCellRenderer const wxRect& rect, int row, int col, bool isSelected) wxOVERRIDE; - + virtual wxSize GetBestSize(wxGrid& WXUNUSED(grid), wxGridCellAttr& attr, wxDC& dc, @@ -71,6 +71,8 @@ class GridCellFilamentsEditor : public wxGridCellChoiceEditor virtual wxGridCellEditor *Clone() const wxOVERRIDE; virtual void BeginEdit(int row, int col, wxGrid* grid) wxOVERRIDE; + virtual bool EndEdit(int row, int col, const wxGrid* grid, + const wxString& oldval, wxString *newval) wxOVERRIDE; virtual wxGridActivationResult TryActivate(int row, int col, wxGrid* grid, const wxGridActivationSource& actSource) wxOVERRIDE; virtual void DoActivate(int row, int col, wxGrid* grid) wxOVERRIDE; @@ -151,7 +153,7 @@ class GridCellSupportRenderer : public wxGridCellBoolRenderer //ObjectGrid for the param setting table class ObjectGrid : public wxGrid { -public: +public: ObjectGrid(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, @@ -377,7 +379,7 @@ class ObjectGridTable : public wxGridTableBase virtual int GetNumberRows() wxOVERRIDE; virtual int GetNumberCols() wxOVERRIDE; virtual bool IsEmptyCell( int row, int col ) wxOVERRIDE; - + //virtual wxString GetColLabelValue( int col ) wxOVERRIDE; @@ -537,7 +539,7 @@ class ObjectTablePanel : public wxPanel wxFloatingPointValidator m_float_validator; wxBitmap m_undo_bitmap; - std::vector m_color_bitmaps; + std::vector m_color_bitmaps; ScalableBitmap m_bmp_reset; ScalableBitmap m_bmp_reset_disable; private: diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp index 4d6486a2a90..10fd7f2ddd0 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp @@ -66,8 +66,8 @@ ObjectTableSettings::ObjectTableSettings(wxWindow* parent, ObjectGridTable* tabl m_settings_list_sizer = new wxBoxSizer(wxVERTICAL); m_og->sizer->Add(m_settings_list_sizer, 1, wxEXPAND | wxLEFT, 5); - m_bmp_reset = ScalableBitmap(parent, "undo"); - m_bmp_reset_focus = ScalableBitmap(parent, "undo"); + m_bmp_reset = ScalableBitmap(parent, "lock_normal"); + m_bmp_reset_focus = ScalableBitmap(parent, "lock_normal"); //TODO, adjust later m_bmp_reset_disable = ScalableBitmap(parent, "dot"); } diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 374894a50db..d9db9e0f31c 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -766,6 +766,7 @@ bool AssembleView::init(wxWindow* parent, Bed3D& bed, Model* model, DynamicPrint // BBS: set volume_selection_mode to Volume m_canvas->get_selection().set_volume_selection_mode(Selection::Volume); + m_canvas->get_selection().lock_volume_selection_mode(); wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); main_sizer->Add(m_canvas_widget, 1, wxALL | wxEXPAND, 0); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp index 18e48efca78..1f5c46a7c2d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp @@ -158,6 +158,10 @@ void GLGizmoAdvancedCut::reset_cut_plane() m_rotation.setZero(); //m_current_base_rotation.setZero(); m_rotate_cmds.clear(); + + m_buffered_movement = 0.0; + m_buffered_height = m_height; + m_buffered_rotation.setZero(); } void GLGizmoAdvancedCut::reset_all() @@ -174,7 +178,7 @@ bool GLGizmoAdvancedCut::on_init() if (!GLGizmoRotate3D::on_init()) return false; - m_shortcut_key = WXK_NONE; + m_shortcut_key = WXK_CONTROL_C; return true; } @@ -414,7 +418,7 @@ void GLGizmoAdvancedCut::on_render_input_window(float x, float y, float bottom_l GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always, 0.0f, 0.0f); - ImGuiWrapper::push_toolbar_style(); + ImGuiWrapper::push_toolbar_style(m_parent.get_scale()); GizmoImguiBegin(on_get_name(), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index 92331c80962..5398a99c6eb 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -76,7 +76,7 @@ std::string GLGizmoFdmSupports::on_get_name() const bool GLGizmoFdmSupports::on_init() { // BBS - m_shortcut_key = WXK_NONE; + m_shortcut_key = WXK_CONTROL_L; m_desc["clipping_of_view"] = _L("Section view") + ": "; m_desc["cursor_size"] = _L("Pen size") + ": "; @@ -88,9 +88,9 @@ bool GLGizmoFdmSupports::on_init() m_desc["remove"] = _L("Erase painting"); m_desc["remove_all"] = _L("Erase all painting"); m_desc["highlight_by_angle"] = _L("Highlight overhang areas") + ": "; - m_desc["fragment_filter"] = _L("Gap fill"); - m_desc["perform_filter"] = _L("Perform"); - m_desc["fragment_area"] = _L("Fragment area"); + m_desc["gap_fill"] = _L("Gap fill"); + m_desc["perform"] = _L("Perform"); + m_desc["gap_area"] = _L("Gap area"); m_desc["brush_size"] = _L("Set pen size"); m_desc["brush_size_caption"] = _L("Ctrl + Mouse wheel") + ": "; m_desc["tool_type"] = _L("Tool type"); @@ -175,6 +175,10 @@ void GLGizmoFdmSupports::on_set_state() if (get_state() == On) { m_support_threshold_angle = -1; } + else if (get_state() == Off) { + ModelObject* mo = m_c->selection_info()->model_object(); + if (mo) Slic3r::save_object_mesh(*mo); + } } static std::string into_u8(const wxString& str) @@ -206,16 +210,16 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always, 0.0f, 0.0f); //BBS - ImGuiWrapper::push_toolbar_style(); + ImGuiWrapper::push_toolbar_style(m_parent.get_scale()); GizmoImguiBegin(get_name(), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar); // 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 clipping_slider_left = m_imgui->calc_text_size(m_desc.at("clipping_of_view")).x + m_imgui->scaled(1.5f); const float cursor_slider_left = m_imgui->calc_text_size(m_desc.at("cursor_size")).x + m_imgui->scaled(1.5f); - const float fragment_filter_slider_left = m_imgui->calc_text_size(m_desc.at("fragment_filter")).x + m_imgui->scaled(1.5f); + const float gap_fill_slider_left = m_imgui->calc_text_size(m_desc.at("gap_fill")).x + m_imgui->scaled(1.5f); const float highlight_slider_left = m_imgui->calc_text_size(m_desc.at("highlight_by_angle")).x + m_imgui->scaled(1.5f); const float remove_btn_width = m_imgui->calc_text_size(m_desc.at("remove_all")).x + m_imgui->scaled(1.5f); - const float filter_btn_width = m_imgui->calc_text_size(m_desc.at("perform_filter")).x + m_imgui->scaled(1.5f); + const float filter_btn_width = m_imgui->calc_text_size(m_desc.at("perform")).x + m_imgui->scaled(1.5f); const float buttons_width = remove_btn_width + filter_btn_width + m_imgui->scaled(1.5f); const float empty_button_width = m_imgui->calc_button_size("").x; @@ -232,7 +236,7 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l total_text_max += caption_max + m_imgui->scaled(1.f); caption_max += m_imgui->scaled(1.f); - const float sliders_left_width = std::max(std::max(cursor_slider_left, clipping_slider_left), std::max(highlight_slider_left, fragment_filter_slider_left)); + const float sliders_left_width = std::max(std::max(cursor_slider_left, clipping_slider_left), std::max(highlight_slider_left, gap_fill_slider_left)); const float slider_icon_width = m_imgui->get_slider_icon_size().x; float window_width = minimal_slider_width + sliders_left_width + slider_icon_width; const float max_tooltip_width = ImGui::GetFontSize() * 20.0f; @@ -245,7 +249,7 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l ImGui::AlignTextToFramePadding(); m_imgui->text(m_desc.at("tool_type")); - std::array tool_icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::FillButtonIcon, ImGui::FragmentFilterIcon }; + std::array tool_icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::FillButtonIcon, ImGui::GapFillIcon }; std::array tool_tips = { _L("Circle"), _L("Sphere"), _L("Fill"), _L("Gap Fill") }; for (int i = 0; i < tool_icons.size(); i++) { std::string str_label = std::string("##"); @@ -322,19 +326,19 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l ImGui::SameLine(window_width - drag_pos_times * slider_icon_width); ImGui::PushItemWidth(1.5 * slider_icon_width); ImGui::BBLDragFloat("##smart_fill_angle_input", &m_smart_fill_angle, 0.05f, 0.0f, 0.0f, "%.2f"); - } else if (m_current_tool == ImGui::FragmentFilterIcon) { - m_tool_type = ToolType::FRAGMENT_FILTER; + } else if (m_current_tool == ImGui::GapFillIcon) { + m_tool_type = ToolType::GAP_FILL; m_cursor_type = TriangleSelector::CursorType::POINTER; ImGui::AlignTextToFramePadding(); - m_imgui->text(m_desc["fragment_area"] + ":"); + m_imgui->text(m_desc["gap_area"] + ":"); ImGui::SameLine(sliders_left_width); ImGui::PushItemWidth(window_width - sliders_left_width - slider_icon_width); std::string format_str = std::string("%.2f") + I18N::translate_utf8("", "Triangle patch area threshold,""triangle patch will be merged to neighbor if its area is less than threshold"); - m_imgui->bbl_slider_float_style("##fragment_area", &TriangleSelectorPatch::fragment_area, TriangleSelectorPatch::FragmentAreaMin, TriangleSelectorPatch::FragmentAreaMax, format_str.data(), 1.0f, true); + m_imgui->bbl_slider_float_style("##gap_area", &TriangleSelectorPatch::gap_area, TriangleSelectorPatch::GapAreaMin, TriangleSelectorPatch::GapAreaMax, format_str.data(), 1.0f, true); ImGui::SameLine(window_width - drag_pos_times * slider_icon_width); ImGui::PushItemWidth(1.5 * slider_icon_width); - ImGui::BBLDragFloat("##fragment_area_input", &TriangleSelectorPatch::fragment_area, 0.05f, 0.0f, 0.0f, "%.2f"); + ImGui::BBLDragFloat("##gap_area_input", &TriangleSelectorPatch::gap_area, 0.05f, 0.0f, 0.0f, "%.2f"); } float position_before_text_y = ImGui::GetCursorPos().y; @@ -374,7 +378,7 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l ImGui::PushItemWidth(1.5 * slider_icon_width); ImGui::BBLDragFloat("##angle_threshold_deg_input", &m_highlight_by_angle_threshold_deg, 0.05f, 0.0f, 0.0f, "%.2f"); - if (m_current_tool != ImGui::FragmentFilterIcon) { + if (m_current_tool != ImGui::GapFillIcon) { ImGui::Separator(); ImGui::AlignTextToFramePadding(); m_imgui->text(m_desc.at("clipping_of_view")); @@ -395,12 +399,15 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(6.0f, 10.0f)); float get_cur_y = ImGui::GetContentRegionMax().y + ImGui::GetFrameHeight() + y; show_tooltip_information(caption_max, x, get_cur_y); - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6.0f, 5.0f)); + + float f_scale =m_parent.get_gizmos_manager().get_layout_scale(); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6.0f, 4.0f * f_scale)); + ImGui::SameLine(); // Perform button is for gap fill - if (m_current_tool == ImGui::FragmentFilterIcon) { - if (m_imgui->button(m_desc.at("perform_filter"))) { + if (m_current_tool == ImGui::GapFillIcon) { + if (m_imgui->button(m_desc.at("perform"))) { Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Reset selection", UndoRedo::SnapshotType::GizmoAction); for (int i = 0; i < m_triangle_selectors.size(); i++) { @@ -439,13 +446,13 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l void GLGizmoFdmSupports::tool_changed(wchar_t old_tool, wchar_t new_tool) { - if ((old_tool == ImGui::FragmentFilterIcon && new_tool == ImGui::FragmentFilterIcon) || - (old_tool != ImGui::FragmentFilterIcon && new_tool != ImGui::FragmentFilterIcon)) + if ((old_tool == ImGui::GapFillIcon && new_tool == ImGui::GapFillIcon) || + (old_tool != ImGui::GapFillIcon && new_tool != ImGui::GapFillIcon)) return; for (auto& selector_ptr : m_triangle_selectors) { TriangleSelectorPatch* tsp = dynamic_cast(selector_ptr.get()); - tsp->set_filter_state(new_tool == ImGui::FragmentFilterIcon); + tsp->set_filter_state(new_tool == ImGui::GapFillIcon); } } @@ -549,8 +556,6 @@ void GLGizmoFdmSupports::update_model_object() const ModelObjectPtrs& mos = wxGetApp().model().objects; wxGetApp().obj_list()->update_info_items(std::find(mos.begin(), mos.end(), mo) - mos.begin()); - // BBS: backup - Slic3r::save_object_mesh(*mo); m_parent.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp index 3bfd243f920..e4cde96de24 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp @@ -25,7 +25,7 @@ GLGizmoFlatten::GLGizmoFlatten(GLCanvas3D& parent, const std::string& icon_filen bool GLGizmoFlatten::on_init() { // BBS - m_shortcut_key = WXK_NONE; + m_shortcut_key = WXK_CONTROL_F; return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index 0464ceb09cb..080e9743cb4 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -94,7 +94,7 @@ void GLGizmoMmuSegmentation::init_extruders_data() bool GLGizmoMmuSegmentation::on_init() { // BBS - m_shortcut_key = WXK_NONE; + m_shortcut_key = WXK_CONTROL_N; m_desc["clipping_of_view"] = _L("Section view") + ": "; m_desc["cursor_size"] = _L("Pen size") + ": "; @@ -108,10 +108,10 @@ bool GLGizmoMmuSegmentation::on_init() m_desc["shortcut_key_caption"] = _L("Key 1~9") + ": "; m_desc["shortcut_key"] = _L("Choose filament"); m_desc["edge_detection"] = _L("Edge detection"); - m_desc["fragment_area"] = _L("Fragment area"); - m_desc["perform_filter"] = _L("Perform"); + m_desc["gap_area"] = _L("Gap area"); + m_desc["perform"] = _L("Perform"); - m_desc["remove_all"] = _L("Clear all"); + m_desc["remove_all"] = _L("Erase all painting"); m_desc["circle"] = _L("Circle"); m_desc["sphere"] = _L("Sphere"); m_desc["pointer"] = _L("Triangles"); @@ -332,7 +332,7 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott wchar_t old_tool = m_current_tool; // BBS - ImGuiWrapper::push_toolbar_style(); + ImGuiWrapper::push_toolbar_style(m_parent.get_scale()); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(8.0f, 16.0f)); GizmoImguiBegin(get_name(), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar); @@ -341,11 +341,11 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott const float cursor_slider_left = m_imgui->calc_text_size(m_desc.at("cursor_size")).x + m_imgui->scaled(1.f); const float smart_fill_slider_left = m_imgui->calc_text_size(m_desc.at("smart_fill_angle")).x + m_imgui->scaled(1.5f); const float edge_detect_slider_left = m_imgui->calc_text_size(m_desc.at("edge_detection")).x + m_imgui->scaled(1.f); - const float fragment_area_slider_left = m_imgui->calc_text_size(m_desc.at("fragment_area")).x + m_imgui->scaled(1.5f); + const float gap_area_slider_left = m_imgui->calc_text_size(m_desc.at("gap_area")).x + m_imgui->scaled(1.5f); const float height_range_slider_left = m_imgui->calc_text_size(m_desc.at("height_range")).x + m_imgui->scaled(1.5f); const float remove_btn_width = m_imgui->calc_text_size(m_desc.at("remove_all")).x + m_imgui->scaled(1.f); - const float filter_btn_width = m_imgui->calc_text_size(m_desc.at("perform_filter")).x + m_imgui->scaled(1.f); + const float filter_btn_width = m_imgui->calc_text_size(m_desc.at("perform")).x + m_imgui->scaled(1.f); const float buttons_width = remove_btn_width + filter_btn_width + m_imgui->scaled(1.f); const float minimal_slider_width = m_imgui->scaled(4.f); const float color_button_width = m_imgui->calc_text_size("").x + m_imgui->scaled(1.75f); @@ -362,7 +362,7 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott const float circle_max_width = std::max(clipping_slider_left,cursor_slider_left); const float height_max_width = std::max(clipping_slider_left,height_range_slider_left); const float sliders_left_width = std::max(smart_fill_slider_left, - std::max(cursor_slider_left, std::max(edge_detect_slider_left, std::max(fragment_area_slider_left, std::max(height_range_slider_left, + std::max(cursor_slider_left, std::max(edge_detect_slider_left, std::max(gap_area_slider_left, std::max(height_range_slider_left, clipping_slider_left))))); const float slider_icon_width = m_imgui->get_slider_icon_size().x; float window_width = minimal_slider_width + sliders_left_width + slider_icon_width; @@ -434,7 +434,7 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott m_imgui->text(m_desc.at("tool_type")); - std::array tool_icons = { ImGui::CircleButtonIcon,ImGui::SphereButtonIcon, ImGui::TriangleButtonIcon, ImGui::HeightRangeIcon, ImGui::FillButtonIcon, ImGui::FragmentFilterIcon }; + std::array tool_icons = { ImGui::CircleButtonIcon,ImGui::SphereButtonIcon, ImGui::TriangleButtonIcon, ImGui::HeightRangeIcon, ImGui::FillButtonIcon, ImGui::GapFillIcon }; std::array tool_tips = { _L("Circle"), _L("Sphere"), _L("Triangle"), _L("Height Range"), _L("Fill"), _L("Gap Fill") }; for (int i = 0; i < tool_icons.size(); i++) { std::string str_label = std::string("##"); @@ -585,31 +585,33 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott if (slider_clp_dist || b_clp_dist_input) { m_c->object_clipper()->set_position(clp_dist, true); } } - else if (m_current_tool == ImGui::FragmentFilterIcon) { - m_tool_type = ToolType::FRAGMENT_FILTER; + else if (m_current_tool == ImGui::GapFillIcon) { + m_tool_type = ToolType::GAP_FILL; m_cursor_type = TriangleSelector::CursorType::POINTER; ImGui::AlignTextToFramePadding(); - m_imgui->text(m_desc["fragment_area"] + ":"); - ImGui::SameLine(fragment_area_slider_left); - ImGui::PushItemWidth(window_width - fragment_area_slider_left - slider_width_times * slider_icon_width); + m_imgui->text(m_desc["gap_area"] + ":"); + ImGui::SameLine(gap_area_slider_left); + ImGui::PushItemWidth(window_width - gap_area_slider_left - slider_width_times * slider_icon_width); std::string format_str = std::string("%.2f") + I18N::translate_utf8("", "Triangle patch area threshold,""triangle patch will be merged to neighbor if its area is less than threshold"); - m_imgui->bbl_slider_float_style("##fragment_area", &TriangleSelectorPatch::fragment_area, TriangleSelectorPatch::FragmentAreaMin, TriangleSelectorPatch::FragmentAreaMax, format_str.data(), 1.0f, true); + m_imgui->bbl_slider_float_style("##gap_area", &TriangleSelectorPatch::gap_area, TriangleSelectorPatch::GapAreaMin, TriangleSelectorPatch::GapAreaMax, format_str.data(), 1.0f, true); ImGui::SameLine(window_width - slider_icon_width); ImGui::PushItemWidth(1.5 * slider_icon_width); - ImGui::BBLDragFloat("##fragment_area_input", &TriangleSelectorPatch::fragment_area, 0.05f, 0.0f, 0.0f, "%.2f"); + ImGui::BBLDragFloat("##gap_area_input", &TriangleSelectorPatch::gap_area, 0.05f, 0.0f, 0.0f, "%.2f"); } ImGui::Separator(); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(6.0f, 10.0f)); - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6.0f, 5.0f)); - float get_cur_y = ImGui::GetContentRegionMax().y + ImGui::GetFrameHeight() + y; show_tooltip_information(caption_max, x, get_cur_y); + + float f_scale =m_parent.get_gizmos_manager().get_layout_scale(); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6.0f, 4.0f * f_scale)); + ImGui::SameLine(); - if (m_current_tool == ImGui::FragmentFilterIcon) { - if (m_imgui->button(m_desc.at("perform_filter"))) { - Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Filter fragment", UndoRedo::SnapshotType::GizmoAction); + if (m_current_tool == ImGui::GapFillIcon) { + if (m_imgui->button(m_desc.at("perform"))) { + Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Gap fill", UndoRedo::SnapshotType::GizmoAction); for (int i = 0; i < m_triangle_selectors.size(); i++) { TriangleSelectorPatch* ts_mm = dynamic_cast(m_triangle_selectors[i].get()); @@ -661,11 +663,7 @@ void GLGizmoMmuSegmentation::update_model_object() if (updated) { const ModelObjectPtrs &mos = wxGetApp().model().objects; wxGetApp().obj_list()->update_info_items(std::find(mos.begin(), mos.end(), mo) - mos.begin()); - // BBS: backup - Slic3r::save_object_mesh(*mo); m_parent.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); - // BBS - m_parent.post_event(SimpleEvent(EVT_GLCANVAS_FORCE_UPDATE)); } } @@ -730,13 +728,13 @@ void GLGizmoMmuSegmentation::update_from_model_object(bool first_update) void GLGizmoMmuSegmentation::tool_changed(wchar_t old_tool, wchar_t new_tool) { - if ((old_tool == ImGui::FragmentFilterIcon && new_tool == ImGui::FragmentFilterIcon) || - (old_tool != ImGui::FragmentFilterIcon && new_tool != ImGui::FragmentFilterIcon)) + if ((old_tool == ImGui::GapFillIcon && new_tool == ImGui::GapFillIcon) || + (old_tool != ImGui::GapFillIcon && new_tool != ImGui::GapFillIcon)) return; for (auto& selector_ptr : m_triangle_selectors) { TriangleSelectorPatch* tsp = dynamic_cast(selector_ptr.get()); - tsp->set_filter_state(new_tool == ImGui::FragmentFilterIcon); + tsp->set_filter_state(new_tool == ImGui::GapFillIcon); } } @@ -754,6 +752,16 @@ std::array GLGizmoMmuSegmentation::get_cursor_hover_color() const return m_extruders_colors[0]; } +void GLGizmoMmuSegmentation::on_set_state() +{ + GLGizmoPainterBase::on_set_state(); + + if (get_state() == Off) { + ModelObject* mo = m_c->selection_info()->model_object(); + if (mo) Slic3r::save_object_mesh(*mo); + } +} + wxString GLGizmoMmuSegmentation::handle_snapshot_action_name(bool shift_down, GLGizmoPainterBase::Button button_down) const { wxString action_name; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp index 8d6fc96d4dd..3d5254f639d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp @@ -87,6 +87,7 @@ class GLGizmoMmuSegmentation : public GLGizmoPainterBase protected: // BBS std::array get_cursor_hover_color() const override; + void on_set_state() override; EnforcerBlockerType get_left_button_state_type() const override { return EnforcerBlockerType(m_selected_extruder_idx + 1); } EnforcerBlockerType get_right_button_state_type() const override { return EnforcerBlockerType::NONE; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoModifier.cpp b/src/slic3r/GUI/Gizmos/GLGizmoModifier.cpp deleted file mode 100644 index 748f37b1470..00000000000 --- a/src/slic3r/GUI/Gizmos/GLGizmoModifier.cpp +++ /dev/null @@ -1,138 +0,0 @@ -// Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. -#include "GLGizmoModifier.hpp" -#include "slic3r/GUI/GUI_App.hpp" -#include "slic3r/GUI/GUI_ObjectList.hpp" -#include "slic3r/GUI/ImGuiWrapper.hpp" -#include "slic3r/GUI/GLCanvas3D.hpp" -#include "slic3r/GUI/Gizmos/GLGizmosCommon.hpp" - -#include "libslic3r/Geometry/ConvexHull.hpp" -#include "libslic3r/Model.hpp" - -#include - -#include - -namespace Slic3r { -namespace GUI { - -const int SHAPE_IMAGE_SIZE = 34; - -const std::vector> GLGizmoModifier::MODIFIER_SHAPES = { - {L("Cube"), "toolbar_modifier_cube.svg" }, - {L("Cylinder"), "toolbar_modifier_cylinder.svg" }, - {L("Sphere"), "toolbar_modifier_sphere.svg" }, - {L("Cone"), "toolbar_modifier_cone.svg" }, - {L("Timelapse Wipe Tower"), "toolbar_modifier_cube.svg"}, -}; - -GLGizmoModifier::GLGizmoModifier(GLCanvas3D &parent, const std::string &icon_filename, unsigned int sprite_id) - : GLGizmoBase(parent, icon_filename, sprite_id) -{ -} - -bool GLGizmoModifier::on_init() -{ - bool result = true; - texture_ids.clear(); - for (auto item: MODIFIER_SHAPES) { - result = result && init_shape_texture(item.second); - } - - // BBS - m_shortcut_key = WXK_NONE; - return result; -} - -bool GLGizmoModifier::init_shape_texture(std::string image_name) -{ - // init shapes image - bool compress = false; - GLint last_texture; - unsigned m_image_texture{0}; - - std::string path = resources_dir() + "/images/"; - std::string file_name = path + image_name; - - ThumbnailData data; - if (!get_data_from_svg(file_name, SHAPE_IMAGE_SIZE, data)) return false; - - unsigned char *pixels = (unsigned char *) (&data.pixels[0]); - glsafe(::glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture)); - glsafe(::glGenTextures(1, &m_image_texture)); - glsafe(::glBindTexture(GL_TEXTURE_2D, m_image_texture)); - glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); - glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); - glsafe(::glPixelStorei(GL_UNPACK_ROW_LENGTH, 0)); - if (compress && GLEW_EXT_texture_compression_s3tc) - glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, data.width, data.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels)); - else - glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, data.width, data.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels)); - - // Store our identifier - ImTextureID texture_id = (ImTextureID) (intptr_t) m_image_texture; - texture_ids.push_back(texture_id); - // Restore state - glsafe(::glBindTexture(GL_TEXTURE_2D, last_texture)); - - return true; -} - -void GLGizmoModifier::on_set_state() -{ -} - -void GLGizmoModifier::on_render_input_window(float x, float y, float bottom_limit) -{ - // BBS: GUI refactor: move gizmo to the right - m_imgui->set_next_window_pos(x, y, ImGuiCond_Always, 0.f, 0.0f); - - // BBS - ImGuiWrapper::push_toolbar_style(); - - std::string name = "Add Modifier##Modifier"; - m_imgui->begin(_L(name), ImGuiWrapper::TOOLBAR_WINDOW_FLAGS); - - for (int i = 0; i < MODIFIER_SHAPES.size(); i++) { - if (ImGui::ImageButton(texture_ids[i], ImVec2(34.0f, 34.0f))) { - wxGetApp().obj_list()->load_generic_subobject(MODIFIER_SHAPES[i].first, ModelVolumeType::PARAMETER_MODIFIER); - } - ImGui::SameLine(); - } - m_imgui->end(); - ImGuiWrapper::pop_toolbar_style(); -} - -CommonGizmosDataID GLGizmoModifier::on_get_requirements() const -{ - return CommonGizmosDataID::SelectionInfo; -} - -std::string GLGizmoModifier::on_get_name() const -{ - return _u8L("Add Modifier"); -} - -bool GLGizmoModifier::on_is_activable() const -{ - return m_parent.get_selection().is_single_full_instance(); -} - -void GLGizmoModifier::on_start_dragging() -{ - ; -} - -void GLGizmoModifier::on_render() -{ - ; -} - -void GLGizmoModifier::on_render_for_picking() -{ - ; -} - - -} // namespace GUI -} // namespace Slic3r diff --git a/src/slic3r/GUI/Gizmos/GLGizmoModifier.hpp b/src/slic3r/GUI/Gizmos/GLGizmoModifier.hpp deleted file mode 100644 index ef8a43d2973..00000000000 --- a/src/slic3r/GUI/Gizmos/GLGizmoModifier.hpp +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef slic3r_GLGizmoModifier_hpp_ -#define slic3r_GLGizmoModifier_hpp_ - -#include "GLGizmoBase.hpp" -#include "slic3r/GUI/3DScene.hpp" - - -namespace Slic3r { - -enum class ModelVolumeType : int; - - -namespace GUI { - -class GLGizmoModifier : public GLGizmoBase -{ -// This gizmo does not use grabbers. The m_hover_id relates to polygon managed by the class itself. - -private: - std::vector texture_ids; -public: - static const std::vector> MODIFIER_SHAPES; - GLGizmoModifier(GLCanvas3D &parent, const std::string &icon_filename, unsigned int sprite_id); - -protected: - virtual bool on_init() override; - virtual std::string on_get_name() const override; - virtual bool on_is_activable() const override; - virtual void on_start_dragging() override; - virtual void on_render() override; - virtual void on_render_for_picking() override; - virtual void on_set_state() override; - virtual void on_render_input_window(float x, float y, float bottom_limit); - virtual CommonGizmosDataID on_get_requirements() const override; - - bool init_shape_texture(std::string image_name); -}; - -} // namespace GUI -} // namespace Slic3r - -#endif // slic3r_GLGizmoFlatten_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp index e6d5303578b..747d8ec89e2 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp @@ -56,7 +56,7 @@ bool GLGizmoMove3D::on_init() m_grabbers.push_back(Grabber()); } - m_shortcut_key = WXK_NONE; + m_shortcut_key = WXK_CONTROL_M; return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index ae4197154f2..189db6236b9 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -1036,10 +1036,10 @@ void TriangleSelectorGUI::update_render_data() // BBS bool TrianglePatch::is_fragment() const { - return this->area < TriangleSelectorPatch::fragment_area; + return this->area < TriangleSelectorPatch::gap_area; } -float TriangleSelectorPatch::fragment_area = TriangleSelectorPatch::FragmentAreaMin; +float TriangleSelectorPatch::gap_area = TriangleSelectorPatch::GapAreaMin; void TriangleSelectorPatch::render(ImGuiWrapper* imgui) { @@ -1198,7 +1198,7 @@ void TriangleSelectorPatch::update_triangles_per_patch() visited[current_facet] = true; } - patch.area = calc_fragment_area(patch, FragmentAreaMax); + patch.area = calc_fragment_area(patch, GapAreaMax); patch.type = start_facet_state; m_triangle_patches.emplace_back(std::move(patch)); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp index 5e15961e565..caef5b73e31 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp @@ -78,7 +78,7 @@ class TriangleSelectorGUI : public TriangleSelector { void request_update_render_data(bool paint_changed = false) { m_update_render_data = true; - m_paint_changed = paint_changed; + m_paint_changed |= paint_changed; }; // BBS @@ -116,7 +116,7 @@ struct TrianglePatch { std::vector facet_indices; EnforcerBlockerType type = EnforcerBlockerType::NONE; std::set neighbor_types; - // if area is larger than FragmentAreaMax, stop accumulate left triangle areas to improve performance + // if area is larger than GapAreaMax, stop accumulate left triangle areas to improve performance float area = 0.f; bool is_fragment() const; @@ -140,11 +140,11 @@ class TriangleSelectorPatch : public TriangleSelectorGUI { void set_ebt_colors(const std::vector> ebt_colors) { m_ebt_colors = ebt_colors; } void set_filter_state(bool is_filter_state); - constexpr static float FragmentAreaMin = 0.f; - constexpr static float FragmentAreaMax = 5.f; + constexpr static float GapAreaMin = 0.f; + constexpr static float GapAreaMax = 5.f; // BBS: fix me - static float fragment_area; + static float gap_area; protected: // Release the geometry data, release OpenGL VBOs. @@ -265,7 +265,7 @@ class GLGizmoPainterBase : public GLGizmoBase BUCKET_FILL, SMART_FILL, // BBS - FRAGMENT_FILTER, + GAP_FILL, }; struct ProjectedMousePosition diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp index 225965d3b38..7fcb4efb738 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp @@ -466,7 +466,7 @@ bool GLGizmoRotate3D::on_init() m_gizmos[i].set_highlight_color(AXES_COLOR[i]); } - m_shortcut_key = WXK_NONE; + m_shortcut_key = WXK_CONTROL_R; return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp index 2eebe203c7d..a48799ad834 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp @@ -74,7 +74,7 @@ bool GLGizmoScale3D::on_init() // BBS m_grabbers[4].enabled = false; - m_shortcut_key = WXK_NONE; + m_shortcut_key = WXK_CONTROL_S; return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp index 53fb765db44..4c1d837418b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp @@ -28,7 +28,7 @@ bool GLGizmoSeam::on_init() { m_shortcut_key = WXK_CONTROL_P; - m_desc["clipping_of_view"] = _L("Clipping of view") + ": "; + m_desc["clipping_of_view"] = _L("Section view") + ": "; m_desc["reset_direction"] = _L("Reset direction"); m_desc["cursor_size"] = _L("Brush size") + ": "; m_desc["cursor_type"] = _L("Brush shape") + ": "; @@ -38,13 +38,18 @@ bool GLGizmoSeam::on_init() m_desc["block"] = _L("Block seam"); m_desc["remove_caption"] = _L("Shift + Left mouse button") + ": "; m_desc["remove"] = _L("Remove selection"); - m_desc["remove_all"] = _L("Remove all selection"); + m_desc["remove_all"] = _L("Erase all painting"); m_desc["circle"] = _L("Circle"); m_desc["sphere"] = _L("Sphere"); return true; } +GLGizmoSeam::GLGizmoSeam(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) + : GLGizmoPainterBase(parent, icon_filename, sprite_id), m_current_tool(ImGui::CircleButtonIcon) +{ + +} std::string GLGizmoSeam::on_get_name() const @@ -114,6 +119,48 @@ void GLGizmoSeam::render_triangles(const Selection& selection) const } } +void GLGizmoSeam::show_tooltip_information(float caption_max, float x, float y) +{ + ImTextureID normal_id = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TOOLBAR_TOOLTIP); + ImTextureID hover_id = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TOOLBAR_TOOLTIP_HOVER); + + float font_size = ImGui::GetFontSize(); + ImVec2 button_size = ImVec2(font_size * 1.8, font_size * 1.3); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); + ImGui::ImageButton3(normal_id, hover_id, button_size); + + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip2(ImVec2(x, y)); + auto draw_text_with_caption = [this, &caption_max](const wxString &caption, const wxString &text) { + m_imgui->text_colored(ImGuiWrapper::COL_ACTIVE, caption); + ImGui::SameLine(caption_max); + m_imgui->text_colored(ImGuiWrapper::COL_WINDOW_BG, text); + }; + + for (const auto &t : std::array{"enforce", "block", "remove"}) draw_text_with_caption(m_desc.at(t + "_caption"), m_desc.at(t)); + ImGui::EndTooltip(); + } + ImGui::PopStyleVar(1); +} + +void GLGizmoSeam::tool_changed(wchar_t old_tool, wchar_t new_tool) +{ + if ((old_tool == ImGui::GapFillIcon && new_tool == ImGui::GapFillIcon) || + (old_tool != ImGui::GapFillIcon && new_tool != ImGui::GapFillIcon)) + return; + + for (auto& selector_ptr : m_triangle_selectors) { + TriangleSelectorPatch* tsp = dynamic_cast(selector_ptr.get()); + tsp->set_filter_state(new_tool == ImGui::GapFillIcon); + } +} + +static std::string into_u8(const wxString& str) +{ + auto buffer_utf8 = str.utf8_str(); + return std::string(buffer_utf8.data()); +} + void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) { if (! m_c->selection_info()->model_object()) @@ -123,16 +170,17 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) y = std::min(y, bottom_limit - approx_height); //BBS: GUI refactor: move gizmo to the right #if BBS_TOOLBAR_ON_TOP - m_imgui->set_next_window_pos(x, y, ImGuiCond_Always, 0.0f, 0.0f); + GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always, 0.0f, 0.0f); #else - m_imgui->set_next_window_pos(x, y, ImGuiCond_Always, 1.0f, 0.0f); + GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always, 1.0f, 0.0f); #endif //m_imgui->set_next_window_pos(x, y, ImGuiCond_Always); + wchar_t old_tool = m_current_tool; //BBS - ImGuiWrapper::push_toolbar_style(); + ImGuiWrapper::push_toolbar_style(m_parent.get_scale()); - m_imgui->begin(get_name(), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); + GizmoImguiBegin(get_name(), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar); // 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 clipping_slider_left = std::max(m_imgui->calc_text_size(m_desc.at("clipping_of_view")).x, @@ -146,6 +194,7 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) const float button_width = m_imgui->calc_text_size(m_desc.at("remove_all")).x + m_imgui->scaled(1.f); const float minimal_slider_width = m_imgui->scaled(4.f); + const float empty_button_width = m_imgui->calc_button_size("").x; float caption_max = 0.f; float total_text_max = 0.f; @@ -155,7 +204,7 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) } total_text_max += caption_max + m_imgui->scaled(1.f); caption_max += m_imgui->scaled(1.f); - + float slider_width_times = 1.5; const float sliders_left_width = std::max(cursor_size_slider_left, clipping_slider_left); #if ENABLE_ENHANCED_IMGUI_SLIDER_FLOAT const float slider_icon_width = m_imgui->get_slider_icon_size().x; @@ -167,82 +216,89 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) window_width = std::max(window_width, button_width); window_width = std::max(window_width, cursor_type_radio_left + cursor_type_radio_sphere + cursor_type_radio_circle); - auto draw_text_with_caption = [this, &caption_max](const wxString& caption, const wxString& text) { - //BBS set text colored to BLUE_LIGHT - m_imgui->text_colored(ImGuiWrapper::COL_BLUE_LIGHT, caption); - ImGui::SameLine(caption_max); - m_imgui->text(text); - }; + const float max_tooltip_width = ImGui::GetFontSize() * 20.0f; - for (const auto &t : std::array{"enforce", "block", "remove"}) - draw_text_with_caption(m_desc.at(t + "_caption"), m_desc.at(t)); + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc.at("cursor_type")); + std::array tool_icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon}; + std::array tool_tips = { _L("Circle"), _L("Sphere")}; + for (int i = 0; i < tool_icons.size(); i++) { + std::string str_label = std::string("##"); + std::wstring btn_name = tool_icons[i] + boost::nowide::widen(str_label); + + if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.3f)); + + if (m_current_tool == tool_icons[i]) { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.81f, 0.81f, 0.81f, 1.0f)); // r, g, b, a + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.81f, 0.81f, 0.81f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.81f, 0.81f, 0.81f, 1.0f)); + } + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); + bool btn_clicked = ImGui::Button(into_u8(btn_name).c_str()); + ImGui::PopStyleVar(1); + if (m_current_tool == tool_icons[i])ImGui::PopStyleColor(3); + + if (btn_clicked && m_current_tool != tool_icons[i]) { + m_current_tool = tool_icons[i]; + for (auto& triangle_selector : m_triangle_selectors) { + triangle_selector->seed_fill_unselect_all_triangles(); + triangle_selector->request_update_render_data(); + } + } - ImGui::Separator(); + if (ImGui::IsItemHovered()) { + m_imgui->tooltip(tool_tips[i], max_tooltip_width); + } + } - const float max_tooltip_width = ImGui::GetFontSize() * 20.0f; + if (m_current_tool != old_tool) + this->tool_changed(old_tool, m_current_tool); + + ImGui::Dummy(ImVec2(0.0f, ImGui::GetFontSize() * 0.1)); + + if (m_current_tool == ImGui::CircleButtonIcon) { + m_cursor_type = TriangleSelector::CursorType::CIRCLE; + m_tool_type = ToolType::BRUSH; + } else if (m_current_tool == ImGui::SphereButtonIcon) { + m_cursor_type = TriangleSelector::CursorType::SPHERE; + m_tool_type = ToolType::BRUSH; + } ImGui::AlignTextToFramePadding(); m_imgui->text(m_desc.at("cursor_size")); ImGui::SameLine(sliders_left_width); -#if ENABLE_ENHANCED_IMGUI_SLIDER_FLOAT - ImGui::PushItemWidth(window_width - sliders_left_width - slider_icon_width); - m_imgui->slider_float("##cursor_radius", &m_cursor_radius, CursorRadiusMin, CursorRadiusMax, "%.2f", 1.0f, true, _L("Alt + Mouse wheel")); -#else - ImGui::PushItemWidth(window_width - sliders_left_width); - m_imgui->slider_float("##cursor_radius", &m_cursor_radius, CursorRadiusMin, CursorRadiusMax, "%.2f"); - if (ImGui::IsItemHovered()) - m_imgui->tooltip(_L("Alt + Mouse wheel"), max_tooltip_width); -#endif // ENABLE_ENHANCED_IMGUI_SLIDER_FLOAT - ImGui::AlignTextToFramePadding(); - m_imgui->text(m_desc.at("cursor_type")); + ImGui::PushItemWidth(window_width - sliders_left_width - slider_width_times * slider_icon_width); + m_imgui->bbl_slider_float_style("##cursor_radius", &m_cursor_radius, CursorRadiusMin, CursorRadiusMax, "%.2f", 1.0f, true); + ImGui::SameLine(window_width - slider_icon_width); + ImGui::PushItemWidth(1.5 * slider_icon_width); + ImGui::BBLDragFloat("##cursor_radius_input", &m_cursor_radius, 0.05f, 0.0f, 0.0f, "%.2f"); - float cursor_type_offset = cursor_type_radio_left + (window_width - cursor_type_radio_left - cursor_type_radio_sphere - cursor_type_radio_circle + m_imgui->scaled(0.5f)) / 2.f; - ImGui::SameLine(cursor_type_offset); - ImGui::PushItemWidth(cursor_type_radio_sphere); - if (m_imgui->radio_button(m_desc["sphere"], m_cursor_type == TriangleSelector::CursorType::SPHERE)) - m_cursor_type = TriangleSelector::CursorType::SPHERE; + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc.at("clipping_of_view")); - if (ImGui::IsItemHovered()) - m_imgui->tooltip(_L("Paints all facets inside, regardless of their orientation."), max_tooltip_width); + auto clp_dist = float(m_c->object_clipper()->get_position()); + ImGui::SameLine(sliders_left_width); - ImGui::SameLine(cursor_type_offset + cursor_type_radio_sphere); - ImGui::PushItemWidth(cursor_type_radio_circle); - if (m_imgui->radio_button(m_desc["circle"], m_cursor_type == TriangleSelector::CursorType::CIRCLE)) - m_cursor_type = TriangleSelector::CursorType::CIRCLE; + ImGui::PushItemWidth(window_width - sliders_left_width - slider_width_times * slider_icon_width); + bool slider_clp_dist = m_imgui->bbl_slider_float_style("##clp_dist", &clp_dist, 0.f, 1.f, "%.2f", 1.0f, true); - if (ImGui::IsItemHovered()) - m_imgui->tooltip(_L("Ignores facets facing away from the camera."), max_tooltip_width); + ImGui::SameLine(window_width - slider_icon_width); + ImGui::PushItemWidth(1.5 * slider_icon_width); + bool b_clp_dist_input = ImGui::BBLDragFloat("##clp_dist_input", &clp_dist, 0.05f, 0.0f, 0.0f, "%.2f"); + if (slider_clp_dist || b_clp_dist_input) { m_c->object_clipper()->set_position(clp_dist, true); } ImGui::Separator(); - if (m_c->object_clipper()->get_position() == 0.f) { - ImGui::AlignTextToFramePadding(); - m_imgui->text(m_desc.at("clipping_of_view")); - } - else { - if (m_imgui->button(m_desc.at("reset_direction"))) { - wxGetApp().CallAfter([this](){ - m_c->object_clipper()->set_position(-1., false); - }); - } - } - auto clp_dist = float(m_c->object_clipper()->get_position()); - ImGui::SameLine(sliders_left_width); -#if ENABLE_ENHANCED_IMGUI_SLIDER_FLOAT - ImGui::PushItemWidth(window_width - sliders_left_width - slider_icon_width); - if (m_imgui->slider_float("##clp_dist", &clp_dist, 0.f, 1.f, "%.2f", 1.0f, true, _L("Ctrl + Mouse wheel"))) - m_c->object_clipper()->set_position(clp_dist, true); -#else - ImGui::PushItemWidth(window_width - sliders_left_width); - if (m_imgui->slider_float("##clp_dist", &clp_dist, 0.f, 1.f, "%.2f")) - m_c->object_clipper()->set_position(clp_dist, true); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(6.0f, 10.0f)); + float get_cur_y = ImGui::GetContentRegionMax().y + ImGui::GetFrameHeight() + y; + show_tooltip_information(caption_max, x, get_cur_y); - if (ImGui::IsItemHovered()) - m_imgui->tooltip(_L("Ctrl + Mouse wheel"), max_tooltip_width); -#endif // ENABLE_ENHANCED_IMGUI_SLIDER_FLOAT + float f_scale =m_parent.get_gizmos_manager().get_layout_scale(); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6.0f, 4.0f * f_scale)); + + ImGui::SameLine(); - ImGui::Separator(); if (m_imgui->button(m_desc.at("remove_all"))) { Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Reset selection", UndoRedo::SnapshotType::GizmoAction); ModelObject *mo = m_c->selection_info()->model_object(); @@ -251,19 +307,29 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) if (mv->is_model_part()) { ++idx; m_triangle_selectors[idx]->reset(); - m_triangle_selectors[idx]->request_update_render_data(); + m_triangle_selectors[idx]->request_update_render_data(true); } update_model_object(); m_parent.set_as_dirty(); } - - m_imgui->end(); + ImGui::PopStyleVar(2); + GizmoImguiEnd(); //BBS ImGuiWrapper::pop_toolbar_style(); } +// BBS +void GLGizmoSeam::on_set_state() +{ + GLGizmoPainterBase::on_set_state(); + + if (get_state() == Off) { + ModelObject* mo = m_c->selection_info()->model_object(); + if (mo) Slic3r::save_object_mesh(*mo); + } +} //BBS: remove const void GLGizmoSeam::update_model_object() @@ -281,9 +347,6 @@ void GLGizmoSeam::update_model_object() if (updated) { const ModelObjectPtrs& mos = wxGetApp().model().objects; wxGetApp().obj_list()->update_info_items(std::find(mos.begin(), mos.end(), mo) - mos.begin()); - - // BBS: backup - Slic3r::save_object_mesh(*mo); m_parent.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); } } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp index 5f2e0949543..952c1b18b19 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp @@ -8,17 +8,24 @@ namespace Slic3r::GUI { class GLGizmoSeam : public GLGizmoPainterBase { public: - GLGizmoSeam(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) - : GLGizmoPainterBase(parent, icon_filename, sprite_id) {} + GLGizmoSeam(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); void render_painter_gizmo() const override; protected: + // BBS + void on_set_state() override; + + wchar_t m_current_tool = 0; void on_render_input_window(float x, float y, float bottom_limit) override; std::string on_get_name() const override; PainterGizmoType get_painter_type() const override; - void render_triangles(const Selection& selection) const override; + void render_triangles(const Selection &selection) const override; + + void show_tooltip_information(float caption_max, float x, float y); + + void tool_changed(wchar_t old_tool, wchar_t new_tool); wxString handle_snapshot_action_name(bool shift_down, Button button_down) const override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 7f33b1dece2..21a8be5bc67 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -22,7 +22,6 @@ #include "slic3r/GUI/Gizmos/GLGizmoSeam.hpp" #include "slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp" #include "slic3r/GUI/Gizmos/GLGizmoSimplify.hpp" -#include "slic3r/GUI/Gizmos/GLGizmoModifier.hpp" #include "libslic3r/format.hpp" #include "libslic3r/Model.hpp" @@ -146,10 +145,9 @@ bool GLGizmosManager::init() m_gizmos.emplace_back(new GLGizmoFlatten(m_parent, "toolbar_flatten.svg", EType::Flatten)); m_gizmos.emplace_back(new GLGizmoAdvancedCut(m_parent, "toolbar_cut.svg", EType::Cut)); m_gizmos.emplace_back(new GLGizmoFdmSupports(m_parent, "toolbar_support.svg", EType::FdmSupports)); + m_gizmos.emplace_back(new GLGizmoSeam(m_parent, "toolbar_seam.svg", EType::Seam)); m_gizmos.emplace_back(new GLGizmoMmuSegmentation(m_parent, "mmu_segmentation.svg", EType::MmuSegmentation)); m_gizmos.emplace_back(new GLGizmoSimplify(m_parent, "reduce_triangles.svg", EType::Simplify)); - //m_gizmos.emplace_back(new GLGizmoModifier(m_parent, "toolbar_modifier.svg", EType::Modifier)); - //m_gizmos.emplace_back(new GLGizmoSeam(m_parent, "toolbar_seam.svg", EType::Seam)); //m_gizmos.emplace_back(new GLGizmoSlaSupports(m_parent, "sla_supports.svg", sprite_id++)); //m_gizmos.emplace_back(new GLGizmoFaceDetector(m_parent, "face recognition.svg", sprite_id++)); //m_gizmos.emplace_back(new GLGizmoHollow(m_parent, "hollow.svg", sprite_id++)); @@ -199,6 +197,11 @@ bool GLGizmosManager::init_icon_textures() return true; } +float GLGizmosManager::get_layout_scale() +{ + return m_layout.scale; +} + bool GLGizmosManager::init_arrow(const BackgroundTexture::Metadata& arrow_texture) { if (m_arrow_texture.texture.get_id() != 0) @@ -515,12 +518,8 @@ void GLGizmosManager::set_painter_gizmo_data() return; dynamic_cast(m_gizmos[FdmSupports].get())->set_painter_gizmo_data(m_parent.get_selection()); + dynamic_cast(m_gizmos[Seam].get())->set_painter_gizmo_data(m_parent.get_selection()); dynamic_cast(m_gizmos[MmuSegmentation].get())->set_painter_gizmo_data(m_parent.get_selection()); - if (Seam < m_gizmos.size()) { - GLGizmoSeam* gizmo_seam = dynamic_cast(m_gizmos[Seam].get()); - if (gizmo_seam != nullptr) - gizmo_seam->set_painter_gizmo_data(m_parent.get_selection()); - } } // Returns true if the gizmo used the event to do something, false otherwise. diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp index 5b7bbfd8459..20584e7c472 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -71,10 +71,9 @@ class GLGizmosManager : public Slic3r::ObjectBase Flatten, Cut, FdmSupports, + Seam, MmuSegmentation, Simplify, - Modifier, - Seam, SlaSupports, // BBS //FaceRecognition, @@ -159,6 +158,8 @@ class GLGizmosManager : public Slic3r::ObjectBase bool init_icon_textures(); + float get_layout_scale(); + bool init_arrow(const BackgroundTexture::Metadata& arrow_texture); template diff --git a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp index 5b7dbe2f494..e625f0e3d05 100644 --- a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp +++ b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp @@ -98,7 +98,7 @@ void GizmoObjectManipulation::update_settings_value(const Selection& selection) if (m_world_coordinates) { m_new_rotate_label_string = L("Rotate"); - m_new_rotation = Vec3d::Zero(); + m_new_rotation = volume->get_instance_rotation() * (180. / M_PI); m_new_size = selection.get_scaled_instance_bounding_box().size(); m_new_scale = m_new_size.cwiseProduct(selection.get_unscaled_instance_bounding_box().size().cwiseInverse()) * 100.; } @@ -550,7 +550,7 @@ void GizmoObjectManipulation::do_render_move_window(ImGuiWrapper *imgui_wrapper, #endif // BBS - ImGuiWrapper::push_toolbar_style(); + ImGuiWrapper::push_toolbar_style(m_glcanvas.get_scale()); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0, 6.0)); std::string name = this->m_new_title_string + "##" + window_name; @@ -664,7 +664,7 @@ void GizmoObjectManipulation::do_render_rotate_window(ImGuiWrapper *imgui_wrappe #endif // BBS - ImGuiWrapper::push_toolbar_style(); + ImGuiWrapper::push_toolbar_style(m_glcanvas.get_scale()); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0, 6.0)); std::string name = this->m_new_title_string + "##" + window_name; @@ -783,7 +783,7 @@ void GizmoObjectManipulation::do_render_scale_input_window(ImGuiWrapper* imgui_w #endif //BBS - ImGuiWrapper::push_toolbar_style(); + ImGuiWrapper::push_toolbar_style(m_glcanvas.get_scale()); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0, 6.0)); std::string name = this->m_new_title_string + "##" + window_name; diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index 44376d35f46..ac3c0da2b1d 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -1238,7 +1238,7 @@ bool IMSlider::render(int canvas_width, int canvas_height) void IMSlider::render_menu() { - ImGuiWrapper::push_menu_style(); + ImGuiWrapper::push_menu_style(m_scale); std::vector colors = wxGetApp().plater()->get_extruder_colors_from_plater_config(); int extruder_num = colors.size(); @@ -1246,24 +1246,25 @@ void IMSlider::render_menu() ImGui::OpenPopup("slider_menu_popup"); } + ImGui::PushStyleVar(ImGuiStyleVar_::ImGuiStyleVar_ChildRounding, 4.0f * m_scale); if (ImGui::BeginPopup("slider_menu_popup")) { - bool selected = false; - ImGui::MenuItem(_u8L("Add Pause").c_str(), "", &selected); - if (selected) { add_code_as_tick(PausePrint); } + if(menu_item_with_icon(_u8L("Add Pause").c_str(), "")) { add_code_as_tick(PausePrint); } //BBS render this menu item only when extruder_num > 1 if (extruder_num > 1) { - if (ImGui::BeginMenu(_u8L("Change Filament").c_str())) { + if (begin_menu(_u8L("Change Filament").c_str())) { for (int i = 0; i < extruder_num; i++) { std::array rgba = decode_color_to_float_array(colors[i]); ImU32 icon_clr = IM_COL32(rgba[0] * 255.0f, rgba[1] * 255.0f, rgba[2] * 255.0f, rgba[3] * 255.0f); - if (menu_item_with_icon((_u8L("Filament ") + std::to_string(i + 1)).c_str(), "", icon_clr, false, true)) add_code_as_tick(ToolChange, i + 1); + if (menu_item_with_icon((_u8L("Filament ") + std::to_string(i + 1)).c_str(), "", ImVec2(14, 14) * m_scale, icon_clr)) add_code_as_tick(ToolChange, i + 1); } - ImGui::EndMenu(); + end_menu(); } } ImGui::EndPopup(); } + ImGui::PopStyleVar(1); + ImGuiWrapper::pop_menu_style(); } diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 18a784b938d..b5e88cd155c 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -58,10 +58,10 @@ static const std::map font_icons = { {ImGui::SliderFloatEditBtnIcon, "edit_button" }, #endif // ENABLE_ENHANCED_IMGUI_SLIDER_FLOAT {ImGui::CircleButtonIcon , "circle_paint" }, - {ImGui::TriangleButtonIcon , "Triangle_paint" }, + {ImGui::TriangleButtonIcon , "triangle_paint" }, {ImGui::FillButtonIcon , "fill_paint" }, {ImGui::HeightRangeIcon , "height_range" }, - {ImGui::FragmentFilterIcon , "fragment_filter" }, + {ImGui::GapFillIcon , "gap_fill" }, {ImGui::FoldButtonIcon , "im_fold" }, {ImGui::UnfoldButtonIcon , "im_unfold" }, {ImGui::SphereButtonIcon , "toolbar_modifier_sphere" }, @@ -196,7 +196,7 @@ bool slider_behavior(ImGuiID id, const ImRect& region, const ImS32 v_min, const mouse_wheel_responsive_region = ImRect(region.Min - ImVec2(0, handle_sz.y), region.Max + ImVec2(0, handle_sz.y)); if (ImGui::ItemHoverable(mouse_wheel_responsive_region, id)) { #ifdef __APPLE__ - if (io.KeyShift) + if (io.KeyShift) v_new = ImClamp(*out_value - 5 * (ImS32) (context.IO.MouseWheel), v_min, v_max); else if (io.KeyCtrl) v_new = ImClamp(*out_value + 5 * (ImS32) (context.IO.MouseWheel), v_min, v_max); @@ -236,7 +236,7 @@ bool slider_behavior(ImGuiID id, const ImRect& region, const ImS32 v_min, const { v_new = fixed_value; } - + // apply result, output value if (*out_value != v_new) { @@ -291,56 +291,6 @@ bool button_with_pos(ImTextureID user_texture_id, const ImVec2 &size, const ImVe return pressed; } -bool menu_item_with_icon(const char* label, const char* shortcut, ImU32 icon_color, bool selected, bool enabled/* = true*/) { - ImGuiWindow* window = ImGui::GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - ImGuiStyle& style = g.Style; - ImVec2 pos = window->DC.CursorPos; - ImVec2 label_size = ImGui::CalcTextSize(label, NULL, true); - - // We've been using the equivalent of ImGuiSelectableFlags_SetNavIdOnHover on all Selectable() since early Nav system days (commit 43ee5d73), - // but I am unsure whether this should be kept at all. For now moved it to be an opt-in feature used by menus only. - ImGuiSelectableFlags flags = ImGuiSelectableFlags_SelectOnRelease | ImGuiSelectableFlags_SetNavIdOnHover | (enabled ? 0 : ImGuiSelectableFlags_Disabled); - bool pressed; - if (window->DC.LayoutType == ImGuiLayoutType_Horizontal) - { - // Mimic the exact layout spacing of BeginMenu() to allow MenuItem() inside a menu bar, which is a little misleading but may be useful - // Note that in this situation: we don't render the shortcut, we render a highlight instead of the selected tick mark. - float w = label_size.x; - window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f); - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y)); - pressed = ImGui::Selectable(label, selected, flags, ImVec2(w, 0.0f)); - ImGui::PopStyleVar(); - window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar(). - } - else - { - // Menu item inside a vertical menu - // (In a typical menu window where all items are BeginMenu() or MenuItem() calls, extra_w will always be 0.0f. - // Only when they are other items sticking out we're going to add spacing, yet only register minimum width into the layout system. - float shortcut_w = shortcut ? ImGui::CalcTextSize(shortcut, NULL).x : 0.0f; - float min_w = window->DC.MenuColumns.DeclColumns(label_size.x, shortcut_w, IM_FLOOR(g.FontSize * 1.20f)); // Feedback for next frame - float extra_w = std::max(0.0f, ImGui::GetContentRegionAvail().x - min_w); - pressed = ImGui::Selectable(label, false, flags | ImGuiSelectableFlags_SpanAvailWidth, ImVec2(min_w, 0.0f)); - ImVec2 pos_min = pos + ImVec2(window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f, g.FontSize * 0.134f * 0.5f); - ImGui::RenderFrame(pos_min, pos_min + ImVec2(14, 14), icon_color); - if (shortcut_w > 0.0f) - { - ImGui::PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]); - ImGui::RenderText(pos + ImVec2(window->DC.MenuColumns.Pos[1] + extra_w, 0.0f), shortcut, NULL, false); - ImGui::PopStyleColor(); - } - if (selected) - ImGui::RenderCheckMark(window->DrawList, pos + ImVec2(window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f, g.FontSize * 0.134f * 0.5f), ImGui::GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled), g.FontSize * 0.866f); - } - - IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.LastItemStatusFlags | ImGuiItemStatusFlags_Checkable | (selected ? ImGuiItemStatusFlags_Checked : 0)); - return pressed; -} - ImGuiWrapper::ImGuiWrapper() { ImGui::CreateContext(); @@ -606,7 +556,7 @@ bool ImGuiWrapper::bbl_slider_float_style(const std::string &label, float *v, fl bool ImGuiWrapper::bbl_slider_float(const std::string& label, float* v, float v_min, float v_max, const char* format, float power, bool clamp, const wxString& tooltip) { - + const float max_tooltip_width = ImGui::GetFontSize() * 20.0f; // let the label string start with "##" to hide the automatic label from ImGui::SliderFloat() @@ -969,7 +919,7 @@ bool ImGuiWrapper::combo(const wxString& label, const std::vector& return res; } -// Scroll up for one item +// Scroll up for one item static void scroll_up() { ImGuiContext& g = *GImGui; @@ -981,7 +931,7 @@ static void scroll_up() ImGui::SetScrollY(win_top - item_size_y); } -// Scroll down for one item +// Scroll down for one item static void scroll_down() { ImGuiContext& g = *GImGui; @@ -1170,14 +1120,17 @@ static bool selectable(const char* label, bool selected, ImGuiSelectableFlags fl // mark a label with a ColorMarkerHovered, if item is hovered char marked_label[512]; //255 symbols is not enough for translated string (e.t. to Russian) - if (hovered) + if (hovered || selected) { sprintf(marked_label, "%c%s", ImGui::ColorMarkerHovered, label); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); + } else strcpy(marked_label, label); if (flags & ImGuiSelectableFlags_Disabled) ImGui::PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); ImGui::RenderTextClipped(text_min, text_max, marked_label, NULL, &label_size, style.SelectableTextAlign, &bb); if (flags & ImGuiSelectableFlags_Disabled) ImGui::PopStyleColor(); + if (hovered || selected) ImGui::PopStyleColor(); // Automatically close popups if (pressed && (window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiSelectableFlags_DontClosePopups) && !(g.CurrentItemFlags & ImGuiItemFlags_SelectableDontClosePopup)) @@ -1187,6 +1140,228 @@ static bool selectable(const char* label, bool selected, ImGuiSelectableFlags fl return pressed; } +bool begin_menu(const char *label, bool enabled) +{ + ImGuiWindow *window = ImGui::GetCurrentWindow(); + if (window->SkipItems) return false; + + ImGuiContext & g = *GImGui; + const ImGuiStyle &style = g.Style; + const ImGuiID id = window->GetID(label); + bool menu_is_open = ImGui::IsPopupOpen(id, ImGuiPopupFlags_None); + + // Sub-menus are ChildWindow so that mouse can be hovering across them (otherwise top-most popup menu would steal focus and not allow hovering on parent menu) + ImGuiWindowFlags flags = ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | + ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoNavFocus; + if (window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) flags |= ImGuiWindowFlags_ChildWindow; + + // If a menu with same the ID was already submitted, we will append to it, matching the behavior of Begin(). + // We are relying on a O(N) search - so O(N log N) over the frame - which seems like the most efficient for the expected small amount of BeginMenu() calls per frame. + // If somehow this is ever becoming a problem we can switch to use e.g. ImGuiStorage mapping key to last frame used. + if (g.MenusIdSubmittedThisFrame.contains(id)) { + if (menu_is_open) + menu_is_open = ImGui::BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display) + else + g.NextWindowData.ClearFlags(); // we behave like Begin() and need to consume those values + return menu_is_open; + } + + // Tag menu as used. Next time BeginMenu() with same ID is called it will append to existing menu + g.MenusIdSubmittedThisFrame.push_back(id); + + ImVec2 label_size = ImGui::CalcTextSize(label, NULL, true); + bool pressed; + bool menuset_is_open = !(window->Flags & ImGuiWindowFlags_Popup) && + (g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].OpenParentId == window->IDStack.back()); + ImGuiWindow *backed_nav_window = g.NavWindow; + if (menuset_is_open) g.NavWindow = window; // Odd hack to allow hovering across menus of a same menu-set (otherwise we wouldn't be able to hover parent) + + // The reference position stored in popup_pos will be used by Begin() to find a suitable position for the child menu, + // However the final position is going to be different! It is chosen by FindBestWindowPosForPopup(). + // e.g. Menus tend to overlap each other horizontally to amplify relative Z-ordering. + ImVec2 popup_pos, pos = window->DC.CursorPos; + if (window->DC.LayoutType == ImGuiLayoutType_Horizontal) { + // Menu inside an horizontal menu bar + // Selectable extend their highlight by half ItemSpacing in each direction. + // For ChildMenu, the popup position will be overwritten by the call to FindBestWindowPosForPopup() in Begin() + popup_pos = ImVec2(pos.x - 1.0f - IM_FLOOR(style.ItemSpacing.x * 0.5f), pos.y - style.FramePadding.y + window->MenuBarHeight()); + window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y)); + float w = label_size.x; + pressed = selectable(label, menu_is_open, + ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_SelectOnClick | ImGuiSelectableFlags_DontClosePopups | + (!enabled ? ImGuiSelectableFlags_Disabled : 0), + ImVec2(w, 0.0f)); + ImGui::PopStyleVar(); + window->DC.CursorPos.x += IM_FLOOR( + style.ItemSpacing.x * + (-1.0f + + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar(). + } else { + // Menu inside a menu + // (In a typical menu window where all items are BeginMenu() or MenuItem() calls, extra_w will always be 0.0f. + // Only when they are other items sticking out we're going to add spacing, yet only register minimum width into the layout system. + popup_pos = ImVec2(pos.x, pos.y - style.WindowPadding.y); + float min_w = window->DC.MenuColumns.DeclColumns(label_size.x, 0.0f, IM_FLOOR(g.FontSize * 1.20f)); // Feedback to next frame + float extra_w = ImMax(0.0f, ImGui::GetContentRegionAvail().x - min_w); + pressed = selectable(label, menu_is_open, + ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_SelectOnClick | ImGuiSelectableFlags_DontClosePopups | + ImGuiSelectableFlags_SpanAvailWidth | (!enabled ? ImGuiSelectableFlags_Disabled : 0), + ImVec2(min_w, 0.0f)); + ImU32 text_col = ImGui::GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled); + ImGui::RenderArrow(window->DrawList, pos + ImVec2(window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.30f, 0.0f), text_col, ImGuiDir_Right); + } + + const bool hovered = enabled && ImGui::ItemHoverable(window->DC.LastItemRect, id); + if (menuset_is_open) g.NavWindow = backed_nav_window; + + bool want_open = false; + bool want_close = false; + if (window->DC.LayoutType == ImGuiLayoutType_Vertical) // (window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu)) + { + // Close menu when not hovering it anymore unless we are moving roughly in the direction of the menu + // Implement http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown to avoid using timers, so menus feels more reactive. + bool moving_toward_other_child_menu = false; + + ImGuiWindow *child_menu_window = (g.BeginPopupStack.Size < g.OpenPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].SourceWindow == window) ? + g.OpenPopupStack[g.BeginPopupStack.Size].Window : + NULL; + if (g.HoveredWindow == window && child_menu_window != NULL && !(window->Flags & ImGuiWindowFlags_MenuBar)) { + // FIXME-DPI: Values should be derived from a master "scale" factor. + ImRect next_window_rect = child_menu_window->Rect(); + ImVec2 ta = g.IO.MousePos - g.IO.MouseDelta; + ImVec2 tb = (window->Pos.x < child_menu_window->Pos.x) ? next_window_rect.GetTL() : next_window_rect.GetTR(); + ImVec2 tc = (window->Pos.x < child_menu_window->Pos.x) ? next_window_rect.GetBL() : next_window_rect.GetBR(); + float extra = ImClamp(ImFabs(ta.x - tb.x) * 0.30f, 5.0f, 30.0f); // add a bit of extra slack. + ta.x += (window->Pos.x < child_menu_window->Pos.x) ? -0.5f : +0.5f; // to avoid numerical issues + tb.y = ta.y + + ImMax((tb.y - extra) - ta.y, -100.0f); // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale? + tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +100.0f); + moving_toward_other_child_menu = ImTriangleContainsPoint(ta, tb, tc, g.IO.MousePos); + // GetForegroundDrawList()->AddTriangleFilled(ta, tb, tc, moving_within_opened_triangle ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); // [DEBUG] + } + if (menu_is_open && !hovered && g.HoveredWindow == window && g.HoveredIdPreviousFrame != 0 && g.HoveredIdPreviousFrame != id && !moving_toward_other_child_menu) + want_close = true; + + if (!menu_is_open && hovered && pressed) // Click to open + want_open = true; + else if (!menu_is_open && hovered && !moving_toward_other_child_menu) // Hover to open + want_open = true; + + if (g.NavActivateId == id) { + want_close = menu_is_open; + want_open = !menu_is_open; + } + if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Right) // Nav-Right to open + { + want_open = true; + ImGui::NavMoveRequestCancel(); + } + } else { + // Menu bar + if (menu_is_open && pressed && menuset_is_open) // Click an open menu again to close it + { + want_close = true; + want_open = menu_is_open = false; + } else if (pressed || (hovered && menuset_is_open && !menu_is_open)) // First click to open, then hover to open others + { + want_open = true; + } else if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Down) // Nav-Down to open + { + want_open = true; + ImGui::NavMoveRequestCancel(); + } + } + + if (!enabled) // explicitly close if an open menu becomes disabled, facilitate users code a lot in pattern such as 'if (BeginMenu("options", has_object)) { ..use object.. }' + want_close = true; + if (want_close && ImGui::IsPopupOpen(id, ImGuiPopupFlags_None)) ImGui::ClosePopupToLevel(g.BeginPopupStack.Size, true); + + IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.LastItemStatusFlags | ImGuiItemStatusFlags_Openable | (menu_is_open ? ImGuiItemStatusFlags_Opened : 0)); + + if (!menu_is_open && want_open && g.OpenPopupStack.Size > g.BeginPopupStack.Size) { + // Don't recycle same menu level in the same frame, first close the other menu and yield for a frame. + ImGui::OpenPopup(label); + return false; + } + + menu_is_open |= want_open; + if (want_open) ImGui::OpenPopup(label); + + if (menu_is_open) { + ImGui::SetNextWindowPos(popup_pos, + ImGuiCond_Always); // Note: this is super misleading! The value will serve as reference for FindBestWindowPosForPopup(), not actual pos. + menu_is_open = ImGui::BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display) + } else { + g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values + } + + return menu_is_open; +} + +void end_menu() +{ + ImGui::EndMenu(); +} + +bool menu_item_with_icon(const char *label, const char *shortcut, ImVec2 icon_size /* = ImVec2(0, 0)*/, ImU32 icon_color /* = 0*/, bool selected /* = false*/, bool enabled /* = true*/) +{ + ImGuiWindow *window = ImGui::GetCurrentWindow(); + if (window->SkipItems) return false; + + ImGuiContext &g = *GImGui; + ImGuiStyle & style = g.Style; + ImVec2 pos = window->DC.CursorPos; + ImVec2 label_size = ImGui::CalcTextSize(label, NULL, true); + + // We've been using the equivalent of ImGuiSelectableFlags_SetNavIdOnHover on all Selectable() since early Nav system days (commit 43ee5d73), + // but I am unsure whether this should be kept at all. For now moved it to be an opt-in feature used by menus only. + ImGuiSelectableFlags flags = ImGuiSelectableFlags_SelectOnRelease | ImGuiSelectableFlags_SetNavIdOnHover | (enabled ? 0 : ImGuiSelectableFlags_Disabled); + bool pressed; + if (window->DC.LayoutType == ImGuiLayoutType_Horizontal) { + // Mimic the exact layout spacing of BeginMenu() to allow MenuItem() inside a menu bar, which is a little misleading but may be useful + // Note that in this situation: we don't render the shortcut, we render a highlight instead of the selected tick mark. + float w = label_size.x; + window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y)); + pressed = ImGui::Selectable(label, selected, flags, ImVec2(w, 0.0f)); + ImGui::PopStyleVar(); + window->DC.CursorPos.x += IM_FLOOR( + style.ItemSpacing.x * + (-1.0f + + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar(). + } else { + // Menu item inside a vertical menu + // (In a typical menu window where all items are BeginMenu() or MenuItem() calls, extra_w will always be 0.0f. + // Only when they are other items sticking out we're going to add spacing, yet only register minimum width into the layout system. + float shortcut_w = shortcut ? ImGui::CalcTextSize(shortcut, NULL).x : 0.0f; + float min_w = window->DC.MenuColumns.DeclColumns(label_size.x, shortcut_w, IM_FLOOR(g.FontSize * 1.20f)); // Feedback for next frame + float extra_w = std::max(0.0f, ImGui::GetContentRegionAvail().x - min_w); + pressed = selectable(label, false, flags | ImGuiSelectableFlags_SpanAvailWidth, ImVec2(min_w, 0.0f)); + + if (icon_size.x != 0 && icon_size.y != 0) { + float selectable_pos_y = pos.y + -0.5f * style.ItemSpacing.y; + float icon_pos_y = selectable_pos_y + (label_size.y + style.ItemSpacing.y - icon_size.y) / 2; + float icon_pos_x = pos.x + window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f; + ImVec2 icon_pos = ImVec2(icon_pos_x, icon_pos_y); + ImGui::RenderFrame(icon_pos, icon_pos + icon_size, icon_color); + } + + if (shortcut_w > 0.0f) { + ImGui::PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]); + ImGui::RenderText(pos + ImVec2(window->DC.MenuColumns.Pos[1] + extra_w, 0.0f), shortcut, NULL, false); + ImGui::PopStyleColor(); + } + if (selected) { + //ImGui::RenderCheckMark(window->DrawList, pos + ImVec2(window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f, g.FontSize * 0.134f * 0.5f), + // ImGui::GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled), g.FontSize * 0.866f); + } + } + + IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.LastItemStatusFlags | ImGuiItemStatusFlags_Checkable | (selected ? ImGuiItemStatusFlags_Checked : 0)); + return pressed; +} + // Scroll so that the hovered item is at the top of the window static void scroll_y(int hover_id) { @@ -1229,7 +1404,7 @@ void ImGuiWrapper::search_list(const ImVec2& size_, bool (*items_getter)(int, co { int& hovered_id = view_params.hovered_id; // ImGui::ListBoxHeader("", size); - { + { // rewrote part of function to add a TextInput instead of label Text ImGuiContext& g = *GImGui; ImGuiWindow* window = ImGui::GetCurrentWindow(); @@ -1445,13 +1620,13 @@ std::vector ImGuiWrapper::load_svg(const std::string& bitmap_name //BBS -void ImGuiWrapper::push_toolbar_style() +void ImGuiWrapper::push_toolbar_style(const float scale) { - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f); - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0f, 10.0f)); - ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3.0f); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0f, 10.0f) * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3.0f * scale); ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(10.0f, 10.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(10.0f, 10.0f) * scale); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(50/255.0f, 58/255.0f, 61/255.0f, 1.00f)); // 1 ImGui::PushStyleColor(ImGuiCol_WindowBg, ImGuiWrapper::COL_WINDOW_BG); // 2 ImGui::PushStyleColor(ImGuiCol_TitleBg, ImGuiWrapper::COL_TITLE_BG); // 3 @@ -1476,11 +1651,11 @@ void ImGuiWrapper::pop_toolbar_style() ImGui::PopStyleVar(5); } -void ImGuiWrapper::push_menu_style() +void ImGuiWrapper::push_menu_style(const float scale) { - ImGuiWrapper::push_toolbar_style(); - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(10.0f, 10.0f)); - ImGui::PushStyleVar(ImGuiStyleVar_PopupRounding, 4.0f); + ImGuiWrapper::push_toolbar_style(scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(10.0f, 10.0f) * scale); + ImGui::PushStyleVar(ImGuiStyleVar_PopupRounding, 4.0f * scale); ImGui::PushStyleVar(ImGuiStyleVar_PopupBorderSize, 0.0f); ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BG); ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); diff --git a/src/slic3r/GUI/ImGuiWrapper.hpp b/src/slic3r/GUI/ImGuiWrapper.hpp index db57b95cb71..8cb579f504c 100644 --- a/src/slic3r/GUI/ImGuiWrapper.hpp +++ b/src/slic3r/GUI/ImGuiWrapper.hpp @@ -37,7 +37,9 @@ bool button_with_pos(ImTextureID user_texture_id, const ImVec4 &bg_col = ImVec4(0, 0, 0, 0), const ImVec4 &tint_col = ImVec4(1, 1, 1, 1), const ImVec2 &margin = ImVec2(0, 0)); -bool menu_item_with_icon(const char* label, const char* shortcut, ImU32 icon_color, bool selected, bool enabled = true); +bool begin_menu(const char *label, bool enabled = true); +void end_menu(); +bool menu_item_with_icon(const char *label, const char *shortcut, ImVec2 icon_size = ImVec2(0, 0), ImU32 icon_color = 0, bool selected = false, bool enabled = true); class ImGuiWrapper @@ -181,9 +183,9 @@ class ImGuiWrapper static const ImVec4 COL_SEPARATOR; //BBS - static void push_toolbar_style(); + static void push_toolbar_style(const float scale); static void pop_toolbar_style(); - static void push_menu_style(); + static void push_menu_style(const float scale); static void pop_menu_style(); //BBS diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index ba1a3e2415b..54758205860 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -403,7 +403,7 @@ void ArrangeJob::prepare() int state = m_plater->get_prepare_state(); if (state == Job::JobPrepareState::PREPARE_STATE_DEFAULT) { only_on_partplate = false; - prepare_selected(); + prepare_all(); } else if (state == Job::JobPrepareState::PREPARE_STATE_MENU) { only_on_partplate = true; // only arrange items on current plate @@ -412,7 +412,7 @@ void ArrangeJob::prepare() //add the virtual object into unselect list if has m_plater->get_partplate_list().preprocess_exclude_areas(m_unselected, MAX_NUM_PLATES); - + #if SAVE_ARRANGE_POLY if (1) { // subtract excluded region and get a polygon bed @@ -508,16 +508,8 @@ void ArrangeJob::process() double skirt_distance = print.has_skirt() ? print.config().skirt_distance.value : 0; - bool is_auto_brim = print.has_auto_brim(); double brim_max = 0; - if (is_auto_brim) { - brim_max = 0; - std::for_each(m_selected.begin(), m_selected.end(), [&](ArrangePolygon ap) { brim_max = std::max(brim_max, ap.auto_brim_width); }); - } - else { - brim_max = print.has_brim() ? print.default_object_config().brim_width : 0; - std::for_each(m_selected.begin(), m_selected.end(), [&](ArrangePolygon ap) { brim_max = std::max(brim_max, ap.user_brim_width); }); - } + std::for_each(m_selected.begin(), m_selected.end(), [&](ArrangePolygon ap) { brim_max = std::max(brim_max, ap.brim_width); }); // Note: skirt_distance is now defined between outermost brim and skirt, not the object and skirt. // So we can't do max but do adding instead. @@ -558,10 +550,8 @@ void ArrangeJob::process() params.stopcondition = [this]() { return was_canceled(); }; - auto count = unsigned(m_selected.size());// + m_unprintable.size()); - params.progressind = [this, count](unsigned num_finished, std::string str="") { - // if (num_finished >= 0 && num_finished <= count) - // update_status(int(float(num_finished) / count * 100), _L("Arranging") + " "+str); + params.progressind = [this](unsigned num_finished, std::string str="") { + update_status(num_finished, _L("Arranging") + " " + str); }; if(!params.is_seq_print) @@ -610,7 +600,7 @@ void ArrangeJob::process() } // finalize just here. - update_status(100, + update_status(status_range(), was_canceled() ? _(L("Arranging canceled.")) : we_have_unpackable_items ? _(L("Arranging is done but there are unpacked items. Reduce spacing and try again.")) : _(L("Arranging done."))); } diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.hpp b/src/slic3r/GUI/Jobs/ArrangeJob.hpp index be6205bae90..340d867a903 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.hpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.hpp @@ -59,7 +59,8 @@ class ArrangeJob : public PlaterJob int status_range() const override { - return int(m_selected.size() + m_unprintable.size()); + // ensure finalize() is called after all operations in process() is finished. + return int(m_selected.size() + m_unprintable.size() + 1); } void finalize() override; diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index 7c3229fa21d..db760503add 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -101,10 +101,10 @@ void PrintJob::process() int curr_percent = 10; if (this->connection_type == "lan") { - msg = sending_over_lan_str; + msg = _L("Sending print job over LAN"); } else { - msg = sending_over_cloud_str; + msg = _L("Sending print job through cloud service"); } int result = -1; diff --git a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp index 3aa9a1b0583..52ba95e306e 100644 --- a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp +++ b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp @@ -46,12 +46,12 @@ void UpgradeNetworkJob::process() { // downloading int result = 0; - + AppConfig* app_config = wxGetApp().app_config; if (!app_config) return; - BOOST_LOG_TRIVIAL(info) << "[download_plugin]: enter"; + BOOST_LOG_TRIVIAL(info) << "[UpgradeNetworkJob process]: enter"; // get temp path fs::path target_file_path = (fs::temp_directory_path() / "network_plugin.zip"); @@ -74,7 +74,7 @@ void UpgradeNetworkJob::process() } curr_percent = percent; }, cancel_fn); - + if (was_canceled()) { update_status(0, _L("Cancelled")); wxCommandEvent event(wxEVT_CLOSE_WINDOW); @@ -84,7 +84,7 @@ void UpgradeNetworkJob::process() } if (result < 0) { - update_status(curr_percent, _L("Download failed")); + update_status(0, _L("Download failed")); wxCommandEvent event(EVT_UPGRADE_NETWORK_FAILED); event.SetEventObject(m_event_handle); wxPostEvent(m_event_handle, event); @@ -108,7 +108,7 @@ void UpgradeNetworkJob::process() } if (result != 0) { - update_status(curr_percent, _L("Install failed")); + update_status(0, _L("Install failed")); wxCommandEvent event(EVT_UPGRADE_NETWORK_FAILED); event.SetEventObject(m_event_handle); wxPostEvent(m_event_handle, event); @@ -118,6 +118,7 @@ void UpgradeNetworkJob::process() wxCommandEvent event(EVT_UPGRADE_NETWORK_SUCCESS); event.SetEventObject(m_event_handle); wxPostEvent(m_event_handle, event); + BOOST_LOG_TRIVIAL(info) << "[UpgradeNetworkJob process]: exit"; return; } diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index ab294f8da80..ef26876e954 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -178,28 +178,14 @@ void KBShortcutsDialog::fill_shortcuts() // File>Import { ctrl + "I", L("Import geometry data from STL/STEP/3MF/OBJ/AMF files.") }, // Edit - { ctrl + "A", L("Select all objects") }, - { ctrl + "D", L("Delete all") }, - { ctrl + "Z", L("Undo") }, - { ctrl + "Y", L("Redo") }, { ctrl + "X", L("Cut") }, { ctrl + "C", L("Copy to clipboard") }, { ctrl + "V", L("Paste from clipboard") }, - { ctrl + "M", L("Clone selected")}, - // Window - { ctrl + "0", L("Camera view - Default") }, - { ctrl + "1", L("Camera view - Top") }, - { ctrl + "2", L("Camera view - Bottom") }, - { ctrl + "3", L("Camera view - Front") }, - { ctrl + "4", L("Camera view - Behind") }, - { ctrl + "5", L("Camera Angle - Left side") }, - { ctrl + "6", L("Camera Angle - Right side") }, - // Configuration - { ctrl + "P", L("Preferences") }, - { "Esc", L("Deselect all") }, - { "Del", L("Delete selected") }, - // View - { "1-9", L("keyboard 1-9: set filament for object/part") }, + #ifdef __APPLE__ + {"fn+⌫", L("Delete selected")}, + #else + {"Del", L("Delete selected")}, + #endif // Help { "?", L("Show keyboard shortcuts list") } }; @@ -209,16 +195,20 @@ void KBShortcutsDialog::fill_shortcuts() { "A", L("Arrange all objects") }, { "Shift+A", L("Arrange objects on selected plates") }, - { "R", L("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.") }, - + //{ "R", L("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.") }, {"Shift+R", L("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.")}, - #ifdef __APPLE__ + {"Shift+Tab", L("Collapse/Expand the sidebar")}, + #ifdef __APPLE__ + {L("⌘+Any arrow"), L("Movement in camera space")}, + {L("⌥+Left mouse button"), L("Select a part")}, {L("⌘+Left mouse button"), L("Select multiple objects")}, #else - {L("Ctrl+Left mouse button"), L("Select multiple objects")}, - #endif + {L("Ctrl+Any arrow"), L("Movement in camera space")}, + {L("Alt+Left mouse button"), L("Select a part")}, + {L("Ctrl+Left mouse button"), L("Select multiple objects")}, + #endif {L("Shift+Left mouse button"), L("Select objects by rectangle")}, {L("Arrow Up"), L("Move selection 10 mm in positive Y direction")}, {L("Arrow Down"), L("Move selection 10 mm in negative Y direction")}, @@ -226,12 +216,27 @@ void KBShortcutsDialog::fill_shortcuts() {L("Arrow Right"), L("Move selection 10 mm in positive X direction")}, {L("Shift+Any arrow"), L("Movement step set to 1 mm")}, - #ifdef __APPLE__ - {L("⌘+Any arrow"), L("Movement in camera space")}, - #else - {L("Ctrl+Any arrow"), L("Movement in camera space")}, - #endif - {"Shift+Tab", L("Collapse/Expand the sidebar")}, + {"Esc", L("Deselect all")}, + {"1-9", L("keyboard 1-9: set filament for object/part")}, + {ctrl + "0", L("Camera view - Default")}, + {ctrl + "1", L("Camera view - Top")}, + {ctrl + "2", L("Camera view - Bottom")}, + {ctrl + "3", L("Camera view - Front")}, + {ctrl + "4", L("Camera view - Behind")}, + {ctrl + "5", L("Camera Angle - Left side")}, + {ctrl + "6", L("Camera Angle - Right side")}, + {ctrl + "A", L("Select all objects")}, + {ctrl + "D", L("Delete all")}, + {ctrl + "Z", L("Undo")}, + {ctrl + "Y", L("Redo")}, + {ctrl + "M", L("Clone selected")}, + { "M", L("Gizmo move") }, + { "S", L("Gizmo scale") }, + { "R", L("Gizmo rotate") }, + { "C", L("Gizmo cut") }, + { "F", L("Gizmo Place face on bed") }, + { "L", L("Gizmo SLA support points") }, + { "P", L("Gizmo FDM paint-on seam") }, }; m_full_shortcuts.push_back({ { _L("Plater"), "" }, plater_shortcuts }); @@ -305,34 +310,25 @@ wxPanel* KBShortcutsDialog::create_page(wxWindow* parent, const ShortcutsItem& s main_sizer->AddSpacer(FromDIP(10)); } - static const int max_items_per_column = 20; - int columns_count = 1 + static_cast(shortcuts.second.size()) / max_items_per_column; - - wxScrolledWindow* scrollable_panel = new wxScrolledWindow(main_page); + int items_count = (int) shortcuts.second.size(); + wxScrolledWindow *scrollable_panel = new wxScrolledWindow(main_page); wxGetApp().UpdateDarkUI(scrollable_panel); scrollable_panel->SetScrollbars(20, 20, 50, 50); scrollable_panel->SetInitialSize(wxSize(FromDIP(850), FromDIP(450))); - wxBoxSizer* scrollable_panel_sizer = new wxBoxSizer(wxVERTICAL); - wxFlexGridSizer* grid_sizer = new wxFlexGridSizer(3 * columns_count, 5, 15); - - int items_count = (int)shortcuts.second.size(); - for (int i = 0; i < max_items_per_column; ++i) { - for (int j = 0; j < columns_count; ++j) { - int id = j * max_items_per_column + i; - if (id < items_count) { - const auto& [shortcut, description] = shortcuts.second[id]; - auto key = new wxStaticText(scrollable_panel, wxID_ANY, _(shortcut)); - key->SetFont(bold_font); - grid_sizer->Add(key, 0, wxALIGN_CENTRE_VERTICAL); - - grid_sizer->Add(new wxStaticText(scrollable_panel, wxID_ANY, " "), 0, wxALIGN_CENTRE_VERTICAL); - - auto desc = new wxStaticText(scrollable_panel, wxID_ANY, _(description)); - desc->SetFont(font); - grid_sizer->Add(desc, 0, wxALIGN_CENTRE_VERTICAL); - } - } + wxBoxSizer * scrollable_panel_sizer = new wxBoxSizer(wxVERTICAL); + wxFlexGridSizer *grid_sizer = new wxFlexGridSizer(items_count, 2, FromDIP(10), FromDIP(20)); + + for (int i = 0; i < items_count; ++i) { + const auto &[shortcut, description] = shortcuts.second[i]; + auto key = new wxStaticText(scrollable_panel, wxID_ANY, _(shortcut)); + key->SetFont(bold_font); + grid_sizer->Add(key, 0, wxALIGN_CENTRE_VERTICAL); + + auto desc = new wxStaticText(scrollable_panel, wxID_ANY, _(description)); + desc->SetFont(font); + desc->Wrap(FromDIP(600)); + grid_sizer->Add(desc, 0, wxALIGN_CENTRE_VERTICAL); } scrollable_panel_sizer->Add(grid_sizer, 1, wxEXPAND | wxALL, FromDIP(20)); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index bf2e1be035f..fc0df06bced 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -142,7 +142,7 @@ static wxIcon main_frame_icon(GUI_App::EAppMode app_mode) #ifdef __WINDOWS__ #define BORDERLESS_FRAME_STYLE (wxRESIZE_BORDER | wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxCLOSE_BOX) #else -#define BORDERLESS_FRAME_STYLE (wxRESIZE_BORDER) +#define BORDERLESS_FRAME_STYLE (wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxCLOSE_BOX) #endif wxDEFINE_EVENT(EVT_SYNC_CLOUD_PRESET, SimpleEvent); @@ -184,8 +184,6 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ auto panel_topbar = new wxPanel(this, wxID_ANY); panel_topbar->SetBackgroundColour(wxColour(38, 46, 48)); auto sizer_tobar = new wxBoxSizer(wxVERTICAL); - m_topbar = new BBLTopbar(this); - sizer_tobar->Add(m_topbar, 0, wxEXPAND); panel_topbar->SetSizer(sizer_tobar); panel_topbar->Layout(); #endif @@ -206,7 +204,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ default: case GUI_App::EAppMode::Editor: m_taskbar_icon = std::make_unique(wxTBI_DOCK); - m_taskbar_icon->SetIcon(wxIcon(Slic3r::var("BambuStudio-mac_128px.png"), wxBITMAP_TYPE_PNG), "BambuStudio"); + m_taskbar_icon->SetIcon(wxIcon(Slic3r::var("BambuStudio-mac_256px.ico"), wxBITMAP_TYPE_ICO), "BambuStudio"); break; case GUI_App::EAppMode::GCodeViewer: break; @@ -238,61 +236,63 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ #endif // _WIN32 // BBS - wxAcceleratorEntry entries[13]; - int index = 0; - entries[index++].Set(wxACCEL_CTRL, (int)'N', wxID_HIGHEST + wxID_NEW); - entries[index++].Set(wxACCEL_CTRL, (int)'O', wxID_HIGHEST + wxID_OPEN); - entries[index++].Set(wxACCEL_CTRL, (int)'S', wxID_HIGHEST + wxID_SAVE); - entries[index++].Set(wxACCEL_CTRL | wxACCEL_SHIFT, (int)'S', wxID_HIGHEST + wxID_SAVEAS); - entries[index++].Set(wxACCEL_CTRL, (int)'X', wxID_HIGHEST + wxID_CUT); - //entries[index++].Set(wxACCEL_CTRL, (int)'I', wxID_HIGHEST + wxID_ADD); - entries[index++].Set(wxACCEL_CTRL, (int)'A', wxID_HIGHEST + wxID_SELECTALL); - entries[index++].Set(wxACCEL_NORMAL, (int)27 /* escape */, wxID_HIGHEST + wxID_CANCEL); - entries[index++].Set(wxACCEL_CTRL, (int)'Z', wxID_HIGHEST + wxID_UNDO); - entries[index++].Set(wxACCEL_CTRL, (int)'Y', wxID_HIGHEST + wxID_REDO); - entries[index++].Set(wxACCEL_CTRL, (int)'C', wxID_HIGHEST + wxID_COPY); - entries[index++].Set(wxACCEL_CTRL, (int)'V', wxID_HIGHEST + wxID_PASTE); - entries[index++].Set(wxACCEL_CTRL, (int)'P', wxID_HIGHEST + wxID_PREFERENCES); - entries[index++].Set(wxACCEL_CTRL, (int)'I', wxID_HIGHEST + wxID_FILE6); - wxAcceleratorTable accel(sizeof(entries) / sizeof(entries[0]), entries); - SetAcceleratorTable(accel); - - Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->new_project(); }, wxID_HIGHEST + wxID_NEW); - Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->load_project(); }, wxID_HIGHEST + wxID_OPEN); - // BBS: close save project - Bind(wxEVT_MENU, [this](wxCommandEvent&) { if (m_plater) m_plater->save_project(); }, wxID_HIGHEST + wxID_SAVE); - Bind(wxEVT_MENU, [this](wxCommandEvent&) { if (m_plater) m_plater->save_project(true); }, wxID_HIGHEST + wxID_SAVEAS); - //Bind(wxEVT_MENU, [this](wxCommandEvent&) { if (m_plater) m_plater->add_model(); }, wxID_HIGHEST + wxID_ADD); - //Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->remove_selected(); }, wxID_HIGHEST + wxID_DELETE); - Bind(wxEVT_MENU, [this](wxCommandEvent&) { - if (!can_add_models()) - return; - if (m_plater) { - m_plater->add_model(); - } - }, wxID_HIGHEST + wxID_FILE6); - Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->select_all(); }, wxID_HIGHEST + wxID_SELECTALL); - Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->deselect_all(); }, wxID_HIGHEST + wxID_CANCEL); - Bind(wxEVT_MENU, [this](wxCommandEvent&) { - if (m_plater->is_view3D_shown()) - m_plater->undo(); - }, wxID_HIGHEST + wxID_UNDO); - Bind(wxEVT_MENU, [this](wxCommandEvent&) { - if (m_plater->is_view3D_shown()) - m_plater->redo(); - }, wxID_HIGHEST + wxID_REDO); - Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); }, wxID_HIGHEST + wxID_COPY); - Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->paste_from_clipboard(); }, wxID_HIGHEST + wxID_PASTE); - Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->cut_selection_to_clipboard(); }, wxID_HIGHEST + wxID_CUT); + //wxAcceleratorEntry entries[13]; + //int index = 0; + //entries[index++].Set(wxACCEL_CTRL, (int)'N', wxID_HIGHEST + wxID_NEW); + //entries[index++].Set(wxACCEL_CTRL, (int)'O', wxID_HIGHEST + wxID_OPEN); + //entries[index++].Set(wxACCEL_CTRL, (int)'S', wxID_HIGHEST + wxID_SAVE); + //entries[index++].Set(wxACCEL_CTRL | wxACCEL_SHIFT, (int)'S', wxID_HIGHEST + wxID_SAVEAS); + //entries[index++].Set(wxACCEL_CTRL, (int)'X', wxID_HIGHEST + wxID_CUT); + ////entries[index++].Set(wxACCEL_CTRL, (int)'I', wxID_HIGHEST + wxID_ADD); + //entries[index++].Set(wxACCEL_CTRL, (int)'A', wxID_HIGHEST + wxID_SELECTALL); + //entries[index++].Set(wxACCEL_NORMAL, (int)27 /* escape */, wxID_HIGHEST + wxID_CANCEL); + //entries[index++].Set(wxACCEL_CTRL, (int)'Z', wxID_HIGHEST + wxID_UNDO); + //entries[index++].Set(wxACCEL_CTRL, (int)'Y', wxID_HIGHEST + wxID_REDO); + //entries[index++].Set(wxACCEL_CTRL, (int)'C', wxID_HIGHEST + wxID_COPY); + //entries[index++].Set(wxACCEL_CTRL, (int)'V', wxID_HIGHEST + wxID_PASTE); + //entries[index++].Set(wxACCEL_CTRL, (int)'P', wxID_HIGHEST + wxID_PREFERENCES); + //entries[index++].Set(wxACCEL_CTRL, (int)'I', wxID_HIGHEST + wxID_FILE6); + //wxAcceleratorTable accel(sizeof(entries) / sizeof(entries[0]), entries); + //SetAcceleratorTable(accel); + + //Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->new_project(); }, wxID_HIGHEST + wxID_NEW); + //Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->load_project(); }, wxID_HIGHEST + wxID_OPEN); + //// BBS: close save project + //Bind(wxEVT_MENU, [this](wxCommandEvent&) { if (m_plater) m_plater->save_project(); }, wxID_HIGHEST + wxID_SAVE); + //Bind(wxEVT_MENU, [this](wxCommandEvent&) { if (m_plater) m_plater->save_project(true); }, wxID_HIGHEST + wxID_SAVEAS); + ////Bind(wxEVT_MENU, [this](wxCommandEvent&) { if (m_plater) m_plater->add_model(); }, wxID_HIGHEST + wxID_ADD); + ////Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->remove_selected(); }, wxID_HIGHEST + wxID_DELETE); + //Bind(wxEVT_MENU, [this](wxCommandEvent&) { + // if (!can_add_models()) + // return; + // if (m_plater) { + // m_plater->add_model(); + // } + // }, wxID_HIGHEST + wxID_FILE6); + //Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->select_all(); }, wxID_HIGHEST + wxID_SELECTALL); + //Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->deselect_all(); }, wxID_HIGHEST + wxID_CANCEL); + //Bind(wxEVT_MENU, [this](wxCommandEvent&) { + // if (m_plater->is_view3D_shown()) + // m_plater->undo(); + // }, wxID_HIGHEST + wxID_UNDO); + //Bind(wxEVT_MENU, [this](wxCommandEvent&) { + // if (m_plater->is_view3D_shown()) + // m_plater->redo(); + // }, wxID_HIGHEST + wxID_REDO); + //Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); }, wxID_HIGHEST + wxID_COPY); + //Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->paste_from_clipboard(); }, wxID_HIGHEST + wxID_PASTE); + //Bind(wxEVT_MENU, [this](wxCommandEvent&) { m_plater->cut_selection_to_clipboard(); }, wxID_HIGHEST + wxID_CUT); Bind(wxEVT_SIZE, [this](wxSizeEvent&) { BOOST_LOG_TRIVIAL(trace) << "mainframe: size changed, is maximized = " << this->IsMaximized(); +#ifdef __WINDOWS__ if (this->IsMaximized()) { m_topbar->SetWindowSize(); } else { m_topbar->SetMaximizedSize(); } - Refresh(); - Layout(); +#endif + Refresh(); + Layout(); }); //BBS @@ -302,18 +302,18 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ }); Bind(EVT_SYNC_CLOUD_PRESET, &MainFrame::on_select_default_preset, this); - Bind(wxEVT_MENU, - [this](wxCommandEvent&) - { - PreferencesDialog dlg(this); - dlg.ShowModal(); -#if ENABLE_GCODE_LINES_ID_IN_H_SLIDER - if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) -#else - if (dlg.seq_top_layer_only_changed()) -#endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER - plater()->refresh_print(); - }, wxID_HIGHEST + wxID_PREFERENCES); +// Bind(wxEVT_MENU, +// [this](wxCommandEvent&) +// { +// PreferencesDialog dlg(this); +// dlg.ShowModal(); +//#if ENABLE_GCODE_LINES_ID_IN_H_SLIDER +// if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) +//#else +// if (dlg.seq_top_layer_only_changed()) +//#endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER +// plater()->refresh_print(); +// }, wxID_HIGHEST + wxID_PREFERENCES); // set default tooltip timer in msec @@ -352,6 +352,12 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ e.Skip(); }); setMaxSize(); + this->Bind(wxEVT_MAXIMIZE, [this](auto &e) { + wxDisplay display(wxDisplay::GetFromWindow(this)); + auto pos = display.GetClientArea().GetPosition(); + Move(pos - wxPoint{8, 8}); + e.Skip(); + }); #endif // WIN32 // BBS Fit(); @@ -468,6 +474,35 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ Slic3r::run_backup_ui_tasks(); }); ; } + + this->Bind(wxEVT_CHAR_HOOK, [this](wxKeyEvent &evt) { +#ifdef __APPLE__ + if (evt.CmdDown() && evt.GetKeyCode() == 'H') { this->Iconize(); return;} + if (evt.CmdDown() && evt.GetKeyCode() == 'Q') { wxPostEvent(this, wxCloseEvent(wxEVT_CLOSE_WINDOW)); return;} +#endif + if (evt.CmdDown() && evt.GetKeyCode() == 'N') { m_plater->new_project(); return;} + if (evt.CmdDown() && evt.GetKeyCode() == 'O') { m_plater->load_project(); return;} + if (evt.CmdDown() && evt.ShiftDown() && evt.GetKeyCode() == 'S') { if (m_plater) m_plater->save_project(true); return;} + else if (evt.CmdDown() && evt.GetKeyCode() == 'S') { if (m_plater) m_plater->save_project(); return;} + + if (evt.CmdDown() && evt.GetKeyCode() == 'P') { + PreferencesDialog dlg(this); + dlg.ShowModal(); +#if ENABLE_GCODE_LINES_ID_IN_H_SLIDER + if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) +#else + if (dlg.seq_top_layer_only_changed()) +#endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER + plater()->refresh_print(); + return; + } + if (evt.CmdDown() && evt.GetKeyCode() == 'I') { + if (!can_add_models()) return; + if (m_plater) { m_plater->add_model(); } + return; + } + evt.Skip(); + }); } #ifdef __WIN32__ @@ -700,13 +735,21 @@ void MainFrame::shutdown() // to avoid any manipulations with them from App->wxEVT_IDLE after of the mainframe closing wxGetApp().tabs_list.clear(); wxGetApp().model_tabs_list.clear(); + wxGetApp().shutdown(); // BBS: why clear ? //wxGetApp().plater_ = nullptr; } void MainFrame::update_title() { - return; + return; +} + +void MainFrame::update_title_colour_after_set_title() +{ +#ifdef __WXOSX__ + set_title_colour_after_set_title(); +#endif } void MainFrame::show_option(bool show) @@ -792,13 +835,14 @@ void MainFrame::init_tabpanel() //monitor } +#ifdef __WINDOWS__ if (sel == tp3DEditor) { m_topbar->EnableUndoRedoItems(); } else { m_topbar->DisableUndoRedoItems(); } - +#endif /*switch (sel) { case TabPosition::tpHome: @@ -1452,8 +1496,10 @@ void MainFrame::on_dpi_changed(const wxRect& suggested_rect) dynamic_cast(m_tabpanel)->Rescale(); #endif +#ifdef __WINDOWS__ // BBS m_topbar->Rescale(); +#endif m_tabpanel->Rescale(); @@ -1573,9 +1619,11 @@ static wxMenu* generate_help_menu() return true; }); // About +#ifdef __WINDOWS__ wxString about_title = wxString::Format(_L("&About %s"), SLIC3R_APP_FULL_NAME); append_menu_item(helpMenu, wxID_ANY, about_title, about_title, [](wxCommandEvent&) { Slic3r::GUI::about(); }); +#endif return helpMenu; } @@ -1605,6 +1653,7 @@ void MainFrame::init_menubar_as_editor() { #ifdef __APPLE__ wxMenuBar::SetAutoWindowMenu(false); + m_menubar = new wxMenuBar(); #endif // File menu @@ -1867,10 +1916,18 @@ void MainFrame::init_menubar_as_editor() //auto config_wizard_name = _(ConfigWizard::name(true) + "(Debug)"); //const auto config_wizard_tooltip = from_u8((boost::format(_utf8(L("Run %s"))) % config_wizard_name).str()); //auto config_item = new wxMenuItem(m_topbar->GetTopMenu(), ConfigMenuWizard + config_id_base, config_wizard_name, config_wizard_tooltip); - auto preference_item = new wxMenuItem(m_topbar->GetTopMenu(), ConfigMenuPreferences + config_id_base, _L("Preferences") + "\tCtrl+P", ""); - //auto printer_item = new wxMenuItem(m_topbar->GetTopMenu(), ConfigMenuPrinter + config_id_base, _L("Printer"), ""); - //auto language_item = new wxMenuItem(m_topbar->GetTopMenu(), ConfigMenuLanguage + config_id_base, _L("Switch Language"), ""); - m_topbar->GetTopMenu()->Bind(wxEVT_MENU, [this, config_id_base](wxEvent& event) { +#ifdef __APPLE__ + wxWindowID bambu_studio_id_base = wxWindow::NewControlId(int(2)); + wxMenu* parent_menu = m_menubar->OSXGetAppleMenu(); + auto preference_item = new wxMenuItem(parent_menu, BambuStudioMenuPreferences + bambu_studio_id_base, _L("Preferences") + "\tCtrl+P", ""); +#else + wxMenu* parent_menu = m_topbar->GetTopMenu(); + auto preference_item = new wxMenuItem(parent_menu, ConfigMenuPreferences + config_id_base, _L("Preferences") + "\tCtrl+P", ""); +#endif + + //auto printer_item = new wxMenuItem(parent_menu, ConfigMenuPrinter + config_id_base, _L("Printer"), ""); + //auto language_item = new wxMenuItem(parent_menu, ConfigMenuLanguage + config_id_base, _L("Switch Language"), ""); + parent_menu->Bind(wxEVT_MENU, [this, config_id_base](wxEvent& event) { switch (event.GetId() - config_id_base) { //case ConfigMenuLanguage: //{ @@ -1935,10 +1992,50 @@ void MainFrame::init_menubar_as_editor() } }); - +#ifdef __APPLE__ + wxString about_title = wxString::Format(_L("&About %s"), SLIC3R_APP_FULL_NAME); + auto about_item = new wxMenuItem(parent_menu, BambuStudioMenuAbout + bambu_studio_id_base, about_title, ""); + parent_menu->Bind(wxEVT_MENU, [this, bambu_studio_id_base](wxEvent& event) { + switch (event.GetId() - bambu_studio_id_base) { + case BambuStudioMenuAbout: + Slic3r::GUI::about(); + break; + case BambuStudioMenuPreferences: + wxGetApp().CallAfter([this] { + PreferencesDialog dlg(this); + dlg.ShowModal(); + #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER + if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) + #else + if (dlg.seq_top_layer_only_changed()) + #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER + plater()->refresh_print(); + #if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN + #ifdef _WIN32 + /* + if (wxGetApp().app_config()->get("associate_3mf") == "true") + wxGetApp().associate_3mf_files(); + if (wxGetApp().app_config()->get("associate_stl") == "true") + wxGetApp().associate_stl_files(); + /*if (wxGetApp().app_config()->get("associate_step") == "true") + wxGetApp().associate_step_files();*/ + #endif // _WIN32 + #endif + }); + break; + default: + break; + } + + }); + parent_menu->Insert(0, about_item); + parent_menu->Insert(1, preference_item); +#endif // Help menu auto helpMenu = generate_help_menu(); + +#ifdef __WINDOWS__ m_topbar->SetFileMenu(fileMenu); if (editMenu) m_topbar->AddDropDownSubMenu(editMenu, _L("Edit")); @@ -1950,6 +2047,16 @@ void MainFrame::init_menubar_as_editor() //m_topbar->AddDropDownMenuItem(language_item); //m_topbar->AddDropDownMenuItem(config_item); m_topbar->AddDropDownSubMenu(helpMenu, _L("Help")); +#else + m_menubar->Append(fileMenu, _L("&File")); + if (editMenu) + m_menubar->Append(editMenu, _L("&Edit")); + if (viewMenu) + m_menubar->Append(viewMenu, _L("&View")); + if (helpMenu) + m_menubar->Append(helpMenu, _L("&Help")); + SetMenuBar(m_menubar); +#endif #ifdef _MSW_DARK_MODE if (wxGetApp().tabs_as_menu()) @@ -1959,12 +2066,12 @@ void MainFrame::init_menubar_as_editor() #ifdef __APPLE__ // This fixes a bug on Mac OS where the quit command doesn't emit window close events // wx bug: https://trac.wxwidgets.org/ticket/18328 - /* wxMenu* apple_menu = m_menubar->OSXGetAppleMenu(); + wxMenu* apple_menu = m_menubar->OSXGetAppleMenu(); if (apple_menu != nullptr) { apple_menu->Bind(wxEVT_MENU, [this](wxCommandEvent &) { Close(); }, wxID_EXIT); - }*/ + } #endif // __APPLE__ } diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index d011edfabe4..17ff07465df 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -226,7 +226,8 @@ class MainFrame : public DPIFrame void update_title(); - void show_option(bool show); + void update_title_colour_after_set_title(); + void show_option(bool show); void init_tabpanel(); void create_preset_tabs(); //BBS: GUI refactor diff --git a/src/slic3r/GUI/MarkdownTip.cpp b/src/slic3r/GUI/MarkdownTip.cpp index 7c387cc78e5..c0c25f51089 100644 --- a/src/slic3r/GUI/MarkdownTip.cpp +++ b/src/slic3r/GUI/MarkdownTip.cpp @@ -293,6 +293,9 @@ MarkdownTip* MarkdownTip::markdownTip(bool create) bool MarkdownTip::ShowTip(std::string const& tip, std::string const & tooltip, wxPoint pos) { +#ifdef NDEBUG + return false; +#endif return markdownTip()->ShowTip(pos, tip, tooltip); } diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 7f0625fc2df..7218dcb0ec9 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -230,11 +230,13 @@ void wxMediaCtrl2::DoSetSize(int x, int y, int width, int height, int sizeFlags) size = wxSize{16, 9}; int maxHeight = (width * size.GetHeight() + size.GetHeight() - 1) / size.GetWidth(); if (maxHeight != GetMaxHeight()) { - BOOST_LOG_TRIVIAL(info) << "wxMediaCtrl2::DoSetSize: width: " << width << ", height: " << height << ", maxHeight: " << maxHeight; + // BOOST_LOG_TRIVIAL(info) << "wxMediaCtrl2::DoSetSize: width: " << width << ", height: " << height << ", maxHeight: " << maxHeight; SetMaxSize({-1, maxHeight}); Slic3r::GUI::wxGetApp().CallAfter([this] { - GetParent()->Layout(); - GetParent()->Refresh(); + if (auto p = GetParent()) { + p->Layout(); + p->Refresh(); + } }); } } diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index bf6a44d230f..ba8fd6f99ab 100644 --- a/src/slic3r/GUI/Monitor.cpp +++ b/src/slic3r/GUI/Monitor.cpp @@ -148,6 +148,12 @@ MonitorPanel::~MonitorPanel() m_refresh_timer->SetOwner(this); m_refresh_timer->Start(REFRESH_INTERVAL); wxPostEvent(this, wxTimerEvent()); + + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + MachineObject *obj_ = dev->get_selected_machine(); + if (obj_) + GUI::wxGetApp().sidebar().load_ams_list(obj_->amsList); } void MonitorPanel::init_tabpanel() diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp index f38225ada9d..7cee03e5d13 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -227,7 +227,7 @@ static void add_msg_content(wxWindow* parent, wxBoxSizer* content_sizer, wxStrin wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); wxFont monospace = wxGetApp().code_font(); -#ifdef _WIN32 +#if 1 wxColour text_clr = wxGetApp().get_label_clr_default(); #else wxColour text_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); @@ -318,7 +318,7 @@ WarningDialog::WarningDialog(wxWindow *parent, finalize(); } -#ifdef _WIN32 +#if 1 // MessageDialog MessageDialog::MessageDialog(wxWindow* parent, diff --git a/src/slic3r/GUI/MsgDialog.hpp b/src/slic3r/GUI/MsgDialog.hpp index 2ebc8f6771d..e00ce5689bb 100644 --- a/src/slic3r/GUI/MsgDialog.hpp +++ b/src/slic3r/GUI/MsgDialog.hpp @@ -122,7 +122,7 @@ class WarningDialog : public MsgDialog virtual ~WarningDialog() = default; }; -#ifdef _WIN32 +#if 1 // Generic static line, used intead of wxStaticLine class StaticLine: public wxTextCtrl { diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 22ab4f64f4b..d2683e4ccf3 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -148,7 +148,7 @@ NotificationManager::PopNotification::PopNotification(const NotificationData &n, m_TextColor = ImVec4(.2f, .2f, .2f, 1.0f); m_HyperTextColor = ImVec4(0.03, 0.6, 0.18, 1); - m_WindowRadius = 4; + m_WindowRadius = 4.0f * wxGetApp().plater()->get_current_canvas3D()->get_scale(); } diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp index 5d03efe4ced..a51083f5c3a 100644 --- a/src/slic3r/GUI/OG_CustomCtrl.cpp +++ b/src/slic3r/GUI/OG_CustomCtrl.cpp @@ -848,7 +848,8 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord h_pos, wxCoord v_pos) // is_url_string = false; //else if(opt == option_set.front()) // is_url_string = !suppress_hyperlinks && !og_line.label_path.empty(); - h_pos = draw_text(dc, wxPoint(h_pos, v_pos), label, field ? (field->blink() ? &blink_color : field->label_color()) : nullptr, ctrl->opt_group->sublabel_width * ctrl->m_em_unit); + static wxColor c("#6B6B6B"); + h_pos = draw_text(dc, wxPoint(h_pos, v_pos), label, field ? (field->blink() ? &blink_color : &c) : nullptr, ctrl->opt_group->sublabel_width * ctrl->m_em_unit); h_pos += 8; } diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index ec883732480..12aa398b695 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -196,7 +196,7 @@ void ObjectDataViewModelNode::set_printable_icon(PrintIndicator printable) void ObjectDataViewModelNode::set_action_icon(bool enable) { m_action_enable = enable; - auto undo = enable ? "undo" : "dot"; + auto undo = enable ? "lock_normal" : "dot"; m_action_icon_name = m_type & itPlate ? "dot" : m_type & itObject ? undo : m_type & (itVolume | itLayer) ? undo : /*m_type & itInstance*/ "set_separate_obj"; diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index fe16aac3c1b..57d819e3ca3 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -462,8 +462,8 @@ bool OptionsGroup::activate(std::function throw_if_canceled/* = [](){}*/ else { // BBS: new layout ::StaticLine* stl = new ::StaticLine(m_parent, false, _(title)); - stl->SetFont(wxGetApp().normal_font()); - stl->SetForegroundColour("#6B6B6B"); + stl->SetFont(Label::Head_14); + stl->SetForegroundColour("#262E30"); sizer = new wxBoxSizer(wxVERTICAL); if (title.IsEmpty()) { stl->Hide(); @@ -1022,6 +1022,8 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config case coPoints: if (opt_key == "printable_area") ret = config.option(opt_key)->values; + else if (opt_key == "bed_exclude_area") + ret = get_thumbnails_string(config.option(opt_key)->values); else ret = config.option(opt_key)->get_at(idx); break; @@ -1130,6 +1132,8 @@ boost::any ConfigOptionsGroup::get_config_value2(const DynamicPrintConfig& confi case coPoints: if (opt_key == "printable_area") ret = config.option(opt_key)->values; + else if (opt_key == "bed_exclude_area") + ret = get_thumbnails_string(config.option(opt_key)->values); else ret = config.option(opt_key)->get_at(idx); break; diff --git a/src/slic3r/GUI/ParamsDialog.cpp b/src/slic3r/GUI/ParamsDialog.cpp index b69301bc0ee..535e91c3745 100644 --- a/src/slic3r/GUI/ParamsDialog.cpp +++ b/src/slic3r/GUI/ParamsDialog.cpp @@ -21,11 +21,10 @@ ParamsDialog::ParamsDialog(wxWindow * parent) m_panel = new ParamsPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBK_LEFT | wxTAB_TRAVERSAL); auto* topsizer = new wxBoxSizer(wxVERTICAL); - topsizer->Add(m_panel, 1, wxALL | wxEXPAND, 5, NULL); - topsizer->Add(-1, 5); + topsizer->Add(m_panel, 1, wxALL | wxEXPAND, 0, NULL); SetSizerAndFit(topsizer); - SetSize({100 * em_unit(), 60 * em_unit()}); + SetSize({70 * em_unit(), 60 * em_unit()}); Layout(); Center(); @@ -70,7 +69,7 @@ void ParamsDialog::Popup() void ParamsDialog::on_dpi_changed(const wxRect &suggested_rect) { Fit(); - SetSize({100 * em_unit(), 60 * em_unit()}); + SetSize({70 * em_unit(), 60 * em_unit()}); m_panel->msw_rescale(); Refresh(); } diff --git a/src/slic3r/GUI/ParamsPanel.cpp b/src/slic3r/GUI/ParamsPanel.cpp index 679efeb092b..13574f3f420 100644 --- a/src/slic3r/GUI/ParamsPanel.cpp +++ b/src/slic3r/GUI/ParamsPanel.cpp @@ -402,6 +402,7 @@ void ParamsPanel::create_layout() //m_top_sizer->Add( m_right_sizer, 1, wxEXPAND, 5 ); // BBS: new layout + m_left_sizer->AddSpacer(6 * em_unit(this) / 10); #if __WXOSX__ m_left_sizer->Add(m_tmp_panel, 1, wxEXPAND | wxALL, 0); m_tmp_panel->GetSizer()->Add( m_page_view, 1, wxEXPAND ); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index f90b07ca473..8e240b04e25 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -62,7 +62,7 @@ namespace GUI { class Bed3D; -std::array PartPlate::SELECT_COLOR = { 0.4196f, 0.4235f, 0.4235f, 1.0f }; +std::array PartPlate::SELECT_COLOR = { 0.2666f, 0.2784f, 0.2784f, 1.0f }; //{ 0.4196f, 0.4235f, 0.4235f, 1.0f }; std::array PartPlate::UNSELECT_COLOR = { 0.82f, 0.82f, 0.82f, 1.0f }; std::array PartPlate::DEFAULT_COLOR = { 0.5f, 0.5f, 0.5f, 1.0f }; std::array PartPlate::LINE_TOP_COLOR = { 0.89f, 0.89f, 0.89f, 1.0f }; @@ -199,11 +199,11 @@ void PartPlate::calc_gridlines(const ExPolygon& poly, const BoundingBox& pp_bbox line.append(Point(x, pp_bbox.min(1))); line.append(Point(x, pp_bbox.max(1))); - count ++; if ( (count % 5) == 0 ) axes_lines_bolder.push_back(line); else axes_lines.push_back(line); + count ++; } count = 0; for (coord_t y = pp_bbox.min(1); y <= pp_bbox.max(1); y += scale_(10.0)) { @@ -212,11 +212,11 @@ void PartPlate::calc_gridlines(const ExPolygon& poly, const BoundingBox& pp_bbox line.append(Point(pp_bbox.max(0), y)); axes_lines.push_back(line); - count ++; if ( (count % 5) == 0 ) axes_lines_bolder.push_back(line); else axes_lines.push_back(line); + count ++; } // clip with a slightly grown expolygon because our lines lay on the contours and may get erroneously clipped @@ -385,7 +385,8 @@ void PartPlate::render_logo(bool bottom) const // starts generating the main texture, compression will run asynchronously GLint max_tex_size = OpenGLManager::get_gl_info().get_max_tex_size(); - if (!m_partplate_list->m_logo_texture.load_from_svg_file(m_partplate_list->m_logo_texture_filename, true, true, true, max_tex_size/8)) { + GLint logo_tex_size = (max_tex_size < 2048)?max_tex_size: 2048; + if (!m_partplate_list->m_logo_texture.load_from_svg_file(m_partplate_list->m_logo_texture_filename, true, true, true, logo_tex_size)) { BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": load logo texture from %1% failed!")%m_partplate_list->m_logo_texture_filename; return; } @@ -1838,8 +1839,8 @@ bool PartPlate::set_shape(const Pointfs& shape, const Pointfs& exclude_areas, Ve ExPolygon logo_poly; generate_logo_polygon(logo_poly); - if (!m_logo_triangles.set_from_triangles(triangulate_expolygon_2f(logo_poly, NORMALS_UP), GROUND_Z+0.28f)) - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":Unable to create plate triangles\n"; + if (!m_logo_triangles.set_from_triangles(triangulate_expolygon_2f(logo_poly, NORMALS_UP), GROUND_Z+0.02f)) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":Unable to create logo triangles\n"; ExPolygon poly; /*for (const Vec2d& p : m_shape) { @@ -1882,9 +1883,9 @@ const BoundingBox PartPlate::get_bounding_box_crd() return plate_shape.bounding_box(); } -bool PartPlate::contains(const Point& point) const +bool PartPlate::contains(const Vec3d& point) const { - return m_polygon.contains(point); + return m_bounding_box.contains(point); } bool PartPlate::contains(const GLVolume& v) const @@ -1916,11 +1917,6 @@ bool PartPlate::intersects(const BoundingBoxf3& bb) const return print_volume.intersects(bb); } -Point PartPlate::point_projection(const Point& point) const -{ - return m_polygon.point_projection(point); -} - void PartPlate::render(bool bottom, bool only_body, bool force_background_color, HeightLimitMode mode, int hover_id) { glsafe(::glEnable(GL_DEPTH_TEST)); diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 7bcaa067596..8dbff320a9d 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -114,7 +114,6 @@ class PartPlate : public ObjectBase Transform3d m_grabber_trans_matrix; Slic3r::Geometry::Transformation position; std::vector positions; - Polygon m_polygon; unsigned int m_vbo_id{ 0 }; GeometryBuffer m_triangles; GeometryBuffer m_exclude_triangles; @@ -285,12 +284,11 @@ class PartPlate : public ObjectBase /*rendering related functions*/ const Pointfs& get_shape() const { return m_shape; } bool set_shape(const Pointfs& shape, const Pointfs& exclude_areas, Vec2d position, float height_to_lid, float height_to_rod); - bool contains(const Point& point) const; + bool contains(const Vec3d& point) const; bool contains(const GLVolume& v) const; bool contains(const BoundingBoxf3& bb) const; bool intersects(const BoundingBoxf3& bb) const; - Point point_projection(const Point& point) const; void render(bool bottom, bool only_body = false, bool force_background_color = false, HeightLimitMode mode = HEIGHT_LIMIT_NONE, int hover_id = -1); void render_for_picking() const { on_render_for_picking(); } void set_selected(); @@ -520,6 +518,7 @@ class PartPlateList : public ObjectBase Vec3d get_current_plate_origin() { return compute_origin(m_current_plate, m_plate_cols); } Vec2d get_current_shape_position() { return compute_shape_position(m_current_plate, m_plate_cols); } + Pointfs get_exclude_area() { return m_exclude_areas; } //select plate int select_plate(int index); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 5e0e1d0b82a..06d49d9bef3 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -103,7 +103,6 @@ #include "Widgets/ProgressDialog.hpp" #include "BBLStatusBar.hpp" #include "BitmapCache.hpp" -#include "AuxiliaryDialog.hpp" #include "ParamsDialog.hpp" #include "Widgets/Label.hpp" #include "Widgets/RoundedRectangle.hpp" @@ -268,7 +267,7 @@ struct Sidebar::priv { Plater *plater; - wxScrolledWindow *scrolled; + wxPanel *scrolled; PlaterPresetComboBox *combo_print; std::vector combos_filament; int editing_filament = -1; @@ -304,7 +303,6 @@ struct Sidebar::priv wxPanel* m_panel_printer_content = nullptr; ObjectList *m_object_list{ nullptr }; - AuxiliaryDialog *m_auxiliary_dialog{ nullptr }; ObjectSettings *object_settings{ nullptr }; wxButton *btn_export_gcode; @@ -407,12 +405,12 @@ void Sidebar::priv::hide_rich_tip(wxButton* btn) Sidebar::Sidebar(Plater *parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(42 * wxGetApp().em_unit(), -1)), p(new priv(parent)) { - p->scrolled = new wxScrolledWindow(this); + p->scrolled = new wxPanel(this); // p->scrolled->SetScrollbars(0, 100, 1, 2); // ys_DELETE_after_testing. pixelsPerUnitY = 100 // but this cause the bad layout of the sidebar, when all infoboxes appear. // As a result we can see the empty block at the bottom of the sidebar // But if we set this value to 5, layout will be better - p->scrolled->SetScrollRate(0, 5); + //p->scrolled->SetScrollRate(0, 5); p->scrolled->SetBackgroundColour(*wxWHITE); @@ -476,16 +474,16 @@ Sidebar::Sidebar(Plater *parent) // 1.2 Add spliters around title bar // add spliter 1 - auto spliter_1 = new ::StaticLine(p->scrolled); - spliter_1->SetBackgroundColour("#A6A9AA"); - scrolled_sizer->Add(spliter_1, 0, wxEXPAND); + //auto spliter_1 = new ::StaticLine(p->scrolled); + //spliter_1->SetBackgroundColour("#A6A9AA"); + //scrolled_sizer->Add(spliter_1, 0, wxEXPAND); // add printer title scrolled_sizer->Add(p->m_panel_printer_title, 0, wxEXPAND | wxALL, 0); // add spliter 2 auto spliter_2 = new ::StaticLine(p->scrolled); - spliter_2->SetBackgroundColour("#ACACAC"); + spliter_2->SetLineColour("#CECECE"); scrolled_sizer->Add(spliter_2, 0, wxEXPAND); @@ -518,7 +516,7 @@ Sidebar::Sidebar(Plater *parent) wxStaticText* bed_type_title = new wxStaticText(p->m_panel_printer_content, wxID_ANY, _L("Bed type")); bed_type_title->Wrap(-1); bed_type_title->SetFont(Label::Body_14); - m_bed_type_list = new ComboBox(p->m_panel_printer_content, wxID_ANY, wxString(""), wxDefaultPosition, {-1, FromDIP(30)}, 0, nullptr, wxCB_READONLY); + m_bed_type_list = new ComboBox(p->m_panel_printer_content, wxID_ANY, wxString(""), wxDefaultPosition, {-1, FromDIP(24)}, 0, nullptr, wxCB_READONLY); const ConfigOptionDef* bed_type_def = print_config_def.get("curr_bed_type"); if (bed_type_def && bed_type_def->enum_keys_map) { for (auto item : *bed_type_def->enum_keys_map) @@ -532,10 +530,11 @@ Sidebar::Sidebar(Plater *parent) p->m_panel_printer_content->SetSizer(vsizer_printer); p->m_panel_printer_content->Layout(); - scrolled_sizer->Add(p->m_panel_printer_content, 0, wxTOP | wxEXPAND, FromDIP(5)); - scrolled_sizer->AddSpacer(FromDIP(20)); + scrolled_sizer->Add(p->m_panel_printer_content, 0, wxTOP | wxEXPAND, FromDIP(14)); + scrolled_sizer->AddSpacer(FromDIP(16)); } + { // add filament title p->m_panel_filament_title = new StaticBox(p->scrolled, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL | wxBORDER_NONE); p->m_panel_filament_title->SetBackgroundColor(title_bg); @@ -556,11 +555,11 @@ Sidebar::Sidebar(Plater *parent) p->m_panel_filament_title->SetSizer( bSizer39 ); p->m_panel_filament_title->Layout(); auto spliter_1 = new ::StaticLine(p->scrolled); - spliter_1->SetBackgroundColour("#A6A9AA"); + spliter_1->SetLineColour("#A6A9AA"); scrolled_sizer->Add(spliter_1, 0, wxEXPAND); scrolled_sizer->Add(p->m_panel_filament_title, 0, wxEXPAND | wxALL, 0); auto spliter_2 = new ::StaticLine(p->scrolled); - spliter_2->SetBackgroundColour("#ACACAC"); + spliter_2->SetLineColour("#CECECE"); scrolled_sizer->Add(spliter_2, 0, wxEXPAND); // BBS @@ -701,22 +700,21 @@ Sidebar::Sidebar(Plater *parent) //bSizer_filament_content->Add(p->sizer_filaments, 1, wxALIGN_CENTER | wxALL); p->m_panel_filament_content->SetSizer(p->sizer_filaments); p->m_panel_filament_content->Layout(); - scrolled_sizer->Add(p->m_panel_filament_content, 0, wxTOP | wxEXPAND, FromDIP(5)); - scrolled_sizer->AddSpacer(FromDIP(20)); + scrolled_sizer->Add(p->m_panel_filament_content, 0, wxTOP | wxEXPAND, FromDIP(14)); + scrolled_sizer->AddSpacer(FromDIP(16)); + } + { //add project title auto params_panel = ((MainFrame*)parent->GetParent())->m_param_panel; if (params_panel) { params_panel->get_top_panel()->Reparent(p->scrolled); auto spliter_1 = new ::StaticLine(p->scrolled); - spliter_1->SetBackgroundColour("#A6A9AA"); - scrolled_sizer->Add(spliter_1, 0, wxEXPAND); - spliter_1 = new ::StaticLine(p->scrolled); // double line - spliter_1->SetBackgroundColour("#A6A9AA"); + spliter_1->SetLineColour("#A6A9AA"); scrolled_sizer->Add(spliter_1, 0, wxEXPAND); scrolled_sizer->Add(params_panel->get_top_panel(), 0, wxEXPAND); auto spliter_2 = new ::StaticLine(p->scrolled); - spliter_2->SetBackgroundColour("#ACACAC"); + spliter_2->SetLineColour("#CECECE"); scrolled_sizer->Add(spliter_2, 0, wxEXPAND); } @@ -724,11 +722,9 @@ Sidebar::Sidebar(Plater *parent) p->sizer_params = new wxBoxSizer(wxVERTICAL); p->m_object_list = new ObjectList(p->scrolled); p->sizer_params->Add(p->m_object_list, 1, wxEXPAND | wxTOP, 0); - scrolled_sizer->Add(p->sizer_params, 3, wxEXPAND | wxLEFT, 0); + scrolled_sizer->Add(p->sizer_params, 2, wxEXPAND | wxLEFT, 0); p->m_object_list->Hide(); - p->m_auxiliary_dialog = new AuxiliaryDialog(this); - // Frequently Object Settings p->object_settings = new ObjectSettings(p->scrolled); #if !NEW_OBJECT_SETTING @@ -737,9 +733,10 @@ Sidebar::Sidebar(Plater *parent) #else if (params_panel) { params_panel->Reparent(p->scrolled); - scrolled_sizer->Add(params_panel, 2, wxEXPAND); + scrolled_sizer->Add(params_panel, 3, wxEXPAND); } #endif + } auto *sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(p->scrolled, 1, wxEXPAND); @@ -1192,17 +1189,12 @@ ObjectList* Sidebar::obj_list() return p->m_object_list; } -AuxiliaryList* Sidebar::aux_list() -{ - return p->m_auxiliary_dialog->aux_list(); -} - ObjectSettings* Sidebar::obj_settings() { return p->object_settings; } -wxScrolledWindow* Sidebar::scrolled_panel() +wxPanel* Sidebar::scrolled_panel() { return p->scrolled; } @@ -1336,12 +1328,6 @@ bool Sidebar::show_object_list(bool show) const return true; } -bool Sidebar::show_auxiliary_dialog() const -{ - p->m_auxiliary_dialog->Reparent(wxGetApp().mainframe); - return p->m_auxiliary_dialog->ShowModal(); -} - std::vector& Sidebar::combos_filament() { return p->combos_filament; @@ -2003,11 +1989,8 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) // BBS: move sidebar to left side hsizer->Add(sidebar, 0, wxEXPAND | wxLEFT | wxRIGHT, 0); auto spliter_1 = new ::StaticLine(q, true); - spliter_1->SetBackgroundColour("#A6A9AA"); + spliter_1->SetLineColour("#A6A9AA"); hsizer->Add(spliter_1, 0, wxEXPAND); - auto spliter_2 = new ::StaticLine(q, true); - spliter_2->SetBackgroundColour("#A6A9AA"); - hsizer->Add(spliter_2, 0, wxEXPAND); panel_sizer = new wxBoxSizer(wxHORIZONTAL); panel_sizer->Add(view3D, 1, wxEXPAND | wxALL, 0); @@ -2642,11 +2625,11 @@ std::vector Plater::priv::load_files(const std::vector& input_ // BBS: add part plate related logic PlateDataPtrs plate_data; - bool is_bbs_3mf; + En3mfType en_3mf_file_type = En3mfType::From_BBS; ConfigSubstitutionContext config_substitutions{ForwardCompatibilitySubstitutionRule::Enable}; std::vector project_presets; // BBS: backup & restore - model = Slic3r::Model::read_from_archive(path.string(), &config_loaded, &config_substitutions, strategy, &plate_data, &project_presets, &is_bbs_3mf, + model = Slic3r::Model::read_from_archive(path.string(), &config_loaded, &config_substitutions, en_3mf_file_type, strategy, &plate_data, &project_presets, &file_version, [this, &dlg, real_filename, progress_percent](int import_stage, int current, int total, bool &cancel) { bool cont = true; @@ -2657,16 +2640,45 @@ std::vector Plater::priv::load_files(const std::vector& input_ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", plate_data.size %1%, project_preset.size %2%, is_bbs_3mf %3%, file_version %4% \n") % plate_data.size() % - project_presets.size() % is_bbs_3mf % file_version.to_string(); + project_presets.size() % (en_3mf_file_type == En3mfType::From_BBS) % file_version.to_string(); + + // add extruder for prusa model if the number of existing extruders is not enough + if (en_3mf_file_type == En3mfType::From_Prusa) { + std::set extruderIds; + for (ModelObject *o : model.objects) { + if (o->config.option("extruder")) extruderIds.insert(o->config.extruder()); + for (auto volume : o->volumes) { + if (volume->config.option("extruder")) extruderIds.insert(volume->config.extruder()); + for (int extruder : volume->get_extruders()) { extruderIds.insert(extruder); } + } + } + int size = extruderIds.size() == 0 ? 0 : *(extruderIds.rbegin()); + + int filament_size = sidebar->combos_filament().size(); + while (filament_size < 16 && filament_size < size) { + int filament_count = filament_size + 1; + wxColour new_col = Plater::get_next_color_for_filament(); + std::string new_color = new_col.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); + wxGetApp().preset_bundle->set_num_filaments(filament_count, new_color); + wxGetApp().plater()->on_filaments_change(filament_count); + ++filament_size; + } + wxGetApp().get_tab(Preset::TYPE_PRINT)->update(); + } // BBS: version check Semver app_version = *(Semver::parse(SLIC3R_VERSION)); - if (load_config && (file_version.maj() != app_version.maj())) { + if (en_3mf_file_type == En3mfType::From_Prusa) { + // do not reset the model config + load_config = false; + show_info(q, _L("The 3mf is not from Bambu Lab, load geometry data only."), _L("Load 3mf")); + } + else if (load_config && (file_version.maj() != app_version.maj())) { // version mismatch, only load geometries load_config = false; if (!load_model) { // only load config case, return directly - show_info(q, _L("The Config is not compatible and can not be loaded."), _L("Incompatible 3mf")); + show_info(q, _L("The Config can not be loaded."), _L("Load 3mf")); return empty_result; } load_old_project = true; @@ -2674,7 +2686,10 @@ std::vector Plater::priv::load_files(const std::vector& input_ q->select_view_3D("3D"); // select plate 0 as default q->select_plate(0); - show_info(q, _L("the 3mf is not compatible, load geometry data only!"), _L("Incompatible 3mf")); + if (en_3mf_file_type == En3mfType::From_BBS) + show_info(q, _L("The 3mf is generated by old Bambu Studio, load geometry data only."), _L("Load 3mf")); + else + show_info(q, _L("The 3mf is not from Bambu Lab, load geometry data only."), _L("Load 3mf")); for (ModelObject *model_object : model.objects) { model_object->config.reset(); // Is there any modifier or advanced config data? @@ -2773,7 +2788,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ q->select_view_3D("3D"); // select plate 0 as default q->select_plate(0); - show_info(q, _L("the 3mf is not compatible, load geometry data only!"), _L("Incompatible 3mf")); + show_info(q, _L("The 3mf is not compatible, load geometry data only!"), _L("Incompatible 3mf")); for (ModelObject *model_object : model.objects) { model_object->config.reset(); // Is there any modifier or advanced config data? @@ -3166,27 +3181,36 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode #endif /* AUTOPLACEMENT_ON_LOAD */ } - //BBS: remove the auto scaled_down logic when load models - /* + //BBS: when the object is too large, let the user choose whether to scale it down for (size_t i = 0; i < object->instances.size(); ++i) { ModelInstance* instance = object->instances[i]; const Vec3d size = object->instance_bounding_box(i).size(); const Vec3d ratio = size.cwiseQuotient(bed_size); const double max_ratio = std::max(ratio(0), ratio(1)); if (max_ratio > 10000) { - // the size of the object is too big -> this could lead to overflow when moving to clipper coordinates, - // so scale down the mesh - object->scale_mesh_after_creation(1. / max_ratio); - object->origin_translation = Vec3d::Zero(); - object->center_around_origin(); - scaled_down = true; - break; + MessageDialog dlg(q, _L("Your object appears to be too large, Do you want to scale it down to fit the heat bed automatically?"), _L("Object too large"), + wxICON_QUESTION | wxYES_NO); + int answer = dlg.ShowModal(); + if (answer == wxID_YES) { + // the size of the object is too big -> this could lead to overflow when moving to clipper coordinates, + // so scale down the mesh + object->scale_mesh_after_creation(1. / max_ratio); + object->origin_translation = Vec3d::Zero(); + object->center_around_origin(); + scaled_down = true; + break; + } } - else if (max_ratio > 5) { - instance->set_scaling_factor(instance->get_scaling_factor() / max_ratio); - scaled_down = true; + else if (max_ratio > 10) { + MessageDialog dlg(q, _L("Your object appears to be too large, Do you want to scale it down to fit the heat bed automatically?"), _L("Object too large"), + wxICON_QUESTION | wxYES_NO); + int answer = dlg.ShowModal(); + if (answer == wxID_YES) { + instance->set_scaling_factor(instance->get_scaling_factor() / max_ratio); + scaled_down = true; + } } - }*/ + } object->ensure_on_bed(allow_negative_z); if (!split_object) { @@ -3261,8 +3285,6 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode // BBS void Plater::priv::load_auxiliary_files() { - // AuxiliaryList* aux_list = dynamic_cast(sidebar->aux_list()); - // aux_list->reload(auxiliary_path); std::string auxiliary_path = encode_path(q->model().get_auxiliary_file_temp_path().c_str()); wxGetApp().mainframe->m_auxiliary->Reload(auxiliary_path); } @@ -4482,7 +4504,14 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) preview->get_canvas3d()->render(true); } } - this->partplate_list.select_plate_view(); + //TODO: turn off this switch currently + /*auto canvas_w = float(preview->get_canvas3d()->get_canvas_size().get_width()); + auto canvas_h = float(preview->get_canvas3d()->get_canvas_size().get_height()); + Point screen_center(canvas_w/2, canvas_h/2); + auto center_point = preview->get_canvas3d()->_mouse_to_3d(screen_center); + center_point(2) = 0.f; + if (!current_plate->contains(center_point)) + this->partplate_list.select_plate_view();*/ // keeps current gcode preview, if any if (this->m_slice_all) { @@ -4724,6 +4753,7 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt) if (preset_type == Preset::TYPE_FILAMENT) { wxGetApp().preset_bundle->set_filament_preset(idx, preset_name); + //wxGetApp().get_tab(preset_type)->select_preset(preset_name); } bool select_preset = !combo->selection_is_changed_according_to_physical_printers(); @@ -5557,7 +5587,13 @@ void Plater::priv::set_project_name(const wxString& project_name) { m_project_name = project_name; //update topbar title +#ifdef __WINDOWS__ wxGetApp().mainframe->topbar()->SetTitle(m_project_name); +#else + wxGetApp().mainframe->SetTitle(m_project_name); + if (!m_project_name.IsEmpty()) + wxGetApp().mainframe->update_title_colour_after_set_title(); +#endif } void Plater::priv::set_project_filename(const wxString& filename) @@ -5879,7 +5915,9 @@ void Plater::priv::set_bed_shape(const Pointfs& shape, const Pointfs& exclude_ar partplate_list.get_height_limits(prev_height_lid, prev_height_rod); double height_to_lid = config->opt_float("extruder_clearance_height_to_lid"); double height_to_rod = config->opt_float("extruder_clearance_height_to_rod"); - new_shape |= (height_to_lid != prev_height_lid) || (height_to_rod != prev_height_rod); + + Pointfs prev_exclude_areas = partplate_list.get_exclude_area(); + new_shape |= (height_to_lid != prev_height_lid) || (height_to_rod != prev_height_rod) || (prev_exclude_areas != exclude_areas); if (new_shape) { if (view3D) view3D->bed_shape_changed(); if (preview) preview->bed_shape_changed(); @@ -6570,6 +6608,8 @@ int Plater::save_project(bool saveAs) up_to_date(true, false); up_to_date(true, true); + + wxGetApp().update_saved_preset_from_current_preset(); p->dirty_state.reset_after_save(); return wxID_YES; } @@ -8169,7 +8209,8 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy for (int i = 0; i < plate_data_list.size(); i++) { PlateData *plate_data = plate_data_list[i]; for (auto it = plate_data->slice_filaments_info.begin(); it != plate_data->slice_filaments_info.end(); it++) { - it->type = cfg.get_filament_type(it->id); + std::string display_filament_type; + it->type = cfg.get_filament_type(display_filament_type, it->id); it->color = filament_color ? filament_color->get_at(it->id) : "#FFFFFF"; // save filament info used in curr plate int index = p->partplate_list.get_curr_plate_index(); @@ -8697,7 +8738,7 @@ void Plater::on_config_change(const DynamicPrintConfig &config) GLCanvas3D* view3d_canvas = get_view3D_canvas3D(); auto seq_print = config.option>("print_sequence"); - if ( seq_print && view3d_canvas && view3d_canvas->is_rendering_enabled() ) { + if ( seq_print && view3d_canvas && view3d_canvas->is_initialized() && view3d_canvas->is_rendering_enabled() ) { NotificationManager *notify_manager = get_notification_manager(); if (seq_print->value == PrintSequence::ByObject) { std::string info_text = L("Print By Object: \nSuggest to use auto-arrange to avoid collisions when printing."); diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 95d3f635b46..5fb45dfa3c0 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -19,7 +19,6 @@ #include "Search.hpp" #include "PartPlate.hpp" #include "GUI_App.hpp" -#include "GUI_AuxiliaryList.hpp" #include "Jobs/PrintJob.hpp" #include "libslic3r/Model.hpp" @@ -122,12 +121,10 @@ class Sidebar : public wxPanel ObjectList* obj_list(); ObjectSettings* obj_settings(); - wxScrolledWindow* scrolled_panel(); + wxPanel* scrolled_panel(); wxPanel* print_panel(); wxPanel* filament_panel(); - AuxiliaryList* aux_list(); - ConfigOptionsGroup* og_freq_chng_params(const bool is_fff); wxButton* get_wiping_dialog_button(); @@ -147,7 +144,6 @@ class Sidebar : public wxPanel void update_searcher(); void update_ui_from_settings(); bool show_object_list(bool show) const; - bool show_auxiliary_dialog() const; #ifdef _MSW_DARK_MODE void show_mode_sizer(bool show); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index cf426cb6f78..87647ec76f2 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -125,6 +125,9 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox( else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_FRENCH)) { language_name = wxString::FromUTF8("\x46\x72\x61\x6E\xC3\xA7\x61\x69\x73"); } + else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_HUNGARIAN)) { + language_name = wxString::FromUTF8("Magyar"); + } if (app_config->get(param) == vlist[i]->CanonicalName) { m_current_language_selected = i; @@ -237,20 +240,24 @@ wxBoxSizer *PreferencesDialog::create_item_region_combobox(wxString title, wxWin else area = "Others"; - MessageDialog msg_wingow(nullptr, _L("Changing the region will log out your account.\n") + "\n" + _L("Do you want to continue?"), L("Region selection"), - wxICON_QUESTION | wxOK | wxCANCEL); - if (msg_wingow.ShowModal() == wxID_CANCEL) { - combobox->SetSelection(current_region); - return; - } else { - NetworkAgent *agent = wxGetApp().getAgent(); - wxGetApp().request_user_logout(); - AppConfig * config = GUI::wxGetApp().app_config; - if (agent) { - agent->set_country_code(area); + NetworkAgent* agent = wxGetApp().getAgent(); + AppConfig* config = GUI::wxGetApp().app_config; + if (agent) { + MessageDialog msg_wingow(this, _L("Changing the region will log out your account.\n") + "\n" + _L("Do you want to continue?"), L("Region selection"), + wxICON_QUESTION | wxOK | wxCANCEL); + if (msg_wingow.ShowModal() == wxID_CANCEL) { + combobox->SetSelection(current_region); + return; + } else { + wxGetApp().request_user_logout(); + if (agent) { + agent->set_country_code(area); + } + config->set("region", region.ToStdString()); + EndModal(wxID_CANCEL); } + } else { config->set("region", region.ToStdString()); - EndModal(wxID_CANCEL); } e.Skip(); @@ -561,9 +568,14 @@ void PreferencesDialog::create() SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); SetSizeHints(wxDefaultSize, wxDefaultSize); + auto main_sizer = new wxBoxSizer(wxVERTICAL); + + m_scrolledWindow = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + m_scrolledWindow->SetScrollRate(5, 5); + m_sizer_body = new wxBoxSizer(wxVERTICAL); - auto m_top_line = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(DESIGN_RESOUTION_PREFERENCES.x, 1), wxTAB_TRAVERSAL); + auto m_top_line = new wxPanel(m_scrolledWindow, wxID_ANY, wxDefaultPosition, wxSize(DESIGN_RESOUTION_PREFERENCES.x, 1), wxTAB_TRAVERSAL); m_top_line->SetBackgroundColour(DESIGN_GRAY400_COLOR); m_sizer_body->Add(m_top_line, 0, wxEXPAND, 0); @@ -576,16 +588,26 @@ void PreferencesDialog::create() create_sync_page(); create_shortcuts_page();*/ - m_sizer_body->Add(0, 0, 0, wxTOP, FromDIP(28)); + m_sizer_body->Add(0, 0, 0, wxTOP, FromDIP(28)); m_sizer_body->Add(general_page, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(38)); #if !BBL_RELEASE_TO_PUBLIC m_sizer_body->Add(debug_page, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(38)); #endif m_sizer_body->Add(0, 0, 0, wxBOTTOM, FromDIP(28)); - SetSizer(m_sizer_body); + m_scrolledWindow->SetSizerAndFit(m_sizer_body); + + main_sizer->Add(m_scrolledWindow, 1, wxEXPAND); + + SetSizer(main_sizer); Layout(); Fit(); + int screen_height = wxGetDisplaySize().GetY(); + if (this->GetSize().GetY() > screen_height) + this->SetSize(this->GetSize().GetX() + FromDIP(40), screen_height * 4 / 5); + CenterOnParent(); + wxPoint start_pos = this->GetPosition(); + if (start_pos.y < 0) { this->SetPosition(wxPoint(start_pos.x, 0)); } //select first auto event = wxCommandEvent(EVT_PREFERENCES_SELECT_TAB); @@ -625,14 +647,22 @@ void PreferencesDialog::Split(const std::string &src, const std::string &separat wxWindow* PreferencesDialog::create_general_page() { - auto page = new wxWindow(this, wxID_ANY); + auto page = new wxWindow(m_scrolledWindow, wxID_ANY); page->SetBackgroundColour(*wxWHITE); wxBoxSizer *sizer_page = new wxBoxSizer(wxVERTICAL); auto title_general_settings = create_item_title(_L("General Settings"), page, _L("General Settings")); // bbs supported languages - wxLanguage supported_languages[]{wxLANGUAGE_ENGLISH, wxLANGUAGE_CHINESE_SIMPLIFIED, wxLANGUAGE_GERMAN, wxLANGUAGE_FRENCH, wxLANGUAGE_SPANISH, wxLANGUAGE_SWEDISH, wxLANGUAGE_DUTCH }; + wxLanguage supported_languages[]{ + wxLANGUAGE_ENGLISH, + wxLANGUAGE_CHINESE_SIMPLIFIED, + wxLANGUAGE_GERMAN, + wxLANGUAGE_FRENCH, + wxLANGUAGE_SPANISH, + wxLANGUAGE_SWEDISH, + wxLANGUAGE_DUTCH, + wxLANGUAGE_HUNGARIAN }; auto translations = wxTranslations::Get()->GetAvailableTranslations(SLIC3R_APP_KEY); std::vector language_infos; @@ -641,8 +671,8 @@ wxWindow* PreferencesDialog::create_general_page() const wxLanguageInfo *langinfo = wxLocale::FindLanguageInfo(translations[i]); if (langinfo == nullptr) continue; - - for (auto si = 0; si < 7; si++) { + int language_num = sizeof(supported_languages) / sizeof(supported_languages[0]); + for (auto si = 0; si < language_num; si++) { if (langinfo == wxLocale::GetLanguageInfo(supported_languages[si])) { language_infos.emplace_back(langinfo); } @@ -782,19 +812,19 @@ wxBoxSizer* PreferencesDialog::create_debug_page() wxBoxSizer *bSizer = new wxBoxSizer(wxVERTICAL); - auto title_develop_mode = create_item_title(_L("Develop mode"), this, _L("Develop mode")); - auto item_develop_mode = create_item_checkbox(_L("Develop mode"), this, _L("Develop mode"), 50, "developer_mode"); - auto item_dump_video = create_item_checkbox(_L("Dump video"), this, _L("Dump video"), 50, "dump_video"); + auto title_develop_mode = create_item_title(_L("Develop mode"), m_scrolledWindow, _L("Develop mode")); + auto item_develop_mode = create_item_checkbox(_L("Develop mode"), m_scrolledWindow, _L("Develop mode"), 50, "developer_mode"); + auto item_dump_video = create_item_checkbox(_L("Dump video"), m_scrolledWindow, _L("Dump video"), 50, "dump_video"); - auto title_log_level = create_item_title(_L("Log Level"), this, _L("Log Level")); + auto title_log_level = create_item_title(_L("Log Level"), m_scrolledWindow, _L("Log Level")); auto log_level_list = std::vector{_L("fatal"), _L("error"), _L("warning"), _L("info"), _L("debug"), _L("trace")}; - auto loglevel_combox = create_item_loglevel_combobox(_L("Log Level"), this, _L("Log Level"), log_level_list); + auto loglevel_combox = create_item_loglevel_combobox(_L("Log Level"), m_scrolledWindow, _L("Log Level"), log_level_list); - auto title_host = create_item_title(_L("Host Setting"), this, _L("Host Setting")); - auto radio1 = create_item_radiobox(_L("DEV host: api-dev.bambu-lab.com/v1"), this, wxEmptyString, 50, 1, "dev_host"); - auto radio2 = create_item_radiobox(_L("QA host: api-qa.bambu-lab.com/v1"), this, wxEmptyString, 50, 1, "qa_host"); - auto radio3 = create_item_radiobox(_L("PRE host: api-pre.bambu-lab.com/v1"), this, wxEmptyString, 50, 1, "pre_host"); - auto radio4 = create_item_radiobox(_L("Product host"), this, wxEmptyString, 50, 1, "product_host"); + auto title_host = create_item_title(_L("Host Setting"), m_scrolledWindow, _L("Host Setting")); + auto radio1 = create_item_radiobox(_L("DEV host: api-dev.bambu-lab.com/v1"), m_scrolledWindow, wxEmptyString, 50, 1, "dev_host"); + auto radio2 = create_item_radiobox(_L("QA host: api-qa.bambu-lab.com/v1"), m_scrolledWindow, wxEmptyString, 50, 1, "qa_host"); + auto radio3 = create_item_radiobox(_L("PRE host: api-pre.bambu-lab.com/v1"), m_scrolledWindow, wxEmptyString, 50, 1, "pre_host"); + auto radio4 = create_item_radiobox(_L("Product host"), m_scrolledWindow, wxEmptyString, 50, 1, "product_host"); if (m_iot_environment_def == ENV_DEV_HOST) { on_select_radio("dev_host"); @@ -806,7 +836,7 @@ wxBoxSizer* PreferencesDialog::create_debug_page() on_select_radio("product_host"); } - wxButton *debug_button = new wxButton(this, wxID_ANY, _L("debug save button"), wxDefaultPosition, wxDefaultSize, 0); + wxButton *debug_button = new wxButton(m_scrolledWindow, wxID_ANY, _L("debug save button"), wxDefaultPosition, wxDefaultSize, 0); debug_button->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { // success message box MessageDialog dialog(this, _L("save debug settings"), _L("DEBUG settings have saved successfully!"), wxNO_DEFAULT | wxYES_NO | wxICON_INFORMATION); diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index 1bcca1b004a..4457cf6e9c2 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -60,6 +60,7 @@ class PreferencesDialog : public DPIDialog protected: wxBoxSizer * m_sizer_body; + wxScrolledWindow *m_scrolledWindow; // bool m_settings_layout_changed {false}; bool m_seq_top_layer_only_changed{false}; diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index dcf71dcd51e..debce40c28d 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -225,9 +225,14 @@ int PresetComboBox::update_ams_color() if (m_filament_idx < 0) return -1; int idx = selected_ams_filament(); if (idx < 0) return -1; + auto &ams_list = wxGetApp().preset_bundle->filament_ams_list; + if (idx >= ams_list.size()) { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": ams %1% out of range %2%") % idx % ams_list.size(); + return -1; + } DynamicPrintConfig *cfg = &wxGetApp().preset_bundle->project_config; auto colors = static_cast(cfg->option("filament_colour")->clone()); - colors->values[m_filament_idx] = wxGetApp().preset_bundle->filament_ams_list[idx] + colors->values[m_filament_idx] = ams_list[idx] .opt_string("filament_colour", 0u); DynamicPrintConfig new_cfg; new_cfg.set_key_value("filament_colour", colors); @@ -397,7 +402,7 @@ void PresetComboBox::add_ams_filaments(std::string selected, bool alias_name) } else { img.SetRGB(wxRect({0, 0}, img.GetSize()), clr.Red(), clr.Green(), clr.Blue()); } - int item_id = Append(get_preset_name(*iter), img); + int item_id = Append(get_preset_name(*iter), img, &m_first_ams_filament + (&f - &m_preset_bundle->filament_ams_list.front())); //validate_selection(id->value == selected); // can not select } m_last_ams_filament = GetCount(); @@ -407,7 +412,7 @@ void PresetComboBox::add_ams_filaments(std::string selected, bool alias_name) int PresetComboBox::selected_ams_filament() const { if (m_first_ams_filament && m_last_selected >= m_first_ams_filament && m_last_selected < m_last_ams_filament) { - return m_last_selected - m_first_ams_filament; + return reinterpret_cast(GetClientData(m_last_selected)) - &m_first_ams_filament; } return -1; } @@ -609,7 +614,7 @@ bool PresetComboBox::selection_is_changed_according_to_physical_printers() // --------------------------------- PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset_type) : - PresetComboBox(parent, preset_type, wxSize(15 * wxGetApp().em_unit(), 3 * wxGetApp().em_unit())) + PresetComboBox(parent, preset_type, wxSize(15 * wxGetApp().em_unit(), 24 * wxGetApp().em_unit() / 10)) { GetDropDown().SetUseContentWidth(true); @@ -892,10 +897,15 @@ void PlaterPresetComboBox::update() // BBS wxColor clr(filament_color); clr_picker->SetBackgroundColour(clr); - auto style = clr_picker->GetWindowStyle() & ~(wxBORDER_NONE | wxBORDER_SIMPLE); auto diff_clr = different_color(clr); - clr_picker->SetWindowStyle(clr.Red() > 224 && clr.Blue() > 224 && clr.Green() > 224 ? (style | wxBORDER_SIMPLE) : (style | wxBORDER_NONE)); clr_picker->SetForegroundColour(diff_clr); + auto style = clr_picker->GetWindowStyle() & ~(wxBORDER_NONE | wxBORDER_SIMPLE); + style = clr.Red() > 224 && clr.Blue() > 224 && clr.Green() > 224 ? (style | wxBORDER_SIMPLE) : (style | wxBORDER_NONE); + clr_picker->SetWindowStyle(style); +#ifdef __WXOSX__ + clr_picker->SetLabel(clr_picker->GetLabel()); // Let setBezelStyle: be called + clr_picker->Refresh(); +#endif selected_filament_preset = m_collection->find_preset(m_preset_bundle->filament_presets[m_filament_idx]); if (!selected_filament_preset) { //can not find this filament, should be caused by project embedded presets, will be updated later @@ -1092,7 +1102,7 @@ void PlaterPresetComboBox::update() void PlaterPresetComboBox::msw_rescale() { PresetComboBox::msw_rescale(); - SetMinSize({-1, 3 * m_em_unit}); + SetMinSize({-1, 24 * m_em_unit / 10}); if (clr_picker) clr_picker->SetSize(20 * m_em_unit / 10, 20 * m_em_unit / 10); @@ -1322,7 +1332,7 @@ void TabPresetComboBox::update() void TabPresetComboBox::msw_rescale() { - PresetComboBox::msw_rescale(); + PresetComboBox::Rescale(); // BBS: new layout wxSize sz = wxSize(20 * m_em_unit, GetSize().GetHeight()); SetMinSize(sz); diff --git a/src/slic3r/GUI/PrintOptionsDialog.cpp b/src/slic3r/GUI/PrintOptionsDialog.cpp new file mode 100644 index 00000000000..2b43c0864de --- /dev/null +++ b/src/slic3r/GUI/PrintOptionsDialog.cpp @@ -0,0 +1,137 @@ +#include "PrintOptionsDialog.hpp" +#include "I18N.hpp" + +#include "libslic3r/Utils.hpp" + +#define DLG_SIZE (wxSize(FromDIP(360), FromDIP(160))) + +static const wxColour STATIC_BOX_LINE_COL = wxColour(238, 238, 238); + +namespace Slic3r { namespace GUI { + +PrintOptionsDialog::PrintOptionsDialog(wxWindow* parent) + : DPIDialog(parent, wxID_ANY, _L("Print Options"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) +{ + this->SetDoubleBuffered(true); + 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); + + this->SetMinSize(DLG_SIZE); + this->SetSize(DLG_SIZE); + + auto m_options_sizer = create_settings_group(this); + this->SetSizer(m_options_sizer); + this->Layout(); + m_options_sizer->Fit(this); + this->Fit(); + + m_cb_first_layer->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& evt) { + if (obj) { + obj->command_xcam_control_first_layer_inspector(m_cb_first_layer->GetValue(), false); + } + evt.Skip(); + }); + + m_cb_spaghetti->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& evt) { + update_spaghetti(); + + if (obj) { + obj->command_xcam_control_spaghetti_detector(m_cb_spaghetti->GetValue(), m_cb_spaghetti_print_halt->GetValue()); + } + evt.Skip(); + }); + + m_cb_spaghetti_print_halt->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent&evt) { + if (obj) { + obj->command_xcam_control_spaghetti_detector(m_cb_spaghetti->GetValue(), m_cb_spaghetti_print_halt->GetValue()); + } + evt.Skip(); + }); +} + +PrintOptionsDialog::~PrintOptionsDialog() {} + +void PrintOptionsDialog::on_dpi_changed(const wxRect &suggested_rect) +{ + this->SetMinSize(DLG_SIZE); + this->SetSize(DLG_SIZE); + Fit(); +} + +void PrintOptionsDialog::update_spaghetti() +{ + if (m_cb_spaghetti->GetValue()) { + m_cb_spaghetti_print_halt->Enable(); + text_spaghetti_print_halt->Enable(); + } + else { + m_cb_spaghetti_print_halt->Disable(); + text_spaghetti_print_halt->Disable(); + } +} + +void PrintOptionsDialog::update_options(MachineObject *obj_) +{ + if (!obj_) return; + this->Freeze(); + m_cb_spaghetti->SetValue(obj_->xcam_spaghetti_detector); + m_cb_spaghetti_print_halt->SetValue(obj_->xcam_spaghetti_print_halt); + m_cb_first_layer->SetValue(obj_->xcam_first_layer_inspector); + update_spaghetti(); + this->Thaw(); +} + +wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent) +{ + auto sizer = new wxBoxSizer(wxVERTICAL); + auto line_sizer = new wxBoxSizer(wxHORIZONTAL); + m_cb_spaghetti = new CheckBox(parent); + auto text_spaghetti = new wxStaticText(parent, wxID_ANY, _L("Spaghetti Detection")); + text_spaghetti->SetFont(Label::Body_14); + line_sizer->Add(FromDIP(5), 0, 0, 0); + line_sizer->Add(m_cb_spaghetti, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + line_sizer->Add(text_spaghetti, 1, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + sizer->Add(line_sizer, 0, wxEXPAND | wxALL, FromDIP(5)); + + line_sizer = new wxBoxSizer(wxHORIZONTAL); + m_cb_spaghetti_print_halt = new CheckBox(parent); + text_spaghetti_print_halt = new wxStaticText(parent, wxID_ANY, _L("Stop printing when spaghetti detected")); + text_spaghetti_print_halt->SetFont(Label::Body_14); + line_sizer->Add(FromDIP(30), 0, 0, 0); + line_sizer->Add(m_cb_spaghetti_print_halt, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + line_sizer->Add(text_spaghetti_print_halt, 1, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + + sizer->Add(line_sizer, 0, wxEXPAND | wxALL , 0); + + sizer->Add(0, FromDIP(10), 0, 0); + StaticLine* line = new StaticLine(parent, false); + line->SetLineColour(STATIC_BOX_LINE_COL); + sizer->Add(line, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); + + line_sizer = new wxBoxSizer(wxHORIZONTAL); + m_cb_first_layer = new CheckBox(parent); + auto text_first_layer = new wxStaticText(parent, wxID_ANY, _L("First Layer Inspection")); + text_first_layer->SetFont(Label::Body_14); + line_sizer->Add(FromDIP(5), 0, 0, 0); + line_sizer->Add(m_cb_first_layer, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + line_sizer->Add(text_first_layer, 1, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + sizer->Add(line_sizer, 1, wxEXPAND | wxALL, FromDIP(5)); + line_sizer->Add(FromDIP(5), 0, 0, 0); + + return sizer; +} + +void PrintOptionsDialog::update_machine_obj(MachineObject *obj_) +{ + obj = obj_; +} + +bool PrintOptionsDialog::Show(bool show) +{ + if (show) { CentreOnParent(); } + return DPIDialog::Show(show); +} + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/PrintOptionsDialog.hpp b/src/slic3r/GUI/PrintOptionsDialog.hpp new file mode 100644 index 00000000000..21fa1843b19 --- /dev/null +++ b/src/slic3r/GUI/PrintOptionsDialog.hpp @@ -0,0 +1,47 @@ +#ifndef slic3r_GUI_PrintOptionsDialog_hpp_ +#define slic3r_GUI_PrintOptionsDialog_hpp_ + +#include +#include +#include +#include +#include +#include + +#include "GUI_Utils.hpp" +#include "wxExtensions.hpp" +#include "DeviceManager.hpp" +#include "Widgets/Label.hpp" +#include "Widgets/CheckBox.hpp" +#include "Widgets/StaticLine.hpp" + +namespace Slic3r { namespace GUI { + +class PrintOptionsDialog : public DPIDialog +{ +protected: + // settings + CheckBox* m_cb_first_layer; + CheckBox* m_cb_spaghetti; + CheckBox* m_cb_spaghetti_print_halt; + wxStaticText* text_spaghetti_print_halt; + wxBoxSizer* create_settings_group(wxWindow* parent); + +public: + PrintOptionsDialog(wxWindow* parent); + ~PrintOptionsDialog(); + void on_dpi_changed(const wxRect &suggested_rect) override; + void update_spaghetti(); + + MachineObject *obj { nullptr }; + + std::vector last_stage_list_info; + int m_state{0}; + void update_options(MachineObject *obj_); + void update_machine_obj(MachineObject *obj_); + bool Show(bool show) override; +}; + +}} // namespace Slic3r::GUI + +#endif diff --git a/src/slic3r/GUI/ProjectDirtyStateManager.cpp b/src/slic3r/GUI/ProjectDirtyStateManager.cpp index c79ac0c393a..1f228f44605 100644 --- a/src/slic3r/GUI/ProjectDirtyStateManager.cpp +++ b/src/slic3r/GUI/ProjectDirtyStateManager.cpp @@ -28,8 +28,14 @@ void ProjectDirtyStateManager::update_from_presets() // check switching of the presets only for exist/loaded project, but not for new GUI_App &app = wxGetApp(); if (!app.plater()->get_project_filename().IsEmpty()) { - for (const auto& [type, name] : app.get_selected_presets()) - m_presets_dirty |= !m_initial_presets[type].empty() && m_initial_presets[type] != name; + for (const auto &[type, name] : app.get_selected_presets()) { + if (type == Preset::Type::TYPE_FILAMENT) { + m_presets_dirty |= m_initial_filament_presets != wxGetApp().preset_bundle->filament_presets; + } else { + m_presets_dirty |= !m_initial_presets[type].empty() && m_initial_presets[type] != name; + } + } + } m_presets_dirty |= app.has_unsaved_preset_changes(); m_project_config_dirty = m_initial_project_config != app.preset_bundle->project_config; @@ -49,8 +55,13 @@ void ProjectDirtyStateManager::reset_initial_presets() { m_initial_presets.fill(std::string{}); GUI_App &app = wxGetApp(); - for (const auto& [type, name] : app.get_selected_presets()) - m_initial_presets[type] = name; + for (const auto &[type, name] : app.get_selected_presets()) { + if (type == Preset::Type::TYPE_FILAMENT) { + m_initial_filament_presets = wxGetApp().preset_bundle->filament_presets; + } else { + m_initial_presets[type] = name; + } + } m_initial_project_config = app.preset_bundle->project_config; } diff --git a/src/slic3r/GUI/ProjectDirtyStateManager.hpp b/src/slic3r/GUI/ProjectDirtyStateManager.hpp index 6841c89c69a..203c8707605 100644 --- a/src/slic3r/GUI/ProjectDirtyStateManager.hpp +++ b/src/slic3r/GUI/ProjectDirtyStateManager.hpp @@ -31,6 +31,9 @@ class ProjectDirtyStateManager // Keeps track of preset names selected at the time of last project save. std::array m_initial_presets; DynamicPrintConfig m_initial_project_config; + + // filament preset independent of the m_initial_presets + std::vector m_initial_filament_presets; }; } // namespace GUI diff --git a/src/slic3r/GUI/SavePresetDialog.cpp b/src/slic3r/GUI/SavePresetDialog.cpp index fd148cb6b70..3f5822c7ee7 100644 --- a/src/slic3r/GUI/SavePresetDialog.cpp +++ b/src/slic3r/GUI/SavePresetDialog.cpp @@ -340,7 +340,7 @@ void SavePresetDialog::build(std::vector types, std::string suffix m_confirm->SetTextColor(wxColour(255, 255, 255)); m_confirm->SetMinSize(SAVE_PRESET_DIALOG_BUTTON_SIZE); m_confirm->SetCornerRadius(12); - m_confirm->Bind(wxEVT_LEFT_DOWN, &SavePresetDialog::accept, this); + m_confirm->Bind(wxEVT_BUTTON, &SavePresetDialog::accept, this); btns->Add(m_confirm, 0, wxEXPAND, 0); auto block_middle = new wxWindow(this, -1); @@ -351,7 +351,7 @@ void SavePresetDialog::build(std::vector types, std::string suffix m_cancel->SetMinSize(SAVE_PRESET_DIALOG_BUTTON_SIZE); m_cancel->SetTextColor(wxColour(107, 107, 107)); m_cancel->SetCornerRadius(12); - m_cancel->Bind(wxEVT_LEFT_DOWN, &SavePresetDialog::on_select_cancel, this); + m_cancel->Bind(wxEVT_BUTTON, &SavePresetDialog::on_select_cancel, this); btns->Add(m_cancel, 0, wxEXPAND, 0); auto block_right = new wxWindow(this, -1); @@ -372,7 +372,7 @@ void SavePresetDialog::build(std::vector types, std::string suffix this->Centre(wxBOTH); } -void SavePresetDialog::on_select_cancel(wxMouseEvent &event) +void SavePresetDialog::on_select_cancel(wxCommandEvent &event) { EndModal(wxID_CANCEL); } @@ -511,7 +511,7 @@ void SavePresetDialog::update_physical_printers(const std::string &preset_name) } } -void SavePresetDialog::accept(wxMouseEvent &event) +void SavePresetDialog::accept(wxCommandEvent &event) { for (Item *item : m_items) { item->accept(); diff --git a/src/slic3r/GUI/SavePresetDialog.hpp b/src/slic3r/GUI/SavePresetDialog.hpp index 2449c08b7b0..1b2089f8986 100644 --- a/src/slic3r/GUI/SavePresetDialog.hpp +++ b/src/slic3r/GUI/SavePresetDialog.hpp @@ -111,9 +111,9 @@ class SavePresetDialog : public DPIDialog private: void build(std::vector types, std::string suffix = ""); - void on_select_cancel(wxMouseEvent &event); + void on_select_cancel(wxCommandEvent &event); void update_physical_printers(const std::string &preset_name); - void accept(wxMouseEvent &event); + void accept(wxCommandEvent &event); }; } // namespace GUI diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index e1776abcdcf..7d3b6b04d3d 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -102,15 +102,15 @@ MachineObjectPanel::MachineObjectPanel(wxWindow *parent, wxWindowID id, const wx SetBackgroundColour(*wxWHITE); - m_unbind_img = create_scaled_bitmap("unbind", nullptr, 18); - m_edit_name_img = create_scaled_bitmap("edit_button", nullptr, 18); - m_select_unbind_img = create_scaled_bitmap("unbind_selected", nullptr, 18); + m_unbind_img = ScalableBitmap(this, "unbind", 18); + m_edit_name_img = ScalableBitmap(this, "edit_button", 18); + m_select_unbind_img = ScalableBitmap(this, "unbind_selected", 18); - m_printer_status_offline = create_scaled_bitmap("printer_status_offline", nullptr, 12); - m_printer_status_busy = create_scaled_bitmap("printer_status_busy", nullptr, 12); - m_printer_status_idle = create_scaled_bitmap("printer_status_idle", nullptr, 12); - m_printer_status_lock = create_scaled_bitmap("printer_status_lock", nullptr, 16); - m_printer_in_lan = create_scaled_bitmap("printer_in_lan", nullptr, 16); + m_printer_status_offline = ScalableBitmap(this, "printer_status_offline", 12); + m_printer_status_busy = ScalableBitmap(this, "printer_status_busy", 12); + m_printer_status_idle = ScalableBitmap(this, "printer_status_idle", 12); + m_printer_status_lock = ScalableBitmap(this, "printer_status_lock", 16); + m_printer_in_lan = ScalableBitmap(this, "printer_in_lan", 16); this->Bind(wxEVT_ENTER_WINDOW, &MachineObjectPanel::on_mouse_enter, this); this->Bind(wxEVT_LEAVE_WINDOW, &MachineObjectPanel::on_mouse_leave, this); @@ -188,9 +188,9 @@ void MachineObjectPanel::doRender(wxDC &dc) if (m_state == PrinterState::IN_LAN) { dwbitmap = m_printer_in_lan; } // dc.DrawCircle(left, size.y / 2, 3); - dc.DrawBitmap(dwbitmap, wxPoint(left, (size.y - dwbitmap.GetSize().y) / 2)); + dc.DrawBitmap(dwbitmap.bmp(), wxPoint(left, (size.y - dwbitmap.GetBmpSize().y) / 2)); - left += dwbitmap.GetSize().x + 8; + left += dwbitmap.GetBmpSize().x + 8; dc.SetFont(Label::Body_13); dc.SetBackgroundMode(wxTRANSPARENT); dc.SetTextForeground(SELECT_MACHINE_GREY900); @@ -199,7 +199,7 @@ void MachineObjectPanel::doRender(wxDC &dc) dev_name = from_u8(m_info->dev_name); } auto sizet = dc.GetTextExtent(dev_name); - auto text_end = size.x - m_unbind_img.GetSize().x - 30; + auto text_end = size.x - m_unbind_img.GetBmpSize().x - 30; wxString finally_name = dev_name; if (sizet.x > (text_end - left)) { auto limit_width = text_end - left - dc.GetTextExtent("...").x - 15; @@ -221,13 +221,14 @@ void MachineObjectPanel::doRender(wxDC &dc) if (m_show_bind) { if (m_bind_state == ALLOW_UNBIND) { - left = size.x - m_unbind_img.GetSize().x - 6; - dc.DrawBitmap(m_select_unbind_img, left, (size.y - m_unbind_img.GetSize().y) / 2); } + left = size.x - m_unbind_img.GetBmpSize().x - 6; + dc.DrawBitmap(m_select_unbind_img.bmp(), left, (size.y - m_unbind_img.GetBmpSize().y) / 2); + } } if (m_show_edit) { - left = size.x - m_unbind_img.GetSize().x - 6 - m_edit_name_img.GetSize().x - 6; - dc.DrawBitmap(m_edit_name_img, left, (size.y - m_edit_name_img.GetSize().y) / 2); + left = size.x - m_unbind_img.GetBmpSize().x - 6 - m_edit_name_img.GetBmpSize().x - 6; + dc.DrawBitmap(m_edit_name_img.bmp(), left, (size.y - m_edit_name_img.GetBmpSize().y) / 2); } } } @@ -256,10 +257,10 @@ void MachineObjectPanel::on_mouse_left_up(wxMouseEvent &evt) if (m_is_my_devices) { // show edit if (m_show_edit) { - auto edit_left = GetSize().x - m_unbind_img.GetSize().x - 6 - m_edit_name_img.GetSize().x - 6; - auto edit_right = edit_left + m_edit_name_img.GetSize().x; - auto edit_top = (GetSize().y - m_edit_name_img.GetSize().y) / 2; - auto edit_bottom = (GetSize().y - m_edit_name_img.GetSize().y) / 2 + m_edit_name_img.GetSize().y; + auto edit_left = GetSize().x - m_unbind_img.GetBmpSize().x - 6 - m_edit_name_img.GetBmpSize().x - 6; + auto edit_right = edit_left + m_edit_name_img.GetBmpSize().x; + auto edit_top = (GetSize().y - m_edit_name_img.GetBmpSize().y) / 2; + auto edit_bottom = (GetSize().y - m_edit_name_img.GetBmpSize().y) / 2 + m_edit_name_img.GetBmpSize().y; if ((evt.GetPosition().x >= edit_left && evt.GetPosition().x <= edit_right) && evt.GetPosition().y >= edit_top && evt.GetPosition().y <= edit_bottom) { wxCommandEvent event(EVT_EDIT_PRINT_NAME); event.SetEventObject(this); @@ -268,10 +269,10 @@ void MachineObjectPanel::on_mouse_left_up(wxMouseEvent &evt) } } if (m_show_bind) { - auto left = GetSize().x - m_unbind_img.GetSize().x - 6; - auto right = left + m_unbind_img.GetSize().x; - auto top = (GetSize().y - m_unbind_img.GetSize().y) / 2; - auto bottom = (GetSize().y - m_unbind_img.GetSize().y) / 2 + m_unbind_img.GetSize().y; + auto left = GetSize().x - m_unbind_img.GetBmpSize().x - 6; + auto right = left + m_unbind_img.GetBmpSize().x; + auto top = (GetSize().y - m_unbind_img.GetBmpSize().y) / 2; + auto bottom = (GetSize().y - m_unbind_img.GetBmpSize().y) / 2 + m_unbind_img.GetBmpSize().y; if ((evt.GetPosition().x >= left && evt.GetPosition().x <= right) && evt.GetPosition().y >= top && evt.GetPosition().y <= bottom) { wxCommandEvent event(EVT_UNBIND_MACHINE, GetId()); @@ -742,6 +743,26 @@ void SelectMachineDialog::stripWhiteSpace(std::string& str) } } +wxString SelectMachineDialog::format_text(wxString &m_msg) +{ + if (wxGetApp().app_config->get("language") != "zh_CN") {return m_msg; } + + wxString out_txt = m_msg; + wxString count_txt = ""; + int new_line_pos = 0; + + for (int i = 0; i < m_msg.length(); i++) { + auto text_size = m_statictext_ams_msg->GetTextExtent(count_txt); + if (text_size.x < (FromDIP(400))) { + count_txt += m_msg[i]; + } else { + out_txt.insert(i - 1, '\n'); + count_txt = ""; + } + } + return out_txt; +} + SelectMachineDialog::SelectMachineDialog(Plater *plater) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Send print job to"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) , m_plater(plater), m_export_3mf_cancel(false) @@ -1014,6 +1035,13 @@ void SelectMachineDialog::update_select_layout(PRINTER_TYPE type) void SelectMachineDialog::prepare_mode() { + m_is_in_sending_mode = false; + if (m_print_job) { + m_print_job->join(); + } + wxEndBusyCursor(); + Enable_Send_Button(true); + m_status_bar->reset(); if (m_simplebook->GetSelection() != 0) { m_simplebook->SetSelection(0); @@ -1024,6 +1052,7 @@ void SelectMachineDialog::prepare_mode() void SelectMachineDialog::sending_mode() { + m_is_in_sending_mode = true; if (m_simplebook->GetSelection() != 1){ m_simplebook->SetSelection(1); Layout(); @@ -1033,6 +1062,7 @@ void SelectMachineDialog::sending_mode() void SelectMachineDialog::finish_mode() { + m_is_in_sending_mode = false; m_simplebook->SetSelection(2); Layout(); Fit(); @@ -1064,7 +1094,7 @@ void SelectMachineDialog::sync_ams_mapping_result(std::vector &res ams_col = AmsTray::decode_color(f->color); } else { // default color - ams_col = wxColour(0xEE, 0xEE, 0xEE); + ams_col = wxColour(0xCE, 0xCE, 0xCE); } m->set_ams_info(ams_col, ams_id); @@ -1109,8 +1139,8 @@ bool SelectMachineDialog::do_ams_mapping(MachineObject *obj_) } else { // do not support ams mapping try to use order mapping bool is_valid = obj_->is_valid_mapping_result(m_ams_mapping_result); - if (!is_valid) { - // reset invalid result + if (result != 1 && !is_valid) { + //reset invalid result for (int i = 0; i < m_ams_mapping_result.size(); i++) { m_ams_mapping_result[i].tray_id = -1; m_ams_mapping_result[i].distance = 99999; @@ -1174,6 +1204,8 @@ void SelectMachineDialog::update_ams_status_msg(wxString msg, bool is_warning) Fit(); } } else { + msg = format_text(msg); + auto str_new = msg.ToStdString(); stripWhiteSpace(str_new); @@ -1207,6 +1239,8 @@ void SelectMachineDialog::update_priner_status_msg(wxString msg, bool is_warning Fit(); } } else { + msg = format_text(msg); + auto str_new = msg.ToStdString(); stripWhiteSpace(str_new); @@ -1238,7 +1272,7 @@ void SelectMachineDialog::update_print_status_msg(wxString msg, bool is_warning, } } -void SelectMachineDialog::show_status(PrintDialogStatus status) +void SelectMachineDialog::show_status(PrintDialogStatus status, std::vector params) { if (m_print_status != status) BOOST_LOG_TRIVIAL(info) << "select_machine_dialog: show_status = " << status; @@ -1306,7 +1340,11 @@ void SelectMachineDialog::show_status(PrintDialogStatus status) Enable_Send_Button(false); Enable_Refresh_Button(true); } else if (status == PrintDialogStatus::PrintStatusNeedUpgradingAms) { - wxString msg_text = _L("The filament index exceeds the AMS's slot count and cannot send the print job."); + wxString msg_text; + if (params.size() > 0) + msg_text = wxString::Format(_L("Filament %s exceeds the number of AMS slots. Please update the printer firmware to support AMS slot assignment."), params[0]); + else + msg_text = _L("Filament exceeds the number of AMS slots. Please update the printer firmware to support AMS slot assignment."); update_print_status_msg(msg_text, true, false); Enable_Send_Button(false); Enable_Refresh_Button(true); @@ -1320,6 +1358,15 @@ void SelectMachineDialog::show_status(PrintDialogStatus status) update_print_status_msg(msg_text, true, false); Enable_Send_Button(false); Enable_Refresh_Button(true); + } else if (status == PrintDialogStatus::PrintStatusAmsMappingU0Invalid) { + wxString msg_text; + if (params.size() > 1) + msg_text = wxString::Format(_L("Filament %s does not match the filament in AMS slot %s. Please update the printer firmware to support AMS slot assignment."), params[0], params[1]); + else + msg_text = _L("Filament does not match the filament in AMS slot. Please update the printer firmware to support AMS slot assignment."); + update_print_status_msg(msg_text, true, false); + Enable_Send_Button(false); + Enable_Refresh_Button(true); } else if (status == PrintDialogStatus::PrintStatusAmsMappingValid) { update_print_status_msg(wxEmptyString, false, false); Enable_Send_Button(true); @@ -1392,6 +1439,12 @@ void SelectMachineDialog::on_cancel(wxCloseEvent &event) void SelectMachineDialog::on_ok(wxCommandEvent &event) { + BOOST_LOG_TRIVIAL(info) << "print_job: on_ok to send"; + m_is_canceled = false; + Enable_Send_Button(false); + if (m_is_in_sending_mode) + return; + int result = 0; if (m_printer_last_select.empty()) { return; @@ -1406,31 +1459,55 @@ void SelectMachineDialog::on_ok(wxCommandEvent &event) return; } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "for send task, current printer id = " << m_printer_last_select << std::endl; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", print_job: for send task, current printer id = " << m_printer_last_select << std::endl; show_status(PrintDialogStatus::PrintStatusSending); m_status_bar->reset(); m_status_bar->set_prog_block(); + m_status_bar->set_cancel_callback_fina([this]() { + BOOST_LOG_TRIVIAL(info) << "print_job: enter canceled"; + if (m_print_job) { + if (m_print_job->is_running()) { + BOOST_LOG_TRIVIAL(info) << "print_job: canceled"; + m_print_job->cancel(); + } + m_print_job->join(); + } + m_is_canceled = true; + wxCommandEvent* event = new wxCommandEvent(EVT_PRINT_JOB_CANCEL); + wxQueueEvent(this, event); + }); + + if (m_is_canceled) { + BOOST_LOG_TRIVIAL(info) << "print_job: m_is_canceled"; + m_status_bar->set_status_text(task_canceled_text); + return; + } + + // enter sending mode + sending_mode(); // get ams_mapping_result std::string ams_mapping_array; get_ams_mapping_result(ams_mapping_array); result = m_plater->send_gcode(m_print_plate_idx, [this](int export_stage, int current, int total, bool &cancel) { + if (this->m_is_canceled) return; bool cancelled = false; wxString msg = _L("Preparing print job"); m_status_bar->update_status(msg, cancelled, 10, true); m_export_3mf_cancel = cancel = cancelled; }); - if (result < 0) { - wxString msg = _L("Abnormal print file data. Please slice again"); - m_status_bar->set_status_text(msg); + if (m_is_canceled || m_export_3mf_cancel) { + BOOST_LOG_TRIVIAL(info) << "print_job: m_export_3mf_cancel or m_is_canceled"; + m_status_bar->set_status_text(task_canceled_text); return; } - if (m_export_3mf_cancel) { - m_status_bar->set_status_text(task_canceled_text); + if (result < 0) { + wxString msg = _L("Abnormal print file data. Please slice again"); + m_status_bar->set_status_text(msg); return; } @@ -1442,6 +1519,11 @@ void SelectMachineDialog::on_ok(wxCommandEvent &event) return; } } + if (m_is_canceled || m_export_3mf_cancel) { + BOOST_LOG_TRIVIAL(info) << "print_job: m_export_3mf_cancel or m_is_canceled"; + m_status_bar->set_status_text(task_canceled_text); + return; + } m_print_job = std::make_shared(m_status_bar, m_plater, m_printer_last_select); m_print_job->m_dev_ip = obj_->dev_ip; @@ -1468,14 +1550,9 @@ void SelectMachineDialog::on_ok(wxCommandEvent &event) m_print_job->on_success([this]() { finish_mode(); }); - m_status_bar->set_cancel_callback_fina([this]() { - m_print_job->cancel(); - wxCommandEvent *event = new wxCommandEvent(EVT_PRINT_JOB_CANCEL); - wxQueueEvent(this, event); - }); - wxCommandEvent evt(m_plater->get_print_finished_event()); m_print_job->start(); + BOOST_LOG_TRIVIAL(info) << "print_job: start print job"; } void SelectMachineDialog::update_user_machine_list() @@ -1542,8 +1619,10 @@ void SelectMachineDialog::on_set_finish_mapping(wxCommandEvent &evt) void SelectMachineDialog::on_print_job_cancel(wxCommandEvent &evt) { - if (m_print_job->is_running()) { m_print_job->join(5 * 1000); } + BOOST_LOG_TRIVIAL(info) << "print_job: canceled"; show_status(PrintDialogStatus::PrintStatusSendingCanceled); + // enter prepare mode + prepare_mode(); } std::vector SelectMachineDialog::sort_string(std::vector strArray) @@ -1682,6 +1761,7 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event) } if (obj) { + obj->command_get_version(); dev->set_selected_machine(m_printer_last_select); update_select_layout(obj->printer_type); } else { @@ -1782,10 +1862,29 @@ void SelectMachineDialog::update_show_status() } if (!obj_->is_support_ams_mapping()) { - if (obj_->is_valid_mapping_result(m_ams_mapping_result)) { - show_status(PrintDialogStatus::PrintStatusAmsMappingByOrder); + int exceed_index = -1; + if (obj_->is_mapping_exceed_filament(m_ams_mapping_result, exceed_index)) { + std::vector params; + params.push_back(wxString::Format("%02d", exceed_index+1)); + show_status(PrintDialogStatus::PrintStatusNeedUpgradingAms, params); } else { - show_status(PrintDialogStatus::PrintStatusNeedUpgradingAms); + if (obj_->is_valid_mapping_result(m_ams_mapping_result)) { + show_status(PrintDialogStatus::PrintStatusAmsMappingByOrder); + } else { + int mismatch_index = -1; + for (int i = 0; i < m_ams_mapping_result.size(); i++) { + if (m_ams_mapping_result[i].mapping_result == MappingResult::MAPPING_RESULT_TYPE_MISMATCH) { + mismatch_index = m_ams_mapping_result[i].id; + break; + } + } + std::vector params; + if (mismatch_index >= 0) { + params.push_back(wxString::Format("%02d", mismatch_index+1)); + params.push_back(wxString::Format("%02d", mismatch_index+1)); + } + show_status(PrintDialogStatus::PrintStatusAmsMappingU0Invalid, params); + } } return; } @@ -1926,12 +2025,16 @@ void SelectMachineDialog::set_default() //sizer_thumbnail->Layout(); std::vector materials; + std::vector display_materials; { auto preset_bundle = wxGetApp().preset_bundle; for (auto filament_name : preset_bundle->filament_presets) { for (auto iter = preset_bundle->filaments.lbegin(); iter != preset_bundle->filaments.end(); iter++) { if (filament_name.compare(iter->name) == 0) { - materials.push_back(iter->config.get_filament_type()); + std::string display_filament_type; + std::string filament_type = iter->config.get_filament_type(display_filament_type); + display_materials.push_back(display_filament_type); + materials.push_back(filament_type); } } } @@ -1962,9 +2065,9 @@ void SelectMachineDialog::set_default() bmcache.parse_color(colour, rgb); auto colour_rgb = wxColour((int) rgb[0], (int) rgb[1], (int) rgb[2]); - if (extruder >= materials.size() || extruder < 0) + if (extruder >= materials.size() || extruder < 0 || extruder >= display_materials.size()) continue; - MaterialItem *item = new MaterialItem(this, colour_rgb, _L(materials[extruder])); + MaterialItem *item = new MaterialItem(this, colour_rgb, _L(display_materials[extruder])); m_sizer_material->Add(item, 0, wxALL, FromDIP(4)); item->Bind(wxEVT_LEFT_UP, [this, item, materials, extruder](wxMouseEvent &e) { @@ -2000,8 +2103,8 @@ void SelectMachineDialog::set_default() if (obj_ && obj_->has_ams()) { m_mapping_popup.set_current_filament_id(extruder); - m_mapping_popup.update_ams_data(obj_->amsList); m_mapping_popup.set_tag_texture(materials[extruder]); + m_mapping_popup.update_ams_data(obj_->amsList); m_mapping_popup.Popup(); } } diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index a026b50f06e..7143f188dfe 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -114,20 +114,19 @@ class MachineObjectPanel : public wxPanel PrinterBindState m_bind_state; PrinterState m_state; - wxBitmap m_unbind_img; - wxBitmap m_edit_name_img; - wxBitmap m_select_unbind_img; + ScalableBitmap m_unbind_img; + ScalableBitmap m_edit_name_img; + ScalableBitmap m_select_unbind_img; - wxBitmap m_printer_status_offline; - wxBitmap m_printer_status_busy; - wxBitmap m_printer_status_idle; - wxBitmap m_printer_status_lock; - wxBitmap m_printer_in_lan; + ScalableBitmap m_printer_status_offline; + ScalableBitmap m_printer_status_busy; + ScalableBitmap m_printer_status_idle; + ScalableBitmap m_printer_status_lock; + ScalableBitmap m_printer_in_lan; MachineObject *m_info; protected: - wxBitmap m_bitmap_type; wxStaticBitmap *m_bitmap_info; wxStaticBitmap *m_bitmap_bind; @@ -238,6 +237,7 @@ enum PrintDialogStatus { PrintStatusInPrinting, PrintStatusAmsMappingSuccess, PrintStatusAmsMappingInvalid, + PrintStatusAmsMappingU0Invalid, PrintStatusAmsMappingValid, PrintStatusAmsMappingByOrder, PrintStatusRefreshingMachineList, @@ -298,6 +298,7 @@ class SelectMachineDialog : public DPIDialog StateColor btn_bg_enable; int m_current_filament_id; + bool m_is_in_sending_mode { false }; wxGridSizer *m_sizer_select; wxBoxSizer * sizer_thumbnail; @@ -310,7 +311,8 @@ class SelectMachineDialog : public DPIDialog void stripWhiteSpace(std::string& str); - void update_ams_status_msg(wxString msg, bool is_warning = false); + wxString format_text(wxString &m_msg); + void update_ams_status_msg(wxString msg, bool is_warning = false); void update_priner_status_msg(wxString msg, bool is_warning = false); void update_print_status_msg(wxString msg, bool is_warning = false, bool is_printer = true); @@ -328,7 +330,7 @@ class SelectMachineDialog : public DPIDialog bool do_ams_mapping(MachineObject *obj_); bool get_ams_mapping_result(std::string &mapping_array_str); void prepare(int print_plate_idx); - void show_status(PrintDialogStatus status); + void show_status(PrintDialogStatus status, std::vector params = std::vector()); PrintDialogStatus get_status() { return m_print_status; } bool Show(bool show); @@ -337,6 +339,7 @@ class SelectMachineDialog : public DPIDialog wxObjectDataPtr machine_model; std::shared_ptr m_status_bar; bool m_export_3mf_cancel{false}; + bool m_is_canceled { false }; protected: std::vector m_list; diff --git a/src/slic3r/GUI/Selection.hpp b/src/slic3r/GUI/Selection.hpp index 5c24160f9a5..96a98e5ab5b 100644 --- a/src/slic3r/GUI/Selection.hpp +++ b/src/slic3r/GUI/Selection.hpp @@ -226,6 +226,7 @@ class Selection // BBS EMode m_volume_selection_mode{ Instance }; + bool m_volume_selection_locked { false }; public: Selection(); @@ -343,7 +344,10 @@ class Selection void translate(unsigned int object_idx, unsigned int instance_idx, const Vec3d& displacement); //BBS: add partplate related logic void notify_instance_update(int object_idx, int instance_idx); - void set_volume_selection_mode(EMode mode) { m_volume_selection_mode = mode; } + // BBS + void set_volume_selection_mode(EMode mode) { if (!m_volume_selection_locked) m_volume_selection_mode = mode; } + void lock_volume_selection_mode() { m_volume_selection_locked = true; } + void unlock_volume_selection_mode() { m_volume_selection_locked = false; } void erase(); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 69f2a35836b..a36349fede9 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -7,6 +7,10 @@ #include "BitmapCache.hpp" #include "GUI_App.hpp" +#include "slic3r/Utils/Http.hpp" +#include "libslic3r/Thread.hpp" + + namespace Slic3r { namespace GUI { #define TEMP_THRESHOLD_VAL 2 @@ -105,6 +109,7 @@ StatusBasePanel::StatusBasePanel(wxWindow *parent, wxWindowID id, const wxPoint m_project_task_panel = new wxPanel(this); m_project_task_panel->SetBackgroundColour(*wxWHITE); + auto m_project_task_sizer = create_project_task_page(m_project_task_panel); m_project_task_panel->SetSizer(m_project_task_sizer); m_project_task_panel->Layout(); @@ -145,7 +150,6 @@ StatusBasePanel::StatusBasePanel(wxWindow *parent, wxWindowID id, const wxPoint m_panel_separotor_bottom->SetBackgroundColour(STATUS_PANEL_BG); bSizer_status->Add(m_panel_separotor_bottom, 0, wxEXPAND | wxALL, 0); - this->SetSizerAndFit(bSizer_status); this->Layout(); } @@ -159,15 +163,15 @@ void StatusBasePanel::init_bitmaps() m_bitmap_item_prediction = create_scaled_bitmap("monitor_item_prediction", nullptr, 16); m_bitmap_item_cost = create_scaled_bitmap("monitor_item_cost", nullptr, 16); m_bitmap_item_print = create_scaled_bitmap("monitor_item_print", nullptr, 18); - m_bitmap_axis_home = create_scaled_bitmap("monitor_axis_home", nullptr, 32); - m_bitmap_lamp_on = create_scaled_bitmap("monitor_lamp_on", nullptr, 24); - m_bitmap_lamp_off = create_scaled_bitmap("monitor_lamp_off", nullptr, 24); - m_bitmap_fan_on = create_scaled_bitmap("monitor_fan_on", nullptr, 24); - m_bitmap_fan_off = create_scaled_bitmap("monitor_fan_off", nullptr, 24); - m_bitmap_speed = create_scaled_bitmap("monitor_speed", nullptr, 24); - m_bitmap_speed_active = create_scaled_bitmap("monitor_speed_active", nullptr, 24); - m_thumbnail_placeholder = create_scaled_bitmap("monitor_placeholder", nullptr, 120); - m_thumbnail_sdcard = create_scaled_bitmap("monitor_sdcard_thumbnail", nullptr, 120); + m_bitmap_axis_home = ScalableBitmap(this, "monitor_axis_home", 32); + m_bitmap_lamp_on = ScalableBitmap(this, "monitor_lamp_on", 24); + m_bitmap_lamp_off = ScalableBitmap(this, "monitor_lamp_off", 24); + m_bitmap_fan_on = ScalableBitmap(this, "monitor_fan_on", 24); + m_bitmap_fan_off = ScalableBitmap(this, "monitor_fan_off", 24); + m_bitmap_speed = ScalableBitmap(this, "monitor_speed", 24); + m_bitmap_speed_active = ScalableBitmap(this, "monitor_speed_active", 24); + m_thumbnail_placeholder = ScalableBitmap(this, "monitor_placeholder", 120); + m_thumbnail_sdcard = ScalableBitmap(this, "monitor_sdcard_thumbnail", 120); //m_bitmap_camera = create_scaled_bitmap("monitor_camera", nullptr, 18); m_bitmap_extruder = *cache.load_png("monitor_extruder", FromDIP(28), FromDIP(70), false, false); m_bitmap_sdcard_state_on = create_scaled_bitmap("sdcard_state_on", nullptr, 16); @@ -278,7 +282,7 @@ wxBoxSizer *StatusBasePanel::create_project_task_page(wxWindow *parent) m_printing_sizer = new wxBoxSizer(wxHORIZONTAL); m_printing_sizer->SetMinSize(wxSize(PAGE_MIN_WIDTH, -1)); - m_bitmap_thumbnail = new wxStaticBitmap(parent, wxID_ANY, m_thumbnail_placeholder, wxDefaultPosition, TASK_THUMBNAIL_SIZE, 0); + m_bitmap_thumbnail = new wxStaticBitmap(parent, wxID_ANY, m_thumbnail_placeholder.bmp(), wxDefaultPosition, TASK_THUMBNAIL_SIZE, 0); m_printing_sizer->Add(m_bitmap_thumbnail, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, FromDIP(12)); @@ -392,14 +396,11 @@ wxBoxSizer *StatusBasePanel::create_project_task_page(wxWindow *parent) m_staticText_progress_percent->SetFont(::Label::Head_13); m_staticText_progress_percent->SetForegroundColour(wxColour(0, 174, 66)); - m_staticText_progress_left = new wxStaticText(penel_text, wxID_ANY, _L("N/A"), wxDefaultPosition, wxDefaultSize, 0); m_staticText_progress_left->Wrap(-1); m_staticText_progress_left->SetFont(wxFont(10, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("HarmonyOS Sans SC"))); m_staticText_progress_left->SetForegroundColour(wxColour(146, 146, 146)); - - //fgSizer_task->Add(bSizer_buttons, 0, wxEXPAND, 0); //fgSizer_task->Add(0, 0, 0, wxEXPAND, FromDIP(5)); @@ -417,7 +418,6 @@ wxBoxSizer *StatusBasePanel::create_project_task_page(wxWindow *parent) penel_text->SetSizer(bSizer_text); penel_text->Layout(); - bSizer_buttons->Add(penel_text, 1, wxEXPAND | wxALL, 0); bSizer_buttons->Add(panel_button_block, 0, wxALIGN_CENTER | wxALL, 0); @@ -431,6 +431,37 @@ wxBoxSizer *StatusBasePanel::create_project_task_page(wxWindow *parent) sizer->Add(m_printing_sizer, 0, wxEXPAND | wxALL, 0); + m_staticline = new wxPanel( parent, wxID_ANY); + m_staticline->SetBackgroundColour(wxColour(238,238,238)); + m_staticline->Layout(); + m_staticline->Hide(); + + sizer->Add(0, 0, 0, wxTOP, FromDIP(15)); + sizer->Add(m_staticline, 0, wxEXPAND|wxALL, FromDIP(10)); + + m_panel_error_txt = new wxPanel(parent, wxID_ANY); + m_panel_error_txt->SetBackgroundColour(*wxWHITE); + + wxBoxSizer *static_text_sizer = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer *text_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_error_text = new wxStaticText2(m_panel_error_txt); + m_error_text->SetForegroundColour(PAGE_TITLE_FONT_COL); + text_sizer->Add(m_error_text, 1, wxEXPAND|wxLEFT, FromDIP(17)); + m_button_clean = new Button(m_panel_error_txt, _L("Clean")); + m_button_clean->SetBackgroundColor(abort_bg); + m_button_clean->SetBorderColor(abort_bd); + m_button_clean->SetTextColor(abort_text); + m_button_clean->SetFont(Label::Body_10); + m_button_clean->SetMinSize(TASK_BUTTON_SIZE2); + + static_text_sizer->Add(text_sizer, 1, wxEXPAND|wxTOP, FromDIP(7)); + static_text_sizer->Add( FromDIP(10), 0, 0, 0, 0 ); + static_text_sizer->Add(m_button_clean, 0, wxALIGN_CENTRE_VERTICAL|wxRIGHT,FromDIP(5)); + + m_panel_error_txt->SetSizer(static_text_sizer); + m_panel_error_txt->Hide(); + sizer->Add(m_panel_error_txt, 0, wxEXPAND | wxALL,0); sizer->Add(0, FromDIP(12), 0); m_tasklist_sizer = new wxBoxSizer(wxVERTICAL); @@ -451,11 +482,19 @@ wxBoxSizer *StatusBasePanel::create_machine_control_page(wxWindow *parent) m_staticText_control->SetFont(PAGE_TITLE_FONT); m_staticText_control->SetForegroundColour(PAGE_TITLE_FONT_COL); - m_calibration_btn = new Button(m_panel_control_title, _L("Start Calibration")); StateColor btn_bg_green(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), std::pair(wxColour(27, 136, 68), StateColor::Pressed), - std::pair(wxColour(61, 203, 115), StateColor::Hovered), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); + std::pair(wxColour(61, 203, 115), StateColor::Hovered), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); StateColor btn_bd_green(std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Disabled), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Enabled)); + m_options_btn = new Button(m_panel_control_title, _L("Print Options")); + m_options_btn->SetBackgroundColor(btn_bg_green); + m_options_btn->SetBorderColor(btn_bd_green); + m_options_btn->SetTextColor(*wxWHITE); + m_options_btn->SetSize(wxSize(FromDIP(128), FromDIP(26))); + m_options_btn->SetMinSize(wxSize(-1, FromDIP(26))); + + + m_calibration_btn = new Button(m_panel_control_title, _L("Calibration")); m_calibration_btn->SetBackgroundColor(btn_bg_green); m_calibration_btn->SetBorderColor(btn_bd_green); m_calibration_btn->SetTextColor(*wxWHITE); @@ -464,6 +503,7 @@ wxBoxSizer *StatusBasePanel::create_machine_control_page(wxWindow *parent) bSizer_control_title->Add(m_staticText_control, 1, wxALIGN_CENTER_VERTICAL | wxLEFT, PAGE_TITLE_LEFT_MARGIN); bSizer_control_title->Add(0, 0, 1, wxEXPAND, 0); + bSizer_control_title->Add(m_options_btn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(10)); bSizer_control_title->Add(m_calibration_btn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(10)); m_panel_control_title->SetSizer(bSizer_control_title); @@ -477,7 +517,7 @@ wxBoxSizer *StatusBasePanel::create_machine_control_page(wxWindow *parent) bSizer_control->Add(temp_axis_ctrl_sizer, 0, wxEXPAND, 0); auto m_ams_ctrl_sizer = create_ams_group(parent); - bSizer_control->Add(m_ams_ctrl_sizer, 0, wxEXPAND, 0); + bSizer_control->Add(m_ams_ctrl_sizer, 0, wxEXPAND|wxBOTTOM, FromDIP(10)); bSizer_right->Add(bSizer_control, 1, wxEXPAND | wxALL, 0); @@ -563,7 +603,6 @@ wxBoxSizer *StatusBasePanel::create_temp_control(wxWindow *parent) m_tempCtrl_frame->SetBorderColor(StateColor(std::make_pair(*wxWHITE, (int) StateColor::Disabled), std::make_pair(BUTTON_HOVER_COL, (int) StateColor::Focused), std::make_pair(BUTTON_HOVER_COL, (int) StateColor::Hovered), std::make_pair(*wxWHITE, (int) StateColor::Normal))); sizer->Add(m_tempCtrl_frame, 0, wxEXPAND | wxALL, 1); - line = new StaticLine(parent); line->SetLineColour(STATIC_BOX_LINE_COL); sizer->Add(line, 0, wxEXPAND | wxLEFT | wxRIGHT, 12); @@ -705,6 +744,7 @@ wxBoxSizer *StatusBasePanel::create_bed_control(wxWindow *parent) bSizer_z_ctrl->AddStretchSpacer(); m_bpButton_z_10 = new Button(panel, wxString("10"), "monitor_bed_up", 0, FromDIP(15)); m_bpButton_z_10->SetFont(::Label::Body_13); + m_bpButton_z_10->SetBorderWidth(2); m_bpButton_z_10->SetBackgroundColor(z_10_ctrl_bg); m_bpButton_z_10->SetBorderColor(z_10_ctrl_bd); m_bpButton_z_10->SetTextColor(StateColor(std::make_pair(DISCONNECT_TEXT_COL, (int) StateColor::Disabled), std::make_pair(NORMAL_TEXT_COL, (int) StateColor::Normal))); @@ -715,6 +755,7 @@ wxBoxSizer *StatusBasePanel::create_bed_control(wxWindow *parent) m_bpButton_z_1 = new Button(panel, wxString(" 1"), "monitor_bed_up", 0, FromDIP(15)); m_bpButton_z_1->SetFont(::Label::Body_13); + m_bpButton_z_1->SetBorderWidth(2); m_bpButton_z_1->SetBackgroundColor(z_1_ctrl_bg); m_bpButton_z_1->SetBorderColor(z_1_ctrl_bd); m_bpButton_z_1->SetMinSize(Z_BUTTON_SIZE); @@ -726,6 +767,7 @@ wxBoxSizer *StatusBasePanel::create_bed_control(wxWindow *parent) m_bpButton_z_down_1 = new Button(panel, wxString(" 1"), "monitor_bed_down", 0, FromDIP(15)); m_bpButton_z_down_1->SetFont(::Label::Body_13); + m_bpButton_z_down_1->SetBorderWidth(2); m_bpButton_z_down_1->SetBackgroundColor(z_1_ctrl_bg); m_bpButton_z_down_1->SetBorderColor(z_1_ctrl_bd); m_bpButton_z_down_1->SetMinSize(Z_BUTTON_SIZE); @@ -735,6 +777,7 @@ wxBoxSizer *StatusBasePanel::create_bed_control(wxWindow *parent) m_bpButton_z_down_10 = new Button(panel, wxString("10"), "monitor_bed_down", 0, FromDIP(15)); m_bpButton_z_down_10->SetFont(::Label::Body_13); + m_bpButton_z_down_10->SetBorderWidth(2); m_bpButton_z_down_10->SetBackgroundColor(z_10_ctrl_bg); m_bpButton_z_down_10->SetBorderColor(z_10_ctrl_bd); m_bpButton_z_down_10->SetMinSize(Z_BUTTON_SIZE); @@ -772,6 +815,7 @@ wxBoxSizer *StatusBasePanel::create_extruder_control(wxWindow *parent) StateColor e_ctrl_bg(std::pair(BUTTON_PRESS_COL, StateColor::Pressed), std::pair(BUTTON_NORMAL1_COL, StateColor::Normal)); StateColor e_ctrl_bd(std::pair(BUTTON_HOVER_COL, StateColor::Hovered), std::pair(BUTTON_NORMAL1_COL, StateColor::Normal)); m_bpButton_e_10 = new Button(panel, "", "monitor_extruder_up", 0, FromDIP(22)); + m_bpButton_e_10->SetBorderWidth(2); m_bpButton_e_10->SetBackgroundColor(e_ctrl_bg); m_bpButton_e_10->SetBorderColor(e_ctrl_bd); m_bpButton_e_10->SetMinSize(wxSize(FromDIP(40), FromDIP(40))); @@ -786,6 +830,7 @@ wxBoxSizer *StatusBasePanel::create_extruder_control(wxWindow *parent) bSizer_e_ctrl->Add(m_bitmap_extruder_img, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP | wxBOTTOM, FromDIP(5)); bSizer_e_ctrl->Add(0, FromDIP(7), 0, 0, 0); m_bpButton_e_down_10 = new Button(panel, "", "monitor_extruder_down", 0, FromDIP(22)); + m_bpButton_e_down_10->SetBorderWidth(2); m_bpButton_e_down_10->SetBackgroundColor(e_ctrl_bg); m_bpButton_e_down_10->SetBorderColor(e_ctrl_bd); m_bpButton_e_down_10->SetMinSize(wxSize(FromDIP(40), FromDIP(40))); @@ -829,36 +874,25 @@ wxBoxSizer *StatusBasePanel::create_ams_group(wxWindow *parent) { auto sizer = new wxBoxSizer(wxVERTICAL); auto sizer_box = new wxBoxSizer(wxVERTICAL); - auto box = new RoundedRectangle(parent, wxColour(0xEE, 0xEE, 0xEE), wxDefaultPosition, wxDefaultSize, 5, 1); + m_ams_control_box = new RoundedRectangle(parent, wxColour(0xEE, 0xEE, 0xEE), wxDefaultPosition, wxDefaultSize, 5, 1); + m_ams_control_box->SetMinSize(wxSize(FromDIP(530), FromDIP(310))); + m_ams_control_box->SetBackgroundColour(*wxWHITE); #if !BBL_RELEASE_TO_PUBLIC - m_ams_debug = new wxStaticText(box, wxID_ANY, _L("Debug Info"), wxDefaultPosition, wxDefaultSize, 0); + m_ams_debug = new wxStaticText(m_ams_control_box, wxID_ANY, _L("Debug Info"), wxDefaultPosition, wxDefaultSize, 0); sizer_box->Add(m_ams_debug, 0, wxALIGN_CENTER_HORIZONTAL, 0); m_ams_debug->Hide(); #endif - m_ams_control = new AMSControl(box, wxID_ANY); - m_ams_control->SetMinSize(m_ams_control->GetSize()); + m_ams_control = new AMSControl(m_ams_control_box, wxID_ANY); + //m_ams_control->SetMinSize(wxSize(FromDIP(510), FromDIP(286))); m_ams_control->SetDoubleBuffered(true); sizer_box->Add(m_ams_control, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(10)); - box->SetBackgroundColour(*wxWHITE); - box->SetSizer(sizer_box); - box->Layout(); - sizer->Add(box, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(9)); - - // display demo, to be removed - // auto caninfo0_0 = Caninfo{"can0", _L("PLA1"), *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; - // auto caninfo0_1 = Caninfo{"can1", _L("PLA2"), wxColour(255,192,203), AMSCanType::AMS_CAN_TYPE_BRAND}; - // auto caninfo0_2 = Caninfo{"can2", _L("PLA3"), *wxWHITE, AMSCanType::AMS_CAN_TYPE_THIRDBRAND}; - // auto caninfo0_3 = Caninfo{"cam3", _L("PLA4"), *wxWHITE, AMSCanType::AMS_CAN_TYPE_THIRDBRAND}; - // auto caninfo0_33 = Caninfo{"can43", _L("DDD"), wxColour(148,0,211), AMSCanType::AMS_CAN_TYPE_THIRDBRAND}; - - // AMSinfo ams1 = AMSinfo{"ams0", std::vector{caninfo0_0, caninfo0_1}}; - // AMSinfo ams2 = AMSinfo{"ams1", std::vector{caninfo0_0, caninfo0_1, caninfo0_2}}; - // AMSinfo ams3 = AMSinfo{"ams2", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; - // AMSinfo ams4 = AMSinfo{"ams3", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_33}}; - // std::vector ams_info{ams1,ams2,ams3,ams4}; - // m_ams_control->UpdateAms(ams_info); + m_ams_control_box->SetBackgroundColour(*wxWHITE); + m_ams_control_box->SetSizer(sizer_box); + m_ams_control_box->Layout(); + m_ams_control_box->Fit(); + sizer->Add(m_ams_control_box, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(0)); return sizer; } @@ -866,6 +900,8 @@ void StatusBasePanel::show_ams_group(bool show) { if (m_show_ams_group != show) { m_ams_control->Show(show); + m_ams_control_box->Show(show); + Fit(); } m_show_ams_group = show; } @@ -916,6 +952,7 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co m_buttons.push_back(m_button_pause_resume); m_buttons.push_back(m_button_abort); m_buttons.push_back(m_button_unload); + m_buttons.push_back(m_button_clean); m_buttons.push_back(m_bpButton_z_10); m_buttons.push_back(m_bpButton_z_1); m_buttons.push_back(m_bpButton_z_down_1); @@ -924,7 +961,6 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co m_buttons.push_back(m_bpButton_e_down_10); obj = nullptr; - /* set default values */ m_switch_lamp->SetValue(false); m_switch_printing_fan->SetValue(false); @@ -945,6 +981,7 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co } }); + // Connect Events //m_bitmap_thumbnail->Connect(wxEVT_ENTER_WINDOW, wxMouseEventHandler(StatusPanel::on_thumbnail_enter), NULL, this); //m_bitmap_thumbnail->Connect(wxEVT_LEAVE_WINDOW, wxMouseEventHandler(StatusPanel::on_thumbnail_leave), NULL, this); @@ -953,6 +990,7 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co m_button_pause_resume->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_pause_resume), NULL, this); m_button_abort->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_abort), NULL, this); + m_button_clean->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_clean), NULL, this); m_tempCtrl_bed->Connect(wxEVT_KILL_FOCUS, wxFocusEventHandler(StatusPanel::on_bed_temp_kill_focus), NULL, this); m_tempCtrl_bed->Connect(wxEVT_SET_FOCUS, wxFocusEventHandler(StatusPanel::on_bed_temp_set_focus), NULL, this); m_tempCtrl_nozzle->Connect(wxEVT_KILL_FOCUS, wxFocusEventHandler(StatusPanel::on_nozzle_temp_kill_focus), NULL, this); @@ -974,9 +1012,11 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co Bind(EVT_AMS_REFRESH_RFID, &StatusPanel::on_ams_refresh_rfid, this); Bind(EVT_AMS_ON_SELECTED, &StatusPanel::on_ams_selected, this); Bind(EVT_AMS_ON_FILAMENT_EDIT, &StatusPanel::on_filament_edit, this); + Bind(EVT_UPDATE_ERROR_MESSAGE, &StatusPanel::on_update_error_message, this); m_switch_speed->Connect(wxEVT_LEFT_DOWN, wxCommandEventHandler(StatusPanel::on_switch_speed), NULL, this); m_calibration_btn->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_start_calibration), NULL, this); + m_options_btn->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_show_print_options), NULL, this); } StatusPanel::~StatusPanel() @@ -987,6 +1027,7 @@ StatusPanel::~StatusPanel() m_recording_button->Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatusPanel::on_switch_recording), NULL, this); m_button_pause_resume->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_pause_resume), NULL, this); m_button_abort->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_abort), NULL, this); + m_button_clean->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_clean), NULL, this); m_tempCtrl_bed->Disconnect(wxEVT_KILL_FOCUS, wxFocusEventHandler(StatusPanel::on_bed_temp_kill_focus), NULL, this); m_tempCtrl_bed->Disconnect(wxEVT_SET_FOCUS, wxFocusEventHandler(StatusPanel::on_bed_temp_set_focus), NULL, this); m_tempCtrl_nozzle->Disconnect(wxEVT_KILL_FOCUS, wxFocusEventHandler(StatusPanel::on_nozzle_temp_kill_focus), NULL, this); @@ -1003,6 +1044,7 @@ StatusPanel::~StatusPanel() m_bpButton_e_down_10->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_axis_ctrl_e_down_10), NULL, this); m_switch_speed->Disconnect(wxEVT_LEFT_DOWN, wxCommandEventHandler(StatusPanel::on_switch_speed), NULL, this); m_calibration_btn->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_start_calibration), NULL, this); + m_options_btn->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_show_print_options), NULL, this); m_button_unload->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_start_unload), NULL, this); } @@ -1014,6 +1056,8 @@ void StatusPanel::init_scaled_buttons() m_button_pause_resume->SetCornerRadius(FromDIP(12)); m_button_abort->SetMinSize(wxSize(FromDIP(48), FromDIP(24))); m_button_abort->SetCornerRadius(FromDIP(12)); + m_button_clean->SetMinSize(wxSize(FromDIP(48), FromDIP(24))); + m_button_clean->SetCornerRadius(FromDIP(12)); m_button_unload->SetMinSize(wxSize(-1, FromDIP(24))); m_button_unload->SetCornerRadius(FromDIP(10)); m_bpButton_z_10->SetMinSize(Z_BUTTON_SIZE); @@ -1066,6 +1110,7 @@ void StatusPanel::show_task_list_info(bool show) m_tasklist_sizer->Hide(m_tasklist_caption_sizer); } Layout(); + } void StatusPanel::update_tasklist_info() @@ -1091,6 +1136,20 @@ void StatusPanel::on_subtask_abort(wxCommandEvent &event) if (obj) obj->command_task_abort(); } +void StatusPanel::error_info_reset() +{ + m_staticline->Hide(); + m_panel_error_txt->Hide(); + m_panel_error_txt->GetParent()->Layout(); + m_error_text->SetLabel(""); + before_error_code = 0; +} + +void StatusPanel::on_subtask_clean(wxCommandEvent &event) +{ + error_info_reset(); +} + void StatusPanel::on_webrequest_state(wxWebRequestEvent &evt) { BOOST_LOG_TRIVIAL(trace) << "monitor: monitor_panel web request state = " << evt.GetState(); @@ -1098,7 +1157,7 @@ void StatusPanel::on_webrequest_state(wxWebRequestEvent &evt) case wxWebRequest::State_Completed: { wxImage img(*evt.GetResponse().GetStream()); img_list.insert(std::make_pair(m_request_url, img)); - wxImage resize_img = img.Scale(m_bitmap_thumbnail->GetSize().x, m_bitmap_thumbnail->GetSize().y); + wxImage resize_img = img.Scale(m_bitmap_thumbnail->GetSize().x, m_bitmap_thumbnail->GetSize().y, wxIMAGE_QUALITY_HIGH); m_bitmap_thumbnail->SetBitmap(resize_img); break; } @@ -1155,6 +1214,7 @@ void StatusPanel::update(MachineObject *obj) update_ams(obj); update_cali(obj); + if (obj) { if (calibration_dlg == nullptr) { calibration_dlg = new CalibrationDialog(); @@ -1163,13 +1223,51 @@ void StatusPanel::update(MachineObject *obj) calibration_dlg->update_machine_obj(obj); } calibration_dlg->update_cali(obj); + + if (print_options_dlg == nullptr) { + print_options_dlg = new PrintOptionsDialog(this); + print_options_dlg->update_machine_obj(obj); + } else { + print_options_dlg->update_machine_obj(obj); + } + print_options_dlg->update_options(obj); + + update_error_message(); } - upodate_camera_state(obj->has_recording(), obj->has_timelapse(), obj->has_sdcard()); m_machine_ctrl_panel->Thaw(); } +void StatusPanel::on_update_error_message(wxCommandEvent &event) +{ + m_error_text->SetLabel(event.GetString()); + m_staticline->Show(); + m_panel_error_txt->Show(); +} + +void StatusPanel::update_error_message() +{ + if (obj->print_error <= 0) { + before_error_code = obj->print_error; + + if (m_panel_error_txt->IsShown()) + error_info_reset(); + return; + } + + if (before_error_code != obj->print_error) { + get_error_message_thread = new boost::thread(Slic3r::create_thread([&] { + std::string message = show_error_message(obj->print_error); + wxCommandEvent event(EVT_UPDATE_ERROR_MESSAGE); + event.SetString(wxString(message)); + event.SetEventObject(this); + wxPostEvent(this, event); + })); + before_error_code = obj->print_error; + } +} + void StatusPanel::show_printing_status(bool ctrl_area, bool temp_area) { if (!ctrl_area) { @@ -1503,7 +1601,7 @@ void StatusPanel::update_cali(MachineObject *obj) } } else { // IDLE - m_calibration_btn->SetLabel(_L("Start Calibration")); + m_calibration_btn->SetLabel(_L("Calibration")); // disable in printing if (obj->is_in_printing()) { m_calibration_btn->Disable(); @@ -1556,8 +1654,13 @@ void StatusPanel::update_subtask(MachineObject *obj) m_button_pause_resume->SetLabel(_L("Resume")); else m_button_pause_resume->SetLabel(_L("Pause")); - m_button_abort->Enable(true); - m_button_pause_resume->Enable(true); + if (obj->print_status == "FINISH") { + m_button_abort->Enable(false); + m_button_pause_resume->Enable(false); + } else { + m_button_abort->Enable(true); + m_button_pause_resume->Enable(true); + } // update printing stage m_printing_stage_value->SetLabelText(obj->get_curr_stage()); update_left_time(obj->mc_left_time); @@ -1622,7 +1725,7 @@ void StatusPanel::update_sdcard_subtask(MachineObject *obj) if (!obj) return; if (!m_load_sdcard_thumbnail) { - m_bitmap_thumbnail->SetBitmap(m_thumbnail_sdcard); + m_bitmap_thumbnail->SetBitmap(m_thumbnail_sdcard.bmp()); m_load_sdcard_thumbnail = true; } } @@ -1637,7 +1740,7 @@ void StatusPanel::reset_printing_values() m_printing_stage_value->SetLabelText(""); m_staticText_progress_left->SetLabelText(NA_STR); m_staticText_progress_percent->SetLabelText(NA_STR); - m_bitmap_thumbnail->SetBitmap(m_thumbnail_placeholder); + m_bitmap_thumbnail->SetBitmap(m_thumbnail_placeholder.bmp()); m_start_loading_thumbnail = false; m_load_sdcard_thumbnail = false; this->Layout(); @@ -1794,6 +1897,10 @@ void StatusPanel::on_filament_edit(wxCommandEvent &event) m_filament_setting_dlg->ams_id = ams_id_int; m_filament_setting_dlg->tray_id = tray_id_int; + std::string sn_number; + std::string filament; + std::string temp_max; + std::string temp_min; auto it = obj->amsList.find(ams_id); if (it != obj->amsList.end()) { auto tray_it = it->second->trayList.find(tray_id); @@ -1802,10 +1909,16 @@ void StatusPanel::on_filament_edit(wxCommandEvent &event) m_filament_setting_dlg->set_color(color); m_filament_setting_dlg->ams_filament_id = tray_it->second->setting_id; m_filament_setting_dlg->m_is_third = !MachineObject::is_bbl_filament(tray_it->second->tag_uid); + if (!m_filament_setting_dlg->m_is_third) { + sn_number = tray_it->second->uuid; + filament = tray_it->second->sub_brands; + temp_max = tray_it->second->nozzle_temp_max; + temp_min = tray_it->second->nozzle_temp_min; + } } } - m_filament_setting_dlg->Popup(true); m_filament_setting_dlg->SetPosition(m_ams_control->GetScreenPosition()); + m_filament_setting_dlg->Popup(filament, sn_number, temp_min, temp_max); } catch (...) { ; } @@ -2061,6 +2174,21 @@ void StatusPanel::on_xyz_abs(wxCommandEvent &event) if (obj) obj->command_xyz_abs(); } +void StatusPanel::on_show_print_options(wxCommandEvent &event) +{ + if (obj) { + if (print_options_dlg == nullptr) { + print_options_dlg = new PrintOptionsDialog(this); + print_options_dlg->update_machine_obj(obj); + print_options_dlg->ShowModal(); + } + else { + print_options_dlg->update_machine_obj(obj); + print_options_dlg->ShowModal(); + } + } +} + void StatusPanel::on_start_calibration(wxCommandEvent &event) { if (obj) { @@ -2106,8 +2234,10 @@ void StatusPanel::set_default() reset_temp_misc_control(); m_ams_control->Hide(); + m_ams_control_box->Hide(); m_ams_control->Reset(); clean_tasklist_info(); + error_info_reset(); } void StatusPanel::show_status(int status) @@ -2122,9 +2252,11 @@ void StatusPanel::show_status(int status) m_text_tasklist_caption->SetForegroundColour(DISCONNECT_TEXT_COL); show_printing_status(false, false); m_calibration_btn->Disable(); + m_options_btn->Disable(); } else if ((status & (int) MonitorStatus::MONITOR_NORMAL) != 0) { show_printing_status(true, true); m_calibration_btn->Disable(); + m_options_btn->Enable(); } } @@ -2202,6 +2334,9 @@ void StatusPanel::msw_rescale() m_calibration_btn->SetMinSize(wxSize(-1, FromDIP(26))); m_calibration_btn->Rescale(); + m_options_btn->SetMinSize(wxSize(-1, FromDIP(26))); + m_options_btn->Rescale(); + Layout(); Refresh(); } diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 046d9c8fcfe..128f3cf45d2 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -17,6 +17,7 @@ #include "MediaPlayCtrl.h" #include "AMSSetting.hpp" #include "Calibration.hpp" +#include "PrintOptionsDialog.hpp" #include "AMSMaterialsSetting.hpp" #include "Widgets/SwitchButton.hpp" #include "Widgets/AxisCtrlButton.hpp" @@ -26,8 +27,8 @@ #include "Widgets/ProgressBar.hpp" #include "Widgets/ImageSwitchButton.hpp" #include "Widgets/AMSControl.hpp" - - +#include "UpdateErrorMessage.hpp" +#include "Widgets/wxStaticText2.hpp" class StepIndicator; #define COMMAND_TIMEOUT_U0 15 @@ -65,18 +66,18 @@ class StatusBasePanel : public wxScrolledWindow { protected: wxBitmap m_item_placeholder; - wxBitmap m_thumbnail_placeholder; - wxBitmap m_thumbnail_sdcard; + ScalableBitmap m_thumbnail_placeholder; + ScalableBitmap m_thumbnail_sdcard; wxBitmap m_bitmap_item_prediction; wxBitmap m_bitmap_item_cost; wxBitmap m_bitmap_item_print; - wxBitmap m_bitmap_speed; - wxBitmap m_bitmap_speed_active; - wxBitmap m_bitmap_axis_home; - wxBitmap m_bitmap_lamp_on; - wxBitmap m_bitmap_lamp_off; - wxBitmap m_bitmap_fan_on; - wxBitmap m_bitmap_fan_off; + ScalableBitmap m_bitmap_speed; + ScalableBitmap m_bitmap_speed_active; + ScalableBitmap m_bitmap_axis_home; + ScalableBitmap m_bitmap_lamp_on; + ScalableBitmap m_bitmap_lamp_off; + ScalableBitmap m_bitmap_fan_on; + ScalableBitmap m_bitmap_fan_off; wxBitmap m_bitmap_extruder; CameraRecordingStatus m_state_recording{CameraRecordingStatus::RECORDING_NONE}; @@ -119,6 +120,7 @@ class StatusBasePanel : public wxScrolledWindow Button * m_button_report; Button * m_button_pause_resume; Button * m_button_abort; + Button * m_button_clean; wxStaticText * m_text_tasklist_caption; @@ -157,6 +159,7 @@ class StatusBasePanel : public wxScrolledWindow wxStaticText * m_ams_debug; bool m_show_ams_group{false}; AMSControl* m_ams_control; + RoundedRectangle* m_ams_control_box; wxStaticBitmap *m_ams_extruder_img; wxStaticBitmap* m_bitmap_extruder_img; wxPanel * m_panel_separator_right; @@ -165,9 +168,13 @@ class StatusBasePanel : public wxScrolledWindow wxBoxSizer * m_printing_sizer; wxBoxSizer * m_tasklist_sizer; wxBoxSizer * m_tasklist_caption_sizer; + wxPanel* m_panel_error_txt; + wxPanel* m_staticline; + wxStaticText2 * m_error_text; wxStaticText* m_staticText_calibration_caption; wxStaticText* m_staticText_calibration_caption_top; wxStaticText* m_calibration_text; + Button* m_options_btn; Button* m_calibration_btn; StepIndicator* m_calibration_flow; @@ -214,8 +221,9 @@ class StatusBasePanel : public wxScrolledWindow wxBoxSizer *create_extruder_control(wxWindow *parent); void reset_temp_misc_control(); - + int before_error_code = 0; wxBoxSizer *create_ams_group(wxWindow *parent); + wxBoxSizer *create_settings_group(wxWindow *parent); void show_ams_group(bool show = true); void upodate_camera_state(bool recording, bool timelapse, bool has_sdcard); @@ -233,14 +241,14 @@ class StatusPanel : public StatusBasePanel std::shared_ptr m_camera_popup; std::vector slice_info_list; AMSSetting *m_ams_setting_dlg{nullptr}; - CalibrationDialog* calibration_dlg{nullptr}; + PrintOptionsDialog* print_options_dlg { nullptr }; + CalibrationDialog* calibration_dlg {nullptr}; AMSMaterialsSetting *m_filament_setting_dlg{nullptr}; wxString m_request_url; bool m_start_loading_thumbnail = false; bool m_load_sdcard_thumbnail = false; wxWebRequest web_request; - bool bed_temp_input = false; bool nozzle_temp_input = false; int speed_lvl = 1; // 0 - 3 @@ -250,9 +258,8 @@ class StatusPanel : public StatusBasePanel std::map img_list; // key: url, value: wxBitmap png Image std::vector